From eb99e515b3b058781fc57a2f7db130b6bc73281e Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 22 Feb 2016 15:31:13 -0500 Subject: More documentation --- keyboard/planck/keymaps/cbbrowne/README.md | 20 ++++++++++++++++---- keyboard/planck/keymaps/cbbrowne/keymap.c | 10 +++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/keyboard/planck/keymaps/cbbrowne/README.md b/keyboard/planck/keymaps/cbbrowne/README.md index 323e9a8596..e190c8b41e 100644 --- a/keyboard/planck/keymaps/cbbrowne/README.md +++ b/keyboard/planck/keymaps/cbbrowne/README.md @@ -10,7 +10,19 @@ doing sundry experimentation: * To figure things out about the toolset * I'm an Emacs guy, so will be needing a fair bit of tuning * It made sense to mess around some with keyboard maps. - - I added Workman alongside Dvorak and Colemak - - Boy, oh boy, these don't help - - I have done 30 years of learning of Emacs key mappings, and these alternative keyboards massively mess me up - - I added a keypad, originally based on keymaps/numpad.c, but mighty substantially revised, as that one seems to be rotated 90 degrees from usual conventions for number pads \ No newline at end of file + - I tried added Workman alongside Dvorak and Colemak + - Boy, oh boy, these don't help!!! + - I have done 30 years of learning of Emacs key mappings, and + these alternative keyboards massively mess me up + - I added a keypad, originally based on keymaps/numpad.c, but + mighty substantially revised, as that one seems to be rotated 90 + degrees from usual conventions for number pads + * The keypad layer also includes some sample "hacks" of cool things, + all using actions attached in using the function action_get_macro() + - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example + of a key generating a bunch of keystrokes. The keystroke is + sufficiently inconvenient that it isn't terribly practical for me + to use it, but hey, it shows how others might use this facility + in a more useful context. + - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random + - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 250d412ced..f46ca85de9 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -99,10 +99,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KP] = { /* Key Pad */ - {KC_ESC, M(M_USERNAME), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_ENTER, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_BSPC}, - {KC_LCTL, M(M_RANDDIGIT), KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_MINUS, KC_7, KC_8, KC_9, KC_ENT}, - {KC_LSFT, M(M_RANDLETTER), KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_PLUS, KC_4, KC_5, KC_6, KC_DOT}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_1, KC_2, KC_3, KC_0} + {KC_ESC, M(M_USERNAME), KC_F9, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, + {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, + {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} } }; @@ -110,7 +110,7 @@ const uint16_t PROGMEM fn_actions[] = { }; /* This bit of logic seeds a wee linear congruential random number generator */ - +/* lots of prime numbers everywhere... */ static uint16_t random_value = 157; #define randadd 53 #define randmul 181 -- cgit v1.2.3 From f044edbed9b542de573a321628ddd6a3afc348b0 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 31 Jan 2016 15:30:48 +0100 Subject: Initial bepo layout based on tm2030 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No more SFT_T: - moved ] (bépo W) below Tab - moved - (bépo =) in place of ] (top right) - removed SFT_T from ' (bépo M) - moved \ (bépo Ç) in place of = (bépo %) - moved = (bépo %) in place of - (bépo =) --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 242 ++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/bepo/keymap.c diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c new file mode 100644 index 0000000000..1fe23a9323 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -0,0 +1,242 @@ +/* TypeMatrix-2030-like keymap */ +#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 NUMR 8 // numeric layer +#define FNLR 9 // fn layer + +#define MDBL0 1 +#define MFNLR 2 + +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 |------+------+------+------+------+--------| + * | ] | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |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_RBRC, 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(NUMR), + KC_PGUP, + KC_SPC, KC_LSFT, KC_PGDN, + + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_RALT, KC_EQL, KC_HOME, KC_BSLS, 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(NUMR), + 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 + ), +/* Numeric 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 +[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, + 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_TRNS, 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 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | Calc | Mail |Browsr|------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | 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_CALC, KC_MAIL, KC_WHOM, + 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_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_invert(NUMR); + layer_invert(FNLR); + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + return NULL; +}; + +// 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: numeric layer + if (layer_state & (1 << NUMR)) { + 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: Sun, 7 Feb 2016 19:29:49 +0100 Subject: =?UTF-8?q?Use=20B=C3=89PO=20sp=C3=A9cific=20key=20aliases=20with?= =?UTF-8?q?=20BP=5F=20prefix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit keymap_bepo.h: define BP_* keycodes for all possible characters bepo/keymap.c: use those keycodes in the bépo keymap --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 90 +++++++------------------------ 1 file changed, 20 insertions(+), 70 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 1fe23a9323..835db147af 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -3,9 +3,9 @@ #include "debug.h" #include "action_layer.h" #include "led.h" +#include "keymap_extras/keymap_bepo.h" #define BASE 0 // default layer -#define DVRK 1 // Dvorak layer #define NUMR 8 // numeric layer #define FNLR 9 // fn layer @@ -16,15 +16,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | - | + * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | = | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | + * | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z | * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | ] | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * | W | A | U | I | E | , |------| |------| C | T | S | R | N | M | * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | = | Home | \ |End/Ctl| + * |LCtrl | fn | LGui | Play |App/Alt| |Alt Gr| % | Home | Ç |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. * |Esc/Alt| num | | Left |Right | @@ -38,72 +38,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_RBRC, 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), + BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, + BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMM, + KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, + KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), ALT_T(KC_ESC), TG(NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_RALT, KC_EQL, KC_HOME, KC_BSLS, 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(NUMR), - 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 + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_EQL, + KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, + BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, + KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT, + BP_ALGR, BP_PERC, KC_HOME, BP_CCED, CTL_T(KC_END), + + KC_LEFT, KC_RGHT, + KC_UP, + KC_DOWN, KC_RSFT, KC_SPC ), /* Numeric Layer * @@ -230,10 +184,6 @@ void * matrix_scan_user(void) { if (layer_state & (1 << NUMR)) { 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: Sun, 14 Feb 2016 15:18:04 +0100 Subject: Swapped w and = to keep the w on the right hand (better for English) --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 835db147af..2a4cce075e 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -16,11 +16,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | = | + * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z | * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | W | A | U | I | E | , |------| |------| C | T | S | R | N | M | + * | = | A | U | I | E | , |------| |------| C | T | S | R | N | M | * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, - BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMM, + BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_SPC, KC_LSFT, KC_PGDN, // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_EQL, + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W, KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT, -- cgit v1.2.3 From bf78ca1ef2983f87e9acb5f115326290f9626931 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 17 Feb 2016 21:07:38 +0100 Subject: Use enums to define layers and macros --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 56 +++++++++++++++++-------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 2a4cce075e..855379e3cf 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -5,12 +5,16 @@ #include "led.h" #include "keymap_extras/keymap_bepo.h" -#define BASE 0 // default layer -#define NUMR 8 // numeric layer -#define FNLR 9 // fn layer +enum layers { + LR_BASE, // default layer + LR_NUMR, // numeric layer + LR_FN, // fn layer +}; -#define MDBL0 1 -#define MFNLR 2 +enum macros { + M_DBL0, + M_FNLR, +}; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer @@ -36,15 +40,15 @@ 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 +[LR_BASE] = KEYMAP( // layer 0 : default // left hand BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, - KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), - ALT_T(KC_ESC), TG(NUMR), + ALT_T(KC_ESC), TG(LR_NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -81,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' */ // SYMBOLS -[NUMR] = KEYMAP( +[LR_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, @@ -91,13 +95,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_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_TRNS, 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(M_DBL0),KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, KC_TRNS, @@ -125,12 +129,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' */ // 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_CALC, KC_MAIL, KC_WHOM, - 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, +[LR_FN] = 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_CALC, KC_MAIL, KC_WHOM, + 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, @@ -155,14 +159,14 @@ 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: + case M_DBL0: if (record->event.pressed) { return MACRO( I(25), T(P0), T(P0), END ); } break; - case MFNLR: - layer_invert(NUMR); - layer_invert(FNLR); + case M_FNLR: + layer_invert(LR_NUMR); + layer_invert(LR_FN); break; } return MACRO_NONE; @@ -181,7 +185,7 @@ void * matrix_scan_user(void) { ergodox_right_led_2_off(); ergodox_right_led_3_off(); // led 1: numeric layer - if (layer_state & (1 << NUMR)) { + if (layer_state & (1 << LR_NUMR)) { ergodox_right_led_1_on(); } // led 3: caps lock -- cgit v1.2.3 From b8ddbd21810951f64a081e4c3096bbc6aedc9aeb Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Fri, 26 Feb 2016 00:54:19 +0100 Subject: Added RESET key on fn-= --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 855379e3cf..1cebf8c9e8 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | Calc | Mail |Browsr|------| |------| | | | | | | + * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LR_FN] = 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_CALC, KC_MAIL, KC_WHOM, + RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, 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, -- cgit v1.2.3 From a7cef2ca0a2322448d02008337013936b1d550ec Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 17 Feb 2016 21:45:38 +0100 Subject: =?UTF-8?q?Initial=20B=C3=89PO=20over=20CSA=20with=20Shift=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initial implementation of the BÉPO layout for use with the Canadian Multilingual Standard layout (a.k.a. CSA / ACNOR layout) on the OS-side. - support all bépo characters from the default and shifted layers --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 159 ++++++++++++++++++++- .../keymap_extras/keymap_canadian_multilingual.h | 105 ++++++++++++++ 2 files changed, 262 insertions(+), 2 deletions(-) create mode 100644 quantum/keymap_extras/keymap_canadian_multilingual.h diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 1cebf8c9e8..ce887997e7 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -4,14 +4,39 @@ #include "action_layer.h" #include "led.h" #include "keymap_extras/keymap_bepo.h" +#include "keymap_extras/keymap_canadian_multilingual.h" enum layers { LR_BASE, // default layer + LR_CSA, // BÉPO over Canadian Multilingual (CSA) + LR_CSA_SFT, // shifted BÉPO over CSA + LR_CSA_AGR, // altgr-ed BÉPO over CSA + LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA LR_NUMR, // numeric layer LR_FN, // fn layer }; +#define IS_CA_MULT_ENABLED() (default_layer_state & (1 << LR_CSA)) + enum macros { + M_TGCM, // toggle CA-mult + M_CMSFT, // toggle shift on CA-mult + // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT + M_1, + M_2, + M_3, + M_4, + M_5, + M_6, + M_7, + M_8, + M_9, + M_0, + M_DEGR, + M_SCLN, + M_GRV, + M_NBSP, + // other layer macros M_DBL0, M_FNLR, }; @@ -63,6 +88,76 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN, KC_RSFT, KC_SPC ), +/** + * Same as default but for use with Canadian Multilingual on OS side + */ +[LR_CSA] = KEYMAP( + // left hand + KC_DLR, CM_DQOT, CM_LGIL, CM_RGIL, KC_LPRN, KC_RPRN, KC_DELT, + KC_TAB, KC_B, CM_ECUT, KC_P, KC_O, CM_EGRV, KC_BSPC, + KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, + M(M_CMSFT), CM_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, + KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + + ALT_T(KC_ESC), TG(LR_NUMR), + KC_PGUP, + KC_SPC, KC_LSFT, KC_PGDN, + + // right hand + KC_DELT, KC_AT, KC_PLUS, KC_MINS, CM_SLSH, KC_ASTR, KC_W, + KC_BSPC, CM_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_ENT, CM_APOS, KC_Q, KC_G, KC_H, KC_F, M(M_CMSFT), + CM_ALGR, KC_PERC, KC_HOME, CM_CCED, CTL_T(KC_END), + + KC_LEFT, KC_RGHT, + KC_UP, + KC_DOWN, KC_RSFT, KC_SPC + ), +/* Shifted BÉPO over Canadian Multilingual + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | # | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | ! | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ° | | | | | ; |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | : | | | | | ? | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | ` | | | | + * `----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[LR_CSA_SFT] = KEYMAP( + // left hand + KC_HASH, M(M_1), M(M_2), M(M_3), M(M_4), M(M_5), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + M(M_DEGR),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_SCLN), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COLN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + M(M_NBSP), KC_TRNS, KC_TRNS, + + // right hand + KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS, + KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, CM_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, M(M_NBSP) + ), /* Numeric Layer * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -110,7 +205,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| + * |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -130,7 +225,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // MEDIA AND MOUSE [LR_FN] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + M(M_TGCM), 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, RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, @@ -155,10 +250,66 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM fn_actions[] = { }; +void hold_shift(void) { + register_code(KC_LSHIFT); +} + +void release_shift(void) { + unregister_code(KC_LSHIFT); +} + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { + case M_TGCM: + if (record->event.pressed) { + default_layer_xor(1 << LR_CSA); + } + break; + case M_CMSFT: + if (record->event.pressed) { + layer_on(LR_CSA_SFT); + hold_shift(); + } else { + release_shift(); + layer_off(LR_CSA_SFT); + } + break; + case M_1 ... M_0: + case M_DEGR: + case M_SCLN: + case M_GRV: + case M_NBSP: + // macros of the shift layer that require to release shift + if (record->event.pressed) { + release_shift(); + switch (id) { + case M_1 ... M_0: + register_code(KC_1 + (id - M_1)); + break; + case M_DEGR: + return MACRO(DOWN(CM_ALTGR), D(SCLN), END); + case M_SCLN: + return MACRO(D(SCLN), END); + case M_GRV: + return MACRO(DOWN(CM_ALTGR), TYPE(CM_DCRC), UP(CM_ALTGR), T(SPACE), END); + case M_NBSP: + return MACRO(DOWN(CM_ALTGR), T(SPACE), UP(CM_ALTGR), END); + } + } else { + hold_shift(); + switch (id) { + case M_1 ... M_0: + unregister_code(KC_1 + (id - M_1)); + break; + case M_DEGR: + return MACRO(UP(CM_ALTGR), D(LSFT), U(SCLN), END); + case M_SCLN: + return MACRO(D(LSFT), U(SCLN), END); + } + } + break; case M_DBL0: if (record->event.pressed) { return MACRO( I(25), T(P0), T(P0), END ); @@ -188,6 +339,10 @@ void * matrix_scan_user(void) { if (layer_state & (1 << LR_NUMR)) { ergodox_right_led_1_on(); } + // led 2: BÉPO over Canadian Multilingual + if (IS_CA_MULT_ENABLED()) { + ergodox_right_led_2_on(); + } // led 3: caps lock if (host_keyboard_leds() & (1< +#define CM_GRTR CM_GREATER + +// Space bar +#define CM_NON_BREAKING_SPACE ALTGR(KC_SPACE) +#define CM_NBSP CM_NON_BREAKING_SPACE + +#endif -- cgit v1.2.3 From 7840e69bfaee1d67de273c235b532d6f20c905a9 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Thu, 18 Feb 2016 00:47:23 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20AltGr=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - implemented the most useful characters: - all French characters + € - common programmer characters - other keys implemented as KC_NO to avoid mistyping a character from a lower layer - AltGr+Shift not supported (yet) --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 54 +++++++++++++++++++++- .../keymap_extras/keymap_canadian_multilingual.h | 11 +++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index ce887997e7..64fac7f9ba 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -36,6 +36,8 @@ enum macros { M_SCLN, M_GRV, M_NBSP, + // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR + M_CRC, // other layer macros M_DBL0, M_FNLR, @@ -108,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_BSPC, CM_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_ENT, CM_APOS, KC_Q, KC_G, KC_H, KC_F, M(M_CMSFT), - CM_ALGR, KC_PERC, KC_HOME, CM_CCED, CTL_T(KC_END), + MO(LR_CSA_AGR), KC_PERC, KC_HOME, CM_CCED, CTL_T(KC_END), KC_LEFT, KC_RGHT, KC_UP, @@ -158,6 +160,51 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, M(M_NBSP) ), +/* AltGr-ed BÉPO over Canadian Multilingual + * "////" indicates that the key is disabled (unsupported bépo character) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ////// | //// | < | > | [ | ] | | | | ^ | //// | //// | //// | //// | ////// | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | |dead '| & | œ |dead `| | | | //// | //// | //// | //// | //// | ////// | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ////// | æ | ù |dead "| € | //// |------| |------| //// | //// | //// | //// | //// | ////// | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | \ | { | } | //// | ~ | | | | //// | //// | //// | //// | //// | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | //// | | //// | | + * `----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | _ | |------| |------| | _ | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[LR_CSA_AGR] = KEYMAP( + // left hand + KC_NO, KC_NO, CM_LESS, CM_GRTR, CM_LBRC, CM_RBRC, KC_TRNS, + KC_TRNS, CM_PIPE, CM_DACT, KC_AMPR, CM_OE, CM_DGRV, KC_TRNS, + KC_NO, CM_AE, CM_UGRV, CM_DTRM, CM_EURO, KC_NO, + KC_TRNS, CM_BSLS, CM_LCBR, CM_RCBR, KC_NO, CM_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_UNDS, KC_TRNS, KC_TRNS, + + // right hand + KC_TRNS, M(M_CRC), 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_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_UNDS + ), /* Numeric Layer * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -310,6 +357,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } } break; + case M_CRC: + if (record->event.pressed) { + return MACRO(TYPE(CM_DCRC), T(SPACE), END); + } + break; case M_DBL0: if (record->event.pressed) { return MACRO( I(25), T(P0), T(P0), END ); diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index ae60ffe37e..e30419b5be 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -102,4 +102,15 @@ #define CM_NON_BREAKING_SPACE ALTGR(KC_SPACE) #define CM_NBSP CM_NON_BREAKING_SPACE +// GR2A-ed characters (non-exhaustive list) +// second row +#define CM_OE_LIGATURE GR2A(KC_E) // œ +#define CM_OE CM_OE_LIGATURE + +// third row +#define CM_AE_LIGATURE GR2A(KC_A) // æ +#define CM_AE CM_AE_LIGATURE +#define CM_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent +#define CM_DACT CM_DEAD_ACUTE + #endif -- cgit v1.2.3 From fbf1333d87aa4487692f068881ab1ce46fa79be5 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Fri, 26 Feb 2016 00:53:30 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20unicode=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - implement easy way to define and send unicode characters on Windows - define 3 characters not available in CSA: - en dash: – - em dash: — - ellipsis: … --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 59 ++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 64fac7f9ba..b08b47217c 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -19,6 +19,13 @@ enum layers { #define IS_CA_MULT_ENABLED() (default_layer_state & (1 << LR_CSA)) enum macros { + // Characters that do not exist in CSA and must be implemented based on unicode support + // Note: these are intentionally declared first to be used as indexes in spec_chars below + UC_NDSH, // – + UC_MDSH, // — + UC_ELPS, // … + END_UC, // indicates the last unicode character macro + // other macros M_TGCM, // toggle CA-mult M_CMSFT, // toggle shift on CA-mult // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT @@ -43,6 +50,15 @@ enum macros { M_FNLR, }; +const uint16_t unicode_chars[] = { + [UC_NDSH] = L'–', + [UC_MDSH] = L'—', + [UC_ELPS] = L'…', +}; + +/* shortcut for unicod character macros */ +#define MUC(name) M(UC_##name) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer * @@ -164,13 +180,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * "////" indicates that the key is disabled (unsupported bépo character) * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ////// | //// | < | > | [ | ] | | | | ^ | //// | //// | //// | //// | ////// | + * | – | — | < | > | [ | ] | | | | ^ | //// | //// | //// | //// | ////// | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | |dead '| & | œ |dead `| | | | //// | //// | //// | //// | //// | ////// | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | ////// | æ | ù |dead "| € | //// |------| |------| //// | //// | //// | //// | //// | ////// | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | \ | { | } | //// | ~ | | | | //// | //// | //// | //// | //// | | + * | | \ | { | } | … | ~ | | | | //// | //// | //// | //// | //// | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | //// | | //// | | * `----------------------------------' `-----------------------------------' @@ -184,10 +200,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [LR_CSA_AGR] = KEYMAP( // left hand - KC_NO, KC_NO, CM_LESS, CM_GRTR, CM_LBRC, CM_RBRC, KC_TRNS, + MUC(NDSH),MUC(MDSH),CM_LESS, CM_GRTR, CM_LBRC, CM_RBRC, KC_TRNS, KC_TRNS, CM_PIPE, CM_DACT, KC_AMPR, CM_OE, CM_DGRV, KC_TRNS, KC_NO, CM_AE, CM_UGRV, CM_DTRM, CM_EURO, KC_NO, - KC_TRNS, CM_BSLS, CM_LCBR, CM_RCBR, KC_NO, CM_TILD, KC_TRNS, + KC_TRNS, CM_BSLS, CM_LCBR, CM_RCBR, MUC(ELPS),CM_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -305,10 +321,43 @@ void release_shift(void) { unregister_code(KC_LSHIFT); } +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_P0; + } else if (hex < 0xA) { + return KC_P1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +void send_unicode(uint16_t unicode) +{ + // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input + // Implemented for Windows: + // Pressing ALT followed by + followed by the unicode code point in hex. + // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1 + register_code(KC_LALT); + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + for (int i = 12; i >= 0; i -= 4) { + register_code(hextokeycode((unicode >> i) & 0xF)); + unregister_code(hextokeycode((unicode >> i) & 0xF)); + } + + unregister_code(KC_LALT); +} + 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 ... END_UC: + if (record->event.pressed) { + send_unicode(unicode_chars[id]); + } + break; case M_TGCM: if (record->event.pressed) { default_layer_xor(1 << LR_CSA); @@ -364,7 +413,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_DBL0: if (record->event.pressed) { - return MACRO( I(25), T(P0), T(P0), END ); + return MACRO( I(25), T(P0), T(P0), END ); } break; case M_FNLR: -- cgit v1.2.3 From 911222892ecb1c01551e0abdfbe98ed1dbf82139 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Fri, 26 Feb 2016 00:55:39 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20GR2A=20characters=20in=20AltG?= =?UTF-8?q?r=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - define aliases for all GR2A characters (unshifted) - use the available characters in the BÉPO over CSA AltGr layer --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 22 +++--- .../keymap_extras/keymap_canadian_multilingual.h | 81 ++++++++++++++++++++-- 2 files changed, 88 insertions(+), 15 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index b08b47217c..a3b8d9c49f 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -180,15 +180,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * "////" indicates that the key is disabled (unsupported bépo character) * * ,--------------------------------------------------. ,--------------------------------------------------. - * | – | — | < | > | [ | ] | | | | ^ | //// | //// | //// | //// | ////// | + * | – | — | < | > | [ | ] | | | | ^ | ± | //// | //// | //// | ////// | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | |dead '| & | œ |dead `| | | | //// | //// | //// | //// | //// | ////// | + * | | | |dead '| & | œ |dead `| | | | //// | //// | ð | //// | ij | ////// | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ////// | æ | ù |dead "| € | //// |------| |------| //// | //// | //// | //// | //// | ////// | + * | ////// | æ | ù |dead "| € | ̛’ |------| |------| //// | þ | ß | //// |dead ~| ////// | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | \ | { | } | … | ~ | | | | //// | //// | //// | //// | //// | | + * | | \ | { | } | … | ~ | | | | //// | //// | μ | //// | //// | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | //// | | //// | | + * | | | | | | | | //// | |dead ¸| | * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -202,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand MUC(NDSH),MUC(MDSH),CM_LESS, CM_GRTR, CM_LBRC, CM_RBRC, KC_TRNS, KC_TRNS, CM_PIPE, CM_DACT, KC_AMPR, CM_OE, CM_DGRV, KC_TRNS, - KC_NO, CM_AE, CM_UGRV, CM_DTRM, CM_EURO, KC_NO, + KC_NO, CM_AE, CM_UGRV, CM_DTRM, CM_EURO, CM_RQOT, KC_TRNS, CM_BSLS, CM_LCBR, CM_RCBR, MUC(ELPS),CM_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -211,11 +211,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UNDS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, M(M_CRC), 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_NO, KC_TRNS, - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_TRNS, + KC_TRNS, M(M_CRC), CM_PSMS, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, CM_ETH, KC_NO, CM_IJ, KC_NO, + KC_NO, CM_THRN, CM_SRPS, KC_NO, CM_DTLD, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, CM_MU, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_TRNS, CM_DCED, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index e30419b5be..9b13b1e4e6 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -103,14 +103,87 @@ #define CM_NBSP CM_NON_BREAKING_SPACE // GR2A-ed characters (non-exhaustive list) -// second row -#define CM_OE_LIGATURE GR2A(KC_E) // œ -#define CM_OE CM_OE_LIGATURE +// First row +#define CM_SUPERSCRIPT_ONE GR2A(KC_1) // ¹ +#define CM_SUP1 CM_SUPERSCRIPT_ONE +#define CM_SUPERSCRIPT_TWO GR2A(KC_2) // ² +#define CM_SUP2 CM_SUPERSCRIPT_TWO +#define CM_SUPERSCRIPT_THREE GR2A(KC_3) // ³ +#define CM_SUP3 CM_SUPERSCRIPT_THREE +#define CM_ONE_QUARTER GR2A(KC_4) // ¼ +#define CM_1QRT CM_ONE_QUARTER +#define CM_ONE_HALF GR2A(KC_5) // ½ +#define CM_1HLF CM_ONE_HALF +#define CM_THREE_QUARTERS GR2A(KC_6) // ¾ +#define CM_3QRT CM_THREE_QUARTERS +// nothing on 7-0 and - +#define CM_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸ +#define CM_DCED CM_DEAD_CEDILLA + +// Second row +#define CM_OMEGA GR2A(KC_Q) // ω +#define CM_OMEG CM_OMEGA +#define CM_L_STROKE GR2A(KC_W) // ł +#define CM_LSTK CM_L_STROKE +#define CM_OE_LIGATURE GR2A(KC_E) // œ +#define CM_OE CM_OE_LIGATURE +#define CM_PARAGRAPH GR2A(KC_R) // ¶ +#define CM_PARG CM_PARAGRAPH +#define CM_T_STROKE GR2A(KC_T) // ŧ +#define CM_LEFT_ARROW GR2A(KC_Y) // ← +#define CM_LARW CM_LEFT_ARROW +#define CM_DOWN_ARROW GR2A(KC_U) // ↓ +#define CM_DARW CM_DOWN_ARROW +#define CM_RIGHT_ARROW GR2A(KC_I) // → +#define CM_RARW CM_RIGHT_ARROW +#define CM_O_STROKE GR2A(KC_O) // ø +#define CM_OSTK CM_O_STROKE +#define CM_THORN GR2A(KC_P) // þ +#define CM_THRN CM_THORN +// nothing on ^ +#define CM_DEAD_TILDE GR2A(CM_C_CEDILLA) // dead ~ +#define CM_DTLD CM_DEAD_TILDE -// third row +// Third row #define CM_AE_LIGATURE GR2A(KC_A) // æ #define CM_AE CM_AE_LIGATURE +#define CM_SHARP_S GR2A(KC_S) // ß +#define CM_SRPS CM_SHARP_S +#define CM_ETH GR2A(KC_D) // ð +// nothing on F +#define CM_ENG GR2A(KC_G) // ŋ +#define CM_H_SRTOKE GR2A(KC_H) // ħ +#define CM_HSTK CM_H_SRTOKE +#define CM_IJ_LIGATURE GR2A(KC_J) // ij +#define CM_IJ CM_IJ_LIGATURE +#define CM_KRA GR2A(KC_K) // ĸ +#define CM_L_FLOWN_DOT GR2A(KC_L) // ŀ +#define CM_LFLD CM_L_FLOWN_DOT #define CM_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent #define CM_DACT CM_DEAD_ACUTE +// nothing on È & À + +// Fourth row +#define CM_CENT GR2A(KC_C) // ¢ +#define CM_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “ +#define CM_LDQT CM_LEFT_DOUBLE_QUOTE +#define CM_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ” +#define CM_RDQT CM_RIGHT_DOUBLE_QUOTE +#define CM_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint) +#define CM_NAPO CM_N_APOSTROPHE +#define CM_MU GR2A(KC_M) // μ +// ─ TODO box drawing character? +#define CM_HYPHENATION_POINT GR2A(CM_DOT) // ‧ TODO not an interpunct ? + +// GR2A-shifted characters (non-exhaustive list) +// First row +#define CM_PLUS_MINUS LSFT(GR2A(KC_9)) // ± +#define CM_PSMS CM_PLUS_MINUS + +// Fourth row +#define CM_LEFT_QUOTE LSFT(GR2A(KC_V)) // ‘ +#define CM_LQOT CM_LEFT_QUOTE +#define CM_RIGHT_QUOTE LSFT(GR2A(KC_B)) // ’ +#define CM_RQOT CM_RIGHT_QUOTE #endif -- cgit v1.2.3 From 3a91ddb0745ae0f52007984793ea1b48abb2098c Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 1 Mar 2016 22:59:38 +0100 Subject: Use CSA_ as prefix for Canadian Multilingual key aliases CM is already used for Colemak. --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 60 ++--- .../keymap_extras/keymap_canadian_multilingual.h | 244 +++++++++++---------- 2 files changed, 153 insertions(+), 151 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index a3b8d9c49f..6cee216a43 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -111,22 +111,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [LR_CSA] = KEYMAP( // left hand - KC_DLR, CM_DQOT, CM_LGIL, CM_RGIL, KC_LPRN, KC_RPRN, KC_DELT, - KC_TAB, KC_B, CM_ECUT, KC_P, KC_O, CM_EGRV, KC_BSPC, - KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, - M(M_CMSFT), CM_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_DELT, + KC_TAB, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_BSPC, + KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, + M(M_CMSFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, + KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), ALT_T(KC_ESC), TG(LR_NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, // right hand - KC_DELT, KC_AT, KC_PLUS, KC_MINS, CM_SLSH, KC_ASTR, KC_W, - KC_BSPC, CM_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_ENT, CM_APOS, KC_Q, KC_G, KC_H, KC_F, M(M_CMSFT), - MO(LR_CSA_AGR), KC_PERC, KC_HOME, CM_CCED, CTL_T(KC_END), + KC_DELT, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W, + KC_BSPC, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_ENT, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, M(M_CMSFT), + MO(LR_CSA_AGR), KC_PERC, KC_HOME, CSA_CCED, CTL_T(KC_END), KC_LEFT, KC_RGHT, KC_UP, @@ -166,11 +166,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { M(M_NBSP), KC_TRNS, KC_TRNS, // right hand - KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS, - KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, CM_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS, + KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -200,22 +200,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [LR_CSA_AGR] = KEYMAP( // left hand - MUC(NDSH),MUC(MDSH),CM_LESS, CM_GRTR, CM_LBRC, CM_RBRC, KC_TRNS, - KC_TRNS, CM_PIPE, CM_DACT, KC_AMPR, CM_OE, CM_DGRV, KC_TRNS, - KC_NO, CM_AE, CM_UGRV, CM_DTRM, CM_EURO, CM_RQOT, - KC_TRNS, CM_BSLS, CM_LCBR, CM_RCBR, MUC(ELPS),CM_TILD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS, + KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS, + KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT, + KC_TRNS, CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, M(M_CRC), CM_PSMS, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_NO, KC_NO, CM_ETH, KC_NO, CM_IJ, KC_NO, - KC_NO, CM_THRN, CM_SRPS, KC_NO, CM_DTLD, KC_TRNS, - KC_TRNS, KC_NO, KC_NO, CM_MU, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_NO, KC_TRNS, CM_DCED, KC_TRNS, + KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, CSA_ETH, KC_NO, CSA_IJ, KC_NO, + KC_NO, CSA_THRN, CSA_SRPS, KC_NO, CSA_DTLD, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, CSA_MU, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -385,13 +385,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) register_code(KC_1 + (id - M_1)); break; case M_DEGR: - return MACRO(DOWN(CM_ALTGR), D(SCLN), END); + return MACRO(DOWN(CSA_ALTGR), D(SCLN), END); case M_SCLN: return MACRO(D(SCLN), END); case M_GRV: - return MACRO(DOWN(CM_ALTGR), TYPE(CM_DCRC), UP(CM_ALTGR), T(SPACE), END); + return MACRO(DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); case M_NBSP: - return MACRO(DOWN(CM_ALTGR), T(SPACE), UP(CM_ALTGR), END); + return MACRO(DOWN(CSA_ALTGR), T(SPACE), UP(CSA_ALTGR), END); } } else { hold_shift(); @@ -400,7 +400,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_1 + (id - M_1)); break; case M_DEGR: - return MACRO(UP(CM_ALTGR), D(LSFT), U(SCLN), END); + return MACRO(UP(CSA_ALTGR), D(LSFT), U(SCLN), END); case M_SCLN: return MACRO(D(LSFT), U(SCLN), END); } @@ -408,7 +408,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_CRC: if (record->event.pressed) { - return MACRO(TYPE(CM_DCRC), T(SPACE), END); + return MACRO(TYPE(CSA_DCRC), T(SPACE), END); } break; case M_DBL0: diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index 9b13b1e4e6..b1d7b4e779 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -11,8 +11,8 @@ #define ALGR(kc) ALTGR(kc) #endif -#define CM_ALTGR KC_RALT -#define CM_ALGR CM_ALTGR +#define CSA_ALTGR KC_RALT +#define CSA_ALGR CSA_ALTGR #ifndef GR2A #define GR2A(kc) RCTL(kc) @@ -20,170 +20,172 @@ // Normal characters // First row -#define CM_SLASH KC_GRV // / -#define CM_SLSH CM_SLASH +#define CSA_SLASH KC_GRV // / +#define CSA_SLSH CSA_SLASH // Second row -#define CM_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^ -#define CM_DCRC CM_DEAD_CIRCUMFLEX -#define CM_C_CEDILLA KC_RBRACKET // Ç -#define CM_CCED CM_C_CEDILLA +#define CSA_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^ +#define CSA_DCRC CSA_DEAD_CIRCUMFLEX +#define CSA_C_CEDILLA KC_RBRACKET // Ç +#define CSA_CCED CSA_C_CEDILLA // Third row -#define CM_E_GRAVE KC_QUOT // è -#define CM_EGRV CM_E_GRAVE -#define CM_A_GRAVE KC_BSLASH // à -#define CM_AGRV CM_A_GRAVE +#define CSA_E_GRAVE KC_QUOT // è +#define CSA_EGRV CSA_E_GRAVE +#define CSA_A_GRAVE KC_BSLASH // à +#define CSA_AGRV CSA_A_GRAVE // Fourth row -#define CM_U_GRAVE KC_NONUS_BSLASH // ù -#define CM_UGRV CM_U_GRAVE -#define CM_E_ACUTE KC_SLSH // é -#define CM_ECUT CM_E_ACUTE +#define CSA_U_GRAVE KC_NONUS_BSLASH // ù +#define CSA_UGRV CSA_U_GRAVE +#define CSA_E_ACUTE KC_SLSH // é +#define CSA_ECUT CSA_E_ACUTE // Shifted characters // First row -#define CM_BACKSLASH LSFT(CM_SLASH) /* \ */ -#define CM_BSLS CM_BACKSLASH -#define CM_QUESTION LSFT(KC_6) // ? -#define CM_QEST CM_QUESTION +#define CSA_BACKSLASH LSFT(CSA_SLASH) /* \ */ +#define CSA_BSLS CSA_BACKSLASH +#define CSA_QUESTION LSFT(KC_6) // ? +#define CSA_QEST CSA_QUESTION // Second row -#define CM_DEAD_TREMA LSFT(CM_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü -#define CM_DTRM CM_DEAD_TREMA +#define CSA_DEAD_TREMA LSFT(CSA_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü +#define CSA_DTRM CSA_DEAD_TREMA // Third row // all same as US-QWERTY, or capitalised character of the non-shifted key // Fourth row -#define CM_APOSTROPHE LSFT(KC_COMMA) // ' -#define CM_APOS CM_APOSTROPHE -#define CM_DOUBLE_QUOTE LSFT(KC_DOT) // " -#define CM_DQOT CM_DOUBLE_QUOTE +#define CSA_APOSTROPHE LSFT(KC_COMMA) // ' +#define CSA_APOS CSA_APOSTROPHE +#define CSA_DOUBLE_QUOTE LSFT(KC_DOT) // " +#define CSA_DQOT CSA_DOUBLE_QUOTE // Alt Gr-ed characters // First row -#define CM_PIPE ALTGR(CM_SLASH) // | -#define CM_CURRENCY ALTGR(KC_4) // ¤ -#define CM_CURR CM_CURRENCY -#define CM_LEFT_CURLY_BRACE ALTGR(KC_7) // { -#define CM_LCBR CM_LEFT_CURLY_BRACE -#define CM_RIGHT_CURLY_BRACE ALTGR(KC_8) // } -#define CM_RCBR CM_RIGHT_CURLY_BRACE -#define CM_LBRACKET ALTGR(KC_9) // [ -#define CM_LBRC CM_LBRACKET -#define CM_RBRACKET ALTGR(KC_0) // ] -#define CM_RBRC CM_RBRACKET -#define CM_NEGATION ALTGR(KC_EQUAL) // ¬ -#define CM_NEGT CM_NEGATION +#define CSA_PIPE ALTGR(CSA_SLASH) // | +#define CSA_CURRENCY ALTGR(KC_4) // ¤ +#define CSA_CURR CSA_CURRENCY +#define CSA_LEFT_CURLY_BRACE ALTGR(KC_7) // { +#define CSA_LCBR CSA_LEFT_CURLY_BRACE +#define CSA_RIGHT_CURLY_BRACE ALTGR(KC_8) // } +#define CSA_RCBR CSA_RIGHT_CURLY_BRACE +#define CSA_LBRACKET ALTGR(KC_9) // [ +#define CSA_LBRC CSA_LBRACKET +#define CSA_RBRACKET ALTGR(KC_0) // ] +#define CSA_RBRC CSA_RBRACKET +#define CSA_NEGATION ALTGR(KC_EQUAL) // ¬ +#define CSA_NEGT CSA_NEGATION // Second row // euro symbol not available on Linux? (X.org) -#define CM_EURO ALTGR(KC_E) // € -#define CM_DEAD_GRAVE ALTGR(CM_DEAD_CIRCUMFLEX) -#define CM_DGRV CM_DEAD_GRAVE // dead ` -#define CM_TILDE ALTGR(CM_C_CEDILLA) // ~ -#define CM_TILD CM_TILDE +#define CSA_EURO ALTGR(KC_E) // € +#define CSA_DEAD_GRAVE ALTGR(CSA_DEAD_CIRCUMFLEX) +#define CSA_DGRV CSA_DEAD_GRAVE // dead ` +#define CSA_TILDE ALTGR(CSA_C_CEDILLA) // ~ +#define CSA_TILD CSA_TILDE // Third row -#define CM_DEGREE ALTGR(KC_SCOLON) // ° -#define CM_DEGR CM_DEGREE +#define CSA_DEGREE ALTGR(KC_SCOLON) // ° +#define CSA_DEGR CSA_DEGREE // Fourth row -#define CM_LEFT_GUILLEMET ALTGR(KC_Z) // « -#define CM_LGIL CM_LEFT_GUILLEMET -#define CM_RIGHT_GUILLEMET ALTGR(KC_X) // » -#define CM_RGIL CM_RIGHT_GUILLEMET -#define CM_LESS ALTGR(KC_COMMA) // < -#define CM_GREATER ALTGR(KC_DOT) // > -#define CM_GRTR CM_GREATER +#define CSA_LEFT_GUILLEMET ALTGR(KC_Z) // « +#define CSA_LGIL CSA_LEFT_GUILLEMET +#define CSA_RIGHT_GUILLEMET ALTGR(KC_X) // » +#define CSA_RGIL CSA_RIGHT_GUILLEMET +#define CSA_LESS ALTGR(KC_COMMA) // < +#define CSA_GREATER ALTGR(KC_DOT) // > +#define CSA_GRTR CSA_GREATER // Space bar -#define CM_NON_BREAKING_SPACE ALTGR(KC_SPACE) -#define CM_NBSP CM_NON_BREAKING_SPACE +#define CSA_NON_BREAKING_SPACE ALTGR(KC_SPACE) +#define CSA_NBSP CSA_NON_BREAKING_SPACE // GR2A-ed characters (non-exhaustive list) // First row -#define CM_SUPERSCRIPT_ONE GR2A(KC_1) // ¹ -#define CM_SUP1 CM_SUPERSCRIPT_ONE -#define CM_SUPERSCRIPT_TWO GR2A(KC_2) // ² -#define CM_SUP2 CM_SUPERSCRIPT_TWO -#define CM_SUPERSCRIPT_THREE GR2A(KC_3) // ³ -#define CM_SUP3 CM_SUPERSCRIPT_THREE -#define CM_ONE_QUARTER GR2A(KC_4) // ¼ -#define CM_1QRT CM_ONE_QUARTER -#define CM_ONE_HALF GR2A(KC_5) // ½ -#define CM_1HLF CM_ONE_HALF -#define CM_THREE_QUARTERS GR2A(KC_6) // ¾ -#define CM_3QRT CM_THREE_QUARTERS +#define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹ +#define CSA_SUP1 CSA_SUPERSCRIPT_ONE +#define CSA_SUPERSCRIPT_TWO GR2A(KC_2) // ² +#define CSA_SUP2 CSA_SUPERSCRIPT_TWO +#define CSA_SUPERSCRIPT_THREE GR2A(KC_3) // ³ +#define CSA_SUP3 CSA_SUPERSCRIPT_THREE +#define CSA_ONE_QUARTER GR2A(KC_4) // ¼ +#define CSA_1QRT CSA_ONE_QUARTER +#define CSA_ONE_HALF GR2A(KC_5) // ½ +#define CSA_1HLF CSA_ONE_HALF +#define CSA_THREE_QUARTERS GR2A(KC_6) // ¾ +#define CSA_3QRT CSA_THREE_QUARTERS // nothing on 7-0 and - -#define CM_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸ -#define CM_DCED CM_DEAD_CEDILLA +#define CSA_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸ +#define CSA_DCED CSA_DEAD_CEDILLA // Second row -#define CM_OMEGA GR2A(KC_Q) // ω -#define CM_OMEG CM_OMEGA -#define CM_L_STROKE GR2A(KC_W) // ł -#define CM_LSTK CM_L_STROKE -#define CM_OE_LIGATURE GR2A(KC_E) // œ -#define CM_OE CM_OE_LIGATURE -#define CM_PARAGRAPH GR2A(KC_R) // ¶ -#define CM_PARG CM_PARAGRAPH -#define CM_T_STROKE GR2A(KC_T) // ŧ -#define CM_LEFT_ARROW GR2A(KC_Y) // ← -#define CM_LARW CM_LEFT_ARROW -#define CM_DOWN_ARROW GR2A(KC_U) // ↓ -#define CM_DARW CM_DOWN_ARROW -#define CM_RIGHT_ARROW GR2A(KC_I) // → -#define CM_RARW CM_RIGHT_ARROW -#define CM_O_STROKE GR2A(KC_O) // ø -#define CM_OSTK CM_O_STROKE -#define CM_THORN GR2A(KC_P) // þ -#define CM_THRN CM_THORN +#define CSA_OMEGA GR2A(KC_Q) // ω +#define CSA_OMEG CSA_OMEGA +#define CSA_L_STROKE GR2A(KC_W) // ł +#define CSA_LSTK CSA_L_STROKE +#define CSA_OE_LIGATURE GR2A(KC_E) // œ +#define CSA_OE CSA_OE_LIGATURE +#define CSA_PARAGRAPH GR2A(KC_R) // ¶ +#define CSA_PARG CSA_PARAGRAPH +#define CSA_T_STROKE GR2A(KC_T) // ŧ +#define CSA_LEFT_ARROW GR2A(KC_Y) // ← +#define CSA_LARW CSA_LEFT_ARROW +#define CSA_DOWN_ARROW GR2A(KC_U) // ↓ +#define CSA_DARW CSA_DOWN_ARROW +#define CSA_RIGHT_ARROW GR2A(KC_I) // → +#define CSA_RARW CSA_RIGHT_ARROW +#define CSA_O_STROKE GR2A(KC_O) // ø +#define CSA_OSTK CSA_O_STROKE +#define CSA_THORN GR2A(KC_P) // þ +#define CSA_THRN CSA_THORN // nothing on ^ -#define CM_DEAD_TILDE GR2A(CM_C_CEDILLA) // dead ~ -#define CM_DTLD CM_DEAD_TILDE +#define CSA_DEAD_TILDE GR2A(CSA_C_CEDILLA) // dead ~ +#define CSA_DTLD CSA_DEAD_TILDE // Third row -#define CM_AE_LIGATURE GR2A(KC_A) // æ -#define CM_AE CM_AE_LIGATURE -#define CM_SHARP_S GR2A(KC_S) // ß -#define CM_SRPS CM_SHARP_S -#define CM_ETH GR2A(KC_D) // ð +#define CSA_AE_LIGATURE GR2A(KC_A) // æ +#define CSA_AE CSA_AE_LIGATURE +#define CSA_SHARP_S GR2A(KC_S) // ß +#define CSA_SRPS CSA_SHARP_S +#define CSA_ETH GR2A(KC_D) // ð // nothing on F -#define CM_ENG GR2A(KC_G) // ŋ -#define CM_H_SRTOKE GR2A(KC_H) // ħ -#define CM_HSTK CM_H_SRTOKE -#define CM_IJ_LIGATURE GR2A(KC_J) // ij -#define CM_IJ CM_IJ_LIGATURE -#define CM_KRA GR2A(KC_K) // ĸ -#define CM_L_FLOWN_DOT GR2A(KC_L) // ŀ -#define CM_LFLD CM_L_FLOWN_DOT -#define CM_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent -#define CM_DACT CM_DEAD_ACUTE +#define CSA_ENG GR2A(KC_G) // ŋ +#define CSA_H_SRTOKE GR2A(KC_H) // ħ +#define CSA_HSTK CSA_H_SRTOKE +#define CSA_IJ_LIGATURE GR2A(KC_J) // ij +#define CSA_IJ CSA_IJ_LIGATURE +#define CSA_KRA GR2A(KC_K) // ĸ +#define CSA_L_FLOWN_DOT GR2A(KC_L) // ŀ +#define CSA_LFLD CSA_L_FLOWN_DOT +#define CSA_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent +#define CSA_DACT CSA_DEAD_ACUTE // nothing on È & À // Fourth row -#define CM_CENT GR2A(KC_C) // ¢ -#define CM_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “ -#define CM_LDQT CM_LEFT_DOUBLE_QUOTE -#define CM_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ” -#define CM_RDQT CM_RIGHT_DOUBLE_QUOTE -#define CM_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint) -#define CM_NAPO CM_N_APOSTROPHE -#define CM_MU GR2A(KC_M) // μ -// ─ TODO box drawing character? -#define CM_HYPHENATION_POINT GR2A(CM_DOT) // ‧ TODO not an interpunct ? +#define CSA_CENT GR2A(KC_C) // ¢ +#define CSA_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “ +#define CSA_LDQT CSA_LEFT_DOUBLE_QUOTE +#define CSA_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ” +#define CSA_RDQT CSA_RIGHT_DOUBLE_QUOTE +#define CSA_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint) +#define CSA_NAPO CSA_N_APOSTROPHE +#define CSA_MU GR2A(KC_M) // μ +#define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ― +#define CSA_HZBR CSA_HORIZONTAL_BAR +#define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead ˙ +#define CSA_DOTA CSA_DEAD_DOT_ABOVE // GR2A-shifted characters (non-exhaustive list) // First row -#define CM_PLUS_MINUS LSFT(GR2A(KC_9)) // ± -#define CM_PSMS CM_PLUS_MINUS +#define CSA_PLUS_MINUS LSFT(GR2A(KC_9)) // ± +#define CSA_PSMS CSA_PLUS_MINUS // Fourth row -#define CM_LEFT_QUOTE LSFT(GR2A(KC_V)) // ‘ -#define CM_LQOT CM_LEFT_QUOTE -#define CM_RIGHT_QUOTE LSFT(GR2A(KC_B)) // ’ -#define CM_RQOT CM_RIGHT_QUOTE +#define CSA_LEFT_QUOTE LSFT(GR2A(KC_V)) // ‘ +#define CSA_LQOT CSA_LEFT_QUOTE +#define CSA_RIGHT_QUOTE LSFT(GR2A(KC_B)) // ’ +#define CSA_RQOT CSA_RIGHT_QUOTE #endif -- cgit v1.2.3 From b2a4434abbfe63902be668c34995587193f778dd Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 8 Mar 2016 23:27:18 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20Fixed=20key=20repeat=20for=20?= =?UTF-8?q?M=5FNBSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 6cee216a43..db6c9583eb 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -2,6 +2,7 @@ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" +#include "action_util.h" #include "led.h" #include "keymap_extras/keymap_bepo.h" #include "keymap_extras/keymap_canadian_multilingual.h" @@ -391,7 +392,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case M_GRV: return MACRO(DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); case M_NBSP: - return MACRO(DOWN(CSA_ALTGR), T(SPACE), UP(CSA_ALTGR), END); + // use weak mod such that pressing another key will not be affected + add_weak_mods(MOD_BIT(CSA_ALTGR)); + return MACRO(D(SPACE), END); } } else { hold_shift(); @@ -403,6 +406,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO(UP(CSA_ALTGR), D(LSFT), U(SCLN), END); case M_SCLN: return MACRO(D(LSFT), U(SCLN), END); + case M_NBSP: + del_weak_mods(MOD_BIT(CSA_ALTGR)); + return MACRO(U(SPACE), END); } } break; -- cgit v1.2.3 From aa5eb49edd993e2abe3adf814e030fcdda4a3596 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 2 Mar 2016 00:22:41 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20GR2A-shifted=20characters=20i?= =?UTF-8?q?n=20AltGr=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - define aliases for all GR2A-shifted characters - use the available characters in BÉPO over CSA AltGr layer --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 18 ++--- .../keymap_extras/keymap_canadian_multilingual.h | 86 +++++++++++++++++++--- 2 files changed, 84 insertions(+), 20 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index db6c9583eb..e339792bf3 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -181,13 +181,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * "////" indicates that the key is disabled (unsupported bépo character) * * ,--------------------------------------------------. ,--------------------------------------------------. - * | – | — | < | > | [ | ] | | | | ^ | ± | //// | //// | //// | ////// | + * | – | — | < | > | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | |dead '| & | œ |dead `| | | | //// | //// | ð | //// | ij | ////// | + * | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ////// | æ | ù |dead "| € | ̛’ |------| |------| //// | þ | ß | //// |dead ~| ////// | + * | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | \ | { | } | … | ~ | | | | //// | //// | μ | //// | //// | | + * | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | //// | |dead ¸| | * `----------------------------------' `-----------------------------------' @@ -212,11 +212,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UNDS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_NO, KC_NO, CSA_ETH, KC_NO, CSA_IJ, KC_NO, - KC_NO, CSA_THRN, CSA_SRPS, KC_NO, CSA_DTLD, KC_TRNS, - KC_TRNS, KC_NO, KC_NO, CSA_MU, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, + KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV, + KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO, + CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR, + KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, KC_TRNS, + KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index b1d7b4e779..c720088e8c 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -82,8 +82,8 @@ #define CSA_EURO ALTGR(KC_E) // € #define CSA_DEAD_GRAVE ALTGR(CSA_DEAD_CIRCUMFLEX) #define CSA_DGRV CSA_DEAD_GRAVE // dead ` -#define CSA_TILDE ALTGR(CSA_C_CEDILLA) // ~ -#define CSA_TILD CSA_TILDE +#define CSA_DEAD_TILDE ALTGR(CSA_C_CEDILLA) // ~ +#define CSA_DTLD CSA_DEAD_TILDE // Third row #define CSA_DEGREE ALTGR(KC_SCOLON) // ° @@ -102,7 +102,7 @@ #define CSA_NON_BREAKING_SPACE ALTGR(KC_SPACE) #define CSA_NBSP CSA_NON_BREAKING_SPACE -// GR2A-ed characters (non-exhaustive list) +// GR2A-ed characters // First row #define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹ #define CSA_SUP1 CSA_SUPERSCRIPT_ONE @@ -141,8 +141,8 @@ #define CSA_THORN GR2A(KC_P) // þ #define CSA_THRN CSA_THORN // nothing on ^ -#define CSA_DEAD_TILDE GR2A(CSA_C_CEDILLA) // dead ~ -#define CSA_DTLD CSA_DEAD_TILDE +#define CSA_TILDE GR2A(CSA_C_CEDILLA) // dead ~ +#define CSA_TILD CSA_TILDE // Third row #define CSA_AE_LIGATURE GR2A(KC_A) // æ @@ -175,17 +175,81 @@ #define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ― #define CSA_HZBR CSA_HORIZONTAL_BAR #define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead ˙ -#define CSA_DOTA CSA_DEAD_DOT_ABOVE +#define CSA_DDTA CSA_DEAD_DOT_ABOVE -// GR2A-shifted characters (non-exhaustive list) +// GR2A-shifted characters (different from capitalised GR2A-ed characters) // First row -#define CSA_PLUS_MINUS LSFT(GR2A(KC_9)) // ± -#define CSA_PSMS CSA_PLUS_MINUS +#define CSA_SOFT_HYPHEN GR2A(LSFT(CSA_SLASH)) // soft-hyphen, appears as a hyphen in wrapped word +#define CSA_SHYP CSA_SOFT_HYPHEN +#define CSA_INVERTED_EXCLAIM GR2A(KC_EXCLAIM) // ¡ +#define CSA_IXLM CSA_INVERTED_EXCLAIM +// nothing on 2 +#define CSA_POUND GR2A(LSFT(KC_3)) // £ +#define CSA_GBP CSA_POUND_SIGN +// already on ALTGR(KC_E) +#define CSA_EURO_BIS GR2A(LSFT(KC_4)) // € +#define CSA_EURB CSA_EURO_BIS +#define CSA_THREE_EIGHTHS GR2A(LSFT(KC_5)) // ⅜ +#define CSA_3ON8 CSA_THREE_EIGHTHS +#define CSA_FIVE_EIGHTHS GR2A(LSFT(KC_6)) // ⅝ +#define CSA_5ON8 CSA_FIVE_EIGHTHS +#define CSA_SEVEN_EIGHTHS GR2A(LSFT(KC_7)) // ⅞ +#define CSA_7ON8 CSA_SEVEN_EIGHTHS +#define CSA_TRADEMARK GR2A(LSFT(KC_8)) // ™ +#define CSA_TM CSA_TRADEMARK +#define CSA_PLUS_MINUS GR2A(LSFT(KC_9)) // ± +#define CSA_PSMS CSA_PLUS_MINUS +// nothing on 0 +#define CSA_INVERTED_QUESTION GR2A(LSFT(KC_MINUS)) // ¿ +#define CSA_IQST CSA_INVERTED_QUESTION +#define CSA_DEAD_OGONEK GR2A(LSFT(KC_EQUAL)) // dead ˛ +#define CSA_DOGO CSA_DEAD_OGONEK + +// Second row +#define CSA_REGISTERED_TRADEMARK GR2A(LSFT(KC_R)) // ® +#define CSA_RTM CSA_REGISTERED_TRADEMARK +#define CSA_YEN GR2A(LSFT(KC_Y)) // ¥ +#define CSA_YUAN CSA_YEN +#define CSA_UP_ARROW LSFT(CSA_DOWN_ARROW) // ↑ +#define CSA_DOTLESS_I GR2A(LSFT(KC_I)) // ı +#define CSA_DLSI CSA_DOTLESS_I +#define CSA_DEAD_RING GR2A(LSFT(CSA_DCRC)) // dead ° +#define CSA_DRNG CSA_DEAD_RING +#define CSA_DEAD_MACRON GR2A(LSFT(CSA_C_CEDILLA)) // dead ¯ +#define CSA_DMCR CSA_DEAD_MACRON + +// Third row +#define CSA_SECTION GR2A(LSFT(KC_S)) // § +#define CSA_SECT CSA_SECTION +#define CSA_ORDINAL_INDICATOR_A GR2A(LSFT(KC_F)) // ª +#define CSA_ORDA CSA_ORDINAL_INDICATOR_A +#define CSA_DEAD_DOUBLE_ACUTE LSFT(CSA_DEAD_ACUTE) // ˝ +#define CSA_DDCT CSA_DEAD_DOUBLE_ACUTE +#define CSA_DEAD_CARON GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ +#define CSA_DCAR CSA_DEAD_CARON +#define CSA_DEAD_BREVE GR2A(LSFT(CSA_A_GRAVE)) // dead ˘ +#define CSA_DBRV CSA_DEAD_BREVE // Fourth row -#define CSA_LEFT_QUOTE LSFT(GR2A(KC_V)) // ‘ +#define CSA_BROKEN_PIPE GR2A(LSFT(CSA_U_GRAVE)) // ¦ +#define CSA_BPIP CSA_BROKEN_PIPE +#define CSA_COPYRIGHT GR2A(LSFT(KC_C)) // © +#define CSA_CPRT CSA_COPYRIGHT +#define CSA_LEFT_QUOTE GR2A(LSFT(KC_V)) // ‘ #define CSA_LQOT CSA_LEFT_QUOTE -#define CSA_RIGHT_QUOTE LSFT(GR2A(KC_B)) // ’ +#define CSA_RIGHT_QUOTE GR2A(LSFT(KC_B)) // ’ #define CSA_RQOT CSA_RIGHT_QUOTE +#define CSA_EIGHTH_NOTE GR2A(LSFT(KC_N)) // ♪ +#define CSA_8NOT CSA_EIGHTH_NOTE +#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M)) // º +#define CSA_ORDO CSA_ORDINAL_INDICATOR_O +#define CSA_TIMES GR2A(LSFT(KC_COMMA)) // × +#define CSA_TIMS CSA_TIMES +#define CSA_OBELUS GR2A(LSFT(KC_DOT)) // ÷ +#define CSA_OBEL CSA_OBELUS +// more conventional name of the symbol +#define CSA_DIVISION_SIGN CSA_OBELUS +#define CSA_DVSN CSA_DIVISION_SIGN +// TODO GR2A(LSFT(CSA_E_ACUTE)) #endif -- cgit v1.2.3 From 6c672dfdc6f3a9e7df79462d79c34e5750a72edf Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 8 Mar 2016 22:06:27 +0100 Subject: =?UTF-8?q?B=C3=89PO=20over=20CSA:=20Altgr-shifted=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - all characters available directly in CSA - more explicit names for macros that switch accross CSA layers - use macros to implement the shifts next to the spaces --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 110 ++++++++++++++++++++++++------ 1 file changed, 88 insertions(+), 22 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index e339792bf3..2b76fea221 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -27,8 +27,10 @@ enum macros { UC_ELPS, // … END_UC, // indicates the last unicode character macro // other macros - M_TGCM, // toggle CA-mult - M_CMSFT, // toggle shift on CA-mult + M_TGCSA, // toggle BÉPO over CSA + M_CSA_SFT, // toggle shift on CSA + M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT) + M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT) // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT M_1, M_2, @@ -51,14 +53,16 @@ enum macros { M_FNLR, }; +#define CSA(name) M(M_CSA_##name) // calls a CSA macro + const uint16_t unicode_chars[] = { [UC_NDSH] = L'–', [UC_MDSH] = L'—', [UC_ELPS] = L'…', }; -/* shortcut for unicod character macros */ -#define MUC(name) M(UC_##name) +/* shortcut for unicode character macros */ +#define MUC(name) M(UC_##name) // calls a unicode macro const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer @@ -115,23 +119,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_DELT, KC_TAB, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_BSPC, KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, - M(M_CMSFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, + CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), ALT_T(KC_ESC), TG(LR_NUMR), KC_PGUP, - KC_SPC, KC_LSFT, KC_PGDN, + KC_SPC, CSA(SFT), KC_PGDN, // right hand KC_DELT, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W, KC_BSPC, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_ENT, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, M(M_CMSFT), + KC_ENT, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT), MO(LR_CSA_AGR), KC_PERC, KC_HOME, CSA_CCED, CTL_T(KC_END), KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_RSFT, KC_SPC + KC_DOWN, CSA(SFT), KC_SPC ), /* Shifted BÉPO over Canadian Multilingual * @@ -171,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, + CSA(SFT_AGR), M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -201,26 +205,71 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [LR_CSA_AGR] = KEYMAP( // left hand - MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS, - KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS, - KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT, - KC_TRNS, CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS, + KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS, + KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT, + CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_UNDS, KC_TRNS, KC_TRNS, + KC_UNDS, CSA(AGR_SFT), KC_TRNS, // right hand KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV, KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO, CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR, - KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, KC_TRNS, + KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT), KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_UNDS + KC_TRNS, CSA(AGR_SFT), KC_UNDS + ), +/* AltGr-shifted BÉPO over Canadian Multilingual + * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ¶ | //// | “ | ” | //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ¦ | ˝ | § | Œ | ` | | | | //// | //// | Ð | //// | IJ | ////// | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[LR_CSA_AGR_SFT] = KEYMAP( + // left hand + CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS, + KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO, + CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(AGR_SFT), KC_TRNS, + + // right hand + KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO, + KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO, + KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT), + CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(AGR_SFT), KC_TRNS ), /* Numeric Layer * @@ -289,7 +338,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // MEDIA AND MOUSE [LR_FN] = KEYMAP( - M(M_TGCM), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + M(M_TGCSA), 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, RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, @@ -359,20 +408,37 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) send_unicode(unicode_chars[id]); } break; - case M_TGCM: + case M_TGCSA: if (record->event.pressed) { default_layer_xor(1 << LR_CSA); } break; - case M_CMSFT: + case M_CSA_SFT: + // BÉPO over CSA: toggle shift layer + layer_invert(LR_CSA_SFT); if (record->event.pressed) { - layer_on(LR_CSA_SFT); hold_shift(); } else { release_shift(); - layer_off(LR_CSA_SFT); } break; + case M_CSA_SFT_AGR: + // BÉPO over CSA: from shift layer, momentary altgr+shift layer + layer_invert(LR_CSA_AGR); + layer_invert(LR_CSA_AGR_SFT); + if (record->event.pressed) { + // shift not needed for LR_CSA_AGR_SFT + release_shift(); + } else { + // back to shift layer + hold_shift(); + } + break; + case M_CSA_AGR_SFT: + // BÉPO over CSA: from altgr layer, momentary altgr+shift layer + layer_invert(LR_CSA_SFT); + layer_invert(LR_CSA_AGR_SFT); + break; case M_1 ... M_0: case M_DEGR: case M_SCLN: -- cgit v1.2.3 From 89b647fe2b345fd26940508784482d37148ddc45 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 13 Mar 2016 19:02:43 +0100 Subject: Replace Play by temporary num layer with left Alt - move play on fn+left thumb - move prev/next besides play --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 51 +++++++++++++++++++------------ 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 2b76fea221..a37ce7f316 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -49,8 +49,9 @@ enum macros { // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR M_CRC, // other layer macros - M_DBL0, - M_FNLR, + M_DBL0, // double 0 + M_FNLR, // fn layer + M_NMAL, // num+alt }; #define CSA(name) M(M_CSA_##name) // calls a CSA macro @@ -76,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui | Play |App/Alt| |Alt Gr| % | Home | Ç |End/Ctl| + * |LCtrl | fn | LGui |numAlt|App/Alt| |Alt Gr| % | Home | Ç |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. * |Esc/Alt| num | | Left |Right | @@ -90,11 +91,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [LR_BASE] = KEYMAP( // layer 0 : default // left hand - BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, - KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, - BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, - KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, + BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, + KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, + KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), ALT_T(KC_APP), ALT_T(KC_ESC), TG(LR_NUMR), KC_PGUP, @@ -120,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_BSPC, KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), ALT_T(KC_APP), ALT_T(KC_ESC), TG(LR_NUMR), KC_PGUP, @@ -304,6 +305,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, + // right hand KC_TRNS, 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, @@ -331,22 +333,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | Next | | | - * | Mute | |------| |------| | | - * | | | | | Prev | | | + * | | | Next | | | | | + * | Mute | play |------| |------| | | + * | | | Prev | | | | | * `--------------------' `--------------------' */ // MEDIA AND MOUSE [LR_FN] = KEYMAP( M(M_TGCSA), 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, - RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, - 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_VOLU, + RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, + KC_TRNS, KC_TRNS, S(KC_DELT), LCTL(KC_INS),S(KC_INS), 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, + KC_MPRV, + KC_MUTE, KC_MPLY, KC_MNXT, + // 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, @@ -355,8 +358,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_MPRV, - KC_MNXT, KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), }; @@ -492,6 +495,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) layer_invert(LR_NUMR); layer_invert(LR_FN); break; + case M_NMAL: + layer_invert(LR_NUMR); + if (record->event.pressed) { + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + } + break; } return MACRO_NONE; }; -- cgit v1.2.3 From 4e25342b417b64e0830886407f3842b68198f8d1 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 13 Mar 2016 19:17:37 +0100 Subject: =?UTF-8?q?Use=20TG()=20to=20switch=20to=20B=C3=89PO=20over=20CSA,?= =?UTF-8?q?=20and=20use=20KC=5FTRNS=20in=20LR=5FCSA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Simplifies future changes to modifier and special keys + removed M_TGCSA macro --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 42 +++++++++++++------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index a37ce7f316..bdb7354409 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -17,7 +17,7 @@ enum layers { LR_FN, // fn layer }; -#define IS_CA_MULT_ENABLED() (default_layer_state & (1 << LR_CSA)) +#define IS_CA_MULT_ENABLED() (layer_state & (1 << LR_CSA)) enum macros { // Characters that do not exist in CSA and must be implemented based on unicode support @@ -27,7 +27,6 @@ enum macros { UC_ELPS, // … END_UC, // indicates the last unicode character macro // other macros - M_TGCSA, // toggle BÉPO over CSA M_CSA_SFT, // toggle shift on CSA M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT) M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT) @@ -117,26 +116,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [LR_CSA] = KEYMAP( // left hand - KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_DELT, - KC_TAB, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_BSPC, - KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, - CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), ALT_T(KC_APP), + KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_TRNS, + KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, + CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - ALT_T(KC_ESC), TG(LR_NUMR), - KC_PGUP, - KC_SPC, CSA(SFT), KC_PGDN, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_DELT, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W, - KC_BSPC, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_ENT, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT), - MO(LR_CSA_AGR), KC_PERC, KC_HOME, CSA_CCED, CTL_T(KC_END), + KC_TRNS, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W, + KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT), + MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_TRNS, - KC_LEFT, KC_RGHT, - KC_UP, - KC_DOWN, CSA(SFT), KC_SPC + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(SFT), KC_TRNS ), /* Shifted BÉPO over Canadian Multilingual * @@ -340,7 +339,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // MEDIA AND MOUSE [LR_FN] = KEYMAP( - M(M_TGCSA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + TG(LR_CSA), 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, RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, KC_TRNS, KC_TRNS, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD, @@ -411,11 +410,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) send_unicode(unicode_chars[id]); } break; - case M_TGCSA: - if (record->event.pressed) { - default_layer_xor(1 << LR_CSA); - } - break; case M_CSA_SFT: // BÉPO over CSA: toggle shift layer layer_invert(LR_CSA_SFT); -- cgit v1.2.3 From 4289ff793938bbfa2d85c0022bc765bba3eb1347 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 13 Mar 2016 19:38:58 +0100 Subject: Removed remaining ALT_T and CTL_T keys Having "true" modifiers is more reliable and practical. - moved APP in place of HOME - moved HOME in place of LSFT on left thumb - moved END in place of RSFT on right thumb (Ctrl+End with single hand!) - removed ALT_T from KC_ESC --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index bdb7354409..cd7d24ee83 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -76,13 +76,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui |numAlt|App/Alt| |Alt Gr| % | Home | Ç |End/Ctl| - * `-----------------------------------' `-----------------------------------' + * |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl| + * `----------------------------------' `----------------------------------' * ,--------------. ,-------------. - * |Esc/Alt| num | | Left |Right | + * | Esc | num | | Left |Right | * ,------+-------+------| |------+------+------. * | | | PgUp | | Up | | | - * |Space |LShift |------| |------|RShift|Space | + * |Space | Home |------| |------| End |Space | * | | | PgDn | | Down | | | * `---------------------' `--------------------' */ @@ -90,26 +90,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [LR_BASE] = KEYMAP( // layer 0 : default // left hand - BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, - KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, - BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, - KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), ALT_T(KC_APP), + BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, + BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, + KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, + KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT, - ALT_T(KC_ESC), TG(LR_NUMR), - KC_PGUP, - KC_SPC, KC_LSFT, KC_PGDN, + KC_ESC, TG(LR_NUMR), + KC_PGUP, + KC_SPC, KC_HOME, KC_PGDN, // right hand KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W, KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT, - BP_ALGR, BP_PERC, KC_HOME, BP_CCED, CTL_T(KC_END), + BP_ALGR, BP_PERC, KC_APP, BP_CCED, KC_RCTL, KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_RSFT, KC_SPC + KC_DOWN, KC_END, KC_SPC ), /** * Same as default but for use with Canadian Multilingual on OS side @@ -131,11 +131,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT), - MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_TRNS, + MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, CSA(SFT), KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS ), /* Shifted BÉPO over Canadian Multilingual * -- cgit v1.2.3 From 5bc69c5b0a25d12aa8d96c58b01304453d5ccbd6 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 6 Apr 2016 00:09:03 +0200 Subject: Fixed compilation issues --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index cd7d24ee83..339faf5772 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -502,12 +502,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) }; // Runs just one time when the keyboard initializes. -void * matrix_init_user(void) { - return NULL; +void matrix_init_user(void) { }; // Runs constantly in the background, in a loop. -void * matrix_scan_user(void) { +void matrix_scan_user(void) { ergodox_board_led_off(); ergodox_right_led_1_off(); @@ -525,5 +524,4 @@ void * matrix_scan_user(void) { if (host_keyboard_leds() & (1< Date: Wed, 6 Apr 2016 00:13:18 +0200 Subject: Add delay to CSA macros using dead keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With the BÉPO over CSA on Windows, the dead keys stop working after a while, like in http://superuser.com/questions/776558/suddenly-dead-keys-dont-work I suspect this is triggered by too fast typing from macros. --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 339faf5772..7fac3597f6 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -453,7 +453,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case M_SCLN: return MACRO(D(SCLN), END); case M_GRV: - return MACRO(DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); + return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); case M_NBSP: // use weak mod such that pressing another key will not be affected add_weak_mods(MOD_BIT(CSA_ALTGR)); @@ -477,7 +477,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_CRC: if (record->event.pressed) { - return MACRO(TYPE(CSA_DCRC), T(SPACE), END); + return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END); } break; case M_DBL0: -- cgit v1.2.3 From db35212422f228cd9ddf68b61f47380fe1842e83 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 6 Apr 2016 00:13:18 +0200 Subject: Removed D(LSFT) is CSA macros Were causing stuck LSFT weak mods. --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 7fac3597f6..8d77619856 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -466,9 +466,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_1 + (id - M_1)); break; case M_DEGR: - return MACRO(UP(CSA_ALTGR), D(LSFT), U(SCLN), END); + return MACRO(UP(CSA_ALTGR), U(SCLN), END); case M_SCLN: - return MACRO(D(LSFT), U(SCLN), END); + return MACRO(U(SCLN), END); case M_NBSP: del_weak_mods(MOD_BIT(CSA_ALTGR)); return MACRO(U(SPACE), END); -- cgit v1.2.3 From 8d6bbf2757d7dc085b0765feda8d67b48c6c8f8b Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 6 Apr 2016 00:19:12 +0200 Subject: Fix issue #221: LGUI(KC_LSFT) does not work - on mod keys, register LGUI, LSFT etc. as normal mods instead of weak mods: - they won't be cleared by layer switching - LSFT(KC_LGUI) will now have the same behavior as LGUI(KC_LSFT) --- tmk_core/common/action.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 2ccc0e0b94..9010896343 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -88,14 +88,24 @@ void process_action(keyrecord_t *record) action.key.mods<<4; if (event.pressed) { if (mods) { - add_weak_mods(mods); + if (IS_MOD(action.key.code)) { + // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless. + // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT) + add_mods(mods); + } else { + add_weak_mods(mods); + } send_keyboard_report(); } register_code(action.key.code); } else { unregister_code(action.key.code); if (mods) { - del_weak_mods(mods); + if (IS_MOD(action.key.code)) { + del_mods(mods); + } else { + del_weak_mods(mods); + } send_keyboard_report(); } } -- cgit v1.2.3 From c1f143124d07ddd1023d5d5e86b7c3b93961667f Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Tue, 19 Apr 2016 14:21:23 -0700 Subject: initial changes, no doc changes --- keyboard/ergodox_ez/keymaps/phoenix/default.png | Bin 0 -> 193672 bytes .../ergodox_ez/keymaps/phoenix/default_highres.png | Bin 0 -> 1459389 bytes keyboard/ergodox_ez/keymaps/phoenix/keymap.c | 184 +++++++++++++++++++++ keyboard/ergodox_ez/keymaps/phoenix/readme.md | 10 ++ 4 files changed, 194 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/phoenix/default.png create mode 100644 keyboard/ergodox_ez/keymaps/phoenix/default_highres.png create mode 100644 keyboard/ergodox_ez/keymaps/phoenix/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/phoenix/readme.md diff --git a/keyboard/ergodox_ez/keymaps/phoenix/default.png b/keyboard/ergodox_ez/keymaps/phoenix/default.png new file mode 100644 index 0000000000..6575f7b5e3 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/phoenix/default.png differ diff --git a/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png b/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png new file mode 100644 index 0000000000..7d9f045f43 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png differ diff --git a/keyboard/ergodox_ez/keymaps/phoenix/keymap.c b/keyboard/ergodox_ez/keymaps/phoenix/keymap.c new file mode 100644 index 0000000000..86aae910d5 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/phoenix/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 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | Home | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgUp | | | + * | Space|Backsp|------| |------| Enter |Space | + * | |ace | LGui | | 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, LSFT(KC_MINS), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_HOME, + KC_END, + KC_SPC,KC_BSPC,KC_LGUI, + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,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_TRNS, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, + 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_0, KC_0, KC_DOT, 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/phoenix/readme.md b/keyboard/ergodox_ez/keymaps/phoenix/readme.md new file mode 100644 index 0000000000..8f6dba45e9 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/phoenix/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) -- cgit v1.2.3 From 7929ee487918a306520a680f4670a9812ff7b650 Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Mon, 25 Apr 2016 15:40:52 -0700 Subject: update readme --- keyboard/ergodox_ez/keymaps/phoenix/default.png | Bin 193672 -> 0 bytes .../ergodox_ez/keymaps/phoenix/default_highres.png | Bin 1459389 -> 0 bytes keyboard/ergodox_ez/keymaps/phoenix/readme.md | 12 ++++++------ 3 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/phoenix/default.png delete mode 100644 keyboard/ergodox_ez/keymaps/phoenix/default_highres.png diff --git a/keyboard/ergodox_ez/keymaps/phoenix/default.png b/keyboard/ergodox_ez/keymaps/phoenix/default.png deleted file mode 100644 index 6575f7b5e3..0000000000 Binary files a/keyboard/ergodox_ez/keymaps/phoenix/default.png and /dev/null differ diff --git a/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png b/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png deleted file mode 100644 index 7d9f045f43..0000000000 Binary files a/keyboard/ergodox_ez/keymaps/phoenix/default_highres.png and /dev/null differ diff --git a/keyboard/ergodox_ez/keymaps/phoenix/readme.md b/keyboard/ergodox_ez/keymaps/phoenix/readme.md index 8f6dba45e9..b1053bfb78 100644 --- a/keyboard/ergodox_ez/keymaps/phoenix/readme.md +++ b/keyboard/ergodox_ez/keymaps/phoenix/readme.md @@ -1,10 +1,10 @@ -# ErgoDox EZ Default Configuration +# ErgoDox EZ Phoenix Configuration -## Changelog +I started working using the default layout. The changes that I made are largely things that I consistely do wrong. -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). +As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other. -This is what we ship with out of the factory. :) The image says it all: +## Changelog -![Default](default_highres.png) +* April 25, 2016 (V1.0): + * Initial submission. -- cgit v1.2.3 From c2a3df31239249b2fb65e2552376daac0e49ae61 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 27 Apr 2016 12:52:47 -0400 Subject: Saving crontab for user on host --- cbbrowne.cbbrowne | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 cbbrowne.cbbrowne diff --git a/cbbrowne.cbbrowne b/cbbrowne.cbbrowne new file mode 100644 index 0000000000..622e4eedf8 --- /dev/null +++ b/cbbrowne.cbbrowne @@ -0,0 +1,25 @@ +* * * * * /home/cbbrowne/bin/cookie > /dev/null 2> /dev/null +2 2-5 * * * /home/cbbrowne/GitConfig/Scripts/cfcleanup > /dev/null 2> /dev/null +#2,22,42 * * * * /usr/bin/offlineimap -u Noninteractive.Quiet > /dev/null 2> /dev/null +# Edit this file to introduce tasks to be run by cron. +# +# Each task to run has to be defined through a single line +# indicating with different fields when the task will be run +# and what command to run for the task +# +# To define the time you can provide concrete values for +# minute (m), hour (h), day of month (dom), month (mon), +# and day of week (dow) or use '*' in these fields (for 'any').# +# Notice that tasks will be started based on the cron's system +# daemon's notion of time and timezones. +# +# Output of the crontab jobs (including errors) is sent through +# email to the user the crontab file belongs to (unless redirected). +# +# For example, you can run a backup of all your user accounts +# at 5 a.m every week with: +# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ +# +# For more information see the manual pages of crontab(5) and cron(8) +# +# m h dom mon dow command -- cgit v1.2.3 From d1c70328f8d8ded6ce1e5422b468fc41ef315e7d Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Thu, 12 May 2016 10:32:26 -0700 Subject: update volume control to match arrow change --- keyboard/ergodox_ez/keymaps/phoenix/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/phoenix/keymap.c b/keyboard/ergodox_ez/keymaps/phoenix/keymap.c index 86aae910d5..86ee5a65c3 100644 --- a/keyboard/ergodox_ez/keymaps/phoenix/keymap.c +++ b/keyboard/ergodox_ez/keymaps/phoenix/keymap.c @@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -128,7 +128,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_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_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK -- cgit v1.2.3 From 8090fb82ff532308c8446cc85fe0417b94cd5042 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Tue, 24 May 2016 02:26:16 -0500 Subject: Initial commit of keymaps/maz with default config --- keyboard/ergodox_ez/keymaps/maz/default.png | Bin 0 -> 193672 bytes .../ergodox_ez/keymaps/maz/default_highres.png | Bin 0 -> 1459389 bytes keyboard/ergodox_ez/keymaps/maz/keymap.c | 184 +++++++++++++++++++++ keyboard/ergodox_ez/keymaps/maz/readme.md | 10 ++ 4 files changed, 194 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/maz/default.png create mode 100644 keyboard/ergodox_ez/keymaps/maz/default_highres.png create mode 100644 keyboard/ergodox_ez/keymaps/maz/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/maz/readme.md diff --git a/keyboard/ergodox_ez/keymaps/maz/default.png b/keyboard/ergodox_ez/keymaps/maz/default.png new file mode 100644 index 0000000000..6575f7b5e3 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/maz/default.png differ diff --git a/keyboard/ergodox_ez/keymaps/maz/default_highres.png b/keyboard/ergodox_ez/keymaps/maz/default_highres.png new file mode 100644 index 0000000000..7d9f045f43 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/maz/default_highres.png differ diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c new file mode 100644 index 0000000000..1c3bb51713 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/maz/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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, 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, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md new file mode 100644 index 0000000000..8f6dba45e9 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) -- cgit v1.2.3 From f5e486b50dba14dcd33f82f0159e917bb5c61b03 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:22:20 -0500 Subject: Change r2c1 from Del to Tab --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1c3bb51713..1b66b278b3 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [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_E, KC_R, KC_T, TG(SYMB), + 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, 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, -- cgit v1.2.3 From 3b0fd160df04f4d93f8d8442c8c61d21f0ce3740 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:38:25 -0500 Subject: Change r3c1 from backspace to esc/control --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1b66b278b3..97256c7b35 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -32,10 +32,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_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, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + 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, -- cgit v1.2.3 From 0b68db4e4347e041bea8e32b7eedd1827288fb0a Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:42:58 -0500 Subject: Change rr3c1 from quotes/gui to quotes/ctl --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 97256c7b35..f9f38de8b0 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -36,14 +36,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, 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, + 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), MEH_T(KC_NO),KC_N, 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), -- cgit v1.2.3 From 514a7038b1aa984014bad89c2a44f2a8cf9c15b4 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:46:38 -0500 Subject: Add ctrl macro to spc and ent on thumb cluster (outter-most keys_) --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f9f38de8b0..1e6c28de9a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, + CTL_T(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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,KC_TAB, KC_ENT + KC_PGDN,KC_TAB, CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * -- cgit v1.2.3 From fbbfb3cbad165a2d800befc3bbbebef4f8ff200d Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:51:16 -0500 Subject: Add todo: override holding macro functionlity --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1e6c28de9a..c926d32c18 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -28,6 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |ace | End | | PgDn | | | * `--------------------' `----------------------' */ + // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default -- cgit v1.2.3 From 5486b9e80e928133eeaebf628c32ec7e375e3fd4 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:58:08 -0500 Subject: Add todo: windows and nix layers --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index c926d32c18..f0c611555d 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -29,6 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) + // TODO: maybe make almost identical layers but for wintdows and mac // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default -- cgit v1.2.3 From fd44d1cb39e2090070bf6532d8fb8bd6a9ae5fca Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:09:18 -0500 Subject: Update layout viz --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f0c611555d..fc504ad722 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -12,9 +12,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | = | 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 | \ | + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -24,8 +24,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | App | LGui | | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | - * | Space|Backsp|------| |------| Tab |Enter | - * | |ace | End | | PgDn | | | + * | Space| Bksp |------| |------| Tab |Enter | + * | ctrl | gui | End | | PgDn | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) -- cgit v1.2.3 From 03aeb405167d80fb1b303725e2766cee0b855467 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:19:30 -0500 Subject: Change mouse clicks to j and k --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index fc504ad722..19da844947 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -30,6 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) // TODO: maybe make almost identical layers but for wintdows and mac + // TODO: find a do nothing key, so you aren't tempted by useless keys // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default @@ -101,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | MsUp | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -121,14 +122,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, 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_BTN1, KC_BTN2, 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, -- cgit v1.2.3 From 09e172f56a024a6618140df73cd0d05d22632eb1 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:21:29 -0500 Subject: Tap then hold built-in functionality actually overrides the ctrl/alt/etc. macros --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 19da844947..69a43b1362 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | ctrl | gui | End | | PgDn | gui | ctrl | * `--------------------' `----------------------' */ - // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) + // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys // If it accepts an argument (i.e, is a function), it doesn't need KC_. -- cgit v1.2.3 From fbbd32376b8d1a818b62dbbf0f2d9946221ffc56 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:25:09 -0500 Subject: Add gui macro to bksp and tab (second outter-most keys) on both thumb clusters --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 69a43b1362..8adabf9a74 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, - CTL_T(KC_SPC),KC_BSPC,KC_END, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_END, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -51,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,KC_TAB, CTL_T(KC_ENT) + KC_PGDN,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * -- cgit v1.2.3 From 59dc19940a3c5f29860de7b7d7e7a96ea27692c2 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:31:57 -0500 Subject: Add notes --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 8adabf9a74..986cbb52db 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -31,6 +31,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys + // TODO: add vi layer for arrow keys and shit on hjkl? + // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default -- cgit v1.2.3 From 66f9cdd041eb6a97658f32fe79cf70e250660c50 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:43:06 -0500 Subject: Change bottom keycluster keys to be alt temporarily until a more permanent solution is though up... although you just now lost your arrow keys, so idk what to do about that tomorrow lol --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 986cbb52db..33878d8b7f 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -25,13 +25,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | End | | PgDn | gui | ctrl | + * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys // TODO: add vi layer for arrow keys and shit on hjkl? + // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* @@ -44,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, - CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_END, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -53,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,GUI_T(KC_TAB), CTL_T(KC_ENT) + KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * -- cgit v1.2.3 From 733596d800cbeccf43ede053d3695421cc538b04 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Thu, 26 May 2016 02:12:57 -0500 Subject: Fix formatting --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 33878d8b7f..20df190709 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | Alt | | Alt | gui | ctrl | + * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations -- cgit v1.2.3 From ac02b0f397a77e6c99f90be11b4589914e9079a7 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Thu, 26 May 2016 02:17:07 -0500 Subject: Fix formatting --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 20df190709..54427a2f4c 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | | | |VolUp |VolDn | Mute | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | -- cgit v1.2.3 From 861f0f78e168e4f1649cf2a168e0a4e17d06f5cb Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Thu, 26 May 2016 15:08:01 -0700 Subject: zweihander-osx: Bump ALFRED_LEAD_TIME to 250ms --- keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c | 4 ++-- keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index 3444152bc3..dbf2fad78e 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -11,7 +11,7 @@ #define BBED 2 // BBEdit #define TMNL 3 // Terminal #define SAFA 4 // Safari -#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input +#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [SYMB] = KEYMAP( // left hand KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS, + KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 599d581fe4..d505d617f1 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -15,12 +15,12 @@ :1000E0001C141C141C141C141C141C141C141C1490 :1000F0001C141C141C141C141C141C141C141C1480 :100100002E143B14421449145314750A01E2012CB5 -:10011000022C02E2746401160216010402040109B1 +:10011000022C02E274FA011602160104020401091B :1001200002090104020401150215010C020C012848 -:10013000022800750A01E2012C022C02E27464011B +:10013000022800750A01E2012C022C02E274FA0185 :10014000170217010802080115021501100210011B :100150000C020C0111021101040204010F020F0133 -:1001600028022800750A01E2012C022C02E27464C4 +:1001600028022800750A01E2012C022C02E274FA2E :100170000105020501050205010802080107020741 :10018000010C020C011702170128022800750A0150 :10019000E30116021602E301E3012B022B02E30145 -- cgit v1.2.3 From e7e83b1f1868b4b3c95536e401091d394ee2112e Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Fri, 27 May 2016 18:41:16 -0700 Subject: zweihander-osx: Add =, :, juggle Home/End --- keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index dbf2fad78e..0dfc1f68cd 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -66,16 +66,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | = | | + * | | | | | | = | | | | : | 1 | 2 | 3 | = | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | 0 | . | ← | → | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | Home | | | + * | | | | | | | | * | | |------| |------| | | - * | | | | | End | | | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -84,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, @@ -93,11 +93,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, + KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, - KC_HOME, - KC_END , KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), /* Keymap 2: Media keys * @@ -137,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, LSFT(KC_SPC), KC_SPC , 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_END , LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) ), }; -- cgit v1.2.3 From 13810e4822d57553caa5aea537af7e80ad701589 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Mon, 30 May 2016 15:44:59 -0700 Subject: zweihander: Add :, disable sleep LED waves --- keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk | 2 ++ keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk b/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk new file mode 100644 index 0000000000..6e3d088a43 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk @@ -0,0 +1,2 @@ +# Don’t do a tricolor wave when the computer is shut down in Windows +SLEEP_LED_ENABLE = no diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown index 7bce7c6909..3b7f52941a 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown @@ -42,4 +42,4 @@ I press C-a, C-e, and C-k all the time. It’s difficult to press these key comb ## use spreadsheets -All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. +All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. There’s also a colon there for entering times and maybe IPv6 addresses. Not that I expect people to type IPv6 addresses into a spreadsheet, but, y’know. -- cgit v1.2.3 From 7b8857a368f53a102e402f27fce55ef214539bfd Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Tue, 31 May 2016 16:15:35 -0700 Subject: zweihander-osx: use eject instead of power MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://support.apple.com/en-us/HT201236 says that ⌃⌘⏏ will quit all apps and then restart your Mac; ⌃⌘-power will shut things down in an…ungraceful fashion. I reboot into Windows fairly frequently; I'd rather have the nice behavior at my fingertips, not the rude one. --- .../ergodox_ez/keymaps/zweihander-osx/keymap.c | 4 +- .../keymaps/zweihander-osx/zweihander-osx.hex | 2203 ++++++++++---------- 2 files changed, 1097 insertions(+), 1110 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index 0dfc1f68cd..f1a2956b59 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | ⏏ | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_EJCT, KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index d505d617f1..44e4ab0f3f 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -1,20 +1,20 @@ -:100000000C94D3020C9417030C9417030C9417034D -:100010000C9417030C9417030C9417030C941703F8 -:100020000C9417030C9417030C94CF0D0C94A10E91 -:100030000C9417030C9417030C9417030C941703D8 -:100040000C9417030C94AB220C9417030C94170315 -:100050000C9417030C943E1C0C9417030C94170378 -:100060000C9417030C9417030C9417030C941703A8 -:100070000C9417030C9417030C9417030C94170398 -:100080000C9417030C9417030C9417030C94170388 -:100090000C9417030C9417030C9417030C94170378 -:1000A0000C9417030C9417030C9417030E0F300FC6 -:1000B0001E10300F1E10750F980F1E10ED0F001040 -:1000C000CF12CF12FE12FE1234135413851485146E -:1000D0005F1385140F140F147614851485147F1480 -:1000E0001C141C141C141C141C141C141C141C1490 -:1000F0001C141C141C141C141C141C141C141C1480 -:100100002E143B14421449145314750A01E2012CB5 +:100000000C94B3020C94F7020C94F7020C94F702D0 +:100010000C94F7020C94F7020C94F7020C94F7027C +:100020000C94F7020C94F7020C94B00D0C94820E11 +:100030000C94E01B0C94F7020C94F7020C94F7025A +:100040000C94F7020C94F7020C94F7020C94F7024C +:100050000C94F7020C94481C0C94F7020C94F702D1 +:100060000C94F7020C94F7020C94F7020C94F7022C +:100070000C94F7020C94F7020C94F7020C94F7021C +:100080000C94F7020C94F7020C94F7020C94F7020C +:100090000C94F7020C94F7020C94F7020C94F702FC +:1000A0000C94F7020C94F7020C94F702EF0E110F68 +:1000B000FF0F110FFF0F560F790FFF0FCE0FE10F3C +:1000C000B012B012DF12DF12151335136614661466 +:1000D00040136614F013F01357146614661460147A +:1000E000FD13FD13FD13FD13FD13FD13FD13FD1390 +:1000F000FD13FD13FD13FD13FD13FD13FD13FD1380 +:100100000F141C1423142A143414750A01E2012C50 :10011000022C02E274FA011602160104020401091B :1001200002090104020401150215010C020C012848 :10013000022800750A01E2012C022C02E274FA0185 @@ -40,13 +40,13 @@ :100270000000003A002F0036020100010001003B9F :1002800000300037020100010001003C002F02266F :10029000020100010001003D0030022702010001BF -:1002A0000001003E003402340001000000010001A2 +:1002A0000001003E00340234002E00000001000175 :1002B0000001000000010000000100010001000039 -:1002C000000100000001003F0038002D0024020062 -:1002D0000001004000240021001E0027004A0041C8 +:1002C000000100000001003F0038002D0033020053 +:1002D0000001004000240021001E00270001004111 :1002E00000250022001F00370001004200260023E5 :1002F00000200050000100430025022E022E004F76 -:10030000004D004400450001000100010000000113 +:10030000000100440045000100010001000000015F :10031000000100010001000100000069000100016E :10032000000100010001006A000100043001000129 :1003300000010001004B004E00010001000100011E @@ -54,9 +54,9 @@ :100350000002300000010001000100000001000067 :100360000001001408010000000100000001001A53 :100370000830082F082C0200000100350A520C50EA -:10038000002C00A9000100350852005100AC00AA61 +:10038000002C00A9004D00350852005100AC00AA15 :100390000019080100510C4F00AB00A8000608012D -:1003A0000001000100010001001B08A5000100AED2 +:1003A0000001000100010001001B08B0000100AEC7 :1003B0000001000100000016034500720067006F95 :1003C0000044006F007800200045005A000000162D :1003D000034500720067006F0044006F0078002042 @@ -84,1089 +84,1076 @@ :1005300029E71500250195087501810295017508C7 :10054000810105081901290595057501910295019B :10055000750391010507190029FF150025FF950670 -:1005600075088100C00000000000000000000000CD -:10057000010204060A0F17202C3A4A5D71879DB3C9 -:10058000C7DAE9F5FCFFFCF5E9DAC7B39D87715DD1 -:100590004A3A2C20170F0A0604020100000000004E -:1005A00000000000000011241FBECFEFDAE0DEBF24 -:1005B000CDBF04B603FE24C08091FB019091FC01E5 -:1005C000A091FD01B091FE018730904BA740B04B48 -:1005D000B9F41092FB011092FC011092FD011092EF -:1005E000FE0114BE84B7877F84BF88E10FB6F894FC -:1005F00080936000109260000FBEE0E0FFE3099579 -:1006000011E0A0E0B1E0E4EEF8E402C005900D9244 -:10061000A433B107D9F711E0A4E3B1E001C01D9202 -:10062000AB3FB107E1F70E94130B0C9470240C94BC -:100630000000FC016230B9F028F4662341F061301B -:1006400061F023C06330A9F06430C9F01EC082811C -:100650008823D9F088EA91E0089582818823A9F05F -:100660008DE891E008958281882379F084E691E015 -:1006700008958281882349F083E391E0089582817F -:10068000882319F08AE091E0089580E090E00895D1 -:1006900008956091BD017091BE018091BF0190915C -:1006A000C0010E94701B56985E9825982D98269838 -:1006B0002E9827982F98813019F0823021F00895D4 -:1006C000259A2D9A0895269A2E9A08950C944903F6 -:1006D00056985E9825982D9826982E9827982F98AA -:1006E0008FEF90E0909389008093880090938B0027 -:1006F00080938A0090938D0080938C00259A2D9A88 -:100700002FEF80E792E0215080409040E1F700C059 -:100710000000269A2E9A2FEF80E792E02150804029 -:100720009040E1F700C00000279A2F9A2FEF80E752 -:1007300092E0215080409040E1F700C000002598F1 -:100740002D982FEF80E792E0215080409040E1F714 -:1007500000C0000026982E982FEF80E792E02150ED -:1007600080409040E1F700C0000027982F985698ED -:100770005E9825982D9826982E9827982F9808955A -:1007800089EA8093800089E08093810024982C98E6 -:100790003F988AB18F748AB96E98479A8BB1806BF3 -:1007A0008BB9769A0E9468030C94480380E2809388 -:1007B00000018091340181110EC00E94250481E066 -:1007C000809334012FEF83ED90E3215080409040DF -:1007D000E1F700C0000080E40E942B048093000138 -:1007E00081112EC00E94550480930001811128C000 -:1007F0000E94550480930001811122C08FE30E9462 -:1008000055048093000181111BC00E944D0480E4B7 -:100810000E942B0480930001811112C08CE00E9481 -:1008200055048093000181110BC00E9455048093F0 -:100830000001811105C08FE30E94550480930001DF -:100840000E944D048091000108951092B9008AE041 -:100850008093B800089594EA9093BC009091BC00F6 -:1008600097FFFCCF9091B900987F983021F090319C -:1008700011F081E008958093BB0084E88093BC0070 -:100880008091BC0087FFFCCF8091B900887F8831C0 -:1008900011F0803471F780E0089584E98093BC0002 -:1008A0008091BC0084FDFCCF08958093BB0084E858 -:1008B0008093BC008091BC0087FFFCCF9091B90071 -:1008C000987F81E0983209F480E0089584E880936D -:1008D000BC008091BC0087FFFCCF8091BB000895D5 -:1008E00080910001811115C080E40E942B04809347 -:1008F000000181110CC082E10E9455048093000127 -:10090000811105C08FEF0E945504809300010E9461 -:100910004D0484B1807F84B985B1807F85B98AB167 -:10092000837F8AB98BB1837F8BB93E9846980895AF -:100930000E94D603809300010E94700480B38C70E3 -:1009400080BB81B3836F81BBA6E3B1E0E4E4F1E057 -:100950008EE08E0F11921D928E13FCCF0C94C0036B -:10096000BF92CF92DF92EF92FF920F931F93CF939C -:10097000DF9380910001882379F0809135018F5FAA -:1009800080933501811108C00E94D6038093000135 -:10099000811102C00E94680306E311E0C0E0D0E0CC -:1009A000DD24D39482E0C82EEE24E394F12CC730EA -:1009B000D10500F580910001811164C080E40E949E -:1009C0002B0480930001811112C082E10E94550422 -:1009D0008093000181110BC0C7010C2E01C0880F4C -:1009E0000A94EAF780950E945504809300010E94C2 -:1009F0004D0448C0CA30A1F028F4C83059F0C930BD -:100A000061F005C0CC3089F070F0CD3089F0209ACB -:100A1000289810C0219A29980DC0229A2A980AC0B5 -:100A2000239A2B9807C0529A01C0539A5B9802C030 -:100A30003E9A469890EA9A95F1F79FB1799902C04B -:100A400082E001C080E091709D25982B7C9902C0C6 -:100A500084E001C080E0892B7D9902C038E001C0AC -:100A600030E0832B7E9902C020E101C020E0822B80 -:100A70009FB19095991F9927991F9295990F907EF4 -:100A8000892B0FC080910001811149C080E40E9430 -:100A90002B0480930001882379F1B12C0E944D042E -:100AA0008B2DF8019081981719F08083C092010175 -:100AB0000E94700421960F5F1F4FCE30D10509F0C0 -:100AC00076CF80910101882361F1815080930101EB -:100AD000882339F08FE99FE00197F1F700C000000B -:100AE00020C0A4E4B1E0E6E3F1E0CF01825F9191A0 -:100AF0009D938E13FCCF15C083E10E945504809313 -:100B000000018111CACF81E40E942B04809300016F -:100B10008111C3CF0E946604B82EB094BFCF80E08D -:100B2000C0CF0E94660381E0DF91CF911F910F91AA -:100B3000FF90EF90DF90CF90BF900895E82FF0E006 -:100B4000EC5BFE4F8081089508950F931F93CF9320 -:100B5000DF93C4E4D1E010E00C2F025F899190E0B4 -:100B60000E94641B180F0C13F9CF812FDF91CF91D6 -:100B70001F910F91089581E0089508950F931F9399 -:100B8000CF93DF938C01FC01C081D181CE010E9403 -:100B9000E919BE010E946106EC01F80182818823F7 -:100BA00009F44AC080915D0181111FC0C431F0E594 -:100BB000DF0709F051C00E94BD0581E080935D010F -:100BC0000E94081C90935C0180935B011092540179 -:100BD000109256011092550110925801109257012F -:100BE00010925A011092590165C080915B01909159 -:100BF0005C010E94141C883C910570F480915401A2 -:100C0000E82FF0E0EE0FFF1FEB5AFE4FD183C083B9 -:100C10008F5F809354014EC0C43880E5D80721F01F -:100C2000C538D04501F13AC0F8018281882341F0EE -:100C30001092520182E01EC0C438E0E5DE0759F58B -:100C400080915201811106C086E20E94731186E2F2 -:100C50000E943B1282E01CC0C438F0E5DF0741F37C -:100C6000C538D045D9F4F8018281882331F010923B -:100C7000530180E20E948A121DC0809153018111AC -:100C800006C087E20E94731187E20E943B1280E255 -:100C90000E9491120FC0C538D04529F381E080939E -:100CA000520180935301C801DF91CF911F910F91A1 -:100CB0000C94BB0580E0DF91CF911F910F910895B7 -:100CC000089596E0799FF001112494E5899FE00D45 -:100CD000F11D1124E60FF11DEE0FFF1FE154FE4F31 -:100CE000859194910895880F991FFC01E55CFF4F51 -:100CF000859194910895880F991FFC01E554FE4F4A -:100D00008591949108950F931F93CF93DF93EC01F6 -:100D10008115904350F5C11580E2D80708F0C3C093 -:100D2000CB3BD10590F4C83AD10508F06AC0C53A6A -:100D3000D10508F05BC0C430D10508F0D0C12197BF -:100D400009F0CAC101E010E00AC2CF3FD10511F09D -:100D500008F0C5C1C03FD10508F0A2C0CE01805E39 -:100D60009109089708F4BBC1B7C1C13090E5D90714 -:100D700009F4A2C020F5C0318FE4D80770F4C11582 -:100D800090E4D90708F094C0C11521E3D20708F018 -:100D9000A3C1DD278E01106CE2C1C115D04509F059 -:100DA0009BC10E94F0148FEF94E32CE0815090409F -:100DB0002040E1F700C000000E94631CD0C1C115B3 -:100DC00097E5D90758F4C03121E5D20708F01CC1D6 -:100DD000C43180E5D80708F475C07EC1CE019057B4 -:100DE0008115904108F078C1DF7073C1C53AD10513 -:100DF00009F477C1C63AD10509F076C102E810E4DA -:100E0000AEC1C83AD10509F472C1C93AD10509F495 -:100E100071C1CA3AD10509F470C1CB3AD10509F4C0 -:100E20006FC1CC3AD10509F46EC1CD3AD10509F4B0 -:100E30006DC1C03BD10509F46CC1CE3AD10509F4AE -:100E40006BC1CF3AD10509F46AC1C13BD10509F4A0 -:100E500069C1C23BD10509F468C1C33BD10509F49E -:100E600067C1C43BD10509F466C1C53BD10509F48E -:100E700065C1C63BD10509F464C1C73BD10509F47E -:100E800063C1C83BD10509F462C1C93BD10509F46E -:100E900061C1CA3BD10509F460C100E014E45FC13F -:100EA0008E0110655CC1CE019F700E947B0658C107 -:100EB000DF708E01106A53C18091DA0181608093E6 -:100EC000DA014DC10E94081E811102C00E94EE1D70 -:100ED0000E94251E90E09093FB018093FA01C2309E -:100EE00080E5D80721F48091FA01816086C0C43082 -:100EF00090E5D90721F48091FA0182607EC0C63066 -:100F000020E5D20721F48091FA01846076C0C830D0 -:100F100080E5D80719F48091FA0127C0CA3090E51E -:100F2000D90721F48091FA01806167C0CC3020E5B7 -:100F3000D20721F48091FA0180625FC0CE3080E553 -:100F4000D80721F48091FA01806457C0C03190E540 -:100F5000D90721F48091FA0180684FC0C23120E5A1 -:100F6000D20729F48091FA018460886046C0C330BA -:100F700080E5D80721F48091FA018E7F3EC0C5300C -:100F800090E5D90721F48091FA018D7F36C0C730F2 -:100F900020E5D20721F48091FA018B7F2EC0C93061 -:100FA00080E5D80719F48091FA0126C0CB3090E58E -:100FB000D90721F48091FA018F7E1FC0CD3020E542 -:100FC000D20721F48091FA018F7D17C0CF3080E5E0 -:100FD000D80721F48091FA018F7B0FC0C13190E5D1 -:100FE000D90721F48091FA018F7707C0C331D0452A -:100FF00031F48091FA018B7F877F8093FA01809191 -:10100000FA010E94291EABC08D2F99278F70992756 -:1010100081309105D9F49E012370332702C0880FD7 -:10102000991F2A95E2F79C688E0144E0000F111F7A -:101030004A95E1F700271370802B912B53E0CC0FDA -:10104000DD1F5A95E1F7C076DD272FC0823091056C -:1010500031F4DC2FCC278E01016F106A80C0833001 -:10106000910569F4CE018370992701E010E002C078 -:10107000000F111F8A95E2F7C8019C680FC08430E9 -:101080009105B9F4CE018370992701E010E002C008 -:10109000000F111F8A95E2F7C8019A6823E0CC0F70 -:1010A000DD1F2A95E1F7C07ED7708C010C2B1D2B1C -:1010B00056C08530910531F4DC2FCC278E01046FAA -:1010C000106A4DC0069709F04AC0CF71DD27DC2FAA -:1010D000CC278E01106243C000E010E040C08E01BA -:1010E0003EC001E810E43BC003E810E438C002EE63 -:1010F00014E435C009EE14E432C00AEE14E42FC043 -:1011000005EB14E42CC006EB14E429C007EB14E44F -:1011100026C00CEC14E423C00DEC14E420C003E85A -:1011200015E41DC00AE815E41AC002E915E417C069 -:1011300004E915E414C001E216E411C003E216E468 -:101140000EC004E216E40BC005E216E408C006E295 -:1011500016E405C007E216E402C00AE216E4C8017C -:10116000DF91CF911F910F91089596E0799FF00143 -:10117000112494E5899FE00DF11D1124E60FF11D66 -:10118000EE0FFF1FE154FE4F85919491803E910533 -:10119000E0F4803C910558F58133910509F46FC066 -:1011A00048F48932910509F463C08A32910509F443 -:1011B0006DC072C089339105E9F082389105D1F094 -:1011C0008533910509F44DC067C0833E910581F1D7 -:1011D00038F4803E9105B9F0823E9105D9F05CC0AB -:1011E000863E910561F1873E9105A1F155C00E94AF -:1011F000730608952091FA0120FD02C021FF4CC022 -:1012000080EE90E049C08091FA0180FFF9CF89E338 -:1012100090E042C08091FA0182FF0EC08091FA01F5 -:1012200084FF03C080E090E037C083EE90E034C0DC -:101230008091FA0182FFF2CF82EE90E02DC0809182 -:10124000FA0183FF0BC08091FA0184FDEBCF87EE9A -:1012500090E022C08091FA0183FFF5CF86EE90E006 -:101260001BC08091FA0185FF07C089E290E014C09D -:101270008091FA0185FFF9CF85E390E00DC0809160 -:10128000FA0186FF07C08AE290E006C08091FA0169 -:1012900086FFF9CF81E390E00E94830608950895C8 -:1012A0000C944F0980916E010895CF93DF9300D085 -:1012B0001F92CDB7DEB79C018091F101843019F502 -:1012C00093E099833B832A839093E9008FEF909179 -:1012D000E800815095FD06C095ED9A95F1F7000064 -:1012E0008111F5CF8091E80085FF0DC040E050E00E -:1012F00063E070E0CE0101960E94BF0B8091E80090 -:101300008E778093E8000F900F900F90DF91CF9130 -:101310000895CF93DF9300D01F92CDB7DEB7209111 -:10132000F101243021F522E029839B838A8383E025 -:101330008093E9008FEF9091E800815095FD06C001 -:1013400095ED9A95F1F700008111F5CF8091E800B5 -:1013500085FF0DC040E050E063E070E0CE010196F3 -:101360000E94BF0B8091E8008E778093E8000F9079 -:101370000F900F90DF91CF9108952091F1012430CB -:10138000F1F422E02093E9002FEF3091E8002150A2 -:1013900035FD06C035ED3A95F1F700002111F5CF86 -:1013A0002091E80025FF0BC040E050E065E070E0D0 -:1013B0000E94BF0B8091E8008E778093E80008952B -:1013C000CF93DF93EC019091F101943009F046C086 -:1013D00080910C018823D9F080910D018823B9F008 -:1013E0009093E9008FEF9091E800815095FD06C041 -:1013F00095E19A95F1F700008111F5CF8091E80011 -:1014000085FF2CC040E050E060E170E017C081E053 -:101410008093E9008FEF9091E800815095FD06C020 -:1014200095ED9A95F1F700008111F5CF8091E800D4 -:1014300085FF14C040E050E068E070E0CE010E94FB -:10144000BF0B8091E8008E778093E80080E1FE0179 -:10145000AEE5B1E001900D928A95E1F7DF91CF9171 -:1014600008958091F001811109C00E94540D0E94DD -:10147000B10D8091E20084608093E20008951092A3 -:10148000F001089508950C9498220E94F91B0E947F -:101490009E220E9457100C94500942E061EC81E0BA -:1014A0000E94CE0C42E061EC82E00E94CE0C42E051 -:1014B00061EC83E00E94CE0C42E161EC84E00C948C -:1014C000CE0C8091F301833009F455C030F48130A3 -:1014D00071F0823009F48EC008958A3009F47AC020 -:1014E0008B3009F460C0893009F09CC020C0809125 -:1014F000F201813A09F096C08091E800877F8093DD -:10150000E8008091F6019091F701892B21F460E1C8 -:101510008EE591E003C060E080E090E070E00E9422 -:101520000A0C8091E8008B778093E8000895809101 -:10153000F201813209F076C08091F6019091F701B5 -:10154000009719F0039709F06DC08091E800877F3C -:101550008093E8008091E80082FD05C08091F10150 -:101560008111F8CF5FC08091F10080936E0180916E -:10157000E8008B7753C08091F201813A09F052C0A4 -:101580008091F6019091F701892B09F04BC0809171 -:10159000E800877F8093E8008091E80080FFFCCF1F -:1015A00080910C0136C08091F2018132D9F5809191 -:1015B000F6019091F701892BA9F58091E800877FCA -:1015C0008093E8000E94030D8091F40180930C0148 -:1015D0000C94F0148091F201813221F58091E800A1 -:1015E000877F8093E8000E94030D8091F50180932E -:1015F0006F0108958091F201813AA1F48091E80091 -:10160000877F8093E8008091E80080FFFCCF809185 -:101610006F018093F1008091E8008E778093E8005D -:101620000C94030D089584B7877F84BF88E10FB6BB -:10163000F89480936000109260000FBE90E080E804 -:101640000FB6F89480936100909361000FBE0E94E2 -:10165000A6100E94540D0E94B10D8091E20084609A -:101660008093E20078940E9437100E94A81082E0D4 -:1016700091E00E9452100E9486228091F1018530F3 -:1016800069F40E94C01B8091EF018823B1F30E948E -:10169000EB1B882391F30E94A90BEFCF0E94AE10A1 -:1016A000ECCF292F332723303105C9F064F42130E2 -:1016B000310581F02230310509F043C08DE690E01C -:1016C0002BEE33E042C021323105F1F022323105F8 -:1016D00041F137C082E190E028E534E036C0992737 -:1016E0008130910541F08230910541F0892B49F517 -:1016F000E7EEF3E005C0EFECF3E002C0E7EBF3E068 -:10170000849190E09F0121C06430D8F4E62FF0E08E -:10171000EE0FFF1FEE5DFE4F2081318189E090E0EA -:1017200014C0643070F470E0FB01EE0FFF1FE65E42 -:10173000FE4F20813181FB01EA5EFE4F808190E007 -:1017400004C080E090E020E030E0FA0131832083A3 -:10175000089580E189BD82E189BD09B400FEFDCF15 -:101760008091D8008F7D8093D8008091E0008260C6 -:101770008093E0008091E00081FDFCCF0895CF923E -:10178000DF92EF92FF920F931F93CF93DF93EC01C1 -:101790008B016A010E94220D811133C0C114D10452 -:1017A00039F0F60180819181081B190BC80FD91FF0 -:1017B000E12CF12C0115110519F18091E80085FD4E -:1017C00016C08091E8008E778093E800C114D104A0 -:1017D00049F0F60180819181E80EF91EF182E082E4 -:1017E00085E00FC00E94220D882321F30AC0899151 -:1017F0008093F10001501109FFEFEF1AFF0ADACFD1 -:1018000080E0DF91CF911F910F91FF90EF90DF90DB -:10181000CF9008952091F8013091F90126173707EC -:1018200048F06115710539F42091E8002E77209376 -:10183000E80001C0B90140E061157105A9F12091EE -:10184000F101222309F443C0253009F442C020915C -:10185000E80023FD40C02091E80022FD32C0209125 -:10186000E80020FFE9CF4091F3002091F20030E042 -:10187000342BFC01CF016115710559F02830310579 -:1018800040F481918093F100615071092F5F3F4FC7 -:10189000F1CF41E02830310509F040E02091E80027 -:1018A0002E772093E800C8CF4111C9CF0AC080919C -:1018B000F101882361F0853061F08091E80083FDBB -:1018C0000AC08091E80082FFF2CF80E0089582E0B4 -:1018D000089583E0089581E008952091F801309102 -:1018E000F9012617370748F06115710539F4209181 -:1018F000E8002E772093E80001C0B901FC0120E048 -:101900006115710591F18091F101882309F440C0BE -:10191000853009F43FC08091E80083FD3DC080918F -:10192000E80082FD2FC08091E80080FFE9CF209180 -:10193000F3008091F20090E0922B6115710559F04F -:101940008830910540F424912093F1003196615044 -:1019500071090196F2CF21E0089709F020E080910B -:10196000E8008E778093E800CBCF2111CCCF0AC05E -:101970008091F101882361F0853061F08091E80069 -:1019800083FD0AC08091E80082FFF2CF80E00895D5 -:1019900082E0089583E0089581E00895982F9730BC -:1019A00058F59093E900981739F07091EC00209168 -:1019B000ED005091F00003C0242F762F50E021FF5E -:1019C00019C03091EB003E7F3093EB003091ED0079 -:1019D0003D7F3093ED003091EB0031603093EB00B0 -:1019E0007093EC002093ED005093F0002091EE00F6 -:1019F00027FF07C09F5FD3CF8F708093E90081E0FE -:101A0000089580E008958091F20187FF11C08091D0 -:101A1000E80082FD05C08091F1018111F8CF11C06D -:101A20008091E8008B770BC08091F101882349F009 -:101A30008091E80080FFF8CF8091E8008E77809356 -:101A4000E80008952091E4003091E50095E640918A -:101A5000EC00842F817040FF22C08091E80080FD5F -:101A60001CC08091F101882391F0853091F0809124 -:101A7000EB0085FD10C04091E4005091E500421755 -:101A8000530729F39A01915011F784E0089582E0F9 -:101A9000089583E0089581E0089580E008954091DD -:101AA000E80042FFDECF08950E94C20D0E94CA0DD9 -:101AB000E0EEF0E0808181608083E8EDF0E08081FD -:101AC0008F77808319BCA7EDB0E08C918E7F8C93CB -:101AD00080818F7E80831092F00108950F931F9371 -:101AE000CF93DF930E94C20D0E94CA0DC8EDD0E0D3 -:101AF00088818F77888388818068888388818F7DBB -:101B0000888319BC1092F1011092ED011092EF013F -:101B10001092EE0100EE10E0F80180818B7F80834F -:101B200088818160888342E060E080E00E94CE0C82 -:101B3000E1EEF0E080818E7F8083E2EEF0E0808154 -:101B400081608083808188608083F80180818E7FBE -:101B50008083888180618883DF91CF911F910F916D -:101B60000895E8EDF0E080818F7E8083E7EDF0E07E -:101B700080818160808384E082BF81E08093F00176 -:101B80000C946E0DE8EDF0E080818E7F80831092E2 -:101B9000E20008951092DA001092E10008951F9279 -:101BA0000F920FB60F9211242F933F934F935F9391 -:101BB0006F937F938F939F93AF93BF93EF93FF9315 -:101BC0008091E10082FF0BC08091E20082FF07C09C -:101BD0008091E1008B7F8093E1000E94361080911C -:101BE000DA0080FF1FC08091D80080FF1BC0809169 -:101BF000DA008E7F8093DA008091D90080FF0DC0DB -:101C000080E189BD82E189BD09B400FEFDCF81E09C -:101C10008093F1010E94310A05C019BC1092F101B4 -:101C20000E943F0A8091E10080FF19C08091E2008C -:101C300080FF15C08091E2008E7F8093E20080914A -:101C4000E20080618093E2008091D80080628093FE -:101C5000D80019BC85E08093F1010E94430A80916D -:101C6000E10084FF30C08091E20084FF2CC080E15D -:101C700089BD82E189BD09B400FEFDCF8091D80005 -:101C80008F7D8093D8008091E1008F7E8093E1006A -:101C90008091E2008F7E8093E2008091E20081607B -:101CA0008093E2008091ED01882311F084E007C069 -:101CB0008091E30087FD02C081E001C083E0809352 -:101CC000F1010E94450A8091E10083FF29C08091C3 -:101CD000E20083FF25C08091E100877F8093E100CF -:101CE00082E08093F1011092ED018091E1008E7FFE -:101CF0008093E1008091E2008E7F8093E2008091EA -:101D0000E20080618093E20042E060E080E00E94B7 -:101D1000CE0C8091F00088608093F0000E94420A0F -:101D2000FF91EF91BF91AF919F918F917F916F91B3 -:101D30005F914F913F912F910F900FBE0F901F9089 -:101D400018951F920F920FB60F9211242F933F9365 -:101D50004F935F936F937F938F939F93AF93BF93B3 -:101D6000CF93DF93EF93FF93C091E900CF70809101 -:101D7000EC00D82FD17080FDD0E81092E90080915E -:101D8000F000877F8093F00078940E94E50E109217 -:101D9000E9008091F00088608093F000CD2BCF7037 -:101DA000C093E900FF91EF91DF91CF91BF91AF9187 -:101DB0009F918F917F916F915F914F913F912F9163 -:101DC0000F900FBE0F901F9018951F93CF93DF9326 -:101DD000CDB7DEB7AA970FB6F894DEBF0FBECDBF62 -:101DE000E2EFF1E088E08E0F9091F10091938E1375 -:101DF000FBCF0E94610A8091E80083FF1FC18091A0 -:101E0000F2019091F301492F50E04A30510508F05A -:101E100015C1FA01EA5AFF4F0C942024803881F052 -:101E2000823809F00BC18091F6018F708093E90030 -:101E30008091EB0085FB882780F91092E90006C0AD -:101E40008091EE019091EF01911182609091E800F4 -:101E5000977F9093E8008093F1001092F100C8C042 -:101E6000282F2D7F09F0EAC0882319F0823061F015 -:101E7000E5C08091F401813009F0E0C0933009F0B1 -:101E800080E08093EF012BC08091F401811127C085 -:101E90008091F6018F7009F4D1C08093E900209100 -:101EA000EB0020FF1CC0933021F48091EB00806296 -:101EB00014C09091EB0090619093EB0021E030E032 -:101EC000A90102C0440F551F8A95E2F74093EA002A -:101ED0001092EA008091EB0088608093EB001092F2 -:101EE000E9008091E800877F86C08111A7C010912A -:101EF000F4011F778091E3008078812B8093E300C9 -:101F00008091E800877F8093E8000E94030D809114 -:101F1000E80080FFFCCF8091E30080688093E300BD -:101F2000111102C082E001C083E08093F10186C0FC -:101F30008058823008F082C08091F4019091F501C0 -:101F40008C3D53E0950779F583E08A838AE28983A3 -:101F50004FB7F894DE01139620E03EE051E2E32F04 -:101F6000F0E050935700E49120FF03C0E295EF703A -:101F70003F5FEF708E2F90E0EA3010F0C79601C0FF -:101F8000C0968D939D932F5F243149F74FBF809169 -:101F9000E800877F8093E8006AE270E0CE01019656 -:101FA0000E940A0C14C0AE014F5F5F4F6091F601B2 -:101FB0000E94510BBC01892B09F440C09091E800AC -:101FC000977F9093E80089819A810E946D0C80919F -:101FD000E8008B778093E80031C0803879F58091F4 -:101FE000E800877F8093E8008091ED018093F10005 -:101FF0008091E8008E778093E8000E94030D1EC058 -:1020000081111CC09091F4019230C0F48091E800DD -:10201000877F8093E8009093ED010E94030D8091EB -:10202000ED01811106C08091E30087FD02C081E0CF -:1020300001C084E08093F1010E944D0A8091E80084 -:1020400083FF0AC08091E800877F8093E800809139 -:10205000EB0080628093EB00AA960FB6F894DEBF87 -:102060000FBECDBFDF91CF911F9108950895CF93FB -:102070008091F1018823A1F0C091E900CF70909187 -:10208000EC00892F817090FD80E8C82B1092E90048 -:102090008091E80083FD0E94E50ECF70C093E900B7 -:1020A000CF91089590937501809374010895E09104 -:1020B0007401F0917501309721F00190F081E02DCD -:1020C000099480E00895E0917401F09175013097D2 -:1020D00021F00280F381E02D09940895E0917401CC -:1020E000F0917501309721F00480F581E02D09947D -:1020F000089520917201309173018217930771F056 -:102100009093730180937201E0917401F0917501D5 -:10211000309721F00680F781E02D099408952091F1 -:102120007001309171018217930771F090937101E2 -:1021300080937001E0917401F0917501309721F066 -:102140000084F185E02D0994089508950C94A5105C -:102150000E94FF1B0E9498040C94C11C9F92AF9296 -:10216000BF92CF92DF92EF92FF920F931F93CF9384 -:10217000DF9300D000D000D0CDB7DEB70E94B0040E -:102180000DE010E0AA24A394B12C902E802F0E9481 -:102190009E05980129583E4F6901F901F080F82603 -:1021A000A1F40150110988F78FEF89838A831B827C -:1021B0000E94081C8160782F9D838C8349815A81FD -:1021C0006B818D810E9445112FC09091DA0191FFA2 -:1021D00004C08E830E94A4058E8125E030E0A50115 -:1021E000022E01C0440F0A94EAF7E42E4F21C1F0F9 -:1021F00029839A828E2191E009F490E09B830E94CA -:10220000081C8160782F9D838C8349815A816B8162 -:102210008D810E944511F6018081E826E08204C08C -:1022200021503109E0F6BDCF0E94A81F1091760120 -:102230000E9457101817B9F00E945710809376012A -:1022400026960FB6F894DEBF0FBECDBFDF91CF91BB -:102250001F910F91FF90EF90DF90CF90BF90AF90C4 -:102260009F900C94500926960FB6F894DEBF0FBECF -:10227000CDBFDF91CF911F910F91FF90EF90DF9035 -:10228000CF90BF90AF909F900895CF93DF93CDB73D -:10229000DEB72B970FB6F894DEBF0FBECDBF4F83CE -:1022A000588769877A878B87DE01119686E0FD0162 -:1022B00011928A95E9F785E0FE01379601900D921B -:1022C0008A95E1F749815A816B817C818D819E815C -:1022D0000E948E172B960FB6F894DEBF0FBECDBFAF -:1022E000DF91CF910895CF93882309F4C2C0C82FFE -:1022F000823859F40E94571081FDBBC089E30E94C7 -:10230000681A0E94351B89E30CC0833879F40E9457 -:10231000571080FDAEC083E50E94681A0E94351BED -:1023200083E50E94AA1ACF910C94351B843859F486 -:102330000E94571082FD9DC087E40E94681A0E9487 -:10234000351B87E4EECF8CEF8C0F813A48F48C2F4D -:102350000E94EB2181118DC08C2F0E94681AE3CF5F -:1023600080E28C0F883048F4C77081E001C0880F8C -:10237000CA95EAF70E94EE1AD6CF8BE58C0F833010 -:1023800078F4C53A29F0C63A31F083E890E005C008 -:1023900081E890E002C082E890E0CF910C9479103F -:1023A00088E58C0F833108F064C0C83A39F1C93A26 -:1023B00041F1CA3A49F1CB3A51F1CC3A59F1CD3A0F -:1023C00061F1C03B69F1CE3A71F1CF3A79F1C13B8D -:1023D00081F1C23B89F1C33B91F1C43B99F1C53B0B -:1023E000A1F1C63BA9F1C73BB1F1C83BB9F1C93B6B -:1023F000C1F1CA3BC9F180E090E038C082EE90E0C4 -:1024000035C089EE90E032C08AEE90E02FC085EBB7 -:1024100090E02CC086EB90E029C087EB90E026C0CE -:102420008CEC90E023C08DEC90E020C083E891E03C -:102430001DC08AE891E01AC082E991E017C084E9E2 -:1024400091E014C081E292E011C083E292E00EC0FC -:1024500084E292E00BC085E292E008C086E292E05E -:1024600005C087E292E002C08AE292E0CF910C942C -:102470008F10CF910895882309F44BC0823859F406 -:102480000E94571081FF45C089E30E94681A0E948C -:10249000351B89E30CC0833871F40E94571080FF0C -:1024A00038C083E50E94681A0E94351B83E50E94AC -:1024B000AA1A0C94351B843859F40E94571082FFD5 -:1024C00028C087E40E94681A0E94351B87E4EFCF7A -:1024D0009CEF980F913A58F390E2980F983050F48F -:1024E000877091E001C0990F8A95EAF7892F0E94C1 -:1024F000F41ADFCF9BE5980F933020F480E090E052 -:102500000C947910885A833120F480E090E00C9488 -:102510008F100895882321F00E94EE1A0C94351B29 -:102520000895882321F00E94F41A0C94351B089515 -:102530007F928F929F92AF92BF92CF92DF92EF9253 -:10254000FF920F931F93CF93DF931F92CDB7DEB708 -:102550007C01C62E772EFC01058102950F70128139 -:1025600011110E940B1B0E94611A882379F011231C -:1025700069F080E28C0D883048F082E00E944A1AAF -:102580000E94611A91E0D82ED92601C0D12CE72DE6 -:10259000E295EF70F0E0E05AFF4F0C942024872D75 -:1025A000807F072D0F70882311F00295007F112383 -:1025B00089F0002309F490C180E28C0D883020F46A -:1025C000802F0E94EE1A03C0802F0E94FE1A0E94E4 -:1025D000351B82C18C2D0E943B12002309F495C14A -:1025E00080E28C0D883020F4802F0E94F41A03C002 -:1025F000802F0E94041B0E94351B87C1972D907F5E -:10260000872D8F70903211F08295807FCC2021F041 -:10261000F1E0CF16B1F01EC0112349F0002309F4F8 -:1026200014C1013009F011C10E941E1B6EC10023AC -:1026300019F0013009F469C189830E94211B898145 -:102640000AC1112321F0023008F05FC1FEC0011160 -:102650005CC101C1112321F0002309F4F6C03CC183 -:10266000002309F4F8C03EC1872D869586958370B6 -:1026700090E0009719F0019761F047C1112321F014 -:102680008C2D972D937002C080E090E00E9479100D -:102690003CC1112321F08C2D972D937002C080E056 -:1026A00090E00E948F1031C18C2D112319F00E94EF -:1026B000B01E02C00E94181F0E949D1F26C1872DB8 -:1026C000837009F052C0111120C18C2D829586951E -:1026D0008770880F880F9C2D9F70892E912CA12CBC -:1026E000B12C082E04C0880C991CAA1CBB1C0A948F -:1026F000D2F7C4FE14C00FE010E020E030E0B901D2 -:10270000A80104C0440F551F661F771F8A95D2F792 -:10271000CB01BA01609570958095909503C060E0FB -:1027200070E0CB01272D26952695237030E02230CE -:10273000310569F02330310589F0682979298A2922 -:102740009B292130310571F00E94D618DEC068291E -:1027500079298A299B290E94F218D7C00E94D6188D -:10276000C501B4010E94BA18D0C0112319F0872DF9 -:10277000817001C08695882309F4C7C08C2D82958D -:1027800086958770880F880F9C2D9F70892E912CBD -:10279000A12CB12C082E04C0880C991CAA1CBB1CAF -:1027A0000A94D2F7C4FE14C00FE010E020E030E03D -:1027B000B901A80104C0440F551F661F771F8A95F1 -:1027C000D2F7CB01BA01609570958095909503C0C2 -:1027D00060E070E0CB01272D269526952370422FCF -:1027E00050E04230510569F04330510589F06829C5 -:1027F00079298A299B294130510571F00E94B0192D -:1028000084C0682979298A299B290E94CC197DC016 -:102810000E94B019C501B4010E94941976C08C2D94 -:1028200090E0FC01E05EF109E531F10508F050C0EF -:10283000E059FF4F0C9420240C2D0F70872D8F71C1 -:10284000112331F00E942D19802F0E948A125DC041 -:102850000E944E19802F0E94911257C0112339F007 -:10286000011153C0872D8F710E9473194EC0023021 -:1028700008F04BC0F7CF112339F0872D8F710E94DC -:102880002D1943C01123C9F3872D8F710E944E1952 -:102890003CC0112329F0872D8F710E94181935C073 -:1028A0000E940E1932C0112351F0172D1F71812F74 -:1028B0000E942D1963E0812F0E94411A26C081E0F9 -:1028C0000E944A1A023008F182E00E944A1A1DC092 -:1028D000112331F0002389F28C2D0E94731115C051 -:1028E000002391F28C2D0E943B120FC0472D4F7098 -:1028F0006C2DC7010E9419030E94321806C0472D93 -:102900004F706C2DC7010E946006DD20F9F00E9417 -:102910003D1A80FD1BC0F70112820E94371A0E94E7 -:102920002D19C7010E94B5140E94371A0F90DF912C -:10293000CF911F910F91FF90EF90DF90CF90BF90BC -:10294000AF909F908F907F900C944E190F90DF91D5 -:10295000CF911F910F91FF90EF90DF90CF90BF909C -:10296000AF909F908F907F9008950F931F93CF9378 -:10297000DF93EC01888199812B813C81232BB9F075 -:102980009F3F11F48F3F99F0CE010E94BE0588232E -:1029900071F0688179818A810E94331A8C010E94CA -:1029A000E8190E94AF18B801CE010E949812DF9179 -:1029B000CF911F910F9108950E940B1B0E941B1B2A -:1029C0000E94E01A0E94351B0E944E200E949D1F0B -:1029D00080E090E00E94791080E090E00C948F10ED -:1029E0000E94FB1A0C94DC140E94281A292F2295AD -:1029F0002F7030E02C3031054CF42A3031056CF466 -:102A00002250310922303105A8F407C02C3031059D -:102A100069F02F30310551F00DC0803F69F018F496 -:102A2000803E40F409C0843F29F406C093FB882708 -:102A300080F9089580E0089581E00895CF93DF93B1 -:102A400000D000D01F92CDB7DEB70F900F900F903F -:102A50000F900F90DF91CF910895CF93DF9300D027 -:102A600000D000D0CDB7DEB726960FB6F894DEBF03 -:102A70000FBECDBFDF91CF9108951F93CF93DF930A -:102A8000C091850116E080918601C81799F0D0E0C9 -:102A90001C9FF0011D9FF00D1124E957FE4F40814E -:102AA000518162817381848195810E942D152196C7 -:102AB000C770E9CFDF91CF911F9108954091B70181 -:102AC0005091B8016091B9017091BA018091BB0138 -:102AD0009091BC010C942D158091BC0182958F7052 -:102AE00009F054C08091B901882309F44FC0809146 -:102AF0008501A09186016091B7017091B801409164 -:102B0000BA015091BB01B6E08A1709F43FC090E0CA -:102B100041155105C1F17F3F11F46F3FA1F1B89FFD -:102B2000F001B99FF00D1124E957FE4F2181721376 -:102B30002AC02081621327C02281211124C0238151 -:102B400034812417350710F421503109241B350B2B -:102B5000283C3105C0F42091BC012F7020612093E6 -:102B6000BC0126E0289FF001299FF00D1124E457B5 -:102B7000FE4F80818F708061808387EB91E00E949F -:102B8000B5140C943D1501968770BECF0895CF9271 -:102B9000DF92EF92FF920F931F93CF93DF93CDB706 -:102BA000DEB762970FB6F894DEBF0FBECDBF8C01C3 -:102BB00085E0F801DE011D9601900D928A95E1F7FE -:102BC000D8014C9111965C91119712966C911297C5 -:102BD0001396CD90DC9014973091B7017091B801A5 -:102BE0008091BA019091BB01009709F46BC17F3FBE -:102BF00019F43F3F09F466C1E090B901EE2009F4F1 -:102C0000C0C02091BC01C816D90628F0F601E81B07 -:102C1000F90BCF0104C0809590958C0D9D1DFF246C -:102C2000F394883C910578F0F12C207F09F0C6C020 -:102C30007C2DD98AC88A89890E941E1587EB91E06C -:102C40000E94B514B1C0822F807F09F046C0751371 -:102C500014C0341312C0611110C02F702061209372 -:102C6000BC010E945E1587EB91E00E94B514809133 -:102C7000BC01D80115968C932EC0CD2819F15F3F69 -:102C800011F44F3FF9F0F62E61111CC080918501BF -:102C90002091860136E0821709F45AC090E0389FEF -:102CA000F001399FF00D1124E957FE4F7181571340 -:102CB00006C07081471303C07281711103C0019671 -:102CC0008770E9CFF62E662309F418C18091BC0104 -:102CD00081608093BC01F12C11C1751308C03413BD -:102CE00006C0611104C08091BC01D801C3C04D87EA -:102CF0005E878D859E856A8B0E94F4146A8988237D -:102D0000E1F16623D1F12091BC01822F82958F7071 -:102D100090E0029774F08091B7019091B801988784 -:102D20008F831986DB86CA862C87CE0107960E9480 -:102D3000B51486E0F801A7EBB1E001900D928A95F9 -:102D4000E1F70E946C150E945E15FF24F394D6C033 -:102D50004D875E878D859E850E94281A292F229592 -:102D60002F7030E0223031050CF0BCC09F7009F0AC -:102D7000B6C0805E883008F4C1C0C8010E94B51496 -:102D8000E4CFC816D90608F453C0F601E81BF90BC6 -:102D9000CF01883C910508F450C0F12C7C2DD98AD4 -:102DA000C88A89890E941E15E7EBF1E086E0DF0101 -:102DB0001D928A95E9F70E945E15A0C0751314C094 -:102DC000341312C0611110C08091BC01F8018583D9 -:102DD000C8010E94B51486E0E7EBF1E0DF011D9227 -:102DE0008A95E9F7FE2C8AC04D875E878D859E8582 -:102DF0006A8B0E94F4146A89882309F4BECF662383 -:102E000009F4BBCF2091BC01822F82958F7090E096 -:102E100002970CF48ECF8091B7019091B8019A83FC -:102E200089831B82DD82CC822E83CE0101967FCFE7 -:102E3000809590958C0D9D1DACCFF62E662309F4E0 -:102E40009CCF75132EC034132CC02091BC0120FDE3 -:102E50001FC0822F82958F70D9F0D80115962C93C0 -:102E600015978F3049F08F5F982F9295907F822F22 -:102E70008F70892B15968C93C8010E94B51486E03B -:102E8000F801A7EBB1E001900D928A95E1F793CF9D -:102E900086E0F801A7EBB1E001900D928A95E1F789 -:102EA0002DC04D875E878D859E850E94F41481110B -:102EB00040CF8091BC0181608093BC01C8010E9419 -:102EC000B5141CC0662309F458CF4D875E878D85E5 -:102ED0009E850E94F414882309F44FCF2ACF8111D4 -:102EE00048CF0CC0243031050CF047CF9F7009F457 -:102EF00040CFF8019581907F09F03BCF8F2D6296EE -:102F00000FB6F894DEBF0FBECDBFDF91CF911F91FA -:102F10000F91FF90EF90DF90CF9008951F93CF9384 -:102F2000DF93CDB7DEB72C970FB6F894DEBF0FBE98 -:102F3000CDBF4F83588769877A878B879C87CE015F -:102F400007960E94C715882369F08F8198852A8586 -:102F50003B85232BF1F19F3F09F063C08F3F09F0C0 -:102F600060C037C086E0FE013796DE011196019001 -:102F70000D928A95E1F76F817885EA85FB85309718 -:102F800041F17F3F11F46F3F21F12091860130E044 -:102F9000C9010196877099274091850150E08417F7 -:102FA000950709F447C069837A83FD83EC8396E033 -:102FB000929FD001939FB00D1124A957BE4FFE01DF -:102FC000319601900D929A95E1F7809386010E94C7 -:102FD0003D1516E080918501909186018917C1F118 -:102FE000189FC001112489579E4F0E94C71588233E -:102FF00079F1E09185011E9FF0011124E957FE4F00 -:103000004081518162817381848195810E942D1557 -:103010008091850190E001968770992780938501C2 -:10302000D9CF4F81588569857A858B859C850E948B -:103030002D15CFCF0E94F0141092860110928501B9 -:10304000E7EBF1E086E0DF011D928A95E9F7C1CF59 -:103050002C960FB6F894DEBF0FBECDBFDF91CF9197 -:103060001F910895EF92FF920F931F93CF93DF93D9 -:103070008C01892B09F46CC0F12CEE24E394E80157 -:103080002196F8018491843740F4843008F051C0CF -:10309000813081F0823019F15BC0853709F444C07A -:1030A000A8F19CE7980F903708F052C08F770E94E4 -:1030B0003B1241C00E5F1F4FFE01C49180E28C0F96 -:1030C000883048F4C7708E2D01C0880FCA95EAF782 -:1030D0000E940E1B14C08C2F0E9473112DC00E5F16 -:1030E0001F4FFE01C49180E28C0F883058F4C770E6 -:1030F0008E2D01C0880FCA95EAF70E94141B0E940A -:10310000351B1AC08C2F0E943B1216C00E5F1F4F3A -:10311000FE01C491CC2381F08FE99FE00197F1F784 -:1031200000C00000C150F6CF0E5F1F4FFE01F490AB -:1031300003C00E9473118E018F2D882309F49FCF45 -:10314000EFE9FFE03197F1F700C000008150F5CFC3 -:10315000DF91CF911F910F91FF90EF900895089507 -:103160006093C1017093C2018093C3019093C40125 -:103170000C94DC140F931F930091C1011091C201B4 -:103180002091C3013091C401DC01CB01802B912B34 -:10319000A22BB32B8093C1019093C201A093C301D2 -:1031A000B093C4011F910F910C94DC140F931F93E3 -:1031B0000091C1011091C2012091C3013091C4015D -:1031C000DC01CB0180239123A223B3238093C1018F -:1031D0009093C201A093C301B093C4011F910F91BA -:1031E0000C94DC140F931F930091C1011091C20144 -:1031F0002091C3013091C401DC01CB0180279127CC -:10320000A227B3278093C1019093C201A093C30169 -:10321000B093C4011F910F910C94DC141092BD0166 -:103220001092BE011092BF011092C0010C94DC14E8 -:1032300041E050E060E070E004C0440F551F661F9D -:10324000771F8A95D2F74093BD015093BE016093DA -:10325000BF017093C0010C94DC1441E050E060E0C9 -:1032600070E004C0440F551F661F771F8A95D2F780 -:103270008091BD019091BE01A091BF01B091C001AC -:10328000482B592B6A2B7B2B4093BD015093BE01D9 -:103290006093BF017093C0010C94DC1441E050E0D6 -:1032A00060E070E004C0440F551F661F771F8A95C9 -:1032B000D2F740955095609570958091BD019091A1 -:1032C000BE01A091BF01B091C001482359236A23D8 -:1032D0007B234093BD015093BE016093BF01709367 -:1032E000C0010C94DC1441E050E060E070E004C0E8 -:1032F000440F551F661F771F8A95D2F78091BD0135 -:103300009091BE01A091BF01B091C00148275927FB -:103310006A277B274093BD015093BE016093BF0194 -:103320007093C0010C94DC140F931F930091BD01A6 -:103330001091BE012091BF013091C001DC01CB0191 -:10334000802B912BA22BB32B8093BD019093BE01B8 -:10335000A093BF01B093C0011F910F910C94DC1496 -:103360000F931F930091BD011091BE012091BF01E9 -:103370003091C001DC01CB0180239123A223B32330 -:103380008093BD019093BE01A093BF01B093C00193 -:103390001F910F910C94DC140F931F930091BD01AA -:1033A0001091BE012091BF013091C001DC01CB0121 -:1033B00080279127A227B3278093BD019093BE0158 -:1033C000A093BF01B093C0011F910F910C94DC1426 -:1033D0000895CF92DF92EF92FF920F931F93CF93B6 -:1033E000DF938C01C090C101D090C201E090C30175 -:1033F000F090C4018091BD019091BE01A091BF01E8 -:10340000B091C001C82AD92AEA2AFB2ACFE1D0E02C -:10341000D701C6010C2E04C0B695A7959795879540 -:103420000A94D2F780FF06C0B8018C2F0E94B5081D -:10343000019721F4219760F780E001C08C2FDF9184 -:10344000CF911F910F91FF90EF90DF90CF90089553 -:10345000CF93DF93EC010E94E919BE010E94B508E9 -:10346000DF91CF910895CB010E94281A0895809191 -:10347000C50185958595859508958091C5018770CD -:10348000089598E0899F90011124262B2093C5016F -:103490000C942D192091C501809582238093C5013C -:1034A000982F977069F430E0482F552747FD5095C5 -:1034B0002417350729F08595859585950C944E1927 -:1034C00008959091C501977081E009F480E0089516 -:1034D00090910C01992321F090910D01911109C057 -:1034E00020910E0130910F01F90132969FEF40E0DB -:1034F0001FC0982F9695969596959F3050F5E09120 -:103500000E01F0910F01E90FF11D877021E030E00D -:10351000A90102C0440F551F8A95E2F7CA019181A3 -:10352000892B818308959F3F39F04F5F4E3041F0E2 -:1035300051915813F8CF0DC05111F7CF942FF5CFFB -:103540009F3F39F0F901E90FF11D97FDFA9582834C -:103550000895089590910C01992321F090910D0107 -:10356000911109C020910E0130910F01F90132969D -:10357000205F3F4F1FC0982F9695969596959F3048 -:10358000F0F4E0910E01F0910F01E90FF11D877049 -:1035900021E030E0A90102C0440F551F8A95E2F7EF -:1035A000CA01809591818923818308953196E2171C -:1035B000F30729F090819813F9CF1082F7CF08957F -:1035C00081E090E0E0910E01F0910F01E80FF91F0A -:1035D0001082019680319105A9F708959091D90143 -:1035E000892B8093D901089580959091D9018923E1 -:1035F0008093D90108951092D90108959091D8012E -:10360000892B8093D801089580959091D8018923C2 -:103610008093D80108951092D80108959091D70110 -:10362000892B8093D701089580959091D7018923A4 -:103630008093D70108951092D70108958093C60111 -:1036400008951092C601089580910E0190910F0186 -:10365000FC0131969C01205F3F4F80E091919111D8 -:103660008F5FE217F307D1F70895E0910E01F09113 -:103670000F018091D9018083E0910E01F0910F013B -:1036800090818091D801892B8083E0910E01F09187 -:103690000F0190818091D701892B80838091C60191 -:1036A000882361F0E0910E01F0910F019081892B48 -:1036B00080830E94241B81111092C60180910E010B -:1036C00090910F010C94631020E0009739F0AC0149 -:1036D00041505109842395232F5FF7CF822F0895FE -:1036E000CF92DF92EF92FF926C01EE24FF24C1147F -:1036F000D104E104F10421F0C701B60120E101C0C9 -:1037000020E0C72ED82EE92EFF24C114D104E104F5 -:10371000F10419F0285FC701B6016B017C0154E088 -:10372000F694E794D794C7945A95D1F7C114D1046D -:10373000E104F10419F02C5FC701B6016B017C01B3 -:1037400042E0F694E794D794C7944A95D1F7C11410 -:10375000D104E104F10419F02E5FC701B601DC01C8 -:10376000CB01B695A79597958795892B8A2B8B2B9F -:1037700009F02F5F822FFF90EF90DF90CF90089598 -:103780008091F101843021F11092DB0120E488E185 -:1037900090E00FB6F894A895809360000FBE209338 -:1037A000600080E00E94500983B7817F846083BFFE -:1037B00083B7816083BF7894889583B78E7F83BFFA -:1037C00088E10FB6F89480936000109260000FBEFD -:1037D0000895089508950E94E91B0E94B0040E9474 -:1037E000EA1B0E94A50591E0811101C090E0892F9C -:1037F00008950E94F0140E9457100C94500982E022 -:1038000084BD93E095BD9AEF97BD80936E000895B7 -:103810002FB7F8948091DC019091DD01A091DE0139 -:10382000B091DF012FBF0895CF92DF92EF92FF9208 -:103830000F931F932FB7F8944091DC015091DD0155 -:103840006091DE017091DF012FBF6A017B01EE24E0 -:10385000FF248C0120E030E0C016D106E206F3061A -:1038600010F4415051099A01281B390BC9011F91CD -:103870000F91FF90EF90DF90CF9008951F920F92DD -:103880000FB60F9211248F939F93AF93BF938091A4 -:10389000DC019091DD01A091DE01B091DF01019684 -:1038A000A11DB11D8093DC019093DD01A093DE0189 -:1038B000B093DF01BF91AF919F918F910F900FBE99 -:1038C0000F901F9018950E94540DF8942FEF87EADF -:1038D00091E6215080409040E1F700C0000087E071 -:1038E00090EBDC018093FB019093FC01A093FD0120 -:1038F000B093FE019CE088E10FB6F894A895809300 -:1039000060000FBE90936000FFCFEF92FF920F9385 -:103910001F93CF93DF93D82FCDE08C2F0E949E056D -:1039200005E010E0E82EF12CC701002E02C09595AD -:1039300087950A94E2F780FF09C0602F7C2F80E012 -:103940000E946106D81302C081E006C0015011092F -:1039500058F7C15010F780E0DF91CF911F910F9180 -:10396000FF90EF900895CF93C82F8CE20E94851CA2 -:10397000882321F08C2FCF910C94851C80E0CF916F -:103980000895CF930E94081E811102C00E94EE1D6F -:10399000C5E6C15049F00E94B0048FE39CE901974D -:1039A000F1F700C00000F5CF89E20E94B31C81113D -:1039B00013C18AE20E94B31C81110E94EE1D85E0B2 -:1039C0000E94B31C81110E94631C0E94131E8093ED -:1039D000DA0187E00E94B31C8823A9F18BE10E94E1 -:1039E000B31C882351F08091DA0181FB222720F952 -:1039F00091E0922790FB81F90EC08EE00E94B31CEB -:103A0000882361F08091DA0182FB222720F991E07E -:103A1000922790FB82F98093DA0115C080E10E9421 -:103A2000B31C9091DA01882341F093FB222720F9FF -:103A300081E0822780FB93F904C0892F809580FB69 -:103A400090F99093DA018091DA010E94171E0E948A -:103A5000251E8093FA0180EE0E94B31C882341F05A -:103A60008091FA01982F909590FB80F98093FA014C -:103A700089E30E94B31C882359F08091FA0181FBED -:103A8000222720F991E0922790FB81F98093FA0197 -:103A900082EE0E94B31C882359F08091FA0182FBC8 -:103AA000222720F991E0922790FB82F98093FA0176 -:103AB00086EE0E94B31C882359F08091FA0183FBA3 -:103AC000222720F991E0922790FB83F98093FA0155 -:103AD00083EE0E94B31C882359F08091FA0184FB85 -:103AE000222720F991E0922790FB84F98093FA0134 -:103AF00085E30E94B31C882359F08091FA0185FB6D -:103B0000222720F991E0922790FB85F98093FA0112 -:103B100081E30E94B31C882359F08091FA0186FB4F -:103B2000222720F991E0922790FB86F98093FA01F1 -:103B300081E10E94B31C882359F08091FA0187FB30 -:103B4000222720F991E0922790FB87F98093FA01D0 -:103B50008091FA010E94291E8091FA0187FB882733 -:103B600080F980930D0187E20E94B31CC82F8EE17B -:103B70000E94B31C8111C2608FE10E94B31C8111AD -:103B8000C46080E20E94B31C8111C86081E20E947F -:103B9000B31C8111C06182E20E94B31C8111C0621A -:103BA00083E20E94B31C8111C06484E20E94B31CB2 -:103BB000882311F0C06802C0CC2329F08C2F0E940A -:103BC000201E6C2F03C00E941C1E682F70E080E036 -:103BD00090E0CF910C94B018CF9108956DEE7EEFE8 -:103BE00080E090E00E945A2460E082E090E00E9431 -:103BF000482460E083E090E00E94482460E084E094 -:103C000090E00E94482460E085E090E00C94482415 -:103C100080E090E00E94422421E08D3E9E4F09F01A -:103C200020E0822F089582E090E00C943A24682FDF -:103C300082E090E00C94482483E090E00C943A24D5 -:103C4000682F83E090E00C94482484E090E00C948A -:103C50003A24682F84E090E00C9448248091E2019B -:103C600080FF0BC06091130185E0689FB0011124B3 -:103C700075956795759567952BC081FF09C0609113 -:103C8000130185E0689FB00111247595679520C0E8 -:103C900082FF07C06091130185E0689FB001112485 -:103CA00017C09091E3019923D1F06091120196170A -:103CB00088F72091130185E0289F90011124929F9D -:103CC000A001939F500D112470E0CA010E940C24A2 -:103CD0006038710540F46115710539F002C065E086 -:103CE00070E0862F08958FE7089581E00895809110 -:103CF000E20180FF08C06091110170E07595679541 -:103D00007595679521C081FF06C06091110170E033 -:103D10007595679519C082FF04C06091110170E02C -:103D200010C09091E3019923C1F0609110019617A2 -:103D3000A0F780911101899FC001112470E00E94B9 -:103D40000C246038710528F46115710521F0862F67 -:103D500008958FE7089581E0089561E070E0F4CF61 -:103D6000803F21F40E942E1E819504C0813F29F4DA -:103D70000E942E1E8093E6010895823F21F40E9446 -:103D80002E1E819504C0833F29F40E942E1E80932D -:103D9000E5010895893F19F40E94771E05C08A3F06 -:103DA00031F40E94771E81958093E70108958B3F3F -:103DB00021F40E94771E819504C08C3F29F40E9453 -:103DC000771E8093E8010895843F21F48091E401F7 -:103DD000816017C0853F21F48091E401826011C0A9 -:103DE000863F21F48091E40184600BC0873F21F479 -:103DF0008091E401886005C0883F31F48091E4013E -:103E000080618093E40108958D3F21F48091E20167 -:103E100081600BC08E3F21F48091E201826005C079 -:103E20008F3F29F48091E20184608093E20108953C -:103E3000803F39F48091E60187FF6CC01092E60163 -:103E400069C0813F29F48091E6011816BCF362C075 -:103E50009091E501823F29F497FF5CC01092E50143 -:103E600059C0833F19F41916CCF354C0893F41F46B -:103E70008091E70118160CF04DC01092E7014AC07E -:103E80008A3F29F48091E70187FF44C0F6CF8B3F3A -:103E900039F48091E80187FF3DC01092E8013AC0F3 -:103EA0008C3F29F48091E8011816BCF333C0843F9D -:103EB00021F48091E4018E7F17C0853F21F4809129 -:103EC000E4018D7F11C0863F21F48091E4018B7F56 -:103ED0000BC0873F21F48091E401877F05C0883FB4 -:103EE00031F48091E4018F7E8093E40113C08D3F13 -:103EF00021F48091E2018E7F0BC08E3F21F48091EE -:103F0000E2018D7F05C08F3F29F48091E2018B7F14 -:103F10008093E2018091E50181110EC08091E6015C -:103F200081110AC08091E701811106C08091E801EA -:103F3000811102C01092E301089584EE91E00E9485 -:103F40006E100E94081C9093E1018093E001089597 -:103F50001F93CF93DF938091E0019091E1010E9444 -:103F6000141CAC019091E301992321F020911401DC -:103F700030E006C0209115018AE0289F90011124AD -:103F80004217530708F486C08091E501C091E6010D -:103F9000D091E7011091E801811107C0C11176C0ED -:103FA000D11174C0111172C075C09F3F19F09F5F8D -:103FB0009093E301181624F40E942E1E8093E501CD -:103FC0008091E50187FF05C00E942E1E8195809398 -:103FD000E5011C1624F40E942E1E8093E6018091B8 -:103FE000E60187FF05C00E942E1E81958093E601A1 -:103FF0006091E501662339F1C091E601CC2319F106 -:10400000772767FD7095872F972F0E941D2323E345 -:1040100033E343E35FE30E9481230E94EA2260933B -:10402000E5016C2F772767FD7095872F972F0E94EA -:104030001D2323E333E343E35FE30E9481230E94D4 -:10404000EA226093E6011D1624F40E94771E8093F5 -:10405000E7018091E70187FF05C00E94771E8195E7 -:104060008093E701111624F40E94771E8093E801E3 -:104070008091E80187FF05C00E94771E819580939B -:10408000E801DF91CF911F910C949D1F9F3F09F094 -:104090008ECF96CFDF91CF911F910895E4EEF1E09E -:1040A00085E0DF011D928A95E9F71092E3011092F5 -:1040B000E2010895833081F128F4813059F0823093 -:1040C000D1F00895853009F449C0B8F1863009F47B -:1040D00056C0089580911501262F30E0280F311D1C -:1040E0002F3F310524F4680F6093150108958FEF79 -:1040F00080931501089580911401262F30E0280F38 -:10410000311D2F3F310524F4680F60931401089589 -:104110008FEF80931401089580911301262F30E0D2 -:10412000280F311D2F3F310524F4680F60931301D0 -:1041300008958FEF80931301089580911201262F27 -:1041400030E0280F311D2F3F310524F4680F6093B4 -:10415000120108958FEF809312010895809111014B -:10416000262F30E0280F311D2F3F310524F4680F32 -:104170006093110108958FEF80931101089580914C -:104180001001262F30E0280F311D2F3F310524F478 -:10419000680F6093100108958FEF809310010895C8 -:1041A000833011F128F4813049F0823091F0089584 -:1041B000853081F120F18630C1F10895809115019B -:1041C000681720F4861B809315010895109215013D -:1041D000089580911401681720F4861B80931401C0 -:1041E000089510921401089580911301681720F426 -:1041F000861B8093130108951092130108958091F6 -:104200001201681720F4861B809312010895109202 -:104210001201089580911101681720F4861B809384 -:1042200011010895109211010895809110016817ED -:1042300020F4861B809310010895109210010895B8 -:104240000F931F938D3109F46BC008F03FC08E307F -:1042500009F47FC0C0F4873009F469C068F486307F -:1042600009F0B1C08091DA01817F8E7F8093DA01FD -:1042700081E08093EA01A8C0883009F4A2C08B30A5 -:1042800009F49FC0A0C0863109F49BC078F4803146 -:1042900009F472C0813109F096C00E94F014909127 -:1042A0000D0181E0892780930D018BC0893109F4CC -:1042B00088C08B3109F087C08091DA0181FB222709 -:1042C00020F991E0922790FB81F94CC0853309F4E5 -:1042D00070C048F4873209F46CC008F459C08932C0 -:1042E00009F467C070C0833438F48A3308F04EC0D4 -:1042F000883309F466C067C0833409F45AC088342F -:1043000009F061C00E94F0140FEF13ED20E301509B -:1043100010402040E1F700C000000E94631C51C023 -:104320000E94A4220E9457100E9450094AC09091F6 -:10433000DA01892F8095817080FB90F929F09660D1 -:1043400098609093DA0140C0997F977F9093DA014B -:1043500038C08091DA0182FB222720F991E0922770 -:1043600090FB82F98093DA01992359F18091DA0167 -:1043700081608093DA0125C08091DA0183FB2227D6 -:1043800020F991E0922790FB83F9ECCF895301C08B -:104390008D5141E050E060E070E08A019B0104C073 -:1043A000000F111F221F331F8A95D2F7C901B801D0 -:1043B00004C061E070E080E090E00E94B0180E94CC -:1043C000F01481E001C080E01F910F91089580E01A -:1043D000089580E00895CF93C82F8091EA0181303D -:1043E00079F018F08230E9F187C0E0910E01F09188 -:1043F0000F018081813169F0823209F07FC009C0EC -:10440000E0910E01F0910F018081813111F0823233 -:1044100061F48C2F0E94E721811104C08C2F0E942F -:1044200020211DC081E090E01AC08C2F0E94E9215C -:10443000811114C0C43179F048F4CB3079F0C03127 -:1044400009F060C082E08093EA0108C0C93219F027 -:10445000C83321F057C01092EA0154C081E0817046 -:1044600053C0C93289F118F5C43171F1A8F4C730CD -:1044700009F046C08AE08093150194E190931401FD -:1044800093E0909313018093120188E080931101CF -:1044900088E28093100134C0CE51C63088F5EC2FED -:1044A000F0E0E65DFE4F80818093E90129C0CE34C3 -:1044B000E9F020F4CB3421F56AE013C0C13579F07E -:1044C000C235F1F461E00DC08091E901882319F053 -:1044D0001092E90115C081E08093EA0115C061E006 -:1044E00006C08091E9010E945A200AC06AE08091CA -:1044F000E9010E94D02004C01092EA0180E004C0CB -:1045000081E002C080E0ABCFCF910895E1E8F0E018 -:104510008081886080838081816080838FB7F894F8 -:1045200093E09093890090ED909388008FBF089559 -:10453000EFE6F0E08081826080830895EFE6F0E0AE -:1045400080818D7F80830895EFE6F0E0908182E0A6 -:104550008927808308951F920F920FB60F9211241E -:104560002F933F934F935F936F937F938F939F937B -:10457000AF93BF93EF93FF938091EB019091EC0188 -:1045800001969093EC018093EB01811103C082E0CE -:104590000E945009E091EC01E695E695F0E0EB59B8 -:1045A000FA4FE4918091EB018E1303C080E00E94EA -:1045B0005009FF91EF91BF91AF919F918F917F91A2 -:1045C0006F915F914F913F912F910F900FBE0F9080 -:1045D0001F90189504D06894B1118DC0089570D0C3 -:1045E00088F09F5790F0B92F9927B751A0F0D1F0DC -:1045F000660F771F881F991F1AF0BA95C9F712C066 -:10460000B13081F077D0B1E0089574C0672F782F72 -:104610008827B85F39F0B93FCCF3869577956795D1 -:10462000B395D9F73EF490958095709561957F4F3D -:104630008F4F9F4F0895E89409C097FB3EF49095E3 -:104640008095709561957F4F8F4F9F4F9923A9F06B -:10465000F92F96E9BB279395F695879577956795FA -:10466000B795F111F8CFFAF4BB0F11F460FF1BC03E -:104670006F5F7F4F8F4F9F4F16C0882311F096E9D1 -:1046800011C0772321F09EE8872F762F05C066237F -:1046900071F096E8862F70E060E02AF09A95660F38 -:1046A000771F881FDAF7880F9695879597F90895F1 -:1046B00057FD9058440F551F59F05F3F71F04795D3 -:1046C000880F97FB991F61F09F3F79F087950895B8 -:1046D000121613061406551FF2CF4695F1DF08C0D7 -:1046E000161617061806991FF1CF869571056105F4 -:1046F00008940895E894BB2766277727CB0197F99C -:1047000008950BD078C069D028F06ED018F09523AA -:1047100009F05AC05FC01124EECFCADFA0F3959F05 -:10472000D1F3950F50E0551F629FF001729FBB2798 -:10473000F00DB11D639FAA27F00DB11DAA1F649F44 -:104740006627B00DA11D661F829F2227B00DA11DF7 -:10475000621F739FB00DA11D621F839FA00D611D7D -:10476000221F749F3327A00D611D231F849F600D9E -:10477000211D822F762F6A2F11249F5750408AF0D7 -:10478000E1F088234AF0EE0FFF1FBB1F661F771F63 -:10479000881F91505040A9F79E3F510570F014C0FA -:1047A000AACF5F3FECF3983EDCF38695779567954B -:1047B000B795F795E7959F5FC1F7FE2B880F911D81 -:1047C0009695879597F9089597F99F6780E870E027 -:1047D00060E008959FEF80EC089500240A94161677 -:1047E000170618060906089500240A9412161306DF -:1047F000140605060895092E0394000C11F488236D -:1048000052F0BB0F40F4BF2B11F460FF04C06F5F88 -:104810007F4F8F4F9F4F089597FB072E16F40094FC -:1048200007D077FD09D00E94262407FC05D03EF46E -:10483000909581959F4F0895709561957F4F08954C -:10484000EE0FFF1F0590F491E02D0994AA1BBB1BEE -:1048500051E107C0AA1FBB1FA617B70710F0A61B80 -:10486000B70B881F991F5A95A9F780959095BC01A1 -:10487000CD010895F999FECF92BD81BDF89A99278F -:1048800080B50895A8E1B0E042E050E00C946224C5 -:10489000262FF999FECF92BD81BDF89A019700B4F9 -:1048A000021639F01FBA20BD0FB6F894FA9AF99A99 -:1048B0000FBE08950196272F0E9449240C94482486 -:1048C000DC01CB01FC01F999FECF06C0F2BDE1BDD0 -:1048D000F89A319600B40D9241505040B8F70895BF -:0448E000F894FFCF7A -:1048E40020025209E009BD09890955090101C701DE -:1048F40028080A03140A3F4D36392605D904A304AF -:104904006A04FD0316042F04480401020304050687 -:044914000708090087 +:1005600075088100C00011241FBECFEFDAE0DEBFA6 +:10057000CDBF04B603FE24C08091F9019091FA0129 +:10058000A091FB01B091FC018730904BA740B04B8C +:10059000B9F41092F9011092FA011092FB01109235 +:1005A000FC0114BE84B7877F84BF88E10FB6F8943E +:1005B00080936000109260000FBEE0E0FFE30995B9 +:1005C00011E0A0E0B1E0E0E2F8E402C005900D9295 +:1005D000A433B107D9F711E0A4E3B1E001C01D9243 +:1005E000A93FB107E1F70E94F60A0C940E240C947F +:1005F0000000FC016230B9F028F4662341F061305C +:1006000061F023C06330A9F06430C9F01EC082815C +:100610008823D9F088EA91E0089582818823A9F09F +:100620008DE891E008958281882379F084E691E055 +:1006300008958281882349F083E391E008958281BF +:10064000882319F08AE091E0089580E090E0089511 +:1006500008956091BD017091BE018091BF0190919C +:10066000C0010E94511B56985E9825982D98269897 +:100670002E9827982F98813019F0823021F0089514 +:10068000259A2D9A0895269A2E9A08950C94290356 +:1006900056985E9825982D9826982E9827982F98EA +:1006A0008FEF90E0909389008093880090938B0067 +:1006B00080938A0090938D0080938C00259A2D9AC8 +:1006C0002FEF80E792E0215080409040E1F700C09A +:1006D0000000269A2E9A2FEF80E792E0215080406A +:1006E0009040E1F700C00000279A2F9A2FEF80E793 +:1006F00092E0215080409040E1F700C00000259832 +:100700002D982FEF80E792E0215080409040E1F754 +:1007100000C0000026982E982FEF80E792E021502D +:1007200080409040E1F700C0000027982F9856982D +:100730005E9825982D9826982E9827982F9808959A +:1007400089EA8093800089E08093810024982C9826 +:100750003F988AB18F748AB96E98479A8BB1806B33 +:100760008BB9769A0E9448030C94280380E2809308 +:1007700000018091340181110EC00E94050481E0C6 +:10078000809334012FEF83ED90E32150804090401F +:10079000E1F700C0000080E40E940B048093000198 +:1007A00081112EC00E94350480930001811128C060 +:1007B0000E94350480930001811122C08FE30E94C2 +:1007C00035048093000181111BC00E942D0480E438 +:1007D0000E940B0480930001811112C08CE00E94E2 +:1007E00035048093000181110BC00E943504809371 +:1007F0000001811105C08FE30E9435048093000140 +:100800000E942D048091000108951092B9008AE0A1 +:100810008093B800089594EA9093BC009091BC0036 +:1008200097FFFCCF9091B900987F983021F09031DC +:1008300011F081E008958093BB0084E88093BC00B0 +:100840008091BC0087FFFCCF8091B900887F883100 +:1008500011F0803471F780E0089584E98093BC0042 +:100860008091BC0084FDFCCF08958093BB0084E898 +:100870008093BC008091BC0087FFFCCF9091B900B1 +:10088000987F81E0983209F480E0089584E88093AD +:10089000BC008091BC0087FFFCCF8091BB00089515 +:1008A00080910001811115C080E40E940B048093A7 +:1008B000000181110CC082E10E9435048093000187 +:1008C000811105C08FEF0E943504809300010E94C2 +:1008D0002D0484B1807F84B985B1807F85B98AB1C8 +:1008E000837F8AB98BB1837F8BB93E9846980895F0 +:1008F0000E94B603809300010E94500480B38C7064 +:1009000080BB81B3836F81BBA6E3B1E0E4E4F1E097 +:100910008EE08E0F11921D928E13FCCF0C94A003CB +:10092000BF92CF92DF92EF92FF920F931F93CF93DC +:10093000DF9380910001882379F0809135018F5FEA +:1009400080933501811108C00E94B6038093000195 +:10095000811102C00E94480306E311E0C0E0D0E02C +:10096000DD24D39482E0C82EEE24E394F12CC7302A +:10097000D10500F580910001811164C080E40E94DE +:100980000B0480930001811112C082E10E943504A2 +:100990008093000181110BC0C7010C2E01C0880F8C +:1009A0000A94EAF780950E943504809300010E9422 +:1009B0002D0448C0CA30A1F028F4C83059F0C9301D +:1009C00061F005C0CC3089F070F0CD3089F0209A0C +:1009D000289810C0219A29980DC0229A2A980AC0F6 +:1009E000239A2B9807C0529A01C0539A5B9802C071 +:1009F0003E9A469890EA9A95F1F79FB1799902C08C +:100A000082E001C080E091709D25982B7C9902C006 +:100A100084E001C080E0892B7D9902C038E001C0EC +:100A200030E0832B7E9902C020E101C020E0822BC0 +:100A30009FB19095991F9927991F9295990F907E34 +:100A4000892B0FC080910001811149C080E40E9470 +:100A50000B0480930001882379F1B12C0E942D04AE +:100A60008B2DF8019081981719F08083C0920101B5 +:100A70000E94500421960F5F1F4FCE30D10509F020 +:100A800076CF80910101882361F18150809301012B +:100A9000882339F08FE99FE00197F1F700C000004B +:100AA00020C0A4E4B1E0E6E3F1E0CF01825F9191E0 +:100AB0009D938E13FCCF15C083E10E943504809373 +:100AC00000018111CACF81E40E940B0480930001D0 +:100AD0008111C3CF0E944604B82EB094BFCF80E0EE +:100AE000C0CF0E94460381E0DF91CF911F910F910B +:100AF000FF90EF90DF90CF90BF900895E82FF0E047 +:100B0000EC5BFE4F8081089508950F931F93CF9360 +:100B1000DF93C4E4D1E010E00C2F025F899190E0F4 +:100B20000E94451B180F0C13F9CF812FDF91CF9135 +:100B30001F910F91089581E0089581E008950C942C +:100B40009D0508950F931F93CF93DF938C01FC01B4 +:100B5000C081D181CE010E94CA19BE010E944B06FC +:100B6000EC01B8010E949F05882309F48DC0F801AB +:100B70008281882309F44AC080915D0181111FC0E0 +:100B8000C431F0E5DF0709F051C00E94A10581E002 +:100B900080935D010E94121C90935C0180935B0125 +:100BA0001092540110925601109255011092580162 +:100BB0001092570110925A011092590165C080910C +:100BC0005B0190915C010E941E1C883C910570F4B1 +:100BD00080915401E82FF0E0EE0FFF1FEB5AFE4F1B +:100BE000D183C0838F5F809354014EC0C43880E5A9 +:100BF000D80721F0C538D04501F13AC0F80182810B +:100C0000882341F01092520182E01EC0C438E0E512 +:100C1000DE0759F580915201811106C086E20E94DB +:100C2000541186E20E941C1282E01CC0C438F0E518 +:100C3000DF0741F3C538D045D9F4F8018281882314 +:100C400031F01092530180E20E946B121DC080911E +:100C50005301811106C087E20E94541187E20E946D +:100C60001C1280E20E9472120FC0C538D04529F3D1 +:100C700081E08093520180935301C801DF91CF91AD +:100C80001F910F910C949B0580E0DF91CF911F91F4 +:100C90000F910895089596E0799FF001112494E54D +:100CA000899FE00DF11D1124E60FF11DEE0FFF1FCE +:100CB000E154FE4F859194910895880F991FFC018E +:100CC000E55CFF4F859194910895880F991FFC0171 +:100CD000E554FE4F8591949108950F931F93CF9300 +:100CE000DF93EC018115904350F5C11580E2D807E0 +:100CF00008F0C3C0CB3BD10590F4C83AD10508F049 +:100D00006AC0C53AD10508F05BC0C430D10508F00F +:100D1000D0C1219709F0CAC101E010E00AC2CF3F5B +:100D2000D10511F008F0C5C1C03FD10508F0A2C03F +:100D3000CE01805E9109089708F4BBC1B7C1C130EC +:100D400090E5D90709F4A2C020F5C0318FE4D80797 +:100D500070F4C11590E4D90708F094C0C11521E3DF +:100D6000D20708F0A3C1DD278E01106CE2C1C115C6 +:100D7000D04509F09BC10E94D1148FEF94E32CE081 +:100D8000815090402040E1F700C000000E946D1C9F +:100D9000D0C1C11597E5D90758F4C03121E5D20774 +:100DA00008F01CC1C43180E5D80708F475C07EC1C5 +:100DB000CE0190578115904108F078C1DF7073C162 +:100DC000C53AD10509F477C1C63AD10509F076C113 +:100DD00002E810E4AEC1C83AD10509F472C1C93ABB +:100DE000D10509F471C1CA3AD10509F470C1CB3AF1 +:100DF000D10509F46FC1CC3AD10509F46EC1CD3AE1 +:100E0000D10509F46DC1C03BD10509F46CC1CE3ADE +:100E1000D10509F46BC1CF3AD10509F46AC1C13BD0 +:100E2000D10509F469C1C23BD10509F468C1C33BCE +:100E3000D10509F467C1C43BD10509F466C1C53BBE +:100E4000D10509F465C1C63BD10509F464C1C73BAE +:100E5000D10509F463C1C83BD10509F462C1C93B9E +:100E6000D10509F461C1CA3BD10509F460C100E0B4 +:100E700014E45FC18E0110655CC1CE019F700E94B9 +:100E8000650658C1DF708E01106A53C18091DA0186 +:100E900081608093DA014DC10E94121E811102C04F +:100EA0000E94F81D0E942F1E90E09093F9018093FC +:100EB000F801C23080E5D80721F48091F801816003 +:100EC00086C0C43090E5D90721F48091F801826092 +:100ED0007EC0C63020E5D20721F48091F8018460FD +:100EE00076C0C83080E5D80719F48091F80127C092 +:100EF000CA3090E5D90721F48091F801806167C07C +:100F0000CC3020E5D20721F48091F80180625FC0E7 +:100F1000CE3080E5D80721F48091F801806457C075 +:100F2000C03190E5D90721F48091F80180684FC065 +:100F3000C23120E5D20729F48091F80184608860ED +:100F400046C0C33080E5D80721F48091F8018E7F38 +:100F50003EC0C53090E5D90721F48091F8018D7F1E +:100F600036C0C73020E5D20721F48091F8018B7F8D +:100F70002EC0C93080E5D80719F48091F80126C049 +:100F8000CB3090E5D90721F48091F8018F7E1FC006 +:100F9000CD3020E5D20721F48091F8018F7D17C074 +:100FA000CF3080E5D80721F48091F8018F7B0FC006 +:100FB000C13190E5D90721F48091F8018F7707C0FE +:100FC000C331D04531F48091F8018B7F877F8093C6 +:100FD000F8018091F8010E94331EABC08D2F992734 +:100FE0008F70992781309105D9F49E0123703327A2 +:100FF00002C0880F991F2A95E2F79C688E0144E091 +:10100000000F111F4A95E1F700271370802B912BD9 +:1010100053E0CC0FDD1F5A95E1F7C076DD272FC0D6 +:101020008230910531F4DC2FCC278E01016F106ADC +:1010300080C08330910569F4CE018370992701E067 +:1010400010E002C0000F111F8A95E2F7C8019C68EA +:101050000FC084309105B9F4CE018370992701E067 +:1010600010E002C0000F111F8A95E2F7C8019A68CC +:1010700023E0CC0FDD1F2A95E1F7C07ED7708C01ED +:101080000C2B1D2B56C08530910531F4DC2FCC275D +:101090008E01046F106A4DC0069709F04AC0CF71E7 +:1010A000DD27DC2FCC278E01106243C000E010E06A +:1010B00040C08E013EC001E810E43BC003E810E4EC +:1010C00038C002EE14E435C009EE14E432C00AEE72 +:1010D00014E42FC005EB14E42CC006EB14E429C083 +:1010E00007EB14E426C00CEC14E423C00DEC14E46C +:1010F00020C003E815E41DC00AE815E41AC002E99F +:1011000015E417C004E915E414C001E216E411C0A7 +:1011100003E216E40EC004E216E40BC005E216E496 +:1011200008C006E216E405C007E216E402C00AE2BF +:1011300016E4C801DF91CF911F910F91089596E0B9 +:10114000799FF001112494E5899FE00DF11D112490 +:10115000E60FF11DEE0FFF1FE154FE4F85919491B4 +:10116000803E9105E0F4803C910558F5813391056E +:1011700009F46FC048F48932910509F463C08A32DA +:10118000910509F46DC072C089339105E9F0823888 +:101190009105D1F08533910509F44DC067C0833EB8 +:1011A000910581F138F4803E9105B9F0823E9105B8 +:1011B000D9F05CC0863E910561F1873E9105A1F1B1 +:1011C00055C00E945D0608952091F80120FD02C0DF +:1011D00021FF4CC080EE90E049C08091F80180FF73 +:1011E000F9CF89E390E042C08091F80182FF0EC000 +:1011F0008091F80184FF03C080E090E037C083EE67 +:1012000090E034C08091F80182FFF2CF82EE90E04E +:101210002DC08091F80183FF0BC08091F80184FDFF +:10122000EBCF87EE90E022C08091F80183FFF5CFED +:1012300086EE90E01BC08091F80185FF07C089E22F +:1012400090E014C08091F80185FFF9CF85E390E02C +:101250000DC08091F80186FF07C08AE290E006C0C9 +:101260008091F80186FFF9CF81E390E00E946D063E +:10127000089508950C94390980916E010895CF93D3 +:10128000DF9300D01F92CDB7DEB79C018091EF01B4 +:10129000843019F593E099833B832A839093E90086 +:1012A0008FEF9091E800815095FD06C095ED9A95DD +:1012B000F1F700008111F5CF8091E80085FF0DC0A6 +:1012C00040E050E063E070E0CE0101960E94A00B88 +:1012D0008091E8008E778093E8000F900F900F9038 +:1012E000DF91CF910895CF93DF9300D01F92CDB7B8 +:1012F000DEB72091EF01243021F522E029839B8382 +:101300008A8383E08093E9008FEF9091E800815019 +:1013100095FD06C095ED9A95F1F700008111F5CF86 +:101320008091E80085FF0DC040E050E063E070E090 +:10133000CE0101960E94A00B8091E8008E778093E9 +:10134000E8000F900F900F90DF91CF9108952091BA +:10135000EF012430F1F422E02093E9002FEF3091E7 +:10136000E800215035FD06C035ED3A95F1F7000053 +:101370002111F5CF2091E80025FF0BC040E050E09F +:1013800065E070E00E94A00B8091E8008E7780936A +:10139000E8000895CF93DF93EC019091EF01943032 +:1013A00009F046C080910C018823D9F080910D018D +:1013B0008823B9F09093E9008FEF9091E800815075 +:1013C00095FD06C095E19A95F1F700008111F5CFE2 +:1013D0008091E80085FF2CC040E050E060E170E0C3 +:1013E00017C081E08093E9008FEF9091E800815071 +:1013F00095FD06C095ED9A95F1F700008111F5CFA6 +:101400008091E80085FF14C040E050E068E070E0A3 +:10141000CE010E94A00B8091E8008E778093E800B7 +:1014200080E1FE01AEE5B1E001900D928A95E1F711 +:10143000DF91CF9108958091EE01811109C00E9442 +:10144000350D0E94920D8091E20084608093E2004D +:1014500008951092EE010895089508950C94DA1BF2 +:1014600042E061EC81E00E94AF0C42E061EC82E07E +:101470000E94AF0C42E061EC83E00E94AF0C42E1BD +:1014800061EC84E00C94AF0C8091F101833009F49D +:1014900055C030F4813071F0823009F48EC0089567 +:1014A0008A3009F47AC08B3009F460C0893009F0C1 +:1014B0009CC020C08091F001813A09F096C08091D3 +:1014C000E800877F8093E8008091F4019091F50116 +:1014D000892B21F460E18EE591E003C060E080E0BB +:1014E00090E070E00E94EB0B8091E8008B77809396 +:1014F000E80008958091F001813209F076C0809172 +:10150000F4019091F501009719F0039709F06DC06F +:101510008091E800877F8093E8008091E80082FD59 +:1015200005C08091EF018111F8CF5FC08091F1007B +:1015300080936E018091E8008B7753C08091F00119 +:10154000813A09F052C08091F4019091F501892B04 +:1015500009F04BC08091E800877F8093E80080917C +:10156000E80080FFFCCF80910C0136C08091F00133 +:101570008132D9F58091F4019091F501892BA9F57B +:101580008091E800877F8093E8000E94E40C8091BE +:10159000F20180930C010C94D1148091F0018132FE +:1015A00021F58091E800877F8093E8000E94E40C99 +:1015B0008091F30180936F0108958091F001813A49 +:1015C000A1F48091E800877F8093E8008091E80093 +:1015D00080FFFCCF80916F018093F1008091E80043 +:1015E0008E778093E8000C94E40C089584B7877F8D +:1015F00084BF88E10FB6F894809360001092600079 +:101600000FBE90E080E80FB6F8948093610090934D +:1016100061000FBE0E9487100E94350D0E94920D3E +:101620008091E20084608093E20078940E94181018 +:101630000E94891082E091E00E9433108091EF01B6 +:10164000853069F40E94A11B8091ED018823B1F3DC +:101650000E94CC1B882391F30E948A0BEFCF0E943B +:101660008F10ECCF292F332723303105C9F064F4D4 +:101670002130310581F02230310509F043C08DE67B +:1016800090E02BEE33E042C021323105F1F02232FE +:10169000310541F137C082E190E028E534E036C001 +:1016A00099278130910541F08230910541F0892BD5 +:1016B00049F5E7EEF3E005C0EFECF3E002C0E7EB3D +:1016C000F3E0849190E09F0121C06430D8F4E62FCC +:1016D000F0E0EE0FFF1FEE5DFE4F2081318189E0CB +:1016E00090E014C0643070F470E0FB01EE0FFF1F57 +:1016F000E65EFE4F20813181FB01EA5EFE4F808174 +:1017000090E004C080E090E020E030E0FA01318316 +:101710002083089580E189BD82E189BD09B400FE7E +:10172000FDCF8091D8008F7D8093D8008091E0001C +:1017300082608093E0008091E00081FDFCCF0895FD +:10174000CF92DF92EF92FF920F931F93CF93DF938D +:10175000EC018B016A010E94030D811133C0C11499 +:10176000D10439F0F60180819181081B190BC80F53 +:10177000D91FE12CF12C0115110519F18091E80018 +:1017800085FD16C08091E8008E778093E800C11433 +:10179000D10449F0F60180819181E80EF91EF182B1 +:1017A000E08285E00FC00E94030D882321F30AC068 +:1017B00089918093F10001501109FFEFEF1AFF0AA0 +:1017C000DACF80E0DF91CF911F910F91FF90EF90E2 +:1017D000DF90CF9008952091F6013091F701261700 +:1017E000370748F06115710539F42091E8002E772C +:1017F0002093E80001C0B90140E061157105A9F12D +:101800002091EF01222309F443C0253009F442C09E +:101810002091E80023FD40C02091E80022FD32C065 +:101820002091E80020FFE9CF4091F3002091F200E1 +:1018300030E0342BFC01CF016115710559F02830DF +:10184000310540F481918093F100615071092F5F5F +:101850003F4FF1CF41E02830310509F040E02091C1 +:10186000E8002E772093E800C8CF4111C9CF0AC005 +:101870008091EF01882361F0853061F08091E8006C +:1018800083FD0AC08091E80082FFF2CF80E00895D6 +:1018900082E0089583E0089581E008952091F601A3 +:1018A0003091F7012617370748F06115710539F4B3 +:1018B0002091E8002E772093E80001C0B901FC01D7 +:1018C00020E06115710591F18091EF01882309F401 +:1018D00040C0853009F43FC08091E80083FD3DC0E1 +:1018E0008091E80082FD2FC08091E80080FFE9CF61 +:1018F0002091F3008091F20090E0922B6115710528 +:1019000059F08830910540F424912093F1003196EC +:10191000615071090196F2CF21E0089709F020E0AB +:101920008091E8008E778093E800CBCF2111CCCF57 +:101930000AC08091EF01882361F0853061F08091C9 +:10194000E80083FD0AC08091E80082FFF2CF80E0CA +:10195000089582E0089583E0089581E00895982F26 +:10196000973058F59093E900981739F07091EC0092 +:101970002091ED005091F00003C0242F762F50E00D +:1019800021FF19C03091EB003E7F3093EB00309186 +:10199000ED003D7F3093ED003091EB0031603093EE +:1019A000EB007093EC002093ED005093F000209139 +:1019B000EE0027FF07C09F5FD3CF8F708093E900B1 +:1019C00081E0089580E008958091F00187FF11C0C3 +:1019D0008091E80082FD05C08091EF018111F8CF70 +:1019E00011C08091E8008B770BC08091EF018823B4 +:1019F00049F08091E80080FFF8CF8091E8008E7771 +:101A00008093E80008952091E4003091E50095E688 +:101A10004091EC00842F817040FF22C08091E8004B +:101A200080FD1CC08091EF01882391F0853091F0FA +:101A30008091EB0085FD10C04091E4005091E500DD +:101A40004217530729F39A01915011F784E0089542 +:101A500082E0089583E0089581E0089580E008958C +:101A60004091E80042FFDECF08950E94A30D0E943E +:101A7000AB0DE0EEF0E0808181608083E8EDF0E086 +:101A800080818F77808319BCA7EDB0E08C918E7F29 +:101A90008C9380818F7E80831092EE0108950F9346 +:101AA0001F93CF93DF930E94A30D0E94AB0DC8ED4F +:101AB000D0E088818F778883888180688883888157 +:101AC0008F7D888319BC1092EF011092EB01109268 +:101AD000ED011092EC0100EE10E0F80180818B7FA7 +:101AE000808388818160888342E060E080E00E949A +:101AF000AF0CE1EEF0E080818E7F8083E2EEF0E0DB +:101B0000808181608083808188608083F80180810A +:101B10008E7F8083888180618883DF91CF911F9140 +:101B20000F910895E8EDF0E080818F7E8083E7EDEE +:101B3000F0E080818160808384E082BF81E08093D7 +:101B4000EE010C944F0DE8EDF0E080818E7F8083F4 +:101B50001092E20008951092DA001092E1000895C8 +:101B60001F920F920FB60F9211242F933F934F9312 +:101B70005F936F937F938F939F93AF93BF93EF93F5 +:101B8000FF938091E10082FF0BC08091E20082FF11 +:101B900007C08091E1008B7F8093E1000E941710C5 +:101BA0008091DA0080FF1FC08091D80080FF1BC0A9 +:101BB0008091DA008E7F8093DA008091D90080FFD7 +:101BC0000DC080E189BD82E189BD09B400FEFDCF71 +:101BD00081E08093EF010E941B0A05C019BC10929E +:101BE000EF010E94290A8091E10080FF19C08091D5 +:101BF000E20080FF15C08091E2008E7F8093E200BA +:101C00008091E20080618093E2008091D800806240 +:101C10008093D80019BC85E08093EF010E942D0AC3 +:101C20008091E10084FF30C08091E20084FF2CC0ED +:101C300080E189BD82E189BD09B400FEFDCF8091BC +:101C4000D8008F7D8093D8008091E1008F7E8093B3 +:101C5000E1008091E2008F7E8093E2008091E200BB +:101C600081608093E2008091EB01882311F084E091 +:101C700007C08091E30087FD02C081E001C083E0DE +:101C80008093EF010E942E0A8091E10083FF29C01A +:101C90008091E20083FF25C08091E100877F8093DF +:101CA000E10082E08093EF011092EB018091E1006E +:101CB0008E7F8093E1008091E2008E7F8093E2002E +:101CC0008091E20080618093E20042E060E080E089 +:101CD0000E94AF0C8091F00088608093F0000E9419 +:101CE0002C0AFF91EF91BF91AF919F918F917F91BE +:101CF0006F915F914F913F912F910F900FBE0F9079 +:101D00001F9018951F920F920FB60F9211242F93C8 +:101D10003F934F935F936F937F938F939F93AF9373 +:101D2000BF93CF93DF93EF93FF93C091E900CF7000 +:101D30008091EC00D82FD17080FDD0E81092E9009E +:101D40008091F000877F8093F00078940E94C60E07 +:101D50001092E9008091F00088608093F000CD2B14 +:101D6000CF70C093E900FF91EF91DF91CF91BF91C8 +:101D7000AF919F918F917F916F915F914F913F9123 +:101D80002F910F900FBE0F901F9018951F93CF9318 +:101D9000DF93CDB7DEB7AA970FB6F894DEBF0FBEBC +:101DA000CDBFE0EFF1E088E08E0F9091F1009193CC +:101DB0008E13FBCF0E94440A8091E80083FF1FC16D +:101DC0008091F0019091F101492F50E04A30510586 +:101DD00008F015C1FA01EA5AFF4F0C94BE2380386F +:101DE00081F0823809F00BC18091F4018F708093EB +:101DF000E9008091EB0085FB882780F91092E900CB +:101E000006C08091EC019091ED019111826090915A +:101E1000E800977F9093E8008093F1001092F10022 +:101E2000C8C0282F2D7F09F0EAC0882319F082301E +:101E300061F0E5C08091F201813009F0E0C093309B +:101E400009F080E08093ED012BC08091F2018111B7 +:101E500027C08091F4018F7009F4D1C08093E9000C +:101E60002091EB0020FF1CC0933021F48091EB0007 +:101E7000806214C09091EB0090619093EB0021E0A0 +:101E800030E0A90102C0440F551F8A95E2F7409344 +:101E9000EA001092EA008091EB0088608093EB00EA +:101EA0001092E9008091E800877F86C08111A7C069 +:101EB0001091F2011F778091E3008078812B80934D +:101EC000E3008091E800877F8093E8000E94E40CA3 +:101ED0008091E80080FFFCCF8091E30080688093D0 +:101EE000E300111102C082E001C083E08093EF01A2 +:101EF00086C08058823008F082C08091F2019091B3 +:101F0000F3018C3D53E0950779F583E08A838AE2FB +:101F100089834FB7F894DE01139620E03EE051E24A +:101F2000E32FF0E050935700E49120FF03C0E295C7 +:101F3000EF703F5FEF708E2F90E0EA3010F0C796A1 +:101F400001C0C0968D939D932F5F243149F74FBFF9 +:101F50008091E800877F8093E8006AE270E0CE011C +:101F600001960E94EB0B14C0AE014F5F5F4F609172 +:101F7000F4010E94320BBC01892B09F440C09091FE +:101F8000E800977F9093E80089819A810E944E0C27 +:101F90008091E8008B778093E80031C0803879F534 +:101FA0008091E800877F8093E8008091EB01809327 +:101FB000F1008091E8008E778093E8000E94E40CA5 +:101FC0001EC081111CC09091F2019230C0F480912A +:101FD000E800877F8093E8009093EB010E94E40C77 +:101FE0008091EB01811106C08091E30087FD02C062 +:101FF00081E001C084E08093EF010E94300A80916B +:10200000E80083FF0AC08091E800877F8093E800A2 +:102010008091EB0080628093EB00AA960FB6F89453 +:10202000DEBF0FBECDBFDF91CF911F910895089500 +:10203000CF938091EF018823A1F0C091E900CF7088 +:102040009091EC00892F817090FD80E8C82B109250 +:10205000E9008091E80083FD0E94C60ECF70C09316 +:10206000E900CF91089590937501809374010895CC +:10207000E0917401F0917501309721F00190F081A9 +:10208000E02D099480E00895E0917401F0917501CC +:10209000309721F00280F381E02D09940895E091BA +:1020A0007401F0917501309721F00480F581E02DE5 +:1020B000099408952091720130917301821793075A +:1020C00071F09093730180937201E0917401F0912B +:1020D0007501309721F00680F781E02D099408956D +:1020E00020917001309171018217930771F09093E4 +:1020F000710180937001E0917401F0917501309746 +:1021000021F00084F185E02D0994089508950C9440 +:1021100086100E94091C0E9478040C94CB1C9F928C +:10212000AF92BF92CF92DF92EF92FF920F931F93E5 +:10213000CF93DF9300D000D000D0CDB7DEB70E94A0 +:1021400090040DE010E0AA24A394B12C902E802FCF +:102150000E947E05980129583E4F6901F901F080DF +:10216000F826A1F40150110988F78FEF89838A833B +:102170001B820E94121C8160782F9D838C83498171 +:102180005A816B818D810E9426112FC09091DA01B6 +:1021900091FF04C08E830E9484058E8125E030E08B +:1021A000A501022E01C0440F0A94EAF7E42E4F2144 +:1021B000C1F029839A828E2191E009F490E09B83FB +:1021C0000E94121C8160782F9D838C8349815A81E3 +:1021D0006B818D810E942611F6018081E826E082C4 +:1021E00004C021503109E0F6BDCF0E94B21F10910A +:1021F00076010E9438101817B9F00E9438108093A9 +:10220000760126960FB6F894DEBF0FBECDBFDF91E4 +:10221000CF911F910F91FF90EF90DF90CF90BF90E3 +:10222000AF909F900C943A0926960FB6F894DEBFB3 +:102230000FBECDBFDF91CF911F910F91FF90EF9017 +:10224000DF90CF90BF90AF909F900895CF93DF9392 +:10225000CDB7DEB72B970FB6F894DEBF0FBECDBF5C +:102260004F83588769877A878B87DE01119686E0CE +:10227000FD0111928A95E9F785E0FE0137960190FC +:102280000D928A95E1F749815A816B817C818D811C +:102290009E810E946F172B960FB6F894DEBF0FBE7B +:1022A000CDBFDF91CF910895CF93882309F4C2C0A9 +:1022B000C82F823859F40E94381081FDBBC089E3D1 +:1022C0000E94491A0E94161B89E30CC0833879F4D6 +:1022D0000E94381080FDAEC083E50E94491A0E941A +:1022E000161B83E50E948B1ACF910C94161B843821 +:1022F00059F40E94381082FD9DC087E40E94491A5B +:102300000E94161B87E4EECF8CEF8C0F813A48F4C5 +:102310008C2F0E94ED2181118DC08C2F0E94491AB3 +:10232000E3CF80E28C0F883048F4C77081E001C0B1 +:10233000880FCA95EAF70E94CF1AD6CF8BE58C0F8B +:10234000833078F4C53A29F0C63A31F083E890E05A +:1023500005C081E890E002C082E890E0CF910C9443 +:102360005A1088E58C0F833108F064C0C83A39F1FF +:10237000C93A41F1CA3A49F1CB3A51F1CC3A59F153 +:10238000CD3A61F1C03B69F1CE3A71F1CF3A79F1C2 +:10239000C13B81F1C23B89F1C33B91F1C43B99F14F +:1023A000C53BA1F1C63BA9F1C73BB1F1C83BB9F1AF +:1023B000C93BC1F1CA3BC9F180E090E038C082EE70 +:1023C00090E035C089EE90E032C08AEE90E02FC0F8 +:1023D00085EB90E02CC086EB90E029C087EB90E085 +:1023E00026C08CEC90E023C08DEC90E020C083E808 +:1023F00091E01DC08AE891E01AC082E991E017C01F +:1024000084E991E014C081E292E011C083E292E09D +:102410000EC084E292E00BC085E292E008C086E242 +:1024200092E005C087E292E002C08AE292E0CF919A +:102430000C947010CF910895882309F44BC0823812 +:1024400059F40E94381081FF45C089E30E94491A5F +:102450000E94161B89E30CC0833871F40E94381067 +:1024600080FF38C083E50E94491A0E94161B83E54D +:102470000E948B1A0C94161B843859F40E94381051 +:1024800082FF28C087E40E94491A0E94161B87E435 +:10249000EFCF9CEF980F913A58F390E2980F983055 +:1024A00050F4877091E001C0990F8A95EAF7892F5F +:1024B0000E94D51ADFCF9BE5980F933020F480E07F +:1024C00090E00C945A10885A833120F480E090E018 +:1024D0000C9470100895882321F00E94CF1A0C9458 +:1024E000161B0895882321F00E94D51A0C94161B00 +:1024F00008957F928F929F92AF92BF92CF92DF9278 +:10250000EF92FF920F931F93CF93DF931F92CDB75C +:10251000DEB77C01C62E772EFC01058102950F7077 +:10252000128111110E94EC1A0E94421A882379F03C +:10253000112369F080E28C0D883048F082E00E941F +:102540002B1A0E94421A91E0D82ED92601C0D12C14 +:10255000E72DE295EF70F0E0E05AFF4F0C94BE23B8 +:10256000872D807F072D0F70882311F00295007F43 +:10257000112389F0002309F490C180E28C0D88308A +:1025800020F4802F0E94CF1A03C0802F0E94DF1AF0 +:102590000E94161B82C18C2D0E941C12002309F47C +:1025A00095C180E28C0D883020F4802F0E94D51ACE +:1025B00003C0802F0E94E51A0E94161B87C1972D29 +:1025C000907F872D8F70903211F08295807FCC2084 +:1025D00021F0F1E0CF16B1F01EC0112349F0002325 +:1025E00009F414C1013009F011C10E94FF1A6EC133 +:1025F000002319F0013009F469C189830E94021B8C +:1026000089810AC1112321F0023008F05FC1FEC0A8 +:1026100001115CC101C1112321F0002309F4F6C0AE +:102620003CC1002309F4F8C03EC1872D86958695EC +:10263000837090E0009719F0019761F047C1112372 +:1026400021F08C2D972D937002C080E090E00E94C5 +:102650005A103CC1112321F08C2D972D937002C08C +:1026600080E090E00E94701031C18C2D112319F090 +:102670000E94BA1E02C00E94221F0E94A71F26C1EC +:10268000872D837009F052C0111120C18C2D8295C5 +:1026900086958770880F880F9C2D9F70892E912CAE +:1026A000A12CB12C082E04C0880C991CAA1CBB1CA0 +:1026B0000A94D2F7C4FE14C00FE010E020E030E02E +:1026C000B901A80104C0440F551F661F771F8A95E2 +:1026D000D2F7CB01BA01609570958095909503C0B3 +:1026E00060E070E0CB01272D26952695237030E021 +:1026F0002230310569F02330310589F068297929C4 +:102700008A299B292130310571F00E94B718DEC05B +:10271000682979298A299B290E94D318D7C00E9449 +:10272000B718C501B4010E949B18D0C0112319F03D +:10273000872D817001C08695882309F4C7C08C2D30 +:10274000829586958770880F880F9C2D9F70892EA3 +:10275000912CA12CB12C082E04C0880C991CAA1C09 +:10276000BB1C0A94D2F7C4FE14C00FE010E020E0B6 +:1027700030E0B901A80104C0440F551F661F771F40 +:102780008A95D2F7CB01BA016095709580959095A6 +:1027900003C060E070E0CB01272D269526952370BD +:1027A000422F50E04230510569F04330510589F025 +:1027B000682979298A299B294130510571F00E94A5 +:1027C000911984C0682979298A299B290E94AD1909 +:1027D0007DC00E949119C501B4010E94751976C08F +:1027E0008C2D90E0FC01E05EF109E531F10508F087 +:1027F00050C0E059FF4F0C94BE230C2D0F70872D55 +:102800008F71112331F00E940E19802F0E946B12DC +:102810005DC00E942F19802F0E94721257C0112391 +:1028200039F0011153C0872D8F710E9454194EC089 +:10283000023008F04BC0F7CF112339F0872D8F718C +:102840000E940E1943C01123C9F3872D8F710E9476 +:102850002F193CC0112329F0872D8F710E94F91880 +:1028600035C00E94EF1832C0112351F0172D1F718F +:10287000812F0E940E1963E0812F0E94221A26C028 +:1028800081E00E942B1A023008F182E00E942B1A8C +:102890001DC0112331F0002389F28C2D0E945411A8 +:1028A00015C0002391F28C2D0E941C120FC0472DE1 +:1028B0004F706C2DC7010E94F9020E94131806C0C8 +:1028C000472D4F706C2DC7010E944A06DD20F9F09C +:1028D0000E941E1A80FD1BC0F70112820E94181A66 +:1028E0000E940E19C7010E9496140E94181A0F9098 +:1028F000DF91CF911F910F91FF90EF90DF90CF90DC +:10290000BF90AF909F908F907F900C942F190F9055 +:10291000DF91CF911F910F91FF90EF90DF90CF90BB +:10292000BF90AF909F908F907F9008950F931F93CB +:10293000CF93DF93EC01888199812B813C81232BFC +:10294000B9F09F3F11F48F3F99F0CE010E94A2058C +:10295000882371F0688179818A810E94141A8C0120 +:102960000E94C9190E949018B801CE010E947912E4 +:10297000DF91CF911F910F9108950E94EC1A0E9450 +:10298000FC1A0E94C11A0E94161B0E9458200E9425 +:10299000A71F80E090E00E945A1080E090E00C9425 +:1029A00070100E94DC1A0C94BD140E94091A292F81 +:1029B00022952F7030E02C3031054CF42A3031054F +:1029C0006CF42250310922303105A8F407C02C30B4 +:1029D000310569F02F30310551F00DC0803F69F0AD +:1029E00018F4803E40F409C0843F29F406C093FBEC +:1029F000882780F9089580E0089581E00895CF93B5 +:102A0000DF9300D000D01F92CDB7DEB70F900F90AC +:102A10000F900F900F90DF91CF910895CF93DF9398 +:102A200000D000D000D0CDB7DEB726960FB6F89410 +:102A3000DEBF0FBECDBFDF91CF9108951F93CF931F +:102A4000DF93C091850116E080918601C81799F047 +:102A5000D0E01C9FF0011D9FF00D1124E957FE4F9F +:102A60004081518162817381848195810E940E151C +:102A70002196C770E9CFDF91CF911F9108954091C2 +:102A8000B7015091B8016091B9017091BA0180917C +:102A9000BB019091BC010C940E158091BC018295F4 +:102AA0008F7009F054C08091B901882309F44FC098 +:102AB00080918501A09186016091B7017091B80164 +:102AC0004091BA015091BB01B6E08A1709F43FC0AA +:102AD00090E041155105C1F17F3F11F46F3FA1F125 +:102AE000B89FF001B99FF00D1124E957FE4F2181E5 +:102AF00072132AC02081621327C02281211124C0B1 +:102B0000238134812417350710F421503109241B07 +:102B1000350B283C3105C0F42091BC012F70206199 +:102B20002093BC0126E0289FF001299FF00D11247D +:102B3000E457FE4F80818F708061808387EB91E046 +:102B40000E9496140C941E1501968770BECF0895AE +:102B5000CF92DF92EF92FF920F931F93CF93DF9369 +:102B6000CDB7DEB762970FB6F894DEBF0FBECDBF0C +:102B70008C0185E0F801DE011D9601900D928A9589 +:102B8000E1F7D8014C9111965C91119712966C91D6 +:102B900012971396CD90DC9014973091B7017091F5 +:102BA000B8018091BA019091BB01009709F46BC103 +:102BB0007F3F19F43F3F09F466C1E090B901EE2070 +:102BC00009F4C0C02091BC01C816D90628F0F6014E +:102BD000E81BF90BCF0104C0809590958C0D9D1DCD +:102BE000FF24F394883C910578F0F12C207F09F0C4 +:102BF000C6C07C2DD98AC88A89890E94FF1487EBB8 +:102C000091E00E949614B1C0822F807F09F046C0E7 +:102C1000751314C0341312C0611110C02F702061DD +:102C20002093BC010E943F1587EB91E00E9496140F +:102C30008091BC01D80115968C932EC0CD2819F136 +:102C40005F3F11F44F3FF9F0F62E61111CC08091E7 +:102C500085012091860136E0821709F45AC090E080 +:102C6000389FF001399FF00D1124E957FE4F718113 +:102C7000571306C07081471303C07281711103C0DE +:102C800001968770E9CFF62E662309F418C180916A +:102C9000BC0181608093BC01F12C11C1751308C087 +:102CA000341306C0611104C08091BC01D801C3C0B7 +:102CB0004D875E878D859E856A8B0E94D5146A89B3 +:102CC0008823E1F16623D1F12091BC01822F829506 +:102CD0008F7090E0029774F08091B7019091B801E5 +:102CE00098878F831986DB86CA862C87CE01079644 +:102CF0000E94961486E0F801A7EBB1E001900D92D6 +:102D00008A95E1F70E944D150E943F15FF24F39428 +:102D1000D6C04D875E878D859E850E94091A292F12 +:102D200022952F7030E0223031050CF0BCC09F702E +:102D300009F0B6C0805E883008F4C1C0C8010E94A6 +:102D40009614E4CFC816D90608F453C0F601E81B60 +:102D5000F90BCF01883C910508F450C0F12C7C2D73 +:102D6000D98AC88A89890E94FF14E7EBF1E086E0DE +:102D7000DF011D928A95E9F70E943F15A0C07513E7 +:102D800014C0341312C0611110C08091BC01F8014D +:102D90008583C8010E94961486E0E7EBF1E0DF012D +:102DA0001D928A95E9F7FE2C8AC04D875E878D8536 +:102DB0009E856A8B0E94D5146A89882309F4BECF48 +:102DC000662309F4BBCF2091BC01822F82958F70BE +:102DD00090E002970CF48ECF8091B7019091B801EA +:102DE0009A8389831B82DD82CC822E83CE01019659 +:102DF0007FCF809590958C0D9D1DACCFF62E6623D0 +:102E000009F49CCF75132EC034132CC02091BC0143 +:102E100020FD1FC0822F82958F70D9F0D8011596A2 +:102E20002C9315978F3049F08F5F982F9295907F54 +:102E3000822F8F70892B15968C93C8010E9496144F +:102E400086E0F801A7EBB1E001900D928A95E1F7D9 +:102E500093CF86E0F801A7EBB1E001900D928A953F +:102E6000E1F72DC04D875E878D859E850E94D51424 +:102E7000811140CF8091BC0181608093BC01C80169 +:102E80000E9496141CC0662309F458CF4D875E87B4 +:102E90008D859E850E94D514882309F44FCF2ACFB3 +:102EA000811148CF0CC0243031050CF047CF9F7002 +:102EB00009F440CFF8019581907F09F03BCF8F2D29 +:102EC00062960FB6F894DEBF0FBECDBFDF91CF91F3 +:102ED0001F910F91FF90EF90DF90CF9008951F9377 +:102EE000CF93DF93CDB7DEB72C970FB6F894DEBF44 +:102EF0000FBECDBF4F83588769877A878B879C87A2 +:102F0000CE0107960E94A815882369F08F819885C5 +:102F10002A853B85232BF1F19F3F09F063C08F3F4A +:102F200009F060C037C086E0FE013796DE011196D9 +:102F300001900D928A95E1F76F817885EA85FB858E +:102F4000309741F17F3F11F46F3F21F120918601CD +:102F500030E0C9010196877099274091850150E0C2 +:102F60008417950709F447C069837A83FD83EC834E +:102F700096E0929FD001939FB00D1124A957BE4FA8 +:102F8000FE01319601900D929A95E1F780938601AA +:102F90000E941E1516E08091850190918601891787 +:102FA000C1F1189FC001112489579E4F0E94A81596 +:102FB000882379F1E09185011E9FF0011124E957E2 +:102FC000FE4F4081518162817381848195810E948D +:102FD0000E158091850190E0019687709927809366 +:102FE0008501D9CF4F81588569857A858B859C85E8 +:102FF0000E940E15CFCF0E94D1141092860110921C +:103000008501E7EBF1E086E0DF011D928A95E9F7A3 +:10301000C1CF2C960FB6F894DEBF0FBECDBFDF91A7 +:10302000CF911F910895EF92FF920F931F93CF932B +:10303000DF938C01892B09F46CC0F12CEE24E3940E +:10304000E8012196F8018491843740F4843008F037 +:1030500051C0813081F0823019F15BC0853709F4AD +:1030600044C0A8F19CE7980F903708F052C08F77C2 +:103070000E941C1241C00E5F1F4FFE01C49180E2EE +:103080008C0F883048F4C7708E2D01C0880FCA9508 +:10309000EAF70E94EF1A14C08C2F0E9454112DC021 +:1030A0000E5F1F4FFE01C49180E28C0F883058F4F0 +:1030B000C7708E2D01C0880FCA95EAF70E94F51AD5 +:1030C0000E94161B1AC08C2F0E941C1216C00E5F85 +:1030D0001F4FFE01C491CC2381F08FE99FE001973F +:1030E000F1F700C00000C150F6CF0E5F1F4FFE0188 +:1030F000F49003C00E9454118E018F2D882309F48F +:103100009FCFEFE9FFE03197F1F700C00000815059 +:10311000F5CFDF91CF911F910F91FF90EF90089520 +:1031200008956093C1017093C2018093C30190938D +:10313000C4010C94BD140F931F930091C101109111 +:10314000C2012091C3013091C401DC01CB01802B6D +:10315000912BA22BB32B8093C1019093C201A0931A +:10316000C301B093C4011F910F910C94BD140F9330 +:103170001F930091C1011091C2012091C3013091B0 +:10318000C401DC01CB0180239123A223B3238093CC +:10319000C1019093C201A093C301B093C4011F91D8 +:1031A0000F910C94BD140F931F930091C1011091C6 +:1031B000C2012091C3013091C401DC01CB01802701 +:1031C0009127A227B3278093C1019093C201A093B6 +:1031D000C301B093C4011F910F910C94BD141092C0 +:1031E000BD011092BE011092BF011092C0010C945B +:1031F000BD1441E050E060E070E004C0440F551F92 +:10320000661F771F8A95D2F74093BD015093BE0188 +:103210006093BF017093C0010C94BD1441E050E075 +:1032200060E070E004C0440F551F661F771F8A9549 +:10323000D2F78091BD019091BE01A091BF01B091E4 +:10324000C001482B592B6A2B7B2B4093BD01509317 +:10325000BE016093BF017093C0010C94BD1441E0A6 +:1032600050E060E070E004C0440F551F661F771FF8 +:103270008A95D2F740955095609570958091BD01E3 +:103280009091BE01A091BF01B091C0014823592384 +:103290006A237B234093BD015093BE016093BF011D +:1032A0007093C0010C94BD1441E050E060E070E008 +:1032B00004C0440F551F661F771F8A95D2F780916F +:1032C000BD019091BE01A091BF01B091C0014827FE +:1032D00059276A277B274093BD015093BE01609315 +:1032E000BF017093C0010C94BD140F931F93009104 +:1032F000BD011091BE012091BF013091C001DC01E0 +:10330000CB01802B912BA22BB32B8093BD019093EB +:10331000BE01A093BF01B093C0011F910F910C9407 +:10332000BD140F931F930091BD011091BE01209118 +:10333000BF013091C001DC01CB0180239123A22386 +:10334000B3238093BD019093BE01A093BF01B093BE +:10335000C0011F910F910C94BD140F931F93009106 +:10336000BD011091BE012091BF013091C001DC016F +:10337000CB0180279127A227B3278093BD0190938B +:10338000BE01A093BF01B093C0011F910F910C9497 +:10339000BD140895CF92DF92EF92FF920F931F9387 +:1033A000CF93DF938C01C090C101D090C201E09017 +:1033B000C301F090C4018091BD019091BE01A09124 +:1033C000BF01B091C001C82AD92AEA2AFB2ACFE15D +:1033D000D0E0D701C6010C2E04C0B695A7959795ED +:1033E00087950A94D2F780FF06C0B8018C2F0E94FF +:1033F0009F08019721F4219760F780E001C08C2F8E +:10340000DF91CF911F910F91FF90EF90DF90CF90C0 +:103410000895CF93DF93EC010E94CA19BE010E9468 +:103420009F08DF91CF910895CB010E94091A08955A +:103430008091C50185958595859508958091C501F3 +:103440008770089598E0899F90011124262B20937E +:10345000C5010C940E192091C5018095822380939B +:10346000C501982F977069F430E0482F552747FD24 +:1034700050952417350729F08595859585950C94E9 +:103480002F1908959091C501977081E009F480E0AB +:10349000089590910C01992321F090910D019111C3 +:1034A00009C020910E0130910F01F90132969FEF72 +:1034B00040E01FC0982F9695969596959F3050F5B1 +:1034C000E0910E01F0910F01E90FF11D877021E0ED +:1034D00030E0A90102C0440F551F8A95E2F7CA01E6 +:1034E0009181892B818308959F3F39F04F5F4E3042 +:1034F00041F051915813F8CF0DC05111F7CF942FCF +:10350000F5CF9F3F39F0F901E90FF11D97FDFA95CD +:1035100082830895089590910C01992321F0909150 +:103520000D01911109C020910E0130910F01F90197 +:103530003296205F3F4F1FC0982F9695969596958F +:103540009F30F0F4E0910E01F0910F01E90FF11DB1 +:10355000877021E030E0A90102C0440F551F8A9511 +:10356000E2F7CA018095918189238183089531967C +:10357000E217F30729F090819813F9CF1082F7CF63 +:10358000089581E090E0E0910E01F0910F01E80FC5 +:10359000F91F1082019680319105A9F70895909145 +:1035A000D901892B8093D901089580959091D901F3 +:1035B00089238093D90108951092D901089590919B +:1035C000D801892B8093D801089580959091D801D6 +:1035D00089238093D80108951092D801089590917D +:1035E000D701892B8093D701089580959091D701B9 +:1035F00089238093D70108951092D701089580936D +:10360000C60108951092C601089580910E0190910F +:103610000F01FC0131969C01205F3F4F80E09191AA +:1036200091118F5FE217F307D1F70895E0910E0132 +:10363000F0910F018091D9018083E0910E01F0910A +:103640000F0190818091D801892B8083E0910E0138 +:10365000F0910F0190818091D701892B8083809117 +:10366000C601882361F0E0910E01F0910F01908175 +:10367000892B80830E94051B81111092C6018091C5 +:103680000E0190910F010C94441020E0009739F046 +:10369000AC0141505109842395232F5FF7CF822F2E +:1036A0000895CF92DF92EF92FF926C01EE24FF24F7 +:1036B000C114D104E104F10421F0C701B60120E1F5 +:1036C00001C020E0C72ED82EE92EFF24C114D1045A +:1036D000E104F10419F0285FC701B6016B017C0118 +:1036E00054E0F694E794D794C7945A95D1F7C1144F +:1036F000D104E104F10419F02C5FC701B6016B019C +:103700007C0142E0F694E794D794C7944A95D1F7A8 +:10371000C114D104E104F10419F02E5FC701B60110 +:10372000DC01CB01B695A79597958795892B8A2BB8 +:103730008B2B09F02F5F822FFF90EF90DF90CF90BF +:1037400008958091EF01843021F11092DB0120E493 +:1037500088E190E00FB6F894A895809360000FBEC2 +:103760002093600080E00E943A0983B7817F8460E3 +:1037700083BF83B7816083BF7894889583B78E7F3A +:1037800083BF88E10FB6F8948093600010926000C8 +:103790000FBE0895089508950E94CA1B0E949004C8 +:1037A0000E94CB1B0E94850591E0811101C090E031 +:1037B000892F08950E94D1140E9438100C943A0960 +:1037C0001F920F920FB60F9211248F939F93AF9376 +:1037D000BF938091DB01811113C08091DC01909136 +:1037E000DD01A091DE01B091DF014196A11DB11D67 +:1037F0008093DC019093DD01A093DE01B093DF01A3 +:10380000BF91AF919F918F910F900FBE0F901F901E +:10381000189582E084BD93E095BD9AEF97BD8093A3 +:103820006E0008952FB7F8948091DC019091DD012E +:10383000A091DE01B091DF012FBF0895CF92DF92FA +:10384000EF92FF920F931F932FB7F8944091DC01F2 +:103850005091DD016091DE017091DF012FBF6A019F +:103860007B01EE24FF248C0120E030E0C016D1065D +:10387000E206F30610F4415051099A01281B390B56 +:10388000C9011F910F91FF90EF90DF90CF900895A5 +:103890001F920F920FB60F9211248F939F93AF93A5 +:1038A000BF938091DC019091DD01A091DE01B09188 +:1038B000DF010196A11DB11D8093DC019093DD0114 +:1038C000A093DE01B093DF01BF91AF919F918F91E3 +:1038D0000F900FBE0F901F9018950E94350DF89411 +:1038E0002FEF87EA91E6215080409040E1F700C039 +:1038F000000087E090EBDC018093F9019093FA01DE +:10390000A093FB01B093FC019CE088E10FB6F89412 +:10391000A895809360000FBE90936000FFCFEF9258 +:10392000FF920F931F93CF93DF93D82FCDE08C2F6F +:103930000E947E0505E010E0E82EF12CC701002E64 +:1039400002C0959587950A94E2F780FF09C0602F21 +:103950007C2F80E00E944B06D81302C081E006C095 +:103960000150110958F7C15010F780E0DF91CF9155 +:103970001F910F91FF90EF900895CF93C82F8CE285 +:103980000E948F1C882321F08C2FCF910C948F1CC8 +:1039900080E0CF910895CF930E94121E811102C042 +:1039A0000E94F81DC5E6C15049F00E9490048FE3C3 +:1039B0009CE90197F1F700C00000F5CF89E20E9471 +:1039C000BD1C811113C18AE20E94BD1C81110E949D +:1039D000F81D85E00E94BD1C81110E946D1C0E9493 +:1039E0001D1E8093DA0187E00E94BD1C8823A9F187 +:1039F0008BE10E94BD1C882351F08091DA0181FB8C +:103A0000222720F991E0922790FB81F90EC08EE0E9 +:103A10000E94BD1C882361F08091DA0182FB22277D +:103A200020F991E0922790FB82F98093DA0115C08A +:103A300080E10E94BD1C9091DA01882341F093FB44 +:103A4000222720F981E0822780FB93F904C0892F87 +:103A5000809580FB90F99093DA018091DA010E94C1 +:103A6000211E0E942F1E8093F80180EE0E94BD1C33 +:103A7000882341F08091F801982F909590FB80F970 +:103A80008093F80189E30E94BD1C882359F080913E +:103A9000F80181FB222720F991E0922790FB81F920 +:103AA0008093F80182EE0E94BD1C882359F080911A +:103AB000F80182FB222720F991E0922790FB82F9FE +:103AC0008093F80186EE0E94BD1C882359F08091F6 +:103AD000F80183FB222720F991E0922790FB83F9DC +:103AE0008093F80183EE0E94BD1C882359F08091D9 +:103AF000F80184FB222720F991E0922790FB84F9BA +:103B00008093F80185E30E94BD1C882359F08091C1 +:103B1000F80185FB222720F991E0922790FB85F997 +:103B20008093F80181E30E94BD1C882359F08091A5 +:103B3000F80186FB222720F991E0922790FB86F975 +:103B40008093F80181E10E94BD1C882359F0809187 +:103B5000F80187FB222720F991E0922790FB87F953 +:103B60008093F8018091F8010E94331E8091F80142 +:103B700087FB882780F980930D0187E20E94BD1C96 +:103B8000C82F8EE10E94BD1C8111C2608FE10E948E +:103B9000BD1C8111C46080E20E94BD1C8111C860FF +:103BA00081E20E94BD1C8111C06182E20E94BD1CA5 +:103BB0008111C06283E20E94BD1C8111C06484E255 +:103BC0000E94BD1C882311F0C06802C0CC2329F0DC +:103BD0008C2F0E942A1E6C2F03C00E94261E682F65 +:103BE00070E080E090E0CF910C949118CF9108950F +:103BF0006DEE7EEF80E090E00E94F82360E082E0CE +:103C000090E00E94E62360E083E090E00E94E623DB +:103C100060E084E090E00E94E62360E085E090E0D0 +:103C20000C94E62380E090E00E94E02321E08D3EAA +:103C30009E4F09F020E0822F089582E090E00C94DE +:103C4000D823682F82E090E00C94E62383E090E094 +:103C50000C94D823682F83E090E00C94E62384E052 +:103C600090E00C94D823682F84E090E00C94E62335 +:103C70008091E20180FF0BC06091130185E0689F95 +:103C8000B001112475956795759567952BC081FFD7 +:103C900009C06091130185E0689FB00111247595FA +:103CA000679520C082FF07C06091130185E0689F7F +:103CB000B001112417C09091E3019923D1F06091D4 +:103CC0001201961788F72091130185E0289F900133 +:103CD0001124929FA001939F500D112470E0CA01FE +:103CE0000E94AA236038710540F46115710539F00E +:103CF00002C065E070E0862F08958FE7089581E0A7 +:103D000008958091E20180FF08C06091110170E088 +:103D1000759567957595679521C081FF06C060917F +:103D2000110170E07595679519C082FF04C060911C +:103D3000110170E010C09091E3019923C1F06091EE +:103D400010019617A0F780911101899FC0011124DD +:103D500070E00E94AA236038710528F4611571058E +:103D600021F0862F08958FE7089581E0089561E09E +:103D700070E0F4CF803F21F40E94381E819504C08A +:103D8000813F29F40E94381E8093E6010895823F06 +:103D900021F40E94381E819504C0833F29F40E94BB +:103DA000381E8093E5010895893F19F40E94811E11 +:103DB00005C08A3F31F40E94811E81958093E701FE +:103DC00008958B3F21F40E94811E819504C08C3F91 +:103DD00029F40E94811E8093E8010895843F21F414 +:103DE0008091E401816017C0853F21F48091E40156 +:103DF000826011C0863F21F48091E40184600BC091 +:103E0000873F21F48091E401886005C0883F31F448 +:103E10008091E40180618093E40108958D3F21F455 +:103E20008091E20181600BC08E3F21F48091E2011C +:103E3000826005C08F3F29F48091E2018460809305 +:103E4000E2010895803F39F48091E60187FF6CC05C +:103E50001092E60169C0813F29F48091E6011816AD +:103E6000BCF362C09091E501823F29F497FF5CC0EA +:103E70001092E50159C0833F19F41916CCF354C0D0 +:103E8000893F41F48091E70118160CF04DC0109263 +:103E9000E7014AC08A3F29F48091E70187FF44C0C7 +:103EA000F6CF8B3F39F48091E80187FF3DC0109237 +:103EB000E8013AC08C3F29F48091E8011816BCF360 +:103EC00033C0843F21F48091E4018E7F17C0853F89 +:103ED00021F48091E4018D7F11C0863F21F480910F +:103EE000E4018B7F0BC0873F21F48091E401877F41 +:103EF00005C0883F31F48091E4018F7E8093E40116 +:103F000013C08D3F21F48091E2018E7F0BC08E3F64 +:103F100021F48091E2018D7F05C08F3F29F48091CB +:103F2000E2018B7F8093E2018091E50181110EC057 +:103F30008091E60181110AC08091E701811106C0DC +:103F40008091E801811102C01092E301089584EE8E +:103F500091E00E944F100E94121C9093E101809307 +:103F6000E00108951F93CF93DF938091E00190913A +:103F7000E1010E941E1CAC019091E301992321F004 +:103F80002091140130E006C0209115018AE0289F9D +:103F9000900111244217530708F486C08091E5016F +:103FA000C091E601D091E7011091E801811107C0AD +:103FB000C11176C0D11174C0111172C075C09F3F7C +:103FC00019F09F5F9093E301181624F40E94381EA5 +:103FD0008093E5018091E50187FF05C00E94381EAE +:103FE00081958093E5011C1624F40E94381E80936D +:103FF000E6018091E60187FF05C00E94381E819589 +:104000008093E6016091E501662339F1C091E601F4 +:10401000CC2319F1772767FD7095872F972F0E9482 +:10402000BB2223E333E343E35FE30E941F230E94A9 +:1040300088226093E5016C2F772767FD7095872FA5 +:10404000972F0E94BB2223E333E343E35FE30E9405 +:104050001F230E9488226093E6011D1624F40E940B +:10406000811E8093E7018091E70187FF05C00E94D0 +:10407000811E81958093E701111624F40E94811E10 +:104080008093E8018091E80187FF05C00E94811EAE +:1040900081958093E801DF91CF911F910C94A71F28 +:1040A0009F3F09F08ECF96CFDF91CF911F9108955A +:1040B000E4EEF1E085E0DF011D928A95E9F71092C8 +:1040C000E3011092E2010895833081F128F48130F8 +:1040D00059F08230D1F00895853009F449C0B8F123 +:1040E000863009F456C0089580911501262F30E0DE +:1040F000280F311D2F3F310524F4680F60931501FF +:1041000008958FEF80931501089580911401262F53 +:1041100030E0280F311D2F3F310524F4680F6093E4 +:10412000140108958FEF8093140108958091130175 +:10413000262F30E0280F311D2F3F310524F4680F62 +:104140006093130108958FEF809313010895809178 +:104150001201262F30E0280F311D2F3F310524F4A6 +:10416000680F6093120108958FEF809312010895F4 +:1041700080911101262F30E0280F311D2F3F31058E +:1041800024F4680F6093110108958FEF809311015B +:10419000089580911001262F30E0280F311D2F3F08 +:1041A000310524F4680F6093100108958FEF809318 +:1041B00010010895833011F128F4813049F08230E4 +:1041C00091F00895853081F120F18630C1F1089594 +:1041D00080911501681720F4861B809315010895BE +:1041E00010921501089580911401681720F4861B20 +:1041F0008093140108951092140108958091130181 +:10420000681720F4861B8093130108951092130100 +:10421000089580911201681720F4861B8093120183 +:10422000089510921201089580911101681720F4E9 +:10423000861B8093110108951092110108958091B9 +:104240001001681720F4861B8093100108951092C6 +:10425000100108950F931F938B3109F475C0A0F5D9 +:104260008E3009F484C0C0F4873009F45BC068F470 +:10427000863009F0AAC08091DA01817F8E7F809319 +:10428000DA0181E08093EA01A1C0883009F496C088 +:104290008B3009F493C099C0813109F472C068F47D +:1042A000803109F092C08091DA0183FB222720F946 +:1042B00091E0922790FB83F950C0863109F47EC0CB +:1042C000893109F47BC081C0853309F479C068F471 +:1042D000873209F475C028F48E3108F476C08D5108 +:1042E0005AC0893209F46CC070C0833438F48A3300 +:1042F00008F050C0883309F461C067C0833409F402 +:104300005FC0883409F061C00E94D1140FEF13ED33 +:1043100020E3015010402040E1F700C000000E945F +:104320006D1C4CC09091DA01892F8095817080FBC3 +:1043300090F929F0966098609093DA0147C0997FD0 +:10434000977F9093DA013AC08091DA0181FB2227AE +:1043500020F991E0922790FB81F98093DA0199236B +:1043600069F18091DA0181608093DA0127C0809140 +:10437000DA0182FB222720F991E0922790FB82F953 +:10438000ECCF0E94D11490910D0181E08927809398 +:104390000D0114C0895341E050E060E070E08A01F3 +:1043A0009B0104C0000F111F221F331F8A95D2F7F3 +:1043B000C901B8010E9491180E94D11481E006C081 +:1043C00061E070E080E090E0F5CF80E01F910F9118 +:1043D000089580E0089580E00895CF93C82F8091DC +:1043E000EA01813079F018F08230E9F187C0E0917C +:1043F0000E01F0910F018081813169F0823209F064 +:104400007FC009C0E0910E01F0910F0180818131E0 +:1044100011F0823261F48C2F0E94E921811104C0D5 +:104420008C2F0E942A211DC081E090E01AC08C2FA1 +:104430000E94EB21811114C0C43179F048F4CB30D3 +:1044400079F0C03109F060C082E08093EA0108C0D1 +:10445000C93219F0C83321F057C01092EA0154C094 +:1044600081E0817053C0C93289F118F5C43171F10E +:10447000A8F4C73009F046C08AE08093150194E1A2 +:104480009093140193E0909313018093120188E0BC +:104490008093110188E28093100134C0CE51C63060 +:1044A00088F5EC2FF0E0E65DFE4F80818093E90116 +:1044B00029C0CE34E9F020F4CB3421F56AE013C0F2 +:1044C000C13579F0C235F1F461E00DC08091E901A8 +:1044D000882319F01092E90115C081E08093EA0168 +:1044E00015C061E006C08091E9010E9464200AC005 +:1044F0006AE08091E9010E94DA2004C01092EA018A +:1045000080E004C081E002C080E0ABCFCF9108958D +:1045100004D06894B1118DC0089570D088F09F5771 +:1045200090F0B92F9927B751A0F0D1F0660F771FFF +:10453000881F991F1AF0BA95C9F712C0B13081F0DF +:1045400077D0B1E0089574C0672F782F8827B85FBF +:1045500039F0B93FCCF3869577956795B395D9F740 +:104560003EF490958095709561957F4F8F4F9F4F4A +:104570000895E89409C097FB3EF490958095709556 +:1045800061957F4F8F4F9F4F9923A9F0F92F96E99F +:10459000BB279395F695879577956795B795F11114 +:1045A000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB1 +:1045B0008F4F9F4F16C0882311F096E911C07723C3 +:1045C00021F09EE8872F762F05C0662371F096E8CC +:1045D000862F70E060E02AF09A95660F771F881F9B +:1045E000DAF7880F9695879597F9089557FD9058B3 +:1045F000440F551F59F05F3F71F04795880F97FBA7 +:10460000991F61F09F3F79F0879508951216130660 +:104610001406551FF2CF4695F1DF08C0161617068F +:104620001806991FF1CF86957105610508940895C4 +:10463000E894BB2766277727CB0197F908950BD01D +:1046400078C069D028F06ED018F0952309F05AC0D0 +:104650005FC01124EECFCADFA0F3959FD1F3950F71 +:1046600050E0551F629FF001729FBB27F00DB11DF6 +:10467000639FAA27F00DB11DAA1F649F6627B00D86 +:10468000A11D661F829F2227B00DA11D621F739F6F +:10469000B00DA11D621F839FA00D611D221F749F7D +:1046A0003327A00D611D231F849F600D211D822FC4 +:1046B000762F6A2F11249F5750408AF0E1F088230B +:1046C0004AF0EE0FFF1FBB1F661F771F881F915018 +:1046D0005040A9F79E3F510570F014C0AACF5F3F2C +:1046E000ECF3983EDCF3869577956795B795F7954B +:1046F000E7959F5FC1F7FE2B880F911D96958795D3 +:1047000097F9089597F99F6780E870E060E0089551 +:104710009FEF80EC089500240A94161617061806D9 +:104720000906089500240A941216130614060506B5 +:104730000895092E0394000C11F4882352F0BB0F46 +:1047400040F4BF2B11F460FF04C06F5F7F4F8F4FA9 +:104750009F4F089597FB072E16F4009407D077FD1E +:1047600009D00E94C42307FC05D03EF490958195A2 +:104770009F4F0895709561957F4F0895EE0FFF1F2D +:104780000590F491E02D0994AA1BBB1B51E107C0D1 +:10479000AA1FBB1FA617B70710F0A61BB70B881FD1 +:1047A000991F5A95A9F780959095BC01CD01089560 +:1047B000F999FECF92BD81BDF89A992780B50895E9 +:1047C000A8E1B0E042E050E00C940024262FF999D3 +:1047D000FECF92BD81BDF89A019700B4021639F060 +:1047E0001FBA20BD0FB6F894FA9AF99A0FBE089531 +:1047F0000196272F0E94E7230C94E623DC01CB01CE +:10480000FC01F999FECF06C0F2BDE1BDF89A3196E0 +:1048100000B40D9241505040B8F70895F894FFCF7E +:1048200020023C09CA09A70973093F090101C70110 +:1048300028080A03140A3F4D36392605D904A30473 +:104840006A04FD0316042F0448040102030405064C +:04485000070809004C :00000001FF -- cgit v1.2.3 From 6428069eb70f5cc47ac1f3f9acf3daea14fb9097 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Tue, 31 May 2016 16:45:22 -0700 Subject: zweihander-osx: Use power instead of eject KC_EJCT isn't the OS X Eject key and won't restart your computer. --- keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c | 4 ++-- keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index f1a2956b59..69d08d0e17 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | ⏏ | + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_EJCT, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 44e4ab0f3f..270a197afd 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -56,7 +56,7 @@ :100370000830082F082C0200000100350A520C50EA :10038000002C00A9004D00350852005100AC00AA15 :100390000019080100510C4F00AB00A8000608012D -:1003A0000001000100010001001B08B0000100AEC7 +:1003A0000001000100010001001B08A5000100AED2 :1003B0000001000100000016034500720067006F95 :1003C0000044006F007800200045005A000000162D :1003D000034500720067006F0044006F0078002042 -- cgit v1.2.3 From 1c2705eea59c6e772dd771c5f77fbbddeda1d61d Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 11 Jun 2016 17:24:28 -0500 Subject: fixed color detection routine in makefile --- tmk_core/rules.mk | 58 +++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8cae22b38f..79a7282456 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -43,7 +43,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. @@ -66,7 +66,7 @@ BUILD_DIR = .build OBJDIR = $(BUILD_DIR)/obj_$(TARGET) -# Optimization level, can be [0, 1, 2, 3, s]. +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s @@ -161,10 +161,8 @@ CFLAGS += -fshort-enums CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color -else ifeq ("$(shell echo "int main(){}" | $(CC) -fcolor-diagnostics -x c - -o /dev/null 2>&1)", "") - CFLAGS+= -fcolor-diagnostics endif endif CFLAGS += -Wall @@ -223,7 +221,7 @@ endif # for use in COFF files, additional information about filenames # and function names needs to be present in the assembler source # files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) @@ -239,7 +237,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt # If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = +PRINTF_LIB = #PRINTF_LIB = $(PRINTF_LIB_MIN) #PRINTF_LIB = $(PRINTF_LIB_FLOAT) @@ -251,7 +249,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt # If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = +SCANF_LIB = #SCANF_LIB = $(SCANF_LIB_MIN) #SCANF_LIB = $(SCANF_LIB_FLOAT) @@ -263,7 +261,7 @@ MATH_LIB = -lm # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = +EXTRALIBDIRS = @@ -324,7 +322,7 @@ JTAG_DEV = /dev/com1 DEBUG_PORT = 4242 # Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when +# just set to localhost unless doing some sort of crazy debugging when # avarice is running on a different computer. DEBUG_HOST = localhost @@ -358,7 +356,7 @@ endif MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: +MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: @@ -396,22 +394,22 @@ ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore +all: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore @$(MAKE) clean_list # force clean each time - @$(MAKE) build - @$(MAKE) sizeafter + @$(MAKE) build + @$(MAKE) sizeafter @$(MAKE) end # Quick make that doesn't clean -quick: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) build - @$(MAKE) sizeafter +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter @$(MAKE) end # Change the build target to build a HEX file or a library. @@ -456,12 +454,12 @@ sizeafter: # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. -gccversion : +gccversion : @$(SILENT) || $(CC) --version -# Program the device. +# Program the device. program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(PROGRAM_CMD) @@ -492,7 +490,7 @@ endif dfu-programmer $(MCU) erase dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex dfu-programmer $(MCU) reset - + dfu-start: dfu-programmer $(MCU) reset dfu-programmer $(MCU) start @@ -514,9 +512,9 @@ endif # Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set +# define the reset signal, load the target file, connect to target, and set # a breakpoint at main(). -gdb-config: +gdb-config: @$(REMOVE) $(GDBINIT_FILE) @echo define reset >> $(GDBINIT_FILE) @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) @@ -618,7 +616,7 @@ $(OBJDIR)/%.o : %.c $(OBJDIR)/%.o : %.cpp @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @$(BUILD_CMD) # Compile: create assembler files from C source files. @@ -642,7 +640,7 @@ $(OBJDIR)/%.o : %.S # Create preprocessed source for use in sending a bug report. %.i : %.c - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. clean: begin clean_list end -- cgit v1.2.3 From 3fe26d47a62117c985843361d279bc73e3c86c40 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 13 Jun 2016 16:27:33 -0400 Subject: Restructuring in keeping with recent changes to conventions --- keyboard/planck/keymaps/README.md | 3 +- keyboard/planck/keymaps/cbbrowne/.gitignore | 1 + keyboard/planck/keymaps/cbbrowne/README.md | 28 - keyboard/planck/keymaps/cbbrowne/compiled.hex | 1463 ------------------------ keyboard/planck/keymaps/cbbrowne/config_user.h | 6 + keyboard/planck/keymaps/cbbrowne/keymap.c | 22 +- keyboard/planck/keymaps/cbbrowne/readme.md | 63 + 7 files changed, 81 insertions(+), 1505 deletions(-) create mode 100644 keyboard/planck/keymaps/cbbrowne/.gitignore delete mode 100644 keyboard/planck/keymaps/cbbrowne/README.md delete mode 100644 keyboard/planck/keymaps/cbbrowne/compiled.hex create mode 100644 keyboard/planck/keymaps/cbbrowne/config_user.h create mode 100644 keyboard/planck/keymaps/cbbrowne/readme.md diff --git a/keyboard/planck/keymaps/README.md b/keyboard/planck/keymaps/README.md index 9152353017..c1711aed80 100644 --- a/keyboard/planck/keymaps/README.md +++ b/keyboard/planck/keymaps/README.md @@ -19,4 +19,5 @@ When adding your keymap to this list, keep it organised alphabetically (select l # List of Planck keymaps -* **default** default Planck layout \ No newline at end of file +* **default** default Planck layout +* **cbbrowne** cbbrowne's Planck layout \ No newline at end of file diff --git a/keyboard/planck/keymaps/cbbrowne/.gitignore b/keyboard/planck/keymaps/cbbrowne/.gitignore new file mode 100644 index 0000000000..0cf0c6cc56 --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/.gitignore @@ -0,0 +1 @@ +compiled.hex diff --git a/keyboard/planck/keymaps/cbbrowne/README.md b/keyboard/planck/keymaps/cbbrowne/README.md deleted file mode 100644 index e190c8b41e..0000000000 --- a/keyboard/planck/keymaps/cbbrowne/README.md +++ /dev/null @@ -1,28 +0,0 @@ -cbbrowne custom keyboard -============================== - -Due to cbbrowne@acm.org -Christopher Browne - -This was originally based on the default keyboard map, but I have been -doing sundry experimentation: - - * To figure things out about the toolset - * I'm an Emacs guy, so will be needing a fair bit of tuning - * It made sense to mess around some with keyboard maps. - - I tried added Workman alongside Dvorak and Colemak - - Boy, oh boy, these don't help!!! - - I have done 30 years of learning of Emacs key mappings, and - these alternative keyboards massively mess me up - - I added a keypad, originally based on keymaps/numpad.c, but - mighty substantially revised, as that one seems to be rotated 90 - degrees from usual conventions for number pads - * The keypad layer also includes some sample "hacks" of cool things, - all using actions attached in using the function action_get_macro() - - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example - of a key generating a bunch of keystrokes. The keystroke is - sufficiently inconvenient that it isn't terribly practical for me - to use it, but hey, it shows how others might use this facility - in a more useful context. - - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random - - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random diff --git a/keyboard/planck/keymaps/cbbrowne/compiled.hex b/keyboard/planck/keymaps/cbbrowne/compiled.hex deleted file mode 100644 index f5a208372a..0000000000 --- a/keyboard/planck/keymaps/cbbrowne/compiled.hex +++ /dev/null @@ -1,1463 +0,0 @@ -:100000000C94A2020C94E6020C94E6020C94E60214 -:100010000C94E6020C94E6020C94E6020C94E602C0 -:100020000C94E6020C94E6020C94E7140C94B915B7 -:100030000C941B230C94E6020C94E6020C94E6024A -:100040000C94E6020C9448030C94E6020C94E6022D -:100050000C94E6020C9483230C94E6020C94E602C2 -:100060000C94E6020C94E6020C94E6020C94E60270 -:100070000C94E6020C94E6020C94E6020C94E60260 -:100080000C945C0B0C94E6020C94E6020C94E602D1 -:100090000C94E6020C94E6020C94E6020C94E60240 -:1000A0000C94E6020C94E6020C94E602261648161E -:1000B0003617481636178D16B01636170517181747 -:1000C000021A021A311A311A701A901AE61BE61B2C -:1000D0009B1AE61B4B1B4B1BB21BBB1BE61BE01BFF -:1000E000581B581B581B581B581B581B581B581B78 -:1000F000581B581B581B581B581B581B581B581B68 -:10010000681B761B7D1B841B8E1B07634236B79BC7 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000075010106AF -:1001D00002060105020501050205011502150112BD -:1001E0000212011A021A0111021101080208290063 -:1001F00014001A000800150017001C0018000C005D -:10020000120013002A00E000040016000700090095 -:100210000A000B000D000E000F0033002800E10063 -:100220001D001B000600190005001100100036001B -:100230003700380034002B000030E200E3000152A8 -:100240002C002C0002525000510052004F00350289 -:100250001E021F0220022102220223022402250282 -:10026000260227022A0001003A003B003C003D0024 -:100270003E003F002D022E022F023002310201000B -:100280004000410042004300440045000053035336 -:10029000035300500100010003530100010001005D -:1002A000010001000100AB00AA00A900AE0035006A -:1002B0001E001F0020002100220023002400250032 -:1002C000260027002A0001003A003B003C003D00C8 -:1002D0003E003F002D002E002F00300031000100B5 -:1002E00040004100420043004400450000530353D6 -:1002F0000353005001000100010001000100010052 -:10030000010001000100AB00AA00A900AE00290015 -:1003100001301A000800150017001C005800570093 -:10032000570058002A00E0000230160007000900BC -:100330000A000B0056002400250026002800E100DA -:1003400003301B00060019000500110057002100B2 -:1003500022002300370083500030E200E300000059 -:100360002C002C0000531E001F0020002700280333 -:10037000540068006500200050006C0061006E00B1 -:1003800063006B0020004B006500790062006F0085 -:1003900061007200640000002C034F0072007400C2 -:1003A00068006F006C0069006E00650061007200FB -:1003B00020004B006500790062006F006100720050 -:1003C0006400730000000403090409026D000401C5 -:1003D00000A0FA0904000001030101000921110134 -:1003E0000001223F000705810308000A09040100FB -:1003F0000103010200092111010001224D0007053E -:10040000820308000A090402000103000000092118 -:10041000110100012236000705830308000A0904C0 -:10042000030001030000000921110100012239002D -:10043000070584031000011201100100000008EDFF -:10044000FE606001000102000105010906A101052D -:100450000719E029E71500250195087501810205B6 -:1004600008190129059505750191029501750391FA -:100470000105071900297715002501957875018177 -:1004800002C005010980A101850216010026B700FE -:100490001A01002AB700751095018100C0050C09EA -:1004A00001A1018503160100269C021A01002A9C65 -:1004B00002751095018100C005010902A101090121 -:1004C000A1000509190129051500250195057501EA -:1004D00081029501750381010501093009311581FA -:1004E000257F95027508810609381581257F9501BC -:1004F00075088106050C0A38021581257F9501755E -:10050000088106C0C005010906A101050719E029F7 -:10051000E71500250195087501810295017508818F -:1005200001050819012905950575019102950175C7 -:100530000391010507190029FF150025FF95067590 -:10054000088100C011241FBECFEFDAE0DEBFCDBFAF -:1005500004B603FE24C08091200390912103A09152 -:100560002203B09123038730904BA740B04BB9F4DE -:100570001092200310922103109222031092230361 -:1005800014BE84B7877F84BF88E10FB6F894809348 -:100590006000109260000FBEE0E0F8E3099511E002 -:1005A000A0E0B1E0E0E9FAE502C005900D92A23CBE -:1005B000B107D9F713E0A2ECB1E001C01D92A0325F -:1005C000B107E1F70E942D120C94462D0C94000007 -:1005D0000895089581E0089508950C94E9020C941B -:1005E000EA020C94EC020E94102923E030E0281B60 -:1005F0003109220F2093C6010895282F2F9880914A -:100600008000211108C0877F8093800010928D00A8 -:1006100010928C001BC0886080938000233019F4F6 -:100620008FEF9FEF0FC083E090E0821B9109880F4E -:10063000991F2FEF3FEFA90102C0569547958A9564 -:10064000E2F7CA0190938D0080938C000C94F30222 -:100650000E94F30284E08093C5011092C2010895C4 -:10066000279A2F988FEF9FEF9093870080938600B3 -:100670008AE08093800089E1809381000E9479283C -:100680000C9428030E9430036E9A769A0C94E80228 -:100690001F920F920FB60F9211242F933F938F93B7 -:1006A0009F93EF93FF93E091C301F091C401CF01B9 -:1006B00001969093C4018093C3010090C50102C0CC -:1006C000F695E7950A94E2F7EF738091C2018230C4 -:1006D00019F4E03251F404C0813039F4EF3329F4D5 -:1006E00080916F008D7F80936F00F0E0E457FE4FA4 -:1006F000E49121E031E0E29FC001E39F900D1124DD -:100700000090C60102C0969587950A94E2F79093EF -:100710008D0080938C00FF91EF919F918F913F917D -:100720002F910F900FBE0F901F901895CF9320918F -:10073000840030918500FC01613089F028F062303E -:1007400091F06330B9F133C08281882331F085EEB6 -:100750000E94A6180E94D0282AC085EE26C0828159 -:10076000811146C024C0409100015091010165EB08 -:10077000649FC001659F900D112487589A4D67EAC8 -:1007800070E00E94E22C909301018093000142816D -:10079000442369F082276AE070E00E94E22CCEE1F7 -:1007A000C80F8C2F0E94A6188C2F0E946E1980E013 -:1007B00090E020C0409100015091010165EB649FE1 -:1007C000C001659F900D112487589A4D67EA70E02B -:1007D0000E94E22C90930101809300014281442306 -:1007E00031F382276AE170E00E94E22CC4E0D8CFA6 -:1007F0008CEC91E0CF91089581E008950C94FC0376 -:1008000008950C94420380911702882309F448C08C -:100810008091D3019091D401009779F40E944D23E7 -:100820009093D4018093D3018091D50190E00097FB -:1008300071F48091D60190E00AC00E945923209162 -:100840000201309103012817390740F329C00197AD -:10085000880F991F880F991FFC01E952FE4F608194 -:100860007181828193810E94C20AE091D50184E066 -:10087000E89FF0011124E952FE4F6081718182816D -:1008800093814FE050E00E947A0E8091D50190E074 -:1008900001966091D60170E00E94F62C8093D501FC -:1008A0000C94ED02109219020C948F0A0895089589 -:1008B00081E0809319020C945704089508958F9253 -:1008C0009F92AF92BF92EF92FF920F931F93CF939D -:1008D000DF93CDB7DEB7A3970FB6F894DEBF0FBE98 -:1008E000CDBF7C01FC0100811181C8010E944A2119 -:1008F000B8010E9461068C01B7010E94FE038823A3 -:1009000009F4CCC10032F0E51F0741F4F701828100 -:10091000882309F458C00E94DE0EC0C10132F0E500 -:100920001F0741F4F7018281882309F44CC00E941B -:10093000E70EB4C10232F0E51F0751F4F7018281DE -:10094000882309F440C00E94DA0E8111F0CFE3CF72 -:100950000332F0E51F0739F4F7018281882399F10A -:100960000E9458049BC10432F0E51F0739F4F701D7 -:100970008281882341F10E94520490C10532F0E542 -:100980001F0749F4F70182818823E9F08091190259 -:100990008111F1CFE5CF0632F0E51F0739F4F701F9 -:1009A0008281882381F00E94EE0E0AC00732F0E5B2 -:1009B0001F0749F4F7018281882329F00E94F90E6C -:1009C0000E945E046BC180911902811105C0F7017C -:1009D00082818111CFC018C1003E110579F4F70161 -:1009E0008281882309F44DC00E948F0A81E08093A0 -:1009F0001802109217021092D60150C1023E110542 -:100A000059F4F70182818823E1F10E948F0A109244 -:100A100018021092170242C1033E110591F4F7012A -:100A20008281882371F10E948F0A1092180281E05E -:100A3000809317021092D5011092D4011092D30125 -:100A40002DC10235110559F4F7018281882309F47B -:100A500025C180910201909103010A970DC00135D3 -:100A6000110579F4F7018281882309F417C1809177 -:100A70000201909103010A96909303018093020171 -:100A80000DC14091060183E2E1E2F1E0DE01119641 -:100A900001900D928A95E1F7F701808121E030E025 -:100AA0002C0F3D1F280F311DC901209104013091E9 -:100AB0000501FC01E20FF31F6081772767FD709548 -:100AC000640F711D882777FD8095982F0E94182A42 -:100AD00020E030E040E451E40E947D294B015C01BC -:100AE000F701218184E090E0821B9109BC018827F5 -:100AF00077FD8095982F0E94182A9B01AC01C501B3 -:100B0000B4010E9415299B01AC0160E070E080E017 -:100B100090E40E948B2B20E030E04CED50E40E94EA -:100B2000282B4B015C01F70182818823D1F04FE033 -:100B300050E0C501B4010E947A0E8091180288230A -:100B4000A1F08091D60124E0829FF0011124E952A6 -:100B5000FE4F80829182A282B3828F5F8093D60102 -:100B600004C0C501B4010E94C20A0F3F110508F07C -:100B70002ECF94C08091D20181111FC0043130E585 -:100B8000130709F051C00E94000481E08093D20154 -:100B90000E944D239093D1018093D0011092C901FE -:100BA0001092CB011092CA011092CD011092CC018B -:100BB0001092CF011092CE0171C08091D00190911E -:100BC000D1010E945923883C910570F48091C9019C -:100BD000E82FF0E0EE0FFF1FE653FE4F1183008376 -:100BE0008F5F8093C9015AC0043880E5180721F04F -:100BF0000538104501F13AC0F7018281882341F0A0 -:100C00001092C70182E01EC0043830E5130759F581 -:100C10008091C701811106C086E20E94A61886E273 -:100C20000E946E1982E01CC00438F0E51F0741F3F2 -:100C300005381045D9F4F7018281882331F01092EC -:100C4000C80180E20E94BD1929C08091C8018111AC -:100C500006C087E20E94A61887E20E946E1980E211 -:100C60000E94C4191BC00538104529F381E0809308 -:100C7000C7018093C801C701A3960FB6F894DEBFE1 -:100C80000FBECDBFDF91CF911F910F91FF90EF90DD -:100C9000BF90AF909F908F900C94EF0280E0A3964E -:100CA0000FB6F894DEBF0FBECDBFDF91CF911F917D -:100CB0000F91FF90EF90BF90AF909F908F9008950D -:100CC00008959CE0799FF001112490E3899FE00D45 -:100CD000F11D1124E60FF11DEE0FFF1FE251FE4F33 -:100CE000859194910895880F991FFC01E259FF4F57 -:100CF000859194910895880F991FFC01E251FE4F50 -:100D00008591949108950F931F93CF93DF93EC01F6 -:100D1000811521E39207A0F5C11580E3D80708F0FB -:100D2000D7C0C83ED105D8F4C03ED10508F007C2EF -:100D3000C83AD10578F4C53AD10508F06AC0C13087 -:100D4000D10509F463C008F4F7C1C430D10508F037 -:100D5000F6C1F2C1CB3BD10508F466C0EDC1C115A7 -:100D600090E2D90708F0AFC0C11521E0D20708F022 -:100D7000E6C1C03FD10508F4DFC18E0110651FC276 -:100D8000C03880E5D80700F5C03790E5D90708F0EE -:100D9000A3C0C11520E5D20709F4ACC050F4CE01C0 -:100DA000905480319F4008F0C7C1DF708E01106AF7 -:100DB00006C2C13080E5D80709F4AEC0C43190E561 -:100DC000D90708F4AFC0B8C1C33820E5D20709F489 -:100DD0008EC050F4C13890E5D90709F482C008F0FC -:100DE00083C000E011EDEBC1C03181E5D80708F404 -:100DF000A3C1C11597E5D90708F436C1CE019057B4 -:100E00008115904108F098C1DF7093C101E010E0B6 -:100E1000D6C1C53AD10509F494C1C63AD10509F045 -:100E200093C102E810E4CBC1C83AD10509F48FC1DF -:100E3000C93AD10509F48EC1CA3AD10509F48DC168 -:100E4000CB3AD10509F48CC1CC3AD10509F48BC158 -:100E5000CD3AD10509F48AC1C03BD10509F489C155 -:100E6000CE3AD10509F488C1CF3AD10509F487C13A -:100E7000C13BD10509F486C1C23BD10509F485C146 -:100E8000C33BD10509F484C1C43BD10509F483C136 -:100E9000C53BD10509F482C1C63BD10509F481C126 -:100EA000C73BD10509F480C1C83BD10509F47FC116 -:100EB000C93BD10509F47EC1CA3BD10509F47DC106 -:100EC00000E014E47CC1CE019F700E947B0678C1D3 -:100ED000DD278E01106C73C1CF70DD278E01146D7C -:100EE0006EC100E010ED6BC100E012ED68C100E0E2 -:100EF00013ED65C10E94511C0E948F0A0E94560486 -:100F00008FEF94E32CE0815090402040E1F700C047 -:100F100000000E94A82353C18091F4028160809355 -:100F2000F4024DC10E940924811102C00E94E523F0 -:100F30000E941C2490E090931F0380931E03C230F4 -:100F400080E5D80721F480911E03816086C0C430FB -:100F500090E5D90721F480911E0382607EC0C630DF -:100F600020E5D20721F480911E03846076C0C8304A -:100F700080E5D80719F480911E0327C0CA3090E598 -:100F8000D90721F480911E03806167C0CC3020E531 -:100F9000D20721F480911E0380625FC0CE3080E5CD -:100FA000D80721F480911E03806457C0C03190E5BA -:100FB000D90721F480911E0380684FC0C23120E51B -:100FC000D20729F480911E038460886046C0C33034 -:100FD00080E5D80721F480911E038E7F3EC0C53086 -:100FE00090E5D90721F480911E038D7F36C0C7306C -:100FF00020E5D20721F480911E038B7F2EC0C930DB -:1010000080E5D80719F480911E0326C0CB3090E507 -:10101000D90721F480911E038F7E1FC0CD3020E5BB -:10102000D20721F480911E038F7D17C0CF3080E559 -:10103000D80721F480911E038F7B0FC0C13190E54A -:10104000D90721F480911E038F7707C0C331D045A3 -:1010500031F480911E038B7F877F80931E038091E4 -:101060001E030E942024ABC08D2F99278F709927D3 -:1010700081309105D9F49E012370332702C0880F77 -:10108000991F2A95E2F79C688E0144E0000F111F1A -:101090004A95E1F700271370802B912B53E0CC0F7A -:1010A000DD1F5A95E1F7C076DD272FC0823091050C -:1010B00031F4DC2FCC278E01016F106A80C08330A1 -:1010C000910569F4CE018370992701E010E002C018 -:1010D000000F111F8A95E2F7C8019C680FC0843089 -:1010E0009105B9F4CE018370992701E010E002C0A8 -:1010F000000F111F8A95E2F7C8019A6823E0CC0F10 -:10110000DD1F2A95E1F7C07ED7708C010C2B1D2BBB -:1011100056C08530910531F4DC2FCC278E01046F49 -:10112000106A4DC0069709F04AC0CF71DD27DC2F49 -:10113000CC278E01106243C000E010E040C08E0159 -:101140003EC001E810E43BC003E810E438C002EE02 -:1011500014E435C009EE14E432C00AEE14E42FC0E2 -:1011600005EB14E42CC006EB14E429C007EB14E4EF -:1011700026C00CEC14E423C00DEC14E420C003E8FA -:1011800015E41DC00AE815E41AC002E915E417C009 -:1011900004E915E414C001E216E411C003E216E408 -:1011A0000EC004E216E40BC005E216E408C006E235 -:1011B00016E405C007E216E402C00AE216E4C8011C -:1011C000DF91CF911F910F9108959CE0799FF001DD -:1011D000112490E3899FE00DF11D1124E60FF11D0C -:1011E000EE0FFF1FE251FE4F85919491803E9105D5 -:1011F000E0F4803C910558F58133910509F46FC006 -:1012000048F48932910509F463C08A32910509F4E2 -:101210006DC072C089339105E9F082389105D1F033 -:101220008533910509F44DC067C0833E910581F176 -:1012300038F4803E9105B9F0823E9105D9F05CC04A -:10124000863E910561F1873E9105A1F155C00E944E -:101250007306089520911E0320FD02C021FF4CC09B -:1012600080EE90E049C080911E0380FFF9CF89E3B2 -:1012700090E042C080911E0382FF0EC080911E0349 -:1012800084FF03C080E090E037C083EE90E034C07C -:1012900080911E0382FFF2CF82EE90E02DC08091FC -:1012A0001E0383FF0BC080911E0384FDEBCF87EEEE -:1012B00090E022C080911E0383FFF5CF86EE90E080 -:1012C0001BC080911E0385FF07C089E290E014C017 -:1012D00080911E0385FFF9CF85E390E00DC08091DA -:1012E0001E0386FF07C08AE290E006C080911E03BD -:1012F00086FFF9CF81E390E00E94830608950C9465 -:10130000F102E82FF0E0E05BFE4F8081E82FEF7004 -:10131000F0E082958F7021E030E0A90102C0440F17 -:10132000551F8A95E2F740A308950F931F93CF931B -:10133000DF9385B7806885BF85B7806885BFC3E0C8 -:10134000D0E001E010E0FE01E05BFE4F8081E82F7D -:10135000EF70F0E021A182958F70A80102C0440FC8 -:10136000551F8A95E2F7CA01822B81A38C2F0E9418 -:101370008109219740F78BE090E061E070E0FC018B -:10138000EC5BFE4F2081E22FEF70F0E042A122954E -:101390002F70DB0102C0AA0FBB1F2A95E2F79D0147 -:1013A000242B22A3019758F7DF91CF911F910F9122 -:1013B0000C940104EF92FF920F931F93CF93DF934E -:1013C00002E212E0C3E0EE24E394F12CD5E08C2F8E -:1013D0000E9481098BE090E040E050E0FC01EC5B72 -:1013E000FE4F6081E62FEF70F0E020A130E06295C3 -:1013F0006F7002C0359527956A95E2F720FD09C008 -:101400009701082E02C0220F331F0A94E2F7422BE5 -:10141000532B019718F7F801929182918F0184174D -:10142000950721F051834083D09307018C2F0E94B0 -:101430008109C15060F68091070187FD2CC0815061 -:10144000809307018F3F39F08FE99FE00197F1F713 -:1014500000C0000020C08091200290912102909352 -:1014600029028093280280911E0290911F0290937E -:1014700027028093260280911C0290911D02909376 -:1014800025028093240280911A0290911B0290936E -:101490002302809322020E94030481E0DF91CF9116 -:1014A0001F910F91FF90EF900895E82FF0E0EE0F5D -:1014B000FF1FEE5DFD4F80819181089508950F9388 -:1014C0001F93CF930AE212E0C0E0F801929182915B -:1014D0008F010E94C522C80FF2E002321F07A9F750 -:1014E0008C2FCF911F910F9108950E940924811193 -:1014F00002C00E94E5230E942E24809309033E9A95 -:10150000809171008D7F8093710082E080939000C4 -:101510008AE18093910081E080932C02089580916C -:101520002C02811102C00E94750A10927C02109256 -:101530007B02809171008D7F80937100809190007B -:101540008F738093900010923E0210923D02109291 -:101550007502109276021092770210927802109221 -:10156000740210927302E3E5F2E0A3E4B2E0119298 -:101570001192119211921D921D9282E0E337F807A9 -:10158000B1F70895CF92DF92EF92FF920F931F93DE -:10159000CF93DF9320913D02222309F484C06B0195 -:1015A0007C0180912C02811102C00E94750A03E720 -:1015B00012E0C7E0D0E0A7019601F8019291829174 -:1015C000729162918F010E947929811131C0FE01CF -:1015D000EE0FFF1FEE0FFF1FED5AFD4F108211821D -:1015E00012821382DE01AA0FBB1FAD5BBD4F1196A5 -:1015F0001C921E92C730D105E9F021964481558195 -:10160000668177814083518362837383148215825C -:101610001682178212968D919C91139711969C9326 -:101620008E9313961C921E92129734961296E2CFC6 -:10163000219708F680917B0290917C02019797FD9B -:1016400005C090937C0280937B0204C010927C02C0 -:1016500010927B0280917B0290917C022091790212 -:1016600030917A022817390724F010927A021092EA -:101670007902892BC1F4809171008D7F8093710074 -:10168000809190008F738093900010927502109259 -:1016900076021092770210927802109274021092E1 -:1016A000730210923D02DF91CF911F910F91FF9035 -:1016B000EF90DF90CF9008951F920F920FB60F9288 -:1016C00011244F925F926F927F928F929F92AF926E -:1016D000BF92CF92DF92EF92FF922F933F934F935F -:1016E0005F936F937F938F939F93AF93BF93CF93AA -:1016F000DF93EF93FF9380913D02882309F49BC110 -:10170000C0917B02D0917C021C161D060CF093C187 -:1017100040902D0250902E0260902F027090300267 -:1017200020E030E0A901C301B2010E94242B181669 -:101730000CF065C0C130D10509F452C08091790226 -:1017400090917A02BE010E94F62C7C0190937A025D -:101750008093790280903F0290904002A0904102D5 -:10176000B090420220E030E040E85FE3C501B40100 -:101770000E94152960933F027093400280934102BA -:1017800090934202F701EE0FFF1FEE0FFF1FED5A7D -:10179000FD4FA301920160817181828193810E943A -:1017A0007D2920E030E040E05EE30E94282B9B0191 -:1017B000AC01C501B4010E94242B18168CF4C7019A -:1017C0000196BE010E94F62C90937A0280937902D2 -:1017D00010923F0210924002109241021092420277 -:1017E000E0917902F0917A02EE0FFF1FEE0FFF1FDA -:1017F000ED5AFD4F6081718182819381D0C0C0908C -:101800007502D0907602E0907702F090780220E0A6 -:1018100030E0A901C701B6010E94792921978823E8 -:1018200009F4A2C0FE01EE0FFF1FEE0FFF1FED5ADD -:10183000FD4F80809180A280B380A5019401C701F3 -:10184000B6010E94792987FF31C0A501940160E0AB -:1018500070E08CED93EC0E947D2920E030E040E4C4 -:1018600051E40E947D2920E030E040E05FE30E94E7 -:10187000282B9B01AC0160E070E080E090E40E94C6 -:101880008B2B9B01AC01C501B4010E94282B9B014D -:10189000AC01C701B6010E94792987FF07C0A701E3 -:1018A000960160E070E08CED93E439C0A5019401ED -:1018B000C701B6010E94242B18160CF055C0A501D3 -:1018C000940160E070E08CED93E40E947D2920E0BB -:1018D00030E040E451E40E947D2920E030E040E027 -:1018E0005FE30E94282B9B01AC0160E070E080E088 -:1018F00090E40E948B2B9B01AC01C501B4010E94B6 -:10190000282B9B01AC01C701B6010E94242B18169D -:101910005CF5A701960160E070E08CED93EC0E940D -:101920007D2920E030E040E451E40E947D2920E060 -:1019300030E040E05FE30E94282B9B01AC0160E0B7 -:1019400070E080E090E40E948B2B9B01AC01C7010A -:10195000B6010E94282B60937502709376028093E3 -:1019600077029093780213C0FE01EE0FFF1FEE0F77 -:10197000FF1FED5AFD4F80819181A281B381809339 -:10198000750290937602A0937702B09378026091EB -:101990007502709176028091770290917802209181 -:1019A0002A0230912B022F3F4FEF340731F02F5F87 -:1019B0003F4F30932B0220932A020E94040F6B01A9 -:1019C0007C0120E034E244EF51E40E94792987FF52 -:1019D00008C086EFC82E88E2D82E84EFE82E81E476 -:1019E000F82E20E030E040E051E4C701B6010E944B -:1019F000282B9B01AC0160E074E284E79BE40E9429 -:101A00007D296B017C010E94EA2970939700609305 -:101A10009600209108013091090140910A015091EE -:101A20000B01C701B6010E94282B0E94EA2970937E -:101A300099006093980080913E02882309F433C195 -:101A4000C0903902D0903A02E0903B02F0903C0204 -:101A500020E030E0A901C701B6010E94242B18162E -:101A6000D4F580912A0290912B028F3F2FEF92079D -:101A700029F0019690932B0280932A02C701B601A8 -:101A80000E94040F20E030E040E051E40E94282B47 -:101A90009B01AC0160E074E284E79BE40E947D2935 -:101AA0006B017C010E94EA29709397006093960075 -:101AB000209108013091090140910A0150910B01D8 -:101AC000C701B6010E94282B0E94EA297093990051 -:101AD0006093980008C010929700109296001092A0 -:101AE00099001092980060913302709134026F5FF8 -:101AF0007F4F7093340260933302209196003091AF -:101B0000970080E090E0232BF1F0C0919600D091F7 -:101B100097000E94162A6B017C01BE0180E090E0D4 -:101B20000E94162A9B01AC01609135027091360229 -:101B300080913702909138020E947D2920E03FEF8A -:101B40004FE757E410C00E94162A6B017C0120E089 -:101B500030EE4FEF54E4609135027091360280917F -:101B60003702909138020E94282B9B01AC01C701DB -:101B7000B6010E94242B87FD96C0809131028F5FB1 -:101B80008093310290E02091050330910603821783 -:101B90009307A0F080911003882319F0109231026E -:101BA0000DC0809171008D7F8093710080919000B5 -:101BB0008F738093900010923E027DC0809132021C -:101BC000C0913102811128C0C0900A03D0900B034C -:101BD000E0900C03F0900D0320E030E0A901C70174 -:101BE000B6010E94242B1816BCF481E080933202C7 -:101BF0001092390210923A0210923B0210923C026B -:101C0000C0923502D0923602E0923702F09238024A -:101C1000C150C093310243C01092320210922B0285 -:101C200010922A02E0910703F091080348E0C49F54 -:101C3000E00DF11D112480819181A281B3818093F7 -:101C4000390290933A02A0933B02B0933C0220E009 -:101C500030E040E85EE364817581868197810E946F -:101C6000282B6B017C0180910C01682F70E080E0D3 -:101C700090E00E94162A20E030E048EC52E40E94F6 -:101C80007D299B01AC01C701B6010E94282B6093FE -:101C90003502709336028093370290933802109287 -:101CA0003402109233028091090380FD04C0109227 -:101CB0003E0210923D02FF91EF91DF91CF91BF91D3 -:101CC000AF919F918F917F916F915F914F913F91D4 -:101CD0002F91FF90EF90DF90CF90BF90AF909F90AB -:101CE0008F907F906F905F904F900F900FBE0F90EE -:101CF0001F901895CF92DF92EF92FF92CF93DF93D0 -:101D00006B017C01EA0180912C02811102C00E94CA -:101D1000750A8091090380FF46C080917B029091F3 -:101D20007C0208970CF03FC0809171008D7F8093FA -:101D3000710080913E0281110E948F0A81E08093A0 -:101D40003D0210922B0210922A0220E030E0A901FD -:101D5000C701B6010E94242B1816DCF480917B0287 -:101D600090917C02FC01EE0FFF1FEE0FFF1FED5A5A -:101D7000FD4FC082D182E282F382FC01EE0FFF1F91 -:101D8000ED5BFD4FD183C083019690937C028093DD -:101D90007B0280917100826080937100809190003D -:101DA000806880939000DF91CF91FF90EF90DF905B -:101DB000CF9008958091090381700895809109035F -:101DC0008160809309030E9432240C945D04809109 -:101DD00009038E7F809309030C94322480917D0245 -:101DE00090E0019666E070E00E94F62C80937D0200 -:101DF000089580917D0290E0019766E070E00E9476 -:101E0000F62C80937D0208958F929F92AF92BF929D -:101E1000CF92DF92EF92FF920F931F93CF93DF93B6 -:101E20006B017C01C0912A02D0912B02BE0180E09F -:101E300090E00E94162A4B015C01A701960160E028 -:101E400070E08CE594E40E947D299B01AC01C50102 -:101E5000B4010E94282B0E94EA2920917D022330A0 -:101E600009F473C028F4222351F02130E9F02CC189 -:101E7000243009F4A0C0253009F4E0C025C180E079 -:101E800090E0A0E0BFE38093080190930901A09344 -:101E90000A01B0930B0110922D0210922E021092A3 -:101EA0002F021092300210C110922D0210922E02B9 -:101EB00010922F02109230026431710540F46A30A2 -:101EC000710560F520E030E040E85EE32BC0693C3E -:101ED000710508F0AAC080E090E00E94162A20E078 -:101EE00030E040EA51E40E94142920E030E044E36D -:101EF00053E40E947D299B01AC010E94282B20E025 -:101F000030E040E05EE30E94282B9B01AC0160E0E2 -:101F100070E080E09EE30E94142944C020E030E09D -:101F200040E05FE3C701B6010E94282B6B017C01F2 -:101F300080E090E0A0E0BEE3809308019093090167 -:101F4000A0930A01B0930B01BFC010922D02109212 -:101F50002E0210922F02109230024AE0469F90010A -:101F6000479F300D1124C90168EB7BE00E94E22CF1 -:101F7000BC016C5D754077FF03C071956195710977 -:101F8000882777FD8095982F0E94182A2EE333EC3E -:101F90004EE259E30E94282B20E030E040EC5EE363 -:101FA0000E941529609308017093090180930A012A -:101FB00090930B0189C010922D0210922E02109264 -:101FC0002F0210923002CE0183709927892BE1F005 -:101FD000BE016170772780E090E00E94162A20E021 -:101FE00030E040E05EE30E94282B20E030E040E457 -:101FF0005FE30E94152960930801709309018093A3 -:102000000A0190930B010CC080E090E0A0E0BFE3D8 -:102010008093080190930901A0930A01B0930B01EA -:10202000C770DD27CD2B09F04FC010920801109228 -:10203000090110920A0110920B0146C010922D0264 -:1020400010922E0210922F021092300200E010E047 -:1020500020E03FE3009308011093090120930A0157 -:1020600030930B016739710578F180E090E00E94B0 -:10207000162A20E030E047E153E40E94142920E0D2 -:1020800030E04AE754E40E947D2920E030E048E453 -:1020900052E40E94282B20E030E040EA51E40E9404 -:1020A0005A2A0E94E529660F771F660F771FFB01EA -:1020B000EC5AFE4F2081318142815381C701B60124 -:1020C0000E94282B6B017C01C701B601DF91CF91E3 -:1020D0001F910F91FF90EF90DF90CF90BF90AF9046 -:1020E0009F908F90089580918E020895CF93DF93F3 -:1020F00000D01F92CDB7DEB79C01809115038430CC -:1021000019F593E099833B832A839093E9008FEF3D -:102110009091E800815095FD06C095ED9A95F1F7F4 -:1021200000008111F5CF8091E80085FF0DC040E0EF -:1021300050E063E070E0CE0101960E94D7128091DA -:10214000E8008E778093E8000F900F900F90DF915A -:10215000CF910895CF93DF9300D01F92CDB7DEB714 -:1021600020911503243021F522E029839B838A8363 -:1021700083E08093E9008FEF9091E800815095FD16 -:1021800006C095ED9A95F1F700008111F5CF809189 -:10219000E80085FF0DC040E050E063E070E0CE0154 -:1021A00001960E94D7128091E8008E778093E80014 -:1021B0000F900F900F90DF91CF910895209115030C -:1021C0002430F1F422E02093E9002FEF3091E80071 -:1021D000215035FD06C035ED3A95F1F7000021118B -:1021E000F5CF2091E80025FF0BC040E050E065E00E -:1021F00070E00E94D7128091E8008E778093E8000B -:102200000895CF93DF93EC0190911503943009F07A -:1022100046C0809117018823D9F080911801882346 -:10222000B9F09093E9008FEF9091E800815095FD0F -:1022300006C095E19A95F1F700008111F5CF8091E4 -:10224000E80085FF2CC040E050E060E170E017C07E -:1022500081E08093E9008FEF9091E800815095FD37 -:1022600006C095ED9A95F1F700008111F5CF8091A8 -:10227000E80085FF14C040E050E068E070E0CE0167 -:102280000E94D7128091E8008E778093E80080E169 -:10229000FE01AEE7B2E001900D928A95E1F7DF9181 -:1022A000CF91089580911403811109C00E946C148C -:1022B0000E94C9148091E20084608093E200089536 -:1022C000109214030895089508950C94102342E089 -:1022D00061EC81E00E94E61342E061EC82E00E9442 -:1022E000E61342E061EC83E00E94E61342E161EC18 -:1022F00084E00C94E61380911703833009F455C0F1 -:1023000030F4813071F0823009F48EC008958A3043 -:1023100009F47AC08B3009F460C0893009F09CC0A0 -:1023200020C080911603813A09F096C08091E800A0 -:10233000877F8093E80080911A0390911B03892B7B -:1023400021F460E18EE792E003C060E080E090E07D -:1023500070E00E9422138091E8008B778093E80060 -:10236000089580911603813209F076C080911A0396 -:1023700090911B03009719F0039709F06DC08091AD -:10238000E800877F8093E8008091E80082FD05C027 -:10239000809115038111F8CF5FC08091F100809387 -:1023A0008E028091E8008B7753C080911603813AAA -:1023B00009F052C080911A0390911B03892B09F0F8 -:1023C0004BC08091E800877F8093E8008091E8000F -:1023D00080FFFCCF8091170136C0809116038132B7 -:1023E000D9F580911A0390911B03892BA9F580914F -:1023F000E800877F8093E8000E941B1480911803F7 -:10240000809317010C94511C80911603813221F5A1 -:102410008091E800877F8093E8000E941B148091E0 -:10242000190380938F02089580911603813AA1F4D5 -:102430008091E800877F8093E8008091E80080FF2A -:10244000FCCF80918F028093F1008091E8008E771D -:102450008093E8000C941B14089584B7877F84BF91 -:1024600088E10FB6F89480936000109260000FBE70 -:1024700090E080E80FB6F89480936100909361003B -:102480000FBE0E94BE170E946C140E94C914809156 -:10249000E20084608093E20078940E944F170E94CB -:1024A000C0178DE091E00E946A1780911503853076 -:1024B00069F40E94D122809113038823B1F30E9412 -:1024C000FF22882391F30E94C112EFCF0E94C81708 -:1024D000ECCF292F332723303105C9F064F42130A4 -:1024E000310581F02230310509F043C08DE690E0DE -:1024F0002AEC33E042C021323105F1F022323105BD -:1025000041F137C082E190E027E334E036C09927FB -:102510008130910541F08230910541F0892B49F5D8 -:10252000E6ECF3E005C0E8E9F3E002C0EEE6F3E034 -:10253000849190E09F0121C06430D8F4E62FF0E050 -:10254000EE0FFF1FE055FE4F2081318189E090E0C2 -:1025500014C0643070F470E0FB01EE0FFF1FE8550B -:10256000FE4F20813181FB01EC55FE4F808190E0D0 -:1025700004C080E090E020E030E0FA013183208365 -:10258000089580E189BD82E189BD09B400FEFDCFD7 -:102590008091D8008F7D8093D8008091E000826088 -:1025A0008093E0008091E00081FDFCCF0895CF9200 -:1025B000DF92EF92FF920F931F93CF93DF93EC0183 -:1025C0008B016A010E943A14811133C0C114D104F5 -:1025D00039F0F60180819181081B190BC80FD91FB2 -:1025E000E12CF12C0115110519F18091E80085FD10 -:1025F00016C08091E8008E778093E800C114D10462 -:1026000049F0F60180819181E80EF91EF182E082A5 -:1026100085E00FC00E943A14882321F30AC08991F3 -:102620008093F10001501109FFEFEF1AFF0ADACF92 -:1026300080E0DF91CF911F910F91FF90EF90DF909D -:10264000CF90089520911C0330911D032617370762 -:1026500048F06115710539F42091E8002E77209338 -:10266000E80001C0B90140E061157105A9F12091B0 -:102670001503222309F443C0253009F442C02091F8 -:10268000E80023FD40C02091E80022FD32C02091E7 -:10269000E80020FFE9CF4091F3002091F20030E004 -:1026A000342BFC01CF016115710559F0283031053B -:1026B00040F481918093F100615071092F5F3F4F89 -:1026C000F1CF41E02830310509F040E02091E800E9 -:1026D0002E772093E800C8CF4111C9CF0AC080915E -:1026E0001503882361F0853061F08091E80083FD57 -:1026F0000AC08091E80082FFF2CF80E0089582E076 -:10270000089583E0089581E0089520911C0330919D -:102710001D032617370748F06115710539F420911C -:10272000E8002E772093E80001C0B901FC0120E009 -:102730006115710591F180911503882309F440C05A -:10274000853009F43FC08091E80083FD3DC0809151 -:10275000E80082FD2FC08091E80080FFE9CF209142 -:10276000F3008091F20090E0922B6115710559F011 -:102770008830910540F424912093F1003196615006 -:1027800071090196F2CF21E0089709F020E08091CD -:10279000E8008E778093E800CBCF2111CCCF0AC020 -:1027A00080911503882361F0853061F08091E80005 -:1027B00083FD0AC08091E80082FFF2CF80E0089597 -:1027C00082E0089583E0089581E00895982F97307E -:1027D00058F59093E900981739F07091EC0020912A -:1027E000ED005091F00003C0242F762F50E021FF20 -:1027F00019C03091EB003E7F3093EB003091ED003B -:102800003D7F3093ED003091EB0031603093EB0071 -:102810007093EC002093ED005093F0002091EE00B7 -:1028200027FF07C09F5FD3CF8F708093E90081E0BF -:10283000089580E008958091160387FF11C080916C -:10284000E80082FD05C0809115038111F8CF11C009 -:102850008091E8008B770BC080911503882349F0A5 -:102860008091E80080FFF8CF8091E8008E77809318 -:10287000E80008952091E4003091E50095E640914C -:10288000EC00842F817040FF22C08091E80080FD21 -:102890001CC080911503882391F0853091F08091C0 -:1028A000EB0085FD10C04091E4005091E500421717 -:1028B000530729F39A01915011F784E0089582E0BB -:1028C000089583E0089581E0089580E0089540919F -:1028D000E80042FFDECF08950E94DA140E94E2145D -:1028E000E0EEF0E0808181608083E8EDF0E08081BF -:1028F0008F77808319BCA7EDB0E08C918E7F8C938D -:1029000080818F7E80831092140308950F931F930C -:10291000CF93DF930E94DA140E94E214C8EDD0E056 -:1029200088818F77888388818068888388818F7D7C -:10293000888319BC1092150310921103109213038F -:102940001092120300EE10E0F80180818B7F8083EB -:1029500088818160888342E060E080E00E94E61325 -:10296000E1EEF0E080818E7F8083E2EEF0E0808116 -:1029700081608083808188608083F80180818E7F80 -:102980008083888180618883DF91CF911F910F912F -:102990000895E8EDF0E080818F7E8083E7EDF0E040 -:1029A00080818160808384E082BF81E08093140312 -:1029B0000C948614E8EDF0E080818E7F8083109285 -:1029C000E20008951092DA001092E10008951F923B -:1029D0000F920FB60F9211242F933F934F935F9353 -:1029E0006F937F938F939F93AF93BF93EF93FF93D7 -:1029F0008091E10082FF0BC08091E20082FF07C05E -:102A00008091E1008B7F8093E1000E944E178091BE -:102A1000DA0080FF1FC08091D80080FF1BC080912A -:102A2000DA008E7F8093DA008091D90080FF0DC09C -:102A300080E189BD82E189BD09B400FEFDCF81E05E -:102A4000809315030E94521105C019BC1092150302 -:102A50000E9460118091E10080FF19C08091E20026 -:102A600080FF15C08091E2008E7F8093E20080910C -:102A7000E20080618093E2008091D80080628093C0 -:102A8000D80019BC85E0809315030E9464118091E1 -:102A9000E10084FF30C08091E20084FF2CC080E11F -:102AA00089BD82E189BD09B400FEFDCF8091D800C7 -:102AB0008F7D8093D8008091E1008F7E8093E1002C -:102AC0008091E2008F7E8093E2008091E20081603D -:102AD0008093E20080911103882311F084E007C005 -:102AE0008091E30087FD02C081E001C083E0809314 -:102AF00015030E9465118091E10083FF29C0809138 -:102B0000E20083FF25C08091E100877F8093E10090 -:102B100082E080931503109211038091E1008E7F73 -:102B20008093E1008091E2008E7F8093E2008091AB -:102B3000E20080618093E20042E060E080E00E9479 -:102B4000E6138091F00088608093F0000E9463118A -:102B5000FF91EF91BF91AF919F918F917F916F9175 -:102B60005F914F913F912F910F900FBE0F901F904B -:102B700018951F920F920FB60F9211242F933F9327 -:102B80004F935F936F937F938F939F93AF93BF9375 -:102B9000CF93DF93EF93FF93C091E900CF708091C3 -:102BA000EC00D82FD17080FDD0E81092E900809120 -:102BB000F000877F8093F00078940E94FD151092BA -:102BC000E9008091F00088608093F000CD2BCF70F9 -:102BD000C093E900FF91EF91DF91CF91BF91AF9149 -:102BE0009F918F917F916F915F914F913F912F9125 -:102BF0000F900FBE0F901F9018951F93CF93DF93E8 -:102C0000CDB7DEB7AA970FB6F894DEBF0FBECDBF23 -:102C1000E6E1F3E088E08E0F9091F10091938E133E -:102C2000FBCF0E947B118091E80083FF1FC1809140 -:102C3000160390911703492F50E04A30510508F0D0 -:102C400015C1FA01EA5AFF4F0C940A2D803881F021 -:102C5000823809F00BC180911A038F708093E900CC -:102C60008091EB0085FB882780F91092E90006C06F -:102C70008091120390911303911182609091E8006A -:102C8000977F9093E8008093F1001092F100C8C004 -:102C9000282F2D7F09F0EAC0882319F0823061F0D7 -:102CA000E5C080911803813009F0E0C0933009F04D -:102CB00080E0809313032BC080911803811127C0FB -:102CC00080911A038F7009F4D1C08093E90020919C -:102CD000EB0020FF1CC0933021F48091EB00806258 -:102CE00014C09091EB0090619093EB0021E030E0F4 -:102CF000A90102C0440F551F8A95E2F74093EA00EC -:102D00001092EA008091EB0088608093EB001092B3 -:102D1000E9008091E800877F86C08111A7C01091EB -:102D200018031F778091E3008078812B8093E30064 -:102D30008091E800877F8093E8000E941B148091B7 -:102D4000E80080FFFCCF8091E30080688093E3007F -:102D5000111102C082E001C083E08093150386C098 -:102D60008058823008F082C0809118039091190336 -:102D70008C3D53E0950779F583E08A838AE2898365 -:102D80004FB7F894DE01139620E03EE051E2E32FC6 -:102D9000F0E050935700E49120FF03C0E295EF70FC -:102DA0003F5FEF708E2F90E0EA3010F0C79601C0C1 -:102DB000C0968D939D932F5F243149F74FBF80912B -:102DC000E800877F8093E8006AE270E0CE01019618 -:102DD0000E94221314C0AE014F5F5F4F60911A032F -:102DE0000E946912BC01009709F440C09091E8006C -:102DF000977F9093E80089819A810E948513809142 -:102E0000E8008B778093E80031C0803879F58091B5 -:102E1000E800877F8093E800809111038093F100A0 -:102E20008091E8008E778093E8000E941B141EC0FA -:102E300081111CC0909118039230C0F48091E80079 -:102E4000877F8093E800909311030E941B14809168 -:102E50001103811106C08091E30087FD02C081E06B -:102E600001C084E0809315030E9467118091E800FF -:102E700083FF0AC08091E800877F8093E8008091FB -:102E8000EB0080628093EB00AA960FB6F894DEBF49 -:102E90000FBECDBFDF91CF911F9108950895CF93BD -:102EA000809115038823A1F0C091E900CF70909123 -:102EB000EC00892F817090FD80E8C82B1092E9000A -:102EC0008091E80083FD0E94FD15CF70C093E9005A -:102ED000CF91089590939502809394020895E09184 -:102EE0009402F0919502309721F00190F081E02D4D -:102EF000099480E00895E0919402F0919502309752 -:102F000021F00280F381E02D09940895E09194026C -:102F1000F0919502309721F00480F581E02D09941D -:102F2000089520919202309193028217930771F0D5 -:102F30009093930280939202E0919402F091950213 -:102F4000309721F00680F781E02D099408952091B3 -:102F50009002309191028217930771F09093910241 -:102F600080939002E0919402F0919502309721F0C5 -:102F70000084F185E02D0994089508950C94BD17FF -:102F80000E9444230E9495090E94CA230C94792828 -:102F90005F926F927F928F929F92AF92BF92CF92E9 -:102FA000DF92EF92FF920F931F93CF93DF9300D0A6 -:102FB00000D01F92CDB7DEB70E94DA099FE9C92E73 -:102FC00092E0D92E03E010E0AA24A394B12C502E55 -:102FD000802F0E94550A4C01F601729062906F0199 -:102FE0006826792661147104A1F40150110978F75B -:102FF0008FEF89838A831B820E944D238160782F03 -:103000009D838C8349815A816B818D810E947818C0 -:1030100038C08091F40281FD0E945E0A2BE030E00E -:103020007501022E02C0EE0CFF1C0A94E2F7C701E4 -:1030300086219721892B09F129835A828E209F208E -:1030400091E0892809F490E09B830E944D238160E0 -:10305000782F9D838C8349815A816B818D810E9459 -:103060007818000F111FF801E956FD4F80819181FA -:10307000E826F926F182E08204C02150310980F669 -:10308000B4CF0E94B125109196020E946F171817B5 -:10309000D1F00E946F17809396020F900F900F90BF -:1030A0000F900F90DF91CF911F910F91FF90EF90B4 -:1030B000DF90CF90BF90AF909F908F907F906F9058 -:1030C0005F900C947F090F900F900F900F900F90CE -:1030D000DF91CF911F910F91FF90EF90DF90CF90F4 -:1030E000BF90AF909F908F907F906F905F9008956A -:1030F000CF93DF93CDB7DEB72B970FB6F894DEBF33 -:103100000FBECDBF4F83588769877A878B87DE01D3 -:10311000119686E0FD0111928A95E9F785E0FE019E -:10312000379601900D928A95E1F749815A816B811A -:103130007C818D819E810E94EF1E2B960FB6F894A4 -:10314000DEBF0FBECDBFDF91CF910895CF9388230F -:1031500009F4C2C0C82F823859F40E946F1781FD4C -:10316000BBC089E30E94C9210E94962289E30CC05A -:10317000833879F40E946F1780FDAEC083E50E940A -:10318000C9210E94962283E50E940B22CF910C94C4 -:103190009622843859F40E946F1782FD9DC087E4FF -:1031A0000E94C9210E94962287E4EECF8CEF8C0FFB -:1031B000813A48F48C2F0E94E12781118DC08C2F19 -:1031C0000E94C921E3CF80E28C0F883048F4C77099 -:1031D00081E001C0880FCA95EAF70E944F22D6CF3E -:1031E0008BE58C0F833078F4C53A29F0C63A31F07C -:1031F00083E890E005C081E890E002C082E890E0BA -:10320000CF910C94911788E58C0F833108F064C03E -:10321000C83A39F1C93A41F1CA3A49F1CB3A51F1C8 -:10322000CC3A59F1CD3A61F1C03B69F1CE3A71F136 -:10323000CF3A79F1C13B81F1C23B89F1C33B91F1B6 -:10324000C43B99F1C53BA1F1C63BA9F1C73BB1F124 -:10325000C83BB9F1C93BC1F1CA3BC9F180E090E07C -:1032600038C082EE90E035C089EE90E032C08AEE40 -:1032700090E02FC085EB90E02CC086EB90E029C059 -:1032800087EB90E026C08CEC90E023C08DEC90E0C2 -:1032900020C083E891E01DC08AE891E01AC082E96D -:1032A00091E017C084E991E014C081E292E011C07E -:1032B00083E292E00EC084E292E00BC085E292E0ED -:1032C00008C086E292E005C087E292E002C08AE28E -:1032D00092E0CF910C94A717CF910895882309F419 -:1032E0004BC0823859F40E946F1781FF45C089E3B3 -:1032F0000E94C9210E94962289E30CC0833871F490 -:103300000E946F1780FF38C083E50E94C9210E9488 -:10331000962283E50E940B220C949622843859F45D -:103320000E946F1782FF28C087E40E94C9210E9473 -:10333000962287E4EFCF9CEF980F913A58F390E2F2 -:10334000980F983050F4877091E001C0990F8A95DA -:10335000EAF7892F0E945522DFCF9BE5980F933023 -:1033600020F480E090E00C949117885A833120F487 -:1033700080E090E00C94A7170895882321F00E9424 -:103380004F220C9496220895882321F00E94552202 -:103390000C94962208957F928F929F92AF92BF9243 -:1033A000CF92DF92EF92FF920F931F93CF93DF9311 -:1033B0001F92CDB7DEB77C01C62E772EFC010581AA -:1033C00002950F70128111110E946C220E94C2217D -:1033D000882379F0112369F080E28C0D883048F061 -:1033E00082E00E94AB210E94C22191E0D82ED92612 -:1033F00001C0D12CE72DE295EF70F0E0E05AFF4FCD -:103400000C940A2D872D807F072D0F70882311F0D3 -:103410000295007F112389F0002309F499C180E20D -:103420008C0D883020F4802F0E944F2203C0802F03 -:103430000E945F220E9496228BC18C2D0E946E19E1 -:10344000002309F4C3C180E28C0D883020F4802F62 -:103450000E94552203C0802F0E9465220E9496225E -:10346000B5C1872D807F972D9F70803211F4892FF1 -:1034700003C0892F8295807FCC2021F0F1E0CF1608 -:10348000A1F01DC0112339F0002319F1013009F515 -:103490000E947F229BC1002319F0013009F496C1DC -:1034A00089830E948222898110C1112321F0063074 -:1034B00008F08CC10EC0053008F088C106C1112388 -:1034C00059F0002331F0F701958190FF41C19F70C1 -:1034D00095830E94BD197AC1002309F4F6C03EC14C -:1034E000872D86958695837090E0009719F0019757 -:1034F00061F06CC1112321F08C2D972D937002C0C7 -:1035000080E090E00E94911761C1112321F08C2D81 -:10351000972D937002C080E090E00E94A71756C1DB -:103520008C2D112319F00E94B92402C00E9421257C -:103530000E94A6254BC1872D837009F052C011113E -:1035400045C18C2D829586958770880F880F9C2D9C -:103550009F70892E912CA12CB12C082E04C0880CB0 -:10356000991CAA1CBB1C0A94D2F7C4FE14C00FE01D -:1035700010E020E030E0B901A80104C0440F551F5D -:10358000661F771F8A95D2F7CB01BA0160957095B7 -:103590008095909503C060E070E0CB01272D2695C3 -:1035A0002695237030E02230310569F02330310553 -:1035B00089F0682979298A299B292130310571F000 -:1035C0000E94372003C1682979298A299B290E94F2 -:1035D0005320FCC00E943720C501B4010E941B206B -:1035E000F5C0112319F0872D817001C086958823BD -:1035F00009F4ECC08C2D829586958770880F880F12 -:103600009C2D9F70892E912CA12CB12C082E04C0CA -:10361000880C991CAA1CBB1C0A94D2F7C4FE14C0C7 -:103620000FE010E020E030E0B901A80104C0440F31 -:10363000551F661F771F8A95D2F7CB01BA01609597 -:1036400070958095909503C060E070E0CB01272DC8 -:10365000269526952370422F50E04230510569F09F -:103660004330510589F0682979298A299B294130FD -:10367000510571F00E941121A9C0682979298A2970 -:103680009B290E942D21A2C00E941121C501B401D5 -:103690000E94F5209BC08C2D90E0FC01E05EF109BA -:1036A000E531F10508F050C0E059FF4F0C940A2DA8 -:1036B0000C2D0F70872D8F71112321F00E948E2009 -:1036C000802F07CF0E94AF20802F0E94C4197EC098 -:1036D000112341F0053008F079C0872D8F710E94C9 -:1036E000D42074C0063008F071C0F7CF112339F030 -:1036F000872D8F710E948E2069C01123C9F3872DF9 -:103700008F710E94AF2062C0112329F0872D8F7125 -:103710000E9479205BC00E946F2058C0112351F095 -:10372000172D1F71812F0E948E2063E0812F0E9430 -:10373000A2214CC081E00E94AB21023008F446C0B7 -:1037400082E00E94AB2142C0112331F0002381F2BC -:103750008C2D0E94A6183AC0002389F28C2D0E945D -:103760006E1934C0472D4F706C2DC7010E9496030F -:103770000E94931F2BC0111129C0472D4F7050E09C -:1037800042305105B9F04CF44115510581F04130FA -:103790005105E1F40E94A12819C04330510569F098 -:1037A0004430510599F48C2D0E94F3280FC00E94DB -:1037B0008A280CC00E94BD2809C00E94D02806C0DB -:1037C000472D4F706C2DC7010E946006DD20F9F077 -:1037D0000E949E2180FD1BC0F70112820E94982149 -:1037E0000E948E20C7010E94161C0E9498210F90F3 -:1037F000DF91CF911F910F91FF90EF90DF90CF90CD -:10380000BF90AF909F908F907F900C94AF200F90BF -:10381000DF91CF911F910F91FF90EF90DF90CF90AC -:10382000BF90AF909F908F907F9008950F931F93BC -:10383000CF93DF93EC01888199812B813C81232BED -:10384000B9F09F3F11F48F3F99F0CE010E945F04C1 -:10385000882371F0688179818A810E9494218C018A -:103860000E9449210E941020B801CE010E94CB196C -:10387000DF91CF911F910F9108950E946C220E94B9 -:103880007C220E9441220E9496220E9457260E947A -:10389000A62580E090E00E94911780E090E00C94D3 -:1038A000A7170E945C220C943D1C0E948921292F9D -:1038B00022952F7030E02C3031054CF42A30310540 -:1038C0006CF42250310922303105A8F407C02C30A5 -:1038D000310569F02F30310551F00DC0803F69F09E -:1038E00018F4803E40F409C0843F29F406C093FBDD -:1038F000882780F9089580E0089581E00895CF93A6 -:10390000DF9300D000D01F92CDB7DEB70F900F909D -:103910000F900F900F90DF91CF910895CF93DF9389 -:1039200000D000D000D0CDB7DEB726960FB6F89401 -:10393000DEBF0FBECDBFDF91CF9108951F93CF9310 -:10394000DF93C0919F0216E08091A002C81799F002 -:10395000D0E01C9FF0011D9FF00D1124EF55FD4F8D -:103960004081518162817381848195810E948E1C86 -:103970002196C770E9CFDF91CF911F9108954091B3 -:10398000D1025091D2026091D3027091D402809101 -:10399000D5029091D6020C948E1C8091D60282950D -:1039A0008F7009F054C08091D302882309F44FC06E -:1039B00080919F02A091A0026091D1027091D202E9 -:1039C0004091D4025091D502B6E08A1709F43FC065 -:1039D00090E041155105C1F17F3F11F46F3FA1F116 -:1039E000B89FF001B99FF00D1124EF55FD4F2181D3 -:1039F00072132AC02081621327C02281211124C0A2 -:103A0000238134812417350710F421503109241BF8 -:103A1000350B283C3105C0F42091D6022F7020616F -:103A20002093D60226E0289FF001299FF00D112453 -:103A3000EA55FD4F80818F708061808381ED92E037 -:103A40000E94161C0C949E1C01968770BECF089590 -:103A5000CF92DF92EF92FF920F931F93CF93DF935A -:103A6000CDB7DEB762970FB6F894DEBF0FBECDBFFD -:103A70008C0185E0F801DE011D9601900D928A957A -:103A8000E1F7D8014C9111965C91119712966C91C7 -:103A900012971396CD90DC9014973091D1027091CB -:103AA000D2028091D4029091D502009709F46BC1A3 -:103AB0007F3F19F43F3F09F466C1E090D302EE2046 -:103AC00009F4C0C02091D602C816D90628F0F60124 -:103AD000E81BF90BCF0104C0809590958C0D9D1DBE -:103AE000FF24F394883C910578F0F12C207F09F0B5 -:103AF000C6C07C2DD98AC88A89890E947F1C81ED25 -:103B000092E00E94161CB1C0822F807F09F046C04F -:103B1000751314C0341312C0611110C02F702061CE -:103B20002093D6020E94BF1C81ED92E00E94161CD9 -:103B30008091D602D80115968C932EC0CD2819F10C -:103B40005F3F11F44F3FF9F0F62E61111CC08091D8 -:103B50009F022091A00236E0821709F45AC090E03B -:103B6000389FF001399FF00D1124EF55FD4F718101 -:103B7000571306C07081471303C07281711103C0CF -:103B800001968770E9CFF62E662309F418C180915B -:103B9000D60281608093D602F12C11C1751308C042 -:103BA000341306C0611104C08091D602D801C3C08D -:103BB0004D875E878D859E856A8B0E94551C6A891C -:103BC0008823E1F16623D1F12091D602822F8295DC -:103BD0008F7090E0029774F08091D1029091D202A0 -:103BE00098878F831986DB86CA862C87CE01079635 -:103BF0000E94161C86E0F801A1EDB2E001900D9242 -:103C00008A95E1F70E94CD1C0E94BF1CFF24F3940B -:103C1000D6C04D875E878D859E850E948921292F7C -:103C200022952F7030E0223031050CF0BCC09F701F -:103C300009F0B6C0805E883008F4C1C0C8010E9497 -:103C4000161CE4CFC816D90608F453C0F601E81BC9 -:103C5000F90BCF01883C910508F450C0F12C7C2D64 -:103C6000D98AC88A89890E947F1CE1EDF2E086E04A -:103C7000DF011D928A95E9F70E94BF1CA0C0751351 -:103C800014C0341312C0611110C08091D602F80123 -:103C90008583C8010E94161C86E0E1EDF2E0DF0199 -:103CA0001D928A95E9F7FE2C8AC04D875E878D8527 -:103CB0009E856A8B0E94551C6A89882309F4BECFB1 -:103CC000662309F4BBCF2091D602822F82958F7094 -:103CD00090E002970CF48ECF8091D1029091D202A5 -:103CE0009A8389831B82DD82CC822E83CE0101964A -:103CF0007FCF809590958C0D9D1DACCFF62E6623C1 -:103D000009F49CCF75132EC034132CC02091D60219 -:103D100020FD1FC0822F82958F70D9F0D801159693 -:103D20002C9315978F3049F08F5F982F9295907F45 -:103D3000822F8F70892B15968C93C8010E94161CB8 -:103D400086E0F801A1EDB2E001900D928A95E1F7CD -:103D500093CF86E0F801A1EDB2E001900D928A9533 -:103D6000E1F72DC04D875E878D859E850E94551C8D -:103D7000811140CF8091D60281608093D602C80124 -:103D80000E94161C1CC0662309F458CF4D875E871D -:103D90008D859E850E94551C882309F44FCF2ACF1C -:103DA000811148CF0CC0243031050CF047CF9F70F3 -:103DB00009F440CFF8019581907F09F03BCF8F2D1A -:103DC00062960FB6F894DEBF0FBECDBFDF91CF91E4 -:103DD0001F910F91FF90EF90DF90CF9008951F9368 -:103DE000CF93DF93CDB7DEB72C970FB6F894DEBF35 -:103DF0000FBECDBF4F83588769877A878B879C8793 -:103E0000CE0107960E94281D882369F08F8198852E -:103E10002A853B85232BF1F19F3F09F063C08F3F3B -:103E200009F060C037C086E0FE013796DE011196CA -:103E300001900D928A95E1F76F817885EA85FB857F -:103E4000309741F17F3F11F46F3F21F12091A002A3 -:103E500030E0C90101968770992740919F0250E098 -:103E60008417950709F447C069837A83FD83EC833F -:103E700096E0929FD001939FB00D1124AF55BD4F96 -:103E8000FE01319601900D929A95E1F78093A00280 -:103E90000E949E1C16E080919F029091A0028917BB -:103EA000C1F1189FC00111248F559D4F0E94281DFC -:103EB000882379F1E0919F021E9FF0011124EF55B4 -:103EC000FD4F4081518162817381848195810E947F -:103ED0008E1C80919F0290E00196877099278093B5 -:103EE0009F02D9CF4F81588569857A858B859C85BE -:103EF0000E948E1CCFCF0E94511C1092A0021092E3 -:103F00009F02E1EDF2E086E0DF011D928A95E9F77C -:103F1000C1CF2C960FB6F894DEBF0FBECDBFDF9198 -:103F2000CF911F910895EF92FF920F931F93CF931C -:103F3000DF938C01009709F46CC0F12CEE24E3941C -:103F4000E8012196F8018491843740F4843008F028 -:103F500051C0813081F0823019F15BC0853709F49E -:103F600044C0A8F19CE7980F903708F052C08F77B3 -:103F70000E946E1941C00E5F1F4FFE01C49180E286 -:103F80008C0F883048F4C7708E2D01C0880FCA95F9 -:103F9000EAF70E946F2214C08C2F0E94A6182DC031 -:103FA0000E5F1F4FFE01C49180E28C0F883058F4E1 -:103FB000C7708E2D01C0880FCA95EAF70E9475223E -:103FC0000E9496221AC08C2F0E946E1916C00E5F96 -:103FD0001F4FFE01C491CC2381F08FE99FE0019730 -:103FE000F1F700C00000C150F6CF0E5F1F4FFE0179 -:103FF000F49003C00E94A6188E018F2D882309F427 -:104000009FCFEFE9FFE03197F1F700C0000081504A -:10401000F5CFDF91CF911F910F91FF90EF90089511 -:1040200008956093DB027093DC028093DD0290932D -:10403000DE020C943D1C0F931F930091DB02109144 -:10404000DC022091DD023091DE02DC01CB01802B0D -:10405000912BA22BB32B8093DB029093DC02A093D5 -:10406000DD02B093DE021F910F910C943D1C0F9363 -:104070001F930091DB021091DC022091DD02309150 -:10408000DE02DC01CB0180239123A223B3238093A2 -:10409000DB029093DC02A093DD02B093DE021F915D -:1040A0000F910C943D1C0F931F930091DB02109114 -:1040B000DC022091DD023091DE02DC01CB018027A1 -:1040C0009127A227B3278093DB029093DC02A09371 -:1040D000DD02B093DE021F910F910C943D1C1092F3 -:1040E000D7021092D8021092D9021092DA020C94E0 -:1040F0003D1C41E050E060E070E004C0440F551FFB -:10410000661F771F8A95D2F74093D7025093D80243 -:104110006093D9027093DA020C943D1C41E050E0A8 -:1041200060E070E004C0440F551F661F771F8A953A -:10413000D2F78091D7029091D802A091D902B09184 -:10414000DA02482B592B6A2B7B2B4093D7025093D2 -:10415000D8026093D9027093DA020C943D1C41E0BE -:1041600050E060E070E004C0440F551F661F771FE9 -:104170008A95D2F740955095609570958091D702B9 -:104180009091D802A091D902B091DA024823592324 -:104190006A237B234093D7025093D8026093D902BD -:1041A0007093DA020C943D1C41E050E060E070E056 -:1041B00004C0440F551F661F771F8A95D2F7809160 -:1041C000D7029091D802A091D902B091DA02482783 -:1041D00059276A277B274093D7025093D8026093D0 -:1041E000D9027093DA020C943D1C0F931F93009137 -:1041F000D7021091D8022091D9023091DA02DC0165 -:10420000CB01802B912BA22BB32B8093D7029093C1 -:10421000D802A093D902B093DA021F910F910C94A7 -:104220003D1C0F931F930091D7021091D80220914B -:10423000D9023091DA02DC01CB0180239123A22341 -:10424000B3238093D7029093D802A093D902B0935E -:10425000DA021F910F910C943D1C0F931F93009154 -:10426000D7021091D8022091D9023091DA02DC01F4 -:10427000CB0180279127A227B3278093D702909361 -:10428000D802A093D902B093DA021F910F910C9437 -:104290003D1C0895CF92DF92EF92FF920F931F93F0 -:1042A000CF93DF938C01C090DB02D090DC02E090D2 -:1042B000DD02F090DE028091D7029091D802A091A9 -:1042C000D902B091DA02C82AD92AEA2AFB2ACFE118 -:1042D000D0E0D701C6010C2E04C0B695A7959795DE -:1042E00087950A94D2F780FF06C0B8018C2F0E94F0 -:1042F000E508019721F4219760F780E001C08C2F39 -:10430000DF91CF911F910F91FF90EF90DF90CF90B1 -:104310000895CF93DF93EC010E944A21BE010E94D1 -:10432000E508DF91CF910895CB010E94892108957E -:104330008091DF0285958595859508958091DF02AE -:104340008770089598E0899F90011124262B20936F -:10435000DF020C948E202091DF02809582238093CF -:10436000DF02982F977069F430E0482F552747FDFA -:1043700050952417350729F08595859585950C94DA -:10438000AF2008959091DF02977081E009F480E0FA -:10439000089590911701992321F09091180191119E -:1043A00009C02091190130911A01F90132969FEF4D -:1043B00040E01FC0982F9695969596959F3050F5A2 -:1043C000E0911901F0911A01E90FF11D877021E0C8 -:1043D00030E0A90102C0440F551F8A95E2F7CA01D7 -:1043E0009181892B818308959F3F39F04F5F4E3033 -:1043F00041F051915813F8CF0DC05111F7CF942FC0 -:10440000F5CF9F3F39F0F901E90FF11D97FDFA95BE -:1044100082830895089590911701992321F0909136 -:104420001801911109C02091190130911A01F90167 -:104430003296205F3F4F1FC0982F96959695969580 -:104440009F30F0F4E0911901F0911A01E90FF11D8C -:10445000877021E030E0A90102C0440F551F8A9502 -:10446000E2F7CA018095918189238183089531966D -:10447000E217F30729F090819813F9CF1082F7CF54 -:10448000089581E090E0E0911901F0911A01E80FA0 -:10449000F91F1082019680319105A9F70895909136 -:1044A000F302892B8093F302089580959091F30293 -:1044B00089238093F30208951092F3020895909156 -:1044C000F202892B8093F202089580959091F20276 -:1044D00089238093F20208951092F2020895909138 -:1044E000F102892B8093F102089580959091F10259 -:1044F00089238093F10208951092F1020895809328 -:10450000E00208951092E0020895809119019091BF -:104510001A01FC0131969C01205F3F4F80E0919190 -:1045200091118F5FE217F307D1F70895E091190118 -:10453000F0911A018091F3028083E0911901F091CA -:104540001A0190818091F202892B8083E0911901F8 -:10455000F0911A0190818091F102892B80838091E2 -:10456000E002882361F0E0911901F0911A01908135 -:10457000892B80830E94852281111092E002809114 -:10458000190190911A010C947B1720E0009739F0E3 -:10459000AC0141505109842395232F5FF7CF822F1F -:1045A000089580911503843039F11092F50220E4CA -:1045B00088E190E00FB6F894A895809360000FBE54 -:1045C0002093600080E00E94FD0280E00E947F094D -:1045D00083B7817F846083BF83B7816083BF789412 -:1045E000889583B78E7F83BF88E10FB6F894809358 -:1045F0006000109260000FBE08950895089580E055 -:104600000E94FD020E94FD220E94DA090E94FE2201 -:104610000E945F0A91E0811101C090E0892F089506 -:104620000E94511C80E00E94FD020E9479280E9495 -:104630006F170C947F091F920F920FB60F921124DF -:104640008F939F93AF93BF938091F502811113C015 -:104650008091F6029091F702A091F802B091F902D0 -:104660004196A11DB11D8093F6029093F702A0938D -:10467000F802B093F902BF91AF919F918F910F9083 -:104680000FBE0F901F90189582E084BD93E095BDFA -:104690009AEF97BD80936E0008952FB7F89480919C -:1046A000F6029091F702A091F802B091F9022FBFA3 -:1046B0000895CF92DF92EF92FF920F931F932FB73F -:1046C000F8944091F6025091F7026091F8027091CF -:1046D000F9022FBF6A017B01EE24FF248C0120E048 -:1046E00030E0C016D106E206F30610F4415051093D -:1046F0009A01281B390BC9011F910F91FF90EF9070 -:10470000DF90CF9008951F920F920FB60F92112451 -:104710008F939F93AF93BF938091F6029091F7028E -:10472000A091F802B091F9020196A11DB11D8093EC -:10473000F6029093F702A093F802B093F902BF91AA -:10474000AF919F918F910F900FBE0F901F90189572 -:104750000E946C14F8942FEF87EA91E62150804074 -:104760009040E1F700C0000087E090EBDC0180930F -:10477000200390932103A0932203B09323039CE092 -:1047800088E10FB6F894A895809360000FBE9093CF -:104790006000FFCF0E940924811102C00E94E5231E -:1047A0000E9414248093F4020E941C2480931E0310 -:1047B00087FB882780F9809318010E941824682FAE -:1047C00070E080E090E00C9411206DEE7EEF80E0D0 -:1047D00090E00E94302D60E082E090E00E941E2D6B -:1047E00060E083E090E00E941E2D60E084E090E0B5 -:1047F0000E941E2D60E085E090E00E941E2D60E08A -:1048000086E090E00E941E2D6FEF87E090E00C9410 -:104810001E2D80E090E00E94182D21E08D3E9E4FDD -:1048200009F020E0822F089582E090E00C94102D92 -:1048300083E090E00C94102D84E090E00C94102D17 -:10484000682F84E090E00C941E2D86E090E00C949C -:10485000102D682F86E090E00C941E2D87E090E0EC -:104860000C94102D682F87E090E00C941E2D809101 -:10487000FC0280FF0BC060911E0185E0689FB001C3 -:10488000112475956795759567952BC081FF09C0B3 -:1048900060911E0185E0689FB001112475956795B0 -:1048A00020C082FF07C060911E0185E0689FB001B3 -:1048B000112417C09091FD029923D1F060911D0140 -:1048C000961788F720911E0185E0289F90011124FA -:1048D000929FA001939F500D112470E0CA010E9485 -:1048E000F62C6038710540F46115710539F002C08D -:1048F00065E070E0862F08958FE7089581E00895C0 -:104900008091FC0280FF08C060911C0170E07595E9 -:1049100067957595679521C081FF06C060911C0160 -:1049200070E07595679519C082FF04C060911C0105 -:1049300070E010C09091FD029923C1F060911B01BD -:104940009617A0F780911C01899FC001112470E087 -:104950000E94F62C6038710528F46115710521F06C -:10496000862F08958FE7089581E0089561E070E053 -:10497000F4CF803F21F40E943724819504C0813F09 -:1049800029F40E943724809300030895823F21F484 -:104990000E943724819504C0833F29F40E94372464 -:1049A0008093FF020895893F19F40E94802405C076 -:1049B0008A3F31F40E9480248195809301030895F9 -:1049C0008B3F21F40E948024819504C08C3F29F400 -:1049D0000E948024809302030895843F21F48091F3 -:1049E000FE02816017C0853F21F48091FE02826043 -:1049F00011C0863F21F48091FE0284600BC0873F86 -:104A000021F48091FE02886005C0883F31F48091D6 -:104A1000FE0280618093FE0208958D3F21F4809113 -:104A2000FC0281600BC08E3F21F48091FC02826009 -:104A300005C08F3F29F48091FC0284608093FC02C2 -:104A40000895803F39F48091000387FF6CC0109275 -:104A5000000369C0813F29F4809100031816BCF35C -:104A600062C09091FF02823F29F497FF5CC01092D0 -:104A7000FF0259C0833F19F41916CCF354C0893F83 -:104A800041F48091010318160CF04DC010920103FF -:104A90004AC08A3F29F48091010387FF44C0F6CFC2 -:104AA0008B3F39F48091020387FF3DC010920203CF -:104AB0003AC08C3F29F4809102031816BCF333C02E -:104AC000843F21F48091FE028E7F17C0853F21F440 -:104AD0008091FE028D7F11C0863F21F48091FE02FD -:104AE0008B7F0BC0873F21F48091FE02877F05C03A -:104AF000883F31F48091FE028F7E8093FE0213C0C6 -:104B00008D3F21F48091FC028E7F0BC08E3F21F4FB -:104B10008091FC028D7F05C08F3F29F48091FC02BB -:104B20008B7F8093FC028091FF0281110EC08091E7 -:104B3000000381110AC080910103811106C0809198 -:104B40000203811102C01092FD0208958EEF92E0DF -:104B50000E9486170E944D239093FB028093FA02D5 -:104B600008951F93CF93DF938091FA029091FB02F7 -:104B70000E945923AC019091FD02992321F02091CC -:104B80001F0130E006C0209120018AE0289F90019B -:104B900011244217530708F486C08091FF02C09188 -:104BA0000003D091010310910203811107C0C111CC -:104BB00076C0D11174C0111172C075C09F3F19F039 -:104BC0009F5F9093FD02181624F40E94372480936F -:104BD000FF028091FF0287FF05C00E943724819564 -:104BE0008093FF021C1624F40E9437248093000354 -:104BF0008091000387FF05C00E9437248195809330 -:104C000000036091FF02662339F1C0910003CC23B9 -:104C100019F1772767FD7095872F972F0E94182A23 -:104C200023E333E343E35FE30E94282B0E94E5295B -:104C30006093FF026C2F772767FD7095872F972F62 -:104C40000E94182A23E333E343E35FE30E94282B07 -:104C50000E94E529609300031D1624F40E9480241D -:104C6000809301038091010387FF05C00E94802487 -:104C7000819580930103111624F40E94802480936F -:104C800002038091020387FF05C00E948024819562 -:104C900080930203DF91CF911F910C94A6259F3F33 -:104CA00009F08ECF96CFDF91CF911F910895EEEF4F -:104CB000F2E085E0DF011D928A95E9F71092FD028E -:104CC0001092FC020895833081F128F4813059F06C -:104CD0008230D1F00895853009F449C0B8F18630AA -:104CE00009F456C0089580912001262F30E0280F46 -:104CF000311D2F3F310524F4680F60932001089582 -:104D00008FEF80932001089580911F01262F30E0BE -:104D1000280F311D2F3F310524F4680F60931F01C8 -:104D200008958FEF80931F01089580911E01262F13 -:104D300030E0280F311D2F3F310524F4680F6093B8 -:104D40001E0108958FEF80931E01089580911D012B -:104D5000262F30E0280F311D2F3F310524F4680F36 -:104D600060931D0108958FEF80931D010895809138 -:104D70001C01262F30E0280F311D2F3F310524F470 -:104D8000680F60931C0108958FEF80931C010895B4 -:104D900080911B01262F30E0280F311D2F3F310558 -:104DA00024F4680F60931B0108958FEF80931B011B -:104DB0000895833011F128F4813049F0823091F068 -:104DC0000895853081F120F18630C1F108958091F8 -:104DD0002001681720F4861B80932001089510920B -:104DE0002001089580911F01681720F4861B80938D -:104DF0001F01089510921F01089580911E016817E8 -:104E000020F4861B80931E01089510921E010895C0 -:104E100080911D01681720F4861B80931D01089561 -:104E200010921D01089580911C01681720F4861BC3 -:104E300080931C01089510921C01089580911B011C -:104E4000681720F4861B80931B01089510921B01A4 -:104E500008950F931F93873208F048C08E3108F0F1 -:104E60008DC0803109F477C008F5873009F461C03E -:104E700068F4863009F09DC08091F402817F8E7FB6 -:104E80008093F40281E08093040394C08B3009F492 -:104E900089C08E3009F08DC08091F40282FB2227F8 -:104EA00020F991E0922790FB82F95EC0863109F4E7 -:104EB00079C060F4813109F07CC00E94511C90914E -:104EC000180181E08927809318016CC0893109F4A9 -:104ED00069C08B3109F06DC08091F40281FB2227FB -:104EE00020F991E0922790FB81F93EC0883309F4C4 -:104EF00059C050F4893209F457C0853309F454C0BD -:104F0000873209F451C055C0833409F44DC028F4E8 -:104F10008A3308F44EC0895332C0883409F049C03E -:104F20000E94511C0E948F0A0E9456040E94A823CE -:104F300039C09091F402892F8095817080FB90F99F -:104F400029F0966098609093F40234C0997F977F1F -:104F50009093F40227C08091F40283FB222720F96A -:104F600091E0922790FB83F98093F4029923D1F08A -:104F70008091F40281608093F40214C08D5141E06D -:104F800050E060E070E08A019B0104C0000F111F37 -:104F9000221F331F8A95D2F7C901B8010E94112040 -:104FA0000E94511C81E006C061E070E080E090E06A -:104FB000F5CF80E01F910F91089580E0089580E083 -:104FC0000895CF93C82F80910403813069F018F0C1 -:104FD0008230C9F184C0E0911901F0911A018081F9 -:104FE000823209F07EC007C0E0911901F0911A01E8 -:104FF0008081823261F48C2F0E94DD27811104C0F0 -:105000008C2F0E9429271DC081E090E01AC08C2FB0 -:105010000E94DF27811114C0C43179F048F4CB30ED -:1050200079F0C03109F061C082E08093040308C0C8 -:10503000C93219F0C83321F058C01092040355C08A -:1050400081E0817054C0C93291F120F5C43179F109 -:10505000B0F4C73009F047C08EE18093200182E3AD -:1050600080931F018AE080931E0184E180931D01DB -:1050700088E080931C0188E280931B0134C0CE51EC -:10508000C63088F5EC2FF0E0E854FE4F8081809325 -:10509000030329C0CE34E9F020F4CB3421F56AE0D3 -:1050A00013C0C13579F0C235F1F461E00DC08091D3 -:1050B0000303882319F01092030315C081E0809345 -:1050C000040315C061E006C0809103030E946326BB -:1050D0000AC06AE0809103030E94D92604C010929E -:1050E000040380E004C081E002C080E0AACFCF9139 -:1050F00008950E940924811102C00E94E5230E94A4 -:10510000252480931F0380FF02C0869501C080E0A4 -:105110000C94FD0280911F03982F9695292F30E063 -:10512000233031054CF49F5F990F8170892B81608A -:1051300080931F030E94292480911F0386950C945D -:10514000FD0280911F03982F969591F09158990F29 -:105150008170892B80931F038E7F91E009F490E08A -:1051600080911F0390FB80F980931F030E942924E4 -:1051700080911F0386950C94FD0280911F03982F48 -:10518000909590FB80F980931F030E9429248091C1 -:105190001F0380FF02C0869501C080E00C94FD02D1 -:1051A00090911F03892F86958F5F8F779170843040 -:1051B00028F4880F892B80931F0302C090931F034C -:1051C00080911F038E7F91E009F490E080911F038E -:1051D00090FB80F980931F030E94292480911F0374 -:1051E00086950C94FD0220911F03922F9695892796 -:1051F000982F990F822F8170892B80931F038E7FA8 -:1052000091E009F490E080911F0390FB80F9809376 -:105210001F030E94292480911F0386950C94FD0290 -:1052200080911F03869508955058BB27AA270ED05A -:10523000D1C1C2D130F0C7D120F031F49F3F11F479 -:105240001EF4B7C10EF4E095E7FB9FC1E92FD3D15F -:1052500080F3BA17620773078407950718F071F493 -:105260009EF5EBC10EF4E0950B2EBA2FA02D0B018D -:10527000B90190010C01CA01A0011124FF27591B9B -:1052800099F0593F50F4503E68F11A16F040A22FA1 -:10529000232F342F4427585FF3CF46953795279512 -:1052A000A795F0405395C9F77EF41F16BA0B620B11 -:1052B000730B840BBAF09150A1F0FF0FBB1F661F58 -:1052C000771F881FC2F70EC0BA0F621F731F841F9B -:1052D00048F4879577956795B795F7959E3F08F0C1 -:1052E000B3CF9395880F08F09927EE0F9795879580 -:1052F000089527D108F481E008950CD06BC163D1E3 -:1053000040F05AD130F021F45F3F19F03EC1511105 -:1053100095C14FC170D198F39923C9F35523B1F3C7 -:10532000951B550BBB27AA2762177307840738F014 -:105330009F5F5F4F220F331F441FAA1FA9F333D073 -:105340000E2E3AF0E0E830D091505040E695001C27 -:10535000CAF729D0FE2F27D0660F771F881FBB1FE3 -:10536000261737074807AB07B0E809F0BB0B802DBD -:10537000BF01FF2793585F4F2AF09E3F510568F009 -:1053800004C15CC15F3FECF3983EDCF386957795F2 -:105390006795B795F7959F5FC9F7880F911D96950B -:1053A000879597F90895E1E0660F771F881FBB1F67 -:1053B000621773078407BA0720F0621B730B840B14 -:1053C000BA0BEE1F88F7E095089504D06894B111E8 -:1053D00035C1089518D188F09F5790F0B92F9927BB -:1053E000B751A0F0D1F0660F771F881F991F1AF0F0 -:1053F000BA95C9F712C0B13081F01FD1B1E008955C -:105400001CC1672F782F8827B85F39F0B93FCCF3DC -:10541000869577956795B395D9F73EF490958095E5 -:10542000709561957F4F8F4F9F4F0895E89409C005 -:1054300097FB3EF490958095709561957F4F8F4FC7 -:105440009F4F9923A9F0F92F96E9BB279395F695DD -:10545000879577956795B795F111F8CFFAF4BB0F5B -:1054600011F460FF1BC06F5F7F4F8F4F9F4F16C0BF -:10547000882311F096E911C0772321F09EE8872F49 -:10548000762F05C0662371F096E8862F70E060E005 -:105490002AF09A95660F771F881FDAF7880F96957E -:1054A000879597F9089588D018F011F08CD038F4CA -:1054B00080C0C4C0E92F9FD0B0F35523C9F3E7FBE8 -:1054C0006217730784079507A8F199F3E92FFF275F -:1054D00088232AF03197660F771F881FDAF7952FF8 -:1054E0005527442332F091505040220F331F441F60 -:1054F000D2F7BB27E91BF50B621B730B840BB109B9 -:10550000C1F222F4620F731F841FB11D31972AF07C -:10551000660F771F881FBB1FEFCF915050405AF086 -:1055200041F0882332F0660F771F881F915050405A -:10553000C1F7939530C08695779567959F5FD9F7AA -:10554000F8CF990F0008550FAA0BE0E8FEEF1616EA -:105550001706E807F907C0F012161306E407F50767 -:1055600098F0621B730B840B950B39F40A2661F0DB -:10557000232B242B252B21F408950A2609F4A1407E -:10558000A6958FEF811D811D089597F99F6780E88B -:1055900070E060E008959F3F31F0915020F48795CE -:1055A00077956795B795880F911D9695879597F98B -:1055B00008959FEF80EC089500240A9416161706AC -:1055C00018060906089500240A94121613061406F4 -:1055D00005060895092E0394000C11F4882352F057 -:1055E000BB0F40F4BF2B11F460FF04C06F5F7F4F0F -:1055F0008F4F9F4F089557FD9058440F551F59F0F6 -:105600005F3F71F04795880F97FB991F61F09F3FAF -:1056100079F087950895121613061406551FF2CFD8 -:105620004695F1DF08C0161617061806991FF1CF28 -:1056300086957105610508940895E894BB2766274F -:105640007727CB0197F908957CDF08F48FEF089551 -:105650000BD0C0CFB1DF28F0B6DF18F0952309F0EA -:1056600094CFA7CF1124EACFC6DFA0F3959FD1F343 -:10567000950F50E0551F629FF001729FBB27F00D00 -:10568000B11D639FAA27F00DB11DAA1F649F662755 -:10569000B00DA11D661F829F2227B00DA11D621FA4 -:1056A000739FB00DA11D621F839FA00D611D221F5E -:1056B000749F3327A00D611D231F849F600D211D42 -:1056C000822F762F6A2F11249F5750408AF0E1F0E5 -:1056D00088234AF0EE0FFF1FBB1F661F771F881F2E -:1056E00091505040A9F79E3F510570F04ECFA6CF84 -:1056F0005F3FECF3983EDCF3869577956795B79519 -:10570000F795E7959F5FC1F7FE2B880F911D969542 -:10571000879597F90895FA01EE0FFF1F309621053E -:10572000310599F16115710561F48038BFE39B077C -:1057300049F168949038810561F08038BFEF9B078C -:1057400041F0992342F5FF3FE1053105210511F1B3 -:10575000E8940894E795D901AA2329F4AB2FBE2F2A -:10576000F85FD0F310C0FF5F70F4A695E0F7F7394B -:1057700050F019F0FF3A38F49F779F930CD00F90B8 -:1057800007FC905808953EF014CF60E070E080E888 -:105790009FE308954FE79F775F934F933F932F9336 -:1057A0009ED02F913F914F915F9152DF05C019F428 -:1057B0000EF0EBCE42CFFDCE26DFC8F39638C0F711 -:1057C00007F80F92E8942BE33AEA48EB5FE74EDFE5 -:1057D0000F920F920F924DB75EB70F92C0D0EAE0D2 -:1057E000F1E016D04F915F91EF91FF91E595EE1F9B -:1057F000FF1F49F0FE57E0684427EE0F441FFA955B -:10580000E1F74195550B32D00F9007FE26C0089561 -:10581000DF93CF931F930F93FF92EF92DF927B0161 -:105820008C01689405C0DA2EEF011EDFFE01E894BA -:10583000A5912591359145915591AEF3EF0106DD86 -:10584000FE019701A801DA9479F7DF90EF90FF90BD -:105850000F911F91CF91DF9108959B01AC0160E002 -:1058600070E080E89FE349CD90CE95CECCDEE8F3A2 -:105870009923D9F3940F511DBBF39150504094F0EC -:1058800059F0882332F0660F771F881F91505040DF -:10589000C1F79E3F510544F7880F911D9695879556 -:1058A00097F908955F3FACF0983E9CF0BB27869532 -:1058B00077956795B79508F4B1609395C1F7BB0FDD -:1058C00058F711F460FFE8CF6F5F7F4F8F4F9F4F06 -:1058D000E3CFB4CE0EF05FCE6CCE689456CE93DE9E -:1058E000C8F39923D1F3C6F3DF93CF931F930F939C -:1058F000FF92C92FDD2788232AF02197660F771F93 -:10590000881FDAF720E030E040E85FEB9FE388395A -:1059100020F0803E30F021968F7787DCE2E3F1E0E3 -:1059200003C083DCEFE5F1E073DF8B01BE01EC0126 -:10593000FB2E6F5771097595771F880B990B78DDD2 -:1059400028E132E741E35FE38FDEAF2D9801AE013E -:10595000FF900F911F91CF91DF9178DC3BCEFA0140 -:10596000DC01AA0FBB1F9B01AC01BF5728F4222703 -:105970003327442750781FC0B75188F4AB2F002439 -:10598000469537952795011CA395D2F3002069F021 -:10599000220F331F441FB395DAF30DD045CC61308D -:1059A0007105A0E88A07B94630F49B01AC0166276F -:1059B000772788279078309621F02083318342839F -:1059C00053830895AA1BBB1B51E107C0AA1FBB1F2D -:1059D000A617B70710F0A61BB70B881F991F5A957B -:1059E000A9F780959095BC01CD01089597FB072EEE -:1059F00016F4009407D077FD09D00E94E22C07FC32 -:105A000005D03EF4909581959F4F089570956195CE -:105A10007F4F0895EE0FFF1F0590F491E02D09943C -:105A2000F999FECF92BD81BDF89A992780B5089566 -:105A3000A8E1B0E042E050E00C94382D262FF9990F -:105A4000FECF92BD81BDF89A019700B4021639F0DD -:105A50001FBA20BD0FB6F894FA9AF99A0FBE0895AE -:105A60000196272F0E941F2D0C941E2DDC01CB01C7 -:105A7000FC01F999FECF06C0F2BDE1BDF89A31965E -:105A800000B40D9241505040B8F70895F894FFCFFC -:105A90009D00640007000CFF0000003F64731001CC -:105AA00011DE10AA1076100101E1022808140A3252 -:105AB0001E0002040507090B0C0E10111315171810 -:105AC0001A1C1D1F2123242628292B2D2F30323468 -:105AD0003537393B1F0F03764F5F6F7F4969437935 -:105AE000095953633149803F5D8B803FF8BF803F48 -:105AF000CAE1803F73ED803FCAE1803FF8BF803F3D -:105B00005D8B803F3149803F0000803FF16D7F3FDA -:105B100075EA7E3F4C827E3F833F7E3F84287E3FF6 -:105B2000833F7E3F4C827E3F75EA7E3FF16D7F3F33 -:105B30000000803F3F4D36390505B8048204490412 -:105B4000DC03F5030E04270401020304050607081D -:025B500009004A -:00000001FF diff --git a/keyboard/planck/keymaps/cbbrowne/config_user.h b/keyboard/planck/keymaps/cbbrowne/config_user.h new file mode 100644 index 0000000000..5e7c2622d5 --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/config_user.h @@ -0,0 +1,6 @@ +/* cbbrowne user configuration */ + +#define randadd 53 +#define randmul 181 +#define randmod 167 + diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index f46ca85de9..942efe4a29 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -2,6 +2,7 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif +#include "config_user.h" /* Each layer is given a name to aid in readability, which is then used in the keymap matrix below. The underscores do not denote @@ -19,26 +20,25 @@ /* Things I did not like about the default mapping - - I find control too hard to get to. I think I'll want it on a - left finger. Gonna need to lose something to do that... - - Almost certainly, KC_LCTL should be on [2][1] - - having dash on [lower-j] is a bit nonintuitive, but may be OK + - I found control too hard to get to. I use it more than Tab, so + switched it there. + - Having dash on [lower-j] is a bit nonintuitive, but may be OK - I'll bet I should switch ESC/TAB - I'm suspicious that I want to shift M(0) from [4][1] to [4][2], and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. - - I think I wanna swap ' and ENTER + - I needed to swap ' and ENTER - All of the above are done :-) - - I'm keeping Colemak and Dvorak around for reference, and added - Workman just for fun. They're useless to me, though. + - Dropped out support for Dvorak and friends. They aren't + improvements to me */ /* Some interesting things implemented - - There is a macro that writes out "cbbrowne" just because I could + - There is a macro that writes out "cbbrowne" to show that I could - There is a (somewhat cruddy) linear congruential random number generator. - I would like to be seeding it with clock info to make it look @@ -50,16 +50,15 @@ of the random number generator - in both, note the use of register_code()/unregister_code() to indicate the desired key + - I do indeed want a sweet number pad! */ /* Other things to do... - Need to think about what zsh and readline actions I use lots - - Wanna figure out macros, so I can put in a "cbbrowne" macro - Ought to ensure that Control-Alt-Delete is convenient enough - How about Alt-F1 thru Alt-F8? - What's the keystroke to get from X to console these days? - - I do indeed want a sweet number pad! - A layer for doing console switching would not be a bad idea */ @@ -112,9 +111,6 @@ const uint16_t PROGMEM fn_actions[] = { /* This bit of logic seeds a wee linear congruential random number generator */ /* lots of prime numbers everywhere... */ static uint16_t random_value = 157; -#define randadd 53 -#define randmul 181 -#define randmod 167 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { diff --git a/keyboard/planck/keymaps/cbbrowne/readme.md b/keyboard/planck/keymaps/cbbrowne/readme.md new file mode 100644 index 0000000000..edb33f483d --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/readme.md @@ -0,0 +1,63 @@ +cbbrowne custom keyboard +============================== + +Due to cbbrowne@acm.org +Christopher Browne + +This was originally based on the default keyboard map, but I have been +doing sundry experimentation: + +1. Experiments +---------------------------------------- + + * To figure things out about the toolset + * I'm an Emacs guy, so will be needing a fair bit of tuning + * It made sense to mess around some with keyboard maps. + - I tried added Workman alongside Dvorak and Colemak + - Boy, oh boy, these don't help!!! + - I have done 30 years of learning of Emacs key mappings, and + these alternative keyboards massively mess me up + - I added a keypad, originally based on keymaps/numpad.c, but + mighty substantially revised, as that one seems to be rotated 90 + degrees from usual conventions for number pads + * The keypad layer also includes some sample "hacks" of cool things, + all using actions attached in using the function action_get_macro() + - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example + of a key generating a bunch of keystrokes. The keystroke is + sufficiently inconvenient that it isn't terribly practical for me + to use it, but hey, it shows how others might use this facility + in a more useful context. + - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random + - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random + +2. Some code structure ideas +--------------------------------------------------- + + Each layer is given a name to aid in readability, which is then + used in the keymap matrix below. The underscores do not denote + 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 could also skip them entirely and just use numbers, though that + means needing to manage the numbers. + + It is preferable to keep the symbols short so that a line worth of + key mappings fits compactly onto a line of code. It might be an + interesting idea to express the maps rotated 90%, so that you + only need to fit 4 symbols onto each line, rather than 12. + + I used enums to manage layer IDs and macro IDs so that I don't need + to care (beyond "start at 0", and arguably that's not needed) about + their values. + +3. Things I did not like about the default mapping +--------------------------------------------------------- + + * I found control too hard to get to. I use it more than Tab, so + switched it there. + * Having dash on [lower-j] is a bit nonintuitive, but may be OK + * I switched ESC/TAB/M(0) around + * I'm suspicious that I want to shift M(0) from [4][1] to [4][2], + and shift ESC off the first column so KC_LCTL and KC_LALT can + be on the first column. + * I needed to swap ' and ENTER -- cgit v1.2.3 From 2fe06e4ef53f380eee6e91ece44f6a385ec32c2c Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 13 Jun 2016 17:22:45 -0400 Subject: Simplify submitting my fave cbbrowne keystroke by using SEND_STRING() --- keyboard/planck/keymaps/cbbrowne/config_user.h | 1 + keyboard/planck/keymaps/cbbrowne/keymap.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboard/planck/keymaps/cbbrowne/config_user.h b/keyboard/planck/keymaps/cbbrowne/config_user.h index 5e7c2622d5..de46ec6aaa 100644 --- a/keyboard/planck/keymaps/cbbrowne/config_user.h +++ b/keyboard/planck/keymaps/cbbrowne/config_user.h @@ -4,3 +4,4 @@ #define randmul 181 #define randmod 167 + diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 942efe4a29..041f4e608e 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -3,6 +3,7 @@ #include "backlight.h" #endif #include "config_user.h" +#include "quantum.h" /* Each layer is given a name to aid in readability, which is then used in the keymap matrix below. The underscores do not denote @@ -131,7 +132,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_USERNAME: if (record->event.pressed) { - return MACRO( I(1), T(C), T(B), T(B), T(R), T(O), T(W), T(N), T(E)); + SEND_STRING("cbbrowne"); + return MACRO_NONE ; } else { return MACRO_NONE ; } -- cgit v1.2.3 From de2f95bc6f14893bc6fb293bd8eaa76f6f619c2e Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 13 Jun 2016 17:33:26 -0400 Subject: Local change, not apropos to have in this repo --- cbbrowne.cbbrowne | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 cbbrowne.cbbrowne diff --git a/cbbrowne.cbbrowne b/cbbrowne.cbbrowne deleted file mode 100644 index 622e4eedf8..0000000000 --- a/cbbrowne.cbbrowne +++ /dev/null @@ -1,25 +0,0 @@ -* * * * * /home/cbbrowne/bin/cookie > /dev/null 2> /dev/null -2 2-5 * * * /home/cbbrowne/GitConfig/Scripts/cfcleanup > /dev/null 2> /dev/null -#2,22,42 * * * * /usr/bin/offlineimap -u Noninteractive.Quiet > /dev/null 2> /dev/null -# Edit this file to introduce tasks to be run by cron. -# -# Each task to run has to be defined through a single line -# indicating with different fields when the task will be run -# and what command to run for the task -# -# To define the time you can provide concrete values for -# minute (m), hour (h), day of month (dom), month (mon), -# and day of week (dow) or use '*' in these fields (for 'any').# -# Notice that tasks will be started based on the cron's system -# daemon's notion of time and timezones. -# -# Output of the crontab jobs (including errors) is sent through -# email to the user the crontab file belongs to (unless redirected). -# -# For example, you can run a backup of all your user accounts -# at 5 a.m every week with: -# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ -# -# For more information see the manual pages of crontab(5) and cron(8) -# -# m h dom mon dow command -- cgit v1.2.3 From c5a034f98462b46ca9d694022c9f3f6a550d25ee Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 13 Jun 2016 17:59:26 -0400 Subject: Simplify logic; no need to return so much --- keyboard/planck/keymaps/cbbrowne/keymap.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 041f4e608e..482cf63e11 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -133,9 +133,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case M_USERNAME: if (record->event.pressed) { SEND_STRING("cbbrowne"); - return MACRO_NONE ; - } else { - return MACRO_NONE ; } break; case M_RANDDIGIT: -- cgit v1.2.3 From 211ebe8734065ebdabe49fe18367fad020a7cd8d Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 11:19:51 -0400 Subject: Add in a version key --- keyboard/planck/keymaps/cbbrowne/keymap.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 482cf63e11..70b15406b7 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -74,7 +74,8 @@ enum macro_id { M_LED = 0, M_USERNAME, M_RANDDIGIT, - M_RANDLETTER + M_RANDLETTER, + M_VERSION }; /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -99,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KP] = { /* Key Pad */ - {KC_ESC, M(M_USERNAME), KC_F9, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} @@ -135,6 +136,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) SEND_STRING("cbbrowne"); } break; + case M_VERSION: + if (record->event.pressed) { + SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION); + } + break; case M_RANDDIGIT: /* Generate, based on random number generator, a keystroke for a numeric digit chosen at random */ -- cgit v1.2.3 From 4e1bc2d298defff58316cac9de00f0495b02c742 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 11:25:08 -0400 Subject: Add docs --- keyboard/planck/keymaps/cbbrowne/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboard/planck/keymaps/cbbrowne/readme.md b/keyboard/planck/keymaps/cbbrowne/readme.md index edb33f483d..c676dd2c1c 100644 --- a/keyboard/planck/keymaps/cbbrowne/readme.md +++ b/keyboard/planck/keymaps/cbbrowne/readme.md @@ -28,7 +28,8 @@ doing sundry experimentation: to use it, but hey, it shows how others might use this facility in a more useful context. - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random - - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random + - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random + - Key [1][3] aka "e" spits out the keymap version number 2. Some code structure ideas --------------------------------------------------- -- cgit v1.2.3 From bb0e0c7eba5fd37df5b66cd77fc8b0a382ef48b1 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 11:36:27 -0400 Subject: Split build date into a separate DEFINE --- Makefile | 6 +++--- keyboard/planck/keymaps/cbbrowne/keymap.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e93528600d..2c35e0f108 100644 --- a/Makefile +++ b/Makefile @@ -114,7 +114,7 @@ include $(TMK_PATH)/protocol/lufa.mk include $(TMK_PATH)/common.mk include $(TMK_PATH)/rules.mk -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d") - +GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null) +BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" -OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" +OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\" diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 70b15406b7..7fe391ec5d 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -138,7 +138,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_VERSION: if (record->event.pressed) { - SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION); + SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION "@" QMK_BUILDDATE); } break; case M_RANDDIGIT: -- cgit v1.2.3 From 90d057635545109d110f38b94d852ecd29321fe1 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:29:27 -0400 Subject: Ensure there is a value even if not working within a git repo --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2c35e0f108..47fc785a6e 100644 --- a/Makefile +++ b/Makefile @@ -114,7 +114,7 @@ include $(TMK_PATH)/protocol/lufa.mk include $(TMK_PATH)/common.mk include $(TMK_PATH)/rules.mk -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null) +GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\" -- cgit v1.2.3 From 6e0270b52feab831dbbf4d2269ab039d8cb29fc2 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:34:47 -0400 Subject: Should not include the compiled code in the repo --- keyboard/planck/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/planck/.gitignore b/keyboard/planck/.gitignore index 6e92f57d46..fc71164f75 100644 --- a/keyboard/planck/.gitignore +++ b/keyboard/planck/.gitignore @@ -1 +1,2 @@ tags +compiled.hex -- cgit v1.2.3 From 6d485b0ecdf9de7792a6bbfeb17b08ebb57a1c53 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:35:38 -0400 Subject: compiled.hex files should not be included in the repo; they represent generated compiled code --- keyboard/planck/keymaps/alexey/compiled.hex | 1444 ----------------- .../planck/keymaps/angerthosenear/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/austin/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/bone2planck/compiled.hex | 1450 ----------------- keyboard/planck/keymaps/brandon/compiled.hex | 1456 ----------------- keyboard/planck/keymaps/charlie/compiled.hex | 1445 ----------------- keyboard/planck/keymaps/daniel/compiled.hex | 1448 ----------------- keyboard/planck/keymaps/david/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/default/compiled.hex | 1611 ------------------- keyboard/planck/keymaps/dzobert/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/experimental/compiled.hex | 1645 -------------------- keyboard/planck/keymaps/gabriel/compiled.hex | 1450 ----------------- keyboard/planck/keymaps/jacob/compiled.hex | 1444 ----------------- keyboard/planck/keymaps/joe/compiled.hex | 1479 ------------------ keyboard/planck/keymaps/kyle/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/leo/compiled.hex | 1454 ----------------- keyboard/planck/keymaps/lucas/compiled.hex | 1471 ----------------- keyboard/planck/keymaps/lukas/compiled.hex | 1446 ----------------- keyboard/planck/keymaps/max/compiled.hex | 1449 ----------------- keyboard/planck/keymaps/mollat/compiled.hex | 1495 ------------------ keyboard/planck/keymaps/nico/compiled.hex | 1456 ----------------- keyboard/planck/keymaps/pete/compiled.hex | 1143 -------------- keyboard/planck/keymaps/pvc/compiled.hex | 1635 ------------------- keyboard/planck/keymaps/tak3over/compiled.hex | 1456 ----------------- keyboard/planck/keymaps/unicode/compiled.hex | 1185 -------------- keyboard/planck/keymaps/yang/compiled.hex | 1318 ---------------- 26 files changed, 37625 deletions(-) delete mode 100644 keyboard/planck/keymaps/alexey/compiled.hex delete mode 100644 keyboard/planck/keymaps/angerthosenear/compiled.hex delete mode 100644 keyboard/planck/keymaps/austin/compiled.hex delete mode 100644 keyboard/planck/keymaps/bone2planck/compiled.hex delete mode 100644 keyboard/planck/keymaps/brandon/compiled.hex delete mode 100644 keyboard/planck/keymaps/charlie/compiled.hex delete mode 100644 keyboard/planck/keymaps/daniel/compiled.hex delete mode 100644 keyboard/planck/keymaps/david/compiled.hex delete mode 100644 keyboard/planck/keymaps/default/compiled.hex delete mode 100644 keyboard/planck/keymaps/dzobert/compiled.hex delete mode 100644 keyboard/planck/keymaps/experimental/compiled.hex delete mode 100644 keyboard/planck/keymaps/gabriel/compiled.hex delete mode 100644 keyboard/planck/keymaps/jacob/compiled.hex delete mode 100644 keyboard/planck/keymaps/joe/compiled.hex delete mode 100644 keyboard/planck/keymaps/kyle/compiled.hex delete mode 100644 keyboard/planck/keymaps/leo/compiled.hex delete mode 100644 keyboard/planck/keymaps/lucas/compiled.hex delete mode 100644 keyboard/planck/keymaps/lukas/compiled.hex delete mode 100644 keyboard/planck/keymaps/max/compiled.hex delete mode 100644 keyboard/planck/keymaps/mollat/compiled.hex delete mode 100644 keyboard/planck/keymaps/nico/compiled.hex delete mode 100644 keyboard/planck/keymaps/pete/compiled.hex delete mode 100644 keyboard/planck/keymaps/pvc/compiled.hex delete mode 100644 keyboard/planck/keymaps/tak3over/compiled.hex delete mode 100644 keyboard/planck/keymaps/unicode/compiled.hex delete mode 100644 keyboard/planck/keymaps/yang/compiled.hex diff --git a/keyboard/planck/keymaps/alexey/compiled.hex b/keyboard/planck/keymaps/alexey/compiled.hex deleted file mode 100644 index deddcea06a..0000000000 --- a/keyboard/planck/keymaps/alexey/compiled.hex +++ /dev/null @@ -1,1444 +0,0 @@ -:100000000C9461020C94A5020C94A5020C94A50218 -:100010000C94A5020C94A5020C94A5020C94A502C4 -:100020000C94A5020C94A5020C9452140C94241563 -:100030000C9486220C94A5020C94A5020C94A502A3 -:100040000C94A5020C9407030C94A5020C94A50231 -:100050000C94A5020C94EE220C94A5020C94A5021B -:100060000C94A5020C94A5020C94A5020C94A50274 -:100070000C94A5020C94A5020C94A5020C94A50264 -:100080000C94C70A0C94A5020C94A5020C94A5022A -:100090000C94A5020C94A5020C94A5020C94A50244 -:1000A0000C94A5020C94A5020C94A5029115B3150D -:1000B000A116B315A116F8151B16A11670168316F6 -:1000C0006D196D199C199C19DB19FB19511B511BDA -:1000D000061A511BB61AB61A1D1B261B511B4B1BA9 -:1000E000C31AC31AC31AC31AC31AC31AC31AC31A28 -:1000F000C31AC31AC31AC31AC31AC31AC31AC31A18 -:10010000D31AE11AE81AEF1AF91A07634236B79BB5 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000002B001400ED -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A00290004001600070009000A0075 -:1001F0000B000D000E000F003300015201001D0026 -:100200001B00060019000500110010003600370021 -:10021000380001000030E300E200E000E1002C00C3 -:100220002C0002522D00340028000100010049007A -:100230004A0052004D004B000100400041004200C6 -:100240004300010001004C00500051004F004E00DF -:1002500001003D003E003F0044000100010001009C -:10026000010001000100010001003A003B003C00D8 -:100270004500010001000100010001000100010032 -:100280000100AA00A900AB00AE00010001001E029F -:100290001F022F02300231024B00240025002600ED -:1002A000250201000100200221022602270235005A -:1002B0004E002100220023002E0201000100220234 -:1002C00023022F003000350224021E001F002000F0 -:1002D000310001000100010049000100010001009E -:1002E00001000100010027002E0001002803540036 -:1002F00068006500200050006C0061006E00630023 -:100300006B0020004B006500790062006F00610007 -:100310007200640000002C034F007200740068003B -:100320006F006C0069006E006500610072002000C3 -:100330004B006500790062006F006100720064008C -:10034000730000000403090409026D00040100A009 -:10035000FA09040000010301010009211101000153 -:10036000223F000705810308000A09040100010378 -:10037000010200092111010001224D00070582033D -:1003800008000A090402000103000000092111010C -:1003900000012236000705830308000A0904030050 -:1003A00001030000000921110100012239000705A5 -:1003B00084031000011201100100000008EDFE602E -:1003C0006001000102000105010906A101050719EC -:1003D000E029E71500250195087501810205081936 -:1003E0000129059505750191029501750391010596 -:1003F000071900297715002501957875018102C03C -:1004000005010980A101850216010026B7001A0125 -:10041000002AB700751095018100C0050C0901A1E3 -:10042000018503160100269C021A01002A9C027510 -:100430001095018100C005010902A1010901A10077 -:100440000509190129051500250195057501810288 -:100450009501750381010501093009311581257F59 -:1004600095027508810609381581257F9501750863 -:100470008106050C0A38021581257F9501750881D2 -:1004800006C0C005010906A101050719E029E71505 -:100490000025019508750181029501750881010506 -:1004A00008190129059505750191029501750391BA -:1004B000010507190029FF150025FF95067508811C -:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF -:1004D00003FE24C080911E0390911F03A09120036E -:1004E000B09121038730904BA740B04BB9F41092E4 -:1004F0001E0310921F03109220031092210314BEBA -:1005000084B7877F84BF88E10FB6F894809360003A -:10051000109260000FBEE0E0F8E3099511E0A0E062 -:10052000B1E0E6E6F9E502C005900D92A03CB10706 -:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 -:10054000E1F70E9498110C94B12C0C9400000895CE -:10055000089581E0089508950C94A8020C94A902CE -:100560000C94AB020E947B2823E030E0281B310969 -:10057000220F2093C4010895282F2F988091800086 -:10058000211108C0877F8093800010928D00109207 -:100590008C001BC0886080938000233019F48FEF9B -:1005A0009FEF0FC083E090E0821B9109880F991F95 -:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 -:1005C000CA0190938D0080938C000C94B2020E941B -:1005D000B20284E08093C3011092C0010895279A6B -:1005E0002F988FEF9FEF90938700809386008AE08B -:1005F0008093800089E1809381000E94E4270C941D -:10060000E7020E94EF026E9A769A0C94A7021F925C -:100610000F920FB60F9211242F933F938F939F93B6 -:10062000EF93FF93E091C101F091C201CF010196D8 -:100630009093C2018093C1010090C30102C0F6955E -:10064000E7950A94E2F7EF738091C001823019F4C4 -:10065000E03251F404C0813039F4EF3329F4809151 -:100660006F008D7F80936F00F0E0E457FE4FE491C0 -:1006700021E031E0E29FC001E39F900D1124009042 -:10068000C40102C0969587950A94E2F790938D0075 -:1006900080938C00FF91EF919F918F913F912F91CB -:1006A0000F900FBE0F901F90189561110DC0FC01A7 -:1006B0008281882331F085EE0E9411180E943B2828 -:1006C00003C085EE0E94D91880E090E0089581E093 -:1006D00008950C94670308950C940103809115020A -:1006E000882309F448C08091D1019091D2010097EC -:1006F00079F40E94B8229093D2018093D101809125 -:10070000D30190E0009771F48091D40190E00AC089 -:100710000E94C4222091000130910101281739075D -:1007200040F329C00197880F991F880F991FFC017A -:10073000EB52FE4F60817181828193810E942D0A6C -:10074000E091D30184E0E89FF0011124EB52FE4FC9 -:1007500060817181828193814FE050E00E94E50DBC -:100760008091D30190E001966091D40170E00E94E5 -:10077000612C8093D3010C94AC02109217020C945C -:10078000FA090895089581E0809317020C94C2033A -:10079000089508958F929F92AF92BF92EF92FF9229 -:1007A0000F931F93CF93DF93CDB7DEB7A3970FB609 -:1007B000F894DEBF0FBECDBF7C01FC01008111812A -:1007C000C8010E94B520B8010E94CC058C01B70178 -:1007D0000E946903882309F4CCC10032F0E51F07A9 -:1007E00041F4F7018281882309F458C00E94490E20 -:1007F000C0C10132F0E51F0741F4F701828188236F -:1008000009F44CC00E94520EB4C10232F0E51F0739 -:1008100051F4F7018281882309F440C00E94450EFB -:100820008111F0CFE3CF0332F0E51F0739F4F70170 -:100830008281882399F10E94C3039BC10432F0E5B1 -:100840001F0739F4F7018281882341F10E94BD031B -:1008500090C10532F0E51F0749F4F7018281882332 -:10086000E9F0809117028111F1CFE5CF0632F0E572 -:100870001F0739F4F7018281882381F00E94590E05 -:100880000AC00732F0E51F0749F4F7018281882387 -:1008900029F00E94640E0E94C9036BC18091170267 -:1008A000811105C0F70182818111CFC018C1003EBE -:1008B000110579F4F7018281882309F44DC00E9463 -:1008C000FA0981E080931602109215021092D40169 -:1008D00050C1023E110559F4F70182818823E1F1EC -:1008E0000E94FA09109216021092150242C1033EAC -:1008F000110591F4F7018281882371F10E94FA09B0 -:100900001092160281E0809315021092D30110928A -:10091000D2011092D1012DC10235110559F4F70110 -:100920008281882309F425C1809100019091010101 -:100930000A970DC00135110579F4F70182818823EA -:1009400009F417C180910001909101010A969093DA -:100950000101809300010DC14091040183E2EFE1A8 -:10096000F1E0DE01119601900D928A95E1F7F70111 -:10097000808121E030E02C0F3D1F280F311DC9017F -:100980002091020130910301FC01E20FF31F60810D -:10099000772767FD7095640F711D882777FD809517 -:1009A000982F0E94832920E030E040E451E40E9427 -:1009B000E8284B015C01F701218184E090E0821B73 -:1009C0009109BC01882777FD8095982F0E94832983 -:1009D0009B01AC01C501B4010E9480289B01AC01C0 -:1009E00060E070E080E090E40E94F62A20E030E0D1 -:1009F0004CED50E40E94932A4B015C01F701828187 -:100A00008823D1F04FE050E0C501B4010E94E50D0C -:100A1000809116028823A1F08091D40124E0829F66 -:100A2000F0011124EB52FE4F80829182A282B382A8 -:100A30008F5F8093D40104C0C501B4010E942D0AC8 -:100A40000F3F110508F02ECF94C08091D001811185 -:100A50001FC0043130E5130709F051C00E946B0339 -:100A600081E08093D0010E94B8229093CF018093BF -:100A7000CE011092C7011092C9011092C8011092C4 -:100A8000CB011092CA011092CD011092CC0171C01D -:100A90008091CE019091CF010E94C422883C9105A3 -:100AA00070F48091C701E82FF0E0EE0FFF1FE853CC -:100AB000FE4F118300838F5F8093C7015AC00438B3 -:100AC00080E5180721F00538104501F13AC0F7011B -:100AD0008281882341F01092C50182E01EC0043853 -:100AE00030E5130759F58091C501811106C086E2F2 -:100AF0000E94111886E20E94D91882E01CC00438B6 -:100B0000F0E51F0741F305381045D9F4F70182815C -:100B1000882331F01092C60180E20E94281929C072 -:100B20008091C601811106C087E20E94111887E2F8 -:100B30000E94D91880E20E942F191BC00538104569 -:100B400029F381E08093C5018093C601C701A39674 -:100B50000FB6F894DEBF0FBECDBFDF91CF911F91CE -:100B60000F91FF90EF90BF90AF909F908F900C945B -:100B7000AE0280E0A3960FB6F894DEBF0FBECDBFE5 -:100B8000DF91CF911F910F91FF90EF90BF90AF90A9 -:100B90009F908F90089508959CE0799FF001112413 -:100BA00090E3899FE00DF11D1124E60FF11DEE0F7A -:100BB000FF1FE453FE4F859194910895880F991F6C -:100BC000FC01E45BFF4F859194910895880F991F74 -:100BD000FC01E453FE4F8591949108950F931F9368 -:100BE000CF93DF93EC01811521E39207A0F5C115A6 -:100BF00080E3D80708F0D7C0C83ED105D8F4C03E7E -:100C0000D10508F007C2C83AD10578F4C53AD10534 -:100C100008F06AC0C130D10509F463C008F4F7C117 -:100C2000C430D10508F0F6C1F2C1CB3BD10508F4C0 -:100C300066C0EDC1C11590E2D90708F0AFC0C1157B -:100C400021E0D20708F0E6C1C03FD10508F4DFC1BA -:100C50008E0110651FC2C03880E5D80700F5C03787 -:100C600090E5D90708F0A3C0C11520E5D20709F423 -:100C7000ACC050F4CE01905480319F4008F0C7C101 -:100C8000DF708E01106A06C2C13080E5D80709F412 -:100C9000AEC0C43190E5D90708F4AFC0B8C1C338BD -:100CA00020E5D20709F48EC050F4C13890E5D90789 -:100CB00009F482C008F083C000E011EDEBC1C0313F -:100CC00081E5D80708F4A3C1C11597E5D90708F451 -:100CD00036C1CE0190578115904108F098C1DF7060 -:100CE00093C101E010E0D6C1C53AD10509F494C121 -:100CF000C63AD10509F093C102E810E4CBC1C83A65 -:100D0000D10509F48FC1C93AD10509F48EC1CA3A97 -:100D1000D10509F48DC1CB3AD10509F48CC1CC3A87 -:100D2000D10509F48BC1CD3AD10509F48AC1C03B84 -:100D3000D10509F489C1CE3AD10509F488C1CF3A69 -:100D4000D10509F487C1C13BD10509F486C1C23B75 -:100D5000D10509F485C1C33BD10509F484C1C43B65 -:100D6000D10509F483C1C53BD10509F482C1C63B55 -:100D7000D10509F481C1C73BD10509F480C1C83B45 -:100D8000D10509F47FC1C93BD10509F47EC1CA3B35 -:100D9000D10509F47DC100E014E47CC1CE019F704F -:100DA0000E94E60578C1DD278E01106C73C1CF70FB -:100DB000DD278E01146D6EC100E010ED6BC100E007 -:100DC00012ED68C100E013ED65C10E94BC1B0E94DA -:100DD000FA090E94C1038FEF94E32CE08150904008 -:100DE0002040E1F700C000000E94132353C180910E -:100DF000F20281608093F2024DC10E94742381113E -:100E000002C00E9450230E94872390E090931D030C -:100E100080931C03C23080E5D80721F480911C0325 -:100E2000816086C0C43090E5D90721F480911C030D -:100E300082607EC0C63020E5D20721F480911C0379 -:100E4000846076C0C83080E5D80719F480911C030F -:100E500027C0CA3090E5D90721F480911C03806136 -:100E600067C0CC3020E5D20721F480911C0380625A -:100E70005FC0CE3080E5D80721F480911C038064E8 -:100E800057C0C03190E5D90721F480911C038068D8 -:100E90004FC0C23120E5D20729F480911C03846041 -:100EA000886046C0C33080E5D80721F480911C03D8 -:100EB0008E7F3EC0C53090E5D90721F480911C0398 -:100EC0008D7F36C0C73020E5D20721F480911C0306 -:100ED0008B7F2EC0C93080E5D80719F480911C03A0 -:100EE00026C0CB3090E5D90721F480911C038F7E7A -:100EF0001FC0CD3020E5D20721F480911C038F7DE7 -:100F000017C0CF3080E5D80721F480911C038F7B78 -:100F10000FC0C13190E5D90721F480911C038F7770 -:100F200007C0C331D04531F480911C038B7F877F8C -:100F300080931C0380911C030E948B23ABC08D2FD8 -:100F400099278F70992781309105D9F49E012370DC -:100F5000332702C0880F991F2A95E2F79C688E01FB -:100F600044E0000F111F4A95E1F700271370802B12 -:100F7000912B53E0CC0FDD1F5A95E1F7C076DD27AA -:100F80002FC08230910531F4DC2FCC278E01016F08 -:100F9000106A80C08330910569F4CE01837099276F -:100FA00001E010E002C0000F111F8A95E2F7C801AE -:100FB0009C680FC084309105B9F4CE0183709927E5 -:100FC00001E010E002C0000F111F8A95E2F7C8018E -:100FD0009A6823E0CC0FDD1F2A95E1F7C07ED77019 -:100FE0008C010C2B1D2B56C08530910531F4DC2F64 -:100FF000CC278E01046F106A4DC0069709F04AC0D5 -:10100000CF71DD27DC2FCC278E01106243C000E0BA -:1010100010E040C08E013EC001E810E43BC003E890 -:1010200010E438C002EE14E435C009EE14E432C016 -:101030000AEE14E42FC005EB14E42CC006EB14E414 -:1010400029C007EB14E426C00CEC14E423C00DEC1B -:1010500014E420C003E815E41DC00AE815E41AC032 -:1010600002E915E417C004E915E414C001E216E42E -:1010700011C003E216E40EC004E216E40BC005E260 -:1010800016E408C006E216E405C007E216E402C052 -:101090000AE216E4C801DF91CF911F910F910895E4 -:1010A0009CE0799FF001112490E3899FE00DF11DF0 -:1010B0001124E60FF11DEE0FFF1FE453FE4F859143 -:1010C0009491803E9105E0F4803C910558F5813380 -:1010D000910509F46FC048F48932910509F463C0A1 -:1010E0008A32910509F46DC072C089339105E9F027 -:1010F00082389105D1F08533910509F44DC067C060 -:10110000833E910581F138F4803E9105B9F0823E2D -:101110009105D9F05CC0863E910561F1873E91054D -:10112000A1F155C00E94DE05089520911C0320FD09 -:1011300002C021FF4CC080EE90E049C080911C03AA -:1011400080FFF9CF89E390E042C080911C0382FFC9 -:101150000EC080911C0384FF03C080E090E037C084 -:1011600083EE90E034C080911C0382FFF2CF82EEC8 -:1011700090E02DC080911C0383FF0BC080911C0365 -:1011800084FDEBCF87EE90E022C080911C0383FFAB -:10119000F5CF86EE90E01BC080911C0385FF07C051 -:1011A00089E290E014C080911C0385FFF9CF85E3AC -:1011B00090E00DC080911C0386FF07C08AE290E09A -:1011C00006C080911C0386FFF9CF81E390E00E9466 -:1011D000EE0508950C94B002E82FF0E0E25BFE4FBC -:1011E0008081E82FEF70F0E082958F7021E030E091 -:1011F000A90102C0440F551F8A95E2F740A3089544 -:101200000F931F93CF93DF9385B7806885BF85B712 -:10121000806885BFC3E0D0E001E010E0FE01E25B42 -:10122000FE4F8081E82FEF70F0E021A182958F7052 -:10123000A80102C0440F551F8A95E2F7CA01822B0C -:1012400081A38C2F0E94EC08219740F78BE090E05F -:1012500061E070E0FC01EE5BFE4F2081E22FEF7059 -:10126000F0E042A122952F70DB0102C0AA0FBB1F44 -:101270002A95E2F79D01242B22A3019758F7DF91CD -:10128000CF911F910F910C946C03EF92FF920F93EB -:101290001F93CF93DF9300E212E0C3E0EE24E394C8 -:1012A000F12CD5E08C2F0E94EC088BE090E040E020 -:1012B00050E0FC01EE5BFE4F6081E62FEF70F0E046 -:1012C00020A130E062956F7002C0359527956A9530 -:1012D000E2F720FD09C09701082E02C0220F331F3C -:1012E0000A94E2F7422B532B019718F7F8019291D9 -:1012F00082918F018417950721F051834083D09309 -:1013000005018C2F0E94EC08C15060F68091050108 -:1013100087FD2CC08150809305018F3F39F08FE904 -:101320009FE00197F1F700C0000020C080911E02ED -:1013300090911F02909327028093260280911C02B5 -:1013400090911D02909325028093240280911A02AD -:1013500090911B02909323028093220280911802A5 -:101360009091190290932102809320020E946E03B3 -:1013700081E0DF91CF911F910F91FF90EF90089541 -:10138000E82FF0E0EE0FFF1FE05EFD4F80819181BE -:10139000089508950F931F93CF9308E212E0C0E0E1 -:1013A000F801929182918F010E943022C80FF2E0E1 -:1013B00000321F07A9F78C2FCF911F910F9108952D -:1013C0000E947423811102C00E9450230E9499231D -:1013D000809307033E9A809171008D7F8093710006 -:1013E00082E0809390008AE18093910081E0809375 -:1013F0002A02089580912A02811102C00E94E00908 -:1014000010927A0210927902809171008D7F809300 -:101410007100809190008F738093900010923C0235 -:1014200010923B0210927302109274021092750295 -:10143000109276021092720210927102E1E5F2E0CF -:10144000A1E4B2E011921192119211921D921D929B -:1014500082E0E137F807B1F70895CF92DF92EF927B -:10146000FF920F931F93CF93DF9320913B02222390 -:1014700009F484C06B017C0180912A02811102C0B1 -:101480000E94E00901E712E0C7E0D0E0A701960161 -:10149000F80192918291729162918F010E94E428E9 -:1014A000811131C0FE01EE0FFF1FEE0FFF1FEF5A3B -:1014B000FD4F1082118212821382DE01AA0FBB1F20 -:1014C000AF5BBD4F11961C921E92C730D105E9F05B -:1014D000219644815581668177814083518362835F -:1014E0007383148215821682178212968D919C91B5 -:1014F000139711969C938E9313961C921E9212979B -:1015000034961296E2CF219708F680917902909155 -:101510007A02019797FD05C090937A028093790231 -:1015200004C010927A02109279028091790290910F -:101530007A0220917702309178022817390724F037 -:101540001092780210927702892BC1F48091710079 -:101550008D7F80937100809190008F7380939000B5 -:101560001092730210927402109275021092760219 -:10157000109272021092710210923B02DF91CF9191 -:101580001F910F91FF90EF90DF90CF9008951F92E1 -:101590000F920FB60F9211244F925F926F927F922B -:1015A0008F929F92AF92BF92CF92DF92EF92FF9273 -:1015B0002F933F934F935F936F937F938F939F935B -:1015C000AF93BF93CF93DF93EF93FF9380913B0251 -:1015D000882309F49BC1C0917902D0917A021C162C -:1015E0001D060CF093C140902B0250902C0260908D -:1015F0002D0270902E0220E030E0A901C301B2015B -:101600000E948F2A18160CF065C0C130D10509F46C -:1016100052C08091770290917802BE010E94612CA5 -:101620007C01909378028093770280903D029090A5 -:101630003E02A0903F02B090400220E030E040E83F -:101640005FE3C501B4010E94802860933D0270935E -:101650003E0280933F0290934002F701EE0FFF1F7E -:10166000EE0FFF1FEF5AFD4FA301920160817181C0 -:10167000828193810E94E82820E030E040E05EE330 -:101680000E94932A9B01AC01C501B4010E948F2ADC -:1016900018168CF4C7010196BE010E94612C90932C -:1016A00078028093770210923D0210923E021092CF -:1016B0003F0210924002E0917702F0917802EE0F23 -:1016C000FF1FEE0FFF1FEF5AFD4F60817181828176 -:1016D0009381D0C0C0907302D0907402E0907502E4 -:1016E000F090760220E030E0A901C701B6010E9427 -:1016F000E4282197882309F4A2C0FE01EE0FFF1F02 -:10170000EE0FFF1FEF5AFD4F80809180A280B380C3 -:10171000A5019401C701B6010E94E42887FF31C0EA -:10172000A501940160E070E08CED93EC0E94E82844 -:1017300020E030E040E451E40E94E82820E030E07E -:1017400040E05FE30E94932A9B01AC0160E070E0FF -:1017500080E090E40E94F62A9B01AC01C501B4012F -:101760000E94932A9B01AC01C701B6010E94E428A4 -:1017700087FF07C0A701960160E070E08CED93E45D -:1017800039C0A5019401C701B6010E948F2A18161D -:101790000CF055C0A501940160E070E08CED93E47D -:1017A0000E94E82820E030E040E451E40E94E8286C -:1017B00020E030E040E05FE30E94932A9B01AC010F -:1017C00060E070E080E090E40E94F62A9B01AC01AA -:1017D000C501B4010E94932A9B01AC01C701B60167 -:1017E0000E948F2A18165CF5A701960160E070E050 -:1017F0008CED93EC0E94E82820E030E040E451E4D6 -:101800000E94E82820E030E040E05FE30E94932A55 -:101810009B01AC0160E070E080E090E40E94F62A59 -:101820009B01AC01C701B6010E94932A6093730229 -:1018300070937402809375029093760213C0FE0138 -:10184000EE0FFF1FEE0FFF1FEF5AFD4F80819181BA -:10185000A281B3818093730290937402A093750266 -:10186000B093760260917302709174028091750258 -:101870009091760220912802309129022F3F4FEF5C -:10188000340731F02F5F3F4F309329022093280215 -:101890000E946F0E6B017C0120E034E244EF51E4C2 -:1018A0000E94E42887FF08C086EFC82E88E2D82E61 -:1018B00084EFE82E81E4F82E20E030E040E051E4AF -:1018C000C701B6010E94932A9B01AC0160E074E25B -:1018D00084E79BE40E94E8286B017C010E94552963 -:1018E0007093970060939600209106013091070154 -:1018F0004091080150910901C701B6010E94932A45 -:101900000E945529709399006093980080913C0241 -:10191000882309F433C1C0903702D0903802E09098 -:101920003902F0903A0220E030E0A901C701B60187 -:101930000E948F2A1816D4F58091280290912902CE -:101940008F3F2FEF920729F0019690932902809301 -:101950002802C701B6010E946F0E20E030E040E08F -:1019600051E40E94932A9B01AC0160E074E284E799 -:101970009BE40E94E8286B017C010E94552970932A -:1019800097006093960020910601309107014091E5 -:10199000080150910901C701B6010E94932A0E94D3 -:1019A0005529709399006093980008C01092970091 -:1019B0001092960010929900109298006091310256 -:1019C000709132026F5F7F4F7093320260933102E9 -:1019D000209196003091970080E090E0232BF1F069 -:1019E000C0919600D09197000E9481296B017C01E3 -:1019F000BE0180E090E00E9481299B01AC016091D2 -:101A000033027091340280913502909136020E9427 -:101A1000E82820E03FEF4FE757E410C00E948129FB -:101A20006B017C0120E030EE4FEF54E46091330213 -:101A30007091340280913502909136020E94932A6F -:101A40009B01AC01C701B6010E948F2A87FD96C099 -:101A500080912F028F5F80932F0290E020910303EB -:101A60003091040382179307A0F080910E0388231E -:101A700019F010922F020DC0809171008D7F80931C -:101A80007100809190008F738093900010923C02BF -:101A90007DC080913002C0912F02811128C0C0907A -:101AA0000803D0900903E0900A03F0900B0320E0B4 -:101AB00030E0A901C701B6010E948F2A1816BCF4B4 -:101AC00081E0809330021092370210923802109217 -:101AD000390210923A02C0923302D0923402E0925C -:101AE0003502F0923602C150C0932F0243C01092CB -:101AF00030021092290210922802E0910503F09121 -:101B0000060348E0C49FE00DF11D112480819181FE -:101B1000A281B3818093370290933802A093390257 -:101B2000B0933A0220E030E040E85EE364817581E2 -:101B3000868197810E94932A6B017C0180910A0122 -:101B4000682F70E080E090E00E94812920E030E082 -:101B500048EC52E40E94E8289B01AC01C701B601A1 -:101B60000E94932A6093330270933402809335026B -:101B70009093360210923202109231028091070344 -:101B800080FD04C010923C0210923B02FF91EF9145 -:101B9000DF91CF91BF91AF919F918F917F916F9185 -:101BA0005F914F913F912F91FF90EF90DF90CF90F9 -:101BB000BF90AF909F908F907F906F905F904F906D -:101BC0000F900FBE0F901F901895CF92DF92EF925B -:101BD000FF92CF93DF936B017C01EA0180912A028F -:101BE000811102C00E94E0098091070380FF46C076 -:101BF0008091790290917A0208970CF03FC0809111 -:101C000071008D7F8093710080913C0281110E9450 -:101C1000FA0981E080933B02109229021092280277 -:101C200020E030E0A901C701B6010E948F2A1816F2 -:101C3000DCF48091790290917A02FC01EE0FFF1F93 -:101C4000EE0FFF1FEF5AFD4FC082D182E282F38276 -:101C5000FC01EE0FFF1FEF5BFD4FD183C0830196A8 -:101C600090937A02809379028091710082608093D0 -:101C7000710080919000806880939000DF91CF91F7 -:101C8000FF90EF90DF90CF900895809107038170CF -:101C90000895809107038160809307030E949D232C -:101CA0000C94C803809107038E7F809307030C94E4 -:101CB0009D2380917B0290E0019666E070E00E9497 -:101CC000612C80937B02089580917B0290E00197C4 -:101CD00066E070E00E94612C80937B0208958F92F1 -:101CE0009F92AF92BF92CF92DF92EF92FF920F93AB -:101CF0001F93CF93DF936B017C01C0912802D09199 -:101D00002902BE0180E090E00E9481294B015C0124 -:101D1000A701960160E070E08CE594E40E94E82859 -:101D20009B01AC01C501B4010E94932A0E94552970 -:101D300020917B02233009F473C028F4222351F050 -:101D40002130E9F02CC1243009F4A0C0253009F479 -:101D5000E0C025C180E090E0A0E0BFE380930601F1 -:101D600090930701A0930801B093090110922B02F0 -:101D700010922C0210922D0210922E0210C110927D -:101D80002B0210922C0210922D0210922E0264311E -:101D9000710540F46A30710560F520E030E040E8FC -:101DA0005EE32BC0693C710508F0AAC080E090E0BA -:101DB0000E94812920E030E040EA51E40E947F281F -:101DC00020E030E044E353E40E94E8289B01AC01AA -:101DD0000E94932A20E030E040E05EE30E94932AD4 -:101DE0009B01AC0160E070E080E09EE30E947F28F0 -:101DF00044C020E030E040E05FE3C701B6010E944C -:101E0000932A6B017C0180E090E0A0E0BEE3809328 -:101E1000060190930701A0930801B0930901BFC088 -:101E200010922B0210922C0210922D0210922E0270 -:101E30004AE0469F9001479F300D1124C90168EB8D -:101E40007BE00E944D2CBC016C5D754077FF03C0A8 -:101E5000719561957109882777FD8095982F0E946B -:101E600083292EE333EC4EE259E30E94932A20E0CB -:101E700030E040EC5EE30E9480286093060170939E -:101E80000701809308019093090189C010922B02E9 -:101E900010922C0210922D0210922E02CE0183700D -:101EA0009927892BE1F0BE016170772780E090E0EF -:101EB0000E94812920E030E040E05EE30E94932A06 -:101EC00020E030E040E45FE30E9480286093060158 -:101ED0007093070180930801909309010CC080E082 -:101EE00090E0A0E0BFE38093060190930701A093E8 -:101EF0000801B0930901C770DD27CD2B09F04FC051 -:101F00001092060110920701109208011092090127 -:101F100046C010922B0210922C0210922D021092A9 -:101F20002E0200E010E020E03FE300930601109352 -:101F3000070120930801309309016739710578F191 -:101F400080E090E00E94812920E030E047E153E406 -:101F50000E947F2820E030E04AE754E40E94E8280D -:101F600020E030E048E452E40E94932A20E030E090 -:101F700040EA51E40E94C5290E945029660F771F4C -:101F8000660F771FFB01EE5AFE4F2081318142819F -:101F90005381C701B6010E94932A6B017C01C701DE -:101FA000B601DF91CF911F910F91FF90EF90DF90DD -:101FB000CF90BF90AF909F908F90089580918C02AA -:101FC0000895CF93DF9300D01F92CDB7DEB79C0169 -:101FD00080911303843019F593E099833B832A831E -:101FE0009093E9008FEF9091E800815095FD06C035 -:101FF00095ED9A95F1F700008111F5CF8091E800F9 -:1020000085FF0DC040E050E063E070E0CE01019636 -:102010000E9442128091E8008E778093E8000F9032 -:102020000F900F90DF91CF910895CF93DF9300D061 -:102030001F92CDB7DEB720911303243021F522E0A3 -:1020400029839B838A8383E08093E9008FEF9091BB -:10205000E800815095FD06C095ED9A95F1F70000D6 -:102060008111F5CF8091E80085FF0DC040E050E080 -:1020700063E070E0CE0101960E9442128091E80078 -:102080008E778093E8000F900F900F90DF91CF91A3 -:102090000895209113032430F1F422E02093E90005 -:1020A0002FEF3091E800215035FD06C035ED3A950F -:1020B000F1F700002111F5CF2091E80025FF0BC0BA -:1020C00040E050E065E070E00E9442128091E8003C -:1020D0008E778093E8000895CF93DF93EC01909181 -:1020E0001303943009F046C0809115018823D9F07C -:1020F000809116018823B9F09093E9008FEF9091B9 -:10210000E800815095FD06C095E19A95F1F7000031 -:102110008111F5CF8091E80085FF2CC040E050E0B0 -:1021200060E170E017C081E08093E9008FEF90914B -:10213000E800815095FD06C095ED9A95F1F70000F5 -:102140008111F5CF8091E80085FF14C040E050E098 -:1021500068E070E0CE010E9442128091E8008E7724 -:102160008093E80080E1FE01ACE7B2E001900D92BF -:102170008A95E1F7DF91CF91089580911203811143 -:1021800009C00E94D7130E9434148091E200846039 -:102190008093E2000895109212030895089508951F -:1021A0000C947B2242E061EC81E00E94511342E0FA -:1021B00061EC82E00E94511342E061EC83E00E94F6 -:1021C000511342E161EC84E00C94511380911503AA -:1021D000833009F455C030F4813071F0823009F455 -:1021E0008EC008958A3009F47AC08B3009F460C03B -:1021F000893009F09CC020C080911403813A09F015 -:1022000096C08091E800877F8093E8008091180352 -:1022100090911903892B21F460E18CE792E003C0CF -:1022200060E080E090E070E00E948D128091E80014 -:102230008B778093E800089580911403813209F030 -:1022400076C08091180390911903009719F00397B5 -:1022500009F06DC08091E800877F8093E80080914D -:10226000E80082FD05C0809113038111F8CF5FC0A3 -:102270008091F10080938C028091E8008B7753C0AD -:1022800080911403813A09F052C080911803909113 -:102290001903892B09F04BC08091E800877F809358 -:1022A000E8008091E80080FFFCCF8091150136C0E6 -:1022B000809114038132D9F580911803909119030C -:1022C000892BA9F58091E800877F8093E8000E9420 -:1022D000861380911603809315010C94BC1B80918A -:1022E0001403813221F58091E800877F8093E80014 -:1022F0000E9486138091170380938D020895809128 -:102300001403813AA1F48091E800877F8093E8006C -:102310008091E80080FFFCCF80918D028093F100D6 -:102320008091E8008E778093E8000C9486130895DE -:1023300084B7877F84BF88E10FB6F89480936000EC -:10234000109260000FBE90E080E80FB6F894809382 -:102350006100909361000FBE0E9429170E94D7135D -:102360000E9434148091E20084608093E2007894AB -:102370000E94BA160E942B178BE091E00E94D5169E -:1023800080911303853069F40E943C2280911103EF -:102390008823B1F30E946A22882391F30E942C12B1 -:1023A000EFCF0E943317ECCF292F3327233031058D -:1023B000C9F064F42130310581F02230310509F093 -:1023C00043C08DE690E028E433E042C0213231057D -:1023D000F1F02232310541F137C082E190E025EB86 -:1023E00033E036C099278130910541F08230910564 -:1023F00041F0892B49F5E4E4F3E005C0E6E1F3E0C0 -:1024000002C0ECEEF2E0849190E09F0121C06430C4 -:10241000D8F4E62FF0E0EE0FFF1FE255FE4F2081CB -:10242000318189E090E014C0643070F470E0FB0109 -:10243000EE0FFF1FEA55FE4F20813181FB01EE5563 -:10244000FE4F808190E004C080E090E020E030E02A -:10245000FA0131832083089580E189BD82E189BD3D -:1024600009B400FEFDCF8091D8008F7D8093D80005 -:102470008091E00082608093E0008091E00081FD27 -:10248000FCCF0895CF92DF92EF92FF920F931F93AC -:10249000CF93DF93EC018B016A010E94A513811198 -:1024A00033C0C114D10439F0F60180819181081B39 -:1024B000190BC80FD91FE12CF12C0115110519F1C9 -:1024C0008091E80085FD16C08091E8008E778093AA -:1024D000E800C114D10449F0F60180819181E80E31 -:1024E000F91EF182E08285E00FC00E94A5138823C7 -:1024F00021F30AC089918093F10001501109FFEF87 -:10250000EF1AFF0ADACF80E0DF91CF911F910F9190 -:10251000FF90EF90DF90CF90089520911A033091B3 -:102520001B032617370748F06115710539F4209110 -:10253000E8002E772093E80001C0B90140E0611562 -:102540007105A9F120911303222309F443C025301A -:1025500009F442C02091E80023FD40C02091E8002A -:1025600022FD32C02091E80020FFE9CF4091F30026 -:102570002091F20030E0342BFC01CF016115710590 -:1025800059F02830310540F481918093F100615079 -:1025900071092F5F3F4FF1CF41E02830310509F03D -:1025A00040E02091E8002E772093E800C8CF411149 -:1025B000C9CF0AC080911303882361F0853061F090 -:1025C0008091E80083FD0AC08091E80082FFF2CF8D -:1025D00080E0089582E0089583E0089581E0089501 -:1025E00020911A0330911B032617370748F0611515 -:1025F000710539F42091E8002E772093E80001C09E -:10260000B901FC0120E06115710591F1809113037E -:10261000882309F440C0853009F43FC08091E80068 -:1026200083FD3DC08091E80082FD2FC08091E800CD -:1026300080FFE9CF2091F3008091F20090E0922B8F -:102640006115710559F08830910540F4249120936B -:10265000F1003196615071090196F2CF21E008979F -:1026600009F020E08091E8008E778093E800CBCFDE -:102670002111CCCF0AC080911303882361F08530EB -:1026800061F08091E80083FD0AC08091E80082FF3C -:10269000F2CF80E0089582E0089583E0089581E01C -:1026A0000895982F973058F59093E900981739F0CE -:1026B0007091EC002091ED005091F00003C0242FA8 -:1026C000762F50E021FF19C03091EB003E7F309310 -:1026D000EB003091ED003D7F3093ED003091EB0049 -:1026E00031603093EB007093EC002093ED00509339 -:1026F000F0002091EE0027FF07C09F5FD3CF8F70BF -:102700008093E90081E0089580E0089580911403AA -:1027100087FF11C08091E80082FD05C080911303FE -:102720008111F8CF11C08091E8008B770BC08091A8 -:102730001303882349F08091E80080FFF8CF80914F -:10274000E8008E778093E80008952091E4003091AE -:10275000E50095E64091EC00842F817040FF22C097 -:102760008091E80080FD1CC080911303882391F0C4 -:10277000853091F08091EB0085FD10C04091E40020 -:102780005091E5004217530729F39A01915011F730 -:1027900084E0089582E0089583E0089581E008953B -:1027A00080E008954091E80042FFDECF08950E9446 -:1027B00045140E944D14E0EEF0E08081816080833A -:1027C000E8EDF0E080818F77808319BCA7EDB0E061 -:1027D0008C918E7F8C9380818F7E808310921203E8 -:1027E00008950F931F93CF93DF930E9445140E9487 -:1027F0004D14C8EDD0E088818F7788838881806808 -:10280000888388818F7D888319BC1092130310926E -:102810000F03109211031092100300EE10E0F80164 -:1028200080818B7F808388818160888342E060E043 -:1028300080E00E945113E1EEF0E080818E7F808382 -:10284000E2EEF0E080818160808380818860808317 -:10285000F80180818E7F8083888180618883DF9109 -:10286000CF911F910F910895E8EDF0E080818F7E68 -:102870008083E7EDF0E080818160808384E082BF27 -:1028800081E0809312030C94F113E8EDF0E0808175 -:102890008E7F80831092E20008951092DA001092E9 -:1028A000E10008951F920F920FB60F9211242F93FB -:1028B0003F934F935F936F937F938F939F93AF93C8 -:1028C000BF93EF93FF938091E10082FF0BC0809153 -:1028D000E20082FF07C08091E1008B7F8093E100DE -:1028E0000E94B9168091DA0080FF1FC08091D80045 -:1028F00080FF1BC08091DA008E7F8093DA00809188 -:10290000D90080FF0DC080E189BD82E189BD09B495 -:1029100000FEFDCF81E0809313030E94BD1005C02F -:1029200019BC109213030E94CB108091E10080FF2C -:1029300019C08091E20080FF15C08091E2008E7F77 -:102940008093E2008091E20080618093E2008091B8 -:10295000D80080628093D80019BC85E0809313036F -:102960000E94CF108091E10084FF30C08091E2008E -:1029700084FF2CC080E189BD82E189BD09B400FEDD -:10298000FDCF8091D8008F7D8093D8008091E100A9 -:102990008F7E8093E1008091E2008F7E8093E20041 -:1029A0008091E20081608093E20080910F03882390 -:1029B00011F084E007C08091E30087FD02C081E050 -:1029C00001C083E0809313030E94D0108091E10046 -:1029D00083FF29C08091E20083FF25C08091E10040 -:1029E000877F8093E10082E08093130310920F03AE -:1029F0008091E1008E7F8093E1008091E2008E7FE4 -:102A00008093E2008091E20080618093E20042E0E6 -:102A100060E080E00E9451138091F0008860809314 -:102A2000F0000E94CE10FF91EF91BF91AF919F9166 -:102A30008F917F916F915F914F913F912F910F9067 -:102A40000FBE0F901F9018951F920F920FB60F9206 -:102A500011242F933F934F935F936F937F938F93A3 -:102A60009F93AF93BF93CF93DF93EF93FF93C09167 -:102A7000E900CF708091EC00D82FD17080FDD0E8B4 -:102A80001092E9008091F000877F8093F0007894A5 -:102A90000E9468151092E9008091F0008860809390 -:102AA000F000CD2BCF70C093E900FF91EF91DF9143 -:102AB000CF91BF91AF919F918F917F916F915F91D6 -:102AC0004F913F912F910F900FBE0F901F9018952F -:102AD0001F93CF93DF93CDB7DEB7AA970FB6F894C5 -:102AE000DEBF0FBECDBFE4E1F3E088E08E0F909132 -:102AF000F10091938E13FBCF0E94E6108091E800C5 -:102B000083FF1FC18091140390911503492F50E05A -:102B10004A30510508F015C1FA01EA5AFF4F0C94EA -:102B2000752C803881F0823809F00BC18091180330 -:102B30008F708093E9008091EB0085FB882780F9F6 -:102B40001092E90006C08091100390911103911139 -:102B500082609091E800977F9093E8008093F10065 -:102B60001092F100C8C0282F2D7F09F0EAC08823F9 -:102B700019F0823061F0E5C080911603813009F0D0 -:102B8000E0C0933009F080E0809311032BC0809166 -:102B90001603811127C0809118038F7009F4D1C0EA -:102BA0008093E9002091EB0020FF1CC0933021F4BA -:102BB0008091EB00806214C09091EB009061909343 -:102BC000EB0021E030E0A90102C0440F551F8A95B7 -:102BD000E2F74093EA001092EA008091EB008860EF -:102BE0008093EB001092E9008091E800877F86C017 -:102BF0008111A7C0109116031F778091E3008078A0 -:102C0000812B8093E3008091E800877F8093E80028 -:102C10000E9486138091E80080FFFCCF8091E30042 -:102C200080688093E300111102C082E001C083E05C -:102C30008093130386C08058823008F082C0809150 -:102C40001603909117038C3D53E0950779F583E0C7 -:102C50008A838AE289834FB7F894DE01139620E0D5 -:102C60003EE051E2E32FF0E050935700E49120FF63 -:102C700003C0E295EF703F5FEF708E2F90E0EA3077 -:102C800010F0C79601C0C0968D939D932F5F24319D -:102C900049F74FBF8091E800877F8093E8006AE2A0 -:102CA00070E0CE0101960E948D1214C0AE014F5FFC -:102CB0005F4F609118030E94D411BC01009709F482 -:102CC00040C09091E800977F9093E80089819A81B5 -:102CD0000E94F0128091E8008B778093E80031C069 -:102CE000803879F58091E800877F8093E8008091B3 -:102CF0000F038093F1008091E8008E778093E800C5 -:102D00000E9486131EC081111CC090911603923040 -:102D1000C0F48091E800877F8093E80090930F03D0 -:102D20000E94861380910F03811106C08091E300F9 -:102D300087FD02C081E001C084E0809313030E94FC -:102D4000D2108091E80083FF0AC08091E800877F5D -:102D50008093E8008091EB0080628093EB00AA965C -:102D60000FB6F894DEBF0FBECDBFDF91CF911F919C -:102D700008950895CF93809113038823A1F0C09103 -:102D8000E900CF709091EC00892F817090FD80E870 -:102D9000C82B1092E9008091E80083FD0E9468151D -:102DA000CF70C093E900CF910895909393028093E0 -:102DB00092020895E0919202F0919302309721F0EF -:102DC0000190F081E02D099480E00895E091920255 -:102DD000F0919302309721F00280F381E02D099465 -:102DE0000895E0919202F0919302309721F00480CF -:102DF000F581E02D0994089520919002309191027F -:102E00008217930771F09093910280939002E09162 -:102E10009202F0919302309721F00680F781E02D25 -:102E20000994089520918E0230918F0282179307A2 -:102E300071F090938F0280938E02E0919202F09154 -:102E40009302309721F00084F185E02D09940895D4 -:102E500008950C9428170E94AF220E9400090E9436 -:102E600035230C94E4275F926F927F928F929F920A -:102E7000AF92BF92CF92DF92EF92FF920F931F9388 -:102E8000CF93DF9300D000D01F92CDB7DEB70E9462 -:102E900045099DE9C92E92E0D92E03E010E0AA244D -:102EA000A394B12C502E802F0E94C0094C01F60132 -:102EB000729062906F016826792661147104A1F402 -:102EC0000150110978F78FEF89838A831B820E9452 -:102ED000B8228160782F9D838C8349815A816B81D0 -:102EE0008D810E94E31738C08091F20281FD0E941B -:102EF000C9092BE030E07501022E02C0EE0CFF1C68 -:102F00000A94E2F7C70186219721892B09F12983C9 -:102F10005A828E209F2091E0892809F490E09B83BB -:102F20000E94B8228160782F9D838C8349815A81C9 -:102F30006B818D810E94E317000F111FF801EB5682 -:102F4000FD4F80819181E826F926F182E08204C05C -:102F50002150310980F6B4CF0E941C2510919402B3 -:102F60000E94DA161817D1F00E94DA1680939402A4 -:102F70000F900F900F900F900F90DF91CF911F91B6 -:102F80000F91FF90EF90DF90CF90BF90AF909F9008 -:102F90008F907F906F905F900C94EA080F900F9045 -:102FA0000F900F900F90DF91CF911F910F91FF9095 -:102FB000EF90DF90CF90BF90AF909F908F907F90D9 -:102FC0006F905F900895CF93DF93CDB7DEB72B97C7 -:102FD0000FB6F894DEBF0FBECDBF4F835887698709 -:102FE0007A878B87DE01119686E0FD0111928A9522 -:102FF000E9F785E0FE01379601900D928A95E1F799 -:1030000049815A816B817C818D819E810E945A1EEB -:103010002B960FB6F894DEBF0FBECDBFDF91CF91D8 -:103020000895CF93882309F4C2C0C82F823859F479 -:103030000E94DA1681FDBBC089E30E9434210E9400 -:10304000012289E30CC0833879F40E94DA1680FDEE -:10305000AEC083E50E9434210E94012283E50E94D4 -:103060007621CF910C940122843859F40E94DA160B -:1030700082FD9DC087E40E9434210E94012287E4E2 -:10308000EECF8CEF8C0F813A48F48C2F0E944C27A6 -:1030900081118DC08C2F0E943421E3CF80E28C0FF0 -:1030A000883048F4C77081E001C0880FCA95EAF7FC -:1030B0000E94BA21D6CF8BE58C0F833078F4C53AC5 -:1030C00029F0C63A31F083E890E005C081E890E04D -:1030D00002C082E890E0CF910C94FC1688E58C0F3A -:1030E000833108F064C0C83A39F1C93A41F1CA3AAB -:1030F00049F1CB3A51F1CC3A59F1CD3A61F1C03BAB -:1031000069F1CE3A71F1CF3A79F1C13B81F1C23B1D -:1031100089F1C33B91F1C43B99F1C53BA1F1C63B99 -:10312000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF9 -:10313000C9F180E090E038C082EE90E035C089EEC1 -:1031400090E032C08AEE90E02FC085EB90E02CC07A -:1031500086EB90E029C087EB90E026C08CEC90E0F5 -:1031600023C08DEC90E020C083E891E01DC08AE888 -:1031700091E01AC082E991E017C084E991E014C09F -:1031800081E292E011C083E292E00EC084E292E01C -:103190000BC085E292E008C086E292E005C087E2BB -:1031A00092E002C08AE292E0CF910C941217CF9184 -:1031B0000895882309F44BC0823859F40E94DA1626 -:1031C00081FF45C089E30E9434210E94012289E3E6 -:1031D0000CC0833871F40E94DA1680FF38C083E592 -:1031E0000E9434210E94012283E50E9476210C94E2 -:1031F0000122843859F40E94DA1682FF28C087E43D -:103200000E9434210E94012287E4EFCF9CEF980FA7 -:10321000913A58F390E2980F983050F4877091E00B -:1032200001C0990F8A95EAF7892F0E94C021DFCF4C -:103230009BE5980F933020F480E090E00C94FC160E -:10324000885A833120F480E090E00C94121708959E -:10325000882321F00E94BA210C940122089588232A -:1032600021F00E94C0210C94012208957F928F9238 -:103270009F92AF92BF92CF92DF92EF92FF920F9305 -:103280001F93CF93DF931F92CDB7DEB77C01C62E7D -:10329000772EFC01058102950F70128111110E9499 -:1032A000D7210E942D21882379F0112369F080E233 -:1032B0008C0D883048F082E00E9416210E942D215A -:1032C00091E0D82ED92601C0D12CE72DE295EF70E0 -:1032D000F0E0E05AFF4F0C94752C872D807F072D6E -:1032E0000F70882311F00295007F112389F00023CD -:1032F00009F499C180E28C0D883020F4802F0E945F -:10330000BA2103C0802F0E94CA210E9401228BC1D2 -:103310008C2D0E94D918002309F4C3C180E28C0DC2 -:10332000883020F4802F0E94C02103C0802F0E948B -:10333000D0210E940122B5C1872D807F972D9F70DB -:10334000803211F4892F03C0892F8295807FCC2091 -:1033500021F0F1E0CF16A1F01DC0112339F00023B8 -:1033600019F1013009F50E94EA219BC1002319F0EF -:10337000013009F496C189830E94ED21898110C131 -:10338000112321F0063008F08CC10EC0053008F082 -:1033900088C106C1112359F0002331F0F70195814E -:1033A00090FF41C19F7095830E9428197AC1002324 -:1033B00009F4F6C03EC1872D86958695837090E00E -:1033C000009719F0019761F06CC1112321F08C2D49 -:1033D000972D937002C080E090E00E94FC1661C1BE -:1033E000112321F08C2D972D937002C080E090E086 -:1033F0000E94121756C18C2D112319F00E9424240B -:1034000002C00E948C240E9411254BC1872D83701D -:1034100009F052C0111145C18C2D82958695877097 -:10342000880F880F9C2D9F70892E912CA12CB12C78 -:10343000082E04C0880C991CAA1CBB1C0A94D2F745 -:10344000C4FE14C00FE010E020E030E0B901A80194 -:1034500004C0440F551F661F771F8A95D2F7CB0112 -:10346000BA01609570958095909503C060E070E01A -:10347000CB01272D26952695237030E0223031058B -:1034800069F02330310589F0682979298A299B2937 -:103490002130310571F00E94A21F03C168297929EA -:1034A0008A299B290E94BE1FFCC00E94A21FC50141 -:1034B000B4010E94861FF5C0112319F0872D817079 -:1034C00001C08695882309F4ECC08C2D82958695E1 -:1034D0008770880F880F9C2D9F70892E912CA12CAE -:1034E000B12C082E04C0880C991CAA1CBB1C0A9481 -:1034F000D2F7C4FE14C00FE010E020E030E0B901C4 -:10350000A80104C0440F551F661F771F8A95D2F784 -:10351000CB01BA01609570958095909503C060E0ED -:1035200070E0CB01272D269526952370422F50E081 -:103530004230510569F04330510589F068297929F5 -:103540008A299B294130510571F00E947C20A9C035 -:10355000682979298A299B290E949820A2C00E9463 -:103560007C20C501B4010E9460209BC08C2D90E09E -:10357000FC01E05EF109E531F10508F050C0E059C9 -:10358000FF4F0C94752C0C2D0F70872D8F7111230C -:1035900021F00E94F91F802F07CF0E941A20802F50 -:1035A0000E942F197EC0112341F0053008F079C028 -:1035B000872D8F710E943F2074C0063008F071C0C3 -:1035C000F7CF112339F0872D8F710E94F91F69C041 -:1035D0001123C9F3872D8F710E941A2062C0112315 -:1035E00029F0872D8F710E94E41F5BC00E94DA1FB3 -:1035F00058C0112351F0172D1F71812F0E94F91F00 -:1036000063E0812F0E940D214CC081E00E941621B1 -:10361000023008F446C082E00E94162142C0112305 -:1036200031F0002381F28C2D0E9411183AC0002342 -:1036300089F28C2D0E94D91834C0472D4F706C2D03 -:10364000C7010E9455030E94FE1E2BC0111129C004 -:10365000472D4F7050E042305105B9F04CF4411500 -:10366000510581F041305105E1F40E940C2819C048 -:103670004330510569F04430510599F48C2D0E9476 -:103680005E280FC00E94F5270CC00E94282809C0A0 -:103690000E943B2806C0472D4F706C2DC7010E9429 -:1036A000CB05DD20F9F00E94092180FD1BC0F70148 -:1036B00012820E9403210E94F91FC7010E94811BF0 -:1036C0000E9403210F90DF91CF911F910F91FF90E6 -:1036D000EF90DF90CF90BF90AF909F908F907F90B2 -:1036E0000C941A200F90DF91CF911F910F91FF90B2 -:1036F000EF90DF90CF90BF90AF909F908F907F9092 -:1037000008950F931F93CF93DF93EC0188819981E4 -:103710002B813C81232BB9F09F3F11F48F3F99F00F -:10372000CE010E94CA03882371F0688179818A8161 -:103730000E94FF208C010E94B4200E947B1FB801D0 -:10374000CE010E943619DF91CF911F910F910895FC -:103750000E94D7210E94E7210E94AC210E940122F1 -:103760000E94C2250E94112580E090E00E94FC1674 -:1037700080E090E00C9412170E94C7210C94A81BC3 -:103780000E94F420292F22952F7030E02C30310533 -:103790004CF42A3031056CF42250310922303105C5 -:1037A000A8F407C02C30310569F02F30310551F0F5 -:1037B0000DC0803F69F018F4803E40F409C0843F9A -:1037C00029F406C093FB882780F9089580E00895C6 -:1037D00081E00895CF93DF9300D000D01F92CDB742 -:1037E000DEB70F900F900F900F900F90DF91CF9159 -:1037F0000895CF93DF9300D000D000D0CDB7DEB7CF -:1038000026960FB6F894DEBF0FBECDBFDF91CF91E5 -:1038100008951F93CF93DF93C0919D0216E080918E -:103820009E02C81799F0D0E01C9FF0011D9FF00D7B -:103830001124E156FD4F4081518162817381848161 -:1038400095810E94F91B2196C770E9CFDF91CF9136 -:103850001F9108954091CF025091D0026091D10202 -:103860007091D2028091D3029091D4020C94F91BF2 -:103870008091D40282958F7009F054C08091D1025A -:10388000882309F44FC080919D02A0919E0260910F -:10389000CF027091D0024091D2025091D302B6E093 -:1038A0008A1709F43FC090E041155105C1F17F3FEF -:1038B00011F46F3FA1F1B89FF001B99FF00D1124F1 -:1038C000E156FD4F218172132AC02081621327C067 -:1038D0002281211124C0238134812417350710F45B -:1038E00021503109241B350B283C3105C0F42091AF -:1038F000D4022F7020612093D40226E0289FF0018B -:10390000299FF00D1124EC55FD4F80818F7080614F -:1039100080838FEC92E00E94811B0C94091C01961D -:103920008770BECF0895CF92DF92EF92FF920F93F0 -:103930001F93CF93DF93CDB7DEB762970FB6F8949E -:10394000DEBF0FBECDBF8C0185E0F801DE011D9604 -:1039500001900D928A95E1F7D8014C9111965C91F6 -:10396000119712966C9112971396CD90DC90149744 -:103970003091CF027091D0028091D2029091D30207 -:10398000009709F46BC17F3F19F43F3F09F466C10A -:10399000E090D102EE2009F4C0C02091D402C816F4 -:1039A000D90628F0F601E81BF90BCF0104C0809579 -:1039B00090958C0D9D1DFF24F394883C910578F023 -:1039C000F12C207F09F0C6C07C2DD98AC88A89894C -:1039D0000E94EA1B8FEC92E00E94811BB1C0822FF3 -:1039E000807F09F046C0751314C0341312C06111F2 -:1039F00010C02F7020612093D4020E942A1C8FECEB -:103A000092E00E94811B8091D402D80115968C937C -:103A10002EC0CD2819F15F3F11F44F3FF9F0F62E7B -:103A200061111CC080919D0220919E0236E0821798 -:103A300009F45AC090E0389FF001399FF00D11242D -:103A4000E156FD4F7181571306C07081471303C0C3 -:103A50007281711103C001968770E9CFF62E66233B -:103A600009F418C18091D40281608093D402F12CB2 -:103A700011C1751308C0341306C0611104C08091D0 -:103A8000D402D801C3C04D875E878D859E856A8B21 -:103A90000E94C01B6A898823E1F16623D1F120913D -:103AA000D402822F82958F7090E0029774F08091FB -:103AB000CF029091D00298878F831986DB86CA86C1 -:103AC0002C87CE0107960E94811B86E0F801AFEC9F -:103AD000B2E001900D928A95E1F70E94381C0E9495 -:103AE0002A1CFF24F394D6C04D875E878D859E8562 -:103AF0000E94F420292F22952F7030E022303105CA -:103B00000CF0BCC09F7009F0B6C0805E883008F42D -:103B1000C1C0C8010E94811BE4CFC816D90608F4B1 -:103B200053C0F601E81BF90BCF01883C910508F45E -:103B300050C0F12C7C2DD98AC88A89890E94EA1B41 -:103B4000EFECF2E086E0DF011D928A95E9F70E9432 -:103B50002A1CA0C0751314C0341312C0611110C008 -:103B60008091D402F8018583C8010E94811B86E000 -:103B7000EFECF2E0DF011D928A95E9F7FE2C8AC096 -:103B80004D875E878D859E856A8B0E94C01B6A89E2 -:103B9000882309F4BECF662309F4BBCF2091D40259 -:103BA000822F82958F7090E002970CF48ECF8091D7 -:103BB000CF029091D0029A8389831B82DD82CC82CE -:103BC0002E83CE0101967FCF809590958C0D9D1D03 -:103BD000ACCFF62E662309F49CCF75132EC0341398 -:103BE0002CC02091D40220FD1FC0822F82958F709F -:103BF000D9F0D80115962C9315978F3049F08F5F27 -:103C0000982F9295907F822F8F70892B15968C9389 -:103C1000C8010E94811B86E0F801AFECB2E0019080 -:103C20000D928A95E1F793CF86E0F801AFECB2E010 -:103C300001900D928A95E1F72DC04D875E878D85A5 -:103C40009E850E94C01B811140CF8091D40281606B -:103C50008093D402C8010E94811B1CC0662309F412 -:103C600058CF4D875E878D859E850E94C01B882317 -:103C700009F44FCF2ACF811148CF0CC02430310531 -:103C80000CF047CF9F7009F440CFF8019581907FE9 -:103C900009F03BCF8F2D62960FB6F894DEBF0FBEB2 -:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB -:103CB000CF9008951F93CF93DF93CDB7DEB72C97A6 -:103CC0000FB6F894DEBF0FBECDBF4F83588769870C -:103CD0007A878B879C87CE0107960E94931C882346 -:103CE00069F08F8198852A853B85232BF1F19F3FD1 -:103CF00009F063C08F3F09F060C037C086E0FE0165 -:103D00003796DE01119601900D928A95E1F76F8149 -:103D10007885EA85FB85309741F17F3F11F46F3F4D -:103D200021F120919E0230E0C90101968770992708 -:103D300040919D0250E08417950709F447C06983BC -:103D40007A83FD83EC8396E0929FD001939FB00D20 -:103D50001124A156BD4FFE01319601900D929A9506 -:103D6000E1F780939E020E94091C16E080919D025B -:103D700090919E028917C1F1189FC00111248156AC -:103D80009D4F0E94931C882379F1E0919D021E9F14 -:103D9000F0011124E156FD4F408151816281738110 -:103DA000848195810E94F91B80919D0290E001968B -:103DB0008770992780939D02D9CF4F815885698557 -:103DC0007A858B859C850E94F91BCFCF0E94BC1BF6 -:103DD00010929E0210929D02EFECF2E086E0DF016D -:103DE0001D928A95E9F7C1CF2C960FB6F894DEBFE5 -:103DF0000FBECDBFDF91CF911F910895EF92FF923B -:103E00000F931F93CF93DF938C01009709F46CC03D -:103E1000F12CEE24E394E8012196F8018491843793 -:103E200040F4843008F051C0813081F0823019F1C3 -:103E30005BC0853709F444C0A8F19CE7980F903720 -:103E400008F052C08F770E94D91841C00E5F1F4FF3 -:103E5000FE01C49180E28C0F883048F4C7708E2D2B -:103E600001C0880FCA95EAF70E94DA2114C08C2F8E -:103E70000E9411182DC00E5F1F4FFE01C49180E2F9 -:103E80008C0F883058F4C7708E2D01C0880FCA95EA -:103E9000EAF70E94E0210E9401221AC08C2F0E94A2 -:103EA000D91816C00E5F1F4FFE01C491CC2381F0BC -:103EB0008FE99FE00197F1F700C00000C150F6CFF5 -:103EC0000E5F1F4FFE01F49003C00E9411188E0177 -:103ED0008F2D882309F49FCFEFE9FFE03197F1F7A9 -:103EE00000C000008150F5CFDF91CF911F910F915D -:103EF000FF90EF90089508956093D9027093DA02CD -:103F00008093DB029093DC020C94A81B0F931F9309 -:103F10000091D9021091DA022091DB023091DC028B -:103F2000DC01CB01802B912BA22BB32B8093D902E8 -:103F30009093DA02A093DB02B093DC021F910F9101 -:103F40000C94A81B0F931F930091D9021091DA02D1 -:103F50002091DB023091DC02DC01CB018023912334 -:103F6000A223B3238093D9029093DA02A093DB02B9 -:103F7000B093DC021F910F910C94A81B0F931F9319 -:103F80000091D9021091DA022091DB023091DC021B -:103F9000DC01CB0180279127A227B3278093D90288 -:103FA0009093DA02A093DB02B093DC021F910F9191 -:103FB0000C94A81B1092D5021092D6021092D70230 -:103FC0001092D8020C94A81B41E050E060E070E031 -:103FD00004C0440F551F661F771F8A95D2F7409380 -:103FE000D5025093D6026093D7027093D8020C94F6 -:103FF000A81B41E050E060E070E004C0440F551F92 -:10400000661F771F8A95D2F78091D5029091D602CC -:10401000A091D702B091D802482B592B6A2B7B2B49 -:104020004093D5025093D6026093D7027093D80282 -:104030000C94A81B41E050E060E070E004C0440F25 -:10404000551F661F771F8A95D2F74095509560954A -:1040500070958091D5029091D602A091D702B0912F -:10406000D802482359236A237B234093D5025093D7 -:10407000D6026093D7027093D8020C94A81B41E03B -:1040800050E060E070E004C0440F551F661F771FCA -:104090008A95D2F78091D5029091D602A091D7024D -:1040A000B091D802482759276A277B274093D50229 -:1040B0005093D6026093D7027093D8020C94A81B39 -:1040C0000F931F930091D5021091D6022091D70231 -:1040D0003091D802DC01CB01802B912BA22BB32B8A -:1040E0008093D5029093D602A093D702B093D802C2 -:1040F0001F910F910C94A81B0F931F930091D50251 -:104100001091D6022091D7023091D802DC01CB0168 -:1041100080239123A223B3238093D5029093D602C8 -:10412000A093D702B093D8021F910F910C94A81BB3 -:104130000F931F930091D5021091D6022091D702C0 -:104140003091D802DC01CB0180279127A227B32729 -:104150008093D5029093D602A093D702B093D80251 -:104160001F910F910C94A81B0895CF92DF92EF92AC -:10417000FF920F931F93CF93DF938C01C090D902CE -:10418000D090DA02E090DB02F090DC028091D50260 -:104190009091D602A091D702B091D802C82AD92A0C -:1041A000EA2AFB2ACFE1D0E0D701C6010C2E04C0D9 -:1041B000B695A795979587950A94D2F780FF06C084 -:1041C000B8018C2F0E945008019721F4219760F7C5 -:1041D00080E001C08C2FDF91CF911F910F91FF9054 -:1041E000EF90DF90CF900895CF93DF93EC010E9482 -:1041F000B520BE010E945008DF91CF910895CB01F8 -:104200000E94F42008958091DD028595859585951D -:1042100008958091DD028770089598E0899F90014C -:104220001124262B2093DD020C94F91F2091DD022E -:10423000809582238093DD02982F977069F430E097 -:10424000482F552747FD50952417350729F08595A8 -:10425000859585950C941A2008959091DD029770AC -:1042600081E009F480E0089590911501992321F0EF -:1042700090911601911109C02091170130911801F8 -:10428000F90132969FEF40E01FC0982F96959695C2 -:1042900096959F3050F5E0911701F0911801E90FC4 -:1042A000F11D877021E030E0A90102C0440F551FC5 -:1042B0008A95E2F7CA019181892B818308959F3FF6 -:1042C00039F04F5F4E3041F051915813F8CF0DC087 -:1042D0005111F7CF942FF5CF9F3F39F0F901E90F36 -:1042E000F11D97FDFA958283089508959091150127 -:1042F000992321F090911601911109C02091170185 -:1043000030911801F9013296205F3F4F1FC0982F5E -:104310009695969596959F30F0F4E0911701F0915F -:104320001801E90FF11D877021E030E0A90102C0FA -:10433000440F551F8A95E2F7CA0180959181892320 -:10434000818308953196E217F30729F0908198133D -:10435000F9CF1082F7CF089581E090E0E091170146 -:10436000F0911801E80FF91F108201968031910534 -:10437000A9F708959091F102892B8093F102089595 -:1043800080959091F10289238093F1020895109213 -:10439000F10208959091F002892B8093F002089524 -:1043A00080959091F00289238093F00208951092F5 -:1043B000F00208959091EF02892B8093EF02089507 -:1043C00080959091EF0289238093EF0208951092D7 -:1043D000EF0208958093DE0208951092DE020895A0 -:1043E0008091170190911801FC0131969C01205F8A -:1043F0003F4F80E0919191118F5FE217F307D1F762 -:104400000895E0911701F09118018091F1028083E5 -:10441000E0911701F091180190818091F002892BB1 -:104420008083E0911701F091180190818091EF0253 -:10443000892B80838091DE02882361F0E09117014F -:10444000F09118019081892B80830E94F0218111C5 -:104450001092DE0280911701909118010C94E616DB -:1044600020E0009739F0AC01415051098423952395 -:104470002F5FF7CF822F089580911303843039F195 -:104480001092F30220E488E190E00FB6F894A8952A -:10449000809360000FBE2093600080E00E94BC0209 -:1044A00080E00E94EA0883B7817F846083BF83B77E -:1044B000816083BF7894889583B78E7F83BF88E1BE -:1044C0000FB6F89480936000109260000FBE0895BC -:1044D0000895089580E00E94BC020E9468220E9414 -:1044E00045090E9469220E94CA0991E0811101C018 -:1044F00090E0892F08950E94BC1B80E00E94BC02BE -:104500000E94E4270E94DA160C94EA081F920F9288 -:104510000FB60F9211248F939F93AF93BF93809107 -:10452000F302811113C08091F4029091F502A091E1 -:10453000F602B091F7024196A11DB11D8093F402DD -:104540009093F502A093F602B093F702BF91AF915A -:104550009F918F910F900FBE0F901F90189582E042 -:1045600084BD93E095BD9AEF97BD80936E0008954A -:104570002FB7F8948091F4029091F502A091F60281 -:10458000B091F7022FBF0895CF92DF92EF92FF9282 -:104590000F931F932FB7F8944091F4025091F502B6 -:1045A0006091F6027091F7022FBF6A017B01EE2441 -:1045B000FF248C0120E030E0C016D106E206F306AD -:1045C00010F4415051099A01281B390BC9011F9160 -:1045D0000F91FF90EF90DF90CF9008951F920F9270 -:1045E0000FB60F9211248F939F93AF93BF93809137 -:1045F000F4029091F502A091F602B091F7020196B3 -:10460000A11DB11D8093F4029093F502A093F602D0 -:10461000B093F702BF91AF919F918F910F900FBE12 -:104620000F901F9018950E94D713F8942FEF87EAE8 -:1046300091E6215080409040E1F700C0000087E003 -:1046400090EBDC0180931E0390931F03A093200343 -:10465000B09321039CE088E10FB6F894A89580936D -:1046600060000FBE90936000FFCF0E947423811101 -:1046700002C00E9450230E947F238093F2020E9476 -:10468000872380931C0387FB882780F9809316017A -:104690000E948323682F70E080E090E00C947C1FE0 -:1046A0006DEE7EEF80E090E00E949B2C60E082E067 -:1046B00090E00E94892C60E083E090E00E94892CC9 -:1046C00060E084E090E00E94892C60E085E090E06A -:1046D0000E94892C60E086E090E00E94892C6FEFB8 -:1046E00087E090E00C94892C80E090E00E94832C7D -:1046F00021E08D3E9E4F09F020E0822F089582E058 -:1047000090E00C947B2C83E090E00C947B2C84E074 -:1047100090E00C947B2C682F84E090E00C94892C22 -:1047200086E090E00C947B2C682F86E090E00C945F -:10473000892C87E090E00C947B2C682F87E090E038 -:104740000C94892C8091FA0280FF0BC060911C01AF -:1047500085E0689FB00111247595679575956795FB -:104760002BC081FF09C060911C0185E0689FB001EA -:1047700011247595679520C082FF07C060911C01C8 -:1047800085E0689FB001112417C09091FB02992326 -:10479000D1F060911B01961788F720911C0185E0EC -:1047A000289F90011124929FA001939F500D1124E6 -:1047B00070E0CA010E94612C6038710540F46115F7 -:1047C000710539F002C065E070E0862F08958FE72B -:1047D000089581E008958091FA0280FF08C06091F9 -:1047E0001A0170E0759567957595679521C081FFF1 -:1047F00006C060911A0170E07595679519C082FF37 -:1048000004C060911A0170E010C09091FB029923DE -:10481000C1F0609119019617A0F780911A01899F44 -:10482000C001112470E00E94612C6038710528F4E9 -:104830006115710521F0862F08958FE7089581E0B5 -:10484000089561E070E0F4CF803F21F40E94A2233C -:10485000819504C0813F29F40E94A2238093FE0227 -:104860000895823F21F40E94A223819504C0833FD2 -:1048700029F40E94A2238093FD020895893F19F430 -:104880000E94EB2305C08A3F31F40E94EB238195FF -:104890008093FF0208958B3F21F40E94EB238195C2 -:1048A00004C08C3F29F40E94EB23809300030895F9 -:1048B000843F21F48091FC02816017C0853F21F480 -:1048C0008091FC02826011C0863F21F48091FC023D -:1048D00084600BC0873F21F48091FC02886005C092 -:1048E000883F31F48091FC0280618093FC0208953E -:1048F0008D3F21F48091FA0281600BC08E3F21F43C -:104900008091FA02826005C08F3F29F48091FA02FB -:1049100084608093FA020895803F39F48091FE020A -:1049200087FF6CC01092FE0269C0813F29F480911C -:10493000FE021816BCF362C09091FD02823F29F47A -:1049400097FF5CC01092FD0259C0833F19F41916FD -:10495000CCF354C0893F41F48091FF0218160CF04B -:104960004DC01092FF024AC08A3F29F48091FF0295 -:1049700087FF44C0F6CF8B3F39F48091000387FF57 -:104980003DC0109200033AC08C3F29F4809100038F -:104990001816BCF333C0843F21F48091FC028E7F53 -:1049A00017C0853F21F48091FC028D7F11C0863FA6 -:1049B00021F48091FC028B7F0BC0873F21F4809112 -:1049C000FC02877F05C0883F31F48091FC028F7E16 -:1049D0008093FC0213C08D3F21F48091FA028E7FF8 -:1049E0000BC08E3F21F48091FA028D7F05C08F3F6E -:1049F00029F48091FA028B7F8093FA028091FD0264 -:104A000081110EC08091FE0281110AC08091FF02C7 -:104A1000811106C080910003811102C01092FB0237 -:104A200008958CEF92E00E94F1160E94B8229093B4 -:104A3000F9028093F80208951F93CF93DF9380913A -:104A4000F8029091F9020E94C422AC019091FB02FD -:104A5000992321F020911D0130E006C020911E0114 -:104A60008AE0289F900111244217530708F486C05A -:104A70008091FD02C091FE02D091FF0210910003CF -:104A8000811107C0C11176C0D11174C0111172C05B -:104A900075C09F3F19F09F5F9093FB02181624F496 -:104AA0000E94A2238093FD028091FD0287FF05C032 -:104AB0000E94A22381958093FD021C1624F40E947B -:104AC000A2238093FE028091FE0287FF05C00E9410 -:104AD000A22381958093FE026091FD02662339F145 -:104AE000C091FE02CC2319F1772767FD7095872FBF -:104AF000972F0E94832923E333E343E35FE30E947C -:104B0000932A0E9450296093FD026C2F772767FD3E -:104B10007095872F972F0E94832923E333E343E384 -:104B20005FE30E94932A0E9450296093FE021D16A3 -:104B300024F40E94EB238093FF028091FF0287FF01 -:104B400005C00E94EB2381958093FF02111624F487 -:104B50000E94EB23809300038091000387FF05C030 -:104B60000E94EB23819580930003DF91CF911F91E9 -:104B70000C9411259F3F09F08ECF96CFDF91CF91F6 -:104B80001F910895ECEFF2E085E0DF011D928A9518 -:104B9000E9F71092FB021092FA020895833081F136 -:104BA00028F4813059F08230D1F00895853009F42D -:104BB00049C0B8F1863009F456C0089580911E01AD -:104BC000262F30E0280F311D2F3F310524F4680FC8 -:104BD00060931E0108958FEF80931E0108958091C8 -:104BE0001D01262F30E0280F311D2F3F310524F401 -:104BF000680F60931D0108958FEF80931D01089544 -:104C000080911C01262F30E0280F311D2F3F3105E8 -:104C100024F4680F60931C0108958FEF80931C01AA -:104C2000089580911B01262F30E0280F311D2F3F62 -:104C3000310524F4680F60931B0108958FEF809372 -:104C40001B01089580911A01262F30E0280F311D95 -:104C50002F3F310524F4680F60931A0108958FEFF8 -:104C600080931A01089580911901262F30E0280FB2 -:104C7000311D2F3F310524F4680F60931901089509 -:104C80008FEF809319010895833011F128F481305A -:104C900049F0823091F00895853081F120F186301D -:104CA000C1F1089580911E01681720F4861B80933E -:104CB0001E01089510921E01089580911D0168172C -:104CC00020F4861B80931D01089510921D01089504 -:104CD00080911C01681720F4861B80931C010895A5 -:104CE00010921C01089580911B01681720F4861B07 -:104CF00080931B01089510921B01089580911A0161 -:104D0000681720F4861B80931A01089510921A01E7 -:104D1000089580911901681720F4861B809319016A -:104D200008951092190108950F931F93873208F088 -:104D300048C08E3108F08DC0803109F477C008F585 -:104D4000873009F461C068F4863009F09DC0809115 -:104D5000F202817F8E7F8093F20281E080930203D2 -:104D600094C08B3009F489C08E3009F08DC08091D9 -:104D7000F20282FB222720F991E0922790FB82F930 -:104D80005EC0863109F479C060F4813109F07CC0DD -:104D90000E94BC1B9091160181E089278093160127 -:104DA0006CC0893109F469C08B3109F06DC0809104 -:104DB000F20281FB222720F991E0922790FB81F9F2 -:104DC0003EC0883309F459C050F4893209F457C001 -:104DD000853309F454C0873209F451C055C0833477 -:104DE00009F44DC028F48A3308F44EC0895332C008 -:104DF000883409F049C00E94BC1B0E94FA090E9435 -:104E0000C1030E94132339C09091F202892F80952B -:104E1000817080FB90F929F0966098609093F2027F -:104E200034C0997F977F9093F20227C08091F2025D -:104E300083FB222720F991E0922790FB83F980934E -:104E4000F2029923D1F08091F20281608093F20204 -:104E500014C08D5141E050E060E070E08A019B0198 -:104E600004C0000F111F221F331F8A95D2F7C901FA -:104E7000B8010E947C1F0E94BC1B81E006C061E05B -:104E800070E080E090E0F5CF80E01F910F910895F1 -:104E900080E0089580E00895CF93C82F80910203A9 -:104EA000813069F018F08230C9F184C0E0911701B7 -:104EB000F09118018081823209F07EC007C0E09134 -:104EC0001701F09118018081823261F48C2F0E94C9 -:104ED0004827811104C08C2F0E9494261DC081E0B8 -:104EE00090E01AC08C2F0E944A27811114C0C4314F -:104EF00079F048F4CB3079F0C03109F061C082E03C -:104F00008093020308C0C93219F0C83321F058C099 -:104F10001092020355C081E0817054C0C93291F1F2 -:104F200020F5C43179F1B0F4C73009F047C08EE103 -:104F300080931E0182E380931D018AE080931C010F -:104F400084E180931B0188E080931A0188E28093BA -:104F5000190134C0CE51C63088F5EC2FF0E0EA5488 -:104F6000FE4F80818093010329C0CE34E9F020F404 -:104F7000CB3421F56AE013C0C13579F0C235F1F4C4 -:104F800061E00DC080910103882319F010920103A4 -:104F900015C081E08093020315C061E006C08091D6 -:104FA00001030E94CE250AC06AE0809101030E949D -:104FB000442604C01092020380E004C081E002C0D5 -:104FC00080E0AACFCF9108950E947423811102C07E -:104FD0000E9450230E94902380931D0380FF02C0F3 -:104FE000869501C080E00C94BC0280911D03982F2F -:104FF0009695292F30E0233031054CF49F5F990FAF -:105000008170892B816080931D030E94942380917D -:105010001D0386950C94BC0280911D03982F9695D4 -:1050200091F09158990F8170892B80931D038E7F89 -:1050300091E009F490E080911D0390FB80F980934A -:105040001D030E94942380911D0386950C94BC023D -:1050500080911D03982F909590FB80F980931D03FC -:105060000E94942380911D0380FF02C0869501C099 -:1050700080E00C94BC0290911D03892F86958F5F70 -:105080008F779170843028F4880F892B80931D03CB -:1050900002C090931D0380911D038E7F91E009F45F -:1050A00090E080911D0390FB80F980931D030E9486 -:1050B000942380911D0386950C94BC0220911D03BE -:1050C000922F96958927982F990F822F8170892B7F -:1050D00080931D038E7F91E009F490E080911D0381 -:1050E00090FB80F980931D030E94942380911D03FF -:1050F00086950C94BC0280911D03869508955058A6 -:10510000BB27AA270ED0D1C1C2D130F0C7D120F021 -:1051100031F49F3F11F41EF4B7C10EF4E095E7FBA4 -:105120009FC1E92FD3D180F3BA17620773078407B1 -:10513000950718F071F49EF5EBC10EF4E0950B2E77 -:10514000BA2FA02D0B01B90190010C01CA01A001D9 -:105150001124FF27591B99F0593F50F4503E68F134 -:105160001A16F040A22F232F342F4427585FF3CF75 -:10517000469537952795A795F0405395C9F77EF446 -:105180001F16BA0B620B730B840BBAF09150A1F08F -:10519000FF0FBB1F661F771F881FC2F70EC0BA0F15 -:1051A000621F731F841F48F4879577956795B7959D -:1051B000F7959E3F08F0B3CF9395880F08F0992795 -:1051C000EE0F97958795089527D108F481E008950B -:1051D0000CD06BC163D140F05AD130F021F45F3F65 -:1051E00019F03EC1511195C14FC170D198F3992367 -:1051F000C9F35523B1F3951B550BBB27AA2762179B -:105200007307840738F09F5F5F4F220F331F441FDF -:10521000AA1FA9F333D00E2E3AF0E0E830D0915017 -:105220005040E695001CCAF729D0FE2F27D0660F04 -:10523000771F881FBB1F261737074807AB07B0E843 -:1052400009F0BB0B802DBF01FF2793585F4F2AF059 -:105250009E3F510568F004C15CC15F3FECF3983E8E -:10526000DCF3869577956795B795F7959F5FC9F7B6 -:10527000880F911D9695879597F90895E1E0660F3F -:10528000771F881FBB1F621773078407BA0720F0B8 -:10529000621B730B840BBA0BEE1F88F7E095089521 -:1052A00004D06894B11135C1089518D188F09F5782 -:1052B00090F0B92F9927B751A0F0D1F0660F771F62 -:1052C000881F991F1AF0BA95C9F712C0B13081F042 -:1052D0001FD1B1E008951CC1672F782F8827B85FD0 -:1052E00039F0B93FCCF3869577956795B395D9F7A3 -:1052F0003EF490958095709561957F4F8F4F9F4FAD -:105300000895E89409C097FB3EF4909580957095B8 -:1053100061957F4F8F4F9F4F9923A9F0F92F96E901 -:10532000BB279395F695879577956795B795F11176 -:10533000F8CFFAF4BB0F11F460FF1BC06F5F7F4F13 -:105340008F4F9F4F16C0882311F096E911C0772325 -:1053500021F09EE8872F762F05C0662371F096E82E -:10536000862F70E060E02AF09A95660F771F881FFD -:10537000DAF7880F9695879597F9089588D018F0F1 -:1053800011F08CD038F480C0C4C0E92F9FD0B0F3A6 -:105390005523C9F3E7FB6217730784079507A8F144 -:1053A00099F3E92FFF2788232AF03197660F771F9B -:1053B000881FDAF7952F5527442332F0915050403B -:1053C000220F331F441FD2F7BB27E91BF50B621BCB -:1053D000730B840BB109C1F222F4620F731F841F97 -:1053E000B11D31972AF0660F771F881FBB1FEFCFC3 -:1053F000915050405AF041F0882332F0660F771FE9 -:10540000881F91505040C1F7939530C0869577958D -:1054100067959F5FD9F7F8CF990F0008550FAA0B32 -:10542000E0E8FEEF16161706E807F907C0F01216B7 -:105430001306E407F50798F0621B730B840B950BBA -:1054400039F40A2661F0232B242B252B21F408950F -:105450000A2609F4A140A6958FEF811D811D0895AC -:1054600097F99F6780E870E060E008959F3F31F012 -:10547000915020F4879577956795B795880F911D82 -:105480009695879597F908959FEF80EC08950024ED -:105490000A941616170618060906089500240A9499 -:1054A00012161306140605060895092E0394000C1F -:1054B00011F4882352F0BB0F40F4BF2B11F460FFAE -:1054C00004C06F5F7F4F8F4F9F4F089557FD9058D7 -:1054D000440F551F59F05F3F71F04795880F97FBB8 -:1054E000991F61F09F3F79F0879508951216130672 -:1054F0001406551FF2CF4695F1DF08C016161706A1 -:105500001806991FF1CF86957105610508940895D5 -:10551000E894BB2766277727CB0197F908957CDFAE -:1055200008F48FEF08950BD0C0CFB1DF28F0B6DFBD -:1055300018F0952309F094CFA7CF1124EACFC6DF46 -:10554000A0F3959FD1F3950F50E0551F629FF00196 -:10555000729FBB27F00DB11D639FAA27F00DB11DEF -:10556000AA1F649F6627B00DA11D661F829F222778 -:10557000B00DA11D621F739FB00DA11D621F839FFF -:10558000A00D611D221F749F3327A00D611D231FD5 -:10559000849F600D211D822F762F6A2F11249F5723 -:1055A00050408AF0E1F088234AF0EE0FFF1FBB1F46 -:1055B000661F771F881F91505040A9F79E3F5105E5 -:1055C00070F04ECFA6CF5F3FECF3983EDCF38695AC -:1055D00077956795B795F795E7959F5FC1F7FE2B90 -:1055E000880F911D9695879597F90895FA01EE0F0A -:1055F000FF1F30962105310599F16115710561F4A0 -:105600008038BFE39B0749F168949038810561F0C9 -:105610008038BFEF9B0741F0992342F5FF3FE1053A -:105620003105210511F1E8940894E795D901AA23E1 -:1056300029F4AB2FBE2FF85FD0F310C0FF5F70F4DA -:10564000A695E0F7F73950F019F0FF3A38F49F7754 -:105650009F930CD00F9007FC905808953EF014CF04 -:1056600060E070E080E89FE308954FE79F775F93E5 -:105670004F933F932F939ED02F913F914F915F91E6 -:1056800052DF05C019F40EF0EBCE42CFFDCE26DF7F -:10569000C8F39638C0F707F80F92E8942BE33AEA7C -:1056A00048EB5FE74EDF0F920F920F924DB75EB758 -:1056B0000F92C0D0EAE0F1E016D04F915F91EF91E8 -:1056C000FF91E595EE1FFF1F49F0FE57E068442764 -:1056D000EE0F441FFA95E1F74195550B32D00F902C -:1056E00007FE26C00895DF93CF931F930F93FF9279 -:1056F000EF92DF927B018C01689405C0DA2EEF01F6 -:105700001EDFFE01E894A5912591359145915591B3 -:10571000AEF3EF0106DDFE019701A801DA9479F7F7 -:10572000DF90EF90FF900F911F91CF91DF9108953F -:105730009B01AC0160E070E080E89FE349CD90CE32 -:1057400095CECCDEE8F39923D9F3940F511DBBF32A -:105750009150504094F059F0882332F0660F771F33 -:10576000881F91505040C1F79E3F510544F7880F64 -:10577000911D9695879597F908955F3FACF0983EF7 -:105780009CF0BB27869577956795B79508F4B1602F -:105790009395C1F7BB0F58F711F460FFE8CF6F5F27 -:1057A0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCEC6 -:1057B000689456CE93DEC8F39923D1F3C6F3DF93F2 -:1057C000CF931F930F93FF92C92FDD2788232AF0D1 -:1057D0002197660F771F881FDAF720E030E040E856 -:1057E0005FEB9FE3883920F0803E30F021968F7781 -:1057F00087DCE2E3F1E003C083DCEFE5F1E073DF97 -:105800008B01BE01EC01FB2E6F5771097595771F57 -:10581000880B990B78DD28E132E741E35FE38FDE07 -:10582000AF2D9801AE01FF900F911F91CF91DF91A5 -:1058300078DC3BCEFA01DC01AA0FBB1F9B01AC0157 -:10584000BF5728F422273327442750781FC0B75169 -:1058500088F4AB2F0024469537952795011CA39516 -:10586000D2F3002069F0220F331F441FB395DAF3FF -:105870000DD045CC61307105A0E88A07B94630F4F7 -:105880009B01AC016627772788279078309621F016 -:1058900020833183428353830895AA1BBB1B51E1AC -:1058A00007C0AA1FBB1FA617B70710F0A61BB70B90 -:1058B000881F991F5A95A9F780959095BC01CD0135 -:1058C000089597FB072E16F4009407D077FD09D0B2 -:1058D0000E944D2C07FC05D03EF4909581959F4F7A -:1058E0000895709561957F4F0895EE0FFF1F059005 -:1058F000F491E02D0994F999FECF92BD81BDF89AFB -:10590000992780B50895A8E1B0E042E050E00C94FA -:10591000A32C262FF999FECF92BD81BDF89A01974D -:1059200000B4021639F01FBA20BD0FB6F894FA9AE7 -:10593000F99A0FBE08950196272F0E948A2C0C9485 -:10594000892CDC01CB01FC01F999FECF06C0F2BD28 -:10595000E1BDF89A319600B40D9241505040B8F72D -:065960000895F894FFCF4A -:10596600640007000CFF0000003F64DE0F6C104966 -:10597600101510E10F0101DF022808140A321E007B -:1059860002040507090B0C0E1011131517181A1C23 -:105996001D1F2123242628292B2D2F30323435375D -:1059A600393B1F0F03764F5F6F7F4969437909596A -:1059B60053633149803F5D8B803FF8BF803FCAE12A -:1059C600803F73ED803FCAE1803FF8BF803F5D8B2B -:1059D600803F3149803F0000803FF16D7F3F75EA8F -:1059E6007E3F4C827E3F833F7E3F84287E3F833FBF -:1059F6007E3F4C827E3F75EA7E3FF16D7F3F000021 -:105A0600803F3F4D3639830436040004C7035A03EA -:105A160073038C03A50301020304050607080900A6 -:00000001FF diff --git a/keyboard/planck/keymaps/angerthosenear/compiled.hex b/keyboard/planck/keymaps/angerthosenear/compiled.hex deleted file mode 100644 index b584d6a935..0000000000 --- a/keyboard/planck/keymaps/angerthosenear/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C290014001A0008001500FC -:1001E00017001C0018000C00120013002A002B003E -:1001F00004001600070009000A000B000D000E00A5 -:100200000F0033002800E1001D001B00060019004C -:100210000500110010003600370038003400E000FF -:10022000E300E200835002202C002C00012050004B -:10023000510052004F0001000100010001000100C7 -:1002400001005F00600061005400560001000100E1 -:10025000010001000100010001005C005D005E0082 -:1002600055005700010001000100010001000100DC -:10027000010059005A005B006300580001000100B2 -:1002800001000100010002202C0062000120010099 -:1002900001000100010035001E001F0020002100A8 -:1002A0002200230024002500260027000100010071 -:1002B0000320042048120100010001002D002E003F -:1002C0002F00300031000100440045006800690043 -:1002D0006A006B006C006D006E006F000100010091 -:1002E00001000100010001000100AC000120AB0091 -:1002F000AA00A900AE0035021E021F022002210240 -:100300002202230224022502260227024C000100B9 -:100310000320042048120100010001002D022E02DA -:100320002F023002310201003A003B003C003D0048 -:100330003E003F0040004100420043000100010038 -:1003400001000100010002200100010001004A003B -:100350004E004B004D00280354006800650020004B -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/austin/compiled.hex b/keyboard/planck/keymaps/austin/compiled.hex deleted file mode 100644 index fcd925dae0..0000000000 --- a/keyboard/planck/keymaps/austin/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C2B0014001A0008001500FA -:1001E00017001C0018000C00120013002A00290040 -:1001F00004001600070009000A000B000D000E00A5 -:100200000F0033003400E1001D001B000600190040 -:100210000500110010003600370038002800835018 -:10022000E300E200E00002202C002C00012050003E -:10023000510052004F002B0014001A000900130057 -:100240000A000D000F0018001C0033002A002900CE -:10025000040015001600170007000B00110008002D -:100260000C0012003400E1001D001B000600190004 -:1002700005000E0010003600370038002800C300CB -:10028000E300E200E00002202C002C0001205000DE -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00010048 -:1002B0000320042048120100010001002D002E003F -:1002C0002F00300031000100440045006800690043 -:1002D0006A006B006C006D006E006F000100010091 -:1002E0000100010001000100010001000120AB003C -:1002F000AA00A900AE0035021E021F022002210240 -:100300002202230224022502260227022A000100DB -:100310000320042048120100010001002D022E02DA -:100320002F023002310201003A003B003C003D0048 -:100330003E003F0040004100420043000100010038 -:100340000100010001000220010001000100AB00DA -:10035000AA00A900AE002803540068006500200030 -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/bone2planck/compiled.hex b/keyboard/planck/keymaps/bone2planck/compiled.hex deleted file mode 100644 index 0d5287b3ee..0000000000 --- a/keyboard/planck/keymaps/bone2planck/compiled.hex +++ /dev/null @@ -1,1450 +0,0 @@ -:100000000C9491020C94D5020C94D5020C94D50258 -:100010000C94D5020C94D5020C94D5020C94D50204 -:100020000C94D5020C94D5020C9482140C945415A3 -:100030000C94B6220C94D5020C94D5020C94D502E3 -:100040000C94D5020C9437030C94D5020C94D50271 -:100050000C94D5020C941E230C94D5020C94D5025A -:100060000C94D5020C94D5020C94D5020C94D502B4 -:100070000C94D5020C94D5020C94D5020C94D502A4 -:100080000C94F70A0C94D5020C94D5020C94D5026A -:100090000C94D5020C94D5020C94D5020C94D50284 -:1000A0000C94D5020C94D5020C94D502C115E3151D -:1000B000D116E315D11628164B16D116A016B31675 -:1000C0009D199D19CC19CC190B1A2B1A811B811B58 -:1000D000361A811BE61AE61A4D1B561B811B7B1B29 -:1000E000F31AF31AF31AF31AF31AF31AF31AF31AA8 -:1000F000F31AF31AF31AF31AF31AF31AF31AF31A98 -:10010000031B111B181B1F1B291B07634236B79BC0 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000014000D000B -:1001D0000700180004001B0013000B000F001000A4 -:1001E0001A002D000152060017000C000800120032 -:1001F00005001100150016000A0001521600090042 -:1002000019002F00340033001D001C003600370099 -:100210000E001600E000E300E200035202522C0040 -:100220002C000252035229002B002800350214141E -:1002300038022514261435001E02640064022702C9 -:100240002302000001002D1424022414271430027C -:100250002D0225022602380037020100000031007D -:100260002102641430140814300022021F023102EB -:100270003602000001000100010001000100010040 -:1002800001000100010001000100010000004B001D -:100290002A0052004C004E000000240025002600D9 -:1002A0000000000000004A00500051004F004D00C7 -:1002B0003700210022002300360000001600000055 -:1002C0002B0049002800000027001E001F0020000E -:1002D00036021600010001000100010001000100CA -:1002E0000100010001000100010001000000000008 -:1002F0004600470048000000000040004100420066 -:100300004500000000000000A800AA00A9000000AD -:1003100020143D003E003F004400000001000000AA -:10032000AC00AE00AB0000001F143A003B003C00E4 -:100330004300010001000100010001000000010074 -:100340000100000001000100010001002803540029 -:1003500068006500200050006C0061006E006300C2 -:100360006B0020004B006500790062006F006100A7 -:100370007200640000002C034F00720074006800DB -:100380006F006C0069006E00650061007200200063 -:100390004B006500790062006F006100720064002C -:1003A000730000000403090409026D00040100A0A9 -:1003B000FA090400000103010100092111010001F3 -:1003C000223F000705810308000A09040100010318 -:1003D000010200092111010001224D0007058203DD -:1003E00008000A09040200010300000009211101AC -:1003F00000012236000705830308000A09040300F0 -:100400000103000000092111010001223900070544 -:1004100084031000011201100100000008EDFE60CD -:100420006001000102000105010906A1010507198B -:10043000E029E715002501950875018102050819D5 -:100440000129059505750191029501750391010535 -:10045000071900297715002501957875018102C0DB -:1004600005010980A101850216010026B7001A01C5 -:10047000002AB700751095018100C0050C0901A183 -:10048000018503160100269C021A01002A9C0275B0 -:100490001095018100C005010902A1010901A10017 -:1004A0000509190129051500250195057501810228 -:1004B0009501750381010501093009311581257FF9 -:1004C00095027508810609381581257F9501750803 -:1004D0008106050C0A38021581257F950175088172 -:1004E00006C0C005010906A101050719E029E715A5 -:1004F00000250195087501810295017508810105A6 -:100500000819012905950575019102950175039159 -:10051000010507190029FF150025FF9506750881BB -:1005200000C011241FBECFEFDAE0DEBFCDBF04B69E -:1005300003FE24C080911E0390911F03A09120030D -:10054000B09121038730904BA740B04BB9F4109283 -:100550001E0310921F03109220031092210314BE59 -:1005600084B7877F84BF88E10FB6F89480936000DA -:10057000109260000FBEE0E0F8E3099511E0A0E002 -:10058000B1E0E6ECF9E502C005900D92A03CB107A0 -:10059000D9F713E0A0ECB1E001C01D92AE31B10774 -:1005A000E1F70E94C8110C94E12C0C94000008950E -:1005B000089581E0089508950C94D8020C94D9020E -:1005C0000C94DB020E94AB2823E030E0281B3109A9 -:1005D000220F2093C4010895282F2F988091800026 -:1005E000211108C0877F8093800010928D001092A7 -:1005F0008C001BC0886080938000233019F48FEF3B -:100600009FEF0FC083E090E0821B9109880F991F34 -:100610002FEF3FEFA90102C0569547958A95E2F763 -:10062000CA0190938D0080938C000C94E2020E948A -:10063000E20284E08093C3011092C0010895279ADA -:100640002F988FEF9FEF90938700809386008AE02A -:100650008093800089E1809381000E9414280C948B -:1006600017030E941F036E9A769A0C94D7021F926A -:100670000F920FB60F9211242F933F938F939F9356 -:10068000EF93FF93E091C101F091C201CF01019678 -:100690009093C2018093C1010090C30102C0F695FE -:1006A000E7950A94E2F7EF738091C001823019F464 -:1006B000E03251F404C0813039F4EF3329F48091F1 -:1006C0006F008D7F80936F00F0E0E457FE4FE49160 -:1006D00021E031E0E29FC001E39F900D11240090E2 -:1006E000C40102C0969587950A94E2F790938D0015 -:1006F00080938C00FF91EF919F918F913F912F916B -:100700000F900FBE0F901F90189561110DC0FC0146 -:100710008281882331F085EE0E9441180E946B2867 -:1007200003C085EE0E94091980E090E0089581E001 -:1007300008950C94970308950C9431038091150249 -:10074000882309F448C08091D1019091D20100978B -:1007500079F40E94E8229093D2018093D101809194 -:10076000D30190E0009771F48091D40190E00AC029 -:100770000E94F422209100013091010128173907CD -:1007800040F329C00197880F991F880F991FFC011A -:10079000EB52FE4F60817181828193810E945D0ADC -:1007A000E091D30184E0E89FF0011124EB52FE4F69 -:1007B00060817181828193814FE050E00E94150E2B -:1007C0008091D30190E001966091D40170E00E9485 -:1007D000912C8093D3010C94DC02109217020C949C -:1007E0002A0A0895089581E0809317020C94F20379 -:1007F000089508958F929F92AF92BF92EF92FF92C9 -:100800000F931F93CF93DF93CDB7DEB7A3970FB6A8 -:10081000F894DEBF0FBECDBF7C01FC0100811181C9 -:10082000C8010E94E520B8010E94FC058C01B701B7 -:100830000E949903882309F4CCC10032F0E51F0718 -:1008400041F4F7018281882309F458C00E94790E8F -:10085000C0C10132F0E51F0741F4F701828188230E -:1008600009F44CC00E94820EB4C10232F0E51F07A9 -:1008700051F4F7018281882309F440C00E94750E6B -:100880008111F0CFE3CF0332F0E51F0739F4F70110 -:100890008281882399F10E94F3039BC10432F0E521 -:1008A0001F0739F4F7018281882341F10E94ED038B -:1008B00090C10532F0E51F0749F4F70182818823D2 -:1008C000E9F0809117028111F1CFE5CF0632F0E512 -:1008D0001F0739F4F7018281882381F00E94890E75 -:1008E0000AC00732F0E51F0749F4F7018281882327 -:1008F00029F00E94940E0E94F9036BC180911702A7 -:10090000811105C0F70182818111CFC018C1003E5D -:10091000110579F4F7018281882309F44DC00E9402 -:100920002A0A81E080931602109215021092D401D7 -:1009300050C1023E110559F4F70182818823E1F18B -:100940000E942A0A109216021092150242C1033E1A -:10095000110591F4F7018281882371F10E942A0A1E -:100960001092160281E0809315021092D30110922A -:10097000D2011092D1012DC10235110559F4F701B0 -:100980008281882309F425C18091000190910101A1 -:100990000A970DC00135110579F4F701828188238A -:1009A00009F417C180910001909101010A9690937A -:1009B0000101809300010DC14091040183E2EFE148 -:1009C000F1E0DE01119601900D928A95E1F7F701B1 -:1009D000808121E030E02C0F3D1F280F311DC9011F -:1009E0002091020130910301FC01E20FF31F6081AD -:1009F000772767FD7095640F711D882777FD8095B7 -:100A0000982F0E94B32920E030E040E451E40E9496 -:100A100018294B015C01F701218184E090E0821BE1 -:100A20009109BC01882777FD8095982F0E94B329F2 -:100A30009B01AC01C501B4010E94B0289B01AC012F -:100A400060E070E080E090E40E94262B20E030E03F -:100A50004CED50E40E94C32A4B015C01F7018281F6 -:100A60008823D1F04FE050E0C501B4010E94150E7B -:100A7000809116028823A1F08091D40124E0829F06 -:100A8000F0011124EB52FE4F80829182A282B38248 -:100A90008F5F8093D40104C0C501B4010E945D0A38 -:100AA0000F3F110508F02ECF94C08091D001811125 -:100AB0001FC0043130E5130709F051C00E949B03A9 -:100AC00081E08093D0010E94E8229093CF0180932F -:100AD000CE011092C7011092C9011092C801109264 -:100AE000CB011092CA011092CD011092CC0171C0BD -:100AF0008091CE019091CF010E94F422883C910513 -:100B000070F48091C701E82FF0E0EE0FFF1FE8536B -:100B1000FE4F118300838F5F8093C7015AC0043852 -:100B200080E5180721F00538104501F13AC0F701BA -:100B30008281882341F01092C50182E01EC00438F2 -:100B400030E5130759F58091C501811106C086E291 -:100B50000E94411886E20E94091982E01CC00438F4 -:100B6000F0E51F0741F305381045D9F4F7018281FC -:100B7000882331F01092C60180E20E94581929C0E2 -:100B80008091C601811106C087E20E94411887E268 -:100B90000E94091980E20E945F191BC005381045A8 -:100BA00029F381E08093C5018093C601C701A39614 -:100BB0000FB6F894DEBF0FBECDBFDF91CF911F916E -:100BC0000F91FF90EF90BF90AF909F908F900C94FB -:100BD000DE0280E0A3960FB6F894DEBF0FBECDBF55 -:100BE000DF91CF911F910F91FF90EF90BF90AF9049 -:100BF0009F908F90089508959CE0799FF0011124B3 -:100C000090E3899FE00DF11D1124E60FF11DEE0F19 -:100C1000FF1FE453FE4F859194910895880F991F0B -:100C2000FC01E45BFF4F859194910895880F991F13 -:100C3000FC01E453FE4F8591949108950F931F9307 -:100C4000CF93DF93EC01811521E39207A0F5C11545 -:100C500080E3D80708F0D7C0C83ED105D8F4C03E1D -:100C6000D10508F007C2C83AD10578F4C53AD105D4 -:100C700008F06AC0C130D10509F463C008F4F7C1B7 -:100C8000C430D10508F0F6C1F2C1CB3BD10508F460 -:100C900066C0EDC1C11590E2D90708F0AFC0C1151B -:100CA00021E0D20708F0E6C1C03FD10508F4DFC15A -:100CB0008E0110651FC2C03880E5D80700F5C03727 -:100CC00090E5D90708F0A3C0C11520E5D20709F4C3 -:100CD000ACC050F4CE01905480319F4008F0C7C1A1 -:100CE000DF708E01106A06C2C13080E5D80709F4B2 -:100CF000AEC0C43190E5D90708F4AFC0B8C1C3385D -:100D000020E5D20709F48EC050F4C13890E5D90728 -:100D100009F482C008F083C000E011EDEBC1C031DE -:100D200081E5D80708F4A3C1C11597E5D90708F4F0 -:100D300036C1CE0190578115904108F098C1DF70FF -:100D400093C101E010E0D6C1C53AD10509F494C1C0 -:100D5000C63AD10509F093C102E810E4CBC1C83A04 -:100D6000D10509F48FC1C93AD10509F48EC1CA3A37 -:100D7000D10509F48DC1CB3AD10509F48CC1CC3A27 -:100D8000D10509F48BC1CD3AD10509F48AC1C03B24 -:100D9000D10509F489C1CE3AD10509F488C1CF3A09 -:100DA000D10509F487C1C13BD10509F486C1C23B15 -:100DB000D10509F485C1C33BD10509F484C1C43B05 -:100DC000D10509F483C1C53BD10509F482C1C63BF5 -:100DD000D10509F481C1C73BD10509F480C1C83BE5 -:100DE000D10509F47FC1C93BD10509F47EC1CA3BD5 -:100DF000D10509F47DC100E014E47CC1CE019F70EF -:100E00000E94160678C1DD278E01106C73C1CF7069 -:100E1000DD278E01146D6EC100E010ED6BC100E0A6 -:100E200012ED68C100E013ED65C10E94EC1B0E9449 -:100E30002A0A0E94F1038FEF94E32CE08150904046 -:100E40002040E1F700C000000E94432353C180917D -:100E5000F20281608093F2024DC10E94A4238111AD -:100E600002C00E9480230E94B72390E090931D034C -:100E700080931C03C23080E5D80721F480911C03C5 -:100E8000816086C0C43090E5D90721F480911C03AD -:100E900082607EC0C63020E5D20721F480911C0319 -:100EA000846076C0C83080E5D80719F480911C03AF -:100EB00027C0CA3090E5D90721F480911C038061D6 -:100EC00067C0CC3020E5D20721F480911C038062FA -:100ED0005FC0CE3080E5D80721F480911C03806488 -:100EE00057C0C03190E5D90721F480911C03806878 -:100EF0004FC0C23120E5D20729F480911C038460E1 -:100F0000886046C0C33080E5D80721F480911C0377 -:100F10008E7F3EC0C53090E5D90721F480911C0337 -:100F20008D7F36C0C73020E5D20721F480911C03A5 -:100F30008B7F2EC0C93080E5D80719F480911C033F -:100F400026C0CB3090E5D90721F480911C038F7E19 -:100F50001FC0CD3020E5D20721F480911C038F7D86 -:100F600017C0CF3080E5D80721F480911C038F7B18 -:100F70000FC0C13190E5D90721F480911C038F7710 -:100F800007C0C331D04531F480911C038B7F877F2C -:100F900080931C0380911C030E94BB23ABC08D2F48 -:100FA00099278F70992781309105D9F49E0123707C -:100FB000332702C0880F991F2A95E2F79C688E019B -:100FC00044E0000F111F4A95E1F700271370802BB2 -:100FD000912B53E0CC0FDD1F5A95E1F7C076DD274A -:100FE0002FC08230910531F4DC2FCC278E01016FA8 -:100FF000106A80C08330910569F4CE01837099270F -:1010000001E010E002C0000F111F8A95E2F7C8014D -:101010009C680FC084309105B9F4CE018370992784 -:1010200001E010E002C0000F111F8A95E2F7C8012D -:101030009A6823E0CC0FDD1F2A95E1F7C07ED770B8 -:101040008C010C2B1D2B56C08530910531F4DC2F03 -:10105000CC278E01046F106A4DC0069709F04AC074 -:10106000CF71DD27DC2FCC278E01106243C000E05A -:1010700010E040C08E013EC001E810E43BC003E830 -:1010800010E438C002EE14E435C009EE14E432C0B6 -:101090000AEE14E42FC005EB14E42CC006EB14E4B4 -:1010A00029C007EB14E426C00CEC14E423C00DECBB -:1010B00014E420C003E815E41DC00AE815E41AC0D2 -:1010C00002E915E417C004E915E414C001E216E4CE -:1010D00011C003E216E40EC004E216E40BC005E200 -:1010E00016E408C006E216E405C007E216E402C0F2 -:1010F0000AE216E4C801DF91CF911F910F91089584 -:101100009CE0799FF001112490E3899FE00DF11D8F -:101110001124E60FF11DEE0FFF1FE453FE4F8591E2 -:101120009491803E9105E0F4803C910558F581331F -:10113000910509F46FC048F48932910509F463C040 -:101140008A32910509F46DC072C089339105E9F0C6 -:1011500082389105D1F08533910509F44DC067C0FF -:10116000833E910581F138F4803E9105B9F0823ECD -:101170009105D9F05CC0863E910561F1873E9105ED -:10118000A1F155C00E940E06089520911C0320FD78 -:1011900002C021FF4CC080EE90E049C080911C034A -:1011A00080FFF9CF89E390E042C080911C0382FF69 -:1011B0000EC080911C0384FF03C080E090E037C024 -:1011C00083EE90E034C080911C0382FFF2CF82EE68 -:1011D00090E02DC080911C0383FF0BC080911C0305 -:1011E00084FDEBCF87EE90E022C080911C0383FF4B -:1011F000F5CF86EE90E01BC080911C0385FF07C0F1 -:1012000089E290E014C080911C0385FFF9CF85E34B -:1012100090E00DC080911C0386FF07C08AE290E039 -:1012200006C080911C0386FFF9CF81E390E00E9405 -:101230001E0608950C94E002E82FF0E0E25BFE4FFA -:101240008081E82FEF70F0E082958F7021E030E030 -:10125000A90102C0440F551F8A95E2F740A30895E3 -:101260000F931F93CF93DF9385B7806885BF85B7B2 -:10127000806885BFC3E0D0E001E010E0FE01E25BE2 -:10128000FE4F8081E82FEF70F0E021A182958F70F2 -:10129000A80102C0440F551F8A95E2F7CA01822BAC -:1012A00081A38C2F0E941C09219740F78BE090E0CE -:1012B00061E070E0FC01EE5BFE4F2081E22FEF70F9 -:1012C000F0E042A122952F70DB0102C0AA0FBB1FE4 -:1012D0002A95E2F79D01242B22A3019758F7DF916D -:1012E000CF911F910F910C949C03EF92FF920F935B -:1012F0001F93CF93DF9300E212E0C3E0EE24E39468 -:10130000F12CD5E08C2F0E941C098BE090E040E08E -:1013100050E0FC01EE5BFE4F6081E62FEF70F0E0E5 -:1013200020A130E062956F7002C0359527956A95CF -:10133000E2F720FD09C09701082E02C0220F331FDB -:101340000A94E2F7422B532B019718F7F801929178 -:1013500082918F018417950721F051834083D093A8 -:1013600005018C2F0E941C09C15060F68091050177 -:1013700087FD2CC08150809305018F3F39F08FE9A4 -:101380009FE00197F1F700C0000020C080911E028D -:1013900090911F02909327028093260280911C0255 -:1013A00090911D02909325028093240280911A024D -:1013B00090911B0290932302809322028091180245 -:1013C0009091190290932102809320020E949E0323 -:1013D00081E0DF91CF911F910F91FF90EF900895E1 -:1013E000E82FF0E0EE0FFF1FE05EFD4F808191815E -:1013F000089508950F931F93CF9308E212E0C0E081 -:10140000F801929182918F010E946022C80FF2E050 -:1014100000321F07A9F78C2FCF911F910F910895CC -:101420000E94A423811102C00E9480230E94C9232C -:10143000809307033E9A809171008D7F80937100A5 -:1014400082E0809390008AE18093910081E0809314 -:101450002A02089580912A02811102C00E94100A76 -:1014600010927A0210927902809171008D7F8093A0 -:101470007100809190008F738093900010923C02D5 -:1014800010923B0210927302109274021092750235 -:10149000109276021092720210927102E1E5F2E06F -:1014A000A1E4B2E011921192119211921D921D923B -:1014B00082E0E137F807B1F70895CF92DF92EF921B -:1014C000FF920F931F93CF93DF9320913B02222330 -:1014D00009F484C06B017C0180912A02811102C051 -:1014E0000E94100A01E712E0C7E0D0E0A7019601D0 -:1014F000F80192918291729162918F010E94142958 -:10150000811131C0FE01EE0FFF1FEE0FFF1FEF5ADA -:10151000FD4F1082118212821382DE01AA0FBB1FBF -:10152000AF5BBD4F11961C921E92C730D105E9F0FA -:1015300021964481558166817781408351836283FE -:101540007383148215821682178212968D919C9154 -:10155000139711969C938E9313961C921E9212973A -:1015600034961296E2CF219708F6809179029091F5 -:101570007A02019797FD05C090937A0280937902D1 -:1015800004C010927A0210927902809179029091AF -:101590007A0220917702309178022817390724F0D7 -:1015A0001092780210927702892BC1F48091710019 -:1015B0008D7F80937100809190008F738093900055 -:1015C00010927302109274021092750210927602B9 -:1015D000109272021092710210923B02DF91CF9131 -:1015E0001F910F91FF90EF90DF90CF9008951F9281 -:1015F0000F920FB60F9211244F925F926F927F92CB -:101600008F929F92AF92BF92CF92DF92EF92FF9212 -:101610002F933F934F935F936F937F938F939F93FA -:10162000AF93BF93CF93DF93EF93FF9380913B02F0 -:10163000882309F49BC1C0917902D0917A021C16CB -:101640001D060CF093C140902B0250902C0260902C -:101650002D0270902E0220E030E0A901C301B201FA -:101660000E94BF2A18160CF065C0C130D10509F4DC -:1016700052C08091770290917802BE010E94912C15 -:101680007C01909378028093770280903D02909045 -:101690003E02A0903F02B090400220E030E040E8DF -:1016A0005FE3C501B4010E94B02860933D027093CE -:1016B0003E0280933F0290934002F701EE0FFF1F1E -:1016C000EE0FFF1FEF5AFD4FA30192016081718160 -:1016D000828193810E94182920E030E040E05EE39F -:1016E0000E94C32A9B01AC01C501B4010E94BF2A1C -:1016F00018168CF4C7010196BE010E94912C90939C -:1017000078028093770210923D0210923E0210926E -:101710003F0210924002E0917702F0917802EE0FC2 -:10172000FF1FEE0FFF1FEF5AFD4F60817181828115 -:101730009381D0C0C0907302D0907402E090750283 -:10174000F090760220E030E0A901C701B6010E94C6 -:1017500014292197882309F4A2C0FE01EE0FFF1F70 -:10176000EE0FFF1FEF5AFD4F80809180A280B38063 -:10177000A5019401C701B6010E94142987FF31C059 -:10178000A501940160E070E08CED93EC0E941829B3 -:1017900020E030E040E451E40E94182920E030E0ED -:1017A00040E05FE30E94C32A9B01AC0160E070E06F -:1017B00080E090E40E94262B9B01AC01C501B4019E -:1017C0000E94C32A9B01AC01C701B6010E941429E3 -:1017D00087FF07C0A701960160E070E08CED93E4FD -:1017E00039C0A5019401C701B6010E94BF2A18168D -:1017F0000CF055C0A501940160E070E08CED93E41D -:101800000E94182920E030E040E451E40E941829A9 -:1018100020E030E040E05FE30E94C32A9B01AC017E -:1018200060E070E080E090E40E94262B9B01AC0118 -:10183000C501B4010E94C32A9B01AC01C701B601D6 -:101840000E94BF2A18165CF5A701960160E070E0BF -:101850008CED93EC0E94182920E030E040E451E444 -:101860000E94182920E030E040E05FE30E94C32A94 -:101870009B01AC0160E070E080E090E40E94262BC8 -:101880009B01AC01C701B6010E94C32A6093730299 -:1018900070937402809375029093760213C0FE01D8 -:1018A000EE0FFF1FEE0FFF1FEF5AFD4F808191815A -:1018B000A281B3818093730290937402A093750206 -:1018C000B0937602609173027091740280917502F8 -:1018D0009091760220912802309129022F3F4FEFFC -:1018E000340731F02F5F3F4F3093290220932802B5 -:1018F0000E949F0E6B017C0120E034E244EF51E432 -:101900000E94142987FF08C086EFC82E88E2D82ECF -:1019100084EFE82E81E4F82E20E030E040E051E44E -:10192000C701B6010E94C32A9B01AC0160E074E2CA -:1019300084E79BE40E9418296B017C010E948529A1 -:1019400070939700609396002091060130910701F3 -:101950004091080150910901C701B6010E94C32AB4 -:101960000E948529709399006093980080913C02B1 -:10197000882309F433C1C0903702D0903802E09038 -:101980003902F0903A0220E030E0A901C701B60127 -:101990000E94BF2A1816D4F580912802909129023E -:1019A0008F3F2FEF920729F00196909329028093A1 -:1019B0002802C701B6010E949F0E20E030E040E0FF -:1019C00051E40E94C32A9B01AC0160E074E284E709 -:1019D0009BE40E9418296B017C010E948529709369 -:1019E0009700609396002091060130910701409185 -:1019F000080150910901C701B6010E94C32A0E9443 -:101A00008529709399006093980008C01092970000 -:101A100010929600109299001092980060913102F5 -:101A2000709132026F5F7F4F709332026093310288 -:101A3000209196003091970080E090E0232BF1F008 -:101A4000C0919600D09197000E94B1296B017C0152 -:101A5000BE0180E090E00E94B1299B01AC01609141 -:101A600033027091340280913502909136020E94C7 -:101A7000182920E03FEF4FE757E410C00E94B1293A -:101A80006B017C0120E030EE4FEF54E460913302B3 -:101A90007091340280913502909136020E94C32ADF -:101AA0009B01AC01C701B6010E94BF2A87FD96C009 -:101AB00080912F028F5F80932F0290E0209103038B -:101AC0003091040382179307A0F080910E038823BE -:101AD00019F010922F020DC0809171008D7F8093BC -:101AE0007100809190008F738093900010923C025F -:101AF0007DC080913002C0912F02811128C0C0901A -:101B00000803D0900903E0900A03F0900B0320E053 -:101B100030E0A901C701B6010E94BF2A1816BCF423 -:101B200081E08093300210923702109238021092B6 -:101B3000390210923A02C0923302D0923402E092FB -:101B40003502F0923602C150C0932F0243C010926A -:101B500030021092290210922802E0910503F091C0 -:101B6000060348E0C49FE00DF11D1124808191819E -:101B7000A281B3818093370290933802A0933902F7 -:101B8000B0933A0220E030E040E85EE36481758182 -:101B9000868197810E94C32A6B017C0180910A0192 -:101BA000682F70E080E090E00E94B12920E030E0F2 -:101BB00048EC52E40E9418299B01AC01C701B60110 -:101BC0000E94C32A609333027093340280933502DB -:101BD00090933602109232021092310280910703E4 -:101BE00080FD04C010923C0210923B02FF91EF91E5 -:101BF000DF91CF91BF91AF919F918F917F916F9125 -:101C00005F914F913F912F91FF90EF90DF90CF9098 -:101C1000BF90AF909F908F907F906F905F904F900C -:101C20000F900FBE0F901F901895CF92DF92EF92FA -:101C3000FF92CF93DF936B017C01EA0180912A022E -:101C4000811102C00E94100A8091070380FF46C0E4 -:101C50008091790290917A0208970CF03FC08091B0 -:101C600071008D7F8093710080913C0281110E94F0 -:101C70002A0A81E080933B021092290210922802E6 -:101C800020E030E0A901C701B6010E94BF2A181662 -:101C9000DCF48091790290917A02FC01EE0FFF1F33 -:101CA000EE0FFF1FEF5AFD4FC082D182E282F38216 -:101CB000FC01EE0FFF1FEF5BFD4FD183C083019648 -:101CC00090937A0280937902809171008260809370 -:101CD000710080919000806880939000DF91CF9197 -:101CE000FF90EF90DF90CF9008958091070381706F -:101CF0000895809107038160809307030E94CD239C -:101D00000C94F803809107038E7F809307030C9453 -:101D1000CD2380917B0290E0019666E070E00E9406 -:101D2000912C80937B02089580917B0290E0019733 -:101D300066E070E00E94912C80937B0208958F9260 -:101D40009F92AF92BF92CF92DF92EF92FF920F934A -:101D50001F93CF93DF936B017C01C0912802D09138 -:101D60002902BE0180E090E00E94B1294B015C0194 -:101D7000A701960160E070E08CE594E40E941829C8 -:101D80009B01AC01C501B4010E94C32A0E948529B0 -:101D900020917B02233009F473C028F4222351F0F0 -:101DA0002130E9F02CC1243009F4A0C0253009F419 -:101DB000E0C025C180E090E0A0E0BFE38093060191 -:101DC00090930701A0930801B093090110922B0290 -:101DD00010922C0210922D0210922E0210C110921D -:101DE0002B0210922C0210922D0210922E026431BE -:101DF000710540F46A30710560F520E030E040E89C -:101E00005EE32BC0693C710508F0AAC080E090E059 -:101E10000E94B12920E030E040EA51E40E94AF285E -:101E200020E030E044E353E40E9418299B01AC0118 -:101E30000E94C32A20E030E040E05EE30E94C32A13 -:101E40009B01AC0160E070E080E09EE30E94AF285F -:101E500044C020E030E040E05FE3C701B6010E94EB -:101E6000C32A6B017C0180E090E0A0E0BEE3809398 -:101E7000060190930701A0930801B0930901BFC028 -:101E800010922B0210922C0210922D0210922E0210 -:101E90004AE0469F9001479F300D1124C90168EB2D -:101EA0007BE00E947D2CBC016C5D754077FF03C018 -:101EB000719561957109882777FD8095982F0E940B -:101EC000B3292EE333EC4EE259E30E94C32A20E00B -:101ED00030E040EC5EE30E94B0286093060170930E -:101EE0000701809308019093090189C010922B0289 -:101EF00010922C0210922D0210922E02CE018370AD -:101F00009927892BE1F0BE016170772780E090E08E -:101F10000E94B12920E030E040E05EE30E94C32A45 -:101F200020E030E040E45FE30E94B02860930601C7 -:101F30007093070180930801909309010CC080E021 -:101F400090E0A0E0BFE38093060190930701A09387 -:101F50000801B0930901C770DD27CD2B09F04FC0F0 -:101F600010920601109207011092080110920901C7 -:101F700046C010922B0210922C0210922D02109249 -:101F80002E0200E010E020E03FE3009306011093F2 -:101F9000070120930801309309016739710578F131 -:101FA00080E090E00E94B12920E030E047E153E476 -:101FB0000E94AF2820E030E04AE754E40E9418294C -:101FC00020E030E048E452E40E94C32A20E030E000 -:101FD00040EA51E40E94F5290E948029660F771F8C -:101FE000660F771FFB01EE5AFE4F2081318142813F -:101FF0005381C701B6010E94C32A6B017C01C7014E -:10200000B601DF91CF911F910F91FF90EF90DF907C -:10201000CF90BF90AF909F908F90089580918C0249 -:102020000895CF93DF9300D01F92CDB7DEB79C0108 -:1020300080911303843019F593E099833B832A83BD -:102040009093E9008FEF9091E800815095FD06C0D4 -:1020500095ED9A95F1F700008111F5CF8091E80098 -:1020600085FF0DC040E050E063E070E0CE010196D6 -:102070000E9472128091E8008E778093E8000F90A2 -:102080000F900F90DF91CF910895CF93DF9300D001 -:102090001F92CDB7DEB720911303243021F522E043 -:1020A00029839B838A8383E08093E9008FEF90915B -:1020B000E800815095FD06C095ED9A95F1F7000076 -:1020C0008111F5CF8091E80085FF0DC040E050E020 -:1020D00063E070E0CE0101960E9472128091E800E8 -:1020E0008E778093E8000F900F900F90DF91CF9143 -:1020F0000895209113032430F1F422E02093E900A5 -:102100002FEF3091E800215035FD06C035ED3A95AE -:10211000F1F700002111F5CF2091E80025FF0BC059 -:1021200040E050E065E070E00E9472128091E800AB -:102130008E778093E8000895CF93DF93EC01909120 -:102140001303943009F046C0809115018823D9F01B -:10215000809116018823B9F09093E9008FEF909158 -:10216000E800815095FD06C095E19A95F1F70000D1 -:102170008111F5CF8091E80085FF2CC040E050E050 -:1021800060E170E017C081E08093E9008FEF9091EB -:10219000E800815095FD06C095ED9A95F1F7000095 -:1021A0008111F5CF8091E80085FF14C040E050E038 -:1021B00068E070E0CE010E9472128091E8008E7794 -:1021C0008093E80080E1FE01ACE7B2E001900D925F -:1021D0008A95E1F7DF91CF910895809112038111E3 -:1021E00009C00E9407140E9464148091E200846078 -:1021F0008093E200089510921203089508950895BF -:102200000C94AB2242E061EC81E00E94811342E039 -:1022100061EC82E00E94811342E061EC83E00E9465 -:10222000811342E161EC84E00C94811380911503E9 -:10223000833009F455C030F4813071F0823009F4F4 -:102240008EC008958A3009F47AC08B3009F460C0DA -:10225000893009F09CC020C080911403813A09F0B4 -:1022600096C08091E800877F8093E80080911803F2 -:1022700090911903892B21F460E18CE792E003C06F -:1022800060E080E090E070E00E94BD128091E80084 -:102290008B778093E800089580911403813209F0D0 -:1022A00076C08091180390911903009719F0039755 -:1022B00009F06DC08091E800877F8093E8008091ED -:1022C000E80082FD05C0809113038111F8CF5FC043 -:1022D0008091F10080938C028091E8008B7753C04D -:1022E00080911403813A09F052C0809118039091B3 -:1022F0001903892B09F04BC08091E800877F8093F8 -:10230000E8008091E80080FFFCCF8091150136C085 -:10231000809114038132D9F58091180390911903AB -:10232000892BA9F58091E800877F8093E8000E94BF -:10233000B61380911603809315010C94EC1B8091C9 -:102340001403813221F58091E800877F8093E800B3 -:102350000E94B6138091170380938D020895809197 -:102360001403813AA1F48091E800877F8093E8000C -:102370008091E80080FFFCCF80918D028093F10076 -:102380008091E8008E778093E8000C94B61308954E -:1023900084B7877F84BF88E10FB6F894809360008C -:1023A000109260000FBE90E080E80FB6F894809322 -:1023B0006100909361000FBE0E9459170E9407149C -:1023C0000E9464148091E20084608093E20078941B -:1023D0000E94EA160E945B178BE091E00E940517AD -:1023E00080911303853069F40E946C22809111035F -:1023F0008823B1F30E949A22882391F30E945C12F1 -:10240000EFCF0E946317ECCF292F332723303105FC -:10241000C9F064F42130310581F02230310509F032 -:1024200043C08DE690E028EA33E042C02132310516 -:10243000F1F02232310541F137C082E190E025E12F -:1024400034E036C099278130910541F08230910502 -:1024500041F0892B49F5E4EAF3E005C0E6E7F3E053 -:1024600002C0ECE4F3E0849190E09F0121C064306D -:10247000D8F4E62FF0E0EE0FFF1FE255FE4F20816B -:10248000318189E090E014C0643070F470E0FB01A9 -:10249000EE0FFF1FEA55FE4F20813181FB01EE5503 -:1024A000FE4F808190E004C080E090E020E030E0CA -:1024B000FA0131832083089580E189BD82E189BDDD -:1024C00009B400FEFDCF8091D8008F7D8093D800A5 -:1024D0008091E00082608093E0008091E00081FDC7 -:1024E000FCCF0895CF92DF92EF92FF920F931F934C -:1024F000CF93DF93EC018B016A010E94D513811108 -:1025000033C0C114D10439F0F60180819181081BD8 -:10251000190BC80FD91FE12CF12C0115110519F168 -:102520008091E80085FD16C08091E8008E77809349 -:10253000E800C114D10449F0F60180819181E80ED0 -:10254000F91EF182E08285E00FC00E94D513882336 -:1025500021F30AC089918093F10001501109FFEF26 -:10256000EF1AFF0ADACF80E0DF91CF911F910F9130 -:10257000FF90EF90DF90CF90089520911A03309153 -:102580001B032617370748F06115710539F42091B0 -:10259000E8002E772093E80001C0B90140E0611502 -:1025A0007105A9F120911303222309F443C02530BA -:1025B00009F442C02091E80023FD40C02091E800CA -:1025C00022FD32C02091E80020FFE9CF4091F300C6 -:1025D0002091F20030E0342BFC01CF016115710530 -:1025E00059F02830310540F481918093F100615019 -:1025F00071092F5F3F4FF1CF41E02830310509F0DD -:1026000040E02091E8002E772093E800C8CF4111E8 -:10261000C9CF0AC080911303882361F0853061F02F -:102620008091E80083FD0AC08091E80082FFF2CF2C -:1026300080E0089582E0089583E0089581E00895A0 -:1026400020911A0330911B032617370748F06115B4 -:10265000710539F42091E8002E772093E80001C03D -:10266000B901FC0120E06115710591F1809113031E -:10267000882309F440C0853009F43FC08091E80008 -:1026800083FD3DC08091E80082FD2FC08091E8006D -:1026900080FFE9CF2091F3008091F20090E0922B2F -:1026A0006115710559F08830910540F4249120930B -:1026B000F1003196615071090196F2CF21E008973F -:1026C00009F020E08091E8008E778093E800CBCF7E -:1026D0002111CCCF0AC080911303882361F085308B -:1026E00061F08091E80083FD0AC08091E80082FFDC -:1026F000F2CF80E0089582E0089583E0089581E0BC -:102700000895982F973058F59093E900981739F06D -:102710007091EC002091ED005091F00003C0242F47 -:10272000762F50E021FF19C03091EB003E7F3093AF -:10273000EB003091ED003D7F3093ED003091EB00E8 -:1027400031603093EB007093EC002093ED005093D8 -:10275000F0002091EE0027FF07C09F5FD3CF8F705E -:102760008093E90081E0089580E00895809114034A -:1027700087FF11C08091E80082FD05C0809113039E -:102780008111F8CF11C08091E8008B770BC0809148 -:102790001303882349F08091E80080FFF8CF8091EF -:1027A000E8008E778093E80008952091E40030914E -:1027B000E50095E64091EC00842F817040FF22C037 -:1027C0008091E80080FD1CC080911303882391F064 -:1027D000853091F08091EB0085FD10C04091E400C0 -:1027E0005091E5004217530729F39A01915011F7D0 -:1027F00084E0089582E0089583E0089581E00895DB -:1028000080E008954091E80042FFDECF08950E94E5 -:1028100075140E947D14E0EEF0E080818160808379 -:10282000E8EDF0E080818F77808319BCA7EDB0E000 -:102830008C918E7F8C9380818F7E80831092120387 -:1028400008950F931F93CF93DF930E9475140E94F6 -:102850007D14C8EDD0E088818F7788838881806877 -:10286000888388818F7D888319BC1092130310920E -:102870000F03109211031092100300EE10E0F80104 -:1028800080818B7F808388818160888342E060E0E3 -:1028900080E00E948113E1EEF0E080818E7F8083F2 -:1028A000E2EEF0E0808181608083808188608083B7 -:1028B000F80180818E7F8083888180618883DF91A9 -:1028C000CF911F910F910895E8EDF0E080818F7E08 -:1028D0008083E7EDF0E080818160808384E082BFC7 -:1028E00081E0809312030C942114E8EDF0E08081E4 -:1028F0008E7F80831092E20008951092DA00109289 -:10290000E10008951F920F920FB60F9211242F939A -:102910003F934F935F936F937F938F939F93AF9367 -:10292000BF93EF93FF938091E10082FF0BC08091F2 -:10293000E20082FF07C08091E1008B7F8093E1007D -:102940000E94E9168091DA0080FF1FC08091D800B4 -:1029500080FF1BC08091DA008E7F8093DA00809127 -:10296000D90080FF0DC080E189BD82E189BD09B435 -:1029700000FEFDCF81E0809313030E94ED1005C09F -:1029800019BC109213030E94FB108091E10080FF9C -:1029900019C08091E20080FF15C08091E2008E7F17 -:1029A0008093E2008091E20080618093E200809158 -:1029B000D80080628093D80019BC85E0809313030F -:1029C0000E94FF108091E10084FF30C08091E200FE -:1029D00084FF2CC080E189BD82E189BD09B400FE7D -:1029E000FDCF8091D8008F7D8093D8008091E10049 -:1029F0008F7E8093E1008091E2008F7E8093E200E1 -:102A00008091E20081608093E20080910F0388232F -:102A100011F084E007C08091E30087FD02C081E0EF -:102A200001C083E0809313030E9400118091E100B4 -:102A300083FF29C08091E20083FF25C08091E100DF -:102A4000877F8093E10082E08093130310920F034D -:102A50008091E1008E7F8093E1008091E2008E7F83 -:102A60008093E2008091E20080618093E20042E086 -:102A700060E080E00E9481138091F0008860809384 -:102A8000F0000E94FE10FF91EF91BF91AF919F91D6 -:102A90008F917F916F915F914F913F912F910F9007 -:102AA0000FBE0F901F9018951F920F920FB60F92A6 -:102AB00011242F933F934F935F936F937F938F9343 -:102AC0009F93AF93BF93CF93DF93EF93FF93C09107 -:102AD000E900CF708091EC00D82FD17080FDD0E854 -:102AE0001092E9008091F000877F8093F000789445 -:102AF0000E9498151092E9008091F0008860809300 -:102B0000F000CD2BCF70C093E900FF91EF91DF91E2 -:102B1000CF91BF91AF919F918F917F916F915F9175 -:102B20004F913F912F910F900FBE0F901F901895CE -:102B30001F93CF93DF93CDB7DEB7AA970FB6F89464 -:102B4000DEBF0FBECDBFE4E1F3E088E08E0F9091D1 -:102B5000F10091938E13FBCF0E9416118091E80033 -:102B600083FF1FC18091140390911503492F50E0FA -:102B70004A30510508F015C1FA01EA5AFF4F0C948A -:102B8000A52C803881F0823809F00BC180911803A0 -:102B90008F708093E9008091EB0085FB882780F996 -:102BA0001092E90006C080911003909111039111D9 -:102BB00082609091E800977F9093E8008093F10005 -:102BC0001092F100C8C0282F2D7F09F0EAC0882399 -:102BD00019F0823061F0E5C080911603813009F070 -:102BE000E0C0933009F080E0809311032BC0809106 -:102BF0001603811127C0809118038F7009F4D1C08A -:102C00008093E9002091EB0020FF1CC0933021F459 -:102C10008091EB00806214C09091EB0090619093E2 -:102C2000EB0021E030E0A90102C0440F551F8A9556 -:102C3000E2F74093EA001092EA008091EB0088608E -:102C40008093EB001092E9008091E800877F86C0B6 -:102C50008111A7C0109116031F778091E30080783F -:102C6000812B8093E3008091E800877F8093E800C8 -:102C70000E94B6138091E80080FFFCCF8091E300B2 -:102C800080688093E300111102C082E001C083E0FC -:102C90008093130386C08058823008F082C08091F0 -:102CA0001603909117038C3D53E0950779F583E067 -:102CB0008A838AE289834FB7F894DE01139620E075 -:102CC0003EE051E2E32FF0E050935700E49120FF03 -:102CD00003C0E295EF703F5FEF708E2F90E0EA3017 -:102CE00010F0C79601C0C0968D939D932F5F24313D -:102CF00049F74FBF8091E800877F8093E8006AE240 -:102D000070E0CE0101960E94BD1214C0AE014F5F6B -:102D10005F4F609118030E940412BC01009709F4F0 -:102D200040C09091E800977F9093E80089819A8154 -:102D30000E9420138091E8008B778093E80031C0D7 -:102D4000803879F58091E800877F8093E800809152 -:102D50000F038093F1008091E8008E778093E80064 -:102D60000E94B6131EC081111CC0909116039230B0 -:102D7000C0F48091E800877F8093E80090930F0370 -:102D80000E94B61380910F03811106C08091E30069 -:102D900087FD02C081E001C084E0809313030E949C -:102DA00002118091E80083FF0AC08091E800877FCC -:102DB0008093E8008091EB0080628093EB00AA96FC -:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C -:102DD00008950895CF93809113038823A1F0C091A3 -:102DE000E900CF709091EC00892F817090FD80E810 -:102DF000C82B1092E9008091E80083FD0E9498158D -:102E0000CF70C093E900CF9108959093930280937F -:102E100092020895E0919202F0919302309721F08E -:102E20000190F081E02D099480E00895E0919202F4 -:102E3000F0919302309721F00280F381E02D099404 -:102E40000895E0919202F0919302309721F004806E -:102E5000F581E02D0994089520919002309191021E -:102E60008217930771F09093910280939002E09102 -:102E70009202F0919302309721F00680F781E02DC5 -:102E80000994089520918E0230918F028217930742 -:102E900071F090938F0280938E02E0919202F091F4 -:102EA0009302309721F00084F185E02D0994089574 -:102EB00008950C9458170E94DF220E9430090E9446 -:102EC00065230C9414285F926F927F928F929F9249 -:102ED000AF92BF92CF92DF92EF92FF920F931F9328 -:102EE000CF93DF9300D000D01F92CDB7DEB70E9402 -:102EF00075099DE9C92E92E0D92E03E010E0AA24BD -:102F0000A394B12C502E802F0E94F0094C01F601A1 -:102F1000729062906F016826792661147104A1F4A1 -:102F20000150110978F78FEF89838A831B820E94F1 -:102F3000E8228160782F9D838C8349815A816B813F -:102F40008D810E94131838C08091F20281FD0E9489 -:102F5000F9092BE030E07501022E02C0EE0CFF1CD7 -:102F60000A94E2F7C70186219721892B09F1298369 -:102F70005A828E209F2091E0892809F490E09B835B -:102F80000E94E8228160782F9D838C8349815A8139 -:102F90006B818D810E941318000F111FF801EB56F1 -:102FA000FD4F80819181E826F926F182E08204C0FC -:102FB0002150310980F6B4CF0E944C251091940223 -:102FC0000E940A171817D1F00E940A1780939402E2 -:102FD0000F900F900F900F900F90DF91CF911F9156 -:102FE0000F91FF90EF90DF90CF90BF90AF909F90A8 -:102FF0008F907F906F905F900C941A090F900F90B4 -:103000000F900F900F90DF91CF911F910F91FF9034 -:10301000EF90DF90CF90BF90AF909F908F907F9078 -:103020006F905F900895CF93DF93CDB7DEB72B9766 -:103030000FB6F894DEBF0FBECDBF4F8358876987A8 -:103040007A878B87DE01119686E0FD0111928A95C1 -:10305000E9F785E0FE01379601900D928A95E1F738 -:1030600049815A816B817C818D819E810E948A1E5B -:103070002B960FB6F894DEBF0FBECDBFDF91CF9178 -:103080000895CF93882309F4C2C0C82F823859F419 -:103090000E940A1781FDBBC089E30E9464210E943F -:1030A000312289E30CC0833879F40E940A1780FD2D -:1030B000AEC083E50E9464210E94312283E50E9414 -:1030C000A621CF910C943122843859F40E940A171A -:1030D00082FD9DC087E40E9464210E94312287E422 -:1030E000EECF8CEF8C0F813A48F48C2F0E947C2716 -:1030F00081118DC08C2F0E946421E3CF80E28C0F60 -:10310000883048F4C77081E001C0880FCA95EAF79B -:103110000E94EA21D6CF8BE58C0F833078F4C53A34 -:1031200029F0C63A31F083E890E005C081E890E0EC -:1031300002C082E890E0CF910C942C1788E58C0FA8 -:10314000833108F064C0C83A39F1C93A41F1CA3A4A -:1031500049F1CB3A51F1CC3A59F1CD3A61F1C03B4A -:1031600069F1CE3A71F1CF3A79F1C13B81F1C23BBD -:1031700089F1C33B91F1C43B99F1C53BA1F1C63B39 -:10318000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B99 -:10319000C9F180E090E038C082EE90E035C089EE61 -:1031A00090E032C08AEE90E02FC085EB90E02CC01A -:1031B00086EB90E029C087EB90E026C08CEC90E095 -:1031C00023C08DEC90E020C083E891E01DC08AE828 -:1031D00091E01AC082E991E017C084E991E014C03F -:1031E00081E292E011C083E292E00EC084E292E0BC -:1031F0000BC085E292E008C086E292E005C087E25B -:1032000092E002C08AE292E0CF910C944217CF91F3 -:103210000895882309F44BC0823859F40E940A1794 -:1032200081FF45C089E30E9464210E94312289E325 -:103230000CC0833871F40E940A1780FF38C083E500 -:103240000E9464210E94312283E50E94A6210C94F1 -:103250003122843859F40E940A1782FF28C087E47B -:103260000E9464210E94312287E4EFCF9CEF980FE7 -:10327000913A58F390E2980F983050F4877091E0AB -:1032800001C0990F8A95EAF7892F0E94F021DFCFBC -:103290009BE5980F933020F480E090E00C942C177D -:1032A000885A833120F480E090E00C94421708950E -:1032B000882321F00E94EA210C943122089588236A -:1032C00021F00E94F0210C94312208957F928F9278 -:1032D0009F92AF92BF92CF92DF92EF92FF920F93A5 -:1032E0001F93CF93DF931F92CDB7DEB77C01C62E1D -:1032F000772EFC01058102950F70128111110E9439 -:1033000007220E945D21882379F0112369F080E271 -:103310008C0D883048F082E00E9446210E945D2199 -:1033200091E0D82ED92601C0D12CE72DE295EF707F -:10333000F0E0E05AFF4F0C94A52C872D807F072DDD -:103340000F70882311F00295007F112389F000236C -:1033500009F499C180E28C0D883020F4802F0E94FE -:10336000EA2103C0802F0E94FA210E9431228BC1E2 -:103370008C2D0E940919002309F4C3C180E28C0D31 -:10338000883020F4802F0E94F02103C0802F0E94FB -:1033900000220E943122B5C1872D807F972D9F701A -:1033A000803211F4892F03C0892F8295807FCC2031 -:1033B00021F0F1E0CF16A1F01DC0112339F0002358 -:1033C00019F1013009F50E941A229BC1002319F05E -:1033D000013009F496C189830E941D22898110C1A0 -:1033E000112321F0063008F08CC10EC0053008F022 -:1033F00088C106C1112359F0002331F0F7019581EE -:1034000090FF41C19F7095830E9458197AC1002393 -:1034100009F4F6C03EC1872D86958695837090E0AD -:10342000009719F0019761F06CC1112321F08C2DE8 -:10343000972D937002C080E090E00E942C1761C12C -:10344000112321F08C2D972D937002C080E090E025 -:103450000E94421756C18C2D112319F00E9454244A -:1034600002C00E94BC240E9441254BC1872D83705D -:1034700009F052C0111145C18C2D82958695877037 -:10348000880F880F9C2D9F70892E912CA12CB12C18 -:10349000082E04C0880C991CAA1CBB1C0A94D2F7E5 -:1034A000C4FE14C00FE010E020E030E0B901A80134 -:1034B00004C0440F551F661F771F8A95D2F7CB01B2 -:1034C000BA01609570958095909503C060E070E0BA -:1034D000CB01272D26952695237030E0223031052B -:1034E00069F02330310589F0682979298A299B29D7 -:1034F0002130310571F00E94D21F03C1682979295A -:103500008A299B290E94EE1FFCC00E94D21FC50180 -:10351000B4010E94B61FF5C0112319F0872D8170E8 -:1035200001C08695882309F4ECC08C2D8295869580 -:103530008770880F880F9C2D9F70892E912CA12C4D -:10354000B12C082E04C0880C991CAA1CBB1C0A9420 -:10355000D2F7C4FE14C00FE010E020E030E0B90163 -:10356000A80104C0440F551F661F771F8A95D2F724 -:10357000CB01BA01609570958095909503C060E08D -:1035800070E0CB01272D269526952370422F50E021 -:103590004230510569F04330510589F06829792995 -:1035A0008A299B294130510571F00E94AC20A9C0A5 -:1035B000682979298A299B290E94C820A2C00E94D3 -:1035C000AC20C501B4010E9490209BC08C2D90E0DE -:1035D000FC01E05EF109E531F10508F050C0E05969 -:1035E000FF4F0C94A52C0C2D0F70872D8F7111237C -:1035F00021F00E942920802F07CF0E944A20802F8F -:103600000E945F197EC0112341F0053008F079C097 -:10361000872D8F710E946F2074C0063008F071C032 -:10362000F7CF112339F0872D8F710E94292069C0AF -:103630001123C9F3872D8F710E944A2062C0112384 -:1036400029F0872D8F710E9414205BC00E940A20F0 -:1036500058C0112351F0172D1F71812F0E9429206E -:1036600063E0812F0E943D214CC081E00E944621F1 -:10367000023008F446C082E00E94462142C0112375 -:1036800031F0002381F28C2D0E9441183AC00023B2 -:1036900089F28C2D0E94091934C0472D4F706C2D72 -:1036A000C7010E9485030E942E1F2BC0111129C043 -:1036B000472D4F7050E042305105B9F04CF44115A0 -:1036C000510581F041305105E1F40E943C2819C0B8 -:1036D0004330510569F04430510599F48C2D0E9416 -:1036E0008E280FC00E9425280CC00E94582809C0AF -:1036F0000E946B2806C0472D4F706C2DC7010E9499 -:10370000FB05DD20F9F00E94392180FD1BC0F70187 -:1037100012820E9433210E942920C7010E94B11BFE -:103720000E9433210F90DF91CF911F910F91FF9055 -:10373000EF90DF90CF90BF90AF909F908F907F9051 -:103740000C944A200F90DF91CF911F910F91FF9021 -:10375000EF90DF90CF90BF90AF909F908F907F9031 -:1037600008950F931F93CF93DF93EC018881998184 -:103770002B813C81232BB9F09F3F11F48F3F99F0AF -:10378000CE010E94FA03882371F0688179818A81D1 -:103790000E942F218C010E94E4200E94AB1FB801DF -:1037A000CE010E946619DF91CF911F910F9108956C -:1037B0000E9407220E9417220E94DC210E943122CF -:1037C0000E94F2250E94412580E090E00E942C1783 -:1037D00080E090E00C9442170E94F7210C94D81BD3 -:1037E0000E942421292F22952F7030E02C303105A2 -:1037F0004CF42A3031056CF4225031092230310565 -:10380000A8F407C02C30310569F02F30310551F094 -:103810000DC0803F69F018F4803E40F409C0843F39 -:1038200029F406C093FB882780F9089580E0089565 -:1038300081E00895CF93DF9300D000D01F92CDB7E1 -:10384000DEB70F900F900F900F900F90DF91CF91F8 -:103850000895CF93DF9300D000D000D0CDB7DEB76E -:1038600026960FB6F894DEBF0FBECDBFDF91CF9185 -:1038700008951F93CF93DF93C0919D0216E080912E -:103880009E02C81799F0D0E01C9FF0011D9FF00D1B -:103890001124E156FD4F4081518162817381848101 -:1038A00095810E94291C2196C770E9CFDF91CF91A5 -:1038B0001F9108954091CF025091D0026091D102A2 -:1038C0007091D2028091D3029091D4020C94291C61 -:1038D0008091D40282958F7009F054C08091D102FA -:1038E000882309F44FC080919D02A0919E026091AF -:1038F000CF027091D0024091D2025091D302B6E033 -:103900008A1709F43FC090E041155105C1F17F3F8E -:1039100011F46F3FA1F1B89FF001B99FF00D112490 -:10392000E156FD4F218172132AC02081621327C006 -:103930002281211124C0238134812417350710F4FA -:1039400021503109241B350B283C3105C0F420914E -:10395000D4022F7020612093D40226E0289FF0012A -:10396000299FF00D1124EC55FD4F80818F708061EF -:1039700080838FEC92E00E94B11B0C94391C01965D -:103980008770BECF0895CF92DF92EF92FF920F9390 -:103990001F93CF93DF93CDB7DEB762970FB6F8943E -:1039A000DEBF0FBECDBF8C0185E0F801DE011D96A4 -:1039B00001900D928A95E1F7D8014C9111965C9196 -:1039C000119712966C9112971396CD90DC901497E4 -:1039D0003091CF027091D0028091D2029091D302A7 -:1039E000009709F46BC17F3F19F43F3F09F466C1AA -:1039F000E090D102EE2009F4C0C02091D402C81694 -:103A0000D90628F0F601E81BF90BCF0104C0809518 -:103A100090958C0D9D1DFF24F394883C910578F0C2 -:103A2000F12C207F09F0C6C07C2DD98AC88A8989EB -:103A30000E941A1C8FEC92E00E94B11BB1C0822F31 -:103A4000807F09F046C0751314C0341312C0611191 -:103A500010C02F7020612093D4020E945A1C8FEC5A -:103A600092E00E94B11B8091D402D80115968C93EC -:103A70002EC0CD2819F15F3F11F44F3FF9F0F62E1B -:103A800061111CC080919D0220919E0236E0821738 -:103A900009F45AC090E0389FF001399FF00D1124CD -:103AA000E156FD4F7181571306C07081471303C063 -:103AB0007281711103C001968770E9CFF62E6623DB -:103AC00009F418C18091D40281608093D402F12C52 -:103AD00011C1751308C0341306C0611104C0809170 -:103AE000D402D801C3C04D875E878D859E856A8BC1 -:103AF0000E94F01B6A898823E1F16623D1F12091AD -:103B0000D402822F82958F7090E0029774F080919A -:103B1000CF029091D00298878F831986DB86CA8660 -:103B20002C87CE0107960E94B11B86E0F801AFEC0E -:103B3000B2E001900D928A95E1F70E94681C0E9404 -:103B40005A1CFF24F394D6C04D875E878D859E85D1 -:103B50000E942421292F22952F7030E02230310538 -:103B60000CF0BCC09F7009F0B6C0805E883008F4CD -:103B7000C1C0C8010E94B11BE4CFC816D90608F421 -:103B800053C0F601E81BF90BCF01883C910508F4FE -:103B900050C0F12C7C2DD98AC88A89890E941A1CB0 -:103BA000EFECF2E086E0DF011D928A95E9F70E94D2 -:103BB0005A1CA0C0751314C0341312C0611110C078 -:103BC0008091D402F8018583C8010E94B11B86E070 -:103BD000EFECF2E0DF011D928A95E9F7FE2C8AC036 -:103BE0004D875E878D859E856A8B0E94F01B6A8952 -:103BF000882309F4BECF662309F4BBCF2091D402F9 -:103C0000822F82958F7090E002970CF48ECF809176 -:103C1000CF029091D0029A8389831B82DD82CC826D -:103C20002E83CE0101967FCF809590958C0D9D1DA2 -:103C3000ACCFF62E662309F49CCF75132EC0341337 -:103C40002CC02091D40220FD1FC0822F82958F703E -:103C5000D9F0D80115962C9315978F3049F08F5FC6 -:103C6000982F9295907F822F8F70892B15968C9329 -:103C7000C8010E94B11B86E0F801AFECB2E00190F0 -:103C80000D928A95E1F793CF86E0F801AFECB2E0B0 -:103C900001900D928A95E1F72DC04D875E878D8545 -:103CA0009E850E94F01B811140CF8091D4028160DB -:103CB0008093D402C8010E94B11B1CC0662309F482 -:103CC00058CF4D875E878D859E850E94F01B882387 -:103CD00009F44FCF2ACF811148CF0CC024303105D1 -:103CE0000CF047CF9F7009F440CFF8019581907F89 -:103CF00009F03BCF8F2D62960FB6F894DEBF0FBE52 -:103D0000CDBFDF91CF911F910F91FF90EF90DF908A -:103D1000CF9008951F93CF93DF93CDB7DEB72C9745 -:103D20000FB6F894DEBF0FBECDBF4F8358876987AB -:103D30007A878B879C87CE0107960E94C31C8823B5 -:103D400069F08F8198852A853B85232BF1F19F3F70 -:103D500009F063C08F3F09F060C037C086E0FE0104 -:103D60003796DE01119601900D928A95E1F76F81E9 -:103D70007885EA85FB85309741F17F3F11F46F3FED -:103D800021F120919E0230E0C901019687709927A8 -:103D900040919D0250E08417950709F447C069835C -:103DA0007A83FD83EC8396E0929FD001939FB00DC0 -:103DB0001124A156BD4FFE01319601900D929A95A6 -:103DC000E1F780939E020E94391C16E080919D02CB -:103DD00090919E028917C1F1189FC001112481564C -:103DE0009D4F0E94C31C882379F1E0919D021E9F84 -:103DF000F0011124E156FD4F4081518162817381B0 -:103E0000848195810E94291C80919D0290E00196F9 -:103E10008770992780939D02D9CF4F8158856985F6 -:103E20007A858B859C850E94291CCFCF0E94EC1B34 -:103E300010929E0210929D02EFECF2E086E0DF010C -:103E40001D928A95E9F7C1CF2C960FB6F894DEBF84 -:103E50000FBECDBFDF91CF911F910895EF92FF92DA -:103E60000F931F93CF93DF938C01009709F46CC0DD -:103E7000F12CEE24E394E8012196F8018491843733 -:103E800040F4843008F051C0813081F0823019F163 -:103E90005BC0853709F444C0A8F19CE7980F9037C0 -:103EA00008F052C08F770E94091941C00E5F1F4F62 -:103EB000FE01C49180E28C0F883048F4C7708E2DCB -:103EC00001C0880FCA95EAF70E940A2214C08C2FFD -:103ED0000E9441182DC00E5F1F4FFE01C49180E269 -:103EE0008C0F883058F4C7708E2D01C0880FCA958A -:103EF000EAF70E9410220E9431221AC08C2F0E94E1 -:103F0000091916C00E5F1F4FFE01C491CC2381F02A -:103F10008FE99FE00197F1F700C00000C150F6CF94 -:103F20000E5F1F4FFE01F49003C00E9441188E01E6 -:103F30008F2D882309F49FCFEFE9FFE03197F1F748 -:103F400000C000008150F5CFDF91CF911F910F91FC -:103F5000FF90EF90089508956093D9027093DA026C -:103F60008093DB029093DC020C94D81B0F931F9379 -:103F70000091D9021091DA022091DB023091DC022B -:103F8000DC01CB01802B912BA22BB32B8093D90288 -:103F90009093DA02A093DB02B093DC021F910F91A1 -:103FA0000C94D81B0F931F930091D9021091DA0241 -:103FB0002091DB023091DC02DC01CB0180239123D4 -:103FC000A223B3238093D9029093DA02A093DB0259 -:103FD000B093DC021F910F910C94D81B0F931F9389 -:103FE0000091D9021091DA022091DB023091DC02BB -:103FF000DC01CB0180279127A227B3278093D90228 -:104000009093DA02A093DB02B093DC021F910F9130 -:104010000C94D81B1092D5021092D6021092D7029F -:104020001092D8020C94D81B41E050E060E070E0A0 -:1040300004C0440F551F661F771F8A95D2F740931F -:10404000D5025093D6026093D7027093D8020C9495 -:10405000D81B41E050E060E070E004C0440F551F01 -:10406000661F771F8A95D2F78091D5029091D6026C -:10407000A091D702B091D802482B592B6A2B7B2BE9 -:104080004093D5025093D6026093D7027093D80222 -:104090000C94D81B41E050E060E070E004C0440F95 -:1040A000551F661F771F8A95D2F7409550956095EA -:1040B00070958091D5029091D602A091D702B091CF -:1040C000D802482359236A237B234093D502509377 -:1040D000D6026093D7027093D8020C94D81B41E0AB -:1040E00050E060E070E004C0440F551F661F771F6A -:1040F0008A95D2F78091D5029091D602A091D702ED -:10410000B091D802482759276A277B274093D502C8 -:104110005093D6026093D7027093D8020C94D81BA8 -:104120000F931F930091D5021091D6022091D702D0 -:104130003091D802DC01CB01802B912BA22BB32B29 -:104140008093D5029093D602A093D702B093D80261 -:104150001F910F910C94D81B0F931F930091D502C0 -:104160001091D6022091D7023091D802DC01CB0108 -:1041700080239123A223B3238093D5029093D60268 -:10418000A093D702B093D8021F910F910C94D81B23 -:104190000F931F930091D5021091D6022091D70260 -:1041A0003091D802DC01CB0180279127A227B327C9 -:1041B0008093D5029093D602A093D702B093D802F1 -:1041C0001F910F910C94D81B0895CF92DF92EF921C -:1041D000FF920F931F93CF93DF938C01C090D9026E -:1041E000D090DA02E090DB02F090DC028091D50200 -:1041F0009091D602A091D702B091D802C82AD92AAC -:10420000EA2AFB2ACFE1D0E0D701C6010C2E04C078 -:10421000B695A795979587950A94D2F780FF06C023 -:10422000B8018C2F0E948008019721F4219760F734 -:1042300080E001C08C2FDF91CF911F910F91FF90F3 -:10424000EF90DF90CF900895CF93DF93EC010E9421 -:10425000E520BE010E948008DF91CF910895CB0137 -:104260000E94242108958091DD028595859585958C -:1042700008958091DD028770089598E0899F9001EC -:104280001124262B2093DD020C9429202091DD029D -:10429000809582238093DD02982F977069F430E037 -:1042A000482F552747FD50952417350729F0859548 -:1042B000859585950C944A2008959091DD0297701C -:1042C00081E009F480E0089590911501992321F08F -:1042D00090911601911109C0209117013091180198 -:1042E000F90132969FEF40E01FC0982F9695969562 -:1042F00096959F3050F5E0911701F0911801E90F64 -:10430000F11D877021E030E0A90102C0440F551F64 -:104310008A95E2F7CA019181892B818308959F3F95 -:1043200039F04F5F4E3041F051915813F8CF0DC026 -:104330005111F7CF942FF5CF9F3F39F0F901E90FD5 -:10434000F11D97FDFA9582830895089590911501C6 -:10435000992321F090911601911109C02091170124 -:1043600030911801F9013296205F3F4F1FC0982FFE -:104370009695969596959F30F0F4E0911701F091FF -:104380001801E90FF11D877021E030E0A90102C09A -:10439000440F551F8A95E2F7CA01809591818923C0 -:1043A000818308953196E217F30729F090819813DD -:1043B000F9CF1082F7CF089581E090E0E0911701E6 -:1043C000F0911801E80FF91F1082019680319105D4 -:1043D000A9F708959091F102892B8093F102089535 -:1043E00080959091F10289238093F10208951092B3 -:1043F000F10208959091F002892B8093F0020895C4 -:1044000080959091F00289238093F0020895109294 -:10441000F00208959091EF02892B8093EF020895A6 -:1044200080959091EF0289238093EF020895109276 -:10443000EF0208958093DE0208951092DE0208953F -:104440008091170190911801FC0131969C01205F29 -:104450003F4F80E0919191118F5FE217F307D1F701 -:104460000895E0911701F09118018091F102808385 -:10447000E0911701F091180190818091F002892B51 -:104480008083E0911701F091180190818091EF02F3 -:10449000892B80838091DE02882361F0E0911701EF -:1044A000F09118019081892B80830E942022811134 -:1044B0001092DE0280911701909118010C9416174A -:1044C00020E0009739F0AC01415051098423952335 -:1044D0002F5FF7CF822F089580911303843039F135 -:1044E0001092F30220E488E190E00FB6F894A895CA -:1044F000809360000FBE2093600080E00E94EC0279 -:1045000080E00E941A0983B7817F846083BF83B7EC -:10451000816083BF7894889583B78E7F83BF88E15D -:104520000FB6F89480936000109260000FBE08955B -:104530000895089580E00E94EC020E9498220E9453 -:1045400075090E9499220E94FA0991E0811101C027 -:1045500090E0892F08950E94EC1B80E00E94EC02FD -:104560000E9414280E940A170C941A091F920F9295 -:104570000FB60F9211248F939F93AF93BF938091A7 -:10458000F302811113C08091F4029091F502A09181 -:10459000F602B091F7024196A11DB11D8093F4027D -:1045A0009093F502A093F602B093F702BF91AF91FA -:1045B0009F918F910F900FBE0F901F90189582E0E2 -:1045C00084BD93E095BD9AEF97BD80936E000895EA -:1045D0002FB7F8948091F4029091F502A091F60221 -:1045E000B091F7022FBF0895CF92DF92EF92FF9222 -:1045F0000F931F932FB7F8944091F4025091F50256 -:104600006091F6027091F7022FBF6A017B01EE24E0 -:10461000FF248C0120E030E0C016D106E206F3064C -:1046200010F4415051099A01281B390BC9011F91FF -:104630000F91FF90EF90DF90CF9008951F920F920F -:104640000FB60F9211248F939F93AF93BF938091D6 -:10465000F4029091F502A091F602B091F702019652 -:10466000A11DB11D8093F4029093F502A093F60270 -:10467000B093F702BF91AF919F918F910F900FBEB2 -:104680000F901F9018950E940714F8942FEF87EA57 -:1046900091E6215080409040E1F700C0000087E0A3 -:1046A00090EBDC0180931E0390931F03A0932003E3 -:1046B000B09321039CE088E10FB6F894A89580930D -:1046C00060000FBE90936000FFCF0E94A423811171 -:1046D00002C00E9480230E94AF238093F2020E94B6 -:1046E000B72380931C0387FB882780F980931601EA -:1046F0000E94B323682F70E080E090E00C94AC1F20 -:104700006DEE7EEF80E090E00E94CB2C60E082E0D6 -:1047100090E00E94B92C60E083E090E00E94B92C08 -:1047200060E084E090E00E94B92C60E085E090E0D9 -:104730000E94B92C60E086E090E00E94B92C6FEFF7 -:1047400087E090E00C94B92C80E090E00E94B32CBC -:1047500021E08D3E9E4F09F020E0822F089582E0F7 -:1047600090E00C94AB2C83E090E00C94AB2C84E0B4 -:1047700090E00C94AB2C682F84E090E00C94B92C62 -:1047800086E090E00C94AB2C682F86E090E00C94CF -:10479000B92C87E090E00C94AB2C682F87E090E078 -:1047A0000C94B92C8091FA0280FF0BC060911C011F -:1047B00085E0689FB001112475956795759567959B -:1047C0002BC081FF09C060911C0185E0689FB0018A -:1047D00011247595679520C082FF07C060911C0168 -:1047E00085E0689FB001112417C09091FB029923C6 -:1047F000D1F060911B01961788F720911C0185E08C -:10480000289F90011124929FA001939F500D112485 -:1048100070E0CA010E94912C6038710540F4611566 -:10482000710539F002C065E070E0862F08958FE7CA -:10483000089581E008958091FA0280FF08C0609198 -:104840001A0170E0759567957595679521C081FF90 -:1048500006C060911A0170E07595679519C082FFD6 -:1048600004C060911A0170E010C09091FB0299237E -:10487000C1F0609119019617A0F780911A01899FE4 -:10488000C001112470E00E94912C6038710528F459 -:104890006115710521F0862F08958FE7089581E055 -:1048A000089561E070E0F4CF803F21F40E94D223AC -:1048B000819504C0813F29F40E94D2238093FE0297 -:1048C0000895823F21F40E94D223819504C0833F42 -:1048D00029F40E94D2238093FD020895893F19F4A0 -:1048E0000E941B2405C08A3F31F40E941B2481953D -:1048F0008093FF0208958B3F21F40E941B24819531 -:1049000004C08C3F29F40E941B2480930003089567 -:10491000843F21F48091FC02816017C0853F21F41F -:104920008091FC02826011C0863F21F48091FC02DC -:1049300084600BC0873F21F48091FC02886005C031 -:10494000883F31F48091FC0280618093FC020895DD -:104950008D3F21F48091FA0281600BC08E3F21F4DB -:104960008091FA02826005C08F3F29F48091FA029B -:1049700084608093FA020895803F39F48091FE02AA -:1049800087FF6CC01092FE0269C0813F29F48091BC -:10499000FE021816BCF362C09091FD02823F29F41A -:1049A00097FF5CC01092FD0259C0833F19F419169D -:1049B000CCF354C0893F41F48091FF0218160CF0EB -:1049C0004DC01092FF024AC08A3F29F48091FF0235 -:1049D00087FF44C0F6CF8B3F39F48091000387FFF7 -:1049E0003DC0109200033AC08C3F29F4809100032F -:1049F0001816BCF333C0843F21F48091FC028E7FF3 -:104A000017C0853F21F48091FC028D7F11C0863F45 -:104A100021F48091FC028B7F0BC0873F21F48091B1 -:104A2000FC02877F05C0883F31F48091FC028F7EB5 -:104A30008093FC0213C08D3F21F48091FA028E7F97 -:104A40000BC08E3F21F48091FA028D7F05C08F3F0D -:104A500029F48091FA028B7F8093FA028091FD0203 -:104A600081110EC08091FE0281110AC08091FF0267 -:104A7000811106C080910003811102C01092FB02D7 -:104A800008958CEF92E00E9421170E94E8229093F3 -:104A9000F9028093F80208951F93CF93DF938091DA -:104AA000F8029091F9020E94F422AC019091FB026D -:104AB000992321F020911D0130E006C020911E01B4 -:104AC0008AE0289F900111244217530708F486C0FA -:104AD0008091FD02C091FE02D091FF02109100036F -:104AE000811107C0C11176C0D11174C0111172C0FB -:104AF00075C09F3F19F09F5F9093FB02181624F436 -:104B00000E94D2238093FD028091FD0287FF05C0A1 -:104B10000E94D22381958093FD021C1624F40E94EA -:104B2000D2238093FE028091FE0287FF05C00E947F -:104B3000D22381958093FE026091FD02662339F1B4 -:104B4000C091FE02CC2319F1772767FD7095872F5E -:104B5000972F0E94B32923E333E343E35FE30E94EB -:104B6000C32A0E9480296093FD026C2F772767FD7E -:104B70007095872F972F0E94B32923E333E343E3F4 -:104B80005FE30E94C32A0E9480296093FE021D16E3 -:104B900024F40E941B248093FF028091FF0287FF70 -:104BA00005C00E941B2481958093FF02111624F4F6 -:104BB0000E941B24809300038091000387FF05C09F -:104BC0000E941B24819580930003DF91CF911F9158 -:104BD0000C9441259F3F09F08ECF96CFDF91CF9166 -:104BE0001F910895ECEFF2E085E0DF011D928A95B8 -:104BF000E9F71092FB021092FA020895833081F1D6 -:104C000028F4813059F08230D1F00895853009F4CC -:104C100049C0B8F1863009F456C0089580911E014C -:104C2000262F30E0280F311D2F3F310524F4680F67 -:104C300060931E0108958FEF80931E010895809167 -:104C40001D01262F30E0280F311D2F3F310524F4A0 -:104C5000680F60931D0108958FEF80931D010895E3 -:104C600080911C01262F30E0280F311D2F3F310588 -:104C700024F4680F60931C0108958FEF80931C014A -:104C8000089580911B01262F30E0280F311D2F3F02 -:104C9000310524F4680F60931B0108958FEF809312 -:104CA0001B01089580911A01262F30E0280F311D35 -:104CB0002F3F310524F4680F60931A0108958FEF98 -:104CC00080931A01089580911901262F30E0280F52 -:104CD000311D2F3F310524F4680F609319010895A9 -:104CE0008FEF809319010895833011F128F48130FA -:104CF00049F0823091F00895853081F120F18630BD -:104D0000C1F1089580911E01681720F4861B8093DD -:104D10001E01089510921E01089580911D016817CB -:104D200020F4861B80931D01089510921D010895A3 -:104D300080911C01681720F4861B80931C01089544 -:104D400010921C01089580911B01681720F4861BA6 -:104D500080931B01089510921B01089580911A0100 -:104D6000681720F4861B80931A01089510921A0187 -:104D7000089580911901681720F4861B809319010A -:104D800008951092190108950F931F93873208F028 -:104D900048C08E3108F08DC0803109F477C008F525 -:104DA000873009F461C068F4863009F09DC08091B5 -:104DB000F202817F8E7F8093F20281E08093020372 -:104DC00094C08B3009F489C08E3009F08DC0809179 -:104DD000F20282FB222720F991E0922790FB82F9D0 -:104DE0005EC0863109F479C060F4813109F07CC07D -:104DF0000E94EC1B9091160181E089278093160197 -:104E00006CC0893109F469C08B3109F06DC08091A3 -:104E1000F20281FB222720F991E0922790FB81F991 -:104E20003EC0883309F459C050F4893209F457C0A0 -:104E3000853309F454C0873209F451C055C0833416 -:104E400009F44DC028F48A3308F44EC0895332C0A7 -:104E5000883409F049C00E94EC1B0E942A0A0E9473 -:104E6000F1030E94432339C09091F202892F80956B -:104E7000817080FB90F929F0966098609093F2021F -:104E800034C0997F977F9093F20227C08091F202FD -:104E900083FB222720F991E0922790FB83F98093EE -:104EA000F2029923D1F08091F20281608093F202A4 -:104EB00014C08D5141E050E060E070E08A019B0138 -:104EC00004C0000F111F221F331F8A95D2F7C9019A -:104ED000B8010E94AC1F0E94EC1B81E006C061E09B -:104EE00070E080E090E0F5CF80E01F910F91089591 -:104EF00080E0089580E00895CF93C82F8091020349 -:104F0000813069F018F08230C9F184C0E091170156 -:104F1000F09118018081823209F07EC007C0E091D3 -:104F20001701F09118018081823261F48C2F0E9468 -:104F30007827811104C08C2F0E94C4261DC081E0F7 -:104F400090E01AC08C2F0E947A27811114C0C431BE -:104F500079F048F4CB3079F0C03109F061C082E0DB -:104F60008093020308C0C93219F0C83321F058C039 -:104F70001092020355C081E0817054C0C93291F192 -:104F800020F5C43179F1B0F4C73009F047C08EE1A3 -:104F900080931E0182E380931D018AE080931C01AF -:104FA00084E180931B0188E080931A0188E280935A -:104FB000190134C0CE51C63088F5EC2FF0E0EA5428 -:104FC000FE4F80818093010329C0CE34E9F020F4A4 -:104FD000CB3421F56AE013C0C13579F0C235F1F464 -:104FE00061E00DC080910103882319F01092010344 -:104FF00015C081E08093020315C061E006C0809176 -:1050000001030E94FE250AC06AE0809101030E940C -:10501000742604C01092020380E004C081E002C044 -:1050200080E0AACFCF9108950E94A423811102C0ED -:105030000E9480230E94C02380931D0380FF02C032 -:10504000869501C080E00C94EC0280911D03982F9E -:105050009695292F30E0233031054CF49F5F990F4E -:105060008170892B816080931D030E94C4238091ED -:105070001D0386950C94EC0280911D03982F969544 -:1050800091F09158990F8170892B80931D038E7F29 -:1050900091E009F490E080911D0390FB80F98093EA -:1050A0001D030E94C42380911D0386950C94EC027D -:1050B00080911D03982F909590FB80F980931D039C -:1050C0000E94C42380911D0380FF02C0869501C009 -:1050D00080E00C94EC0290911D03892F86958F5FE0 -:1050E0008F779170843028F4880F892B80931D036B -:1050F00002C090931D0380911D038E7F91E009F4FF -:1051000090E080911D0390FB80F980931D030E9425 -:10511000C42380911D0386950C94EC0220911D03FD -:10512000922F96958927982F990F822F8170892B1E -:1051300080931D038E7F91E009F490E080911D0320 -:1051400090FB80F980931D030E94C42380911D036E -:1051500086950C94EC0280911D0386950895505815 -:10516000BB27AA270ED0D1C1C2D130F0C7D120F0C1 -:1051700031F49F3F11F41EF4B7C10EF4E095E7FB44 -:105180009FC1E92FD3D180F3BA1762077307840751 -:10519000950718F071F49EF5EBC10EF4E0950B2E17 -:1051A000BA2FA02D0B01B90190010C01CA01A00179 -:1051B0001124FF27591B99F0593F50F4503E68F1D4 -:1051C0001A16F040A22F232F342F4427585FF3CF15 -:1051D000469537952795A795F0405395C9F77EF4E6 -:1051E0001F16BA0B620B730B840BBAF09150A1F02F -:1051F000FF0FBB1F661F771F881FC2F70EC0BA0FB5 -:10520000621F731F841F48F4879577956795B7953C -:10521000F7959E3F08F0B3CF9395880F08F0992734 -:10522000EE0F97958795089527D108F481E00895AA -:105230000CD06BC163D140F05AD130F021F45F3F04 -:1052400019F03EC1511195C14FC170D198F3992306 -:10525000C9F35523B1F3951B550BBB27AA2762173A -:105260007307840738F09F5F5F4F220F331F441F7F -:10527000AA1FA9F333D00E2E3AF0E0E830D09150B7 -:105280005040E695001CCAF729D0FE2F27D0660FA4 -:10529000771F881FBB1F261737074807AB07B0E8E3 -:1052A00009F0BB0B802DBF01FF2793585F4F2AF0F9 -:1052B0009E3F510568F004C15CC15F3FECF3983E2E -:1052C000DCF3869577956795B795F7959F5FC9F756 -:1052D000880F911D9695879597F90895E1E0660FDF -:1052E000771F881FBB1F621773078407BA0720F058 -:1052F000621B730B840BBA0BEE1F88F7E0950895C1 -:1053000004D06894B11135C1089518D188F09F5721 -:1053100090F0B92F9927B751A0F0D1F0660F771F01 -:10532000881F991F1AF0BA95C9F712C0B13081F0E1 -:105330001FD1B1E008951CC1672F782F8827B85F6F -:1053400039F0B93FCCF3869577956795B395D9F742 -:105350003EF490958095709561957F4F8F4F9F4F4C -:105360000895E89409C097FB3EF490958095709558 -:1053700061957F4F8F4F9F4F9923A9F0F92F96E9A1 -:10538000BB279395F695879577956795B795F11116 -:10539000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB3 -:1053A0008F4F9F4F16C0882311F096E911C07723C5 -:1053B00021F09EE8872F762F05C0662371F096E8CE -:1053C000862F70E060E02AF09A95660F771F881F9D -:1053D000DAF7880F9695879597F9089588D018F091 -:1053E00011F08CD038F480C0C4C0E92F9FD0B0F346 -:1053F0005523C9F3E7FB6217730784079507A8F1E4 -:1054000099F3E92FFF2788232AF03197660F771F3A -:10541000881FDAF7952F5527442332F091505040DA -:10542000220F331F441FD2F7BB27E91BF50B621B6A -:10543000730B840BB109C1F222F4620F731F841F36 -:10544000B11D31972AF0660F771F881FBB1FEFCF62 -:10545000915050405AF041F0882332F0660F771F88 -:10546000881F91505040C1F7939530C0869577952D -:1054700067959F5FD9F7F8CF990F0008550FAA0BD2 -:10548000E0E8FEEF16161706E807F907C0F0121657 -:105490001306E407F50798F0621B730B840B950B5A -:1054A00039F40A2661F0232B242B252B21F40895AF -:1054B0000A2609F4A140A6958FEF811D811D08954C -:1054C00097F99F6780E870E060E008959F3F31F0B2 -:1054D000915020F4879577956795B795880F911D22 -:1054E0009695879597F908959FEF80EC089500248D -:1054F0000A941616170618060906089500240A9439 -:1055000012161306140605060895092E0394000CBE -:1055100011F4882352F0BB0F40F4BF2B11F460FF4D -:1055200004C06F5F7F4F8F4F9F4F089557FD905876 -:10553000440F551F59F05F3F71F04795880F97FB57 -:10554000991F61F09F3F79F0879508951216130611 -:105550001406551FF2CF4695F1DF08C01616170640 -:105560001806991FF1CF8695710561050894089575 -:10557000E894BB2766277727CB0197F908957CDF4E -:1055800008F48FEF08950BD0C0CFB1DF28F0B6DF5D -:1055900018F0952309F094CFA7CF1124EACFC6DFE6 -:1055A000A0F3959FD1F3950F50E0551F629FF00136 -:1055B000729FBB27F00DB11D639FAA27F00DB11D8F -:1055C000AA1F649F6627B00DA11D661F829F222718 -:1055D000B00DA11D621F739FB00DA11D621F839F9F -:1055E000A00D611D221F749F3327A00D611D231F75 -:1055F000849F600D211D822F762F6A2F11249F57C3 -:1056000050408AF0E1F088234AF0EE0FFF1FBB1FE5 -:10561000661F771F881F91505040A9F79E3F510584 -:1056200070F04ECFA6CF5F3FECF3983EDCF386954B -:1056300077956795B795F795E7959F5FC1F7FE2B2F -:10564000880F911D9695879597F90895FA01EE0FA9 -:10565000FF1F30962105310599F16115710561F43F -:105660008038BFE39B0749F168949038810561F069 -:105670008038BFEF9B0741F0992342F5FF3FE105DA -:105680003105210511F1E8940894E795D901AA2381 -:1056900029F4AB2FBE2FF85FD0F310C0FF5F70F47A -:1056A000A695E0F7F73950F019F0FF3A38F49F77F4 -:1056B0009F930CD00F9007FC905808953EF014CFA4 -:1056C00060E070E080E89FE308954FE79F775F9385 -:1056D0004F933F932F939ED02F913F914F915F9186 -:1056E00052DF05C019F40EF0EBCE42CFFDCE26DF1F -:1056F000C8F39638C0F707F80F92E8942BE33AEA1C -:1057000048EB5FE74EDF0F920F920F924DB75EB7F7 -:105710000F92C0D0EAE0F1E016D04F915F91EF9187 -:10572000FF91E595EE1FFF1F49F0FE57E068442703 -:10573000EE0F441FFA95E1F74195550B32D00F90CB -:1057400007FE26C00895DF93CF931F930F93FF9218 -:10575000EF92DF927B018C01689405C0DA2EEF0195 -:105760001EDFFE01E894A591259135914591559153 -:10577000AEF3EF0106DDFE019701A801DA9479F797 -:10578000DF90EF90FF900F911F91CF91DF910895DF -:105790009B01AC0160E070E080E89FE349CD90CED2 -:1057A00095CECCDEE8F39923D9F3940F511DBBF3CA -:1057B0009150504094F059F0882332F0660F771FD3 -:1057C000881F91505040C1F79E3F510544F7880F04 -:1057D000911D9695879597F908955F3FACF0983E97 -:1057E0009CF0BB27869577956795B79508F4B160CF -:1057F0009395C1F7BB0F58F711F460FFE8CF6F5FC7 -:105800007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE65 -:10581000689456CE93DEC8F39923D1F3C6F3DF9391 -:10582000CF931F930F93FF92C92FDD2788232AF070 -:105830002197660F771F881FDAF720E030E040E8F5 -:105840005FEB9FE3883920F0803E30F021968F7720 -:1058500087DCE2E3F1E003C083DCEFE5F1E073DF36 -:105860008B01BE01EC01FB2E6F5771097595771FF7 -:10587000880B990B78DD28E132E741E35FE38FDEA7 -:10588000AF2D9801AE01FF900F911F91CF91DF9145 -:1058900078DC3BCEFA01DC01AA0FBB1F9B01AC01F7 -:1058A000BF5728F422273327442750781FC0B75109 -:1058B00088F4AB2F0024469537952795011CA395B6 -:1058C000D2F3002069F0220F331F441FB395DAF39F -:1058D0000DD045CC61307105A0E88A07B94630F497 -:1058E0009B01AC016627772788279078309621F0B6 -:1058F00020833183428353830895AA1BBB1B51E14C -:1059000007C0AA1FBB1FA617B70710F0A61BB70B2F -:10591000881F991F5A95A9F780959095BC01CD01D4 -:10592000089597FB072E16F4009407D077FD09D051 -:105930000E947D2C07FC05D03EF4909581959F4FE9 -:105940000895709561957F4F0895EE0FFF1F0590A4 -:10595000F491E02D0994F999FECF92BD81BDF89A9A -:10596000992780B50895A8E1B0E042E050E00C949A -:10597000D32C262FF999FECF92BD81BDF89A0197BD -:1059800000B4021639F01FBA20BD0FB6F894FA9A87 -:10599000F99A0FBE08950196272F0E94BA2C0C94F5 -:1059A000B92CDC01CB01FC01F999FECF06C0F2BD98 -:1059B000E1BDF89A319600B40D9241505040B8F7CD -:0659C0000895F894FFCFEA -:1059C600640007000CFF0000003F640E109C107975 -:1059D60010451011100101DF022808140A321E00BA -:1059E60002040507090B0C0E1011131517181A1CC3 -:1059F6001D1F2123242628292B2D2F3032343537FD -:105A0600393B1F0F03764F5F6F7F49694379095909 -:105A160053633149803F5D8B803FF8BF803FCAE1C9 -:105A2600803F73ED803FCAE1803FF8BF803F5D8BCA -:105A3600803F3149803F0000803FF16D7F3F75EA2E -:105A46007E3F4C827E3F833F7E3F84287E3F833F5E -:105A56007E3F4C827E3F75EA7E3FF16D7F3F0000C0 -:105A6600803F3F4D3639E304960460042704BA03A9 -:105A7600D303EC0305040102030405060708090025 -:00000001FF diff --git a/keyboard/planck/keymaps/brandon/compiled.hex b/keyboard/planck/keymaps/brandon/compiled.hex deleted file mode 100644 index 2b6bb328df..0000000000 --- a/keyboard/planck/keymaps/brandon/compiled.hex +++ /dev/null @@ -1,1456 +0,0 @@ -:100000000C94C1020C9405030C9405030C94050395 -:100010000C9405030C9405030C9405030C94050340 -:100020000C9405030C9405030C94B2140C948415E1 -:100030000C94E6220C9405030C9405030C94050320 -:100040000C9405030C9467030C9405030C940503AE -:100050000C9405030C944E230C9405030C94050397 -:100060000C9405030C9405030C9405030C940503F0 -:100070000C9405030C9405030C9405030C940503E0 -:100080000C94270B0C9405030C9405030C940503A6 -:100090000C9405030C9405030C9405030C940503C0 -:1000A0000C9405030C9405030C940503F115131629 -:1000B00001171316011758167B160117D016E316F1 -:1000C000CD19CD19FC19FC193B1A5B1AB11BB11BD8 -:1000D000661AB11B161B161B7D1B861BB11BAB1BA7 -:1000E000231B231B231B231B231B231B231B231B20 -:1000F000231B231B231B231B231B231B231B231B10 -:10010000331B411B481B4F1B591B07634236B79BD0 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000029001400EF -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A002B0004001600070009000A0073 -:1001F0000B000D000E000F0033003400E1001D0065 -:100200001B00060019000500110010003600370021 -:1002100038002872E000E200E300025403522C0090 -:100220002C0004525000510052004F0029001400CD -:100230001A00090013000A000D000F0018001C002E -:1002400033002A002B0004001500160017000700D9 -:100250000B00110008000C0012003400E1001D002A -:100260001B000600190005000E00100036003700C4 -:1002700038002872E000E200E300025403522C0030 -:100280002C0004525000510052004F000100420067 -:100290004300440045004B002202380024002500A2 -:1002A00026002A0001003E003F00400041004E00B1 -:1002B0004A002502210022002300310201003A00F9 -:1002C0003B003C003D004C004D0027001E001F007D -:1002D00020000100010001000100010001000100F7 -:1002E000010001005000510052004F0035021E0273 -:1002F0001F022002210222022302240225022602DA -:1003000027022A0001003A003B003C003D003E006D -:100310003F002D022E022F02300231020100400068 -:1003200041004200430044004500005301530030A7 -:100330000050010001000100010001000100010066 -:1003400001000100AB00AA00A900AE0035001E00AC -:100350001F00200021002200230024002500260089 -:1003600027002A0001003A003B003C003D003E000F -:100370003F002D002E002F00300031000100400012 -:100380004100420043004400450000530153003047 -:100390000050010001000100010001000100010006 -:1003A00001000100AB00AA00A900AE002803540020 -:1003B00068006500200050006C0061006E00630062 -:1003C0006B0020004B006500790062006F00610047 -:1003D0007200640000002C034F007200740068007B -:1003E0006F006C0069006E00650061007200200003 -:1003F0004B006500790062006F00610072006400CC -:10040000730000000403090409026D00040100A048 -:10041000FA09040000010301010009211101000192 -:10042000223F000705810308000A090401000103B7 -:10043000010200092111010001224D00070582037C -:1004400008000A090402000103000000092111014B -:1004500000012236000705830308000A090403008F -:1004600001030000000921110100012239000705E4 -:1004700084031000011201100100000008EDFE606D -:100480006001000102000105010906A1010507192B -:10049000E029E71500250195087501810205081975 -:1004A00001290595057501910295017503910105D5 -:1004B000071900297715002501957875018102C07B -:1004C00005010980A101850216010026B7001A0165 -:1004D000002AB700751095018100C0050C0901A123 -:1004E000018503160100269C021A01002A9C027550 -:1004F0001095018100C005010902A1010901A100B7 -:1005000005091901290515002501950575018102C7 -:100510009501750381010501093009311581257F98 -:1005200095027508810609381581257F95017508A2 -:100530008106050C0A38021581257F950175088111 -:1005400006C0C005010906A101050719E029E71544 -:100550000025019508750181029501750881010545 -:1005600008190129059505750191029501750391F9 -:10057000010507190029FF150025FF95067508815B -:1005800000C011241FBECFEFDAE0DEBFCDBF04B63E -:1005900003FE24C080911E0390911F03A0912003AD -:1005A000B09121038730904BA740B04BB9F4109223 -:1005B0001E0310921F03109220031092210314BEF9 -:1005C00084B7877F84BF88E10FB6F894809360007A -:1005D000109260000FBEE0E0F8E3099511E0A0E0A2 -:1005E000B1E0E6E2FAE502C005900D92A03CB10749 -:1005F000D9F713E0A0ECB1E001C01D92AE31B10714 -:10060000E1F70E94F8110C94112D0C94000008954C -:10061000089581E0089508950C9408030C9409034B -:100620000C940B030E94DB2823E030E0281B3109E7 -:10063000220F2093C4010895282F2F9880918000C5 -:10064000211108C0877F8093800010928D00109246 -:100650008C001BC0886080938000233019F48FEFDA -:100660009FEF0FC083E090E0821B9109880F991FD4 -:100670002FEF3FEFA90102C0569547958A95E2F703 -:10068000CA0190938D0080938C000C9412030E94F9 -:10069000120384E08093C3011092C0010895279A49 -:1006A0002F988FEF9FEF90938700809386008AE0CA -:1006B0008093800089E1809381000E9444280C94FB -:1006C00047030E944F036E9A769A0C9407031F9279 -:1006D0000F920FB60F9211242F933F938F939F93F6 -:1006E000EF93FF93E091C101F091C201CF01019618 -:1006F0009093C2018093C1010090C30102C0F6959E -:10070000E7950A94E2F7EF738091C001823019F403 -:10071000E03251F404C0813039F4EF3329F4809190 -:100720006F008D7F80936F00F0E0E457FE4FE491FF -:1007300021E031E0E29FC001E39F900D1124009081 -:10074000C40102C0969587950A94E2F790938D00B4 -:1007500080938C00FF91EF919F918F913F912F910A -:100760000F900FBE0F901F90189561110DC0FC01E6 -:100770008281882331F085EE0E9471180E949B28A7 -:1007800003C085EE0E94391980E090E0089581E071 -:1007900008950C94C70308950C9461038091150289 -:1007A000882309F448C08091D1019091D20100972B -:1007B00079F40E9418239093D2018093D101809103 -:1007C000D30190E0009771F48091D40190E00AC0C9 -:1007D0000E9424232091000130910101281739073C -:1007E00040F329C00197880F991F880F991FFC01BA -:1007F000EB52FE4F60817181828193810E948D0A4C -:10080000E091D30184E0E89FF0011124EB52FE4F08 -:1008100060817181828193814FE050E00E94450E9A -:100820008091D30190E001966091D40170E00E9424 -:10083000C12C8093D3010C940C03109217020C94DA -:100840005A0A0895089581E0809317020C942204B7 -:10085000089508958F929F92AF92BF92EF92FF9268 -:100860000F931F93CF93DF93CDB7DEB7A3970FB648 -:10087000F894DEBF0FBECDBF7C01FC010081118169 -:10088000C8010E941521B8010E942C068C01B701F5 -:100890000E94C903882309F4CCC10032F0E51F0788 -:1008A00041F4F7018281882309F458C00E94A90EFF -:1008B000C0C10132F0E51F0741F4F70182818823AE -:1008C00009F44CC00E94B20EB4C10232F0E51F0719 -:1008D00051F4F7018281882309F440C00E94A50EDB -:1008E0008111F0CFE3CF0332F0E51F0739F4F701B0 -:1008F0008281882399F10E9423049BC10432F0E590 -:100900001F0739F4F7018281882341F10E941D04F9 -:1009100090C10532F0E51F0749F4F7018281882371 -:10092000E9F0809117028111F1CFE5CF0632F0E5B1 -:100930001F0739F4F7018281882381F00E94B90EE4 -:100940000AC00732F0E51F0749F4F70182818823C6 -:1009500029F00E94C40E0E9429046BC180911702E5 -:10096000811105C0F70182818111CFC018C1003EFD -:10097000110579F4F7018281882309F44DC00E94A2 -:100980005A0A81E080931602109215021092D40147 -:1009900050C1023E110559F4F70182818823E1F12B -:1009A0000E945A0A109216021092150242C1033E8A -:1009B000110591F4F7018281882371F10E945A0A8E -:1009C0001092160281E0809315021092D3011092CA -:1009D000D2011092D1012DC10235110559F4F70150 -:1009E0008281882309F425C1809100019091010141 -:1009F0000A970DC00135110579F4F701828188232A -:100A000009F417C180910001909101010A96909319 -:100A10000101809300010DC14091040183E2EFE1E7 -:100A2000F1E0DE01119601900D928A95E1F7F70150 -:100A3000808121E030E02C0F3D1F280F311DC901BE -:100A40002091020130910301FC01E20FF31F60814C -:100A5000772767FD7095640F711D882777FD809556 -:100A6000982F0E94E32920E030E040E451E40E9406 -:100A700048294B015C01F701218184E090E0821B51 -:100A80009109BC01882777FD8095982F0E94E32962 -:100A90009B01AC01C501B4010E94E0289B01AC019F -:100AA00060E070E080E090E40E94562B20E030E0AF -:100AB0004CED50E40E94F32A4B015C01F701828166 -:100AC0008823D1F04FE050E0C501B4010E94450EEB -:100AD000809116028823A1F08091D40124E0829FA6 -:100AE000F0011124EB52FE4F80829182A282B382E8 -:100AF0008F5F8093D40104C0C501B4010E948D0AA8 -:100B00000F3F110508F02ECF94C08091D0018111C4 -:100B10001FC0043130E5130709F051C00E94CB0318 -:100B200081E08093D0010E9418239093CF0180939D -:100B3000CE011092C7011092C9011092C801109203 -:100B4000CB011092CA011092CD011092CC0171C05C -:100B50008091CE019091CF010E942423883C910581 -:100B600070F48091C701E82FF0E0EE0FFF1FE8530B -:100B7000FE4F118300838F5F8093C7015AC00438F2 -:100B800080E5180721F00538104501F13AC0F7015A -:100B90008281882341F01092C50182E01EC0043892 -:100BA00030E5130759F58091C501811106C086E231 -:100BB0000E94711886E20E94391982E01CC0043834 -:100BC000F0E51F0741F305381045D9F4F70182819C -:100BD000882331F01092C60180E20E94881929C052 -:100BE0008091C601811106C087E20E94711887E2D8 -:100BF0000E94391980E20E948F191BC005381045E8 -:100C000029F381E08093C5018093C601C701A396B3 -:100C10000FB6F894DEBF0FBECDBFDF91CF911F910D -:100C20000F91FF90EF90BF90AF909F908F900C949A -:100C30000E0380E0A3960FB6F894DEBF0FBECDBFC3 -:100C4000DF91CF911F910F91FF90EF90BF90AF90E8 -:100C50009F908F90089508959CE0799FF001112452 -:100C600090E3899FE00DF11D1124E60FF11DEE0FB9 -:100C7000FF1FE453FE4F859194910895880F991FAB -:100C8000FC01E45BFF4F859194910895880F991FB3 -:100C9000FC01E453FE4F8591949108950F931F93A7 -:100CA000CF93DF93EC01811521E39207A0F5C115E5 -:100CB00080E3D80708F0D7C0C83ED105D8F4C03EBD -:100CC000D10508F007C2C83AD10578F4C53AD10574 -:100CD00008F06AC0C130D10509F463C008F4F7C157 -:100CE000C430D10508F0F6C1F2C1CB3BD10508F400 -:100CF00066C0EDC1C11590E2D90708F0AFC0C115BB -:100D000021E0D20708F0E6C1C03FD10508F4DFC1F9 -:100D10008E0110651FC2C03880E5D80700F5C037C6 -:100D200090E5D90708F0A3C0C11520E5D20709F462 -:100D3000ACC050F4CE01905480319F4008F0C7C140 -:100D4000DF708E01106A06C2C13080E5D80709F451 -:100D5000AEC0C43190E5D90708F4AFC0B8C1C338FC -:100D600020E5D20709F48EC050F4C13890E5D907C8 -:100D700009F482C008F083C000E011EDEBC1C0317E -:100D800081E5D80708F4A3C1C11597E5D90708F490 -:100D900036C1CE0190578115904108F098C1DF709F -:100DA00093C101E010E0D6C1C53AD10509F494C160 -:100DB000C63AD10509F093C102E810E4CBC1C83AA4 -:100DC000D10509F48FC1C93AD10509F48EC1CA3AD7 -:100DD000D10509F48DC1CB3AD10509F48CC1CC3AC7 -:100DE000D10509F48BC1CD3AD10509F48AC1C03BC4 -:100DF000D10509F489C1CE3AD10509F488C1CF3AA9 -:100E0000D10509F487C1C13BD10509F486C1C23BB4 -:100E1000D10509F485C1C33BD10509F484C1C43BA4 -:100E2000D10509F483C1C53BD10509F482C1C63B94 -:100E3000D10509F481C1C73BD10509F480C1C83B84 -:100E4000D10509F47FC1C93BD10509F47EC1CA3B74 -:100E5000D10509F47DC100E014E47CC1CE019F708E -:100E60000E94460678C1DD278E01106C73C1CF70D9 -:100E7000DD278E01146D6EC100E010ED6BC100E046 -:100E800012ED68C100E013ED65C10E941C1C0E94B8 -:100E90005A0A0E9421048FEF94E32CE08150904085 -:100EA0002040E1F700C000000E94732353C18091ED -:100EB000F20281608093F2024DC10E94D42381111D -:100EC00002C00E94B0230E94E72390E090931D038C -:100ED00080931C03C23080E5D80721F480911C0365 -:100EE000816086C0C43090E5D90721F480911C034D -:100EF00082607EC0C63020E5D20721F480911C03B9 -:100F0000846076C0C83080E5D80719F480911C034E -:100F100027C0CA3090E5D90721F480911C03806175 -:100F200067C0CC3020E5D20721F480911C03806299 -:100F30005FC0CE3080E5D80721F480911C03806427 -:100F400057C0C03190E5D90721F480911C03806817 -:100F50004FC0C23120E5D20729F480911C03846080 -:100F6000886046C0C33080E5D80721F480911C0317 -:100F70008E7F3EC0C53090E5D90721F480911C03D7 -:100F80008D7F36C0C73020E5D20721F480911C0345 -:100F90008B7F2EC0C93080E5D80719F480911C03DF -:100FA00026C0CB3090E5D90721F480911C038F7EB9 -:100FB0001FC0CD3020E5D20721F480911C038F7D26 -:100FC00017C0CF3080E5D80721F480911C038F7BB8 -:100FD0000FC0C13190E5D90721F480911C038F77B0 -:100FE00007C0C331D04531F480911C038B7F877FCC -:100FF00080931C0380911C030E94EB23ABC08D2FB8 -:1010000099278F70992781309105D9F49E0123701B -:10101000332702C0880F991F2A95E2F79C688E013A -:1010200044E0000F111F4A95E1F700271370802B51 -:10103000912B53E0CC0FDD1F5A95E1F7C076DD27E9 -:101040002FC08230910531F4DC2FCC278E01016F47 -:10105000106A80C08330910569F4CE0183709927AE -:1010600001E010E002C0000F111F8A95E2F7C801ED -:101070009C680FC084309105B9F4CE018370992724 -:1010800001E010E002C0000F111F8A95E2F7C801CD -:101090009A6823E0CC0FDD1F2A95E1F7C07ED77058 -:1010A0008C010C2B1D2B56C08530910531F4DC2FA3 -:1010B000CC278E01046F106A4DC0069709F04AC014 -:1010C000CF71DD27DC2FCC278E01106243C000E0FA -:1010D00010E040C08E013EC001E810E43BC003E8D0 -:1010E00010E438C002EE14E435C009EE14E432C056 -:1010F0000AEE14E42FC005EB14E42CC006EB14E454 -:1011000029C007EB14E426C00CEC14E423C00DEC5A -:1011100014E420C003E815E41DC00AE815E41AC071 -:1011200002E915E417C004E915E414C001E216E46D -:1011300011C003E216E40EC004E216E40BC005E29F -:1011400016E408C006E216E405C007E216E402C091 -:101150000AE216E4C801DF91CF911F910F91089523 -:101160009CE0799FF001112490E3899FE00DF11D2F -:101170001124E60FF11DEE0FFF1FE453FE4F859182 -:101180009491803E9105E0F4803C910558F58133BF -:10119000910509F46FC048F48932910509F463C0E0 -:1011A0008A32910509F46DC072C089339105E9F066 -:1011B00082389105D1F08533910509F44DC067C09F -:1011C000833E910581F138F4803E9105B9F0823E6D -:1011D0009105D9F05CC0863E910561F1873E91058D -:1011E000A1F155C00E943E06089520911C0320FDE8 -:1011F00002C021FF4CC080EE90E049C080911C03EA -:1012000080FFF9CF89E390E042C080911C0382FF08 -:101210000EC080911C0384FF03C080E090E037C0C3 -:1012200083EE90E034C080911C0382FFF2CF82EE07 -:1012300090E02DC080911C0383FF0BC080911C03A4 -:1012400084FDEBCF87EE90E022C080911C0383FFEA -:10125000F5CF86EE90E01BC080911C0385FF07C090 -:1012600089E290E014C080911C0385FFF9CF85E3EB -:1012700090E00DC080911C0386FF07C08AE290E0D9 -:1012800006C080911C0386FFF9CF81E390E00E94A5 -:101290004E0608950C941003E82FF0E0E25BFE4F39 -:1012A0008081E82FEF70F0E082958F7021E030E0D0 -:1012B000A90102C0440F551F8A95E2F740A3089583 -:1012C0000F931F93CF93DF9385B7806885BF85B752 -:1012D000806885BFC3E0D0E001E010E0FE01E25B82 -:1012E000FE4F8081E82FEF70F0E021A182958F7092 -:1012F000A80102C0440F551F8A95E2F7CA01822B4C -:1013000081A38C2F0E944C09219740F78BE090E03D -:1013100061E070E0FC01EE5BFE4F2081E22FEF7098 -:10132000F0E042A122952F70DB0102C0AA0FBB1F83 -:101330002A95E2F79D01242B22A3019758F7DF910C -:10134000CF911F910F910C94CC03EF92FF920F93CA -:101350001F93CF93DF9300E212E0C3E0EE24E39407 -:10136000F12CD5E08C2F0E944C098BE090E040E0FE -:1013700050E0FC01EE5BFE4F6081E62FEF70F0E085 -:1013800020A130E062956F7002C0359527956A956F -:10139000E2F720FD09C09701082E02C0220F331F7B -:1013A0000A94E2F7422B532B019718F7F801929118 -:1013B00082918F018417950721F051834083D09348 -:1013C00005018C2F0E944C09C15060F680910501E7 -:1013D00087FD2CC08150809305018F3F39F08FE944 -:1013E0009FE00197F1F700C0000020C080911E022D -:1013F00090911F02909327028093260280911C02F5 -:1014000090911D02909325028093240280911A02EC -:1014100090911B02909323028093220280911802E4 -:101420009091190290932102809320020E94CE0392 -:1014300081E0DF91CF911F910F91FF90EF90089580 -:10144000E82FF0E0EE0FFF1FE05EFD4F80819181FD -:10145000089508950F931F93CF9308E212E0C0E020 -:10146000F801929182918F010E949022C80FF2E0C0 -:1014700000321F07A9F78C2FCF911F910F9108956C -:101480000E94D423811102C00E94B0230E94F9233C -:10149000809307033E9A809171008D7F8093710045 -:1014A00082E0809390008AE18093910081E08093B4 -:1014B0002A02089580912A02811102C00E94400AE6 -:1014C00010927A0210927902809171008D7F809340 -:1014D0007100809190008F738093900010923C0275 -:1014E00010923B02109273021092740210927502D5 -:1014F000109276021092720210927102E1E5F2E00F -:10150000A1E4B2E011921192119211921D921D92DA -:1015100082E0E137F807B1F70895CF92DF92EF92BA -:10152000FF920F931F93CF93DF9320913B022223CF -:1015300009F484C06B017C0180912A02811102C0F0 -:101540000E94400A01E712E0C7E0D0E0A70196013F -:10155000F80192918291729162918F010E944429C7 -:10156000811131C0FE01EE0FFF1FEE0FFF1FEF5A7A -:10157000FD4F1082118212821382DE01AA0FBB1F5F -:10158000AF5BBD4F11961C921E92C730D105E9F09A -:10159000219644815581668177814083518362839E -:1015A0007383148215821682178212968D919C91F4 -:1015B000139711969C938E9313961C921E921297DA -:1015C00034961296E2CF219708F680917902909195 -:1015D0007A02019797FD05C090937A028093790271 -:1015E00004C010927A02109279028091790290914F -:1015F0007A0220917702309178022817390724F077 -:101600001092780210927702892BC1F480917100B8 -:101610008D7F80937100809190008F7380939000F4 -:101620001092730210927402109275021092760258 -:10163000109272021092710210923B02DF91CF91D0 -:101640001F910F91FF90EF90DF90CF9008951F9220 -:101650000F920FB60F9211244F925F926F927F926A -:101660008F929F92AF92BF92CF92DF92EF92FF92B2 -:101670002F933F934F935F936F937F938F939F939A -:10168000AF93BF93CF93DF93EF93FF9380913B0290 -:10169000882309F49BC1C0917902D0917A021C166B -:1016A0001D060CF093C140902B0250902C026090CC -:1016B0002D0270902E0220E030E0A901C301B2019A -:1016C0000E94EF2A18160CF065C0C130D10509F44C -:1016D00052C08091770290917802BE010E94C12C85 -:1016E0007C01909378028093770280903D029090E5 -:1016F0003E02A0903F02B090400220E030E040E87F -:101700005FE3C501B4010E94E02860933D0270933D -:101710003E0280933F0290934002F701EE0FFF1FBD -:10172000EE0FFF1FEF5AFD4FA301920160817181FF -:10173000828193810E94482920E030E040E05EE30E -:101740000E94F32A9B01AC01C501B4010E94EF2A5B -:1017500018168CF4C7010196BE010E94C12C90930B -:1017600078028093770210923D0210923E0210920E -:101770003F0210924002E0917702F0917802EE0F62 -:10178000FF1FEE0FFF1FEF5AFD4F608171818281B5 -:101790009381D0C0C0907302D0907402E090750223 -:1017A000F090760220E030E0A901C701B6010E9466 -:1017B00044292197882309F4A2C0FE01EE0FFF1FE0 -:1017C000EE0FFF1FEF5AFD4F80809180A280B38003 -:1017D000A5019401C701B6010E94442987FF31C0C9 -:1017E000A501940160E070E08CED93EC0E94482923 -:1017F00020E030E040E451E40E94482920E030E05D -:1018000040E05FE30E94F32A9B01AC0160E070E0DE -:1018100080E090E40E94562B9B01AC01C501B4010D -:101820000E94F32A9B01AC01C701B6010E94442922 -:1018300087FF07C0A701960160E070E08CED93E49C -:1018400039C0A5019401C701B6010E94EF2A1816FC -:101850000CF055C0A501940160E070E08CED93E4BC -:101860000E94482920E030E040E451E40E944829E9 -:1018700020E030E040E05FE30E94F32A9B01AC01EE -:1018800060E070E080E090E40E94562B9B01AC0188 -:10189000C501B4010E94F32A9B01AC01C701B60146 -:1018A0000E94EF2A18165CF5A701960160E070E02F -:1018B0008CED93EC0E94482920E030E040E451E4B4 -:1018C0000E94482920E030E040E05FE30E94F32AD4 -:1018D0009B01AC0160E070E080E090E40E94562B38 -:1018E0009B01AC01C701B6010E94F32A6093730209 -:1018F00070937402809375029093760213C0FE0178 -:10190000EE0FFF1FEE0FFF1FEF5AFD4F80819181F9 -:10191000A281B3818093730290937402A0937502A5 -:10192000B093760260917302709174028091750297 -:101930009091760220912802309129022F3F4FEF9B -:10194000340731F02F5F3F4F309329022093280254 -:101950000E94CF0E6B017C0120E034E244EF51E4A1 -:101960000E94442987FF08C086EFC82E88E2D82E3F -:1019700084EFE82E81E4F82E20E030E040E051E4EE -:10198000C701B6010E94F32A9B01AC0160E074E23A -:1019900084E79BE40E9448296B017C010E94B529E1 -:1019A0007093970060939600209106013091070193 -:1019B0004091080150910901C701B6010E94F32A24 -:1019C0000E94B529709399006093980080913C0221 -:1019D000882309F433C1C0903702D0903802E090D8 -:1019E0003902F0903A0220E030E0A901C701B601C7 -:1019F0000E94EF2A1816D4F58091280290912902AE -:101A00008F3F2FEF920729F0019690932902809340 -:101A10002802C701B6010E94CF0E20E030E040E06E -:101A200051E40E94F32A9B01AC0160E074E284E778 -:101A30009BE40E9448296B017C010E94B5297093A8 -:101A40009700609396002091060130910701409124 -:101A5000080150910901C701B6010E94F32A0E94B2 -:101A6000B529709399006093980008C01092970070 -:101A70001092960010929900109298006091310295 -:101A8000709132026F5F7F4F709332026093310228 -:101A9000209196003091970080E090E0232BF1F0A8 -:101AA000C0919600D09197000E94E1296B017C01C2 -:101AB000BE0180E090E00E94E1299B01AC016091B1 -:101AC00033027091340280913502909136020E9467 -:101AD000482920E03FEF4FE757E410C00E94E1297A -:101AE0006B017C0120E030EE4FEF54E46091330253 -:101AF0007091340280913502909136020E94F32A4F -:101B00009B01AC01C701B6010E94EF2A87FD96C078 -:101B100080912F028F5F80932F0290E0209103032A -:101B20003091040382179307A0F080910E0388235D -:101B300019F010922F020DC0809171008D7F80935B -:101B40007100809190008F738093900010923C02FE -:101B50007DC080913002C0912F02811128C0C090B9 -:101B60000803D0900903E0900A03F0900B0320E0F3 -:101B700030E0A901C701B6010E94EF2A1816BCF493 -:101B800081E0809330021092370210923802109256 -:101B9000390210923A02C0923302D0923402E0929B -:101BA0003502F0923602C150C0932F0243C010920A -:101BB00030021092290210922802E0910503F09160 -:101BC000060348E0C49FE00DF11D1124808191813E -:101BD000A281B3818093370290933802A093390297 -:101BE000B0933A0220E030E040E85EE36481758122 -:101BF000868197810E94F32A6B017C0180910A0102 -:101C0000682F70E080E090E00E94E12920E030E061 -:101C100048EC52E40E9448299B01AC01C701B6017F -:101C20000E94F32A6093330270933402809335024A -:101C30009093360210923202109231028091070383 -:101C400080FD04C010923C0210923B02FF91EF9184 -:101C5000DF91CF91BF91AF919F918F917F916F91C4 -:101C60005F914F913F912F91FF90EF90DF90CF9038 -:101C7000BF90AF909F908F907F906F905F904F90AC -:101C80000F900FBE0F901F901895CF92DF92EF929A -:101C9000FF92CF93DF936B017C01EA0180912A02CE -:101CA000811102C00E94400A8091070380FF46C054 -:101CB0008091790290917A0208970CF03FC0809150 -:101CC00071008D7F8093710080913C0281110E9490 -:101CD0005A0A81E080933B02109229021092280256 -:101CE00020E030E0A901C701B6010E94EF2A1816D2 -:101CF000DCF48091790290917A02FC01EE0FFF1FD3 -:101D0000EE0FFF1FEF5AFD4FC082D182E282F382B5 -:101D1000FC01EE0FFF1FEF5BFD4FD183C0830196E7 -:101D200090937A028093790280917100826080930F -:101D3000710080919000806880939000DF91CF9136 -:101D4000FF90EF90DF90CF9008958091070381700E -:101D50000895809107038160809307030E94FD230B -:101D60000C942804809107038E7F809307030C94C2 -:101D7000FD2380917B0290E0019666E070E00E9476 -:101D8000C12C80937B02089580917B0290E00197A3 -:101D900066E070E00E94C12C80937B0208958F92D0 -:101DA0009F92AF92BF92CF92DF92EF92FF920F93EA -:101DB0001F93CF93DF936B017C01C0912802D091D8 -:101DC0002902BE0180E090E00E94E1294B015C0104 -:101DD000A701960160E070E08CE594E40E94482938 -:101DE0009B01AC01C501B4010E94F32A0E94B529F0 -:101DF00020917B02233009F473C028F4222351F090 -:101E00002130E9F02CC1243009F4A0C0253009F4B8 -:101E1000E0C025C180E090E0A0E0BFE38093060130 -:101E200090930701A0930801B093090110922B022F -:101E300010922C0210922D0210922E0210C11092BC -:101E40002B0210922C0210922D0210922E0264315D -:101E5000710540F46A30710560F520E030E040E83B -:101E60005EE32BC0693C710508F0AAC080E090E0F9 -:101E70000E94E12920E030E040EA51E40E94DF289E -:101E800020E030E044E353E40E9448299B01AC0188 -:101E90000E94F32A20E030E040E05EE30E94F32A53 -:101EA0009B01AC0160E070E080E09EE30E94DF28CF -:101EB00044C020E030E040E05FE3C701B6010E948B -:101EC000F32A6B017C0180E090E0A0E0BEE3809308 -:101ED000060190930701A0930801B0930901BFC0C8 -:101EE00010922B0210922C0210922D0210922E02B0 -:101EF0004AE0469F9001479F300D1124C90168EBCD -:101F00007BE00E94AD2CBC016C5D754077FF03C087 -:101F1000719561957109882777FD8095982F0E94AA -:101F2000E3292EE333EC4EE259E30E94F32A20E04A -:101F300030E040EC5EE30E94E0286093060170937D -:101F40000701809308019093090189C010922B0228 -:101F500010922C0210922D0210922E02CE0183704C -:101F60009927892BE1F0BE016170772780E090E02E -:101F70000E94E12920E030E040E05EE30E94F32A85 -:101F800020E030E040E45FE30E94E0286093060137 -:101F90007093070180930801909309010CC080E0C1 -:101FA00090E0A0E0BFE38093060190930701A09327 -:101FB0000801B0930901C770DD27CD2B09F04FC090 -:101FC0001092060110920701109208011092090167 -:101FD00046C010922B0210922C0210922D021092E9 -:101FE0002E0200E010E020E03FE300930601109392 -:101FF000070120930801309309016739710578F1D1 -:1020000080E090E00E94E12920E030E047E153E4E5 -:102010000E94DF2820E030E04AE754E40E9448298B -:1020200020E030E048E452E40E94F32A20E030E06F -:1020300040EA51E40E94252A0E94B029660F771FCA -:10204000660F771FFB01EE5AFE4F208131814281DE -:102050005381C701B6010E94F32A6B017C01C701BD -:10206000B601DF91CF911F910F91FF90EF90DF901C -:10207000CF90BF90AF909F908F90089580918C02E9 -:102080000895CF93DF9300D01F92CDB7DEB79C01A8 -:1020900080911303843019F593E099833B832A835D -:1020A0009093E9008FEF9091E800815095FD06C074 -:1020B00095ED9A95F1F700008111F5CF8091E80038 -:1020C00085FF0DC040E050E063E070E0CE01019676 -:1020D0000E94A2128091E8008E778093E8000F9012 -:1020E0000F900F90DF91CF910895CF93DF9300D0A1 -:1020F0001F92CDB7DEB720911303243021F522E0E3 -:1021000029839B838A8383E08093E9008FEF9091FA -:10211000E800815095FD06C095ED9A95F1F7000015 -:102120008111F5CF8091E80085FF0DC040E050E0BF -:1021300063E070E0CE0101960E94A2128091E80057 -:102140008E778093E8000F900F900F90DF91CF91E2 -:102150000895209113032430F1F422E02093E90044 -:102160002FEF3091E800215035FD06C035ED3A954E -:10217000F1F700002111F5CF2091E80025FF0BC0F9 -:1021800040E050E065E070E00E94A2128091E8001B -:102190008E778093E8000895CF93DF93EC019091C0 -:1021A0001303943009F046C0809115018823D9F0BB -:1021B000809116018823B9F09093E9008FEF9091F8 -:1021C000E800815095FD06C095E19A95F1F7000071 -:1021D0008111F5CF8091E80085FF2CC040E050E0F0 -:1021E00060E170E017C081E08093E9008FEF90918B -:1021F000E800815095FD06C095ED9A95F1F7000035 -:102200008111F5CF8091E80085FF14C040E050E0D7 -:1022100068E070E0CE010E94A2128091E8008E7703 -:102220008093E80080E1FE01ACE7B2E001900D92FE -:102230008A95E1F7DF91CF91089580911203811182 -:1022400009C00E9437140E9494148091E2008460B7 -:102250008093E2000895109212030895089508955E -:102260000C94DB2242E061EC81E00E94B11342E079 -:1022700061EC82E00E94B11342E061EC83E00E94D5 -:10228000B11342E161EC84E00C94B1138091150329 -:10229000833009F455C030F4813071F0823009F494 -:1022A0008EC008958A3009F47AC08B3009F460C07A -:1022B000893009F09CC020C080911403813A09F054 -:1022C00096C08091E800877F8093E8008091180392 -:1022D00090911903892B21F460E18CE792E003C00F -:1022E00060E080E090E070E00E94ED128091E800F4 -:1022F0008B778093E800089580911403813209F070 -:1023000076C08091180390911903009719F00397F4 -:1023100009F06DC08091E800877F8093E80080918C -:10232000E80082FD05C0809113038111F8CF5FC0E2 -:102330008091F10080938C028091E8008B7753C0EC -:1023400080911403813A09F052C080911803909152 -:102350001903892B09F04BC08091E800877F809397 -:10236000E8008091E80080FFFCCF8091150136C025 -:10237000809114038132D9F580911803909119034B -:10238000892BA9F58091E800877F8093E8000E945F -:10239000E61380911603809315010C941C1C809108 -:1023A0001403813221F58091E800877F8093E80053 -:1023B0000E94E6138091170380938D020895809107 -:1023C0001403813AA1F48091E800877F8093E800AC -:1023D0008091E80080FFFCCF80918D028093F10016 -:1023E0008091E8008E778093E8000C94E6130895BE -:1023F00084B7877F84BF88E10FB6F894809360002C -:10240000109260000FBE90E080E80FB6F8948093C1 -:102410006100909361000FBE0E9489170E943714DB -:102420000E9494148091E20084608093E20078948A -:102430000E941A170E948B178BE091E00E943517BB -:1024400080911303853069F40E949C2280911103CE -:102450008823B1F30E94CA22882391F30E948C1230 -:10246000EFCF0E949317ECCF292F3327233031056C -:10247000C9F064F42130310581F02230310509F0D2 -:1024800043C08DE690E028E034E042C021323105BF -:10249000F1F02232310541F137C082E190E025E7C9 -:1024A00034E036C099278130910541F082309105A2 -:1024B00041F0892B49F5E4E0F4E005C0E6EDF3E0F6 -:1024C00002C0ECEAF3E0849190E09F0121C0643007 -:1024D000D8F4E62FF0E0EE0FFF1FE255FE4F20810B -:1024E000318189E090E014C0643070F470E0FB0149 -:1024F000EE0FFF1FEA55FE4F20813181FB01EE55A3 -:10250000FE4F808190E004C080E090E020E030E069 -:10251000FA0131832083089580E189BD82E189BD7C -:1025200009B400FEFDCF8091D8008F7D8093D80044 -:102530008091E00082608093E0008091E00081FD66 -:10254000FCCF0895CF92DF92EF92FF920F931F93EB -:10255000CF93DF93EC018B016A010E940514811176 -:1025600033C0C114D10439F0F60180819181081B78 -:10257000190BC80FD91FE12CF12C0115110519F108 -:102580008091E80085FD16C08091E8008E778093E9 -:10259000E800C114D10449F0F60180819181E80E70 -:1025A000F91EF182E08285E00FC00E9405148823A5 -:1025B00021F30AC089918093F10001501109FFEFC6 -:1025C000EF1AFF0ADACF80E0DF91CF911F910F91D0 -:1025D000FF90EF90DF90CF90089520911A033091F3 -:1025E0001B032617370748F06115710539F4209150 -:1025F000E8002E772093E80001C0B90140E06115A2 -:102600007105A9F120911303222309F443C0253059 -:1026100009F442C02091E80023FD40C02091E80069 -:1026200022FD32C02091E80020FFE9CF4091F30065 -:102630002091F20030E0342BFC01CF0161157105CF -:1026400059F02830310540F481918093F1006150B8 -:1026500071092F5F3F4FF1CF41E02830310509F07C -:1026600040E02091E8002E772093E800C8CF411188 -:10267000C9CF0AC080911303882361F0853061F0CF -:102680008091E80083FD0AC08091E80082FFF2CFCC -:1026900080E0089582E0089583E0089581E0089540 -:1026A00020911A0330911B032617370748F0611554 -:1026B000710539F42091E8002E772093E80001C0DD -:1026C000B901FC0120E06115710591F180911303BE -:1026D000882309F440C0853009F43FC08091E800A8 -:1026E00083FD3DC08091E80082FD2FC08091E8000D -:1026F00080FFE9CF2091F3008091F20090E0922BCF -:102700006115710559F08830910540F424912093AA -:10271000F1003196615071090196F2CF21E00897DE -:1027200009F020E08091E8008E778093E800CBCF1D -:102730002111CCCF0AC080911303882361F085302A -:1027400061F08091E80083FD0AC08091E80082FF7B -:10275000F2CF80E0089582E0089583E0089581E05B -:102760000895982F973058F59093E900981739F00D -:102770007091EC002091ED005091F00003C0242FE7 -:10278000762F50E021FF19C03091EB003E7F30934F -:10279000EB003091ED003D7F3093ED003091EB0088 -:1027A00031603093EB007093EC002093ED00509378 -:1027B000F0002091EE0027FF07C09F5FD3CF8F70FE -:1027C0008093E90081E0089580E0089580911403EA -:1027D00087FF11C08091E80082FD05C0809113033E -:1027E0008111F8CF11C08091E8008B770BC08091E8 -:1027F0001303882349F08091E80080FFF8CF80918F -:10280000E8008E778093E80008952091E4003091ED -:10281000E50095E64091EC00842F817040FF22C0D6 -:102820008091E80080FD1CC080911303882391F003 -:10283000853091F08091EB0085FD10C04091E4005F -:102840005091E5004217530729F39A01915011F76F -:1028500084E0089582E0089583E0089581E008957A -:1028600080E008954091E80042FFDECF08950E9485 -:10287000A5140E94AD14E0EEF0E0808181608083B9 -:10288000E8EDF0E080818F77808319BCA7EDB0E0A0 -:102890008C918E7F8C9380818F7E80831092120327 -:1028A00008950F931F93CF93DF930E94A5140E9466 -:1028B000AD14C8EDD0E088818F77888388818068E7 -:1028C000888388818F7D888319BC109213031092AE -:1028D0000F03109211031092100300EE10E0F801A4 -:1028E00080818B7F808388818160888342E060E083 -:1028F00080E00E94B113E1EEF0E080818E7F808362 -:10290000E2EEF0E080818160808380818860808356 -:10291000F80180818E7F8083888180618883DF9148 -:10292000CF911F910F910895E8EDF0E080818F7EA7 -:102930008083E7EDF0E080818160808384E082BF66 -:1029400081E0809312030C945114E8EDF0E0808153 -:102950008E7F80831092E20008951092DA00109228 -:10296000E10008951F920F920FB60F9211242F933A -:102970003F934F935F936F937F938F939F93AF9307 -:10298000BF93EF93FF938091E10082FF0BC0809192 -:10299000E20082FF07C08091E1008B7F8093E1001D -:1029A0000E9419178091DA0080FF1FC08091D80023 -:1029B00080FF1BC08091DA008E7F8093DA008091C7 -:1029C000D90080FF0DC080E189BD82E189BD09B4D5 -:1029D00000FEFDCF81E0809313030E941D1105C00E -:1029E00019BC109213030E942B118091E10080FF0B -:1029F00019C08091E20080FF15C08091E2008E7FB7 -:102A00008093E2008091E20080618093E2008091F7 -:102A1000D80080628093D80019BC85E080931303AE -:102A20000E942F118091E10084FF30C08091E2006C -:102A300084FF2CC080E189BD82E189BD09B400FE1C -:102A4000FDCF8091D8008F7D8093D8008091E100E8 -:102A50008F7E8093E1008091E2008F7E8093E20080 -:102A60008091E20081608093E20080910F038823CF -:102A700011F084E007C08091E30087FD02C081E08F -:102A800001C083E0809313030E9430118091E10024 -:102A900083FF29C08091E20083FF25C08091E1007F -:102AA000877F8093E10082E08093130310920F03ED -:102AB0008091E1008E7F8093E1008091E2008E7F23 -:102AC0008093E2008091E20080618093E20042E026 -:102AD00060E080E00E94B1138091F00088608093F4 -:102AE000F0000E942E11FF91EF91BF91AF919F9145 -:102AF0008F917F916F915F914F913F912F910F90A7 -:102B00000FBE0F901F9018951F920F920FB60F9245 -:102B100011242F933F934F935F936F937F938F93E2 -:102B20009F93AF93BF93CF93DF93EF93FF93C091A6 -:102B3000E900CF708091EC00D82FD17080FDD0E8F3 -:102B40001092E9008091F000877F8093F0007894E4 -:102B50000E94C8151092E9008091F000886080936F -:102B6000F000CD2BCF70C093E900FF91EF91DF9182 -:102B7000CF91BF91AF919F918F917F916F915F9115 -:102B80004F913F912F910F900FBE0F901F9018956E -:102B90001F93CF93DF93CDB7DEB7AA970FB6F89404 -:102BA000DEBF0FBECDBFE4E1F3E088E08E0F909171 -:102BB000F10091938E13FBCF0E9446118091E800A3 -:102BC00083FF1FC18091140390911503492F50E09A -:102BD0004A30510508F015C1FA01EA5AFF4F0C942A -:102BE000D52C803881F0823809F00BC18091180310 -:102BF0008F708093E9008091EB0085FB882780F936 -:102C00001092E90006C08091100390911103911178 -:102C100082609091E800977F9093E8008093F100A4 -:102C20001092F100C8C0282F2D7F09F0EAC0882338 -:102C300019F0823061F0E5C080911603813009F00F -:102C4000E0C0933009F080E0809311032BC08091A5 -:102C50001603811127C0809118038F7009F4D1C029 -:102C60008093E9002091EB0020FF1CC0933021F4F9 -:102C70008091EB00806214C09091EB009061909382 -:102C8000EB0021E030E0A90102C0440F551F8A95F6 -:102C9000E2F74093EA001092EA008091EB0088602E -:102CA0008093EB001092E9008091E800877F86C056 -:102CB0008111A7C0109116031F778091E3008078DF -:102CC000812B8093E3008091E800877F8093E80068 -:102CD0000E94E6138091E80080FFFCCF8091E30022 -:102CE00080688093E300111102C082E001C083E09C -:102CF0008093130386C08058823008F082C0809190 -:102D00001603909117038C3D53E0950779F583E006 -:102D10008A838AE289834FB7F894DE01139620E014 -:102D20003EE051E2E32FF0E050935700E49120FFA2 -:102D300003C0E295EF703F5FEF708E2F90E0EA30B6 -:102D400010F0C79601C0C0968D939D932F5F2431DC -:102D500049F74FBF8091E800877F8093E8006AE2DF -:102D600070E0CE0101960E94ED1214C0AE014F5FDB -:102D70005F4F609118030E943412BC01009709F460 -:102D800040C09091E800977F9093E80089819A81F4 -:102D90000E9450138091E8008B778093E80031C047 -:102DA000803879F58091E800877F8093E8008091F2 -:102DB0000F038093F1008091E8008E778093E80004 -:102DC0000E94E6131EC081111CC090911603923020 -:102DD000C0F48091E800877F8093E80090930F0310 -:102DE0000E94E61380910F03811106C08091E300D9 -:102DF00087FD02C081E001C084E0809313030E943C -:102E000032118091E80083FF0AC08091E800877F3B -:102E10008093E8008091EB0080628093EB00AA969B -:102E20000FB6F894DEBF0FBECDBFDF91CF911F91DB -:102E300008950895CF93809113038823A1F0C09142 -:102E4000E900CF709091EC00892F817090FD80E8AF -:102E5000C82B1092E9008091E80083FD0E94C815FC -:102E6000CF70C093E900CF9108959093930280931F -:102E700092020895E0919202F0919302309721F02E -:102E80000190F081E02D099480E00895E091920294 -:102E9000F0919302309721F00280F381E02D0994A4 -:102EA0000895E0919202F0919302309721F004800E -:102EB000F581E02D099408952091900230919102BE -:102EC0008217930771F09093910280939002E091A2 -:102ED0009202F0919302309721F00680F781E02D65 -:102EE0000994089520918E0230918F0282179307E2 -:102EF00071F090938F0280938E02E0919202F09194 -:102F00009302309721F00084F185E02D0994089513 -:102F100008950C9488170E940F230E9460090E9454 -:102F200095230C9444285F926F927F928F929F9288 -:102F3000AF92BF92CF92DF92EF92FF920F931F93C7 -:102F4000CF93DF9300D000D01F92CDB7DEB70E94A1 -:102F5000A5099DE9C92E92E0D92E03E010E0AA242C -:102F6000A394B12C502E802F0E94200A4C01F60110 -:102F7000729062906F016826792661147104A1F441 -:102F80000150110978F78FEF89838A831B820E9491 -:102F900018238160782F9D838C8349815A816B81AE -:102FA0008D810E94431838C08091F20281FD0E94F9 -:102FB000290A2BE030E07501022E02C0EE0CFF1C46 -:102FC0000A94E2F7C70186219721892B09F1298309 -:102FD0005A828E209F2091E0892809F490E09B83FB -:102FE0000E9418238160782F9D838C8349815A81A8 -:102FF0006B818D810E944318000F111FF801EB5661 -:10300000FD4F80819181E826F926F182E08204C09B -:103010002150310980F6B4CF0E947C251091940292 -:103020000E943A171817D1F00E943A178093940221 -:103030000F900F900F900F900F90DF91CF911F91F5 -:103040000F91FF90EF90DF90CF90BF90AF909F9047 -:103050008F907F906F905F900C944A090F900F9023 -:103060000F900F900F90DF91CF911F910F91FF90D4 -:10307000EF90DF90CF90BF90AF909F908F907F9018 -:103080006F905F900895CF93DF93CDB7DEB72B9706 -:103090000FB6F894DEBF0FBECDBF4F835887698748 -:1030A0007A878B87DE01119686E0FD0111928A9561 -:1030B000E9F785E0FE01379601900D928A95E1F7D8 -:1030C00049815A816B817C818D819E810E94BA1ECB -:1030D0002B960FB6F894DEBF0FBECDBFDF91CF9118 -:1030E0000895CF93882309F4C2C0C82F823859F4B9 -:1030F0000E943A1781FDBBC089E30E9494210E947F -:10310000612289E30CC0833879F40E943A1780FD6C -:10311000AEC083E50E9494210E94612283E50E9453 -:10312000D621CF910C946122843859F40E943A1729 -:1031300082FD9DC087E40E9494210E94612287E461 -:10314000EECF8CEF8C0F813A48F48C2F0E94AC2785 -:1031500081118DC08C2F0E949421E3CF80E28C0FCF -:10316000883048F4C77081E001C0880FCA95EAF73B -:103170000E941A22D6CF8BE58C0F833078F4C53AA3 -:1031800029F0C63A31F083E890E005C081E890E08C -:1031900002C082E890E0CF910C945C1788E58C0F18 -:1031A000833108F064C0C83A39F1C93A41F1CA3AEA -:1031B00049F1CB3A51F1CC3A59F1CD3A61F1C03BEA -:1031C00069F1CE3A71F1CF3A79F1C13B81F1C23B5D -:1031D00089F1C33B91F1C43B99F1C53BA1F1C63BD9 -:1031E000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B39 -:1031F000C9F180E090E038C082EE90E035C089EE01 -:1032000090E032C08AEE90E02FC085EB90E02CC0B9 -:1032100086EB90E029C087EB90E026C08CEC90E034 -:1032200023C08DEC90E020C083E891E01DC08AE8C7 -:1032300091E01AC082E991E017C084E991E014C0DE -:1032400081E292E011C083E292E00EC084E292E05B -:103250000BC085E292E008C086E292E005C087E2FA -:1032600092E002C08AE292E0CF910C947217CF9163 -:103270000895882309F44BC0823859F40E943A1704 -:1032800081FF45C089E30E9494210E94612289E365 -:103290000CC0833871F40E943A1780FF38C083E570 -:1032A0000E9494210E94612283E50E94D6210C9401 -:1032B0006122843859F40E943A1782FF28C087E4BB -:1032C0000E9494210E94612287E4EFCF9CEF980F27 -:1032D000913A58F390E2980F983050F4877091E04B -:1032E00001C0990F8A95EAF7892F0E942022DFCF2B -:1032F0009BE5980F933020F480E090E00C945C17ED -:10330000885A833120F480E090E00C94721708957D -:10331000882321F00E941A220C94612208958823A8 -:1033200021F00E9420220C94612208957F928F92B6 -:103330009F92AF92BF92CF92DF92EF92FF920F9344 -:103340001F93CF93DF931F92CDB7DEB77C01C62EBC -:10335000772EFC01058102950F70128111110E94D8 -:1033600037220E948D21882379F0112369F080E2B1 -:103370008C0D883048F082E00E9476210E948D21D9 -:1033800091E0D82ED92601C0D12CE72DE295EF701F -:10339000F0E0E05AFF4F0C94D52C872D807F072D4D -:1033A0000F70882311F00295007F112389F000230C -:1033B00009F499C180E28C0D883020F4802F0E949E -:1033C0001A2203C0802F0E942A220E9461228BC1F0 -:1033D0008C2D0E943919002309F4C3C180E28C0DA1 -:1033E000883020F4802F0E94202203C0802F0E946A -:1033F00030220E946122B5C1872D807F972D9F705A -:10340000803211F4892F03C0892F8295807FCC20D0 -:1034100021F0F1E0CF16A1F01DC0112339F00023F7 -:1034200019F1013009F50E944A229BC1002319F0CD -:10343000013009F496C189830E944D22898110C10F -:10344000112321F0063008F08CC10EC0053008F0C1 -:1034500088C106C1112359F0002331F0F70195818D -:1034600090FF41C19F7095830E9488197AC1002303 -:1034700009F4F6C03EC1872D86958695837090E04D -:10348000009719F0019761F06CC1112321F08C2D88 -:10349000972D937002C080E090E00E945C1761C19C -:1034A000112321F08C2D972D937002C080E090E0C5 -:1034B0000E94721756C18C2D112319F00E9484248A -:1034C00002C00E94EC240E9471254BC1872D83709D -:1034D00009F052C0111145C18C2D829586958770D7 -:1034E000880F880F9C2D9F70892E912CA12CB12CB8 -:1034F000082E04C0880C991CAA1CBB1C0A94D2F785 -:10350000C4FE14C00FE010E020E030E0B901A801D3 -:1035100004C0440F551F661F771F8A95D2F7CB0151 -:10352000BA01609570958095909503C060E070E059 -:10353000CB01272D26952695237030E022303105CA -:1035400069F02330310589F0682979298A299B2976 -:103550002130310571F00E94022003C168297929C8 -:103560008A299B290E941E20FCC00E940220C501BE -:10357000B4010E94E61FF5C0112319F0872D817058 -:1035800001C08695882309F4ECC08C2D8295869520 -:103590008770880F880F9C2D9F70892E912CA12CED -:1035A000B12C082E04C0880C991CAA1CBB1C0A94C0 -:1035B000D2F7C4FE14C00FE010E020E030E0B90103 -:1035C000A80104C0440F551F661F771F8A95D2F7C4 -:1035D000CB01BA01609570958095909503C060E02D -:1035E00070E0CB01272D269526952370422F50E0C1 -:1035F0004230510569F04330510589F06829792935 -:103600008A299B294130510571F00E94DC20A9C014 -:10361000682979298A299B290E94F820A2C00E9442 -:10362000DC20C501B4010E94C0209BC08C2D90E01D -:10363000FC01E05EF109E531F10508F050C0E05908 -:10364000FF4F0C94D52C0C2D0F70872D8F711123EB -:1036500021F00E945920802F07CF0E947A20802FCE -:103660000E948F197EC0112341F0053008F079C007 -:10367000872D8F710E949F2074C0063008F071C0A2 -:10368000F7CF112339F0872D8F710E94592069C01F -:103690001123C9F3872D8F710E947A2062C01123F4 -:1036A00029F0872D8F710E9444205BC00E943A2030 -:1036B00058C0112351F0172D1F71812F0E945920DE -:1036C00063E0812F0E946D214CC081E00E94762131 -:1036D000023008F446C082E00E94762142C01123E5 -:1036E00031F0002381F28C2D0E9471183AC0002322 -:1036F00089F28C2D0E94391934C0472D4F706C2DE2 -:10370000C7010E94B5030E945E1F2BC0111129C082 -:10371000472D4F7050E042305105B9F04CF441153F -:10372000510581F041305105E1F40E946C2819C027 -:103730004330510569F04430510599F48C2D0E94B5 -:10374000BE280FC00E9455280CC00E94882809C0BE -:103750000E949B2806C0472D4F706C2DC7010E9408 -:103760002B06DD20F9F00E94692180FD1BC0F701C6 -:1037700012820E9463210E945920C7010E94E11B0E -:103780000E9463210F90DF91CF911F910F91FF90C5 -:10379000EF90DF90CF90BF90AF909F908F907F90F1 -:1037A0000C947A200F90DF91CF911F910F91FF9091 -:1037B000EF90DF90CF90BF90AF909F908F907F90D1 -:1037C00008950F931F93CF93DF93EC018881998124 -:1037D0002B813C81232BB9F09F3F11F48F3F99F04F -:1037E000CE010E942A04882371F0688179818A8140 -:1037F0000E945F218C010E9414210E94DB1FB801EE -:10380000CE010E949619DF91CF911F910F910895DB -:103810000E9437220E9447220E940C220E946122AD -:103820000E9422260E94712580E090E00E945C1791 -:1038300080E090E00C9472170E9427220C94081CE0 -:103840000E945421292F22952F7030E02C30310511 -:103850004CF42A3031056CF4225031092230310504 -:10386000A8F407C02C30310569F02F30310551F034 -:103870000DC0803F69F018F4803E40F409C0843FD9 -:1038800029F406C093FB882780F9089580E0089505 -:1038900081E00895CF93DF9300D000D01F92CDB781 -:1038A000DEB70F900F900F900F900F90DF91CF9198 -:1038B0000895CF93DF9300D000D000D0CDB7DEB70E -:1038C00026960FB6F894DEBF0FBECDBFDF91CF9125 -:1038D00008951F93CF93DF93C0919D0216E08091CE -:1038E0009E02C81799F0D0E01C9FF0011D9FF00DBB -:1038F0001124E156FD4F40815181628173818481A1 -:1039000095810E94591C2196C770E9CFDF91CF9114 -:103910001F9108954091CF025091D0026091D10241 -:103920007091D2028091D3029091D4020C94591CD0 -:103930008091D40282958F7009F054C08091D10299 -:10394000882309F44FC080919D02A0919E0260914E -:10395000CF027091D0024091D2025091D302B6E0D2 -:103960008A1709F43FC090E041155105C1F17F3F2E -:1039700011F46F3FA1F1B89FF001B99FF00D112430 -:10398000E156FD4F218172132AC02081621327C0A6 -:103990002281211124C0238134812417350710F49A -:1039A00021503109241B350B283C3105C0F42091EE -:1039B000D4022F7020612093D40226E0289FF001CA -:1039C000299FF00D1124EC55FD4F80818F7080618F -:1039D00080838FEC92E00E94E11B0C94691C01969D -:1039E0008770BECF0895CF92DF92EF92FF920F9330 -:1039F0001F93CF93DF93CDB7DEB762970FB6F894DE -:103A0000DEBF0FBECDBF8C0185E0F801DE011D9643 -:103A100001900D928A95E1F7D8014C9111965C9135 -:103A2000119712966C9112971396CD90DC90149783 -:103A30003091CF027091D0028091D2029091D30246 -:103A4000009709F46BC17F3F19F43F3F09F466C149 -:103A5000E090D102EE2009F4C0C02091D402C81633 -:103A6000D90628F0F601E81BF90BCF0104C08095B8 -:103A700090958C0D9D1DFF24F394883C910578F062 -:103A8000F12C207F09F0C6C07C2DD98AC88A89898B -:103A90000E944A1C8FEC92E00E94E11BB1C0822F71 -:103AA000807F09F046C0751314C0341312C0611131 -:103AB00010C02F7020612093D4020E948A1C8FECCA -:103AC00092E00E94E11B8091D402D80115968C935C -:103AD0002EC0CD2819F15F3F11F44F3FF9F0F62EBB -:103AE00061111CC080919D0220919E0236E08217D8 -:103AF00009F45AC090E0389FF001399FF00D11246D -:103B0000E156FD4F7181571306C07081471303C002 -:103B10007281711103C001968770E9CFF62E66237A -:103B200009F418C18091D40281608093D402F12CF1 -:103B300011C1751308C0341306C0611104C080910F -:103B4000D402D801C3C04D875E878D859E856A8B60 -:103B50000E94201C6A898823E1F16623D1F120911B -:103B6000D402822F82958F7090E0029774F080913A -:103B7000CF029091D00298878F831986DB86CA8600 -:103B80002C87CE0107960E94E11B86E0F801AFEC7E -:103B9000B2E001900D928A95E1F70E94981C0E9474 -:103BA0008A1CFF24F394D6C04D875E878D859E8541 -:103BB0000E945421292F22952F7030E022303105A8 -:103BC0000CF0BCC09F7009F0B6C0805E883008F46D -:103BD000C1C0C8010E94E11BE4CFC816D90608F491 -:103BE00053C0F601E81BF90BCF01883C910508F49E -:103BF00050C0F12C7C2DD98AC88A89890E944A1C20 -:103C0000EFECF2E086E0DF011D928A95E9F70E9471 -:103C10008A1CA0C0751314C0341312C0611110C0E7 -:103C20008091D402F8018583C8010E94E11B86E0DF -:103C3000EFECF2E0DF011D928A95E9F7FE2C8AC0D5 -:103C40004D875E878D859E856A8B0E94201C6A89C0 -:103C5000882309F4BECF662309F4BBCF2091D40298 -:103C6000822F82958F7090E002970CF48ECF809116 -:103C7000CF029091D0029A8389831B82DD82CC820D -:103C80002E83CE0101967FCF809590958C0D9D1D42 -:103C9000ACCFF62E662309F49CCF75132EC03413D7 -:103CA0002CC02091D40220FD1FC0822F82958F70DE -:103CB000D9F0D80115962C9315978F3049F08F5F66 -:103CC000982F9295907F822F8F70892B15968C93C9 -:103CD000C8010E94E11B86E0F801AFECB2E0019060 -:103CE0000D928A95E1F793CF86E0F801AFECB2E050 -:103CF00001900D928A95E1F72DC04D875E878D85E5 -:103D00009E850E94201C811140CF8091D402816049 -:103D10008093D402C8010E94E11B1CC0662309F4F1 -:103D200058CF4D875E878D859E850E94201C8823F5 -:103D300009F44FCF2ACF811148CF0CC02430310570 -:103D40000CF047CF9F7009F440CFF8019581907F28 -:103D500009F03BCF8F2D62960FB6F894DEBF0FBEF1 -:103D6000CDBFDF91CF911F910F91FF90EF90DF902A -:103D7000CF9008951F93CF93DF93CDB7DEB72C97E5 -:103D80000FB6F894DEBF0FBECDBF4F83588769874B -:103D90007A878B879C87CE0107960E94F31C882325 -:103DA00069F08F8198852A853B85232BF1F19F3F10 -:103DB00009F063C08F3F09F060C037C086E0FE01A4 -:103DC0003796DE01119601900D928A95E1F76F8189 -:103DD0007885EA85FB85309741F17F3F11F46F3F8D -:103DE00021F120919E0230E0C90101968770992748 -:103DF00040919D0250E08417950709F447C06983FC -:103E00007A83FD83EC8396E0929FD001939FB00D5F -:103E10001124A156BD4FFE01319601900D929A9545 -:103E2000E1F780939E020E94691C16E080919D023A -:103E300090919E028917C1F1189FC00111248156EB -:103E40009D4F0E94F31C882379F1E0919D021E9FF3 -:103E5000F0011124E156FD4F40815181628173814F -:103E6000848195810E94591C80919D0290E0019669 -:103E70008770992780939D02D9CF4F815885698596 -:103E80007A858B859C850E94591CCFCF0E941C1C73 -:103E900010929E0210929D02EFECF2E086E0DF01AC -:103EA0001D928A95E9F7C1CF2C960FB6F894DEBF24 -:103EB0000FBECDBFDF91CF911F910895EF92FF927A -:103EC0000F931F93CF93DF938C01009709F46CC07D -:103ED000F12CEE24E394E8012196F80184918437D3 -:103EE00040F4843008F051C0813081F0823019F103 -:103EF0005BC0853709F444C0A8F19CE7980F903760 -:103F000008F052C08F770E94391941C00E5F1F4FD1 -:103F1000FE01C49180E28C0F883048F4C7708E2D6A -:103F200001C0880FCA95EAF70E943A2214C08C2F6C -:103F30000E9471182DC00E5F1F4FFE01C49180E2D8 -:103F40008C0F883058F4C7708E2D01C0880FCA9529 -:103F5000EAF70E9440220E9461221AC08C2F0E9420 -:103F6000391916C00E5F1F4FFE01C491CC2381F09A -:103F70008FE99FE00197F1F700C00000C150F6CF34 -:103F80000E5F1F4FFE01F49003C00E9471188E0156 -:103F90008F2D882309F49FCFEFE9FFE03197F1F7E8 -:103FA00000C000008150F5CFDF91CF911F910F919C -:103FB000FF90EF90089508956093D9027093DA020C -:103FC0008093DB029093DC020C94081C0F931F93E8 -:103FD0000091D9021091DA022091DB023091DC02CB -:103FE000DC01CB01802B912BA22BB32B8093D90228 -:103FF0009093DA02A093DB02B093DC021F910F9141 -:104000000C94081C0F931F930091D9021091DA02AF -:104010002091DB023091DC02DC01CB018023912373 -:10402000A223B3238093D9029093DA02A093DB02F8 -:10403000B093DC021F910F910C94081C0F931F93F7 -:104040000091D9021091DA022091DB023091DC025A -:10405000DC01CB0180279127A227B3278093D902C7 -:104060009093DA02A093DB02B093DC021F910F91D0 -:104070000C94081C1092D5021092D6021092D7020E -:104080001092D8020C94081C41E050E060E070E00F -:1040900004C0440F551F661F771F8A95D2F74093BF -:1040A000D5025093D6026093D7027093D8020C9435 -:1040B000081C41E050E060E070E004C0440F551F70 -:1040C000661F771F8A95D2F78091D5029091D6020C -:1040D000A091D702B091D802482B592B6A2B7B2B89 -:1040E0004093D5025093D6026093D7027093D802C2 -:1040F0000C94081C41E050E060E070E004C0440F04 -:10410000551F661F771F8A95D2F740955095609589 -:1041100070958091D5029091D602A091D702B0916E -:10412000D802482359236A237B234093D502509316 -:10413000D6026093D7027093D8020C94081C41E019 -:1041400050E060E070E004C0440F551F661F771F09 -:104150008A95D2F78091D5029091D602A091D7028C -:10416000B091D802482759276A277B274093D50268 -:104170005093D6026093D7027093D8020C94081C17 -:104180000F931F930091D5021091D6022091D70270 -:104190003091D802DC01CB01802B912BA22BB32BC9 -:1041A0008093D5029093D602A093D702B093D80201 -:1041B0001F910F910C94081C0F931F930091D5022F -:1041C0001091D6022091D7023091D802DC01CB01A8 -:1041D00080239123A223B3238093D5029093D60208 -:1041E000A093D702B093D8021F910F910C94081C92 -:1041F0000F931F930091D5021091D6022091D70200 -:104200003091D802DC01CB0180279127A227B32768 -:104210008093D5029093D602A093D702B093D80290 -:104220001F910F910C94081C0895CF92DF92EF928A -:10423000FF920F931F93CF93DF938C01C090D9020D -:10424000D090DA02E090DB02F090DC028091D5029F -:104250009091D602A091D702B091D802C82AD92A4B -:10426000EA2AFB2ACFE1D0E0D701C6010C2E04C018 -:10427000B695A795979587950A94D2F780FF06C0C3 -:10428000B8018C2F0E94B008019721F4219760F7A4 -:1042900080E001C08C2FDF91CF911F910F91FF9093 -:1042A000EF90DF90CF900895CF93DF93EC010E94C1 -:1042B0001521BE010E94B008DF91CF910895CB0176 -:1042C0000E94542108958091DD02859585958595FC -:1042D00008958091DD028770089598E0899F90018C -:1042E0001124262B2093DD020C9459202091DD020D -:1042F000809582238093DD02982F977069F430E0D7 -:10430000482F552747FD50952417350729F08595E7 -:10431000859585950C947A2008959091DD0297708B -:1043200081E009F480E0089590911501992321F02E -:1043300090911601911109C0209117013091180137 -:10434000F90132969FEF40E01FC0982F9695969501 -:1043500096959F3050F5E0911701F0911801E90F03 -:10436000F11D877021E030E0A90102C0440F551F04 -:104370008A95E2F7CA019181892B818308959F3F35 -:1043800039F04F5F4E3041F051915813F8CF0DC0C6 -:104390005111F7CF942FF5CF9F3F39F0F901E90F75 -:1043A000F11D97FDFA958283089508959091150166 -:1043B000992321F090911601911109C020911701C4 -:1043C00030911801F9013296205F3F4F1FC0982F9E -:1043D0009695969596959F30F0F4E0911701F0919F -:1043E0001801E90FF11D877021E030E0A90102C03A -:1043F000440F551F8A95E2F7CA0180959181892360 -:10440000818308953196E217F30729F0908198137C -:10441000F9CF1082F7CF089581E090E0E091170185 -:10442000F0911801E80FF91F108201968031910573 -:10443000A9F708959091F102892B8093F1020895D4 -:1044400080959091F10289238093F1020895109252 -:10445000F10208959091F002892B8093F002089563 -:1044600080959091F00289238093F0020895109234 -:10447000F00208959091EF02892B8093EF02089546 -:1044800080959091EF0289238093EF020895109216 -:10449000EF0208958093DE0208951092DE020895DF -:1044A0008091170190911801FC0131969C01205FC9 -:1044B0003F4F80E0919191118F5FE217F307D1F7A1 -:1044C0000895E0911701F09118018091F102808325 -:1044D000E0911701F091180190818091F002892BF1 -:1044E0008083E0911701F091180190818091EF0293 -:1044F000892B80838091DE02882361F0E09117018F -:10450000F09118019081892B80830E9450228111A3 -:104510001092DE0280911701909118010C944617B9 -:1045200020E0009739F0AC014150510984239523D4 -:104530002F5FF7CF822F089580911303843039F1D4 -:104540001092F30220E488E190E00FB6F894A89569 -:10455000809360000FBE2093600080E00E941C03E7 -:1045600080E00E944A0983B7817F846083BF83B75C -:10457000816083BF7894889583B78E7F83BF88E1FD -:104580000FB6F89480936000109260000FBE0895FB -:104590000895089580E00E941C030E94C8220E9492 -:1045A000A5090E94C9220E942A0A91E0811101C036 -:1045B00090E0892F08950E941C1C80E00E941C033B -:1045C0000E9444280E943A170C944A091F920F92A5 -:1045D0000FB60F9211248F939F93AF93BF93809147 -:1045E000F302811113C08091F4029091F502A09121 -:1045F000F602B091F7024196A11DB11D8093F4021D -:104600009093F502A093F602B093F702BF91AF9199 -:104610009F918F910F900FBE0F901F90189582E081 -:1046200084BD93E095BD9AEF97BD80936E00089589 -:104630002FB7F8948091F4029091F502A091F602C0 -:10464000B091F7022FBF0895CF92DF92EF92FF92C1 -:104650000F931F932FB7F8944091F4025091F502F5 -:104660006091F6027091F7022FBF6A017B01EE2480 -:10467000FF248C0120E030E0C016D106E206F306EC -:1046800010F4415051099A01281B390BC9011F919F -:104690000F91FF90EF90DF90CF9008951F920F92AF -:1046A0000FB60F9211248F939F93AF93BF93809176 -:1046B000F4029091F502A091F602B091F7020196F2 -:1046C000A11DB11D8093F4029093F502A093F60210 -:1046D000B093F702BF91AF919F918F910F900FBE52 -:1046E0000F901F9018950E943714F8942FEF87EAC7 -:1046F00091E6215080409040E1F700C0000087E043 -:1047000090EBDC0180931E0390931F03A093200382 -:10471000B09321039CE088E10FB6F894A8958093AC -:1047200060000FBE90936000FFCF0E94D4238111E0 -:1047300002C00E94B0230E94DF238093F2020E94F5 -:10474000E72380931C0387FB882780F98093160159 -:104750000E94E323682F70E080E090E00C94DC1F5F -:104760006DEE7EEF80E090E00E94FB2C60E082E046 -:1047700090E00E94E92C60E083E090E00E94E92C48 -:1047800060E084E090E00E94E92C60E085E090E049 -:104790000E94E92C60E086E090E00E94E92C6FEF37 -:1047A00087E090E00C94E92C80E090E00E94E32CFC -:1047B00021E08D3E9E4F09F020E0822F089582E097 -:1047C00090E00C94DB2C83E090E00C94DB2C84E0F4 -:1047D00090E00C94DB2C682F84E090E00C94E92CA2 -:1047E00086E090E00C94DB2C682F86E090E00C943F -:1047F000E92C87E090E00C94DB2C682F87E090E0B8 -:104800000C94E92C8091FA0280FF0BC060911C018E -:1048100085E0689FB001112475956795759567953A -:104820002BC081FF09C060911C0185E0689FB00129 -:1048300011247595679520C082FF07C060911C0107 -:1048400085E0689FB001112417C09091FB02992365 -:10485000D1F060911B01961788F720911C0185E02B -:10486000289F90011124929FA001939F500D112425 -:1048700070E0CA010E94C12C6038710540F46115D6 -:10488000710539F002C065E070E0862F08958FE76A -:10489000089581E008958091FA0280FF08C0609138 -:1048A0001A0170E0759567957595679521C081FF30 -:1048B00006C060911A0170E07595679519C082FF76 -:1048C00004C060911A0170E010C09091FB0299231E -:1048D000C1F0609119019617A0F780911A01899F84 -:1048E000C001112470E00E94C12C6038710528F4C9 -:1048F0006115710521F0862F08958FE7089581E0F5 -:10490000089561E070E0F4CF803F21F40E9402241A -:10491000819504C0813F29F40E9402248093FE0205 -:104920000895823F21F40E940224819504C0833FB0 -:1049300029F40E9402248093FD020895893F19F40E -:104940000E944B2405C08A3F31F40E944B2481957C -:104950008093FF0208958B3F21F40E944B248195A0 -:1049600004C08C3F29F40E944B24809300030895D7 -:10497000843F21F48091FC02816017C0853F21F4BF -:104980008091FC02826011C0863F21F48091FC027C -:1049900084600BC0873F21F48091FC02886005C0D1 -:1049A000883F31F48091FC0280618093FC0208957D -:1049B0008D3F21F48091FA0281600BC08E3F21F47B -:1049C0008091FA02826005C08F3F29F48091FA023B -:1049D00084608093FA020895803F39F48091FE024A -:1049E00087FF6CC01092FE0269C0813F29F480915C -:1049F000FE021816BCF362C09091FD02823F29F4BA -:104A000097FF5CC01092FD0259C0833F19F419163C -:104A1000CCF354C0893F41F48091FF0218160CF08A -:104A20004DC01092FF024AC08A3F29F48091FF02D4 -:104A300087FF44C0F6CF8B3F39F48091000387FF96 -:104A40003DC0109200033AC08C3F29F480910003CE -:104A50001816BCF333C0843F21F48091FC028E7F92 -:104A600017C0853F21F48091FC028D7F11C0863FE5 -:104A700021F48091FC028B7F0BC0873F21F4809151 -:104A8000FC02877F05C0883F31F48091FC028F7E55 -:104A90008093FC0213C08D3F21F48091FA028E7F37 -:104AA0000BC08E3F21F48091FA028D7F05C08F3FAD -:104AB00029F48091FA028B7F8093FA028091FD02A3 -:104AC00081110EC08091FE0281110AC08091FF0207 -:104AD000811106C080910003811102C01092FB0277 -:104AE00008958CEF92E00E9451170E941823909332 -:104AF000F9028093F80208951F93CF93DF9380917A -:104B0000F8029091F9020E942423AC019091FB02DB -:104B1000992321F020911D0130E006C020911E0153 -:104B20008AE0289F900111244217530708F486C099 -:104B30008091FD02C091FE02D091FF02109100030E -:104B4000811107C0C11176C0D11174C0111172C09A -:104B500075C09F3F19F09F5F9093FB02181624F4D5 -:104B60000E9402248093FD028091FD0287FF05C010 -:104B70000E94022481958093FD021C1624F40E9459 -:104B800002248093FE028091FE0287FF05C00E94EE -:104B9000022481958093FE026091FD02662339F123 -:104BA000C091FE02CC2319F1772767FD7095872FFE -:104BB000972F0E94E32923E333E343E35FE30E945B -:104BC000F32A0E94B0296093FD026C2F772767FDBE -:104BD0007095872F972F0E94E32923E333E343E364 -:104BE0005FE30E94F32A0E94B0296093FE021D1623 -:104BF00024F40E944B248093FF028091FF0287FFE0 -:104C000005C00E944B2481958093FF02111624F465 -:104C10000E944B24809300038091000387FF05C00E -:104C20000E944B24819580930003DF91CF911F91C7 -:104C30000C9471259F3F09F08ECF96CFDF91CF91D5 -:104C40001F910895ECEFF2E085E0DF011D928A9557 -:104C5000E9F71092FB021092FA020895833081F175 -:104C600028F4813059F08230D1F00895853009F46C -:104C700049C0B8F1863009F456C0089580911E01EC -:104C8000262F30E0280F311D2F3F310524F4680F07 -:104C900060931E0108958FEF80931E010895809107 -:104CA0001D01262F30E0280F311D2F3F310524F440 -:104CB000680F60931D0108958FEF80931D01089583 -:104CC00080911C01262F30E0280F311D2F3F310528 -:104CD00024F4680F60931C0108958FEF80931C01EA -:104CE000089580911B01262F30E0280F311D2F3FA2 -:104CF000310524F4680F60931B0108958FEF8093B2 -:104D00001B01089580911A01262F30E0280F311DD4 -:104D10002F3F310524F4680F60931A0108958FEF37 -:104D200080931A01089580911901262F30E0280FF1 -:104D3000311D2F3F310524F4680F60931901089548 -:104D40008FEF809319010895833011F128F4813099 -:104D500049F0823091F00895853081F120F186305C -:104D6000C1F1089580911E01681720F4861B80937D -:104D70001E01089510921E01089580911D0168176B -:104D800020F4861B80931D01089510921D01089543 -:104D900080911C01681720F4861B80931C010895E4 -:104DA00010921C01089580911B01681720F4861B46 -:104DB00080931B01089510921B01089580911A01A0 -:104DC000681720F4861B80931A01089510921A0127 -:104DD000089580911901681720F4861B80931901AA -:104DE00008951092190108950F931F93873208F0C8 -:104DF00048C08E3108F08DC0803109F477C008F5C5 -:104E0000873009F461C068F4863009F09DC0809154 -:104E1000F202817F8E7F8093F20281E08093020311 -:104E200094C08B3009F489C08E3009F08DC0809118 -:104E3000F20282FB222720F991E0922790FB82F96F -:104E40005EC0863109F479C060F4813109F07CC01C -:104E50000E941C1C9091160181E089278093160105 -:104E60006CC0893109F469C08B3109F06DC0809143 -:104E7000F20281FB222720F991E0922790FB81F931 -:104E80003EC0883309F459C050F4893209F457C040 -:104E9000853309F454C0873209F451C055C08334B6 -:104EA00009F44DC028F48A3308F44EC0895332C047 -:104EB000883409F049C00E941C1C0E945A0A0E94B2 -:104EC00021040E94732339C09091F202892F8095AA -:104ED000817080FB90F929F0966098609093F202BF -:104EE00034C0997F977F9093F20227C08091F2029D -:104EF00083FB222720F991E0922790FB83F980938E -:104F0000F2029923D1F08091F20281608093F20243 -:104F100014C08D5141E050E060E070E08A019B01D7 -:104F200004C0000F111F221F331F8A95D2F7C90139 -:104F3000B8010E94DC1F0E941C1C81E006C061E0D9 -:104F400070E080E090E0F5CF80E01F910F91089530 -:104F500080E0089580E00895CF93C82F80910203E8 -:104F6000813069F018F08230C9F184C0E0911701F6 -:104F7000F09118018081823209F07EC007C0E09173 -:104F80001701F09118018081823261F48C2F0E9408 -:104F9000A827811104C08C2F0E94F4261DC081E037 -:104FA00090E01AC08C2F0E94AA27811114C0C4312E -:104FB00079F048F4CB3079F0C03109F061C082E07B -:104FC0008093020308C0C93219F0C83321F058C0D9 -:104FD0001092020355C081E0817054C0C93291F132 -:104FE00020F5C43179F1B0F4C73009F047C08EE143 -:104FF00080931E0182E380931D018AE080931C014F -:1050000084E180931B0188E080931A0188E28093F9 -:10501000190134C0CE51C63088F5EC2FF0E0EA54C7 -:10502000FE4F80818093010329C0CE34E9F020F443 -:10503000CB3421F56AE013C0C13579F0C235F1F403 -:1050400061E00DC080910103882319F010920103E3 -:1050500015C081E08093020315C061E006C0809115 -:1050600001030E942E260AC06AE0809101030E947B -:10507000A42604C01092020380E004C081E002C0B4 -:1050800080E0AACFCF9108950E94D423811102C05D -:105090000E94B0230E94F02380931D0380FF02C072 -:1050A000869501C080E00C941C0380911D03982F0D -:1050B0009695292F30E0233031054CF49F5F990FEE -:1050C0008170892B816080931D030E94F42380915D -:1050D0001D0386950C941C0380911D03982F9695B3 -:1050E00091F09158990F8170892B80931D038E7FC9 -:1050F00091E009F490E080911D0390FB80F980938A -:105100001D030E94F42380911D0386950C941C03BB -:1051100080911D03982F909590FB80F980931D033B -:105120000E94F42380911D0380FF02C0869501C078 -:1051300080E00C941C0390911D03892F86958F5F4E -:105140008F779170843028F4880F892B80931D030A -:1051500002C090931D0380911D038E7F91E009F49E -:1051600090E080911D0390FB80F980931D030E94C5 -:10517000F42380911D0386950C941C0320911D033C -:10518000922F96958927982F990F822F8170892BBE -:1051900080931D038E7F91E009F490E080911D03C0 -:1051A00090FB80F980931D030E94F42380911D03DE -:1051B00086950C941C0380911D0386950895505884 -:1051C000BB27AA270ED0D1C1C2D130F0C7D120F061 -:1051D00031F49F3F11F41EF4B7C10EF4E095E7FBE4 -:1051E0009FC1E92FD3D180F3BA17620773078407F1 -:1051F000950718F071F49EF5EBC10EF4E0950B2EB7 -:10520000BA2FA02D0B01B90190010C01CA01A00118 -:105210001124FF27591B99F0593F50F4503E68F173 -:105220001A16F040A22F232F342F4427585FF3CFB4 -:10523000469537952795A795F0405395C9F77EF485 -:105240001F16BA0B620B730B840BBAF09150A1F0CE -:10525000FF0FBB1F661F771F881FC2F70EC0BA0F54 -:10526000621F731F841F48F4879577956795B795DC -:10527000F7959E3F08F0B3CF9395880F08F09927D4 -:10528000EE0F97958795089527D108F481E008954A -:105290000CD06BC163D140F05AD130F021F45F3FA4 -:1052A00019F03EC1511195C14FC170D198F39923A6 -:1052B000C9F35523B1F3951B550BBB27AA276217DA -:1052C0007307840738F09F5F5F4F220F331F441F1F -:1052D000AA1FA9F333D00E2E3AF0E0E830D0915057 -:1052E0005040E695001CCAF729D0FE2F27D0660F44 -:1052F000771F881FBB1F261737074807AB07B0E883 -:1053000009F0BB0B802DBF01FF2793585F4F2AF098 -:105310009E3F510568F004C15CC15F3FECF3983ECD -:10532000DCF3869577956795B795F7959F5FC9F7F5 -:10533000880F911D9695879597F90895E1E0660F7E -:10534000771F881FBB1F621773078407BA0720F0F7 -:10535000621B730B840BBA0BEE1F88F7E095089560 -:1053600004D06894B11135C1089518D188F09F57C1 -:1053700090F0B92F9927B751A0F0D1F0660F771FA1 -:10538000881F991F1AF0BA95C9F712C0B13081F081 -:105390001FD1B1E008951CC1672F782F8827B85F0F -:1053A00039F0B93FCCF3869577956795B395D9F7E2 -:1053B0003EF490958095709561957F4F8F4F9F4FEC -:1053C0000895E89409C097FB3EF4909580957095F8 -:1053D00061957F4F8F4F9F4F9923A9F0F92F96E941 -:1053E000BB279395F695879577956795B795F111B6 -:1053F000F8CFFAF4BB0F11F460FF1BC06F5F7F4F53 -:105400008F4F9F4F16C0882311F096E911C0772364 -:1054100021F09EE8872F762F05C0662371F096E86D -:10542000862F70E060E02AF09A95660F771F881F3C -:10543000DAF7880F9695879597F9089588D018F030 -:1054400011F08CD038F480C0C4C0E92F9FD0B0F3E5 -:105450005523C9F3E7FB6217730784079507A8F183 -:1054600099F3E92FFF2788232AF03197660F771FDA -:10547000881FDAF7952F5527442332F0915050407A -:10548000220F331F441FD2F7BB27E91BF50B621B0A -:10549000730B840BB109C1F222F4620F731F841FD6 -:1054A000B11D31972AF0660F771F881FBB1FEFCF02 -:1054B000915050405AF041F0882332F0660F771F28 -:1054C000881F91505040C1F7939530C086957795CD -:1054D00067959F5FD9F7F8CF990F0008550FAA0B72 -:1054E000E0E8FEEF16161706E807F907C0F01216F7 -:1054F0001306E407F50798F0621B730B840B950BFA -:1055000039F40A2661F0232B242B252B21F408954E -:105510000A2609F4A140A6958FEF811D811D0895EB -:1055200097F99F6780E870E060E008959F3F31F051 -:10553000915020F4879577956795B795880F911DC1 -:105540009695879597F908959FEF80EC089500242C -:105550000A941616170618060906089500240A94D8 -:1055600012161306140605060895092E0394000C5E -:1055700011F4882352F0BB0F40F4BF2B11F460FFED -:1055800004C06F5F7F4F8F4F9F4F089557FD905816 -:10559000440F551F59F05F3F71F04795880F97FBF7 -:1055A000991F61F09F3F79F08795089512161306B1 -:1055B0001406551FF2CF4695F1DF08C016161706E0 -:1055C0001806991FF1CF8695710561050894089515 -:1055D000E894BB2766277727CB0197F908957CDFEE -:1055E00008F48FEF08950BD0C0CFB1DF28F0B6DFFD -:1055F00018F0952309F094CFA7CF1124EACFC6DF86 -:10560000A0F3959FD1F3950F50E0551F629FF001D5 -:10561000729FBB27F00DB11D639FAA27F00DB11D2E -:10562000AA1F649F6627B00DA11D661F829F2227B7 -:10563000B00DA11D621F739FB00DA11D621F839F3E -:10564000A00D611D221F749F3327A00D611D231F14 -:10565000849F600D211D822F762F6A2F11249F5762 -:1056600050408AF0E1F088234AF0EE0FFF1FBB1F85 -:10567000661F771F881F91505040A9F79E3F510524 -:1056800070F04ECFA6CF5F3FECF3983EDCF38695EB -:1056900077956795B795F795E7959F5FC1F7FE2BCF -:1056A000880F911D9695879597F90895FA01EE0F49 -:1056B000FF1F30962105310599F16115710561F4DF -:1056C0008038BFE39B0749F168949038810561F009 -:1056D0008038BFEF9B0741F0992342F5FF3FE1057A -:1056E0003105210511F1E8940894E795D901AA2321 -:1056F00029F4AB2FBE2FF85FD0F310C0FF5F70F41A -:10570000A695E0F7F73950F019F0FF3A38F49F7793 -:105710009F930CD00F9007FC905808953EF014CF43 -:1057200060E070E080E89FE308954FE79F775F9324 -:105730004F933F932F939ED02F913F914F915F9125 -:1057400052DF05C019F40EF0EBCE42CFFDCE26DFBE -:10575000C8F39638C0F707F80F92E8942BE33AEABB -:1057600048EB5FE74EDF0F920F920F924DB75EB797 -:105770000F92C0D0EAE0F1E016D04F915F91EF9127 -:10578000FF91E595EE1FFF1F49F0FE57E0684427A3 -:10579000EE0F441FFA95E1F74195550B32D00F906B -:1057A00007FE26C00895DF93CF931F930F93FF92B8 -:1057B000EF92DF927B018C01689405C0DA2EEF0135 -:1057C0001EDFFE01E894A5912591359145915591F3 -:1057D000AEF3EF0106DDFE019701A801DA9479F737 -:1057E000DF90EF90FF900F911F91CF91DF9108957F -:1057F0009B01AC0160E070E080E89FE349CD90CE72 -:1058000095CECCDEE8F39923D9F3940F511DBBF369 -:105810009150504094F059F0882332F0660F771F72 -:10582000881F91505040C1F79E3F510544F7880FA3 -:10583000911D9695879597F908955F3FACF0983E36 -:105840009CF0BB27869577956795B79508F4B1606E -:105850009395C1F7BB0F58F711F460FFE8CF6F5F66 -:105860007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE05 -:10587000689456CE93DEC8F39923D1F3C6F3DF9331 -:10588000CF931F930F93FF92C92FDD2788232AF010 -:105890002197660F771F881FDAF720E030E040E895 -:1058A0005FEB9FE3883920F0803E30F021968F77C0 -:1058B00087DCE2E3F1E003C083DCEFE5F1E073DFD6 -:1058C0008B01BE01EC01FB2E6F5771097595771F97 -:1058D000880B990B78DD28E132E741E35FE38FDE47 -:1058E000AF2D9801AE01FF900F911F91CF91DF91E5 -:1058F00078DC3BCEFA01DC01AA0FBB1F9B01AC0197 -:10590000BF5728F422273327442750781FC0B751A8 -:1059100088F4AB2F0024469537952795011CA39555 -:10592000D2F3002069F0220F331F441FB395DAF33E -:105930000DD045CC61307105A0E88A07B94630F436 -:105940009B01AC016627772788279078309621F055 -:1059500020833183428353830895AA1BBB1B51E1EB -:1059600007C0AA1FBB1FA617B70710F0A61BB70BCF -:10597000881F991F5A95A9F780959095BC01CD0174 -:10598000089597FB072E16F4009407D077FD09D0F1 -:105990000E94AD2C07FC05D03EF4909581959F4F59 -:1059A0000895709561957F4F0895EE0FFF1F059044 -:1059B000F491E02D0994F999FECF92BD81BDF89A3A -:1059C000992780B50895A8E1B0E042E050E00C943A -:1059D000032D262FF999FECF92BD81BDF89A01972C -:1059E00000B4021639F01FBA20BD0FB6F894FA9A27 -:1059F000F99A0FBE08950196272F0E94EA2C0C9465 -:105A0000E92CDC01CB01FC01F999FECF06C0F2BD07 -:105A1000E1BDF89A319600B40D9241505040B8F76C -:065A20000895F894FFCF89 -:105A2600640007000CFF0000003F643E10CC10A984 -:105A360010751041100101DF022808140A321E00F9 -:105A460002040507090B0C0E1011131517181A1C62 -:105A56001D1F2123242628292B2D2F30323435379C -:105A6600393B1F0F03764F5F6F7F496943790959A9 -:105A760053633149803F5D8B803FF8BF803FCAE169 -:105A8600803F73ED803FCAE1803FF8BF803F5D8B6A -:105A9600803F3149803F0000803FF16D7F3F75EACE -:105AA6007E3F4C827E3F833F7E3F84287E3F833FFE -:105AB6007E3F4C827E3F75EA7E3FF16D7F3F000060 -:105AC600803F3F4D36394305F604C00487041A0467 -:105AD60033044C04650401020304050607080900A3 -:00000001FF diff --git a/keyboard/planck/keymaps/charlie/compiled.hex b/keyboard/planck/keymaps/charlie/compiled.hex deleted file mode 100644 index 335b49d898..0000000000 --- a/keyboard/planck/keymaps/charlie/compiled.hex +++ /dev/null @@ -1,1445 +0,0 @@ -:100000000C947D020C94C1020C94C1020C94C102A8 -:100010000C94C1020C94C1020C94C1020C94C10254 -:100020000C94C1020C94C1020C945F140C94311511 -:100030000C9493220C94C1020C94C1020C94C10242 -:100040000C94C1020C9423030C94C1020C94C102C1 -:100050000C94C1020C94FB220C94C1020C94C102BA -:100060000C94C1020C94C1020C94C1020C94C10204 -:100070000C94C1020C94C1020C94C1020C94C102F4 -:100080000C94D40A0C94C1020C94C1020C94C102C9 -:100090000C94C1020C94C1020C94C1020C94C102D4 -:1000A0000C94C1020C94C1020C94C1029E15C0159F -:1000B000AE16C015AE1605162816AE167D1690168D -:1000C0007A197A19A919A919E819081A5E1B5E1B71 -:1000D000131A5E1BC31AC31A2A1B331B5E1B581B41 -:1000E000D01AD01AD01AD01AD01AD01AD01AD01AC0 -:1000F000D01AD01AD01AD01AD01AD01AD01AD01AB0 -:10010000E01AEE1AF51AFC1A061B07634236B79B73 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000018C9F -:1001D000028CF1A242070C0310022A041B074507F8 -:1001E0002D010B0116013E033B013B0327010B03CD -:1001F0001603400741071B032D022A032E021D018F -:100200001C011501290014001A0008001500170030 -:100210001C0018000C001200130002202A00040029 -:100220001600070009000A000B000D000E000F0069 -:10023000330034002B001D001B00060019000500D0 -:100240001100100036003700380028004C00E00094 -:100250000000E100E2002C000000500051005200BC -:100260004F0000004C0027001E001F00200021004E -:1002700022002300240025002600012012000A008D -:100280001600180017001B207000430044004000B7 -:10029000410042002B000420052006203A000720E0 -:1002A0006D006E0072006F0071000920360037008B -:1002B00015000B2003202C000C203B0008203C00E4 -:1002C00069000000290019201A2000000000000029 -:1002D000000000000000000000000000000000001E -:1002E00000000000000000000000000000001320DB -:1002F00014201520060000001620052000001720FD -:1003000000000000000000000D2000000E200F2063 -:100310001020112003202C00122000000000730088 -:100320000000000028035400680065002000500011 -:100330006C0061006E0063006B0020004B006500E4 -:10034000790062006F0061007200640000002C03FD -:100350004F007200740068006F006C0069006E004E -:1003600065006100720020004B00650079006200AA -:100370006F00610072006400730000000403090450 -:1003800009026D00040100A0FA0904000001030144 -:100390000100092111010001223F00070581030826 -:1003A000000A0904010001030102000921110100F2 -:1003B00001224D000705820308000A09040200011A -:1003C0000300000009211101000122360007058306 -:1003D0000308000A090403000103000000092111B9 -:1003E00001000122390007058403100001120110E9 -:1003F0000100000008EDFE6060010001020001053F -:10040000010906A101050719E029E7150025019555 -:1004100008750181020508190129059505750191E5 -:10042000029501750391010507190029771500252B -:1004300001957875018102C005010980A10185023D -:1004400016010026B7001A01002AB70075109501A1 -:100450008100C0050C0901A1018503160100269C3D -:10046000021A01002A9C02751095018100C0050145 -:100470000902A1010901A1000509190129051500B9 -:10048000250195057501810295017503810105011D -:10049000093009311581257F9502750881060938D3 -:1004A0001581257F950175088106050C0A3802150E -:1004B00081257F950175088106C0C005010906A147 -:1004C00001050719E029E715002501950875018147 -:1004D0000295017508810105081901290595057521 -:1004E0000191029501750391010507190029FF1576 -:1004F0000025FF950675088100C011241FBECFEFAF -:10050000DAE0DEBFCDBF04B603FE24C080911E0337 -:1005100090911F03A0912003B09121038730904B4D -:10052000A740B04BB9F410921E0310921F03109213 -:1005300020031092210314BE84B7877F84BF88E113 -:100540000FB6F89480936000109260000FBEE0E058 -:10055000F8E3099511E0A0E0B1E0E0E8F9E502C0B8 -:1005600005900D92A03CB107D9F713E0A0ECB1E0E3 -:1005700001C01D92AE31B107E1F70E94A5110C94A4 -:10058000BE2C0C9400000895089581E0089508950C -:100590000C94C4020C94C5020C94C7020E948828D3 -:1005A00023E030E0281B3109220F2093C401089575 -:1005B000282F2F9880918000211108C0877F809379 -:1005C000800010928D0010928C001BC08860809378 -:1005D0008000233019F48FEF9FEF0FC083E090E08D -:1005E000821B9109880F991F2FEF3FEFA90102C0CD -:1005F000569547958A95E2F7CA0190938D008093AE -:100600008C000C94CE020E94CE0284E08093C30141 -:100610001092C0010895279A2F988FEF9FEF909323 -:100620008700809386008AE08093800089E1809330 -:1006300081000E94F1270C9403030E940B036E9A21 -:10064000769A0C94C3021F920F920FB60F92112448 -:100650002F933F938F939F93EF93FF93E091C1016B -:10066000F091C201CF0101969093C2018093C10124 -:100670000090C30102C0F695E7950A94E2F7EF7384 -:100680008091C001823019F4E03251F404C081300D -:1006900039F4EF3329F480916F008D7F80936F00E0 -:1006A000F0E0E457FE4FE49121E031E0E29FC00129 -:1006B000E39F900D11240090C40102C09695879588 -:1006C0000A94E2F790938D0080938C00FF91EF9154 -:1006D0009F918F913F912F910F900FBE0F901F9080 -:1006E000189581E008950C94710308950C941D03EE -:1006F00080911502882309F448C08091D10190911E -:10070000D201009779F40E94C5229093D201809380 -:10071000D1018091D30190E0009771F48091D401D0 -:1007200090E00AC00E94D122209100013091010185 -:100730002817390740F329C00197880F991F880FA0 -:10074000991FFC01EB52FE4F608171818281938180 -:100750000E943A0AE091D30184E0E89FF00111245D -:10076000EB52FE4F60817181828193814FE050E0B6 -:100770000E94F20D8091D30190E001966091D40126 -:1007800070E00E946E2C8093D3010C94C8021092EA -:1007900017020C94070A0895089581E080931702C8 -:1007A0000C94CC03089508958F929F92AF92BF92BC -:1007B000EF92FF920F931F93CF93DF93CDB7DEB7E6 -:1007C000A3970FB6F894DEBF0FBECDBF7C01FC012E -:1007D00000811181C8010E94C220B8010E94D90580 -:1007E0008C01B7010E947303882309F4CCC1003245 -:1007F000F0E51F0741F4F7018281882309F458C00E -:100800000E94560EC0C10132F0E51F0741F4F70106 -:100810008281882309F44CC00E945F0EB4C1023269 -:10082000F0E51F0751F4F7018281882309F440C0E5 -:100830000E94520E8111F0CFE3CF0332F0E51F0783 -:1008400039F4F7018281882399F10E94CD039BC17D -:100850000432F0E51F0739F4F7018281882341F162 -:100860000E94C70390C10532F0E51F0749F4F70164 -:1008700082818823E9F0809117028111F1CFE5CFC1 -:100880000632F0E51F0739F4F7018281882381F0F1 -:100890000E94660E0AC00732F0E51F0749F4F7010F -:1008A0008281882329F00E94710E0E94D3036BC1BC -:1008B00080911702811105C0F70182818111CFC09B -:1008C00018C1003E110579F4F7018281882309F4EB -:1008D0004DC00E94070A81E0809316021092150213 -:1008E0001092D40150C1023E110559F4F7018281E2 -:1008F0008823E1F10E94070A109216021092150255 -:1009000042C1033E110591F4F7018281882371F100 -:100910000E94070A1092160281E08093150210923D -:10092000D3011092D2011092D1012DC102351105CF -:1009300059F4F7018281882309F425C180910001CF -:10094000909101010A970DC00135110579F4F70165 -:100950008281882309F417C18091000190910101DF -:100960000A9690930101809300010DC1409104010A -:1009700083E2EFE1F1E0DE01119601900D928A959C -:10098000E1F7F701808121E030E02C0F3D1F280FB7 -:10099000311DC9012091020130910301FC01E20FD8 -:1009A000F31F6081772767FD7095640F711D88279D -:1009B00077FD8095982F0E94902920E030E040E458 -:1009C00051E40E94F5284B015C01F701218184E08C -:1009D00090E0821B9109BC01882777FD8095982FB4 -:1009E0000E9490299B01AC01C501B4010E948D2891 -:1009F0009B01AC0160E070E080E090E40E94032B7A -:100A000020E030E04CED50E40E94A02A4B015C0154 -:100A1000F70182818823D1F04FE050E0C501B40195 -:100A20000E94F20D809116028823A1F08091D401DA -:100A300024E0829FF0011124EB52FE4F80829182CC -:100A4000A282B3828F5F8093D40104C0C501B40138 -:100A50000E943A0A0F3F110508F02ECF94C08091F2 -:100A6000D00181111FC0043130E5130709F051C0D6 -:100A70000E94750381E08093D0010E94C52290936B -:100A8000CF018093CE011092C7011092C90110923C -:100A9000C8011092CB011092CA011092CD011092A0 -:100AA000CC0171C08091CE019091CF010E94D122E2 -:100AB000883C910570F48091C701E82FF0E0EE0FBB -:100AC000FF1FE853FE4F118300838F5F8093C701A0 -:100AD0005AC0043880E5180721F00538104501F1A7 -:100AE0003AC0F7018281882341F01092C50182E06B -:100AF0001EC0043830E5130759F58091C5018111F6 -:100B000006C086E20E941E1886E20E94E61882E075 -:100B10001CC00438F0E51F0741F305381045D9F42F -:100B2000F7018281882331F01092C60180E20E9491 -:100B3000351929C08091C601811106C087E20E9443 -:100B40001E1887E20E94E61880E20E943C191BC032 -:100B50000538104529F381E08093C5018093C601D3 -:100B6000C701A3960FB6F894DEBF0FBECDBFDF91CD -:100B7000CF911F910F91FF90EF90BF90AF909F90FA -:100B80008F900C94CA0280E0A3960FB6F894DEBF53 -:100B90000FBECDBFDF91CF911F910F91FF90EF90CE -:100BA000BF90AF909F908F90089580E090E008955F -:100BB00008959CE0799FF001112490E3899FE00D56 -:100BC000F11D1124E60FF11DEE0FFF1FEC5FFD4F2D -:100BD000859194910895880F991FFC01E45BFF4F64 -:100BE000859194910895880F991FFC01E453FE4F5D -:100BF0008591949108950F931F93CF93DF93EC0108 -:100C0000811521E39207A0F5C11580E3D80708F00C -:100C1000D7C0C83ED105D8F4C03ED10508F007C200 -:100C2000C83AD10578F4C53AD10508F06AC0C13098 -:100C3000D10509F463C008F4F7C1C430D10508F048 -:100C4000F6C1F2C1CB3BD10508F466C0EDC1C115B8 -:100C500090E2D90708F0AFC0C11521E0D20708F033 -:100C6000E6C1C03FD10508F4DFC18E0110651FC287 -:100C7000C03880E5D80700F5C03790E5D90708F0FF -:100C8000A3C0C11520E5D20709F4ACC050F4CE01D1 -:100C9000905480319F4008F0C7C1DF708E01106A08 -:100CA00006C2C13080E5D80709F4AEC0C43190E572 -:100CB000D90708F4AFC0B8C1C33820E5D20709F49A -:100CC0008EC050F4C13890E5D90709F482C008F00D -:100CD00083C000E011EDEBC1C03181E5D80708F415 -:100CE000A3C1C11597E5D90708F436C1CE019057C5 -:100CF0008115904108F098C1DF7093C101E010E0C8 -:100D0000D6C1C53AD10509F494C1C63AD10509F056 -:100D100093C102E810E4CBC1C83AD10509F48FC1F0 -:100D2000C93AD10509F48EC1CA3AD10509F48DC179 -:100D3000CB3AD10509F48CC1CC3AD10509F48BC169 -:100D4000CD3AD10509F48AC1C03BD10509F489C166 -:100D5000CE3AD10509F488C1CF3AD10509F487C14B -:100D6000C13BD10509F486C1C23BD10509F485C157 -:100D7000C33BD10509F484C1C43BD10509F483C147 -:100D8000C53BD10509F482C1C63BD10509F481C137 -:100D9000C73BD10509F480C1C83BD10509F47FC127 -:100DA000C93BD10509F47EC1CA3BD10509F47DC117 -:100DB00000E014E47CC1CE019F700E94F30578C16D -:100DC000DD278E01106C73C1CF70DD278E01146D8D -:100DD0006EC100E010ED6BC100E012ED68C100E0F3 -:100DE00013ED65C10E94C91B0E94070A0E94CB0334 -:100DF0008FEF94E32CE0815090402040E1F700C059 -:100E000000000E94202353C18091F20281608093F0 -:100E1000F2024DC10E948123811102C00E945D2314 -:100E20000E94942390E090931D0380931C03C23092 -:100E300080E5D80721F480911C03816086C0C4300E -:100E400090E5D90721F480911C0382607EC0C630F2 -:100E500020E5D20721F480911C03846076C0C8305D -:100E600080E5D80719F480911C0327C0CA3090E5AB -:100E7000D90721F480911C03806167C0CC3020E544 -:100E8000D20721F480911C0380625FC0CE3080E5E0 -:100E9000D80721F480911C03806457C0C03190E5CD -:100EA000D90721F480911C0380684FC0C23120E52E -:100EB000D20729F480911C038460886046C0C33047 -:100EC00080E5D80721F480911C038E7F3EC0C53099 -:100ED00090E5D90721F480911C038D7F36C0C7307F -:100EE00020E5D20721F480911C038B7F2EC0C930EE -:100EF00080E5D80719F480911C0326C0CB3090E51B -:100F0000D90721F480911C038F7E1FC0CD3020E5CE -:100F1000D20721F480911C038F7D17C0CF3080E56C -:100F2000D80721F480911C038F7B0FC0C13190E55D -:100F3000D90721F480911C038F7707C0C331D045B6 -:100F400031F480911C038B7F877F80931C038091F9 -:100F50001C030E949823ABC08D2F99278F7099276F -:100F600081309105D9F49E012370332702C0880F88 -:100F7000991F2A95E2F79C688E0144E0000F111F2B -:100F80004A95E1F700271370802B912B53E0CC0F8B -:100F9000DD1F5A95E1F7C076DD272FC0823091051D -:100FA00031F4DC2FCC278E01016F106A80C08330B2 -:100FB000910569F4CE018370992701E010E002C029 -:100FC000000F111F8A95E2F7C8019C680FC084309A -:100FD0009105B9F4CE018370992701E010E002C0B9 -:100FE000000F111F8A95E2F7C8019A6823E0CC0F21 -:100FF000DD1F2A95E1F7C07ED7708C010C2B1D2BCD -:1010000056C08530910531F4DC2FCC278E01046F5A -:10101000106A4DC0069709F04AC0CF71DD27DC2F5A -:10102000CC278E01106243C000E010E040C08E016A -:101030003EC001E810E43BC003E810E438C002EE13 -:1010400014E435C009EE14E432C00AEE14E42FC0F3 -:1010500005EB14E42CC006EB14E429C007EB14E400 -:1010600026C00CEC14E423C00DEC14E420C003E80B -:1010700015E41DC00AE815E41AC002E915E417C01A -:1010800004E915E414C001E216E411C003E216E419 -:101090000EC004E216E40BC005E216E408C006E246 -:1010A00016E405C007E216E402C00AE216E4C8012D -:1010B000DF91CF911F910F9108959CE0799FF001EE -:1010C000112490E3899FE00DF11D1124E60FF11D1D -:1010D000EE0FFF1FEC5FFD4F85919491803E9105CF -:1010E000E0F4803C910558F58133910509F46FC017 -:1010F00048F48932910509F463C08A32910509F4F4 -:101100006DC072C089339105E9F082389105D1F044 -:101110008533910509F44DC067C0833E910581F187 -:1011200038F4803E9105B9F0823E9105D9F05CC05B -:10113000863E910561F1873E9105A1F155C00E945F -:10114000EB05089520911C0320FD02C021FF4CC037 -:1011500080EE90E049C080911C0380FFF9CF89E3C5 -:1011600090E042C080911C0382FF0EC080911C035E -:1011700084FF03C080E090E037C083EE90E034C08D -:1011800080911C0382FFF2CF82EE90E02DC080910F -:101190001C0383FF0BC080911C0384FDEBCF87EE03 -:1011A00090E022C080911C0383FFF5CF86EE90E093 -:1011B0001BC080911C0385FF07C089E290E014C02A -:1011C00080911C0385FFF9CF85E390E00DC08091ED -:1011D0001C0386FF07C08AE290E006C080911C03D2 -:1011E00086FFF9CF81E390E00E94FB0508950C94FF -:1011F000CC02E82FF0E0E25BFE4F8081E82FEF7039 -:10120000F0E082958F7021E030E0A90102C0440F28 -:10121000551F8A95E2F740A308950F931F93CF932C -:10122000DF9385B7806885BF85B7806885BFC3E0D9 -:10123000D0E001E010E0FE01E25BFE4F8081E82F8C -:10124000EF70F0E021A182958F70A80102C0440FD9 -:10125000551F8A95E2F7CA01822B81A38C2F0E9429 -:10126000F908219740F78BE090E061E070E0FC0125 -:10127000EE5BFE4F2081E22FEF70F0E042A122955D -:101280002F70DB0102C0AA0FBB1F2A95E2F79D0158 -:10129000242B22A3019758F7DF91CF911F910F9133 -:1012A0000C947603EF92FF920F931F93CF93DF93EB -:1012B00000E212E0C3E0EE24E394F12CD5E08C2FA1 -:1012C0000E94F9088BE090E040E050E0FC01EE5B0A -:1012D000FE4F6081E62FEF70F0E020A130E06295D4 -:1012E0006F7002C0359527956A95E2F720FD09C019 -:1012F0009701082E02C0220F331F0A94E2F7422BF7 -:10130000532B019718F7F801929182918F0184175E -:10131000950721F051834083D09305018C2F0E94C3 -:10132000F908C15060F68091050187FD2CC08150FD -:10133000809305018F3F39F08FE99FE00197F1F726 -:1013400000C0000020C080911E0290911F02909367 -:1013500027028093260280911C0290911D02909397 -:1013600025028093240280911A0290911B0290938F -:101370002302809322028091180290911902909387 -:101380002102809320020E94780381E0DF91CF91B7 -:101390001F910F91FF90EF900895E82FF0E0EE0F6E -:1013A000FF1FE05EFD4F80819181089508950F93A6 -:1013B0001F93CF9308E212E0C0E0F801929182916E -:1013C0008F010E943D22C80FF2E000321F07A9F7EB -:1013D0008C2FCF911F910F9108950E94812381112D -:1013E00002C00E945D230E94A623809307033E9AB9 -:1013F000809171008D7F8093710082E080939000D6 -:101400008AE18093910081E080932A02089580917F -:101410002A02811102C00E94ED0910927A021092F4 -:101420007902809171008D7F80937100809190008E -:101430008F738093900010923C0210923B021092A6 -:10144000730210927402109275021092760210923A -:10145000720210927102E1E5F2E0A1E4B2E01192B1 -:101460001192119211921D921D9282E0E137F807BC -:10147000B1F70895CF92DF92EF92FF920F931F93EF -:10148000CF93DF9320913B02222309F484C06B01A8 -:101490007C0180912A02811102C00E94ED0901E7BE -:1014A00012E0C7E0D0E0A7019601F8019291829185 -:1014B000729162918F010E94F128811131C0FE0169 -:1014C000EE0FFF1FEE0FFF1FEF5AFD4F108211822C -:1014D00012821382DE01AA0FBB1FAF5BBD4F1196B4 -:1014E0001C921E92C730D105E9F0219644815581A6 -:1014F000668177814083518362837383148215826E -:101500001682178212968D919C91139711969C9337 -:101510008E9313961C921E92129734961296E2CFD7 -:10152000219708F68091790290917A02019797FDB0 -:1015300005C090937A028093790204C010927A02D7 -:10154000109279028091790290917A02209177022B -:10155000309178022817390724F0109278021092FF -:101560007702892BC1F4809171008D7F8093710087 -:10157000809190008F73809390001092730210926C -:1015800074021092750210927602109272021092FA -:10159000710210923B02DF91CF911F910F91FF904A -:1015A000EF90DF90CF9008951F920F920FB60F9299 -:1015B00011244F925F926F927F928F929F92AF927F -:1015C000BF92CF92DF92EF92FF922F933F934F9370 -:1015D0005F936F937F938F939F93AF93BF93CF93BB -:1015E000DF93EF93FF9380913B02882309F49BC123 -:1015F000C0917902D0917A021C161D060CF093C19D -:1016000040902B0250902C0260902D0270902E0280 -:1016100020E030E0A901C301B2010E949C2A181603 -:101620000CF065C0C130D10509F452C08091770239 -:1016300090917802BE010E946E2C7C0190937802FA -:101640008093770280903D0290903E02A0903F02EE -:10165000B090400220E030E040E85FE3C501B40113 -:101660000E948D2860933D0270933E0280933F025A -:1016700090934002F701EE0FFF1FEE0FFF1FEF5A8E -:10168000FD4FA301920160817181828193810E944B -:10169000F52820E030E040E05EE30E94A02A9B01B4 -:1016A000AC01C501B4010E949C2A18168CF4C70134 -:1016B0000196BE010E946E2C90937802809377026F -:1016C00010923D0210923E0210923F021092400290 -:1016D000E0917702F0917802EE0FFF1FEE0FFF1FEF -:1016E000EF5AFD4F6081718182819381D0C0C0909B -:1016F0007302D0907402E0907502F090760220E0C0 -:1017000030E0A901C701B6010E94F1282197882382 -:1017100009F4A2C0FE01EE0FFF1FEE0FFF1FEF5AEC -:10172000FD4F80809180A280B380A5019401C70104 -:10173000B6010E94F12887FF31C0A501940160E045 -:1017400070E08CED93EC0E94F52820E030E040E45E -:1017500051E40E94F52820E030E040E05FE30E9481 -:10176000A02A9B01AC0160E070E080E090E40E9460 -:10177000032B9B01AC01C501B4010E94A02A9B016F -:10178000AC01C701B6010E94F12887FF07C0A7017D -:10179000960160E070E08CED93E439C0A5019401FE -:1017A000C701B6010E949C2A18160CF055C0A5016D -:1017B000940160E070E08CED93E40E94F52820E055 -:1017C00030E040E451E40E94F52820E030E040E0C1 -:1017D0005FE30E94A02A9B01AC0160E070E080E022 -:1017E00090E40E94032B9B01AC01C501B4010E944F -:1017F000A02A9B01AC01C701B6010E949C2A1816C1 -:101800005CF5A701960160E070E08CED93EC0E941E -:10181000F52820E030E040E451E40E94F52820E083 -:1018200030E040E05FE30E94A02A9B01AC0160E051 -:1018300070E080E090E40E94032B9B01AC01C701A3 -:10184000B6010E94A02A6093730270937402809381 -:1018500075029093760213C0FE01EE0FFF1FEE0F8C -:10186000FF1FEF5AFD4F80819181A281B381809348 -:10187000730290937402A0937502B0937602609104 -:10188000730270917402809175029091760220919A -:101890002802309129022F3F4FEF340731F02F5F9C -:1018A0003F4F30932902209328020E947C0E6B0147 -:1018B0007C0120E034E244EF51E40E94F12887FFEC -:1018C00008C086EFC82E88E2D82E84EFE82E81E487 -:1018D000F82E20E030E040E051E4C701B6010E945C -:1018E000A02A9B01AC0160E074E284E79BE40E94C3 -:1018F000F5286B017C010E94622970939700609328 -:101900009600209106013091070140910801509105 -:101910000901C701B6010E94A02A0E9462297093A2 -:1019200099006093980080913C02882309F433C1A8 -:10193000C0903702D0903802E0903902F0903A021D -:1019400020E030E0A901C701B6010E949C2A1816C8 -:10195000D4F580912802909129028F3F2FEF9207B2 -:1019600029F001969093290280932802C701B601BD -:101970000E947C0E20E030E040E051E40E94A02A6A -:101980009B01AC0160E074E284E79BE40E94F528CF -:101990006B017C010E94622970939700609396000E -:1019A00020910601309107014091080150910901F1 -:1019B000C701B6010E94A02A0E9462297093990073 -:1019C0006093980008C010929700109296001092B1 -:1019D00099001092980060913102709132026F5F0D -:1019E0007F4F7093320260933102209196003091C4 -:1019F000970080E090E0232BF1F0C0919600D09109 -:101A000097000E948E296B017C01BE0180E090E06E -:101A10000E948E299B01AC016091330270913402C7 -:101A200080913502909136020E94F52820E03FEF28 -:101A30004FE757E410C00E948E296B017C0120E023 -:101A400030EE4FEF54E46091330270913402809194 -:101A50003502909136020E94A02A9B01AC01C70179 -:101A6000B6010E949C2A87FD96C080912F028F5F4D -:101A700080932F0290E0209103033091040382179A -:101A80009307A0F080910E03882319F010922F0283 -:101A90000DC0809171008D7F8093710080919000C6 -:101AA0008F738093900010923C027DC08091300231 -:101AB000C0912F02811128C0C0900803D090090363 -:101AC000E0900A03F0900B0320E030E0A901C70189 -:101AD000B6010E949C2A1816BCF481E08093300263 -:101AE00010923702109238021092390210923A0284 -:101AF000C0923302D0923402E0923502F092360264 -:101B0000C150C0932F0243C010923002109229029C -:101B100010922802E0910503F091060348E0C49F6B -:101B2000E00DF11D112480819181A281B381809308 -:101B3000370290933802A0933902B0933A0220E022 -:101B400030E040E85EE364817581868197810E9480 -:101B5000A02A6B017C0180910A01682F70E080E06F -:101B600090E00E948E2920E030E048EC52E40E9490 -:101B7000F5289B01AC01C701B6010E94A02A609321 -:101B800033027093340280933502909336021092A0 -:101B90003202109231028091070380FD04C010923E -:101BA0003C0210923B02FF91EF91DF91CF91BF91E8 -:101BB000AF919F918F917F916F915F914F913F91E5 -:101BC0002F91FF90EF90DF90CF90BF90AF909F90BC -:101BD0008F907F906F905F904F900F900FBE0F90FF -:101BE0001F901895CF92DF92EF92FF92CF93DF93E1 -:101BF0006B017C01EA0180912A02811102C00E94DE -:101C0000ED098091070380FF46C080917902909191 -:101C10007A0208970CF03FC0809171008D7F80930D -:101C2000710080913C0281110E94070A81E080933B -:101C30003B02109229021092280220E030E0A90114 -:101C4000C701B6010E949C2A1816DCF48091790223 -:101C500090917A02FC01EE0FFF1FEE0FFF1FEF5A6B -:101C6000FD4FC082D182E282F382FC01EE0FFF1FA2 -:101C7000EF5BFD4FD183C083019690937A028093EE -:101C80007902809171008260809371008091900050 -:101C9000806880939000DF91CF91FF90EF90DF906C -:101CA000CF90089580910703817008958091070374 -:101CB0008160809307030E94AA230C94D203809131 -:101CC00007038E7F809307030C94AA2380917B02E5 -:101CD00090E0019666E070E00E946E2C80937B029B -:101CE000089580917B0290E0019766E070E00E9489 -:101CF0006E2C80937B0208958F929F92AF92BF9239 -:101D0000CF92DF92EF92FF920F931F93CF93DF93C7 -:101D10006B017C01C0912802D0912902BE0180E0B4 -:101D200090E00E948E294B015C01A701960160E0C2 -:101D300070E08CE594E40E94F5289B01AC01C5019C -:101D4000B4010E94A02A0E94622920917B022330C4 -:101D500009F473C028F4222351F02130E9F02CC19A -:101D6000243009F4A0C0253009F4E0C025C180E08A -:101D700090E0A0E0BFE38093060190930701A09359 -:101D80000801B093090110922B0210922C021092BC -:101D90002D0210922E0210C110922B0210922C02D2 -:101DA00010922D0210922E026431710540F46A30B7 -:101DB000710560F520E030E040E85EE32BC0693C4F -:101DC000710508F0AAC080E090E00E948E2920E012 -:101DD00030E040EA51E40E948C2820E030E044E307 -:101DE00053E40E94F5289B01AC010E94A02A20E048 -:101DF00030E040E05EE30E94A02A9B01AC0160E07D -:101E000070E080E09EE30E948C2844C020E030E037 -:101E100040E05FE3C701B6010E94A02A6B017C018C -:101E200080E090E0A0E0BEE380930601909307017C -:101E3000A0930801B0930901BFC010922B02109229 -:101E40002C0210922D0210922E024AE0469F900121 -:101E5000479F300D1124C90168EB7BE00E945A2C8A -:101E6000BC016C5D754077FF03C071956195710988 -:101E7000882777FD8095982F0E9490292EE333ECD8 -:101E80004EE259E30E94A02A20E030E040EC5EE3FD -:101E90000E948D28609306017093070180930801CA -:101EA0009093090189C010922B0210922C0210927B -:101EB0002D0210922E02CE0183709927892BE1F01A -:101EC000BE016170772780E090E00E948E2920E0BB -:101ED00030E040E05EE30E94A02A20E030E040E4F1 -:101EE0005FE30E948D286093060170930701809341 -:101EF0000801909309010CC080E090E0A0E0BFE3EE -:101F00008093060190930701A0930801B093090103 -:101F1000C770DD27CD2B09F04FC01092060110923B -:101F20000701109208011092090146C010922B027D -:101F300010922C0210922D0210922E0200E010E05E -:101F400020E03FE30093060110930701209308016E -:101F5000309309016739710578F180E090E00E94C3 -:101F60008E2920E030E047E153E40E948C2820E0F5 -:101F700030E04AE754E40E94F52820E030E048E4ED -:101F800052E40E94A02A20E030E040EA51E40E949E -:101F9000D2290E945D29660F771F660F771FFB010C -:101FA000EE5AFE4F2081318142815381C701B60133 -:101FB0000E94A02A6B017C01C701B601DF91CF917D -:101FC0001F910F91FF90EF90DF90CF90BF90AF9057 -:101FD0009F908F90089580918C020895CF93DF9306 -:101FE00000D01F92CDB7DEB79C01809113038430DF -:101FF00019F593E099833B832A839093E9008FEF4F -:102000009091E800815095FD06C095ED9A95F1F705 -:1020100000008111F5CF8091E80085FF0DC040E000 -:1020200050E063E070E0CE0101960E944F12809173 -:10203000E8008E778093E8000F900F900F90DF916B -:10204000CF910895CF93DF9300D01F92CDB7DEB725 -:1020500020911303243021F522E029839B838A8376 -:1020600083E08093E9008FEF9091E800815095FD27 -:1020700006C095ED9A95F1F700008111F5CF80919A -:10208000E80085FF0DC040E050E063E070E0CE0165 -:1020900001960E944F128091E8008E778093E800AD -:1020A0000F900F900F90DF91CF910895209113031F -:1020B0002430F1F422E02093E9002FEF3091E80082 -:1020C000215035FD06C035ED3A95F1F7000021119C -:1020D000F5CF2091E80025FF0BC040E050E065E01F -:1020E00070E00E944F128091E8008E778093E800A4 -:1020F0000895CF93DF93EC0190911303943009F08E -:1021000046C0809115018823D9F08091160188235B -:10211000B9F09093E9008FEF9091E800815095FD20 -:1021200006C095E19A95F1F700008111F5CF8091F5 -:10213000E80085FF2CC040E050E060E170E017C08F -:1021400081E08093E9008FEF9091E800815095FD48 -:1021500006C095ED9A95F1F700008111F5CF8091B9 -:10216000E80085FF14C040E050E068E070E0CE0178 -:102170000E944F128091E8008E778093E80080E102 -:10218000FE01ACE7B2E001900D928A95E1F7DF9194 -:10219000CF91089580911203811109C00E94E41328 -:1021A0000E9441148091E20084608093E2000895CF -:1021B000109212030895089508950C94882242E025 -:1021C00061EC81E00E945E1342E061EC82E00E94DB -:1021D0005E1342E061EC83E00E945E1342E161EC39 -:1021E00084E00C945E1380911503833009F455C08C -:1021F00030F4813071F0823009F48EC008958A3055 -:1022000009F47AC08B3009F460C0893009F09CC0B1 -:1022100020C080911403813A09F096C08091E800B3 -:10222000877F8093E8008091180390911903892B90 -:1022300021F460E18CE792E003C060E080E090E090 -:1022400070E00E949A128091E8008B778093E800FA -:10225000089580911403813209F076C080911803AB -:1022600090911903009719F0039709F06DC08091C0 -:10227000E800877F8093E8008091E80082FD05C038 -:10228000809113038111F8CF5FC08091F10080939A -:102290008C028091E8008B7753C080911403813ABF -:1022A00009F052C08091180390911903892B09F00D -:1022B0004BC08091E800877F8093E8008091E80020 -:1022C00080FFFCCF8091150136C0809114038132CC -:1022D000D9F58091180390911903892BA9F5809164 -:1022E000E800877F8093E8000E9493138091160393 -:1022F000809315010C94C91B80911403813221F540 -:102300008091E800877F8093E8000E94931380917A -:10231000170380938D02089580911403813AA1F4EC -:102320008091E800877F8093E8008091E80080FF3B -:10233000FCCF80918D028093F1008091E8008E7730 -:102340008093E8000C949313089584B7877F84BF2B -:1023500088E10FB6F89480936000109260000FBE81 -:1023600090E080E80FB6F89480936100909361004C -:102370000FBE0E9436170E94E4130E944114809100 -:10238000E20084608093E20078940E94C7160E9465 -:1023900038178BE091E00E94E2168091130385309C -:1023A00069F40E944922809111038823B1F30E94AD -:1023B0007722882391F30E943912EFCF0E944017B1 -:1023C000ECCF292F332723303105C9F064F42130B5 -:1023D000310581F02230310509F043C08DE690E0EF -:1023E00020E833E042C021323105F1F022323105DC -:1023F00041F137C082E190E02DEE33E036C09927FD -:102400008130910541F08230910541F0892B49F5E9 -:10241000ECE7F3E005C0EEE4F3E002C0E4E2F3E051 -:10242000849190E09F0121C06430D8F4E62FF0E061 -:10243000EE0FFF1FE255FE4F2081318189E090E0D1 -:1024400014C0643070F470E0FB01EE0FFF1FEA551A -:10245000FE4F20813181FB01EE55FE4F808190E0DF -:1024600004C080E090E020E030E0FA013183208376 -:10247000089580E189BD82E189BD09B400FEFDCFE8 -:102480008091D8008F7D8093D8008091E000826099 -:102490008093E0008091E00081FDFCCF0895CF9211 -:1024A000DF92EF92FF920F931F93CF93DF93EC0194 -:1024B0008B016A010E94B213811133C0C114D1048F -:1024C00039F0F60180819181081B190BC80FD91FC3 -:1024D000E12CF12C0115110519F18091E80085FD21 -:1024E00016C08091E8008E778093E800C114D10473 -:1024F00049F0F60180819181E80EF91EF182E082B7 -:1025000085E00FC00E94B213882321F30AC089918D -:102510008093F10001501109FFEFEF1AFF0ADACFA3 -:1025200080E0DF91CF911F910F91FF90EF90DF90AE -:10253000CF90089520911A0330911B032617370777 -:1025400048F06115710539F42091E8002E77209349 -:10255000E80001C0B90140E061157105A9F12091C1 -:102560001303222309F443C0253009F442C020910B -:10257000E80023FD40C02091E80022FD32C02091F8 -:10258000E80020FFE9CF4091F3002091F20030E015 -:10259000342BFC01CF016115710559F0283031054C -:1025A00040F481918093F100615071092F5F3F4F9A -:1025B000F1CF41E02830310509F040E02091E800FA -:1025C0002E772093E800C8CF4111C9CF0AC080916F -:1025D0001303882361F0853061F08091E80083FD6A -:1025E0000AC08091E80082FFF2CF80E0089582E087 -:1025F000089583E0089581E0089520911A033091B1 -:102600001B032617370748F06115710539F420912F -:10261000E8002E772093E80001C0B901FC0120E01A -:102620006115710591F180911303882309F440C06D -:10263000853009F43FC08091E80083FD3DC0809162 -:10264000E80082FD2FC08091E80080FFE9CF209153 -:10265000F3008091F20090E0922B6115710559F022 -:102660008830910540F424912093F1003196615017 -:1026700071090196F2CF21E0089709F020E08091DE -:10268000E8008E778093E800CBCF2111CCCF0AC031 -:1026900080911303882361F0853061F08091E80018 -:1026A00083FD0AC08091E80082FFF2CF80E00895A8 -:1026B00082E0089583E0089581E00895982F97308F -:1026C00058F59093E900981739F07091EC0020913B -:1026D000ED005091F00003C0242F762F50E021FF31 -:1026E00019C03091EB003E7F3093EB003091ED004C -:1026F0003D7F3093ED003091EB0031603093EB0083 -:102700007093EC002093ED005093F0002091EE00C8 -:1027100027FF07C09F5FD3CF8F708093E90081E0D0 -:10272000089580E008958091140387FF11C080917F -:10273000E80082FD05C0809113038111F8CF11C01C -:102740008091E8008B770BC080911303882349F0B8 -:102750008091E80080FFF8CF8091E8008E77809329 -:10276000E80008952091E4003091E50095E640915D -:10277000EC00842F817040FF22C08091E80080FD32 -:102780001CC080911303882391F0853091F08091D3 -:10279000EB0085FD10C04091E4005091E500421728 -:1027A000530729F39A01915011F784E0089582E0CC -:1027B000089583E0089581E0089580E008954091B0 -:1027C000E80042FFDECF08950E9452140E945A147E -:1027D000E0EEF0E0808181608083E8EDF0E08081D0 -:1027E0008F77808319BCA7EDB0E08C918E7F8C939E -:1027F00080818F7E80831092120308950F931F9320 -:10280000CF93DF930E9452140E945A14C8EDD0E077 -:1028100088818F77888388818068888388818F7D8D -:10282000888319BC1092130310920F0310921103A6 -:102830001092100300EE10E0F80180818B7F8083FE -:1028400088818160888342E060E080E00E945E13BE -:10285000E1EEF0E080818E7F8083E2EEF0E0808127 -:1028600081608083808188608083F80180818E7F91 -:102870008083888180618883DF91CF911F910F9140 -:102880000895E8EDF0E080818F7E8083E7EDF0E051 -:1028900080818160808384E082BF81E08093120325 -:1028A0000C94FE13E8EDF0E080818E7F808310921F -:1028B000E20008951092DA001092E10008951F924C -:1028C0000F920FB60F9211242F933F934F935F9364 -:1028D0006F937F938F939F93AF93BF93EF93FF93E8 -:1028E0008091E10082FF0BC08091E20082FF07C06F -:1028F0008091E1008B7F8093E1000E94C616809159 -:10290000DA0080FF1FC08091D80080FF1BC080913B -:10291000DA008E7F8093DA008091D90080FF0DC0AD -:1029200080E189BD82E189BD09B400FEFDCF81E06F -:10293000809313030E94CA1005C019BC10921303A0 -:102940000E94D8108091E10080FF19C08091E200C0 -:1029500080FF15C08091E2008E7F8093E20080911D -:10296000E20080618093E2008091D80080628093D1 -:10297000D80019BC85E0809313030E94DC1080917D -:10298000E10084FF30C08091E20084FF2CC080E130 -:1029900089BD82E189BD09B400FEFDCF8091D800D8 -:1029A0008F7D8093D8008091E1008F7E8093E1003D -:1029B0008091E2008F7E8093E2008091E20081604E -:1029C0008093E20080910F03882311F084E007C018 -:1029D0008091E30087FD02C081E001C083E0809325 -:1029E00013030E94DD108091E10083FF29C08091D4 -:1029F000E20083FF25C08091E100877F8093E100A2 -:102A000082E08093130310920F038091E1008E7F88 -:102A10008093E1008091E2008E7F8093E2008091BC -:102A2000E20080618093E20042E060E080E00E948A -:102A30005E138091F00088608093F0000E94DB10AC -:102A4000FF91EF91BF91AF919F918F917F916F9186 -:102A50005F914F913F912F910F900FBE0F901F905C -:102A600018951F920F920FB60F9211242F933F9338 -:102A70004F935F936F937F938F939F93AF93BF9386 -:102A8000CF93DF93EF93FF93C091E900CF708091D4 -:102A9000EC00D82FD17080FDD0E81092E900809131 -:102AA000F000877F8093F00078940E947515109253 -:102AB000E9008091F00088608093F000CD2BCF700A -:102AC000C093E900FF91EF91DF91CF91BF91AF915A -:102AD0009F918F917F916F915F914F913F912F9136 -:102AE0000F900FBE0F901F9018951F93CF93DF93F9 -:102AF000CDB7DEB7AA970FB6F894DEBF0FBECDBF35 -:102B0000E4E1F3E088E08E0F9091F10091938E1351 -:102B1000FBCF0E94F3108091E80083FF1FC18091DA -:102B2000140390911503492F50E04A30510508F0E5 -:102B300015C1FA01EA5AFF4F0C94822C803881F0BB -:102B4000823809F00BC1809118038F708093E900DF -:102B50008091EB0085FB882780F91092E90006C080 -:102B60008091100390911103911182609091E8007F -:102B7000977F9093E8008093F1001092F100C8C015 -:102B8000282F2D7F09F0EAC0882319F0823061F0E8 -:102B9000E5C080911603813009F0E0C0933009F060 -:102BA00080E0809311032BC080911603811127C010 -:102BB000809118038F7009F4D1C08093E9002091AF -:102BC000EB0020FF1CC0933021F48091EB00806269 -:102BD00014C09091EB0090619093EB0021E030E005 -:102BE000A90102C0440F551F8A95E2F74093EA00FD -:102BF0001092EA008091EB0088608093EB001092C5 -:102C0000E9008091E800877F86C08111A7C01091FC -:102C100016031F778091E3008078812B8093E30077 -:102C20008091E800877F8093E8000E949313809151 -:102C3000E80080FFFCCF8091E30080688093E30090 -:102C4000111102C082E001C083E08093130386C0AB -:102C50008058823008F082C080911603909117034B -:102C60008C3D53E0950779F583E08A838AE2898376 -:102C70004FB7F894DE01139620E03EE051E2E32FD7 -:102C8000F0E050935700E49120FF03C0E295EF700D -:102C90003F5FEF708E2F90E0EA3010F0C79601C0D2 -:102CA000C0968D939D932F5F243149F74FBF80913C -:102CB000E800877F8093E8006AE270E0CE01019629 -:102CC0000E949A1214C0AE014F5F5F4F60911803CB -:102CD0000E94E111BC01009709F440C09091E80006 -:102CE000977F9093E80089819A810E94FD128091DC -:102CF000E8008B778093E80031C0803879F58091C7 -:102D0000E800877F8093E80080910F038093F100B3 -:102D10008091E8008E778093E8000E9493131EC094 -:102D200081111CC0909116039230C0F48091E8008C -:102D3000877F8093E80090930F030E949313809104 -:102D40000F03811106C08091E30087FD02C081E07E -:102D500001C084E0809313030E94DF108091E8009B -:102D600083FF0AC08091E800877F8093E80080910C -:102D7000EB0080628093EB00AA960FB6F894DEBF5A -:102D80000FBECDBFDF91CF911F9108950895CF93CE -:102D9000809113038823A1F0C091E900CF70909136 -:102DA000EC00892F817090FD80E8C82B1092E9001B -:102DB0008091E80083FD0E947515CF70C093E900F3 -:102DC000CF91089590939302809392020895E09199 -:102DD0009202F0919302309721F00190F081E02D62 -:102DE000099480E00895E0919202F0919302309767 -:102DF00021F00280F381E02D09940895E091920280 -:102E0000F0919302309721F00480F581E02D099430 -:102E1000089520919002309191028217930771F0EA -:102E20009093910280939002E0919202F09193022C -:102E3000309721F00680F781E02D099408952091C4 -:102E40008E0230918F028217930771F090938F0258 -:102E500080938E02E0919202F0919302309721F0DC -:102E60000084F185E02D0994089508950C94351798 -:102E70000E94BC220E940D090E9442230C94F1275B -:102E80005F926F927F928F929F92AF92BF92CF92FA -:102E9000DF92EF92FF920F931F93CF93DF9300D0B7 -:102EA00000D01F92CDB7DEB70E9452099DE9C92E0E -:102EB00092E0D92E03E010E0AA24A394B12C502E66 -:102EC000802F0E94CD094C01F601729062906F0133 -:102ED0006826792661147104A1F40150110978F76C -:102EE0008FEF89838A831B820E94C5228160782F9D -:102EF0009D838C8349815A816B818D810E94F0175B -:102F000038C08091F20281FD0E94D6092BE030E0AA -:102F10007501022E02C0EE0CFF1C0A94E2F7C701F5 -:102F200086219721892B09F129835A828E209F209F -:102F300091E0892809F490E09B830E94C52281607A -:102F4000782F9D838C8349815A816B818D810E946A -:102F5000F017000F111FF801EB56FD4F8081918192 -:102F6000E826F926F182E08204C02150310980F67A -:102F7000B4CF0E942925109194020E94E7161817D9 -:102F8000D1F00E94E716809394020F900F900F905B -:102F90000F900F90DF91CF911F910F91FF90EF90C5 -:102FA000DF90CF90BF90AF909F908F907F906F9069 -:102FB0005F900C94F7080F900F900F900F900F9068 -:102FC000DF91CF911F910F91FF90EF90DF90CF9005 -:102FD000BF90AF909F908F907F906F905F9008957B -:102FE000CF93DF93CDB7DEB72B970FB6F894DEBF44 -:102FF0000FBECDBF4F83588769877A878B87DE01E5 -:10300000119686E0FD0111928A95E9F785E0FE01AF -:10301000379601900D928A95E1F749815A816B812B -:103020007C818D819E810E94671E2B960FB6F8943D -:10303000DEBF0FBECDBFDF91CF910895CF93882320 -:1030400009F4C2C0C82F823859F40E94E71681FDE6 -:10305000BBC089E30E9441210E940E2289E30CC07B -:10306000833879F40E94E71680FDAEC083E50E94A4 -:1030700041210E940E2283E50E948321CF910C946E -:103080000E22843859F40E94E71682FD9DC087E421 -:103090000E9441210E940E2287E4EECF8CEF8C0F1C -:1030A000813A48F48C2F0E94592781118DC08C2FB2 -:1030B0000E944121E3CF80E28C0F883048F4C77032 -:1030C00081E001C0880FCA95EAF70E94C721D6CFD8 -:1030D0008BE58C0F833078F4C53A29F0C63A31F08D -:1030E00083E890E005C081E890E002C082E890E0CB -:1030F000CF910C94091788E58C0F833108F064C0D8 -:10310000C83A39F1C93A41F1CA3A49F1CB3A51F1D9 -:10311000CC3A59F1CD3A61F1C03B69F1CE3A71F147 -:10312000CF3A79F1C13B81F1C23B89F1C33B91F1C7 -:10313000C43B99F1C53BA1F1C63BA9F1C73BB1F135 -:10314000C83BB9F1C93BC1F1CA3BC9F180E090E08D -:1031500038C082EE90E035C089EE90E032C08AEE51 -:1031600090E02FC085EB90E02CC086EB90E029C06A -:1031700087EB90E026C08CEC90E023C08DEC90E0D3 -:1031800020C083E891E01DC08AE891E01AC082E97E -:1031900091E017C084E991E014C081E292E011C08F -:1031A00083E292E00EC084E292E00BC085E292E0FE -:1031B00008C086E292E005C087E292E002C08AE29F -:1031C00092E0CF910C941F17CF910895882309F4B2 -:1031D0004BC0823859F40E94E71681FF45C089E34D -:1031E0000E9441210E940E2289E30CC0833871F4B1 -:1031F0000E94E71680FF38C083E50E9441210E94AB -:103200000E2283E50E9483210C940E22843859F407 -:103210000E94E71682FF28C087E40E9441210E9495 -:103220000E2287E4EFCF9CEF980F913A58F390E28B -:10323000980F983050F4877091E001C0990F8A95EB -:10324000EAF7892F0E94CD21DFCF9BE5980F9330BD -:1032500020F480E090E00C940917885A833120F420 -:1032600080E090E00C941F170895882321F00E94BD -:10327000C7210C940E220895882321F00E94CD21AD -:103280000C940E2208957F928F929F92AF92BF92DC -:10329000CF92DF92EF92FF920F931F93CF93DF9322 -:1032A0001F92CDB7DEB77C01C62E772EFC010581BB -:1032B00002950F70128111110E94E4210E943A219F -:1032C000882379F0112369F080E28C0D883048F072 -:1032D00082E00E9423210E943A2191E0D82ED92633 -:1032E00001C0D12CE72DE295EF70F0E0E05AFF4FDE -:1032F0000C94822C872D807F072D0F70882311F06E -:103300000295007F112389F0002309F499C180E21E -:103310008C0D883020F4802F0E94C72103C0802F9D -:103320000E94D7210E940E228BC18C2D0E94E6188C -:10333000002309F4C3C180E28C0D883020F4802F73 -:103340000E94CD2103C0802F0E94DD210E940E2209 -:10335000B5C1872D807F972D9F70803211F4892F02 -:1033600003C0892F8295807FCC2021F0F1E0CF1619 -:10337000A1F01DC0112339F0002319F1013009F526 -:103380000E94F7219BC1002319F0013009F496C176 -:1033900089830E94FA21898110C1112321F006300E -:1033A00008F08CC10EC0053008F088C106C1112399 -:1033B00059F0002331F0F701958190FF41C19F70D2 -:1033C00095830E9435197AC1002309F4F6C03EC1E5 -:1033D000872D86958695837090E0009719F0019768 -:1033E00061F06CC1112321F08C2D972D937002C0D8 -:1033F00080E090E00E94091761C1112321F08C2D1B -:10340000972D937002C080E090E00E941F1756C174 -:103410008C2D112319F00E94312402C00E9499249E -:103420000E941E254BC1872D837009F052C01111D7 -:1034300045C18C2D829586958770880F880F9C2DAD -:103440009F70892E912CA12CB12C082E04C0880CC1 -:10345000991CAA1CBB1C0A94D2F7C4FE14C00FE02E -:1034600010E020E030E0B901A80104C0440F551F6E -:10347000661F771F8A95D2F7CB01BA0160957095C8 -:103480008095909503C060E070E0CB01272D2695D4 -:103490002695237030E02230310569F02330310564 -:1034A00089F0682979298A299B292130310571F011 -:1034B0000E94AF1F03C1682979298A299B290E948C -:1034C000CB1FFCC00E94AF1FC501B4010E94931F17 -:1034D000F5C0112319F0872D817001C086958823CE -:1034E00009F4ECC08C2D829586958770880F880F23 -:1034F0009C2D9F70892E912CA12CB12C082E04C0DC -:10350000880C991CAA1CBB1C0A94D2F7C4FE14C0D8 -:103510000FE010E020E030E0B901A80104C0440F42 -:10352000551F661F771F8A95D2F7CB01BA016095A8 -:1035300070958095909503C060E070E0CB01272DD9 -:10354000269526952370422F50E04230510569F0B0 -:103550004330510589F0682979298A299B2941300E -:10356000510571F00E948920A9C0682979298A290A -:103570009B290E94A520A2C00E948920C501B401F8 -:103580000E946D209BC08C2D90E0FC01E05EF10953 -:10359000E531F10508F050C0E059FF4F0C94822C42 -:1035A0000C2D0F70872D8F71112321F00E940620A2 -:1035B000802F07CF0E942720802F0E943C197EC0B9 -:1035C000112341F0053008F079C0872D8F710E94DA -:1035D0004C2074C0063008F071C0F7CF112339F0C9 -:1035E000872D8F710E94062069C01123C9F3872D92 -:1035F0008F710E94272062C0112329F0872D8F71BF -:103600000E94F11F5BC00E94E71F58C0112351F0B8 -:10361000172D1F71812F0E94062063E0812F0E94C9 -:103620001A214CC081E00E942321023008F446C0D8 -:1036300082E00E94232142C0112331F0002381F255 -:103640008C2D0E941E183AC0002389F28C2D0E94F6 -:10365000E61834C0472D4F706C2DC7010E94D50568 -:103660000E940B1F2BC0111129C0472D4F7050E035 -:1036700042305105B9F04CF44115510581F041300B -:103680005105E1F40E94192819C04330510569F031 -:103690004430510599F48C2D0E946B280FC00E9474 -:1036A00002280CC00E94352809C00E94482806C084 -:1036B000472D4F706C2DC7010E94D805DD20F9F011 -:1036C0000E94162180FD1BC0F70112820E9410216A -:1036D0000E940620C7010E948E1B0E9410210F909D -:1036E000DF91CF911F910F91FF90EF90DF90CF90DE -:1036F000BF90AF909F908F907F900C9427200F9059 -:10370000DF91CF911F910F91FF90EF90DF90CF90BD -:10371000BF90AF909F908F907F9008950F931F93CD -:10372000CF93DF93EC01888199812B813C81232BFE -:10373000B9F09F3F11F48F3F99F0CE010E94D4035E -:10374000882371F0688179818A810E940C218C0123 -:103750000E94C1200E94881FB801CE010E94431917 -:10376000DF91CF911F910F9108950E94E4210E9453 -:10377000F4210E94B9210E940E220E94CF250E94AE -:103780001E2580E090E00E94091780E090E00C94F4 -:103790001F170E94D4210C94B51B0E940121292FD0 -:1037A00022952F7030E02C3031054CF42A30310551 -:1037B0006CF42250310922303105A8F407C02C30B6 -:1037C000310569F02F30310551F00DC0803F69F0AF -:1037D00018F4803E40F409C0843F29F406C093FBEE -:1037E000882780F9089580E0089581E00895CF93B7 -:1037F000DF9300D000D01F92CDB7DEB70F900F90AF -:103800000F900F900F90DF91CF910895CF93DF939A -:1038100000D000D000D0CDB7DEB726960FB6F89412 -:10382000DEBF0FBECDBFDF91CF9108951F93CF9321 -:10383000DF93C0919D0216E080919E02C81799F017 -:10384000D0E01C9FF0011D9FF00D1124E156FD4FAB -:103850004081518162817381848195810E94061C1F -:103860002196C770E9CFDF91CF911F9108954091C4 -:10387000CF025091D0026091D1027091D20280911A -:10388000D3029091D4020C94061C8091D4028295AC -:103890008F7009F054C08091D102882309F44FC081 -:1038A00080919D02A0919E026091CF027091D00202 -:1038B0004091D2025091D302B6E08A1709F43FC07A -:1038C00090E041155105C1F17F3F11F46F3FA1F127 -:1038D000B89FF001B99FF00D1124E156FD4F2181F1 -:1038E00072132AC02081621327C02281211124C0B3 -:1038F000238134812417350710F421503109241B0A -:10390000350B283C3105C0F42091D4022F70206182 -:103910002093D40226E0289FF001299FF00D112466 -:10392000EC55FD4F80818F70806180838FEC92E039 -:103930000E948E1B0C94161C01968770BECF0895B2 -:10394000CF92DF92EF92FF920F931F93CF93DF936B -:10395000CDB7DEB762970FB6F894DEBF0FBECDBF0E -:103960008C0185E0F801DE011D9601900D928A958B -:10397000E1F7D8014C9111965C91119712966C91D8 -:1039800012971396CD90DC9014973091CF027091DE -:10399000D0028091D2029091D302009709F46BC1BA -:1039A0007F3F19F43F3F09F466C1E090D102EE2059 -:1039B00009F4C0C02091D402C816D90628F0F60137 -:1039C000E81BF90BCF0104C0809590958C0D9D1DCF -:1039D000FF24F394883C910578F0F12C207F09F0C6 -:1039E000C6C07C2DD98AC88A89890E94F71B8FECB2 -:1039F00092E00E948E1BB1C0822F807F09F046C0EA -:103A0000751314C0341312C0611110C02F702061DF -:103A10002093D4020E94371C8FEC92E00E948E1BF0 -:103A20008091D402D80115968C932EC0CD2819F11F -:103A30005F3F11F44F3FF9F0F62E61111CC08091E9 -:103A40009D0220919E0236E0821709F45AC090E050 -:103A5000389FF001399FF00D1124E156FD4F71811F -:103A6000571306C07081471303C07281711103C0E0 -:103A700001968770E9CFF62E662309F418C180916C -:103A8000D40281608093D402F12C11C1751308C057 -:103A9000341306C0611104C08091D402D801C3C0A0 -:103AA0004D875E878D859E856A8B0E94CD1B6A89B6 -:103AB0008823E1F16623D1F12091D402822F8295EF -:103AC0008F7090E0029774F08091CF029091D002B5 -:103AD00098878F831986DB86CA862C87CE01079646 -:103AE0000E948E1B86E0F801AFECB2E001900D92CF -:103AF0008A95E1F70E94451C0E94371CFF24F3942D -:103B0000D6C04D875E878D859E850E940121292F15 -:103B100022952F7030E0223031050CF0BCC09F7030 -:103B200009F0B6C0805E883008F4C1C0C8010E94A8 -:103B30008E1BE4CFC816D90608F453C0F601E81B63 -:103B4000F90BCF01883C910508F450C0F12C7C2D75 -:103B5000D98AC88A89890E94F71BEFECF2E086E0D7 -:103B6000DF011D928A95E9F70E94371CA0C07513EA -:103B700014C0341312C0611110C08091D402F80136 -:103B80008583C8010E948E1B86E0EFECF2E0DF0126 -:103B90001D928A95E9F7FE2C8AC04D875E878D8538 -:103BA0009E856A8B0E94CD1B6A89882309F4BECF4B -:103BB000662309F4BBCF2091D402822F82958F70A7 -:103BC00090E002970CF48ECF8091CF029091D002BA -:103BD0009A8389831B82DD82CC822E83CE0101965B -:103BE0007FCF809590958C0D9D1DACCFF62E6623D2 -:103BF00009F49CCF75132EC034132CC02091D4022D -:103C000020FD1FC0822F82958F70D9F0D8011596A4 -:103C10002C9315978F3049F08F5F982F9295907F56 -:103C2000822F8F70892B15968C93C8010E948E1B52 -:103C300086E0F801AFECB2E001900D928A95E1F7D1 -:103C400093CF86E0F801AFECB2E001900D928A9537 -:103C5000E1F72DC04D875E878D859E850E94CD1B27 -:103C6000811140CF8091D40281608093D402C80139 -:103C70000E948E1B1CC0662309F458CF4D875E87B7 -:103C80008D859E850E94CD1B882309F44FCF2ACFB6 -:103C9000811148CF0CC0243031050CF047CF9F7004 -:103CA00009F440CFF8019581907F09F03BCF8F2D2B -:103CB00062960FB6F894DEBF0FBECDBFDF91CF91F5 -:103CC0001F910F91FF90EF90DF90CF9008951F9379 -:103CD000CF93DF93CDB7DEB72C970FB6F894DEBF46 -:103CE0000FBECDBF4F83588769877A878B879C87A4 -:103CF000CE0107960E94A01C882369F08F819885C9 -:103D00002A853B85232BF1F19F3F09F063C08F3F4C -:103D100009F060C037C086E0FE013796DE011196DB -:103D200001900D928A95E1F76F817885EA85FB8590 -:103D3000309741F17F3F11F46F3F21F120919E02B6 -:103D400030E0C90101968770992740919D0250E0AB -:103D50008417950709F447C069837A83FD83EC8350 -:103D600096E0929FD001939FB00D1124A156BD4FB4 -:103D7000FE01319601900D929A95E1F780939E0293 -:103D80000E94161C16E080919D0290919E02891758 -:103D9000C1F1189FC001112481569D4F0E94A01CA3 -:103DA000882379F1E0919D021E9FF0011124E156D4 -:103DB000FD4F4081518162817381848195810E9490 -:103DC000061C80919D0290E0019687709927809350 -:103DD0009D02D9CF4F81588569857A858B859C85D1 -:103DE0000E94061CCFCF0E94C91B10929E02109207 -:103DF0009D02EFECF2E086E0DF011D928A95E9F783 -:103E0000C1CF2C960FB6F894DEBF0FBECDBFDF91A9 -:103E1000CF911F910895EF92FF920F931F93CF932D -:103E2000DF938C01009709F46CC0F12CEE24E3942D -:103E3000E8012196F8018491843740F4843008F039 -:103E400051C0813081F0823019F15BC0853709F4AF -:103E500044C0A8F19CE7980F903708F052C08F77C4 -:103E60000E94E61841C00E5F1F4FFE01C49180E220 -:103E70008C0F883048F4C7708E2D01C0880FCA950A -:103E8000EAF70E94E72114C08C2F0E941E182DC053 -:103E90000E5F1F4FFE01C49180E28C0F883058F4F2 -:103EA000C7708E2D01C0880FCA95EAF70E94ED21D8 -:103EB0000E940E221AC08C2F0E94E61816C00E5FB8 -:103EC0001F4FFE01C491CC2381F08FE99FE0019741 -:103ED000F1F700C00000C150F6CF0E5F1F4FFE018A -:103EE000F49003C00E941E188E018F2D882309F4C0 -:103EF0009FCFEFE9FFE03197F1F700C0000081505C -:103F0000F5CFDF91CF911F910F91FF90EF90089522 -:103F100008956093D9027093DA028093DB02909344 -:103F2000DC020C94B51B0F931F930091D9021091E2 -:103F3000DA022091DB023091DC02DC01CB01802B24 -:103F4000912BA22BB32B8093D9029093DA02A093EA -:103F5000DB02B093DC021F910F910C94B51B0F9301 -:103F60001F930091D9021091DA022091DB02309167 -:103F7000DC02DC01CB0180239123A223B3238093B5 -:103F8000D9029093DA02A093DB02B093DC021F9176 -:103F90000F910C94B51B0F931F930091D9021091B0 -:103FA000DA022091DB023091DC02DC01CB018027B8 -:103FB0009127A227B3278093D9029093DA02A09386 -:103FC000DB02B093DC021F910F910C94B51B109291 -:103FD000D5021092D6021092D7021092D8020C94F9 -:103FE000B51B41E050E060E070E004C0440F551F95 -:103FF000661F771F8A95D2F74093D5025093D60259 -:104000006093D7027093D8020C94B51B41E050E046 -:1040100060E070E004C0440F551F661F771F8A954B -:10402000D2F78091D5029091D602A091D702B0919B -:10403000D802482B592B6A2B7B2B4093D5025093E7 -:10404000D6026093D7027093D8020C94B51B41E05E -:1040500050E060E070E004C0440F551F661F771FFA -:104060008A95D2F740955095609570958091D502CC -:104070009091D602A091D702B091D802482359233B -:104080006A237B234093D5025093D6026093D702D4 -:104090007093D8020C94B51B41E050E060E070E0F2 -:1040A00004C0440F551F661F771F8A95D2F7809171 -:1040B000D5029091D602A091D702B091D80248279C -:1040C00059276A277B274093D5025093D6026093E5 -:1040D000D7027093D8020C94B51B0F931F930091D5 -:1040E000D5021091D6022091D7023091D802DC017E -:1040F000CB01802B912BA22BB32B8093D5029093D5 -:10410000D602A093D702B093D8021F910F910C94BE -:10411000B51B0F931F930091D5021091D6022091E9 -:10412000D7023091D802DC01CB0180239123A22356 -:10413000B3238093D5029093D602A093D702B09375 -:10414000D8021F910F910C94B51B0F931F930091F0 -:10415000D5021091D6022091D7023091D802DC010D -:10416000CB0180279127A227B3278093D502909374 -:10417000D602A093D702B093D8021F910F910C944E -:10418000B51B0895CF92DF92EF92FF920F931F938A -:10419000CF93DF938C01C090D902D090DA02E090E7 -:1041A000DB02F090DC028091D5029091D602A091C2 -:1041B000D702B091D802C82AD92AEA2AFB2ACFE12D -:1041C000D0E0D701C6010C2E04C0B695A7959795EF -:1041D00087950A94D2F780FF06C0B8018C2F0E9401 -:1041E0005D08019721F4219760F780E001C08C2FD2 -:1041F000DF91CF911F910F91FF90EF90DF90CF90C3 -:104200000895CF93DF93EC010E94C220BE010E946B -:104210005D08DF91CF910895CB010E94012108959F -:104220008091DD0285958595859508958091DD02C3 -:104230008770089598E0899F90011124262B209380 -:10424000DD020C9406202091DD028095822380936C -:10425000DD02982F977069F430E0482F552747FD0D -:1042600050952417350729F08595859585950C94EB -:10427000272008959091DD02977081E009F480E095 -:10428000089590911501992321F0909116019111B3 -:1042900009C02091170130911801F90132969FEF62 -:1042A00040E01FC0982F9695969596959F3050F5B3 -:1042B000E0911701F0911801E90FF11D877021E0DD -:1042C00030E0A90102C0440F551F8A95E2F7CA01E8 -:1042D0009181892B818308959F3F39F04F5F4E3044 -:1042E00041F051915813F8CF0DC05111F7CF942FD1 -:1042F000F5CF9F3F39F0F901E90FF11D97FDFA95D0 -:1043000082830895089590911501992321F0909149 -:104310001601911109C02091170130911801F9017E -:104320003296205F3F4F1FC0982F96959695969591 -:104330009F30F0F4E0911701F0911801E90FF11DA1 -:10434000877021E030E0A90102C0440F551F8A9513 -:10435000E2F7CA018095918189238183089531967E -:10436000E217F30729F090819813F9CF1082F7CF65 -:10437000089581E090E0E0911701F0911801E80FB5 -:10438000F91F1082019680319105A9F70895909147 -:10439000F102892B8093F102089580959091F102AA -:1043A00089238093F10208951092F102089590916B -:1043B000F002892B8093F002089580959091F0028D -:1043C00089238093F00208951092F002089590914D -:1043D000EF02892B8093EF02089580959091EF0270 -:1043E00089238093EF0208951092EF02089580933D -:1043F000DE0208951092DE020895809117019091D7 -:104400001801FC0131969C01205F3F4F80E09191A3 -:1044100091118F5FE217F307D1F70895E09117012B -:10442000F09118018091F1028083E0911701F091E1 -:10443000180190818091F002892B8083E09117010F -:10444000F091180190818091EF02892B80838091F7 -:10445000DE02882361F0E0911701F091180190814C -:10446000892B80830E94FD2181111092DE028091B0 -:104470001701909118010C94F31620E0009739F081 -:10448000AC0141505109842395232F5FF7CF822F30 -:10449000089580911303843039F11092F30220E4DF -:1044A00088E190E00FB6F894A895809360000FBE65 -:1044B0002093600080E00E94D80280E00E94F7080C -:1044C00083B7817F846083BF83B7816083BF789423 -:1044D000889583B78E7F83BF88E10FB6F894809369 -:1044E0006000109260000FBE08950895089580E066 -:1044F0000E94D8020E9475220E9452090E947622D0 -:104500000E94D70991E0811101C090E0892F0895A0 -:104510000E94C91B80E00E94D8020E94F1270E94DD -:10452000E7160C94F7081F920F920FB60F92112402 -:104530008F939F93AF93BF938091F302811113C028 -:104540008091F4029091F502A091F602B091F702E9 -:104550004196A11DB11D8093F4029093F502A093A2 -:10456000F602B093F702BF91AF919F918F910F9098 -:104570000FBE0F901F90189582E084BD93E095BD0B -:104580009AEF97BD80936E0008952FB7F8948091AD -:10459000F4029091F502A091F602B091F7022FBFBC -:1045A0000895CF92DF92EF92FF920F931F932FB750 -:1045B000F8944091F4025091F5026091F6027091E6 -:1045C000F7022FBF6A017B01EE24FF248C0120E05B -:1045D00030E0C016D106E206F30610F4415051094E -:1045E0009A01281B390BC9011F910F91FF90EF9081 -:1045F000DF90CF9008951F920F920FB60F92112463 -:104600008F939F93AF93BF938091F4029091F502A3 -:10461000A091F602B091F7020196A11DB11D809301 -:10462000F4029093F502A093F602B093F702BF91C3 -:10463000AF919F918F910F900FBE0F901F90189583 -:104640000E94E413F8942FEF87EA91E6215080400E -:104650009040E1F700C0000087E090EBDC01809320 -:104660001E0390931F03A0932003B09321039CE0AB -:1046700088E10FB6F894A895809360000FBE9093E0 -:104680006000FFCF0E948123811102C00E945D2340 -:104690000E948C238093F2020E94942380931C0337 -:1046A00087FB882780F9809316010E949023682F4A -:1046B00070E080E090E00C94891F6DEE7EEF80E06A -:1046C00090E00E94A82C60E082E090E00E94962C8E -:1046D00060E083E090E00E94962C60E084E090E04F -:1046E0000E94962C60E085E090E00E94962C60E0AD -:1046F00086E090E00E94962C6FEF87E090E00C94AB -:10470000962C80E090E00E94902C21E08D3E9E4F00 -:1047100009F020E0822F089582E090E00C94882C2C -:1047200083E090E00C94882C84E090E00C94882C3A -:10473000682F84E090E00C94962C86E090E00C9436 -:10474000882C682F86E090E00C94962C87E090E00F -:104750000C94882C682F87E090E00C94962C809124 -:10476000FA0280FF0BC060911C0185E0689FB001D8 -:10477000112475956795759567952BC081FF09C0C4 -:1047800060911C0185E0689FB001112475956795C3 -:1047900020C082FF07C060911C0185E0689FB001C6 -:1047A000112417C09091FB029923D1F060911B0155 -:1047B000961788F720911C0185E0289F900111240D -:1047C000929FA001939F500D112470E0CA010E9496 -:1047D0006E2C6038710540F46115710539F002C026 -:1047E00065E070E0862F08958FE7089581E00895D1 -:1047F0008091FA0280FF08C060911A0170E07595FF -:1048000067957595679521C081FF06C060911A0173 -:1048100070E07595679519C082FF04C060911A0118 -:1048200070E010C09091FB029923C1F060911901D2 -:104830009617A0F780911A01899FC001112470E09A -:104840000E946E2C6038710528F46115710521F005 -:10485000862F08958FE7089581E0089561E070E064 -:10486000F4CF803F21F40E94AF23819504C0813FA3 -:1048700029F40E94AF238093FE020895823F21F421 -:104880000E94AF23819504C0833F29F40E94AF2387 -:104890008093FD020895893F19F40E94F82305C012 -:1048A0008A3F31F40E94F82381958093FF02089596 -:1048B0008B3F21F40E94F823819504C08C3F29F49A -:1048C0000E94F823809300030895843F21F480918F -:1048D000FC02816017C0853F21F48091FC02826058 -:1048E00011C0863F21F48091FC0284600BC0873F99 -:1048F00021F48091FC02886005C0883F31F48091EA -:10490000FC0280618093FC0208958D3F21F4809128 -:10491000FA0281600BC08E3F21F48091FA0282601E -:1049200005C08F3F29F48091FA0284608093FA02D7 -:104930000895803F39F48091FE0287FF6CC0109289 -:10494000FE0269C0813F29F48091FE021816BCF373 -:1049500062C09091FD02823F29F497FF5CC01092E3 -:10496000FD0259C0833F19F41916CCF354C0893F96 -:1049700041F48091FF0218160CF04DC01092FF0216 -:104980004AC08A3F29F48091FF0287FF44C0F6CFD6 -:104990008B3F39F48091000387FF3DC010920003E4 -:1049A0003AC08C3F29F4809100031816BCF333C041 -:1049B000843F21F48091FC028E7F17C0853F21F453 -:1049C0008091FC028D7F11C0863F21F48091FC0212 -:1049D0008B7F0BC0873F21F48091FC02877F05C04D -:1049E000883F31F48091FC028F7E8093FC0213C0DB -:1049F0008D3F21F48091FA028E7F0BC08E3F21F40F -:104A00008091FA028D7F05C08F3F29F48091FA02D0 -:104A10008B7F8093FA028091FD0281110EC08091FC -:104A2000FE0281110AC08091FF02811106C08091AF -:104A30000003811102C01092FB0208958CEF92E0F6 -:104A40000E94FE160E94C5229093F9028093F802FC -:104A500008951F93CF93DF938091F8029091F9020C -:104A60000E94D122AC019091FB02992321F0209168 -:104A70001D0130E006C020911E018AE0289F9001B0 -:104A800011244217530708F486C08091FD02C0919B -:104A9000FE02D091FF0210910003811107C0C111E5 -:104AA00076C0D11174C0111172C075C09F3F19F04A -:104AB0009F5F9093FB02181624F40E94AF2380930B -:104AC000FD028091FD0287FF05C00E94AF23819502 -:104AD0008093FD021C1624F40E94AF238093FE02F3 -:104AE0008091FE0287FF05C00E94AF2381958093CD -:104AF000FE026091FD02662339F1C091FE02CC23D3 -:104B000019F1772767FD7095872F972F0E949029BD -:104B100023E333E343E35FE30E94A02A0E945D297D -:104B20006093FD026C2F772767FD7095872F972F75 -:104B30000E94902923E333E343E35FE30E94A02A2A -:104B40000E945D296093FE021D1624F40E94F82342 -:104B50008093FF028091FF0287FF05C00E94F82327 -:104B600081958093FF02111624F40E94F82380930C -:104B700000038091000387FF05C00E94F823819500 -:104B800080930003DF91CF911F910C941E259F3FCE -:104B900009F08ECF96CFDF91CF911F910895ECEF62 -:104BA000F2E085E0DF011D928A95E9F71092FB02A1 -:104BB0001092FA020895833081F128F4813059F07F -:104BC0008230D1F00895853009F449C0B8F18630BB -:104BD00009F456C0089580911E01262F30E0280F59 -:104BE000311D2F3F310524F4680F60931E01089595 -:104BF0008FEF80931E01089580911D01262F30E0D4 -:104C0000280F311D2F3F310524F4680F60931D01DB -:104C100008958FEF80931D01089580911C01262F28 -:104C200030E0280F311D2F3F310524F4680F6093C9 -:104C30001C0108958FEF80931C01089580911B0142 -:104C4000262F30E0280F311D2F3F310524F4680F47 -:104C500060931B0108958FEF80931B01089580914D -:104C60001A01262F30E0280F311D2F3F310524F483 -:104C7000680F60931A0108958FEF80931A010895C9 -:104C800080911901262F30E0280F311D2F3F31056B -:104C900024F4680F6093190108958FEF8093190130 -:104CA0000895833011F128F4813049F0823091F079 -:104CB0000895853081F120F18630C1F10895809109 -:104CC0001E01681720F4861B80931E010895109220 -:104CD0001E01089580911D01681720F4861B8093A2 -:104CE0001D01089510921D01089580911C016817FF -:104CF00020F4861B80931C01089510921C010895D6 -:104D000080911B01681720F4861B80931B01089576 -:104D100010921B01089580911A01681720F4861BD8 -:104D200080931A01089510921A0108958091190133 -:104D3000681720F4861B80931901089510921901B9 -:104D400008950F931F93873208F048C08E3108F002 -:104D50008DC0803109F477C008F5873009F461C04F -:104D600068F4863009F09DC08091F202817F8E7FC9 -:104D70008093F20281E08093020394C08B3009F4A7 -:104D800089C08E3009F08DC08091F20282FB22270B -:104D900020F991E0922790FB82F95EC0863109F4F8 -:104DA00079C060F4813109F07CC00E94C91B9091E8 -:104DB000160181E08927809316016CC0893109F4BE -:104DC00069C08B3109F06DC08091F20281FB22270E -:104DD00020F991E0922790FB81F93EC0883309F4D5 -:104DE00059C050F4893209F457C0853309F454C0CE -:104DF000873209F451C055C0833409F44DC028F4FA -:104E00008A3308F44EC0895332C0883409F049C04F -:104E10000E94C91B0E94070A0E94CB030E94202304 -:104E200039C09091F202892F8095817080FB90F9B2 -:104E300029F0966098609093F20234C0997F977F32 -:104E40009093F20227C08091F20283FB222720F97F -:104E500091E0922790FB83F98093F2029923D1F09D -:104E60008091F20281608093F20214C08D5141E082 -:104E700050E060E070E08A019B0104C0000F111F48 -:104E8000221F331F8A95D2F7C901B8010E94891FDA -:104E90000E94C91B81E006C061E070E080E090E004 -:104EA000F5CF80E01F910F91089580E0089580E094 -:104EB0000895CF93C82F80910203813069F018F0D4 -:104EC0008230C9F184C0E0911701F091180180810E -:104ED000823209F07EC007C0E0911701F0911801FD -:104EE0008081823261F48C2F0E945527811104C089 -:104EF0008C2F0E94A1261DC081E090E01AC08C2F4B -:104F00000E945727811114C0C43179F048F4CB3086 -:104F100079F0C03109F061C082E08093020308C0DB -:104F2000C93219F0C83321F058C01092020355C09D -:104F300081E0817054C0C93291F120F5C43179F11A -:104F4000B0F4C73009F047C08EE180931E0182E3C0 -:104F500080931D018AE080931C0184E180931B01F2 -:104F600088E080931A0188E28093190134C0CE5101 -:104F7000C63088F5EC2FF0E0EA54FE4F8081809334 -:104F8000010329C0CE34E9F020F4CB3421F56AE0E6 -:104F900013C0C13579F0C235F1F461E00DC08091E4 -:104FA0000103882319F01092010315C081E080935A -:104FB000020315C061E006C0809101030E94DB2559 -:104FC0000AC06AE0809101030E94512604C0109239 -:104FD000020380E004C081E002C080E0AACFCF914C -:104FE00008950E948123811102C00E945D230E94C6 -:104FF0009D2380931D0380FF02C0869501C080E041 -:105000000C94D80280911D03982F9695292F30E09B -:10501000233031054CF49F5F990F8170892B81609B -:1050200080931D030E94A12380911D0386950C94FB -:10503000D80280911D03982F969591F09158990F61 -:105040008170892B80931D038E7F91E009F490E09D -:1050500080911D0390FB80F980931D030E94A12382 -:1050600080911D0386950C94D80280911D03982F82 -:10507000909590FB80F980931D030E94A12380915D -:105080001D0380FF02C0869501C080E00C94D80209 -:1050900090911D03892F86958F5F8F779170843053 -:1050A00028F4880F892B80931D0302C090931D0361 -:1050B00080911D038E7F91E009F490E080911D03A3 -:1050C00090FB80F980931D030E94A12380911D0312 -:1050D00086950C94D80220911D03922F96958927CE -:1050E000982F990F822F8170892B80931D038E7FBB -:1050F00091E009F490E080911D0390FB80F980938A -:105100001D030E94A12380911D0386950C94D80253 -:1051100080911D03869508955058BB27AA270ED06D -:10512000D1C1C2D130F0C7D120F031F49F3F11F48A -:105130001EF4B7C10EF4E095E7FB9FC1E92FD3D170 -:1051400080F3BA17620773078407950718F071F4A4 -:105150009EF5EBC10EF4E0950B2EBA2FA02D0B019E -:10516000B90190010C01CA01A0011124FF27591BAC -:1051700099F0593F50F4503E68F11A16F040A22FB2 -:10518000232F342F4427585FF3CF46953795279523 -:10519000A795F0405395C9F77EF41F16BA0B620B22 -:1051A000730B840BBAF09150A1F0FF0FBB1F661F69 -:1051B000771F881FC2F70EC0BA0F621F731F841FAC -:1051C00048F4879577956795B795F7959E3F08F0D2 -:1051D000B3CF9395880F08F09927EE0F9795879591 -:1051E000089527D108F481E008950CD06BC163D1F4 -:1051F00040F05AD130F021F45F3F19F03EC1511117 -:1052000095C14FC170D198F39923C9F35523B1F3D8 -:10521000951B550BBB27AA2762177307840738F025 -:105220009F5F5F4F220F331F441FAA1FA9F333D084 -:105230000E2E3AF0E0E830D091505040E695001C38 -:10524000CAF729D0FE2F27D0660F771F881FBB1FF4 -:10525000261737074807AB07B0E809F0BB0B802DCE -:10526000BF01FF2793585F4F2AF09E3F510568F01A -:1052700004C15CC15F3FECF3983EDCF38695779503 -:105280006795B795F7959F5FC9F7880F911D96951C -:10529000879597F90895E1E0660F771F881FBB1F78 -:1052A000621773078407BA0720F0621B730B840B25 -:1052B000BA0BEE1F88F7E095089504D06894B111F9 -:1052C00035C1089518D188F09F5790F0B92F9927CC -:1052D000B751A0F0D1F0660F771F881F991F1AF001 -:1052E000BA95C9F712C0B13081F01FD1B1E008956D -:1052F0001CC1672F782F8827B85F39F0B93FCCF3EE -:10530000869577956795B395D9F73EF490958095F6 -:10531000709561957F4F8F4F9F4F0895E89409C016 -:1053200097FB3EF490958095709561957F4F8F4FD8 -:105330009F4F9923A9F0F92F96E9BB279395F695EE -:10534000879577956795B795F111F8CFFAF4BB0F6C -:1053500011F460FF1BC06F5F7F4F8F4F9F4F16C0D0 -:10536000882311F096E911C0772321F09EE8872F5A -:10537000762F05C0662371F096E8862F70E060E016 -:105380002AF09A95660F771F881FDAF7880F96958F -:10539000879597F9089588D018F011F08CD038F4DB -:1053A00080C0C4C0E92F9FD0B0F35523C9F3E7FBF9 -:1053B0006217730784079507A8F199F3E92FFF2770 -:1053C00088232AF03197660F771F881FDAF7952F09 -:1053D0005527442332F091505040220F331F441F71 -:1053E000D2F7BB27E91BF50B621B730B840BB109CA -:1053F000C1F222F4620F731F841FB11D31972AF08E -:10540000660F771F881FBB1FEFCF915050405AF097 -:1054100041F0882332F0660F771F881F915050406B -:10542000C1F7939530C08695779567959F5FD9F7BB -:10543000F8CF990F0008550FAA0BE0E8FEEF1616FB -:105440001706E807F907C0F012161306E407F50778 -:1054500098F0621B730B840B950B39F40A2661F0EC -:10546000232B242B252B21F408950A2609F4A1408F -:10547000A6958FEF811D811D089597F99F6780E89C -:1054800070E060E008959F3F31F0915020F48795DF -:1054900077956795B795880F911D9695879597F99C -:1054A00008959FEF80EC089500240A9416161706BD -:1054B00018060906089500240A9412161306140605 -:1054C00005060895092E0394000C11F4882352F068 -:1054D000BB0F40F4BF2B11F460FF04C06F5F7F4F20 -:1054E0008F4F9F4F089557FD9058440F551F59F007 -:1054F0005F3F71F04795880F97FB991F61F09F3FC1 -:1055000079F087950895121613061406551FF2CFE9 -:105510004695F1DF08C0161617061806991FF1CF39 -:1055200086957105610508940895E894BB27662760 -:105530007727CB0197F908957CDF08F48FEF089562 -:105540000BD0C0CFB1DF28F0B6DF18F0952309F0FB -:1055500094CFA7CF1124EACFC6DFA0F3959FD1F354 -:10556000950F50E0551F629FF001729FBB27F00D11 -:10557000B11D639FAA27F00DB11DAA1F649F662766 -:10558000B00DA11D661F829F2227B00DA11D621FB5 -:10559000739FB00DA11D621F839FA00D611D221F6F -:1055A000749F3327A00D611D231F849F600D211D53 -:1055B000822F762F6A2F11249F5750408AF0E1F0F6 -:1055C00088234AF0EE0FFF1FBB1F661F771F881F3F -:1055D00091505040A9F79E3F510570F04ECFA6CF95 -:1055E0005F3FECF3983EDCF3869577956795B7952A -:1055F000F795E7959F5FC1F7FE2B880F911D969554 -:10560000879597F90895FA01EE0FFF1F309621054F -:10561000310599F16115710561F48038BFE39B078D -:1056200049F168949038810561F08038BFEF9B079D -:1056300041F0992342F5FF3FE1053105210511F1C4 -:10564000E8940894E795D901AA2329F4AB2FBE2F3B -:10565000F85FD0F310C0FF5F70F4A695E0F7F7395C -:1056600050F019F0FF3A38F49F779F930CD00F90C9 -:1056700007FC905808953EF014CF60E070E080E899 -:105680009FE308954FE79F775F934F933F932F9347 -:105690009ED02F913F914F915F9152DF05C019F439 -:1056A0000EF0EBCE42CFFDCE26DFC8F39638C0F722 -:1056B00007F80F92E8942BE33AEA48EB5FE74EDFF6 -:1056C0000F920F920F924DB75EB70F92C0D0EAE0E3 -:1056D000F1E016D04F915F91EF91FF91E595EE1FAC -:1056E000FF1F49F0FE57E0684427EE0F441FFA956C -:1056F000E1F74195550B32D00F9007FE26C0089573 -:10570000DF93CF931F930F93FF92EF92DF927B0172 -:105710008C01689405C0DA2EEF011EDFFE01E894CB -:10572000A5912591359145915591AEF3EF0106DD97 -:10573000FE019701A801DA9479F7DF90EF90FF90CE -:105740000F911F91CF91DF9108959B01AC0160E013 -:1057500070E080E89FE349CD90CE95CECCDEE8F3B3 -:105760009923D9F3940F511DBBF39150504094F0FD -:1057700059F0882332F0660F771F881F91505040F0 -:10578000C1F79E3F510544F7880F911D9695879567 -:1057900097F908955F3FACF0983E9CF0BB27869543 -:1057A00077956795B79508F4B1609395C1F7BB0FEE -:1057B00058F711F460FFE8CF6F5F7F4F8F4F9F4F17 -:1057C000E3CFB4CE0EF05FCE6CCE689456CE93DEAF -:1057D000C8F39923D1F3C6F3DF93CF931F930F93AD -:1057E000FF92C92FDD2788232AF02197660F771FA4 -:1057F000881FDAF720E030E040E85FEB9FE388396C -:1058000020F0803E30F021968F7787DCE2E3F1E0F4 -:1058100003C083DCEFE5F1E073DF8B01BE01EC0137 -:10582000FB2E6F5771097595771F880B990B78DDE3 -:1058300028E132E741E35FE38FDEAF2D9801AE014F -:10584000FF900F911F91CF91DF9178DC3BCEFA0151 -:10585000DC01AA0FBB1F9B01AC01BF5728F4222714 -:105860003327442750781FC0B75188F4AB2F00244A -:10587000469537952795011CA395D2F3002069F032 -:10588000220F331F441FB395DAF30DD045CC61309E -:105890007105A0E88A07B94630F49B01AC01662780 -:1058A000772788279078309621F0208331834283B0 -:1058B00053830895AA1BBB1B51E107C0AA1FBB1F3E -:1058C000A617B70710F0A61BB70B881F991F5A958C -:1058D000A9F780959095BC01CD01089597FB072EFF -:1058E00016F4009407D077FD09D00E945A2C07FCCB -:1058F00005D03EF4909581959F4F089570956195E0 -:105900007F4F0895EE0FFF1F0590F491E02D09944D -:10591000F999FECF92BD81BDF89A992780B5089577 -:10592000A8E1B0E042E050E00C94B02C262FF999A9 -:10593000FECF92BD81BDF89A019700B4021639F0EE -:105940001FBA20BD0FB6F894FA9AF99A0FBE0895BF -:105950000196272F0E94972C0C94962CDC01CB01EA -:10596000FC01F999FECF06C0F2BDE1BDF89A31966F -:1059700000B40D9241505040B8F70895F894FFCF0D -:10598000640007000CFF0000003F64EB0F79105625 -:10599000102210EE0F0101DF022808140A321E0047 -:1059A00002040507090B0C0E1011131517181A1C09 -:1059B0001D1F2123242628292B2D2F303234353743 -:1059C000393B1F0F03764F5F6F7F49694379095950 -:1059D00053633149803F5D8B803FF8BF803FCAE110 -:1059E000803F73ED803FCAE1803FF8BF803F5D8B11 -:1059F000803F3149803F0000803FF16D7F3F75EA75 -:105A00007E3F4C827E3F833F7E3F84287E3F833FA4 -:105A10007E3F4C827E3F75EA7E3FF16D7F3F000006 -:105A2000803F3F4D3639BB046E043804FF039203B8 -:105A3000AB03C403DD0301020304050607080900E4 -:00000001FF diff --git a/keyboard/planck/keymaps/daniel/compiled.hex b/keyboard/planck/keymaps/daniel/compiled.hex deleted file mode 100644 index d7e56a3e22..0000000000 --- a/keyboard/planck/keymaps/daniel/compiled.hex +++ /dev/null @@ -1,1448 +0,0 @@ -:100000000C9495020C94D9020C94D9020C94D90248 -:100010000C94D9020C94D9020C94D9020C94D902F4 -:100020000C94D9020C94D9020C9477140C944915B1 -:100030000C94AB220C94D9020C94D9020C94D902E2 -:100040000C94D9020C943B030C94D9020C94D90261 -:100050000C94D9020C9413230C94D9020C94D90259 -:100060000C94D9020C94D9020C94D9020C94D902A4 -:100070000C94D9020C94D9020C94D9020C94D90294 -:100080000C94EC0A0C94D9020C94D9020C94D90269 -:100090000C94D9020C94D9020C94D9020C94D90274 -:1000A0000C94D9020C94D9020C94D902B615D81527 -:1000B000C616D815C6161D164016C6169516A816CD -:1000C00092199219C119C119001A201A761B761BB0 -:1000D0002B1A761BDB1ADB1A421B4B1B761B701B81 -:1000E000E81AE81AE81AE81AE81AE81AE81AE81A00 -:1000F000E81AE81AE81AE81AE81AE81AE81AE81AF0 -:10010000F81A061B0D1B141B1E1B07634236B79BF8 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A19A -:1001D000F1A2F1A3290014001A000800150017006D -:1001E0001C0018000C00120013002A002B00040051 -:1001F0001600070009000A000B000D000E000F009A -:1002000033003400E1001D001B000600190005004A -:1002100011001000360037003800E5000320E00030 -:10022000E200E30002202C002C00012050005100CD -:1002300052004F0035001E021F022002210222023E -:10024000230224022502260227022E0001000100BB -:100250000100010001000100010001000100010096 -:100260002F00300001000100010001000100010029 -:10027000010001002D002D023100010001000100EC -:10028000010001000100010001000120AB00AA00F3 -:10029000A900AE0035021E001F0020002100220030 -:1002A000230024002500260027002E023A003B00F0 -:1002B0003C003D003E003F00400041004200430042 -:1002C0004400450039003A003B003C003D003E0040 -:1002D0003F004000410042004300280001000100AF -:1002E000010001000220010001000100AB00AA0092 -:1002F000A900AE00290014001A000800150017001C -:100300001C0018000C00120013004C002B0004000D -:100310001600070009000A000B000D000E000F0078 -:1003200033003400E1001D001B0006001900050029 -:1003300011001000360037003800E5000100E00031 -:10034000E200E30002202C002C00012050005100AC -:1003500052004F0028035400680065002000500040 -:100360006C0061006E0063006B0020004B006500B4 -:10037000790062006F0061007200640000002C03CD -:100380004F007200740068006F006C0069006E001E -:1003900065006100720020004B006500790062007A -:1003A0006F00610072006400730000000403090420 -:1003B00009026D00040100A0FA0904000001030114 -:1003C0000100092111010001223F000705810308F6 -:1003D000000A0904010001030102000921110100C2 -:1003E00001224D000705820308000A0904020001EA -:1003F00003000000092111010001223600070583D6 -:100400000308000A09040300010300000009211188 -:1004100001000122390007058403100001120110B8 -:100420000100000008EDFE6060010001020001050E -:10043000010906A101050719E029E7150025019525 -:1004400008750181020508190129059505750191B5 -:1004500002950175039101050719002977150025FB -:1004600001957875018102C005010980A10185020D -:1004700016010026B7001A01002AB7007510950171 -:100480008100C0050C0901A1018503160100269C0D -:10049000021A01002A9C02751095018100C0050115 -:1004A0000902A1010901A100050919012905150089 -:1004B00025019505750181029501750381010501ED -:1004C000093009311581257F9502750881060938A3 -:1004D0001581257F950175088106050C0A380215DE -:1004E00081257F950175088106C0C005010906A117 -:1004F00001050719E029E715002501950875018117 -:1005000002950175088101050819012905950575F0 -:100510000191029501750391010507190029FF1545 -:100520000025FF950675088100C011241FBECFEF7E -:10053000DAE0DEBFCDBF04B603FE24C080911E0307 -:1005400090911F03A0912003B09121038730904B1D -:10055000A740B04BB9F410921E0310921F031092E3 -:1005600020031092210314BE84B7877F84BF88E1E3 -:100570000FB6F89480936000109260000FBEE0E028 -:10058000F8E3099511E0A0E0B1E0E0EBF9E502C085 -:1005900005900D92A03CB107D9F713E0A0ECB1E0B3 -:1005A00001C01D92AE31B107E1F70E94BD110C945C -:1005B000D62C0C9400000895089581E008950895C4 -:1005C0000C94DC020C94DD020C94DF020E94A02843 -:1005D00023E030E0281B3109220F2093C401089545 -:1005E000282F2F9880918000211108C0877F809349 -:1005F000800010928D0010928C001BC08860809348 -:100600008000233019F48FEF9FEF0FC083E090E05C -:10061000821B9109880F991F2FEF3FEFA90102C09C -:10062000569547958A95E2F7CA0190938D0080937D -:100630008C000C94E6020E94E60284E08093C301E1 -:100640001092C0010895279A2F988FEF9FEF9093F3 -:100650008700809386008AE08093800089E1809300 -:1006600081000E9409280C941B030E9423036E9AA8 -:10067000769A0C94DB021F920F920FB60F92112400 -:100680002F933F938F939F93EF93FF93E091C1013B -:10069000F091C201CF0101969093C2018093C101F4 -:1006A0000090C30102C0F695E7950A94E2F7EF7354 -:1006B0008091C001823019F4E03251F404C08130DD -:1006C00039F4EF3329F480916F008D7F80936F00B0 -:1006D000F0E0E457FE4FE49121E031E0E29FC001F9 -:1006E000E39F900D11240090C40102C09695879558 -:1006F0000A94E2F790938D0080938C00FF91EF9124 -:100700009F918F913F912F910F900FBE0F901F904F -:10071000189581E008950C94890308950C9435038D -:1007200080911502882309F448C08091D1019091ED -:10073000D201009779F40E94DD229093D201809338 -:10074000D1018091D30190E0009771F48091D401A0 -:1007500090E00AC00E94E92220910001309101013D -:100760002817390740F329C00197880F991F880F70 -:10077000991FFC01EB52FE4F608171818281938150 -:100780000E94520AE091D30184E0E89FF001112415 -:10079000EB52FE4F60817181828193814FE050E086 -:1007A0000E940A0E8091D30190E001966091D401DD -:1007B00070E00E94862C8093D3010C94E00210928A -:1007C00017020C941F0A0895089581E08093170280 -:1007D0000C94E403089508958F929F92AF92BF9274 -:1007E000EF92FF920F931F93CF93DF93CDB7DEB7B6 -:1007F000A3970FB6F894DEBF0FBECDBF7C01FC01FE -:1008000000811181C8010E94DA20B8010E94F1051F -:100810008C01B7010E948B03882309F4CCC10032FC -:10082000F0E51F0741F4F7018281882309F458C0DD -:100830000E946E0EC0C10132F0E51F0741F4F701BE -:100840008281882309F44CC00E94770EB4C1023221 -:10085000F0E51F0751F4F7018281882309F440C0B5 -:100860000E946A0E8111F0CFE3CF0332F0E51F073B -:1008700039F4F7018281882399F10E94E5039BC135 -:100880000432F0E51F0739F4F7018281882341F132 -:100890000E94DF0390C10532F0E51F0749F4F7011C -:1008A00082818823E9F0809117028111F1CFE5CF91 -:1008B0000632F0E51F0739F4F7018281882381F0C1 -:1008C0000E947E0E0AC00732F0E51F0749F4F701C7 -:1008D0008281882329F00E94890E0E94EB036BC15C -:1008E00080911702811105C0F70182818111CFC06B -:1008F00018C1003E110579F4F7018281882309F4BB -:100900004DC00E941F0A81E08093160210921502CA -:100910001092D40150C1023E110559F4F7018281B1 -:100920008823E1F10E941F0A10921602109215020C -:1009300042C1033E110591F4F7018281882371F1D0 -:100940000E941F0A1092160281E0809315021092F5 -:10095000D3011092D2011092D1012DC1023511059F -:1009600059F4F7018281882309F425C1809100019F -:10097000909101010A970DC00135110579F4F70135 -:100980008281882309F417C18091000190910101AF -:100990000A9690930101809300010DC140910401DA -:1009A00083E2EFE1F1E0DE01119601900D928A956C -:1009B000E1F7F701808121E030E02C0F3D1F280F87 -:1009C000311DC9012091020130910301FC01E20FA8 -:1009D000F31F6081772767FD7095640F711D88276D -:1009E00077FD8095982F0E94A82920E030E040E410 -:1009F00051E40E940D294B015C01F701218184E043 -:100A000090E0821B9109BC01882777FD8095982F83 -:100A10000E94A8299B01AC01C501B4010E94A52830 -:100A20009B01AC0160E070E080E090E40E941B2B31 -:100A300020E030E04CED50E40E94B82A4B015C010C -:100A4000F70182818823D1F04FE050E0C501B40165 -:100A50000E940A0E809116028823A1F08091D40191 -:100A600024E0829FF0011124EB52FE4F808291829C -:100A7000A282B3828F5F8093D40104C0C501B40108 -:100A80000E94520A0F3F110508F02ECF94C08091AA -:100A9000D00181111FC0043130E5130709F051C0A6 -:100AA0000E948D0381E08093D0010E94DD2290930B -:100AB000CF018093CE011092C7011092C90110920C -:100AC000C8011092CB011092CA011092CD01109270 -:100AD000CC0171C08091CE019091CF010E94E9229A -:100AE000883C910570F48091C701E82FF0E0EE0F8B -:100AF000FF1FE853FE4F118300838F5F8093C70170 -:100B00005AC0043880E5180721F00538104501F176 -:100B10003AC0F7018281882341F01092C50182E03A -:100B20001EC0043830E5130759F58091C5018111C5 -:100B300006C086E20E94361886E20E94FE1882E015 -:100B40001CC00438F0E51F0741F305381045D9F4FF -:100B5000F7018281882331F01092C60180E20E9461 -:100B60004D1929C08091C601811106C087E20E94FB -:100B7000361887E20E94FE1880E20E9454191BC0BA -:100B80000538104529F381E08093C5018093C601A3 -:100B9000C701A3960FB6F894DEBF0FBECDBFDF919D -:100BA000CF911F910F91FF90EF90BF90AF909F90CA -:100BB0008F900C94E20280E0A3960FB6F894DEBF0B -:100BC0000FBECDBFDF91CF911F910F91FF90EF909E -:100BD000BF90AF909F908F90089580E090E008952F -:100BE00008959CE0799FF001112490E3899FE00D26 -:100BF000F11D1124E60FF11DEE0FFF1FEC52FE4F09 -:100C0000859194910895880F991FFC01E45BFF4F33 -:100C1000859194910895880F991FFC01E453FE4F2C -:100C20008591949108950F931F93CF93DF93EC01D7 -:100C3000811521E39207A0F5C11580E3D80708F0DC -:100C4000D7C0C83ED105D8F4C03ED10508F007C2D0 -:100C5000C83AD10578F4C53AD10508F06AC0C13068 -:100C6000D10509F463C008F4F7C1C430D10508F018 -:100C7000F6C1F2C1CB3BD10508F466C0EDC1C11588 -:100C800090E2D90708F0AFC0C11521E0D20708F003 -:100C9000E6C1C03FD10508F4DFC18E0110651FC257 -:100CA000C03880E5D80700F5C03790E5D90708F0CF -:100CB000A3C0C11520E5D20709F4ACC050F4CE01A1 -:100CC000905480319F4008F0C7C1DF708E01106AD8 -:100CD00006C2C13080E5D80709F4AEC0C43190E542 -:100CE000D90708F4AFC0B8C1C33820E5D20709F46A -:100CF0008EC050F4C13890E5D90709F482C008F0DD -:100D000083C000E011EDEBC1C03181E5D80708F4E4 -:100D1000A3C1C11597E5D90708F436C1CE01905794 -:100D20008115904108F098C1DF7093C101E010E097 -:100D3000D6C1C53AD10509F494C1C63AD10509F026 -:100D400093C102E810E4CBC1C83AD10509F48FC1C0 -:100D5000C93AD10509F48EC1CA3AD10509F48DC149 -:100D6000CB3AD10509F48CC1CC3AD10509F48BC139 -:100D7000CD3AD10509F48AC1C03BD10509F489C136 -:100D8000CE3AD10509F488C1CF3AD10509F487C11B -:100D9000C13BD10509F486C1C23BD10509F485C127 -:100DA000C33BD10509F484C1C43BD10509F483C117 -:100DB000C53BD10509F482C1C63BD10509F481C107 -:100DC000C73BD10509F480C1C83BD10509F47FC1F7 -:100DD000C93BD10509F47EC1CA3BD10509F47DC1E7 -:100DE00000E014E47CC1CE019F700E940B0678C124 -:100DF000DD278E01106C73C1CF70DD278E01146D5D -:100E00006EC100E010ED6BC100E012ED68C100E0C2 -:100E100013ED65C10E94E11B0E941F0A0E94E303BB -:100E20008FEF94E32CE0815090402040E1F700C028 -:100E300000000E94382353C18091F20281608093A8 -:100E4000F2024DC10E949923811102C00E947523B4 -:100E50000E94AC2390E090931D0380931C03C2304A -:100E600080E5D80721F480911C03816086C0C430DE -:100E700090E5D90721F480911C0382607EC0C630C2 -:100E800020E5D20721F480911C03846076C0C8302D -:100E900080E5D80719F480911C0327C0CA3090E57B -:100EA000D90721F480911C03806167C0CC3020E514 -:100EB000D20721F480911C0380625FC0CE3080E5B0 -:100EC000D80721F480911C03806457C0C03190E59D -:100ED000D90721F480911C0380684FC0C23120E5FE -:100EE000D20729F480911C038460886046C0C33017 -:100EF00080E5D80721F480911C038E7F3EC0C53069 -:100F000090E5D90721F480911C038D7F36C0C7304E -:100F100020E5D20721F480911C038B7F2EC0C930BD -:100F200080E5D80719F480911C0326C0CB3090E5EA -:100F3000D90721F480911C038F7E1FC0CD3020E59E -:100F4000D20721F480911C038F7D17C0CF3080E53C -:100F5000D80721F480911C038F7B0FC0C13190E52D -:100F6000D90721F480911C038F7707C0C331D04586 -:100F700031F480911C038B7F877F80931C038091C9 -:100F80001C030E94B023ABC08D2F99278F70992727 -:100F900081309105D9F49E012370332702C0880F58 -:100FA000991F2A95E2F79C688E0144E0000F111FFB -:100FB0004A95E1F700271370802B912B53E0CC0F5B -:100FC000DD1F5A95E1F7C076DD272FC082309105ED -:100FD00031F4DC2FCC278E01016F106A80C0833082 -:100FE000910569F4CE018370992701E010E002C0F9 -:100FF000000F111F8A95E2F7C8019C680FC084306A -:101000009105B9F4CE018370992701E010E002C088 -:10101000000F111F8A95E2F7C8019A6823E0CC0FF0 -:10102000DD1F2A95E1F7C07ED7708C010C2B1D2B9C -:1010300056C08530910531F4DC2FCC278E01046F2A -:10104000106A4DC0069709F04AC0CF71DD27DC2F2A -:10105000CC278E01106243C000E010E040C08E013A -:101060003EC001E810E43BC003E810E438C002EEE3 -:1010700014E435C009EE14E432C00AEE14E42FC0C3 -:1010800005EB14E42CC006EB14E429C007EB14E4D0 -:1010900026C00CEC14E423C00DEC14E420C003E8DB -:1010A00015E41DC00AE815E41AC002E915E417C0EA -:1010B00004E915E414C001E216E411C003E216E4E9 -:1010C0000EC004E216E40BC005E216E408C006E216 -:1010D00016E405C007E216E402C00AE216E4C801FD -:1010E000DF91CF911F910F9108959CE0799FF001BE -:1010F000112490E3899FE00DF11D1124E60FF11DED -:10110000EE0FFF1FEC52FE4F85919491803E9105AA -:10111000E0F4803C910558F58133910509F46FC0E6 -:1011200048F48932910509F463C08A32910509F4C3 -:101130006DC072C089339105E9F082389105D1F014 -:101140008533910509F44DC067C0833E910581F157 -:1011500038F4803E9105B9F0823E9105D9F05CC02B -:10116000863E910561F1873E9105A1F155C00E942F -:101170000306089520911C0320FD02C021FF4CC0EE -:1011800080EE90E049C080911C0380FFF9CF89E395 -:1011900090E042C080911C0382FF0EC080911C032E -:1011A00084FF03C080E090E037C083EE90E034C05D -:1011B00080911C0382FFF2CF82EE90E02DC08091DF -:1011C0001C0383FF0BC080911C0384FDEBCF87EED3 -:1011D00090E022C080911C0383FFF5CF86EE90E063 -:1011E0001BC080911C0385FF07C089E290E014C0FA -:1011F00080911C0385FFF9CF85E390E00DC08091BD -:101200001C0386FF07C08AE290E006C080911C03A1 -:1012100086FFF9CF81E390E00E94130608950C94B5 -:10122000E402E82FF0E0E25BFE4F8081E82FEF70F0 -:10123000F0E082958F7021E030E0A90102C0440FF8 -:10124000551F8A95E2F740A308950F931F93CF93FC -:10125000DF9385B7806885BF85B7806885BFC3E0A9 -:10126000D0E001E010E0FE01E25BFE4F8081E82F5C -:10127000EF70F0E021A182958F70A80102C0440FA9 -:10128000551F8A95E2F7CA01822B81A38C2F0E94F9 -:101290001109219740F78BE090E061E070E0FC01DC -:1012A000EE5BFE4F2081E22FEF70F0E042A122952D -:1012B0002F70DB0102C0AA0FBB1F2A95E2F79D0128 -:1012C000242B22A3019758F7DF91CF911F910F9103 -:1012D0000C948E03EF92FF920F931F93CF93DF93A3 -:1012E00000E212E0C3E0EE24E394F12CD5E08C2F71 -:1012F0000E9411098BE090E040E050E0FC01EE5BC1 -:10130000FE4F6081E62FEF70F0E020A130E06295A3 -:101310006F7002C0359527956A95E2F720FD09C0E8 -:101320009701082E02C0220F331F0A94E2F7422BC6 -:10133000532B019718F7F801929182918F0184172E -:10134000950721F051834083D09305018C2F0E9493 -:101350001109C15060F68091050187FD2CC08150B4 -:10136000809305018F3F39F08FE99FE00197F1F7F6 -:1013700000C0000020C080911E0290911F02909337 -:1013800027028093260280911C0290911D02909367 -:1013900025028093240280911A0290911B0290935F -:1013A0002302809322028091180290911902909357 -:1013B0002102809320020E94900381E0DF91CF916F -:1013C0001F910F91FF90EF900895E82FF0E0EE0F3E -:1013D000FF1FE05EFD4F80819181089508950F9376 -:1013E0001F93CF9308E212E0C0E0F801929182913E -:1013F0008F010E945522C80FF2E000321F07A9F7A3 -:101400008C2FCF911F910F9108950E9499238111E4 -:1014100002C00E9475230E94BE23809307033E9A58 -:10142000809171008D7F8093710082E080939000A5 -:101430008AE18093910081E080932A02089580914F -:101440002A02811102C00E94050A10927A021092AB -:101450007902809171008D7F80937100809190005E -:101460008F738093900010923C0210923B02109276 -:10147000730210927402109275021092760210920A -:10148000720210927102E1E5F2E0A1E4B2E0119281 -:101490001192119211921D921D9282E0E137F8078C -:1014A000B1F70895CF92DF92EF92FF920F931F93BF -:1014B000CF93DF9320913B02222309F484C06B0178 -:1014C0007C0180912A02811102C00E94050A01E775 -:1014D00012E0C7E0D0E0A7019601F8019291829155 -:1014E000729162918F010E940929811131C0FE0120 -:1014F000EE0FFF1FEE0FFF1FEF5AFD4F10821182FC -:1015000012821382DE01AA0FBB1FAF5BBD4F119683 -:101510001C921E92C730D105E9F021964481558175 -:10152000668177814083518362837383148215823D -:101530001682178212968D919C91139711969C9307 -:101540008E9313961C921E92129734961296E2CFA7 -:10155000219708F68091790290917A02019797FD80 -:1015600005C090937A028093790204C010927A02A7 -:10157000109279028091790290917A0220917702FB -:10158000309178022817390724F0109278021092CF -:101590007702892BC1F4809171008D7F8093710057 -:1015A000809190008F73809390001092730210923C -:1015B00074021092750210927602109272021092CA -:1015C000710210923B02DF91CF911F910F91FF901A -:1015D000EF90DF90CF9008951F920F920FB60F9269 -:1015E00011244F925F926F927F928F929F92AF924F -:1015F000BF92CF92DF92EF92FF922F933F934F9340 -:101600005F936F937F938F939F93AF93BF93CF938A -:10161000DF93EF93FF9380913B02882309F49BC1F2 -:10162000C0917902D0917A021C161D060CF093C16C -:1016300040902B0250902C0260902D0270902E0250 -:1016400020E030E0A901C301B2010E94B42A1816BB -:101650000CF065C0C130D10509F452C08091770209 -:1016600090917802BE010E94862C7C0190937802B2 -:101670008093770280903D0290903E02A0903F02BE -:10168000B090400220E030E040E85FE3C501B401E3 -:101690000E94A52860933D0270933E0280933F0212 -:1016A00090934002F701EE0FFF1FEE0FFF1FEF5A5E -:1016B000FD4FA301920160817181828193810E941B -:1016C0000D2920E030E040E05EE30E94B82A9B0153 -:1016D000AC01C501B4010E94B42A18168CF4C701EC -:1016E0000196BE010E94862C909378028093770227 -:1016F00010923D0210923E0210923F021092400260 -:10170000E0917702F0917802EE0FFF1FEE0FFF1FBE -:10171000EF5AFD4F6081718182819381D0C0C0906A -:101720007302D0907402E0907502F090760220E08F -:1017300030E0A901C701B6010E9409292197882339 -:1017400009F4A2C0FE01EE0FFF1FEE0FFF1FEF5ABC -:10175000FD4F80809180A280B380A5019401C701D4 -:10176000B6010E94092987FF31C0A501940160E0FC -:1017700070E08CED93EC0E940D2920E030E040E415 -:1017800051E40E940D2920E030E040E05FE30E9438 -:10179000B82A9B01AC0160E070E080E090E40E9418 -:1017A0001B2B9B01AC01C501B4010E94B82A9B010F -:1017B000AC01C701B6010E94092987FF07C0A70134 -:1017C000960160E070E08CED93E439C0A5019401CE -:1017D000C701B6010E94B42A18160CF055C0A50125 -:1017E000940160E070E08CED93E40E940D2920E00C -:1017F00030E040E451E40E940D2920E030E040E078 -:101800005FE30E94B82A9B01AC0160E070E080E0D9 -:1018100090E40E941B2B9B01AC01C501B4010E9406 -:10182000B82A9B01AC01C701B6010E94B42A181660 -:101830005CF5A701960160E070E08CED93EC0E94EE -:101840000D2920E030E040E451E40E940D2920E021 -:1018500030E040E05FE30E94B82A9B01AC0160E009 -:1018600070E080E090E40E941B2B9B01AC01C7015B -:10187000B6010E94B82A6093730270937402809339 -:1018800075029093760213C0FE01EE0FFF1FEE0F5C -:10189000FF1FEF5AFD4F80819181A281B381809318 -:1018A000730290937402A0937502B09376026091D4 -:1018B000730270917402809175029091760220916A -:1018C0002802309129022F3F4FEF340731F02F5F6C -:1018D0003F4F30932902209328020E94940E6B01FF -:1018E0007C0120E034E244EF51E40E94092987FFA3 -:1018F00008C086EFC82E88E2D82E84EFE82E81E457 -:10190000F82E20E030E040E051E4C701B6010E942B -:10191000B82A9B01AC0160E074E284E79BE40E947A -:101920000D296B017C010E947A29709397006093C6 -:1019300096002091060130910701409108015091D5 -:101940000901C701B6010E94B82A0E947A29709342 -:1019500099006093980080913C02882309F433C178 -:10196000C0903702D0903802E0903902F0903A02ED -:1019700020E030E0A901C701B6010E94B42A181680 -:10198000D4F580912802909129028F3F2FEF920782 -:1019900029F001969093290280932802C701B6018D -:1019A0000E94940E20E030E040E051E40E94B82A0A -:1019B0009B01AC0160E074E284E79BE40E940D2986 -:1019C0006B017C010E947A297093970060939600C6 -:1019D00020910601309107014091080150910901C1 -:1019E000C701B6010E94B82A0E947A297093990013 -:1019F0006093980008C01092970010929600109281 -:101A000099001092980060913102709132026F5FDC -:101A10007F4F709332026093310220919600309193 -:101A2000970080E090E0232BF1F0C0919600D091D8 -:101A300097000E94A6296B017C01BE0180E090E026 -:101A40000E94A6299B01AC0160913302709134027F -:101A500080913502909136020E940D2920E03FEFDF -:101A60004FE757E410C00E94A6296B017C0120E0DB -:101A700030EE4FEF54E46091330270913402809164 -:101A80003502909136020E94B82A9B01AC01C70131 -:101A9000B6010E94B42A87FD96C080912F028F5F05 -:101AA00080932F0290E0209103033091040382176A -:101AB0009307A0F080910E03882319F010922F0253 -:101AC0000DC0809171008D7F809371008091900096 -:101AD0008F738093900010923C027DC08091300201 -:101AE000C0912F02811128C0C0900803D090090333 -:101AF000E0900A03F0900B0320E030E0A901C70159 -:101B0000B6010E94B42A1816BCF481E0809330021A -:101B100010923702109238021092390210923A0253 -:101B2000C0923302D0923402E0923502F092360233 -:101B3000C150C0932F0243C010923002109229026C -:101B400010922802E0910503F091060348E0C49F3B -:101B5000E00DF11D112480819181A281B3818093D8 -:101B6000370290933802A0933902B0933A0220E0F2 -:101B700030E040E85EE364817581868197810E9450 -:101B8000B82A6B017C0180910A01682F70E080E027 -:101B900090E00E94A62920E030E048EC52E40E9448 -:101BA0000D299B01AC01C701B6010E94B82A6093C0 -:101BB0003302709334028093350290933602109270 -:101BC0003202109231028091070380FD04C010920E -:101BD0003C0210923B02FF91EF91DF91CF91BF91B8 -:101BE000AF919F918F917F916F915F914F913F91B5 -:101BF0002F91FF90EF90DF90CF90BF90AF909F908C -:101C00008F907F906F905F904F900F900FBE0F90CE -:101C10001F901895CF92DF92EF92FF92CF93DF93B0 -:101C20006B017C01EA0180912A02811102C00E94AD -:101C3000050A8091070380FF46C080917902909148 -:101C40007A0208970CF03FC0809171008D7F8093DD -:101C5000710080913C0281110E941F0A81E08093F3 -:101C60003B02109229021092280220E030E0A901E4 -:101C7000C701B6010E94B42A1816DCF480917902DB -:101C800090917A02FC01EE0FFF1FEE0FFF1FEF5A3B -:101C9000FD4FC082D182E282F382FC01EE0FFF1F72 -:101CA000EF5BFD4FD183C083019690937A028093BE -:101CB0007902809171008260809371008091900020 -:101CC000806880939000DF91CF91FF90EF90DF903C -:101CD000CF90089580910703817008958091070344 -:101CE0008160809307030E94C2230C94EA038091D1 -:101CF00007038E7F809307030C94C22380917B029D -:101D000090E0019666E070E00E94862C80937B0252 -:101D1000089580917B0290E0019766E070E00E9458 -:101D2000862C80937B0208958F929F92AF92BF92F0 -:101D3000CF92DF92EF92FF920F931F93CF93DF9397 -:101D40006B017C01C0912802D0912902BE0180E084 -:101D500090E00E94A6294B015C01A701960160E07A -:101D600070E08CE594E40E940D299B01AC01C50153 -:101D7000B4010E94B82A0E947A2920917B02233064 -:101D800009F473C028F4222351F02130E9F02CC16A -:101D9000243009F4A0C0253009F4E0C025C180E05A -:101DA00090E0A0E0BFE38093060190930701A09329 -:101DB0000801B093090110922B0210922C0210928C -:101DC0002D0210922E0210C110922B0210922C02A2 -:101DD00010922D0210922E026431710540F46A3087 -:101DE000710560F520E030E040E85EE32BC0693C1F -:101DF000710508F0AAC080E090E00E94A62920E0CA -:101E000030E040EA51E40E94A42820E030E044E3BE -:101E100053E40E940D299B01AC010E94B82A20E0E6 -:101E200030E040E05EE30E94B82A9B01AC0160E034 -:101E300070E080E09EE30E94A42844C020E030E0EF -:101E400040E05FE3C701B6010E94B82A6B017C0144 -:101E500080E090E0A0E0BEE380930601909307014C -:101E6000A0930801B0930901BFC010922B021092F9 -:101E70002C0210922D0210922E024AE0469F9001F1 -:101E8000479F300D1124C90168EB7BE00E94722C42 -:101E9000BC016C5D754077FF03C071956195710958 -:101EA000882777FD8095982F0E94A8292EE333EC90 -:101EB0004EE259E30E94B82A20E030E040EC5EE3B5 -:101EC0000E94A52860930601709307018093080182 -:101ED0009093090189C010922B0210922C0210924B -:101EE0002D0210922E02CE0183709927892BE1F0EA -:101EF000BE016170772780E090E00E94A62920E073 -:101F000030E040E05EE30E94B82A20E030E040E4A8 -:101F10005FE30E94A52860930601709307018093F8 -:101F20000801909309010CC080E090E0A0E0BFE3BD -:101F30008093060190930701A0930801B0930901D3 -:101F4000C770DD27CD2B09F04FC01092060110920B -:101F50000701109208011092090146C010922B024D -:101F600010922C0210922D0210922E0200E010E02E -:101F700020E03FE30093060110930701209308013E -:101F8000309309016739710578F180E090E00E9493 -:101F9000A62920E030E047E153E40E94A42820E095 -:101FA00030E04AE754E40E940D2920E030E048E4A4 -:101FB00052E40E94B82A20E030E040EA51E40E9456 -:101FC000EA290E947529660F771F660F771FFB01AC -:101FD000EE5AFE4F2081318142815381C701B60103 -:101FE0000E94B82A6B017C01C701B601DF91CF9135 -:101FF0001F910F91FF90EF90DF90CF90BF90AF9027 -:102000009F908F90089580918C020895CF93DF93D5 -:1020100000D01F92CDB7DEB79C01809113038430AE -:1020200019F593E099833B832A839093E9008FEF1E -:102030009091E800815095FD06C095ED9A95F1F7D5 -:1020400000008111F5CF8091E80085FF0DC040E0D0 -:1020500050E063E070E0CE0101960E94671280912B -:10206000E8008E778093E8000F900F900F90DF913B -:10207000CF910895CF93DF9300D01F92CDB7DEB7F5 -:1020800020911303243021F522E029839B838A8346 -:1020900083E08093E9008FEF9091E800815095FDF7 -:1020A00006C095ED9A95F1F700008111F5CF80916A -:1020B000E80085FF0DC040E050E063E070E0CE0135 -:1020C00001960E9467128091E8008E778093E80065 -:1020D0000F900F900F90DF91CF91089520911303EF -:1020E0002430F1F422E02093E9002FEF3091E80052 -:1020F000215035FD06C035ED3A95F1F7000021116C -:10210000F5CF2091E80025FF0BC040E050E065E0EE -:1021100070E00E9467128091E8008E778093E8005B -:102120000895CF93DF93EC0190911303943009F05D -:1021300046C0809115018823D9F08091160188232B -:10214000B9F09093E9008FEF9091E800815095FDF0 -:1021500006C095E19A95F1F700008111F5CF8091C5 -:10216000E80085FF2CC040E050E060E170E017C05F -:1021700081E08093E9008FEF9091E800815095FD18 -:1021800006C095ED9A95F1F700008111F5CF809189 -:10219000E80085FF14C040E050E068E070E0CE0148 -:1021A0000E9467128091E8008E778093E80080E1BA -:1021B000FE01ACE7B2E001900D928A95E1F7DF9164 -:1021C000CF91089580911203811109C00E94FC13E0 -:1021D0000E9459148091E20084608093E200089587 -:1021E000109212030895089508950C94A02242E0DD -:1021F00061EC81E00E94761342E061EC82E00E9493 -:10220000761342E061EC83E00E94761342E161ECD8 -:1022100084E00C94761380911503833009F455C043 -:1022200030F4813071F0823009F48EC008958A3024 -:1022300009F47AC08B3009F460C0893009F09CC081 -:1022400020C080911403813A09F096C08091E80083 -:10225000877F8093E8008091180390911903892B60 -:1022600021F460E18CE792E003C060E080E090E060 -:1022700070E00E94B2128091E8008B778093E800B2 -:10228000089580911403813209F076C0809118037B -:1022900090911903009719F0039709F06DC0809190 -:1022A000E800877F8093E8008091E80082FD05C008 -:1022B000809113038111F8CF5FC08091F10080936A -:1022C0008C028091E8008B7753C080911403813A8F -:1022D00009F052C08091180390911903892B09F0DD -:1022E0004BC08091E800877F8093E8008091E800F0 -:1022F00080FFFCCF8091150136C08091140381329C -:10230000D9F58091180390911903892BA9F5809133 -:10231000E800877F8093E8000E94AB13809116034A -:10232000809315010C94E11B80911403813221F5F7 -:102330008091E800877F8093E8000E94AB13809132 -:10234000170380938D02089580911403813AA1F4BC -:102350008091E800877F8093E8008091E80080FF0B -:10236000FCCF80918D028093F1008091E8008E7700 -:102370008093E8000C94AB13089584B7877F84BFE3 -:1023800088E10FB6F89480936000109260000FBE51 -:1023900090E080E80FB6F89480936100909361001C -:1023A0000FBE0E944E170E94FC130E945914809188 -:1023B000E20084608093E20078940E94DF160E941D -:1023C00050178BE091E00E94FA168091130385303C -:1023D00069F40E946122809111038823B1F30E9465 -:1023E0008F22882391F30E945112EFCF0E94581739 -:1023F000ECCF292F332723303105C9F064F4213085 -:10240000310581F02230310509F043C08DE690E0BE -:1024100020EB33E042C021323105F1F022323105A8 -:1024200041F137C082E190E02DE134E036C09927D8 -:102430008130910541F08230910541F0892B49F5B9 -:10244000ECEAF3E005C0EEE7F3E002C0E4E5F3E018 -:10245000849190E09F0121C06430D8F4E62FF0E031 -:10246000EE0FFF1FE255FE4F2081318189E090E0A1 -:1024700014C0643070F470E0FB01EE0FFF1FEA55EA -:10248000FE4F20813181FB01EE55FE4F808190E0AF -:1024900004C080E090E020E030E0FA013183208346 -:1024A000089580E189BD82E189BD09B400FEFDCFB8 -:1024B0008091D8008F7D8093D8008091E000826069 -:1024C0008093E0008091E00081FDFCCF0895CF92E1 -:1024D000DF92EF92FF920F931F93CF93DF93EC0164 -:1024E0008B016A010E94CA13811133C0C114D10447 -:1024F00039F0F60180819181081B190BC80FD91F93 -:10250000E12CF12C0115110519F18091E80085FDF0 -:1025100016C08091E8008E778093E800C114D10442 -:1025200049F0F60180819181E80EF91EF182E08286 -:1025300085E00FC00E94CA13882321F30AC0899145 -:102540008093F10001501109FFEFEF1AFF0ADACF73 -:1025500080E0DF91CF911F910F91FF90EF90DF907E -:10256000CF90089520911A0330911B032617370747 -:1025700048F06115710539F42091E8002E77209319 -:10258000E80001C0B90140E061157105A9F1209191 -:102590001303222309F443C0253009F442C02091DB -:1025A000E80023FD40C02091E80022FD32C02091C8 -:1025B000E80020FFE9CF4091F3002091F20030E0E5 -:1025C000342BFC01CF016115710559F0283031051C -:1025D00040F481918093F100615071092F5F3F4F6A -:1025E000F1CF41E02830310509F040E02091E800CA -:1025F0002E772093E800C8CF4111C9CF0AC080913F -:102600001303882361F0853061F08091E80083FD39 -:102610000AC08091E80082FFF2CF80E0089582E056 -:10262000089583E0089581E0089520911A03309180 -:102630001B032617370748F06115710539F42091FF -:10264000E8002E772093E80001C0B901FC0120E0EA -:102650006115710591F180911303882309F440C03D -:10266000853009F43FC08091E80083FD3DC0809132 -:10267000E80082FD2FC08091E80080FFE9CF209123 -:10268000F3008091F20090E0922B6115710559F0F2 -:102690008830910540F424912093F10031966150E7 -:1026A00071090196F2CF21E0089709F020E08091AE -:1026B000E8008E778093E800CBCF2111CCCF0AC001 -:1026C00080911303882361F0853061F08091E800E8 -:1026D00083FD0AC08091E80082FFF2CF80E0089578 -:1026E00082E0089583E0089581E00895982F97305F -:1026F00058F59093E900981739F07091EC0020910B -:10270000ED005091F00003C0242F762F50E021FF00 -:1027100019C03091EB003E7F3093EB003091ED001B -:102720003D7F3093ED003091EB0031603093EB0052 -:102730007093EC002093ED005093F0002091EE0098 -:1027400027FF07C09F5FD3CF8F708093E90081E0A0 -:10275000089580E008958091140387FF11C080914F -:10276000E80082FD05C0809113038111F8CF11C0EC -:102770008091E8008B770BC080911303882349F088 -:102780008091E80080FFF8CF8091E8008E778093F9 -:10279000E80008952091E4003091E50095E640912D -:1027A000EC00842F817040FF22C08091E80080FD02 -:1027B0001CC080911303882391F0853091F08091A3 -:1027C000EB0085FD10C04091E4005091E5004217F8 -:1027D000530729F39A01915011F784E0089582E09C -:1027E000089583E0089581E0089580E00895409180 -:1027F000E80042FFDECF08950E946A140E9472141E -:10280000E0EEF0E0808181608083E8EDF0E080819F -:102810008F77808319BCA7EDB0E08C918E7F8C936D -:1028200080818F7E80831092120308950F931F93EF -:10283000CF93DF930E946A140E947214C8EDD0E017 -:1028400088818F77888388818068888388818F7D5D -:10285000888319BC1092130310920F031092110376 -:102860001092100300EE10E0F80180818B7F8083CE -:1028700088818160888342E060E080E00E94761376 -:10288000E1EEF0E080818E7F8083E2EEF0E08081F7 -:1028900081608083808188608083F80180818E7F61 -:1028A0008083888180618883DF91CF911F910F9110 -:1028B0000895E8EDF0E080818F7E8083E7EDF0E021 -:1028C00080818160808384E082BF81E080931203F5 -:1028D0000C941614E8EDF0E080818E7F80831092D6 -:1028E000E20008951092DA001092E10008951F921C -:1028F0000F920FB60F9211242F933F934F935F9334 -:102900006F937F938F939F93AF93BF93EF93FF93B7 -:102910008091E10082FF0BC08091E20082FF07C03E -:102920008091E1008B7F8093E1000E94DE16809110 -:10293000DA0080FF1FC08091D80080FF1BC080910B -:10294000DA008E7F8093DA008091D90080FF0DC07D -:1029500080E189BD82E189BD09B400FEFDCF81E03F -:10296000809313030E94E21005C019BC1092130358 -:102970000E94F0108091E10080FF19C08091E20078 -:1029800080FF15C08091E2008E7F8093E2008091ED -:10299000E20080618093E2008091D80080628093A1 -:1029A000D80019BC85E0809313030E94F410809135 -:1029B000E10084FF30C08091E20084FF2CC080E100 -:1029C00089BD82E189BD09B400FEFDCF8091D800A8 -:1029D0008F7D8093D8008091E1008F7E8093E1000D -:1029E0008091E2008F7E8093E2008091E20081601E -:1029F0008093E20080910F03882311F084E007C0E8 -:102A00008091E30087FD02C081E001C083E08093F4 -:102A100013030E94F5108091E10083FF29C080918B -:102A2000E20083FF25C08091E100877F8093E10071 -:102A300082E08093130310920F038091E1008E7F58 -:102A40008093E1008091E2008E7F8093E20080918C -:102A5000E20080618093E20042E060E080E00E945A -:102A600076138091F00088608093F0000E94F3104C -:102A7000FF91EF91BF91AF919F918F917F916F9156 -:102A80005F914F913F912F910F900FBE0F901F902C -:102A900018951F920F920FB60F9211242F933F9308 -:102AA0004F935F936F937F938F939F93AF93BF9356 -:102AB000CF93DF93EF93FF93C091E900CF708091A4 -:102AC000EC00D82FD17080FDD0E81092E900809101 -:102AD000F000877F8093F00078940E948D1510920B -:102AE000E9008091F00088608093F000CD2BCF70DA -:102AF000C093E900FF91EF91DF91CF91BF91AF912A -:102B00009F918F917F916F915F914F913F912F9105 -:102B10000F900FBE0F901F9018951F93CF93DF93C8 -:102B2000CDB7DEB7AA970FB6F894DEBF0FBECDBF04 -:102B3000E4E1F3E088E08E0F9091F10091938E1321 -:102B4000FBCF0E940B118091E80083FF1FC1809191 -:102B5000140390911503492F50E04A30510508F0B5 -:102B600015C1FA01EA5AFF4F0C949A2C803881F073 -:102B7000823809F00BC1809118038F708093E900AF -:102B80008091EB0085FB882780F91092E90006C050 -:102B90008091100390911103911182609091E8004F -:102BA000977F9093E8008093F1001092F100C8C0E5 -:102BB000282F2D7F09F0EAC0882319F0823061F0B8 -:102BC000E5C080911603813009F0E0C0933009F030 -:102BD00080E0809311032BC080911603811127C0E0 -:102BE000809118038F7009F4D1C08093E90020917F -:102BF000EB0020FF1CC0933021F48091EB00806239 -:102C000014C09091EB0090619093EB0021E030E0D4 -:102C1000A90102C0440F551F8A95E2F74093EA00CC -:102C20001092EA008091EB0088608093EB00109294 -:102C3000E9008091E800877F86C08111A7C01091CC -:102C400016031F778091E3008078812B8093E30047 -:102C50008091E800877F8093E8000E94AB13809109 -:102C6000E80080FFFCCF8091E30080688093E30060 -:102C7000111102C082E001C083E08093130386C07B -:102C80008058823008F082C080911603909117031B -:102C90008C3D53E0950779F583E08A838AE2898346 -:102CA0004FB7F894DE01139620E03EE051E2E32FA7 -:102CB000F0E050935700E49120FF03C0E295EF70DD -:102CC0003F5FEF708E2F90E0EA3010F0C79601C0A2 -:102CD000C0968D939D932F5F243149F74FBF80910C -:102CE000E800877F8093E8006AE270E0CE010196F9 -:102CF0000E94B21214C0AE014F5F5F4F6091180383 -:102D00000E94F911BC01009709F440C09091E800BD -:102D1000977F9093E80089819A810E941513809192 -:102D2000E8008B778093E80031C0803879F5809196 -:102D3000E800877F8093E80080910F038093F10083 -:102D40008091E8008E778093E8000E94AB131EC04C -:102D500081111CC0909116039230C0F48091E8005C -:102D6000877F8093E80090930F030E94AB138091BC -:102D70000F03811106C08091E30087FD02C081E04E -:102D800001C084E0809313030E94F7108091E80053 -:102D900083FF0AC08091E800877F8093E8008091DC -:102DA000EB0080628093EB00AA960FB6F894DEBF2A -:102DB0000FBECDBFDF91CF911F9108950895CF939E -:102DC000809113038823A1F0C091E900CF70909106 -:102DD000EC00892F817090FD80E8C82B1092E900EB -:102DE0008091E80083FD0E948D15CF70C093E900AB -:102DF000CF91089590939302809392020895E09169 -:102E00009202F0919302309721F00190F081E02D31 -:102E1000099480E00895E0919202F0919302309736 -:102E200021F00280F381E02D09940895E09192024F -:102E3000F0919302309721F00480F581E02D099400 -:102E4000089520919002309191028217930771F0BA -:102E50009093910280939002E0919202F0919302FC -:102E6000309721F00680F781E02D09940895209194 -:102E70008E0230918F028217930771F090938F0228 -:102E800080938E02E0919202F0919302309721F0AC -:102E90000084F185E02D0994089508950C944D1750 -:102EA0000E94D4220E9425090E945A230C940928CA -:102EB0005F926F927F928F929F92AF92BF92CF92CA -:102EC000DF92EF92FF920F931F93CF93DF9300D087 -:102ED00000D01F92CDB7DEB70E946A099DE9C92EC6 -:102EE00092E0D92E03E010E0AA24A394B12C502E36 -:102EF000802F0E94E5094C01F601729062906F01EB -:102F00006826792661147104A1F40150110978F73B -:102F10008FEF89838A831B820E94DD228160782F54 -:102F20009D838C8349815A816B818D810E94081811 -:102F300038C08091F20281FD0E94EE092BE030E062 -:102F40007501022E02C0EE0CFF1C0A94E2F7C701C5 -:102F500086219721892B09F129835A828E209F206F -:102F600091E0892809F490E09B830E94DD22816032 -:102F7000782F9D838C8349815A816B818D810E943A -:102F80000818000F111FF801EB56FD4F8081918149 -:102F9000E826F926F182E08204C02150310980F64A -:102FA000B4CF0E944125109194020E94FF16181779 -:102FB000D1F00E94FF16809394020F900F900F9013 -:102FC0000F900F90DF91CF911F910F91FF90EF9095 -:102FD000DF90CF90BF90AF909F908F907F906F9039 -:102FE0005F900C940F090F900F900F900F900F901F -:102FF000DF91CF911F910F91FF90EF90DF90CF90D5 -:10300000BF90AF909F908F907F906F905F9008954A -:10301000CF93DF93CDB7DEB72B970FB6F894DEBF13 -:103020000FBECDBF4F83588769877A878B87DE01B4 -:10303000119686E0FD0111928A95E9F785E0FE017F -:10304000379601900D928A95E1F749815A816B81FB -:103050007C818D819E810E947F1E2B960FB6F894F5 -:10306000DEBF0FBECDBFDF91CF910895CF938823F0 -:1030700009F4C2C0C82F823859F40E94FF1681FD9E -:10308000BBC089E30E9459210E94262289E30CC01B -:10309000833879F40E94FF1680FDAEC083E50E945C -:1030A00059210E94262283E50E949B21CF910C94F6 -:1030B0002622843859F40E94FF1682FD9DC087E4C1 -:1030C0000E9459210E94262287E4EECF8CEF8C0FBC -:1030D000813A48F48C2F0E94712781118DC08C2F6A -:1030E0000E945921E3CF80E28C0F883048F4C770EA -:1030F00081E001C0880FCA95EAF70E94DF21D6CF90 -:103100008BE58C0F833078F4C53A29F0C63A31F05C -:1031100083E890E005C081E890E002C082E890E09A -:10312000CF910C94211788E58C0F833108F064C08F -:10313000C83A39F1C93A41F1CA3A49F1CB3A51F1A9 -:10314000CC3A59F1CD3A61F1C03B69F1CE3A71F117 -:10315000CF3A79F1C13B81F1C23B89F1C33B91F197 -:10316000C43B99F1C53BA1F1C63BA9F1C73BB1F105 -:10317000C83BB9F1C93BC1F1CA3BC9F180E090E05D -:1031800038C082EE90E035C089EE90E032C08AEE21 -:1031900090E02FC085EB90E02CC086EB90E029C03A -:1031A00087EB90E026C08CEC90E023C08DEC90E0A3 -:1031B00020C083E891E01DC08AE891E01AC082E94E -:1031C00091E017C084E991E014C081E292E011C05F -:1031D00083E292E00EC084E292E00BC085E292E0CE -:1031E00008C086E292E005C087E292E002C08AE26F -:1031F00092E0CF910C943717CF910895882309F46A -:103200004BC0823859F40E94FF1681FF45C089E304 -:103210000E9459210E94262289E30CC0833871F450 -:103220000E94FF1680FF38C083E50E9459210E944A -:10323000262283E50E949B210C942622843859F48F -:103240000E94FF1682FF28C087E40E9459210E9435 -:10325000262287E4EFCF9CEF980F913A58F390E243 -:10326000980F983050F4877091E001C0990F8A95BB -:10327000EAF7892F0E94E521DFCF9BE5980F933075 -:1032800020F480E090E00C942117885A833120F4D8 -:1032900080E090E00C9437170895882321F00E9475 -:1032A000DF210C9426220895882321F00E94E52135 -:1032B0000C94262208957F928F929F92AF92BF9294 -:1032C000CF92DF92EF92FF920F931F93CF93DF93F2 -:1032D0001F92CDB7DEB77C01C62E772EFC0105818B -:1032E00002950F70128111110E94FC210E9452213F -:1032F000882379F0112369F080E28C0D883048F042 -:1033000082E00E943B210E94522191E0D82ED926D2 -:1033100001C0D12CE72DE295EF70F0E0E05AFF4FAD -:103320000C949A2C872D807F072D0F70882311F025 -:103330000295007F112389F0002309F499C180E2EE -:103340008C0D883020F4802F0E94DF2103C0802F55 -:103350000E94EF210E9426228BC18C2D0E94FE1814 -:10336000002309F4C3C180E28C0D883020F4802F43 -:103370000E94E52103C0802F0E94F5210E94262291 -:10338000B5C1872D807F972D9F70803211F4892FD2 -:1033900003C0892F8295807FCC2021F0F1E0CF16E9 -:1033A000A1F01DC0112339F0002319F1013009F5F6 -:1033B0000E940F229BC1002319F0013009F496C12D -:1033C00089830E941222898110C1112321F00630C5 -:1033D00008F08CC10EC0053008F088C106C1112369 -:1033E00059F0002331F0F701958190FF41C19F70A2 -:1033F00095830E944D197AC1002309F4F6C03EC19D -:10340000872D86958695837090E0009719F0019737 -:1034100061F06CC1112321F08C2D972D937002C0A7 -:1034200080E090E00E94211761C1112321F08C2DD2 -:10343000972D937002C080E090E00E94371756C12C -:103440008C2D112319F00E94492402C00E94B1243E -:103450000E9436254BC1872D837009F052C011118F -:1034600045C18C2D829586958770880F880F9C2D7D -:103470009F70892E912CA12CB12C082E04C0880C91 -:10348000991CAA1CBB1C0A94D2F7C4FE14C00FE0FE -:1034900010E020E030E0B901A80104C0440F551F3E -:1034A000661F771F8A95D2F7CB01BA016095709598 -:1034B0008095909503C060E070E0CB01272D2695A4 -:1034C0002695237030E02230310569F02330310534 -:1034D00089F0682979298A299B292130310571F0E1 -:1034E0000E94C71F03C1682979298A299B290E9444 -:1034F000E31FFCC00E94C71FC501B4010E94AB1F9F -:10350000F5C0112319F0872D817001C0869588239D -:1035100009F4ECC08C2D829586958770880F880FF2 -:103520009C2D9F70892E912CA12CB12C082E04C0AB -:10353000880C991CAA1CBB1C0A94D2F7C4FE14C0A8 -:103540000FE010E020E030E0B901A80104C0440F12 -:10355000551F661F771F8A95D2F7CB01BA01609578 -:1035600070958095909503C060E070E0CB01272DA9 -:10357000269526952370422F50E04230510569F080 -:103580004330510589F0682979298A299B294130DE -:10359000510571F00E94A120A9C0682979298A29C2 -:1035A0009B290E94BD20A2C00E94A120C501B40198 -:1035B0000E9485209BC08C2D90E0FC01E05EF1090B -:1035C000E531F10508F050C0E059FF4F0C949A2CFA -:1035D0000C2D0F70872D8F71112321F00E941E205A -:1035E000802F07CF0E943F20802F0E9454197EC059 -:1035F000112341F0053008F079C0872D8F710E94AA -:10360000642074C0063008F071C0F7CF112339F080 -:10361000872D8F710E941E2069C01123C9F3872D49 -:103620008F710E943F2062C0112329F0872D8F7176 -:103630000E9409205BC00E94FF1F58C0112351F057 -:10364000172D1F71812F0E941E2063E0812F0E9481 -:1036500032214CC081E00E943B21023008F446C078 -:1036600082E00E943B2142C0112331F0002381F20D -:103670008C2D0E9436183AC0002389F28C2D0E94AE -:10368000FE1834C0472D4F706C2DC7010E94ED0508 -:103690000E94231F2BC0111129C0472D4F7050E0ED -:1036A00042305105B9F04CF44115510581F04130DB -:1036B0005105E1F40E94312819C04330510569F0E9 -:1036C0004430510599F48C2D0E9483280FC00E942C -:1036D0001A280CC00E944D2809C00E94602806C00C -:1036E000472D4F706C2DC7010E94F005DD20F9F0C9 -:1036F0000E942E2180FD1BC0F70112820E9428210A -:103700000E941E20C7010E94A61B0E9428210F9024 -:10371000DF91CF911F910F91FF90EF90DF90CF90AD -:10372000BF90AF909F908F907F900C943F200F9010 -:10373000DF91CF911F910F91FF90EF90DF90CF908D -:10374000BF90AF909F908F907F9008950F931F939D -:10375000CF93DF93EC01888199812B813C81232BCE -:10376000B9F09F3F11F48F3F99F0CE010E94EC0316 -:10377000882371F0688179818A810E9424218C01DB -:103780000E94D9200E94A01FB801CE010E945B199F -:10379000DF91CF911F910F9108950E94FC210E940B -:1037A0000C220E94D1210E9426220E94E7250E941D -:1037B000362580E090E00E94211780E090E00C9494 -:1037C00037170E94EC210C94CD1B0E941921292F40 -:1037D00022952F7030E02C3031054CF42A30310521 -:1037E0006CF42250310922303105A8F407C02C3086 -:1037F000310569F02F30310551F00DC0803F69F07F -:1038000018F4803E40F409C0843F29F406C093FBBD -:10381000882780F9089580E0089581E00895CF9386 -:10382000DF9300D000D01F92CDB7DEB70F900F907E -:103830000F900F900F90DF91CF910895CF93DF936A -:1038400000D000D000D0CDB7DEB726960FB6F894E2 -:10385000DEBF0FBECDBFDF91CF9108951F93CF93F1 -:10386000DF93C0919D0216E080919E02C81799F0E7 -:10387000D0E01C9FF0011D9FF00D1124E156FD4F7B -:103880004081518162817381848195810E941E1CD7 -:103890002196C770E9CFDF91CF911F910895409194 -:1038A000CF025091D0026091D1027091D2028091EA -:1038B000D3029091D4020C941E1C8091D402829564 -:1038C0008F7009F054C08091D102882309F44FC051 -:1038D00080919D02A0919E026091CF027091D002D2 -:1038E0004091D2025091D302B6E08A1709F43FC04A -:1038F00090E041155105C1F17F3F11F46F3FA1F1F7 -:10390000B89FF001B99FF00D1124E156FD4F2181C0 -:1039100072132AC02081621327C02281211124C082 -:10392000238134812417350710F421503109241BD9 -:10393000350B283C3105C0F42091D4022F70206152 -:103940002093D40226E0289FF001299FF00D112436 -:10395000EC55FD4F80818F70806180838FEC92E009 -:103960000E94A61B0C942E1C01968770BECF089552 -:10397000CF92DF92EF92FF920F931F93CF93DF933B -:10398000CDB7DEB762970FB6F894DEBF0FBECDBFDE -:103990008C0185E0F801DE011D9601900D928A955B -:1039A000E1F7D8014C9111965C91119712966C91A8 -:1039B00012971396CD90DC9014973091CF027091AE -:1039C000D0028091D2029091D302009709F46BC18A -:1039D0007F3F19F43F3F09F466C1E090D102EE2029 -:1039E00009F4C0C02091D402C816D90628F0F60107 -:1039F000E81BF90BCF0104C0809590958C0D9D1D9F -:103A0000FF24F394883C910578F0F12C207F09F095 -:103A1000C6C07C2DD98AC88A89890E940F1C8FEC68 -:103A200092E00E94A61BB1C0822F807F09F046C0A1 -:103A3000751314C0341312C0611110C02F702061AF -:103A40002093D4020E944F1C8FEC92E00E94A61B90 -:103A50008091D402D80115968C932EC0CD2819F1EF -:103A60005F3F11F44F3FF9F0F62E61111CC08091B9 -:103A70009D0220919E0236E0821709F45AC090E020 -:103A8000389FF001399FF00D1124E156FD4F7181EF -:103A9000571306C07081471303C07281711103C0B0 -:103AA00001968770E9CFF62E662309F418C180913C -:103AB000D40281608093D402F12C11C1751308C027 -:103AC000341306C0611104C08091D402D801C3C070 -:103AD0004D875E878D859E856A8B0E94E51B6A896E -:103AE0008823E1F16623D1F12091D402822F8295BF -:103AF0008F7090E0029774F08091CF029091D00285 -:103B000098878F831986DB86CA862C87CE01079615 -:103B10000E94A61B86E0F801AFECB2E001900D9286 -:103B20008A95E1F70E945D1C0E944F1CFF24F394CC -:103B3000D6C04D875E878D859E850E941921292FCD -:103B400022952F7030E0223031050CF0BCC09F7000 -:103B500009F0B6C0805E883008F4C1C0C8010E9478 -:103B6000A61BE4CFC816D90608F453C0F601E81B1B -:103B7000F90BCF01883C910508F450C0F12C7C2D45 -:103B8000D98AC88A89890E940F1CEFECF2E086E08E -:103B9000DF011D928A95E9F70E944F1CA0C07513A2 -:103BA00014C0341312C0611110C08091D402F80106 -:103BB0008583C8010E94A61B86E0EFECF2E0DF01DE -:103BC0001D928A95E9F7FE2C8AC04D875E878D8508 -:103BD0009E856A8B0E94E51B6A89882309F4BECF03 -:103BE000662309F4BBCF2091D402822F82958F7077 -:103BF00090E002970CF48ECF8091CF029091D0028A -:103C00009A8389831B82DD82CC822E83CE0101962A -:103C10007FCF809590958C0D9D1DACCFF62E6623A1 -:103C200009F49CCF75132EC034132CC02091D402FC -:103C300020FD1FC0822F82958F70D9F0D801159674 -:103C40002C9315978F3049F08F5F982F9295907F26 -:103C5000822F8F70892B15968C93C8010E94A61B0A -:103C600086E0F801AFECB2E001900D928A95E1F7A1 -:103C700093CF86E0F801AFECB2E001900D928A9507 -:103C8000E1F72DC04D875E878D859E850E94E51BDF -:103C9000811140CF8091D40281608093D402C80109 -:103CA0000E94A61B1CC0662309F458CF4D875E876F -:103CB0008D859E850E94E51B882309F44FCF2ACF6E -:103CC000811148CF0CC0243031050CF047CF9F70D4 -:103CD00009F440CFF8019581907F09F03BCF8F2DFB -:103CE00062960FB6F894DEBF0FBECDBFDF91CF91C5 -:103CF0001F910F91FF90EF90DF90CF9008951F9349 -:103D0000CF93DF93CDB7DEB72C970FB6F894DEBF15 -:103D10000FBECDBF4F83588769877A878B879C8773 -:103D2000CE0107960E94B81C882369F08F81988580 -:103D30002A853B85232BF1F19F3F09F063C08F3F1C -:103D400009F060C037C086E0FE013796DE011196AB -:103D500001900D928A95E1F76F817885EA85FB8560 -:103D6000309741F17F3F11F46F3F21F120919E0286 -:103D700030E0C90101968770992740919D0250E07B -:103D80008417950709F447C069837A83FD83EC8320 -:103D900096E0929FD001939FB00D1124A156BD4F84 -:103DA000FE01319601900D929A95E1F780939E0263 -:103DB0000E942E1C16E080919D0290919E02891710 -:103DC000C1F1189FC001112481569D4F0E94B81C5B -:103DD000882379F1E0919D021E9FF0011124E156A4 -:103DE000FD4F4081518162817381848195810E9460 -:103DF0001E1C80919D0290E0019687709927809308 -:103E00009D02D9CF4F81588569857A858B859C85A0 -:103E10000E941E1CCFCF0E94E11B10929E021092A6 -:103E20009D02EFECF2E086E0DF011D928A95E9F752 -:103E3000C1CF2C960FB6F894DEBF0FBECDBFDF9179 -:103E4000CF911F910895EF92FF920F931F93CF93FD -:103E5000DF938C01009709F46CC0F12CEE24E394FD -:103E6000E8012196F8018491843740F4843008F009 -:103E700051C0813081F0823019F15BC0853709F47F -:103E800044C0A8F19CE7980F903708F052C08F7794 -:103E90000E94FE1841C00E5F1F4FFE01C49180E2D8 -:103EA0008C0F883048F4C7708E2D01C0880FCA95DA -:103EB000EAF70E94FF2114C08C2F0E9436182DC0F3 -:103EC0000E5F1F4FFE01C49180E28C0F883058F4C2 -:103ED000C7708E2D01C0880FCA95EAF70E9405228F -:103EE0000E9426221AC08C2F0E94FE1816C00E5F58 -:103EF0001F4FFE01C491CC2381F08FE99FE0019711 -:103F0000F1F700C00000C150F6CF0E5F1F4FFE0159 -:103F1000F49003C00E9436188E018F2D882309F477 -:103F20009FCFEFE9FFE03197F1F700C0000081502B -:103F3000F5CFDF91CF911F910F91FF90EF900895F2 -:103F400008956093D9027093DA028093DB02909314 -:103F5000DC020C94CD1B0F931F930091D90210919A -:103F6000DA022091DB023091DC02DC01CB01802BF4 -:103F7000912BA22BB32B8093D9029093DA02A093BA -:103F8000DB02B093DC021F910F910C94CD1B0F93B9 -:103F90001F930091D9021091DA022091DB02309137 -:103FA000DC02DC01CB0180239123A223B323809385 -:103FB000D9029093DA02A093DB02B093DC021F9146 -:103FC0000F910C94CD1B0F931F930091D902109168 -:103FD000DA022091DB023091DC02DC01CB01802788 -:103FE0009127A227B3278093D9029093DA02A09356 -:103FF000DB02B093DC021F910F910C94CD1B109249 -:10400000D5021092D6021092D7021092D8020C94C8 -:10401000CD1B41E050E060E070E004C0440F551F4C -:10402000661F771F8A95D2F74093D5025093D60228 -:104030006093D7027093D8020C94CD1B41E050E0FE -:1040400060E070E004C0440F551F661F771F8A951B -:10405000D2F78091D5029091D602A091D702B0916B -:10406000D802482B592B6A2B7B2B4093D5025093B7 -:10407000D6026093D7027093D8020C94CD1B41E016 -:1040800050E060E070E004C0440F551F661F771FCA -:104090008A95D2F740955095609570958091D5029C -:1040A0009091D602A091D702B091D802482359230B -:1040B0006A237B234093D5025093D6026093D702A4 -:1040C0007093D8020C94CD1B41E050E060E070E0AA -:1040D00004C0440F551F661F771F8A95D2F7809141 -:1040E000D5029091D602A091D702B091D80248276C -:1040F00059276A277B274093D5025093D6026093B5 -:10410000D7027093D8020C94CD1B0F931F9300918C -:10411000D5021091D6022091D7023091D802DC014D -:10412000CB01802B912BA22BB32B8093D5029093A4 -:10413000D602A093D702B093D8021F910F910C948E -:10414000CD1B0F931F930091D5021091D6022091A1 -:10415000D7023091D802DC01CB0180239123A22326 -:10416000B3238093D5029093D602A093D702B09345 -:10417000D8021F910F910C94CD1B0F931F930091A8 -:10418000D5021091D6022091D7023091D802DC01DD -:10419000CB0180279127A227B3278093D502909344 -:1041A000D602A093D702B093D8021F910F910C941E -:1041B000CD1B0895CF92DF92EF92FF920F931F9342 -:1041C000CF93DF938C01C090D902D090DA02E090B7 -:1041D000DB02F090DC028091D5029091D602A09192 -:1041E000D702B091D802C82AD92AEA2AFB2ACFE1FD -:1041F000D0E0D701C6010C2E04C0B695A7959795BF -:1042000087950A94D2F780FF06C0B8018C2F0E94D0 -:104210007508019721F4219760F780E001C08C2F89 -:10422000DF91CF911F910F91FF90EF90DF90CF9092 -:104230000895CF93DF93EC010E94DA20BE010E9423 -:104240007508DF91CF910895CB010E94192108953F -:104250008091DD0285958595859508958091DD0293 -:104260008770089598E0899F90011124262B209350 -:10427000DD020C941E202091DD0280958223809324 -:10428000DD02982F977069F430E0482F552747FDDD -:1042900050952417350729F08595859585950C94BB -:1042A0003F2008959091DD02977081E009F480E04D -:1042B000089590911501992321F090911601911183 -:1042C00009C02091170130911801F90132969FEF32 -:1042D00040E01FC0982F9695969596959F3050F583 -:1042E000E0911701F0911801E90FF11D877021E0AD -:1042F00030E0A90102C0440F551F8A95E2F7CA01B8 -:104300009181892B818308959F3F39F04F5F4E3013 -:1043100041F051915813F8CF0DC05111F7CF942FA0 -:10432000F5CF9F3F39F0F901E90FF11D97FDFA959F -:1043300082830895089590911501992321F0909119 -:104340001601911109C02091170130911801F9014E -:104350003296205F3F4F1FC0982F96959695969561 -:104360009F30F0F4E0911701F0911801E90FF11D71 -:10437000877021E030E0A90102C0440F551F8A95E3 -:10438000E2F7CA018095918189238183089531964E -:10439000E217F30729F090819813F9CF1082F7CF35 -:1043A000089581E090E0E0911701F0911801E80F85 -:1043B000F91F1082019680319105A9F70895909117 -:1043C000F102892B8093F102089580959091F1027A -:1043D00089238093F10208951092F102089590913B -:1043E000F002892B8093F002089580959091F0025D -:1043F00089238093F00208951092F002089590911D -:10440000EF02892B8093EF02089580959091EF023F -:1044100089238093EF0208951092EF02089580930C -:10442000DE0208951092DE020895809117019091A6 -:104430001801FC0131969C01205F3F4F80E0919173 -:1044400091118F5FE217F307D1F70895E0911701FB -:10445000F09118018091F1028083E0911701F091B1 -:10446000180190818091F002892B8083E0911701DF -:10447000F091180190818091EF02892B80838091C7 -:10448000DE02882361F0E0911701F091180190811C -:10449000892B80830E94152281111092DE02809167 -:1044A0001701909118010C940B1720E0009739F038 -:1044B000AC0141505109842395232F5FF7CF822F00 -:1044C000089580911303843039F11092F30220E4AF -:1044D00088E190E00FB6F894A895809360000FBE35 -:1044E0002093600080E00E94F00280E00E940F09AB -:1044F00083B7817F846083BF83B7816083BF7894F3 -:10450000889583B78E7F83BF88E10FB6F894809338 -:104510006000109260000FBE08950895089580E035 -:104520000E94F0020E948D220E946A090E948E223F -:104530000E94EF0991E0811101C090E0892F089558 -:104540000E94E11B80E00E94F0020E9409280E9464 -:10455000FF160C940F091F920F920FB60F921124A1 -:104560008F939F93AF93BF938091F302811113C0F8 -:104570008091F4029091F502A091F602B091F702B9 -:104580004196A11DB11D8093F4029093F502A09372 -:10459000F602B093F702BF91AF919F918F910F9068 -:1045A0000FBE0F901F90189582E084BD93E095BDDB -:1045B0009AEF97BD80936E0008952FB7F89480917D -:1045C000F4029091F502A091F602B091F7022FBF8C -:1045D0000895CF92DF92EF92FF920F931F932FB720 -:1045E000F8944091F4025091F5026091F6027091B6 -:1045F000F7022FBF6A017B01EE24FF248C0120E02B -:1046000030E0C016D106E206F30610F4415051091D -:104610009A01281B390BC9011F910F91FF90EF9050 -:10462000DF90CF9008951F920F920FB60F92112432 -:104630008F939F93AF93BF938091F4029091F50273 -:10464000A091F602B091F7020196A11DB11D8093D1 -:10465000F4029093F502A093F602B093F702BF9193 -:10466000AF919F918F910F900FBE0F901F90189553 -:104670000E94FC13F8942FEF87EA91E621508040C6 -:104680009040E1F700C0000087E090EBDC018093F0 -:104690001E0390931F03A0932003B09321039CE07B -:1046A00088E10FB6F894A895809360000FBE9093B0 -:1046B0006000FFCF0E949923811102C00E947523E0 -:1046C0000E94A4238093F2020E94AC2380931C03D7 -:1046D00087FB882780F9809316010E94A823682F02 -:1046E00070E080E090E00C94A11F6DEE7EEF80E022 -:1046F00090E00E94C02C60E082E090E00E94AE2C2E -:1047000060E083E090E00E94AE2C60E084E090E006 -:104710000E94AE2C60E085E090E00E94AE2C60E04C -:1047200086E090E00E94AE2C6FEF87E090E00C9462 -:10473000AE2C80E090E00E94A82C21E08D3E9E4FA0 -:1047400009F020E0822F089582E090E00C94A02CE4 -:1047500083E090E00C94A02C84E090E00C94A02CDA -:10476000682F84E090E00C94AE2C86E090E00C94EE -:10477000A02C682F86E090E00C94AE2C87E090E0AF -:104780000C94A02C682F87E090E00C94AE2C8091C4 -:10479000FA0280FF0BC060911C0185E0689FB001A8 -:1047A000112475956795759567952BC081FF09C094 -:1047B00060911C0185E0689FB00111247595679593 -:1047C00020C082FF07C060911C0185E0689FB00196 -:1047D000112417C09091FB029923D1F060911B0125 -:1047E000961788F720911C0185E0289F90011124DD -:1047F000929FA001939F500D112470E0CA010E9466 -:10480000862C6038710540F46115710539F002C0DD -:1048100065E070E0862F08958FE7089581E00895A0 -:104820008091FA0280FF08C060911A0170E07595CE -:1048300067957595679521C081FF06C060911A0143 -:1048400070E07595679519C082FF04C060911A01E8 -:1048500070E010C09091FB029923C1F060911901A2 -:104860009617A0F780911A01899FC001112470E06A -:104870000E94862C6038710528F46115710521F0BD -:10488000862F08958FE7089581E0089561E070E034 -:10489000F4CF803F21F40E94C723819504C0813F5B -:1048A00029F40E94C7238093FE020895823F21F4D9 -:1048B0000E94C723819504C0833F29F40E94C72327 -:1048C0008093FD020895893F19F40E94102405C0C9 -:1048D0008A3F31F40E94102481958093FF0208954D -:1048E0008B3F21F40E941024819504C08C3F29F451 -:1048F0000E941024809300030895843F21F4809146 -:10490000FC02816017C0853F21F48091FC02826027 -:1049100011C0863F21F48091FC0284600BC0873F68 -:1049200021F48091FC02886005C0883F31F48091B9 -:10493000FC0280618093FC0208958D3F21F48091F8 -:10494000FA0281600BC08E3F21F48091FA028260EE -:1049500005C08F3F29F48091FA0284608093FA02A7 -:104960000895803F39F48091FE0287FF6CC0109259 -:10497000FE0269C0813F29F48091FE021816BCF343 -:1049800062C09091FD02823F29F497FF5CC01092B3 -:10499000FD0259C0833F19F41916CCF354C0893F66 -:1049A00041F48091FF0218160CF04DC01092FF02E6 -:1049B0004AC08A3F29F48091FF0287FF44C0F6CFA6 -:1049C0008B3F39F48091000387FF3DC010920003B4 -:1049D0003AC08C3F29F4809100031816BCF333C011 -:1049E000843F21F48091FC028E7F17C0853F21F423 -:1049F0008091FC028D7F11C0863F21F48091FC02E2 -:104A00008B7F0BC0873F21F48091FC02877F05C01C -:104A1000883F31F48091FC028F7E8093FC0213C0AA -:104A20008D3F21F48091FA028E7F0BC08E3F21F4DE -:104A30008091FA028D7F05C08F3F29F48091FA02A0 -:104A40008B7F8093FA028091FD0281110EC08091CC -:104A5000FE0281110AC08091FF02811106C080917F -:104A60000003811102C01092FB0208958CEF92E0C6 -:104A70000E9416170E94DD229093F9028093F8029B -:104A800008951F93CF93DF938091F8029091F902DC -:104A90000E94E922AC019091FB02992321F0209120 -:104AA0001D0130E006C020911E018AE0289F900180 -:104AB00011244217530708F486C08091FD02C0916B -:104AC000FE02D091FF0210910003811107C0C111B5 -:104AD00076C0D11174C0111172C075C09F3F19F01A -:104AE0009F5F9093FB02181624F40E94C7238093C3 -:104AF000FD028091FD0287FF05C00E94C7238195BA -:104B00008093FD021C1624F40E94C7238093FE02AA -:104B10008091FE0287FF05C00E94C7238195809384 -:104B2000FE026091FD02662339F1C091FE02CC23A2 -:104B300019F1772767FD7095872F972F0E94A82975 -:104B400023E333E343E35FE30E94B82A0E9475291D -:104B50006093FD026C2F772767FD7095872F972F45 -:104B60000E94A82923E333E343E35FE30E94B82ACA -:104B70000E9475296093FE021D1624F40E941024E1 -:104B80008093FF028091FF0287FF05C00E941024DE -:104B900081958093FF02111624F40E9410248093C3 -:104BA00000038091000387FF05C00E9410248195B7 -:104BB00080930003DF91CF911F910C9436259F3F86 -:104BC00009F08ECF96CFDF91CF911F910895ECEF32 -:104BD000F2E085E0DF011D928A95E9F71092FB0271 -:104BE0001092FA020895833081F128F4813059F04F -:104BF0008230D1F00895853009F449C0B8F186308B -:104C000009F456C0089580911E01262F30E0280F28 -:104C1000311D2F3F310524F4680F60931E01089564 -:104C20008FEF80931E01089580911D01262F30E0A3 -:104C3000280F311D2F3F310524F4680F60931D01AB -:104C400008958FEF80931D01089580911C01262FF8 -:104C500030E0280F311D2F3F310524F4680F609399 -:104C60001C0108958FEF80931C01089580911B0112 -:104C7000262F30E0280F311D2F3F310524F4680F17 -:104C800060931B0108958FEF80931B01089580911D -:104C90001A01262F30E0280F311D2F3F310524F453 -:104CA000680F60931A0108958FEF80931A01089599 -:104CB00080911901262F30E0280F311D2F3F31053B -:104CC00024F4680F6093190108958FEF8093190100 -:104CD0000895833011F128F4813049F0823091F049 -:104CE0000895853081F120F18630C1F108958091D9 -:104CF0001E01681720F4861B80931E0108951092F0 -:104D00001E01089580911D01681720F4861B809371 -:104D10001D01089510921D01089580911C016817CE -:104D200020F4861B80931C01089510921C010895A5 -:104D300080911B01681720F4861B80931B01089546 -:104D400010921B01089580911A01681720F4861BA8 -:104D500080931A01089510921A0108958091190103 -:104D6000681720F4861B8093190108951092190189 -:104D700008950F931F93873208F048C08E3108F0D2 -:104D80008DC0803109F477C008F5873009F461C01F -:104D900068F4863009F09DC08091F202817F8E7F99 -:104DA0008093F20281E08093020394C08B3009F477 -:104DB00089C08E3009F08DC08091F20282FB2227DB -:104DC00020F991E0922790FB82F95EC0863109F4C8 -:104DD00079C060F4813109F07CC00E94E11B9091A0 -:104DE000160181E08927809316016CC0893109F48E -:104DF00069C08B3109F06DC08091F20281FB2227DE -:104E000020F991E0922790FB81F93EC0883309F4A4 -:104E100059C050F4893209F457C0853309F454C09D -:104E2000873209F451C055C0833409F44DC028F4C9 -:104E30008A3308F44EC0895332C0883409F049C01F -:104E40000E94E11B0E941F0A0E94E3030E94382374 -:104E500039C09091F202892F8095817080FB90F982 -:104E600029F0966098609093F20234C0997F977F02 -:104E70009093F20227C08091F20283FB222720F94F -:104E800091E0922790FB83F98093F2029923D1F06D -:104E90008091F20281608093F20214C08D5141E052 -:104EA00050E060E070E08A019B0104C0000F111F18 -:104EB000221F331F8A95D2F7C901B8010E94A11F92 -:104EC0000E94E11B81E006C061E070E080E090E0BC -:104ED000F5CF80E01F910F91089580E0089580E064 -:104EE0000895CF93C82F80910203813069F018F0A4 -:104EF0008230C9F184C0E0911701F09118018081DE -:104F0000823209F07EC007C0E0911701F0911801CC -:104F10008081823261F48C2F0E946D27811104C040 -:104F20008C2F0E94B9261DC081E090E01AC08C2F02 -:104F30000E946F27811114C0C43179F048F4CB303E -:104F400079F0C03109F061C082E08093020308C0AB -:104F5000C93219F0C83321F058C01092020355C06D -:104F600081E0817054C0C93291F120F5C43179F1EA -:104F7000B0F4C73009F047C08EE180931E0182E390 -:104F800080931D018AE080931C0184E180931B01C2 -:104F900088E080931A0188E28093190134C0CE51D1 -:104FA000C63088F5EC2FF0E0EA54FE4F8081809304 -:104FB000010329C0CE34E9F020F4CB3421F56AE0B6 -:104FC00013C0C13579F0C235F1F461E00DC08091B4 -:104FD0000103882319F01092010315C081E080932A -:104FE000020315C061E006C0809101030E94F32511 -:104FF0000AC06AE0809101030E94692604C01092F1 -:10500000020380E004C081E002C080E0AACFCF911B -:1050100008950E949923811102C00E9475230E9465 -:10502000B52380931D0380FF02C0869501C080E0F8 -:105030000C94F00280911D03982F9695292F30E053 -:10504000233031054CF49F5F990F8170892B81606B -:1050500080931D030E94B92380911D0386950C94B3 -:10506000F00280911D03982F969591F09158990F19 -:105070008170892B80931D038E7F91E009F490E06D -:1050800080911D0390FB80F980931D030E94B9233A -:1050900080911D0386950C94F00280911D03982F3A -:1050A000909590FB80F980931D030E94B923809115 -:1050B0001D0380FF02C0869501C080E00C94F002C1 -:1050C00090911D03892F86958F5F8F779170843023 -:1050D00028F4880F892B80931D0302C090931D0331 -:1050E00080911D038E7F91E009F490E080911D0373 -:1050F00090FB80F980931D030E94B92380911D03CA -:1051000086950C94F00220911D03922F9695892785 -:10511000982F990F822F8170892B80931D038E7F8A -:1051200091E009F490E080911D0390FB80F9809359 -:105130001D030E94B92380911D0386950C94F002F3 -:1051400080911D03869508955058BB27AA270ED03D -:10515000D1C1C2D130F0C7D120F031F49F3F11F45A -:105160001EF4B7C10EF4E095E7FB9FC1E92FD3D140 -:1051700080F3BA17620773078407950718F071F474 -:105180009EF5EBC10EF4E0950B2EBA2FA02D0B016E -:10519000B90190010C01CA01A0011124FF27591B7C -:1051A00099F0593F50F4503E68F11A16F040A22F82 -:1051B000232F342F4427585FF3CF469537952795F3 -:1051C000A795F0405395C9F77EF41F16BA0B620BF2 -:1051D000730B840BBAF09150A1F0FF0FBB1F661F39 -:1051E000771F881FC2F70EC0BA0F621F731F841F7C -:1051F00048F4879577956795B795F7959E3F08F0A2 -:10520000B3CF9395880F08F09927EE0F9795879560 -:10521000089527D108F481E008950CD06BC163D1C3 -:1052200040F05AD130F021F45F3F19F03EC15111E6 -:1052300095C14FC170D198F39923C9F35523B1F3A8 -:10524000951B550BBB27AA2762177307840738F0F5 -:105250009F5F5F4F220F331F441FAA1FA9F333D054 -:105260000E2E3AF0E0E830D091505040E695001C08 -:10527000CAF729D0FE2F27D0660F771F881FBB1FC4 -:10528000261737074807AB07B0E809F0BB0B802D9E -:10529000BF01FF2793585F4F2AF09E3F510568F0EA -:1052A00004C15CC15F3FECF3983EDCF386957795D3 -:1052B0006795B795F7959F5FC9F7880F911D9695EC -:1052C000879597F90895E1E0660F771F881FBB1F48 -:1052D000621773078407BA0720F0621B730B840BF5 -:1052E000BA0BEE1F88F7E095089504D06894B111C9 -:1052F00035C1089518D188F09F5790F0B92F99279C -:10530000B751A0F0D1F0660F771F881F991F1AF0D0 -:10531000BA95C9F712C0B13081F01FD1B1E008953C -:105320001CC1672F782F8827B85F39F0B93FCCF3BD -:10533000869577956795B395D9F73EF490958095C6 -:10534000709561957F4F8F4F9F4F0895E89409C0E6 -:1053500097FB3EF490958095709561957F4F8F4FA8 -:105360009F4F9923A9F0F92F96E9BB279395F695BE -:10537000879577956795B795F111F8CFFAF4BB0F3C -:1053800011F460FF1BC06F5F7F4F8F4F9F4F16C0A0 -:10539000882311F096E911C0772321F09EE8872F2A -:1053A000762F05C0662371F096E8862F70E060E0E6 -:1053B0002AF09A95660F771F881FDAF7880F96955F -:1053C000879597F9089588D018F011F08CD038F4AB -:1053D00080C0C4C0E92F9FD0B0F35523C9F3E7FBC9 -:1053E0006217730784079507A8F199F3E92FFF2740 -:1053F00088232AF03197660F771F881FDAF7952FD9 -:105400005527442332F091505040220F331F441F40 -:10541000D2F7BB27E91BF50B621B730B840BB10999 -:10542000C1F222F4620F731F841FB11D31972AF05D -:10543000660F771F881FBB1FEFCF915050405AF067 -:1054400041F0882332F0660F771F881F915050403B -:10545000C1F7939530C08695779567959F5FD9F78B -:10546000F8CF990F0008550FAA0BE0E8FEEF1616CB -:105470001706E807F907C0F012161306E407F50748 -:1054800098F0621B730B840B950B39F40A2661F0BC -:10549000232B242B252B21F408950A2609F4A1405F -:1054A000A6958FEF811D811D089597F99F6780E86C -:1054B00070E060E008959F3F31F0915020F48795AF -:1054C00077956795B795880F911D9695879597F96C -:1054D00008959FEF80EC089500240A94161617068D -:1054E00018060906089500240A94121613061406D5 -:1054F00005060895092E0394000C11F4882352F038 -:10550000BB0F40F4BF2B11F460FF04C06F5F7F4FEF -:105510008F4F9F4F089557FD9058440F551F59F0D6 -:105520005F3F71F04795880F97FB991F61F09F3F90 -:1055300079F087950895121613061406551FF2CFB9 -:105540004695F1DF08C0161617061806991FF1CF09 -:1055500086957105610508940895E894BB27662730 -:105560007727CB0197F908957CDF08F48FEF089532 -:105570000BD0C0CFB1DF28F0B6DF18F0952309F0CB -:1055800094CFA7CF1124EACFC6DFA0F3959FD1F324 -:10559000950F50E0551F629FF001729FBB27F00DE1 -:1055A000B11D639FAA27F00DB11DAA1F649F662736 -:1055B000B00DA11D661F829F2227B00DA11D621F85 -:1055C000739FB00DA11D621F839FA00D611D221F3F -:1055D000749F3327A00D611D231F849F600D211D23 -:1055E000822F762F6A2F11249F5750408AF0E1F0C6 -:1055F00088234AF0EE0FFF1FBB1F661F771F881F0F -:1056000091505040A9F79E3F510570F04ECFA6CF64 -:105610005F3FECF3983EDCF3869577956795B795F9 -:10562000F795E7959F5FC1F7FE2B880F911D969523 -:10563000879597F90895FA01EE0FFF1F309621051F -:10564000310599F16115710561F48038BFE39B075D -:1056500049F168949038810561F08038BFEF9B076D -:1056600041F0992342F5FF3FE1053105210511F194 -:10567000E8940894E795D901AA2329F4AB2FBE2F0B -:10568000F85FD0F310C0FF5F70F4A695E0F7F7392C -:1056900050F019F0FF3A38F49F779F930CD00F9099 -:1056A00007FC905808953EF014CF60E070E080E869 -:1056B0009FE308954FE79F775F934F933F932F9317 -:1056C0009ED02F913F914F915F9152DF05C019F409 -:1056D0000EF0EBCE42CFFDCE26DFC8F39638C0F7F2 -:1056E00007F80F92E8942BE33AEA48EB5FE74EDFC6 -:1056F0000F920F920F924DB75EB70F92C0D0EAE0B3 -:10570000F1E016D04F915F91EF91FF91E595EE1F7B -:10571000FF1F49F0FE57E0684427EE0F441FFA953B -:10572000E1F74195550B32D00F9007FE26C0089542 -:10573000DF93CF931F930F93FF92EF92DF927B0142 -:105740008C01689405C0DA2EEF011EDFFE01E8949B -:10575000A5912591359145915591AEF3EF0106DD67 -:10576000FE019701A801DA9479F7DF90EF90FF909E -:105770000F911F91CF91DF9108959B01AC0160E0E3 -:1057800070E080E89FE349CD90CE95CECCDEE8F383 -:105790009923D9F3940F511DBBF39150504094F0CD -:1057A00059F0882332F0660F771F881F91505040C0 -:1057B000C1F79E3F510544F7880F911D9695879537 -:1057C00097F908955F3FACF0983E9CF0BB27869513 -:1057D00077956795B79508F4B1609395C1F7BB0FBE -:1057E00058F711F460FFE8CF6F5F7F4F8F4F9F4FE7 -:1057F000E3CFB4CE0EF05FCE6CCE689456CE93DE7F -:10580000C8F39923D1F3C6F3DF93CF931F930F937C -:10581000FF92C92FDD2788232AF02197660F771F73 -:10582000881FDAF720E030E040E85FEB9FE388393B -:1058300020F0803E30F021968F7787DCE2E3F1E0C4 -:1058400003C083DCEFE5F1E073DF8B01BE01EC0107 -:10585000FB2E6F5771097595771F880B990B78DDB3 -:1058600028E132E741E35FE38FDEAF2D9801AE011F -:10587000FF900F911F91CF91DF9178DC3BCEFA0121 -:10588000DC01AA0FBB1F9B01AC01BF5728F42227E4 -:105890003327442750781FC0B75188F4AB2F00241A -:1058A000469537952795011CA395D2F3002069F002 -:1058B000220F331F441FB395DAF30DD045CC61306E -:1058C0007105A0E88A07B94630F49B01AC01662750 -:1058D000772788279078309621F020833183428380 -:1058E00053830895AA1BBB1B51E107C0AA1FBB1F0E -:1058F000A617B70710F0A61BB70B881F991F5A955C -:10590000A9F780959095BC01CD01089597FB072ECE -:1059100016F4009407D077FD09D00E94722C07FC82 -:1059200005D03EF4909581959F4F089570956195AF -:105930007F4F0895EE0FFF1F0590F491E02D09941D -:10594000F999FECF92BD81BDF89A992780B5089547 -:10595000A8E1B0E042E050E00C94C82C262FF99961 -:10596000FECF92BD81BDF89A019700B4021639F0BE -:105970001FBA20BD0FB6F894FA9AF99A0FBE08958F -:105980000196272F0E94AF2C0C94AE2CDC01CB018A -:10599000FC01F999FECF06C0F2BDE1BDF89A31963F -:1059A00000B40D9241505040B8F70895F894FFCFDD -:1059B000640007000CFF0000003F64031091106EAC -:1059C000103A1006100101DF022808140A321E00E6 -:1059D00002040507090B0C0E1011131517181A1CD9 -:1059E0001D1F2123242628292B2D2F303234353713 -:1059F000393B1F0F03764F5F6F7F49694379095920 -:105A000053633149803F5D8B803FF8BF803FCAE1DF -:105A1000803F73ED803FCAE1803FF8BF803F5D8BE0 -:105A2000803F3149803F0000803FF16D7F3F75EA44 -:105A30007E3F4C827E3F833F7E3F84287E3F833F74 -:105A40007E3F4C827E3F75EA7E3FF16D7F3F0000D6 -:105A5000803F3F4D3639EB049E0468042F04C20397 -:105A6000DB03F4030D040102030405060708090023 -:00000001FF diff --git a/keyboard/planck/keymaps/david/compiled.hex b/keyboard/planck/keymaps/david/compiled.hex deleted file mode 100644 index c78779128e..0000000000 --- a/keyboard/planck/keymaps/david/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C14001A000800150017000E -:1001E0002A001C0018000C00120013002A00040052 -:1001F0001600070009000A0028000B000D000E0081 -:100200000F00330034001D001B000600190005001C -:1002100029001100100036003700380028000A308D -:10022000E000E200E30002202C002C00012050003E -:10023000510052004F002B0014001A000900130057 -:100240000A000D000F0018001C0033002A002900CE -:10025000040015001600170007000B00110008002D -:100260000C0012003400E1001D001B000600190004 -:1002700005000E0010003600370038002800C300CB -:10028000E000E200E30002202C002C0001205000DE -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00010048 -:1002B0000320042000500030013002302D002E00B9 -:1002C0002F003000310001004400450000300130B3 -:1002D00002300330043005300630073001000100E1 -:1002E0000100010001000100010001000120AB003C -:1002F000AA00A900AE0035021E021F022002210240 -:100300002202230224022502260227022A000100DB -:100310000320042000500030013002302D022E0254 -:100320002F023002310201003A003B003C003D0048 -:100330003E003F0040004100420043000100010038 -:100340000100010001000220010001000100AB00DA -:10035000AA00A900AE002803540068006500200030 -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/default/compiled.hex b/keyboard/planck/keymaps/default/compiled.hex deleted file mode 100644 index a4d69eaa9f..0000000000 --- a/keyboard/planck/keymaps/default/compiled.hex +++ /dev/null @@ -1,1611 +0,0 @@ -:100000000C941D050C9461050C9461050C9461051C -:100010000C9461050C9461050C9461050C946105C8 -:100020000C9461050C9461050C94D2180C94A419DD -:100030000C9406270C9461050C9461050C946105E1 -:100040000C9461050C94C2050C9461050C94610537 -:100050000C9461050C946E270C9461050C94610559 -:100060000C9461050C9461050C9461050C94610578 -:100070000C9461050C9461050C9461050C94610568 -:100080000C94B80E0C9461050C9461050C946105F8 -:100090000C9461050C9461050C9461050C94610548 -:1000A0000C9461050C9461050C9461052A063C06CC -:1000B0005006620671067B06CF06CF06CF06CF0636 -:1000C000CF06CF068906B906CB06111A331A211BB3 -:1000D000331A211B781A9B1A211BF01A031BED1DE2 -:1000E000ED1D1C1E1C1E5B1E7B1ED11FD11F861EFC -:1000F000D11F361F361F9D1FA61FD11FCB1F431FA9 -:10010000431F431F431F431F431F431F431F431FDF -:10011000431F431F431F431F431F431F431F531FBF -:10012000611F681F6F1F791F07634236B79BD8A7EF -:100130001A39685618AEBAAB558C1D3CB7CC57630C -:10014000BD6DEDFD753EF6177231BF000000803FBA -:1001500008000000BE922449123EABAAAA2ABECDD6 -:10016000CCCC4C3E00000080BEABAAAAAA3E000048 -:100170000000BF000000803F000000000008417840 -:10018000D3BB4387D1133D190E3CC3BD4282AD2B77 -:100190003E68EC8276BED98FE1A93E4C80EFFFBE6F -:1001A00001C4FF7F3F0000000000000000000000CD -:1001B0000000000000010204060A0F17202C3A4A32 -:1001C0005D71879DB3C7DAE9F5FCFFFCF5E9DAC795 -:1001D000B39D87715D4A3A2C20170F0A060402016D -:1001E00000000000000000000000010801150109E6 -:1001F00001190112010F0208021502090219021267 -:10020000020F002B0014001A000800150017001C34 -:100210000018000C00120013002A00290004001628 -:1002200000070009000A000B000D000E000F00334C -:10023000003400E1001D001B00060019000500113C -:1002400000100036003700380028000530E000E2DA -:1002500000E30003302C002C000430500051005209 -:10026000004F002B0014001A00090013000A000DB3 -:10027000000F0018001C0033002A0029000400159C -:10028000001600170007000B00110008000C0012F8 -:10029000003400E1001D001B000600190005000EDF -:1002A00000100036003700380028000530E000E27A -:1002B00000E30003302C002C0004305000510052A9 -:1002C000004F002B0034003600370013001C0009DB -:1002D000000A00060015000F002A00290004001281 -:1002E00000080018000C0007000B00170011001692 -:1002F000003800E100330014000D000E001B000563 -:100300000010001A0019001D0028000530E000E26E -:1003100000E30003302C002C000430500051005248 -:10032000004F0035021E021F02200221022202237A -:100330000224022502260227022A004C003A003B32 -:10034000003C003D003E003F002D022E022F0230F7 -:1003500002310201004000410042004300440045D8 -:1003600000320264020100010001000100010001ED -:100370000001000100010001000100AB00AA00A97A -:1003800000AE0035001E001F0020002100220023C7 -:100390000024002500260027002A004C003A003BDC -:1003A000003C003D003E003F002D002E002F00309D -:1003B000003100010040004100420043004400457C -:1003C0000032006400010001000100010001000191 -:1003D0000001000100010001000100AB00AA00A91A -:1003E00000AE001E001E001E001E001E001E001E8D -:1003F000001E001E001E001E001E00000014001A39 -:10040000000800150017001C0018000C0012001353 -:10041000002F000E3004001600070009000A000B30 -:10042000000D000E000F00330034000D30000000FE -:10043000000600190000000000110010000000007C -: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 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:100800000000000100005001000100010001000192 -:100810000001000100010001004C00010001000185 -:100820000020502150135012500030013002300C83 -:100830003001000100275026502350245028502911 -:100840005001000100010001000100010001000150 -:100850000001000100010001000100010001000190 -:100860000001002803540068006500200050006C5F -:100870000061006E0063006B0020004B0065007992 -:100880000062006F0061007200640000002C034FE2 -:10089000007200740068006F006C0069006E0065F3 -:1008A000006100720020004B006500790062006F5B -:1008B0000061007200640073000000040309040971 -:1008C000026D00040100A0FA090400000103010107 -:1008D00000092111010001224000070581030800E1 -:1008E0000A090401000103010200092111010001AC -:1008F000224D000705820308000A090402000103D3 -:1009000000000009211101000122360007058303C0 -:1009100008000A0904030001030000000921110175 -:1009200000012239000705840310000112011001A3 -:1009300000000008EDFE60600100010200010501F9 -:100940000906A101050719E029E715002501950809 -:1009500075018102050819012905950575019102A6 -:1009600095017503910105071900297715002501E7 -:10097000957875018102C005010980A101850216E3 -:10098000010026B7001A01002AB7007510950181F1 -:1009900000C0050C0901A1018503160100269C0277 -:1009A0001A01002A9C02751095018100C0050109F9 -:1009B00002A1010901A10005091901290515002558 -:1009C00001950575018102950175038101050109F4 -:1009D0003009311581257F95027508810609381582 -:1009E00081257F950175088106050C0A380215815D -:1009F000257F950175088106C0C005010906A10182 -:100A0000050719E029E71500250195087501810200 -:100A100095017508810105081901290595057501DC -:100A200091029501750391010507190029FF150031 -:100A300026FF00950675088100C011241FBECFEF68 -:100A4000DAE0DEBFCDBF04B603FE24C080918E0481 -:100A500090918F04A0919004B09191048730904BB5 -:100A6000A740B04BB9F410928E0410928F041092EC -:100A700090041092910414BE84B7877F84BF88E1EC -:100A80000FB6F89480936000109260000FBEE0E013 -:100A9000F8E3099513E0A0E0B1E0E0E7F2E602C078 -:100AA00005900D92A033B107D9F714E0A0E3B3E0AD -:100AB00001C01D92AE38B107E1F70E941C160C94DC -:100AC00036310C940000089581E0089508950C9447 -:100AD00063050C9464050C9466050E94002D23E0C8 -:100AE00030E0281B3109220F209334030895282F6A -:100AF0002F9880918000211108C0877F809380000B -:100B000010928D0010928C001BC088608093800032 -:100B1000233019F48FEF9FEF0FC083E090E0821B2A -:100B20009109880F991F2FEF3FEFA90102C0569539 -:100B300047958A95E2F7CA0190938D0080938C00C7 -:100B40000C946D050E946D0584E080933303109230 -:100B500030030895279A2F988FEF9FEF9093870087 -:100B6000809386008AE08093800089E180938100F1 -:100B70000E94692C0C94A2050E94AA056E9A769A8E -:100B80000C94EF061F920F920FB60F9211242F9321 -:100B90003F938F939F93EF93FF93E0913103F091F5 -:100BA0003203CF010196909332038093310300907A -:100BB000330302C0F695E7950A94E2F7EF7380914C -:100BC0003003823019F4E03251F404C0813039F43A -:100BD000EF3329F480916F008D7F80936F00F0E0F8 -:100BE000E655FE4FE49121E031E0E29FC001E39F32 -:100BF000900D11240090340302C0969587950A94B5 -:100C0000E2F790938D0080938C00FF91EF919F917C -:100C10008F913F912F910F900FBE0F901F901895BD -:100C2000CF93DF93EC010E940728BE0180E090E0A3 -:100C3000DF91CF910C94FC230F931F93462F50E02C -:100C40004F30510508F0ABC0DC01FA01EA5AFF4F02 -:100C50000C94FA3012968C91882309F4A0C000E01D -:100C600010E0980140E064E070E088E292E00E94C9 -:100C7000361281E090E011C012968C91882309F41D -:100C80008EC000E010E0980140E066E070E088EB84 -:100C900091E00E94361282E090E00E9410067FC030 -:100CA00012968C91882309F47AC000E010E0980134 -:100CB00040E068E070E088EE91E00E94361284E047 -:100CC00090E0EBCF12968C91882311F083E00EC058 -:100CD00083E00E949A2440E164E083E00E949B0C40 -:100CE0005EC012968C91882321F084E00E947924C2 -:100CF000F2CF84E0EECF12968C91882331F085EE0E -:100D00000E94911C0E94C02C4AC085EE0E94591D71 -:100D100046C012968C91882309F441C00E94EB0DC5 -:100D200000E010E0980140E066E070E088E891E0C3 -:100D30000E94361284E00E949A2483E00E949A2442 -:100D400080E10E949A2485E00E9479240E94F42781 -:100D5000811102C00E94D0270E940C2890E090933D -:100D60008D0480938C04806880938C040E941028EA -:100D700016C012968C91882391F000E010E0980143 -:100D800040E066E070E088E591E00E94361285E080 -:100D90000E949A2404C012968C91811103C080E0B5 -:100DA00090E002C08AEE91E01F910F9108950F9399 -:100DB0001F932FEF89EF90E0215080409040E1F7A2 -:100DC00000C0000000E010E0980140E065E070E045 -:100DD00088E492E00E9436121F910F9108950C94BE -:100DE000D7060F931F9300E010E0980140E063E006 -:100DF00070E080E091E00E9436122FEF82E597E0EC -:100E0000215080409040E1F700C000001F910F91F9 -:100E10000C94EB0D0F931F9300E010E0980140E05D -:100E200068E070E088E191E00E9436121F910F9116 -:100E300008950C940A0781E008950C941B07089507 -:100E40000C94BC0580918503882309F448C08091E7 -:100E5000410390914203009779F40E9438279093C0 -:100E60004203809341038091430390E0009771F423 -:100E70008091440390E00AC00E94442720917002B0 -:100E8000309171022817390740F329C00197880F64 -:100E9000991F880F991FFC01EB5BFC4F60817181EA -:100EA000828193810E941E0EE091430384E0E89FBB -:100EB000F0011124EB5BFC4F608171818281938191 -:100EC0004FE050E00E94D6118091430390E00196DC -:100ED0006091440370E00E94E630809343030C94D9 -:100EE0006705109287030C94EB0D81E080938703D4 -:100EF0000C94190708958F929F92AF92BF92EF9230 -:100F0000FF920F931F93CF93DF93CDB7DEB7A397D5 -:100F10000FB6F894DEBF0FBECDBF7C01FC0100818F -:100F20001181C8010E943525B8010E947D098C01FC -:100F3000B7010E941D07882309F4CCC10032F0E5F7 -:100F40001F0741F4F7018281882309F458C00E94E9 -:100F5000CD12C0C10132F0E51F0741F4F7018281D3 -:100F6000882309F44CC00E94D612B4C10232F0E5C5 -:100F70001F0751F4F7018281882309F440C00E94C1 -:100F8000C9128111F0CFE3CF0332F0E51F0739F426 -:100F9000F7018281882399F10E9475079BC1043271 -:100FA000F0E51F0739F4F7018281882341F10E949F -:100FB000710790C10532F0E51F0749F4F7018281FE -:100FC0008823E9F0809187038111F1CFE5CF0632C4 -:100FD000F0E51F0739F4F7018281882381F00E9430 -:100FE000DD120AC00732F0E51F0749F4F7018281DC -:100FF000882329F00E94E8120E940A076BC18091A1 -:101000008703811105C0F70182818111CFC018C10A -:10101000003E110579F4F7018281882309F44DC05F -:101020000E94EB0D81E0809386031092850310925D -:10103000440350C1023E110559F4F701828188230F -:10104000E1F10E94EB0D109286031092850342C1DC -:10105000033E110591F4F7018281882371F10E940A -:10106000EB0D1092860381E0809385031092430379 -:1010700010924203109241032DC10235110559F41B -:10108000F7018281882309F425C180917002909133 -:1010900071020A970DC00135110579F4F7018281BB -:1010A000882309F417C180917002909171020A9609 -:1010B00090937102809370020DC14091740283E29B -:1010C000EFE8F2E0DE01119601900D928A95E1F7CA -:1010D000F701808121E030E02C0F3D1F280F311DEA -:1010E000C9012091720230917302FC01E20FF31FDB -:1010F0006081772767FD7095640F711D882777FDE4 -:101100008095982F0E94082E20E030E040E451E4C2 -:101110000E946D2D4B015C01F701218184E090E07C -:10112000821B9109BC01882777FD8095982F0E942A -:10113000082E9B01AC01C501B4010E94052D9B0145 -:10114000AC0160E070E080E090E40E947B2F20E042 -:1011500030E04CED50E40E94182F4B015C01F70188 -:1011600082818823D1F04FE050E0C501B4010E9494 -:10117000D611809186038823A1F08091440324E056 -:10118000829FF0011124EB5BFC4F80829182A2824E -:10119000B3828F5F8093440304C0C501B4010E94F1 -:1011A0001E0E0F3F110508F02ECF94C08091400312 -:1011B00081111FC0043130E5130709F051C00E94AE -:1011C0001F0781E0809340030E94382790933F03DC -:1011D00080933E0310923703109239031092380324 -:1011E00010923B0310923A0310923D0310923C037D -:1011F00071C080913E0390913F030E944427883C38 -:10120000910570F480913703E82FF0E0EE0FFF1F97 -:10121000E85CFC4F118300838F5F809337035AC0D3 -:10122000043880E5180721F00538104501F13AC06F -:10123000F7018281882341F01092350382E01EC0BD -:10124000043830E5130759F580913503811106C044 -:1012500086E20E94911C86E20E94591D82E01CC019 -:101260000438F0E51F0741F305381045D9F4F701BC -:101270008281882331F01092360380E20E94A81DFB -:1012800029C080913603811106C087E20E94911C1B -:1012900087E20E94591D80E20E94AF1D1BC00538E5 -:1012A000104529F381E08093350380933603C7010D -:1012B000A3960FB6F894DEBF0FBECDBFDF91CF91DE -:1012C0001F910F91FF90EF90BF90AF909F908F90E4 -:1012D0000C94690580E0A3960FB6F894DEBF0FBEAC -:1012E000CDBFDF91CF911F910F91FF90EF90BF90F5 -:1012F000AF909F908F90089508959CE0799FF001A2 -:10130000112490E3899FE00DF11D1124E60FF11DDA -:10131000EE0FFF1FED5FFD4F859194910895880FAB -:10132000991FFC01ED57FF4F859194910895880F07 -:10133000991FFC01ED5FFD4F8591949108950F93E6 -:101340001F93CF93DF93EC01811521E39207A0F562 -:10135000C11580E3D80708F0D7C0C83ED105D8F43E -:10136000C03ED10508F007C2C83AD10578F4C53AA5 -:10137000D10508F06AC0C130D10509F463C008F492 -:10138000F7C1C430D10508F0F6C1F2C1CB3BD1059D -:1013900008F466C0EDC1C11590E2D90708F0AFC0EE -:1013A000C11521E0D20708F0E6C1C03FD10508F41D -:1013B000DFC18E0110651FC2C03880E5D80700F577 -:1013C000C03790E5D90708F0A3C0C11520E5D207C2 -:1013D00009F4ACC050F4CE01905480319F4008F025 -:1013E000C7C1DF708E01106A06C2C13080E5D80720 -:1013F00009F4AEC0C43190E5D90708F4AFC0B8C154 -:10140000C33820E5D20709F48EC050F4C13890E506 -:10141000D90709F482C008F083C000E011EDEBC1E8 -:10142000C03181E5D80708F4A3C1C11597E5D907F4 -:1014300008F436C1CE0190578115904108F098C14B -:10144000DF7093C101E010E0D6C1C53AD10509F4BF -:1014500094C1C63AD10509F093C102E810E4CBC1AA -:10146000C83AD10509F48FC1C93AD10509F48EC132 -:10147000CA3AD10509F48DC1CB3AD10509F48CC122 -:10148000CC3AD10509F48BC1CD3AD10509F48AC112 -:10149000C03BD10509F489C1CE3AD10509F488C110 -:1014A000CF3AD10509F487C1C13BD10509F486C102 -:1014B000C23BD10509F485C1C33BD10509F484C100 -:1014C000C43BD10509F483C1C53BD10509F482C1F0 -:1014D000C63BD10509F481C1C73BD10509F480C1E0 -:1014E000C83BD10509F47FC1C93BD10509F47EC1D0 -:1014F000CA3BD10509F47DC100E014E47CC1CE01F2 -:101500009F700E94970978C1DD278E01106C73C10E -:10151000CF70DD278E01146D6EC100E010ED6BC140 -:1015200000E012ED68C100E013ED65C10E943C20AF -:101530000E94EB0D0E94F1068FEF94E32CE08150A6 -:1015400090402040E1F700C000000E94932753C163 -:10155000809162048160809362044DC10E94F427EF -:10156000811102C00E94D0270E940C2890E0909325 -:101570008D0480938C04C23080E5D80721F48091DB -:101580008C04816086C0C43090E5D90721F4809135 -:101590008C0482607EC0C63020E5D20721F48091A1 -:1015A0008C04846076C0C83080E5D80719F4809137 -:1015B0008C0427C0CA3090E5D90721F480918C04AF -:1015C000806167C0CC3020E5D20721F480918C0483 -:1015D00080625FC0CE3080E5D80721F480918C0412 -:1015E000806457C0C03190E5D90721F480918C0404 -:1015F00080684FC0C23120E5D20729F480918C0465 -:101600008460886046C0C33080E5D80721F48091AB -:101610008C048E7F3EC0C53090E5D90721F48091BF -:101620008C048D7F36C0C73020E5D20721F480912D -:101630008C048B7F2EC0C93080E5D80719F48091C7 -:101640008C0426C0CB3090E5D90721F480918C041E -:101650008F7E1FC0CD3020E5D20721F480918C040D -:101660008F7D17C0CF3080E5D80721F480918C049E -:101670008F7B0FC0C13190E5D90721F480918C0494 -:101680008F7707C0C331D04531F480918C048B7FB4 -:10169000877F80938C0480918C040E941028ABC0BB -:1016A0008D2F99278F70992781309105D9F49E014C -:1016B0002370332702C0880F991F2A95E2F79C6890 -:1016C0008E0144E0000F111F4A95E1F700271370C7 -:1016D000802B912B53E0CC0FDD1F5A95E1F7C0769C -:1016E000DD272FC08230910531F4DC2FCC278E010D -:1016F000016F106A80C08330910569F4CE01837058 -:10170000992701E010E002C0000F111F8A95E2F74F -:10171000C8019C680FC084309105B9F4CE01837074 -:10172000992701E010E002C0000F111F8A95E2F72F -:10173000C8019A6823E0CC0FDD1F2A95E1F7C07E2F -:10174000D7708C010C2B1D2B56C08530910531F4C0 -:10175000DC2FCC278E01046F106A4DC0069709F06C -:101760004AC0CF71DD27DC2FCC278E01106243C029 -:1017700000E010E040C08E013EC001E810E43BC034 -:1017800003E810E438C002EE14E435C009EE14E4B6 -:1017900032C00AEE14E42FC005EB14E42CC006EBB3 -:1017A00014E429C007EB14E426C00CEC14E423C0B5 -:1017B0000DEC14E420C003E815E41DC00AE815E4AC -:1017C0001AC002E915E417C004E915E414C001E2E7 -:1017D00016E411C003E216E40EC004E216E40BC0E6 -:1017E00005E216E408C006E216E405C007E216E4C6 -:1017F00002C00AE216E4C801DF91CF911F910F9158 -:1018000008959CE0799FF001112490E3899FE00DF9 -:10181000F11D1124E60FF11DEE0FFF1FED5FFD4FCF -:1018200085919491803E9105E0F4803C910558F5B6 -:101830008133910509F46FC048F48932910509F4A8 -:1018400063C08A32910509F46DC072C08933910575 -:10185000E9F082389105D1F08533910509F44DC046 -:1018600067C0833E910581F138F4803E9105B9F05F -:10187000823E9105D9F05CC0863E910561F1873EBC -:101880009105A1F155C00E948F09089520918C0403 -:1018900020FD02C021FF4CC080EE90E049C0809145 -:1018A0008C0480FFF9CF89E390E042C080918C04E2 -:1018B00082FF0EC080918C0484FF03C080E090E022 -:1018C00037C083EE90E034C080918C0482FFF2CF69 -:1018D00082EE90E02DC080918C0483FF0BC080913C -:1018E0008C0484FDEBCF87EE90E022C080918C04C5 -:1018F00083FFF5CF86EE90E01BC080918C0485FFBE -:1019000007C089E290E014C080918C0485FFF9CF74 -:1019100085E390E00DC080918C0486FF07C08AE2C9 -:1019200090E006C080918C0486FFF9CF81E390E0BF -:101930000E949F090895CF92DF92EF92FF920F933A -:101940001F9301E010E020E030E06801790104C05D -:10195000CC0CDD1CEE1CFF1C8A95D2F704C0000FD6 -:10196000111F221F331F6A95D2F70C291D292E291A -:101970003F29C0904504D0904604E0904704F09081 -:101980004804C022D122E222F322842FC016D106BD -:10199000E206F30641F41F910F91FF90EF90DF9064 -:1019A000CF900C9479241F910F91FF90EF90DF90CE -:1019B000CF900C949A240C946B05E82FF0E0E2543D -:1019C000FD4F8081E82FEF70F0E082958F7021E06D -:1019D00030E0A90102C0440F551F8A95E2F740A3E9 -:1019E00008950F931F93CF93DF9385B7806885BFCA -:1019F00085B7806885BFC3E0D0E001E010E0FE015C -:101A0000E254FD4F8081E82FEF70F0E021A1829534 -:101A10008F70A80102C0440F551F8A95E2F7CA01D2 -:101A2000822B81A38C2F0E94DD0C219740F78BE045 -:101A300090E061E070E0FC01EE54FD4F2081E22F68 -:101A4000EF70F0E042A122952F70DB0102C0AA0FD7 -:101A5000BB1F2A95E2F79D01242B22A3019758F77B -:101A6000DF91CF911F910F910C942007EF92FF927D -:101A70000F931F93CF93DF9300E913E0C3E0EE24AD -:101A8000E394F12CD5E08C2F0E94DD0C8BE090E0EC -:101A900040E050E0FC01EE54FD4F6081E62FEF7016 -:101AA000F0E020A130E062956F7002C03595279577 -:101AB0006A95E2F720FD09C09701082E02C0220FA7 -:101AC000331F0A94E2F7422B532B019718F7F801C2 -:101AD000929182918F018417950721F05183408361 -:101AE000D09375028C2F0E94DD0CC15060F680915E -:101AF000750287FD2CC08150809375028F3F39F0AD -:101B00008FE99FE00197F1F700C0000020C08091AD -:101B10008E0390918F039093970380939603809107 -:101B20008C0390918D0390939503809394038091FF -:101B30008A0390918B0390939303809392038091F7 -:101B400088039091890390939103809390030E945E -:101B5000220781E0DF91CF911F910F91FF90EF90CD -:101B60000895E82FF0E0EE0FFF1FE057FC4F808153 -:101B70009181089508950F931F93CF9308E913E07F -:101B8000C0E0F801929182918F010E94B026C80FA7 -:101B9000F3E000391F07A9F78C2FCF911F910F9108 -:101BA00008950E94F427811102C00E94D0270E944C -:101BB0001E28809377043E9A809171008D7F8093D8 -:101BC000710082E0809390008AE18093910081E02F -:101BD00080939A03089580919A03811102C00E9414 -:101BE000D10D1092EA031092E903809171008D7F6C -:101BF00080937100809190008F7380939000109279 -:101C0000AC031092AB031092E3031092E403109222 -:101C1000E5031092E6031092E2031092E103E1EC77 -:101C2000F3E0A1EBB3E011921192119211921D9287 -:101C30001D9283E0E13EF807B1F70895CF92DF925D -:101C4000EF92FF920F931F93CF93DF932091AB03FB -:101C5000222309F484C06B017C0180919A038111D5 -:101C600002C00E94D10D01EE13E0C7E0D0E0A70151 -:101C70009601F80192918291729162918F010E9476 -:101C8000692D811131C0FE01EE0FFF1FEE0FFF1F06 -:101C9000EF53FC4F1082118212821382DE01AA0FD1 -:101CA000BB1FAF54BC4F11961C921E92C730D1057A -:101CB000E9F0219644815581668177814083518383 -:101CC00062837383148215821682178212968D9115 -:101CD0009C91139711969C938E9313961C921E922F -:101CE000129734961296E2CF219708F68091E90375 -:101CF0009091EA03019797FD05C09093EA038093C2 -:101D0000E90304C01092EA031092E9038091E90309 -:101D10009091EA032091E7033091E80328173907EF -:101D200024F01092E8031092E703892BC1F480910C -:101D300071008D7F80937100809190008F738093EC -:101D400090001092E3031092E4031092E5031092C6 -:101D5000E6031092E2031092E1031092AB03DF91CD -:101D6000CF911F910F91FF90EF90DF90CF9008954A -:101D70001F920F920FB60F9211244F925F926F92A3 -:101D80007F928F929F92AF92BF92CF92DF92EF920B -:101D9000FF922F933F934F935F936F937F938F9314 -:101DA0009F93AF93BF93CF93DF93EF93FF93809174 -:101DB000AB03882309F49BC1C091E903D091EA03E6 -:101DC0001C161D060CF093C140909B0350909C0381 -:101DD00060909D0370909E0320E030E0A901C30154 -:101DE000B2010E94142F18160CF065C0C130D10545 -:101DF00009F452C08091E7039091E803BE010E946C -:101E0000E6307C019093E8038093E7038090AD0374 -:101E10009090AE03A090AF03B090B00320E030E00C -:101E200040E85FE3C501B4010E94052D6093AD0356 -:101E30007093AE038093AF039093B003F701EE0F5E -:101E4000FF1FEE0FFF1FEF53FC4FA30192016081B4 -:101E50007181828193810E946D2D20E030E040E00D -:101E60005EE30E94182F9B01AC01C501B4010E94E2 -:101E7000142F18168CF4C7010196BE010E94E6309B -:101E80009093E8038093E7031092AD031092AE03A2 -:101E90001092AF031092B003E091E703F091E803D2 -:101EA000EE0FFF1FEE0FFF1FEF53FC4F608171819C -:101EB00082819381D0C0C090E303D090E403E0908E -:101EC000E503F090E60320E030E0A901C701B60188 -:101ED0000E94692D2197882309F4A2C0FE01EE0F0C -:101EE000FF1FEE0FFF1FEF53FC4F80809180A280F9 -:101EF000B380A5019401C701B6010E94692D87FF37 -:101F000031C0A501940160E070E08CED93EC0E947B -:101F10006D2D20E030E040E451E40E946D2D20E082 -:101F200030E040E05FE30E94182F9B01AC0160E0CD -:101F300070E080E090E40E947B2F9B01AC01C50122 -:101F4000B4010E94182F9B01AC01C701B6010E9489 -:101F5000692D87FF07C0A701960160E070E08CED56 -:101F600093E439C0A5019401C701B6010E94142F62 -:101F700018160CF055C0A501940160E070E08CEDDE -:101F800093E40E946D2D20E030E040E451E40E9493 -:101F90006D2D20E030E040E05FE30E94182F9B01B0 -:101FA000AC0160E070E080E090E40E947B2F9B0138 -:101FB000AC01C501B4010E94182F9B01AC01C701FF -:101FC000B6010E94142F18165CF5A701960160E077 -:101FD00070E08CED93EC0E946D2D20E030E040E449 -:101FE00051E40E946D2D20E030E040E05FE30E946C -:101FF000182F9B01AC0160E070E080E090E40E944B -:102000007B2F9B01AC01C701B6010E94182F609382 -:10201000E3037093E4038093E5039093E60313C016 -:10202000FE01EE0FFF1FEE0FFF1FEF53FC4F8081ED -:102030009181A281B3818093E3039093E403A09301 -:10204000E503B093E6036091E3037091E4038091AC -:10205000E5039091E60320919803309199032F3F77 -:102060004FEF340731F02F5F3F4F309399032093A8 -:1020700098030E94F3126B017C0120E034E244EFEC -:1020800051E40E94692D87FF08C086EFC82E88E2C0 -:10209000D82E84EFE82E81E4F82E20E030E040E0F6 -:1020A00051E4C701B6010E94182F9B01AC0160E00A -:1020B00074E284E79BE40E946D2D6B017C010E9419 -:1020C000DA2D7093970060939600209176023091FC -:1020D00077024091780250917902C701B6010E94BF -:1020E000182F0E94DA2D70939900609398008091C8 -:1020F000AC03882309F433C1C090A703D090A80390 -:10210000E090A903F090AA0320E030E0A901C70104 -:10211000B6010E94142F1816D4F58091980390915F -:1021200099038F3F2FEF920729F00196909399031F -:1021300080939803C701B6010E94F31220E030E0BB -:1021400040E051E40E94182F9B01AC0160E074E272 -:1021500084E79BE40E946D2D6B017C010E94DA2DC7 -:1021600070939700609396002091760230917702E9 -:102170004091780250917902C701B6010E94182F50 -:102180000E94DA2D709399006093980008C0109215 -:10219000970010929600109299001092980060910A -:1021A000A1037091A2036F5F7F4F7093A2036093AE -:1021B000A103209196003091970080E090E0232BBE -:1021C000F1F0C0919600D09197000E94062E6B010D -:1021D0007C01BE0180E090E00E94062E9B01AC01D4 -:1021E0006091A3037091A4038091A5039091A6032D -:1021F0000E946D2D20E03FEF4FE757E410C00E9492 -:10220000062E6B017C0120E030EE4FEF54E460912C -:10221000A3037091A4038091A5039091A6030E944B -:10222000182F9B01AC01C701B6010E94142F87FD36 -:1022300096C080919F038F5F80939F0390E02091D1 -:1022400073043091740482179307A0F080917E0488 -:10225000882319F010929F030DC0809171008D7F2B -:1022600080937100809190008F7380939000109202 -:10227000AC037DC08091A003C0919F03811128C051 -:10228000C0907804D0907904E0907A04F0907B04B8 -:1022900020E030E0A901C701B6010E94142F1816F2 -:1022A000BCF481E08093A0031092A7031092A803CE -:1022B0001092A9031092AA03C092A303D092A40380 -:1022C000E092A503F092A603C150C0939F0343C0C0 -:1022D0001092A0031092990310929803E091750454 -:1022E000F091760448E0C49FE00DF11D1124808137 -:1022F0009181A281B3818093A7039093A803A093B7 -:10230000A903B093AA0320E030E040E85EE36481D3 -:102310007581868197810E94182F6B017C018091C5 -:102320007A02682F70E080E090E00E94062E20E0A4 -:1023300030E048EC52E40E946D2D9B01AC01C701D6 -:10234000B6010E94182F6093A3037093A403809397 -:10235000A5039093A6031092A2031092A10380916B -:10236000770480FD04C01092AC031092AB03FF9180 -:10237000EF91DF91CF91BF91AF919F918F917F911D -:102380006F915F914F913F912F91FF90EF90DF9070 -:10239000CF90BF90AF909F908F907F906F905F9005 -:1023A0004F900F900FBE0F901F901895CF92DF9215 -:1023B000EF92FF92CF93DF936B017C01EA01809152 -:1023C0009A03811102C00E94D10D8091770480FF91 -:1023D00046C08091E9039091EA0308970CF03FC052 -:1023E000809171008D7F809371008091AC03811189 -:1023F0000E94EB0D81E08093AB0310929903109241 -:10240000980320E030E0A901C701B6010E94142F13 -:102410001816DCF48091E9039091EA03FC01EE0FB9 -:10242000FF1FEE0FFF1FEF53FC4FC082D182E282ED -:10243000F382FC01EE0FFF1FEF54FC4FD183C083EA -:1024400001969093EA038093E90380917100826082 -:102450008093710080919000806880939000DF915C -:10246000CF91FF90EF90DF90CF9008958F929F9241 -:10247000AF92BF92CF92DF92EF92FF920F931F9392 -:10248000CF93DF93EC017B01D42E48015901809159 -:102490009A03811102C00E94D10D8091770480FFC0 -:1024A0006BC0809171008D7F809371008091AB0330 -:1024B00081110E94EB0D81E08093AC03D0937604F0 -:1024C000C0937504F0927404E0927304D0927E0479 -:1024D0008092780490927904A0927A04B0927B045E -:1024E0001092AD031092AE031092AF031092B0039E -:1024F00010929F0388819981AA81BB818093A70351 -:102500009093A803A093A903B093AA0320E030E01E -:1025100040E85EE36C817D818E819F810E94182F4F -:102520006B017C0180917A02682F70E080E090E07E -:102530000E94062E20E030E048EC52E40E946D2D0F -:102540009B01AC01C701B6010E94182F6093A30341 -:102550007093A4038093A5039093A6031092A20303 -:102560001092A1038091710082608093710080912C -:102570009000806880939000DF91CF911F910F9120 -:10258000FF90EF90DF90CF90BF90AF909F908F9093 -:102590000895809177048170089580917704816017 -:1025A000809377040E9422280C947A078091770404 -:1025B0008E7F809377040C9422288091EB0390E027 -:1025C000019666E070E00E94E6308093EB03089588 -:1025D0008091EB0390E0019766E070E00E94E630A6 -:1025E0008093EB0308958F929F92AF92BF92CF9208 -:1025F000DF92EF92FF920F931F93CF93DF936B01C4 -:102600007C01C0919803D0919903BE0180E090E0D5 -:102610000E94062E4B015C01A701960160E070E06C -:102620008CE594E40E946D2D9B01AC01C501B401C1 -:102630000E94182F0E94DA2D2091EB03233009F419 -:1026400073C028F4222351F02130E9F02CC124304A -:1026500009F4A0C0253009F4E0C025C180E090E075 -:10266000A0E0BFE38093760290937702A093780274 -:10267000B093790210929B0310929C0310929D03D9 -:1026800010929E0310C110929B0310929C03109213 -:102690009D0310929E036431710540F46A30710508 -:1026A00060F520E030E040E85EE32BC0693C710556 -:1026B00008F0AAC080E090E00E94062E20E030E002 -:1026C00040EA51E40E94042D20E030E044E353E46A -:1026D0000E946D2D9B01AC010E94182F20E030E07C -:1026E00040E05EE30E94182F9B01AC0160E070E0C7 -:1026F00080E09EE30E94042D44C020E030E040E0F2 -:102700005FE3C701B6010E94182F6B017C0180E0D6 -:1027100090E0A0E0BEE38093760290937702A093CE -:102720007802B0937902BFC010929B0310929C0371 -:1027300010929D0310929E034AE0469F9001479F8E -:10274000300D1124C90168EB7BE00E94D230BC013E -:102750006C5D754077FF03C071956195710988279D -:1027600077FD8095982F0E94082E2EE333EC4EE2E1 -:1027700059E30E94182F20E030E040EC5EE30E9415 -:10278000052D609376027093770280937802909380 -:10279000790289C010929B0310929C0310929D03B2 -:1027A00010929E03CE0183709927892BE1F0BE0120 -:1027B0006170772780E090E00E94062E20E030E0F4 -:1027C00040E05EE30E94182F20E030E040E45FE349 -:1027D0000E94052D609376027093770280937802B1 -:1027E000909379020CC080E090E0A0E0BFE380937A -:1027F000760290937702A0937802B0937902C77023 -:10280000DD27CD2B09F04FC010927602109277028F -:10281000109278021092790246C010929B03109297 -:102820009C0310929D0310929E0300E010E020E0B4 -:102830003FE300937602109377022093780230935F -:1028400079026739710578F180E090E00E94062EE8 -:1028500020E030E047E153E40E94042D20E030E026 -:102860004AE754E40E946D2D20E030E048E452E451 -:102870000E94182F20E030E040EA51E40E944A2EE6 -:102880000E94D52D660F771F660F771FFB01EE5351 -:10289000FD4F2081318142815381C701B6010E94E1 -:1028A000182F6B017C01C701B601DF91CF911F91F9 -:1028B0000F91FF90EF90DF90CF90BF90AF909F90DF -:1028C0008F9008958091FC030895CF93DF9300D0FB -:1028D0001F92CDB7DEB79C0180918304843019F537 -:1028E00093E099833B832A839093E9008FEF909143 -:1028F000E800815095FD06C095ED9A95F1F700002E -:102900008111F5CF8091E80085FF0DC040E050E0D7 -:1029100063E070E0CE0101960E94C2168091E8004B -:102920008E778093E8000F900F900F90DF91CF91FA -:102930000895CF93DF9300D01F92CDB7DEB72091DB -:102940008304243021F522E029839B838A8383E05A -:102950008093E9008FEF9091E800815095FD06C0CB -:1029600095ED9A95F1F700008111F5CF8091E8007F -:1029700085FF0DC040E050E063E070E0CE010196BD -:102980000E94C2168091E8008E778093E8000F9035 -:102990000F900F90DF91CF91089520918304243000 -:1029A000F1F422E02093E9002FEF3091E80021506C -:1029B00035FD06C035ED3A95F1F700002111F5CF50 -:1029C0002091E80025FF0BC040E050E065E070E09A -:1029D0000E94C2168091E8008E778093E8000895E7 -:1029E000CF93DF93EC0190918304943009F046C0BB -:1029F000809185028823D9F0809186028823B9F0DE -:102A00009093E9008FEF9091E800815095FD06C00A -:102A100095E19A95F1F700008111F5CF8091E800DA -:102A200085FF2CC040E050E060E170E017C081E01D -:102A30008093E9008FEF9091E800815095FD06C0EA -:102A400095ED9A95F1F700008111F5CF8091E8009E -:102A500085FF14C040E050E068E070E0CE010E94C5 -:102A6000C2168091E8008E778093E80080E1FE0135 -:102A7000ACEEB3E001900D928A95E1F7DF91CF9132 -:102A8000089580918204811109C00E9457180E9404 -:102A9000B4188091E20084608093E200089510925F -:102AA00082040895089508950C94FB2642E061EC99 -:102AB00081E00E94D11742E061EC82E00E94D117D0 -:102AC00042E061EC83E00E94D11742E161EC84E0D6 -:102AD0000C94D11780918504833009F455C030F4EB -:102AE000813071F0823009F48EC008958A3009F483 -:102AF0007AC08B3009F460C0893009F09CC020C0D6 -:102B000080918404813A09F096C08091E800877F23 -:102B10008093E8008091880490918904892B21F4A6 -:102B200060E18CEE93E003C060E080E090E070E054 -:102B30000E940D178091E8008B778093E80008953C -:102B400080918404813209F076C08091880490914C -:102B50008904009719F0039709F06DC08091E8008F -:102B6000877F8093E8008091E80082FD05C0809116 -:102B700083048111F8CF5FC08091F1008093FC0342 -:102B80008091E8008B7753C080918404813A09F0EA -:102B900052C08091880490918904892B09F04BC020 -:102BA0008091E800877F8093E8008091E80080FFB3 -:102BB000FCCF8091850236C0809184048132D9F5A2 -:102BC0008091880490918904892BA9F58091E8006F -:102BD000877F8093E8000E94061880918604809386 -:102BE00085020C943C2080918404813221F58091EF -:102BF000E800877F8093E8000E9406188091870490 -:102C00008093FD03089580918404813AA1F480911A -:102C1000E800877F8093E8008091E80080FFFCCF88 -:102C20008091FD038093F1008091E8008E7780937E -:102C3000E8000C940618089584B7877F84BF88E164 -:102C40000FB6F89480936000109260000FBE80E889 -:102C500080936100109261000E94A91B0E94571886 -:102C60000E94B4188091E20084608093E20078941E -:102C70000E943A1B0E94AB1B8BE792E00E94551BFF -:102C800080918304853069F40E94BC268091810480 -:102C90008823B1F30E94EA26882391F30E94AC16A0 -:102CA000EFCF0E94B31BECCF292F33272330310500 -:102CB000C9F064F42130310581F02230310509F08A -:102CC00043C08DE690E02FEB38E042C02132310561 -:102CD000F1F02232310541F137C082E190E02CE27F -:102CE00039E036C099278130910541F08230910555 -:102CF00041F0892B49F5EBEBF8E005C0EDE8F8E091 -:102D000002C0E3E6F8E0849190E09F0121C06430C6 -:102D1000D8F4E62FF0E0EE0FFF1FE25EFC4F2081BB -:102D2000318189E090E014C0643070F470E0FB0100 -:102D3000EE0FFF1FEA5EFC4F20813181FB01EE5E4A -:102D4000FC4F808190E004C080E090E020E030E023 -:102D5000FA0131832083089580E189BD82E189BD34 -:102D600009B400FEFDCF8091D8008F7D8093D800FC -:102D70008091E00082608093E0008091E00081FD1E -:102D8000FCCF0895CF92DF92EF92FF920F931F93A3 -:102D9000CF93DF93EC018B016A010E94251881110A -:102DA00033C0C114D10439F0F60180819181081B30 -:102DB000190BC80FD91FE12CF12C0115110519F1C0 -:102DC0008091E80085FD16C08091E8008E778093A1 -:102DD000E800C114D10449F0F60180819181E80E28 -:102DE000F91EF182E08285E00FC00E942518882339 -:102DF00021F30AC089918093F10001501109FFEF7E -:102E0000EF1AFF0ADACF80E0DF91CF911F910F9187 -:102E1000FF90EF90DF90CF90089520918A04309139 -:102E20008B042617370748F06115710539F4209196 -:102E3000E8002E772093E80001C0B90140E0611559 -:102E40007105A9F120918304222309F443C02530A0 -:102E500009F442C02091E80023FD40C02091E80021 -:102E600022FD32C02091E80020FFE9CF4091F3001D -:102E70002091F20030E0342BFC01CF016115710587 -:102E800059F02830310540F481918093F100615070 -:102E900071092F5F3F4FF1CF41E02830310509F034 -:102EA00040E02091E8002E772093E800C8CF411140 -:102EB000C9CF0AC080918304882361F0853061F016 -:102EC0008091E80083FD0AC08091E80082FFF2CF84 -:102ED00080E0089582E0089583E0089581E00895F8 -:102EE00020918A0430918B042617370748F061152A -:102EF000710539F42091E8002E772093E80001C095 -:102F0000B901FC0120E06115710591F18091830404 -:102F1000882309F440C0853009F43FC08091E8005F -:102F200083FD3DC08091E80082FD2FC08091E800C4 -:102F300080FFE9CF2091F3008091F20090E0922B86 -:102F40006115710559F08830910540F42491209362 -:102F5000F1003196615071090196F2CF21E0089796 -:102F600009F020E08091E8008E778093E800CBCFD5 -:102F70002111CCCF0AC080918304882361F0853071 -:102F800061F08091E80083FD0AC08091E80082FF33 -:102F9000F2CF80E0089582E0089583E0089581E013 -:102FA0000895982F973058F59093E900981739F0C5 -:102FB0007091EC002091ED005091F00003C0242F9F -:102FC000762F50E021FF19C03091EB003E7F309307 -:102FD000EB003091ED003D7F3093ED003091EB0040 -:102FE00031603093EB007093EC002093ED00509330 -:102FF000F0002091EE0027FF07C09F5FD3CF8F70B6 -:103000008093E90081E0089580E008958091840430 -:1030100087FF11C08091E80082FD05C08091830484 -:103020008111F8CF11C08091E8008B770BC080919F -:103030008304882349F08091E80080FFF8CF8091D5 -:10304000E8008E778093E80008952091E4003091A5 -:10305000E50095E64091EC00842F817040FF22C08E -:103060008091E80080FD1CC080918304882391F04A -:10307000853091F08091EB0085FD10C04091E40017 -:103080005091E5004217530729F39A01915011F727 -:1030900084E0089582E0089583E0089581E0089532 -:1030A00080E008954091E80042FFDECF08950E943D -:1030B000C5180E94CD18E0EEF0E080818160808329 -:1030C000E8EDF0E080818F77808319BCA7EDB0E058 -:1030D0008C918E7F8C9380818F7E8083109282046E -:1030E00008950F931F93CF93DF930E94C5180E94FA -:1030F000CD18C8EDD0E088818F778883888180687B -:10310000888388818F7D888319BC109283041092F4 -:103110007F04109281041092800400EE10E0F80108 -:1031200080818B7F808388818160888342E060E03A -:1031300080E00E94D117E1EEF0E080818E7F8083F5 -:10314000E2EEF0E08081816080838081886080830E -:10315000F80180818E7F8083888180618883DF9100 -:10316000CF911F910F910895E8EDF0E080818F7E5F -:103170008083E7EDF0E080818160808384E082BF1E -:1031800081E0809382040C947118E8EDF0E0808176 -:103190008E7F80831092E20008951092DA001092E0 -:1031A000E10008951F920F920FB60F9211242F93F2 -:1031B0003F934F935F936F937F938F939F93AF93BF -:1031C000BF93EF93FF938091E10082FF0BC080914A -:1031D000E20082FF07C08091E1008B7F8093E100D5 -:1031E0000E94391B8091DA0080FF1FC08091D800B7 -:1031F00080FF1BC08091DA008E7F8093DA0080917F -:10320000D90080FF0DC080E189BD82E189BD09B48C -:1032100000FEFDCF81E0809383040E94411505C02C -:1032200019BC109283040E944F158091E10080FF29 -:1032300019C08091E20080FF15C08091E2008E7F6E -:103240008093E2008091E20080618093E2008091AF -:10325000D80080628093D80019BC85E080938304F5 -:103260000E9453158091E10084FF30C08091E200FC -:1032700084FF2CC080E189BD82E189BD09B400FED4 -:10328000FDCF8091D8008F7D8093D8008091E100A0 -:103290008F7E8093E1008091E2008F7E8093E20038 -:1032A0008091E20081608093E20080917F04882316 -:1032B00011F084E007C08091E30087FD02C081E047 -:1032C00001C083E0809383040E9454158091E10043 -:1032D00083FF29C08091E20083FF25C08091E10037 -:1032E000877F8093E10082E08093830410927F04C3 -:1032F0008091E1008E7F8093E1008091E2008E7FDB -:103300008093E2008091E20080618093E20042E0DD -:1033100060E080E00E94D1178091F0008860809387 -:10332000F0000E945215FF91EF91BF91AF919F91D4 -:103330008F917F916F915F914F913F912F910F905E -:103340000FBE0F901F9018951F920F920FB60F92FD -:1033500011242F933F934F935F936F937F938F939A -:103360009F93AF93BF93CF93DF93EF93FF93C0915E -:10337000E900CF708091EC00D82FD17080FDD0E8AB -:103380001092E9008091F000877F8093F00078949C -:103390000E94E8191092E9008091F0008860809303 -:1033A000F000CD2BCF70C093E900FF91EF91DF913A -:1033B000CF91BF91AF919F918F917F916F915F91CD -:1033C0004F913F912F910F900FBE0F901F90189526 -:1033D0001F93CF93DF93CDB7DEB7AA970FB6F894BC -:1033E000DEBF0FBECDBFE4E8F4E088E08E0F909121 -:1033F000F10091938E13FBCF0E946A158091E80033 -:1034000083FF1FC18091840490918504492F50E06F -:103410004A30510508F015C1FA01EB59FF4F0C94E1 -:10342000FA30803881F0823809F00BC1809188042D -:103430008F708093E9008091EB0085FB882780F9ED -:103440001092E90006C0809180049091810491114E -:1034500082609091E800977F9093E8008093F1005C -:103460001092F100C8C0282F2D7F09F0EAC08823F0 -:1034700019F0823061F0E5C080918604813009F056 -:10348000E0C0933009F080E0809381042BC08091EC -:103490008604811127C0809188048F7009F4D1C0FF -:1034A0008093E9002091EB0020FF1CC0933021F4B1 -:1034B0008091EB00806214C09091EB00906190933A -:1034C000EB0021E030E0A90102C0440F551F8A95AE -:1034D000E2F74093EA001092EA008091EB008860E6 -:1034E0008093EB001092E9008091E800877F86C00E -:1034F0008111A7C0109186041F778091E300807826 -:10350000812B8093E3008091E800877F8093E8001F -:103510000E9406188091E80080FFFCCF8091E300B4 -:1035200080688093E300111102C082E001C083E053 -:103530008093830486C08058823008F082C08091D6 -:103540008604909187048C3D53E0950779F583E0DC -:103550008A838AE289834FB7F894DE01139620E0CC -:103560003EE051E2E32FF0E050935700E49120FF5A -:1035700003C0E295EF703F5FEF708E2F90E0EA306E -:1035800010F0C79601C0C0968D939D932F5F243194 -:1035900049F74FBF8091E800877F8093E8006AE297 -:1035A00070E0CE0101960E940D1714C0AE014F5F6E -:1035B0005F4F609188040E945416BC01009709F483 -:1035C00040C09091E800977F9093E80089819A81AC -:1035D0000E9470178091E8008B778093E80031C0DB -:1035E000803879F58091E800877F8093E8008091AA -:1035F0007F048093F1008091E8008E778093E8004B -:103600000E9406181EC081111CC090918604923041 -:10361000C0F48091E800877F8093E80090937F0456 -:103620000E94061880917F04811106C08091E300FA -:1036300087FD02C081E001C084E0809383040E9482 -:1036400056158091E80083FF0AC08091E800877FCB -:103650008093E8008091EB0080628093EB00AA9653 -:103660000FB6F894DEBF0FBECDBFDF91CF911F9193 -:1036700008950895CF93809183048823A1F0C09189 -:10368000E900CF709091EC00892F817090FD80E867 -:10369000C82B1092E9008091E80083FD0E94E81990 -:1036A000CF70C093E900CF91089590930304809365 -:1036B00002040895E0910204F0910304309721F090 -:1036C0000190F081E02D099480E00895E0910204DA -:1036D000F0910304309721F00280F381E02D0994EA -:1036E0000895E0910204F0910304309721F00480E2 -:1036F000F581E02D09940895209100043091010492 -:103700008217930771F09093010480930004E09175 -:103710000204F0910304309721F00680F781E02D38 -:10372000099408952091FE033091FF0382179307B7 -:1037300071F09093FF038093FE03E0910204F091F7 -:103740000304309721F00084F185E02D0994089559 -:1037500008950C94A81B0E942F270E94F10C0E9430 -:10376000B5270C94692C5F926F927F928F929F92F3 -:10377000AF92BF92CF92DF92EF92FF920F931F937F -:10378000CF93DF9300D000D01F92CDB7DEB70E9459 -:10379000360D9DE0C92E94E0D92E03E010E0AA2456 -:1037A000A394B12C502E802F0E94B10D4C01F60134 -:1037B000729062906F016826792661147104A1F4F9 -:1037C0000150110978F78FEF89838A831B820E9449 -:1037D00038278160782F9D838C8349815A816B8142 -:1037E0008D810E94631C38C08091620481FD0E941B -:1037F000BA0D2BE030E07501022E02C0EE0CFF1C6A -:103800000A94E2F7C70186219721892B09F12983C0 -:103810005A828E209F2091E0892809F490E09B83B2 -:103820000E9438278160782F9D838C8349815A813B -:103830006B818D810E94631C000F111FF801EB5FEB -:10384000FB4F80819181E826F926F182E08204C055 -:103850002150310980F6B4CF0E94A12910910404AF -:103860000E945A1B1817D1F00E945A1B809304041F -:103870000F900F900F900F900F90DF91CF911F91AD -:103880000F91FF90EF90DF90CF90BF90AF909F90FF -:103890008F907F906F905F900C94DB0C0F900F9047 -:1038A0000F900F900F90DF91CF911F910F91FF908C -:1038B000EF90DF90CF90BF90AF909F908F907F90D0 -:1038C0006F905F900895CF93DF93CDB7DEB72B97BE -:1038D0000FB6F894DEBF0FBECDBF4F835887698700 -:1038E0007A878B87DE01119686E0FD0111928A9519 -:1038F000E9F785E0FE01379601900D928A95E1F790 -:1039000049815A816B817C818D819E810E94DA225E -:103910002B960FB6F894DEBF0FBECDBFDF91CF91CF -:103920000895CF93882309F4C2C0C82F823859F470 -:103930000E945A1B81FDBBC089E30E94B4250E94EE -:10394000812689E30CC0833879F40E945A1B80FDDC -:10395000AEC083E50E94B4250E94812683E50E94C3 -:10396000F625CF910C948126843859F40E945A1B75 -:1039700082FD9DC087E40E94B4250E94812687E4D1 -:10398000EECF8CEF8C0F813A48F48C2F0E94D12B14 -:1039900081118DC08C2F0E94B425E3CF80E28C0F63 -:1039A000883048F4C77081E001C0880FCA95EAF7F3 -:1039B0000E943A26D6CF8BE58C0F833078F4C53A37 -:1039C00029F0C63A31F083E890E005C081E890E044 -:1039D00002C082E890E0CF910C947C1B88E58C0FAC -:1039E000833108F064C0C83A39F1C93A41F1CA3AA2 -:1039F00049F1CB3A51F1CC3A59F1CD3A61F1C03BA2 -:103A000069F1CE3A71F1CF3A79F1C13B81F1C23B14 -:103A100089F1C33B91F1C43B99F1C53BA1F1C63B90 -:103A2000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF0 -:103A3000C9F180E090E038C082EE90E035C089EEB8 -:103A400090E032C08AEE90E02FC085EB90E02CC071 -:103A500086EB90E029C087EB90E026C08CEC90E0EC -:103A600023C08DEC90E020C083E891E01DC08AE87F -:103A700091E01AC082E991E017C084E991E014C096 -:103A800081E292E011C083E292E00EC084E292E013 -:103A90000BC085E292E008C086E292E005C087E2B2 -:103AA00092E002C08AE292E0CF910C94921BCF91F7 -:103AB0000895882309F44BC0823859F40E945A1B98 -:103AC00081FF45C089E30E94B4250E94812689E3D5 -:103AD0000CC0833871F40E945A1B80FF38C083E504 -:103AE0000E94B4250E94812683E50E94F6250C944D -:103AF0008126843859F40E945A1B82FF28C087E42B -:103B00000E94B4250E94812687E4EFCF9CEF980F96 -:103B1000913A58F390E2980F983050F4877091E002 -:103B200001C0990F8A95EAF7892F0E944026DFCFBE -:103B30009BE5980F933020F480E090E00C947C1B80 -:103B4000885A833120F480E090E00C94921B089511 -:103B5000882321F00E943A260C9481260895882318 -:103B600021F00E9440260C94812608957F928F9226 -:103B70009F92AF92BF92CF92DF92EF92FF920F93FC -:103B80001F93CF93DF931F92CDB7DEB77C01C62E74 -:103B9000772EFC01058102950F70128111110E9490 -:103BA00057260E94AD25882379F0112369F080E221 -:103BB0008C0D883048F082E00E9496250E94AD2549 -:103BC00091E0D82ED92601C0D12CE72DE295EF70D7 -:103BD000F0E0E159FF4F0C94FA30872D807F072DDC -:103BE0000F70882311F00295007F112389F00023C4 -:103BF00009F499C180E28C0D883020F4802F0E9456 -:103C00003A2603C0802F0E944A260E9481268BC13B -:103C10008C2D0E94591D002309F4C3C180E28C0D34 -:103C2000883020F4802F0E94402603C0802F0E94FD -:103C300050260E948126B5C1872D807F972D9F70C9 -:103C4000803211F4892F03C0892F8295807FCC2088 -:103C500021F0F1E0CF16A1F01DC0112339F00023AF -:103C600019F1013009F50E946A269BC1002319F061 -:103C7000013009F496C189830E946D26898110C1A3 -:103C8000112321F0063008F08CC10EC0053008F079 -:103C900088C106C1112359F0002331F0F701958145 -:103CA00090FF41C19F7095830E94A81D7AC1002397 -:103CB00009F4F6C03EC1872D86958695837090E005 -:103CC000009719F0019761F06CC1112321F08C2D40 -:103CD000972D937002C080E090E00E947C1B61C130 -:103CE000112321F08C2D972D937002C080E090E07D -:103CF0000E94921B56C18C2D112319F00E94A928F5 -:103D000002C00E9411290E9496294BC1872D837001 -:103D100009F052C0111145C18C2D8295869587708E -:103D2000880F880F9C2D9F70892E912CA12CB12C6F -:103D3000082E04C0880C991CAA1CBB1C0A94D2F73C -:103D4000C4FE14C00FE010E020E030E0B901A8018B -:103D500004C0440F551F661F771F8A95D2F7CB0109 -:103D6000BA01609570958095909503C060E070E011 -:103D7000CB01272D26952695237030E02230310582 -:103D800069F02330310589F0682979298A299B292E -:103D90002130310571F00E94222403C1682979295C -:103DA0008A299B290E943E24FCC00E942224C5012E -:103DB000B4010E940624F5C0112319F0872D8170EB -:103DC00001C08695882309F4ECC08C2D82958695D8 -:103DD0008770880F880F9C2D9F70892E912CA12CA5 -:103DE000B12C082E04C0880C991CAA1CBB1C0A9478 -:103DF000D2F7C4FE14C00FE010E020E030E0B901BB -:103E0000A80104C0440F551F661F771F8A95D2F77B -:103E1000CB01BA01609570958095909503C060E0E4 -:103E200070E0CB01272D269526952370422F50E078 -:103E30004230510569F04330510589F068297929EC -:103E40008A299B294130510571F00E94FC24A9C0A8 -:103E5000682979298A299B290E941825A2C00E94D5 -:103E6000FC24C501B4010E94E0249BC08C2D90E08D -:103E7000FC01E05EF109E531F10508F050C0E158C0 -:103E8000FF4F0C94FA300C2D0F70872D8F7111237A -:103E900021F00E947924802F07CF0E949A24802F3E -:103EA0000E94AF1D7EC0112341F0053008F079C09B -:103EB000872D8F710E94BF2474C0063008F071C036 -:103EC000F7CF112339F0872D8F710E94792469C0B3 -:103ED0001123C9F3872D8F710E949A2462C0112388 -:103EE00029F0872D8F710E9464245BC00E945A24A0 -:103EF00058C0112351F0172D1F71812F0E94792472 -:103F000063E0812F0E948D254CC081E00E949625A0 -:103F1000023008F446C082E00E94962542C0112378 -:103F200031F0002381F28C2D0E94911C3AC00023B5 -:103F300089F28C2D0E94591D34C0472D4F706C2D75 -:103F4000C7010E941C060E947E232BC0111129C0AC -:103F5000472D4F7050E042305105B9F04CF44115F7 -:103F6000510581F041305105E1F40E94912C19C0B6 -:103F70004330510569F04430510599F48C2D0E946D -:103F8000E32C0FC00E947A2C0CC00E94AD2C09C0FB -:103F90000E94C02C06C0472D4F706C2DC7010E9497 -:103FA0007C09DD20F9F00E94892580FD1BC0F70106 -:103FB00012820E9483250E947924C7010E94012059 -:103FC0000E9483250F90DF91CF911F910F91FF9059 -:103FD000EF90DF90CF90BF90AF909F908F907F90A9 -:103FE0000C949A240F90DF91CF911F910F91FF9025 -:103FF000EF90DF90CF90BF90AF909F908F907F9089 -:1040000008950F931F93CF93DF93EC0188819981DB -:104010002B813C81232BB9F09F3F11F48F3F99F006 -:10402000CE010E947B07882371F0688179818A81A3 -:104030000E947F258C010E9434250E94FB23B80139 -:10404000CE010E94B61DDF91CF911F910F9108956F -:104050000E9457260E9467260E942C260E948126D5 -:104060000E94472A0E94962980E090E00E947C1BD3 -:1040700080E090E00C94921B0E9447260C9428202C -:104080000E947425292F22952F7030E02C303105A5 -:104090004CF42A3031056CF42250310922303105BC -:1040A000A8F407C02C30310569F02F30310551F0EC -:1040B0000DC0803F69F018F4803E40F409C0843F91 -:1040C00029F406C093FB882780F9089580E00895BD -:1040D00081E00895CF93DF9300D000D01F92CDB739 -:1040E000DEB70F900F900F900F900F90DF91CF9150 -:1040F0000895CF93DF9300D000D000D0CDB7DEB7C6 -:1041000026960FB6F894DEBF0FBECDBFDF91CF91DC -:1041100008951F93CF93DF93C0910D0416E0809113 -:104120000E04C81799F0D0E01C9FF0011D9FF00D00 -:104130001124E15FFB4F4081518162817381848151 -:1041400095810E9479202196C770E9CFDF91CF91A8 -:104150001F91089540913F045091400460914104A3 -:104160007091420480914304909144040C9479200E -:104170008091440482958F7009F054C0809141046D -:10418000882309F44FC080910D04A0910E04609122 -:104190003F04709140044091420450914304B6E0C2 -:1041A0008A1709F43FC090E041155105C1F17F3FE6 -:1041B00011F46F3FA1F1B89FF001B99FF00D1124E8 -:1041C000E15FFB4F218172132AC02081621327C057 -:1041D0002281211124C0238134812417350710F452 -:1041E00021503109241B350B283C3105C0F42091A6 -:1041F00044042F7020612093440426E0289FF0019E -:10420000299FF00D1124EC5EFB4F80818F7080613F -:1042100080838FE394E00E9401200C948920019612 -:104220008770BECF0895CF92DF92EF92FF920F93E7 -:104230001F93CF93DF93CDB7DEB762970FB6F89495 -:10424000DEBF0FBECDBF8C0185E0F801DE011D96FB -:1042500001900D928A95E1F7D8014C9111965C91ED -:10426000119712966C9112971396CD90DC9014973B -:1042700030913F0470914004809142049091430436 -:10428000009709F46BC17F3F19F43F3F09F466C101 -:10429000E0904104EE2009F4C0C020914404C81607 -:1042A000D90628F0F601E81BF90BCF0104C0809570 -:1042B00090958C0D9D1DFF24F394883C910578F01A -:1042C000F12C207F09F0C6C07C2DD98AC88A898943 -:1042D0000E946A208FE394E00E940120B1C0822FE7 -:1042E000807F09F046C0751314C0341312C06111E9 -:1042F00010C02F702061209344040E94AA208FE3F5 -:1043000094E00E94012080914404D80115968C937A -:104310002EC0CD2819F15F3F11F44F3FF9F0F62E72 -:1043200061111CC080910D0420910E0436E08217AB -:1043300009F45AC090E0389FF001399FF00D112424 -:10434000E15FFB4F7181571306C07081471303C0B3 -:104350007281711103C001968770E9CFF62E662332 -:1043600009F418C180914404816080934404F12CC5 -:1043700011C1751308C0341306C0611104C08091C7 -:104380004404D801C3C04D875E878D859E856A8BA6 -:104390000E9440206A898823E1F16623D1F12091AF -:1043A0004404822F82958F7090E0029774F0809180 -:1043B0003F049091400498878F831986DB86CA86D4 -:1043C0002C87CE0107960E94012086E0F801AFE31A -:1043D000B4E001900D928A95E1F70E94B8200E9406 -:1043E000AA20FF24F394D6C04D875E878D859E85D5 -:1043F0000E947425292F22952F7030E0223031053C -:104400000CF0BCC09F7009F0B6C0805E883008F424 -:10441000C1C0C8010E940120E4CFC816D90608F423 -:1044200053C0F601E81BF90BCF01883C910508F455 -:1044300050C0F12C7C2DD98AC88A89890E946A20B3 -:10444000EFE3F4E086E0DF011D928A95E9F70E9430 -:10445000AA20A0C0751314C0341312C0611110C07B -:1044600080914404F8018583C8010E94012086E000 -:10447000EFE3F4E0DF011D928A95E9F7FE2C8AC094 -:104480004D875E878D859E856A8B0E9440206A8954 -:10449000882309F4BECF662309F4BBCF20914404DE -:1044A000822F82958F7090E002970CF48ECF8091CE -:1044B0003F04909140049A8389831B82DD82CC82E1 -:1044C0002E83CE0101967FCF809590958C0D9D1DFA -:1044D000ACCFF62E662309F49CCF75132EC034138F -:1044E0002CC02091440420FD1FC0822F82958F7024 -:1044F000D9F0D80115962C9315978F3049F08F5F1E -:10450000982F9295907F822F8F70892B15968C9380 -:10451000C8010E94012086E0F801AFE3B4E00190F9 -:104520000D928A95E1F793CF86E0F801AFE3B4E00E -:1045300001900D928A95E1F72DC04D875E878D859C -:104540009E850E944020811140CF8091440481606B -:1045500080934404C8010E9401201CC0662309F412 -:1045600058CF4D875E878D859E850E944020882389 -:1045700009F44FCF2ACF811148CF0CC02430310528 -:104580000CF047CF9F7009F440CFF8019581907FE0 -:1045900009F03BCF8F2D62960FB6F894DEBF0FBEA9 -:1045A000CDBFDF91CF911F910F91FF90EF90DF90E2 -:1045B000CF9008951F93CF93DF93CDB7DEB72C979D -:1045C0000FB6F894DEBF0FBECDBF4F835887698703 -:1045D0007A878B879C87CE0107960E9413218823B8 -:1045E00069F08F8198852A853B85232BF1F19F3FC8 -:1045F00009F063C08F3F09F060C037C086E0FE015C -:104600003796DE01119601900D928A95E1F76F8140 -:104610007885EA85FB85309741F17F3F11F46F3F44 -:1046200021F120910E0430E0C9010196877099278D -:1046300040910D0450E08417950709F447C0698341 -:104640007A83FD83EC8396E0929FD001939FB00D17 -:104650001124A15FBB4FFE01319601900D929A95F6 -:10466000E1F780930E040E94892016E080910D04EA -:1046700090910E048917C1F1189FC0011124815F28 -:104680009B4F0E941321882379F1E0910D041E9F16 -:10469000F0011124E15FFB4F408151816281738100 -:1046A000848195810E94792080910D0490E001968B -:1046B0008770992780930D04D9CF4F8158856985DC -:1046C0007A858B859C850E947920CFCF0E943C20E3 -:1046D00010920E0410920D04EFE3F4E086E0DF0187 -:1046E0001D928A95E9F7C1CF2C960FB6F894DEBFDC -:1046F0000FBECDBFDF91CF911F910895EF92FF9232 -:104700000F931F93CF93DF938C01009709F46CC034 -:10471000F12CEE24E394E8012196F801849184378A -:1047200040F4843008F051C0813081F0823019F1BA -:104730005BC0853709F444C0A8F19CE7980F903717 -:1047400008F052C08F770E94591D41C00E5F1F4F65 -:10475000FE01C49180E28C0F883048F4C7708E2D22 -:1047600001C0880FCA95EAF70E945A2614C08C2F00 -:104770000E94911C2DC00E5F1F4FFE01C49180E26C -:104780008C0F883058F4C7708E2D01C0880FCA95E1 -:10479000EAF70E9460260E9481261AC08C2F0E9490 -:1047A000591D16C00E5F1F4FFE01C491CC2381F02E -:1047B0008FE99FE00197F1F700C00000C150F6CFEC -:1047C0000E5F1F4FFE01F49003C00E94911C8E01EA -:1047D0008F2D882309F49FCFEFE9FFE03197F1F7A0 -:1047E00000C000008150F5CFDF91CF911F910F9154 -:1047F000FF90EF90089508956093490470934A04E0 -:1048000080934B0490934C040C9428200F931F9397 -:104810000091490410914A0420914B0430914C04BA -:10482000DC01CB01802B912BA22BB32B809349046D -:1048300090934A04A0934B04B0934C041F910F91A2 -:104840000C9428200F931F930091490410914A045F -:1048500020914B0430914C04DC01CB018023912347 -:10486000A223B3238093490490934A04A0934B045A -:10487000B0934C041F910F910C9428200F931F9319 -:104880000091490410914A0420914B0430914C044A -:10489000DC01CB0180279127A227B327809349040D -:1048A00090934A04A0934B04B0934C041F910F9132 -:1048B0000C9428201092450410924604109247044C -:1048C000109248040C94282041E050E060E070E031 -:1048D00004C0440F551F661F771F8A95D2F7409377 -:1048E00045045093460460934704709348040C9425 -:1048F000282041E050E060E070E004C0440F551F04 -:10490000661F771F8A95D2F78091450490914604DF -:10491000A0914704B0914804482B592B6A2B7B2B5C -:1049200040934504509346046093470470934804B1 -:104930000C94282041E050E060E070E004C0440F97 -:10494000551F661F771F8A95D2F740955095609541 -:1049500070958091450490914604A0914704B091D0 -:104960004804482359236A237B23409345045093EA -:10497000460460934704709348040C94282041E057 -:1049800050E060E070E004C0440F551F661F771FC1 -:104990008A95D2F78091450490914604A0914704EE -:1049A000B0914804482759276A277B27409345043C -:1049B0005093460460934704709348040C94282055 -:1049C0000F931F93009145041091460420914704D2 -:1049D00030914804DC01CB01802B912BA22BB32B0F -:1049E0008093450490934604A0934704B0934804F1 -:1049F0001F910F910C9428200F931F930091450451 -:104A0000109146042091470430914804DC01CB0109 -:104A100080239123A223B3238093450490934604DB -:104A2000A0934704B09348041F910F910C94282041 -:104A30000F931F9300914504109146042091470461 -:104A400030914804DC01CB0180279127A227B327AE -:104A50008093450490934604A0934704B093480480 -:104A60001F910F910C9428200895CF92DF92EF921E -:104A7000FF920F931F93CF93DF938C01C090490453 -:104A8000D0904A04E0904B04F0904C04809145048F -:104A900090914604A0914704B0914804C82AD92AAD -:104AA000EA2AFB2ACFE1D0E0D701C6010C2E04C0D0 -:104AB000B695A795979587950A94D2F780FF06C07B -:104AC000B8018C2F0E94010C019721F4219760F707 -:104AD00080E001C08C2FDF91CF911F910F91FF904B -:104AE000EF90DF90CF900895CF93DF93EC010E9479 -:104AF0003525BE010E94010CDF91CF910895CB01B5 -:104B00000E947425089580914D048595859585951D -:104B1000089580914D048770089598E0899F9001D1 -:104B20001124262B20934D040C94792420914D04BC -:104B30008095822380934D04982F977069F430E01C -:104B4000482F552747FD50952417350729F085959F -:104B5000859585950C949A24089590914D049770AD -:104B600081E009F480E0089590918502992321F075 -:104B700090918602911109C020918702309188029C -:104B8000F90132969FEF40E01FC0982F96959695B9 -:104B900096959F3050F5E0918702F0918802E90FD9 -:104BA000F11D877021E030E0A90102C0440F551FBC -:104BB0008A95E2F7CA019181892B818308959F3FED -:104BC00039F04F5F4E3041F051915813F8CF0DC07E -:104BD0005111F7CF942FF5CF9F3F39F0F901E90F2D -:104BE000F11D97FDFA9582830895089590918502AD -:104BF000992321F090918602911109C0209187029A -:104C000030918802F9013296205F3F4F1FC0982FE4 -:104C10009695969596959F30F0F4E0918702F091E5 -:104C20008802E90FF11D877021E030E0A90102C080 -:104C3000440F551F8A95E2F7CA0180959181892317 -:104C4000818308953196E217F30729F09081981334 -:104C5000F9CF1082F7CF089581E090E0E0918702CC -:104C6000F0918802E80FF91F1082019680319105BA -:104C7000A9F7089590916104892B809361040895A8 -:104C80008095909161048923809361040895109226 -:104C90006104089590916004892B809360040895C5 -:104CA0008095909160048923809360040895109208 -:104CB0006004089590915F04892B80935F040895A8 -:104CC000809590915F04892380935F0408951092EA -:104CD0005F04089580934E04089510924E04089541 -:104CE0008091870290918802FC0131969C01205F9F -:104CF0003F4F80E0919191118F5FE217F307D1F759 -:104D00000895E0918702F091880280916104808388 -:104D1000E0918702F0918802908180916004892B54 -:104D20008083E0918702F0918802908180915F04F6 -:104D3000892B808380914E04882361F0E091870263 -:104D4000F09188029081892B80830E9470268111C6 -:104D500010924E0480918702909188020C94661BF9 -:104D600020E0009739F0AC0141505109842395238C -:104D70002F5FF7CF822F089580918304843039F11B -:104D80001092630420E488E190E00FB6F894A895AF -:104D9000809360000FBE2093600080E00E94770542 -:104DA00080E00E94DB0C83B7817F846083BF83B780 -:104DB000816083BF7894889583B78E7F83BF88E1B5 -:104DC0000FB6F89480936000109260000FBE0895B3 -:104DD0000895089580E00E9477050E94E8260E94C9 -:104DE000360D0E94E9260E94BB0D91E0811101C0A1 -:104DF00090E0892F08950E943C2080E00E94770572 -:104E00000E94692C0E945A1B0C94DB0C1F920F927B -:104E10000FB60F9211248F939F93AF93BF938091FE -:104E20006304811113C08091640490916504A09182 -:104E30006604B09167044196A11DB11D809364047E -:104E400090936504A0936604B0936704BF91AF91FB -:104E50009F918F910F900FBE0F901F90189582E039 -:104E600084BD93E095BD9AEF97BD80936E00089541 -:104E70002FB7F8948091640490916504A091660422 -:104E8000B09167042FBF0895CF92DF92EF92FF9207 -:104E90000F931F932FB7F8944091640450916504C9 -:104EA00060916604709167042FBF6A017B01EE2454 -:104EB000FF248C0120E030E0C016D106E206F306A4 -:104EC00010F4415051099A01281B390BC9011F9157 -:104ED0000F91FF90EF90DF90CF9008951F920F9267 -:104EE0000FB60F9211248F939F93AF93BF9380912E -:104EF000640490916504A0916604B09167040196E2 -:104F0000A11DB11D8093640490936504A093660471 -:104F1000B0936704BF91AF919F918F910F900FBE97 -:104F20000F901F9018950E945718F8942FEF87EA5A -:104F300091E6215080409040E1F700C0000087E0FA -:104F400090EBDC0180938E0490938F04A0939004E7 -:104F5000B09391049CE088E10FB6F894A8958093F3 -:104F600060000FBE90936000FFCF0E94F427811174 -:104F700002C00E94D0270E94FF27809362040E94F3 -:104F80000C2880938C0487FB882780F98093860205 -:104F90000E940328682F70E080E090E00C94FC23CE -:104FA0006DEE7EEF80E090E00E94203160E082E0D4 -:104FB00090E00E940E3160E083E090E00E940E31AC -:104FC00060E084E090E00E940E3160E085E090E0D7 -:104FD0000E940E3160E086E090E00E940E316FEF9B -:104FE00087E090E00C940E3180E090E00E94083160 -:104FF00021E08D3E9E4F09F020E0822F089582E04F -:1050000090E00C94003183E090E00C940031682F24 -:1050100083E090E00C940E3184E090E00C94003139 -:10502000682F84E090E00C940E3186E090E00C94C0 -:105030000031682F86E090E00C940E3187E090E01C -:105040000C940031682F87E090E00C940E31809131 -:105050006A0480FF0BC060918C0285E0689FB001FC -:10506000112475956795759567952BC081FF09C0CB -:1050700060918C0285E0689FB00111247595679559 -:1050800020C082FF07C060918C0285E0689FB0015C -:10509000112417C090916B049923D1F060918B0279 -:1050A000961788F720918C0285E0289F90011124A3 -:1050B000929FA001939F500D112470E0CA010E949D -:1050C000E6306038710540F46115710539F002C0B1 -:1050D00065E070E0862F08958FE7089581E00895D8 -:1050E00080916A0480FF08C060918A0270E0759523 -:1050F00067957595679521C081FF06C060918A020A -:1051000070E07595679519C082FF04C060918A02AE -:1051100070E010C090916B049923C1F060918902F6 -:105120009617A0F780918A02899FC001112470E030 -:105130000E94E6306038710528F46115710521F090 -:10514000862F08958FE7089581E0089561E070E06B -:10515000F4CF803F21F40E942728819504C0813F2D -:1051600029F40E94272880936E040895823F21F439 -:105170000E942728819504C0833F29F40E94272894 -:1051800080936D040895893F19F40E94702805C02A -:105190008A3F31F40E947028819580936F040895AE -:1051A0008B3F21F40E947028819504C08C3F29F424 -:1051B0000E947028809370040895843F21F48091A8 -:1051C0006C04816017C0853F21F480916C0482607B -:1051D00011C0863F21F480916C0484600BC0873F2E -:1051E00021F480916C04886005C0883F31F480917F -:1051F0006C04806180936C0408958D3F21F480914C -:105200006A0481600BC08E3F21F480916A04826041 -:1052100005C08F3F29F480916A04846080936A04FA -:105220000895803F39F480916E0487FF6CC010921E -:105230006E0469C0813F29F480916E041816BCF396 -:1052400062C090916D04823F29F497FF5CC0109278 -:105250006D0459C0833F19F41916CCF354C0893F2B -:1052600041F480916F0418160CF04DC010926F0439 -:105270004AC08A3F29F480916F0487FF44C0F6CF6B -:105280008B3F39F48091700487FF3DC01092700409 -:105290003AC08C3F29F4809170041816BCF333C0D7 -:1052A000843F21F480916C048E7F17C0853F21F4E8 -:1052B00080916C048D7F11C0863F21F480916C0435 -:1052C0008B7F0BC0873F21F480916C04877F05C0E2 -:1052D000883F31F480916C048F7E80936C0413C0FE -:1052E0008D3F21F480916A048E7F0BC08E3F21F4A4 -:1052F00080916A048D7F05C08F3F29F480916A04F4 -:105300008B7F80936A0480916D0481110EC080911F -:105310006E0481110AC080916F04811106C08091D2 -:105320007004811102C010926B0408958CE694E021 -:105330000E94711B0E94382790936904809368042F -:1053400008951F93CF93DF9380916804909169042F -:105350000E944427AC0190916B04992321F0209185 -:105360008D0230E006C020918E028AE0289F9001D5 -:1053700011244217530708F486C080916D04C09130 -:105380006E04D0916F0410917004811107C0C11197 -:1053900076C0D11174C0111172C075C09F3F19F051 -:1053A0009F5F90936B04181624F40E942728809323 -:1053B0006D0480916D0487FF05C00E9427288195A8 -:1053C00080936D041C1624F40E94272880936E0499 -:1053D00080916E0487FF05C00E94272881958093E5 -:1053E0006E0460916D04662339F1C0916E04CC2384 -:1053F00019F1772767FD7095872F972F0E94082E48 -:1054000023E333E343E35FE30E94182F0E94D52D8B -:1054100060936D046C2F772767FD7095872F972F0A -:105420000E94082E23E333E343E35FE30E94182F37 -:105430000E94D52D60936E041D1624F40E947028DE -:1054400080936F0480916F0487FF05C00E947028CD -:10545000819580936F04111624F40E947028809324 -:1054600070048091700487FF05C00E9470288195A8 -:1054700080937004DF91CF911F910C9496299F3FE8 -:1054800009F08ECF96CFDF91CF911F910895ECE672 -:10549000F4E085E0DF011D928A95E9F710926B0434 -:1054A00010926A040895833081F128F4813059F014 -:1054B0008230D1F00895853009F449C0B8F18630C2 -:1054C00009F456C0089580918E02262F30E0280FEF -:1054D000311D2F3F310524F4680F60938E0208952B -:1054E0008FEF80938E02089580918D02262F30E0F9 -:1054F000280F311D2F3F310524F4680F60938D0272 -:1055000008958FEF80938D02089580918C02262F4D -:1055100030E0280F311D2F3F310524F4680F6093D0 -:105520008C0208958FEF80938C02089580918B02F6 -:10553000262F30E0280F311D2F3F310524F4680F4E -:1055400060938B0208958FEF80938B020895809172 -:105550008A02262F30E0280F311D2F3F310524F419 -:10556000680F60938A0208958FEF80938A020895EE -:1055700080918902262F30E0280F311D2F3F310501 -:1055800024F4680F6093890208958FEF8093890255 -:105590000895833011F128F4813049F0823091F080 -:1055A0000895853081F120F18630C1F10895809110 -:1055B0008E02681720F4861B80938E020895109245 -:1055C0008E02089580918D02681720F4861B8093C7 -:1055D0008D02089510928D02089580918C026817B3 -:1055E00020F4861B80938C02089510928C020895FB -:1055F00080918B02681720F4861B80938B0208959C -:1056000010928B02089580918A02681720F4861BFD -:1056100080938A02089510928A02089580918902E7 -:10562000681720F4861B80938902089510928902DE -:1056300008950F931F93873208F048C08E3108F009 -:105640008DC0803109F477C008F5873009F461C056 -:1056500068F4863009F09DC080916204817F8E7F5E -:105660008093620481E08093720494C08B3009F4CB -:1056700089C08E3009F08DC08091620482FB2227A0 -:1056800020F991E0922790FB82F95EC0863109F4FF -:1056900079C060F4813109F07CC00E943C20909177 -:1056A000860281E08927809386026CC0893109F4E3 -:1056B00069C08B3109F06DC08091620481FB2227A3 -:1056C00020F991E0922790FB81F93EC0883309F4DC -:1056D00059C050F4893209F457C0853309F454C0D5 -:1056E000873209F451C055C0833409F44DC028F401 -:1056F0008A3308F44EC0895332C0883409F049C057 -:105700000E943C200E94EB0D0E94F1060E9493270C -:1057100039C090916204892F8095817080FB90F947 -:1057200029F0966098609093620434C0997F977FC7 -:105730009093620427C08091620483FB222720F9A2 -:1057400091E0922790FB83F9809362049923D1F032 -:105750008091620481608093620414C08D5141E0A5 -:1057600050E060E070E08A019B0104C0000F111F4F -:10577000221F331F8A95D2F7C901B8010E94FC236A -:105780000E943C2081E006C061E070E080E090E093 -:10579000F5CF80E01F910F91089580E0089580E09B -:1057A0000895CF93C82F80917204813069F018F06A -:1057B0008230C9F184C0E0918702F0918802808133 -:1057C000823209F07EC007C0E0918702F091880222 -:1057D0008081823261F48C2F0E94CD2B811104C014 -:1057E0008C2F0E94192B1DC081E090E01AC08C2FD5 -:1057F0000E94CF2B811114C0C43179F048F4CB3012 -:1058000079F0C03109F061C082E08093720408C071 -:10581000C93219F0C83321F058C01092720455C033 -:1058200081E0817054C0C93291F120F5C43179F121 -:10583000B0F4C73009F047C08EE180938E0282E356 -:1058400080938D028AE080938C0284E180938B02A6 -:1058500088E080938A0288E28093890234C0CE5126 -:10586000C63088F5EC2FF0E0EA5DFC4F8081809334 -:10587000710429C0CE34E9F020F4CB3421F56AE07C -:1058800013C0C13579F0C235F1F461E00DC08091EB -:105890007104882319F01092710415C081E080937F -:1058A000720415C061E006C0809171040E94532A01 -:1058B0000AC06AE0809171040E94C92A04C0109253 -:1058C000720480E004C081E002C080E0AACFCF91E2 -:1058D00008950E94F427811102C00E94D0270E94DF -:1058E000152880938D0480FF02C0869501C080E05A -:1058F0000C94770580918D04982F9695292F30E090 -:10590000233031054CF49F5F990F8170892B8160A2 -:1059100080938D040E94192880918D0486950C94A3 -:10592000770580918D04982F969591F09158990F55 -:105930008170892B80938D048E7F91E009F490E033 -:1059400080918D0490FB80F980938D040E9419282A -:1059500080918D0486950C94770580918D04982F05 -:10596000909590FB80F980938D040E941928809176 -:105970008D0480FF02C0869501C080E00C947705FD -:1059800090918D04892F86958F5F8F7791708430E9 -:1059900028F4880F892B80938D0402C090938D0486 -:1059A00080918D048E7F91E009F490E080918D04C8 -:1059B00090FB80F980938D040E94192880918D04BA -:1059C00086950C94770520918D04922F96958927C2 -:1059D000982F990F822F8170892B80938D048E7F51 -:1059E00091E009F490E080918D0490FB80F9809320 -:1059F0008D040E94192880918D0486950C9477055A -:105A000080918D04869508955058BB27AA270ED003 -:105A1000D1C1C2D130F0C7D120F031F49F3F11F491 -:105A20001EF4B7C10EF4E095E7FB9FC1E92FD3D177 -:105A300080F3BA17620773078407950718F071F4AB -:105A40009EF5EBC10EF4E0950B2EBA2FA02D0B01A5 -:105A5000B90190010C01CA01A0011124FF27591BB3 -:105A600099F0593F50F4503E68F11A16F040A22FB9 -:105A7000232F342F4427585FF3CF4695379527952A -:105A8000A795F0405395C9F77EF41F16BA0B620B29 -:105A9000730B840BBAF09150A1F0FF0FBB1F661F70 -:105AA000771F881FC2F70EC0BA0F621F731F841FB3 -:105AB00048F4879577956795B795F7959E3F08F0D9 -:105AC000B3CF9395880F08F09927EE0F9795879598 -:105AD000089527D108F481E008950CD06BC163D1FB -:105AE00040F05AD130F021F45F3F19F03EC151111E -:105AF00095C14FC170D198F39923C9F35523B1F3E0 -:105B0000951B550BBB27AA2762177307840738F02C -:105B10009F5F5F4F220F331F441FAA1FA9F333D08B -:105B20000E2E3AF0E0E830D091505040E695001C3F -:105B3000CAF729D0FE2F27D0660F771F881FBB1FFB -:105B4000261737074807AB07B0E809F0BB0B802DD5 -:105B5000BF01FF2793585F4F2AF09E3F510568F021 -:105B600004C15CC15F3FECF3983EDCF3869577950A -:105B70006795B795F7959F5FC9F7880F911D969523 -:105B8000879597F90895E1E0660F771F881FBB1F7F -:105B9000621773078407BA0720F0621B730B840B2C -:105BA000BA0BEE1F88F7E095089504D06894B11100 -:105BB00035C1089518D188F09F5790F0B92F9927D3 -:105BC000B751A0F0D1F0660F771F881F991F1AF008 -:105BD000BA95C9F712C0B13081F01FD1B1E0089574 -:105BE0001CC1672F782F8827B85F39F0B93FCCF3F5 -:105BF000869577956795B395D9F73EF490958095FE -:105C0000709561957F4F8F4F9F4F0895E89409C01D -:105C100097FB3EF490958095709561957F4F8F4FDF -:105C20009F4F9923A9F0F92F96E9BB279395F695F5 -:105C3000879577956795B795F111F8CFFAF4BB0F73 -:105C400011F460FF1BC06F5F7F4F8F4F9F4F16C0D7 -:105C5000882311F096E911C0772321F09EE8872F61 -:105C6000762F05C0662371F096E8862F70E060E01D -:105C70002AF09A95660F771F881FDAF7880F969596 -:105C8000879597F9089588D018F011F08CD038F4E2 -:105C900080C0C4C0E92F9FD0B0F35523C9F3E7FB00 -:105CA0006217730784079507A8F199F3E92FFF2777 -:105CB00088232AF03197660F771F881FDAF7952F10 -:105CC0005527442332F091505040220F331F441F78 -:105CD000D2F7BB27E91BF50B621B730B840BB109D1 -:105CE000C1F222F4620F731F841FB11D31972AF095 -:105CF000660F771F881FBB1FEFCF915050405AF09F -:105D000041F0882332F0660F771F881F9150504072 -:105D1000C1F7939530C08695779567959F5FD9F7C2 -:105D2000F8CF990F0008550FAA0BE0E8FEEF161602 -:105D30001706E807F907C0F012161306E407F5077F -:105D400098F0621B730B840B950B39F40A2661F0F3 -:105D5000232B242B252B21F408950A2609F4A14096 -:105D6000A6958FEF811D811D089597F99F6780E8A3 -:105D700070E060E008959F3F31F0915020F48795E6 -:105D800077956795B795880F911D9695879597F9A3 -:105D900008959FEF80EC089500240A9416161706C4 -:105DA00018060906089500240A941216130614060C -:105DB00005060895092E0394000C11F4882352F06F -:105DC000BB0F40F4BF2B11F460FF04C06F5F7F4F27 -:105DD0008F4F9F4F089557FD9058440F551F59F00E -:105DE0005F3F71F04795880F97FB991F61F09F3FC8 -:105DF00079F087950895121613061406551FF2CFF1 -:105E00004695F1DF08C0161617061806991FF1CF40 -:105E100086957105610508940895E894BB27662767 -:105E20007727CB0197F908957CDF08F48FEF089569 -:105E30000BD0C0CFB1DF28F0B6DF18F0952309F002 -:105E400094CFA7CF1124EACFC6DFA0F3959FD1F35B -:105E5000950F50E0551F629FF001729FBB27F00D18 -:105E6000B11D639FAA27F00DB11DAA1F649F66276D -:105E7000B00DA11D661F829F2227B00DA11D621FBC -:105E8000739FB00DA11D621F839FA00D611D221F76 -:105E9000749F3327A00D611D231F849F600D211D5A -:105EA000822F762F6A2F11249F5750408AF0E1F0FD -:105EB00088234AF0EE0FFF1FBB1F661F771F881F46 -:105EC00091505040A9F79E3F510570F04ECFA6CF9C -:105ED0005F3FECF3983EDCF3869577956795B79531 -:105EE000F795E7959F5FC1F7FE2B880F911D96955B -:105EF000879597F90895FA01EE0FFF1F3096210557 -:105F0000310599F16115710561F48038BFE39B0794 -:105F100049F168949038810561F08038BFEF9B07A4 -:105F200041F0992342F5FF3FE1053105210511F1CB -:105F3000E8940894E795D901AA2329F4AB2FBE2F42 -:105F4000F85FD0F310C0FF5F70F4A695E0F7F73963 -:105F500050F019F0FF3A38F49F779F930CD00F90D0 -:105F600007FC905808953EF014CF60E070E080E8A0 -:105F70009FE308954FE79F775F934F933F932F934E -:105F80009ED02F913F914F915F9152DF05C019F440 -:105F90000EF0EBCE42CFFDCE26DFC8F39638C0F729 -:105FA00007F80F92E8942BE33AEA48EB5FE74EDFFD -:105FB0000F920F920F924DB75EB70F92C0D0E8E2EA -:105FC000F1E016D04F915F91EF91FF91E595EE1FB3 -:105FD000FF1F49F0FE57E0684427EE0F441FFA9573 -:105FE000E1F74195550B32D00F9007FE26C008957A -:105FF000DF93CF931F930F93FF92EF92DF927B017A -:106000008C01689405C0DA2EEF011EDFFE01E894D2 -:10601000A5912591359145915591AEF3EF0106DD9E -:10602000FE019701A801DA9479F7DF90EF90FF90D5 -:106030000F911F91CF91DF9108959B01AC0160E01A -:1060400070E080E89FE349CD90CE95CECCDEE8F3BA -:106050009923D9F3940F511DBBF39150504094F004 -:1060600059F0882332F0660F771F881F91505040F7 -:10607000C1F79E3F510544F7880F911D969587956E -:1060800097F908955F3FACF0983E9CF0BB2786954A -:1060900077956795B79508F4B1609395C1F7BB0FF5 -:1060A00058F711F460FFE8CF6F5F7F4F8F4F9F4F1E -:1060B000E3CFB4CE0EF05FCE6CCE689456CE93DEB6 -:1060C000C8F39923D1F3C6F3DF93CF931F930F93B4 -:1060D000FF92C92FDD2788232AF02197660F771FAB -:1060E000881FDAF720E030E040E85FEB9FE3883973 -:1060F00020F0803E30F021968F7787DCE0E5F1E0FC -:1061000003C083DCEDE7F1E073DF8B01BE01EC013E -:10611000FB2E6F5771097595771F880B990B78DDEA -:1061200028E132E741E35FE38FDEAF2D9801AE0156 -:10613000FF900F911F91CF91DF9178DC3BCEFA0158 -:10614000DC01AA0FBB1F9B01AC01BF5728F422271B -:106150003327442750781FC0B75188F4AB2F002451 -:10616000469537952795011CA395D2F3002069F039 -:10617000220F331F441FB395DAF30DD045CC6130A5 -:106180007105A0E88A07B94630F49B01AC01662787 -:10619000772788279078309621F0208331834283B7 -:1061A00053830895AA1BBB1B51E107C0AA1FBB1F45 -:1061B000A617B70710F0A61BB70B881F991F5A9593 -:1061C000A9F780959095BC01CD01089597FB072E06 -:1061D00016F4009407D077FD09D00E94D23007FC56 -:1061E00005D03EF4909581959F4F089570956195E7 -:1061F0007F4F0895EE0FFF1F0590F491E02D099455 -:10620000F999FECF92BD81BDF89A992780B508957E -:10621000A8E1B0E042E050E00C942831262FF99933 -:10622000FECF92BD81BDF89A019700B4021639F0F5 -:106230001FBA20BD0FB6F894FA9AF99A0FBE0895C6 -:106240000196272F0E940F310C940E31DC01CB01F7 -:10625000FC01F999FECF06C0F2BDE1BDF89A319676 -:1062600000B40D9241505040B8F70895F894FFCF14 -:1062700052D02445000000410000DC4400000041F1 -:1062800052D0A4440000404100005C4400000041A2 -:1062900048F17644000000415C978A4400000041C8 -:1062A0001FD592440000004152D0A4440000004198 -:1062B0005CFFB844000000410AA7CF440000004141 -:1062C0000000DC44000000410AA7CF440000004168 -:1062D0000000DC440000004100000000000080409D -:1062E00000005C45000040410000000000008040CC -:1062F00052D02445000040410AA7CF44000000418D -:106300000000DC440000004100000000000080406C -:1063100052D02445000040410000000000008040B1 -:1063200000005C45000040410AA7CF440000004146 -:106330000000DC440000004100000000000080403C -:1063400052D0244500004041000000000000804081 -:106350000AA74F45000040410AA7CF440000004172 -:106360000000DC440000004100000000000080400C -:1063700052D0244500000041000000000000804091 -:106380005CFF384500000041000000000000804034 -:1063900052D02445000000410AA7CF44000000412C -:1063A0000000DC44000000410000000000008040CC -:1063B00052D024450000804152D024450000404185 -:1063C0005C970A450000004152D0A44400000041FF -:1063D0000000DC44000000415C970A450000A04139 -:1063E000640007000CFF0000003F646214F014CD4D -:1063F000149914651401014F042808140A321E0070 -:1064000002040507090B0C0E1011131517181A1C9E -:106410001D1F2123242628292B2D2F3032343537D8 -:10642000393B1F0F03764F5F6F7F496943790959E5 -:1064300053633149803F5D8B803FF8BF803FCAE1A5 -:10644000803F73ED803FCAE1803FF8BF803F5D8BA6 -:10645000803F3149803F0000803FF16D7F3F75EA0A -:106460007E3F4C827E3F833F7E3F84287E3F833F3A -:106470007E3F4C827E3F75EA7E3FF16D7F3F00009C -:10648000803F404D3639FA09AD0977093E09D108F8 -:10649000EA0803091C0901020304050607080900AC -:00000001FF diff --git a/keyboard/planck/keymaps/dzobert/compiled.hex b/keyboard/planck/keymaps/dzobert/compiled.hex deleted file mode 100644 index cb3972bc01..0000000000 --- a/keyboard/planck/keymaps/dzobert/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C290014001A0008001500FC -:1001E00017001C0018000C00120013002B00E00088 -:1001F00004001600070009000A000B000D000E00A5 -:100200000F0033002A00E2001D001B000600190049 -:100210000500110010003600370038002800C40027 -:10022000E500E300E10002202C002C00012050003A -:10023000510052004F002B0014001A000900130057 -:100240000A000D000F0018001C0033002B002900CD -:10025000040015001600170007000B00110008002D -:100260000C0012002A00E2001D001B00060019000D -:1002700005000E0010003600370038002800C300CB -:10028000E500E300E10002202C002C0001205000DA -:10029000510052004F003A003B003C003D003E0040 -:1002A0003F0040004100420043004400450001007F -:1002B0001E001F0020002100220023002400250032 -:1002C00026004C000000010035002D002E003400F7 -:1002D00034022F0230022F003000310001000100F3 -:1002E00001000100010001000100010001204A009D -:1002F0004B004E004D00660046004700480053008A -:1003000074007600650024002500260054000100DA -:10031000AA00A900A80039009B007A0079002100FA -:10032000220023005500010049007B007C007D0075 -:100330003100260027001E001F002000560001008B -:10034000010001000100022001000100010027005E -:10035000630058005700280354006800650020001F -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/experimental/compiled.hex b/keyboard/planck/keymaps/experimental/compiled.hex deleted file mode 100644 index 76984a07cc..0000000000 --- a/keyboard/planck/keymaps/experimental/compiled.hex +++ /dev/null @@ -1,1645 +0,0 @@ -:100000000C948F050C94D3050C94D3050C94D30554 -:100010000C94D3050C94D3050C94D3050C94D30500 -:100020000C94D3050C94D3050C94F9190C94CB1AA9 -:100030000C942D280C94D3050C94D3050C94D30563 -:100040000C94D3050C9486060C94D3050C94D3051C -:100050000C94D3050C9495280C94D3050C94D305DB -:100060000C94D3050C94D3050C94D3050C94D305B0 -:100070000C94D3050C94D3050C94D3050C94D305A0 -:100080000C94DB0F0C94D3050C94D3050C94D3057E -:100090000C94D3050C94D3050C94D3050C94D30580 -:1000A0000C94D3050C94D3050C94D305EE060007ED -:1000B000140726072E074407920792079207920714 -:1000C0009207920752078107381B5A1B481C5A1B7C -:1000D000481C9F1BC21B481C171C2A1C141F141FE2 -:1000E000431F431F821FA21FF820F820AD1FF820D6 -:1000F0005D205D20C420CD20F820F2206A206A20F7 -:100100006A206A206A206A206A206A206A206A209F -:100110006A206A206A206A206A206A207A20882061 -:100120008F209620A02007634236B79BD8A71A39A4 -:10013000685618AEBAAB558C1D3CB7CC5763BD6D35 -:10014000EDFD753EF6177231BF000000803F0800DC -:100150000000BE922449123EABAAAA2ABECDCCCC46 -:100160004C3E00000080BEABAAAAAA3E00000000E0 -:10017000BF000000803F0000000000084178D3BBB2 -:100180004387D1133D190E3CC3BD4282AD2B3E685F -:10019000EC8276BED98FE1A93E4C80EFFFBE01C450 -:1001A000FF7F3F0000000000000000000000000092 -:1001B000000000010204060A0F17202C3A4A5D7164 -:1001C000879DB3C7DAE9F5FCFFFCF5E9DAC7B39D13 -:1001D00087715D4A3A2C20170F0A060402010000BD -:1001E00000000000000000002B0014001A000800AE -:1001F000150017001C0018000C00120013002A0044 -:10020000290004001600070009000A000B000D0079 -:100210000E000F0033003400E1001D001B0006003B -:1002200019000500110010003600370038002800C2 -:100230000530E000E200E30003302C002C00043025 -:100240005000510052004F002B0014001A0009000A -:1002500013000A000D000F0018001C0033002A00D4 -:100260002900040015001600170007000B001100FC -:1002700008000C0012003400E1001D001B00060005 -:10028000190005000E001000360037003800280065 -:100290001450E000E200E30003302C002C00043096 -:1002A0005000510052004F002B0034003600370040 -:1002B00013001C0009000A00060015000F002A00A8 -:1002C000290004001200080018000C0007000B00B1 -:1002D0001700110016003800E100330014000D0073 -:1002E0000E001B00050010001A0019001D00280058 -:1002F0000530E000E200E30003302C002C00043065 -:100300005000510052004F0035021E021F02200211 -:1003100021022202230224022502260227022A00A9 -:100320004C003A003B003C003D003E003F002D02E7 -:100330002E022F0230023102010040004100420033 -:100340004300440045003202640201000100010044 -:100350000100010001000100010001000100010095 -:10036000AB00AA00A900AE0035001E001F0020004F -:1003700021002200230024002500260027002A0057 -:100380004C003A003B003C003D003E003F002D0089 -:100390002E002F00300031000100400041004200DB -:1003A000430044004500320032000100010001001A -:1003B0000100010001000100010001000100010035 -:1003C000AB00AA00A900AE001E001E001E001E0009 -:1003D0001E001E001E001E001E001E001E001E002D -:1003E000000014001A000800150017001C00180077 -:1003F0000C00120013002F0000000400160007007C -:1004000009000A000B000D000E000F00330034003D -:100410000D3000000000060019000000000011006F -:1004200010000000000000000000000000000000BC -: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 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E00000000000000000000100005001000100B6 -:1007F00001000100010001000100010001004C00A6 -:10080000010001000100205021501350125000300F -:10081000013002300C3001000100275026502350D7 -:10082000245028502950010001000100010001005E -:1008300001000100010001000100010001000100B0 -:1008400001000100010001000000000000000000A4 -:100850002A2B28000000000000000000000000001B -:1008600000000029000000002C1E34202122243426 -:100870002627252E362D3738271E1F2021222324F8 -:1008800025263333362E37381F0405060708090A94 -:100890000B0C0D0E0F101112131415161718191A30 -:1008A0001B1C1D2F3130232D350405060708090AAE -:1008B0000B0C0D0E0F101112131415161718191A10 -:1008C0001B1C1D2F3130354C0000000000000000C3 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000101010101010002 -:1008F00001010101000000000000000000000000F4 -:1009000000000100010001010101010101010101DB -:1009100001010101010101010101010101010101C7 -:1009200001010100000001010000000000000000C2 -:1009300000000000000000000000000000000000B7 -:100940000000000101010100280354006800650057 -:10095000200050006C0061006E0063006B002000FE -:100960004B006500790062006F0061007200640056 -:1009700000002C034F007200740068006F006C00D0 -:1009800069006E0065006100720020004B00650088 -:10099000790062006F006100720064007300000063 -:1009A0000403090409026D00040100A0FA0904000F -:1009B000000103010100092111010001223F00078C -:1009C00005810308000A090401000103010200096E -:1009D0002111010001224D000705820308000A09C8 -:1009E0000402000103000000092111010001223668 -:1009F000000705830308000A09040300010300003F -:100A000000092111010001223900070584031000AB -:100A1000011201100100000008EDFE6060010001FC -:100A200002000105010906A101050719E029E715E2 -:100A30000025019508750181020508190129059510 -:100A400005750191029501750391010507190029AA -:100A50007715002501957875018102C0050109808F -:100A6000A101850216010026B7001A01002AB7006D -:100A7000751095018100C0050C0901A101850316BF -:100A80000100269C021A01002A9C02751095018122 -:100A900000C005010902A1010901A1000509190110 -:100AA000290515002501950575018102950175033C -:100AB00081010501093009311581257F95027508ED -:100AC000810609381581257F950175088106050C79 -:100AD0000A38021581257F950175088106C0C00579 -:100AE000010906A101050719E029E715002501956F -:100AF0000875018102950175088101050819012910 -:100B00000595057501910295017503910105071978 -:100B10000029FF150025FF950675088100C01124E6 -:100B20001FBECFEFDAE0DEBFCDBF04B603FE24C0A8 -:100B300080915E0490915F04A0916004B091610483 -:100B40008730904BA740B04BB9F410925E041092DE -:100B50005F04109260041092610414BE84B7877F12 -:100B600084BF88E10FB6F894809360001092600013 -:100B70000FBEE0E0F8E3099513E0A0E0B1E0EEEB92 -:100B8000F4E602C005900D92A030B107D9F714E049 -:100B9000A0E0B3E001C01D92AE35B107E1F70E94BD -:100BA0003F170C945D320C94000081E00895089585 -:100BB0000C94AF070C94D5050C94D7050E94272EF2 -:100BC000811105C010920203109201030DC081E251 -:100BD00090E00090030302C0880F991F0A94E2F787 -:100BE000909302038093010382E08093000380913D -:100BF0006F00826080936F00089590916F0081E094 -:100C0000911101C080E008950E94272E23E030E07A -:100C1000281B3109220F209304030895282F2F98B1 -:100C200080918000211108C0877F809380001092FE -:100C30008D0010928C001BC0886080938000233050 -:100C400019F48FEF9FEF0FC083E090E0821B9109B2 -:100C5000880F991F2FEF3FEFA90102C056954795C6 -:100C60008A95E2F7CA0190938D0080938C000C94D2 -:100C70000406CF93C82F0E94FD05409103038823EB -:100C800029F090916F009D7F90936F00C0930303B4 -:100C90008823D1F0209101033091020302C03695E0 -:100CA00027954A95E2F72F733327C90102C0880FB1 -:100CB000991FCA95E2F790930203809301038091F4 -:100CC0006F00826080936F00CF9108950E940406A8 -:100CD00084E080930303109200030895279A2F98CD -:100CE0008FEF9FEF90938700809386008AE0809338 -:100CF000800089E1809381000E94902D0C9466060B -:100D00000E946E066E9A769A0C9497071F920F9225 -:100D10000FB60F9211242F933F938F939F93EF93CE -:100D2000FF93E0910103F0910203CF0101969093AC -:100D30000203809301030090030302C0F695E79538 -:100D40000A94E2F7EF7380910003823019F4E032E5 -:100D500051F404C0813039F4EF3329F480916F00ED -:100D60008D7F80936F00F0E0E855FE4FE49121E025 -:100D700031E0E29FC001E39F900D11240090040335 -:100D800002C0969587950A94E2F790938D00809320 -:100D90008C00FF91EF919F918F913F912F910F9038 -:100DA0000FBE0F901F901895CF93DF93EC010E9418 -:100DB0002E29BE0180E090E0DF91CF910C94232595 -:100DC0000F931F93462F50E04E30510508F0AAC0F4 -:100DD000DC01FA01EA5AFF4F0C94213212968C91F1 -:100DE000882309F49FC000E010E0980140E064E02F -:100DF00070E080ED91E00E94591381E090E011C015 -:100E000012968C91882309F48DC000E010E09801BF -:100E100040E066E070E080E691E00E94591382E0D5 -:100E200090E00E94D4067EC012968C91882309F42B -:100E300079C000E010E0980140E068E070E080E9EF -:100E400091E00E94591384E090E0EBCF12968C91D0 -:100E5000882311F083E007C083E013C012968C91C1 -:100E6000882371F084E00E94A02582E00E94390668 -:100E70000E94DE0540E164E083E00E94BE0D52C0A6 -:100E800084E00E94C125F6CF12968C91882331F020 -:100E900085EE0E94B81D0E94E72D44C085EE0E9499 -:100EA000801E40C012968C918823E1F10E940E0FA3 -:100EB00000E010E0980140E066E070E080E391E03F -:100EC0000E94591384E00E94C12583E00E94C1253D -:100ED00080E10E94C12585E00E94A0250E941B2977 -:100EE000811102C00E94F7280E94332990E090935C -:100EF0005D0480935C04806880935C040E943729C1 -:100F000011C012968C91882369F000E010E09801DE -:100F100040E066E070E080E091E00E94591385E0D7 -:100F20000E94C12580E090E01F910F9108950F93DA -:100F30001F932FEF89EF90E0215080409040E1F720 -:100F400000C0000000E010E0980140E065E070E0C3 -:100F500080EF91E00E9459131F910F9108958091A5 -:100F60001003882309F45AC080910E0390910F0357 -:100F70000E946B288D3291400CF450C010921003E7 -:100F80000E9414088091080390910903099781F445 -:100F900080910A0390910B03892B51F480910C03EB -:100FA00090910D03892B21F48AE592E00E941508A7 -:100FB0008091080390910903049791F480910A03AA -:100FC00090910B03469761F480910C0390910D036F -:100FD000892B31F48BE00E94B81D8BE00E94801EAB -:100FE00080910803909109030497C1F480910A034A -:100FF00090910B03469791F480910C0390910D030F -:10100000079761F483EE0E94B81D86E10E94B81D27 -:1010100086E10E94801E83EE0C94801E089581E07C -:1010200008950C940F08089508950F931F93CF937C -:101030008C01F80124912223F9F030E0F901E85BFA -:10104000F74FC491F901E853F74F2491222359F047 -:1010500081EE0E94B81D8C2F0E94B81D8C2F0E941B -:10106000801E81EE04C08C2F0E94B81D8C2F0E9420 -:10107000801E0F5F1F4FDDCFCF911F910F910895FD -:101080000C94800680915503882309F448C0809110 -:10109000110390911203009779F40E945F289093B6 -:1010A0001203809311038091130390E0009771F471 -:1010B0008091140390E00AC00E946B2820911802CE -:1010C000309119022817390740F329C00197880F7A -:1010D000991F880F991FFC01EB5EFC4F60817181A5 -:1010E000828193810E94410FE091130384E0E89F85 -:1010F000F0011124EB5EFC4F60817181828193814C -:101100004FE050E00E94F9128091130390E00196A5 -:101110006091140370E00E940D32809313030C94CD -:10112000D805109257030C940E0F0895089581E08E -:10113000809357030C949608089508958F929F9278 -:10114000AF92BF92EF92FF920F931F93CF93DF93D3 -:10115000CDB7DEB7A3970FB6F894DEBF0FBECDBFF5 -:101160007C01FC0100811181C8010E945C26B8014C -:101170000E94A00A8C01B7010E941108882309F47B -:10118000CCC10032F0E51F0741F4F70182818823CA -:1011900009F458C00E94F013C0C10132F0E51F07E6 -:1011A00041F4F7018281882309F44CC00E94F913AD -:1011B000B4C10232F0E51F0751F4F70182818823A0 -:1011C00009F440C00E94EC138111F0CFE3CF033249 -:1011D000F0E51F0739F4F7018281882399F10E9415 -:1011E00097089BC10432F0E51F0739F4F7018281AB -:1011F000882341F10E94910890C10532F0E51F0754 -:1012000049F4F70182818823E9F080915703811125 -:10121000F1CFE5CF0632F0E51F0739F4F7018281FF -:10122000882381F00E9400140AC00732F0E51F07EE -:1012300049F4F7018281882329F00E940B140E944F -:101240009D086BC180915703811105C0F701828110 -:101250008111CFC018C1003E110579F4F7018281D8 -:10126000882309F44DC00E940E0F81E0809356033D -:10127000109255031092140350C1023E110559F407 -:10128000F70182818823E1F10E940E0F109256032C -:101290001092550342C1033E110591F4F70182817A -:1012A000882371F10E940E0F1092560381E0809303 -:1012B00055031092130310921203109211032DC1C3 -:1012C0000235110559F4F7018281882309F425C1FB -:1012D00080911802909119020A970DC001351105ED -:1012E00079F4F7018281882309F417C180911802EB -:1012F000909119020A9690931902809318020DC1D9 -:1013000040911C0283E2E7E3F2E0DE0111960190D6 -:101310000D928A95E1F7F701808121E030E02C0FF2 -:101320003D1F280F311DC90120911A0230911B0267 -:10133000FC01E20FF31F6081772767FD7095640F52 -:10134000711D882777FD8095982F0E942F2F20E010 -:1013500030E040E451E40E94942E4B015C01F7011F -:10136000218184E090E0821B9109BC01882777FDF0 -:101370008095982F0E942F2F9B01AC01C501B401CD -:101380000E942C2E9B01AC0160E070E080E090E4B4 -:101390000E94A23020E030E04CED50E40E943F304B -:1013A0004B015C01F70182818823D1F04FE050E0CE -:1013B000C501B4010E94F912809156038823A1F05F -:1013C0008091140324E0829FF0011124EB5EFC4F16 -:1013D00080829182A282B3828F5F8093140304C0C3 -:1013E000C501B4010E94410F0F3F110508F02ECF37 -:1013F00094C08091100381111FC0043130E51307A0 -:1014000009F051C00E94130881E0809310030E94EC -:101410005F2890930F0380930E031092070310929E -:1014200009031092080310920B0310920A03109202 -:101430000D0310920C0371C080910E0390910F0365 -:101440000E946B28883C910570F480910703E82F77 -:10145000F0E0EE0FFF1FE85FFC4F118300838F5F0A -:10146000809307035AC0043880E5180721F0053837 -:10147000104501F13AC0F7018281882341F01092B2 -:10148000050382E01EC0043830E5130759F580914A -:101490000503811106C086E20E94B81D86E20E9403 -:1014A000801E82E01CC00438F0E51F0741F30538B8 -:1014B0001045D9F4F7018281882331F01092060398 -:1014C00080E20E94CF1E29C080910603811106C0D0 -:1014D00087E20E94B81D87E20E94801E80E20E947F -:1014E000D61E1BC00538104529F381E08093050303 -:1014F00080930603C701A3960FB6F894DEBF0FBE14 -:10150000CDBFDF91CF911F910F91FF90EF90BF90D2 -:10151000AF909F908F900C94DA0580E0A3960FB661 -:10152000F894DEBF0FBECDBFDF91CF911F910F9119 -:10153000FF90EF90BF90AF909F908F900895089587 -:101540009CE0799FF001112490E3899FE00DF11D4B -:101550001124E60FF11DEE0FFF1FE851FE4F85919C -:1015600094910895880F991FFC01E859FF4F8591C8 -:1015700094910895880F991FFC01E851FE4F8591C1 -:10158000949108950F931F93CF93DF93EC018115EE -:1015900021E39207A0F5C11580E3D80708F0D7C072 -:1015A000C83ED105D8F4C03ED10508F007C2C83AFC -:1015B000D10578F4C53AD10508F06AC0C130D1052B -:1015C00009F463C008F4F7C1C430D10508F0F6C1CE -:1015D000F2C1CB3BD10508F466C0EDC1C11590E264 -:1015E000D90708F0AFC0C11521E0D20708F0E6C165 -:1015F000C03FD10508F4DFC18E0110651FC2C0389D -:1016000080E5D80700F5C03790E5D90708F0A3C0FA -:10161000C11520E5D20709F4ACC050F4CE019054B6 -:1016200080319F4008F0C7C1DF708E01106A06C28A -:10163000C13080E5D80709F4AEC0C43190E5D907C0 -:1016400008F4AFC0B8C1C33820E5D20709F48EC092 -:1016500050F4C13890E5D90709F482C008F083C07E -:1016600000E011EDEBC1C03181E5D80708F4A3C15A -:10167000C11597E5D90708F436C1CE0190578115F9 -:10168000904108F098C1DF7093C101E010E0D6C12D -:10169000C53AD10509F494C1C63AD10509F093C100 -:1016A00002E810E4CBC1C83AD10509F48FC1C93AA8 -:1016B000D10509F48EC1CA3AD10509F48DC1CB3ADE -:1016C000D10509F48CC1CC3AD10509F48BC1CD3ACE -:1016D000D10509F48AC1C03BD10509F489C1CE3ACC -:1016E000D10509F488C1CF3AD10509F487C1C13BBE -:1016F000D10509F486C1C23BD10509F485C1C33BBC -:10170000D10509F484C1C43BD10509F483C1C53BAB -:10171000D10509F482C1C63BD10509F481C1C73B9B -:10172000D10509F480C1C83BD10509F47FC1C93B8B -:10173000D10509F47EC1CA3BD10509F47DC100E0A1 -:1017400014E47CC1CE019F700E94BA0A78C1DD27E3 -:101750008E01106C73C1CF70DD278E01146D6EC1C8 -:1017600000E010ED6BC100E012ED68C100E013ED88 -:1017700065C10E9463210E940E0F0E9495088FEFA1 -:1017800094E32CE0815090402040E1F700C000003D -:101790000E94BA2853C18091320481608093320440 -:1017A0004DC10E941B29811102C00E94F7280E948E -:1017B000332990E090935D0480935C04C23080E50F -:1017C000D80721F480915C04816086C0C43090E524 -:1017D000D90721F480915C0482607EC0C63020E588 -:1017E000D20721F480915C04846076C0C83080E523 -:1017F000D80719F480915C0427C0CA3090E5D90756 -:1018000021F480915C04806167C0CC3020E5D20770 -:1018100021F480915C0480625FC0CE3080E5D807FF -:1018200021F480915C04806457C0C03190E5D907F1 -:1018300021F480915C0480684FC0C23120E5D2075A -:1018400029F480915C048460886046C0C33080E5E0 -:10185000D80721F480915C048E7F3EC0C53090E5AE -:10186000D90721F480915C048D7F36C0C73020E514 -:10187000D20721F480915C048B7F2EC0C93080E5B3 -:10188000D80719F480915C0426C0CB3090E5D907C5 -:1018900021F480915C048F7E1FC0CD3020E5D207FB -:1018A00021F480915C048F7D17C0CF3080E5D8078C -:1018B00021F480915C048F7B0FC0C13190E5D90782 -:1018C00021F480915C048F7707C0C331D04531F497 -:1018D00080915C048B7F877F80935C0480915C04A3 -:1018E0000E943729ABC08D2F99278F70992781309F -:1018F0009105D9F49E012370332702C0880F991FE8 -:101900002A95E2F79C688E0144E0000F111F4A956A -:10191000E1F700271370802B912B53E0CC0FDD1FD4 -:101920005A95E1F7C076DD272FC08230910531F45A -:10193000DC2FCC278E01016F106A80C083309105A7 -:1019400069F4CE018370992701E010E002C0000F16 -:10195000111F8A95E2F7C8019C680FC08430910579 -:10196000B9F4CE018370992701E010E002C0000FA6 -:10197000111F8A95E2F7C8019A6823E0CC0FDD1F9A -:101980002A95E1F7C07ED7708C010C2B1D2B56C019 -:101990008530910531F4DC2FCC278E01046F106A5D -:1019A0004DC0069709F04AC0CF71DD27DC2FCC2748 -:1019B0008E01106243C000E010E040C08E013EC0C6 -:1019C00001E810E43BC003E810E438C002EE14E480 -:1019D00035C009EE14E432C00AEE14E42FC005EB62 -:1019E00014E42CC006EB14E429C007EB14E426C071 -:1019F0000CEC14E423C00DEC14E420C003E815E45F -:101A00001DC00AE815E41AC002E915E417C004E98C -:101A100015E414C001E216E411C003E216E40EC09E -:101A200004E216E40BC005E216E408C006E216E480 -:101A300005C007E216E402C00AE216E4C801DF911D -:101A4000CF911F910F9108959CE0799FF00111248F -:101A500090E3899FE00DF11D1124E60FF11DEE0FBB -:101A6000FF1FE851FE4F85919491803E9105E0F46F -:101A7000803C910558F58133910509F46FC048F415 -:101A80008932910509F463C08A32910509F46DC069 -:101A900072C089339105E9F082389105D1F0853320 -:101AA000910509F44DC067C0833E910581F138F47A -:101AB000803E9105B9F0823E9105D9F05CC0863E2A -:101AC000910561F1873E9105A1F155C00E94B20ACE -:101AD000089520915C0420FD02C021FF4CC080EEDF -:101AE00090E049C080915C0480FFF9CF89E390E0E9 -:101AF00042C080915C0482FF0EC080915C0484FF30 -:101B000003C080E090E037C083EE90E034C0809165 -:101B10005C0482FFF2CF82EE90E02DC080915C04E5 -:101B200083FF0BC080915C0484FDEBCF87EE90E0D7 -:101B300022C080915C0483FFF5CF86EE90E01BC04D -:101B400080915C0485FF07C089E290E014C0809119 -:101B50005C0485FFF9CF85E390E00DC080915C04C3 -:101B600086FF07C08AE290E006C080915C0486FF91 -:101B7000F9CF81E390E00E94C20A0895CF92DF92EC -:101B8000EF92FF920F931F9301E010E020E030E00E -:101B90006801790104C0CC0CDD1CEE1CFF1C8A9589 -:101BA000D2F704C0000F111F221F331F6A95D2F70E -:101BB0000C291D292E293F29C0901504D090160408 -:101BC000E0901704F0901804C022D122E222F32200 -:101BD000842FC016D106E206F30641F41F910F913F -:101BE000FF90EF90DF90CF900C94A0251F910F9164 -:101BF000FF90EF90DF90CF900C94C1250C94DC0502 -:101C0000E82FF0E0E257FD4F8081E82FEF70F0E021 -:101C100082958F7021E030E0A90102C0440F551F6A -:101C20008A95E2F740A308950F931F93CF93DF9314 -:101C300085B7806885BF85B7806885BFC3E0D0E081 -:101C400001E010E0FE01E257FD4F8081E82FEF70C8 -:101C5000F0E021A182958F70A80102C0440F551FAA -:101C60008A95E2F7CA01822B81A38C2F0E94000E75 -:101C7000219740F78BE090E061E070E0FC01EE57C7 -:101C8000FD4F2081E22FEF70F0E042A122952F70EE -:101C9000DB0102C0AA0FBB1F2A95E2F79D01242B8E -:101CA00022A3019758F7DF91CF911F910F910C94C8 -:101CB0004008EF92FF920F931F93CF93DF9300E6BC -:101CC00013E0C3E0EE24E394F12CD5E08C2F0E94C6 -:101CD000000E8BE090E040E050E0FC01EE57FD4F3D -:101CE0006081E62FEF70F0E020A130E062956F7028 -:101CF00002C0359527956A95E2F720FD09C0970146 -:101D0000082E02C0220F331F0A94E2F7422B532BF6 -:101D1000019718F7F801929182918F018417950726 -:101D200021F051834083D0931D028C2F0E94000E1E -:101D3000C15060F680911D0287FD2CC081508093B8 -:101D40001D028F3F39F08FE99FE00197F1F700C046 -:101D5000000020C080915E0390915F039093670321 -:101D60008093660380915C0390915D03909365037B -:101D70008093640380915A0390915B039093630373 -:101D8000809362038091580390915903909361036B -:101D9000809360030E94420881E0DF91CF911F9100 -:101DA0000F91FF90EF900895E82FF0E0EE0FFF1FE6 -:101DB000E05AFC4F80819181089508950F931F93FD -:101DC000CF9308E613E0C0E0F801929182918F0171 -:101DD0000E94D727C80FF3E000361F07A9F78C2F02 -:101DE000CF911F910F9108950E941B29811102C06C -:101DF0000E94F7280E944529809347043E9A8091CB -:101E000071008D7F8093710082E0809390008AE161 -:101E10008093910081E080936A03089580916A0322 -:101E2000811102C00E94F40E1092BA031092B903FD -:101E3000809171008D7F80937100809190008F73ED -:101E40008093900010927C0310927B031092B30356 -:101E50001092B4031092B5031092B6031092B2031D -:101E60001092B103E1E9F3E0A1E8B3E0119211921D -:101E7000119211921D921D9283E0E13BF807B1F798 -:101E80000895CF92DF92EF92FF920F931F93CF931B -:101E9000DF9320917B03222309F484C06B017C0132 -:101EA00080916A03811102C00E94F40E01EB13E0DD -:101EB000C7E0D0E0A7019601F8019291829172915A -:101EC00062918F010E94902E811131C0FE01EE0FB0 -:101ED000FF1FEE0FFF1FEF56FC4F10821182128280 -:101EE0001382DE01AA0FBB1FAF57BC4F11961C9285 -:101EF0001E92C730D105E9F0219644815581668153 -:101F000077814083518362837383148215821682A2 -:101F1000178212968D919C91139711969C938E9394 -:101F200013961C921E92129734961296E2CF219726 -:101F300008F68091B9039091BA03019797FD05C007 -:101F40009093BA038093B90304C01092BA0310921D -:101F5000B9038091B9039091BA032091B7033091EE -:101F6000B8032817390724F01092B8031092B7036A -:101F7000892BC1F4809171008D7F809371008091D5 -:101F800090008F73809390001092B3031092B4036B -:101F90001092B5031092B6031092B2031092B103DF -:101FA00010927B03DF91CF911F910F91FF90EF90E3 -:101FB000DF90CF9008951F920F920FB60F921124C9 -:101FC0004F925F926F927F928F929F92AF92BF9249 -:101FD000CF92DF92EF92FF922F933F934F935F93B5 -:101FE0006F937F938F939F93AF93BF93CF93DF9321 -:101FF000EF93FF9380917B03882309F49BC1C091E9 -:10200000B903D091BA031C161D060CF093C1409081 -:102010006B0350906C0360906D0370906E0320E032 -:1020200030E0A901C301B2010E943B3018160CF048 -:1020300065C0C130D10509F452C08091B7039091B9 -:10204000B803BE010E940D327C019093B8038093C7 -:10205000B70380907D0390907E03A0907F03B090A3 -:10206000800320E030E040E85FE3C501B4010E9456 -:102070002C2E60937D0370937E0380937F03909357 -:102080008003F701EE0FFF1FEE0FFF1FEF56FC4F0F -:10209000A301920160817181828193810E94942EBB -:1020A00020E030E040E05EE30E943F309B01AC0165 -:1020B000C501B4010E943B3018168CF4C70101968B -:1020C000BE010E940D329093B8038093B703109223 -:1020D0007D0310927E0310927F0310928003E091A3 -:1020E000B703F091B803EE0FFF1FEE0FFF1FEF567F -:1020F000FC4F6081718182819381D0C0C090B30315 -:10210000D090B403E090B503F090B60320E030E047 -:10211000A901C701B6010E94902E2197882309F4D6 -:10212000A2C0FE01EE0FFF1FEE0FFF1FEF56FC4F88 -:1021300080809180A280B380A5019401C701B6017F -:102140000E94902E87FF31C0A501940160E070E0ED -:102150008CED93EC0E94942E20E030E040E451E4BA -:102160000E94942E20E030E040E05FE30E943F3088 -:102170009B01AC0160E070E080E090E40E94A2303E -:102180009B01AC01C501B4010E943F309B01AC0131 -:10219000C701B6010E94902E87FF07C0A7019601D4 -:1021A00060E070E08CED93E439C0A5019401C701B3 -:1021B000B6010E943B3018160CF055C0A5019401E1 -:1021C00060E070E08CED93E40E94942E20E030E01B -:1021D00040E451E40E94942E20E030E040E05FE3D0 -:1021E0000E943F309B01AC0160E070E080E090E431 -:1021F0000E94A2309B01AC01C501B4010E943F3096 -:102200009B01AC01C701B6010E943B3018165CF57A -:10221000A701960160E070E08CED93EC0E94942E93 -:1022200020E030E040E451E40E94942E20E030E0D1 -:1022300040E05FE30E943F309B01AC0160E070E052 -:1022400080E090E40E94A2309B01AC01C701B6017E -:102250000E943F306093B3037093B4038093B5033F -:102260009093B60313C0FE01EE0FFF1FEE0FFF1F8A -:10227000EF56FC4F80819181A281B3818093B3039B -:102280009093B403A093B503B093B6036091B303E6 -:102290007091B4038091B5039091B60320916803C7 -:1022A000309169032F3F4FEF340731F02F5F3F4FDD -:1022B00030936903209368030E9416146B017C011C -:1022C00020E034E244EF51E40E94902E87FF08C0E2 -:1022D00086EFC82E88E2D82E84EFE82E81E4F82E0F -:1022E00020E030E040E051E4C701B6010E943F30F9 -:1022F0009B01AC0160E074E284E79BE40E94942EB1 -:102300006B017C010E94012F7093970060939600EF -:1023100020911E0230911F02409120025091210213 -:10232000C701B6010E943F300E94012F70939900AF -:102330006093980080917C03882309F433C1C09096 -:102340007703D0907803E0907903F0907A0320E04F -:1023500030E0A901C701B6010E943B301816D4F540 -:1023600080916803909169038F3F2FEF920729F0C6 -:1023700001969093690380936803C701B6010E9498 -:10238000161420E030E040E051E40E943F309B0111 -:10239000AC0160E074E284E79BE40E94942E6B0140 -:1023A0007C010E94012F709397006093960020910A -:1023B0001E0230911F024091200250912102C7015C -:1023C000B6010E943F300E94012F709399006093E4 -:1023D000980008C0109297001092960010929900F1 -:1023E0001092980060917103709172036F5F7F4F3C -:1023F000709372036093710320919600309197005F -:1024000080E090E0232BF1F0C0919600D0919700EE -:102410000E942D2F6B017C01BE0180E090E00E94A4 -:102420002D2F9B01AC016091730370917403809117 -:102430007503909176030E94942E20E03FEF4FE7C2 -:1024400057E410C00E942D2F6B017C0120E030EE7C -:102450004FEF54E46091730370917403809175039E -:10246000909176030E943F309B01AC01C701B601F9 -:102470000E943B3087FD96C080916F038F5F8093F1 -:102480006F0390E020914304309144048217930736 -:10249000A0F080914E04882319F010926F030DC0B4 -:1024A000809171008D7F80937100809190008F7377 -:1024B0008093900010927C037DC080917003C09146 -:1024C0006F03811128C0C0904804D0904904E09067 -:1024D0004A04F0904B0420E030E0A901C701B601A6 -:1024E0000E943B301816BCF481E080937003109278 -:1024F0007703109278031092790310927A03C092B6 -:102500007303D0927403E0927503F0927603C15086 -:10251000C0936F0343C0109270031092690310922E -:102520006803E0914504F091460448E0C49FE00D43 -:10253000F11D112480819181A281B3818093770361 -:1025400090937803A0937903B0937A0320E030E06E -:1025500040E85EE364817581868197810E943F3007 -:102560006B017C0180912202682F70E080E090E096 -:102570000E942D2F20E030E048EC52E40E94942E7F -:102580009B01AC01C701B6010E943F306093730309 -:102590007093740380937503909376031092720383 -:1025A000109271038091470480FD04C010927C0357 -:1025B00010927B03FF91EF91DF91CF91BF91AF918B -:1025C0009F918F917F916F915F914F913F912F914B -:1025D000FF90EF90DF90CF90BF90AF909F908F9043 -:1025E0007F906F905F904F900F900FBE0F901F9055 -:1025F0001895CF92DF92EF92FF92CF93DF936B010A -:102600007C01EA0180916A03811102C00E94F40EEC -:102610008091470480FF46C08091B9039091BA032E -:1026200008970CF03FC0809171008D7F80937100FE -:1026300080917C0381110E940E0F81E080937B03C7 -:10264000109269031092680320E030E0A901C701ED -:10265000B6010E943B301816DCF48091B9039091CA -:10266000BA03FC01EE0FFF1FEE0FFF1FEF56FC4FEA -:10267000C082D182E282F382FC01EE0FFF1FEF578E -:10268000FC4FD183C08301969093BA038093B90322 -:1026900080917100826080937100809190008068C9 -:1026A00080939000DF91CF91FF90EF90DF90CF90DB -:1026B00008958F929F92AF92BF92CF92DF92EF9246 -:1026C000FF920F931F93CF93DF93EC017B01D42EE6 -:1026D0004801590180916A03811102C00E94F40EE1 -:1026E0008091470480FF6BC0809171008D7F809343 -:1026F000710080917B0381110E940E0F81E0809315 -:102700007C03D0934604C0934504F0924404E092C5 -:102710004304D0924E048092480490924904A092BF -:102720004A04B0924B0410927D0310927E031092E3 -:102730007F031092800310926F0388819981AA8190 -:10274000BB818093770390937803A0937903B09330 -:102750007A0320E030E040E85EE36C817D818E8189 -:102760009F810E943F306B017C0180912202682F83 -:1027700070E080E090E00E942D2F20E030E048ECF7 -:1027800052E40E94942E9B01AC01C701B6010E9445 -:102790003F30609373037093740380937503909339 -:1027A000760310927203109271038091710082601F -:1027B0008093710080919000806880939000DF91F9 -:1027C000CF911F910F91FF90EF90DF90CF90BF902E -:1027D000AF909F908F9008958091470481700895E5 -:1027E000809147048160809347040E9449290C949A -:1027F0009C08809147048E7F809347040C9449295C -:102800008091BB0390E0019666E070E00E940D327B -:102810008093BB0308958091BB0390E0019766E02D -:1028200070E00E940D328093BB0308958F929F92B7 -:10283000AF92BF92CF92DF92EF92FF920F931F93CE -:10284000CF93DF936B017C01C0916803D091690342 -:10285000BE0180E090E00E942D2F4B015C01A7019A -:10286000960160E070E08CE594E40E94942E9B0158 -:10287000AC01C501B4010E943F300E94012F20919C -:10288000BB03233009F473C028F4222351F0213014 -:10289000E9F02CC1243009F4A0C0253009F4E0C0CF -:1028A00025C180E090E0A0E0BFE380931E029093FA -:1028B0001F02A0932002B093210210926B0310928A -:1028C0006C0310926D0310926E0310C110926B0393 -:1028D00010926C0310926D0310926E0364317105B7 -:1028E00040F46A30710560F520E030E040E85EE3D6 -:1028F0002BC0693C710508F0AAC080E090E00E94FE -:102900002D2F20E030E040EA51E40E942B2E20E001 -:1029100030E044E353E40E94942E9B01AC010E94FA -:102920003F3020E030E040E05EE30E943F309B011A -:10293000AC0160E070E080E09EE30E942B2E44C07A -:1029400020E030E040E05FE3C701B6010E943F3085 -:102950006B017C0180E090E0A0E0BEE380931E026A -:1029600090931F02A0932002B0932102BFC0109247 -:102970006B0310926C0310926D0310926E034AE089 -:10298000469F9001479F300D1124C90168EB7BE001 -:102990000E94F931BC016C5D754077FF03C07195F1 -:1029A00061957109882777FD8095982F0E942F2FB8 -:1029B0002EE333EC4EE259E30E943F3020E030E05A -:1029C00040EC5EE30E942C2E60931E0270931F0267 -:1029D000809320029093210289C010926B03109281 -:1029E0006C0310926D0310926E03CE0183709927D1 -:1029F000892BE1F0BE016170772780E090E00E94B2 -:102A00002D2F20E030E040E05EE30E943F3020E0E8 -:102A100030E040E45FE30E942C2E60931E0270932E -:102A20001F0280932002909321020CC080E090E06E -:102A3000A0E0BFE380931E0290931F02A0932002A8 -:102A4000B0932102C770DD27CD2B09F04FC0109243 -:102A50001E0210921F02109220021092210246C004 -:102A600010926B0310926C0310926D0310926E0320 -:102A700000E010E020E03FE300931E0210931F02ED -:102A800020932002309321026739710578F180E0AC -:102A900090E00E942D2F20E030E047E153E40E94B7 -:102AA0002B2E20E030E04AE754E40E94942E20E0F0 -:102AB00030E048E452E40E943F3020E030E040EA59 -:102AC00051E40E94712F0E94FC2E660F771F660F43 -:102AD000771FFB01EE56FD4F2081318142815381EA -:102AE000C701B6010E943F306B017C01C701B601EE -:102AF000DF91CF911F910F91FF90EF90DF90CF90DA -:102B0000BF90AF909F908F9008958091CC030895CF -:102B1000CF93DF9300D01F92CDB7DEB79C01809199 -:102B20005304843019F593E099833B832A8390936F -:102B3000E9008FEF9091E800815095FD06C095ED7A -:102B40009A95F1F700008111F5CF8091E80085FF9B -:102B50000DC040E050E063E070E0CE0101960E94BD -:102B6000E9178091E8008E778093E8000F900F902E -:102B70000F90DF91CF910895CF93DF9300D01F92F4 -:102B8000CDB7DEB720915304243021F522E029830C -:102B90009B838A8383E08093E9008FEF9091E80024 -:102BA000815095FD06C095ED9A95F1F700008111D1 -:102BB000F5CF8091E80085FF0DC040E050E063E074 -:102BC00070E0CE0101960E94E9178091E8008E77AF -:102BD0008093E8000F900F900F90DF91CF910895B0 -:102BE000209153042430F1F422E02093E9002FEFE8 -:102BF0003091E800215035FD06C035ED3A95F1F7EA -:102C000000002111F5CF2091E80025FF0BC040E026 -:102C100050E065E070E00E94E9178091E8008E774F -:102C20008093E8000895CF93DF93EC0190915304D3 -:102C3000943009F046C080912D028823D9F080910C -:102C40002E028823B9F09093E9008FEF9091E8006D -:102C5000815095FD06C095E19A95F1F7000081112C -:102C6000F5CF8091E80085FF2CC040E050E060E1A6 -:102C700070E017C081E08093E9008FEF9091E80049 -:102C8000815095FD06C095ED9A95F1F700008111F0 -:102C9000F5CF8091E80085FF14C040E050E068E087 -:102CA00070E0CE010E94E9178091E8008E77809352 -:102CB000E80080E1FE01ACEBB3E001900D928A9553 -:102CC000E1F7DF91CF91089580915204811109C0FD -:102CD0000E947E190E94DB198091E200846080933B -:102CE000E2000895109252040895089508950C94F6 -:102CF000222842E061EC81E00E94F81842E061EC99 -:102D000082E00E94F81842E061EC83E00E94F8182B -:102D100042E161EC84E00C94F81880915504833012 -:102D200009F455C030F4813071F0823009F48EC05E -:102D300008958A3009F47AC08B3009F460C0893074 -:102D400009F09CC020C080915404813A09F096C0DB -:102D50008091E800877F8093E800809158049091EB -:102D60005904892B21F460E18CEB93E003C060E00F -:102D700080E090E070E00E9434188091E8008B774A -:102D80008093E800089580915404813209F076C060 -:102D90008091580490915904009719F0039709F015 -:102DA0006DC08091E800877F8093E8008091E80003 -:102DB00082FD05C0809153048111F8CF5FC08091DE -:102DC000F1008093CC038091E8008B7753C0809111 -:102DD0005404813A09F052C08091580490915904EA -:102DE000892B09F04BC08091E800877F8093E80031 -:102DF0008091E80080FFFCCF80912D0236C0809149 -:102E000054048132D9F58091580490915904892B4A -:102E1000A9F58091E800877F8093E8000E942D1932 -:102E20008091560480932D020C9463218091540468 -:102E3000813221F58091E800877F8093E8000E942D -:102E40002D19809157048093CD03089580915404E7 -:102E5000813AA1F48091E800877F8093E800809117 -:102E6000E80080FFFCCF8091CD038093F10080913A -:102E7000E8008E778093E8000C942D19089584B7AC -:102E8000877F84BF88E10FB6F8948093600010922A -:102E900060000FBE90E080E80FB6F8948093610068 -:102EA000909361000FBE0E94D01C0E947E190E9468 -:102EB000DB198091E20084608093E20078940E94A4 -:102EC000611C0E94D21C83E292E00E947C1C8091D3 -:102ED0005304853069F40E94E327809151048823CC -:102EE000B1F30E941128882391F30E94D317EFCFEA -:102EF0000E94DA1CECCF292F332723303105C9F08B -:102F000064F42130310581F02230310509F043C0ED -:102F10008DE690E024EA39E042C021323105F1F03B -:102F20002232310541F137C082E190E021E13AE0FF -:102F300036C099278130910541F08230910541F0EA -:102F4000892B49F5E0EAF9E005C0E2E7F9E002C0C3 -:102F5000E8E4F9E0849190E09F0121C06430D8F466 -:102F6000E62FF0E0EE0FFF1FE251FD4F208131818F -:102F700089E090E014C0643070F470E0FB01EE0F63 -:102F8000FF1FEA51FD4F20813181FB01EE51FD4FC2 -:102F9000808190E004C080E090E020E030E0FA0121 -:102FA00031832083089580E189BD82E189BD09B420 -:102FB00000FEFDCF8091D8008F7D8093D800809156 -:102FC000E00082608093E0008091E00081FDFCCF12 -:102FD0000895CF92DF92EF92FF920F931F93CF93BA -:102FE000DF93EC018B016A010E944C19811133C0FF -:102FF000C114D10439F0F60180819181081B190BAD -:10300000C80FD91FE12CF12C0115110519F1809180 -:10301000E80085FD16C08091E8008E778093E80077 -:10302000C114D10449F0F60180819181E80EF91EA6 -:10303000F182E08285E00FC00E944C19882321F3C1 -:103040000AC089918093F10001501109FFEFEF1A36 -:10305000FF0ADACF80E0DF91CF911F910F91FF90AF -:10306000EF90DF90CF90089520915A0430915B0447 -:103070002617370748F06115710539F42091E800EB -:103080002E772093E80001C0B90140E06115710579 -:10309000A9F120915304222309F443C0253009F4F7 -:1030A00042C02091E80023FD40C02091E80022FDAD -:1030B00032C02091E80020FFE9CF4091F300209139 -:1030C000F20030E0342BFC01CF016115710559F09D -:1030D0002830310540F481918093F10061507109ED -:1030E0002F5F3F4FF1CF41E02830310509F040E03C -:1030F0002091E8002E772093E800C8CF4111C9CF76 -:103100000AC080915304882361F0853061F080917A -:10311000E80083FD0AC08091E80082FFF2CF80E0E2 -:10312000089582E0089583E0089581E00895209154 -:103130005A0430915B042617370748F06115710572 -:1031400039F42091E8002E772093E80001C0B901FE -:10315000FC0120E06115710591F1809153048823F1 -:1031600009F440C0853009F43FC08091E80083FD38 -:103170003DC08091E80082FD2FC08091E80080FF73 -:10318000E9CF2091F3008091F20090E0922B61153D -:10319000710559F08830910540F424912093F10095 -:1031A0003196615071090196F2CF21E0089709F03C -:1031B00020E08091E8008E778093E800CBCF21114A -:1031C000CCCF0AC080915304882361F0853061F030 -:1031D0008091E80083FD0AC08091E80082FFF2CF71 -:1031E00080E0089582E0089583E0089581E00895E5 -:1031F000982F973058F59093E900981739F070910F -:10320000EC002091ED005091F00003C0242F762FA8 -:1032100050E021FF19C03091EB003E7F3093EB006E -:103220003091ED003D7F3093ED003091EB00316047 -:103230003093EB007093EC002093ED005093F0007E -:103240002091EE0027FF07C09F5FD3CF8F70809340 -:10325000E90081E0089580E008958091540487FF9B -:1032600011C08091E80082FD05C080915304811156 -:10327000F8CF11C08091E8008B770BC08091530488 -:10328000882349F08091E80080FFF8CF8091E80022 -:103290008E778093E80008952091E4003091E50056 -:1032A00095E64091EC00842F817040FF22C0809110 -:1032B000E80080FD1CC080915304882391F0853084 -:1032C00091F08091EB0085FD10C04091E400509199 -:1032D000E5004217530729F39A01915011F784E052 -:1032E000089582E0089583E0089581E0089580E0E4 -:1032F00008954091E80042FFDECF08950E94EC1946 -:103300000E94F419E0EEF0E0808181608083E8EDB6 -:10331000F0E080818F77808319BCA7EDB0E08C91BD -:103320008E7F8C9380818F7E8083109252040895CB -:103330000F931F93CF93DF930E94EC190E94F4190F -:10334000C8EDD0E088818F77888388818068888302 -:1033500088818F7D888319BC1092530410924F048A -:10336000109251041092500400EE10E0F801808198 -:103370008B7F808388818160888342E060E080E089 -:103380000E94F818E1EEF0E080818E7F8083E2EE0B -:10339000F0E0808181608083808188608083F80193 -:1033A00080818E7F8083888180618883DF91CF9147 -:1033B0001F910F910895E8EDF0E080818F7E80836A -:1033C000E7EDF0E080818160808384E082BF81E06E -:1033D000809352040C949819E8EDF0E080818E7F80 -:1033E00080831092E20008951092DA001092E100BA -:1033F00008951F920F920FB60F9211242F933F93AF -:103400004F935F936F937F938F939F93AF93BF93EC -:10341000EF93FF938091E10082FF0BC08091E20067 -:1034200082FF07C08091E1008B7F8093E1000E94C2 -:10343000601C8091DA0080FF1FC08091D80080FF5F -:103440001BC08091DA008E7F8093DA008091D900D2 -:1034500080FF0DC080E189BD82E189BD09B400FE15 -:10346000FDCF81E0809353040E94641605C019BC0F -:10347000109253040E9472168091E10080FF19C0DF -:103480008091E20080FF15C08091E2008E7F8093E2 -:10349000E2008091E20080618093E2008091D80098 -:1034A00080628093D80019BC85E0809353040E9409 -:1034B00076168091E10084FF30C08091E20084FFA5 -:1034C0002CC080E189BD82E189BD09B400FEFDCF39 -:1034D0008091D8008F7D8093D8008091E1008F7E0D -:1034E0008093E1008091E2008F7E8093E2008091E2 -:1034F000E20081608093E20080914F04882311F004 -:1035000084E007C08091E30087FD02C081E001C034 -:1035100083E0809353040E9477168091E10083FF3B -:1035200029C08091E20083FF25C08091E100877F60 -:103530008093E10082E08093530410924F048091C5 -:10354000E1008E7F8093E1008091E2008E7F809386 -:10355000E2008091E20080618093E20042E060E05E -:1035600080E00E94F8188091F00088608093F0005D -:103570000E947516FF91EF91BF91AF919F918F912E -:103580007F916F915F914F913F912F910F900FBE5F -:103590000F901F9018951F920F920FB60F92112443 -:1035A0002F933F934F935F936F937F938F939F934B -:1035B000AF93BF93CF93DF93EF93FF93C091E90055 -:1035C000CF708091EC00D82FD17080FDD0E81092A0 -:1035D000E9008091F000877F8093F00078940E944A -:1035E0000F1B1092E9008091F00088608093F0003A -:1035F000CD2BCF70C093E900FF91EF91DF91CF9178 -:10360000BF91AF919F918F917F916F915F914F91FA -:103610003F912F910F900FBE0F901F9018951F9301 -:10362000CF93DF93CDB7DEB7AA970FB6F894DEBF7E -:103630000FBECDBFE4E5F4E088E08E0F9091F1007D -:1036400091938E13FBCF0E948D168091E80083FF2B -:103650001FC18091540490915504492F50E04A3085 -:10366000510508F015C1FA01EC59FF4F0C942132B5 -:10367000803881F0823809F00BC1809158048F7036 -:103680008093E9008091EB0085FB882780F91092F8 -:10369000E90006C08091500490915104911182601C -:1036A0009091E800977F9093E8008093F10010924A -:1036B000F100C8C0282F2D7F09F0EAC0882319F037 -:1036C000823061F0E5C080915604813009F0E0C09D -:1036D000933009F080E0809351042BC08091560410 -:1036E000811127C0809158048F7009F4D1C0809354 -:1036F000E9002091EB0020FF1CC0933021F4809161 -:10370000EB00806214C09091EB0090619093EB000D -:1037100021E030E0A90102C0440F551F8A95E2F76D -:103720004093EA001092EA008091EB008860809359 -:10373000EB001092E9008091E800877F86C081113C -:10374000A7C0109156041F778091E3008078812BE9 -:103750008093E3008091E800877F8093E8000E94D7 -:103760002D198091E80080FFFCCF8091E3008068F4 -:103770008093E300111102C082E001C083E08093D6 -:10378000530486C08058823008F082C0809156046D -:10379000909157048C3D53E0950779F583E08A8337 -:1037A0008AE289834FB7F894DE01139620E03EE069 -:1037B00051E2E32FF0E050935700E49120FF03C063 -:1037C000E295EF703F5FEF708E2F90E0EA3010F0DF -:1037D000C79601C0C0968D939D932F5F243149F702 -:1037E0004FBF8091E800877F8093E8006AE270E035 -:1037F000CE0101960E94341814C0AE014F5F5F4F96 -:10380000609158040E947B17BC01009709F440C0E6 -:103810009091E800977F9093E80089819A810E94B7 -:1038200097188091E8008B778093E80031C080384A -:1038300079F58091E800877F8093E80080914F04BC -:103840008093F1008091E8008E778093E8000E94D9 -:103850002D191EC081111CC0909156049230C0F4E5 -:103860008091E800877F8093E80090934F040E9446 -:103870002D1980914F04811106C08091E30087FDCE -:1038800002C081E001C084E0809353040E94791655 -:103890008091E80083FF0AC08091E800877F8093D1 -:1038A000E8008091EB0080628093EB00AA960FB64F -:1038B000F894DEBF0FBECDBFDF91CF911F91089569 -:1038C0000895CF93809153048823A1F0C091E9001B -:1038D000CF709091EC00892F817090FD80E8C82B0B -:1038E0001092E9008091E80083FD0E940F1BCF70C9 -:1038F000C093E900CF9108959093D3038093D203AE -:103900000895E091D203F091D303309721F0019014 -:10391000F081E02D099480E00895E091D203F091C8 -:10392000D303309721F00280F381E02D09940895AC -:10393000E091D203F091D303309721F00480F58118 -:10394000E02D099408952091D0033091D10382177E -:10395000930771F09093D1038093D003E091D20349 -:10396000F091D303309721F00680F781E02D099480 -:1039700008952091CE033091CF038217930771F001 -:103980009093CF038093CE03E091D203F091D303C1 -:10399000309721F00084F185E02D09940895089571 -:1039A0000C94CF1C0E9456280E94140E0E94DC2802 -:1039B0000C94902D5F926F927F928F929F92AF9214 -:1039C000BF92CF92DF92EF92FF920F931F93CF930C -:1039D000DF9300D000D01F92CDB7DEB70E94590E02 -:1039E0009DEDC92E93E0D92E03E010E0AA24A39404 -:1039F000B12C502E802F0E94D40E4C01F6017290F3 -:103A000062906F016826792661147104A1F4015057 -:103A1000110978F78FEF89838A831B820E945F28C0 -:103A20008160782F9D838C8349815A816B818D8140 -:103A30000E948A1D38C08091320481FD0E94DD0EF3 -:103A40002BE030E07501022E02C0EE0CFF1C0A9440 -:103A5000E2F7C70186219721892B09F129835A8230 -:103A60008E209F2091E0892809F490E09B830E949A -:103A70005F288160782F9D838C8349815A816B8177 -:103A80008D810E948A1D000F111FF801EB52FC4F1F -:103A900080819181E826F926F182E08204C02150DC -:103AA000310980F6B4CF0E94C82A1091D4030E9435 -:103AB000811C1817D1F00E94811C8093D4030F90B1 -:103AC0000F900F900F900F90DF91CF911F910F915A -:103AD000FF90EF90DF90CF90BF90AF909F908F902E -:103AE0007F906F905F900C94FE0D0F900F900F9051 -:103AF0000F900F90DF91CF911F910F91FF90EF905A -:103B0000DF90CF90BF90AF909F908F907F906F90FD -:103B10005F900895CF93DF93CDB7DEB72B970FB6A5 -:103B2000F894DEBF0FBECDBF4F83588769877A8771 -:103B30008B87DE01119686E0FD0111928A95E9F7E7 -:103B400085E0FE01379601900D928A95E1F7498153 -:103B50005A816B817C818D819E810E9401242B96EC -:103B60000FB6F894DEBF0FBECDBFDF91CF910895A1 -:103B7000CF93882309F4C2C0C82F823859F40E9419 -:103B8000811C81FDBBC089E30E94DB260E94A8271F -:103B900089E30CC0833879F40E94811C80FDAEC09B -:103BA00083E50E94DB260E94A82783E50E941D274B -:103BB000CF910C94A827843859F40E94811C82FD6F -:103BC0009DC087E40E94DB260E94A82787E4EECFF1 -:103BD0008CEF8C0F813A48F48C2F0E94F82C8111C5 -:103BE0008DC08C2F0E94DB26E3CF80E28C0F8830C3 -:103BF00048F4C77081E001C0880FCA95EAF70E94B7 -:103C00006127D6CF8BE58C0F833078F4C53A29F045 -:103C1000C63A31F083E890E005C081E890E002C048 -:103C200082E890E0CF910C94A31C88E58C0F83313F -:103C300008F064C0C83A39F1C93A41F1CA3A49F1C9 -:103C4000CB3A51F1CC3A59F1CD3A61F1C03B69F12F -:103C5000CE3A71F1CF3A79F1C13B81F1C23B89F1A2 -:103C6000C33B91F1C43B99F1C53BA1F1C63BA9F11E -:103C7000C73BB1F1C83BB9F1C93BC1F1CA3BC9F17E -:103C800080E090E038C082EE90E035C089EE90E0B0 -:103C900032C08AEE90E02FC085EB90E02CC086EB1E -:103CA00090E029C087EB90E026C08CEC90E023C028 -:103CB0008DEC90E020C083E891E01DC08AE891E09F -:103CC0001AC082E991E017C084E991E014C081E252 -:103CD00092E011C083E292E00EC084E292E00BC059 -:103CE00085E292E008C086E292E005C087E292E0B9 -:103CF00002C08AE292E0CF910C94B91CCF91089552 -:103D0000882309F44BC0823859F40E94811C81FF3A -:103D100045C089E30E94DB260E94A82789E30CC0E6 -:103D2000833871F40E94811C80FF38C083E50E94B3 -:103D3000DB260E94A82783E50E941D270C94A82754 -:103D4000843859F40E94811C82FF28C087E40E94B5 -:103D5000DB260E94A82787E4EFCF9CEF980F913ACB -:103D600058F390E2980F983050F4877091E001C0BA -:103D7000990F8A95EAF7892F0E946727DFCF9BE585 -:103D8000980F933020F480E090E00C94A31C885AA4 -:103D9000833120F480E090E00C94B91C08958823CE -:103DA00021F00E9461270C94A8270895882321F010 -:103DB0000E9467270C94A82708957F928F929F9264 -:103DC000AF92BF92CF92DF92EF92FF920F931F9329 -:103DD000CF93DF931F92CDB7DEB77C01C62E772E2F -:103DE000FC01058102950F70128111110E947E273E -:103DF0000E94D426882379F0112369F080E28C0D8B -:103E0000883048F082E00E94BD260E94D42691E0CE -:103E1000D82ED92601C0D12CE72DE295EF70F0E025 -:103E2000E259FF4F0C942132872D807F072D0F70B0 -:103E3000882311F00295007F112389F0002309F4F3 -:103E400099C180E28C0D883020F4802F0E94612778 -:103E500003C0802F0E9471270E94A8278BC18C2D40 -:103E60000E94801E002309F4C3C180E28C0D8830BB -:103E700020F4802F0E94672703C0802F0E9477279D -:103E80000E94A827B5C1872D807F972D9F70803213 -:103E900011F4892F03C0892F8295807FCC2021F0D7 -:103EA000F1E0CF16A1F01DC0112339F0002319F164 -:103EB000013009F50E9491279BC1002319F00130C0 -:103EC00009F496C189830E949427898110C1112326 -:103ED00021F0063008F08CC10EC0053008F088C112 -:103EE00006C1112359F0002331F0F701958190FFAD -:103EF00041C19F7095830E94CF1E7AC1002309F4AF -:103F0000F6C03EC1872D86958695837090E0009718 -:103F100019F0019761F06CC1112321F08C2D972DC0 -:103F2000937002C080E090E00E94A31C61C1112345 -:103F300021F08C2D972D937002C080E090E00E94BC -:103F4000B91C56C18C2D112319F00E94D02902C032 -:103F50000E94382A0E94BD2A4BC1872D837009F028 -:103F600052C0111145C18C2D829586958770880F9E -:103F7000880F9C2D9F70892E912CA12CB12C082E7E -:103F800004C0880C991CAA1CBB1C0A94D2F7C4FE5E -:103F900014C00FE010E020E030E0B901A80104C037 -:103FA000440F551F661F771F8A95D2F7CB01BA01C0 -:103FB000609570958095909503C060E070E0CB01AE -:103FC000272D26952695237030E02230310569F0A3 -:103FD0002330310589F0682979298A299B292130E4 -:103FE000310571F00E94492503C1682979298A2980 -:103FF0009B290E946525FCC00E944925C501B4018A -:104000000E942D25F5C0112319F0872D817001C064 -:104010008695882309F4ECC08C2D8295869587704F -:10402000880F880F9C2D9F70892E912CA12CB12C6C -:10403000082E04C0880C991CAA1CBB1C0A94D2F739 -:10404000C4FE14C00FE010E020E030E0B901A80188 -:1040500004C0440F551F661F771F8A95D2F7CB0106 -:10406000BA01609570958095909503C060E070E00E -:10407000CB01272D269526952370422F50E0423004 -:10408000510569F04330510589F0682979298A2959 -:104090009B294130510571F00E942326A9C068294F -:1040A00079298A299B290E943F26A2C00E942326A3 -:1040B000C501B4010E9407269BC08C2D90E0FC0135 -:1040C000E05EF109E531F10508F050C0E258FF4F1C -:1040D0000C9421320C2D0F70872D8F71112321F03C -:1040E0000E94A025802F07CF0E94C125802F0E940B -:1040F000D61E7EC0112341F0053008F079C0872D0F -:104100008F710E94E62574C0063008F071C0F7CFA9 -:10411000112339F0872D8F710E94A02569C01123CA -:10412000C9F3872D8F710E94C12562C0112329F028 -:10413000872D8F710E948B255BC00E94812558C0FE -:10414000112351F0172D1F71812F0E94A02563E0CC -:10415000812F0E94B4264CC081E00E94BD2602300F -:1041600008F446C082E00E94BD2642C0112331F00F -:10417000002381F28C2D0E94B81D3AC0002389F2E1 -:104180008C2D0E94801E34C0472D4F706C2DC701AE -:104190000E94E0060E94A5242BC0111129C0472DC2 -:1041A0004F7050E042305105B9F04CF441155105C3 -:1041B00081F041305105E1F40E94B82D19C043301F -:1041C000510569F04430510599F48C2D0E940A2E56 -:1041D0000FC00E94A12D0CC00E94D42D09C00E94C6 -:1041E000E72D06C0472D4F706C2DC7010E949F0A16 -:1041F000DD20F9F00E94B02680FD1BC0F70112827D -:104200000E94AA260E94A025C7010E9428210E9480 -:10421000AA260F90DF91CF911F910F91FF90EF9001 -:10422000DF90CF90BF90AF909F908F907F900C9435 -:10423000C1250F90DF91CF911F910F91FF90EF90CB -:10424000DF90CF90BF90AF909F908F907F90089518 -:104250000F931F93CF93DF93EC01888199812B817A -:104260003C81232BB9F09F3F11F48F3F99F0CE0191 -:104270000E949E08882371F0688179818A810E945A -:10428000A6268C010E945B260E942225B801CE0141 -:104290000E94DD1EDF91CF911F910F9108950E9422 -:1042A0007E270E948E270E9453270E94A8270E94E3 -:1042B0006E2B0E94BD2A80E090E00E94A31C80E04B -:1042C00090E00C94B91C0E946E270C944F210E9420 -:1042D0009B26292F22952F7030E02C3031054CF48D -:1042E0002A3031056CF42250310922303105A8F40E -:1042F00007C02C30310569F02F30310551F00DC069 -:10430000803F69F018F4803E40F409C0843F29F4EE -:1043100006C093FB882780F9089580E0089581E026 -:104320000895CF93DF9300D000D01F92CDB7DEB7B2 -:104330000F900F900F900F900F90DF91CF910895F5 -:10434000CF93DF9300D000D000D0CDB7DEB7269654 -:104350000FB6F894DEBF0FBECDBFDF91CF910895A9 -:104360001F93CF93DF93C091DD0316E08091DE03AE -:10437000C81799F0D0E01C9FF0011D9FF00D11248B -:10438000E152FC4F4081518162817381848195812A -:104390000E94A0212196C770E9CFDF91CF911F9194 -:1043A000089540910F045091100460911104709190 -:1043B000120480911304909114040C94A021809114 -:1043C000140482958F7009F054C0809111048823E1 -:1043D00009F44FC08091DD03A091DE0360910F04CA -:1043E000709110044091120450911304B6E08A17A2 -:1043F00009F43FC090E041155105C1F17F3F11F430 -:104400006F3FA1F1B89FF001B99FF00D1124E15267 -:10441000FC4F218172132AC02081621327C02281A0 -:10442000211124C0238134812417350710F4215031 -:104430003109241B350B283C3105C0F420911404AC -:104440002F7020612093140426E0289FF001299FFB -:10445000F00D1124EC51FC4F80818F7080618083BE -:104460008FE094E00E9428210C94B021019687707F -:10447000BECF0895CF92DF92EF92FF920F931F93DA -:10448000CF93DF93CDB7DEB762970FB6F894DEBF58 -:104490000FBECDBF8C0185E0F801DE011D960190B5 -:1044A0000D928A95E1F7D8014C9111965C91119784 -:1044B00012966C9112971396CD90DC9014973091D0 -:1044C0000F047091100480911204909113040097CE -:1044D00009F46BC17F3F19F43F3F09F466C1E090D6 -:1044E0001104EE2009F4C0C020911404C816D906A6 -:1044F00028F0F601E81BF90BCF0104C080959095D8 -:104500008C0D9D1DFF24F394883C910578F0F12CCF -:10451000207F09F0C6C07C2DD98AC88A89890E946B -:1045200091218FE094E00E942821B1C0822F807FEA -:1045300009F046C0751314C0341312C0611110C0C5 -:104540002F702061209314040E94D1218FE094E009 -:104550000E94282180911404D80115968C932EC0B6 -:10456000CD2819F15F3F11F44F3FF9F0F62E61119C -:104570001CC08091DD032091DE0336E0821709F430 -:104580005AC090E0389FF001399FF00D1124E1529C -:10459000FC4F7181571306C07081471303C07281AD -:1045A000711103C001968770E9CFF62E662309F4D6 -:1045B00018C180911404816080931404F12C11C1FE -:1045C000751308C0341306C0611104C0809114042F -:1045D000D801C3C04D875E878D859E856A8B0E94FA -:1045E00067216A898823E1F16623D1F120911404BF -:1045F000822F82958F7090E0029774F080910F0463 -:104600009091100498878F831986DB86CA862C8741 -:10461000CE0107960E94282186E0F801AFE0B4E0C1 -:1046200001900D928A95E1F70E94DF210E94D1212D -:10463000FF24F394D6C04D875E878D859E850E94AA -:104640009B26292F22952F7030E0223031050CF067 -:10465000BCC09F7009F0B6C0805E883008F4C1C04D -:10466000C8010E942821E4CFC816D90608F453C017 -:10467000F601E81BF90BCF01883C910508F450C006 -:10468000F12C7C2DD98AC88A89890E949121EFE07A -:10469000F4E086E0DF011D928A95E9F70E94D121BE -:1046A000A0C0751314C0341312C0611110C08091E2 -:1046B0001404F8018583C8010E94282186E0EFE0F8 -:1046C000F4E0DF011D928A95E9F7FE2C8AC04D8740 -:1046D0005E878D859E856A8B0E9467216A89882303 -:1046E00009F4BECF662309F4BBCF20911404822FB6 -:1046F00082958F7090E002970CF48ECF80910F041A -:10470000909110049A8389831B82DD82CC822E8350 -:10471000CE0101967FCF809590958C0D9D1DACCFDD -:10472000F62E662309F49CCF75132EC034132CC0CB -:104730002091140420FD1FC0822F82958F70D9F024 -:10474000D80115962C9315978F3049F08F5F982FCD -:104750009295907F822F8F70892B15968C93C8012C -:104760000E94282186E0F801AFE0B4E001900D92AC -:104770008A95E1F793CF86E0F801AFE0B4E00190CD -:104780000D928A95E1F72DC04D875E878D859E85B8 -:104790000E946721811140CF809114048160809331 -:1047A0001404C8010E9428211CC0662309F458CFB4 -:1047B0004D875E878D859E850E946721882309F439 -:1047C0004FCF2ACF811148CF0CC0243031050CF0D7 -:1047D00047CF9F7009F440CFF8019581907F09F091 -:1047E0003BCF8F2D62960FB6F894DEBF0FBECDBFC4 -:1047F000DF91CF911F910F91FF90EF90DF90CF90BD -:1048000008951F93CF93DF93CDB7DEB72C970FB6E4 -:10481000F894DEBF0FBECDBF4F83588769877A8774 -:104820008B879C87CE0107960E943A22882369F0E5 -:104830008F8198852A853B85232BF1F19F3F09F0D5 -:1048400063C08F3F09F060C037C086E0FE01379635 -:10485000DE01119601900D928A95E1F76F817885BE -:10486000EA85FB85309741F17F3F11F46F3F21F1DD -:104870002091DE0330E0C9010196877099274091AD -:10488000DD0350E08417950709F447C069837A83F4 -:10489000FD83EC8396E0929FD001939FB00D11248D -:1048A000A152BC4FFE01319601900D929A95E1F70D -:1048B0008093DE030E94B02116E08091DD03909189 -:1048C000DE038917C1F1189FC001112481529C4F4A -:1048D0000E943A22882379F1E091DD031E9FF001C6 -:1048E0001124E152FC4F40815181628173818481A6 -:1048F00095810E94A0218091DD0390E00196877050 -:1049000099278093DD03D9CF4F81588569857A85B2 -:104910008B859C850E94A021CFCF0E94632110929D -:10492000DE031092DD03EFE0F4E086E0DF011D928C -:104930008A95E9F7C1CF2C960FB6F894DEBF0FBE6B -:10494000CDBFDF91CF911F910895EF92FF920F930A -:104950001F93CF93DF938C01009709F46CC0F12C67 -:10496000EE24E394E8012196F8018491843740F421 -:10497000843008F051C0813081F0823019F15BC081 -:10498000853709F444C0A8F19CE7980F903708F0E8 -:1049900052C08F770E94801E41C00E5F1F4FFE01E4 -:1049A000C49180E28C0F883048F4C7708E2D01C00E -:1049B000880FCA95EAF70E94812714C08C2F0E94A5 -:1049C000B81D2DC00E5F1F4FFE01C49180E28C0FF9 -:1049D000883058F4C7708E2D01C0880FCA95EAF749 -:1049E0000E9487270E94A8271AC08C2F0E94801E31 -:1049F00016C00E5F1F4FFE01C491CC2381F08FE9DA -:104A00009FE00197F1F700C00000C150F6CF0E5FA4 -:104A10001F4FFE01F49003C00E94B81D8E018F2D20 -:104A2000882309F49FCFEFE9FFE03197F1F700C049 -:104A300000008150F5CFDF91CF911F910F91FF9032 -:104A4000EF90089508956093190470931A04809369 -:104A50001B0490931C040C944F210F931F930091FF -:104A6000190410911A0420911B0430911C04DC01DC -:104A7000CB01802B912BA22BB32B80931904909305 -:104A80001A04A0931B04B0931C041F910F910C9463 -:104A90004F210F931F930091190410911A04209134 -:104AA0001B0430911C04DC01CB0180239123A22341 -:104AB000B3238093190490931A04A0931B04B0931A -:104AC0001C041F910F910C944F210F931F93009181 -:104AD000190410911A0420911B0430911C04DC016C -:104AE000CB0180279127A227B327809319049093A5 -:104AF0001A04A0931B04B0931C041F910F910C94F3 -:104B00004F2110921504109216041092170410925F -:104B100018040C944F2141E050E060E070E004C0C4 -:104B2000440F551F661F771F8A95D2F740931504CF -:104B30005093160460931704709318040C944F213B -:104B400041E050E060E070E004C0440F551F661F74 -:104B5000771F8A95D2F78091150490911604A09141 -:104B60001704B0911804482B592B6A2B7B2B4093C8 -:104B700015045093160460931704709318040C9452 -:104B80004F2141E050E060E070E004C0440F551F49 -:104B9000661F771F8A95D2F740955095609570955E -:104BA0008091150490911604A0911704B0911804F7 -:104BB000482359236A237B234093150450931604FA -:104BC00060931704709318040C944F2141E050E057 -:104BD00060E070E004C0440F551F661F771F8A9580 -:104BE000D2F78091150490911604A0911704B0910A -:104BF0001804482759276A277B27409315045093A8 -:104C0000160460931704709318040C944F210F93AB -:104C10001F930091150410911604209117043091F0 -:104C20001804DC01CB01802B912BA22BB32B80939A -:104C3000150490931604A0931704B09318041F91C1 -:104C40000F910C944F210F931F9300911504109115 -:104C500016042091170430911804DC01CB01802345 -:104C60009123A223B3238093150490931604A09359 -:104C70001704B09318041F910F910C944F210F93B8 -:104C80001F93009115041091160420911704309180 -:104C90001804DC01CB0180279127A227B32780933A -:104CA000150490931604A0931704B09318041F9151 -:104CB0000F910C944F210895CF92DF92EF92FF92C3 -:104CC0000F931F93CF93DF938C01C0901904D09062 -:104CD0001A04E0901B04F0901C048091150490913C -:104CE0001604A0911704B0911804C82AD92AEA2AF8 -:104CF000FB2ACFE1D0E0D701C6010C2E04C0B69547 -:104D0000A795979587950A94D2F780FF06C0B801BA -:104D10008C2F0E94240D019721F4219760F780E0E9 -:104D200001C08C2FDF91CF911F910F91FF90EF90D9 -:104D3000DF90CF900895CF93DF93EC010E945C2623 -:104D4000BE010E94240DDF91CF910895CB010E94F6 -:104D50009B26089580911D048595859585950895D8 -:104D600080911D048770089598E0899F9001112417 -:104D7000262B20931D040C94A02520911D048095C2 -:104D8000822380931D04982F977069F430E0482F98 -:104D9000552747FD50952417350729F085958595AA -:104DA00085950C94C125089590911D04977081E01C -:104DB00009F480E0089590912D02992321F09091BB -:104DC0002E02911109C020912F0230913002F90179 -:104DD00032969FEF40E01FC0982F96959695969536 -:104DE0009F3050F5E0912F02F0913002E90FF11D54 -:104DF000877021E030E0A90102C0440F551F8A9559 -:104E0000E2F7CA019181892B818308959F3F39F090 -:104E10004F5F4E3041F051915813F8CF0DC05111F2 -:104E2000F7CF942FF5CF9F3F39F0F901E90FF11D2E -:104E300097FDFA9582830895089590912D02992304 -:104E400021F090912E02911109C020912F023091F2 -:104E50003002F9013296205F3F4F1FC0982F969580 -:104E6000969596959F30F0F4E0912F02F0913002E4 -:104E7000E90FF11D877021E030E0A90102C0440F65 -:104E8000551F8A95E2F7CA01809591818923818314 -:104E900008953196E217F30729F090819813F9CF1E -:104EA0001082F7CF089581E090E0E0912F02F09119 -:104EB0003002E80FF91F1082019680319105A9F7A1 -:104EC000089590913104892B809331040895809541 -:104ED0009091310489238093310408951092310414 -:104EE000089590913004892B809330040895809523 -:104EF00090913004892380933004089510923004F7 -:104F0000089590912F04892B80932F040895809504 -:104F100090912F04892380932F04089510922F04D9 -:104F2000089580931E04089510921E0408958091A0 -:104F30002F0290913002FC0131969C01205F3F4F7F -:104F400080E0919191118F5FE217F307D1F70895F7 -:104F5000E0912F02F0913002809131048083E09142 -:104F60002F02F0913002908180913004892B808350 -:104F7000E0912F02F0913002908180912F04892BD3 -:104F8000808380911E04882361F0E0912F02F091CC -:104F900030029081892B80830E9497278111109283 -:104FA0001E0480912F02909130020C948D1C20E001 -:104FB000009739F0AC0141505109842395232F5FAC -:104FC000F7CF822F089580915304843039F11092E5 -:104FD000330420E488E190E00FB6F894A89580931C -:104FE00060000FBE2093600080E00E940E0680E00B -:104FF0000E94FE0D83B7817F846083BF83B7816089 -:1050000083BF7894889583B78E7F83BF88E10FB67E -:10501000F89480936000109260000FBE0895089588 -:10502000089580E00E940E060E940F280E94590EEB -:105030000E9410280E94DE0E91E0811101C090E0D4 -:10504000892F08950E94632180E00E940E060E942D -:10505000902D0E94811C0C94FE0D1F920F920FB692 -:105060000F9211248F939F93AF93BF93809133043A -:10507000811113C08091340490913504A0913604BD -:10508000B09137044196A11DB11D809334049093D3 -:105090003504A0933604B0933704BF91AF919F912C -:1050A0008F910F900FBE0F901F90189582E084BDD6 -:1050B00093E095BD9AEF97BD80936E0008952FB74A -:1050C000F8948091340490913504A0913604B09105 -:1050D00037042FBF0895CF92DF92EF92FF920F9384 -:1050E0001F932FB7F8944091340450913504609188 -:1050F0003604709137042FBF6A017B01EE24FF2430 -:105100008C0120E030E0C016D106E206F30610F470 -:10511000415051099A01281B390BC9011F910F9168 -:10512000FF90EF90DF90CF9008951F920F920FB6EF -:105130000F9211248F939F93AF93BF938091340468 -:1051400090913504A0913604B09137040196A11DC9 -:10515000B11D8093340490933504A0933604B0932A -:105160003704BF91AF919F918F910F900FBE0F9019 -:105170001F9018950E947E19F8942FEF87EA91E608 -:10518000215080409040E1F700C0000087E090EBA4 -:10519000DC0180935E0490935F04A0936004B0935D -:1051A00061049CE088E10FB6F894A89580936000B4 -:1051B0000FBE90936000FFCF0E941B29811102C097 -:1051C0000E94F7280E942629809332040E943329E6 -:1051D00080935C0487FB882780F980932E020E94CD -:1051E0002A29682F70E080E090E00C9423256DEE72 -:1051F0007EEF80E090E00E94473260E082E090E045 -:105200000E94353260E083E090E00E94353260E039 -:1052100084E090E00E94353260E085E090E00E94FA -:10522000353260E086E090E00E9435326FEF87E033 -:1052300090E00C94353280E090E00E942F3221E023 -:105240008D3E9E4F09F020E0822F089582E090E08D -:105250000C94273283E090E00C942732682F83E08F -:1052600090E00C94353284E090E00C942732682F63 -:1052700084E090E00C94353286E090E00C94273284 -:10528000682F86E090E00C94353287E090E00C9433 -:105290002732682F87E090E00C94353280913A04F1 -:1052A00080FF0BC06091340285E0689FB00111243B -:1052B00075956795759567952BC081FF09C06091BD -:1052C000340285E0689FB00111247595679520C070 -:1052D00082FF07C06091340285E0689FB00111240D -:1052E00017C090913B049923D1F060913302961737 -:1052F00088F72091340285E0289F90011124929F25 -:10530000A001939F500D112470E0CA010E940D323C -:105310006038710540F46115710539F002C065E02F -:1053200070E0862F08958FE7089581E008958091B9 -:105330003A0480FF08C06091320270E0759567956D -:105340007595679521C081FF06C06091320270E0BB -:105350007595679519C082FF04C06091320270E0B4 -:1053600010C090913B049923C1F0609131029617CF -:10537000A0F780913202899FC001112470E00E9441 -:105380000D326038710528F46115710521F0862F02 -:1053900008958FE7089581E0089561E070E0F4CF0B -:1053A000803F21F40E944E29819504C0813F29F459 -:1053B0000E944E2980933E040895823F21F40E946A -:1053C0004E29819504C0833F29F40E944E29809381 -:1053D0003D040895893F19F40E94972905C08A3F2A -:1053E00031F40E949729819580933F0408958B3F63 -:1053F00021F40E949729819504C08C3F29F40E94D2 -:105400009729809340040895843F21F480913C04BF -:10541000816017C0853F21F480913C04826011C0F7 -:10542000863F21F480913C0484600BC0873F21F4C7 -:1054300080913C04886005C0883F31F480913C0431 -:10544000806180933C0408958D3F21F480913A045B -:1054500081600BC08E3F21F480913A04826005C0C8 -:105460008F3F29F480913A04846080933A04089530 -:10547000803F39F480913E0487FF6CC010923E0457 -:1054800069C0813F29F480913E041816BCF362C0C4 -:1054900090913D04823F29F497FF5CC010923D0437 -:1054A00059C0833F19F41916CCF354C0893F41F415 -:1054B00080913F0418160CF04DC010923F044AC072 -:1054C0008A3F29F480913F0487FF44C0F6CF8B3F89 -:1054D00039F48091400487FF3DC0109240043AC0E7 -:1054E0008C3F29F4809140041816BCF333C0843FEC -:1054F00021F480913C048E7F17C0853F21F4809178 -:105500003C048D7F11C0863F21F480913C048B7F49 -:105510000BC0873F21F480913C04877F05C0883F02 -:1055200031F480913C048F7E80933C0413C08D3F06 -:1055300021F480913A048E7F0BC08E3F21F480913C -:105540003A048D7F05C08F3F29F480913A048B7F08 -:1055500080933A0480913D0481110EC080913E04F5 -:1055600081110AC080913F04811106C080914004DE -:10557000811102C010923B0408958CE394E00E94D4 -:10558000981C0E945F2890933904809338040895F2 -:105590001F93CF93DF9380913804909139040E9438 -:1055A0006B28AC0190913B04992321F020913502A6 -:1055B00030E006C0209136028AE0289F9001112435 -:1055C0004217530708F486C080913D04C0913E0401 -:1055D000D0913F0410914004811107C0C11176C0E1 -:1055E000D11174C0111172C075C09F3F19F09F5F37 -:1055F00090933B04181624F40E944E2980933D0496 -:1056000080913D0487FF05C00E944E2981958093BB -:105610003D041C1624F40E944E2980933E04809180 -:105620003E0487FF05C00E944E29819580933E0469 -:1056300060913D04662339F1C0913E04CC2319F1F9 -:10564000772767FD7095872F972F0E942F2F23E3D1 -:1056500033E343E35FE30E943F300E94FC2E6093FC -:105660003D046C2F772767FD7095872F972F0E9439 -:105670002F2F23E333E343E35FE30E943F300E9495 -:10568000FC2E60933E041D1624F40E9497298093FB -:105690003F0480913F0487FF05C00E9497298195B0 -:1056A00080933F04111624F40E94972980934004AC -:1056B0008091400487FF05C00E94972981958093BF -:1056C0004004DF91CF911F910C94BD2A9F3F09F0B8 -:1056D0008ECF96CFDF91CF911F910895ECE3F4E048 -:1056E00085E0DF011D928A95E9F710923B04109244 -:1056F0003A040895833081F128F4813059F08230E2 -:10570000D1F00895853009F449C0B8F1863009F424 -:1057100056C0089580913602262F30E0280F311DA3 -:105720002F3F310524F4680F6093360208958FEF00 -:1057300080933602089580913502262F30E0280F9D -:10574000311D2F3F310524F4680F60933502089511 -:105750008FEF80933502089580913402262F30E038 -:10576000280F311D2F3F310524F4680F6093340258 -:1057700008958FEF80933402089580913302262F8D -:1057800030E0280F311D2F3F310524F4680F60935E -:10579000330208958FEF809333020895809132028F -:1057A000262F30E0280F311D2F3F310524F4680FDC -:1057B0006093320208958FEF8093320208958091B2 -:1057C0003102262F30E0280F311D2F3F310524F400 -:1057D000680F6093310208958FEF8093310208952E -:1057E000833011F128F4813049F0823091F008952E -:1057F000853081F120F18630C1F108958091360223 -:10580000681720F4861B80933602089510923602A2 -:10581000089580913502681720F4861B8093350225 -:10582000089510923502089580913402681720F48B -:10583000861B80933402089510923402089580915B -:105840003302681720F4861B809333020895109268 -:105850003302089580913202681720F4861B8093EA -:105860003202089510923202089580913102681731 -:1058700020F4861B8093310208951092310208951E -:105880000F931F93873208F048C08E3108F08DC007 -:10589000803109F477C008F5873009F461C068F4F5 -:1058A000863009F09DC080913204817F8E7F809385 -:1058B000320481E08093420494C08B3009F489C0A3 -:1058C0008E3009F08DC08091320482FB222720F9AE -:1058D00091E0922790FB82F95EC0863109F479C08D -:1058E00060F4813109F07CC00E94632190912E0206 -:1058F00081E0892780932E026CC0893109F469C048 -:105900008B3109F06DC08091320481FB222720F990 -:1059100091E0922790FB81F93EC0883309F459C089 -:1059200050F4893209F457C0853309F454C08732E2 -:1059300009F451C055C0833409F44DC028F48A33AA -:1059400008F44EC0895332C0883409F049C00E941F -:1059500063210E940E0F0E9495080E94BA2839C048 -:1059600090913204892F8095817080FB90F929F005 -:10597000966098609093320434C0997F977F90939B -:10598000320427C08091320483FB222720F991E062 -:10599000922790FB83F9809332049923D1F0809170 -:1059A000320481608093320414C08D5141E050E094 -:1059B00060E070E08A019B0104C0000F111F221FEC -:1059C000331F8A95D2F7C901B8010E9423250E948E -:1059D000632181E006C061E070E080E090E0F5CFF7 -:1059E00080E01F910F91089580E0089580E0089570 -:1059F000CF93C82F80914204813069F018F0823033 -:105A0000C9F184C0E0912F02F0913002808182328E -:105A100009F07EC007C0E0912F02F0913002808132 -:105A2000823261F48C2F0E94F42C811104C08C2FDF -:105A30000E94402C1DC081E090E01AC08C2F0E9473 -:105A4000F62C811114C0C43179F048F4CB3079F0D0 -:105A5000C03109F061C082E08093420408C0C932BD -:105A600019F0C83321F058C01092420455C081E0AB -:105A7000817054C0C93291F120F5C43179F1B0F48C -:105A8000C73009F047C08EE18093360282E38093ED -:105A900035028AE08093340284E18093330288E007 -:105AA0008093320288E28093310234C0CE51C630F6 -:105AB00088F5EC2FF0E0EA50FD4F8081809341049F -:105AC00029C0CE34E9F020F4CB3421F56AE013C0CC -:105AD000C13579F0C235F1F461E00DC08091410427 -:105AE000882319F01092410415C081E0809342048C -:105AF00015C061E006C0809141040E947A2B0AC063 -:105B00006AE0809141040E94F02B04C0109242048C -:105B100080E004C081E002C080E0AACFCF91089568 -:105B20000E941B29811102C00E94F7280E943C2973 -:105B300080935D0480FF02C0869501C080E00C94D4 -:105B40000E0680915D04982F9695292F30E0233022 -:105B500031054CF49F5F990F8170892B8160809390 -:105B60005D040E94402980915D0486950C940E0688 -:105B700080915D04982F969591F09158990F8170BE -:105B8000892B80935D048E7F91E009F490E08091F1 -:105B90005D0490FB80F980935D040E944029809110 -:105BA0005D0486950C940E0680915D04982F909567 -:105BB00090FB80F980935D040E94402980915D04F0 -:105BC00080FF02C0869501C080E00C940E06909183 -:105BD0005D04892F86958F5F8F779170843028F4CC -:105BE000880F892B80935D0402C090935D0480919F -:105BF0005D048E7F91E009F490E080915D0490FB5C -:105C000080F980935D040E94402980915D0486950F -:105C10000C940E0620915D04922F96958927982F5B -:105C2000990F822F8170892B80935D048E7F91E084 -:105C300009F490E080915D0490FB80F980935D040D -:105C40000E94402980915D0486950C940E068091F7 -:105C50005D04869508955058BB27AA270ED0D1C160 -:105C6000C2D130F0C7D120F031F49F3F11F41EF4BF -:105C7000B7C10EF4E095E7FB9FC1E92FD3D180F3C4 -:105C8000BA17620773078407950718F071F49EF539 -:105C9000EBC10EF4E0950B2EBA2FA02D0B01B9012C -:105CA00090010C01CA01A0011124FF27591B99F092 -:105CB000593F50F4503E68F11A16F040A22F232F9E -:105CC000342F4427585FF3CF469537952795A795EE -:105CD000F0405395C9F77EF41F16BA0B620B730B95 -:105CE000840BBAF09150A1F0FF0FBB1F661F771F06 -:105CF000881FC2F70EC0BA0F621F731F841F48F4BB -:105D0000879577956795B795F7959E3F08F0B3CF40 -:105D10009395880F08F09927EE0F9795879508952A -:105D200027D108F481E008950CD06BC163D140F015 -:105D30005AD130F021F45F3F19F03EC1511195C1A5 -:105D40004FC170D198F39923C9F35523B1F3951B33 -:105D5000550BBB27AA2762177307840738F09F5F8C -:105D60005F4F220F331F441FAA1FA9F333D00E2EFB -:105D70003AF0E0E830D091505040E695001CCAF768 -:105D800029D0FE2F27D0660F771F881FBB1F26172D -:105D900037074807AB07B0E809F0BB0B802DBF0100 -:105DA000FF2793585F4F2AF09E3F510568F004C1CA -:105DB0005CC15F3FECF3983EDCF386957795679581 -:105DC000B795F7959F5FC9F7880F911D96958795B1 -:105DD00097F90895E1E0660F771F881FBB1F6217D0 -:105DE00073078407BA0720F0621B730B840BBA0B8E -:105DF000EE1F88F7E095089504D06894B11135C17D -:105E0000089518D188F09F5790F0B92F9927B7516E -:105E1000A0F0D1F0660F771F881F991F1AF0BA956E -:105E2000C9F712C0B13081F01FD1B1E008951CC193 -:105E3000672F782F8827B85F39F0B93FCCF3869564 -:105E400077956795B395D9F73EF4909580957095C1 -:105E500061957F4F8F4F9F4F0895E89409C097FB3E -:105E60003EF490958095709561957F4F8F4F9F4F31 -:105E70009923A9F0F92F96E9BB279395F695879575 -:105E800077956795B795F111F8CFFAF4BB0F11F438 -:105E900060FF1BC06F5F7F4F8F4F9F4F16C08823DF -:105EA00011F096E911C0772321F09EE8872F762F15 -:105EB00005C0662371F096E8862F70E060E02AF056 -:105EC0009A95660F771F881FDAF7880F9695879542 -:105ED00097F9089588D018F011F08CD038F480C06C -:105EE000C4C0E92F9FD0B0F35523C9F3E7FB621775 -:105EF000730784079507A8F199F3E92FFF278823F3 -:105F00002AF03197660F771F881FDAF7952F5527EC -:105F1000442332F091505040220F331F441FD2F7D8 -:105F2000BB27E91BF50B621B730B840BB109C1F294 -:105F300022F4620F731F841FB11D31972AF0660F80 -:105F4000771F881FBB1FEFCF915050405AF041F090 -:105F5000882332F0660F771F881F91505040C1F799 -:105F6000939530C08695779567959F5FD9F7F8CF61 -:105F7000990F0008550FAA0BE0E8FEEF161617065A -:105F8000E807F907C0F012161306E407F50798F0C2 -:105F9000621B730B840B950B39F40A2661F0232BDB -:105FA000242B252B21F408950A2609F4A140A69557 -:105FB0008FEF811D811D089597F99F6780E870E03C -:105FC00060E008959F3F31F0915020F487957795D8 -:105FD0006795B795880F911D9695879597F90895C0 -:105FE0009FEF80EC089500240A94161617061806F1 -:105FF0000906089500240A941216130614060506CD -:106000000895092E0394000C11F4882352F0BB0F5D -:1060100040F4BF2B11F460FF04C06F5F7F4F8F4FC0 -:106020009F4F089557FD9058440F551F59F05F3FFB -:1060300071F04795880F97FB991F61F09F3F79F0AA -:1060400087950895121613061406551FF2CF46952C -:10605000F1DF08C0161617061806991FF1CF8695AE -:106060007105610508940895E894BB276627772792 -:10607000CB0197F908957CDF08F48FEF08950BD0DA -:10608000C0CFB1DF28F0B6DF18F0952309F094CF28 -:10609000A7CF1124EACFC6DFA0F3959FD1F3950FC8 -:1060A00050E0551F629FF001729FBB27F00DB11D9C -:1060B000639FAA27F00DB11DAA1F649F6627B00D2C -:1060C000A11D661F829F2227B00DA11D621F739F15 -:1060D000B00DA11D621F839FA00D611D221F749F23 -:1060E0003327A00D611D231F849F600D211D822F6A -:1060F000762F6A2F11249F5750408AF0E1F08823B1 -:106100004AF0EE0FFF1FBB1F661F771F881F9150BD -:106110005040A9F79E3F510570F04ECFA6CF5F3F8C -:10612000ECF3983EDCF3869577956795B795F795F0 -:10613000E7959F5FC1F7FE2B880F911D9695879578 -:1061400097F90895FA01EE0FFF1F309621053105EA -:1061500099F16115710561F48038BFE39B0749F13E -:1061600068949038810561F08038BFEF9B0741F05B -:10617000992342F5FF3FE1053105210511F1E8942E -:106180000894E795D901AA2329F4AB2FBE2FF85F15 -:10619000D0F310C0FF5F70F4A695E0F7F73950F028 -:1061A00019F0FF3A38F49F779F930CD00F9007FCBB -:1061B000905808953EF014CF60E070E080E89FE3CF -:1061C00008954FE79F775F934F933F932F939ED010 -:1061D0002F913F914F915F9152DF05C019F40EF05E -:1061E000EBCE42CFFDCE26DFC8F39638C0F707F8D6 -:1061F0000F92E8942BE33AEA48EB5FE74EDF0F9209 -:106200000F920F924DB75EB70F92C0D0E6E2F1E069 -:1062100016D04F915F91EF91FF91E595EE1FFF1F13 -:1062200049F0FE57E0684427EE0F441FFA95E1F766 -:106230004195550B32D00F9007FE26C00895DF938D -:10624000CF931F930F93FF92EF92DF927B018C010C -:10625000689405C0DA2EEF011EDFFE01E894A591D7 -:106260002591359145915591AEF3EF0106DDFE0183 -:106270009701A801DA9479F7DF90EF90FF900F91E2 -:106280001F91CF91DF9108959B01AC0160E070E018 -:1062900080E89FE349CD90CE95CECCDEE8F39923FC -:1062A000D9F3940F511DBBF39150504094F059F025 -:1062B000882332F0660F771F881F91505040C1F736 -:1062C0009E3F510544F7880F911D9695879597F944 -:1062D00008955F3FACF0983E9CF0BB27869577957C -:1062E0006795B79508F4B1609395C1F7BB0F58F760 -:1062F00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF69 -:10630000B4CE0EF05FCE6CCE689456CE93DEC8F35A -:106310009923D1F3C6F3DF93CF931F930F93FF928B -:10632000C92FDD2788232AF02197660F771F881F42 -:10633000DAF720E030E040E85FEB9FE3883920F0B7 -:10634000803E30F021968F7787DCEEE4F1E003C0E9 -:1063500083DCEBE7F1E073DF8B01BE01EC01FB2E88 -:106360006F5771097595771F880B990B78DD28E1B8 -:1063700032E741E35FE38FDEAF2D9801AE01FF907E -:106380000F911F91CF91DF9178DC3BCEFA01DC01B8 -:10639000AA0FBB1F9B01AC01BF5728F4222733274C -:1063A000442750781FC0B75188F4AB2F002446957E -:1063B00037952795011CA395D2F3002069F0220F91 -:1063C000331F441FB395DAF30DD045CC613071050E -:1063D000A0E88A07B94630F49B01AC01662777270D -:1063E00088279078309621F020833183428353832D -:1063F0000895AA1BBB1B51E107C0AA1FBB1FA6170C -:10640000B70710F0A61BB70B881F991F5A95A9F75D -:1064100080959095BC01CD01089597FB072E16F449 -:10642000009407D077FD09D00E94F93107FC05D010 -:106430003EF4909581959F4F0895709561957F4F9B -:106440000895EE0FFF1F0590F491E02D0994F9993E -:10645000FECF92BD81BDF89A992780B50895A8E135 -:10646000B0E042E050E00C944F32262FF999FECF75 -:1064700092BD81BDF89A019700B4021639F01FBA97 -:1064800020BD0FB6F894FA9AF99A0FBE08950196B6 -:10649000272F0E9436320C943532DC01CB01FC01EF -:1064A000F999FECF06C0F2BDE1BDF89A319600B46D -:0E64B0000D9241505040B8F70895F894FFCF78 -:1064BE000AA7CF44000000410000DC440000004168 -:1064CE00000000000000804000005C4500004041DC -:1064DE00000000000000804052D0244500004041E2 -:1064EE000AA7CF44000000410000DC440000004138 -:1064FE00000000000000804052D0244500004041C2 -:10650E00000000000000804000005C45000040419B -:10651E000AA7CF44000000410000DC440000004107 -:10652E00000000000000804052D024450000404191 -:10653E0000000000000080400AA74F4500004041C7 -:10654E000AA7CF44000000410000DC4400000041D7 -:10655E00000000000000804052D0244500000041A1 -:10656E0000000000000080405CFF38450000004144 -:10657E00000000000000804052D024450000004181 -:10658E000AA7CF44000000410000DC440000004197 -:10659E00000000000000804052D0244500008041E1 -:1065AE0053D024450000404160970A450000004149 -:1065BE0054D0A444000000410000DC44000000411F -:1065CE0060970A450000A041640007000CFF000020 -:1065DE00003F6485151316F015BC15881501011FB3 -:1065EE00042808140A321E0002040507090B0C0EBB -:1065FE001011131517181A1C1D1F212324262829C4 -:10660E002B2D2F3032343537393B6966207965733F -:10661E000A097065616E7574206275747465720A0C -:10662E00656C73650A097269636520736E61636BCD -:10663E0073001F0F03764F5F6F7F496943790959C6 -:10664E0053633149803F5D8B803FF8BF803FCAE185 -:10665E00803F73ED803FCAE1803FF8BF803F5D8B86 -:10666E00803F3149803F0000803FF16D7F3F75EAEA -:10667E007E3F4C827E3F833F7E3F84287E3F833F1A -:10668E007E3F4C827E3F75EA7E3FF16D7F3F00007C -:10669E00803F3F4D3639DF0A920A5C0A230AB6095B -:1066AE00CF09E809010A01020304050607080900DB -:00000001FF diff --git a/keyboard/planck/keymaps/gabriel/compiled.hex b/keyboard/planck/keymaps/gabriel/compiled.hex deleted file mode 100644 index 93d8502845..0000000000 --- a/keyboard/planck/keymaps/gabriel/compiled.hex +++ /dev/null @@ -1,1450 +0,0 @@ -:100000000C9491020C94D5020C94D5020C94D50258 -:100010000C94D5020C94D5020C94D5020C94D50204 -:100020000C94D5020C94D5020C9482140C945415A3 -:100030000C94B6220C94D5020C94D5020C94D502E3 -:100040000C94D5020C9437030C94D5020C94D50271 -:100050000C94D5020C941E230C94D5020C94D5025A -:100060000C94D5020C94D5020C94D5020C94D502B4 -:100070000C94D5020C94D5020C94D5020C94D502A4 -:100080000C94F70A0C94D5020C94D5020C94D5026A -:100090000C94D5020C94D5020C94D5020C94D50284 -:1000A0000C94D5020C94D5020C94D502C115E3151D -:1000B000D116E315D11628164B16D116A016B31675 -:1000C0009D199D19CC19CC190B1A2B1A811B811B58 -:1000D000361A811BE61AE61A4D1B561B811B7B1B29 -:1000E000F31AF31AF31AF31AF31AF31AF31AF31AA8 -:1000F000F31AF31AF31AF31AF31AF31AF31AF31A98 -:10010000031B111B181B1F1B291B07634236B79BC0 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000029001400EF -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A002B0004001600070009000A0073 -:1001F0000B000D000E000F0033003400E1001D0065 -:100200001B00060019000500110010003600370021 -:10021000380028000352E000E200E30001522C0005 -:100220002C0002525000510052004F0035021E02B5 -:100230001F0220022102220223022402250226029A -:1002400027022A0001003A003B003C003D003E002E -:100250003F002D022E002F0230023100010040002D -:10026000410042004300440045000100010001003C -:100270000100010001000100010001000100010076 -:1002800001000100010001000100010035001E0015 -:100290001F0020002100220023002400250026004A -:1002A00027002A0001003A003B003C003D003E00D0 -:1002B0003F002D002E022F003000310201004000CF -:1002C00041004200430044004500010001000100DC -:1002D0000100010001000100010001000100010016 -:1002E0000100010001000100010001000100010006 -:1002F00001000100010001000100010001000100F6 -:1003000001004C000100010001000100010001009A -:1003100001000100010001000100010001000100D5 -:1003200001000100010001000100010001000100C5 -:1003300001000100010001000100010001000100B5 -:10034000010001004A004E004B004D0028035400FC -:1003500068006500200050006C0061006E006300C2 -:100360006B0020004B006500790062006F006100A7 -:100370007200640000002C034F00720074006800DB -:100380006F006C0069006E00650061007200200063 -:100390004B006500790062006F006100720064002C -:1003A000730000000403090409026D00040100A0A9 -:1003B000FA090400000103010100092111010001F3 -:1003C000223F000705810308000A09040100010318 -:1003D000010200092111010001224D0007058203DD -:1003E00008000A09040200010300000009211101AC -:1003F00000012236000705830308000A09040300F0 -:100400000103000000092111010001223900070544 -:1004100084031000011201100100000008EDFE60CD -:100420006001000102000105010906A1010507198B -:10043000E029E715002501950875018102050819D5 -:100440000129059505750191029501750391010535 -:10045000071900297715002501957875018102C0DB -:1004600005010980A101850216010026B7001A01C5 -:10047000002AB700751095018100C0050C0901A183 -:10048000018503160100269C021A01002A9C0275B0 -:100490001095018100C005010902A1010901A10017 -:1004A0000509190129051500250195057501810228 -:1004B0009501750381010501093009311581257FF9 -:1004C00095027508810609381581257F9501750803 -:1004D0008106050C0A38021581257F950175088172 -:1004E00006C0C005010906A101050719E029E715A5 -:1004F00000250195087501810295017508810105A6 -:100500000819012905950575019102950175039159 -:10051000010507190029FF150025FF9506750881BB -:1005200000C011241FBECFEFDAE0DEBFCDBF04B69E -:1005300003FE24C080911E0390911F03A09120030D -:10054000B09121038730904BA740B04BB9F4109283 -:100550001E0310921F03109220031092210314BE59 -:1005600084B7877F84BF88E10FB6F89480936000DA -:10057000109260000FBEE0E0F8E3099511E0A0E002 -:10058000B1E0E6ECF9E502C005900D92A03CB107A0 -:10059000D9F713E0A0ECB1E001C01D92AE31B10774 -:1005A000E1F70E94C8110C94E12C0C94000008950E -:1005B000089581E0089508950C94D8020C94D9020E -:1005C0000C94DB020E94AB2823E030E0281B3109A9 -:1005D000220F2093C4010895282F2F988091800026 -:1005E000211108C0877F8093800010928D001092A7 -:1005F0008C001BC0886080938000233019F48FEF3B -:100600009FEF0FC083E090E0821B9109880F991F34 -:100610002FEF3FEFA90102C0569547958A95E2F763 -:10062000CA0190938D0080938C000C94E2020E948A -:10063000E20284E08093C3011092C0010895279ADA -:100640002F988FEF9FEF90938700809386008AE02A -:100650008093800089E1809381000E9414280C948B -:1006600017030E941F036E9A769A0C94D7021F926A -:100670000F920FB60F9211242F933F938F939F9356 -:10068000EF93FF93E091C101F091C201CF01019678 -:100690009093C2018093C1010090C30102C0F695FE -:1006A000E7950A94E2F7EF738091C001823019F464 -:1006B000E03251F404C0813039F4EF3329F48091F1 -:1006C0006F008D7F80936F00F0E0E457FE4FE49160 -:1006D00021E031E0E29FC001E39F900D11240090E2 -:1006E000C40102C0969587950A94E2F790938D0015 -:1006F00080938C00FF91EF919F918F913F912F916B -:100700000F900FBE0F901F90189561110DC0FC0146 -:100710008281882331F085EE0E9441180E946B2867 -:1007200003C085EE0E94091980E090E0089581E001 -:1007300008950C94970308950C9431038091150249 -:10074000882309F448C08091D1019091D20100978B -:1007500079F40E94E8229093D2018093D101809194 -:10076000D30190E0009771F48091D40190E00AC029 -:100770000E94F422209100013091010128173907CD -:1007800040F329C00197880F991F880F991FFC011A -:10079000EB52FE4F60817181828193810E945D0ADC -:1007A000E091D30184E0E89FF0011124EB52FE4F69 -:1007B00060817181828193814FE050E00E94150E2B -:1007C0008091D30190E001966091D40170E00E9485 -:1007D000912C8093D3010C94DC02109217020C949C -:1007E0002A0A0895089581E0809317020C94F20379 -:1007F000089508958F929F92AF92BF92EF92FF92C9 -:100800000F931F93CF93DF93CDB7DEB7A3970FB6A8 -:10081000F894DEBF0FBECDBF7C01FC0100811181C9 -:10082000C8010E94E520B8010E94FC058C01B701B7 -:100830000E949903882309F4CCC10032F0E51F0718 -:1008400041F4F7018281882309F458C00E94790E8F -:10085000C0C10132F0E51F0741F4F701828188230E -:1008600009F44CC00E94820EB4C10232F0E51F07A9 -:1008700051F4F7018281882309F440C00E94750E6B -:100880008111F0CFE3CF0332F0E51F0739F4F70110 -:100890008281882399F10E94F3039BC10432F0E521 -:1008A0001F0739F4F7018281882341F10E94ED038B -:1008B00090C10532F0E51F0749F4F70182818823D2 -:1008C000E9F0809117028111F1CFE5CF0632F0E512 -:1008D0001F0739F4F7018281882381F00E94890E75 -:1008E0000AC00732F0E51F0749F4F7018281882327 -:1008F00029F00E94940E0E94F9036BC180911702A7 -:10090000811105C0F70182818111CFC018C1003E5D -:10091000110579F4F7018281882309F44DC00E9402 -:100920002A0A81E080931602109215021092D401D7 -:1009300050C1023E110559F4F70182818823E1F18B -:100940000E942A0A109216021092150242C1033E1A -:10095000110591F4F7018281882371F10E942A0A1E -:100960001092160281E0809315021092D30110922A -:10097000D2011092D1012DC10235110559F4F701B0 -:100980008281882309F425C18091000190910101A1 -:100990000A970DC00135110579F4F701828188238A -:1009A00009F417C180910001909101010A9690937A -:1009B0000101809300010DC14091040183E2EFE148 -:1009C000F1E0DE01119601900D928A95E1F7F701B1 -:1009D000808121E030E02C0F3D1F280F311DC9011F -:1009E0002091020130910301FC01E20FF31F6081AD -:1009F000772767FD7095640F711D882777FD8095B7 -:100A0000982F0E94B32920E030E040E451E40E9496 -:100A100018294B015C01F701218184E090E0821BE1 -:100A20009109BC01882777FD8095982F0E94B329F2 -:100A30009B01AC01C501B4010E94B0289B01AC012F -:100A400060E070E080E090E40E94262B20E030E03F -:100A50004CED50E40E94C32A4B015C01F7018281F6 -:100A60008823D1F04FE050E0C501B4010E94150E7B -:100A7000809116028823A1F08091D40124E0829F06 -:100A8000F0011124EB52FE4F80829182A282B38248 -:100A90008F5F8093D40104C0C501B4010E945D0A38 -:100AA0000F3F110508F02ECF94C08091D001811125 -:100AB0001FC0043130E5130709F051C00E949B03A9 -:100AC00081E08093D0010E94E8229093CF0180932F -:100AD000CE011092C7011092C9011092C801109264 -:100AE000CB011092CA011092CD011092CC0171C0BD -:100AF0008091CE019091CF010E94F422883C910513 -:100B000070F48091C701E82FF0E0EE0FFF1FE8536B -:100B1000FE4F118300838F5F8093C7015AC0043852 -:100B200080E5180721F00538104501F13AC0F701BA -:100B30008281882341F01092C50182E01EC00438F2 -:100B400030E5130759F58091C501811106C086E291 -:100B50000E94411886E20E94091982E01CC00438F4 -:100B6000F0E51F0741F305381045D9F4F7018281FC -:100B7000882331F01092C60180E20E94581929C0E2 -:100B80008091C601811106C087E20E94411887E268 -:100B90000E94091980E20E945F191BC005381045A8 -:100BA00029F381E08093C5018093C601C701A39614 -:100BB0000FB6F894DEBF0FBECDBFDF91CF911F916E -:100BC0000F91FF90EF90BF90AF909F908F900C94FB -:100BD000DE0280E0A3960FB6F894DEBF0FBECDBF55 -:100BE000DF91CF911F910F91FF90EF90BF90AF9049 -:100BF0009F908F90089508959CE0799FF0011124B3 -:100C000090E3899FE00DF11D1124E60FF11DEE0F19 -:100C1000FF1FE453FE4F859194910895880F991F0B -:100C2000FC01E45BFF4F859194910895880F991F13 -:100C3000FC01E453FE4F8591949108950F931F9307 -:100C4000CF93DF93EC01811521E39207A0F5C11545 -:100C500080E3D80708F0D7C0C83ED105D8F4C03E1D -:100C6000D10508F007C2C83AD10578F4C53AD105D4 -:100C700008F06AC0C130D10509F463C008F4F7C1B7 -:100C8000C430D10508F0F6C1F2C1CB3BD10508F460 -:100C900066C0EDC1C11590E2D90708F0AFC0C1151B -:100CA00021E0D20708F0E6C1C03FD10508F4DFC15A -:100CB0008E0110651FC2C03880E5D80700F5C03727 -:100CC00090E5D90708F0A3C0C11520E5D20709F4C3 -:100CD000ACC050F4CE01905480319F4008F0C7C1A1 -:100CE000DF708E01106A06C2C13080E5D80709F4B2 -:100CF000AEC0C43190E5D90708F4AFC0B8C1C3385D -:100D000020E5D20709F48EC050F4C13890E5D90728 -:100D100009F482C008F083C000E011EDEBC1C031DE -:100D200081E5D80708F4A3C1C11597E5D90708F4F0 -:100D300036C1CE0190578115904108F098C1DF70FF -:100D400093C101E010E0D6C1C53AD10509F494C1C0 -:100D5000C63AD10509F093C102E810E4CBC1C83A04 -:100D6000D10509F48FC1C93AD10509F48EC1CA3A37 -:100D7000D10509F48DC1CB3AD10509F48CC1CC3A27 -:100D8000D10509F48BC1CD3AD10509F48AC1C03B24 -:100D9000D10509F489C1CE3AD10509F488C1CF3A09 -:100DA000D10509F487C1C13BD10509F486C1C23B15 -:100DB000D10509F485C1C33BD10509F484C1C43B05 -:100DC000D10509F483C1C53BD10509F482C1C63BF5 -:100DD000D10509F481C1C73BD10509F480C1C83BE5 -:100DE000D10509F47FC1C93BD10509F47EC1CA3BD5 -:100DF000D10509F47DC100E014E47CC1CE019F70EF -:100E00000E94160678C1DD278E01106C73C1CF7069 -:100E1000DD278E01146D6EC100E010ED6BC100E0A6 -:100E200012ED68C100E013ED65C10E94EC1B0E9449 -:100E30002A0A0E94F1038FEF94E32CE08150904046 -:100E40002040E1F700C000000E94432353C180917D -:100E5000F20281608093F2024DC10E94A4238111AD -:100E600002C00E9480230E94B72390E090931D034C -:100E700080931C03C23080E5D80721F480911C03C5 -:100E8000816086C0C43090E5D90721F480911C03AD -:100E900082607EC0C63020E5D20721F480911C0319 -:100EA000846076C0C83080E5D80719F480911C03AF -:100EB00027C0CA3090E5D90721F480911C038061D6 -:100EC00067C0CC3020E5D20721F480911C038062FA -:100ED0005FC0CE3080E5D80721F480911C03806488 -:100EE00057C0C03190E5D90721F480911C03806878 -:100EF0004FC0C23120E5D20729F480911C038460E1 -:100F0000886046C0C33080E5D80721F480911C0377 -:100F10008E7F3EC0C53090E5D90721F480911C0337 -:100F20008D7F36C0C73020E5D20721F480911C03A5 -:100F30008B7F2EC0C93080E5D80719F480911C033F -:100F400026C0CB3090E5D90721F480911C038F7E19 -:100F50001FC0CD3020E5D20721F480911C038F7D86 -:100F600017C0CF3080E5D80721F480911C038F7B18 -:100F70000FC0C13190E5D90721F480911C038F7710 -:100F800007C0C331D04531F480911C038B7F877F2C -:100F900080931C0380911C030E94BB23ABC08D2F48 -:100FA00099278F70992781309105D9F49E0123707C -:100FB000332702C0880F991F2A95E2F79C688E019B -:100FC00044E0000F111F4A95E1F700271370802BB2 -:100FD000912B53E0CC0FDD1F5A95E1F7C076DD274A -:100FE0002FC08230910531F4DC2FCC278E01016FA8 -:100FF000106A80C08330910569F4CE01837099270F -:1010000001E010E002C0000F111F8A95E2F7C8014D -:101010009C680FC084309105B9F4CE018370992784 -:1010200001E010E002C0000F111F8A95E2F7C8012D -:101030009A6823E0CC0FDD1F2A95E1F7C07ED770B8 -:101040008C010C2B1D2B56C08530910531F4DC2F03 -:10105000CC278E01046F106A4DC0069709F04AC074 -:10106000CF71DD27DC2FCC278E01106243C000E05A -:1010700010E040C08E013EC001E810E43BC003E830 -:1010800010E438C002EE14E435C009EE14E432C0B6 -:101090000AEE14E42FC005EB14E42CC006EB14E4B4 -:1010A00029C007EB14E426C00CEC14E423C00DECBB -:1010B00014E420C003E815E41DC00AE815E41AC0D2 -:1010C00002E915E417C004E915E414C001E216E4CE -:1010D00011C003E216E40EC004E216E40BC005E200 -:1010E00016E408C006E216E405C007E216E402C0F2 -:1010F0000AE216E4C801DF91CF911F910F91089584 -:101100009CE0799FF001112490E3899FE00DF11D8F -:101110001124E60FF11DEE0FFF1FE453FE4F8591E2 -:101120009491803E9105E0F4803C910558F581331F -:10113000910509F46FC048F48932910509F463C040 -:101140008A32910509F46DC072C089339105E9F0C6 -:1011500082389105D1F08533910509F44DC067C0FF -:10116000833E910581F138F4803E9105B9F0823ECD -:101170009105D9F05CC0863E910561F1873E9105ED -:10118000A1F155C00E940E06089520911C0320FD78 -:1011900002C021FF4CC080EE90E049C080911C034A -:1011A00080FFF9CF89E390E042C080911C0382FF69 -:1011B0000EC080911C0384FF03C080E090E037C024 -:1011C00083EE90E034C080911C0382FFF2CF82EE68 -:1011D00090E02DC080911C0383FF0BC080911C0305 -:1011E00084FDEBCF87EE90E022C080911C0383FF4B -:1011F000F5CF86EE90E01BC080911C0385FF07C0F1 -:1012000089E290E014C080911C0385FFF9CF85E34B -:1012100090E00DC080911C0386FF07C08AE290E039 -:1012200006C080911C0386FFF9CF81E390E00E9405 -:101230001E0608950C94E002E82FF0E0E25BFE4FFA -:101240008081E82FEF70F0E082958F7021E030E030 -:10125000A90102C0440F551F8A95E2F740A30895E3 -:101260000F931F93CF93DF9385B7806885BF85B7B2 -:10127000806885BFC3E0D0E001E010E0FE01E25BE2 -:10128000FE4F8081E82FEF70F0E021A182958F70F2 -:10129000A80102C0440F551F8A95E2F7CA01822BAC -:1012A00081A38C2F0E941C09219740F78BE090E0CE -:1012B00061E070E0FC01EE5BFE4F2081E22FEF70F9 -:1012C000F0E042A122952F70DB0102C0AA0FBB1FE4 -:1012D0002A95E2F79D01242B22A3019758F7DF916D -:1012E000CF911F910F910C949C03EF92FF920F935B -:1012F0001F93CF93DF9300E212E0C3E0EE24E39468 -:10130000F12CD5E08C2F0E941C098BE090E040E08E -:1013100050E0FC01EE5BFE4F6081E62FEF70F0E0E5 -:1013200020A130E062956F7002C0359527956A95CF -:10133000E2F720FD09C09701082E02C0220F331FDB -:101340000A94E2F7422B532B019718F7F801929178 -:1013500082918F018417950721F051834083D093A8 -:1013600005018C2F0E941C09C15060F68091050177 -:1013700087FD2CC08150809305018F3F39F08FE9A4 -:101380009FE00197F1F700C0000020C080911E028D -:1013900090911F02909327028093260280911C0255 -:1013A00090911D02909325028093240280911A024D -:1013B00090911B0290932302809322028091180245 -:1013C0009091190290932102809320020E949E0323 -:1013D00081E0DF91CF911F910F91FF90EF900895E1 -:1013E000E82FF0E0EE0FFF1FE05EFD4F808191815E -:1013F000089508950F931F93CF9308E212E0C0E081 -:10140000F801929182918F010E946022C80FF2E050 -:1014100000321F07A9F78C2FCF911F910F910895CC -:101420000E94A423811102C00E9480230E94C9232C -:10143000809307033E9A809171008D7F80937100A5 -:1014400082E0809390008AE18093910081E0809314 -:101450002A02089580912A02811102C00E94100A76 -:1014600010927A0210927902809171008D7F8093A0 -:101470007100809190008F738093900010923C02D5 -:1014800010923B0210927302109274021092750235 -:10149000109276021092720210927102E1E5F2E06F -:1014A000A1E4B2E011921192119211921D921D923B -:1014B00082E0E137F807B1F70895CF92DF92EF921B -:1014C000FF920F931F93CF93DF9320913B02222330 -:1014D00009F484C06B017C0180912A02811102C051 -:1014E0000E94100A01E712E0C7E0D0E0A7019601D0 -:1014F000F80192918291729162918F010E94142958 -:10150000811131C0FE01EE0FFF1FEE0FFF1FEF5ADA -:10151000FD4F1082118212821382DE01AA0FBB1FBF -:10152000AF5BBD4F11961C921E92C730D105E9F0FA -:1015300021964481558166817781408351836283FE -:101540007383148215821682178212968D919C9154 -:10155000139711969C938E9313961C921E9212973A -:1015600034961296E2CF219708F6809179029091F5 -:101570007A02019797FD05C090937A0280937902D1 -:1015800004C010927A0210927902809179029091AF -:101590007A0220917702309178022817390724F0D7 -:1015A0001092780210927702892BC1F48091710019 -:1015B0008D7F80937100809190008F738093900055 -:1015C00010927302109274021092750210927602B9 -:1015D000109272021092710210923B02DF91CF9131 -:1015E0001F910F91FF90EF90DF90CF9008951F9281 -:1015F0000F920FB60F9211244F925F926F927F92CB -:101600008F929F92AF92BF92CF92DF92EF92FF9212 -:101610002F933F934F935F936F937F938F939F93FA -:10162000AF93BF93CF93DF93EF93FF9380913B02F0 -:10163000882309F49BC1C0917902D0917A021C16CB -:101640001D060CF093C140902B0250902C0260902C -:101650002D0270902E0220E030E0A901C301B201FA -:101660000E94BF2A18160CF065C0C130D10509F4DC -:1016700052C08091770290917802BE010E94912C15 -:101680007C01909378028093770280903D02909045 -:101690003E02A0903F02B090400220E030E040E8DF -:1016A0005FE3C501B4010E94B02860933D027093CE -:1016B0003E0280933F0290934002F701EE0FFF1F1E -:1016C000EE0FFF1FEF5AFD4FA30192016081718160 -:1016D000828193810E94182920E030E040E05EE39F -:1016E0000E94C32A9B01AC01C501B4010E94BF2A1C -:1016F00018168CF4C7010196BE010E94912C90939C -:1017000078028093770210923D0210923E0210926E -:101710003F0210924002E0917702F0917802EE0FC2 -:10172000FF1FEE0FFF1FEF5AFD4F60817181828115 -:101730009381D0C0C0907302D0907402E090750283 -:10174000F090760220E030E0A901C701B6010E94C6 -:1017500014292197882309F4A2C0FE01EE0FFF1F70 -:10176000EE0FFF1FEF5AFD4F80809180A280B38063 -:10177000A5019401C701B6010E94142987FF31C059 -:10178000A501940160E070E08CED93EC0E941829B3 -:1017900020E030E040E451E40E94182920E030E0ED -:1017A00040E05FE30E94C32A9B01AC0160E070E06F -:1017B00080E090E40E94262B9B01AC01C501B4019E -:1017C0000E94C32A9B01AC01C701B6010E941429E3 -:1017D00087FF07C0A701960160E070E08CED93E4FD -:1017E00039C0A5019401C701B6010E94BF2A18168D -:1017F0000CF055C0A501940160E070E08CED93E41D -:101800000E94182920E030E040E451E40E941829A9 -:1018100020E030E040E05FE30E94C32A9B01AC017E -:1018200060E070E080E090E40E94262B9B01AC0118 -:10183000C501B4010E94C32A9B01AC01C701B601D6 -:101840000E94BF2A18165CF5A701960160E070E0BF -:101850008CED93EC0E94182920E030E040E451E444 -:101860000E94182920E030E040E05FE30E94C32A94 -:101870009B01AC0160E070E080E090E40E94262BC8 -:101880009B01AC01C701B6010E94C32A6093730299 -:1018900070937402809375029093760213C0FE01D8 -:1018A000EE0FFF1FEE0FFF1FEF5AFD4F808191815A -:1018B000A281B3818093730290937402A093750206 -:1018C000B0937602609173027091740280917502F8 -:1018D0009091760220912802309129022F3F4FEFFC -:1018E000340731F02F5F3F4F3093290220932802B5 -:1018F0000E949F0E6B017C0120E034E244EF51E432 -:101900000E94142987FF08C086EFC82E88E2D82ECF -:1019100084EFE82E81E4F82E20E030E040E051E44E -:10192000C701B6010E94C32A9B01AC0160E074E2CA -:1019300084E79BE40E9418296B017C010E948529A1 -:1019400070939700609396002091060130910701F3 -:101950004091080150910901C701B6010E94C32AB4 -:101960000E948529709399006093980080913C02B1 -:10197000882309F433C1C0903702D0903802E09038 -:101980003902F0903A0220E030E0A901C701B60127 -:101990000E94BF2A1816D4F580912802909129023E -:1019A0008F3F2FEF920729F00196909329028093A1 -:1019B0002802C701B6010E949F0E20E030E040E0FF -:1019C00051E40E94C32A9B01AC0160E074E284E709 -:1019D0009BE40E9418296B017C010E948529709369 -:1019E0009700609396002091060130910701409185 -:1019F000080150910901C701B6010E94C32A0E9443 -:101A00008529709399006093980008C01092970000 -:101A100010929600109299001092980060913102F5 -:101A2000709132026F5F7F4F709332026093310288 -:101A3000209196003091970080E090E0232BF1F008 -:101A4000C0919600D09197000E94B1296B017C0152 -:101A5000BE0180E090E00E94B1299B01AC01609141 -:101A600033027091340280913502909136020E94C7 -:101A7000182920E03FEF4FE757E410C00E94B1293A -:101A80006B017C0120E030EE4FEF54E460913302B3 -:101A90007091340280913502909136020E94C32ADF -:101AA0009B01AC01C701B6010E94BF2A87FD96C009 -:101AB00080912F028F5F80932F0290E0209103038B -:101AC0003091040382179307A0F080910E038823BE -:101AD00019F010922F020DC0809171008D7F8093BC -:101AE0007100809190008F738093900010923C025F -:101AF0007DC080913002C0912F02811128C0C0901A -:101B00000803D0900903E0900A03F0900B0320E053 -:101B100030E0A901C701B6010E94BF2A1816BCF423 -:101B200081E08093300210923702109238021092B6 -:101B3000390210923A02C0923302D0923402E092FB -:101B40003502F0923602C150C0932F0243C010926A -:101B500030021092290210922802E0910503F091C0 -:101B6000060348E0C49FE00DF11D1124808191819E -:101B7000A281B3818093370290933802A0933902F7 -:101B8000B0933A0220E030E040E85EE36481758182 -:101B9000868197810E94C32A6B017C0180910A0192 -:101BA000682F70E080E090E00E94B12920E030E0F2 -:101BB00048EC52E40E9418299B01AC01C701B60110 -:101BC0000E94C32A609333027093340280933502DB -:101BD00090933602109232021092310280910703E4 -:101BE00080FD04C010923C0210923B02FF91EF91E5 -:101BF000DF91CF91BF91AF919F918F917F916F9125 -:101C00005F914F913F912F91FF90EF90DF90CF9098 -:101C1000BF90AF909F908F907F906F905F904F900C -:101C20000F900FBE0F901F901895CF92DF92EF92FA -:101C3000FF92CF93DF936B017C01EA0180912A022E -:101C4000811102C00E94100A8091070380FF46C0E4 -:101C50008091790290917A0208970CF03FC08091B0 -:101C600071008D7F8093710080913C0281110E94F0 -:101C70002A0A81E080933B021092290210922802E6 -:101C800020E030E0A901C701B6010E94BF2A181662 -:101C9000DCF48091790290917A02FC01EE0FFF1F33 -:101CA000EE0FFF1FEF5AFD4FC082D182E282F38216 -:101CB000FC01EE0FFF1FEF5BFD4FD183C083019648 -:101CC00090937A0280937902809171008260809370 -:101CD000710080919000806880939000DF91CF9197 -:101CE000FF90EF90DF90CF9008958091070381706F -:101CF0000895809107038160809307030E94CD239C -:101D00000C94F803809107038E7F809307030C9453 -:101D1000CD2380917B0290E0019666E070E00E9406 -:101D2000912C80937B02089580917B0290E0019733 -:101D300066E070E00E94912C80937B0208958F9260 -:101D40009F92AF92BF92CF92DF92EF92FF920F934A -:101D50001F93CF93DF936B017C01C0912802D09138 -:101D60002902BE0180E090E00E94B1294B015C0194 -:101D7000A701960160E070E08CE594E40E941829C8 -:101D80009B01AC01C501B4010E94C32A0E948529B0 -:101D900020917B02233009F473C028F4222351F0F0 -:101DA0002130E9F02CC1243009F4A0C0253009F419 -:101DB000E0C025C180E090E0A0E0BFE38093060191 -:101DC00090930701A0930801B093090110922B0290 -:101DD00010922C0210922D0210922E0210C110921D -:101DE0002B0210922C0210922D0210922E026431BE -:101DF000710540F46A30710560F520E030E040E89C -:101E00005EE32BC0693C710508F0AAC080E090E059 -:101E10000E94B12920E030E040EA51E40E94AF285E -:101E200020E030E044E353E40E9418299B01AC0118 -:101E30000E94C32A20E030E040E05EE30E94C32A13 -:101E40009B01AC0160E070E080E09EE30E94AF285F -:101E500044C020E030E040E05FE3C701B6010E94EB -:101E6000C32A6B017C0180E090E0A0E0BEE3809398 -:101E7000060190930701A0930801B0930901BFC028 -:101E800010922B0210922C0210922D0210922E0210 -:101E90004AE0469F9001479F300D1124C90168EB2D -:101EA0007BE00E947D2CBC016C5D754077FF03C018 -:101EB000719561957109882777FD8095982F0E940B -:101EC000B3292EE333EC4EE259E30E94C32A20E00B -:101ED00030E040EC5EE30E94B0286093060170930E -:101EE0000701809308019093090189C010922B0289 -:101EF00010922C0210922D0210922E02CE018370AD -:101F00009927892BE1F0BE016170772780E090E08E -:101F10000E94B12920E030E040E05EE30E94C32A45 -:101F200020E030E040E45FE30E94B02860930601C7 -:101F30007093070180930801909309010CC080E021 -:101F400090E0A0E0BFE38093060190930701A09387 -:101F50000801B0930901C770DD27CD2B09F04FC0F0 -:101F600010920601109207011092080110920901C7 -:101F700046C010922B0210922C0210922D02109249 -:101F80002E0200E010E020E03FE3009306011093F2 -:101F9000070120930801309309016739710578F131 -:101FA00080E090E00E94B12920E030E047E153E476 -:101FB0000E94AF2820E030E04AE754E40E9418294C -:101FC00020E030E048E452E40E94C32A20E030E000 -:101FD00040EA51E40E94F5290E948029660F771F8C -:101FE000660F771FFB01EE5AFE4F2081318142813F -:101FF0005381C701B6010E94C32A6B017C01C7014E -:10200000B601DF91CF911F910F91FF90EF90DF907C -:10201000CF90BF90AF909F908F90089580918C0249 -:102020000895CF93DF9300D01F92CDB7DEB79C0108 -:1020300080911303843019F593E099833B832A83BD -:102040009093E9008FEF9091E800815095FD06C0D4 -:1020500095ED9A95F1F700008111F5CF8091E80098 -:1020600085FF0DC040E050E063E070E0CE010196D6 -:102070000E9472128091E8008E778093E8000F90A2 -:102080000F900F90DF91CF910895CF93DF9300D001 -:102090001F92CDB7DEB720911303243021F522E043 -:1020A00029839B838A8383E08093E9008FEF90915B -:1020B000E800815095FD06C095ED9A95F1F7000076 -:1020C0008111F5CF8091E80085FF0DC040E050E020 -:1020D00063E070E0CE0101960E9472128091E800E8 -:1020E0008E778093E8000F900F900F90DF91CF9143 -:1020F0000895209113032430F1F422E02093E900A5 -:102100002FEF3091E800215035FD06C035ED3A95AE -:10211000F1F700002111F5CF2091E80025FF0BC059 -:1021200040E050E065E070E00E9472128091E800AB -:102130008E778093E8000895CF93DF93EC01909120 -:102140001303943009F046C0809115018823D9F01B -:10215000809116018823B9F09093E9008FEF909158 -:10216000E800815095FD06C095E19A95F1F70000D1 -:102170008111F5CF8091E80085FF2CC040E050E050 -:1021800060E170E017C081E08093E9008FEF9091EB -:10219000E800815095FD06C095ED9A95F1F7000095 -:1021A0008111F5CF8091E80085FF14C040E050E038 -:1021B00068E070E0CE010E9472128091E8008E7794 -:1021C0008093E80080E1FE01ACE7B2E001900D925F -:1021D0008A95E1F7DF91CF910895809112038111E3 -:1021E00009C00E9407140E9464148091E200846078 -:1021F0008093E200089510921203089508950895BF -:102200000C94AB2242E061EC81E00E94811342E039 -:1022100061EC82E00E94811342E061EC83E00E9465 -:10222000811342E161EC84E00C94811380911503E9 -:10223000833009F455C030F4813071F0823009F4F4 -:102240008EC008958A3009F47AC08B3009F460C0DA -:10225000893009F09CC020C080911403813A09F0B4 -:1022600096C08091E800877F8093E80080911803F2 -:1022700090911903892B21F460E18CE792E003C06F -:1022800060E080E090E070E00E94BD128091E80084 -:102290008B778093E800089580911403813209F0D0 -:1022A00076C08091180390911903009719F0039755 -:1022B00009F06DC08091E800877F8093E8008091ED -:1022C000E80082FD05C0809113038111F8CF5FC043 -:1022D0008091F10080938C028091E8008B7753C04D -:1022E00080911403813A09F052C0809118039091B3 -:1022F0001903892B09F04BC08091E800877F8093F8 -:10230000E8008091E80080FFFCCF8091150136C085 -:10231000809114038132D9F58091180390911903AB -:10232000892BA9F58091E800877F8093E8000E94BF -:10233000B61380911603809315010C94EC1B8091C9 -:102340001403813221F58091E800877F8093E800B3 -:102350000E94B6138091170380938D020895809197 -:102360001403813AA1F48091E800877F8093E8000C -:102370008091E80080FFFCCF80918D028093F10076 -:102380008091E8008E778093E8000C94B61308954E -:1023900084B7877F84BF88E10FB6F894809360008C -:1023A000109260000FBE90E080E80FB6F894809322 -:1023B0006100909361000FBE0E9459170E9407149C -:1023C0000E9464148091E20084608093E20078941B -:1023D0000E94EA160E945B178BE091E00E940517AD -:1023E00080911303853069F40E946C22809111035F -:1023F0008823B1F30E949A22882391F30E945C12F1 -:10240000EFCF0E946317ECCF292F332723303105FC -:10241000C9F064F42130310581F02230310509F032 -:1024200043C08DE690E028EA33E042C02132310516 -:10243000F1F02232310541F137C082E190E025E12F -:1024400034E036C099278130910541F08230910502 -:1024500041F0892B49F5E4EAF3E005C0E6E7F3E053 -:1024600002C0ECE4F3E0849190E09F0121C064306D -:10247000D8F4E62FF0E0EE0FFF1FE255FE4F20816B -:10248000318189E090E014C0643070F470E0FB01A9 -:10249000EE0FFF1FEA55FE4F20813181FB01EE5503 -:1024A000FE4F808190E004C080E090E020E030E0CA -:1024B000FA0131832083089580E189BD82E189BDDD -:1024C00009B400FEFDCF8091D8008F7D8093D800A5 -:1024D0008091E00082608093E0008091E00081FDC7 -:1024E000FCCF0895CF92DF92EF92FF920F931F934C -:1024F000CF93DF93EC018B016A010E94D513811108 -:1025000033C0C114D10439F0F60180819181081BD8 -:10251000190BC80FD91FE12CF12C0115110519F168 -:102520008091E80085FD16C08091E8008E77809349 -:10253000E800C114D10449F0F60180819181E80ED0 -:10254000F91EF182E08285E00FC00E94D513882336 -:1025500021F30AC089918093F10001501109FFEF26 -:10256000EF1AFF0ADACF80E0DF91CF911F910F9130 -:10257000FF90EF90DF90CF90089520911A03309153 -:102580001B032617370748F06115710539F42091B0 -:10259000E8002E772093E80001C0B90140E0611502 -:1025A0007105A9F120911303222309F443C02530BA -:1025B00009F442C02091E80023FD40C02091E800CA -:1025C00022FD32C02091E80020FFE9CF4091F300C6 -:1025D0002091F20030E0342BFC01CF016115710530 -:1025E00059F02830310540F481918093F100615019 -:1025F00071092F5F3F4FF1CF41E02830310509F0DD -:1026000040E02091E8002E772093E800C8CF4111E8 -:10261000C9CF0AC080911303882361F0853061F02F -:102620008091E80083FD0AC08091E80082FFF2CF2C -:1026300080E0089582E0089583E0089581E00895A0 -:1026400020911A0330911B032617370748F06115B4 -:10265000710539F42091E8002E772093E80001C03D -:10266000B901FC0120E06115710591F1809113031E -:10267000882309F440C0853009F43FC08091E80008 -:1026800083FD3DC08091E80082FD2FC08091E8006D -:1026900080FFE9CF2091F3008091F20090E0922B2F -:1026A0006115710559F08830910540F4249120930B -:1026B000F1003196615071090196F2CF21E008973F -:1026C00009F020E08091E8008E778093E800CBCF7E -:1026D0002111CCCF0AC080911303882361F085308B -:1026E00061F08091E80083FD0AC08091E80082FFDC -:1026F000F2CF80E0089582E0089583E0089581E0BC -:102700000895982F973058F59093E900981739F06D -:102710007091EC002091ED005091F00003C0242F47 -:10272000762F50E021FF19C03091EB003E7F3093AF -:10273000EB003091ED003D7F3093ED003091EB00E8 -:1027400031603093EB007093EC002093ED005093D8 -:10275000F0002091EE0027FF07C09F5FD3CF8F705E -:102760008093E90081E0089580E00895809114034A -:1027700087FF11C08091E80082FD05C0809113039E -:102780008111F8CF11C08091E8008B770BC0809148 -:102790001303882349F08091E80080FFF8CF8091EF -:1027A000E8008E778093E80008952091E40030914E -:1027B000E50095E64091EC00842F817040FF22C037 -:1027C0008091E80080FD1CC080911303882391F064 -:1027D000853091F08091EB0085FD10C04091E400C0 -:1027E0005091E5004217530729F39A01915011F7D0 -:1027F00084E0089582E0089583E0089581E00895DB -:1028000080E008954091E80042FFDECF08950E94E5 -:1028100075140E947D14E0EEF0E080818160808379 -:10282000E8EDF0E080818F77808319BCA7EDB0E000 -:102830008C918E7F8C9380818F7E80831092120387 -:1028400008950F931F93CF93DF930E9475140E94F6 -:102850007D14C8EDD0E088818F7788838881806877 -:10286000888388818F7D888319BC1092130310920E -:102870000F03109211031092100300EE10E0F80104 -:1028800080818B7F808388818160888342E060E0E3 -:1028900080E00E948113E1EEF0E080818E7F8083F2 -:1028A000E2EEF0E0808181608083808188608083B7 -:1028B000F80180818E7F8083888180618883DF91A9 -:1028C000CF911F910F910895E8EDF0E080818F7E08 -:1028D0008083E7EDF0E080818160808384E082BFC7 -:1028E00081E0809312030C942114E8EDF0E08081E4 -:1028F0008E7F80831092E20008951092DA00109289 -:10290000E10008951F920F920FB60F9211242F939A -:102910003F934F935F936F937F938F939F93AF9367 -:10292000BF93EF93FF938091E10082FF0BC08091F2 -:10293000E20082FF07C08091E1008B7F8093E1007D -:102940000E94E9168091DA0080FF1FC08091D800B4 -:1029500080FF1BC08091DA008E7F8093DA00809127 -:10296000D90080FF0DC080E189BD82E189BD09B435 -:1029700000FEFDCF81E0809313030E94ED1005C09F -:1029800019BC109213030E94FB108091E10080FF9C -:1029900019C08091E20080FF15C08091E2008E7F17 -:1029A0008093E2008091E20080618093E200809158 -:1029B000D80080628093D80019BC85E0809313030F -:1029C0000E94FF108091E10084FF30C08091E200FE -:1029D00084FF2CC080E189BD82E189BD09B400FE7D -:1029E000FDCF8091D8008F7D8093D8008091E10049 -:1029F0008F7E8093E1008091E2008F7E8093E200E1 -:102A00008091E20081608093E20080910F0388232F -:102A100011F084E007C08091E30087FD02C081E0EF -:102A200001C083E0809313030E9400118091E100B4 -:102A300083FF29C08091E20083FF25C08091E100DF -:102A4000877F8093E10082E08093130310920F034D -:102A50008091E1008E7F8093E1008091E2008E7F83 -:102A60008093E2008091E20080618093E20042E086 -:102A700060E080E00E9481138091F0008860809384 -:102A8000F0000E94FE10FF91EF91BF91AF919F91D6 -:102A90008F917F916F915F914F913F912F910F9007 -:102AA0000FBE0F901F9018951F920F920FB60F92A6 -:102AB00011242F933F934F935F936F937F938F9343 -:102AC0009F93AF93BF93CF93DF93EF93FF93C09107 -:102AD000E900CF708091EC00D82FD17080FDD0E854 -:102AE0001092E9008091F000877F8093F000789445 -:102AF0000E9498151092E9008091F0008860809300 -:102B0000F000CD2BCF70C093E900FF91EF91DF91E2 -:102B1000CF91BF91AF919F918F917F916F915F9175 -:102B20004F913F912F910F900FBE0F901F901895CE -:102B30001F93CF93DF93CDB7DEB7AA970FB6F89464 -:102B4000DEBF0FBECDBFE4E1F3E088E08E0F9091D1 -:102B5000F10091938E13FBCF0E9416118091E80033 -:102B600083FF1FC18091140390911503492F50E0FA -:102B70004A30510508F015C1FA01EA5AFF4F0C948A -:102B8000A52C803881F0823809F00BC180911803A0 -:102B90008F708093E9008091EB0085FB882780F996 -:102BA0001092E90006C080911003909111039111D9 -:102BB00082609091E800977F9093E8008093F10005 -:102BC0001092F100C8C0282F2D7F09F0EAC0882399 -:102BD00019F0823061F0E5C080911603813009F070 -:102BE000E0C0933009F080E0809311032BC0809106 -:102BF0001603811127C0809118038F7009F4D1C08A -:102C00008093E9002091EB0020FF1CC0933021F459 -:102C10008091EB00806214C09091EB0090619093E2 -:102C2000EB0021E030E0A90102C0440F551F8A9556 -:102C3000E2F74093EA001092EA008091EB0088608E -:102C40008093EB001092E9008091E800877F86C0B6 -:102C50008111A7C0109116031F778091E30080783F -:102C6000812B8093E3008091E800877F8093E800C8 -:102C70000E94B6138091E80080FFFCCF8091E300B2 -:102C800080688093E300111102C082E001C083E0FC -:102C90008093130386C08058823008F082C08091F0 -:102CA0001603909117038C3D53E0950779F583E067 -:102CB0008A838AE289834FB7F894DE01139620E075 -:102CC0003EE051E2E32FF0E050935700E49120FF03 -:102CD00003C0E295EF703F5FEF708E2F90E0EA3017 -:102CE00010F0C79601C0C0968D939D932F5F24313D -:102CF00049F74FBF8091E800877F8093E8006AE240 -:102D000070E0CE0101960E94BD1214C0AE014F5F6B -:102D10005F4F609118030E940412BC01009709F4F0 -:102D200040C09091E800977F9093E80089819A8154 -:102D30000E9420138091E8008B778093E80031C0D7 -:102D4000803879F58091E800877F8093E800809152 -:102D50000F038093F1008091E8008E778093E80064 -:102D60000E94B6131EC081111CC0909116039230B0 -:102D7000C0F48091E800877F8093E80090930F0370 -:102D80000E94B61380910F03811106C08091E30069 -:102D900087FD02C081E001C084E0809313030E949C -:102DA00002118091E80083FF0AC08091E800877FCC -:102DB0008093E8008091EB0080628093EB00AA96FC -:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C -:102DD00008950895CF93809113038823A1F0C091A3 -:102DE000E900CF709091EC00892F817090FD80E810 -:102DF000C82B1092E9008091E80083FD0E9498158D -:102E0000CF70C093E900CF9108959093930280937F -:102E100092020895E0919202F0919302309721F08E -:102E20000190F081E02D099480E00895E0919202F4 -:102E3000F0919302309721F00280F381E02D099404 -:102E40000895E0919202F0919302309721F004806E -:102E5000F581E02D0994089520919002309191021E -:102E60008217930771F09093910280939002E09102 -:102E70009202F0919302309721F00680F781E02DC5 -:102E80000994089520918E0230918F028217930742 -:102E900071F090938F0280938E02E0919202F091F4 -:102EA0009302309721F00084F185E02D0994089574 -:102EB00008950C9458170E94DF220E9430090E9446 -:102EC00065230C9414285F926F927F928F929F9249 -:102ED000AF92BF92CF92DF92EF92FF920F931F9328 -:102EE000CF93DF9300D000D01F92CDB7DEB70E9402 -:102EF00075099DE9C92E92E0D92E03E010E0AA24BD -:102F0000A394B12C502E802F0E94F0094C01F601A1 -:102F1000729062906F016826792661147104A1F4A1 -:102F20000150110978F78FEF89838A831B820E94F1 -:102F3000E8228160782F9D838C8349815A816B813F -:102F40008D810E94131838C08091F20281FD0E9489 -:102F5000F9092BE030E07501022E02C0EE0CFF1CD7 -:102F60000A94E2F7C70186219721892B09F1298369 -:102F70005A828E209F2091E0892809F490E09B835B -:102F80000E94E8228160782F9D838C8349815A8139 -:102F90006B818D810E941318000F111FF801EB56F1 -:102FA000FD4F80819181E826F926F182E08204C0FC -:102FB0002150310980F6B4CF0E944C251091940223 -:102FC0000E940A171817D1F00E940A1780939402E2 -:102FD0000F900F900F900F900F90DF91CF911F9156 -:102FE0000F91FF90EF90DF90CF90BF90AF909F90A8 -:102FF0008F907F906F905F900C941A090F900F90B4 -:103000000F900F900F90DF91CF911F910F91FF9034 -:10301000EF90DF90CF90BF90AF909F908F907F9078 -:103020006F905F900895CF93DF93CDB7DEB72B9766 -:103030000FB6F894DEBF0FBECDBF4F8358876987A8 -:103040007A878B87DE01119686E0FD0111928A95C1 -:10305000E9F785E0FE01379601900D928A95E1F738 -:1030600049815A816B817C818D819E810E948A1E5B -:103070002B960FB6F894DEBF0FBECDBFDF91CF9178 -:103080000895CF93882309F4C2C0C82F823859F419 -:103090000E940A1781FDBBC089E30E9464210E943F -:1030A000312289E30CC0833879F40E940A1780FD2D -:1030B000AEC083E50E9464210E94312283E50E9414 -:1030C000A621CF910C943122843859F40E940A171A -:1030D00082FD9DC087E40E9464210E94312287E422 -:1030E000EECF8CEF8C0F813A48F48C2F0E947C2716 -:1030F00081118DC08C2F0E946421E3CF80E28C0F60 -:10310000883048F4C77081E001C0880FCA95EAF79B -:103110000E94EA21D6CF8BE58C0F833078F4C53A34 -:1031200029F0C63A31F083E890E005C081E890E0EC -:1031300002C082E890E0CF910C942C1788E58C0FA8 -:10314000833108F064C0C83A39F1C93A41F1CA3A4A -:1031500049F1CB3A51F1CC3A59F1CD3A61F1C03B4A -:1031600069F1CE3A71F1CF3A79F1C13B81F1C23BBD -:1031700089F1C33B91F1C43B99F1C53BA1F1C63B39 -:10318000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B99 -:10319000C9F180E090E038C082EE90E035C089EE61 -:1031A00090E032C08AEE90E02FC085EB90E02CC01A -:1031B00086EB90E029C087EB90E026C08CEC90E095 -:1031C00023C08DEC90E020C083E891E01DC08AE828 -:1031D00091E01AC082E991E017C084E991E014C03F -:1031E00081E292E011C083E292E00EC084E292E0BC -:1031F0000BC085E292E008C086E292E005C087E25B -:1032000092E002C08AE292E0CF910C944217CF91F3 -:103210000895882309F44BC0823859F40E940A1794 -:1032200081FF45C089E30E9464210E94312289E325 -:103230000CC0833871F40E940A1780FF38C083E500 -:103240000E9464210E94312283E50E94A6210C94F1 -:103250003122843859F40E940A1782FF28C087E47B -:103260000E9464210E94312287E4EFCF9CEF980FE7 -:10327000913A58F390E2980F983050F4877091E0AB -:1032800001C0990F8A95EAF7892F0E94F021DFCFBC -:103290009BE5980F933020F480E090E00C942C177D -:1032A000885A833120F480E090E00C94421708950E -:1032B000882321F00E94EA210C943122089588236A -:1032C00021F00E94F0210C94312208957F928F9278 -:1032D0009F92AF92BF92CF92DF92EF92FF920F93A5 -:1032E0001F93CF93DF931F92CDB7DEB77C01C62E1D -:1032F000772EFC01058102950F70128111110E9439 -:1033000007220E945D21882379F0112369F080E271 -:103310008C0D883048F082E00E9446210E945D2199 -:1033200091E0D82ED92601C0D12CE72DE295EF707F -:10333000F0E0E05AFF4F0C94A52C872D807F072DDD -:103340000F70882311F00295007F112389F000236C -:1033500009F499C180E28C0D883020F4802F0E94FE -:10336000EA2103C0802F0E94FA210E9431228BC1E2 -:103370008C2D0E940919002309F4C3C180E28C0D31 -:10338000883020F4802F0E94F02103C0802F0E94FB -:1033900000220E943122B5C1872D807F972D9F701A -:1033A000803211F4892F03C0892F8295807FCC2031 -:1033B00021F0F1E0CF16A1F01DC0112339F0002358 -:1033C00019F1013009F50E941A229BC1002319F05E -:1033D000013009F496C189830E941D22898110C1A0 -:1033E000112321F0063008F08CC10EC0053008F022 -:1033F00088C106C1112359F0002331F0F7019581EE -:1034000090FF41C19F7095830E9458197AC1002393 -:1034100009F4F6C03EC1872D86958695837090E0AD -:10342000009719F0019761F06CC1112321F08C2DE8 -:10343000972D937002C080E090E00E942C1761C12C -:10344000112321F08C2D972D937002C080E090E025 -:103450000E94421756C18C2D112319F00E9454244A -:1034600002C00E94BC240E9441254BC1872D83705D -:1034700009F052C0111145C18C2D82958695877037 -:10348000880F880F9C2D9F70892E912CA12CB12C18 -:10349000082E04C0880C991CAA1CBB1C0A94D2F7E5 -:1034A000C4FE14C00FE010E020E030E0B901A80134 -:1034B00004C0440F551F661F771F8A95D2F7CB01B2 -:1034C000BA01609570958095909503C060E070E0BA -:1034D000CB01272D26952695237030E0223031052B -:1034E00069F02330310589F0682979298A299B29D7 -:1034F0002130310571F00E94D21F03C1682979295A -:103500008A299B290E94EE1FFCC00E94D21FC50180 -:10351000B4010E94B61FF5C0112319F0872D8170E8 -:1035200001C08695882309F4ECC08C2D8295869580 -:103530008770880F880F9C2D9F70892E912CA12C4D -:10354000B12C082E04C0880C991CAA1CBB1C0A9420 -:10355000D2F7C4FE14C00FE010E020E030E0B90163 -:10356000A80104C0440F551F661F771F8A95D2F724 -:10357000CB01BA01609570958095909503C060E08D -:1035800070E0CB01272D269526952370422F50E021 -:103590004230510569F04330510589F06829792995 -:1035A0008A299B294130510571F00E94AC20A9C0A5 -:1035B000682979298A299B290E94C820A2C00E94D3 -:1035C000AC20C501B4010E9490209BC08C2D90E0DE -:1035D000FC01E05EF109E531F10508F050C0E05969 -:1035E000FF4F0C94A52C0C2D0F70872D8F7111237C -:1035F00021F00E942920802F07CF0E944A20802F8F -:103600000E945F197EC0112341F0053008F079C097 -:10361000872D8F710E946F2074C0063008F071C032 -:10362000F7CF112339F0872D8F710E94292069C0AF -:103630001123C9F3872D8F710E944A2062C0112384 -:1036400029F0872D8F710E9414205BC00E940A20F0 -:1036500058C0112351F0172D1F71812F0E9429206E -:1036600063E0812F0E943D214CC081E00E944621F1 -:10367000023008F446C082E00E94462142C0112375 -:1036800031F0002381F28C2D0E9441183AC00023B2 -:1036900089F28C2D0E94091934C0472D4F706C2D72 -:1036A000C7010E9485030E942E1F2BC0111129C043 -:1036B000472D4F7050E042305105B9F04CF44115A0 -:1036C000510581F041305105E1F40E943C2819C0B8 -:1036D0004330510569F04430510599F48C2D0E9416 -:1036E0008E280FC00E9425280CC00E94582809C0AF -:1036F0000E946B2806C0472D4F706C2DC7010E9499 -:10370000FB05DD20F9F00E94392180FD1BC0F70187 -:1037100012820E9433210E942920C7010E94B11BFE -:103720000E9433210F90DF91CF911F910F91FF9055 -:10373000EF90DF90CF90BF90AF909F908F907F9051 -:103740000C944A200F90DF91CF911F910F91FF9021 -:10375000EF90DF90CF90BF90AF909F908F907F9031 -:1037600008950F931F93CF93DF93EC018881998184 -:103770002B813C81232BB9F09F3F11F48F3F99F0AF -:10378000CE010E94FA03882371F0688179818A81D1 -:103790000E942F218C010E94E4200E94AB1FB801DF -:1037A000CE010E946619DF91CF911F910F9108956C -:1037B0000E9407220E9417220E94DC210E943122CF -:1037C0000E94F2250E94412580E090E00E942C1783 -:1037D00080E090E00C9442170E94F7210C94D81BD3 -:1037E0000E942421292F22952F7030E02C303105A2 -:1037F0004CF42A3031056CF4225031092230310565 -:10380000A8F407C02C30310569F02F30310551F094 -:103810000DC0803F69F018F4803E40F409C0843F39 -:1038200029F406C093FB882780F9089580E0089565 -:1038300081E00895CF93DF9300D000D01F92CDB7E1 -:10384000DEB70F900F900F900F900F90DF91CF91F8 -:103850000895CF93DF9300D000D000D0CDB7DEB76E -:1038600026960FB6F894DEBF0FBECDBFDF91CF9185 -:1038700008951F93CF93DF93C0919D0216E080912E -:103880009E02C81799F0D0E01C9FF0011D9FF00D1B -:103890001124E156FD4F4081518162817381848101 -:1038A00095810E94291C2196C770E9CFDF91CF91A5 -:1038B0001F9108954091CF025091D0026091D102A2 -:1038C0007091D2028091D3029091D4020C94291C61 -:1038D0008091D40282958F7009F054C08091D102FA -:1038E000882309F44FC080919D02A0919E026091AF -:1038F000CF027091D0024091D2025091D302B6E033 -:103900008A1709F43FC090E041155105C1F17F3F8E -:1039100011F46F3FA1F1B89FF001B99FF00D112490 -:10392000E156FD4F218172132AC02081621327C006 -:103930002281211124C0238134812417350710F4FA -:1039400021503109241B350B283C3105C0F420914E -:10395000D4022F7020612093D40226E0289FF0012A -:10396000299FF00D1124EC55FD4F80818F708061EF -:1039700080838FEC92E00E94B11B0C94391C01965D -:103980008770BECF0895CF92DF92EF92FF920F9390 -:103990001F93CF93DF93CDB7DEB762970FB6F8943E -:1039A000DEBF0FBECDBF8C0185E0F801DE011D96A4 -:1039B00001900D928A95E1F7D8014C9111965C9196 -:1039C000119712966C9112971396CD90DC901497E4 -:1039D0003091CF027091D0028091D2029091D302A7 -:1039E000009709F46BC17F3F19F43F3F09F466C1AA -:1039F000E090D102EE2009F4C0C02091D402C81694 -:103A0000D90628F0F601E81BF90BCF0104C0809518 -:103A100090958C0D9D1DFF24F394883C910578F0C2 -:103A2000F12C207F09F0C6C07C2DD98AC88A8989EB -:103A30000E941A1C8FEC92E00E94B11BB1C0822F31 -:103A4000807F09F046C0751314C0341312C0611191 -:103A500010C02F7020612093D4020E945A1C8FEC5A -:103A600092E00E94B11B8091D402D80115968C93EC -:103A70002EC0CD2819F15F3F11F44F3FF9F0F62E1B -:103A800061111CC080919D0220919E0236E0821738 -:103A900009F45AC090E0389FF001399FF00D1124CD -:103AA000E156FD4F7181571306C07081471303C063 -:103AB0007281711103C001968770E9CFF62E6623DB -:103AC00009F418C18091D40281608093D402F12C52 -:103AD00011C1751308C0341306C0611104C0809170 -:103AE000D402D801C3C04D875E878D859E856A8BC1 -:103AF0000E94F01B6A898823E1F16623D1F12091AD -:103B0000D402822F82958F7090E0029774F080919A -:103B1000CF029091D00298878F831986DB86CA8660 -:103B20002C87CE0107960E94B11B86E0F801AFEC0E -:103B3000B2E001900D928A95E1F70E94681C0E9404 -:103B40005A1CFF24F394D6C04D875E878D859E85D1 -:103B50000E942421292F22952F7030E02230310538 -:103B60000CF0BCC09F7009F0B6C0805E883008F4CD -:103B7000C1C0C8010E94B11BE4CFC816D90608F421 -:103B800053C0F601E81BF90BCF01883C910508F4FE -:103B900050C0F12C7C2DD98AC88A89890E941A1CB0 -:103BA000EFECF2E086E0DF011D928A95E9F70E94D2 -:103BB0005A1CA0C0751314C0341312C0611110C078 -:103BC0008091D402F8018583C8010E94B11B86E070 -:103BD000EFECF2E0DF011D928A95E9F7FE2C8AC036 -:103BE0004D875E878D859E856A8B0E94F01B6A8952 -:103BF000882309F4BECF662309F4BBCF2091D402F9 -:103C0000822F82958F7090E002970CF48ECF809176 -:103C1000CF029091D0029A8389831B82DD82CC826D -:103C20002E83CE0101967FCF809590958C0D9D1DA2 -:103C3000ACCFF62E662309F49CCF75132EC0341337 -:103C40002CC02091D40220FD1FC0822F82958F703E -:103C5000D9F0D80115962C9315978F3049F08F5FC6 -:103C6000982F9295907F822F8F70892B15968C9329 -:103C7000C8010E94B11B86E0F801AFECB2E00190F0 -:103C80000D928A95E1F793CF86E0F801AFECB2E0B0 -:103C900001900D928A95E1F72DC04D875E878D8545 -:103CA0009E850E94F01B811140CF8091D4028160DB -:103CB0008093D402C8010E94B11B1CC0662309F482 -:103CC00058CF4D875E878D859E850E94F01B882387 -:103CD00009F44FCF2ACF811148CF0CC024303105D1 -:103CE0000CF047CF9F7009F440CFF8019581907F89 -:103CF00009F03BCF8F2D62960FB6F894DEBF0FBE52 -:103D0000CDBFDF91CF911F910F91FF90EF90DF908A -:103D1000CF9008951F93CF93DF93CDB7DEB72C9745 -:103D20000FB6F894DEBF0FBECDBF4F8358876987AB -:103D30007A878B879C87CE0107960E94C31C8823B5 -:103D400069F08F8198852A853B85232BF1F19F3F70 -:103D500009F063C08F3F09F060C037C086E0FE0104 -:103D60003796DE01119601900D928A95E1F76F81E9 -:103D70007885EA85FB85309741F17F3F11F46F3FED -:103D800021F120919E0230E0C901019687709927A8 -:103D900040919D0250E08417950709F447C069835C -:103DA0007A83FD83EC8396E0929FD001939FB00DC0 -:103DB0001124A156BD4FFE01319601900D929A95A6 -:103DC000E1F780939E020E94391C16E080919D02CB -:103DD00090919E028917C1F1189FC001112481564C -:103DE0009D4F0E94C31C882379F1E0919D021E9F84 -:103DF000F0011124E156FD4F4081518162817381B0 -:103E0000848195810E94291C80919D0290E00196F9 -:103E10008770992780939D02D9CF4F8158856985F6 -:103E20007A858B859C850E94291CCFCF0E94EC1B34 -:103E300010929E0210929D02EFECF2E086E0DF010C -:103E40001D928A95E9F7C1CF2C960FB6F894DEBF84 -:103E50000FBECDBFDF91CF911F910895EF92FF92DA -:103E60000F931F93CF93DF938C01009709F46CC0DD -:103E7000F12CEE24E394E8012196F8018491843733 -:103E800040F4843008F051C0813081F0823019F163 -:103E90005BC0853709F444C0A8F19CE7980F9037C0 -:103EA00008F052C08F770E94091941C00E5F1F4F62 -:103EB000FE01C49180E28C0F883048F4C7708E2DCB -:103EC00001C0880FCA95EAF70E940A2214C08C2FFD -:103ED0000E9441182DC00E5F1F4FFE01C49180E269 -:103EE0008C0F883058F4C7708E2D01C0880FCA958A -:103EF000EAF70E9410220E9431221AC08C2F0E94E1 -:103F0000091916C00E5F1F4FFE01C491CC2381F02A -:103F10008FE99FE00197F1F700C00000C150F6CF94 -:103F20000E5F1F4FFE01F49003C00E9441188E01E6 -:103F30008F2D882309F49FCFEFE9FFE03197F1F748 -:103F400000C000008150F5CFDF91CF911F910F91FC -:103F5000FF90EF90089508956093D9027093DA026C -:103F60008093DB029093DC020C94D81B0F931F9379 -:103F70000091D9021091DA022091DB023091DC022B -:103F8000DC01CB01802B912BA22BB32B8093D90288 -:103F90009093DA02A093DB02B093DC021F910F91A1 -:103FA0000C94D81B0F931F930091D9021091DA0241 -:103FB0002091DB023091DC02DC01CB0180239123D4 -:103FC000A223B3238093D9029093DA02A093DB0259 -:103FD000B093DC021F910F910C94D81B0F931F9389 -:103FE0000091D9021091DA022091DB023091DC02BB -:103FF000DC01CB0180279127A227B3278093D90228 -:104000009093DA02A093DB02B093DC021F910F9130 -:104010000C94D81B1092D5021092D6021092D7029F -:104020001092D8020C94D81B41E050E060E070E0A0 -:1040300004C0440F551F661F771F8A95D2F740931F -:10404000D5025093D6026093D7027093D8020C9495 -:10405000D81B41E050E060E070E004C0440F551F01 -:10406000661F771F8A95D2F78091D5029091D6026C -:10407000A091D702B091D802482B592B6A2B7B2BE9 -:104080004093D5025093D6026093D7027093D80222 -:104090000C94D81B41E050E060E070E004C0440F95 -:1040A000551F661F771F8A95D2F7409550956095EA -:1040B00070958091D5029091D602A091D702B091CF -:1040C000D802482359236A237B234093D502509377 -:1040D000D6026093D7027093D8020C94D81B41E0AB -:1040E00050E060E070E004C0440F551F661F771F6A -:1040F0008A95D2F78091D5029091D602A091D702ED -:10410000B091D802482759276A277B274093D502C8 -:104110005093D6026093D7027093D8020C94D81BA8 -:104120000F931F930091D5021091D6022091D702D0 -:104130003091D802DC01CB01802B912BA22BB32B29 -:104140008093D5029093D602A093D702B093D80261 -:104150001F910F910C94D81B0F931F930091D502C0 -:104160001091D6022091D7023091D802DC01CB0108 -:1041700080239123A223B3238093D5029093D60268 -:10418000A093D702B093D8021F910F910C94D81B23 -:104190000F931F930091D5021091D6022091D70260 -:1041A0003091D802DC01CB0180279127A227B327C9 -:1041B0008093D5029093D602A093D702B093D802F1 -:1041C0001F910F910C94D81B0895CF92DF92EF921C -:1041D000FF920F931F93CF93DF938C01C090D9026E -:1041E000D090DA02E090DB02F090DC028091D50200 -:1041F0009091D602A091D702B091D802C82AD92AAC -:10420000EA2AFB2ACFE1D0E0D701C6010C2E04C078 -:10421000B695A795979587950A94D2F780FF06C023 -:10422000B8018C2F0E948008019721F4219760F734 -:1042300080E001C08C2FDF91CF911F910F91FF90F3 -:10424000EF90DF90CF900895CF93DF93EC010E9421 -:10425000E520BE010E948008DF91CF910895CB0137 -:104260000E94242108958091DD028595859585958C -:1042700008958091DD028770089598E0899F9001EC -:104280001124262B2093DD020C9429202091DD029D -:10429000809582238093DD02982F977069F430E037 -:1042A000482F552747FD50952417350729F0859548 -:1042B000859585950C944A2008959091DD0297701C -:1042C00081E009F480E0089590911501992321F08F -:1042D00090911601911109C0209117013091180198 -:1042E000F90132969FEF40E01FC0982F9695969562 -:1042F00096959F3050F5E0911701F0911801E90F64 -:10430000F11D877021E030E0A90102C0440F551F64 -:104310008A95E2F7CA019181892B818308959F3F95 -:1043200039F04F5F4E3041F051915813F8CF0DC026 -:104330005111F7CF942FF5CF9F3F39F0F901E90FD5 -:10434000F11D97FDFA9582830895089590911501C6 -:10435000992321F090911601911109C02091170124 -:1043600030911801F9013296205F3F4F1FC0982FFE -:104370009695969596959F30F0F4E0911701F091FF -:104380001801E90FF11D877021E030E0A90102C09A -:10439000440F551F8A95E2F7CA01809591818923C0 -:1043A000818308953196E217F30729F090819813DD -:1043B000F9CF1082F7CF089581E090E0E0911701E6 -:1043C000F0911801E80FF91F1082019680319105D4 -:1043D000A9F708959091F102892B8093F102089535 -:1043E00080959091F10289238093F10208951092B3 -:1043F000F10208959091F002892B8093F0020895C4 -:1044000080959091F00289238093F0020895109294 -:10441000F00208959091EF02892B8093EF020895A6 -:1044200080959091EF0289238093EF020895109276 -:10443000EF0208958093DE0208951092DE0208953F -:104440008091170190911801FC0131969C01205F29 -:104450003F4F80E0919191118F5FE217F307D1F701 -:104460000895E0911701F09118018091F102808385 -:10447000E0911701F091180190818091F002892B51 -:104480008083E0911701F091180190818091EF02F3 -:10449000892B80838091DE02882361F0E0911701EF -:1044A000F09118019081892B80830E942022811134 -:1044B0001092DE0280911701909118010C9416174A -:1044C00020E0009739F0AC01415051098423952335 -:1044D0002F5FF7CF822F089580911303843039F135 -:1044E0001092F30220E488E190E00FB6F894A895CA -:1044F000809360000FBE2093600080E00E94EC0279 -:1045000080E00E941A0983B7817F846083BF83B7EC -:10451000816083BF7894889583B78E7F83BF88E15D -:104520000FB6F89480936000109260000FBE08955B -:104530000895089580E00E94EC020E9498220E9453 -:1045400075090E9499220E94FA0991E0811101C027 -:1045500090E0892F08950E94EC1B80E00E94EC02FD -:104560000E9414280E940A170C941A091F920F9295 -:104570000FB60F9211248F939F93AF93BF938091A7 -:10458000F302811113C08091F4029091F502A09181 -:10459000F602B091F7024196A11DB11D8093F4027D -:1045A0009093F502A093F602B093F702BF91AF91FA -:1045B0009F918F910F900FBE0F901F90189582E0E2 -:1045C00084BD93E095BD9AEF97BD80936E000895EA -:1045D0002FB7F8948091F4029091F502A091F60221 -:1045E000B091F7022FBF0895CF92DF92EF92FF9222 -:1045F0000F931F932FB7F8944091F4025091F50256 -:104600006091F6027091F7022FBF6A017B01EE24E0 -:10461000FF248C0120E030E0C016D106E206F3064C -:1046200010F4415051099A01281B390BC9011F91FF -:104630000F91FF90EF90DF90CF9008951F920F920F -:104640000FB60F9211248F939F93AF93BF938091D6 -:10465000F4029091F502A091F602B091F702019652 -:10466000A11DB11D8093F4029093F502A093F60270 -:10467000B093F702BF91AF919F918F910F900FBEB2 -:104680000F901F9018950E940714F8942FEF87EA57 -:1046900091E6215080409040E1F700C0000087E0A3 -:1046A00090EBDC0180931E0390931F03A0932003E3 -:1046B000B09321039CE088E10FB6F894A89580930D -:1046C00060000FBE90936000FFCF0E94A423811171 -:1046D00002C00E9480230E94AF238093F2020E94B6 -:1046E000B72380931C0387FB882780F980931601EA -:1046F0000E94B323682F70E080E090E00C94AC1F20 -:104700006DEE7EEF80E090E00E94CB2C60E082E0D6 -:1047100090E00E94B92C60E083E090E00E94B92C08 -:1047200060E084E090E00E94B92C60E085E090E0D9 -:104730000E94B92C60E086E090E00E94B92C6FEFF7 -:1047400087E090E00C94B92C80E090E00E94B32CBC -:1047500021E08D3E9E4F09F020E0822F089582E0F7 -:1047600090E00C94AB2C83E090E00C94AB2C84E0B4 -:1047700090E00C94AB2C682F84E090E00C94B92C62 -:1047800086E090E00C94AB2C682F86E090E00C94CF -:10479000B92C87E090E00C94AB2C682F87E090E078 -:1047A0000C94B92C8091FA0280FF0BC060911C011F -:1047B00085E0689FB001112475956795759567959B -:1047C0002BC081FF09C060911C0185E0689FB0018A -:1047D00011247595679520C082FF07C060911C0168 -:1047E00085E0689FB001112417C09091FB029923C6 -:1047F000D1F060911B01961788F720911C0185E08C -:10480000289F90011124929FA001939F500D112485 -:1048100070E0CA010E94912C6038710540F4611566 -:10482000710539F002C065E070E0862F08958FE7CA -:10483000089581E008958091FA0280FF08C0609198 -:104840001A0170E0759567957595679521C081FF90 -:1048500006C060911A0170E07595679519C082FFD6 -:1048600004C060911A0170E010C09091FB0299237E -:10487000C1F0609119019617A0F780911A01899FE4 -:10488000C001112470E00E94912C6038710528F459 -:104890006115710521F0862F08958FE7089581E055 -:1048A000089561E070E0F4CF803F21F40E94D223AC -:1048B000819504C0813F29F40E94D2238093FE0297 -:1048C0000895823F21F40E94D223819504C0833F42 -:1048D00029F40E94D2238093FD020895893F19F4A0 -:1048E0000E941B2405C08A3F31F40E941B2481953D -:1048F0008093FF0208958B3F21F40E941B24819531 -:1049000004C08C3F29F40E941B2480930003089567 -:10491000843F21F48091FC02816017C0853F21F41F -:104920008091FC02826011C0863F21F48091FC02DC -:1049300084600BC0873F21F48091FC02886005C031 -:10494000883F31F48091FC0280618093FC020895DD -:104950008D3F21F48091FA0281600BC08E3F21F4DB -:104960008091FA02826005C08F3F29F48091FA029B -:1049700084608093FA020895803F39F48091FE02AA -:1049800087FF6CC01092FE0269C0813F29F48091BC -:10499000FE021816BCF362C09091FD02823F29F41A -:1049A00097FF5CC01092FD0259C0833F19F419169D -:1049B000CCF354C0893F41F48091FF0218160CF0EB -:1049C0004DC01092FF024AC08A3F29F48091FF0235 -:1049D00087FF44C0F6CF8B3F39F48091000387FFF7 -:1049E0003DC0109200033AC08C3F29F4809100032F -:1049F0001816BCF333C0843F21F48091FC028E7FF3 -:104A000017C0853F21F48091FC028D7F11C0863F45 -:104A100021F48091FC028B7F0BC0873F21F48091B1 -:104A2000FC02877F05C0883F31F48091FC028F7EB5 -:104A30008093FC0213C08D3F21F48091FA028E7F97 -:104A40000BC08E3F21F48091FA028D7F05C08F3F0D -:104A500029F48091FA028B7F8093FA028091FD0203 -:104A600081110EC08091FE0281110AC08091FF0267 -:104A7000811106C080910003811102C01092FB02D7 -:104A800008958CEF92E00E9421170E94E8229093F3 -:104A9000F9028093F80208951F93CF93DF938091DA -:104AA000F8029091F9020E94F422AC019091FB026D -:104AB000992321F020911D0130E006C020911E01B4 -:104AC0008AE0289F900111244217530708F486C0FA -:104AD0008091FD02C091FE02D091FF02109100036F -:104AE000811107C0C11176C0D11174C0111172C0FB -:104AF00075C09F3F19F09F5F9093FB02181624F436 -:104B00000E94D2238093FD028091FD0287FF05C0A1 -:104B10000E94D22381958093FD021C1624F40E94EA -:104B2000D2238093FE028091FE0287FF05C00E947F -:104B3000D22381958093FE026091FD02662339F1B4 -:104B4000C091FE02CC2319F1772767FD7095872F5E -:104B5000972F0E94B32923E333E343E35FE30E94EB -:104B6000C32A0E9480296093FD026C2F772767FD7E -:104B70007095872F972F0E94B32923E333E343E3F4 -:104B80005FE30E94C32A0E9480296093FE021D16E3 -:104B900024F40E941B248093FF028091FF0287FF70 -:104BA00005C00E941B2481958093FF02111624F4F6 -:104BB0000E941B24809300038091000387FF05C09F -:104BC0000E941B24819580930003DF91CF911F9158 -:104BD0000C9441259F3F09F08ECF96CFDF91CF9166 -:104BE0001F910895ECEFF2E085E0DF011D928A95B8 -:104BF000E9F71092FB021092FA020895833081F1D6 -:104C000028F4813059F08230D1F00895853009F4CC -:104C100049C0B8F1863009F456C0089580911E014C -:104C2000262F30E0280F311D2F3F310524F4680F67 -:104C300060931E0108958FEF80931E010895809167 -:104C40001D01262F30E0280F311D2F3F310524F4A0 -:104C5000680F60931D0108958FEF80931D010895E3 -:104C600080911C01262F30E0280F311D2F3F310588 -:104C700024F4680F60931C0108958FEF80931C014A -:104C8000089580911B01262F30E0280F311D2F3F02 -:104C9000310524F4680F60931B0108958FEF809312 -:104CA0001B01089580911A01262F30E0280F311D35 -:104CB0002F3F310524F4680F60931A0108958FEF98 -:104CC00080931A01089580911901262F30E0280F52 -:104CD000311D2F3F310524F4680F609319010895A9 -:104CE0008FEF809319010895833011F128F48130FA -:104CF00049F0823091F00895853081F120F18630BD -:104D0000C1F1089580911E01681720F4861B8093DD -:104D10001E01089510921E01089580911D016817CB -:104D200020F4861B80931D01089510921D010895A3 -:104D300080911C01681720F4861B80931C01089544 -:104D400010921C01089580911B01681720F4861BA6 -:104D500080931B01089510921B01089580911A0100 -:104D6000681720F4861B80931A01089510921A0187 -:104D7000089580911901681720F4861B809319010A -:104D800008951092190108950F931F93873208F028 -:104D900048C08E3108F08DC0803109F477C008F525 -:104DA000873009F461C068F4863009F09DC08091B5 -:104DB000F202817F8E7F8093F20281E08093020372 -:104DC00094C08B3009F489C08E3009F08DC0809179 -:104DD000F20282FB222720F991E0922790FB82F9D0 -:104DE0005EC0863109F479C060F4813109F07CC07D -:104DF0000E94EC1B9091160181E089278093160197 -:104E00006CC0893109F469C08B3109F06DC08091A3 -:104E1000F20281FB222720F991E0922790FB81F991 -:104E20003EC0883309F459C050F4893209F457C0A0 -:104E3000853309F454C0873209F451C055C0833416 -:104E400009F44DC028F48A3308F44EC0895332C0A7 -:104E5000883409F049C00E94EC1B0E942A0A0E9473 -:104E6000F1030E94432339C09091F202892F80956B -:104E7000817080FB90F929F0966098609093F2021F -:104E800034C0997F977F9093F20227C08091F202FD -:104E900083FB222720F991E0922790FB83F98093EE -:104EA000F2029923D1F08091F20281608093F202A4 -:104EB00014C08D5141E050E060E070E08A019B0138 -:104EC00004C0000F111F221F331F8A95D2F7C9019A -:104ED000B8010E94AC1F0E94EC1B81E006C061E09B -:104EE00070E080E090E0F5CF80E01F910F91089591 -:104EF00080E0089580E00895CF93C82F8091020349 -:104F0000813069F018F08230C9F184C0E091170156 -:104F1000F09118018081823209F07EC007C0E091D3 -:104F20001701F09118018081823261F48C2F0E9468 -:104F30007827811104C08C2F0E94C4261DC081E0F7 -:104F400090E01AC08C2F0E947A27811114C0C431BE -:104F500079F048F4CB3079F0C03109F061C082E0DB -:104F60008093020308C0C93219F0C83321F058C039 -:104F70001092020355C081E0817054C0C93291F192 -:104F800020F5C43179F1B0F4C73009F047C08EE1A3 -:104F900080931E0182E380931D018AE080931C01AF -:104FA00084E180931B0188E080931A0188E280935A -:104FB000190134C0CE51C63088F5EC2FF0E0EA5428 -:104FC000FE4F80818093010329C0CE34E9F020F4A4 -:104FD000CB3421F56AE013C0C13579F0C235F1F464 -:104FE00061E00DC080910103882319F01092010344 -:104FF00015C081E08093020315C061E006C0809176 -:1050000001030E94FE250AC06AE0809101030E940C -:10501000742604C01092020380E004C081E002C044 -:1050200080E0AACFCF9108950E94A423811102C0ED -:105030000E9480230E94C02380931D0380FF02C032 -:10504000869501C080E00C94EC0280911D03982F9E -:105050009695292F30E0233031054CF49F5F990F4E -:105060008170892B816080931D030E94C4238091ED -:105070001D0386950C94EC0280911D03982F969544 -:1050800091F09158990F8170892B80931D038E7F29 -:1050900091E009F490E080911D0390FB80F98093EA -:1050A0001D030E94C42380911D0386950C94EC027D -:1050B00080911D03982F909590FB80F980931D039C -:1050C0000E94C42380911D0380FF02C0869501C009 -:1050D00080E00C94EC0290911D03892F86958F5FE0 -:1050E0008F779170843028F4880F892B80931D036B -:1050F00002C090931D0380911D038E7F91E009F4FF -:1051000090E080911D0390FB80F980931D030E9425 -:10511000C42380911D0386950C94EC0220911D03FD -:10512000922F96958927982F990F822F8170892B1E -:1051300080931D038E7F91E009F490E080911D0320 -:1051400090FB80F980931D030E94C42380911D036E -:1051500086950C94EC0280911D0386950895505815 -:10516000BB27AA270ED0D1C1C2D130F0C7D120F0C1 -:1051700031F49F3F11F41EF4B7C10EF4E095E7FB44 -:105180009FC1E92FD3D180F3BA1762077307840751 -:10519000950718F071F49EF5EBC10EF4E0950B2E17 -:1051A000BA2FA02D0B01B90190010C01CA01A00179 -:1051B0001124FF27591B99F0593F50F4503E68F1D4 -:1051C0001A16F040A22F232F342F4427585FF3CF15 -:1051D000469537952795A795F0405395C9F77EF4E6 -:1051E0001F16BA0B620B730B840BBAF09150A1F02F -:1051F000FF0FBB1F661F771F881FC2F70EC0BA0FB5 -:10520000621F731F841F48F4879577956795B7953C -:10521000F7959E3F08F0B3CF9395880F08F0992734 -:10522000EE0F97958795089527D108F481E00895AA -:105230000CD06BC163D140F05AD130F021F45F3F04 -:1052400019F03EC1511195C14FC170D198F3992306 -:10525000C9F35523B1F3951B550BBB27AA2762173A -:105260007307840738F09F5F5F4F220F331F441F7F -:10527000AA1FA9F333D00E2E3AF0E0E830D09150B7 -:105280005040E695001CCAF729D0FE2F27D0660FA4 -:10529000771F881FBB1F261737074807AB07B0E8E3 -:1052A00009F0BB0B802DBF01FF2793585F4F2AF0F9 -:1052B0009E3F510568F004C15CC15F3FECF3983E2E -:1052C000DCF3869577956795B795F7959F5FC9F756 -:1052D000880F911D9695879597F90895E1E0660FDF -:1052E000771F881FBB1F621773078407BA0720F058 -:1052F000621B730B840BBA0BEE1F88F7E0950895C1 -:1053000004D06894B11135C1089518D188F09F5721 -:1053100090F0B92F9927B751A0F0D1F0660F771F01 -:10532000881F991F1AF0BA95C9F712C0B13081F0E1 -:105330001FD1B1E008951CC1672F782F8827B85F6F -:1053400039F0B93FCCF3869577956795B395D9F742 -:105350003EF490958095709561957F4F8F4F9F4F4C -:105360000895E89409C097FB3EF490958095709558 -:1053700061957F4F8F4F9F4F9923A9F0F92F96E9A1 -:10538000BB279395F695879577956795B795F11116 -:10539000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB3 -:1053A0008F4F9F4F16C0882311F096E911C07723C5 -:1053B00021F09EE8872F762F05C0662371F096E8CE -:1053C000862F70E060E02AF09A95660F771F881F9D -:1053D000DAF7880F9695879597F9089588D018F091 -:1053E00011F08CD038F480C0C4C0E92F9FD0B0F346 -:1053F0005523C9F3E7FB6217730784079507A8F1E4 -:1054000099F3E92FFF2788232AF03197660F771F3A -:10541000881FDAF7952F5527442332F091505040DA -:10542000220F331F441FD2F7BB27E91BF50B621B6A -:10543000730B840BB109C1F222F4620F731F841F36 -:10544000B11D31972AF0660F771F881FBB1FEFCF62 -:10545000915050405AF041F0882332F0660F771F88 -:10546000881F91505040C1F7939530C0869577952D -:1054700067959F5FD9F7F8CF990F0008550FAA0BD2 -:10548000E0E8FEEF16161706E807F907C0F0121657 -:105490001306E407F50798F0621B730B840B950B5A -:1054A00039F40A2661F0232B242B252B21F40895AF -:1054B0000A2609F4A140A6958FEF811D811D08954C -:1054C00097F99F6780E870E060E008959F3F31F0B2 -:1054D000915020F4879577956795B795880F911D22 -:1054E0009695879597F908959FEF80EC089500248D -:1054F0000A941616170618060906089500240A9439 -:1055000012161306140605060895092E0394000CBE -:1055100011F4882352F0BB0F40F4BF2B11F460FF4D -:1055200004C06F5F7F4F8F4F9F4F089557FD905876 -:10553000440F551F59F05F3F71F04795880F97FB57 -:10554000991F61F09F3F79F0879508951216130611 -:105550001406551FF2CF4695F1DF08C01616170640 -:105560001806991FF1CF8695710561050894089575 -:10557000E894BB2766277727CB0197F908957CDF4E -:1055800008F48FEF08950BD0C0CFB1DF28F0B6DF5D -:1055900018F0952309F094CFA7CF1124EACFC6DFE6 -:1055A000A0F3959FD1F3950F50E0551F629FF00136 -:1055B000729FBB27F00DB11D639FAA27F00DB11D8F -:1055C000AA1F649F6627B00DA11D661F829F222718 -:1055D000B00DA11D621F739FB00DA11D621F839F9F -:1055E000A00D611D221F749F3327A00D611D231F75 -:1055F000849F600D211D822F762F6A2F11249F57C3 -:1056000050408AF0E1F088234AF0EE0FFF1FBB1FE5 -:10561000661F771F881F91505040A9F79E3F510584 -:1056200070F04ECFA6CF5F3FECF3983EDCF386954B -:1056300077956795B795F795E7959F5FC1F7FE2B2F -:10564000880F911D9695879597F90895FA01EE0FA9 -:10565000FF1F30962105310599F16115710561F43F -:105660008038BFE39B0749F168949038810561F069 -:105670008038BFEF9B0741F0992342F5FF3FE105DA -:105680003105210511F1E8940894E795D901AA2381 -:1056900029F4AB2FBE2FF85FD0F310C0FF5F70F47A -:1056A000A695E0F7F73950F019F0FF3A38F49F77F4 -:1056B0009F930CD00F9007FC905808953EF014CFA4 -:1056C00060E070E080E89FE308954FE79F775F9385 -:1056D0004F933F932F939ED02F913F914F915F9186 -:1056E00052DF05C019F40EF0EBCE42CFFDCE26DF1F -:1056F000C8F39638C0F707F80F92E8942BE33AEA1C -:1057000048EB5FE74EDF0F920F920F924DB75EB7F7 -:105710000F92C0D0EAE0F1E016D04F915F91EF9187 -:10572000FF91E595EE1FFF1F49F0FE57E068442703 -:10573000EE0F441FFA95E1F74195550B32D00F90CB -:1057400007FE26C00895DF93CF931F930F93FF9218 -:10575000EF92DF927B018C01689405C0DA2EEF0195 -:105760001EDFFE01E894A591259135914591559153 -:10577000AEF3EF0106DDFE019701A801DA9479F797 -:10578000DF90EF90FF900F911F91CF91DF910895DF -:105790009B01AC0160E070E080E89FE349CD90CED2 -:1057A00095CECCDEE8F39923D9F3940F511DBBF3CA -:1057B0009150504094F059F0882332F0660F771FD3 -:1057C000881F91505040C1F79E3F510544F7880F04 -:1057D000911D9695879597F908955F3FACF0983E97 -:1057E0009CF0BB27869577956795B79508F4B160CF -:1057F0009395C1F7BB0F58F711F460FFE8CF6F5FC7 -:105800007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE65 -:10581000689456CE93DEC8F39923D1F3C6F3DF9391 -:10582000CF931F930F93FF92C92FDD2788232AF070 -:105830002197660F771F881FDAF720E030E040E8F5 -:105840005FEB9FE3883920F0803E30F021968F7720 -:1058500087DCE2E3F1E003C083DCEFE5F1E073DF36 -:105860008B01BE01EC01FB2E6F5771097595771FF7 -:10587000880B990B78DD28E132E741E35FE38FDEA7 -:10588000AF2D9801AE01FF900F911F91CF91DF9145 -:1058900078DC3BCEFA01DC01AA0FBB1F9B01AC01F7 -:1058A000BF5728F422273327442750781FC0B75109 -:1058B00088F4AB2F0024469537952795011CA395B6 -:1058C000D2F3002069F0220F331F441FB395DAF39F -:1058D0000DD045CC61307105A0E88A07B94630F497 -:1058E0009B01AC016627772788279078309621F0B6 -:1058F00020833183428353830895AA1BBB1B51E14C -:1059000007C0AA1FBB1FA617B70710F0A61BB70B2F -:10591000881F991F5A95A9F780959095BC01CD01D4 -:10592000089597FB072E16F4009407D077FD09D051 -:105930000E947D2C07FC05D03EF4909581959F4FE9 -:105940000895709561957F4F0895EE0FFF1F0590A4 -:10595000F491E02D0994F999FECF92BD81BDF89A9A -:10596000992780B50895A8E1B0E042E050E00C949A -:10597000D32C262FF999FECF92BD81BDF89A0197BD -:1059800000B4021639F01FBA20BD0FB6F894FA9A87 -:10599000F99A0FBE08950196272F0E94BA2C0C94F5 -:1059A000B92CDC01CB01FC01F999FECF06C0F2BD98 -:1059B000E1BDF89A319600B40D9241505040B8F7CD -:0659C0000895F894FFCFEA -:1059C600640007000CFF0000003F640E109C107975 -:1059D60010451011100101DF022808140A321E00BA -:1059E60002040507090B0C0E1011131517181A1CC3 -:1059F6001D1F2123242628292B2D2F3032343537FD -:105A0600393B1F0F03764F5F6F7F49694379095909 -:105A160053633149803F5D8B803FF8BF803FCAE1C9 -:105A2600803F73ED803FCAE1803FF8BF803F5D8BCA -:105A3600803F3149803F0000803FF16D7F3F75EA2E -:105A46007E3F4C827E3F833F7E3F84287E3F833F5E -:105A56007E3F4C827E3F75EA7E3FF16D7F3F0000C0 -:105A6600803F3F4D3639E304960460042704BA03A9 -:105A7600D303EC0305040102030405060708090025 -:00000001FF diff --git a/keyboard/planck/keymaps/jacob/compiled.hex b/keyboard/planck/keymaps/jacob/compiled.hex deleted file mode 100644 index b823d6da9e..0000000000 --- a/keyboard/planck/keymaps/jacob/compiled.hex +++ /dev/null @@ -1,1444 +0,0 @@ -:100000000C9461020C94A5020C94A5020C94A50218 -:100010000C94A5020C94A5020C94A5020C94A502C4 -:100020000C94A5020C94A5020C9452140C94241563 -:100030000C9486220C94A5020C94A5020C94A502A3 -:100040000C94A5020C9407030C94A5020C94A50231 -:100050000C94A5020C94EE220C94A5020C94A5021B -:100060000C94A5020C94A5020C94A5020C94A50274 -:100070000C94A5020C94A5020C94A5020C94A50264 -:100080000C94C70A0C94A5020C94A5020C94A5022A -:100090000C94A5020C94A5020C94A5020C94A50244 -:1000A0000C94A5020C94A5020C94A5029115B3150D -:1000B000A116B315A116F8151B16A11670168316F6 -:1000C0006D196D199C199C19DB19FB19511B511BDA -:1000D000061A511BB61AB61A1D1B261B511B4B1BA9 -:1000E000C31AC31AC31AC31AC31AC31AC31AC31A28 -:1000F000C31AC31AC31AC31AC31AC31AC31AC31A18 -:10010000D31AE11AE81AEF1AF91A07634236B79BB5 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000002B001400ED -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A00290004001600070009000A0075 -:1001F0000B000D000E000F0033003400E1001D0065 -:100200001B00060019000500110010003600370021 -:1002100038002872E000E300E200003001522C00B8 -:100220002C0002525000510052004F0035021E02B5 -:100230001F0220022102220223022402250226029A -:1002400027024C0001000100010001000100010033 -:1002500001002D022E022F023002310201000100A6 -:1002600001000100010001000100010001002F0058 -:100270003000010001000100010001000100010047 -:1002800001000100010001000100010035001E0015 -:100290001F0020002100220023002400250026004A -:1002A00027004C0001003A003B003C003D003E00AE -:1002B0003F002D002E002F003000310001004000D3 -:1002C00041004200430044004500010001000100DC -:1002D0000100010001000100010001000100010016 -:1002E0000100010001000100010001002803540089 -:1002F00068006500200050006C0061006E00630023 -:100300006B0020004B006500790062006F00610007 -:100310007200640000002C034F007200740068003B -:100320006F006C0069006E006500610072002000C3 -:100330004B006500790062006F006100720064008C -:10034000730000000403090409026D00040100A009 -:10035000FA09040000010301010009211101000153 -:10036000223F000705810308000A09040100010378 -:10037000010200092111010001224D00070582033D -:1003800008000A090402000103000000092111010C -:1003900000012236000705830308000A0904030050 -:1003A00001030000000921110100012239000705A5 -:1003B00084031000011201100100000008EDFE602E -:1003C0006001000102000105010906A101050719EC -:1003D000E029E71500250195087501810205081936 -:1003E0000129059505750191029501750391010596 -:1003F000071900297715002501957875018102C03C -:1004000005010980A101850216010026B7001A0125 -:10041000002AB700751095018100C0050C0901A1E3 -:10042000018503160100269C021A01002A9C027510 -:100430001095018100C005010902A1010901A10077 -:100440000509190129051500250195057501810288 -:100450009501750381010501093009311581257F59 -:1004600095027508810609381581257F9501750863 -:100470008106050C0A38021581257F9501750881D2 -:1004800006C0C005010906A101050719E029E71505 -:100490000025019508750181029501750881010506 -:1004A00008190129059505750191029501750391BA -:1004B000010507190029FF150025FF95067508811C -:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF -:1004D00003FE24C080911E0390911F03A09120036E -:1004E000B09121038730904BA740B04BB9F41092E4 -:1004F0001E0310921F03109220031092210314BEBA -:1005000084B7877F84BF88E10FB6F894809360003A -:10051000109260000FBEE0E0F8E3099511E0A0E062 -:10052000B1E0E6E6F9E502C005900D92A03CB10706 -:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 -:10054000E1F70E9498110C94B12C0C9400000895CE -:10055000089581E0089508950C94A8020C94A902CE -:100560000C94AB020E947B2823E030E0281B310969 -:10057000220F2093C4010895282F2F988091800086 -:10058000211108C0877F8093800010928D00109207 -:100590008C001BC0886080938000233019F48FEF9B -:1005A0009FEF0FC083E090E0821B9109880F991F95 -:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 -:1005C000CA0190938D0080938C000C94B2020E941B -:1005D000B20284E08093C3011092C0010895279A6B -:1005E0002F988FEF9FEF90938700809386008AE08B -:1005F0008093800089E1809381000E94E4270C941D -:10060000E7020E94EF026E9A769A0C94A7021F925C -:100610000F920FB60F9211242F933F938F939F93B6 -:10062000EF93FF93E091C101F091C201CF010196D8 -:100630009093C2018093C1010090C30102C0F6955E -:10064000E7950A94E2F7EF738091C001823019F4C4 -:10065000E03251F404C0813039F4EF3329F4809151 -:100660006F008D7F80936F00F0E0E457FE4FE491C0 -:1006700021E031E0E29FC001E39F900D1124009042 -:10068000C40102C0969587950A94E2F790938D0075 -:1006900080938C00FF91EF919F918F913F912F91CB -:1006A0000F900FBE0F901F90189561110DC0FC01A7 -:1006B0008281882331F085EE0E9411180E943B2828 -:1006C00003C085EE0E94D91880E090E0089581E093 -:1006D00008950C94670308950C940103809115020A -:1006E000882309F448C08091D1019091D2010097EC -:1006F00079F40E94B8229093D2018093D101809125 -:10070000D30190E0009771F48091D40190E00AC089 -:100710000E94C4222091000130910101281739075D -:1007200040F329C00197880F991F880F991FFC017A -:10073000EB52FE4F60817181828193810E942D0A6C -:10074000E091D30184E0E89FF0011124EB52FE4FC9 -:1007500060817181828193814FE050E00E94E50DBC -:100760008091D30190E001966091D40170E00E94E5 -:10077000612C8093D3010C94AC02109217020C945C -:10078000FA090895089581E0809317020C94C2033A -:10079000089508958F929F92AF92BF92EF92FF9229 -:1007A0000F931F93CF93DF93CDB7DEB7A3970FB609 -:1007B000F894DEBF0FBECDBF7C01FC01008111812A -:1007C000C8010E94B520B8010E94CC058C01B70178 -:1007D0000E946903882309F4CCC10032F0E51F07A9 -:1007E00041F4F7018281882309F458C00E94490E20 -:1007F000C0C10132F0E51F0741F4F701828188236F -:1008000009F44CC00E94520EB4C10232F0E51F0739 -:1008100051F4F7018281882309F440C00E94450EFB -:100820008111F0CFE3CF0332F0E51F0739F4F70170 -:100830008281882399F10E94C3039BC10432F0E5B1 -:100840001F0739F4F7018281882341F10E94BD031B -:1008500090C10532F0E51F0749F4F7018281882332 -:10086000E9F0809117028111F1CFE5CF0632F0E572 -:100870001F0739F4F7018281882381F00E94590E05 -:100880000AC00732F0E51F0749F4F7018281882387 -:1008900029F00E94640E0E94C9036BC18091170267 -:1008A000811105C0F70182818111CFC018C1003EBE -:1008B000110579F4F7018281882309F44DC00E9463 -:1008C000FA0981E080931602109215021092D40169 -:1008D00050C1023E110559F4F70182818823E1F1EC -:1008E0000E94FA09109216021092150242C1033EAC -:1008F000110591F4F7018281882371F10E94FA09B0 -:100900001092160281E0809315021092D30110928A -:10091000D2011092D1012DC10235110559F4F70110 -:100920008281882309F425C1809100019091010101 -:100930000A970DC00135110579F4F70182818823EA -:1009400009F417C180910001909101010A969093DA -:100950000101809300010DC14091040183E2EFE1A8 -:10096000F1E0DE01119601900D928A95E1F7F70111 -:10097000808121E030E02C0F3D1F280F311DC9017F -:100980002091020130910301FC01E20FF31F60810D -:10099000772767FD7095640F711D882777FD809517 -:1009A000982F0E94832920E030E040E451E40E9427 -:1009B000E8284B015C01F701218184E090E0821B73 -:1009C0009109BC01882777FD8095982F0E94832983 -:1009D0009B01AC01C501B4010E9480289B01AC01C0 -:1009E00060E070E080E090E40E94F62A20E030E0D1 -:1009F0004CED50E40E94932A4B015C01F701828187 -:100A00008823D1F04FE050E0C501B4010E94E50D0C -:100A1000809116028823A1F08091D40124E0829F66 -:100A2000F0011124EB52FE4F80829182A282B382A8 -:100A30008F5F8093D40104C0C501B4010E942D0AC8 -:100A40000F3F110508F02ECF94C08091D001811185 -:100A50001FC0043130E5130709F051C00E946B0339 -:100A600081E08093D0010E94B8229093CF018093BF -:100A7000CE011092C7011092C9011092C8011092C4 -:100A8000CB011092CA011092CD011092CC0171C01D -:100A90008091CE019091CF010E94C422883C9105A3 -:100AA00070F48091C701E82FF0E0EE0FFF1FE853CC -:100AB000FE4F118300838F5F8093C7015AC00438B3 -:100AC00080E5180721F00538104501F13AC0F7011B -:100AD0008281882341F01092C50182E01EC0043853 -:100AE00030E5130759F58091C501811106C086E2F2 -:100AF0000E94111886E20E94D91882E01CC00438B6 -:100B0000F0E51F0741F305381045D9F4F70182815C -:100B1000882331F01092C60180E20E94281929C072 -:100B20008091C601811106C087E20E94111887E2F8 -:100B30000E94D91880E20E942F191BC00538104569 -:100B400029F381E08093C5018093C601C701A39674 -:100B50000FB6F894DEBF0FBECDBFDF91CF911F91CE -:100B60000F91FF90EF90BF90AF909F908F900C945B -:100B7000AE0280E0A3960FB6F894DEBF0FBECDBFE5 -:100B8000DF91CF911F910F91FF90EF90BF90AF90A9 -:100B90009F908F90089508959CE0799FF001112413 -:100BA00090E3899FE00DF11D1124E60FF11DEE0F7A -:100BB000FF1FE453FE4F859194910895880F991F6C -:100BC000FC01E45BFF4F859194910895880F991F74 -:100BD000FC01E453FE4F8591949108950F931F9368 -:100BE000CF93DF93EC01811521E39207A0F5C115A6 -:100BF00080E3D80708F0D7C0C83ED105D8F4C03E7E -:100C0000D10508F007C2C83AD10578F4C53AD10534 -:100C100008F06AC0C130D10509F463C008F4F7C117 -:100C2000C430D10508F0F6C1F2C1CB3BD10508F4C0 -:100C300066C0EDC1C11590E2D90708F0AFC0C1157B -:100C400021E0D20708F0E6C1C03FD10508F4DFC1BA -:100C50008E0110651FC2C03880E5D80700F5C03787 -:100C600090E5D90708F0A3C0C11520E5D20709F423 -:100C7000ACC050F4CE01905480319F4008F0C7C101 -:100C8000DF708E01106A06C2C13080E5D80709F412 -:100C9000AEC0C43190E5D90708F4AFC0B8C1C338BD -:100CA00020E5D20709F48EC050F4C13890E5D90789 -:100CB00009F482C008F083C000E011EDEBC1C0313F -:100CC00081E5D80708F4A3C1C11597E5D90708F451 -:100CD00036C1CE0190578115904108F098C1DF7060 -:100CE00093C101E010E0D6C1C53AD10509F494C121 -:100CF000C63AD10509F093C102E810E4CBC1C83A65 -:100D0000D10509F48FC1C93AD10509F48EC1CA3A97 -:100D1000D10509F48DC1CB3AD10509F48CC1CC3A87 -:100D2000D10509F48BC1CD3AD10509F48AC1C03B84 -:100D3000D10509F489C1CE3AD10509F488C1CF3A69 -:100D4000D10509F487C1C13BD10509F486C1C23B75 -:100D5000D10509F485C1C33BD10509F484C1C43B65 -:100D6000D10509F483C1C53BD10509F482C1C63B55 -:100D7000D10509F481C1C73BD10509F480C1C83B45 -:100D8000D10509F47FC1C93BD10509F47EC1CA3B35 -:100D9000D10509F47DC100E014E47CC1CE019F704F -:100DA0000E94E60578C1DD278E01106C73C1CF70FB -:100DB000DD278E01146D6EC100E010ED6BC100E007 -:100DC00012ED68C100E013ED65C10E94BC1B0E94DA -:100DD000FA090E94C1038FEF94E32CE08150904008 -:100DE0002040E1F700C000000E94132353C180910E -:100DF000F20281608093F2024DC10E94742381113E -:100E000002C00E9450230E94872390E090931D030C -:100E100080931C03C23080E5D80721F480911C0325 -:100E2000816086C0C43090E5D90721F480911C030D -:100E300082607EC0C63020E5D20721F480911C0379 -:100E4000846076C0C83080E5D80719F480911C030F -:100E500027C0CA3090E5D90721F480911C03806136 -:100E600067C0CC3020E5D20721F480911C0380625A -:100E70005FC0CE3080E5D80721F480911C038064E8 -:100E800057C0C03190E5D90721F480911C038068D8 -:100E90004FC0C23120E5D20729F480911C03846041 -:100EA000886046C0C33080E5D80721F480911C03D8 -:100EB0008E7F3EC0C53090E5D90721F480911C0398 -:100EC0008D7F36C0C73020E5D20721F480911C0306 -:100ED0008B7F2EC0C93080E5D80719F480911C03A0 -:100EE00026C0CB3090E5D90721F480911C038F7E7A -:100EF0001FC0CD3020E5D20721F480911C038F7DE7 -:100F000017C0CF3080E5D80721F480911C038F7B78 -:100F10000FC0C13190E5D90721F480911C038F7770 -:100F200007C0C331D04531F480911C038B7F877F8C -:100F300080931C0380911C030E948B23ABC08D2FD8 -:100F400099278F70992781309105D9F49E012370DC -:100F5000332702C0880F991F2A95E2F79C688E01FB -:100F600044E0000F111F4A95E1F700271370802B12 -:100F7000912B53E0CC0FDD1F5A95E1F7C076DD27AA -:100F80002FC08230910531F4DC2FCC278E01016F08 -:100F9000106A80C08330910569F4CE01837099276F -:100FA00001E010E002C0000F111F8A95E2F7C801AE -:100FB0009C680FC084309105B9F4CE0183709927E5 -:100FC00001E010E002C0000F111F8A95E2F7C8018E -:100FD0009A6823E0CC0FDD1F2A95E1F7C07ED77019 -:100FE0008C010C2B1D2B56C08530910531F4DC2F64 -:100FF000CC278E01046F106A4DC0069709F04AC0D5 -:10100000CF71DD27DC2FCC278E01106243C000E0BA -:1010100010E040C08E013EC001E810E43BC003E890 -:1010200010E438C002EE14E435C009EE14E432C016 -:101030000AEE14E42FC005EB14E42CC006EB14E414 -:1010400029C007EB14E426C00CEC14E423C00DEC1B -:1010500014E420C003E815E41DC00AE815E41AC032 -:1010600002E915E417C004E915E414C001E216E42E -:1010700011C003E216E40EC004E216E40BC005E260 -:1010800016E408C006E216E405C007E216E402C052 -:101090000AE216E4C801DF91CF911F910F910895E4 -:1010A0009CE0799FF001112490E3899FE00DF11DF0 -:1010B0001124E60FF11DEE0FFF1FE453FE4F859143 -:1010C0009491803E9105E0F4803C910558F5813380 -:1010D000910509F46FC048F48932910509F463C0A1 -:1010E0008A32910509F46DC072C089339105E9F027 -:1010F00082389105D1F08533910509F44DC067C060 -:10110000833E910581F138F4803E9105B9F0823E2D -:101110009105D9F05CC0863E910561F1873E91054D -:10112000A1F155C00E94DE05089520911C0320FD09 -:1011300002C021FF4CC080EE90E049C080911C03AA -:1011400080FFF9CF89E390E042C080911C0382FFC9 -:101150000EC080911C0384FF03C080E090E037C084 -:1011600083EE90E034C080911C0382FFF2CF82EEC8 -:1011700090E02DC080911C0383FF0BC080911C0365 -:1011800084FDEBCF87EE90E022C080911C0383FFAB -:10119000F5CF86EE90E01BC080911C0385FF07C051 -:1011A00089E290E014C080911C0385FFF9CF85E3AC -:1011B00090E00DC080911C0386FF07C08AE290E09A -:1011C00006C080911C0386FFF9CF81E390E00E9466 -:1011D000EE0508950C94B002E82FF0E0E25BFE4FBC -:1011E0008081E82FEF70F0E082958F7021E030E091 -:1011F000A90102C0440F551F8A95E2F740A3089544 -:101200000F931F93CF93DF9385B7806885BF85B712 -:10121000806885BFC3E0D0E001E010E0FE01E25B42 -:10122000FE4F8081E82FEF70F0E021A182958F7052 -:10123000A80102C0440F551F8A95E2F7CA01822B0C -:1012400081A38C2F0E94EC08219740F78BE090E05F -:1012500061E070E0FC01EE5BFE4F2081E22FEF7059 -:10126000F0E042A122952F70DB0102C0AA0FBB1F44 -:101270002A95E2F79D01242B22A3019758F7DF91CD -:10128000CF911F910F910C946C03EF92FF920F93EB -:101290001F93CF93DF9300E212E0C3E0EE24E394C8 -:1012A000F12CD5E08C2F0E94EC088BE090E040E020 -:1012B00050E0FC01EE5BFE4F6081E62FEF70F0E046 -:1012C00020A130E062956F7002C0359527956A9530 -:1012D000E2F720FD09C09701082E02C0220F331F3C -:1012E0000A94E2F7422B532B019718F7F8019291D9 -:1012F00082918F018417950721F051834083D09309 -:1013000005018C2F0E94EC08C15060F68091050108 -:1013100087FD2CC08150809305018F3F39F08FE904 -:101320009FE00197F1F700C0000020C080911E02ED -:1013300090911F02909327028093260280911C02B5 -:1013400090911D02909325028093240280911A02AD -:1013500090911B02909323028093220280911802A5 -:101360009091190290932102809320020E946E03B3 -:1013700081E0DF91CF911F910F91FF90EF90089541 -:10138000E82FF0E0EE0FFF1FE05EFD4F80819181BE -:10139000089508950F931F93CF9308E212E0C0E0E1 -:1013A000F801929182918F010E943022C80FF2E0E1 -:1013B00000321F07A9F78C2FCF911F910F9108952D -:1013C0000E947423811102C00E9450230E9499231D -:1013D000809307033E9A809171008D7F8093710006 -:1013E00082E0809390008AE18093910081E0809375 -:1013F0002A02089580912A02811102C00E94E00908 -:1014000010927A0210927902809171008D7F809300 -:101410007100809190008F738093900010923C0235 -:1014200010923B0210927302109274021092750295 -:10143000109276021092720210927102E1E5F2E0CF -:10144000A1E4B2E011921192119211921D921D929B -:1014500082E0E137F807B1F70895CF92DF92EF927B -:10146000FF920F931F93CF93DF9320913B02222390 -:1014700009F484C06B017C0180912A02811102C0B1 -:101480000E94E00901E712E0C7E0D0E0A701960161 -:10149000F80192918291729162918F010E94E428E9 -:1014A000811131C0FE01EE0FFF1FEE0FFF1FEF5A3B -:1014B000FD4F1082118212821382DE01AA0FBB1F20 -:1014C000AF5BBD4F11961C921E92C730D105E9F05B -:1014D000219644815581668177814083518362835F -:1014E0007383148215821682178212968D919C91B5 -:1014F000139711969C938E9313961C921E9212979B -:1015000034961296E2CF219708F680917902909155 -:101510007A02019797FD05C090937A028093790231 -:1015200004C010927A02109279028091790290910F -:101530007A0220917702309178022817390724F037 -:101540001092780210927702892BC1F48091710079 -:101550008D7F80937100809190008F7380939000B5 -:101560001092730210927402109275021092760219 -:10157000109272021092710210923B02DF91CF9191 -:101580001F910F91FF90EF90DF90CF9008951F92E1 -:101590000F920FB60F9211244F925F926F927F922B -:1015A0008F929F92AF92BF92CF92DF92EF92FF9273 -:1015B0002F933F934F935F936F937F938F939F935B -:1015C000AF93BF93CF93DF93EF93FF9380913B0251 -:1015D000882309F49BC1C0917902D0917A021C162C -:1015E0001D060CF093C140902B0250902C0260908D -:1015F0002D0270902E0220E030E0A901C301B2015B -:101600000E948F2A18160CF065C0C130D10509F46C -:1016100052C08091770290917802BE010E94612CA5 -:101620007C01909378028093770280903D029090A5 -:101630003E02A0903F02B090400220E030E040E83F -:101640005FE3C501B4010E94802860933D0270935E -:101650003E0280933F0290934002F701EE0FFF1F7E -:10166000EE0FFF1FEF5AFD4FA301920160817181C0 -:10167000828193810E94E82820E030E040E05EE330 -:101680000E94932A9B01AC01C501B4010E948F2ADC -:1016900018168CF4C7010196BE010E94612C90932C -:1016A00078028093770210923D0210923E021092CF -:1016B0003F0210924002E0917702F0917802EE0F23 -:1016C000FF1FEE0FFF1FEF5AFD4F60817181828176 -:1016D0009381D0C0C0907302D0907402E0907502E4 -:1016E000F090760220E030E0A901C701B6010E9427 -:1016F000E4282197882309F4A2C0FE01EE0FFF1F02 -:10170000EE0FFF1FEF5AFD4F80809180A280B380C3 -:10171000A5019401C701B6010E94E42887FF31C0EA -:10172000A501940160E070E08CED93EC0E94E82844 -:1017300020E030E040E451E40E94E82820E030E07E -:1017400040E05FE30E94932A9B01AC0160E070E0FF -:1017500080E090E40E94F62A9B01AC01C501B4012F -:101760000E94932A9B01AC01C701B6010E94E428A4 -:1017700087FF07C0A701960160E070E08CED93E45D -:1017800039C0A5019401C701B6010E948F2A18161D -:101790000CF055C0A501940160E070E08CED93E47D -:1017A0000E94E82820E030E040E451E40E94E8286C -:1017B00020E030E040E05FE30E94932A9B01AC010F -:1017C00060E070E080E090E40E94F62A9B01AC01AA -:1017D000C501B4010E94932A9B01AC01C701B60167 -:1017E0000E948F2A18165CF5A701960160E070E050 -:1017F0008CED93EC0E94E82820E030E040E451E4D6 -:101800000E94E82820E030E040E05FE30E94932A55 -:101810009B01AC0160E070E080E090E40E94F62A59 -:101820009B01AC01C701B6010E94932A6093730229 -:1018300070937402809375029093760213C0FE0138 -:10184000EE0FFF1FEE0FFF1FEF5AFD4F80819181BA -:10185000A281B3818093730290937402A093750266 -:10186000B093760260917302709174028091750258 -:101870009091760220912802309129022F3F4FEF5C -:10188000340731F02F5F3F4F309329022093280215 -:101890000E946F0E6B017C0120E034E244EF51E4C2 -:1018A0000E94E42887FF08C086EFC82E88E2D82E61 -:1018B00084EFE82E81E4F82E20E030E040E051E4AF -:1018C000C701B6010E94932A9B01AC0160E074E25B -:1018D00084E79BE40E94E8286B017C010E94552963 -:1018E0007093970060939600209106013091070154 -:1018F0004091080150910901C701B6010E94932A45 -:101900000E945529709399006093980080913C0241 -:10191000882309F433C1C0903702D0903802E09098 -:101920003902F0903A0220E030E0A901C701B60187 -:101930000E948F2A1816D4F58091280290912902CE -:101940008F3F2FEF920729F0019690932902809301 -:101950002802C701B6010E946F0E20E030E040E08F -:1019600051E40E94932A9B01AC0160E074E284E799 -:101970009BE40E94E8286B017C010E94552970932A -:1019800097006093960020910601309107014091E5 -:10199000080150910901C701B6010E94932A0E94D3 -:1019A0005529709399006093980008C01092970091 -:1019B0001092960010929900109298006091310256 -:1019C000709132026F5F7F4F7093320260933102E9 -:1019D000209196003091970080E090E0232BF1F069 -:1019E000C0919600D09197000E9481296B017C01E3 -:1019F000BE0180E090E00E9481299B01AC016091D2 -:101A000033027091340280913502909136020E9427 -:101A1000E82820E03FEF4FE757E410C00E948129FB -:101A20006B017C0120E030EE4FEF54E46091330213 -:101A30007091340280913502909136020E94932A6F -:101A40009B01AC01C701B6010E948F2A87FD96C099 -:101A500080912F028F5F80932F0290E020910303EB -:101A60003091040382179307A0F080910E0388231E -:101A700019F010922F020DC0809171008D7F80931C -:101A80007100809190008F738093900010923C02BF -:101A90007DC080913002C0912F02811128C0C0907A -:101AA0000803D0900903E0900A03F0900B0320E0B4 -:101AB00030E0A901C701B6010E948F2A1816BCF4B4 -:101AC00081E0809330021092370210923802109217 -:101AD000390210923A02C0923302D0923402E0925C -:101AE0003502F0923602C150C0932F0243C01092CB -:101AF00030021092290210922802E0910503F09121 -:101B0000060348E0C49FE00DF11D112480819181FE -:101B1000A281B3818093370290933802A093390257 -:101B2000B0933A0220E030E040E85EE364817581E2 -:101B3000868197810E94932A6B017C0180910A0122 -:101B4000682F70E080E090E00E94812920E030E082 -:101B500048EC52E40E94E8289B01AC01C701B601A1 -:101B60000E94932A6093330270933402809335026B -:101B70009093360210923202109231028091070344 -:101B800080FD04C010923C0210923B02FF91EF9145 -:101B9000DF91CF91BF91AF919F918F917F916F9185 -:101BA0005F914F913F912F91FF90EF90DF90CF90F9 -:101BB000BF90AF909F908F907F906F905F904F906D -:101BC0000F900FBE0F901F901895CF92DF92EF925B -:101BD000FF92CF93DF936B017C01EA0180912A028F -:101BE000811102C00E94E0098091070380FF46C076 -:101BF0008091790290917A0208970CF03FC0809111 -:101C000071008D7F8093710080913C0281110E9450 -:101C1000FA0981E080933B02109229021092280277 -:101C200020E030E0A901C701B6010E948F2A1816F2 -:101C3000DCF48091790290917A02FC01EE0FFF1F93 -:101C4000EE0FFF1FEF5AFD4FC082D182E282F38276 -:101C5000FC01EE0FFF1FEF5BFD4FD183C0830196A8 -:101C600090937A02809379028091710082608093D0 -:101C7000710080919000806880939000DF91CF91F7 -:101C8000FF90EF90DF90CF900895809107038170CF -:101C90000895809107038160809307030E949D232C -:101CA0000C94C803809107038E7F809307030C94E4 -:101CB0009D2380917B0290E0019666E070E00E9497 -:101CC000612C80937B02089580917B0290E00197C4 -:101CD00066E070E00E94612C80937B0208958F92F1 -:101CE0009F92AF92BF92CF92DF92EF92FF920F93AB -:101CF0001F93CF93DF936B017C01C0912802D09199 -:101D00002902BE0180E090E00E9481294B015C0124 -:101D1000A701960160E070E08CE594E40E94E82859 -:101D20009B01AC01C501B4010E94932A0E94552970 -:101D300020917B02233009F473C028F4222351F050 -:101D40002130E9F02CC1243009F4A0C0253009F479 -:101D5000E0C025C180E090E0A0E0BFE380930601F1 -:101D600090930701A0930801B093090110922B02F0 -:101D700010922C0210922D0210922E0210C110927D -:101D80002B0210922C0210922D0210922E0264311E -:101D9000710540F46A30710560F520E030E040E8FC -:101DA0005EE32BC0693C710508F0AAC080E090E0BA -:101DB0000E94812920E030E040EA51E40E947F281F -:101DC00020E030E044E353E40E94E8289B01AC01AA -:101DD0000E94932A20E030E040E05EE30E94932AD4 -:101DE0009B01AC0160E070E080E09EE30E947F28F0 -:101DF00044C020E030E040E05FE3C701B6010E944C -:101E0000932A6B017C0180E090E0A0E0BEE3809328 -:101E1000060190930701A0930801B0930901BFC088 -:101E200010922B0210922C0210922D0210922E0270 -:101E30004AE0469F9001479F300D1124C90168EB8D -:101E40007BE00E944D2CBC016C5D754077FF03C0A8 -:101E5000719561957109882777FD8095982F0E946B -:101E600083292EE333EC4EE259E30E94932A20E0CB -:101E700030E040EC5EE30E9480286093060170939E -:101E80000701809308019093090189C010922B02E9 -:101E900010922C0210922D0210922E02CE0183700D -:101EA0009927892BE1F0BE016170772780E090E0EF -:101EB0000E94812920E030E040E05EE30E94932A06 -:101EC00020E030E040E45FE30E9480286093060158 -:101ED0007093070180930801909309010CC080E082 -:101EE00090E0A0E0BFE38093060190930701A093E8 -:101EF0000801B0930901C770DD27CD2B09F04FC051 -:101F00001092060110920701109208011092090127 -:101F100046C010922B0210922C0210922D021092A9 -:101F20002E0200E010E020E03FE300930601109352 -:101F3000070120930801309309016739710578F191 -:101F400080E090E00E94812920E030E047E153E406 -:101F50000E947F2820E030E04AE754E40E94E8280D -:101F600020E030E048E452E40E94932A20E030E090 -:101F700040EA51E40E94C5290E945029660F771F4C -:101F8000660F771FFB01EE5AFE4F2081318142819F -:101F90005381C701B6010E94932A6B017C01C701DE -:101FA000B601DF91CF911F910F91FF90EF90DF90DD -:101FB000CF90BF90AF909F908F90089580918C02AA -:101FC0000895CF93DF9300D01F92CDB7DEB79C0169 -:101FD00080911303843019F593E099833B832A831E -:101FE0009093E9008FEF9091E800815095FD06C035 -:101FF00095ED9A95F1F700008111F5CF8091E800F9 -:1020000085FF0DC040E050E063E070E0CE01019636 -:102010000E9442128091E8008E778093E8000F9032 -:102020000F900F90DF91CF910895CF93DF9300D061 -:102030001F92CDB7DEB720911303243021F522E0A3 -:1020400029839B838A8383E08093E9008FEF9091BB -:10205000E800815095FD06C095ED9A95F1F70000D6 -:102060008111F5CF8091E80085FF0DC040E050E080 -:1020700063E070E0CE0101960E9442128091E80078 -:102080008E778093E8000F900F900F90DF91CF91A3 -:102090000895209113032430F1F422E02093E90005 -:1020A0002FEF3091E800215035FD06C035ED3A950F -:1020B000F1F700002111F5CF2091E80025FF0BC0BA -:1020C00040E050E065E070E00E9442128091E8003C -:1020D0008E778093E8000895CF93DF93EC01909181 -:1020E0001303943009F046C0809115018823D9F07C -:1020F000809116018823B9F09093E9008FEF9091B9 -:10210000E800815095FD06C095E19A95F1F7000031 -:102110008111F5CF8091E80085FF2CC040E050E0B0 -:1021200060E170E017C081E08093E9008FEF90914B -:10213000E800815095FD06C095ED9A95F1F70000F5 -:102140008111F5CF8091E80085FF14C040E050E098 -:1021500068E070E0CE010E9442128091E8008E7724 -:102160008093E80080E1FE01ACE7B2E001900D92BF -:102170008A95E1F7DF91CF91089580911203811143 -:1021800009C00E94D7130E9434148091E200846039 -:102190008093E2000895109212030895089508951F -:1021A0000C947B2242E061EC81E00E94511342E0FA -:1021B00061EC82E00E94511342E061EC83E00E94F6 -:1021C000511342E161EC84E00C94511380911503AA -:1021D000833009F455C030F4813071F0823009F455 -:1021E0008EC008958A3009F47AC08B3009F460C03B -:1021F000893009F09CC020C080911403813A09F015 -:1022000096C08091E800877F8093E8008091180352 -:1022100090911903892B21F460E18CE792E003C0CF -:1022200060E080E090E070E00E948D128091E80014 -:102230008B778093E800089580911403813209F030 -:1022400076C08091180390911903009719F00397B5 -:1022500009F06DC08091E800877F8093E80080914D -:10226000E80082FD05C0809113038111F8CF5FC0A3 -:102270008091F10080938C028091E8008B7753C0AD -:1022800080911403813A09F052C080911803909113 -:102290001903892B09F04BC08091E800877F809358 -:1022A000E8008091E80080FFFCCF8091150136C0E6 -:1022B000809114038132D9F580911803909119030C -:1022C000892BA9F58091E800877F8093E8000E9420 -:1022D000861380911603809315010C94BC1B80918A -:1022E0001403813221F58091E800877F8093E80014 -:1022F0000E9486138091170380938D020895809128 -:102300001403813AA1F48091E800877F8093E8006C -:102310008091E80080FFFCCF80918D028093F100D6 -:102320008091E8008E778093E8000C9486130895DE -:1023300084B7877F84BF88E10FB6F89480936000EC -:10234000109260000FBE90E080E80FB6F894809382 -:102350006100909361000FBE0E9429170E94D7135D -:102360000E9434148091E20084608093E2007894AB -:102370000E94BA160E942B178BE091E00E94D5169E -:1023800080911303853069F40E943C2280911103EF -:102390008823B1F30E946A22882391F30E942C12B1 -:1023A000EFCF0E943317ECCF292F3327233031058D -:1023B000C9F064F42130310581F02230310509F093 -:1023C00043C08DE690E028E433E042C0213231057D -:1023D000F1F02232310541F137C082E190E025EB86 -:1023E00033E036C099278130910541F08230910564 -:1023F00041F0892B49F5E4E4F3E005C0E6E1F3E0C0 -:1024000002C0ECEEF2E0849190E09F0121C06430C4 -:10241000D8F4E62FF0E0EE0FFF1FE255FE4F2081CB -:10242000318189E090E014C0643070F470E0FB0109 -:10243000EE0FFF1FEA55FE4F20813181FB01EE5563 -:10244000FE4F808190E004C080E090E020E030E02A -:10245000FA0131832083089580E189BD82E189BD3D -:1024600009B400FEFDCF8091D8008F7D8093D80005 -:102470008091E00082608093E0008091E00081FD27 -:10248000FCCF0895CF92DF92EF92FF920F931F93AC -:10249000CF93DF93EC018B016A010E94A513811198 -:1024A00033C0C114D10439F0F60180819181081B39 -:1024B000190BC80FD91FE12CF12C0115110519F1C9 -:1024C0008091E80085FD16C08091E8008E778093AA -:1024D000E800C114D10449F0F60180819181E80E31 -:1024E000F91EF182E08285E00FC00E94A5138823C7 -:1024F00021F30AC089918093F10001501109FFEF87 -:10250000EF1AFF0ADACF80E0DF91CF911F910F9190 -:10251000FF90EF90DF90CF90089520911A033091B3 -:102520001B032617370748F06115710539F4209110 -:10253000E8002E772093E80001C0B90140E0611562 -:102540007105A9F120911303222309F443C025301A -:1025500009F442C02091E80023FD40C02091E8002A -:1025600022FD32C02091E80020FFE9CF4091F30026 -:102570002091F20030E0342BFC01CF016115710590 -:1025800059F02830310540F481918093F100615079 -:1025900071092F5F3F4FF1CF41E02830310509F03D -:1025A00040E02091E8002E772093E800C8CF411149 -:1025B000C9CF0AC080911303882361F0853061F090 -:1025C0008091E80083FD0AC08091E80082FFF2CF8D -:1025D00080E0089582E0089583E0089581E0089501 -:1025E00020911A0330911B032617370748F0611515 -:1025F000710539F42091E8002E772093E80001C09E -:10260000B901FC0120E06115710591F1809113037E -:10261000882309F440C0853009F43FC08091E80068 -:1026200083FD3DC08091E80082FD2FC08091E800CD -:1026300080FFE9CF2091F3008091F20090E0922B8F -:102640006115710559F08830910540F4249120936B -:10265000F1003196615071090196F2CF21E008979F -:1026600009F020E08091E8008E778093E800CBCFDE -:102670002111CCCF0AC080911303882361F08530EB -:1026800061F08091E80083FD0AC08091E80082FF3C -:10269000F2CF80E0089582E0089583E0089581E01C -:1026A0000895982F973058F59093E900981739F0CE -:1026B0007091EC002091ED005091F00003C0242FA8 -:1026C000762F50E021FF19C03091EB003E7F309310 -:1026D000EB003091ED003D7F3093ED003091EB0049 -:1026E00031603093EB007093EC002093ED00509339 -:1026F000F0002091EE0027FF07C09F5FD3CF8F70BF -:102700008093E90081E0089580E0089580911403AA -:1027100087FF11C08091E80082FD05C080911303FE -:102720008111F8CF11C08091E8008B770BC08091A8 -:102730001303882349F08091E80080FFF8CF80914F -:10274000E8008E778093E80008952091E4003091AE -:10275000E50095E64091EC00842F817040FF22C097 -:102760008091E80080FD1CC080911303882391F0C4 -:10277000853091F08091EB0085FD10C04091E40020 -:102780005091E5004217530729F39A01915011F730 -:1027900084E0089582E0089583E0089581E008953B -:1027A00080E008954091E80042FFDECF08950E9446 -:1027B00045140E944D14E0EEF0E08081816080833A -:1027C000E8EDF0E080818F77808319BCA7EDB0E061 -:1027D0008C918E7F8C9380818F7E808310921203E8 -:1027E00008950F931F93CF93DF930E9445140E9487 -:1027F0004D14C8EDD0E088818F7788838881806808 -:10280000888388818F7D888319BC1092130310926E -:102810000F03109211031092100300EE10E0F80164 -:1028200080818B7F808388818160888342E060E043 -:1028300080E00E945113E1EEF0E080818E7F808382 -:10284000E2EEF0E080818160808380818860808317 -:10285000F80180818E7F8083888180618883DF9109 -:10286000CF911F910F910895E8EDF0E080818F7E68 -:102870008083E7EDF0E080818160808384E082BF27 -:1028800081E0809312030C94F113E8EDF0E0808175 -:102890008E7F80831092E20008951092DA001092E9 -:1028A000E10008951F920F920FB60F9211242F93FB -:1028B0003F934F935F936F937F938F939F93AF93C8 -:1028C000BF93EF93FF938091E10082FF0BC0809153 -:1028D000E20082FF07C08091E1008B7F8093E100DE -:1028E0000E94B9168091DA0080FF1FC08091D80045 -:1028F00080FF1BC08091DA008E7F8093DA00809188 -:10290000D90080FF0DC080E189BD82E189BD09B495 -:1029100000FEFDCF81E0809313030E94BD1005C02F -:1029200019BC109213030E94CB108091E10080FF2C -:1029300019C08091E20080FF15C08091E2008E7F77 -:102940008093E2008091E20080618093E2008091B8 -:10295000D80080628093D80019BC85E0809313036F -:102960000E94CF108091E10084FF30C08091E2008E -:1029700084FF2CC080E189BD82E189BD09B400FEDD -:10298000FDCF8091D8008F7D8093D8008091E100A9 -:102990008F7E8093E1008091E2008F7E8093E20041 -:1029A0008091E20081608093E20080910F03882390 -:1029B00011F084E007C08091E30087FD02C081E050 -:1029C00001C083E0809313030E94D0108091E10046 -:1029D00083FF29C08091E20083FF25C08091E10040 -:1029E000877F8093E10082E08093130310920F03AE -:1029F0008091E1008E7F8093E1008091E2008E7FE4 -:102A00008093E2008091E20080618093E20042E0E6 -:102A100060E080E00E9451138091F0008860809314 -:102A2000F0000E94CE10FF91EF91BF91AF919F9166 -:102A30008F917F916F915F914F913F912F910F9067 -:102A40000FBE0F901F9018951F920F920FB60F9206 -:102A500011242F933F934F935F936F937F938F93A3 -:102A60009F93AF93BF93CF93DF93EF93FF93C09167 -:102A7000E900CF708091EC00D82FD17080FDD0E8B4 -:102A80001092E9008091F000877F8093F0007894A5 -:102A90000E9468151092E9008091F0008860809390 -:102AA000F000CD2BCF70C093E900FF91EF91DF9143 -:102AB000CF91BF91AF919F918F917F916F915F91D6 -:102AC0004F913F912F910F900FBE0F901F9018952F -:102AD0001F93CF93DF93CDB7DEB7AA970FB6F894C5 -:102AE000DEBF0FBECDBFE4E1F3E088E08E0F909132 -:102AF000F10091938E13FBCF0E94E6108091E800C5 -:102B000083FF1FC18091140390911503492F50E05A -:102B10004A30510508F015C1FA01EA5AFF4F0C94EA -:102B2000752C803881F0823809F00BC18091180330 -:102B30008F708093E9008091EB0085FB882780F9F6 -:102B40001092E90006C08091100390911103911139 -:102B500082609091E800977F9093E8008093F10065 -:102B60001092F100C8C0282F2D7F09F0EAC08823F9 -:102B700019F0823061F0E5C080911603813009F0D0 -:102B8000E0C0933009F080E0809311032BC0809166 -:102B90001603811127C0809118038F7009F4D1C0EA -:102BA0008093E9002091EB0020FF1CC0933021F4BA -:102BB0008091EB00806214C09091EB009061909343 -:102BC000EB0021E030E0A90102C0440F551F8A95B7 -:102BD000E2F74093EA001092EA008091EB008860EF -:102BE0008093EB001092E9008091E800877F86C017 -:102BF0008111A7C0109116031F778091E3008078A0 -:102C0000812B8093E3008091E800877F8093E80028 -:102C10000E9486138091E80080FFFCCF8091E30042 -:102C200080688093E300111102C082E001C083E05C -:102C30008093130386C08058823008F082C0809150 -:102C40001603909117038C3D53E0950779F583E0C7 -:102C50008A838AE289834FB7F894DE01139620E0D5 -:102C60003EE051E2E32FF0E050935700E49120FF63 -:102C700003C0E295EF703F5FEF708E2F90E0EA3077 -:102C800010F0C79601C0C0968D939D932F5F24319D -:102C900049F74FBF8091E800877F8093E8006AE2A0 -:102CA00070E0CE0101960E948D1214C0AE014F5FFC -:102CB0005F4F609118030E94D411BC01009709F482 -:102CC00040C09091E800977F9093E80089819A81B5 -:102CD0000E94F0128091E8008B778093E80031C069 -:102CE000803879F58091E800877F8093E8008091B3 -:102CF0000F038093F1008091E8008E778093E800C5 -:102D00000E9486131EC081111CC090911603923040 -:102D1000C0F48091E800877F8093E80090930F03D0 -:102D20000E94861380910F03811106C08091E300F9 -:102D300087FD02C081E001C084E0809313030E94FC -:102D4000D2108091E80083FF0AC08091E800877F5D -:102D50008093E8008091EB0080628093EB00AA965C -:102D60000FB6F894DEBF0FBECDBFDF91CF911F919C -:102D700008950895CF93809113038823A1F0C09103 -:102D8000E900CF709091EC00892F817090FD80E870 -:102D9000C82B1092E9008091E80083FD0E9468151D -:102DA000CF70C093E900CF910895909393028093E0 -:102DB00092020895E0919202F0919302309721F0EF -:102DC0000190F081E02D099480E00895E091920255 -:102DD000F0919302309721F00280F381E02D099465 -:102DE0000895E0919202F0919302309721F00480CF -:102DF000F581E02D0994089520919002309191027F -:102E00008217930771F09093910280939002E09162 -:102E10009202F0919302309721F00680F781E02D25 -:102E20000994089520918E0230918F0282179307A2 -:102E300071F090938F0280938E02E0919202F09154 -:102E40009302309721F00084F185E02D09940895D4 -:102E500008950C9428170E94AF220E9400090E9436 -:102E600035230C94E4275F926F927F928F929F920A -:102E7000AF92BF92CF92DF92EF92FF920F931F9388 -:102E8000CF93DF9300D000D01F92CDB7DEB70E9462 -:102E900045099DE9C92E92E0D92E03E010E0AA244D -:102EA000A394B12C502E802F0E94C0094C01F60132 -:102EB000729062906F016826792661147104A1F402 -:102EC0000150110978F78FEF89838A831B820E9452 -:102ED000B8228160782F9D838C8349815A816B81D0 -:102EE0008D810E94E31738C08091F20281FD0E941B -:102EF000C9092BE030E07501022E02C0EE0CFF1C68 -:102F00000A94E2F7C70186219721892B09F12983C9 -:102F10005A828E209F2091E0892809F490E09B83BB -:102F20000E94B8228160782F9D838C8349815A81C9 -:102F30006B818D810E94E317000F111FF801EB5682 -:102F4000FD4F80819181E826F926F182E08204C05C -:102F50002150310980F6B4CF0E941C2510919402B3 -:102F60000E94DA161817D1F00E94DA1680939402A4 -:102F70000F900F900F900F900F90DF91CF911F91B6 -:102F80000F91FF90EF90DF90CF90BF90AF909F9008 -:102F90008F907F906F905F900C94EA080F900F9045 -:102FA0000F900F900F90DF91CF911F910F91FF9095 -:102FB000EF90DF90CF90BF90AF909F908F907F90D9 -:102FC0006F905F900895CF93DF93CDB7DEB72B97C7 -:102FD0000FB6F894DEBF0FBECDBF4F835887698709 -:102FE0007A878B87DE01119686E0FD0111928A9522 -:102FF000E9F785E0FE01379601900D928A95E1F799 -:1030000049815A816B817C818D819E810E945A1EEB -:103010002B960FB6F894DEBF0FBECDBFDF91CF91D8 -:103020000895CF93882309F4C2C0C82F823859F479 -:103030000E94DA1681FDBBC089E30E9434210E9400 -:10304000012289E30CC0833879F40E94DA1680FDEE -:10305000AEC083E50E9434210E94012283E50E94D4 -:103060007621CF910C940122843859F40E94DA160B -:1030700082FD9DC087E40E9434210E94012287E4E2 -:10308000EECF8CEF8C0F813A48F48C2F0E944C27A6 -:1030900081118DC08C2F0E943421E3CF80E28C0FF0 -:1030A000883048F4C77081E001C0880FCA95EAF7FC -:1030B0000E94BA21D6CF8BE58C0F833078F4C53AC5 -:1030C00029F0C63A31F083E890E005C081E890E04D -:1030D00002C082E890E0CF910C94FC1688E58C0F3A -:1030E000833108F064C0C83A39F1C93A41F1CA3AAB -:1030F00049F1CB3A51F1CC3A59F1CD3A61F1C03BAB -:1031000069F1CE3A71F1CF3A79F1C13B81F1C23B1D -:1031100089F1C33B91F1C43B99F1C53BA1F1C63B99 -:10312000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF9 -:10313000C9F180E090E038C082EE90E035C089EEC1 -:1031400090E032C08AEE90E02FC085EB90E02CC07A -:1031500086EB90E029C087EB90E026C08CEC90E0F5 -:1031600023C08DEC90E020C083E891E01DC08AE888 -:1031700091E01AC082E991E017C084E991E014C09F -:1031800081E292E011C083E292E00EC084E292E01C -:103190000BC085E292E008C086E292E005C087E2BB -:1031A00092E002C08AE292E0CF910C941217CF9184 -:1031B0000895882309F44BC0823859F40E94DA1626 -:1031C00081FF45C089E30E9434210E94012289E3E6 -:1031D0000CC0833871F40E94DA1680FF38C083E592 -:1031E0000E9434210E94012283E50E9476210C94E2 -:1031F0000122843859F40E94DA1682FF28C087E43D -:103200000E9434210E94012287E4EFCF9CEF980FA7 -:10321000913A58F390E2980F983050F4877091E00B -:1032200001C0990F8A95EAF7892F0E94C021DFCF4C -:103230009BE5980F933020F480E090E00C94FC160E -:10324000885A833120F480E090E00C94121708959E -:10325000882321F00E94BA210C940122089588232A -:1032600021F00E94C0210C94012208957F928F9238 -:103270009F92AF92BF92CF92DF92EF92FF920F9305 -:103280001F93CF93DF931F92CDB7DEB77C01C62E7D -:10329000772EFC01058102950F70128111110E9499 -:1032A000D7210E942D21882379F0112369F080E233 -:1032B0008C0D883048F082E00E9416210E942D215A -:1032C00091E0D82ED92601C0D12CE72DE295EF70E0 -:1032D000F0E0E05AFF4F0C94752C872D807F072D6E -:1032E0000F70882311F00295007F112389F00023CD -:1032F00009F499C180E28C0D883020F4802F0E945F -:10330000BA2103C0802F0E94CA210E9401228BC1D2 -:103310008C2D0E94D918002309F4C3C180E28C0DC2 -:10332000883020F4802F0E94C02103C0802F0E948B -:10333000D0210E940122B5C1872D807F972D9F70DB -:10334000803211F4892F03C0892F8295807FCC2091 -:1033500021F0F1E0CF16A1F01DC0112339F00023B8 -:1033600019F1013009F50E94EA219BC1002319F0EF -:10337000013009F496C189830E94ED21898110C131 -:10338000112321F0063008F08CC10EC0053008F082 -:1033900088C106C1112359F0002331F0F70195814E -:1033A00090FF41C19F7095830E9428197AC1002324 -:1033B00009F4F6C03EC1872D86958695837090E00E -:1033C000009719F0019761F06CC1112321F08C2D49 -:1033D000972D937002C080E090E00E94FC1661C1BE -:1033E000112321F08C2D972D937002C080E090E086 -:1033F0000E94121756C18C2D112319F00E9424240B -:1034000002C00E948C240E9411254BC1872D83701D -:1034100009F052C0111145C18C2D82958695877097 -:10342000880F880F9C2D9F70892E912CA12CB12C78 -:10343000082E04C0880C991CAA1CBB1C0A94D2F745 -:10344000C4FE14C00FE010E020E030E0B901A80194 -:1034500004C0440F551F661F771F8A95D2F7CB0112 -:10346000BA01609570958095909503C060E070E01A -:10347000CB01272D26952695237030E0223031058B -:1034800069F02330310589F0682979298A299B2937 -:103490002130310571F00E94A21F03C168297929EA -:1034A0008A299B290E94BE1FFCC00E94A21FC50141 -:1034B000B4010E94861FF5C0112319F0872D817079 -:1034C00001C08695882309F4ECC08C2D82958695E1 -:1034D0008770880F880F9C2D9F70892E912CA12CAE -:1034E000B12C082E04C0880C991CAA1CBB1C0A9481 -:1034F000D2F7C4FE14C00FE010E020E030E0B901C4 -:10350000A80104C0440F551F661F771F8A95D2F784 -:10351000CB01BA01609570958095909503C060E0ED -:1035200070E0CB01272D269526952370422F50E081 -:103530004230510569F04330510589F068297929F5 -:103540008A299B294130510571F00E947C20A9C035 -:10355000682979298A299B290E949820A2C00E9463 -:103560007C20C501B4010E9460209BC08C2D90E09E -:10357000FC01E05EF109E531F10508F050C0E059C9 -:10358000FF4F0C94752C0C2D0F70872D8F7111230C -:1035900021F00E94F91F802F07CF0E941A20802F50 -:1035A0000E942F197EC0112341F0053008F079C028 -:1035B000872D8F710E943F2074C0063008F071C0C3 -:1035C000F7CF112339F0872D8F710E94F91F69C041 -:1035D0001123C9F3872D8F710E941A2062C0112315 -:1035E00029F0872D8F710E94E41F5BC00E94DA1FB3 -:1035F00058C0112351F0172D1F71812F0E94F91F00 -:1036000063E0812F0E940D214CC081E00E941621B1 -:10361000023008F446C082E00E94162142C0112305 -:1036200031F0002381F28C2D0E9411183AC0002342 -:1036300089F28C2D0E94D91834C0472D4F706C2D03 -:10364000C7010E9455030E94FE1E2BC0111129C004 -:10365000472D4F7050E042305105B9F04CF4411500 -:10366000510581F041305105E1F40E940C2819C048 -:103670004330510569F04430510599F48C2D0E9476 -:103680005E280FC00E94F5270CC00E94282809C0A0 -:103690000E943B2806C0472D4F706C2DC7010E9429 -:1036A000CB05DD20F9F00E94092180FD1BC0F70148 -:1036B00012820E9403210E94F91FC7010E94811BF0 -:1036C0000E9403210F90DF91CF911F910F91FF90E6 -:1036D000EF90DF90CF90BF90AF909F908F907F90B2 -:1036E0000C941A200F90DF91CF911F910F91FF90B2 -:1036F000EF90DF90CF90BF90AF909F908F907F9092 -:1037000008950F931F93CF93DF93EC0188819981E4 -:103710002B813C81232BB9F09F3F11F48F3F99F00F -:10372000CE010E94CA03882371F0688179818A8161 -:103730000E94FF208C010E94B4200E947B1FB801D0 -:10374000CE010E943619DF91CF911F910F910895FC -:103750000E94D7210E94E7210E94AC210E940122F1 -:103760000E94C2250E94112580E090E00E94FC1674 -:1037700080E090E00C9412170E94C7210C94A81BC3 -:103780000E94F420292F22952F7030E02C30310533 -:103790004CF42A3031056CF42250310922303105C5 -:1037A000A8F407C02C30310569F02F30310551F0F5 -:1037B0000DC0803F69F018F4803E40F409C0843F9A -:1037C00029F406C093FB882780F9089580E00895C6 -:1037D00081E00895CF93DF9300D000D01F92CDB742 -:1037E000DEB70F900F900F900F900F90DF91CF9159 -:1037F0000895CF93DF9300D000D000D0CDB7DEB7CF -:1038000026960FB6F894DEBF0FBECDBFDF91CF91E5 -:1038100008951F93CF93DF93C0919D0216E080918E -:103820009E02C81799F0D0E01C9FF0011D9FF00D7B -:103830001124E156FD4F4081518162817381848161 -:1038400095810E94F91B2196C770E9CFDF91CF9136 -:103850001F9108954091CF025091D0026091D10202 -:103860007091D2028091D3029091D4020C94F91BF2 -:103870008091D40282958F7009F054C08091D1025A -:10388000882309F44FC080919D02A0919E0260910F -:10389000CF027091D0024091D2025091D302B6E093 -:1038A0008A1709F43FC090E041155105C1F17F3FEF -:1038B00011F46F3FA1F1B89FF001B99FF00D1124F1 -:1038C000E156FD4F218172132AC02081621327C067 -:1038D0002281211124C0238134812417350710F45B -:1038E00021503109241B350B283C3105C0F42091AF -:1038F000D4022F7020612093D40226E0289FF0018B -:10390000299FF00D1124EC55FD4F80818F7080614F -:1039100080838FEC92E00E94811B0C94091C01961D -:103920008770BECF0895CF92DF92EF92FF920F93F0 -:103930001F93CF93DF93CDB7DEB762970FB6F8949E -:10394000DEBF0FBECDBF8C0185E0F801DE011D9604 -:1039500001900D928A95E1F7D8014C9111965C91F6 -:10396000119712966C9112971396CD90DC90149744 -:103970003091CF027091D0028091D2029091D30207 -:10398000009709F46BC17F3F19F43F3F09F466C10A -:10399000E090D102EE2009F4C0C02091D402C816F4 -:1039A000D90628F0F601E81BF90BCF0104C0809579 -:1039B00090958C0D9D1DFF24F394883C910578F023 -:1039C000F12C207F09F0C6C07C2DD98AC88A89894C -:1039D0000E94EA1B8FEC92E00E94811BB1C0822FF3 -:1039E000807F09F046C0751314C0341312C06111F2 -:1039F00010C02F7020612093D4020E942A1C8FECEB -:103A000092E00E94811B8091D402D80115968C937C -:103A10002EC0CD2819F15F3F11F44F3FF9F0F62E7B -:103A200061111CC080919D0220919E0236E0821798 -:103A300009F45AC090E0389FF001399FF00D11242D -:103A4000E156FD4F7181571306C07081471303C0C3 -:103A50007281711103C001968770E9CFF62E66233B -:103A600009F418C18091D40281608093D402F12CB2 -:103A700011C1751308C0341306C0611104C08091D0 -:103A8000D402D801C3C04D875E878D859E856A8B21 -:103A90000E94C01B6A898823E1F16623D1F120913D -:103AA000D402822F82958F7090E0029774F08091FB -:103AB000CF029091D00298878F831986DB86CA86C1 -:103AC0002C87CE0107960E94811B86E0F801AFEC9F -:103AD000B2E001900D928A95E1F70E94381C0E9495 -:103AE0002A1CFF24F394D6C04D875E878D859E8562 -:103AF0000E94F420292F22952F7030E022303105CA -:103B00000CF0BCC09F7009F0B6C0805E883008F42D -:103B1000C1C0C8010E94811BE4CFC816D90608F4B1 -:103B200053C0F601E81BF90BCF01883C910508F45E -:103B300050C0F12C7C2DD98AC88A89890E94EA1B41 -:103B4000EFECF2E086E0DF011D928A95E9F70E9432 -:103B50002A1CA0C0751314C0341312C0611110C008 -:103B60008091D402F8018583C8010E94811B86E000 -:103B7000EFECF2E0DF011D928A95E9F7FE2C8AC096 -:103B80004D875E878D859E856A8B0E94C01B6A89E2 -:103B9000882309F4BECF662309F4BBCF2091D40259 -:103BA000822F82958F7090E002970CF48ECF8091D7 -:103BB000CF029091D0029A8389831B82DD82CC82CE -:103BC0002E83CE0101967FCF809590958C0D9D1D03 -:103BD000ACCFF62E662309F49CCF75132EC0341398 -:103BE0002CC02091D40220FD1FC0822F82958F709F -:103BF000D9F0D80115962C9315978F3049F08F5F27 -:103C0000982F9295907F822F8F70892B15968C9389 -:103C1000C8010E94811B86E0F801AFECB2E0019080 -:103C20000D928A95E1F793CF86E0F801AFECB2E010 -:103C300001900D928A95E1F72DC04D875E878D85A5 -:103C40009E850E94C01B811140CF8091D40281606B -:103C50008093D402C8010E94811B1CC0662309F412 -:103C600058CF4D875E878D859E850E94C01B882317 -:103C700009F44FCF2ACF811148CF0CC02430310531 -:103C80000CF047CF9F7009F440CFF8019581907FE9 -:103C900009F03BCF8F2D62960FB6F894DEBF0FBEB2 -:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB -:103CB000CF9008951F93CF93DF93CDB7DEB72C97A6 -:103CC0000FB6F894DEBF0FBECDBF4F83588769870C -:103CD0007A878B879C87CE0107960E94931C882346 -:103CE00069F08F8198852A853B85232BF1F19F3FD1 -:103CF00009F063C08F3F09F060C037C086E0FE0165 -:103D00003796DE01119601900D928A95E1F76F8149 -:103D10007885EA85FB85309741F17F3F11F46F3F4D -:103D200021F120919E0230E0C90101968770992708 -:103D300040919D0250E08417950709F447C06983BC -:103D40007A83FD83EC8396E0929FD001939FB00D20 -:103D50001124A156BD4FFE01319601900D929A9506 -:103D6000E1F780939E020E94091C16E080919D025B -:103D700090919E028917C1F1189FC00111248156AC -:103D80009D4F0E94931C882379F1E0919D021E9F14 -:103D9000F0011124E156FD4F408151816281738110 -:103DA000848195810E94F91B80919D0290E001968B -:103DB0008770992780939D02D9CF4F815885698557 -:103DC0007A858B859C850E94F91BCFCF0E94BC1BF6 -:103DD00010929E0210929D02EFECF2E086E0DF016D -:103DE0001D928A95E9F7C1CF2C960FB6F894DEBFE5 -:103DF0000FBECDBFDF91CF911F910895EF92FF923B -:103E00000F931F93CF93DF938C01009709F46CC03D -:103E1000F12CEE24E394E8012196F8018491843793 -:103E200040F4843008F051C0813081F0823019F1C3 -:103E30005BC0853709F444C0A8F19CE7980F903720 -:103E400008F052C08F770E94D91841C00E5F1F4FF3 -:103E5000FE01C49180E28C0F883048F4C7708E2D2B -:103E600001C0880FCA95EAF70E94DA2114C08C2F8E -:103E70000E9411182DC00E5F1F4FFE01C49180E2F9 -:103E80008C0F883058F4C7708E2D01C0880FCA95EA -:103E9000EAF70E94E0210E9401221AC08C2F0E94A2 -:103EA000D91816C00E5F1F4FFE01C491CC2381F0BC -:103EB0008FE99FE00197F1F700C00000C150F6CFF5 -:103EC0000E5F1F4FFE01F49003C00E9411188E0177 -:103ED0008F2D882309F49FCFEFE9FFE03197F1F7A9 -:103EE00000C000008150F5CFDF91CF911F910F915D -:103EF000FF90EF90089508956093D9027093DA02CD -:103F00008093DB029093DC020C94A81B0F931F9309 -:103F10000091D9021091DA022091DB023091DC028B -:103F2000DC01CB01802B912BA22BB32B8093D902E8 -:103F30009093DA02A093DB02B093DC021F910F9101 -:103F40000C94A81B0F931F930091D9021091DA02D1 -:103F50002091DB023091DC02DC01CB018023912334 -:103F6000A223B3238093D9029093DA02A093DB02B9 -:103F7000B093DC021F910F910C94A81B0F931F9319 -:103F80000091D9021091DA022091DB023091DC021B -:103F9000DC01CB0180279127A227B3278093D90288 -:103FA0009093DA02A093DB02B093DC021F910F9191 -:103FB0000C94A81B1092D5021092D6021092D70230 -:103FC0001092D8020C94A81B41E050E060E070E031 -:103FD00004C0440F551F661F771F8A95D2F7409380 -:103FE000D5025093D6026093D7027093D8020C94F6 -:103FF000A81B41E050E060E070E004C0440F551F92 -:10400000661F771F8A95D2F78091D5029091D602CC -:10401000A091D702B091D802482B592B6A2B7B2B49 -:104020004093D5025093D6026093D7027093D80282 -:104030000C94A81B41E050E060E070E004C0440F25 -:10404000551F661F771F8A95D2F74095509560954A -:1040500070958091D5029091D602A091D702B0912F -:10406000D802482359236A237B234093D5025093D7 -:10407000D6026093D7027093D8020C94A81B41E03B -:1040800050E060E070E004C0440F551F661F771FCA -:104090008A95D2F78091D5029091D602A091D7024D -:1040A000B091D802482759276A277B274093D50229 -:1040B0005093D6026093D7027093D8020C94A81B39 -:1040C0000F931F930091D5021091D6022091D70231 -:1040D0003091D802DC01CB01802B912BA22BB32B8A -:1040E0008093D5029093D602A093D702B093D802C2 -:1040F0001F910F910C94A81B0F931F930091D50251 -:104100001091D6022091D7023091D802DC01CB0168 -:1041100080239123A223B3238093D5029093D602C8 -:10412000A093D702B093D8021F910F910C94A81BB3 -:104130000F931F930091D5021091D6022091D702C0 -:104140003091D802DC01CB0180279127A227B32729 -:104150008093D5029093D602A093D702B093D80251 -:104160001F910F910C94A81B0895CF92DF92EF92AC -:10417000FF920F931F93CF93DF938C01C090D902CE -:10418000D090DA02E090DB02F090DC028091D50260 -:104190009091D602A091D702B091D802C82AD92A0C -:1041A000EA2AFB2ACFE1D0E0D701C6010C2E04C0D9 -:1041B000B695A795979587950A94D2F780FF06C084 -:1041C000B8018C2F0E945008019721F4219760F7C5 -:1041D00080E001C08C2FDF91CF911F910F91FF9054 -:1041E000EF90DF90CF900895CF93DF93EC010E9482 -:1041F000B520BE010E945008DF91CF910895CB01F8 -:104200000E94F42008958091DD028595859585951D -:1042100008958091DD028770089598E0899F90014C -:104220001124262B2093DD020C94F91F2091DD022E -:10423000809582238093DD02982F977069F430E097 -:10424000482F552747FD50952417350729F08595A8 -:10425000859585950C941A2008959091DD029770AC -:1042600081E009F480E0089590911501992321F0EF -:1042700090911601911109C02091170130911801F8 -:10428000F90132969FEF40E01FC0982F96959695C2 -:1042900096959F3050F5E0911701F0911801E90FC4 -:1042A000F11D877021E030E0A90102C0440F551FC5 -:1042B0008A95E2F7CA019181892B818308959F3FF6 -:1042C00039F04F5F4E3041F051915813F8CF0DC087 -:1042D0005111F7CF942FF5CF9F3F39F0F901E90F36 -:1042E000F11D97FDFA958283089508959091150127 -:1042F000992321F090911601911109C02091170185 -:1043000030911801F9013296205F3F4F1FC0982F5E -:104310009695969596959F30F0F4E0911701F0915F -:104320001801E90FF11D877021E030E0A90102C0FA -:10433000440F551F8A95E2F7CA0180959181892320 -:10434000818308953196E217F30729F0908198133D -:10435000F9CF1082F7CF089581E090E0E091170146 -:10436000F0911801E80FF91F108201968031910534 -:10437000A9F708959091F102892B8093F102089595 -:1043800080959091F10289238093F1020895109213 -:10439000F10208959091F002892B8093F002089524 -:1043A00080959091F00289238093F00208951092F5 -:1043B000F00208959091EF02892B8093EF02089507 -:1043C00080959091EF0289238093EF0208951092D7 -:1043D000EF0208958093DE0208951092DE020895A0 -:1043E0008091170190911801FC0131969C01205F8A -:1043F0003F4F80E0919191118F5FE217F307D1F762 -:104400000895E0911701F09118018091F1028083E5 -:10441000E0911701F091180190818091F002892BB1 -:104420008083E0911701F091180190818091EF0253 -:10443000892B80838091DE02882361F0E09117014F -:10444000F09118019081892B80830E94F0218111C5 -:104450001092DE0280911701909118010C94E616DB -:1044600020E0009739F0AC01415051098423952395 -:104470002F5FF7CF822F089580911303843039F195 -:104480001092F30220E488E190E00FB6F894A8952A -:10449000809360000FBE2093600080E00E94BC0209 -:1044A00080E00E94EA0883B7817F846083BF83B77E -:1044B000816083BF7894889583B78E7F83BF88E1BE -:1044C0000FB6F89480936000109260000FBE0895BC -:1044D0000895089580E00E94BC020E9468220E9414 -:1044E00045090E9469220E94CA0991E0811101C018 -:1044F00090E0892F08950E94BC1B80E00E94BC02BE -:104500000E94E4270E94DA160C94EA081F920F9288 -:104510000FB60F9211248F939F93AF93BF93809107 -:10452000F302811113C08091F4029091F502A091E1 -:10453000F602B091F7024196A11DB11D8093F402DD -:104540009093F502A093F602B093F702BF91AF915A -:104550009F918F910F900FBE0F901F90189582E042 -:1045600084BD93E095BD9AEF97BD80936E0008954A -:104570002FB7F8948091F4029091F502A091F60281 -:10458000B091F7022FBF0895CF92DF92EF92FF9282 -:104590000F931F932FB7F8944091F4025091F502B6 -:1045A0006091F6027091F7022FBF6A017B01EE2441 -:1045B000FF248C0120E030E0C016D106E206F306AD -:1045C00010F4415051099A01281B390BC9011F9160 -:1045D0000F91FF90EF90DF90CF9008951F920F9270 -:1045E0000FB60F9211248F939F93AF93BF93809137 -:1045F000F4029091F502A091F602B091F7020196B3 -:10460000A11DB11D8093F4029093F502A093F602D0 -:10461000B093F702BF91AF919F918F910F900FBE12 -:104620000F901F9018950E94D713F8942FEF87EAE8 -:1046300091E6215080409040E1F700C0000087E003 -:1046400090EBDC0180931E0390931F03A093200343 -:10465000B09321039CE088E10FB6F894A89580936D -:1046600060000FBE90936000FFCF0E947423811101 -:1046700002C00E9450230E947F238093F2020E9476 -:10468000872380931C0387FB882780F9809316017A -:104690000E948323682F70E080E090E00C947C1FE0 -:1046A0006DEE7EEF80E090E00E949B2C60E082E067 -:1046B00090E00E94892C60E083E090E00E94892CC9 -:1046C00060E084E090E00E94892C60E085E090E06A -:1046D0000E94892C60E086E090E00E94892C6FEFB8 -:1046E00087E090E00C94892C80E090E00E94832C7D -:1046F00021E08D3E9E4F09F020E0822F089582E058 -:1047000090E00C947B2C83E090E00C947B2C84E074 -:1047100090E00C947B2C682F84E090E00C94892C22 -:1047200086E090E00C947B2C682F86E090E00C945F -:10473000892C87E090E00C947B2C682F87E090E038 -:104740000C94892C8091FA0280FF0BC060911C01AF -:1047500085E0689FB00111247595679575956795FB -:104760002BC081FF09C060911C0185E0689FB001EA -:1047700011247595679520C082FF07C060911C01C8 -:1047800085E0689FB001112417C09091FB02992326 -:10479000D1F060911B01961788F720911C0185E0EC -:1047A000289F90011124929FA001939F500D1124E6 -:1047B00070E0CA010E94612C6038710540F46115F7 -:1047C000710539F002C065E070E0862F08958FE72B -:1047D000089581E008958091FA0280FF08C06091F9 -:1047E0001A0170E0759567957595679521C081FFF1 -:1047F00006C060911A0170E07595679519C082FF37 -:1048000004C060911A0170E010C09091FB029923DE -:10481000C1F0609119019617A0F780911A01899F44 -:10482000C001112470E00E94612C6038710528F4E9 -:104830006115710521F0862F08958FE7089581E0B5 -:10484000089561E070E0F4CF803F21F40E94A2233C -:10485000819504C0813F29F40E94A2238093FE0227 -:104860000895823F21F40E94A223819504C0833FD2 -:1048700029F40E94A2238093FD020895893F19F430 -:104880000E94EB2305C08A3F31F40E94EB238195FF -:104890008093FF0208958B3F21F40E94EB238195C2 -:1048A00004C08C3F29F40E94EB23809300030895F9 -:1048B000843F21F48091FC02816017C0853F21F480 -:1048C0008091FC02826011C0863F21F48091FC023D -:1048D00084600BC0873F21F48091FC02886005C092 -:1048E000883F31F48091FC0280618093FC0208953E -:1048F0008D3F21F48091FA0281600BC08E3F21F43C -:104900008091FA02826005C08F3F29F48091FA02FB -:1049100084608093FA020895803F39F48091FE020A -:1049200087FF6CC01092FE0269C0813F29F480911C -:10493000FE021816BCF362C09091FD02823F29F47A -:1049400097FF5CC01092FD0259C0833F19F41916FD -:10495000CCF354C0893F41F48091FF0218160CF04B -:104960004DC01092FF024AC08A3F29F48091FF0295 -:1049700087FF44C0F6CF8B3F39F48091000387FF57 -:104980003DC0109200033AC08C3F29F4809100038F -:104990001816BCF333C0843F21F48091FC028E7F53 -:1049A00017C0853F21F48091FC028D7F11C0863FA6 -:1049B00021F48091FC028B7F0BC0873F21F4809112 -:1049C000FC02877F05C0883F31F48091FC028F7E16 -:1049D0008093FC0213C08D3F21F48091FA028E7FF8 -:1049E0000BC08E3F21F48091FA028D7F05C08F3F6E -:1049F00029F48091FA028B7F8093FA028091FD0264 -:104A000081110EC08091FE0281110AC08091FF02C7 -:104A1000811106C080910003811102C01092FB0237 -:104A200008958CEF92E00E94F1160E94B8229093B4 -:104A3000F9028093F80208951F93CF93DF9380913A -:104A4000F8029091F9020E94C422AC019091FB02FD -:104A5000992321F020911D0130E006C020911E0114 -:104A60008AE0289F900111244217530708F486C05A -:104A70008091FD02C091FE02D091FF0210910003CF -:104A8000811107C0C11176C0D11174C0111172C05B -:104A900075C09F3F19F09F5F9093FB02181624F496 -:104AA0000E94A2238093FD028091FD0287FF05C032 -:104AB0000E94A22381958093FD021C1624F40E947B -:104AC000A2238093FE028091FE0287FF05C00E9410 -:104AD000A22381958093FE026091FD02662339F145 -:104AE000C091FE02CC2319F1772767FD7095872FBF -:104AF000972F0E94832923E333E343E35FE30E947C -:104B0000932A0E9450296093FD026C2F772767FD3E -:104B10007095872F972F0E94832923E333E343E384 -:104B20005FE30E94932A0E9450296093FE021D16A3 -:104B300024F40E94EB238093FF028091FF0287FF01 -:104B400005C00E94EB2381958093FF02111624F487 -:104B50000E94EB23809300038091000387FF05C030 -:104B60000E94EB23819580930003DF91CF911F91E9 -:104B70000C9411259F3F09F08ECF96CFDF91CF91F6 -:104B80001F910895ECEFF2E085E0DF011D928A9518 -:104B9000E9F71092FB021092FA020895833081F136 -:104BA00028F4813059F08230D1F00895853009F42D -:104BB00049C0B8F1863009F456C0089580911E01AD -:104BC000262F30E0280F311D2F3F310524F4680FC8 -:104BD00060931E0108958FEF80931E0108958091C8 -:104BE0001D01262F30E0280F311D2F3F310524F401 -:104BF000680F60931D0108958FEF80931D01089544 -:104C000080911C01262F30E0280F311D2F3F3105E8 -:104C100024F4680F60931C0108958FEF80931C01AA -:104C2000089580911B01262F30E0280F311D2F3F62 -:104C3000310524F4680F60931B0108958FEF809372 -:104C40001B01089580911A01262F30E0280F311D95 -:104C50002F3F310524F4680F60931A0108958FEFF8 -:104C600080931A01089580911901262F30E0280FB2 -:104C7000311D2F3F310524F4680F60931901089509 -:104C80008FEF809319010895833011F128F481305A -:104C900049F0823091F00895853081F120F186301D -:104CA000C1F1089580911E01681720F4861B80933E -:104CB0001E01089510921E01089580911D0168172C -:104CC00020F4861B80931D01089510921D01089504 -:104CD00080911C01681720F4861B80931C010895A5 -:104CE00010921C01089580911B01681720F4861B07 -:104CF00080931B01089510921B01089580911A0161 -:104D0000681720F4861B80931A01089510921A01E7 -:104D1000089580911901681720F4861B809319016A -:104D200008951092190108950F931F93873208F088 -:104D300048C08E3108F08DC0803109F477C008F585 -:104D4000873009F461C068F4863009F09DC0809115 -:104D5000F202817F8E7F8093F20281E080930203D2 -:104D600094C08B3009F489C08E3009F08DC08091D9 -:104D7000F20282FB222720F991E0922790FB82F930 -:104D80005EC0863109F479C060F4813109F07CC0DD -:104D90000E94BC1B9091160181E089278093160127 -:104DA0006CC0893109F469C08B3109F06DC0809104 -:104DB000F20281FB222720F991E0922790FB81F9F2 -:104DC0003EC0883309F459C050F4893209F457C001 -:104DD000853309F454C0873209F451C055C0833477 -:104DE00009F44DC028F48A3308F44EC0895332C008 -:104DF000883409F049C00E94BC1B0E94FA090E9435 -:104E0000C1030E94132339C09091F202892F80952B -:104E1000817080FB90F929F0966098609093F2027F -:104E200034C0997F977F9093F20227C08091F2025D -:104E300083FB222720F991E0922790FB83F980934E -:104E4000F2029923D1F08091F20281608093F20204 -:104E500014C08D5141E050E060E070E08A019B0198 -:104E600004C0000F111F221F331F8A95D2F7C901FA -:104E7000B8010E947C1F0E94BC1B81E006C061E05B -:104E800070E080E090E0F5CF80E01F910F910895F1 -:104E900080E0089580E00895CF93C82F80910203A9 -:104EA000813069F018F08230C9F184C0E0911701B7 -:104EB000F09118018081823209F07EC007C0E09134 -:104EC0001701F09118018081823261F48C2F0E94C9 -:104ED0004827811104C08C2F0E9494261DC081E0B8 -:104EE00090E01AC08C2F0E944A27811114C0C4314F -:104EF00079F048F4CB3079F0C03109F061C082E03C -:104F00008093020308C0C93219F0C83321F058C099 -:104F10001092020355C081E0817054C0C93291F1F2 -:104F200020F5C43179F1B0F4C73009F047C08EE103 -:104F300080931E0182E380931D018AE080931C010F -:104F400084E180931B0188E080931A0188E28093BA -:104F5000190134C0CE51C63088F5EC2FF0E0EA5488 -:104F6000FE4F80818093010329C0CE34E9F020F404 -:104F7000CB3421F56AE013C0C13579F0C235F1F4C4 -:104F800061E00DC080910103882319F010920103A4 -:104F900015C081E08093020315C061E006C08091D6 -:104FA00001030E94CE250AC06AE0809101030E949D -:104FB000442604C01092020380E004C081E002C0D5 -:104FC00080E0AACFCF9108950E947423811102C07E -:104FD0000E9450230E94902380931D0380FF02C0F3 -:104FE000869501C080E00C94BC0280911D03982F2F -:104FF0009695292F30E0233031054CF49F5F990FAF -:105000008170892B816080931D030E94942380917D -:105010001D0386950C94BC0280911D03982F9695D4 -:1050200091F09158990F8170892B80931D038E7F89 -:1050300091E009F490E080911D0390FB80F980934A -:105040001D030E94942380911D0386950C94BC023D -:1050500080911D03982F909590FB80F980931D03FC -:105060000E94942380911D0380FF02C0869501C099 -:1050700080E00C94BC0290911D03892F86958F5F70 -:105080008F779170843028F4880F892B80931D03CB -:1050900002C090931D0380911D038E7F91E009F45F -:1050A00090E080911D0390FB80F980931D030E9486 -:1050B000942380911D0386950C94BC0220911D03BE -:1050C000922F96958927982F990F822F8170892B7F -:1050D00080931D038E7F91E009F490E080911D0381 -:1050E00090FB80F980931D030E94942380911D03FF -:1050F00086950C94BC0280911D03869508955058A6 -:10510000BB27AA270ED0D1C1C2D130F0C7D120F021 -:1051100031F49F3F11F41EF4B7C10EF4E095E7FBA4 -:105120009FC1E92FD3D180F3BA17620773078407B1 -:10513000950718F071F49EF5EBC10EF4E0950B2E77 -:10514000BA2FA02D0B01B90190010C01CA01A001D9 -:105150001124FF27591B99F0593F50F4503E68F134 -:105160001A16F040A22F232F342F4427585FF3CF75 -:10517000469537952795A795F0405395C9F77EF446 -:105180001F16BA0B620B730B840BBAF09150A1F08F -:10519000FF0FBB1F661F771F881FC2F70EC0BA0F15 -:1051A000621F731F841F48F4879577956795B7959D -:1051B000F7959E3F08F0B3CF9395880F08F0992795 -:1051C000EE0F97958795089527D108F481E008950B -:1051D0000CD06BC163D140F05AD130F021F45F3F65 -:1051E00019F03EC1511195C14FC170D198F3992367 -:1051F000C9F35523B1F3951B550BBB27AA2762179B -:105200007307840738F09F5F5F4F220F331F441FDF -:10521000AA1FA9F333D00E2E3AF0E0E830D0915017 -:105220005040E695001CCAF729D0FE2F27D0660F04 -:10523000771F881FBB1F261737074807AB07B0E843 -:1052400009F0BB0B802DBF01FF2793585F4F2AF059 -:105250009E3F510568F004C15CC15F3FECF3983E8E -:10526000DCF3869577956795B795F7959F5FC9F7B6 -:10527000880F911D9695879597F90895E1E0660F3F -:10528000771F881FBB1F621773078407BA0720F0B8 -:10529000621B730B840BBA0BEE1F88F7E095089521 -:1052A00004D06894B11135C1089518D188F09F5782 -:1052B00090F0B92F9927B751A0F0D1F0660F771F62 -:1052C000881F991F1AF0BA95C9F712C0B13081F042 -:1052D0001FD1B1E008951CC1672F782F8827B85FD0 -:1052E00039F0B93FCCF3869577956795B395D9F7A3 -:1052F0003EF490958095709561957F4F8F4F9F4FAD -:105300000895E89409C097FB3EF4909580957095B8 -:1053100061957F4F8F4F9F4F9923A9F0F92F96E901 -:10532000BB279395F695879577956795B795F11176 -:10533000F8CFFAF4BB0F11F460FF1BC06F5F7F4F13 -:105340008F4F9F4F16C0882311F096E911C0772325 -:1053500021F09EE8872F762F05C0662371F096E82E -:10536000862F70E060E02AF09A95660F771F881FFD -:10537000DAF7880F9695879597F9089588D018F0F1 -:1053800011F08CD038F480C0C4C0E92F9FD0B0F3A6 -:105390005523C9F3E7FB6217730784079507A8F144 -:1053A00099F3E92FFF2788232AF03197660F771F9B -:1053B000881FDAF7952F5527442332F0915050403B -:1053C000220F331F441FD2F7BB27E91BF50B621BCB -:1053D000730B840BB109C1F222F4620F731F841F97 -:1053E000B11D31972AF0660F771F881FBB1FEFCFC3 -:1053F000915050405AF041F0882332F0660F771FE9 -:10540000881F91505040C1F7939530C0869577958D -:1054100067959F5FD9F7F8CF990F0008550FAA0B32 -:10542000E0E8FEEF16161706E807F907C0F01216B7 -:105430001306E407F50798F0621B730B840B950BBA -:1054400039F40A2661F0232B242B252B21F408950F -:105450000A2609F4A140A6958FEF811D811D0895AC -:1054600097F99F6780E870E060E008959F3F31F012 -:10547000915020F4879577956795B795880F911D82 -:105480009695879597F908959FEF80EC08950024ED -:105490000A941616170618060906089500240A9499 -:1054A00012161306140605060895092E0394000C1F -:1054B00011F4882352F0BB0F40F4BF2B11F460FFAE -:1054C00004C06F5F7F4F8F4F9F4F089557FD9058D7 -:1054D000440F551F59F05F3F71F04795880F97FBB8 -:1054E000991F61F09F3F79F0879508951216130672 -:1054F0001406551FF2CF4695F1DF08C016161706A1 -:105500001806991FF1CF86957105610508940895D5 -:10551000E894BB2766277727CB0197F908957CDFAE -:1055200008F48FEF08950BD0C0CFB1DF28F0B6DFBD -:1055300018F0952309F094CFA7CF1124EACFC6DF46 -:10554000A0F3959FD1F3950F50E0551F629FF00196 -:10555000729FBB27F00DB11D639FAA27F00DB11DEF -:10556000AA1F649F6627B00DA11D661F829F222778 -:10557000B00DA11D621F739FB00DA11D621F839FFF -:10558000A00D611D221F749F3327A00D611D231FD5 -:10559000849F600D211D822F762F6A2F11249F5723 -:1055A00050408AF0E1F088234AF0EE0FFF1FBB1F46 -:1055B000661F771F881F91505040A9F79E3F5105E5 -:1055C00070F04ECFA6CF5F3FECF3983EDCF38695AC -:1055D00077956795B795F795E7959F5FC1F7FE2B90 -:1055E000880F911D9695879597F90895FA01EE0F0A -:1055F000FF1F30962105310599F16115710561F4A0 -:105600008038BFE39B0749F168949038810561F0C9 -:105610008038BFEF9B0741F0992342F5FF3FE1053A -:105620003105210511F1E8940894E795D901AA23E1 -:1056300029F4AB2FBE2FF85FD0F310C0FF5F70F4DA -:10564000A695E0F7F73950F019F0FF3A38F49F7754 -:105650009F930CD00F9007FC905808953EF014CF04 -:1056600060E070E080E89FE308954FE79F775F93E5 -:105670004F933F932F939ED02F913F914F915F91E6 -:1056800052DF05C019F40EF0EBCE42CFFDCE26DF7F -:10569000C8F39638C0F707F80F92E8942BE33AEA7C -:1056A00048EB5FE74EDF0F920F920F924DB75EB758 -:1056B0000F92C0D0EAE0F1E016D04F915F91EF91E8 -:1056C000FF91E595EE1FFF1F49F0FE57E068442764 -:1056D000EE0F441FFA95E1F74195550B32D00F902C -:1056E00007FE26C00895DF93CF931F930F93FF9279 -:1056F000EF92DF927B018C01689405C0DA2EEF01F6 -:105700001EDFFE01E894A5912591359145915591B3 -:10571000AEF3EF0106DDFE019701A801DA9479F7F7 -:10572000DF90EF90FF900F911F91CF91DF9108953F -:105730009B01AC0160E070E080E89FE349CD90CE32 -:1057400095CECCDEE8F39923D9F3940F511DBBF32A -:105750009150504094F059F0882332F0660F771F33 -:10576000881F91505040C1F79E3F510544F7880F64 -:10577000911D9695879597F908955F3FACF0983EF7 -:105780009CF0BB27869577956795B79508F4B1602F -:105790009395C1F7BB0F58F711F460FFE8CF6F5F27 -:1057A0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCEC6 -:1057B000689456CE93DEC8F39923D1F3C6F3DF93F2 -:1057C000CF931F930F93FF92C92FDD2788232AF0D1 -:1057D0002197660F771F881FDAF720E030E040E856 -:1057E0005FEB9FE3883920F0803E30F021968F7781 -:1057F00087DCE2E3F1E003C083DCEFE5F1E073DF97 -:105800008B01BE01EC01FB2E6F5771097595771F57 -:10581000880B990B78DD28E132E741E35FE38FDE07 -:10582000AF2D9801AE01FF900F911F91CF91DF91A5 -:1058300078DC3BCEFA01DC01AA0FBB1F9B01AC0157 -:10584000BF5728F422273327442750781FC0B75169 -:1058500088F4AB2F0024469537952795011CA39516 -:10586000D2F3002069F0220F331F441FB395DAF3FF -:105870000DD045CC61307105A0E88A07B94630F4F7 -:105880009B01AC016627772788279078309621F016 -:1058900020833183428353830895AA1BBB1B51E1AC -:1058A00007C0AA1FBB1FA617B70710F0A61BB70B90 -:1058B000881F991F5A95A9F780959095BC01CD0135 -:1058C000089597FB072E16F4009407D077FD09D0B2 -:1058D0000E944D2C07FC05D03EF4909581959F4F7A -:1058E0000895709561957F4F0895EE0FFF1F059005 -:1058F000F491E02D0994F999FECF92BD81BDF89AFB -:10590000992780B50895A8E1B0E042E050E00C94FA -:10591000A32C262FF999FECF92BD81BDF89A01974D -:1059200000B4021639F01FBA20BD0FB6F894FA9AE7 -:10593000F99A0FBE08950196272F0E948A2C0C9485 -:10594000892CDC01CB01FC01F999FECF06C0F2BD28 -:10595000E1BDF89A319600B40D9241505040B8F72D -:065960000895F894FFCF4A -:10596600640007000CFF0000003F64DE0F6C104966 -:10597600101510E10F0101DF022808140A321E007B -:1059860002040507090B0C0E1011131517181A1C23 -:105996001D1F2123242628292B2D2F30323435375D -:1059A600393B1F0F03764F5F6F7F4969437909596A -:1059B60053633149803F5D8B803FF8BF803FCAE12A -:1059C600803F73ED803FCAE1803FF8BF803F5D8B2B -:1059D600803F3149803F0000803FF16D7F3F75EA8F -:1059E6007E3F4C827E3F833F7E3F84287E3F833FBF -:1059F6007E3F4C827E3F75EA7E3FF16D7F3F000021 -:105A0600803F3F4D3639830436040004C7035A03EA -:105A160073038C03A50301020304050607080900A6 -:00000001FF diff --git a/keyboard/planck/keymaps/joe/compiled.hex b/keyboard/planck/keymaps/joe/compiled.hex deleted file mode 100644 index 865ed2ce99..0000000000 --- a/keyboard/planck/keymaps/joe/compiled.hex +++ /dev/null @@ -1,1479 +0,0 @@ -:100000000C9467030C94AB030C94AB030C94AB03FC -:100010000C94AB030C94AB030C94AB030C94AB03A8 -:100020000C94AB030C94AB030C946A150C943C1623 -:100030000C949E230C94AB030C94AB030C94AB0375 -:100040000C94AB030C940D040C94AB030C94AB0315 -:100050000C94AB030C9406240C94AB030C94AB03EC -:100060000C94AB030C94AB030C94AB030C94AB0358 -:100070000C94AB030C94AB030C94AB030C94AB0348 -:100080000C94DF0B0C94AB030C94AB030C94AB03FC -:100090000C94AB030C94AB030C94AB030C94AB0328 -:1000A0000C94AB030C94AB030C94AB03A916CB16C6 -:1000B000B917CB16B91710173317B91788179B172D -:1000C000851A851AB41AB41AF31A131B691C691C11 -:1000D0001E1B691CCE1BCE1B351C3E1C691C631CE1 -:1000E000DB1BDB1BDB1BDB1BDB1BDB1BDB1BDB1B60 -:1000F000DB1BDB1BDB1BDB1BDB1BDB1BDB1BDB1B50 -:10010000EB1BF91B001C071C111C07634236B79B35 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000001E1013316 -:1001D000023301260226012C022C012C022C0127BD -:1001E00002270133023302E1015002500150025054 -:1001F000015002500001E1012602260133023301C1 -:100200002C022C012C022C0133023301270227027D -:10021000E10150025001500250015002500001E132 -:10022000013302330126022602E10001E10133021B -:10023000330127022702E1000000F1A4F1A529A65D -:1002400000000000018C028C048C088C000000006F -:100250000000000000002B22032014001A000900F7 -:1002600013000A000D000F0018001C0033002D00C1 -:100270002A00040015001600170007000B001100EB -:1002800008000C00120028000F201D001B000600B3 -:10029000190005000E00100036003700520034002F -:1002A000E000E300E200E10001202C002C0002202D -:1002B0003800500051004F00032014001A000800BD -:1002C000150017001C0018000C00120013002D0070 -:1002D0002A0004001600070009000A000B000D00A8 -:1002E0000E000F00330028000F201D001B00060029 -:1002F00019000500110010003600370052003400CC -:10030000E000E300E200E10001202C002C000220CC -:100310003800500051004F00032000005200000040 -:10032000000000002602270254005F006000610008 -:100330002A00500051004F00000000002202670018 -:1003400055005C005D005E000F2000000000000012 -:100350000000000000008500560059005A005B00B4 -:10036000E000E300E200E1000120010001000220C2 -:100370005700620063005800032014001A000900AF -:10038000130023000D000F0018001C0033002D0087 -:100390002A00210015002200240007000B00110094 -:1003A00020001E00270028000F201D001B00060053 -:1003B000190005000E00100036003700520034000E -:1003C000E000E300E200E10001202C002C0002200C -:1003D0003800500051004F003500000000000000C0 -:1003E0000000000000000000033002300130003047 -:1003F0002A001E001F0020002100220023002400EC -:100400002500260027000100310000000000000048 -:1004100000000000000000002F0030004B002E0004 -:100420000100010001000100012001000100022083 -:1004300000004A004E004D003A003B003C003D00E9 -:100440003E003F00400041004200430044004500A0 -:100450004C00F400F000F500F600F900F700500041 -:10046000510052004F0000000100F200F100F300C3 -:10047000FB00FA00FC00000000004B0152054E0199 -:100480000100010001000100012000000000022025 -:100490000000500551054F050100A800AA00A90061 -:1004A000000000000000000000000000000000004C -:1004B0000000AE00AC00AB00000000000000000037 -:1004C00000000000000000500000000000000000DC -:1004D000000000000000000000000000000000001C -:1004E0000620072008200920012001000100022029 -:1004F0006600A700A6000F052803540068006500E9 -:10050000200050006C0061006E0063006B00200052 -:100510004B006500790062006F00610072006400AA -:1005200000002C034F007200740068006F006C0024 -:1005300069006E0065006100720020004B006500DC -:10054000790062006F0061007200640073000000B7 -:100550000403090409026D00040100A0FA09040063 -:10056000000103010100092111010001223F0007E0 -:1005700005810308000A09040100010301020009C2 -:100580002111010001224D000705820308000A091C -:1005900004020001030000000921110100012236BC -:1005A000000705830308000A090403000103000093 -:1005B0000009211101000122390007058403100000 -:1005C000011201100100000008EDFE606001000151 -:1005D00002000105010906A101050719E029E71537 -:1005E0000025019508750181020508190129059565 -:1005F00005750191029501750391010507190029FF -:100600007715002501957875018102C005010980E3 -:10061000A101850216010026B7001A01002AB700C1 -:10062000751095018100C0050C0901A10185031613 -:100630000100269C021A01002A9C02751095018176 -:1006400000C005010902A1010901A1000509190164 -:100650002905150025019505750181029501750390 -:1006600081010501093009311581257F9502750841 -:10067000810609381581257F950175088106050CCD -:100680000A38021581257F950175088106C0C005CD -:10069000010906A101050719E029E71500250195C3 -:1006A0000875018102950175088101050819012964 -:1006B00005950575019102950175039101050719CD -:1006C0000029FF150025FF950675088100C011243B -:1006D0001FBECFEFDAE0DEBFCDBF04B603FE24C0FD -:1006E00080911E0390911F03A0912003B0912103DC -:1006F0008730904BA740B04BB9F410921E03109274 -:100700001F03109220031092210314BE84B7877F29 -:1007100084BF88E10FB6F894809360001092600067 -:100720000FBEE0E0F8E3099511E0A0E0B1E0E6E9F2 -:10073000FBE502C005900D92A03CB107D9F713E08C -:10074000A0ECB1E001C01D92AE31B107E1F70E940B -:10075000B0120C94C92D0C9400000895089581E006 -:10076000089508950C94AE030C94AF030C94B10358 -:100770000E94932923E030E0281B3109220F2093A7 -:10078000C4010895282F2F9880918000211108C05E -:10079000877F8093800010928D0010928C001BC088 -:1007A000886080938000233019F48FEF9FEF0FC093 -:1007B00083E090E0821B9109880F991F2FEF3FEF94 -:1007C000A90102C0569547958A95E2F7CA01909310 -:1007D0008D0080938C000C94B8030E94B80384E0D1 -:1007E0008093C3011092C0010895279A2F988FEF2C -:1007F0009FEF90938700809386008AE0809380002B -:1008000089E1809381000E94FC280C94ED030E94F2 -:10081000F5036E9A769A0C94AD031F920F920FB661 -:100820000F9211242F933F938F939F93EF93FF93F6 -:10083000E091C101F091C201CF0101969093C201F4 -:100840008093C1010090C30102C0F695E7950A9418 -:10085000E2F7EF738091C001823019F4E03251F475 -:1008600004C0813039F4EF3329F480916F008D7F1B -:1008700080936F00F0E0E457FE4FE49121E031E017 -:10088000E29FC001E39F900D11240090C40102C0BB -:10089000969587950A94E2F790938D0080938C004B -:1008A000FF91EF919F918F913F912F910F900FBEEC -:1008B0000F901F901895FC01613061F028F06230B4 -:1008C00079F0633099F018C082818823A9F08BE217 -:1008D00092E008958281882379F08EE192E0089574 -:1008E0008281882349F085EF91E0089582818823F1 -:1008F00019F08CEC91E0089580E090E0089581E09B -:1009000008950C947F0408950C94070480911502B7 -:10091000882309F448C08091D1019091D2010097B9 -:1009200079F40E94D0239093D2018093D1018091D9 -:10093000D30190E0009771F48091D40190E00AC057 -:100940000E94DC2320910001309101012817390712 -:1009500040F329C00197880F991F880F991FFC0148 -:10096000EB52FE4F60817181828193810E94450B21 -:10097000E091D30184E0E89FF0011124EB52FE4F97 -:1009800060817181828193814FE050E00E94FD0E71 -:100990008091D30190E001966091D40170E00E94B3 -:1009A000792D8093D3010C94B203109217020C940A -:1009B000120B0895089581E0809317020C94DA04D5 -:1009C000089508958F929F92AF92BF92EF92FF92F7 -:1009D0000F931F93CF93DF93CDB7DEB7A3970FB6D7 -:1009E000F894DEBF0FBECDBF7C01FC0100811181F8 -:1009F000C8010E94CD21B8010E94E4068C01B70114 -:100A00000E948104882309F4CCC10032F0E51F075D -:100A100041F4F7018281882309F458C00E94610FD4 -:100A2000C0C10132F0E51F0741F4F701828188233C -:100A300009F44CC00E946A0FB4C10232F0E51F07EE -:100A400051F4F7018281882309F440C00E945D0FB0 -:100A50008111F0CFE3CF0332F0E51F0739F4F7013E -:100A60008281882399F10E94DB049BC10432F0E566 -:100A70001F0739F4F7018281882341F10E94D504D0 -:100A800090C10532F0E51F0749F4F7018281882300 -:100A9000E9F0809117028111F1CFE5CF0632F0E540 -:100AA0001F0739F4F7018281882381F00E94710FBA -:100AB0000AC00732F0E51F0749F4F7018281882355 -:100AC00029F00E947C0F0E94E1046BC18091170203 -:100AD000811105C0F70182818111CFC018C1003E8C -:100AE000110579F4F7018281882309F44DC00E9431 -:100AF000120B81E080931602109215021092D4011D -:100B000050C1023E110559F4F70182818823E1F1B9 -:100B10000E94120B109216021092150242C1033E5F -:100B2000110591F4F7018281882371F10E94120B63 -:100B30001092160281E0809315021092D301109258 -:100B4000D2011092D1012DC10235110559F4F701DE -:100B50008281882309F425C18091000190910101CF -:100B60000A970DC00135110579F4F70182818823B8 -:100B700009F417C180910001909101010A969093A8 -:100B80000101809300010DC14091040183E2EFE176 -:100B9000F1E0DE01119601900D928A95E1F7F701DF -:100BA000808121E030E02C0F3D1F280F311DC9014D -:100BB0002091020130910301FC01E20FF31F6081DB -:100BC000772767FD7095640F711D882777FD8095E5 -:100BD000982F0E949B2A20E030E040E451E40E94DC -:100BE000002A4B015C01F701218184E090E0821B27 -:100BF0009109BC01882777FD8095982F0E949B2A38 -:100C00009B01AC01C501B4010E9498299B01AC0174 -:100C100060E070E080E090E40E940E2C20E030E084 -:100C20004CED50E40E94AB2B4B015C01F70182813B -:100C30008823D1F04FE050E0C501B4010E94FD0EC1 -:100C4000809116028823A1F08091D40124E0829F34 -:100C5000F0011124EB52FE4F80829182A282B38276 -:100C60008F5F8093D40104C0C501B4010E94450B7D -:100C70000F3F110508F02ECF94C08091D001811153 -:100C80001FC0043130E5130709F051C00E948304EE -:100C900081E08093D0010E94D0239093CF01809374 -:100CA000CE011092C7011092C9011092C801109292 -:100CB000CB011092CA011092CD011092CC0171C0EB -:100CC0008091CE019091CF010E94DC23883C910558 -:100CD00070F48091C701E82FF0E0EE0FFF1FE8539A -:100CE000FE4F118300838F5F8093C7015AC0043881 -:100CF00080E5180721F00538104501F13AC0F701E9 -:100D00008281882341F01092C50182E01EC0043820 -:100D100030E5130759F58091C501811106C086E2BF -:100D20000E94291986E20E94F11982E01CC0043851 -:100D3000F0E51F0741F305381045D9F4F70182812A -:100D4000882331F01092C60180E20E94401A29C027 -:100D50008091C601811106C087E20E94291987E2AD -:100D60000E94F11980E20E94471A1BC00538104505 -:100D700029F381E08093C5018093C601C701A39642 -:100D80000FB6F894DEBF0FBECDBFDF91CF911F919C -:100D90000F91FF90EF90BF90AF909F908F900C9429 -:100DA000B40380E0A3960FB6F894DEBF0FBECDBFAC -:100DB000DF91CF911F910F91FF90EF90BF90AF9077 -:100DC0009F908F90089508959CE0799FF0011124E1 -:100DD00090E3899FE00DF11D1124E60FF11DEE0F48 -:100DE000FF1FE85AFD4F859194910895880F991F30 -:100DF000FC01E854FF4F859194910895880F991F45 -:100E0000FC01E85CFD4F8591949108950F931F9329 -:100E1000CF93DF93EC01811521E39207A0F5C11573 -:100E200080E3D80708F0D7C0C83ED105D8F4C03E4B -:100E3000D10508F007C2C83AD10578F4C53AD10502 -:100E400008F06AC0C130D10509F463C008F4F7C1E5 -:100E5000C430D10508F0F6C1F2C1CB3BD10508F48E -:100E600066C0EDC1C11590E2D90708F0AFC0C11549 -:100E700021E0D20708F0E6C1C03FD10508F4DFC188 -:100E80008E0110651FC2C03880E5D80700F5C03755 -:100E900090E5D90708F0A3C0C11520E5D20709F4F1 -:100EA000ACC050F4CE01905480319F4008F0C7C1CF -:100EB000DF708E01106A06C2C13080E5D80709F4E0 -:100EC000AEC0C43190E5D90708F4AFC0B8C1C3388B -:100ED00020E5D20709F48EC050F4C13890E5D90757 -:100EE00009F482C008F083C000E011EDEBC1C0310D -:100EF00081E5D80708F4A3C1C11597E5D90708F41F -:100F000036C1CE0190578115904108F098C1DF702D -:100F100093C101E010E0D6C1C53AD10509F494C1EE -:100F2000C63AD10509F093C102E810E4CBC1C83A32 -:100F3000D10509F48FC1C93AD10509F48EC1CA3A65 -:100F4000D10509F48DC1CB3AD10509F48CC1CC3A55 -:100F5000D10509F48BC1CD3AD10509F48AC1C03B52 -:100F6000D10509F489C1CE3AD10509F488C1CF3A37 -:100F7000D10509F487C1C13BD10509F486C1C23B43 -:100F8000D10509F485C1C33BD10509F484C1C43B33 -:100F9000D10509F483C1C53BD10509F482C1C63B23 -:100FA000D10509F481C1C73BD10509F480C1C83B13 -:100FB000D10509F47FC1C93BD10509F47EC1CA3B03 -:100FC000D10509F47DC100E014E47CC1CE019F701D -:100FD0000E94FE0678C1DD278E01106C73C1CF70B0 -:100FE000DD278E01146D6EC100E010ED6BC100E0D5 -:100FF00012ED68C100E013ED65C10E94D41C0E948F -:10100000120B0E94D9048FEF94E32CE081509040A2 -:101010002040E1F700C000000E942B2453C18091C2 -:10102000F20281608093F2024DC10E948C248111F2 -:1010300002C00E9468240E949F2490E090931D03A8 -:1010400080931C03C23080E5D80721F480911C03F3 -:10105000816086C0C43090E5D90721F480911C03DB -:1010600082607EC0C63020E5D20721F480911C0347 -:10107000846076C0C83080E5D80719F480911C03DD -:1010800027C0CA3090E5D90721F480911C03806104 -:1010900067C0CC3020E5D20721F480911C03806228 -:1010A0005FC0CE3080E5D80721F480911C038064B6 -:1010B00057C0C03190E5D90721F480911C038068A6 -:1010C0004FC0C23120E5D20729F480911C0384600F -:1010D000886046C0C33080E5D80721F480911C03A6 -:1010E0008E7F3EC0C53090E5D90721F480911C0366 -:1010F0008D7F36C0C73020E5D20721F480911C03D4 -:101100008B7F2EC0C93080E5D80719F480911C036D -:1011100026C0CB3090E5D90721F480911C038F7E47 -:101120001FC0CD3020E5D20721F480911C038F7DB4 -:1011300017C0CF3080E5D80721F480911C038F7B46 -:101140000FC0C13190E5D90721F480911C038F773E -:1011500007C0C331D04531F480911C038B7F877F5A -:1011600080931C0380911C030E94A324ABC08D2F8D -:1011700099278F70992781309105D9F49E012370AA -:10118000332702C0880F991F2A95E2F79C688E01C9 -:1011900044E0000F111F4A95E1F700271370802BE0 -:1011A000912B53E0CC0FDD1F5A95E1F7C076DD2778 -:1011B0002FC08230910531F4DC2FCC278E01016FD6 -:1011C000106A80C08330910569F4CE01837099273D -:1011D00001E010E002C0000F111F8A95E2F7C8017C -:1011E0009C680FC084309105B9F4CE0183709927B3 -:1011F00001E010E002C0000F111F8A95E2F7C8015C -:101200009A6823E0CC0FDD1F2A95E1F7C07ED770E6 -:101210008C010C2B1D2B56C08530910531F4DC2F31 -:10122000CC278E01046F106A4DC0069709F04AC0A2 -:10123000CF71DD27DC2FCC278E01106243C000E088 -:1012400010E040C08E013EC001E810E43BC003E85E -:1012500010E438C002EE14E435C009EE14E432C0E4 -:101260000AEE14E42FC005EB14E42CC006EB14E4E2 -:1012700029C007EB14E426C00CEC14E423C00DECE9 -:1012800014E420C003E815E41DC00AE815E41AC000 -:1012900002E915E417C004E915E414C001E216E4FC -:1012A00011C003E216E40EC004E216E40BC005E22E -:1012B00016E408C006E216E405C007E216E402C020 -:1012C0000AE216E4C801DF91CF911F910F910895B2 -:1012D0009CE0799FF001112490E3899FE00DF11DBE -:1012E0001124E60FF11DEE0FFF1FE85AFD4F859107 -:1012F0009491803E9105E0F4803C910558F581334E -:10130000910509F46FC048F48932910509F463C06E -:101310008A32910509F46DC072C089339105E9F0F4 -:1013200082389105D1F08533910509F44DC067C02D -:10133000833E910581F138F4803E9105B9F0823EFB -:101340009105D9F05CC0863E910561F1873E91051B -:10135000A1F155C00E94F606089520911C0320FDBE -:1013600002C021FF4CC080EE90E049C080911C0378 -:1013700080FFF9CF89E390E042C080911C0382FF97 -:101380000EC080911C0384FF03C080E090E037C052 -:1013900083EE90E034C080911C0382FFF2CF82EE96 -:1013A00090E02DC080911C0383FF0BC080911C0333 -:1013B00084FDEBCF87EE90E022C080911C0383FF79 -:1013C000F5CF86EE90E01BC080911C0385FF07C01F -:1013D00089E290E014C080911C0385FFF9CF85E37A -:1013E00090E00DC080911C0386FF07C08AE290E068 -:1013F00006C080911C0386FFF9CF81E390E00E9434 -:10140000060708950C94B603E82FF0E0E25BFE4F68 -:101410008081E82FEF70F0E082958F7021E030E05E -:10142000A90102C0440F551F8A95E2F740A3089511 -:101430000F931F93CF93DF9385B7806885BF85B7E0 -:10144000806885BFC3E0D0E001E010E0FE01E25B10 -:10145000FE4F8081E82FEF70F0E021A182958F7020 -:10146000A80102C0440F551F8A95E2F7CA01822BDA -:1014700081A38C2F0E94040A219740F78BE090E013 -:1014800061E070E0FC01EE5BFE4F2081E22FEF7027 -:10149000F0E042A122952F70DB0102C0AA0FBB1F12 -:1014A0002A95E2F79D01242B22A3019758F7DF919B -:1014B000CF911F910F910C948404EF92FF920F93A0 -:1014C0001F93CF93DF9300E212E0C3E0EE24E39496 -:1014D000F12CD5E08C2F0E94040A8BE090E040E0D4 -:1014E00050E0FC01EE5BFE4F6081E62FEF70F0E014 -:1014F00020A130E062956F7002C0359527956A95FE -:10150000E2F720FD09C09701082E02C0220F331F09 -:101510000A94E2F7422B532B019718F7F8019291A6 -:1015200082918F018417950721F051834083D093D6 -:1015300005018C2F0E94040AC15060F680910501BC -:1015400087FD2CC08150809305018F3F39F08FE9D2 -:101550009FE00197F1F700C0000020C080911E02BB -:1015600090911F02909327028093260280911C0283 -:1015700090911D02909325028093240280911A027B -:1015800090911B0290932302809322028091180273 -:101590009091190290932102809320020E94860468 -:1015A00081E0DF91CF911F910F91FF90EF9008950F -:1015B000E82FF0E0EE0FFF1FE05EFD4F808191818C -:1015C000089508950F931F93CF9308E212E0C0E0AF -:1015D000F801929182918F010E944823C80FF2E096 -:1015E00000321F07A9F78C2FCF911F910F910895FB -:1015F0000E948C24811102C00E9468240E94B124A0 -:10160000809307033E9A809171008D7F80937100D3 -:1016100082E0809390008AE18093910081E0809342 -:101620002A02089580912A02811102C00E94F80ABC -:1016300010927A0210927902809171008D7F8093CE -:101640007100809190008F738093900010923C0203 -:1016500010923B0210927302109274021092750263 -:10166000109276021092720210927102E1E5F2E09D -:10167000A1E4B2E011921192119211921D921D9269 -:1016800082E0E137F807B1F70895CF92DF92EF9249 -:10169000FF920F931F93CF93DF9320913B0222235E -:1016A00009F484C06B017C0180912A02811102C07F -:1016B0000E94F80A01E712E0C7E0D0E0A701960116 -:1016C000F80192918291729162918F010E94FC299E -:1016D000811131C0FE01EE0FFF1FEE0FFF1FEF5A09 -:1016E000FD4F1082118212821382DE01AA0FBB1FEE -:1016F000AF5BBD4F11961C921E92C730D105E9F029 -:10170000219644815581668177814083518362832C -:101710007383148215821682178212968D919C9182 -:10172000139711969C938E9313961C921E92129768 -:1017300034961296E2CF219708F680917902909123 -:101740007A02019797FD05C090937A0280937902FF -:1017500004C010927A0210927902809179029091DD -:101760007A0220917702309178022817390724F005 -:101770001092780210927702892BC1F48091710047 -:101780008D7F80937100809190008F738093900083 -:1017900010927302109274021092750210927602E7 -:1017A000109272021092710210923B02DF91CF915F -:1017B0001F910F91FF90EF90DF90CF9008951F92AF -:1017C0000F920FB60F9211244F925F926F927F92F9 -:1017D0008F929F92AF92BF92CF92DF92EF92FF9241 -:1017E0002F933F934F935F936F937F938F939F9329 -:1017F000AF93BF93CF93DF93EF93FF9380913B021F -:10180000882309F49BC1C0917902D0917A021C16F9 -:101810001D060CF093C140902B0250902C0260905A -:101820002D0270902E0220E030E0A901C301B20128 -:101830000E94A72B18160CF065C0C130D10509F421 -:1018400052C08091770290917802BE010E94792D5A -:101850007C01909378028093770280903D02909073 -:101860003E02A0903F02B090400220E030E040E80D -:101870005FE3C501B4010E94982960933D02709313 -:101880003E0280933F0290934002F701EE0FFF1F4C -:10189000EE0FFF1FEF5AFD4FA3019201608171818E -:1018A000828193810E94002A20E030E040E05EE3E4 -:1018B0000E94AB2B9B01AC01C501B4010E94A72B78 -:1018C00018168CF4C7010196BE010E94792D9093E1 -:1018D00078028093770210923D0210923E0210929D -:1018E0003F0210924002E0917702F0917802EE0FF1 -:1018F000FF1FEE0FFF1FEF5AFD4F60817181828144 -:101900009381D0C0C0907302D0907402E0907502B1 -:10191000F090760220E030E0A901C701B6010E94F4 -:10192000FC292197882309F4A2C0FE01EE0FFF1FB6 -:10193000EE0FFF1FEF5AFD4F80809180A280B38091 -:10194000A5019401C701B6010E94FC2987FF31C09F -:10195000A501940160E070E08CED93EC0E94002AF8 -:1019600020E030E040E451E40E94002A20E030E032 -:1019700040E05FE30E94AB2B9B01AC0160E070E0B4 -:1019800080E090E40E940E2C9B01AC01C501B401E3 -:101990000E94AB2B9B01AC01C701B6010E94FC2940 -:1019A00087FF07C0A701960160E070E08CED93E42B -:1019B00039C0A5019401C701B6010E94A72B1816D2 -:1019C0000CF055C0A501940160E070E08CED93E44B -:1019D0000E94002A20E030E040E451E40E94002A06 -:1019E00020E030E040E05FE30E94AB2B9B01AC01C4 -:1019F00060E070E080E090E40E940E2C9B01AC015E -:101A0000C501B4010E94AB2B9B01AC01C701B6011B -:101A10000E94A72B18165CF5A701960160E070E004 -:101A20008CED93EC0E94002A20E030E040E451E489 -:101A30000E94002A20E030E040E05FE30E94AB2BF0 -:101A40009B01AC0160E070E080E090E40E940E2C0D -:101A50009B01AC01C701B6010E94AB2B60937302DE -:101A600070937402809375029093760213C0FE0106 -:101A7000EE0FFF1FEE0FFF1FEF5AFD4F8081918188 -:101A8000A281B3818093730290937402A093750234 -:101A9000B093760260917302709174028091750226 -:101AA0009091760220912802309129022F3F4FEF2A -:101AB000340731F02F5F3F4F3093290220932802E3 -:101AC0000E94870F6B017C0120E034E244EF51E477 -:101AD0000E94FC2987FF08C086EFC82E88E2D82E16 -:101AE00084EFE82E81E4F82E20E030E040E051E47D -:101AF000C701B6010E94AB2B9B01AC0160E074E210 -:101B000084E79BE40E94002A6B017C010E946D2AFD -:101B10007093970060939600209106013091070121 -:101B20004091080150910901C701B6010E94AB2BF9 -:101B30000E946D2A709399006093980080913C02F6 -:101B4000882309F433C1C0903702D0903802E09066 -:101B50003902F0903A0220E030E0A901C701B60155 -:101B60000E94A72B1816D4F5809128029091290283 -:101B70008F3F2FEF920729F00196909329028093CF -:101B80002802C701B6010E94870F20E030E040E044 -:101B900051E40E94AB2B9B01AC0160E074E284E74E -:101BA0009BE40E94002A6B017C010E946D2A7093C5 -:101BB00097006093960020910601309107014091B3 -:101BC000080150910901C701B6010E94AB2B0E9488 -:101BD0006D2A709399006093980008C01092970046 -:101BE0001092960010929900109298006091310224 -:101BF000709132026F5F7F4F7093320260933102B7 -:101C0000209196003091970080E090E0232BF1F036 -:101C1000C0919600D09197000E94992A6B017C0197 -:101C2000BE0180E090E00E94992A9B01AC01609186 -:101C300033027091340280913502909136020E94F5 -:101C4000002A20E03FEF4FE757E410C00E94992A96 -:101C50006B017C0120E030EE4FEF54E460913302E1 -:101C60007091340280913502909136020E94AB2B24 -:101C70009B01AC01C701B6010E94A72B87FD96C04E -:101C800080912F028F5F80932F0290E020910303B9 -:101C90003091040382179307A0F080910E038823EC -:101CA00019F010922F020DC0809171008D7F8093EA -:101CB0007100809190008F738093900010923C028D -:101CC0007DC080913002C0912F02811128C0C09048 -:101CD0000803D0900903E0900A03F0900B0320E082 -:101CE00030E0A901C701B6010E94A72B1816BCF469 -:101CF00081E08093300210923702109238021092E5 -:101D0000390210923A02C0923302D0923402E09229 -:101D10003502F0923602C150C0932F0243C0109298 -:101D200030021092290210922802E0910503F091EE -:101D3000060348E0C49FE00DF11D112480819181CC -:101D4000A281B3818093370290933802A093390225 -:101D5000B0933A0220E030E040E85EE364817581B0 -:101D6000868197810E94AB2B6B017C0180910A01D7 -:101D7000682F70E080E090E00E94992A20E030E037 -:101D800048EC52E40E94002A9B01AC01C701B60155 -:101D90000E94AB2B60933302709334028093350220 -:101DA0009093360210923202109231028091070312 -:101DB00080FD04C010923C0210923B02FF91EF9113 -:101DC000DF91CF91BF91AF919F918F917F916F9153 -:101DD0005F914F913F912F91FF90EF90DF90CF90C7 -:101DE000BF90AF909F908F907F906F905F904F903B -:101DF0000F900FBE0F901F901895CF92DF92EF9229 -:101E0000FF92CF93DF936B017C01EA0180912A025C -:101E1000811102C00E94F80A8091070380FF46C02A -:101E20008091790290917A0208970CF03FC08091DE -:101E300071008D7F8093710080913C0281110E941E -:101E4000120B81E080933B0210922902109228022B -:101E500020E030E0A901C701B6010E94A72B1816A7 -:101E6000DCF48091790290917A02FC01EE0FFF1F61 -:101E7000EE0FFF1FEF5AFD4FC082D182E282F38244 -:101E8000FC01EE0FFF1FEF5BFD4FD183C083019676 -:101E900090937A028093790280917100826080939E -:101EA000710080919000806880939000DF91CF91C5 -:101EB000FF90EF90DF90CF9008958091070381709D -:101EC0000895809107038160809307030E94B524E1 -:101ED0000C94E004809107038E7F809307030C9499 -:101EE000B52480917B0290E0019666E070E00E944C -:101EF000792D80937B02089580917B0290E0019779 -:101F000066E070E00E94792D80937B0208958F92A5 -:101F10009F92AF92BF92CF92DF92EF92FF920F9378 -:101F20001F93CF93DF936B017C01C0912802D09166 -:101F30002902BE0180E090E00E94992A4B015C01D9 -:101F4000A701960160E070E08CE594E40E94002A0D -:101F50009B01AC01C501B4010E94AB2B0E946D2A0C -:101F600020917B02233009F473C028F4222351F01E -:101F70002130E9F02CC1243009F4A0C0253009F447 -:101F8000E0C025C180E090E0A0E0BFE380930601BF -:101F900090930701A0930801B093090110922B02BE -:101FA00010922C0210922D0210922E0210C110924B -:101FB0002B0210922C0210922D0210922E026431EC -:101FC000710540F46A30710560F520E030E040E8CA -:101FD0005EE32BC0693C710508F0AAC080E090E088 -:101FE0000E94992A20E030E040EA51E40E949729BB -:101FF00020E030E044E353E40E94002A9B01AC015E -:102000000E94AB2B20E030E040E05EE30E94AB2B6F -:102010009B01AC0160E070E080E09EE30E949729A4 -:1020200044C020E030E040E05FE3C701B6010E9419 -:10203000AB2B6B017C0180E090E0A0E0BEE38093DD -:10204000060190930701A0930801B0930901BFC056 -:1020500010922B0210922C0210922D0210922E023E -:102060004AE0469F9001479F300D1124C90168EB5B -:102070007BE00E94652DBC016C5D754077FF03C05D -:10208000719561957109882777FD8095982F0E9439 -:102090009B2A2EE333EC4EE259E30E94AB2B20E067 -:1020A00030E040EC5EE30E94982960930601709353 -:1020B0000701809308019093090189C010922B02B7 -:1020C00010922C0210922D0210922E02CE018370DB -:1020D0009927892BE1F0BE016170772780E090E0BD -:1020E0000E94992A20E030E040E05EE30E94AB2BA2 -:1020F00020E030E040E45FE30E949829609306010D -:102100007093070180930801909309010CC080E04F -:1021100090E0A0E0BFE38093060190930701A093B5 -:102120000801B0930901C770DD27CD2B09F04FC01E -:1021300010920601109207011092080110920901F5 -:1021400046C010922B0210922C0210922D02109277 -:102150002E0200E010E020E03FE300930601109320 -:10216000070120930801309309016739710578F15F -:1021700080E090E00E94992A20E030E047E153E4BB -:102180000E94972920E030E04AE754E40E94002AA8 -:1021900020E030E048E452E40E94AB2B20E030E045 -:1021A00040EA51E40E94DD2A0E94682A660F771FE8 -:1021B000660F771FFB01EE5AFE4F2081318142816D -:1021C0005381C701B6010E94AB2B6B017C01C70193 -:1021D000B601DF91CF911F910F91FF90EF90DF90AB -:1021E000CF90BF90AF909F908F90089580918C0278 -:1021F0000895CF93DF9300D01F92CDB7DEB79C0137 -:1022000080911303843019F593E099833B832A83EB -:102210009093E9008FEF9091E800815095FD06C002 -:1022200095ED9A95F1F700008111F5CF8091E800C6 -:1022300085FF0DC040E050E063E070E0CE01019604 -:102240000E945A138091E8008E778093E8000F90E7 -:102250000F900F90DF91CF910895CF93DF9300D02F -:102260001F92CDB7DEB720911303243021F522E071 -:1022700029839B838A8383E08093E9008FEF909189 -:10228000E800815095FD06C095ED9A95F1F70000A4 -:102290008111F5CF8091E80085FF0DC040E050E04E -:1022A00063E070E0CE0101960E945A138091E8002D -:1022B0008E778093E8000F900F900F90DF91CF9171 -:1022C0000895209113032430F1F422E02093E900D3 -:1022D0002FEF3091E800215035FD06C035ED3A95DD -:1022E000F1F700002111F5CF2091E80025FF0BC088 -:1022F00040E050E065E070E00E945A138091E800F1 -:102300008E778093E8000895CF93DF93EC0190914E -:102310001303943009F046C0809115018823D9F049 -:10232000809116018823B9F09093E9008FEF909186 -:10233000E800815095FD06C095E19A95F1F70000FF -:102340008111F5CF8091E80085FF2CC040E050E07E -:1023500060E170E017C081E08093E9008FEF909119 -:10236000E800815095FD06C095ED9A95F1F70000C3 -:102370008111F5CF8091E80085FF14C040E050E066 -:1023800068E070E0CE010E945A138091E8008E77D9 -:102390008093E80080E1FE01ACE7B2E001900D928D -:1023A0008A95E1F7DF91CF91089580911203811111 -:1023B00009C00E94EF140E944C158091E2008460D5 -:1023C0008093E200089510921203089508950895ED -:1023D0000C94932342E061EC81E00E94691442E096 -:1023E00061EC82E00E94691442E061EC83E00E94AB -:1023F000691442E161EC84E00C9469148091150346 -:10240000833009F455C030F4813071F0823009F422 -:102410008EC008958A3009F47AC08B3009F460C008 -:10242000893009F09CC020C080911403813A09F0E2 -:1024300096C08091E800877F8093E8008091180320 -:1024400090911903892B21F460E18CE792E003C09D -:1024500060E080E090E070E00E94A5138091E800C9 -:102460008B778093E800089580911403813209F0FE -:1024700076C08091180390911903009719F0039783 -:1024800009F06DC08091E800877F8093E80080911B -:10249000E80082FD05C0809113038111F8CF5FC071 -:1024A0008091F10080938C028091E8008B7753C07B -:1024B00080911403813A09F052C0809118039091E1 -:1024C0001903892B09F04BC08091E800877F809326 -:1024D000E8008091E80080FFFCCF8091150136C0B4 -:1024E000809114038132D9F58091180390911903DA -:1024F000892BA9F58091E800877F8093E8000E94EE -:102500009E1480911603809315010C94D41C809125 -:102510001403813221F58091E800877F8093E800E1 -:102520000E949E148091170380938D0208958091DC -:102530001403813AA1F48091E800877F8093E8003A -:102540008091E80080FFFCCF80918D028093F100A4 -:102550008091E8008E778093E8000C949E14089593 -:1025600084B7877F84BF88E10FB6F89480936000BA -:10257000109260000FBE90E080E80FB6F894809350 -:102580006100909361000FBE0E9441180E94EF14F9 -:102590000E944C158091E20084608093E200789460 -:1025A0000E94D2170E9443188BE091E00E94ED1721 -:1025B00080911303853069F40E94542380911103A4 -:1025C0008823B1F30E948223882391F30E9444134D -:1025D000EFCF0E944B18ECCF292F33272330310542 -:1025E000C9F064F42130310581F02230310509F061 -:1025F00043C08DE690E024E535E042C0213231054C -:10260000F1F02232310541F137C082E190E021EC56 -:1026100035E036C099278130910541F0823091052F -:1026200041F0892B49F5E0E5F5E005C0E2E2F5E08F -:1026300002C0E8EFF4E0849190E09F0121C0643093 -:10264000D8F4E62FF0E0EE0FFF1FE255FE4F208199 -:10265000318189E090E014C0643070F470E0FB01D7 -:10266000EE0FFF1FEA55FE4F20813181FB01EE5531 -:10267000FE4F808190E004C080E090E020E030E0F8 -:10268000FA0131832083089580E189BD82E189BD0B -:1026900009B400FEFDCF8091D8008F7D8093D800D3 -:1026A0008091E00082608093E0008091E00081FDF5 -:1026B000FCCF0895CF92DF92EF92FF920F931F937A -:1026C000CF93DF93EC018B016A010E94BD1481114D -:1026D00033C0C114D10439F0F60180819181081B07 -:1026E000190BC80FD91FE12CF12C0115110519F197 -:1026F0008091E80085FD16C08091E8008E77809378 -:10270000E800C114D10449F0F60180819181E80EFE -:10271000F91EF182E08285E00FC00E94BD1488237B -:1027200021F30AC089918093F10001501109FFEF54 -:10273000EF1AFF0ADACF80E0DF91CF911F910F915E -:10274000FF90EF90DF90CF90089520911A03309181 -:102750001B032617370748F06115710539F42091DE -:10276000E8002E772093E80001C0B90140E0611530 -:102770007105A9F120911303222309F443C02530E8 -:1027800009F442C02091E80023FD40C02091E800F8 -:1027900022FD32C02091E80020FFE9CF4091F300F4 -:1027A0002091F20030E0342BFC01CF01611571055E -:1027B00059F02830310540F481918093F100615047 -:1027C00071092F5F3F4FF1CF41E02830310509F00B -:1027D00040E02091E8002E772093E800C8CF411117 -:1027E000C9CF0AC080911303882361F0853061F05E -:1027F0008091E80083FD0AC08091E80082FFF2CF5B -:1028000080E0089582E0089583E0089581E00895CE -:1028100020911A0330911B032617370748F06115E2 -:10282000710539F42091E8002E772093E80001C06B -:10283000B901FC0120E06115710591F1809113034C -:10284000882309F440C0853009F43FC08091E80036 -:1028500083FD3DC08091E80082FD2FC08091E8009B -:1028600080FFE9CF2091F3008091F20090E0922B5D -:102870006115710559F08830910540F42491209339 -:10288000F1003196615071090196F2CF21E008976D -:1028900009F020E08091E8008E778093E800CBCFAC -:1028A0002111CCCF0AC080911303882361F08530B9 -:1028B00061F08091E80083FD0AC08091E80082FF0A -:1028C000F2CF80E0089582E0089583E0089581E0EA -:1028D0000895982F973058F59093E900981739F09C -:1028E0007091EC002091ED005091F00003C0242F76 -:1028F000762F50E021FF19C03091EB003E7F3093DE -:10290000EB003091ED003D7F3093ED003091EB0016 -:1029100031603093EB007093EC002093ED00509306 -:10292000F0002091EE0027FF07C09F5FD3CF8F708C -:102930008093E90081E0089580E008958091140378 -:1029400087FF11C08091E80082FD05C080911303CC -:102950008111F8CF11C08091E8008B770BC0809176 -:102960001303882349F08091E80080FFF8CF80911D -:10297000E8008E778093E80008952091E40030917C -:10298000E50095E64091EC00842F817040FF22C065 -:102990008091E80080FD1CC080911303882391F092 -:1029A000853091F08091EB0085FD10C04091E400EE -:1029B0005091E5004217530729F39A01915011F7FE -:1029C00084E0089582E0089583E0089581E0089509 -:1029D00080E008954091E80042FFDECF08950E9414 -:1029E0005D150E946515E0EEF0E0808181608083D6 -:1029F000E8EDF0E080818F77808319BCA7EDB0E02F -:102A00008C918E7F8C9380818F7E808310921203B5 -:102A100008950F931F93CF93DF930E945D150E943B -:102A20006515C8EDD0E088818F77888388818068BC -:102A3000888388818F7D888319BC1092130310923C -:102A40000F03109211031092100300EE10E0F80132 -:102A500080818B7F808388818160888342E060E011 -:102A600080E00E946914E1EEF0E080818E7F808337 -:102A7000E2EEF0E0808181608083808188608083E5 -:102A8000F80180818E7F8083888180618883DF91D7 -:102A9000CF911F910F910895E8EDF0E080818F7E36 -:102AA0008083E7EDF0E080818160808384E082BFF5 -:102AB00081E0809312030C940915E8EDF0E0808129 -:102AC0008E7F80831092E20008951092DA001092B7 -:102AD000E10008951F920F920FB60F9211242F93C9 -:102AE0003F934F935F936F937F938F939F93AF9396 -:102AF000BF93EF93FF938091E10082FF0BC0809121 -:102B0000E20082FF07C08091E1008B7F8093E100AB -:102B10000E94D1178091DA0080FF1FC08091D800F9 -:102B200080FF1BC08091DA008E7F8093DA00809155 -:102B3000D90080FF0DC080E189BD82E189BD09B463 -:102B400000FEFDCF81E0809313030E94D51105C0E4 -:102B500019BC109213030E94E3118091E10080FFE1 -:102B600019C08091E20080FF15C08091E2008E7F45 -:102B70008093E2008091E20080618093E200809186 -:102B8000D80080628093D80019BC85E0809313033D -:102B90000E94E7118091E10084FF30C08091E20043 -:102BA00084FF2CC080E189BD82E189BD09B400FEAB -:102BB000FDCF8091D8008F7D8093D8008091E10077 -:102BC0008F7E8093E1008091E2008F7E8093E2000F -:102BD0008091E20081608093E20080910F0388235E -:102BE00011F084E007C08091E30087FD02C081E01E -:102BF00001C083E0809313030E94E8118091E100FB -:102C000083FF29C08091E20083FF25C08091E1000D -:102C1000877F8093E10082E08093130310920F037B -:102C20008091E1008E7F8093E1008091E2008E7FB1 -:102C30008093E2008091E20080618093E20042E0B4 -:102C400060E080E00E9469148091F00088608093C9 -:102C5000F0000E94E611FF91EF91BF91AF919F911B -:102C60008F917F916F915F914F913F912F910F9035 -:102C70000FBE0F901F9018951F920F920FB60F92D4 -:102C800011242F933F934F935F936F937F938F9371 -:102C90009F93AF93BF93CF93DF93EF93FF93C09135 -:102CA000E900CF708091EC00D82FD17080FDD0E882 -:102CB0001092E9008091F000877F8093F000789473 -:102CC0000E9480161092E9008091F0008860809345 -:102CD000F000CD2BCF70C093E900FF91EF91DF9111 -:102CE000CF91BF91AF919F918F917F916F915F91A4 -:102CF0004F913F912F910F900FBE0F901F901895FD -:102D00001F93CF93DF93CDB7DEB7AA970FB6F89492 -:102D1000DEBF0FBECDBFE4E1F3E088E08E0F9091FF -:102D2000F10091938E13FBCF0E94FE118091E80079 -:102D300083FF1FC18091140390911503492F50E028 -:102D40004A30510508F015C1FA01EA5AFF4F0C94B8 -:102D50008D2D803881F0823809F00BC180911803E5 -:102D60008F708093E9008091EB0085FB882780F9C4 -:102D70001092E90006C08091100390911103911107 -:102D800082609091E800977F9093E8008093F10033 -:102D90001092F100C8C0282F2D7F09F0EAC08823C7 -:102DA00019F0823061F0E5C080911603813009F09E -:102DB000E0C0933009F080E0809311032BC0809134 -:102DC0001603811127C0809118038F7009F4D1C0B8 -:102DD0008093E9002091EB0020FF1CC0933021F488 -:102DE0008091EB00806214C09091EB009061909311 -:102DF000EB0021E030E0A90102C0440F551F8A9585 -:102E0000E2F74093EA001092EA008091EB008860BC -:102E10008093EB001092E9008091E800877F86C0E4 -:102E20008111A7C0109116031F778091E30080786D -:102E3000812B8093E3008091E800877F8093E800F6 -:102E40000E949E148091E80080FFFCCF8091E300F7 -:102E500080688093E300111102C082E001C083E02A -:102E60008093130386C08058823008F082C080911E -:102E70001603909117038C3D53E0950779F583E095 -:102E80008A838AE289834FB7F894DE01139620E0A3 -:102E90003EE051E2E32FF0E050935700E49120FF31 -:102EA00003C0E295EF703F5FEF708E2F90E0EA3045 -:102EB00010F0C79601C0C0968D939D932F5F24316B -:102EC00049F74FBF8091E800877F8093E8006AE26E -:102ED00070E0CE0101960E94A51314C0AE014F5FB1 -:102EE0005F4F609118030E94EC12BC01009709F437 -:102EF00040C09091E800977F9093E80089819A8183 -:102F00000E9408148091E8008B778093E80031C01C -:102F1000803879F58091E800877F8093E800809180 -:102F20000F038093F1008091E8008E778093E80092 -:102F30000E949E141EC081111CC0909116039230F5 -:102F4000C0F48091E800877F8093E80090930F039E -:102F50000E949E1480910F03811106C08091E300AE -:102F600087FD02C081E001C084E0809313030E94CA -:102F7000EA118091E80083FF0AC08091E800877F12 -:102F80008093E8008091EB0080628093EB00AA962A -:102F90000FB6F894DEBF0FBECDBFDF91CF911F916A -:102FA00008950895CF93809113038823A1F0C091D1 -:102FB000E900CF709091EC00892F817090FD80E83E -:102FC000C82B1092E9008091E80083FD0E948016D2 -:102FD000CF70C093E900CF910895909393028093AE -:102FE00092020895E0919202F0919302309721F0BD -:102FF0000190F081E02D099480E00895E091920223 -:10300000F0919302309721F00280F381E02D099432 -:103010000895E0919202F0919302309721F004809C -:10302000F581E02D0994089520919002309191024C -:103030008217930771F09093910280939002E09130 -:103040009202F0919302309721F00680F781E02DF3 -:103050000994089520918E0230918F028217930770 -:1030600071F090938F0280938E02E0919202F09122 -:103070009302309721F00084F185E02D09940895A2 -:1030800008950C9440180E94C7230E94180A0E94B9 -:103090004D240C94FC285F926F927F928F929F92A6 -:1030A000AF92BF92CF92DF92EF92FF920F931F9356 -:1030B000CF93DF9300D000D01F92CDB7DEB70E9430 -:1030C0005D0A9DE9C92E92E0D92E03E010E0AA2402 -:1030D000A394B12C502E802F0E94D80A4C01F601E7 -:1030E000729062906F016826792661147104A1F4D0 -:1030F0000150110978F78FEF89838A831B820E9420 -:10310000D0238160782F9D838C8349815A816B8184 -:103110008D810E94FB1838C08091F20281FD0E94CF -:10312000E10A2BE030E07501022E02C0EE0CFF1C1C -:103130000A94E2F7C70186219721892B09F1298397 -:103140005A828E209F2091E0892809F490E09B8389 -:103150000E94D0238160782F9D838C8349815A817E -:103160006B818D810E94FB18000F111FF801EB5637 -:10317000FD4F80819181E826F926F182E08204C02A -:103180002150310980F6B4CF0E9434261091940268 -:103190000E94F2171817D1F00E94F2178093940240 -:1031A0000F900F900F900F900F90DF91CF911F9184 -:1031B0000F91FF90EF90DF90CF90BF90AF909F90D6 -:1031C0008F907F906F905F900C94020A0F900F90F9 -:1031D0000F900F900F90DF91CF911F910F91FF9063 -:1031E000EF90DF90CF90BF90AF909F908F907F90A7 -:1031F0006F905F900895CF93DF93CDB7DEB72B9795 -:103200000FB6F894DEBF0FBECDBF4F8358876987D6 -:103210007A878B87DE01119686E0FD0111928A95EF -:10322000E9F785E0FE01379601900D928A95E1F766 -:1032300049815A816B817C818D819E810E94721FA0 -:103240002B960FB6F894DEBF0FBECDBFDF91CF91A6 -:103250000895CF93882309F4C2C0C82F823859F447 -:103260000E94F21781FDBBC089E30E944C220E949C -:10327000192389E30CC0833879F40E94F21780FD8A -:10328000AEC083E50E944C220E94192383E50E9470 -:103290008E22CF910C941923843859F40E94F2178E -:1032A00082FD9DC087E40E944C220E94192387E47E -:1032B000EECF8CEF8C0F813A48F48C2F0E9464285B -:1032C00081118DC08C2F0E944C22E3CF80E28C0FA5 -:1032D000883048F4C77081E001C0880FCA95EAF7CA -:1032E0000E94D222D6CF8BE58C0F833078F4C53A7A -:1032F00029F0C63A31F083E890E005C081E890E01B -:1033000002C082E890E0CF910C94141888E58C0FED -:10331000833108F064C0C83A39F1C93A41F1CA3A78 -:1033200049F1CB3A51F1CC3A59F1CD3A61F1C03B78 -:1033300069F1CE3A71F1CF3A79F1C13B81F1C23BEB -:1033400089F1C33B91F1C43B99F1C53BA1F1C63B67 -:10335000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BC7 -:10336000C9F180E090E038C082EE90E035C089EE8F -:1033700090E032C08AEE90E02FC085EB90E02CC048 -:1033800086EB90E029C087EB90E026C08CEC90E0C3 -:1033900023C08DEC90E020C083E891E01DC08AE856 -:1033A00091E01AC082E991E017C084E991E014C06D -:1033B00081E292E011C083E292E00EC084E292E0EA -:1033C0000BC085E292E008C086E292E005C087E289 -:1033D00092E002C08AE292E0CF910C942A18CF9139 -:1033E0000895882309F44BC0823859F40E94F217DB -:1033F00081FF45C089E30E944C220E94192389E382 -:103400000CC0833871F40E94F21780FF38C083E546 -:103410000E944C220E94192383E50E948E220C9464 -:103420001923843859F40E94F21782FF28C087E4D8 -:103430000E944C220E94192387E4EFCF9CEF980F43 -:10344000913A58F390E2980F983050F4877091E0D9 -:1034500001C0990F8A95EAF7892F0E94D822DFCF01 -:103460009BE5980F933020F480E090E00C941418C2 -:10347000885A833120F480E090E00C942A18089553 -:10348000882321F00E94D2220C94192308958823C6 -:1034900021F00E94D8220C94192308957F928F92D4 -:1034A0009F92AF92BF92CF92DF92EF92FF920F93D3 -:1034B0001F93CF93DF931F92CDB7DEB77C01C62E4B -:1034C000772EFC01058102950F70128111110E9467 -:1034D000EF220E944522882379F0112369F080E2CF -:1034E0008C0D883048F082E00E942E220E944522F6 -:1034F00091E0D82ED92601C0D12CE72DE295EF70AE -:10350000F0E0E05AFF4F0C948D2D872D807F072D22 -:103510000F70882311F00295007F112389F000239A -:1035200009F499C180E28C0D883020F4802F0E942C -:10353000D22203C0802F0E94E2220E9419238BC155 -:103540008C2D0E94F119002309F4C3C180E28C0D77 -:10355000883020F4802F0E94D82203C0802F0E9440 -:10356000E8220E941923B5C1872D807F972D9F7077 -:10357000803211F4892F03C0892F8295807FCC205F -:1035800021F0F1E0CF16A1F01DC0112339F0002386 -:1035900019F1013009F50E9402239BC1002319F0A3 -:1035A000013009F496C189830E940523898110C1E5 -:1035B000112321F0063008F08CC10EC0053008F050 -:1035C00088C106C1112359F0002331F0F70195811C -:1035D00090FF41C19F7095830E94401A7AC10023D9 -:1035E00009F4F6C03EC1872D86958695837090E0DC -:1035F000009719F0019761F06CC1112321F08C2D17 -:10360000972D937002C080E090E00E94141861C171 -:10361000112321F08C2D972D937002C080E090E053 -:103620000E942A1856C18C2D112319F00E943C25A6 -:1036300002C00E94A4250E9429264BC1872D8370B9 -:1036400009F052C0111145C18C2D82958695877065 -:10365000880F880F9C2D9F70892E912CA12CB12C46 -:10366000082E04C0880C991CAA1CBB1C0A94D2F713 -:10367000C4FE14C00FE010E020E030E0B901A80162 -:1036800004C0440F551F661F771F8A95D2F7CB01E0 -:10369000BA01609570958095909503C060E070E0E8 -:1036A000CB01272D26952695237030E02230310559 -:1036B00069F02330310589F0682979298A299B2905 -:1036C0002130310571F00E94BA2003C1682979299F -:1036D0008A299B290E94D620FCC00E94BA20C501DD -:1036E000B4010E949E20F5C0112319F0872D81702E -:1036F00001C08695882309F4ECC08C2D82958695AF -:103700008770880F880F9C2D9F70892E912CA12C7B -:10371000B12C082E04C0880C991CAA1CBB1C0A944E -:10372000D2F7C4FE14C00FE010E020E030E0B90191 -:10373000A80104C0440F551F661F771F8A95D2F752 -:10374000CB01BA01609570958095909503C060E0BB -:1037500070E0CB01272D269526952370422F50E04F -:103760004230510569F04330510589F068297929C3 -:103770008A299B294130510571F00E949421A9C0EA -:10378000682979298A299B290E94B021A2C00E9418 -:103790009421C501B4010E9478219BC08C2D90E03A -:1037A000FC01E05EF109E531F10508F050C0E05997 -:1037B000FF4F0C948D2D0C2D0F70872D8F711123C1 -:1037C00021F00E941121802F07CF0E943221802FEB -:1037D0000E94471A7EC0112341F0053008F079C0DD -:1037E000872D8F710E94572174C0063008F071C078 -:1037F000F7CF112339F0872D8F710E94112169C0F5 -:103800001123C9F3872D8F710E94322162C01123C9 -:1038100029F0872D8F710E94FC205BC00E94F2204E -:1038200058C0112351F0172D1F71812F0E941121B3 -:1038300063E0812F0E9425224CC081E00E942E224D -:10384000023008F446C082E00E942E2242C01123BA -:1038500031F0002381F28C2D0E9429193AC00023F7 -:1038600089F28C2D0E94F11934C0472D4F706C2DB8 -:10387000C7010E945B040E9416202BC0111129C0B1 -:10388000472D4F7050E042305105B9F04CF44115CE -:10389000510581F041305105E1F40E94242919C0FD -:1038A0004330510569F04430510599F48C2D0E9444 -:1038B00076290FC00E940D290CC00E94402909C022 -:1038C0000E94532906C0472D4F706C2DC7010E94DE -:1038D000E306DD20F9F00E94212280FD1BC0F701E4 -:1038E00012820E941B220E941121C7010E94991C72 -:1038F0000E941B220F90DF91CF911F910F91FF909B -:10390000EF90DF90CF90BF90AF909F908F907F907F -:103910000C9432210F90DF91CF911F910F91FF9066 -:10392000EF90DF90CF90BF90AF909F908F907F905F -:1039300008950F931F93CF93DF93EC0188819981B2 -:103940002B813C81232BB9F09F3F11F48F3F99F0DD -:10395000CE010E94E204882371F0688179818A8116 -:103960000E9417228C010E94CC210E949320B80152 -:10397000CE010E944E1ADF91CF911F910F910895B1 -:103980000E94EF220E94FF220E94C4220E9419235B -:103990000E94DA260E94292680E090E00E941418F6 -:1039A00080E090E00C942A180E94DF220C94C01C46 -:1039B0000E940C22292F22952F7030E02C303105E7 -:1039C0004CF42A3031056CF4225031092230310593 -:1039D000A8F407C02C30310569F02F30310551F0C3 -:1039E0000DC0803F69F018F4803E40F409C0843F68 -:1039F00029F406C093FB882780F9089580E0089594 -:103A000081E00895CF93DF9300D000D01F92CDB70F -:103A1000DEB70F900F900F900F900F90DF91CF9126 -:103A20000895CF93DF9300D000D000D0CDB7DEB79C -:103A300026960FB6F894DEBF0FBECDBFDF91CF91B3 -:103A400008951F93CF93DF93C0919D0216E080915C -:103A50009E02C81799F0D0E01C9FF0011D9FF00D49 -:103A60001124E156FD4F408151816281738184812F -:103A700095810E94111D2196C770E9CFDF91CF91EA -:103A80001F9108954091CF025091D0026091D102D0 -:103A90007091D2028091D3029091D4020C94111DA6 -:103AA0008091D40282958F7009F054C08091D10228 -:103AB000882309F44FC080919D02A0919E026091DD -:103AC000CF027091D0024091D2025091D302B6E061 -:103AD0008A1709F43FC090E041155105C1F17F3FBD -:103AE00011F46F3FA1F1B89FF001B99FF00D1124BF -:103AF000E156FD4F218172132AC02081621327C035 -:103B00002281211124C0238134812417350710F428 -:103B100021503109241B350B283C3105C0F420917C -:103B2000D4022F7020612093D40226E0289FF00158 -:103B3000299FF00D1124EC55FD4F80818F7080611D -:103B400080838FEC92E00E94991C0C94211D0196B9 -:103B50008770BECF0895CF92DF92EF92FF920F93BE -:103B60001F93CF93DF93CDB7DEB762970FB6F8946C -:103B7000DEBF0FBECDBF8C0185E0F801DE011D96D2 -:103B800001900D928A95E1F7D8014C9111965C91C4 -:103B9000119712966C9112971396CD90DC90149712 -:103BA0003091CF027091D0028091D2029091D302D5 -:103BB000009709F46BC17F3F19F43F3F09F466C1D8 -:103BC000E090D102EE2009F4C0C02091D402C816C2 -:103BD000D90628F0F601E81BF90BCF0104C0809547 -:103BE00090958C0D9D1DFF24F394883C910578F0F1 -:103BF000F12C207F09F0C6C07C2DD98AC88A89891A -:103C00000E94021D8FEC92E00E94991CB1C0822F8D -:103C1000807F09F046C0751314C0341312C06111BF -:103C200010C02F7020612093D4020E94421D8FEC9F -:103C300092E00E94991C8091D402D80115968C9331 -:103C40002EC0CD2819F15F3F11F44F3FF9F0F62E49 -:103C500061111CC080919D0220919E0236E0821766 -:103C600009F45AC090E0389FF001399FF00D1124FB -:103C7000E156FD4F7181571306C07081471303C091 -:103C80007281711103C001968770E9CFF62E662309 -:103C900009F418C18091D40281608093D402F12C80 -:103CA00011C1751308C0341306C0611104C080919E -:103CB000D402D801C3C04D875E878D859E856A8BEF -:103CC0000E94D81C6A898823E1F16623D1F12091F2 -:103CD000D402822F82958F7090E0029774F08091C9 -:103CE000CF029091D00298878F831986DB86CA868F -:103CF0002C87CE0107960E94991C86E0F801AFEC54 -:103D0000B2E001900D928A95E1F70E94501D0E9449 -:103D1000421DFF24F394D6C04D875E878D859E8516 -:103D20000E940C22292F22952F7030E0223031057D -:103D30000CF0BCC09F7009F0B6C0805E883008F4FB -:103D4000C1C0C8010E94991CE4CFC816D90608F466 -:103D500053C0F601E81BF90BCF01883C910508F42C -:103D600050C0F12C7C2DD98AC88A89890E94021DF5 -:103D7000EFECF2E086E0DF011D928A95E9F70E9400 -:103D8000421DA0C0751314C0341312C0611110C0BD -:103D90008091D402F8018583C8010E94991C86E0B5 -:103DA000EFECF2E0DF011D928A95E9F7FE2C8AC064 -:103DB0004D875E878D859E856A8B0E94D81C6A8997 -:103DC000882309F4BECF662309F4BBCF2091D40227 -:103DD000822F82958F7090E002970CF48ECF8091A5 -:103DE000CF029091D0029A8389831B82DD82CC829C -:103DF0002E83CE0101967FCF809590958C0D9D1DD1 -:103E0000ACCFF62E662309F49CCF75132EC0341365 -:103E10002CC02091D40220FD1FC0822F82958F706C -:103E2000D9F0D80115962C9315978F3049F08F5FF4 -:103E3000982F9295907F822F8F70892B15968C9357 -:103E4000C8010E94991C86E0F801AFECB2E0019035 -:103E50000D928A95E1F793CF86E0F801AFECB2E0DE -:103E600001900D928A95E1F72DC04D875E878D8573 -:103E70009E850E94D81C811140CF8091D402816020 -:103E80008093D402C8010E94991C1CC0662309F4C7 -:103E900058CF4D875E878D859E850E94D81C8823CC -:103EA00009F44FCF2ACF811148CF0CC024303105FF -:103EB0000CF047CF9F7009F440CFF8019581907FB7 -:103EC00009F03BCF8F2D62960FB6F894DEBF0FBE80 -:103ED000CDBFDF91CF911F910F91FF90EF90DF90B9 -:103EE000CF9008951F93CF93DF93CDB7DEB72C9774 -:103EF0000FB6F894DEBF0FBECDBF4F8358876987DA -:103F00007A878B879C87CE0107960E94AB1D8823FA -:103F100069F08F8198852A853B85232BF1F19F3F9E -:103F200009F063C08F3F09F060C037C086E0FE0132 -:103F30003796DE01119601900D928A95E1F76F8117 -:103F40007885EA85FB85309741F17F3F11F46F3F1B -:103F500021F120919E0230E0C901019687709927D6 -:103F600040919D0250E08417950709F447C069838A -:103F70007A83FD83EC8396E0929FD001939FB00DEE -:103F80001124A156BD4FFE01319601900D929A95D4 -:103F9000E1F780939E020E94211D16E080919D0210 -:103FA00090919E028917C1F1189FC001112481567A -:103FB0009D4F0E94AB1D882379F1E0919D021E9FC9 -:103FC000F0011124E156FD4F4081518162817381DE -:103FD000848195810E94111D80919D0290E001963F -:103FE0008770992780939D02D9CF4F815885698525 -:103FF0007A858B859C850E94111DCFCF0E94D41C91 -:1040000010929E0210929D02EFECF2E086E0DF013A -:104010001D928A95E9F7C1CF2C960FB6F894DEBFB2 -:104020000FBECDBFDF91CF911F910895EF92FF9208 -:104030000F931F93CF93DF938C01009709F46CC00B -:10404000F12CEE24E394E8012196F8018491843761 -:1040500040F4843008F051C0813081F0823019F191 -:104060005BC0853709F444C0A8F19CE7980F9037EE -:1040700008F052C08F770E94F11941C00E5F1F4FA8 -:10408000FE01C49180E28C0F883048F4C7708E2DF9 -:1040900001C0880FCA95EAF70E94F22214C08C2F43 -:1040A0000E9429192DC00E5F1F4FFE01C49180E2AE -:1040B0008C0F883058F4C7708E2D01C0880FCA95B8 -:1040C000EAF70E94F8220E9419231AC08C2F0E943E -:1040D000F11916C00E5F1F4FFE01C491CC2381F071 -:1040E0008FE99FE00197F1F700C00000C150F6CFC3 -:1040F0000E5F1F4FFE01F49003C00E9429198E012C -:104100008F2D882309F49FCFEFE9FFE03197F1F776 -:1041100000C000008150F5CFDF91CF911F910F912A -:10412000FF90EF90089508956093D9027093DA029A -:104130008093DB029093DC020C94C01C0F931F93BE -:104140000091D9021091DA022091DB023091DC0259 -:10415000DC01CB01802B912BA22BB32B8093D902B6 -:104160009093DA02A093DB02B093DC021F910F91CF -:104170000C94C01C0F931F930091D9021091DA0286 -:104180002091DB023091DC02DC01CB018023912302 -:10419000A223B3238093D9029093DA02A093DB0287 -:1041A000B093DC021F910F910C94C01C0F931F93CE -:1041B0000091D9021091DA022091DB023091DC02E9 -:1041C000DC01CB0180279127A227B3278093D90256 -:1041D0009093DA02A093DB02B093DC021F910F915F -:1041E0000C94C01C1092D5021092D6021092D702E5 -:1041F0001092D8020C94C01C41E050E060E070E0E6 -:1042000004C0440F551F661F771F8A95D2F740934D -:10421000D5025093D6026093D7027093D8020C94C3 -:10422000C01C41E050E060E070E004C0440F551F46 -:10423000661F771F8A95D2F78091D5029091D6029A -:10424000A091D702B091D802482B592B6A2B7B2B17 -:104250004093D5025093D6026093D7027093D80250 -:104260000C94C01C41E050E060E070E004C0440FDA -:10427000551F661F771F8A95D2F740955095609518 -:1042800070958091D5029091D602A091D702B091FD -:10429000D802482359236A237B234093D5025093A5 -:1042A000D6026093D7027093D8020C94C01C41E0F0 -:1042B00050E060E070E004C0440F551F661F771F98 -:1042C0008A95D2F78091D5029091D602A091D7021B -:1042D000B091D802482759276A277B274093D502F7 -:1042E0005093D6026093D7027093D8020C94C01CEE -:1042F0000F931F930091D5021091D6022091D702FF -:104300003091D802DC01CB01802B912BA22BB32B57 -:104310008093D5029093D602A093D702B093D8028F -:104320001F910F910C94C01C0F931F930091D50205 -:104330001091D6022091D7023091D802DC01CB0136 -:1043400080239123A223B3238093D5029093D60296 -:10435000A093D702B093D8021F910F910C94C01C68 -:104360000F931F930091D5021091D6022091D7028E -:104370003091D802DC01CB0180279127A227B327F7 -:104380008093D5029093D602A093D702B093D8021F -:104390001F910F910C94C01C0895CF92DF92EF9261 -:1043A000FF920F931F93CF93DF938C01C090D9029C -:1043B000D090DA02E090DB02F090DC028091D5022E -:1043C0009091D602A091D702B091D802C82AD92ADA -:1043D000EA2AFB2ACFE1D0E0D701C6010C2E04C0A7 -:1043E000B695A795979587950A94D2F780FF06C052 -:1043F000B8018C2F0E946809019721F4219760F77A -:1044000080E001C08C2FDF91CF911F910F91FF9021 -:10441000EF90DF90CF900895CF93DF93EC010E944F -:10442000CD21BE010E946809DF91CF910895CB0193 -:104430000E940C2208958091DD02859585958595D1 -:1044400008958091DD028770089598E0899F90011A -:104450001124262B2093DD020C9411212091DD02E2 -:10446000809582238093DD02982F977069F430E065 -:10447000482F552747FD50952417350729F0859576 -:10448000859585950C94322108959091DD02977061 -:1044900081E009F480E0089590911501992321F0BD -:1044A00090911601911109C02091170130911801C6 -:1044B000F90132969FEF40E01FC0982F9695969590 -:1044C00096959F3050F5E0911701F0911801E90F92 -:1044D000F11D877021E030E0A90102C0440F551F93 -:1044E0008A95E2F7CA019181892B818308959F3FC4 -:1044F00039F04F5F4E3041F051915813F8CF0DC055 -:104500005111F7CF942FF5CF9F3F39F0F901E90F03 -:10451000F11D97FDFA9582830895089590911501F4 -:10452000992321F090911601911109C02091170152 -:1045300030911801F9013296205F3F4F1FC0982F2C -:104540009695969596959F30F0F4E0911701F0912D -:104550001801E90FF11D877021E030E0A90102C0C8 -:10456000440F551F8A95E2F7CA01809591818923EE -:10457000818308953196E217F30729F0908198130B -:10458000F9CF1082F7CF089581E090E0E091170114 -:10459000F0911801E80FF91F108201968031910502 -:1045A000A9F708959091F102892B8093F102089563 -:1045B00080959091F10289238093F10208951092E1 -:1045C000F10208959091F002892B8093F0020895F2 -:1045D00080959091F00289238093F00208951092C3 -:1045E000F00208959091EF02892B8093EF020895D5 -:1045F00080959091EF0289238093EF0208951092A5 -:10460000EF0208958093DE0208951092DE0208956D -:104610008091170190911801FC0131969C01205F57 -:104620003F4F80E0919191118F5FE217F307D1F72F -:104630000895E0911701F09118018091F1028083B3 -:10464000E0911701F091180190818091F002892B7F -:104650008083E0911701F091180190818091EF0221 -:10466000892B80838091DE02882361F0E09117011D -:10467000F09118019081892B80830E940823811179 -:104680001092DE0280911701909118010C94FE1790 -:1046900020E0009739F0AC01415051098423952363 -:1046A0002F5FF7CF822F089580911303843039F163 -:1046B0001092F30220E488E190E00FB6F894A895F8 -:1046C000809360000FBE2093600080E00E94C203D0 -:1046D00080E00E94020A83B7817F846083BF83B732 -:1046E000816083BF7894889583B78E7F83BF88E18C -:1046F0000FB6F89480936000109260000FBE08958A -:104700000895089580E00E94C2030E9480230E94C1 -:104710005D0A0E9481230E94E20A91E0811101C09A -:1047200090E0892F08950E94D41C80E00E94C2036B -:104730000E94FC280E94F2170C94020A1F920F920A -:104740000FB60F9211248F939F93AF93BF938091D5 -:10475000F302811113C08091F4029091F502A091AF -:10476000F602B091F7024196A11DB11D8093F402AB -:104770009093F502A093F602B093F702BF91AF9128 -:104780009F918F910F900FBE0F901F90189582E010 -:1047900084BD93E095BD9AEF97BD80936E00089518 -:1047A0002FB7F8948091F4029091F502A091F6024F -:1047B000B091F7022FBF0895CF92DF92EF92FF9250 -:1047C0000F931F932FB7F8944091F4025091F50284 -:1047D0006091F6027091F7022FBF6A017B01EE240F -:1047E000FF248C0120E030E0C016D106E206F3067B -:1047F00010F4415051099A01281B390BC9011F912E -:104800000F91FF90EF90DF90CF9008951F920F923D -:104810000FB60F9211248F939F93AF93BF93809104 -:10482000F4029091F502A091F602B091F702019680 -:10483000A11DB11D8093F4029093F502A093F6029E -:10484000B093F702BF91AF919F918F910F900FBEE0 -:104850000F901F9018950E94EF14F8942FEF87EA9D -:1048600091E6215080409040E1F700C0000087E0D1 -:1048700090EBDC0180931E0390931F03A093200311 -:10488000B09321039CE088E10FB6F894A89580933B -:1048900060000FBE90936000FFCF0E948C248111B6 -:1048A00002C00E9468240E9497248093F2020E9412 -:1048B0009F2480931C0387FB882780F9809316012F -:1048C0000E949B24682F70E080E090E00C9494207C -:1048D0006DEE7EEF80E090E00E94B32D60E082E01C -:1048E00090E00E94A12D60E083E090E00E94A12D65 -:1048F00060E084E090E00E94A12D60E085E090E01F -:104900000E94A12D60E086E090E00E94A12D6FEF53 -:1049100087E090E00C94A12D80E090E00E949B2D18 -:1049200021E08D3E9E4F09F020E0822F089582E025 -:1049300090E00C94932D83E090E00C94932D84E010 -:1049400090E00C94932D682F84E090E00C94A12DBE -:1049500086E090E00C94932D682F86E090E00C9414 -:10496000A12D87E090E00C94932D682F87E090E0D4 -:104970000C94A12D8091FA0280FF0BC060911C0164 -:1049800085E0689FB00111247595679575956795C9 -:104990002BC081FF09C060911C0185E0689FB001B8 -:1049A00011247595679520C082FF07C060911C0196 -:1049B00085E0689FB001112417C09091FB029923F4 -:1049C000D1F060911B01961788F720911C0185E0BA -:1049D000289F90011124929FA001939F500D1124B4 -:1049E00070E0CA010E94792D6038710540F46115AC -:1049F000710539F002C065E070E0862F08958FE7F9 -:104A0000089581E008958091FA0280FF08C06091C6 -:104A10001A0170E0759567957595679521C081FFBE -:104A200006C060911A0170E07595679519C082FF04 -:104A300004C060911A0170E010C09091FB029923AC -:104A4000C1F0609119019617A0F780911A01899F12 -:104A5000C001112470E00E94792D6038710528F49E -:104A60006115710521F0862F08958FE7089581E083 -:104A7000089561E070E0F4CF803F21F40E94BA24F1 -:104A8000819504C0813F29F40E94BA248093FE02DC -:104A90000895823F21F40E94BA24819504C0833F87 -:104AA00029F40E94BA248093FD020895893F19F4E5 -:104AB0000E94032505C08A3F31F40E940325819599 -:104AC0008093FF0208958B3F21F40E940325819576 -:104AD00004C08C3F29F40E940325809300030895AD -:104AE000843F21F48091FC02816017C0853F21F44E -:104AF0008091FC02826011C0863F21F48091FC020B -:104B000084600BC0873F21F48091FC02886005C05F -:104B1000883F31F48091FC0280618093FC0208950B -:104B20008D3F21F48091FA0281600BC08E3F21F409 -:104B30008091FA02826005C08F3F29F48091FA02C9 -:104B400084608093FA020895803F39F48091FE02D8 -:104B500087FF6CC01092FE0269C0813F29F48091EA -:104B6000FE021816BCF362C09091FD02823F29F448 -:104B700097FF5CC01092FD0259C0833F19F41916CB -:104B8000CCF354C0893F41F48091FF0218160CF019 -:104B90004DC01092FF024AC08A3F29F48091FF0263 -:104BA00087FF44C0F6CF8B3F39F48091000387FF25 -:104BB0003DC0109200033AC08C3F29F4809100035D -:104BC0001816BCF333C0843F21F48091FC028E7F21 -:104BD00017C0853F21F48091FC028D7F11C0863F74 -:104BE00021F48091FC028B7F0BC0873F21F48091E0 -:104BF000FC02877F05C0883F31F48091FC028F7EE4 -:104C00008093FC0213C08D3F21F48091FA028E7FC5 -:104C10000BC08E3F21F48091FA028D7F05C08F3F3B -:104C200029F48091FA028B7F8093FA028091FD0231 -:104C300081110EC08091FE0281110AC08091FF0295 -:104C4000811106C080910003811102C01092FB0205 -:104C500008958CEF92E00E9409180E94D02390934F -:104C6000F9028093F80208951F93CF93DF93809108 -:104C7000F8029091F9020E94DC23AC019091FB02B2 -:104C8000992321F020911D0130E006C020911E01E2 -:104C90008AE0289F900111244217530708F486C028 -:104CA0008091FD02C091FE02D091FF02109100039D -:104CB000811107C0C11176C0D11174C0111172C029 -:104CC00075C09F3F19F09F5F9093FB02181624F464 -:104CD0000E94BA248093FD028091FD0287FF05C0E7 -:104CE0000E94BA2481958093FD021C1624F40E9430 -:104CF000BA248093FE028091FE0287FF05C00E94C5 -:104D0000BA2481958093FE026091FD02662339F1F9 -:104D1000C091FE02CC2319F1772767FD7095872F8C -:104D2000972F0E949B2A23E333E343E35FE30E9430 -:104D3000AB2B0E94682A6093FD026C2F772767FDDA -:104D40007095872F972F0E949B2A23E333E343E339 -:104D50005FE30E94AB2B0E94682A6093FE021D163F -:104D600024F40E9403258093FF028091FF0287FFB5 -:104D700005C00E94032581958093FF02111624F43B -:104D80000E940325809300038091000387FF05C0E4 -:104D90000E940325819580930003DF91CF911F919D -:104DA0000C9429269F3F09F08ECF96CFDF91CF91AB -:104DB0001F910895ECEFF2E085E0DF011D928A95E6 -:104DC000E9F71092FB021092FA020895833081F104 -:104DD00028F4813059F08230D1F00895853009F4FB -:104DE00049C0B8F1863009F456C0089580911E017B -:104DF000262F30E0280F311D2F3F310524F4680F96 -:104E000060931E0108958FEF80931E010895809195 -:104E10001D01262F30E0280F311D2F3F310524F4CE -:104E2000680F60931D0108958FEF80931D01089511 -:104E300080911C01262F30E0280F311D2F3F3105B6 -:104E400024F4680F60931C0108958FEF80931C0178 -:104E5000089580911B01262F30E0280F311D2F3F30 -:104E6000310524F4680F60931B0108958FEF809340 -:104E70001B01089580911A01262F30E0280F311D63 -:104E80002F3F310524F4680F60931A0108958FEFC6 -:104E900080931A01089580911901262F30E0280F80 -:104EA000311D2F3F310524F4680F609319010895D7 -:104EB0008FEF809319010895833011F128F4813028 -:104EC00049F0823091F00895853081F120F18630EB -:104ED000C1F1089580911E01681720F4861B80930C -:104EE0001E01089510921E01089580911D016817FA -:104EF00020F4861B80931D01089510921D010895D2 -:104F000080911C01681720F4861B80931C01089572 -:104F100010921C01089580911B01681720F4861BD4 -:104F200080931B01089510921B01089580911A012E -:104F3000681720F4861B80931A01089510921A01B5 -:104F4000089580911901681720F4861B8093190138 -:104F500008951092190108950F931F93873208F056 -:104F600048C08E3108F08DC0803109F477C008F553 -:104F7000873009F461C068F4863009F09DC08091E3 -:104F8000F202817F8E7F8093F20281E080930203A0 -:104F900094C08B3009F489C08E3009F08DC08091A7 -:104FA000F20282FB222720F991E0922790FB82F9FE -:104FB0005EC0863109F479C060F4813109F07CC0AB -:104FC0000E94D41C9091160181E0892780931601DC -:104FD0006CC0893109F469C08B3109F06DC08091D2 -:104FE000F20281FB222720F991E0922790FB81F9C0 -:104FF0003EC0883309F459C050F4893209F457C0CF -:10500000853309F454C0873209F451C055C0833444 -:1050100009F44DC028F48A3308F44EC0895332C0D5 -:10502000883409F049C00E94D41C0E94120B0E94CF -:10503000D9040E942B2439C09091F202892F8095C7 -:10504000817080FB90F929F0966098609093F2024D -:1050500034C0997F977F9093F20227C08091F2022B -:1050600083FB222720F991E0922790FB83F980931C -:10507000F2029923D1F08091F20281608093F202D2 -:1050800014C08D5141E050E060E070E08A019B0166 -:1050900004C0000F111F221F331F8A95D2F7C901C8 -:1050A000B8010E9494200E94D41C81E006C061E0F7 -:1050B00070E080E090E0F5CF80E01F910F910895BF -:1050C00080E0089580E00895CF93C82F8091020377 -:1050D000813069F018F08230C9F184C0E091170185 -:1050E000F09118018081823209F07EC007C0E09102 -:1050F0001701F09118018081823261F48C2F0E9497 -:105100006028811104C08C2F0E94AC271DC081E053 -:1051100090E01AC08C2F0E946228811114C0C43103 -:1051200079F048F4CB3079F0C03109F061C082E009 -:105130008093020308C0C93219F0C83321F058C067 -:105140001092020355C081E0817054C0C93291F1C0 -:1051500020F5C43179F1B0F4C73009F047C08EE1D1 -:1051600080931E0182E380931D018AE080931C01DD -:1051700084E180931B0188E080931A0188E2809388 -:10518000190134C0CE51C63088F5EC2FF0E0EA5456 -:10519000FE4F80818093010329C0CE34E9F020F4D2 -:1051A000CB3421F56AE013C0C13579F0C235F1F492 -:1051B00061E00DC080910103882319F01092010372 -:1051C00015C081E08093020315C061E006C08091A4 -:1051D00001030E94E6260AC06AE0809101030E9452 -:1051E0005C2704C01092020380E004C081E002C08A -:1051F00080E0AACFCF9108950E948C24811102C033 -:105200000E9468240E94A82480931D0380FF02C08E -:10521000869501C080E00C94C20380911D03982FF5 -:105220009695292F30E0233031054CF49F5F990F7C -:105230008170892B816080931D030E94AC24809132 -:105240001D0386950C94C20380911D03982F96959B -:1052500091F09158990F8170892B80931D038E7F57 -:1052600091E009F490E080911D0390FB80F9809318 -:105270001D030E94AC2480911D0386950C94C203EB -:1052800080911D03982F909590FB80F980931D03CA -:105290000E94AC2480911D0380FF02C0869501C04E -:1052A00080E00C94C20390911D03892F86958F5F37 -:1052B0008F779170843028F4880F892B80931D0399 -:1052C00002C090931D0380911D038E7F91E009F42D -:1052D00090E080911D0390FB80F980931D030E9454 -:1052E000AC2480911D0386950C94C20320911D036C -:1052F000922F96958927982F990F822F8170892B4D -:1053000080931D038E7F91E009F490E080911D034E -:1053100090FB80F980931D030E94AC2480911D03B3 -:1053200086950C94C20380911D038695089550586C -:10533000BB27AA270ED0D1C1C2D130F0C7D120F0EF -:1053400031F49F3F11F41EF4B7C10EF4E095E7FB72 -:105350009FC1E92FD3D180F3BA176207730784077F -:10536000950718F071F49EF5EBC10EF4E0950B2E45 -:10537000BA2FA02D0B01B90190010C01CA01A001A7 -:105380001124FF27591B99F0593F50F4503E68F102 -:105390001A16F040A22F232F342F4427585FF3CF43 -:1053A000469537952795A795F0405395C9F77EF414 -:1053B0001F16BA0B620B730B840BBAF09150A1F05D -:1053C000FF0FBB1F661F771F881FC2F70EC0BA0FE3 -:1053D000621F731F841F48F4879577956795B7956B -:1053E000F7959E3F08F0B3CF9395880F08F0992763 -:1053F000EE0F97958795089527D108F481E00895D9 -:105400000CD06BC163D140F05AD130F021F45F3F32 -:1054100019F03EC1511195C14FC170D198F3992334 -:10542000C9F35523B1F3951B550BBB27AA27621768 -:105430007307840738F09F5F5F4F220F331F441FAD -:10544000AA1FA9F333D00E2E3AF0E0E830D09150E5 -:105450005040E695001CCAF729D0FE2F27D0660FD2 -:10546000771F881FBB1F261737074807AB07B0E811 -:1054700009F0BB0B802DBF01FF2793585F4F2AF027 -:105480009E3F510568F004C15CC15F3FECF3983E5C -:10549000DCF3869577956795B795F7959F5FC9F784 -:1054A000880F911D9695879597F90895E1E0660F0D -:1054B000771F881FBB1F621773078407BA0720F086 -:1054C000621B730B840BBA0BEE1F88F7E0950895EF -:1054D00004D06894B11135C1089518D188F09F5750 -:1054E00090F0B92F9927B751A0F0D1F0660F771F30 -:1054F000881F991F1AF0BA95C9F712C0B13081F010 -:105500001FD1B1E008951CC1672F782F8827B85F9D -:1055100039F0B93FCCF3869577956795B395D9F770 -:105520003EF490958095709561957F4F8F4F9F4F7A -:105530000895E89409C097FB3EF490958095709586 -:1055400061957F4F8F4F9F4F9923A9F0F92F96E9CF -:10555000BB279395F695879577956795B795F11144 -:10556000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE1 -:105570008F4F9F4F16C0882311F096E911C07723F3 -:1055800021F09EE8872F762F05C0662371F096E8FC -:10559000862F70E060E02AF09A95660F771F881FCB -:1055A000DAF7880F9695879597F9089588D018F0BF -:1055B00011F08CD038F480C0C4C0E92F9FD0B0F374 -:1055C0005523C9F3E7FB6217730784079507A8F112 -:1055D00099F3E92FFF2788232AF03197660F771F69 -:1055E000881FDAF7952F5527442332F09150504009 -:1055F000220F331F441FD2F7BB27E91BF50B621B99 -:10560000730B840BB109C1F222F4620F731F841F64 -:10561000B11D31972AF0660F771F881FBB1FEFCF90 -:10562000915050405AF041F0882332F0660F771FB6 -:10563000881F91505040C1F7939530C0869577955B -:1056400067959F5FD9F7F8CF990F0008550FAA0B00 -:10565000E0E8FEEF16161706E807F907C0F0121685 -:105660001306E407F50798F0621B730B840B950B88 -:1056700039F40A2661F0232B242B252B21F40895DD -:105680000A2609F4A140A6958FEF811D811D08957A -:1056900097F99F6780E870E060E008959F3F31F0E0 -:1056A000915020F4879577956795B795880F911D50 -:1056B0009695879597F908959FEF80EC08950024BB -:1056C0000A941616170618060906089500240A9467 -:1056D00012161306140605060895092E0394000CED -:1056E00011F4882352F0BB0F40F4BF2B11F460FF7C -:1056F00004C06F5F7F4F8F4F9F4F089557FD9058A5 -:10570000440F551F59F05F3F71F04795880F97FB85 -:10571000991F61F09F3F79F087950895121613063F -:105720001406551FF2CF4695F1DF08C0161617066E -:105730001806991FF1CF86957105610508940895A3 -:10574000E894BB2766277727CB0197F908957CDF7C -:1057500008F48FEF08950BD0C0CFB1DF28F0B6DF8B -:1057600018F0952309F094CFA7CF1124EACFC6DF14 -:10577000A0F3959FD1F3950F50E0551F629FF00164 -:10578000729FBB27F00DB11D639FAA27F00DB11DBD -:10579000AA1F649F6627B00DA11D661F829F222746 -:1057A000B00DA11D621F739FB00DA11D621F839FCD -:1057B000A00D611D221F749F3327A00D611D231FA3 -:1057C000849F600D211D822F762F6A2F11249F57F1 -:1057D00050408AF0E1F088234AF0EE0FFF1FBB1F14 -:1057E000661F771F881F91505040A9F79E3F5105B3 -:1057F00070F04ECFA6CF5F3FECF3983EDCF386957A -:1058000077956795B795F795E7959F5FC1F7FE2B5D -:10581000880F911D9695879597F90895FA01EE0FD7 -:10582000FF1F30962105310599F16115710561F46D -:105830008038BFE39B0749F168949038810561F097 -:105840008038BFEF9B0741F0992342F5FF3FE10508 -:105850003105210511F1E8940894E795D901AA23AF -:1058600029F4AB2FBE2FF85FD0F310C0FF5F70F4A8 -:10587000A695E0F7F73950F019F0FF3A38F49F7722 -:105880009F930CD00F9007FC905808953EF014CFD2 -:1058900060E070E080E89FE308954FE79F775F93B3 -:1058A0004F933F932F939ED02F913F914F915F91B4 -:1058B00052DF05C019F40EF0EBCE42CFFDCE26DF4D -:1058C000C8F39638C0F707F80F92E8942BE33AEA4A -:1058D00048EB5FE74EDF0F920F920F924DB75EB726 -:1058E0000F92C0D0EAE0F1E016D04F915F91EF91B6 -:1058F000FF91E595EE1FFF1F49F0FE57E068442732 -:10590000EE0F441FFA95E1F74195550B32D00F90F9 -:1059100007FE26C00895DF93CF931F930F93FF9246 -:10592000EF92DF927B018C01689405C0DA2EEF01C3 -:105930001EDFFE01E894A591259135914591559181 -:10594000AEF3EF0106DDFE019701A801DA9479F7C5 -:10595000DF90EF90FF900F911F91CF91DF9108950D -:105960009B01AC0160E070E080E89FE349CD90CE00 -:1059700095CECCDEE8F39923D9F3940F511DBBF3F8 -:105980009150504094F059F0882332F0660F771F01 -:10599000881F91505040C1F79E3F510544F7880F32 -:1059A000911D9695879597F908955F3FACF0983EC5 -:1059B0009CF0BB27869577956795B79508F4B160FD -:1059C0009395C1F7BB0F58F711F460FFE8CF6F5FF5 -:1059D0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE94 -:1059E000689456CE93DEC8F39923D1F3C6F3DF93C0 -:1059F000CF931F930F93FF92C92FDD2788232AF09F -:105A00002197660F771F881FDAF720E030E040E823 -:105A10005FEB9FE3883920F0803E30F021968F774E -:105A200087DCE2E3F1E003C083DCEFE5F1E073DF64 -:105A30008B01BE01EC01FB2E6F5771097595771F25 -:105A4000880B990B78DD28E132E741E35FE38FDED5 -:105A5000AF2D9801AE01FF900F911F91CF91DF9173 -:105A600078DC3BCEFA01DC01AA0FBB1F9B01AC0125 -:105A7000BF5728F422273327442750781FC0B75137 -:105A800088F4AB2F0024469537952795011CA395E4 -:105A9000D2F3002069F0220F331F441FB395DAF3CD -:105AA0000DD045CC61307105A0E88A07B94630F4C5 -:105AB0009B01AC016627772788279078309621F0E4 -:105AC00020833183428353830895AA1BBB1B51E17A -:105AD00007C0AA1FBB1FA617B70710F0A61BB70B5E -:105AE000881F991F5A95A9F780959095BC01CD0103 -:105AF000089597FB072E16F4009407D077FD09D080 -:105B00000E94652D07FC05D03EF4909581959F4F2E -:105B10000895709561957F4F0895EE0FFF1F0590D2 -:105B2000F491E02D0994F999FECF92BD81BDF89AC8 -:105B3000992780B50895A8E1B0E042E050E00C94C8 -:105B4000BB2D262FF999FECF92BD81BDF89A019702 -:105B500000B4021639F01FBA20BD0FB6F894FA9AB5 -:105B6000F99A0FBE08950196272F0E94A22D0C943A -:105B7000A12DDC01CB01FC01F999FECF06C0F2BDDD -:105B8000E1BDF89A319600B40D9241505040B8F7FB -:065B90000895F894FFCF18 -:105B9600640007000CFF0000003F64F610841161EA -:105BA600112D11F9100101DF022808140A321E0016 -:105BB60002040507090B0C0E1011131517181A1CF1 -:105BC6001D1F2123242628292B2D2F30323435372B -:105BD600393B1F0F03764F5F6F7F49694379095938 -:105BE60053633149803F5D8B803FF8BF803FCAE1F8 -:105BF600803F73ED803FCAE1803FF8BF803F5D8BF9 -:105C0600803F3149803F0000803FF16D7F3F75EA5C -:105C16007E3F4C827E3F833F7E3F84287E3F833F8C -:105C26007E3F4C827E3F75EA7E3FF16D7F3F0000EE -:105C3600803F3F4D36398F0642060C06D305660572 -:105C46007F059805B105010203040506070809004A -:00000001FF diff --git a/keyboard/planck/keymaps/kyle/compiled.hex b/keyboard/planck/keymaps/kyle/compiled.hex deleted file mode 100644 index 9226d4c19b..0000000000 --- a/keyboard/planck/keymaps/kyle/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C290014001A0008001500FC -:1001E00017001C0018000C00120013002A002B003E -:1001F00004001600070009000A000B000D000E00A5 -:100200000F0033003400E1001D001B000600190040 -:100210000500110010003600370038002800E40007 -:10022000E000E200E30002202C002C00012050003E -:10023000510052004F00290014001A000900130059 -:100240000A000D000F0018001C0033002A002B00CC -:10025000040015001600170007000B00110008002D -:100260000C0012003400E1001D001B000600190004 -:1002700005000E0010003600370038002800C300CB -:10028000E000E200E30002202C002C0001205000DE -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00010048 -:1002B0000320042048120100010001002D002E003F -:1002C0002F00300031000100440045006800690043 -:1002D0006A006B006C006D006E006F000100010091 -:1002E0000100010001000100010001000120AB003C -:1002F000AA00A900AE0035021E021F022002210240 -:100300002202230224022502260227022A000100DB -:100310000320042048120712010001002D022E02C2 -:100320002F023002310201003A003B003C003D0048 -:100330003E003F0040004100420043000100835066 -:100340000100010001000220010001000100AB00DA -:10035000AA00A900AE002803540068006500200030 -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/leo/compiled.hex b/keyboard/planck/keymaps/leo/compiled.hex deleted file mode 100644 index 4bfe15bd09..0000000000 --- a/keyboard/planck/keymaps/leo/compiled.hex +++ /dev/null @@ -1,1454 +0,0 @@ -:100000000C94C5020C9409030C9409030C94090385 -:100010000C9409030C9409030C9409030C94090330 -:100020000C9409030C9409030C94A7140C947915EF -:100030000C94DB220C9409030C9409030C9409031F -:100040000C9409030C946B030C9409030C9409039E -:100050000C9409030C9443230C9409030C94090396 -:100060000C9409030C9409030C9409030C940903E0 -:100070000C9409030C9409030C9409030C940903D0 -:100080000C941C0B0C9409030C9409030C940903A5 -:100090000C9409030C9409030C9409030C940903B0 -:1000A0000C9409030C9409030C940903E615081633 -:1000B000F6160816F6164D167016F616C516D8164C -:1000C000C219C219F119F119301A501AA61BA61B30 -:1000D0005B1AA61B0B1B0B1B721B7B1BA61BA01BFF -:1000E000181B181B181B181B181B181B181B181B78 -:1000F000181B181B181B181B181B181B181B181B68 -:10010000281B361B3D1B441B4E1B07634236B79B07 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3F1A429002F003400330013001C0008 -:1001E00009000A00060015000F002A002B00040079 -:1001F0001200080018000C0007000B001700110087 -:1002000016002800E100370014000D000E001B004E -:10021000050010001A0019001D003600E000E20081 -:10022000E300032002202C002C0001200320E70023 -:10023000E600E400000000000000000000000000F4 -:1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:100290000000000030141E001F002000210022007A -:1002A0002300240025002600270030023A003B00EE -:1002B0003C003D003E003F00400041004200430042 -:1002C000440045000100010001000100010001009F -:1002D0000100010001000100010001000100010016 -:1002E0000100010001000100010001000100010006 -:1002F000010001002E021E021F022002221422020F -:10030000230224022414271427022D0001001F14A5 -:100310003802640064022D1464143200250226029F -:100320002D02380001000100010001000100010060 -:100330000100010025142614010001000100010044 -:1003400001000100010001000100010001000100A5 -:100350000100010001004A0052004D0001000100AF -:1003600001004A0052004D0001004C0001004F0006 -:10037000510050004B0001004B00500051004F0055 -:100380000100010001000100010001004E00010018 -:100390004E000100AA00A9000100010001000100B7 -:1003A0000100010001000100010001000100010045 -:1003B000010001002803540068006500200050007F -:1003C0006C0061006E0063006B0020004B00650054 -:1003D000790062006F0061007200640000002C036D -:1003E0004F007200740068006F006C0069006E00BE -:1003F00065006100720020004B006500790062001A -:100400006F006100720064007300000004030904BF -:1004100009026D00040100A0FA09040000010301B3 -:100420000100092111010001223F00070581030895 -:10043000000A090401000103010200092111010061 -:1004400001224D000705820308000A090402000189 -:100450000300000009211101000122360007058375 -:100460000308000A09040300010300000009211128 -:100470000100012239000705840310000112011058 -:100480000100000008EDFE606001000102000105AE -:10049000010906A101050719E029E71500250195C5 -:1004A0000875018102050819012905950575019155 -:1004B000029501750391010507190029771500259B -:1004C00001957875018102C005010980A1018502AD -:1004D00016010026B7001A01002AB7007510950111 -:1004E0008100C0050C0901A1018503160100269CAD -:1004F000021A01002A9C02751095018100C00501B5 -:100500000902A1010901A100050919012905150028 -:10051000250195057501810295017503810105018C -:10052000093009311581257F950275088106093842 -:100530001581257F950175088106050C0A3802157D -:1005400081257F950175088106C0C005010906A1B6 -:1005500001050719E029E7150025019508750181B6 -:100560000295017508810105081901290595057590 -:100570000191029501750391010507190029FF15E5 -:100580000025FF950675088100C011241FBECFEF1E -:10059000DAE0DEBFCDBF04B603FE24C080911E03A7 -:1005A00090911F03A0912003B09121038730904BBD -:1005B000A740B04BB9F410921E0310921F03109283 -:1005C00020031092210314BE84B7877F84BF88E183 -:1005D0000FB6F89480936000109260000FBEE0E0C8 -:1005E000F8E3099511E0A0E0B1E0E0E1FAE502C02E -:1005F00005900D92A03CB107D9F713E0A0ECB1E053 -:1006000001C01D92AE31B107E1F70E94ED110C94CB -:10061000062D0C9400000895089581E00895089532 -:100620000C940C030C940D030C940F030E94D0281F -:1006300023E030E0281B3109220F2093C4010895E4 -:10064000282F2F9880918000211108C0877F8093E8 -:10065000800010928D0010928C001BC088608093E7 -:100660008000233019F48FEF9FEF0FC083E090E0FC -:10067000821B9109880F991F2FEF3FEFA90102C03C -:10068000569547958A95E2F7CA0190938D0080931D -:100690008C000C9416030E94160384E08093C3011F -:1006A0001092C0010895279A2F988FEF9FEF909393 -:1006B0008700809386008AE08093800089E18093A0 -:1006C00081000E9439280C944B030E9453036E9AB8 -:1006D000769A0C940B031F920F920FB60F9211246F -:1006E0002F933F938F939F93EF93FF93E091C101DB -:1006F000F091C201CF0101969093C2018093C10194 -:100700000090C30102C0F695E7950A94E2F7EF73F3 -:100710008091C001823019F4E03251F404C081307C -:1007200039F4EF3329F480916F008D7F80936F004F -:10073000F0E0E457FE4FE49121E031E0E29FC00198 -:10074000E39F900D11240090C40102C096958795F7 -:100750000A94E2F790938D0080938C00FF91EF91C3 -:100760009F918F913F912F910F900FBE0F901F90EF -:10077000189581E008950C94B90308950C946503CD -:1007800080911502882309F448C08091D10190918D -:10079000D201009779F40E940D239093D2018093A7 -:1007A000D1018091D30190E0009771F48091D40140 -:1007B00090E00AC00E9419232091000130910101AC -:1007C0002817390740F329C00197880F991F880F10 -:1007D000991FFC01EB52FE4F6081718182819381F0 -:1007E0000E94820AE091D30184E0E89FF001112485 -:1007F000EB52FE4F60817181828193814FE050E026 -:100800000E943A0E8091D30190E001966091D4014C -:1008100070E00E94B62C8093D3010C9410031092C8 -:1008200017020C944F0A0895089581E080931702EF -:100830000C941404089508958F929F92AF92BF92E2 -:10084000EF92FF920F931F93CF93DF93CDB7DEB755 -:10085000A3970FB6F894DEBF0FBECDBF7C01FC019D -:1008600000811181C8010E940A21B8010E9421065D -:100870008C01B7010E94BB03882309F4CCC100326C -:10088000F0E51F0741F4F7018281882309F458C07D -:100890000E949E0EC0C10132F0E51F0741F4F7012E -:1008A0008281882309F44CC00E94A70EB4C1023291 -:1008B000F0E51F0751F4F7018281882309F440C055 -:1008C0000E949A0E8111F0CFE3CF0332F0E51F07AB -:1008D00039F4F7018281882399F10E9415049BC1A4 -:1008E0000432F0E51F0739F4F7018281882341F1D2 -:1008F0000E940F0490C10532F0E51F0749F4F7018B -:1009000082818823E9F0809117028111F1CFE5CF30 -:100910000632F0E51F0739F4F7018281882381F060 -:100920000E94AE0E0AC00732F0E51F0749F4F70136 -:100930008281882329F00E94B90E0E941B046BC19A -:1009400080911702811105C0F70182818111CFC00A -:1009500018C1003E110579F4F7018281882309F45A -:100960004DC00E944F0A81E080931602109215023A -:100970001092D40150C1023E110559F4F701828151 -:100980008823E1F10E944F0A10921602109215027C -:1009900042C1033E110591F4F7018281882371F170 -:1009A0000E944F0A1092160281E080931502109265 -:1009B000D3011092D2011092D1012DC1023511053F -:1009C00059F4F7018281882309F425C1809100013F -:1009D000909101010A970DC00135110579F4F701D5 -:1009E0008281882309F417C180910001909101014F -:1009F0000A9690930101809300010DC1409104017A -:100A000083E2EFE1F1E0DE01119601900D928A950B -:100A1000E1F7F701808121E030E02C0F3D1F280F26 -:100A2000311DC9012091020130910301FC01E20F47 -:100A3000F31F6081772767FD7095640F711D88270C -:100A400077FD8095982F0E94D82920E030E040E47F -:100A500051E40E943D294B015C01F701218184E0B2 -:100A600090E0821B9109BC01882777FD8095982F23 -:100A70000E94D8299B01AC01C501B4010E94D52870 -:100A80009B01AC0160E070E080E090E40E944B2BA1 -:100A900020E030E04CED50E40E94E82A4B015C017C -:100AA000F70182818823D1F04FE050E0C501B40105 -:100AB0000E943A0E809116028823A1F08091D40101 -:100AC00024E0829FF0011124EB52FE4F808291823C -:100AD000A282B3828F5F8093D40104C0C501B401A8 -:100AE0000E94820A0F3F110508F02ECF94C080911A -:100AF000D00181111FC0043130E5130709F051C046 -:100B00000E94BD0381E08093D0010E940D23909349 -:100B1000CF018093CE011092C7011092C9011092AB -:100B2000C8011092CB011092CA011092CD0110920F -:100B3000CC0171C08091CE019091CF010E94192308 -:100B4000883C910570F48091C701E82FF0E0EE0F2A -:100B5000FF1FE853FE4F118300838F5F8093C7010F -:100B60005AC0043880E5180721F00538104501F116 -:100B70003AC0F7018281882341F01092C50182E0DA -:100B80001EC0043830E5130759F58091C501811165 -:100B900006C086E20E94661886E20E942E1982E054 -:100BA0001CC00438F0E51F0741F305381045D9F49F -:100BB000F7018281882331F01092C60180E20E9401 -:100BC0007D1929C08091C601811106C087E20E946B -:100BD000661887E20E942E1980E20E9484191BC0C9 -:100BE0000538104529F381E08093C5018093C60143 -:100BF000C701A3960FB6F894DEBF0FBECDBFDF913D -:100C0000CF911F910F91FF90EF90BF90AF909F9069 -:100C10008F900C94120380E0A3960FB6F894DEBF79 -:100C20000FBECDBFDF91CF911F910F91FF90EF903D -:100C3000BF90AF909F908F90089580E090E00895CE -:100C400008959CE0799FF001112490E3899FE00DC5 -:100C5000F11D1124E60FF11DEE0FFF1FEC52FE4FA8 -:100C6000859194910895880F991FFC01E45BFF4FD3 -:100C7000859194910895880F991FFC01E453FE4FCC -:100C80008591949108950F931F93CF93DF93EC0177 -:100C9000811521E39207A0F5C11580E3D80708F07C -:100CA000D7C0C83ED105D8F4C03ED10508F007C270 -:100CB000C83AD10578F4C53AD10508F06AC0C13008 -:100CC000D10509F463C008F4F7C1C430D10508F0B8 -:100CD000F6C1F2C1CB3BD10508F466C0EDC1C11528 -:100CE00090E2D90708F0AFC0C11521E0D20708F0A3 -:100CF000E6C1C03FD10508F4DFC18E0110651FC2F7 -:100D0000C03880E5D80700F5C03790E5D90708F06E -:100D1000A3C0C11520E5D20709F4ACC050F4CE0140 -:100D2000905480319F4008F0C7C1DF708E01106A77 -:100D300006C2C13080E5D80709F4AEC0C43190E5E1 -:100D4000D90708F4AFC0B8C1C33820E5D20709F409 -:100D50008EC050F4C13890E5D90709F482C008F07C -:100D600083C000E011EDEBC1C03181E5D80708F484 -:100D7000A3C1C11597E5D90708F436C1CE01905734 -:100D80008115904108F098C1DF7093C101E010E037 -:100D9000D6C1C53AD10509F494C1C63AD10509F0C6 -:100DA00093C102E810E4CBC1C83AD10509F48FC160 -:100DB000C93AD10509F48EC1CA3AD10509F48DC1E9 -:100DC000CB3AD10509F48CC1CC3AD10509F48BC1D9 -:100DD000CD3AD10509F48AC1C03BD10509F489C1D6 -:100DE000CE3AD10509F488C1CF3AD10509F487C1BB -:100DF000C13BD10509F486C1C23BD10509F485C1C7 -:100E0000C33BD10509F484C1C43BD10509F483C1B6 -:100E1000C53BD10509F482C1C63BD10509F481C1A6 -:100E2000C73BD10509F480C1C83BD10509F47FC196 -:100E3000C93BD10509F47EC1CA3BD10509F47DC186 -:100E400000E014E47CC1CE019F700E943B0678C193 -:100E5000DD278E01106C73C1CF70DD278E01146DFC -:100E60006EC100E010ED6BC100E012ED68C100E062 -:100E700013ED65C10E94111C0E944F0A0E941304C9 -:100E80008FEF94E32CE0815090402040E1F700C0C8 -:100E900000000E94682353C18091F2028160809318 -:100EA000F2024DC10E94C923811102C00E94A523F4 -:100EB0000E94DC2390E090931D0380931C03C230BA -:100EC00080E5D80721F480911C03816086C0C4307E -:100ED00090E5D90721F480911C0382607EC0C63062 -:100EE00020E5D20721F480911C03846076C0C830CD -:100EF00080E5D80719F480911C0327C0CA3090E51B -:100F0000D90721F480911C03806167C0CC3020E5B3 -:100F1000D20721F480911C0380625FC0CE3080E54F -:100F2000D80721F480911C03806457C0C03190E53C -:100F3000D90721F480911C0380684FC0C23120E59D -:100F4000D20729F480911C038460886046C0C330B6 -:100F500080E5D80721F480911C038E7F3EC0C53008 -:100F600090E5D90721F480911C038D7F36C0C730EE -:100F700020E5D20721F480911C038B7F2EC0C9305D -:100F800080E5D80719F480911C0326C0CB3090E58A -:100F9000D90721F480911C038F7E1FC0CD3020E53E -:100FA000D20721F480911C038F7D17C0CF3080E5DC -:100FB000D80721F480911C038F7B0FC0C13190E5CD -:100FC000D90721F480911C038F7707C0C331D04526 -:100FD00031F480911C038B7F877F80931C03809169 -:100FE0001C030E94E023ABC08D2F99278F70992797 -:100FF00081309105D9F49E012370332702C0880FF8 -:10100000991F2A95E2F79C688E0144E0000F111F9A -:101010004A95E1F700271370802B912B53E0CC0FFA -:10102000DD1F5A95E1F7C076DD272FC0823091058C -:1010300031F4DC2FCC278E01016F106A80C0833021 -:10104000910569F4CE018370992701E010E002C098 -:10105000000F111F8A95E2F7C8019C680FC0843009 -:101060009105B9F4CE018370992701E010E002C028 -:10107000000F111F8A95E2F7C8019A6823E0CC0F90 -:10108000DD1F2A95E1F7C07ED7708C010C2B1D2B3C -:1010900056C08530910531F4DC2FCC278E01046FCA -:1010A000106A4DC0069709F04AC0CF71DD27DC2FCA -:1010B000CC278E01106243C000E010E040C08E01DA -:1010C0003EC001E810E43BC003E810E438C002EE83 -:1010D00014E435C009EE14E432C00AEE14E42FC063 -:1010E00005EB14E42CC006EB14E429C007EB14E470 -:1010F00026C00CEC14E423C00DEC14E420C003E87B -:1011000015E41DC00AE815E41AC002E915E417C089 -:1011100004E915E414C001E216E411C003E216E488 -:101120000EC004E216E40BC005E216E408C006E2B5 -:1011300016E405C007E216E402C00AE216E4C8019C -:10114000DF91CF911F910F9108959CE0799FF0015D -:10115000112490E3899FE00DF11D1124E60FF11D8C -:10116000EE0FFF1FEC52FE4F85919491803E91054A -:10117000E0F4803C910558F58133910509F46FC086 -:1011800048F48932910509F463C08A32910509F463 -:101190006DC072C089339105E9F082389105D1F0B4 -:1011A0008533910509F44DC067C0833E910581F1F7 -:1011B00038F4803E9105B9F0823E9105D9F05CC0CB -:1011C000863E910561F1873E9105A1F155C00E94CF -:1011D0003306089520911C0320FD02C021FF4CC05E -:1011E00080EE90E049C080911C0380FFF9CF89E335 -:1011F00090E042C080911C0382FF0EC080911C03CE -:1012000084FF03C080E090E037C083EE90E034C0FC -:1012100080911C0382FFF2CF82EE90E02DC080917E -:101220001C0383FF0BC080911C0384FDEBCF87EE72 -:1012300090E022C080911C0383FFF5CF86EE90E002 -:101240001BC080911C0385FF07C089E290E014C099 -:1012500080911C0385FFF9CF85E390E00DC080915C -:101260001C0386FF07C08AE290E006C080911C0341 -:1012700086FFF9CF81E390E00E94430608950C9425 -:101280001403E82FF0E0E25BFE4F8081E82FEF705F -:10129000F0E082958F7021E030E0A90102C0440F98 -:1012A000551F8A95E2F740A308950F931F93CF939C -:1012B000DF9385B7806885BF85B7806885BFC3E049 -:1012C000D0E001E010E0FE01E25BFE4F8081E82FFC -:1012D000EF70F0E021A182958F70A80102C0440F49 -:1012E000551F8A95E2F7CA01822B81A38C2F0E9499 -:1012F0004109219740F78BE090E061E070E0FC014C -:10130000EE5BFE4F2081E22FEF70F0E042A12295CC -:101310002F70DB0102C0AA0FBB1F2A95E2F79D01C7 -:10132000242B22A3019758F7DF91CF911F910F91A2 -:101330000C94BE03EF92FF920F931F93CF93DF9312 -:1013400000E212E0C3E0EE24E394F12CD5E08C2F10 -:101350000E9441098BE090E040E050E0FC01EE5B30 -:10136000FE4F6081E62FEF70F0E020A130E0629543 -:101370006F7002C0359527956A95E2F720FD09C088 -:101380009701082E02C0220F331F0A94E2F7422B66 -:10139000532B019718F7F801929182918F018417CE -:1013A000950721F051834083D09305018C2F0E9433 -:1013B0004109C15060F68091050187FD2CC0815024 -:1013C000809305018F3F39F08FE99FE00197F1F796 -:1013D00000C0000020C080911E0290911F029093D7 -:1013E00027028093260280911C0290911D02909307 -:1013F00025028093240280911A0290911B029093FF -:1014000023028093220280911802909119029093F6 -:101410002102809320020E94C00381E0DF91CF91DE -:101420001F910F91FF90EF900895E82FF0E0EE0FDD -:10143000FF1FE05EFD4F80819181089508950F9315 -:101440001F93CF9308E212E0C0E0F80192918291DD -:101450008F010E948522C80FF2E000321F07A9F712 -:101460008C2FCF911F910F9108950E94C923811154 -:1014700002C00E94A5230E94EE23809307033E9A98 -:10148000809171008D7F8093710082E08093900045 -:101490008AE18093910081E080932A0208958091EF -:1014A0002A02811102C00E94350A10927A0210921B -:1014B0007902809171008D7F8093710080919000FE -:1014C0008F738093900010923C0210923B02109216 -:1014D00073021092740210927502109276021092AA -:1014E000720210927102E1E5F2E0A1E4B2E0119221 -:1014F0001192119211921D921D9282E0E137F8072C -:10150000B1F70895CF92DF92EF92FF920F931F935E -:10151000CF93DF9320913B02222309F484C06B0117 -:101520007C0180912A02811102C00E94350A01E7E4 -:1015300012E0C7E0D0E0A7019601F80192918291F4 -:10154000729162918F010E943929811131C0FE018F -:10155000EE0FFF1FEE0FFF1FEF5AFD4F108211829B -:1015600012821382DE01AA0FBB1FAF5BBD4F119623 -:101570001C921E92C730D105E9F021964481558115 -:1015800066817781408351836283738314821582DD -:101590001682178212968D919C91139711969C93A7 -:1015A0008E9313961C921E92129734961296E2CF47 -:1015B000219708F68091790290917A02019797FD20 -:1015C00005C090937A028093790204C010927A0247 -:1015D000109279028091790290917A02209177029B -:1015E000309178022817390724F01092780210926F -:1015F0007702892BC1F4809171008D7F80937100F7 -:10160000809190008F7380939000109273021092DB -:101610007402109275021092760210927202109269 -:10162000710210923B02DF91CF911F910F91FF90B9 -:10163000EF90DF90CF9008951F920F920FB60F9208 -:1016400011244F925F926F927F928F929F92AF92EE -:10165000BF92CF92DF92EF92FF922F933F934F93DF -:101660005F936F937F938F939F93AF93BF93CF932A -:10167000DF93EF93FF9380913B02882309F49BC192 -:10168000C0917902D0917A021C161D060CF093C10C -:1016900040902B0250902C0260902D0270902E02F0 -:1016A00020E030E0A901C301B2010E94E42A18162B -:1016B0000CF065C0C130D10509F452C080917702A9 -:1016C00090917802BE010E94B62C7C019093780222 -:1016D0008093770280903D0290903E02A0903F025E -:1016E000B090400220E030E040E85FE3C501B40183 -:1016F0000E94D52860933D0270933E0280933F0282 -:1017000090934002F701EE0FFF1FEE0FFF1FEF5AFD -:10171000FD4FA301920160817181828193810E94BA -:101720003D2920E030E040E05EE30E94E82A9B0192 -:10173000AC01C501B4010E94E42A18168CF4C7015B -:101740000196BE010E94B62C909378028093770296 -:1017500010923D0210923E0210923F0210924002FF -:10176000E0917702F0917802EE0FFF1FEE0FFF1F5E -:10177000EF5AFD4F6081718182819381D0C0C0900A -:101780007302D0907402E0907502F090760220E02F -:1017900030E0A901C701B6010E94392921978823A9 -:1017A00009F4A2C0FE01EE0FFF1FEE0FFF1FEF5A5C -:1017B000FD4F80809180A280B380A5019401C70174 -:1017C000B6010E94392987FF31C0A501940160E06C -:1017D00070E08CED93EC0E943D2920E030E040E485 -:1017E00051E40E943D2920E030E040E05FE30E94A8 -:1017F000E82A9B01AC0160E070E080E090E40E9488 -:101800004B2B9B01AC01C501B4010E94E82A9B014E -:10181000AC01C701B6010E94392987FF07C0A701A3 -:10182000960160E070E08CED93E439C0A50194016D -:10183000C701B6010E94E42A18160CF055C0A50194 -:10184000940160E070E08CED93E40E943D2920E07B -:1018500030E040E451E40E943D2920E030E040E0E7 -:101860005FE30E94E82A9B01AC0160E070E080E049 -:1018700090E40E944B2B9B01AC01C501B4010E9476 -:10188000E82A9B01AC01C701B6010E94E42A1816A0 -:101890005CF5A701960160E070E08CED93EC0E948E -:1018A0003D2920E030E040E451E40E943D2920E061 -:1018B00030E040E05FE30E94E82A9B01AC0160E079 -:1018C00070E080E090E40E944B2B9B01AC01C701CB -:1018D000B6010E94E82A60937302709374028093A9 -:1018E00075029093760213C0FE01EE0FFF1FEE0FFC -:1018F000FF1FEF5AFD4F80819181A281B3818093B8 -:10190000730290937402A0937502B0937602609173 -:101910007302709174028091750290917602209109 -:101920002802309129022F3F4FEF340731F02F5F0B -:101930003F4F30932902209328020E94C40E6B016E -:101940007C0120E034E244EF51E40E94392987FF12 -:1019500008C086EFC82E88E2D82E84EFE82E81E4F6 -:10196000F82E20E030E040E051E4C701B6010E94CB -:10197000E82A9B01AC0160E074E284E79BE40E94EA -:101980003D296B017C010E94AA2970939700609306 -:101990009600209106013091070140910801509175 -:1019A0000901C701B6010E94E82A0E94AA29709382 -:1019B00099006093980080913C02882309F433C118 -:1019C000C0903702D0903802E0903902F0903A028D -:1019D00020E030E0A901C701B6010E94E42A1816F0 -:1019E000D4F580912802909129028F3F2FEF920722 -:1019F00029F001969093290280932802C701B6012D -:101A00000E94C40E20E030E040E051E40E94E82A49 -:101A10009B01AC0160E074E284E79BE40E943D29F5 -:101A20006B017C010E94AA29709397006093960035 -:101A30002091060130910701409108015091090160 -:101A4000C701B6010E94E82A0E94AA297093990052 -:101A50006093980008C01092970010929600109220 -:101A600099001092980060913102709132026F5F7C -:101A70007F4F709332026093310220919600309133 -:101A8000970080E090E0232BF1F0C0919600D09178 -:101A900097000E94D6296B017C01BE0180E090E096 -:101AA0000E94D6299B01AC016091330270913402EF -:101AB00080913502909136020E943D2920E03FEF4F -:101AC0004FE757E410C00E94D6296B017C0120E04B -:101AD00030EE4FEF54E46091330270913402809104 -:101AE0003502909136020E94E82A9B01AC01C701A1 -:101AF000B6010E94E42A87FD96C080912F028F5F75 -:101B000080932F0290E02091030330910403821709 -:101B10009307A0F080910E03882319F010922F02F2 -:101B20000DC0809171008D7F809371008091900035 -:101B30008F738093900010923C027DC080913002A0 -:101B4000C0912F02811128C0C0900803D0900903D2 -:101B5000E0900A03F0900B0320E030E0A901C701F8 -:101B6000B6010E94E42A1816BCF481E0809330028A -:101B700010923702109238021092390210923A02F3 -:101B8000C0923302D0923402E0923502F0923602D3 -:101B9000C150C0932F0243C010923002109229020C -:101BA00010922802E0910503F091060348E0C49FDB -:101BB000E00DF11D112480819181A281B381809378 -:101BC000370290933802A0933902B0933A0220E092 -:101BD00030E040E85EE364817581868197810E94F0 -:101BE000E82A6B017C0180910A01682F70E080E097 -:101BF00090E00E94D62920E030E048EC52E40E94B8 -:101C00003D299B01AC01C701B6010E94E82A6093FF -:101C1000330270933402809335029093360210920F -:101C20003202109231028091070380FD04C01092AD -:101C30003C0210923B02FF91EF91DF91CF91BF9157 -:101C4000AF919F918F917F916F915F914F913F9154 -:101C50002F91FF90EF90DF90CF90BF90AF909F902B -:101C60008F907F906F905F904F900F900FBE0F906E -:101C70001F901895CF92DF92EF92FF92CF93DF9350 -:101C80006B017C01EA0180912A02811102C00E944D -:101C9000350A8091070380FF46C0809179029091B8 -:101CA0007A0208970CF03FC0809171008D7F80937D -:101CB000710080913C0281110E944F0A81E0809363 -:101CC0003B02109229021092280220E030E0A90184 -:101CD000C701B6010E94E42A1816DCF4809179024B -:101CE00090917A02FC01EE0FFF1FEE0FFF1FEF5ADB -:101CF000FD4FC082D182E282F382FC01EE0FFF1F12 -:101D0000EF5BFD4FD183C083019690937A0280935D -:101D100079028091710082608093710080919000BF -:101D2000806880939000DF91CF91FF90EF90DF90DB -:101D3000CF900895809107038170089580910703E3 -:101D40008160809307030E94F2230C941A0480910F -:101D500007038E7F809307030C94F22380917B020C -:101D600090E0019666E070E00E94B62C80937B02C2 -:101D7000089580917B0290E0019766E070E00E94F8 -:101D8000B62C80937B0208958F929F92AF92BF9260 -:101D9000CF92DF92EF92FF920F931F93CF93DF9337 -:101DA0006B017C01C0912802D0912902BE0180E024 -:101DB00090E00E94D6294B015C01A701960160E0EA -:101DC00070E08CE594E40E943D299B01AC01C501C3 -:101DD000B4010E94E82A0E94AA2920917B022330A4 -:101DE00009F473C028F4222351F02130E9F02CC10A -:101DF000243009F4A0C0253009F4E0C025C180E0FA -:101E000090E0A0E0BFE38093060190930701A093C8 -:101E10000801B093090110922B0210922C0210922B -:101E20002D0210922E0210C110922B0210922C0241 -:101E300010922D0210922E026431710540F46A3026 -:101E4000710560F520E030E040E85EE32BC0693CBE -:101E5000710508F0AAC080E090E00E94D62920E039 -:101E600030E040EA51E40E94D42820E030E044E32E -:101E700053E40E943D299B01AC010E94E82A20E026 -:101E800030E040E05EE30E94E82A9B01AC0160E0A4 -:101E900070E080E09EE30E94D42844C020E030E05F -:101EA00040E05FE3C701B6010E94E82A6B017C01B4 -:101EB00080E090E0A0E0BEE38093060190930701EC -:101EC000A0930801B0930901BFC010922B02109299 -:101ED0002C0210922D0210922E024AE0469F900191 -:101EE000479F300D1124C90168EB7BE00E94A22CB2 -:101EF000BC016C5D754077FF03C0719561957109F8 -:101F0000882777FD8095982F0E94D8292EE333ECFF -:101F10004EE259E30E94E82A20E030E040EC5EE324 -:101F20000E94D528609306017093070180930801F1 -:101F30009093090189C010922B0210922C021092EA -:101F40002D0210922E02CE0183709927892BE1F089 -:101F5000BE016170772780E090E00E94D62920E0E2 -:101F600030E040E05EE30E94E82A20E030E040E418 -:101F70005FE30E94D5286093060170930701809368 -:101F80000801909309010CC080E090E0A0E0BFE35D -:101F90008093060190930701A0930801B093090173 -:101FA000C770DD27CD2B09F04FC0109206011092AB -:101FB0000701109208011092090146C010922B02ED -:101FC00010922C0210922D0210922E0200E010E0CE -:101FD00020E03FE3009306011093070120930801DE -:101FE000309309016739710578F180E090E00E9433 -:101FF000D62920E030E047E153E40E94D42820E0D5 -:1020000030E04AE754E40E943D2920E030E048E413 -:1020100052E40E94E82A20E030E040EA51E40E94C5 -:102020001A2A0E94A529660F771F660F771FFB01EA -:10203000EE5AFE4F2081318142815381C701B601A2 -:102040000E94E82A6B017C01C701B601DF91CF91A4 -:102050001F910F91FF90EF90DF90CF90BF90AF90C6 -:102060009F908F90089580918C020895CF93DF9375 -:1020700000D01F92CDB7DEB79C018091130384304E -:1020800019F593E099833B832A839093E9008FEFBE -:102090009091E800815095FD06C095ED9A95F1F775 -:1020A00000008111F5CF8091E80085FF0DC040E070 -:1020B00050E063E070E0CE0101960E94971280919B -:1020C000E8008E778093E8000F900F900F90DF91DB -:1020D000CF910895CF93DF9300D01F92CDB7DEB795 -:1020E00020911303243021F522E029839B838A83E6 -:1020F00083E08093E9008FEF9091E800815095FD97 -:1021000006C095ED9A95F1F700008111F5CF809109 -:10211000E80085FF0DC040E050E063E070E0CE01D4 -:1021200001960E9497128091E8008E778093E800D4 -:102130000F900F900F90DF91CF910895209113038E -:102140002430F1F422E02093E9002FEF3091E800F1 -:10215000215035FD06C035ED3A95F1F7000021110B -:10216000F5CF2091E80025FF0BC040E050E065E08E -:1021700070E00E9497128091E8008E778093E800CB -:102180000895CF93DF93EC0190911303943009F0FD -:1021900046C0809115018823D9F0809116018823CB -:1021A000B9F09093E9008FEF9091E800815095FD90 -:1021B00006C095E19A95F1F700008111F5CF809165 -:1021C000E80085FF2CC040E050E060E170E017C0FF -:1021D00081E08093E9008FEF9091E800815095FDB8 -:1021E00006C095ED9A95F1F700008111F5CF809129 -:1021F000E80085FF14C040E050E068E070E0CE01E8 -:102200000E9497128091E8008E778093E80080E129 -:10221000FE01ACE7B2E001900D928A95E1F7DF9103 -:10222000CF91089580911203811109C00E942C144E -:102230000E9489148091E20084608093E2000895F6 -:10224000109212030895089508950C94D02242E04C -:1022500061EC81E00E94A61342E061EC82E00E9402 -:10226000A61342E061EC83E00E94A61342E161EC18 -:1022700084E00C94A61380911503833009F455C0B3 -:1022800030F4813071F0823009F48EC008958A30C4 -:1022900009F47AC08B3009F460C0893009F09CC021 -:1022A00020C080911403813A09F096C08091E80023 -:1022B000877F8093E8008091180390911903892B00 -:1022C00021F460E18CE792E003C060E080E090E000 -:1022D00070E00E94E2128091E8008B778093E80022 -:1022E000089580911403813209F076C0809118031B -:1022F00090911903009719F0039709F06DC0809130 -:10230000E800877F8093E8008091E80082FD05C0A7 -:10231000809113038111F8CF5FC08091F100809309 -:102320008C028091E8008B7753C080911403813A2E -:1023300009F052C08091180390911903892B09F07C -:102340004BC08091E800877F8093E8008091E8008F -:1023500080FFFCCF8091150136C08091140381323B -:10236000D9F58091180390911903892BA9F58091D3 -:10237000E800877F8093E8000E94DB1380911603BA -:10238000809315010C94111C80911403813221F566 -:102390008091E800877F8093E8000E94DB138091A2 -:1023A000170380938D02089580911403813AA1F45C -:1023B0008091E800877F8093E8008091E80080FFAB -:1023C000FCCF80918D028093F1008091E8008E77A0 -:1023D0008093E8000C94DB13089584B7877F84BF53 -:1023E00088E10FB6F89480936000109260000FBEF1 -:1023F00090E080E80FB6F8948093610090936100BC -:102400000FBE0E947E170E942C140E948914809196 -:10241000E20084608093E20078940E940F170E948B -:1024200080178BE091E00E942A178091130385307A -:1024300069F40E949122809111038823B1F30E94D4 -:10244000BF22882391F30E948112EFCF0E94881748 -:10245000ECCF292F332723303105C9F064F4213024 -:10246000310581F02230310509F043C08DE690E05E -:1024700020E134E042C021323105F1F02232310551 -:1024800041F137C082E190E02DE734E036C0992772 -:102490008130910541F08230910541F0892B49F559 -:1024A000ECE0F4E005C0EEEDF3E002C0E4EBF3E0B5 -:1024B000849190E09F0121C06430D8F4E62FF0E0D1 -:1024C000EE0FFF1FE255FE4F2081318189E090E041 -:1024D00014C0643070F470E0FB01EE0FFF1FEA558A -:1024E000FE4F20813181FB01EE55FE4F808190E04F -:1024F00004C080E090E020E030E0FA0131832083E6 -:10250000089580E189BD82E189BD09B400FEFDCF57 -:102510008091D8008F7D8093D8008091E000826008 -:102520008093E0008091E00081FDFCCF0895CF9280 -:10253000DF92EF92FF920F931F93CF93DF93EC0103 -:102540008B016A010E94FA13811133C0C114D104B6 -:1025500039F0F60180819181081B190BC80FD91F32 -:10256000E12CF12C0115110519F18091E80085FD90 -:1025700016C08091E8008E778093E800C114D104E2 -:1025800049F0F60180819181E80EF91EF182E08226 -:1025900085E00FC00E94FA13882321F30AC08991B5 -:1025A0008093F10001501109FFEFEF1AFF0ADACF13 -:1025B00080E0DF91CF911F910F91FF90EF90DF901E -:1025C000CF90089520911A0330911B0326173707E7 -:1025D00048F06115710539F42091E8002E772093B9 -:1025E000E80001C0B90140E061157105A9F1209131 -:1025F0001303222309F443C0253009F442C020917B -:10260000E80023FD40C02091E80022FD32C0209167 -:10261000E80020FFE9CF4091F3002091F20030E084 -:10262000342BFC01CF016115710559F028303105BB -:1026300040F481918093F100615071092F5F3F4F09 -:10264000F1CF41E02830310509F040E02091E80069 -:102650002E772093E800C8CF4111C9CF0AC08091DE -:102660001303882361F0853061F08091E80083FDD9 -:102670000AC08091E80082FFF2CF80E0089582E0F6 -:10268000089583E0089581E0089520911A03309120 -:102690001B032617370748F06115710539F420919F -:1026A000E8002E772093E80001C0B901FC0120E08A -:1026B0006115710591F180911303882309F440C0DD -:1026C000853009F43FC08091E80083FD3DC08091D2 -:1026D000E80082FD2FC08091E80080FFE9CF2091C3 -:1026E000F3008091F20090E0922B6115710559F092 -:1026F0008830910540F424912093F1003196615087 -:1027000071090196F2CF21E0089709F020E080914D -:10271000E8008E778093E800CBCF2111CCCF0AC0A0 -:1027200080911303882361F0853061F08091E80087 -:1027300083FD0AC08091E80082FFF2CF80E0089517 -:1027400082E0089583E0089581E00895982F9730FE -:1027500058F59093E900981739F07091EC002091AA -:10276000ED005091F00003C0242F762F50E021FFA0 -:1027700019C03091EB003E7F3093EB003091ED00BB -:102780003D7F3093ED003091EB0031603093EB00F2 -:102790007093EC002093ED005093F0002091EE0038 -:1027A00027FF07C09F5FD3CF8F708093E90081E040 -:1027B000089580E008958091140387FF11C08091EF -:1027C000E80082FD05C0809113038111F8CF11C08C -:1027D0008091E8008B770BC080911303882349F028 -:1027E0008091E80080FFF8CF8091E8008E77809399 -:1027F000E80008952091E4003091E50095E64091CD -:10280000EC00842F817040FF22C08091E80080FDA1 -:102810001CC080911303882391F0853091F0809142 -:10282000EB0085FD10C04091E4005091E500421797 -:10283000530729F39A01915011F784E0089582E03B -:10284000089583E0089581E0089580E0089540911F -:10285000E80042FFDECF08950E949A140E94A2145D -:10286000E0EEF0E0808181608083E8EDF0E080813F -:102870008F77808319BCA7EDB0E08C918E7F8C930D -:1028800080818F7E80831092120308950F931F938F -:10289000CF93DF930E949A140E94A214C8EDD0E057 -:1028A00088818F77888388818068888388818F7DFD -:1028B000888319BC1092130310920F031092110316 -:1028C0001092100300EE10E0F80180818B7F80836E -:1028D00088818160888342E060E080E00E94A613E6 -:1028E000E1EEF0E080818E7F8083E2EEF0E0808197 -:1028F00081608083808188608083F80180818E7F01 -:102900008083888180618883DF91CF911F910F91AF -:102910000895E8EDF0E080818F7E8083E7EDF0E0C0 -:1029200080818160808384E082BF81E08093120394 -:102930000C944614E8EDF0E080818E7F8083109245 -:10294000E20008951092DA001092E10008951F92BB -:102950000F920FB60F9211242F933F934F935F93D3 -:102960006F937F938F939F93AF93BF93EF93FF9357 -:102970008091E10082FF0BC08091E20082FF07C0DE -:102980008091E1008B7F8093E1000E940E1780917F -:10299000DA0080FF1FC08091D80080FF1BC08091AB -:1029A000DA008E7F8093DA008091D90080FF0DC01D -:1029B00080E189BD82E189BD09B400FEFDCF81E0DF -:1029C000809313030E94121105C019BC10921303C7 -:1029D0000E9420118091E10080FF19C08091E200E7 -:1029E00080FF15C08091E2008E7F8093E20080918D -:1029F000E20080618093E2008091D8008062809341 -:102A0000D80019BC85E0809313030E9424118091A3 -:102A1000E10084FF30C08091E20084FF2CC080E19F -:102A200089BD82E189BD09B400FEFDCF8091D80047 -:102A30008F7D8093D8008091E1008F7E8093E100AC -:102A40008091E2008F7E8093E2008091E2008160BD -:102A50008093E20080910F03882311F084E007C087 -:102A60008091E30087FD02C081E001C083E0809394 -:102A700013030E9425118091E10083FF29C08091FA -:102A8000E20083FF25C08091E100877F8093E10011 -:102A900082E08093130310920F038091E1008E7FF8 -:102AA0008093E1008091E2008E7F8093E20080912C -:102AB000E20080618093E20042E060E080E00E94FA -:102AC000A6138091F00088608093F0000E9423118B -:102AD000FF91EF91BF91AF919F918F917F916F91F6 -:102AE0005F914F913F912F910F900FBE0F901F90CC -:102AF00018951F920F920FB60F9211242F933F93A8 -:102B00004F935F936F937F938F939F93AF93BF93F5 -:102B1000CF93DF93EF93FF93C091E900CF70809143 -:102B2000EC00D82FD17080FDD0E81092E9008091A0 -:102B3000F000877F8093F00078940E94BD1510927A -:102B4000E9008091F00088608093F000CD2BCF7079 -:102B5000C093E900FF91EF91DF91CF91BF91AF91C9 -:102B60009F918F917F916F915F914F913F912F91A5 -:102B70000F900FBE0F901F9018951F93CF93DF9368 -:102B8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA4 -:102B9000E4E1F3E088E08E0F9091F10091938E13C1 -:102BA000FBCF0E943B118091E80083FF1FC1809101 -:102BB000140390911503492F50E04A30510508F055 -:102BC00015C1FA01EA5AFF4F0C94CA2C803881F0E3 -:102BD000823809F00BC1809118038F708093E9004F -:102BE0008091EB0085FB882780F91092E90006C0F0 -:102BF0008091100390911103911182609091E800EF -:102C0000977F9093E8008093F1001092F100C8C084 -:102C1000282F2D7F09F0EAC0882319F0823061F057 -:102C2000E5C080911603813009F0E0C0933009F0CF -:102C300080E0809311032BC080911603811127C07F -:102C4000809118038F7009F4D1C08093E90020911E -:102C5000EB0020FF1CC0933021F48091EB008062D8 -:102C600014C09091EB0090619093EB0021E030E074 -:102C7000A90102C0440F551F8A95E2F74093EA006C -:102C80001092EA008091EB0088608093EB00109234 -:102C9000E9008091E800877F86C08111A7C010916C -:102CA00016031F778091E3008078812B8093E300E7 -:102CB0008091E800877F8093E8000E94DB13809179 -:102CC000E80080FFFCCF8091E30080688093E30000 -:102CD000111102C082E001C083E08093130386C01B -:102CE0008058823008F082C08091160390911703BB -:102CF0008C3D53E0950779F583E08A838AE28983E6 -:102D00004FB7F894DE01139620E03EE051E2E32F46 -:102D1000F0E050935700E49120FF03C0E295EF707C -:102D20003F5FEF708E2F90E0EA3010F0C79601C041 -:102D3000C0968D939D932F5F243149F74FBF8091AB -:102D4000E800877F8093E8006AE270E0CE01019698 -:102D50000E94E21214C0AE014F5F5F4F60911803F2 -:102D60000E942912BC01009709F440C09091E8002C -:102D7000977F9093E80089819A810E944513809102 -:102D8000E8008B778093E80031C0803879F5809136 -:102D9000E800877F8093E80080910F038093F10023 -:102DA0008091E8008E778093E8000E94DB131EC0BC -:102DB00081111CC0909116039230C0F48091E800FC -:102DC000877F8093E80090930F030E94DB1380912C -:102DD0000F03811106C08091E30087FD02C081E0EE -:102DE00001C084E0809313030E9427118091E800C2 -:102DF00083FF0AC08091E800877F8093E80080917C -:102E0000EB0080628093EB00AA960FB6F894DEBFC9 -:102E10000FBECDBFDF91CF911F9108950895CF933D -:102E2000809113038823A1F0C091E900CF709091A5 -:102E3000EC00892F817090FD80E8C82B1092E9008A -:102E40008091E80083FD0E94BD15CF70C093E9001A -:102E5000CF91089590939302809392020895E09108 -:102E60009202F0919302309721F00190F081E02DD1 -:102E7000099480E00895E0919202F09193023097D6 -:102E800021F00280F381E02D09940895E0919202EF -:102E9000F0919302309721F00480F581E02D0994A0 -:102EA000089520919002309191028217930771F05A -:102EB0009093910280939002E0919202F09193029C -:102EC000309721F00680F781E02D09940895209134 -:102ED0008E0230918F028217930771F090938F02C8 -:102EE00080938E02E0919202F0919302309721F04C -:102EF0000084F185E02D0994089508950C947D17C0 -:102F00000E9404230E9455090E948A230C943928A8 -:102F10005F926F927F928F929F92AF92BF92CF9269 -:102F2000DF92EF92FF920F931F93CF93DF9300D026 -:102F300000D01F92CDB7DEB70E949A099DE9C92E35 -:102F400092E0D92E03E010E0AA24A394B12C502ED5 -:102F5000802F0E94150A4C01F601729062906F0159 -:102F60006826792661147104A1F40150110978F7DB -:102F70008FEF89838A831B820E940D238160782FC3 -:102F80009D838C8349815A816B818D810E94381881 -:102F900038C08091F20281FD0E941E0A2BE030E0D1 -:102FA0007501022E02C0EE0CFF1C0A94E2F7C70165 -:102FB00086219721892B09F129835A828E209F200F -:102FC00091E0892809F490E09B830E940D238160A1 -:102FD000782F9D838C8349815A816B818D810E94DA -:102FE0003818000F111FF801EB56FD4F80819181B9 -:102FF000E826F926F182E08204C02150310980F6EA -:10300000B4CF0E947125109194020E942F171817B7 -:10301000D1F00E942F17809394020F900F900F9081 -:103020000F900F90DF91CF911F910F91FF90EF9034 -:10303000DF90CF90BF90AF909F908F907F906F90D8 -:103040005F900C943F090F900F900F900F900F908E -:10305000DF91CF911F910F91FF90EF90DF90CF9074 -:10306000BF90AF909F908F907F906F905F900895EA -:10307000CF93DF93CDB7DEB72B970FB6F894DEBFB3 -:103080000FBECDBF4F83588769877A878B87DE0154 -:10309000119686E0FD0111928A95E9F785E0FE011F -:1030A000379601900D928A95E1F749815A816B819B -:1030B0007C818D819E810E94AF1E2B960FB6F89465 -:1030C000DEBF0FBECDBFDF91CF910895CF93882390 -:1030D00009F4C2C0C82F823859F40E942F1781FD0D -:1030E000BBC089E30E9489210E94562289E30CC05B -:1030F000833879F40E942F1780FDAEC083E50E94CB -:1031000089210E94562283E50E94CB21CF910C9405 -:103110005622843859F40E942F1782FD9DC087E4FF -:103120000E9489210E94562287E4EECF8CEF8C0FFB -:10313000813A48F48C2F0E94A12781118DC08C2FD9 -:103140000E948921E3CF80E28C0F883048F4C77059 -:1031500081E001C0880FCA95EAF70E940F22D6CFFE -:103160008BE58C0F833078F4C53A29F0C63A31F0FC -:1031700083E890E005C081E890E002C082E890E03A -:10318000CF910C94511788E58C0F833108F064C0FF -:10319000C83A39F1C93A41F1CA3A49F1CB3A51F149 -:1031A000CC3A59F1CD3A61F1C03B69F1CE3A71F1B7 -:1031B000CF3A79F1C13B81F1C23B89F1C33B91F137 -:1031C000C43B99F1C53BA1F1C63BA9F1C73BB1F1A5 -:1031D000C83BB9F1C93BC1F1CA3BC9F180E090E0FD -:1031E00038C082EE90E035C089EE90E032C08AEEC1 -:1031F00090E02FC085EB90E02CC086EB90E029C0DA -:1032000087EB90E026C08CEC90E023C08DEC90E042 -:1032100020C083E891E01DC08AE891E01AC082E9ED -:1032200091E017C084E991E014C081E292E011C0FE -:1032300083E292E00EC084E292E00BC085E292E06D -:1032400008C086E292E005C087E292E002C08AE20E -:1032500092E0CF910C946717CF910895882309F4D9 -:103260004BC0823859F40E942F1781FF45C089E373 -:103270000E9489210E94562289E30CC0833871F490 -:103280000E942F1780FF38C083E50E9489210E9489 -:10329000562283E50E94CB210C945622843859F49F -:1032A0000E942F1782FF28C087E40E9489210E9474 -:1032B000562287E4EFCF9CEF980F913A58F390E2B3 -:1032C000980F983050F4877091E001C0990F8A955B -:1032D000EAF7892F0E941522DFCF9BE5980F9330E4 -:1032E00020F480E090E00C945117885A833120F448 -:1032F00080E090E00C9467170895882321F00E94E5 -:103300000F220C9456220895882321F00E94152242 -:103310000C94562208957F928F929F92AF92BF9203 -:10332000CF92DF92EF92FF920F931F93CF93DF9391 -:103330001F92CDB7DEB77C01C62E772EFC0105812A -:1033400002950F70128111110E942C220E9482217D -:10335000882379F0112369F080E28C0D883048F0E1 -:1033600082E00E946B210E94822191E0D82ED92612 -:1033700001C0D12CE72DE295EF70F0E0E05AFF4F4D -:103380000C94CA2C872D807F072D0F70882311F095 -:103390000295007F112389F0002309F499C180E28E -:1033A0008C0D883020F4802F0E940F2203C0802FC4 -:1033B0000E941F220E9456228BC18C2D0E942E1922 -:1033C000002309F4C3C180E28C0D883020F4802FE3 -:1033D0000E94152203C0802F0E9425220E9456229F -:1033E000B5C1872D807F972D9F70803211F4892F72 -:1033F00003C0892F8295807FCC2021F0F1E0CF1689 -:10340000A1F01DC0112339F0002319F1013009F595 -:103410000E943F229BC1002319F0013009F496C19C -:1034200089830E944222898110C1112321F0063034 -:1034300008F08CC10EC0053008F088C106C1112308 -:1034400059F0002331F0F701958190FF41C19F7041 -:1034500095830E947D197AC1002309F4F6C03EC10C -:10346000872D86958695837090E0009719F00197D7 -:1034700061F06CC1112321F08C2D972D937002C047 -:1034800080E090E00E94511761C1112321F08C2D42 -:10349000972D937002C080E090E00E94671756C19C -:1034A0008C2D112319F00E94792402C00E94E1247E -:1034B0000E9466254BC1872D837009F052C01111FF -:1034C00045C18C2D829586958770880F880F9C2D1D -:1034D0009F70892E912CA12CB12C082E04C0880C31 -:1034E000991CAA1CBB1C0A94D2F7C4FE14C00FE09E -:1034F00010E020E030E0B901A80104C0440F551FDE -:10350000661F771F8A95D2F7CB01BA016095709537 -:103510008095909503C060E070E0CB01272D269543 -:103520002695237030E02230310569F023303105D3 -:1035300089F0682979298A299B292130310571F080 -:103540000E94F71F03C1682979298A299B290E94B3 -:103550001320FCC00E94F71FC501B4010E94DB1FAD -:10356000F5C0112319F0872D817001C0869588233D -:1035700009F4ECC08C2D829586958770880F880F92 -:103580009C2D9F70892E912CA12CB12C082E04C04B -:10359000880C991CAA1CBB1C0A94D2F7C4FE14C048 -:1035A0000FE010E020E030E0B901A80104C0440FB2 -:1035B000551F661F771F8A95D2F7CB01BA01609518 -:1035C00070958095909503C060E070E0CB01272D49 -:1035D000269526952370422F50E04230510569F020 -:1035E0004330510589F0682979298A299B2941307E -:1035F000510571F00E94D120A9C0682979298A2932 -:103600009B290E94ED20A2C00E94D120C501B401D7 -:103610000E94B5209BC08C2D90E0FC01E05EF1097A -:10362000E531F10508F050C0E059FF4F0C94CA2C69 -:103630000C2D0F70872D8F71112321F00E944E20C9 -:10364000802F07CF0E946F20802F0E9484197EC098 -:10365000112341F0053008F079C0872D8F710E9449 -:10366000942074C0063008F071C0F7CF112339F0F0 -:10367000872D8F710E944E2069C01123C9F3872DB9 -:103680008F710E946F2062C0112329F0872D8F71E6 -:103690000E9439205BC00E942F2058C0112351F096 -:1036A000172D1F71812F0E944E2063E0812F0E94F1 -:1036B00062214CC081E00E946B21023008F446C0B8 -:1036C00082E00E946B2142C0112331F0002381F27D -:1036D0008C2D0E9466183AC0002389F28C2D0E941E -:1036E0002E1934C0472D4F706C2DC7010E941D0646 -:1036F0000E94531F2BC0111129C0472D4F7050E05D -:1037000042305105B9F04CF44115510581F041307A -:103710005105E1F40E94612819C04330510569F058 -:103720004430510599F48C2D0E94B3280FC00E949B -:103730004A280CC00E947D2809C00E94902806C01B -:10374000472D4F706C2DC7010E942006DD20F9F037 -:103750000E945E2180FD1BC0F70112820E94582149 -:103760000E944E20C7010E94D61B0E9458210F9034 -:10377000DF91CF911F910F91FF90EF90DF90CF904D -:10378000BF90AF909F908F907F900C946F200F9080 -:10379000DF91CF911F910F91FF90EF90DF90CF902D -:1037A000BF90AF909F908F907F9008950F931F933D -:1037B000CF93DF93EC01888199812B813C81232B6E -:1037C000B9F09F3F11F48F3F99F0CE010E941C0485 -:1037D000882371F0688179818A810E9454218C014B -:1037E0000E9409210E94D01FB801CE010E948B19AE -:1037F000DF91CF911F910F9108950E942C220E947A -:103800003C220E9401220E9456220E9417260E94FA -:10381000662580E090E00E94511780E090E00C94D3 -:1038200067170E941C220C94FD1B0E944921292F1E -:1038300022952F7030E02C3031054CF42A303105C0 -:103840006CF42250310922303105A8F407C02C3025 -:10385000310569F02F30310551F00DC0803F69F01E -:1038600018F4803E40F409C0843F29F406C093FB5D -:10387000882780F9089580E0089581E00895CF9326 -:10388000DF9300D000D01F92CDB7DEB70F900F901E -:103890000F900F900F90DF91CF910895CF93DF930A -:1038A00000D000D000D0CDB7DEB726960FB6F89482 -:1038B000DEBF0FBECDBFDF91CF9108951F93CF9391 -:1038C000DF93C0919D0216E080919E02C81799F087 -:1038D000D0E01C9FF0011D9FF00D1124E156FD4F1B -:1038E0004081518162817381848195810E944E1C47 -:1038F0002196C770E9CFDF91CF911F910895409134 -:10390000CF025091D0026091D1027091D202809189 -:10391000D3029091D4020C944E1C8091D4028295D3 -:103920008F7009F054C08091D102882309F44FC0F0 -:1039300080919D02A0919E026091CF027091D00271 -:103940004091D2025091D302B6E08A1709F43FC0E9 -:1039500090E041155105C1F17F3F11F46F3FA1F196 -:10396000B89FF001B99FF00D1124E156FD4F218160 -:1039700072132AC02081621327C02281211124C022 -:10398000238134812417350710F421503109241B79 -:10399000350B283C3105C0F42091D4022F702061F2 -:1039A0002093D40226E0289FF001299FF00D1124D6 -:1039B000EC55FD4F80818F70806180838FEC92E0A9 -:1039C0000E94D61B0C945E1C01968770BECF089592 -:1039D000CF92DF92EF92FF920F931F93CF93DF93DB -:1039E000CDB7DEB762970FB6F894DEBF0FBECDBF7E -:1039F0008C0185E0F801DE011D9601900D928A95FB -:103A0000E1F7D8014C9111965C91119712966C9147 -:103A100012971396CD90DC9014973091CF0270914D -:103A2000D0028091D2029091D302009709F46BC129 -:103A30007F3F19F43F3F09F466C1E090D102EE20C8 -:103A400009F4C0C02091D402C816D90628F0F601A6 -:103A5000E81BF90BCF0104C0809590958C0D9D1D3E -:103A6000FF24F394883C910578F0F12C207F09F035 -:103A7000C6C07C2DD98AC88A89890E943F1C8FECD8 -:103A800092E00E94D61BB1C0822F807F09F046C011 -:103A9000751314C0341312C0611110C02F7020614F -:103AA0002093D4020E947F1C8FEC92E00E94D61BD0 -:103AB0008091D402D80115968C932EC0CD2819F18F -:103AC0005F3F11F44F3FF9F0F62E61111CC0809159 -:103AD0009D0220919E0236E0821709F45AC090E0C0 -:103AE000389FF001399FF00D1124E156FD4F71818F -:103AF000571306C07081471303C07281711103C050 -:103B000001968770E9CFF62E662309F418C18091DB -:103B1000D40281608093D402F12C11C1751308C0C6 -:103B2000341306C0611104C08091D402D801C3C00F -:103B30004D875E878D859E856A8B0E94151C6A89DC -:103B40008823E1F16623D1F12091D402822F82955E -:103B50008F7090E0029774F08091CF029091D00224 -:103B600098878F831986DB86CA862C87CE010796B5 -:103B70000E94D61B86E0F801AFECB2E001900D92F6 -:103B80008A95E1F70E948D1C0E947F1CFF24F3940C -:103B9000D6C04D875E878D859E850E944921292F3D -:103BA00022952F7030E0223031050CF0BCC09F70A0 -:103BB00009F0B6C0805E883008F4C1C0C8010E9418 -:103BC000D61BE4CFC816D90608F453C0F601E81B8B -:103BD000F90BCF01883C910508F450C0F12C7C2DE5 -:103BE000D98AC88A89890E943F1CEFECF2E086E0FE -:103BF000DF011D928A95E9F70E947F1CA0C0751312 -:103C000014C0341312C0611110C08091D402F801A5 -:103C10008583C8010E94D61B86E0EFECF2E0DF014D -:103C20001D928A95E9F7FE2C8AC04D875E878D85A7 -:103C30009E856A8B0E94151C6A89882309F4BECF71 -:103C4000662309F4BBCF2091D402822F82958F7016 -:103C500090E002970CF48ECF8091CF029091D00229 -:103C60009A8389831B82DD82CC822E83CE010196CA -:103C70007FCF809590958C0D9D1DACCFF62E662341 -:103C800009F49CCF75132EC034132CC02091D4029C -:103C900020FD1FC0822F82958F70D9F0D801159614 -:103CA0002C9315978F3049F08F5F982F9295907FC6 -:103CB000822F8F70892B15968C93C8010E94D61B7A -:103CC00086E0F801AFECB2E001900D928A95E1F741 -:103CD00093CF86E0F801AFECB2E001900D928A95A7 -:103CE000E1F72DC04D875E878D859E850E94151C4E -:103CF000811140CF8091D40281608093D402C801A9 -:103D00000E94D61B1CC0662309F458CF4D875E87DE -:103D10008D859E850E94151C882309F44FCF2ACFDC -:103D2000811148CF0CC0243031050CF047CF9F7073 -:103D300009F440CFF8019581907F09F03BCF8F2D9A -:103D400062960FB6F894DEBF0FBECDBFDF91CF9164 -:103D50001F910F91FF90EF90DF90CF9008951F93E8 -:103D6000CF93DF93CDB7DEB72C970FB6F894DEBFB5 -:103D70000FBECDBF4F83588769877A878B879C8713 -:103D8000CE0107960E94E81C882369F08F819885F0 -:103D90002A853B85232BF1F19F3F09F063C08F3FBC -:103DA00009F060C037C086E0FE013796DE0111964B -:103DB00001900D928A95E1F76F817885EA85FB8500 -:103DC000309741F17F3F11F46F3F21F120919E0226 -:103DD00030E0C90101968770992740919D0250E01B -:103DE0008417950709F447C069837A83FD83EC83C0 -:103DF00096E0929FD001939FB00D1124A156BD4F24 -:103E0000FE01319601900D929A95E1F780939E0202 -:103E10000E945E1C16E080919D0290919E0289177F -:103E2000C1F1189FC001112481569D4F0E94E81CCA -:103E3000882379F1E0919D021E9FF0011124E15643 -:103E4000FD4F4081518162817381848195810E94FF -:103E50004E1C80919D0290E0019687709927809377 -:103E60009D02D9CF4F81588569857A858B859C8540 -:103E70000E944E1CCFCF0E94111C10929E021092E5 -:103E80009D02EFECF2E086E0DF011D928A95E9F7F2 -:103E9000C1CF2C960FB6F894DEBF0FBECDBFDF9119 -:103EA000CF911F910895EF92FF920F931F93CF939D -:103EB000DF938C01009709F46CC0F12CEE24E3949D -:103EC000E8012196F8018491843740F4843008F0A9 -:103ED00051C0813081F0823019F15BC0853709F41F -:103EE00044C0A8F19CE7980F903708F052C08F7734 -:103EF0000E942E1941C00E5F1F4FFE01C49180E247 -:103F00008C0F883048F4C7708E2D01C0880FCA9579 -:103F1000EAF70E942F2214C08C2F0E9466182DC031 -:103F20000E5F1F4FFE01C49180E28C0F883058F461 -:103F3000C7708E2D01C0880FCA95EAF70E943522FE -:103F40000E9456221AC08C2F0E942E1916C00E5F96 -:103F50001F4FFE01C491CC2381F08FE99FE00197B0 -:103F6000F1F700C00000C150F6CF0E5F1F4FFE01F9 -:103F7000F49003C00E9466188E018F2D882309F4E7 -:103F80009FCFEFE9FFE03197F1F700C000008150CB -:103F9000F5CFDF91CF911F910F91FF90EF90089592 -:103FA00008956093D9027093DA028093DB029093B4 -:103FB000DC020C94FD1B0F931F930091D90210910A -:103FC000DA022091DB023091DC02DC01CB01802B94 -:103FD000912BA22BB32B8093D9029093DA02A0935A -:103FE000DB02B093DC021F910F910C94FD1B0F9329 -:103FF0001F930091D9021091DA022091DB023091D7 -:10400000DC02DC01CB0180239123A223B323809324 -:10401000D9029093DA02A093DB02B093DC021F91E5 -:104020000F910C94FD1B0F931F930091D9021091D7 -:10403000DA022091DB023091DC02DC01CB01802727 -:104040009127A227B3278093D9029093DA02A093F5 -:10405000DB02B093DC021F910F910C94FD1B1092B8 -:10406000D5021092D6021092D7021092D8020C9468 -:10407000FD1B41E050E060E070E004C0440F551FBC -:10408000661F771F8A95D2F74093D5025093D602C8 -:104090006093D7027093D8020C94FD1B41E050E06E -:1040A00060E070E004C0440F551F661F771F8A95BB -:1040B000D2F78091D5029091D602A091D702B0910B -:1040C000D802482B592B6A2B7B2B4093D502509357 -:1040D000D6026093D7027093D8020C94FD1B41E086 -:1040E00050E060E070E004C0440F551F661F771F6A -:1040F0008A95D2F740955095609570958091D5023C -:104100009091D602A091D702B091D80248235923AA -:104110006A237B234093D5025093D6026093D70243 -:104120007093D8020C94FD1B41E050E060E070E019 -:1041300004C0440F551F661F771F8A95D2F78091E0 -:10414000D5029091D602A091D702B091D80248270B -:1041500059276A277B274093D5025093D602609354 -:10416000D7027093D8020C94FD1B0F931F930091FC -:10417000D5021091D6022091D7023091D802DC01ED -:10418000CB01802B912BA22BB32B8093D502909344 -:10419000D602A093D702B093D8021F910F910C942E -:1041A000FD1B0F931F930091D5021091D602209111 -:1041B000D7023091D802DC01CB0180239123A223C6 -:1041C000B3238093D5029093D602A093D702B093E5 -:1041D000D8021F910F910C94FD1B0F931F93009118 -:1041E000D5021091D6022091D7023091D802DC017D -:1041F000CB0180279127A227B3278093D5029093E4 -:10420000D602A093D702B093D8021F910F910C94BD -:10421000FD1B0895CF92DF92EF92FF920F931F93B1 -:10422000CF93DF938C01C090D902D090DA02E09056 -:10423000DB02F090DC028091D5029091D602A09131 -:10424000D702B091D802C82AD92AEA2AFB2ACFE19C -:10425000D0E0D701C6010C2E04C0B695A79597955E -:1042600087950A94D2F780FF06C0B8018C2F0E9470 -:10427000A508019721F4219760F780E001C08C2FF9 -:10428000DF91CF911F910F91FF90EF90DF90CF9032 -:104290000895CF93DF93EC010E940A21BE010E9492 -:1042A000A508DF91CF910895CB010E94492108957F -:1042B0008091DD0285958595859508958091DD0233 -:1042C0008770089598E0899F90011124262B2093F0 -:1042D000DD020C944E202091DD0280958223809394 -:1042E000DD02982F977069F430E0482F552747FD7D -:1042F00050952417350729F08595859585950C945B -:104300006F2008959091DD02977081E009F480E0BC -:10431000089590911501992321F090911601911122 -:1043200009C02091170130911801F90132969FEFD1 -:1043300040E01FC0982F9695969596959F3050F522 -:10434000E0911701F0911801E90FF11D877021E04C -:1043500030E0A90102C0440F551F8A95E2F7CA0157 -:104360009181892B818308959F3F39F04F5F4E30B3 -:1043700041F051915813F8CF0DC05111F7CF942F40 -:10438000F5CF9F3F39F0F901E90FF11D97FDFA953F -:1043900082830895089590911501992321F09091B9 -:1043A0001601911109C02091170130911801F901EE -:1043B0003296205F3F4F1FC0982F96959695969501 -:1043C0009F30F0F4E0911701F0911801E90FF11D11 -:1043D000877021E030E0A90102C0440F551F8A9583 -:1043E000E2F7CA01809591818923818308953196EE -:1043F000E217F30729F090819813F9CF1082F7CFD5 -:10440000089581E090E0E0911701F0911801E80F24 -:10441000F91F1082019680319105A9F708959091B6 -:10442000F102892B8093F102089580959091F10219 -:1044300089238093F10208951092F10208959091DA -:10444000F002892B8093F002089580959091F002FC -:1044500089238093F00208951092F00208959091BC -:10446000EF02892B8093EF02089580959091EF02DF -:1044700089238093EF0208951092EF0208958093AC -:10448000DE0208951092DE02089580911701909146 -:104490001801FC0131969C01205F3F4F80E0919113 -:1044A00091118F5FE217F307D1F70895E09117019B -:1044B000F09118018091F1028083E0911701F09151 -:1044C000180190818091F002892B8083E09117017F -:1044D000F091180190818091EF02892B8083809167 -:1044E000DE02882361F0E0911701F09118019081BC -:1044F000892B80830E94452281111092DE028091D7 -:104500001701909118010C943B1720E0009739F0A7 -:10451000AC0141505109842395232F5FF7CF822F9F -:10452000089580911303843039F11092F30220E44E -:1045300088E190E00FB6F894A895809360000FBED4 -:104540002093600080E00E94200380E00E943F09E9 -:1045500083B7817F846083BF83B7816083BF789492 -:10456000889583B78E7F83BF88E10FB6F8948093D8 -:104570006000109260000FBE08950895089580E0D5 -:104580000E9420030E94BD220E949A090E94BE221E -:104590000E941F0A91E0811101C090E0892F0895C7 -:1045A0000E94111C80E00E9420030E9439280E9472 -:1045B0002F170C943F091F920F920FB60F921124E0 -:1045C0008F939F93AF93BF938091F302811113C098 -:1045D0008091F4029091F502A091F602B091F70259 -:1045E0004196A11DB11D8093F4029093F502A09312 -:1045F000F602B093F702BF91AF919F918F910F9008 -:104600000FBE0F901F90189582E084BD93E095BD7A -:104610009AEF97BD80936E0008952FB7F89480911C -:10462000F4029091F502A091F602B091F7022FBF2B -:104630000895CF92DF92EF92FF920F931F932FB7BF -:10464000F8944091F4025091F5026091F602709155 -:10465000F7022FBF6A017B01EE24FF248C0120E0CA -:1046600030E0C016D106E206F30610F441505109BD -:104670009A01281B390BC9011F910F91FF90EF90F0 -:10468000DF90CF9008951F920F920FB60F921124D2 -:104690008F939F93AF93BF938091F4029091F50213 -:1046A000A091F602B091F7020196A11DB11D809371 -:1046B000F4029093F502A093F602B093F702BF9133 -:1046C000AF919F918F910F900FBE0F901F901895F3 -:1046D0000E942C14F8942FEF87EA91E62150804035 -:1046E0009040E1F700C0000087E090EBDC01809390 -:1046F0001E0390931F03A0932003B09321039CE01B -:1047000088E10FB6F894A895809360000FBE90934F -:104710006000FFCF0E94C923811102C00E94A5231F -:104720000E94D4238093F2020E94DC2380931C0316 -:1047300087FB882780F9809316010E94D823682F71 -:1047400070E080E090E00C94D11F6DEE7EEF80E091 -:1047500090E00E94F02C60E082E090E00E94DE2C6D -:1047600060E083E090E00E94DE2C60E084E090E076 -:104770000E94DE2C60E085E090E00E94DE2C60E08C -:1047800086E090E00E94DE2C6FEF87E090E00C94D2 -:10479000DE2C80E090E00E94D82C21E08D3E9E4FE0 -:1047A00009F020E0822F089582E090E00C94D02C54 -:1047B00083E090E00C94D02C84E090E00C94D02C1A -:1047C000682F84E090E00C94DE2C86E090E00C945E -:1047D000D02C682F86E090E00C94DE2C87E090E0EF -:1047E0000C94D02C682F87E090E00C94DE2C809104 -:1047F000FA0280FF0BC060911C0185E0689FB00148 -:10480000112475956795759567952BC081FF09C033 -:1048100060911C0185E0689FB00111247595679532 -:1048200020C082FF07C060911C0185E0689FB00135 -:10483000112417C09091FB029923D1F060911B01C4 -:10484000961788F720911C0185E0289F900111247C -:10485000929FA001939F500D112470E0CA010E9405 -:10486000B62C6038710540F46115710539F002C04D -:1048700065E070E0862F08958FE7089581E0089540 -:104880008091FA0280FF08C060911A0170E075956E -:1048900067957595679521C081FF06C060911A01E3 -:1048A00070E07595679519C082FF04C060911A0188 -:1048B00070E010C09091FB029923C1F06091190142 -:1048C0009617A0F780911A01899FC001112470E00A -:1048D0000E94B62C6038710528F46115710521F02D -:1048E000862F08958FE7089581E0089561E070E0D4 -:1048F000F4CF803F21F40E94F723819504C0813FCB -:1049000029F40E94F7238093FE020895823F21F448 -:104910000E94F723819504C0833F29F40E94F72366 -:104920008093FD020895893F19F40E94402405C038 -:104930008A3F31F40E94402481958093FF020895BC -:104940008B3F21F40E944024819504C08C3F29F4C0 -:104950000E944024809300030895843F21F48091B5 -:10496000FC02816017C0853F21F48091FC028260C7 -:1049700011C0863F21F48091FC0284600BC0873F08 -:1049800021F48091FC02886005C0883F31F4809159 -:10499000FC0280618093FC0208958D3F21F4809198 -:1049A000FA0281600BC08E3F21F48091FA0282608E -:1049B00005C08F3F29F48091FA0284608093FA0247 -:1049C0000895803F39F48091FE0287FF6CC01092F9 -:1049D000FE0269C0813F29F48091FE021816BCF3E3 -:1049E00062C09091FD02823F29F497FF5CC0109253 -:1049F000FD0259C0833F19F41916CCF354C0893F06 -:104A000041F48091FF0218160CF04DC01092FF0285 -:104A10004AC08A3F29F48091FF0287FF44C0F6CF45 -:104A20008B3F39F48091000387FF3DC01092000353 -:104A30003AC08C3F29F4809100031816BCF333C0B0 -:104A4000843F21F48091FC028E7F17C0853F21F4C2 -:104A50008091FC028D7F11C0863F21F48091FC0281 -:104A60008B7F0BC0873F21F48091FC02877F05C0BC -:104A7000883F31F48091FC028F7E8093FC0213C04A -:104A80008D3F21F48091FA028E7F0BC08E3F21F47E -:104A90008091FA028D7F05C08F3F29F48091FA0240 -:104AA0008B7F8093FA028091FD0281110EC080916C -:104AB000FE0281110AC08091FF02811106C080911F -:104AC0000003811102C01092FB0208958CEF92E066 -:104AD0000E9446170E940D239093F9028093F802DA -:104AE00008951F93CF93DF938091F8029091F9027C -:104AF0000E941923AC019091FB02992321F020918F -:104B00001D0130E006C020911E018AE0289F90011F -:104B100011244217530708F486C08091FD02C0910A -:104B2000FE02D091FF0210910003811107C0C11154 -:104B300076C0D11174C0111172C075C09F3F19F0B9 -:104B40009F5F9093FB02181624F40E94F723809332 -:104B5000FD028091FD0287FF05C00E94F723819529 -:104B60008093FD021C1624F40E94F7238093FE021A -:104B70008091FE0287FF05C00E94F72381958093F4 -:104B8000FE026091FD02662339F1C091FE02CC2342 -:104B900019F1772767FD7095872F972F0E94D829E5 -:104BA00023E333E343E35FE30E94E82A0E94A5295D -:104BB0006093FD026C2F772767FD7095872F972FE5 -:104BC0000E94D82923E333E343E35FE30E94E82A0A -:104BD0000E94A5296093FE021D1624F40E94402421 -:104BE0008093FF028091FF0287FF05C00E9440244E -:104BF00081958093FF02111624F40E944024809333 -:104C000000038091000387FF05C00E944024819526 -:104C100080930003DF91CF911F910C9466259F3FF5 -:104C200009F08ECF96CFDF91CF911F910895ECEFD1 -:104C3000F2E085E0DF011D928A95E9F71092FB0210 -:104C40001092FA020895833081F128F4813059F0EE -:104C50008230D1F00895853009F449C0B8F186302A -:104C600009F456C0089580911E01262F30E0280FC8 -:104C7000311D2F3F310524F4680F60931E01089504 -:104C80008FEF80931E01089580911D01262F30E043 -:104C9000280F311D2F3F310524F4680F60931D014B -:104CA00008958FEF80931D01089580911C01262F98 -:104CB00030E0280F311D2F3F310524F4680F609339 -:104CC0001C0108958FEF80931C01089580911B01B2 -:104CD000262F30E0280F311D2F3F310524F4680FB7 -:104CE00060931B0108958FEF80931B0108958091BD -:104CF0001A01262F30E0280F311D2F3F310524F4F3 -:104D0000680F60931A0108958FEF80931A01089538 -:104D100080911901262F30E0280F311D2F3F3105DA -:104D200024F4680F6093190108958FEF809319019F -:104D30000895833011F128F4813049F0823091F0E8 -:104D40000895853081F120F18630C1F10895809178 -:104D50001E01681720F4861B80931E01089510928F -:104D60001E01089580911D01681720F4861B809311 -:104D70001D01089510921D01089580911C0168176E -:104D800020F4861B80931C01089510921C01089545 -:104D900080911B01681720F4861B80931B010895E6 -:104DA00010921B01089580911A01681720F4861B48 -:104DB00080931A01089510921A01089580911901A3 -:104DC000681720F4861B8093190108951092190129 -:104DD00008950F931F93873208F048C08E3108F072 -:104DE0008DC0803109F477C008F5873009F461C0BF -:104DF00068F4863009F09DC08091F202817F8E7F39 -:104E00008093F20281E08093020394C08B3009F416 -:104E100089C08E3009F08DC08091F20282FB22277A -:104E200020F991E0922790FB82F95EC0863109F467 -:104E300079C060F4813109F07CC00E94111C90910E -:104E4000160181E08927809316016CC0893109F42D -:104E500069C08B3109F06DC08091F20281FB22277D -:104E600020F991E0922790FB81F93EC0883309F444 -:104E700059C050F4893209F457C0853309F454C03D -:104E8000873209F451C055C0833409F44DC028F469 -:104E90008A3308F44EC0895332C0883409F049C0BF -:104EA0000E94111C0E944F0A0E9413040E94682352 -:104EB00039C09091F202892F8095817080FB90F922 -:104EC00029F0966098609093F20234C0997F977FA2 -:104ED0009093F20227C08091F20283FB222720F9EF -:104EE00091E0922790FB83F98093F2029923D1F00D -:104EF0008091F20281608093F20214C08D5141E0F2 -:104F000050E060E070E08A019B0104C0000F111FB7 -:104F1000221F331F8A95D2F7C901B8010E94D11F01 -:104F20000E94111C81E006C061E070E080E090E02A -:104F3000F5CF80E01F910F91089580E0089580E003 -:104F40000895CF93C82F80910203813069F018F043 -:104F50008230C9F184C0E0911701F091180180817D -:104F6000823209F07EC007C0E0911701F09118016C -:104F70008081823261F48C2F0E949D27811104C0B0 -:104F80008C2F0E94E9261DC081E090E01AC08C2F72 -:104F90000E949F27811114C0C43179F048F4CB30AE -:104FA00079F0C03109F061C082E08093020308C04B -:104FB000C93219F0C83321F058C01092020355C00D -:104FC00081E0817054C0C93291F120F5C43179F18A -:104FD000B0F4C73009F047C08EE180931E0182E330 -:104FE00080931D018AE080931C0184E180931B0162 -:104FF00088E080931A0188E28093190134C0CE5171 -:10500000C63088F5EC2FF0E0EA54FE4F80818093A3 -:10501000010329C0CE34E9F020F4CB3421F56AE055 -:1050200013C0C13579F0C235F1F461E00DC0809153 -:105030000103882319F01092010315C081E08093C9 -:10504000020315C061E006C0809101030E9423267F -:105050000AC06AE0809101030E94992604C0109260 -:10506000020380E004C081E002C080E0AACFCF91BB -:1050700008950E94C923811102C00E94A5230E94A5 -:10508000E52380931D0380FF02C0869501C080E068 -:105090000C94200380911D03982F9695292F30E0C2 -:1050A000233031054CF49F5F990F8170892B81600B -:1050B00080931D030E94E92380911D0386950C9423 -:1050C000200380911D03982F969591F09158990F88 -:1050D0008170892B80931D038E7F91E009F490E00D -:1050E00080911D0390FB80F980931D030E94E923AA -:1050F00080911D0386950C94200380911D03982FA9 -:10510000909590FB80F980931D030E94E923809184 -:105110001D0380FF02C0869501C080E00C9420032F -:1051200090911D03892F86958F5F8F7791708430C2 -:1051300028F4880F892B80931D0302C090931D03D0 -:1051400080911D038E7F91E009F490E080911D0312 -:1051500090FB80F980931D030E94E92380911D0339 -:1051600086950C94200320911D03922F96958927F4 -:10517000982F990F822F8170892B80931D038E7F2A -:1051800091E009F490E080911D0390FB80F98093F9 -:105190001D030E94E92380911D0386950C94200332 -:1051A00080911D03869508955058BB27AA270ED0DD -:1051B000D1C1C2D130F0C7D120F031F49F3F11F4FA -:1051C0001EF4B7C10EF4E095E7FB9FC1E92FD3D1E0 -:1051D00080F3BA17620773078407950718F071F414 -:1051E0009EF5EBC10EF4E0950B2EBA2FA02D0B010E -:1051F000B90190010C01CA01A0011124FF27591B1C -:1052000099F0593F50F4503E68F11A16F040A22F21 -:10521000232F342F4427585FF3CF46953795279592 -:10522000A795F0405395C9F77EF41F16BA0B620B91 -:10523000730B840BBAF09150A1F0FF0FBB1F661FD8 -:10524000771F881FC2F70EC0BA0F621F731F841F1B -:1052500048F4879577956795B795F7959E3F08F041 -:10526000B3CF9395880F08F09927EE0F9795879500 -:10527000089527D108F481E008950CD06BC163D163 -:1052800040F05AD130F021F45F3F19F03EC1511186 -:1052900095C14FC170D198F39923C9F35523B1F348 -:1052A000951B550BBB27AA2762177307840738F095 -:1052B0009F5F5F4F220F331F441FAA1FA9F333D0F4 -:1052C0000E2E3AF0E0E830D091505040E695001CA8 -:1052D000CAF729D0FE2F27D0660F771F881FBB1F64 -:1052E000261737074807AB07B0E809F0BB0B802D3E -:1052F000BF01FF2793585F4F2AF09E3F510568F08A -:1053000004C15CC15F3FECF3983EDCF38695779572 -:105310006795B795F7959F5FC9F7880F911D96958B -:10532000879597F90895E1E0660F771F881FBB1FE7 -:10533000621773078407BA0720F0621B730B840B94 -:10534000BA0BEE1F88F7E095089504D06894B11168 -:1053500035C1089518D188F09F5790F0B92F99273B -:10536000B751A0F0D1F0660F771F881F991F1AF070 -:10537000BA95C9F712C0B13081F01FD1B1E00895DC -:105380001CC1672F782F8827B85F39F0B93FCCF35D -:10539000869577956795B395D9F73EF49095809566 -:1053A000709561957F4F8F4F9F4F0895E89409C086 -:1053B00097FB3EF490958095709561957F4F8F4F48 -:1053C0009F4F9923A9F0F92F96E9BB279395F6955E -:1053D000879577956795B795F111F8CFFAF4BB0FDC -:1053E00011F460FF1BC06F5F7F4F8F4F9F4F16C040 -:1053F000882311F096E911C0772321F09EE8872FCA -:10540000762F05C0662371F096E8862F70E060E085 -:105410002AF09A95660F771F881FDAF7880F9695FE -:10542000879597F9089588D018F011F08CD038F44A -:1054300080C0C4C0E92F9FD0B0F35523C9F3E7FB68 -:105440006217730784079507A8F199F3E92FFF27DF -:1054500088232AF03197660F771F881FDAF7952F78 -:105460005527442332F091505040220F331F441FE0 -:10547000D2F7BB27E91BF50B621B730B840BB10939 -:10548000C1F222F4620F731F841FB11D31972AF0FD -:10549000660F771F881FBB1FEFCF915050405AF007 -:1054A00041F0882332F0660F771F881F91505040DB -:1054B000C1F7939530C08695779567959F5FD9F72B -:1054C000F8CF990F0008550FAA0BE0E8FEEF16166B -:1054D0001706E807F907C0F012161306E407F507E8 -:1054E00098F0621B730B840B950B39F40A2661F05C -:1054F000232B242B252B21F408950A2609F4A140FF -:10550000A6958FEF811D811D089597F99F6780E80B -:1055100070E060E008959F3F31F0915020F487954E -:1055200077956795B795880F911D9695879597F90B -:1055300008959FEF80EC089500240A94161617062C -:1055400018060906089500240A9412161306140674 -:1055500005060895092E0394000C11F4882352F0D7 -:10556000BB0F40F4BF2B11F460FF04C06F5F7F4F8F -:105570008F4F9F4F089557FD9058440F551F59F076 -:105580005F3F71F04795880F97FB991F61F09F3F30 -:1055900079F087950895121613061406551FF2CF59 -:1055A0004695F1DF08C0161617061806991FF1CFA9 -:1055B00086957105610508940895E894BB276627D0 -:1055C0007727CB0197F908957CDF08F48FEF0895D2 -:1055D0000BD0C0CFB1DF28F0B6DF18F0952309F06B -:1055E00094CFA7CF1124EACFC6DFA0F3959FD1F3C4 -:1055F000950F50E0551F629FF001729FBB27F00D81 -:10560000B11D639FAA27F00DB11DAA1F649F6627D5 -:10561000B00DA11D661F829F2227B00DA11D621F24 -:10562000739FB00DA11D621F839FA00D611D221FDE -:10563000749F3327A00D611D231F849F600D211DC2 -:10564000822F762F6A2F11249F5750408AF0E1F065 -:1056500088234AF0EE0FFF1FBB1F661F771F881FAE -:1056600091505040A9F79E3F510570F04ECFA6CF04 -:105670005F3FECF3983EDCF3869577956795B79599 -:10568000F795E7959F5FC1F7FE2B880F911D9695C3 -:10569000879597F90895FA01EE0FFF1F30962105BF -:1056A000310599F16115710561F48038BFE39B07FD -:1056B00049F168949038810561F08038BFEF9B070D -:1056C00041F0992342F5FF3FE1053105210511F134 -:1056D000E8940894E795D901AA2329F4AB2FBE2FAB -:1056E000F85FD0F310C0FF5F70F4A695E0F7F739CC -:1056F00050F019F0FF3A38F49F779F930CD00F9039 -:1057000007FC905808953EF014CF60E070E080E808 -:105710009FE308954FE79F775F934F933F932F93B6 -:105720009ED02F913F914F915F9152DF05C019F4A8 -:105730000EF0EBCE42CFFDCE26DFC8F39638C0F791 -:1057400007F80F92E8942BE33AEA48EB5FE74EDF65 -:105750000F920F920F924DB75EB70F92C0D0EAE052 -:10576000F1E016D04F915F91EF91FF91E595EE1F1B -:10577000FF1F49F0FE57E0684427EE0F441FFA95DB -:10578000E1F74195550B32D00F9007FE26C00895E2 -:10579000DF93CF931F930F93FF92EF92DF927B01E2 -:1057A0008C01689405C0DA2EEF011EDFFE01E8943B -:1057B000A5912591359145915591AEF3EF0106DD07 -:1057C000FE019701A801DA9479F7DF90EF90FF903E -:1057D0000F911F91CF91DF9108959B01AC0160E083 -:1057E00070E080E89FE349CD90CE95CECCDEE8F323 -:1057F0009923D9F3940F511DBBF39150504094F06D -:1058000059F0882332F0660F771F881F915050405F -:10581000C1F79E3F510544F7880F911D96958795D6 -:1058200097F908955F3FACF0983E9CF0BB278695B2 -:1058300077956795B79508F4B1609395C1F7BB0F5D -:1058400058F711F460FFE8CF6F5F7F4F8F4F9F4F86 -:10585000E3CFB4CE0EF05FCE6CCE689456CE93DE1E -:10586000C8F39923D1F3C6F3DF93CF931F930F931C -:10587000FF92C92FDD2788232AF02197660F771F13 -:10588000881FDAF720E030E040E85FEB9FE38839DB -:1058900020F0803E30F021968F7787DCE2E3F1E064 -:1058A00003C083DCEFE5F1E073DF8B01BE01EC01A7 -:1058B000FB2E6F5771097595771F880B990B78DD53 -:1058C00028E132E741E35FE38FDEAF2D9801AE01BF -:1058D000FF900F911F91CF91DF9178DC3BCEFA01C1 -:1058E000DC01AA0FBB1F9B01AC01BF5728F4222784 -:1058F0003327442750781FC0B75188F4AB2F0024BA -:10590000469537952795011CA395D2F3002069F0A1 -:10591000220F331F441FB395DAF30DD045CC61300D -:105920007105A0E88A07B94630F49B01AC016627EF -:10593000772788279078309621F02083318342831F -:1059400053830895AA1BBB1B51E107C0AA1FBB1FAD -:10595000A617B70710F0A61BB70B881F991F5A95FB -:10596000A9F780959095BC01CD01089597FB072E6E -:1059700016F4009407D077FD09D00E94A22C07FCF2 -:1059800005D03EF4909581959F4F0895709561954F -:105990007F4F0895EE0FFF1F0590F491E02D0994BD -:1059A000F999FECF92BD81BDF89A992780B50895E7 -:1059B000A8E1B0E042E050E00C94F82C262FF999D1 -:1059C000FECF92BD81BDF89A019700B4021639F05E -:1059D0001FBA20BD0FB6F894FA9AF99A0FBE08952F -:1059E0000196272F0E94DF2C0C94DE2CDC01CB01CA -:1059F000FC01F999FECF06C0F2BDE1BDF89A3196DF -:105A000000B40D9241505040B8F70895F894FFCF7C -:105A1000640007000CFF0000003F643310C1109EBB -:105A2000106A1036100101DF022808140A321E0025 -:105A300002040507090B0C0E1011131517181A1C78 -:105A40001D1F2123242628292B2D2F3032343537B2 -:105A5000393B1F0F03764F5F6F7F496943790959BF -:105A600053633149803F5D8B803FF8BF803FCAE17F -:105A7000803F73ED803FCAE1803FF8BF803F5D8B80 -:105A8000803F3149803F0000803FF16D7F3F75EAE4 -:105A90007E3F4C827E3F833F7E3F84287E3F833F14 -:105AA0007E3F4C827E3F75EA7E3FF16D7F3F000076 -:105AB000803F3F4D36394B05FE04C8048F04220455 -:105AC0003B0454046D0401020304050607080900A1 -:00000001FF diff --git a/keyboard/planck/keymaps/lucas/compiled.hex b/keyboard/planck/keymaps/lucas/compiled.hex deleted file mode 100644 index 26fc8ee0cd..0000000000 --- a/keyboard/planck/keymaps/lucas/compiled.hex +++ /dev/null @@ -1,1471 +0,0 @@ -:100000000C9427030C946B030C946B030C946B03FC -:100010000C946B030C946B030C946B030C946B03A8 -:100020000C946B030C946B030C942E150C9400161B -:100030000C9462230C946B030C946B030C946B0371 -:100040000C946B030C94CD030C946B030C946B0316 -:100050000C946B030C94CA230C946B030C946B03E9 -:100060000C946B030C946B030C946B030C946B0358 -:100070000C946B030C946B030C946B030C946B0348 -:100080000C94A30B0C946B030C946B030C946B03F8 -:100090000C946B030C946B030C946B030C946B0328 -:1000A0000C946B030C946B030C946B036D168F16FE -:1000B0007D178F167D17D416F7167D174C175F170F -:1000C000491A491A781A781AB71AD71A2D1C2D1CF2 -:1000D000E21A2D1C921B921BF91B021C2D1C271CC3 -:1000E0009F1B9F1B9F1B9F1B9F1B9F1B9F1B9F1B40 -:1000F0009F1B9F1B9F1B9F1B9F1B9F1B9F1B9F1B30 -:10010000AF1BBD1BC41BCB1BD51B07634236B79B64 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A32CA4228A3921290014001A00090055 -:1001E00013000A000D000F0018001D003602380031 -:1001F0002A00040015001600170007000B0011006C -:1002000008000C001200310200301C001B00060028 -:10021000190005000E0010003600370024022800E7 -:10022000E000E3002B00E200022003200320012075 -:100230005000510052004F00010001000100010078 -:100240000100010001000100010001003700010070 -:100250000100010001000100010001000100010096 -:100260000100010001001F02010001000100010066 -:100270000100010001000100013064022D020100B3 -:100280000100010001000100010001000100010066 -:100290000100010001000100000034020000000024 -:1002A00000000000000000002F02330200000420C4 -:1002B0004C00340000002D00000000000000000091 -:1002C0002F00330000004514000000000000000073 -:1002D0000000000000000000AD00AC00AB004414C2 -:1002E0000100010001000100010001000100010006 -:1002F000A800AA00A900AE0030141E021414310098 -:10030000210222023500230230022502260230009B -:100310002E021E001F0020002100220023002400C6 -:1003200025002600270027020000000000006414BA -:100330002514261424142714081400002D14280052 -:1003400001000100010001000100010001000100A5 -:100350004A004E004B004D00680069006A006B00C7 -:100360006C006D006E006F00700071007200730011 -:100370003A003B003C003D003E003F004000410091 -:10038000420043004400450000000000000000005F -:100390000000560057000000000000000050000060 -:1003A00000008250805081500220010001000100B5 -:1003B000A800AA00A900AE000652290014001A00E5 -:1003C0000800150017001D0018000C001200042082 -:1003D00028002A0004001600070009000A000B008C -:1003E0000D000E000F003602E000E1001C001B00B3 -:1003F0000600190005001100100037005200240209 -:10040000000000002B00E20000002C002C002C015A -:10041000E300500051004F000100000014001A00DA -:10042000090013000A000D005F0060006100000079 -:100430002A000000040015001600170007000B003A -:100440005C005D005E004D00E000E1001C001B0050 -:100450000600190005000E0059005A005B004E000E -:10046000000000002B00E20000002C002C002C01FA -:100470000000620063005800280354006800650013 -:10048000200050006C0061006E0063006B002000D3 -:100490004B006500790062006F006100720064002B -:1004A00000002C034F007200740068006F006C00A5 -:1004B00069006E0065006100720020004B0065005D -:1004C000790062006F006100720064007300000038 -:1004D0000403090409026D00040100A0FA090400E4 -:1004E000000103010100092111010001223F000761 -:1004F00005810308000A0904010001030102000943 -:100500002111010001224D000705820308000A099C -:10051000040200010300000009211101000122363C -:10052000000705830308000A090403000103000013 -:100530000009211101000122390007058403100080 -:10054000011201100100000008EDFE6060010001D1 -:1005500002000105010906A101050719E029E715B7 -:1005600000250195087501810205081901290595E5 -:10057000057501910295017503910105071900297F -:100580007715002501957875018102C00501098064 -:10059000A101850216010026B7001A01002AB70042 -:1005A000751095018100C0050C0901A10185031694 -:1005B0000100269C021A01002A9C027510950181F7 -:1005C00000C005010902A1010901A10005091901E5 -:1005D0002905150025019505750181029501750311 -:1005E00081010501093009311581257F95027508C2 -:1005F000810609381581257F950175088106050C4E -:100600000A38021581257F950175088106C0C0054D -:10061000010906A101050719E029E7150025019543 -:1006200008750181029501750881010508190129E4 -:10063000059505750191029501750391010507194D -:100640000029FF150025FF950675088100C01124BB -:100650001FBECFEFDAE0DEBFCDBF04B603FE24C07D -:1006600080911E0390911F03A0912003B09121035C -:100670008730904BA740B04BB9F410921E031092F4 -:100680001F03109220031092210314BE84B7877FAA -:1006900084BF88E10FB6F8948093600010926000E8 -:1006A0000FBEE0E0F8E3099511E0A0E0B1E0EEE173 -:1006B000FBE502C005900D92A03CB107D9F713E00D -:1006C000A0ECB1E001C01D92AE31B107E1F70E948C -:1006D00074120C948D2D0C9400000895089581E0FF -:1006E000089508950C946E030C946F030C94710399 -:1006F0000E94572923E030E0281B3109220F209364 -:10070000C4010895282F2F9880918000211108C0DE -:10071000877F8093800010928D0010928C001BC008 -:10072000886080938000233019F48FEF9FEF0FC013 -:1007300083E090E0821B9109880F991F2FEF3FEF14 -:10074000A90102C0569547958A95E2F7CA01909390 -:100750008D0080938C000C9478030E94780384E0D1 -:100760008093C3011092C0010895279A2F988FEFAC -:100770009FEF90938700809386008AE080938000AB -:1007800089E1809381000E94C0280C94AD030E94EF -:10079000B5036E9A769A0C946D031F920F920FB662 -:1007A0000F9211242F933F938F939F93EF93FF9377 -:1007B000E091C101F091C201CF0101969093C20175 -:1007C0008093C1010090C30102C0F695E7950A9499 -:1007D000E2F7EF738091C001823019F4E03251F4F6 -:1007E00004C0813039F4EF3329F480916F008D7F9C -:1007F00080936F00F0E0E457FE4FE49121E031E098 -:10080000E29FC001E39F900D11240090C40102C03B -:10081000969587950A94E2F790938D0080938C00CB -:10082000FF91EF919F918F913F912F910F900FBE6C -:100830000F901F901895662319F0613099F020C031 -:10084000FC018281882341F081EE0E94ED1881E055 -:1008500090E00E94D52014C081E090E00E94F62034 -:1008600081EE0CC0FC018281882339F081EE0E9468 -:10087000B51984E60E94ED1803C084E60E94B519FC -:1008800080E090E0089581E008950C944304089579 -:100890000C94C70380911502882309F448C0809105 -:1008A000D1019091D201009779F40E949423909302 -:1008B000D2018093D1018091D30190E0009771F42F -:1008C0008091D40190E00AC00E94A02320910001F1 -:1008D000309101012817390740F329C00197880F8B -:1008E000991F880F991FFC01EB52FE4F60817181A7 -:1008F000828193810E94090BE091D30184E0E89FFB -:10090000F0011124EB52FE4F60817181828193814D -:100910004FE050E00E94C10E8091D30190E001961B -:100920006091D40170E00E943D2D8093D3010C941E -:100930007203109217020C94D60A0895089581E06C -:10094000809317020C949E04089508958F929F92AD -:10095000AF92BF92EF92FF920F931F93CF93DF93CB -:10096000CDB7DEB7A3970FB6F894DEBF0FBECDBFED -:100970007C01FC0100811181C8010E949121B80114 -:100980000E94A8068C01B7010E944504882309F43F -:10099000CCC10032F0E51F0741F4F70182818823C2 -:1009A00009F458C00E94250FC0C10132F0E51F07AD -:1009B00041F4F7018281882309F44CC00E942E0F74 -:1009C000B4C10232F0E51F0751F4F7018281882398 -:1009D00009F440C00E94210F8111F0CFE3CF033210 -:1009E000F0E51F0739F4F7018281882399F10E940D -:1009F0009F049BC10432F0E51F0739F4F70182819F -:100A0000882341F10E94990490C10532F0E51F0747 -:100A100049F4F70182818823E9F08091170281115E -:100A2000F1CFE5CF0632F0E51F0739F4F7018281F7 -:100A3000882381F00E94350F0AC00732F0E51F07B6 -:100A400049F4F7018281882329F00E94400F0E9417 -:100A5000A5046BC180911702811105C0F701828145 -:100A60008111CFC018C1003E110579F4F7018281D0 -:100A7000882309F44DC00E94D60A81E080931602B3 -:100A8000109215021092D40150C1023E110559F482 -:100A9000F70182818823E1F10E94D60A10921602A2 -:100AA0001092150242C1033E110591F4F7018281B3 -:100AB000882371F10E94D60A1092160281E0809379 -:100AC00015021092D3011092D2011092D1012DC1C2 -:100AD0000235110559F4F7018281882309F425C1F3 -:100AE00080910001909101010A970DC00135110517 -:100AF00079F4F7018281882309F417C180910001FC -:100B0000909101010A9690930101809300010DC11B -:100B10004091040183E2EFE1F1E0DE0111960190E2 -:100B20000D928A95E1F7F701808121E030E02C0FEA -:100B30003D1F280F311DC901209102013091030191 -:100B4000FC01E20FF31F6081772767FD7095640F4A -:100B5000711D882777FD8095982F0E945F2A20E0DD -:100B600030E040E451E40E94C4294B015C01F701EC -:100B7000218184E090E0821B9109BC01882777FDE8 -:100B80008095982F0E945F2A9B01AC01C501B4019A -:100B90000E945C299B01AC0160E070E080E090E481 -:100BA0000E94D22B20E030E04CED50E40E946F2BED -:100BB0004B015C01F70182818823D1F04FE050E0C6 -:100BC000C501B4010E94C10E809116028823A1F0D4 -:100BD0008091D40124E0829FF0011124EB52FE4F5A -:100BE00080829182A282B3828F5F8093D40104C0FD -:100BF000C501B4010E94090B0F3F110508F02ECF6B -:100C000094C08091D00181111FC0043130E51307D9 -:100C100009F051C00E94470481E08093D0010E94F6 -:100C200094239093CF018093CE011092C70110922C -:100C3000C9011092C8011092CB011092CA01109202 -:100C4000CD011092CC0171C08091CE019091CF0165 -:100C50000E94A023883C910570F48091C701E82F81 -:100C6000F0E0EE0FFF1FE853FE4F118300838F5F0C -:100C70008093C7015AC0043880E5180721F0053871 -:100C8000104501F13AC0F7018281882341F01092AA -:100C9000C50182E01EC0043830E5130759F5809184 -:100CA000C501811106C086E20E94ED1886E20E940D -:100CB000B51982E01CC00438F0E51F0741F3053880 -:100CC0001045D9F4F7018281882331F01092C601D2 -:100CD00080E20E94041A29C08091C601811106C0D9 -:100CE00087E20E94ED1887E20E94B51980E20E9417 -:100CF0000B1A1BC00538104529F381E08093C5010C -:100D00008093C601C701A3960FB6F894DEBF0FBE4D -:100D1000CDBFDF91CF911F910F91FF90EF90BF90CA -:100D2000AF909F908F900C94740380E0A3960FB6C1 -:100D3000F894DEBF0FBECDBFDF91CF911F910F9111 -:100D4000FF90EF90BF90AF909F908F90089508957F -:100D50009CE0799FF001112490E3899FE00DF11D43 -:100D60001124E60FF11DEE0FFF1FE852FE4F859193 -:100D700094910895880F991FFC01E45BFF4F8591C2 -:100D800094910895880F991FFC01E453FE4F8591BB -:100D9000949108950F931F93CF93DF93EC018115E6 -:100DA00021E39207A0F5C11580E3D80708F0D7C06A -:100DB000C83ED105D8F4C03ED10508F007C2C83AF4 -:100DC000D10578F4C53AD10508F06AC0C130D10523 -:100DD00009F463C008F4F7C1C430D10508F0F6C1C6 -:100DE000F2C1CB3BD10508F466C0EDC1C11590E25C -:100DF000D90708F0AFC0C11521E0D20708F0E6C15D -:100E0000C03FD10508F4DFC18E0110651FC2C03894 -:100E100080E5D80700F5C03790E5D90708F0A3C0F2 -:100E2000C11520E5D20709F4ACC050F4CE019054AE -:100E300080319F4008F0C7C1DF708E01106A06C282 -:100E4000C13080E5D80709F4AEC0C43190E5D907B8 -:100E500008F4AFC0B8C1C33820E5D20709F48EC08A -:100E600050F4C13890E5D90709F482C008F083C076 -:100E700000E011EDEBC1C03181E5D80708F4A3C152 -:100E8000C11597E5D90708F436C1CE0190578115F1 -:100E9000904108F098C1DF7093C101E010E0D6C125 -:100EA000C53AD10509F494C1C63AD10509F093C1F8 -:100EB00002E810E4CBC1C83AD10509F48FC1C93AA0 -:100EC000D10509F48EC1CA3AD10509F48DC1CB3AD6 -:100ED000D10509F48CC1CC3AD10509F48BC1CD3AC6 -:100EE000D10509F48AC1C03BD10509F489C1CE3AC4 -:100EF000D10509F488C1CF3AD10509F487C1C13BB6 -:100F0000D10509F486C1C23BD10509F485C1C33BB3 -:100F1000D10509F484C1C43BD10509F483C1C53BA3 -:100F2000D10509F482C1C63BD10509F481C1C73B93 -:100F3000D10509F480C1C83BD10509F47FC1C93B83 -:100F4000D10509F47EC1CA3BD10509F47DC100E099 -:100F500014E47CC1CE019F700E94C20678C1DD27D7 -:100F60008E01106C73C1CF70DD278E01146D6EC1C0 -:100F700000E010ED6BC100E012ED68C100E013ED80 -:100F800065C10E94981C0E94D60A0E949D048FEFA2 -:100F900094E32CE0815090402040E1F700C0000035 -:100FA0000E94EF2353C18091F20281608093F2028C -:100FB0004DC10E945024811102C00E942C240E9425 -:100FC000632490E090931D0380931C03C23080E55E -:100FD000D80721F480911C03816086C0C43090E55D -:100FE000D90721F480911C0382607EC0C63020E5C1 -:100FF000D20721F480911C03846076C0C83080E55C -:10100000D80719F480911C0327C0CA3090E5D9078E -:1010100021F480911C03806167C0CC3020E5D207A9 -:1010200021F480911C0380625FC0CE3080E5D80738 -:1010300021F480911C03806457C0C03190E5D9072A -:1010400021F480911C0380684FC0C23120E5D20793 -:1010500029F480911C038460886046C0C33080E519 -:10106000D80721F480911C038E7F3EC0C53090E5E7 -:10107000D90721F480911C038D7F36C0C73020E54D -:10108000D20721F480911C038B7F2EC0C93080E5EC -:10109000D80719F480911C0326C0CB3090E5D907FE -:1010A00021F480911C038F7E1FC0CD3020E5D20734 -:1010B00021F480911C038F7D17C0CF3080E5D807C5 -:1010C00021F480911C038F7B0FC0C13190E5D907BB -:1010D00021F480911C038F7707C0C331D04531F4D0 -:1010E00080911C038B7F877F80931C0380911C035E -:1010F0000E946724ABC08D2F99278F70992781306C -:101100009105D9F49E012370332702C0880F991FDF -:101110002A95E2F79C688E0144E0000F111F4A9562 -:10112000E1F700271370802B912B53E0CC0FDD1FCC -:101130005A95E1F7C076DD272FC08230910531F452 -:10114000DC2FCC278E01016F106A80C0833091059F -:1011500069F4CE018370992701E010E002C0000F0E -:10116000111F8A95E2F7C8019C680FC08430910571 -:10117000B9F4CE018370992701E010E002C0000F9E -:10118000111F8A95E2F7C8019A6823E0CC0FDD1F92 -:101190002A95E1F7C07ED7708C010C2B1D2B56C011 -:1011A0008530910531F4DC2FCC278E01046F106A55 -:1011B0004DC0069709F04AC0CF71DD27DC2FCC2740 -:1011C0008E01106243C000E010E040C08E013EC0BE -:1011D00001E810E43BC003E810E438C002EE14E478 -:1011E00035C009EE14E432C00AEE14E42FC005EB5A -:1011F00014E42CC006EB14E429C007EB14E426C069 -:101200000CEC14E423C00DEC14E420C003E815E456 -:101210001DC00AE815E41AC002E915E417C004E984 -:1012200015E414C001E216E411C003E216E40EC096 -:1012300004E216E40BC005E216E408C006E216E478 -:1012400005C007E216E402C00AE216E4C801DF9115 -:10125000CF911F910F9108959CE0799FF001112487 -:1012600090E3899FE00DF11D1124E60FF11DEE0FB3 -:10127000FF1FE852FE4F85919491803E9105E0F466 -:10128000803C910558F58133910509F46FC048F40D -:101290008932910509F463C08A32910509F46DC061 -:1012A00072C089339105E9F082389105D1F0853318 -:1012B000910509F44DC067C0833E910581F138F472 -:1012C000803E9105B9F0823E9105D9F05CC0863E22 -:1012D000910561F1873E9105A1F155C00E94BA06C2 -:1012E000089520911C0320FD02C021FF4CC080EE18 -:1012F00090E049C080911C0380FFF9CF89E390E022 -:1013000042C080911C0382FF0EC080911C0384FFA9 -:1013100003C080E090E037C083EE90E034C080915D -:101320001C0382FFF2CF82EE90E02DC080911C035F -:1013300083FF0BC080911C0384FDEBCF87EE90E010 -:1013400022C080911C0383FFF5CF86EE90E01BC086 -:1013500080911C0385FF07C089E290E014C0809152 -:101360001C0385FFF9CF85E390E00DC080911C033D -:1013700086FF07C08AE290E006C080911C0386FFCA -:10138000F9CF81E390E00E94CA0608950C94760399 -:10139000E82FF0E0E25BFE4F8081E82FEF70F0E095 -:1013A00082958F7021E030E0A90102C0440F551FE3 -:1013B0008A95E2F740A308950F931F93CF93DF938D -:1013C00085B7806885BF85B7806885BFC3E0D0E0FA -:1013D00001E010E0FE01E25BFE4F8081E82FEF703C -:1013E000F0E021A182958F70A80102C0440F551F23 -:1013F0008A95E2F7CA01822B81A38C2F0E94C8092B -:10140000219740F78BE090E061E070E0FC01EE5B3B -:10141000FE4F2081E22FEF70F0E042A122952F7065 -:10142000DB0102C0AA0FBB1F2A95E2F79D01242B06 -:1014300022A3019758F7DF91CF911F910F910C9440 -:101440004804EF92FF920F931F93CF93DF9300E234 -:1014500012E0C3E0EE24E394F12CD5E08C2F0E943F -:10146000C8098BE090E040E050E0FC01EE5BFE4FED -:101470006081E62FEF70F0E020A130E062956F70A0 -:1014800002C0359527956A95E2F720FD09C09701BE -:10149000082E02C0220F331F0A94E2F7422B532B6F -:1014A000019718F7F801929182918F01841795079F -:1014B00021F051834083D09305018C2F0E94C809ED -:1014C000C15060F68091050187FD2CC0815080934A -:1014D00005018F3F39F08FE99FE00197F1F700C0D8 -:1014E000000020C080911E0290911F02909327025D -:1014F0008093260280911C0290911D0290932502F8 -:101500008093240280911A0290911B0290932302EF -:1015100080932202809118029091190290932102E7 -:10152000809320020E944A0481E0DF91CF911F91B5 -:101530000F91FF90EF900895E82FF0E0EE0FFF1F5E -:10154000E05EFD4F80819181089508950F931F9370 -:10155000CF9308E212E0C0E0F801929182918F01EE -:101560000E940C23C80FF2E000321F07A9F78C2F4E -:10157000CF911F910F9108950E945024811102C0B4 -:101580000E942C240E947524809307033E9A809128 -:1015900071008D7F8093710082E0809390008AE1DA -:1015A0008093910081E080932A02089580912A021D -:1015B000811102C00E94BC0A10927A021092790234 -:1015C000809171008D7F80937100809190008F7366 -:1015D0008093900010923C0210923B021092730292 -:1015E000109274021092750210927602109272029A -:1015F00010927102E1E5F2E0A1E4B2E011921192E1 -:10160000119211921D921D9282E0E137F807B1F715 -:101610000895CF92DF92EF92FF920F931F93CF9393 -:10162000DF9320913B02222309F484C06B017C01EB -:1016300080912A02811102C00E94BC0A01E712E0D7 -:10164000C7E0D0E0A7019601F801929182917291D2 -:1016500062918F010E94C029811131C0FE01EE0FFD -:10166000FF1FEE0FFF1FEF5AFD4F108211821282F3 -:101670001382DE01AA0FBB1FAF5BBD4F11961C92F8 -:101680001E92C730D105E9F02196448155816681CB -:10169000778140835183628373831482158216821B -:1016A000178212968D919C91139711969C938E930D -:1016B00013961C921E92129734961296E2CF21979F -:1016C00008F68091790290917A02019797FD05C002 -:1016D00090937A028093790204C010927A02109259 -:1016E00079028091790290917A022091770230916B -:1016F00078022817390724F01092780210927702A6 -:10170000892BC1F4809171008D7F8093710080914D -:1017100090008F7380939000109273021092740265 -:10172000109275021092760210927202109271025B -:1017300010923B02DF91CF911F910F91FF90EF909C -:10174000DF90CF9008951F920F920FB60F92112441 -:101750004F925F926F927F928F929F92AF92BF92C1 -:10176000CF92DF92EF92FF922F933F934F935F932D -:101770006F937F938F939F93AF93BF93CF93DF9399 -:10178000EF93FF9380913B02882309F49BC1C091A2 -:101790007902D0917A021C161D060CF093C140907C -:1017A0002B0250902C0260902D0270902E0220E0AF -:1017B00030E0A901C301B2010E946B2B18160CF096 -:1017C00065C0C130D10509F452C080917702909173 -:1017D0007802BE010E943D2D7C0190937802809397 -:1017E000770280903D0290903E02A0903F02B09020 -:1017F000400220E030E040E85FE3C501B4010E9410 -:101800005C2960933D0270933E0280933F02909367 -:101810004002F701EE0FFF1FEE0FFF1FEF5AFD4FC3 -:10182000A301920160817181828193810E94C42908 -:1018300020E030E040E05EE30E946F2B9B01AC01B2 -:10184000C501B4010E946B2B18168CF4C7010196D8 -:10185000BE010E943D2D90937802809377021092F2 -:101860003D0210923E0210923F0210924002E0911F -:101870007702F0917802EE0FFF1FEE0FFF1FEF5A75 -:10188000FD4F6081718182819381D0C0C0907302CD -:10189000D0907402E0907502F090760220E030E083 -:1018A000A901C701B6010E94C0292197882309F424 -:1018B000A2C0FE01EE0FFF1FEE0FFF1FEF5AFD4FFC -:1018C00080809180A280B380A5019401C701B601F8 -:1018D0000E94C02987FF31C0A501940160E070E03B -:1018E0008CED93EC0E94C42920E030E040E451E408 -:1018F0000E94C42920E030E040E05FE30E946F2BAB -:101900009B01AC0160E070E080E090E40E94D22B8B -:101910009B01AC01C501B4010E946F2B9B01AC017E -:10192000C701B6010E94C02987FF07C0A701960121 -:1019300060E070E08CED93E439C0A5019401C7012B -:10194000B6010E946B2B18160CF055C0A50194012E -:1019500060E070E08CED93E40E94C42920E030E068 -:1019600040E451E40E94C42920E030E040E05FE31D -:101970000E946F2B9B01AC0160E070E080E090E47E -:101980000E94D22B9B01AC01C501B4010E946F2BB8 -:101990009B01AC01C701B6010E946B2B18165CF5C8 -:1019A000A701960160E070E08CED93EC0E94C429E1 -:1019B00020E030E040E451E40E94C42920E030E01F -:1019C00040E05FE30E946F2B9B01AC0160E070E0A0 -:1019D00080E090E40E94D22B9B01AC01C701B601CC -:1019E0000E946F2B60937302709374028093750250 -:1019F0009093760213C0FE01EE0FFF1FEE0FFF1F44 -:101A0000EF5AFD4F80819181A281B381809373024F -:101A100090937402A0937502B09376026091730262 -:101A20007091740280917502909176022091280243 -:101A3000309129022F3F4FEF340731F02F5F3F4F96 -:101A400030932902209328020E944B0F6B017C01E6 -:101A500020E034E244EF51E40E94C02987FF08C02F -:101A600086EFC82E88E2D82E84EFE82E81E4F82E87 -:101A700020E030E040E051E4C701B6010E946F2B46 -:101A80009B01AC0160E074E284E79BE40E94C429FE -:101A90006B017C010E94312A70939700609396003D -:101AA00020910601309107014091080150910901F0 -:101AB000C701B6010E946F2B0E94312A70939900D2 -:101AC0006093980080913C02882309F433C1C09050 -:101AD0003702D0903802E0903902F0903A0220E0CC -:101AE00030E0A901C701B6010E946B2B1816D4F58E -:101AF00080912802909129028F3F2FEF920729F0C1 -:101B000001969093290280932802C701B6010E9492 -:101B10004B0F20E030E040E051E40E946F2B9B012E -:101B2000AC0160E074E284E79BE40E94C4296B018D -:101B30007C010E94312A7093970060939600209157 -:101B40000601309107014091080150910901C70138 -:101B5000B6010E946F2B0E94312A70939900609306 -:101B6000980008C010929700109296001092990069 -:101B70001092980060913102709132026F5F7F4F36 -:101B80007093320260933102209196003091970059 -:101B900080E090E0232BF1F0C0919600D091970067 -:101BA0000E945D2A6B017C01BE0180E090E00E94F2 -:101BB0005D2A9B01AC0160913302709134028091E7 -:101BC0003502909136020E94C42920E03FEF4FE792 -:101BD00057E410C00E945D2A6B017C0120E030EECA -:101BE0004FEF54E4609133027091340280913502DA -:101BF000909136020E946F2B9B01AC01C701B60188 -:101C00000E946B2B87FD96C080912F028F5F80937F -:101C10002F0290E020910303309104038217930771 -:101C2000A0F080910E03882319F010922F020DC0AE -:101C3000809171008D7F80937100809190008F73EF -:101C40008093900010923C027DC080913002C09140 -:101C50002F02811128C0C0900803D0900903E090A2 -:101C60000A03F0900B0320E030E0A901C701B601A0 -:101C70000E946B2B1816BCF481E080933002109206 -:101C80003702109238021092390210923A02C09232 -:101C90003302D0923402E0923502F0923602C15003 -:101CA000C0932F0243C0109230021092290210926A -:101CB0002802E0910503F091060348E0C49FE00D7F -:101CC000F11D112480819181A281B381809337021B -:101CD00090933802A0933902B0933A0220E030E0AA -:101CE00040E85EE364817581868197810E946F2B55 -:101CF0006B017C0180910A01682F70E080E090E028 -:101D00000E945D2A20E030E048EC52E40E94C429A1 -:101D10009B01AC01C701B6010E946F2B6093330297 -:101D200070933402809335029093360210923202FF -:101D3000109231028091070380FD04C010923C0292 -:101D400010923B02FF91EF91DF91CF91BF91AF9144 -:101D50009F918F917F916F915F914F913F912F91C3 -:101D6000FF90EF90DF90CF90BF90AF909F908F90BB -:101D70007F906F905F904F900F900FBE0F901F90CD -:101D80001895CF92DF92EF92FF92CF93DF936B0182 -:101D90007C01EA0180912A02811102C00E94BC0AE2 -:101DA0008091070380FF46C08091790290917A026A -:101DB00008970CF03FC0809171008D7F8093710077 -:101DC00080913C0281110E94D60A81E080933B02FF -:101DD000109229021092280220E030E0A901C701E8 -:101DE000B6010E946B2B1816DCF480917902909159 -:101DF0007A02FC01EE0FFF1FEE0FFF1FEF5AFD4F9F -:101E0000C082D182E282F382FC01EE0FFF1FEF5B02 -:101E1000FD4FD183C083019690937A02809379021B -:101E20008091710082608093710080919000806841 -:101E300080939000DF91CF91FF90EF90DF90CF9053 -:101E40000895809107038170089580910703816050 -:101E5000809307030E9479240C94A40480910703C3 -:101E60008E7F809307030C94792480917B0290E00D -:101E7000019666E070E00E943D2D80937B020895FC -:101E800080917B0290E0019766E070E00E943D2D1A -:101E900080937B0208958F929F92AF92BF92CF92D0 -:101EA000DF92EF92FF920F931F93CF93DF936B011B -:101EB0007C01C0912802D0912902BE0180E090E00F -:101EC0000E945D2A4B015C01A701960160E070E071 -:101ED0008CE594E40E94C4299B01AC01C501B401C6 -:101EE0000E946F2B0E94312A20917B02233009F43B -:101EF00073C028F4222351F02130E9F02CC12430A2 -:101F000009F4A0C0253009F4E0C025C180E090E0CC -:101F1000A0E0BFE38093060190930701A09308011E -:101F2000B093090110922B0210922C0210922D02F4 -:101F300010922E0210C110922B0210922C021092BD -:101F40002D0210922E026431710540F46A30710541 -:101F500060F520E030E040E85EE32BC0693C7105AD -:101F600008F0AAC080E090E00E945D2A20E030E006 -:101F700040EA51E40E945B2920E030E044E353E46E -:101F80000E94C4299B01AC010E946F2B20E030E02D -:101F900040E05EE30E946F2B9B01AC0160E070E0CB -:101FA00080E09EE30E945B2944C020E030E040E0F6 -:101FB0005FE3C701B6010E946F2B6B017C0180E0DB -:101FC00090E0A0E0BEE38093060190930701A09308 -:101FD0000801B0930901BFC010922B0210922C028D -:101FE00010922D0210922E024AE0469F9001479FC8 -:101FF000300D1124C90168EB7BE00E94292DBC0142 -:102000006C5D754077FF03C07195619571098827F4 -:1020100077FD8095982F0E945F2A2EE333EC4EE2E5 -:1020200059E30E946F2B20E030E040EC5EE30E9419 -:102030005C296093060170930701809308019093D7 -:10204000090189C010922B0210922C0210922D02CD -:1020500010922E02CE0183709927892BE1F0BE01E8 -:102060006170772780E090E00E945D2A20E030E0F8 -:1020700040E05EE30E946F2B20E030E040E45FE34D -:102080000E945C2960930601709307018093080108 -:10209000909309010CC080E090E0A0E0BFE3809342 -:1020A000060190930701A0930801B0930901C7703E -:1020B000DD27CD2B09F04FC01092060110920701C9 -:1020C000109208011092090146C010922B02109242 -:1020D0002C0210922D0210922E0200E010E020E05F -:1020E0003FE300930601109307012093080130930A -:1020F00009016739710578F180E090E00E945D2A5E -:1021000020E030E047E153E40E945B2920E030E02A -:102110004AE754E40E94C42920E030E048E452E455 -:102120000E946F2B20E030E040EA51E40E94A12A97 -:102130000E942C2A660F771F660F771FFB01EE5A4D -:10214000FE4F2081318142815381C701B6010E9437 -:102150006F2B6B017C01C701B601DF91CF911F91FD -:102160000F91FF90EF90DF90CF90BF90AF909F9036 -:102170008F90089580918C020895CF93DF9300D0C3 -:102180001F92CDB7DEB79C0180911303843019F5FF -:1021900093E099833B832A839093E9008FEF90919A -:1021A000E800815095FD06C095ED9A95F1F7000085 -:1021B0008111F5CF8091E80085FF0DC040E050E02F -:1021C00063E070E0CE0101960E941E138091E8004A -:1021D0008E778093E8000F900F900F90DF91CF9152 -:1021E0000895CF93DF9300D01F92CDB7DEB7209133 -:1021F0001303243021F522E029839B838A8383E023 -:102200008093E9008FEF9091E800815095FD06C022 -:1022100095ED9A95F1F700008111F5CF8091E800D6 -:1022200085FF0DC040E050E063E070E0CE01019614 -:102230000E941E138091E8008E778093E8000F9033 -:102240000F900F90DF91CF910895209113032430C8 -:10225000F1F422E02093E9002FEF3091E8002150C3 -:1022600035FD06C035ED3A95F1F700002111F5CFA7 -:102270002091E80025FF0BC040E050E065E070E0F1 -:102280000E941E138091E8008E778093E8000895E5 -:10229000CF93DF93EC0190911303943009F046C083 -:1022A000809115018823D9F0809116018823B9F017 -:1022B0009093E9008FEF9091E800815095FD06C062 -:1022C00095E19A95F1F700008111F5CF8091E80032 -:1022D00085FF2CC040E050E060E170E017C081E075 -:1022E0008093E9008FEF9091E800815095FD06C042 -:1022F00095ED9A95F1F700008111F5CF8091E800F6 -:1023000085FF14C040E050E068E070E0CE010E941C -:102310001E138091E8008E778093E80080E1FE0133 -:10232000ACE7B2E001900D928A95E1F7DF91CF9191 -:10233000089580911203811109C00E94B3140E9474 -:1023400010158091E20084608093E200089510925D -:1023500012030895089508950C94572342E061EC08 -:1023600081E00E942D1442E061EC82E00E942D1475 -:1023700042E061EC83E00E942D1442E161EC84E0D4 -:102380000C942D1480911503833009F455C030F45A -:10239000813071F0823009F48EC008958A3009F4DA -:1023A0007AC08B3009F460C0893009F09CC020C02D -:1023B00080911403813A09F096C08091E800877FEC -:1023C0008093E8008091180390911903892B21F4E0 -:1023D00060E18CE792E003C060E080E090E070E0B4 -:1023E0000E9469138091E8008B778093E80008953C -:1023F00080911403813209F076C080911803909186 -:102400001903009719F0039709F06DC08091E80057 -:10241000877F8093E8008091E80082FD05C080916D -:1024200013038111F8CF5FC08091F10080938C027B -:102430008091E8008B7753C080911403813A09F0B2 -:1024400052C08091180390911903892B09F04BC059 -:102450008091E800877F8093E8008091E80080FF0A -:10246000FCCF8091150136C0809114038132D9F5DB -:102470008091180390911903892BA9F58091E800A8 -:10248000877F8093E8000E946214809116038093F6 -:1024900015010C94981C80911403813221F58091D0 -:1024A000E800877F8093E8000E9462148091170300 -:1024B00080938D02089580911403813AA1F4809154 -:1024C000E800877F8093E8008091E80080FFFCCFE0 -:1024D00080918D028093F1008091E8008E77809347 -:1024E000E8000C946214089584B7877F84BF88E164 -:1024F0000FB6F89480936000109260000FBE90E0D9 -:1025000080E80FB6F89480936100909361000FBE4D -:102510000E9405180E94B3140E9410158091E200D9 -:1025200084608093E20078940E9496170E940718B6 -:102530008BE091E00E94B11780911303853069F41C -:102540000E941823809111038823B1F30E9446232F -:10255000882391F30E940813EFCF0E940F18ECCF4D -:10256000292F332723303105C9F064F42130310598 -:1025700081F02230310509F043C08DE690E024ED72 -:1025800034E042C021323105F1F02232310541F10F -:1025900037C082E190E021E435E036C099278130F0 -:1025A000910541F08230910541F0892B49F5E0ED2C -:1025B000F4E005C0E2EAF4E002C0E8E7F4E0849168 -:1025C00090E09F0121C06430D8F4E62FF0E0EE0FD8 -:1025D000FF1FE255FE4F2081318189E090E014C059 -:1025E000643070F470E0FB01EE0FFF1FEA55FE4F00 -:1025F00020813181FB01EE55FE4F808190E004C0C7 -:1026000080E090E020E030E0FA01318320830895FB -:1026100080E189BD82E189BD09B400FEFDCF8091D2 -:10262000D8008F7D8093D8008091E00082608093F5 -:10263000E0008091E00081FDFCCF0895CF92DF9211 -:10264000EF92FF920F931F93CF93DF93EC018B01D7 -:102650006A010E948114811133C0C114D10439F080 -:10266000F60180819181081B190BC80FD91FE12C3D -:10267000F12C0115110519F18091E80085FD16C0B6 -:102680008091E8008E778093E800C114D10449F06E -:10269000F60180819181E80EF91EF182E08285E0E9 -:1026A0000FC00E948114882321F30AC0899180936E -:1026B000F10001501109FFEFEF1AFF0ADACF80E0B5 -:1026C000DF91CF911F910F91FF90EF90DF90CF900E -:1026D000089520911A0330911B032617370748F0FD -:1026E0006115710539F42091E8002E772093E800F8 -:1026F00001C0B90140E061157105A9F120911303F2 -:10270000222309F443C0253009F442C02091E80097 -:1027100023FD40C02091E80022FD32C02091E80056 -:1027200020FFE9CF4091F3002091F20030E0342BFC -:10273000FC01CF016115710559F02830310540F4D5 -:1027400081918093F100615071092F5F3F4FF1CF6C -:1027500041E02830310509F040E02091E8002E7773 -:102760002093E800C8CF4111C9CF0AC0809113035C -:10277000882361F0853061F08091E80083FD0AC014 -:102780008091E80082FFF2CF80E0089582E0089512 -:1027900083E0089581E0089520911A0330911B038E -:1027A0002617370748F06115710539F42091E800C4 -:1027B0002E772093E80001C0B901FC0120E06115EB -:1027C000710591F180911303882309F440C085308D -:1027D00009F43FC08091E80083FD3DC08091E8008E -:1027E00082FD2FC08091E80080FFE9CF2091F300A7 -:1027F0008091F20090E0922B6115710559F08830BC -:10280000910540F424912093F100319661507109B3 -:102810000196F2CF21E0089709F020E08091E800CE -:102820008E778093E800CBCF2111CCCF0AC0809166 -:102830001303882361F0853061F08091E80083FD07 -:102840000AC08091E80082FFF2CF80E0089582E024 -:10285000089583E0089581E00895982F973058F502 -:102860009093E900981739F07091EC002091ED00F9 -:102870005091F00003C0242F762F50E021FF19C0A3 -:102880003091EB003E7F3093EB003091ED003D7FC7 -:102890003093ED003091EB0031603093EB0070939A -:1028A000EC002093ED005093F0002091EE0027FF04 -:1028B00007C09F5FD3CF8F708093E90081E00895B8 -:1028C00080E008958091140387FF11C08091E80093 -:1028D00082FD05C0809113038111F8CF11C0809152 -:1028E000E8008B770BC080911303882349F0809117 -:1028F000E80080FFF8CF8091E8008E778093E800B1 -:1029000008952091E4003091E50095E64091EC00B7 -:10291000842F817040FF22C08091E80080FD1CC0A0 -:1029200080911303882391F0853091F08091EB0022 -:1029300085FD10C04091E4005091E5004217530717 -:1029400029F39A01915011F784E0089582E00895E7 -:1029500083E0089581E0089580E008954091E800C3 -:1029600042FFDECF08950E9421150E942915E0EE56 -:10297000F0E0808181608083E8EDF0E080818F77F6 -:10298000808319BCA7EDB0E08C918E7F8C93808101 -:102990008F7E80831092120308950F931F93CF931D -:1029A000DF930E9421150E942915C8EDD0E088818F -:1029B0008F77888388818068888388818F7D8883EA -:1029C00019BC1092130310920F031092110310926E -:1029D000100300EE10E0F80180818B7F80838881F6 -:1029E0008160888342E060E080E00E942D14E1EE87 -:1029F000F0E080818E7F8083E2EEF0E08081816074 -:102A00008083808188608083F80180818E7F8083CD -:102A1000888180618883DF91CF911F910F91089504 -:102A2000E8EDF0E080818F7E8083E7EDF0E080814B -:102A30008160808384E082BF81E0809312030C94E4 -:102A4000CD14E8EDF0E080818E7F80831092E2006B -:102A500008951092DA001092E10008951F920F92EB -:102A60000FB60F9211242F933F934F935F936F9361 -:102A70007F938F939F93AF93BF93EF93FF93809137 -:102A8000E10082FF0BC08091E20082FF07C08091CD -:102A9000E1008B7F8093E1000E9495178091DA001E -:102AA00080FF1FC08091D80080FF1BC08091DA009A -:102AB0008E7F8093DA008091D90080FF0DC080E185 -:102AC00089BD82E189BD09B400FEFDCF81E080931C -:102AD00013030E94991105C019BC109213030E94A0 -:102AE000A7118091E10080FF19C08091E20080FF72 -:102AF00015C08091E2008E7F8093E2008091E20019 -:102B000080618093E2008091D80080628093D80039 -:102B100019BC85E0809313030E94AB118091E10002 -:102B200084FF30C08091E20084FF2CC080E189BD29 -:102B300082E189BD09B400FEFDCF8091D8008F7D70 -:102B40008093D8008091E1008F7E8093E100809196 -:102B5000E2008F7E8093E2008091E20081608093AA -:102B6000E20080910F03882311F084E007C0809178 -:102B7000E30087FD02C081E001C083E0809313037E -:102B80000E94AC118091E10083FF29C08091E20096 -:102B900083FF25C08091E100877F8093E10082E080 -:102BA0008093130310920F038091E1008E7F809336 -:102BB000E1008091E2008E7F8093E2008091E2004C -:102BC00080618093E20042E060E080E00E942D148A -:102BD0008091F00088608093F0000E94AA11FF911C -:102BE000EF91BF91AF919F918F917F916F915F9185 -:102BF0004F913F912F910F900FBE0F901F901895FE -:102C00001F920F920FB60F9211242F933F934F9361 -:102C10005F936F937F938F939F93AF93BF93CF9364 -:102C2000DF93EF93FF93C091E900CF708091EC00A8 -:102C3000D82FD17080FDD0E81092E9008091F0008B -:102C4000877F8093F00078940E9444161092E900E8 -:102C50008091F00088608093F000CD2BCF70C093FE -:102C6000E900FF91EF91DF91CF91BF91AF919F91DB -:102C70008F917F916F915F914F913F912F910F9025 -:102C80000FBE0F901F9018951F93CF93DF93CDB772 -:102C9000DEB7AA970FB6F894DEBF0FBECDBFE4E152 -:102CA000F3E088E08E0F9091F10091938E13FBCFAB -:102CB0000E94C2118091E80083FF1FC1809114031C -:102CC00090911503492F50E04A30510508F015C185 -:102CD000FA01EA5AFF4F0C94512D803881F0823866 -:102CE00009F00BC1809118038F708093E9008091E7 -:102CF000EB0085FB882780F91092E90006C08091DF -:102D0000100390911103911182609091E800977FD8 -:102D10009093E8008093F1001092F100C8C0282F32 -:102D20002D7F09F0EAC0882319F0823061F0E5C0F8 -:102D300080911603813009F0E0C0933009F080E003 -:102D4000809311032BC080911603811127C08091BD -:102D500018038F7009F4D1C08093E9002091EB0033 -:102D600020FF1CC0933021F48091EB00806214C0DE -:102D70009091EB0090619093EB0021E030E0A9018D -:102D800002C0440F551F8A95E2F74093EA00109263 -:102D9000EA008091EB0088608093EB001092E900DC -:102DA0008091E800877F86C08111A7C0109116032B -:102DB0001F778091E3008078812B8093E3008091DE -:102DC000E800877F8093E8000E9462148091E80009 -:102DD00080FFFCCF8091E30080688093E3001111B5 -:102DE00002C082E001C083E08093130386C0805854 -:102DF000823008F082C080911603909117038C3DB9 -:102E000053E0950779F583E08A838AE289834FB797 -:102E1000F894DE01139620E03EE051E2E32FF0E06B -:102E200050935700E49120FF03C0E295EF703F5F9D -:102E3000EF708E2F90E0EA3010F0C79601C0C09678 -:102E40008D939D932F5F243149F74FBF8091E80008 -:102E5000877F8093E8006AE270E0CE0101960E94CD -:102E6000691314C0AE014F5F5F4F609118030E9459 -:102E7000B012BC01009709F440C09091E800977F20 -:102E80009093E80089819A810E94CC138091E80098 -:102E90008B778093E80031C0803879F58091E80025 -:102EA000877F8093E80080910F038093F1008091E9 -:102EB000E8008E778093E8000E9462141EC08111A2 -:102EC0001CC0909116039230C0F48091E800877F77 -:102ED0008093E80090930F030E94621480910F0387 -:102EE000811106C08091E30087FD02C081E001C02E -:102EF00084E0809313030E94AE118091E80083FF69 -:102F00000AC08091E800877F8093E8008091EB0001 -:102F100080628093EB00AA960FB6F894DEBF0FBED6 -:102F2000CDBFDF91CF911F9108950895CF938091E8 -:102F300013038823A1F0C091E900CF709091EC00B9 -:102F4000892F817090FD80E8C82B1092E900809154 -:102F5000E80083FD0E944416CF70C093E900CF9132 -:102F6000089590939302809392020895E0919202C3 -:102F7000F0919302309721F00190F081E02D0994B7 -:102F800080E00895E0919202F0919302309721F051 -:102F90000280F381E02D09940895E0919202F0916E -:102FA0009302309721F00480F581E02D0994089573 -:102FB00020919002309191028217930771F09093C3 -:102FC000910280939002E0919202F09193023097E7 -:102FD00021F00680F781E02D0994089520918E025A -:102FE00030918F028217930771F090938F02809334 -:102FF0008E02E0919202F0919302309721F00084CA -:10300000F185E02D0994089508950C9404180E9408 -:103010008B230E94DC090E9411240C94C0285F922B -:103020006F927F928F929F92AF92BF92CF92DF92D8 -:10303000EF92FF920F931F93CF93DF9300D000D0B6 -:103040001F92CDB7DEB70E94210A9DE9C92E92E0FA -:10305000D92E03E010E0AA24A394B12C502E802F87 -:103060000E949C0A4C01F601729062906F016826E2 -:10307000792661147104A1F40150110978F78FEFDA -:1030800089838A831B820E9494238160782F9D8389 -:103090008C8349815A816B818D810E94BF1838C011 -:1030A0008091F20281FD0E94A50A2BE030E07501BB -:1030B000022E02C0EE0CFF1C0A94E2F7C701862123 -:1030C0009721892B09F129835A828E209F2091E034 -:1030D000892809F490E09B830E9494238160782FD3 -:1030E0009D838C8349815A816B818D810E94BF1899 -:1030F000000F111FF801EB56FD4F80819181E826EA -:10310000F926F182E08204C02150310980F6B4CF63 -:103110000E94F825109194020E94B6171817D1F05A -:103120000E94B617809394020F900F900F900F900B -:103130000F90DF91CF911F910F91FF90EF90DF9053 -:10314000CF90BF90AF909F908F907F906F905F9047 -:103150000C94C6090F900F900F900F900F90DF9175 -:10316000CF911F910F91FF90EF90DF90CF90BF9084 -:10317000AF909F908F907F906F905F900895CF93C6 -:10318000DF93CDB7DEB72B970FB6F894DEBF0FBE37 -:10319000CDBF4F83588769877A878B87DE01119669 -:1031A00086E0FD0111928A95E9F785E0FE013796E8 -:1031B00001900D928A95E1F749815A816B817C815A -:1031C0008D819E810E94361F2B960FB6F894DEBF2C -:1031D0000FBECDBFDF91CF910895CF93882309F41F -:1031E000C2C0C82F823859F40E94B61781FDBBC0F7 -:1031F00089E30E9410220E94DD2289E30CC08338FB -:1032000079F40E94B61780FDAEC083E50E941022BB -:103210000E94DD2283E50E945222CF910C94DD2290 -:10322000843859F40E94B61782FD9DC087E40E943D -:1032300010220E94DD2287E4EECF8CEF8C0F813AC2 -:1032400048F48C2F0E94282881118DC08C2F0E9459 -:103250001022E3CF80E28C0F883048F4C77081E001 -:1032600001C0880FCA95EAF70E949622D6CF8BE557 -:103270008C0F833078F4C53A29F0C63A31F083E8F0 -:1032800090E005C081E890E002C082E890E0CF9134 -:103290000C94D81788E58C0F833108F064C0C83AC5 -:1032A00039F1C93A41F1CA3A49F1CB3A51F1CC3A34 -:1032B00059F1CD3A61F1C03B69F1CE3A71F1CF3AA3 -:1032C00079F1C13B81F1C23B89F1C33B91F1C43B30 -:1032D00099F1C53BA1F1C63BA9F1C73BB1F1C83B90 -:1032E000B9F1C93BC1F1CA3BC9F180E090E038C0F7 -:1032F00082EE90E035C089EE90E032C08AEE90E038 -:103300002FC085EB90E02CC086EB90E029C087EBC6 -:1033100090E026C08CEC90E023C08DEC90E020C0C3 -:1033200083E891E01DC08AE891E01AC082E991E04B -:1033300017C084E991E014C081E292E011C083E2F9 -:1033400092E00EC084E292E00BC085E292E008C0F9 -:1033500086E292E005C087E292E002C08AE292E053 -:10336000CF910C94EE17CF910895882309F44BC0A8 -:10337000823859F40E94B61781FF45C089E30E9444 -:1033800010220E94DD2289E30CC0833871F40E9470 -:10339000B61780FF38C083E50E9410220E94DD220C -:1033A00083E50E9452220C94DD22843859F40E9455 -:1033B000B61782FF28C087E40E9410220E94DD22F7 -:1033C00087E4EFCF9CEF980F913A58F390E2980F73 -:1033D000983050F4877091E001C0990F8A95EAF710 -:1033E000892F0E949C22DFCF9BE5980F933020F419 -:1033F00080E090E00C94D817885A833120F480E064 -:1034000090E00C94EE170895882321F00E949622F4 -:103410000C94DD220895882321F00E949C220C94B4 -:10342000DD2208957F928F929F92AF92BF92CF92AA -:10343000DF92EF92FF920F931F93CF93DF931F9230 -:10344000CDB7DEB77C01C62E772EFC010581029533 -:103450000F70128111110E94B3220E940922882349 -:1034600079F0112369F080E28C0D883048F082E019 -:103470000E94F2210E94092291E0D82ED92601C093 -:10348000D12CE72DE295EF70F0E0E05AFF4F0C945D -:10349000512D872D807F072D0F70882311F0029505 -:1034A000007F112389F0002309F499C180E28C0D7B -:1034B000883020F4802F0E94962203C0802F0E9423 -:1034C000A6220E94DD228BC18C2D0E94B5190023FB -:1034D00009F4C3C180E28C0D883020F4802F0E9453 -:1034E0009C2203C0802F0E94AC220E94DD22B5C125 -:1034F000872D807F972D9F70803211F4892F03C014 -:10350000892F8295807FCC2021F0F1E0CF16A1F0A9 -:103510001DC0112339F0002319F1013009F50E9473 -:10352000C6229BC1002319F0013009F496C189839A -:103530000E94C922898110C1112321F0063008F0B0 -:103540008CC10EC0053008F088C106C1112359F0A6 -:10355000002331F0F701958190FF41C19F70958361 -:103560000E94041A7AC1002309F4F6C03EC1872DD7 -:1035700086958695837090E0009719F0019761F029 -:103580006CC1112321F08C2D972D937002C080E027 -:1035900090E00E94D81761C1112321F08C2D972D46 -:1035A000937002C080E090E00E94EE1756C18C2D0F -:1035B000112319F00E94002502C00E9468250E9474 -:1035C000ED254BC1872D837009F052C0111145C103 -:1035D0008C2D829586958770880F880F9C2D9F7003 -:1035E000892E912CA12CB12C082E04C0880C991C7A -:1035F000AA1CBB1C0A94D2F7C4FE14C00FE010E052 -:1036000020E030E0B901A80104C0440F551F661F37 -:10361000771F8A95D2F7CB01BA0160957095809596 -:10362000909503C060E070E0CB01272D269526958C -:10363000237030E02230310569F02330310589F004 -:10364000682979298A299B292130310571F00E9446 -:103650007E2003C1682979298A299B290E949A2002 -:10366000FCC00E947E20C501B4010E946220F5C00A -:10367000112319F0872D817001C08695882309F4E4 -:10368000ECC08C2D829586958770880F880F9C2DB5 -:103690009F70892E912CA12CB12C082E04C0880C6F -:1036A000991CAA1CBB1C0A94D2F7C4FE14C00FE0DC -:1036B00010E020E030E0B901A80104C0440F551F1C -:1036C000661F771F8A95D2F7CB01BA016095709576 -:1036D0008095909503C060E070E0CB01272D269582 -:1036E00026952370422F50E04230510569F0433057 -:1036F000510589F0682979298A299B29413051058A -:1037000071F00E945821A9C0682979298A299B292A -:103710000E947421A2C00E945821C501B4010E94D8 -:103720003C219BC08C2D90E0FC01E05EF109E5316D -:10373000F10508F050C0E059FF4F0C94512D0C2DAD -:103740000F70872D8F71112321F00E94D520802FBB -:1037500007CF0E94F620802F0E940B1A7EC01123F3 -:1037600041F0053008F079C0872D8F710E941B2130 -:1037700074C0063008F071C0F7CF112339F0872DDF -:103780008F710E94D52069C01123C9F3872D8F71D5 -:103790000E94F62062C0112329F0872D8F710E94AC -:1037A000C0205BC00E94B62058C0112351F0172DD5 -:1037B0001F71812F0E94D52063E0812F0E94E92193 -:1037C0004CC081E00E94F221023008F446C082E041 -:1037D0000E94F22142C0112331F0002381F28C2D8E -:1037E0000E94ED183AC0002389F28C2D0E94B51971 -:1037F00034C0472D4F706C2DC7010E941B040E94DE -:10380000DA1F2BC0111129C0472D4F7050E04230F4 -:103810005105B9F04CF44115510581F04130510585 -:10382000E1F40E94E82819C04330510569F04430A2 -:10383000510599F48C2D0E943A290FC00E94D1287D -:103840000CC00E94042909C00E94172906C0472DF8 -:103850004F706C2DC7010E94A706DD20F9F00E9471 -:10386000E52180FD1BC0F70112820E94DF210E942A -:10387000D520C7010E945D1C0E94DF210F90DF91BF -:10388000CF911F910F91FF90EF90DF90CF90BF905D -:10389000AF909F908F907F900C94F6200F90DF91C7 -:1038A000CF911F910F91FF90EF90DF90CF90BF903D -:1038B000AF909F908F907F9008950F931F93CF9319 -:1038C000DF93EC01888199812B813C81232BB9F016 -:1038D0009F3F11F48F3F99F0CE010E94A6048823E8 -:1038E00071F0688179818A810E94DB218C010E94BC -:1038F00090210E945720B801CE010E94121ADF9138 -:10390000CF911F910F9108950E94B3220E94C3226C -:103910000E9488220E94DD220E949E260E94ED25A0 -:1039200080E090E00E94D81780E090E00C94EE17C1 -:103930000E94A3220C94841C0E94D021292F22953E -:103940002F7030E02C3031054CF42A3031056CF406 -:103950002250310922303105A8F407C02C3031053E -:1039600069F02F30310551F00DC0803F69F018F437 -:10397000803E40F409C0843F29F406C093FB8827A9 -:1039800080F9089580E0089581E00895CF93DF9352 -:1039900000D000D01F92CDB7DEB70F900F900F90E0 -:1039A0000F900F90DF91CF910895CF93DF9300D0C8 -:1039B00000D000D0CDB7DEB726960FB6F894DEBFA4 -:1039C0000FBECDBFDF91CF9108951F93CF93DF93AB -:1039D000C0919D0216E080919E02C81799F0D0E038 -:1039E0001C9FF0011D9FF00D1124E156FD4F4081F9 -:1039F000518162817381848195810E94D51C2196B9 -:103A0000C770E9CFDF91CF911F9108954091CF0208 -:103A10005091D0026091D1027091D2028091D30274 -:103A20009091D4020C94D51C8091D40282958F7011 -:103A300009F054C08091D102882309F44FC08091CD -:103A40009D02A0919E026091CF027091D0024091A0 -:103A5000D2025091D302B6E08A1709F43FC090E039 -:103A600041155105C1F17F3F11F46F3FA1F1B89F9E -:103A7000F001B99FF00D1124E156FD4F2181721321 -:103A80002AC02081621327C02281211124C02381F2 -:103A900034812417350710F421503109241B350BCC -:103AA000283C3105C0F42091D4022F70206120936E -:103AB000D40226E0289FF001299FF00D1124EC5537 -:103AC000FD4F80818F70806180838FEC92E00E9437 -:103AD0005D1C0C94E51C01968770BECF0895CF92B3 -:103AE000DF92EF92FF920F931F93CF93DF93CDB7A7 -:103AF000DEB762970FB6F894DEBF0FBECDBF8C0164 -:103B000085E0F801DE011D9601900D928A95E1F79E -:103B1000D8014C9111965C91119712966C91129765 -:103B20001396CD90DC9014973091CF027091D00213 -:103B30008091D2029091D302009709F46BC17F3F2C -:103B400019F43F3F09F466C1E090D102EE2009F478 -:103B5000C0C02091D402C816D90628F0F601E81B8F -:103B6000F90BCF0104C0809590958C0D9D1DFF240D -:103B7000F394883C910578F0F12C207F09F0C6C0C1 -:103B80007C2DD98AC88A89890E94C61C8FEC92E054 -:103B90000E945D1CB1C0822F807F09F046C0751362 -:103BA00014C0341312C0611110C02F702061209313 -:103BB000D4020E94061D8FEC92E00E945D1C809151 -:103BC000D402D80115968C932EC0CD2819F15F3FF1 -:103BD00011F44F3FF9F0F62E61111CC080919D0247 -:103BE00020919E0236E0821709F45AC090E0389F77 -:103BF000F001399FF00D1124E156FD4F71815713EB -:103C000006C07081471303C07281711103C0019611 -:103C10008770E9CFF62E662309F418C18091D4028B -:103C200081608093D402F12C11C1751308C0341344 -:103C300006C0611104C08091D402D801C3C04D8771 -:103C40005E878D859E856A8B0E949C1C6A8988236D -:103C5000E1F16623D1F12091D402822F82958F70F9 -:103C600090E0029774F08091CF029091D0029887F3 -:103C70008F831986DB86CA862C87CE0107960E9421 -:103C80005D1C86E0F801AFECB2E001900D928A95E0 -:103C9000E1F70E94141D0E94061DFF24F394D6C074 -:103CA0004D875E878D859E850E94D021292F229584 -:103CB0002F7030E0223031050CF0BCC09F7009F04D -:103CC000B6C0805E883008F4C1C0C8010E945D1C87 -:103CD000E4CFC816D90608F453C0F601E81BF90B67 -:103CE000CF01883C910508F450C0F12C7C2DD98A75 -:103CF000C88A89890E94C61CEFECF2E086E0DF01E9 -:103D00001D928A95E9F70E94061DA0C0751314C084 -:103D1000341312C0611110C08091D402F801858360 -:103D2000C8010E945D1C86E0EFECF2E0DF011D920D -:103D30008A95E9F7FE2C8AC04D875E878D859E8522 -:103D40006A8B0E949C1C6A89882309F4BECF662373 -:103D500009F4BBCF2091D402822F82958F7090E01E -:103D600002970CF48ECF8091CF029091D0029A836B -:103D700089831B82DD82CC822E83CE0101967FCF88 -:103D8000809590958C0D9D1DACCFF62E662309F481 -:103D90009CCF75132EC034132CC02091D40220FD6B -:103DA0001FC0822F82958F70D9F0D80115962C9361 -:103DB00015978F3049F08F5F982F9295907F822FC3 -:103DC0008F70892B15968C93C8010E945D1C86E02C -:103DD000F801AFECB2E001900D928A95E1F793CF34 -:103DE00086E0F801AFECB2E001900D928A95E1F720 -:103DF0002DC04D875E878D859E850E949C1C8111FC -:103E000040CF8091D40281608093D402C8010E9487 -:103E10005D1C1CC0662309F458CF4D875E878D85D5 -:103E20009E850E949C1C882309F44FCF2ACF8111C4 -:103E300048CF0CC0243031050CF047CF9F7009F4F7 -:103E400040CFF8019581907F09F03BCF8F2D62968E -:103E50000FB6F894DEBF0FBECDBFDF91CF911F919B -:103E60000F91FF90EF90DF90CF9008951F93CF9325 -:103E7000DF93CDB7DEB72C970FB6F894DEBF0FBE39 -:103E8000CDBF4F83588769877A878B879C87CE0100 -:103E900007960E946F1D882369F08F8198852A8577 -:103EA0003B85232BF1F19F3F09F063C08F3F09F061 -:103EB00060C037C086E0FE013796DE0111960190A2 -:103EC0000D928A95E1F76F817885EA85FB853097B9 -:103ED00041F17F3F11F46F3F21F120919E0230E0CC -:103EE000C90101968770992740919D0250E084177F -:103EF000950709F447C069837A83FD83EC8396E0D4 -:103F0000929FD001939FB00D1124A156BD4FFE0189 -:103F1000319601900D929A95E1F780939E020E944E -:103F2000E51C16E080919D0290919E028917C1F1D7 -:103F3000189FC001112481569D4F0E946F1D882338 -:103F400079F1E0919D021E9FF0011124E156FD4F91 -:103F50004081518162817381848195810E94D51C49 -:103F600080919D0290E001968770992780939D0231 -:103F7000D9CF4F81588569857A858B859C850E942C -:103F8000D51CCFCF0E94981C10929E0210929D02C9 -:103F9000EFECF2E086E0DF011D928A95E9F7C1CFF0 -:103FA0002C960FB6F894DEBF0FBECDBFDF91CF9138 -:103FB0001F910895EF92FF920F931F93CF93DF937A -:103FC0008C01009709F46CC0F12CEE24E394E80115 -:103FD0002196F8018491843740F4843008F051C070 -:103FE000813081F0823019F15BC0853709F444C01B -:103FF000A8F19CE7980F903708F052C08F770E9485 -:10400000B51941C00E5F1F4FFE01C49180E28C0FB5 -:10401000883048F4C7708E2D01C0880FCA95EAF722 -:104020000E94B62214C08C2F0E94ED182DC00E5F86 -:104030001F4FFE01C49180E28C0F883058F4C77086 -:104040008E2D01C0880FCA95EAF70E94BC220E94FB -:10405000DD221AC08C2F0E94B51916C00E5F1F4FAB -:10406000FE01C491CC2381F08FE99FE00197F1F725 -:1040700000C00000C150F6CF0E5F1F4FFE01F4904C -:1040800003C00E94ED188E018F2D882309F49FCF65 -:10409000EFE9FFE03197F1F700C000008150F5CF64 -:1040A000DF91CF911F910F91FF90EF9008950895A8 -:1040B0006093D9027093DA028093DB029093DC0262 -:1040C0000C94841C0F931F930091D9021091DA0273 -:1040D0002091DB023091DC02DC01CB01802B912BA3 -:1040E000A22BB32B8093D9029093DA02A093DB0228 -:1040F000B093DC021F910F910C94841C0F931F93BB -:104100000091D9021091DA022091DB023091DC0299 -:10411000DC01CB0180239123A223B3238093D90216 -:104120009093DA02A093DB02B093DC021F910F910F -:104130000C94841C0F931F930091D9021091DA0202 -:104140002091DB023091DC02DC01CB01802791273A -:10415000A227B3278093D9029093DA02A093DB02BF -:10416000B093DC021F910F910C94841C1092D50225 -:104170001092D6021092D7021092D8020C94841C8E -:1041800041E050E060E070E004C0440F551F661F3E -:10419000771F8A95D2F74093D5025093D602609349 -:1041A000D7027093D8020C94841C41E050E060E088 -:1041B00070E004C0440F551F661F771F8A95D2F721 -:1041C0008091D5029091D602A091D702B091D802E9 -:1041D000482B592B6A2B7B2B4093D5025093D60248 -:1041E0006093D7027093D8020C94841C41E050E095 -:1041F00060E070E004C0440F551F661F771F8A956A -:10420000D2F740955095609570958091D502909128 -:10421000D602A091D702B091D802482359236A232D -:104220007B234093D5025093D6026093D7027093BC -:10423000D8020C94841C41E050E060E070E004C0BF -:10424000440F551F661F771F8A95D2F78091D502BC -:104250009091D602A091D702B091D8024827592751 -:104260006A277B274093D5025093D6026093D702EA -:104270007093D8020C94841C0F931F930091D50265 -:104280001091D6022091D7023091D802DC01CB01E7 -:10429000802B912BA22BB32B8093D5029093D60227 -:1042A000A093D702B093D8021F910F910C94841C55 -:1042B0000F931F930091D5021091D6022091D7023F -:1042C0003091D802DC01CB0180239123A223B323B8 -:1042D0008093D5029093D602A093D702B093D802D0 -:1042E0001F910F910C94841C0F931F930091D50282 -:1042F0001091D6022091D7023091D802DC01CB0177 -:1043000080279127A227B3278093D5029093D602C6 -:10431000A093D702B093D8021F910F910C94841CE4 -:104320000895CF92DF92EF92FF920F931F93CF9356 -:10433000DF938C01C090D902D090DA02E090DB02CA -:10434000F090DC028091D5029091D602A091D70224 -:10435000B091D802C82AD92AEA2AFB2ACFE1D0E0B4 -:10436000D701C6010C2E04C0B695A79597958795E1 -:104370000A94D2F780FF06C0B8018C2F0E942C0946 -:10438000019721F4219760F780E001C08C2FDF9125 -:10439000CF911F910F91FF90EF90DF90CF900895F4 -:1043A000CF93DF93EC010E949121BE010E942C0962 -:1043B000DF91CF910895CB010E94D0210895809183 -:1043C000DD0285958595859508958091DD0287703C -:1043D000089598E0899F90011124262B2093DD02F7 -:1043E0000C94D5202091DD02809582238093DD02FC -:1043F000982F977069F430E0482F552747FD509566 -:104400002417350729F08595859585950C94F62018 -:1044100008959091DD02977081E009F480E008959D -:1044200090911501992321F090911601911109C0E5 -:104430002091170130911801F90132969FEF40E069 -:104440001FC0982F9695969596959F3050F5E091C0 -:104450001701F0911801E90FF11D877021E030E09C -:10446000A90102C0440F551F8A95E2F7CA01918144 -:10447000892B818308959F3F39F04F5F4E3041F083 -:1044800051915813F8CF0DC05111F7CF942FF5CF9C -:104490009F3F39F0F901E90FF11D97FDFA958283ED -:1044A0000895089590911501992321F09091160196 -:1044B000911109C02091170130911801F90132962C -:1044C000205F3F4F1FC0982F9695969596959F30E9 -:1044D000F0F4E0911701F0911801E90FF11D8770D8 -:1044E00021E030E0A90102C0440F551F8A95E2F790 -:1044F000CA01809591818923818308953196E217BD -:10450000F30729F090819813F9CF1082F7CF08951F -:1045100081E090E0E0911701F0911801E80FF91F98 -:104520001082019680319105A9F708959091F102CA -:10453000892B8093F102089580959091F10289234F -:104540008093F10208951092F10208959091F00283 -:10455000892B8093F002089580959091F002892331 -:104560008093F00208951092F00208959091EF0266 -:10457000892B8093EF02089580959091EF02892313 -:104580008093EF0208951092EF0208958093DE0267 -:1045900008951092DE0208958091170190911801FC -:1045A000FC0131969C01205F3F4F80E09191911179 -:1045B0008F5FE217F307D1F70895E0911701F091AB -:1045C00018018091F1028083E0911701F0911801A8 -:1045D00090818091F002892B8083E0911701F09106 -:1045E000180190818091EF02892B80838091DE02F7 -:1045F000882361F0E0911701F09118019081892BD7 -:1046000080830E94CC2281111092DE0280911701DA -:10461000909118010C94C21720E0009739F0AC017A -:1046200041505109842395232F5FF7CF822F08959E -:1046300080911303843039F11092F30220E488E171 -:1046400090E00FB6F894A895809360000FBE209379 -:10465000600080E00E94820380E00E94C60983B768 -:10466000817F846083BF83B7816083BF789488959E -:1046700083B78E7F83BF88E10FB6F8948093600084 -:10468000109260000FBE08950895089580E00E9482 -:1046900082030E9444230E94210A0E9445230E9413 -:1046A000A60A91E0811101C090E0892F08950E942F -:1046B000981C80E00E9482030E94C0280E94B617C6 -:1046C0000C94C6091F920F920FB60F9211248F936C -:1046D0009F93AF93BF938091F302811113C0809198 -:1046E000F4029091F502A091F602B091F702419682 -:1046F000A11DB11D8093F4029093F502A093F602E0 -:10470000B093F702BF91AF919F918F910F900FBE21 -:104710000F901F90189582E084BD93E095BD9AEFAD -:1047200097BD80936E0008952FB7F8948091F4029E -:104730009091F502A091F602B091F7022FBF089573 -:10474000CF92DF92EF92FF920F931F932FB7F894BF -:104750004091F4025091F5026091F6027091F702D7 -:104760002FBF6A017B01EE24FF248C0120E030E0A2 -:10477000C016D106E206F30610F4415051099A0121 -:10478000281B390BC9011F910F91FF90EF90DF900B -:10479000CF9008951F920F920FB60F9211248F930E -:1047A0009F93AF93BF938091F4029091F502A091F3 -:1047B000F602B091F7020196A11DB11D8093F4029B -:1047C0009093F502A093F602B093F702BF91AF91D8 -:1047D0009F918F910F900FBE0F901F9018950E9480 -:1047E000B314F8942FEF87EA91E62150804090406F -:1047F000E1F700C0000087E090EBDC0180931E032E -:1048000090931F03A0932003B09321039CE088E1C1 -:104810000FB6F894A895809360000FBE9093600047 -:10482000FFCF0E945024811102C00E942C240E94BC -:104830005B248093F2020E94632480931C0387FB15 -:10484000882780F9809316010E945F24682F70E00A -:1048500080E090E00C9458206DEE7EEF80E090E0D8 -:104860000E94772D60E082E090E00E94652D60E07C -:1048700083E090E00E94652D60E084E090E00E947B -:10488000652D60E085E090E00E94652D60E086E0A7 -:1048900090E00E94652D6FEF87E090E00C94652D0D -:1048A00080E090E00E945F2D21E08D3E9E4F09F058 -:1048B00020E0822F089582E090E00C94572D83E051 -:1048C00090E00C94572D84E090E00C94572D682FC5 -:1048D00084E090E00C94652D86E090E00C94572DD8 -:1048E000682F86E090E00C94652D87E090E00C94B2 -:1048F000572D682F87E090E00C94652D8091FA0287 -:1049000080FF0BC060911C0185E0689FB0011124FD -:1049100075956795759567952BC081FF09C0609166 -:104920001C0185E0689FB00111247595679520C032 -:1049300082FF07C060911C0185E0689FB0011124CF -:1049400017C09091FB029923D1F060911B0196173B -:1049500088F720911C0185E0289F90011124929FE7 -:10496000A001939F500D112470E0CA010E943D2DBB -:104970006038710540F46115710539F002C065E0D9 -:1049800070E0862F08958FE7089581E00895809163 -:10499000FA0280FF08C060911A0170E07595679572 -:1049A0007595679521C081FF06C060911A0170E07E -:1049B0007595679519C082FF04C060911A0170E077 -:1049C00010C09091FB029923C1F0609119019617D4 -:1049D000A0F780911A01899FC001112470E00E9404 -:1049E0003D2D6038710528F46115710521F0862F81 -:1049F00008958FE7089581E0089561E070E0F4CFB5 -:104A0000803F21F40E947E24819504C0813F29F4D7 -:104A10000E947E248093FE020895823F21F40E942A -:104A20007E24819504C0833F29F40E947E248093D4 -:104A3000FD020895893F19F40E94C72405C08A3FEA -:104A400031F40E94C72481958093FF0208958B3F23 -:104A500021F40E94C724819504C08C3F29F40E9450 -:104A6000C724809300030895843F21F48091FC02C1 -:104A7000816017C0853F21F48091FC02826011C0E3 -:104A8000863F21F48091FC0284600BC0873F21F4B3 -:104A90008091FC02886005C0883F31F48091FC025F -:104AA00080618093FC0208958D3F21F48091FA0289 -:104AB00081600BC08E3F21F48091FA02826005C0B4 -:104AC0008F3F29F48091FA0284608093FA0208955E -:104AD000803F39F48091FE0287FF6CC01092FE0285 -:104AE00069C0813F29F48091FE021816BCF362C0B0 -:104AF0009091FD02823F29F497FF5CC01092FD0265 -:104B000059C0833F19F41916CCF354C0893F41F4BE -:104B10008091FF0218160CF04DC01092FF024AC09F -:104B20008A3F29F48091FF0287FF44C0F6CF8B3F74 -:104B300039F48091000387FF3DC0109200033AC012 -:104B40008C3F29F4809100031816BCF333C0843FD6 -:104B500021F48091FC028E7F17C0853F21F4809163 -:104B6000FC028D7F11C0863F21F48091FC028B7F77 -:104B70000BC0873F21F48091FC02877F05C0883FEE -:104B800031F48091FC028F7E8093FC0213C08D3F34 -:104B900021F48091FA028E7F0BC08E3F21F4809128 -:104BA000FA028D7F05C08F3F29F48091FA028B7F36 -:104BB0008093FA028091FD0281110EC08091FE0265 -:104BC00081110AC08091FF02811106C0809100030B -:104BD000811102C01092FB0208958CEF92E00E94B6 -:104BE000CD170E9494239093F9028093F8020895C0 -:104BF0001F93CF93DF938091F8029091F9020E9466 -:104C0000A023AC019091FB02992321F020911D017A -:104C100030E006C020911E018AE0289F90011124F7 -:104C20004217530708F486C08091FD02C091FE022E -:104C3000D091FF0210910003811107C0C11176C00D -:104C4000D11174C0111172C075C09F3F19F09F5FE0 -:104C50009093FB02181624F40E947E248093FD0298 -:104C60008091FD0287FF05C00E947E24819580937C -:104C7000FD021C1624F40E947E248093FE02809183 -:104C8000FE0287FF05C00E947E2481958093FE026C -:104C90006091FD02662339F1C091FE02CC2319F127 -:104CA000772767FD7095872F972F0E945F2A23E350 -:104CB00033E343E35FE30E946F2B0E942C2A60934F -:104CC000FD026C2F772767FD7095872F972F0E9425 -:104CD0005F2A23E333E343E35FE30E946F2B0E94E9 -:104CE0002C2A6093FE021D1624F40E94C724809390 -:104CF000FF028091FF0287FF05C00E94C7248195B3 -:104D00008093FF02111624F40E94C72480930003AD -:104D10008091000387FF05C00E94C724819580937E -:104D20000003DF91CF911F910C94ED259F3F09F077 -:104D30008ECF96CFDF91CF911F910895ECEFF2E0E7 -:104D400085E0DF011D928A95E9F71092FB0210922F -:104D5000FA020895833081F128F4813059F08230CD -:104D6000D1F00895853009F449C0B8F1863009F4CE -:104D700056C0089580911E01262F30E0280F311D66 -:104D80002F3F310524F4680F60931E0108958FEFC3 -:104D900080931E01089580911D01262F30E0280F79 -:104DA000311D2F3F310524F4680F60931D010895D4 -:104DB0008FEF80931D01089580911C01262F30E014 -:104DC000280F311D2F3F310524F4680F60931C011B -:104DD00008958FEF80931C01089580911B01262F69 -:104DE00030E0280F311D2F3F310524F4680F609308 -:104DF0001B0108958FEF80931B01089580911A0184 -:104E0000262F30E0280F311D2F3F310524F4680F85 -:104E100060931A0108958FEF80931A01089580918D -:104E20001901262F30E0280F311D2F3F310524F4C2 -:104E3000680F6093190108958FEF80931901089509 -:104E4000833011F128F4813049F0823091F00895D7 -:104E5000853081F120F18630C1F1089580911E01E5 -:104E6000681720F4861B80931E01089510921E017E -:104E7000089580911D01681720F4861B80931D0101 -:104E8000089510921D01089580911C01681720F467 -:104E9000861B80931C01089510921C010895809137 -:104EA0001B01681720F4861B80931B010895109244 -:104EB0001B01089580911A01681720F4861B8093C6 -:104EC0001A01089510921A01089580911901681726 -:104ED00020F4861B809319010895109219010895FA -:104EE0000F931F93873208F048C08E3108F08DC0B1 -:104EF000803109F477C008F5873009F461C068F49F -:104F0000863009F09DC08091F202817F8E7F809370 -:104F1000F20281E08093020394C08B3009F489C0CF -:104F20008E3009F08DC08091F20282FB222720F999 -:104F300091E0922790FB82F95EC0863109F479C036 -:104F400060F4813109F07CC00E94981C9091160198 -:104F500081E08927809316016CC0893109F469C00A -:104F60008B3109F06DC08091F20281FB222720F97C -:104F700091E0922790FB81F93EC0883309F459C033 -:104F800050F4893209F457C0853309F454C087328C -:104F900009F451C055C0833409F44DC028F48A3354 -:104FA00008F44EC0895332C0883409F049C00E94C9 -:104FB000981C0E94D60A0E949D040E94EF2339C0CB -:104FC0009091F202892F8095817080FB90F929F0F1 -:104FD000966098609093F20234C0997F977F909387 -:104FE000F20227C08091F20283FB222720F991E090 -:104FF000922790FB83F98093F2029923D1F080915C -:10500000F20281608093F20214C08D5141E050E0C1 -:1050100060E070E08A019B0104C0000F111F221F95 -:10502000331F8A95D2F7C901B8010E9458200E9407 -:10503000981C81E006C061E070E080E090E0F5CF70 -:1050400080E01F910F91089580E0089580E0089519 -:10505000CF93C82F80910203813069F018F082301D -:10506000C9F184C0E0911701F0911801808182326A -:1050700009F07EC007C0E0911701F091180180810E -:10508000823261F48C2F0E942428811104C08C2F5D -:105090000E9470271DC081E090E01AC08C2F0E94F2 -:1050A0002628811114C0C43179F048F4CB3079F04E -:1050B000C03109F061C082E08093020308C0C932A8 -:1050C00019F0C83321F058C01092020355C081E096 -:1050D000817054C0C93291F120F5C43179F1B0F436 -:1050E000C73009F047C08EE180931E0182E38093B0 -:1050F0001D018AE080931C0184E180931B0188E0FC -:1051000080931A0188E28093190134C0CE51C630D1 -:1051100088F5EC2FF0E0EA54FE4F80818093010384 -:1051200029C0CE34E9F020F4CB3421F56AE013C075 -:10513000C13579F0C235F1F461E00DC08091010311 -:10514000882319F01092010315C081E080930203B7 -:1051500015C061E006C0809101030E94AA260AC022 -:105160006AE0809101030E94202704C0109202038C -:1051700080E004C081E002C080E0AACFCF91089512 -:105180000E945024811102C00E942C240E946C2491 -:1051900080931D0380FF02C0869501C080E00C94BF -:1051A000820380911D03982F9695292F30E023309C -:1051B00031054CF49F5F990F8170892B816080933A -:1051C0001D030E94702480911D0386950C94820318 -:1051D00080911D03982F969591F09158990F8170A9 -:1051E000892B80931D038E7F91E009F490E08091DC -:1051F0001D0390FB80F980931D030E947024809111 -:105200001D0386950C94820380911D03982F909521 -:1052100090FB80F980931D030E94702480911D03F0 -:1052200080FF02C0869501C080E00C9482039091BB -:105230001D03892F86958F5F8F779170843028F4B6 -:10524000880F892B80931D0302C090931D038091CA -:105250001D038E7F91E009F490E080911D0390FB87 -:1052600080F980931D030E94702480911D03869510 -:105270000C94820320911D03922F96958927982FD5 -:10528000990F822F8170892B80931D038E7F91E06F -:1052900009F490E080911D0390FB80F980931D0339 -:1052A0000E94702480911D0386950C948203809146 -:1052B0001D03869508955058BB27AA270ED0D1C14B -:1052C000C2D130F0C7D120F031F49F3F11F41EF469 -:1052D000B7C10EF4E095E7FB9FC1E92FD3D180F36E -:1052E000BA17620773078407950718F071F49EF5E3 -:1052F000EBC10EF4E0950B2EBA2FA02D0B01B901D6 -:1053000090010C01CA01A0011124FF27591B99F03B -:10531000593F50F4503E68F11A16F040A22F232F47 -:10532000342F4427585FF3CF469537952795A79597 -:10533000F0405395C9F77EF41F16BA0B620B730B3E -:10534000840BBAF09150A1F0FF0FBB1F661F771FAF -:10535000881FC2F70EC0BA0F621F731F841F48F464 -:10536000879577956795B795F7959E3F08F0B3CFEA -:105370009395880F08F09927EE0F979587950895D4 -:1053800027D108F481E008950CD06BC163D140F0BF -:105390005AD130F021F45F3F19F03EC1511195C14F -:1053A0004FC170D198F39923C9F35523B1F3951BDD -:1053B000550BBB27AA2762177307840738F09F5F36 -:1053C0005F4F220F331F441FAA1FA9F333D00E2EA5 -:1053D0003AF0E0E830D091505040E695001CCAF712 -:1053E00029D0FE2F27D0660F771F881FBB1F2617D7 -:1053F00037074807AB07B0E809F0BB0B802DBF01AA -:10540000FF2793585F4F2AF09E3F510568F004C173 -:105410005CC15F3FECF3983EDCF38695779567952A -:10542000B795F7959F5FC9F7880F911D969587955A -:1054300097F90895E1E0660F771F881FBB1F621779 -:1054400073078407BA0720F0621B730B840BBA0B37 -:10545000EE1F88F7E095089504D06894B11135C126 -:10546000089518D188F09F5790F0B92F9927B75118 -:10547000A0F0D1F0660F771F881F991F1AF0BA9518 -:10548000C9F712C0B13081F01FD1B1E008951CC13D -:10549000672F782F8827B85F39F0B93FCCF386950E -:1054A00077956795B395D9F73EF49095809570956B -:1054B00061957F4F8F4F9F4F0895E89409C097FBE8 -:1054C0003EF490958095709561957F4F8F4F9F4FDB -:1054D0009923A9F0F92F96E9BB279395F69587951F -:1054E00077956795B795F111F8CFFAF4BB0F11F4E2 -:1054F00060FF1BC06F5F7F4F8F4F9F4F16C0882389 -:1055000011F096E911C0772321F09EE8872F762FBE -:1055100005C0662371F096E8862F70E060E02AF0FF -:105520009A95660F771F881FDAF7880F96958795EB -:1055300097F9089588D018F011F08CD038F480C015 -:10554000C4C0E92F9FD0B0F35523C9F3E7FB62171E -:10555000730784079507A8F199F3E92FFF2788239C -:105560002AF03197660F771F881FDAF7952F552796 -:10557000442332F091505040220F331F441FD2F782 -:10558000BB27E91BF50B621B730B840BB109C1F23E -:1055900022F4620F731F841FB11D31972AF0660F2A -:1055A000771F881FBB1FEFCF915050405AF041F03A -:1055B000882332F0660F771F881F91505040C1F743 -:1055C000939530C08695779567959F5FD9F7F8CF0B -:1055D000990F0008550FAA0BE0E8FEEF1616170604 -:1055E000E807F907C0F012161306E407F50798F06C -:1055F000621B730B840B950B39F40A2661F0232B85 -:10560000242B252B21F408950A2609F4A140A69500 -:105610008FEF811D811D089597F99F6780E870E0E5 -:1056200060E008959F3F31F0915020F48795779581 -:105630006795B795880F911D9695879597F9089569 -:105640009FEF80EC089500240A941616170618069A -:105650000906089500240A94121613061406050676 -:105660000895092E0394000C11F4882352F0BB0F07 -:1056700040F4BF2B11F460FF04C06F5F7F4F8F4F6A -:105680009F4F089557FD9058440F551F59F05F3FA5 -:1056900071F04795880F97FB991F61F09F3F79F054 -:1056A00087950895121613061406551FF2CF4695D6 -:1056B000F1DF08C0161617061806991FF1CF869558 -:1056C0007105610508940895E894BB27662777273C -:1056D000CB0197F908957CDF08F48FEF08950BD084 -:1056E000C0CFB1DF28F0B6DF18F0952309F094CFD2 -:1056F000A7CF1124EACFC6DFA0F3959FD1F3950F72 -:1057000050E0551F629FF001729FBB27F00DB11D45 -:10571000639FAA27F00DB11DAA1F649F6627B00DD5 -:10572000A11D661F829F2227B00DA11D621F739FBE -:10573000B00DA11D621F839FA00D611D221F749FCC -:105740003327A00D611D231F849F600D211D822F13 -:10575000762F6A2F11249F5750408AF0E1F088235A -:105760004AF0EE0FFF1FBB1F661F771F881F915067 -:105770005040A9F79E3F510570F04ECFA6CF5F3F36 -:10578000ECF3983EDCF3869577956795B795F7959A -:10579000E7959F5FC1F7FE2B880F911D9695879522 -:1057A00097F90895FA01EE0FFF1F30962105310594 -:1057B00099F16115710561F48038BFE39B0749F1E8 -:1057C00068949038810561F08038BFEF9B0741F005 -:1057D000992342F5FF3FE1053105210511F1E894D8 -:1057E0000894E795D901AA2329F4AB2FBE2FF85FBF -:1057F000D0F310C0FF5F70F4A695E0F7F73950F0D2 -:1058000019F0FF3A38F49F779F930CD00F9007FC64 -:10581000905808953EF014CF60E070E080E89FE378 -:1058200008954FE79F775F934F933F932F939ED0B9 -:105830002F913F914F915F9152DF05C019F40EF007 -:10584000EBCE42CFFDCE26DFC8F39638C0F707F87F -:105850000F92E8942BE33AEA48EB5FE74EDF0F92B2 -:105860000F920F924DB75EB70F92C0D0EAE0F1E011 -:1058700016D04F915F91EF91FF91E595EE1FFF1FBD -:1058800049F0FE57E0684427EE0F441FFA95E1F710 -:105890004195550B32D00F9007FE26C00895DF9337 -:1058A000CF931F930F93FF92EF92DF927B018C01B6 -:1058B000689405C0DA2EEF011EDFFE01E894A59181 -:1058C0002591359145915591AEF3EF0106DDFE012D -:1058D0009701A801DA9479F7DF90EF90FF900F918C -:1058E0001F91CF91DF9108959B01AC0160E070E0C2 -:1058F00080E89FE349CD90CE95CECCDEE8F39923A6 -:10590000D9F3940F511DBBF39150504094F059F0CE -:10591000882332F0660F771F881F91505040C1F7DF -:105920009E3F510544F7880F911D9695879597F9ED -:1059300008955F3FACF0983E9CF0BB278695779525 -:105940006795B79508F4B1609395C1F7BB0F58F709 -:1059500011F460FFE8CF6F5F7F4F8F4F9F4FE3CF12 -:10596000B4CE0EF05FCE6CCE689456CE93DEC8F304 -:105970009923D1F3C6F3DF93CF931F930F93FF9235 -:10598000C92FDD2788232AF02197660F771F881FEC -:10599000DAF720E030E040E85FEB9FE3883920F061 -:1059A000803E30F021968F7787DCE2E3F1E003C0A0 -:1059B00083DCEFE5F1E073DF8B01BE01EC01FB2E30 -:1059C0006F5771097595771F880B990B78DD28E162 -:1059D00032E741E35FE38FDEAF2D9801AE01FF9028 -:1059E0000F911F91CF91DF9178DC3BCEFA01DC0162 -:1059F000AA0FBB1F9B01AC01BF5728F422273327F6 -:105A0000442750781FC0B75188F4AB2F0024469527 -:105A100037952795011CA395D2F3002069F0220F3A -:105A2000331F441FB395DAF30DD045CC61307105B7 -:105A3000A0E88A07B94630F49B01AC0166277727B6 -:105A400088279078309621F02083318342835383D6 -:105A50000895AA1BBB1B51E107C0AA1FBB1FA617B5 -:105A6000B70710F0A61BB70B881F991F5A95A9F707 -:105A700080959095BC01CD01089597FB072E16F4F3 -:105A8000009407D077FD09D00E94292D07FC05D08E -:105A90003EF4909581959F4F0895709561957F4F45 -:105AA0000895EE0FFF1F0590F491E02D0994F999E8 -:105AB000FECF92BD81BDF89A992780B50895A8E1DF -:105AC000B0E042E050E00C947F2D262FF999FECFF4 -:105AD00092BD81BDF89A019700B4021639F01FBA41 -:105AE00020BD0FB6F894FA9AF99A0FBE0895019660 -:105AF000272F0E94662D0C94652DDC01CB01FC0143 -:105B0000F999FECF06C0F2BDE1BDF89A319600B416 -:0E5B10000D9241505040B8F70895F894FFCF21 -:105B1E00640007000CFF0000003F64BA1048112516 -:105B2E0011F110BD100101DF022808140A321E0007 -:105B3E0002040507090B0C0E1011131517181A1C69 -:105B4E001D1F2123242628292B2D2F3032343537A3 -:105B5E00393B1F0F03764F5F6F7F496943790959B0 -:105B6E0053633149803F5D8B803FF8BF803FCAE170 -:105B7E00803F73ED803FCAE1803FF8BF803F5D8B71 -:105B8E00803F3149803F0000803FF16D7F3F75EAD5 -:105B9E007E3F4C827E3F833F7E3F84287E3F833F05 -:105BAE007E3F4C827E3F75EA7E3FF16D7F3F000067 -:105BBE00803F3F4D36390F06C2058C055305E6046E -:105BCE00FF04180531050102030405060708090044 -:00000001FF diff --git a/keyboard/planck/keymaps/lukas/compiled.hex b/keyboard/planck/keymaps/lukas/compiled.hex deleted file mode 100644 index 2cd3bc5228..0000000000 --- a/keyboard/planck/keymaps/lukas/compiled.hex +++ /dev/null @@ -1,1446 +0,0 @@ -:100000000C9461020C94A5020C94A5020C94A50218 -:100010000C94A5020C94A5020C94A5020C94A502C4 -:100020000C94A5020C94A5020C9467140C94391539 -:100030000C949B220C94A5020C94A5020C94A5028E -:100040000C94A5020C9407030C94A5020C94A50231 -:100050000C94A5020C9403230C94A5020C94A50205 -:100060000C94A5020C94A5020C94A5020C94A50274 -:100070000C94A5020C94A5020C94A5020C94A50264 -:100080000C94DC0A0C94A5020C94A5020C94A50215 -:100090000C94A5020C94A5020C94A5020C94A50244 -:1000A0000C94A5020C94A5020C94A502A615C815E3 -:1000B000B616C815B6160D163016B616851698164D -:1000C00082198219B119B119F019101A661B661B31 -:1000D0001B1A661BCB1ACB1A321B3B1B661B601B01 -:1000E000D81AD81AD81AD81AD81AD81AD81AD81A80 -:1000F000D81AD81AD81AD81AD81AD81AD81AD81A70 -:10010000E81AF61AFD1A041B0E1B07634236B79B4A -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000002B001400ED -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A00290004001600070009000A0075 -:1001F0000B000D000E000F0033003400E1001D0065 -:100200001B00060019000500110010003600370021 -:1002100038002800E000E200E300013001522C0029 -:100220002C0002525000510052004F0035021E02B5 -:100230001F0220022102220223022402250226029A -:1002400027022A0001000100010001000100010055 -:1002500001002D022E022F023002310201000100A6 -:1002600001000100010001000100010001002F0058 -:100270003000010001000100010001000100010047 -:1002800001000100010001000100010035001E0015 -:100290001F0020002100220023002400250026004A -:1002A00027004C00010001000100010001000100D5 -:1002B00001002D002E002F00300031000100010050 -:1002C0000100010001000100010001000100010026 -:1002D0000100010001000100010001000100010016 -:1002E0000100010001000100010001002803540089 -:1002F00068006500200050006C0061006E00630023 -:100300006B0020004B006500790062006F00610007 -:100310007200640000002C034F007200740068003B -:100320006F006C0069006E006500610072002000C3 -:100330004B006500790062006F006100720064008C -:10034000730000000403090409026D00040100A009 -:10035000FA09040000010301010009211101000153 -:10036000223F000705810308000A09040100010378 -:10037000010200092111010001224D00070582033D -:1003800008000A090402000103000000092111010C -:1003900000012236000705830308000A0904030050 -:1003A00001030000000921110100012239000705A5 -:1003B00084031000011201100100000008EDFE602E -:1003C0006001000102000105010906A101050719EC -:1003D000E029E71500250195087501810205081936 -:1003E0000129059505750191029501750391010596 -:1003F000071900297715002501957875018102C03C -:1004000005010980A101850216010026B7001A0125 -:10041000002AB700751095018100C0050C0901A1E3 -:10042000018503160100269C021A01002A9C027510 -:100430001095018100C005010902A1010901A10077 -:100440000509190129051500250195057501810288 -:100450009501750381010501093009311581257F59 -:1004600095027508810609381581257F9501750863 -:100470008106050C0A38021581257F9501750881D2 -:1004800006C0C005010906A101050719E029E71505 -:100490000025019508750181029501750881010506 -:1004A00008190129059505750191029501750391BA -:1004B000010507190029FF150025FF95067508811C -:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF -:1004D00003FE24C080911E0390911F03A09120036E -:1004E000B09121038730904BA740B04BB9F41092E4 -:1004F0001E0310921F03109220031092210314BEBA -:1005000084B7877F84BF88E10FB6F894809360003A -:10051000109260000FBEE0E0F8E3099511E0A0E062 -:10052000B1E0E0E9F9E502C005900D92A03CB10709 -:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 -:10054000E1F70E94AD110C94C62C0C9400000895A4 -:10055000089581E0089508950C94A8020C94A902CE -:100560000C94AB020E94902823E030E0281B310954 -:10057000220F2093C4010895282F2F988091800086 -:10058000211108C0877F8093800010928D00109207 -:100590008C001BC0886080938000233019F48FEF9B -:1005A0009FEF0FC083E090E0821B9109880F991F95 -:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 -:1005C000CA0190938D0080938C000C94B2020E941B -:1005D000B20284E08093C3011092C0010895279A6B -:1005E0002F988FEF9FEF90938700809386008AE08B -:1005F0008093800089E1809381000E94F9270C9408 -:10060000E7020E94EF026E9A769A0C94A7021F925C -:100610000F920FB60F9211242F933F938F939F93B6 -:10062000EF93FF93E091C101F091C201CF010196D8 -:100630009093C2018093C1010090C30102C0F6955E -:10064000E7950A94E2F7EF738091C001823019F4C4 -:10065000E03251F404C0813039F4EF3329F4809151 -:100660006F008D7F80936F00F0E0E457FE4FE491C0 -:1006700021E031E0E29FC001E39F900D1124009042 -:10068000C40102C0969587950A94E2F790938D0075 -:1006900080938C00FF91EF919F918F913F912F91CB -:1006A0000F900FBE0F901F901895662319F06130C0 -:1006B00079F01FC0FC018281882331F085EE0E9411 -:1006C00026180E94502815C085EE0E94EE1811C011 -:1006D000FC018281882339F083EE0E94261882E093 -:1006E0000E940E2006C083EE0E94EE1882E00E9457 -:1006F0002F2080E090E0089581E008950C947C0321 -:1007000008950C94010380911502882309F448C0D0 -:100710008091D1019091D201009779F40E94CD226D -:100720009093D2018093D1018091D30190E0009702 -:1007300071F48091D40190E00AC00E94D9222091E6 -:100740000001309101012817390740F329C00197B2 -:10075000880F991F880F991FFC01EB52FE4F608193 -:100760007181828193810E94420AE091D30184E0E9 -:10077000E89FF0011124EB52FE4F6081718182816C -:1007800093814FE050E00E94FA0D8091D30190E0F8 -:1007900001966091D40170E00E94762C8093D30181 -:1007A0000C94AC02109217020C940F0A089508954D -:1007B00081E0809317020C94D703089508958F92D7 -:1007C0009F92AF92BF92EF92FF920F931F93CF939E -:1007D000DF93CDB7DEB7A3970FB6F894DEBF0FBE99 -:1007E000CDBF7C01FC0100811181C8010E94CA209B -:1007F000B8010E94E1058C01B7010E947E038823A5 -:1008000009F4CCC10032F0E51F0741F4F701828101 -:10081000882309F458C00E945E0EC0C10132F0E581 -:100820001F0741F4F7018281882309F44CC00E941C -:10083000670EB4C10232F0E51F0751F4F70182815F -:10084000882309F440C00E945A0E8111F0CFE3CFF3 -:100850000332F0E51F0739F4F7018281882399F10B -:100860000E94D8039BC10432F0E51F0739F4F70159 -:100870008281882341F10E94D20390C10532F0E5C4 -:100880001F0749F4F70182818823E9F0809117025C -:100890008111F1CFE5CF0632F0E51F0739F4F701FA -:1008A0008281882381F00E946E0E0AC00732F0E533 -:1008B0001F0749F4F7018281882329F00E94790EED -:1008C0000E94DE036BC180911702811105C0F70100 -:1008D00082818111CFC018C1003E110579F4F70162 -:1008E0008281882309F44DC00E940F0A81E0809321 -:1008F0001602109215021092D40150C1023E110549 -:1009000059F4F70182818823E1F10E940F0A1092C5 -:1009100016021092150242C1033E110591F4F7012F -:100920008281882371F10E940F0A1092160281E0E1 -:10093000809315021092D3011092D2011092D1012E -:100940002DC10235110559F4F7018281882309F47C -:1009500025C180910001909101010A970DC00135D8 -:10096000110579F4F7018281882309F417C1809178 -:100970000001909101010A9690930101809300017A -:100980000DC14091040183E2EFE1F1E0DE01119637 -:1009900001900D928A95E1F7F701808121E030E026 -:1009A0002C0F3D1F280F311DC901209102013091EC -:1009B0000301FC01E20FF31F6081772767FD70954B -:1009C000640F711D882777FD8095982F0E949829C4 -:1009D00020E030E040E451E40E94FD284B015C013E -:1009E000F701218184E090E0821B9109BC018827F6 -:1009F00077FD8095982F0E9498299B01AC01C50135 -:100A0000B4010E9495289B01AC0160E070E080E099 -:100A100090E40E940B2B20E030E04CED50E40E946B -:100A2000A82A4B015C01F70182818823D1F04FE0B5 -:100A300050E0C501B4010E94FA0D8091160288238E -:100A4000A1F08091D40124E0829FF0011124EB52A7 -:100A5000FE4F80829182A282B3828F5F8093D40105 -:100A600004C0C501B4010E94420A0F3F110508F0FD -:100A70002ECF94C08091D00181111FC0043130E588 -:100A8000130709F051C00E94800381E08093D001D8 -:100A90000E94CD229093CF018093CE011092C70186 -:100AA0001092C9011092C8011092CB011092CA0194 -:100AB0001092CD011092CC0171C08091CE01909125 -:100AC000CF010E94D922883C910570F48091C70122 -:100AD000E82FF0E0EE0FFF1FE853FE4F1183008375 -:100AE0008F5F8093C7015AC0043880E5180721F052 -:100AF0000538104501F13AC0F7018281882341F0A1 -:100B00001092C50182E01EC0043830E5130759F584 -:100B10008091C501811106C086E20E94261886E2F6 -:100B20000E94EE1882E01CC00438F0E51F0741F374 -:100B300005381045D9F4F7018281882331F01092ED -:100B4000C60180E20E943D1929C08091C601811131 -:100B500006C087E20E94261887E20E94EE1880E213 -:100B60000E9444191BC00538104529F381E0809389 -:100B7000C5018093C601C701A3960FB6F894DEBFE6 -:100B80000FBECDBFDF91CF911F910F91FF90EF90DE -:100B9000BF90AF909F908F900C94AE0280E0A39690 -:100BA0000FB6F894DEBF0FBECDBFDF91CF911F917E -:100BB0000F91FF90EF90BF90AF909F908F9008950E -:100BC00008959CE0799FF001112490E3899FE00D46 -:100BD000F11D1124E60FF11DEE0FFF1FE453FE4F30 -:100BE000859194910895880F991FFC01E45BFF4F54 -:100BF000859194910895880F991FFC01E453FE4F4D -:100C00008591949108950F931F93CF93DF93EC01F7 -:100C1000811521E39207A0F5C11580E3D80708F0FC -:100C2000D7C0C83ED105D8F4C03ED10508F007C2F0 -:100C3000C83AD10578F4C53AD10508F06AC0C13088 -:100C4000D10509F463C008F4F7C1C430D10508F038 -:100C5000F6C1F2C1CB3BD10508F466C0EDC1C115A8 -:100C600090E2D90708F0AFC0C11521E0D20708F023 -:100C7000E6C1C03FD10508F4DFC18E0110651FC277 -:100C8000C03880E5D80700F5C03790E5D90708F0EF -:100C9000A3C0C11520E5D20709F4ACC050F4CE01C1 -:100CA000905480319F4008F0C7C1DF708E01106AF8 -:100CB00006C2C13080E5D80709F4AEC0C43190E562 -:100CC000D90708F4AFC0B8C1C33820E5D20709F48A -:100CD0008EC050F4C13890E5D90709F482C008F0FD -:100CE00083C000E011EDEBC1C03181E5D80708F405 -:100CF000A3C1C11597E5D90708F436C1CE019057B5 -:100D00008115904108F098C1DF7093C101E010E0B7 -:100D1000D6C1C53AD10509F494C1C63AD10509F046 -:100D200093C102E810E4CBC1C83AD10509F48FC1E0 -:100D3000C93AD10509F48EC1CA3AD10509F48DC169 -:100D4000CB3AD10509F48CC1CC3AD10509F48BC159 -:100D5000CD3AD10509F48AC1C03BD10509F489C156 -:100D6000CE3AD10509F488C1CF3AD10509F487C13B -:100D7000C13BD10509F486C1C23BD10509F485C147 -:100D8000C33BD10509F484C1C43BD10509F483C137 -:100D9000C53BD10509F482C1C63BD10509F481C127 -:100DA000C73BD10509F480C1C83BD10509F47FC117 -:100DB000C93BD10509F47EC1CA3BD10509F47DC107 -:100DC00000E014E47CC1CE019F700E94FB0578C155 -:100DD000DD278E01106C73C1CF70DD278E01146D7D -:100DE0006EC100E010ED6BC100E012ED68C100E0E3 -:100DF00013ED65C10E94D11B0E940F0A0E94D60309 -:100E00008FEF94E32CE0815090402040E1F700C048 -:100E100000000E94282353C18091F20281608093D8 -:100E2000F2024DC10E948923811102C00E946523F4 -:100E30000E949C2390E090931D0380931C03C2307A -:100E400080E5D80721F480911C03816086C0C430FE -:100E500090E5D90721F480911C0382607EC0C630E2 -:100E600020E5D20721F480911C03846076C0C8304D -:100E700080E5D80719F480911C0327C0CA3090E59B -:100E8000D90721F480911C03806167C0CC3020E534 -:100E9000D20721F480911C0380625FC0CE3080E5D0 -:100EA000D80721F480911C03806457C0C03190E5BD -:100EB000D90721F480911C0380684FC0C23120E51E -:100EC000D20729F480911C038460886046C0C33037 -:100ED00080E5D80721F480911C038E7F3EC0C53089 -:100EE00090E5D90721F480911C038D7F36C0C7306F -:100EF00020E5D20721F480911C038B7F2EC0C930DE -:100F000080E5D80719F480911C0326C0CB3090E50A -:100F1000D90721F480911C038F7E1FC0CD3020E5BE -:100F2000D20721F480911C038F7D17C0CF3080E55C -:100F3000D80721F480911C038F7B0FC0C13190E54D -:100F4000D90721F480911C038F7707C0C331D045A6 -:100F500031F480911C038B7F877F80931C038091E9 -:100F60001C030E94A023ABC08D2F99278F70992757 -:100F700081309105D9F49E012370332702C0880F78 -:100F8000991F2A95E2F79C688E0144E0000F111F1B -:100F90004A95E1F700271370802B912B53E0CC0F7B -:100FA000DD1F5A95E1F7C076DD272FC0823091050D -:100FB00031F4DC2FCC278E01016F106A80C08330A2 -:100FC000910569F4CE018370992701E010E002C019 -:100FD000000F111F8A95E2F7C8019C680FC084308A -:100FE0009105B9F4CE018370992701E010E002C0A9 -:100FF000000F111F8A95E2F7C8019A6823E0CC0F11 -:10100000DD1F2A95E1F7C07ED7708C010C2B1D2BBC -:1010100056C08530910531F4DC2FCC278E01046F4A -:10102000106A4DC0069709F04AC0CF71DD27DC2F4A -:10103000CC278E01106243C000E010E040C08E015A -:101040003EC001E810E43BC003E810E438C002EE03 -:1010500014E435C009EE14E432C00AEE14E42FC0E3 -:1010600005EB14E42CC006EB14E429C007EB14E4F0 -:1010700026C00CEC14E423C00DEC14E420C003E8FB -:1010800015E41DC00AE815E41AC002E915E417C00A -:1010900004E915E414C001E216E411C003E216E409 -:1010A0000EC004E216E40BC005E216E408C006E236 -:1010B00016E405C007E216E402C00AE216E4C8011D -:1010C000DF91CF911F910F9108959CE0799FF001DE -:1010D000112490E3899FE00DF11D1124E60FF11D0D -:1010E000EE0FFF1FE453FE4F85919491803E9105D2 -:1010F000E0F4803C910558F58133910509F46FC007 -:1011000048F48932910509F463C08A32910509F4E3 -:101110006DC072C089339105E9F082389105D1F034 -:101120008533910509F44DC067C0833E910581F177 -:1011300038F4803E9105B9F0823E9105D9F05CC04B -:10114000863E910561F1873E9105A1F155C00E944F -:10115000F305089520911C0320FD02C021FF4CC01F -:1011600080EE90E049C080911C0380FFF9CF89E3B5 -:1011700090E042C080911C0382FF0EC080911C034E -:1011800084FF03C080E090E037C083EE90E034C07D -:1011900080911C0382FFF2CF82EE90E02DC08091FF -:1011A0001C0383FF0BC080911C0384FDEBCF87EEF3 -:1011B00090E022C080911C0383FFF5CF86EE90E083 -:1011C0001BC080911C0385FF07C089E290E014C01A -:1011D00080911C0385FFF9CF85E390E00DC08091DD -:1011E0001C0386FF07C08AE290E006C080911C03C2 -:1011F00086FFF9CF81E390E00E94030608950C94E6 -:10120000B002E82FF0E0E25BFE4F8081E82FEF7044 -:10121000F0E082958F7021E030E0A90102C0440F18 -:10122000551F8A95E2F740A308950F931F93CF931C -:10123000DF9385B7806885BF85B7806885BFC3E0C9 -:10124000D0E001E010E0FE01E25BFE4F8081E82F7C -:10125000EF70F0E021A182958F70A80102C0440FC9 -:10126000551F8A95E2F7CA01822B81A38C2F0E9419 -:101270000109219740F78BE090E061E070E0FC010C -:10128000EE5BFE4F2081E22FEF70F0E042A122954D -:101290002F70DB0102C0AA0FBB1F2A95E2F79D0148 -:1012A000242B22A3019758F7DF91CF911F910F9123 -:1012B0000C948103EF92FF920F931F93CF93DF93D0 -:1012C00000E212E0C3E0EE24E394F12CD5E08C2F91 -:1012D0000E9401098BE090E040E050E0FC01EE5BF1 -:1012E000FE4F6081E62FEF70F0E020A130E06295C4 -:1012F0006F7002C0359527956A95E2F720FD09C009 -:101300009701082E02C0220F331F0A94E2F7422BE6 -:10131000532B019718F7F801929182918F0184174E -:10132000950721F051834083D09305018C2F0E94B3 -:101330000109C15060F68091050187FD2CC08150E4 -:10134000809305018F3F39F08FE99FE00197F1F716 -:1013500000C0000020C080911E0290911F02909357 -:1013600027028093260280911C0290911D02909387 -:1013700025028093240280911A0290911B0290937F -:101380002302809322028091180290911902909377 -:101390002102809320020E94830381E0DF91CF919C -:1013A0001F910F91FF90EF900895E82FF0E0EE0F5E -:1013B000FF1FE05EFD4F80819181089508950F9396 -:1013C0001F93CF9308E212E0C0E0F801929182915E -:1013D0008F010E944522C80FF2E000321F07A9F7D3 -:1013E0008C2FCF911F910F9108950E948923811115 -:1013F00002C00E9465230E94AE23809307033E9A99 -:10140000809171008D7F8093710082E080939000C5 -:101410008AE18093910081E080932A02089580916F -:101420002A02811102C00E94F50910927A021092DC -:101430007902809171008D7F80937100809190007E -:101440008F738093900010923C0210923B02109296 -:10145000730210927402109275021092760210922A -:10146000720210927102E1E5F2E0A1E4B2E01192A1 -:101470001192119211921D921D9282E0E137F807AC -:10148000B1F70895CF92DF92EF92FF920F931F93DF -:10149000CF93DF9320913B02222309F484C06B0198 -:1014A0007C0180912A02811102C00E94F50901E7A6 -:1014B00012E0C7E0D0E0A7019601F8019291829175 -:1014C000729162918F010E94F928811131C0FE0151 -:1014D000EE0FFF1FEE0FFF1FEF5AFD4F108211821C -:1014E00012821382DE01AA0FBB1FAF5BBD4F1196A4 -:1014F0001C921E92C730D105E9F021964481558196 -:10150000668177814083518362837383148215825D -:101510001682178212968D919C91139711969C9327 -:101520008E9313961C921E92129734961296E2CFC7 -:10153000219708F68091790290917A02019797FDA0 -:1015400005C090937A028093790204C010927A02C7 -:10155000109279028091790290917A02209177021B -:10156000309178022817390724F0109278021092EF -:101570007702892BC1F4809171008D7F8093710077 -:10158000809190008F73809390001092730210925C -:1015900074021092750210927602109272021092EA -:1015A000710210923B02DF91CF911F910F91FF903A -:1015B000EF90DF90CF9008951F920F920FB60F9289 -:1015C00011244F925F926F927F928F929F92AF926F -:1015D000BF92CF92DF92EF92FF922F933F934F9360 -:1015E0005F936F937F938F939F93AF93BF93CF93AB -:1015F000DF93EF93FF9380913B02882309F49BC113 -:10160000C0917902D0917A021C161D060CF093C18C -:1016100040902B0250902C0260902D0270902E0270 -:1016200020E030E0A901C301B2010E94A42A1816EB -:101630000CF065C0C130D10509F452C08091770229 -:1016400090917802BE010E94762C7C0190937802E2 -:101650008093770280903D0290903E02A0903F02DE -:10166000B090400220E030E040E85FE3C501B40103 -:101670000E94952860933D0270933E0280933F0242 -:1016800090934002F701EE0FFF1FEE0FFF1FEF5A7E -:10169000FD4FA301920160817181828193810E943B -:1016A000FD2820E030E040E05EE30E94A82A9B0194 -:1016B000AC01C501B4010E94A42A18168CF4C7011C -:1016C0000196BE010E94762C909378028093770257 -:1016D00010923D0210923E0210923F021092400280 -:1016E000E0917702F0917802EE0FFF1FEE0FFF1FDF -:1016F000EF5AFD4F6081718182819381D0C0C0908B -:101700007302D0907402E0907502F090760220E0AF -:1017100030E0A901C701B6010E94F928219788236A -:1017200009F4A2C0FE01EE0FFF1FEE0FFF1FEF5ADC -:10173000FD4F80809180A280B380A5019401C701F4 -:10174000B6010E94F92887FF31C0A501940160E02D -:1017500070E08CED93EC0E94FD2820E030E040E446 -:1017600051E40E94FD2820E030E040E05FE30E9469 -:10177000A82A9B01AC0160E070E080E090E40E9448 -:101780000B2B9B01AC01C501B4010E94A82A9B014F -:10179000AC01C701B6010E94F92887FF07C0A70165 -:1017A000960160E070E08CED93E439C0A5019401EE -:1017B000C701B6010E94A42A18160CF055C0A50155 -:1017C000940160E070E08CED93E40E94FD2820E03D -:1017D00030E040E451E40E94FD2820E030E040E0A9 -:1017E0005FE30E94A82A9B01AC0160E070E080E00A -:1017F00090E40E940B2B9B01AC01C501B4010E9437 -:10180000A82A9B01AC01C701B6010E94A42A1816A0 -:101810005CF5A701960160E070E08CED93EC0E940E -:10182000FD2820E030E040E451E40E94FD2820E063 -:1018300030E040E05FE30E94A82A9B01AC0160E039 -:1018400070E080E090E40E940B2B9B01AC01C7018B -:10185000B6010E94A82A6093730270937402809369 -:1018600075029093760213C0FE01EE0FFF1FEE0F7C -:10187000FF1FEF5AFD4F80819181A281B381809338 -:10188000730290937402A0937502B09376026091F4 -:10189000730270917402809175029091760220918A -:1018A0002802309129022F3F4FEF340731F02F5F8C -:1018B0003F4F30932902209328020E94840E6B012F -:1018C0007C0120E034E244EF51E40E94F92887FFD4 -:1018D00008C086EFC82E88E2D82E84EFE82E81E477 -:1018E000F82E20E030E040E051E4C701B6010E944C -:1018F000A82A9B01AC0160E074E284E79BE40E94AB -:10190000FD286B017C010E946A2970939700609307 -:1019100096002091060130910701409108015091F5 -:101920000901C701B6010E94A82A0E946A29709382 -:1019300099006093980080913C02882309F433C198 -:10194000C0903702D0903802E0903902F0903A020D -:1019500020E030E0A901C701B6010E94A42A1816B0 -:10196000D4F580912802909129028F3F2FEF9207A2 -:1019700029F001969093290280932802C701B601AD -:101980000E94840E20E030E040E051E40E94A82A4A -:101990009B01AC0160E074E284E79BE40E94FD28B7 -:1019A0006B017C010E946A297093970060939600F6 -:1019B00020910601309107014091080150910901E1 -:1019C000C701B6010E94A82A0E946A297093990053 -:1019D0006093980008C010929700109296001092A1 -:1019E00099001092980060913102709132026F5FFD -:1019F0007F4F7093320260933102209196003091B4 -:101A0000970080E090E0232BF1F0C0919600D091F8 -:101A100097000E9496296B017C01BE0180E090E056 -:101A20000E9496299B01AC016091330270913402AF -:101A300080913502909136020E94FD2820E03FEF10 -:101A40004FE757E410C00E9496296B017C0120E00B -:101A500030EE4FEF54E46091330270913402809184 -:101A60003502909136020E94A82A9B01AC01C70161 -:101A7000B6010E94A42A87FD96C080912F028F5F35 -:101A800080932F0290E0209103033091040382178A -:101A90009307A0F080910E03882319F010922F0273 -:101AA0000DC0809171008D7F8093710080919000B6 -:101AB0008F738093900010923C027DC08091300221 -:101AC000C0912F02811128C0C0900803D090090353 -:101AD000E0900A03F0900B0320E030E0A901C70179 -:101AE000B6010E94A42A1816BCF481E0809330024B -:101AF00010923702109238021092390210923A0274 -:101B0000C0923302D0923402E0923502F092360253 -:101B1000C150C0932F0243C010923002109229028C -:101B200010922802E0910503F091060348E0C49F5B -:101B3000E00DF11D112480819181A281B3818093F8 -:101B4000370290933802A0933902B0933A0220E012 -:101B500030E040E85EE364817581868197810E9470 -:101B6000A82A6B017C0180910A01682F70E080E057 -:101B700090E00E94962920E030E048EC52E40E9478 -:101B8000FD289B01AC01C701B6010E94A82A609301 -:101B90003302709334028093350290933602109290 -:101BA0003202109231028091070380FD04C010922E -:101BB0003C0210923B02FF91EF91DF91CF91BF91D8 -:101BC000AF919F918F917F916F915F914F913F91D5 -:101BD0002F91FF90EF90DF90CF90BF90AF909F90AC -:101BE0008F907F906F905F904F900F900FBE0F90EF -:101BF0001F901895CF92DF92EF92FF92CF93DF93D1 -:101C00006B017C01EA0180912A02811102C00E94CD -:101C1000F5098091070380FF46C080917902909179 -:101C20007A0208970CF03FC0809171008D7F8093FD -:101C3000710080913C0281110E940F0A81E0809323 -:101C40003B02109229021092280220E030E0A90104 -:101C5000C701B6010E94A42A1816DCF4809179020B -:101C600090917A02FC01EE0FFF1FEE0FFF1FEF5A5B -:101C7000FD4FC082D182E282F382FC01EE0FFF1F92 -:101C8000EF5BFD4FD183C083019690937A028093DE -:101C90007902809171008260809371008091900040 -:101CA000806880939000DF91CF91FF90EF90DF905C -:101CB000CF90089580910703817008958091070364 -:101CC0008160809307030E94B2230C94DD0380910E -:101CD00007038E7F809307030C94B22380917B02CD -:101CE00090E0019666E070E00E94762C80937B0283 -:101CF000089580917B0290E0019766E070E00E9479 -:101D0000762C80937B0208958F929F92AF92BF9220 -:101D1000CF92DF92EF92FF920F931F93CF93DF93B7 -:101D20006B017C01C0912802D0912902BE0180E0A4 -:101D300090E00E9496294B015C01A701960160E0AA -:101D400070E08CE594E40E94FD289B01AC01C50184 -:101D5000B4010E94A82A0E946A2920917B022330A4 -:101D600009F473C028F4222351F02130E9F02CC18A -:101D7000243009F4A0C0253009F4E0C025C180E07A -:101D800090E0A0E0BFE38093060190930701A09349 -:101D90000801B093090110922B0210922C021092AC -:101DA0002D0210922E0210C110922B0210922C02C2 -:101DB00010922D0210922E026431710540F46A30A7 -:101DC000710560F520E030E040E85EE32BC0693C3F -:101DD000710508F0AAC080E090E00E94962920E0FA -:101DE00030E040EA51E40E94942820E030E044E3EF -:101DF00053E40E94FD289B01AC010E94A82A20E028 -:101E000030E040E05EE30E94A82A9B01AC0160E064 -:101E100070E080E09EE30E94942844C020E030E01F -:101E200040E05FE3C701B6010E94A82A6B017C0174 -:101E300080E090E0A0E0BEE380930601909307016C -:101E4000A0930801B0930901BFC010922B02109219 -:101E50002C0210922D0210922E024AE0469F900111 -:101E6000479F300D1124C90168EB7BE00E94622C72 -:101E7000BC016C5D754077FF03C071956195710978 -:101E8000882777FD8095982F0E9498292EE333ECC0 -:101E90004EE259E30E94A82A20E030E040EC5EE3E5 -:101EA0000E949528609306017093070180930801B2 -:101EB0009093090189C010922B0210922C0210926B -:101EC0002D0210922E02CE0183709927892BE1F00A -:101ED000BE016170772780E090E00E94962920E0A3 -:101EE00030E040E05EE30E94A82A20E030E040E4D9 -:101EF0005FE30E9495286093060170930701809329 -:101F00000801909309010CC080E090E0A0E0BFE3DD -:101F10008093060190930701A0930801B0930901F3 -:101F2000C770DD27CD2B09F04FC01092060110922B -:101F30000701109208011092090146C010922B026D -:101F400010922C0210922D0210922E0200E010E04E -:101F500020E03FE30093060110930701209308015E -:101F6000309309016739710578F180E090E00E94B3 -:101F7000962920E030E047E153E40E94942820E0D5 -:101F800030E04AE754E40E94FD2820E030E048E4D5 -:101F900052E40E94A82A20E030E040EA51E40E9486 -:101FA000DA290E946529660F771F660F771FFB01EC -:101FB000EE5AFE4F2081318142815381C701B60123 -:101FC0000E94A82A6B017C01C701B601DF91CF9165 -:101FD0001F910F91FF90EF90DF90CF90BF90AF9047 -:101FE0009F908F90089580918C020895CF93DF93F6 -:101FF00000D01F92CDB7DEB79C01809113038430CF -:1020000019F593E099833B832A839093E9008FEF3E -:102010009091E800815095FD06C095ED9A95F1F7F5 -:1020200000008111F5CF8091E80085FF0DC040E0F0 -:1020300050E063E070E0CE0101960E94571280915B -:10204000E8008E778093E8000F900F900F90DF915B -:10205000CF910895CF93DF9300D01F92CDB7DEB715 -:1020600020911303243021F522E029839B838A8366 -:1020700083E08093E9008FEF9091E800815095FD17 -:1020800006C095ED9A95F1F700008111F5CF80918A -:10209000E80085FF0DC040E050E063E070E0CE0155 -:1020A00001960E9457128091E8008E778093E80095 -:1020B0000F900F900F90DF91CF910895209113030F -:1020C0002430F1F422E02093E9002FEF3091E80072 -:1020D000215035FD06C035ED3A95F1F7000021118C -:1020E000F5CF2091E80025FF0BC040E050E065E00F -:1020F00070E00E9457128091E8008E778093E8008C -:102100000895CF93DF93EC0190911303943009F07D -:1021100046C0809115018823D9F08091160188234B -:10212000B9F09093E9008FEF9091E800815095FD10 -:1021300006C095E19A95F1F700008111F5CF8091E5 -:10214000E80085FF2CC040E050E060E170E017C07F -:1021500081E08093E9008FEF9091E800815095FD38 -:1021600006C095ED9A95F1F700008111F5CF8091A9 -:10217000E80085FF14C040E050E068E070E0CE0168 -:102180000E9457128091E8008E778093E80080E1EA -:10219000FE01ACE7B2E001900D928A95E1F7DF9184 -:1021A000CF91089580911203811109C00E94EC1310 -:1021B0000E9449148091E20084608093E2000895B7 -:1021C000109212030895089508950C94902242E00D -:1021D00061EC81E00E94661342E061EC82E00E94C3 -:1021E000661342E061EC83E00E94661342E161EC19 -:1021F00084E00C94661380911503833009F455C074 -:1022000030F4813071F0823009F48EC008958A3044 -:1022100009F47AC08B3009F460C0893009F09CC0A1 -:1022200020C080911403813A09F096C08091E800A3 -:10223000877F8093E8008091180390911903892B80 -:1022400021F460E18CE792E003C060E080E090E080 -:1022500070E00E94A2128091E8008B778093E800E2 -:10226000089580911403813209F076C0809118039B -:1022700090911903009719F0039709F06DC08091B0 -:10228000E800877F8093E8008091E80082FD05C028 -:10229000809113038111F8CF5FC08091F10080938A -:1022A0008C028091E8008B7753C080911403813AAF -:1022B00009F052C08091180390911903892B09F0FD -:1022C0004BC08091E800877F8093E8008091E80010 -:1022D00080FFFCCF8091150136C0809114038132BC -:1022E000D9F58091180390911903892BA9F5809154 -:1022F000E800877F8093E8000E949B13809116037B -:10230000809315010C94D11B80911403813221F527 -:102310008091E800877F8093E8000E949B13809162 -:10232000170380938D02089580911403813AA1F4DC -:102330008091E800877F8093E8008091E80080FF2B -:10234000FCCF80918D028093F1008091E8008E7720 -:102350008093E8000C949B13089584B7877F84BF13 -:1023600088E10FB6F89480936000109260000FBE71 -:1023700090E080E80FB6F89480936100909361003C -:102380000FBE0E943E170E94EC130E9449148091D8 -:10239000E20084608093E20078940E94CF160E944D -:1023A00040178BE091E00E94EA168091130385307C -:1023B00069F40E945122809111038823B1F30E9495 -:1023C0007F22882391F30E944112EFCF0E94481789 -:1023D000ECCF292F332723303105C9F064F42130A5 -:1023E000310581F02230310509F043C08DE690E0DF -:1023F00028E433E042C021323105F1F022323105C8 -:1024000041F137C082E190E025EB33E036C09927F7 -:102410008130910541F08230910541F0892B49F5D9 -:10242000E4E4F3E005C0E6E1F3E002C0ECEEF2E044 -:10243000849190E09F0121C06430D8F4E62FF0E051 -:10244000EE0FFF1FE255FE4F2081318189E090E0C1 -:1024500014C0643070F470E0FB01EE0FFF1FEA550A -:10246000FE4F20813181FB01EE55FE4F808190E0CF -:1024700004C080E090E020E030E0FA013183208366 -:10248000089580E189BD82E189BD09B400FEFDCFD8 -:102490008091D8008F7D8093D8008091E000826089 -:1024A0008093E0008091E00081FDFCCF0895CF9201 -:1024B000DF92EF92FF920F931F93CF93DF93EC0184 -:1024C0008B016A010E94BA13811133C0C114D10477 -:1024D00039F0F60180819181081B190BC80FD91FB3 -:1024E000E12CF12C0115110519F18091E80085FD11 -:1024F00016C08091E8008E778093E800C114D10463 -:1025000049F0F60180819181E80EF91EF182E082A6 -:1025100085E00FC00E94BA13882321F30AC0899175 -:102520008093F10001501109FFEFEF1AFF0ADACF93 -:1025300080E0DF91CF911F910F91FF90EF90DF909E -:10254000CF90089520911A0330911B032617370767 -:1025500048F06115710539F42091E8002E77209339 -:10256000E80001C0B90140E061157105A9F12091B1 -:102570001303222309F443C0253009F442C02091FB -:10258000E80023FD40C02091E80022FD32C02091E8 -:10259000E80020FFE9CF4091F3002091F20030E005 -:1025A000342BFC01CF016115710559F0283031053C -:1025B00040F481918093F100615071092F5F3F4F8A -:1025C000F1CF41E02830310509F040E02091E800EA -:1025D0002E772093E800C8CF4111C9CF0AC080915F -:1025E0001303882361F0853061F08091E80083FD5A -:1025F0000AC08091E80082FFF2CF80E0089582E077 -:10260000089583E0089581E0089520911A033091A0 -:102610001B032617370748F06115710539F420911F -:10262000E8002E772093E80001C0B901FC0120E00A -:102630006115710591F180911303882309F440C05D -:10264000853009F43FC08091E80083FD3DC0809152 -:10265000E80082FD2FC08091E80080FFE9CF209143 -:10266000F3008091F20090E0922B6115710559F012 -:102670008830910540F424912093F1003196615007 -:1026800071090196F2CF21E0089709F020E08091CE -:10269000E8008E778093E800CBCF2111CCCF0AC021 -:1026A00080911303882361F0853061F08091E80008 -:1026B00083FD0AC08091E80082FFF2CF80E0089598 -:1026C00082E0089583E0089581E00895982F97307F -:1026D00058F59093E900981739F07091EC0020912B -:1026E000ED005091F00003C0242F762F50E021FF21 -:1026F00019C03091EB003E7F3093EB003091ED003C -:102700003D7F3093ED003091EB0031603093EB0072 -:102710007093EC002093ED005093F0002091EE00B8 -:1027200027FF07C09F5FD3CF8F708093E90081E0C0 -:10273000089580E008958091140387FF11C080916F -:10274000E80082FD05C0809113038111F8CF11C00C -:102750008091E8008B770BC080911303882349F0A8 -:102760008091E80080FFF8CF8091E8008E77809319 -:10277000E80008952091E4003091E50095E640914D -:10278000EC00842F817040FF22C08091E80080FD22 -:102790001CC080911303882391F0853091F08091C3 -:1027A000EB0085FD10C04091E4005091E500421718 -:1027B000530729F39A01915011F784E0089582E0BC -:1027C000089583E0089581E0089580E008954091A0 -:1027D000E80042FFDECF08950E945A140E9462145E -:1027E000E0EEF0E0808181608083E8EDF0E08081C0 -:1027F0008F77808319BCA7EDB0E08C918E7F8C938E -:1028000080818F7E80831092120308950F931F930F -:10281000CF93DF930E945A140E946214C8EDD0E057 -:1028200088818F77888388818068888388818F7D7D -:10283000888319BC1092130310920F031092110396 -:102840001092100300EE10E0F80180818B7F8083EE -:1028500088818160888342E060E080E00E946613A6 -:10286000E1EEF0E080818E7F8083E2EEF0E0808117 -:1028700081608083808188608083F80180818E7F81 -:102880008083888180618883DF91CF911F910F9130 -:102890000895E8EDF0E080818F7E8083E7EDF0E041 -:1028A00080818160808384E082BF81E08093120315 -:1028B0000C940614E8EDF0E080818E7F8083109206 -:1028C000E20008951092DA001092E10008951F923C -:1028D0000F920FB60F9211242F933F934F935F9354 -:1028E0006F937F938F939F93AF93BF93EF93FF93D8 -:1028F0008091E10082FF0BC08091E20082FF07C05F -:102900008091E1008B7F8093E1000E94CE16809140 -:10291000DA0080FF1FC08091D80080FF1BC080912B -:10292000DA008E7F8093DA008091D90080FF0DC09D -:1029300080E189BD82E189BD09B400FEFDCF81E05F -:10294000809313030E94D21005C019BC1092130388 -:102950000E94E0108091E10080FF19C08091E200A8 -:1029600080FF15C08091E2008E7F8093E20080910D -:10297000E20080618093E2008091D80080628093C1 -:10298000D80019BC85E0809313030E94E410809165 -:10299000E10084FF30C08091E20084FF2CC080E120 -:1029A00089BD82E189BD09B400FEFDCF8091D800C8 -:1029B0008F7D8093D8008091E1008F7E8093E1002D -:1029C0008091E2008F7E8093E2008091E20081603E -:1029D0008093E20080910F03882311F084E007C008 -:1029E0008091E30087FD02C081E001C083E0809315 -:1029F00013030E94E5108091E10083FF29C08091BC -:102A0000E20083FF25C08091E100877F8093E10091 -:102A100082E08093130310920F038091E1008E7F78 -:102A20008093E1008091E2008E7F8093E2008091AC -:102A3000E20080618093E20042E060E080E00E947A -:102A400066138091F00088608093F0000E94E3108C -:102A5000FF91EF91BF91AF919F918F917F916F9176 -:102A60005F914F913F912F910F900FBE0F901F904C -:102A700018951F920F920FB60F9211242F933F9328 -:102A80004F935F936F937F938F939F93AF93BF9376 -:102A9000CF93DF93EF93FF93C091E900CF708091C4 -:102AA000EC00D82FD17080FDD0E81092E900809121 -:102AB000F000877F8093F00078940E947D1510923B -:102AC000E9008091F00088608093F000CD2BCF70FA -:102AD000C093E900FF91EF91DF91CF91BF91AF914A -:102AE0009F918F917F916F915F914F913F912F9126 -:102AF0000F900FBE0F901F9018951F93CF93DF93E9 -:102B0000CDB7DEB7AA970FB6F894DEBF0FBECDBF24 -:102B1000E4E1F3E088E08E0F9091F10091938E1341 -:102B2000FBCF0E94FB108091E80083FF1FC18091C2 -:102B3000140390911503492F50E04A30510508F0D5 -:102B400015C1FA01EA5AFF4F0C948A2C803881F0A3 -:102B5000823809F00BC1809118038F708093E900CF -:102B60008091EB0085FB882780F91092E90006C070 -:102B70008091100390911103911182609091E8006F -:102B8000977F9093E8008093F1001092F100C8C005 -:102B9000282F2D7F09F0EAC0882319F0823061F0D8 -:102BA000E5C080911603813009F0E0C0933009F050 -:102BB00080E0809311032BC080911603811127C000 -:102BC000809118038F7009F4D1C08093E90020919F -:102BD000EB0020FF1CC0933021F48091EB00806259 -:102BE00014C09091EB0090619093EB0021E030E0F5 -:102BF000A90102C0440F551F8A95E2F74093EA00ED -:102C00001092EA008091EB0088608093EB001092B4 -:102C1000E9008091E800877F86C08111A7C01091EC -:102C200016031F778091E3008078812B8093E30067 -:102C30008091E800877F8093E8000E949B13809139 -:102C4000E80080FFFCCF8091E30080688093E30080 -:102C5000111102C082E001C083E08093130386C09B -:102C60008058823008F082C080911603909117033B -:102C70008C3D53E0950779F583E08A838AE2898366 -:102C80004FB7F894DE01139620E03EE051E2E32FC7 -:102C9000F0E050935700E49120FF03C0E295EF70FD -:102CA0003F5FEF708E2F90E0EA3010F0C79601C0C2 -:102CB000C0968D939D932F5F243149F74FBF80912C -:102CC000E800877F8093E8006AE270E0CE01019619 -:102CD0000E94A21214C0AE014F5F5F4F60911803B3 -:102CE0000E94E911BC01009709F440C09091E800EE -:102CF000977F9093E80089819A810E9405138091C3 -:102D0000E8008B778093E80031C0803879F58091B6 -:102D1000E800877F8093E80080910F038093F100A3 -:102D20008091E8008E778093E8000E949B131EC07C -:102D300081111CC0909116039230C0F48091E8007C -:102D4000877F8093E80090930F030E949B138091EC -:102D50000F03811106C08091E30087FD02C081E06E -:102D600001C084E0809313030E94E7108091E80083 -:102D700083FF0AC08091E800877F8093E8008091FC -:102D8000EB0080628093EB00AA960FB6F894DEBF4A -:102D90000FBECDBFDF91CF911F9108950895CF93BE -:102DA000809113038823A1F0C091E900CF70909126 -:102DB000EC00892F817090FD80E8C82B1092E9000B -:102DC0008091E80083FD0E947D15CF70C093E900DB -:102DD000CF91089590939302809392020895E09189 -:102DE0009202F0919302309721F00190F081E02D52 -:102DF000099480E00895E0919202F0919302309757 -:102E000021F00280F381E02D09940895E09192026F -:102E1000F0919302309721F00480F581E02D099420 -:102E2000089520919002309191028217930771F0DA -:102E30009093910280939002E0919202F09193021C -:102E4000309721F00680F781E02D099408952091B4 -:102E50008E0230918F028217930771F090938F0248 -:102E600080938E02E0919202F0919302309721F0CC -:102E70000084F185E02D0994089508950C943D1780 -:102E80000E94C4220E9415090E944A230C94F9272B -:102E90005F926F927F928F929F92AF92BF92CF92EA -:102EA000DF92EF92FF920F931F93CF93DF9300D0A7 -:102EB00000D01F92CDB7DEB70E945A099DE9C92EF6 -:102EC00092E0D92E03E010E0AA24A394B12C502E56 -:102ED000802F0E94D5094C01F601729062906F011B -:102EE0006826792661147104A1F40150110978F75C -:102EF0008FEF89838A831B820E94CD228160782F85 -:102F00009D838C8349815A816B818D810E94F81742 -:102F100038C08091F20281FD0E94DE092BE030E092 -:102F20007501022E02C0EE0CFF1C0A94E2F7C701E5 -:102F300086219721892B09F129835A828E209F208F -:102F400091E0892809F490E09B830E94CD22816062 -:102F5000782F9D838C8349815A816B818D810E945A -:102F6000F817000F111FF801EB56FD4F808191817A -:102F7000E826F926F182E08204C02150310980F66A -:102F8000B4CF0E943125109194020E94EF161817B9 -:102F9000D1F00E94EF16809394020F900F900F9043 -:102FA0000F900F90DF91CF911F910F91FF90EF90B5 -:102FB000DF90CF90BF90AF909F908F907F906F9059 -:102FC0005F900C94FF080F900F900F900F900F9050 -:102FD000DF91CF911F910F91FF90EF90DF90CF90F5 -:102FE000BF90AF909F908F907F906F905F9008956B -:102FF000CF93DF93CDB7DEB72B970FB6F894DEBF34 -:103000000FBECDBF4F83588769877A878B87DE01D4 -:10301000119686E0FD0111928A95E9F785E0FE019F -:10302000379601900D928A95E1F749815A816B811B -:103030007C818D819E810E946F1E2B960FB6F89425 -:10304000DEBF0FBECDBFDF91CF910895CF93882310 -:1030500009F4C2C0C82F823859F40E94EF1681FDCE -:10306000BBC089E30E9449210E94162289E30CC05B -:10307000833879F40E94EF1680FDAEC083E50E948C -:1030800049210E94162283E50E948B21CF910C9446 -:103090001622843859F40E94EF1682FD9DC087E401 -:1030A0000E9449210E94162287E4EECF8CEF8C0FFC -:1030B000813A48F48C2F0E94612781118DC08C2F9A -:1030C0000E944921E3CF80E28C0F883048F4C7701A -:1030D00081E001C0880FCA95EAF70E94CF21D6CFC0 -:1030E0008BE58C0F833078F4C53A29F0C63A31F07D -:1030F00083E890E005C081E890E002C082E890E0BB -:10310000CF910C94111788E58C0F833108F064C0BF -:10311000C83A39F1C93A41F1CA3A49F1CB3A51F1C9 -:10312000CC3A59F1CD3A61F1C03B69F1CE3A71F137 -:10313000CF3A79F1C13B81F1C23B89F1C33B91F1B7 -:10314000C43B99F1C53BA1F1C63BA9F1C73BB1F125 -:10315000C83BB9F1C93BC1F1CA3BC9F180E090E07D -:1031600038C082EE90E035C089EE90E032C08AEE41 -:1031700090E02FC085EB90E02CC086EB90E029C05A -:1031800087EB90E026C08CEC90E023C08DEC90E0C3 -:1031900020C083E891E01DC08AE891E01AC082E96E -:1031A00091E017C084E991E014C081E292E011C07F -:1031B00083E292E00EC084E292E00BC085E292E0EE -:1031C00008C086E292E005C087E292E002C08AE28F -:1031D00092E0CF910C942717CF910895882309F49A -:1031E0004BC0823859F40E94EF1681FF45C089E335 -:1031F0000E9449210E94162289E30CC0833871F491 -:103200000E94EF1680FF38C083E50E9449210E948A -:10321000162283E50E948B210C941622843859F4DF -:103220000E94EF1682FF28C087E40E9449210E9475 -:10323000162287E4EFCF9CEF980F913A58F390E273 -:10324000980F983050F4877091E001C0990F8A95DB -:10325000EAF7892F0E94D521DFCF9BE5980F9330A5 -:1032600020F480E090E00C941117885A833120F408 -:1032700080E090E00C9427170895882321F00E94A5 -:10328000CF210C9416220895882321F00E94D52185 -:103290000C94162208957F928F929F92AF92BF92C4 -:1032A000CF92DF92EF92FF920F931F93CF93DF9312 -:1032B0001F92CDB7DEB77C01C62E772EFC010581AB -:1032C00002950F70128111110E94EC210E9442217F -:1032D000882379F0112369F080E28C0D883048F062 -:1032E00082E00E942B210E94422191E0D82ED92613 -:1032F00001C0D12CE72DE295EF70F0E0E05AFF4FCE -:103300000C948A2C872D807F072D0F70882311F055 -:103310000295007F112389F0002309F499C180E20E -:103320008C0D883020F4802F0E94CF2103C0802F85 -:103330000E94DF210E9416228BC18C2D0E94EE1864 -:10334000002309F4C3C180E28C0D883020F4802F63 -:103350000E94D52103C0802F0E94E5210E941622E1 -:10336000B5C1872D807F972D9F70803211F4892FF2 -:1033700003C0892F8295807FCC2021F0F1E0CF1609 -:10338000A1F01DC0112339F0002319F1013009F516 -:103390000E94FF219BC1002319F0013009F496C15E -:1033A00089830E940222898110C1112321F00630F5 -:1033B00008F08CC10EC0053008F088C106C1112389 -:1033C00059F0002331F0F701958190FF41C19F70C2 -:1033D00095830E943D197AC1002309F4F6C03EC1CD -:1033E000872D86958695837090E0009719F0019758 -:1033F00061F06CC1112321F08C2D972D937002C0C8 -:1034000080E090E00E94111761C1112321F08C2D02 -:10341000972D937002C080E090E00E94271756C15C -:103420008C2D112319F00E94392402C00E94A1247E -:103430000E9426254BC1872D837009F052C01111BF -:1034400045C18C2D829586958770880F880F9C2D9D -:103450009F70892E912CA12CB12C082E04C0880CB1 -:10346000991CAA1CBB1C0A94D2F7C4FE14C00FE01E -:1034700010E020E030E0B901A80104C0440F551F5E -:10348000661F771F8A95D2F7CB01BA0160957095B8 -:103490008095909503C060E070E0CB01272D2695C4 -:1034A0002695237030E02230310569F02330310554 -:1034B00089F0682979298A299B292130310571F001 -:1034C0000E94B71F03C1682979298A299B290E9474 -:1034D000D31FFCC00E94B71FC501B4010E949B1FEF -:1034E000F5C0112319F0872D817001C086958823BE -:1034F00009F4ECC08C2D829586958770880F880F13 -:103500009C2D9F70892E912CA12CB12C082E04C0CB -:10351000880C991CAA1CBB1C0A94D2F7C4FE14C0C8 -:103520000FE010E020E030E0B901A80104C0440F32 -:10353000551F661F771F8A95D2F7CB01BA01609598 -:1035400070958095909503C060E070E0CB01272DC9 -:10355000269526952370422F50E04230510569F0A0 -:103560004330510589F0682979298A299B294130FE -:10357000510571F00E949120A9C0682979298A29F2 -:103580009B290E94AD20A2C00E949120C501B401D8 -:103590000E9475209BC08C2D90E0FC01E05EF1093B -:1035A000E531F10508F050C0E059FF4F0C948A2C2A -:1035B0000C2D0F70872D8F71112321F00E940E208A -:1035C000802F07CF0E942F20802F0E9444197EC099 -:1035D000112341F0053008F079C0872D8F710E94CA -:1035E000542074C0063008F071C0F7CF112339F0B1 -:1035F000872D8F710E940E2069C01123C9F3872D7A -:103600008F710E942F2062C0112329F0872D8F71A6 -:103610000E94F91F5BC00E94EF1F58C0112351F098 -:10362000172D1F71812F0E940E2063E0812F0E94B1 -:1036300022214CC081E00E942B21023008F446C0B8 -:1036400082E00E942B2142C0112331F0002381F23D -:103650008C2D0E9426183AC0002389F28C2D0E94DE -:10366000EE1834C0472D4F706C2DC7010E945503D2 -:103670000E94131F2BC0111129C0472D4F7050E01D -:1036800042305105B9F04CF44115510581F04130FB -:103690005105E1F40E94212819C04330510569F019 -:1036A0004430510599F48C2D0E9473280FC00E945C -:1036B0000A280CC00E943D2809C00E94502806C05C -:1036C000472D4F706C2DC7010E94E005DD20F9F0F9 -:1036D0000E941E2180FD1BC0F70112820E9418214A -:1036E0000E940E20C7010E94961B0E9418210F9075 -:1036F000DF91CF911F910F91FF90EF90DF90CF90CE -:10370000BF90AF909F908F907F900C942F200F9040 -:10371000DF91CF911F910F91FF90EF90DF90CF90AD -:10372000BF90AF909F908F907F9008950F931F93BD -:10373000CF93DF93EC01888199812B813C81232BEE -:10374000B9F09F3F11F48F3F99F0CE010E94DF0343 -:10375000882371F0688179818A810E9414218C010B -:103760000E94C9200E94901FB801CE010E944B19EF -:10377000DF91CF911F910F9108950E94EC210E943B -:10378000FC210E94C1210E9416220E94D7250E947E -:10379000262580E090E00E94111780E090E00C94D4 -:1037A00027170E94DC210C94BD1B0E940921292FA0 -:1037B00022952F7030E02C3031054CF42A30310541 -:1037C0006CF42250310922303105A8F407C02C30A6 -:1037D000310569F02F30310551F00DC0803F69F09F -:1037E00018F4803E40F409C0843F29F406C093FBDE -:1037F000882780F9089580E0089581E00895CF93A7 -:10380000DF9300D000D01F92CDB7DEB70F900F909E -:103810000F900F900F90DF91CF910895CF93DF938A -:1038200000D000D000D0CDB7DEB726960FB6F89402 -:10383000DEBF0FBECDBFDF91CF9108951F93CF9311 -:10384000DF93C0919D0216E080919E02C81799F007 -:10385000D0E01C9FF0011D9FF00D1124E156FD4F9B -:103860004081518162817381848195810E940E1C07 -:103870002196C770E9CFDF91CF911F9108954091B4 -:10388000CF025091D0026091D1027091D20280910A -:10389000D3029091D4020C940E1C8091D402829594 -:1038A0008F7009F054C08091D102882309F44FC071 -:1038B00080919D02A0919E026091CF027091D002F2 -:1038C0004091D2025091D302B6E08A1709F43FC06A -:1038D00090E041155105C1F17F3F11F46F3FA1F117 -:1038E000B89FF001B99FF00D1124E156FD4F2181E1 -:1038F00072132AC02081621327C02281211124C0A3 -:10390000238134812417350710F421503109241BF9 -:10391000350B283C3105C0F42091D4022F70206172 -:103920002093D40226E0289FF001299FF00D112456 -:10393000EC55FD4F80818F70806180838FEC92E029 -:103940000E94961B0C941E1C01968770BECF089592 -:10395000CF92DF92EF92FF920F931F93CF93DF935B -:10396000CDB7DEB762970FB6F894DEBF0FBECDBFFE -:103970008C0185E0F801DE011D9601900D928A957B -:10398000E1F7D8014C9111965C91119712966C91C8 -:1039900012971396CD90DC9014973091CF027091CE -:1039A000D0028091D2029091D302009709F46BC1AA -:1039B0007F3F19F43F3F09F466C1E090D102EE2049 -:1039C00009F4C0C02091D402C816D90628F0F60127 -:1039D000E81BF90BCF0104C0809590958C0D9D1DBF -:1039E000FF24F394883C910578F0F12C207F09F0B6 -:1039F000C6C07C2DD98AC88A89890E94FF1B8FEC9A -:103A000092E00E94961BB1C0822F807F09F046C0D1 -:103A1000751314C0341312C0611110C02F702061CF -:103A20002093D4020E943F1C8FEC92E00E94961BD0 -:103A30008091D402D80115968C932EC0CD2819F10F -:103A40005F3F11F44F3FF9F0F62E61111CC08091D9 -:103A50009D0220919E0236E0821709F45AC090E040 -:103A6000389FF001399FF00D1124E156FD4F71810F -:103A7000571306C07081471303C07281711103C0D0 -:103A800001968770E9CFF62E662309F418C180915C -:103A9000D40281608093D402F12C11C1751308C047 -:103AA000341306C0611104C08091D402D801C3C090 -:103AB0004D875E878D859E856A8B0E94D51B6A899E -:103AC0008823E1F16623D1F12091D402822F8295DF -:103AD0008F7090E0029774F08091CF029091D002A5 -:103AE00098878F831986DB86CA862C87CE01079636 -:103AF0000E94961B86E0F801AFECB2E001900D92B7 -:103B00008A95E1F70E944D1C0E943F1CFF24F3940C -:103B1000D6C04D875E878D859E850E940921292FFD -:103B200022952F7030E0223031050CF0BCC09F7020 -:103B300009F0B6C0805E883008F4C1C0C8010E9498 -:103B4000961BE4CFC816D90608F453C0F601E81B4B -:103B5000F90BCF01883C910508F450C0F12C7C2D65 -:103B6000D98AC88A89890E94FF1BEFECF2E086E0BF -:103B7000DF011D928A95E9F70E943F1CA0C07513D2 -:103B800014C0341312C0611110C08091D402F80126 -:103B90008583C8010E94961B86E0EFECF2E0DF010E -:103BA0001D928A95E9F7FE2C8AC04D875E878D8528 -:103BB0009E856A8B0E94D51B6A89882309F4BECF33 -:103BC000662309F4BBCF2091D402822F82958F7097 -:103BD00090E002970CF48ECF8091CF029091D002AA -:103BE0009A8389831B82DD82CC822E83CE0101964B -:103BF0007FCF809590958C0D9D1DACCFF62E6623C2 -:103C000009F49CCF75132EC034132CC02091D4021C -:103C100020FD1FC0822F82958F70D9F0D801159694 -:103C20002C9315978F3049F08F5F982F9295907F46 -:103C3000822F8F70892B15968C93C8010E94961B3A -:103C400086E0F801AFECB2E001900D928A95E1F7C1 -:103C500093CF86E0F801AFECB2E001900D928A9527 -:103C6000E1F72DC04D875E878D859E850E94D51B0F -:103C7000811140CF8091D40281608093D402C80129 -:103C80000E94961B1CC0662309F458CF4D875E879F -:103C90008D859E850E94D51B882309F44FCF2ACF9E -:103CA000811148CF0CC0243031050CF047CF9F70F4 -:103CB00009F440CFF8019581907F09F03BCF8F2D1B -:103CC00062960FB6F894DEBF0FBECDBFDF91CF91E5 -:103CD0001F910F91FF90EF90DF90CF9008951F9369 -:103CE000CF93DF93CDB7DEB72C970FB6F894DEBF36 -:103CF0000FBECDBF4F83588769877A878B879C8794 -:103D0000CE0107960E94A81C882369F08F819885B0 -:103D10002A853B85232BF1F19F3F09F063C08F3F3C -:103D200009F060C037C086E0FE013796DE011196CB -:103D300001900D928A95E1F76F817885EA85FB8580 -:103D4000309741F17F3F11F46F3F21F120919E02A6 -:103D500030E0C90101968770992740919D0250E09B -:103D60008417950709F447C069837A83FD83EC8340 -:103D700096E0929FD001939FB00D1124A156BD4FA4 -:103D8000FE01319601900D929A95E1F780939E0283 -:103D90000E941E1C16E080919D0290919E02891740 -:103DA000C1F1189FC001112481569D4F0E94A81C8B -:103DB000882379F1E0919D021E9FF0011124E156C4 -:103DC000FD4F4081518162817381848195810E9480 -:103DD0000E1C80919D0290E0019687709927809338 -:103DE0009D02D9CF4F81588569857A858B859C85C1 -:103DF0000E940E1CCFCF0E94D11B10929E021092E7 -:103E00009D02EFECF2E086E0DF011D928A95E9F772 -:103E1000C1CF2C960FB6F894DEBF0FBECDBFDF9199 -:103E2000CF911F910895EF92FF920F931F93CF931D -:103E3000DF938C01009709F46CC0F12CEE24E3941D -:103E4000E8012196F8018491843740F4843008F029 -:103E500051C0813081F0823019F15BC0853709F49F -:103E600044C0A8F19CE7980F903708F052C08F77B4 -:103E70000E94EE1841C00E5F1F4FFE01C49180E208 -:103E80008C0F883048F4C7708E2D01C0880FCA95FA -:103E9000EAF70E94EF2114C08C2F0E9426182DC033 -:103EA0000E5F1F4FFE01C49180E28C0F883058F4E2 -:103EB000C7708E2D01C0880FCA95EAF70E94F521C0 -:103EC0000E9416221AC08C2F0E94EE1816C00E5F98 -:103ED0001F4FFE01C491CC2381F08FE99FE0019731 -:103EE000F1F700C00000C150F6CF0E5F1F4FFE017A -:103EF000F49003C00E9426188E018F2D882309F4A8 -:103F00009FCFEFE9FFE03197F1F700C0000081504B -:103F1000F5CFDF91CF911F910F91FF90EF90089512 -:103F200008956093D9027093DA028093DB02909334 -:103F3000DC020C94BD1B0F931F930091D9021091CA -:103F4000DA022091DB023091DC02DC01CB01802B14 -:103F5000912BA22BB32B8093D9029093DA02A093DA -:103F6000DB02B093DC021F910F910C94BD1B0F93E9 -:103F70001F930091D9021091DA022091DB02309157 -:103F8000DC02DC01CB0180239123A223B3238093A5 -:103F9000D9029093DA02A093DB02B093DC021F9166 -:103FA0000F910C94BD1B0F931F930091D902109198 -:103FB000DA022091DB023091DC02DC01CB018027A8 -:103FC0009127A227B3278093D9029093DA02A09376 -:103FD000DB02B093DC021F910F910C94BD1B109279 -:103FE000D5021092D6021092D7021092D8020C94E9 -:103FF000BD1B41E050E060E070E004C0440F551F7D -:10400000661F771F8A95D2F74093D5025093D60248 -:104010006093D7027093D8020C94BD1B41E050E02E -:1040200060E070E004C0440F551F661F771F8A953B -:10403000D2F78091D5029091D602A091D702B0918B -:10404000D802482B592B6A2B7B2B4093D5025093D7 -:10405000D6026093D7027093D8020C94BD1B41E046 -:1040600050E060E070E004C0440F551F661F771FEA -:104070008A95D2F740955095609570958091D502BC -:104080009091D602A091D702B091D802482359232B -:104090006A237B234093D5025093D6026093D702C4 -:1040A0007093D8020C94BD1B41E050E060E070E0DA -:1040B00004C0440F551F661F771F8A95D2F7809161 -:1040C000D5029091D602A091D702B091D80248278C -:1040D00059276A277B274093D5025093D6026093D5 -:1040E000D7027093D8020C94BD1B0F931F930091BD -:1040F000D5021091D6022091D7023091D802DC016E -:10410000CB01802B912BA22BB32B8093D5029093C4 -:10411000D602A093D702B093D8021F910F910C94AE -:10412000BD1B0F931F930091D5021091D6022091D1 -:10413000D7023091D802DC01CB0180239123A22346 -:10414000B3238093D5029093D602A093D702B09365 -:10415000D8021F910F910C94BD1B0F931F930091D8 -:10416000D5021091D6022091D7023091D802DC01FD -:10417000CB0180279127A227B3278093D502909364 -:10418000D602A093D702B093D8021F910F910C943E -:10419000BD1B0895CF92DF92EF92FF920F931F9372 -:1041A000CF93DF938C01C090D902D090DA02E090D7 -:1041B000DB02F090DC028091D5029091D602A091B2 -:1041C000D702B091D802C82AD92AEA2AFB2ACFE11D -:1041D000D0E0D701C6010C2E04C0B695A7959795DF -:1041E00087950A94D2F780FF06C0B8018C2F0E94F1 -:1041F0006508019721F4219760F780E001C08C2FBA -:10420000DF91CF911F910F91FF90EF90DF90CF90B2 -:104210000895CF93DF93EC010E94CA20BE010E9453 -:104220006508DF91CF910895CB010E94092108957F -:104230008091DD0285958595859508958091DD02B3 -:104240008770089598E0899F90011124262B209370 -:10425000DD020C940E202091DD0280958223809354 -:10426000DD02982F977069F430E0482F552747FDFD -:1042700050952417350729F08595859585950C94DB -:104280002F2008959091DD02977081E009F480E07D -:10429000089590911501992321F0909116019111A3 -:1042A00009C02091170130911801F90132969FEF52 -:1042B00040E01FC0982F9695969596959F3050F5A3 -:1042C000E0911701F0911801E90FF11D877021E0CD -:1042D00030E0A90102C0440F551F8A95E2F7CA01D8 -:1042E0009181892B818308959F3F39F04F5F4E3034 -:1042F00041F051915813F8CF0DC05111F7CF942FC1 -:10430000F5CF9F3F39F0F901E90FF11D97FDFA95BF -:1043100082830895089590911501992321F0909139 -:104320001601911109C02091170130911801F9016E -:104330003296205F3F4F1FC0982F96959695969581 -:104340009F30F0F4E0911701F0911801E90FF11D91 -:10435000877021E030E0A90102C0440F551F8A9503 -:10436000E2F7CA018095918189238183089531966E -:10437000E217F30729F090819813F9CF1082F7CF55 -:10438000089581E090E0E0911701F0911801E80FA5 -:10439000F91F1082019680319105A9F70895909137 -:1043A000F102892B8093F102089580959091F1029A -:1043B00089238093F10208951092F102089590915B -:1043C000F002892B8093F002089580959091F0027D -:1043D00089238093F00208951092F002089590913D -:1043E000EF02892B8093EF02089580959091EF0260 -:1043F00089238093EF0208951092EF02089580932D -:10440000DE0208951092DE020895809117019091C6 -:104410001801FC0131969C01205F3F4F80E0919193 -:1044200091118F5FE217F307D1F70895E09117011B -:10443000F09118018091F1028083E0911701F091D1 -:10444000180190818091F002892B8083E0911701FF -:10445000F091180190818091EF02892B80838091E7 -:10446000DE02882361F0E0911701F091180190813C -:10447000892B80830E94052281111092DE02809197 -:104480001701909118010C94FB1620E0009739F069 -:10449000AC0141505109842395232F5FF7CF822F20 -:1044A000089580911303843039F11092F30220E4CF -:1044B00088E190E00FB6F894A895809360000FBE55 -:1044C0002093600080E00E94BC0280E00E94FF0810 -:1044D00083B7817F846083BF83B7816083BF789413 -:1044E000889583B78E7F83BF88E10FB6F894809359 -:1044F0006000109260000FBE08950895089580E056 -:104500000E94BC020E947D220E945A090E947E22C3 -:104510000E94DF0991E0811101C090E0892F089588 -:104520000E94D11B80E00E94BC020E94F9270E94D9 -:10453000EF160C94FF081F920F920FB60F921124E2 -:104540008F939F93AF93BF938091F302811113C018 -:104550008091F4029091F502A091F602B091F702D9 -:104560004196A11DB11D8093F4029093F502A09392 -:10457000F602B093F702BF91AF919F918F910F9088 -:104580000FBE0F901F90189582E084BD93E095BDFB -:104590009AEF97BD80936E0008952FB7F89480919D -:1045A000F4029091F502A091F602B091F7022FBFAC -:1045B0000895CF92DF92EF92FF920F931F932FB740 -:1045C000F8944091F4025091F5026091F6027091D6 -:1045D000F7022FBF6A017B01EE24FF248C0120E04B -:1045E00030E0C016D106E206F30610F4415051093E -:1045F0009A01281B390BC9011F910F91FF90EF9071 -:10460000DF90CF9008951F920F920FB60F92112452 -:104610008F939F93AF93BF938091F4029091F50293 -:10462000A091F602B091F7020196A11DB11D8093F1 -:10463000F4029093F502A093F602B093F702BF91B3 -:10464000AF919F918F910F900FBE0F901F90189573 -:104650000E94EC13F8942FEF87EA91E621508040F6 -:104660009040E1F700C0000087E090EBDC01809310 -:104670001E0390931F03A0932003B09321039CE09B -:1046800088E10FB6F894A895809360000FBE9093D0 -:104690006000FFCF0E948923811102C00E94652320 -:1046A0000E9494238093F2020E949C2380931C0317 -:1046B00087FB882780F9809316010E949823682F32 -:1046C00070E080E090E00C94911F6DEE7EEF80E052 -:1046D00090E00E94B02C60E082E090E00E949E2C6E -:1046E00060E083E090E00E949E2C60E084E090E037 -:1046F0000E949E2C60E085E090E00E949E2C60E08D -:1047000086E090E00E949E2C6FEF87E090E00C9492 -:104710009E2C80E090E00E94982C21E08D3E9E4FE0 -:1047200009F020E0822F089582E090E00C94902C14 -:1047300083E090E00C94902C84E090E00C94902C1A -:10474000682F84E090E00C949E2C86E090E00C941E -:10475000902C682F86E090E00C949E2C87E090E0EF -:104760000C94902C682F87E090E00C949E2C809104 -:10477000FA0280FF0BC060911C0185E0689FB001C8 -:10478000112475956795759567952BC081FF09C0B4 -:1047900060911C0185E0689FB001112475956795B3 -:1047A00020C082FF07C060911C0185E0689FB001B6 -:1047B000112417C09091FB029923D1F060911B0145 -:1047C000961788F720911C0185E0289F90011124FD -:1047D000929FA001939F500D112470E0CA010E9486 -:1047E000762C6038710540F46115710539F002C00E -:1047F00065E070E0862F08958FE7089581E00895C1 -:104800008091FA0280FF08C060911A0170E07595EE -:1048100067957595679521C081FF06C060911A0163 -:1048200070E07595679519C082FF04C060911A0108 -:1048300070E010C09091FB029923C1F060911901C2 -:104840009617A0F780911A01899FC001112470E08A -:104850000E94762C6038710528F46115710521F0ED -:10486000862F08958FE7089581E0089561E070E054 -:10487000F4CF803F21F40E94B723819504C0813F8B -:1048800029F40E94B7238093FE020895823F21F409 -:104890000E94B723819504C0833F29F40E94B72367 -:1048A0008093FD020895893F19F40E94002405C0F9 -:1048B0008A3F31F40E94002481958093FF0208957D -:1048C0008B3F21F40E940024819504C08C3F29F481 -:1048D0000E940024809300030895843F21F4809176 -:1048E000FC02816017C0853F21F48091FC02826048 -:1048F00011C0863F21F48091FC0284600BC0873F89 -:1049000021F48091FC02886005C0883F31F48091D9 -:10491000FC0280618093FC0208958D3F21F4809118 -:10492000FA0281600BC08E3F21F48091FA0282600E -:1049300005C08F3F29F48091FA0284608093FA02C7 -:104940000895803F39F48091FE0287FF6CC0109279 -:10495000FE0269C0813F29F48091FE021816BCF363 -:1049600062C09091FD02823F29F497FF5CC01092D3 -:10497000FD0259C0833F19F41916CCF354C0893F86 -:1049800041F48091FF0218160CF04DC01092FF0206 -:104990004AC08A3F29F48091FF0287FF44C0F6CFC6 -:1049A0008B3F39F48091000387FF3DC010920003D4 -:1049B0003AC08C3F29F4809100031816BCF333C031 -:1049C000843F21F48091FC028E7F17C0853F21F443 -:1049D0008091FC028D7F11C0863F21F48091FC0202 -:1049E0008B7F0BC0873F21F48091FC02877F05C03D -:1049F000883F31F48091FC028F7E8093FC0213C0CB -:104A00008D3F21F48091FA028E7F0BC08E3F21F4FE -:104A10008091FA028D7F05C08F3F29F48091FA02C0 -:104A20008B7F8093FA028091FD0281110EC08091EC -:104A3000FE0281110AC08091FF02811106C080919F -:104A40000003811102C01092FB0208958CEF92E0E6 -:104A50000E9406170E94CD229093F9028093F802DB -:104A600008951F93CF93DF938091F8029091F902FC -:104A70000E94D922AC019091FB02992321F0209150 -:104A80001D0130E006C020911E018AE0289F9001A0 -:104A900011244217530708F486C08091FD02C0918B -:104AA000FE02D091FF0210910003811107C0C111D5 -:104AB00076C0D11174C0111172C075C09F3F19F03A -:104AC0009F5F9093FB02181624F40E94B7238093F3 -:104AD000FD028091FD0287FF05C00E94B7238195EA -:104AE0008093FD021C1624F40E94B7238093FE02DB -:104AF0008091FE0287FF05C00E94B72381958093B5 -:104B0000FE026091FD02662339F1C091FE02CC23C2 -:104B100019F1772767FD7095872F972F0E949829A5 -:104B200023E333E343E35FE30E94A82A0E9465295D -:104B30006093FD026C2F772767FD7095872F972F65 -:104B40000E94982923E333E343E35FE30E94A82A0A -:104B50000E9465296093FE021D1624F40E94002421 -:104B60008093FF028091FF0287FF05C00E9400240E -:104B700081958093FF02111624F40E9400248093F3 -:104B800000038091000387FF05C00E9400248195E7 -:104B900080930003DF91CF911F910C9426259F3FB6 -:104BA00009F08ECF96CFDF91CF911F910895ECEF52 -:104BB000F2E085E0DF011D928A95E9F71092FB0291 -:104BC0001092FA020895833081F128F4813059F06F -:104BD0008230D1F00895853009F449C0B8F18630AB -:104BE00009F456C0089580911E01262F30E0280F49 -:104BF000311D2F3F310524F4680F60931E01089585 -:104C00008FEF80931E01089580911D01262F30E0C3 -:104C1000280F311D2F3F310524F4680F60931D01CB -:104C200008958FEF80931D01089580911C01262F18 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001C0108958FEF80931C01089580911B0132 -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931B0108958FEF80931B01089580913D -:104C70001A01262F30E0280F311D2F3F310524F473 -:104C8000680F60931A0108958FEF80931A010895B9 -:104C900080911901262F30E0280F311D2F3F31055B -:104CA00024F4680F6093190108958FEF8093190120 -:104CB0000895833011F128F4813049F0823091F069 -:104CC0000895853081F120F18630C1F108958091F9 -:104CD0001E01681720F4861B80931E010895109210 -:104CE0001E01089580911D01681720F4861B809392 -:104CF0001D01089510921D01089580911C016817EF -:104D000020F4861B80931C01089510921C010895C5 -:104D100080911B01681720F4861B80931B01089566 -:104D200010921B01089580911A01681720F4861BC8 -:104D300080931A01089510921A0108958091190123 -:104D4000681720F4861B80931901089510921901A9 -:104D500008950F931F93873208F048C08E3108F0F2 -:104D60008DC0803109F477C008F5873009F461C03F -:104D700068F4863009F09DC08091F202817F8E7FB9 -:104D80008093F20281E08093020394C08B3009F497 -:104D900089C08E3009F08DC08091F20282FB2227FB -:104DA00020F991E0922790FB82F95EC0863109F4E8 -:104DB00079C060F4813109F07CC00E94D11B9091D0 -:104DC000160181E08927809316016CC0893109F4AE -:104DD00069C08B3109F06DC08091F20281FB2227FE -:104DE00020F991E0922790FB81F93EC0883309F4C5 -:104DF00059C050F4893209F457C0853309F454C0BE -:104E0000873209F451C055C0833409F44DC028F4E9 -:104E10008A3308F44EC0895332C0883409F049C03F -:104E20000E94D11B0E940F0A0E94D6030E942823D1 -:104E300039C09091F202892F8095817080FB90F9A2 -:104E400029F0966098609093F20234C0997F977F22 -:104E50009093F20227C08091F20283FB222720F96F -:104E600091E0922790FB83F98093F2029923D1F08D -:104E70008091F20281608093F20214C08D5141E072 -:104E800050E060E070E08A019B0104C0000F111F38 -:104E9000221F331F8A95D2F7C901B8010E94911FC2 -:104EA0000E94D11B81E006C061E070E080E090E0EC -:104EB000F5CF80E01F910F91089580E0089580E084 -:104EC0000895CF93C82F80910203813069F018F0C4 -:104ED0008230C9F184C0E0911701F09118018081FE -:104EE000823209F07EC007C0E0911701F0911801ED -:104EF0008081823261F48C2F0E945D27811104C071 -:104F00008C2F0E94A9261DC081E090E01AC08C2F32 -:104F10000E945F27811114C0C43179F048F4CB306E -:104F200079F0C03109F061C082E08093020308C0CB -:104F3000C93219F0C83321F058C01092020355C08D -:104F400081E0817054C0C93291F120F5C43179F10A -:104F5000B0F4C73009F047C08EE180931E0182E3B0 -:104F600080931D018AE080931C0184E180931B01E2 -:104F700088E080931A0188E28093190134C0CE51F1 -:104F8000C63088F5EC2FF0E0EA54FE4F8081809324 -:104F9000010329C0CE34E9F020F4CB3421F56AE0D6 -:104FA00013C0C13579F0C235F1F461E00DC08091D4 -:104FB0000103882319F01092010315C081E080934A -:104FC000020315C061E006C0809101030E94E32541 -:104FD0000AC06AE0809101030E94592604C0109221 -:104FE000020380E004C081E002C080E0AACFCF913C -:104FF00008950E948923811102C00E9465230E94A6 -:10500000A52380931D0380FF02C0869501C080E028 -:105010000C94BC0280911D03982F9695292F30E0A7 -:10502000233031054CF49F5F990F8170892B81608B -:1050300080931D030E94A92380911D0386950C94E3 -:10504000BC0280911D03982F969591F09158990F6D -:105050008170892B80931D038E7F91E009F490E08D -:1050600080911D0390FB80F980931D030E94A9236A -:1050700080911D0386950C94BC0280911D03982F8E -:10508000909590FB80F980931D030E94A923809145 -:105090001D0380FF02C0869501C080E00C94BC0215 -:1050A00090911D03892F86958F5F8F779170843043 -:1050B00028F4880F892B80931D0302C090931D0351 -:1050C00080911D038E7F91E009F490E080911D0393 -:1050D00090FB80F980931D030E94A92380911D03FA -:1050E00086950C94BC0220911D03922F96958927DA -:1050F000982F990F822F8170892B80931D038E7FAB -:1051000091E009F490E080911D0390FB80F9809379 -:105110001D030E94A92380911D0386950C94BC0257 -:1051200080911D03869508955058BB27AA270ED05D -:10513000D1C1C2D130F0C7D120F031F49F3F11F47A -:105140001EF4B7C10EF4E095E7FB9FC1E92FD3D160 -:1051500080F3BA17620773078407950718F071F494 -:105160009EF5EBC10EF4E0950B2EBA2FA02D0B018E -:10517000B90190010C01CA01A0011124FF27591B9C -:1051800099F0593F50F4503E68F11A16F040A22FA2 -:10519000232F342F4427585FF3CF46953795279513 -:1051A000A795F0405395C9F77EF41F16BA0B620B12 -:1051B000730B840BBAF09150A1F0FF0FBB1F661F59 -:1051C000771F881FC2F70EC0BA0F621F731F841F9C -:1051D00048F4879577956795B795F7959E3F08F0C2 -:1051E000B3CF9395880F08F09927EE0F9795879581 -:1051F000089527D108F481E008950CD06BC163D1E4 -:1052000040F05AD130F021F45F3F19F03EC1511106 -:1052100095C14FC170D198F39923C9F35523B1F3C8 -:10522000951B550BBB27AA2762177307840738F015 -:105230009F5F5F4F220F331F441FAA1FA9F333D074 -:105240000E2E3AF0E0E830D091505040E695001C28 -:10525000CAF729D0FE2F27D0660F771F881FBB1FE4 -:10526000261737074807AB07B0E809F0BB0B802DBE -:10527000BF01FF2793585F4F2AF09E3F510568F00A -:1052800004C15CC15F3FECF3983EDCF386957795F3 -:105290006795B795F7959F5FC9F7880F911D96950C -:1052A000879597F90895E1E0660F771F881FBB1F68 -:1052B000621773078407BA0720F0621B730B840B15 -:1052C000BA0BEE1F88F7E095089504D06894B111E9 -:1052D00035C1089518D188F09F5790F0B92F9927BC -:1052E000B751A0F0D1F0660F771F881F991F1AF0F1 -:1052F000BA95C9F712C0B13081F01FD1B1E008955D -:105300001CC1672F782F8827B85F39F0B93FCCF3DD -:10531000869577956795B395D9F73EF490958095E6 -:10532000709561957F4F8F4F9F4F0895E89409C006 -:1053300097FB3EF490958095709561957F4F8F4FC8 -:105340009F4F9923A9F0F92F96E9BB279395F695DE -:10535000879577956795B795F111F8CFFAF4BB0F5C -:1053600011F460FF1BC06F5F7F4F8F4F9F4F16C0C0 -:10537000882311F096E911C0772321F09EE8872F4A -:10538000762F05C0662371F096E8862F70E060E006 -:105390002AF09A95660F771F881FDAF7880F96957F -:1053A000879597F9089588D018F011F08CD038F4CB -:1053B00080C0C4C0E92F9FD0B0F35523C9F3E7FBE9 -:1053C0006217730784079507A8F199F3E92FFF2760 -:1053D00088232AF03197660F771F881FDAF7952FF9 -:1053E0005527442332F091505040220F331F441F61 -:1053F000D2F7BB27E91BF50B621B730B840BB109BA -:10540000C1F222F4620F731F841FB11D31972AF07D -:10541000660F771F881FBB1FEFCF915050405AF087 -:1054200041F0882332F0660F771F881F915050405B -:10543000C1F7939530C08695779567959F5FD9F7AB -:10544000F8CF990F0008550FAA0BE0E8FEEF1616EB -:105450001706E807F907C0F012161306E407F50768 -:1054600098F0621B730B840B950B39F40A2661F0DC -:10547000232B242B252B21F408950A2609F4A1407F -:10548000A6958FEF811D811D089597F99F6780E88C -:1054900070E060E008959F3F31F0915020F48795CF -:1054A00077956795B795880F911D9695879597F98C -:1054B00008959FEF80EC089500240A9416161706AD -:1054C00018060906089500240A94121613061406F5 -:1054D00005060895092E0394000C11F4882352F058 -:1054E000BB0F40F4BF2B11F460FF04C06F5F7F4F10 -:1054F0008F4F9F4F089557FD9058440F551F59F0F7 -:105500005F3F71F04795880F97FB991F61F09F3FB0 -:1055100079F087950895121613061406551FF2CFD9 -:105520004695F1DF08C0161617061806991FF1CF29 -:1055300086957105610508940895E894BB27662750 -:105540007727CB0197F908957CDF08F48FEF089552 -:105550000BD0C0CFB1DF28F0B6DF18F0952309F0EB -:1055600094CFA7CF1124EACFC6DFA0F3959FD1F344 -:10557000950F50E0551F629FF001729FBB27F00D01 -:10558000B11D639FAA27F00DB11DAA1F649F662756 -:10559000B00DA11D661F829F2227B00DA11D621FA5 -:1055A000739FB00DA11D621F839FA00D611D221F5F -:1055B000749F3327A00D611D231F849F600D211D43 -:1055C000822F762F6A2F11249F5750408AF0E1F0E6 -:1055D00088234AF0EE0FFF1FBB1F661F771F881F2F -:1055E00091505040A9F79E3F510570F04ECFA6CF85 -:1055F0005F3FECF3983EDCF3869577956795B7951A -:10560000F795E7959F5FC1F7FE2B880F911D969543 -:10561000879597F90895FA01EE0FFF1F309621053F -:10562000310599F16115710561F48038BFE39B077D -:1056300049F168949038810561F08038BFEF9B078D -:1056400041F0992342F5FF3FE1053105210511F1B4 -:10565000E8940894E795D901AA2329F4AB2FBE2F2B -:10566000F85FD0F310C0FF5F70F4A695E0F7F7394C -:1056700050F019F0FF3A38F49F779F930CD00F90B9 -:1056800007FC905808953EF014CF60E070E080E889 -:105690009FE308954FE79F775F934F933F932F9337 -:1056A0009ED02F913F914F915F9152DF05C019F429 -:1056B0000EF0EBCE42CFFDCE26DFC8F39638C0F712 -:1056C00007F80F92E8942BE33AEA48EB5FE74EDFE6 -:1056D0000F920F920F924DB75EB70F92C0D0EAE0D3 -:1056E000F1E016D04F915F91EF91FF91E595EE1F9C -:1056F000FF1F49F0FE57E0684427EE0F441FFA955C -:10570000E1F74195550B32D00F9007FE26C0089562 -:10571000DF93CF931F930F93FF92EF92DF927B0162 -:105720008C01689405C0DA2EEF011EDFFE01E894BB -:10573000A5912591359145915591AEF3EF0106DD87 -:10574000FE019701A801DA9479F7DF90EF90FF90BE -:105750000F911F91CF91DF9108959B01AC0160E003 -:1057600070E080E89FE349CD90CE95CECCDEE8F3A3 -:105770009923D9F3940F511DBBF39150504094F0ED -:1057800059F0882332F0660F771F881F91505040E0 -:10579000C1F79E3F510544F7880F911D9695879557 -:1057A00097F908955F3FACF0983E9CF0BB27869533 -:1057B00077956795B79508F4B1609395C1F7BB0FDE -:1057C00058F711F460FFE8CF6F5F7F4F8F4F9F4F07 -:1057D000E3CFB4CE0EF05FCE6CCE689456CE93DE9F -:1057E000C8F39923D1F3C6F3DF93CF931F930F939D -:1057F000FF92C92FDD2788232AF02197660F771F94 -:10580000881FDAF720E030E040E85FEB9FE388395B -:1058100020F0803E30F021968F7787DCE2E3F1E0E4 -:1058200003C083DCEFE5F1E073DF8B01BE01EC0127 -:10583000FB2E6F5771097595771F880B990B78DDD3 -:1058400028E132E741E35FE38FDEAF2D9801AE013F -:10585000FF900F911F91CF91DF9178DC3BCEFA0141 -:10586000DC01AA0FBB1F9B01AC01BF5728F4222704 -:105870003327442750781FC0B75188F4AB2F00243A -:10588000469537952795011CA395D2F3002069F022 -:10589000220F331F441FB395DAF30DD045CC61308E -:1058A0007105A0E88A07B94630F49B01AC01662770 -:1058B000772788279078309621F0208331834283A0 -:1058C00053830895AA1BBB1B51E107C0AA1FBB1F2E -:1058D000A617B70710F0A61BB70B881F991F5A957C -:1058E000A9F780959095BC01CD01089597FB072EEF -:1058F00016F4009407D077FD09D00E94622C07FCB3 -:1059000005D03EF4909581959F4F089570956195CF -:105910007F4F0895EE0FFF1F0590F491E02D09943D -:10592000F999FECF92BD81BDF89A992780B5089567 -:10593000A8E1B0E042E050E00C94B82C262FF99991 -:10594000FECF92BD81BDF89A019700B4021639F0DE -:105950001FBA20BD0FB6F894FA9AF99A0FBE0895AF -:105960000196272F0E949F2C0C949E2CDC01CB01CA -:10597000FC01F999FECF06C0F2BDE1BDF89A31965F -:1059800000B40D9241505040B8F70895F894FFCFFD -:10599000640007000CFF0000003F64F30F81105EFD -:1059A000102A10F60F0101DF022808140A321E0027 -:1059B00002040507090B0C0E1011131517181A1CF9 -:1059C0001D1F2123242628292B2D2F303234353733 -:1059D000393B1F0F03764F5F6F7F49694379095940 -:1059E00053633149803F5D8B803FF8BF803FCAE100 -:1059F000803F73ED803FCAE1803FF8BF803F5D8B01 -:105A0000803F3149803F0000803FF16D7F3F75EA64 -:105A10007E3F4C827E3F833F7E3F84287E3F833F94 -:105A20007E3F4C827E3F75EA7E3FF16D7F3F0000F6 -:105A3000803F3F4D3639830436040004C7035A03C0 -:105A400073038C03A503010203040506070809007C -:00000001FF diff --git a/keyboard/planck/keymaps/max/compiled.hex b/keyboard/planck/keymaps/max/compiled.hex deleted file mode 100644 index d9594415fb..0000000000 --- a/keyboard/planck/keymaps/max/compiled.hex +++ /dev/null @@ -1,1449 +0,0 @@ -:100000000C9496020C94DA020C94DA020C94DA0244 -:100010000C94DA020C94DA020C94DA020C94DA02F0 -:100020000C94DA020C94DA020C9478140C944A15AD -:100030000C94AC220C94DA020C94DA020C94DA02DE -:100040000C94DA020C943C030C94DA020C94DA025D -:100050000C94DA020C9414230C94DA020C94DA0255 -:100060000C94DA020C94DA020C94DA020C94DA02A0 -:100070000C94DA020C94DA020C94DA020C94DA0290 -:100080000C94ED0A0C94DA020C94DA020C94DA0265 -:100090000C94DA020C94DA020C94DA020C94DA0270 -:1000A0000C94DA020C94DA020C94DA02B715D91522 -:1000B000C716D915C7161E164116C7169616A916C5 -:1000C00093199319C219C219011A211A771B771BA8 -:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 -:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 -:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 -:10010000F91A071B0E1B151B1F1B07634236B79BF3 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000000000F1A299 -:1001D000F1A3018C028C290014001A0008001500FC -:1001E00017001C0018000C00120013002A002B003E -:1001F00004001600070009000A000B000D000E00A5 -:100200000F0033002800E1001D001B00060019004C -:100210000500110010003600370038003400E000FF -:100220008350E200E30002202C002C00012050004B -:10023000510052004F00290014001A000900130059 -:100240000A000D000F0018001C0033002A002B00CC -:10025000040015001600170007000B00110008002D -:100260000C0012002800E1001D001B000600190010 -:1002700005000E0010003600370038003400E000A2 -:100280008350E200E30002202C002C0001205000EB -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00010048 -:1002B0000320042000500100010001002D002E0049 -:1002C0002F00300001000100440045006800690073 -:1002D0006A006B006C006D006E006F003100010061 -:1002E0000100010001000100010001000120AB003C -:1002F000AA00A900AE0035021E021F022002210240 -:100300002202230224022502260227022A000100DB -:100310000320042000500100010001002D022E02E4 -:100320002F023002010001003A003B003C003D007A -:100330003E003F0040004100420043003102010006 -:100340000100010001000220010001000100AB00DA -:10035000AA00A900AE002803540068006500200030 -:1003600050006C0061006E0063006B0020004B00C9 -:100370006500790062006F00610072006400000097 -:100380002C034F007200740068006F006C0069005D -:100390006E0065006100720020004B00650079006E -:1003A00062006F00610072006400730000000403CB -:1003B000090409026D00040100A0FA09040000010B -:1003C00003010100092111010001223F00070581FD -:1003D0000308000A090401000103010200092111B8 -:1003E000010001224D000705820308000A090402EA -:1003F000000103000000092111010001223600075D -:1004000005830308000A0904030001030000000932 -:100410002111010001223900070584031000011297 -:1004200001100100000008EDFE6060010001020003 -:100430000105010906A101050719E029E7150025B5 -:1004400001950875018102050819012905950575B1 -:10045000019102950175039101050719002977158E -:10046000002501957875018102C005010980A1016F -:10047000850216010026B7001A01002AB700751080 -:1004800095018100C0050C0901A101850316010039 -:10049000269C021A01002A9C02751095018100C059 -:1004A00005010902A1010901A10005091901290598 -:1004B00015002501950575018102950175038101DE -:1004C0000501093009311581257F950275088106DE -:1004D00009381581257F950175088106050C0A38B4 -:1004E000021581257F950175088106C0C0050109A7 -:1004F00006A101050719E029E715002501950875F2 -:1005000001810295017508810105081901290595E8 -:1005100005750191029501750391010507190029DF -:10052000FF150025FF950675088100C011241FBE28 -:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A -:100540001E0390911F03A0912003B09121038730D7 -:10055000904BA740B04BB9F410921E0310921F03AA -:10056000109220031092210314BE84B7877F84BFAA -:1005700088E10FB6F89480936000109260000FBE7F -:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 -:1005900002C005900D92A03CB107D9F713E0A0EC82 -:1005A000B1E001C01D92AE31B107E1F70E94BE116A -:1005B0000C94D72C0C9400000895089581E00895C0 -:1005C00008950C94DD020C94DE020C94E0020E946B -:1005D000A12823E030E0281B3109220F2093C40119 -:1005E0000895282F2F9880918000211108C0877FBF -:1005F0008093800010928D0010928C001BC0886048 -:1006000080938000233019F48FEF9FEF0FC083E0B9 -:1006100090E0821B9109880F991F2FEF3FEFA901EE -:1006200002C0569547958A95E2F7CA0190938D00CE -:1006300080938C000C94E7020E94E70284E0809390 -:10064000C3011092C0010895279A2F988FEF9FEF52 -:1006500090938700809386008AE08093800089E1F0 -:10066000809381000E940A280C941C030E9424039A -:100670006E9A769A0C94DC021F920F920FB60F922C -:1006800011242F933F938F939F93EF93FF93E091C8 -:10069000C101F091C201CF0101969093C2018093F4 -:1006A000C1010090C30102C0F695E7950A94E2F7F4 -:1006B000EF738091C001823019F4E03251F404C02C -:1006C000813039F4EF3329F480916F008D7F80936E -:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B -:1006E000C001E39F900D11240090C40102C09695B3 -:1006F00087950A94E2F790938D0080938C00FF9188 -:10070000EF919F918F913F912F910F900FBE0F907E -:100710001F90189581E008950C948A0308950C9415 -:10072000360380911502882309F448C08091D101D5 -:100730009091D201009779F40E94DE229093D20129 -:100740008093D1018091D30190E0009771F4809162 -:10075000D40190E00AC00E94EA2220910001309169 -:1007600001012817390740F329C00197880F991F05 -:10077000880F991FFC01EB52FE4F608171818281CD -:1007800093810E94530AE091D30184E0E89FF00135 -:100790001124EB52FE4F60817181828193814FE081 -:1007A00050E00E940B0E8091D30190E00196609181 -:1007B000D40170E00E94872C8093D3010C94E10255 -:1007C000109217020C94200A0895089581E08093F6 -:1007D00017020C94E503089508958F929F92AF92AB -:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA -:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 -:10080000FC0100811181C8010E94DB20B8010E9417 -:10081000F2058C01B7010E948C03882309F4CCC136 -:100820000032F0E51F0741F4F7018281882309F4C3 -:1008300058C00E946F0EC0C10132F0E51F0741F49D -:10084000F7018281882309F44CC00E94780EB4C15C -:100850000232F0E51F0751F4F7018281882309F481 -:1008600040C00E946B0E8111F0CFE3CF0332F0E560 -:100870001F0739F4F7018281882399F10E94E6036A -:100880009BC10432F0E51F0739F4F7018281882308 -:1008900041F10E94E00390C10532F0E51F0749F4E1 -:1008A000F70182818823E9F0809117028111F1CF4D -:1008B000E5CF0632F0E51F0739F4F701828188237E -:1008C00081F00E947F0E0AC00732F0E51F0749F44D -:1008D000F7018281882329F00E948A0E0E94EC038E -:1008E0006BC180911702811105C0F70182818111CE -:1008F000CFC018C1003E110579F4F7018281882329 -:1009000009F44DC00E94200A81E0809316021092E3 -:1009100015021092D40150C1023E110559F4F7019D -:1009200082818823E1F10E94200A1092160210921F -:10093000150242C1033E110591F4F701828188231B -:1009400071F10E94200A1092160281E08093150234 -:100950001092D3011092D2011092D1012DC1023513 -:10096000110559F4F7018281882309F425C180918A -:100970000001909101010A970DC00135110579F42C -:10098000F7018281882309F417C1809100019091B9 -:1009900001010A9690930101809300010DC14091DD -:1009A000040183E2EFE1F1E0DE01119601900D9286 -:1009B0008A95E1F7F701808121E030E02C0F3D1F9F -:1009C000280F311DC9012091020130910301FC0162 -:1009D000E20FF31F6081772767FD7095640F711D2B -:1009E000882777FD8095982F0E94A92920E030E084 -:1009F00040E451E40E940E294B015C01F701218182 -:100A000084E090E0821B9109BC01882777FD8095E6 -:100A1000982F0E94A9299B01AC01C501B4010E9435 -:100A2000A6289B01AC0160E070E080E090E40E94A9 -:100A30001C2B20E030E04CED50E40E94B92A4B0121 -:100A40005C01F70182818823D1F04FE050E0C501BD -:100A5000B4010E940B0E809116028823A1F08091B0 -:100A6000D40124E0829FF0011124EB52FE4F8082DA -:100A70009182A282B3828F5F8093D40104C0C501AA -:100A8000B4010E94530A0F3F110508F02ECF94C005 -:100A90008091D00181111FC0043130E5130709F0A6 -:100AA00051C00E948E0381E08093D0010E94DE221B -:100AB0009093CF018093CE011092C7011092C9018B -:100AC0001092C8011092CB011092CA011092CD0170 -:100AD0001092CC0171C08091CE019091CF010E9403 -:100AE000EA22883C910570F48091C701E82FF0E07C -:100AF000EE0FFF1FE853FE4F118300838F5F80933B -:100B0000C7015AC0043880E5180721F005381045A0 -:100B100001F13AC0F7018281882341F01092C501AA -:100B200082E01EC0043830E5130759F58091C501F5 -:100B3000811106C086E20E94371886E20E94FF18E3 -:100B400082E01CC00438F0E51F0741F3053810456A -:100B5000D9F4F7018281882331F01092C60180E236 -:100B60000E944E1929C08091C601811106C087E2FA -:100B70000E94371887E20E94FF1880E20E945519F0 -:100B80001BC00538104529F381E08093C50180938F -:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 -:100BA000DF91CF911F910F91FF90EF90BF90AF9089 -:100BB0009F908F900C94E30280E0A3960FB6F89478 -:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 -:100BD000EF90BF90AF909F908F90089580E090E04D -:100BE000089508959CE0799FF001112490E3899F76 -:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B -:100C0000FE4F859194910895880F991FFC01E45B34 -:100C1000FF4F859194910895880F991FFC01E4532B -:100C2000FE4F8591949108950F931F93CF93DF9377 -:100C3000EC01811521E39207A0F5C11580E3D807E7 -:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 -:100C500007C2C83AD10578F4C53AD10508F06AC090 -:100C6000C130D10509F463C008F4F7C1C430D1051F -:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 -:100C8000C11590E2D90708F0AFC0C11521E0D20725 -:100C900008F0E6C1C03FD10508F4DFC18E01106540 -:100CA0001FC2C03880E5D80700F5C03790E5D907E6 -:100CB00008F0A3C0C11520E5D20709F4ACC050F478 -:100CC000CE01905480319F4008F0C7C1DF708E0183 -:100CD000106A06C2C13080E5D80709F4AEC0C4313D -:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 -:100CF00009F48EC050F4C13890E5D90709F482C0D8 -:100D000008F083C000E011EDEBC1C03181E5D807E8 -:100D100008F4A3C1C11597E5D90708F436C1CE017F -:100D200090578115904108F098C1DF7093C101E0A0 -:100D300010E0D6C1C53AD10509F494C1C63AD1052F -:100D400009F093C102E810E4CBC1C83AD10509F417 -:100D50008FC1C93AD10509F48EC1CA3AD10509F447 -:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 -:100D70008BC1CD3AD10509F48AC1C03BD10509F434 -:100D800089C1CE3AD10509F488C1CF3AD10509F419 -:100D900087C1C13BD10509F486C1C23BD10509F425 -:100DA00085C1C33BD10509F484C1C43BD10509F415 -:100DB00083C1C53BD10509F482C1C63BD10509F405 -:100DC00081C1C73BD10509F480C1C83BD10509F4F5 -:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 -:100DE0007DC100E014E47CC1CE019F700E940C061E -:100DF00078C1DD278E01106C73C1CF70DD278E01A5 -:100E0000146D6EC100E010ED6BC100E012ED68C121 -:100E100000E013ED65C10E94E21B0E94200A0E94BF -:100E2000E4038FEF94E32CE0815090402040E1F701 -:100E300000C000000E94392353C18091F2028160FA -:100E40008093F2024DC10E949A23811102C00E9438 -:100E500076230E94AD2390E090931D0380931C03A2 -:100E6000C23080E5D80721F480911C03816086C0E0 -:100E7000C43090E5D90721F480911C0382607EC0C4 -:100E8000C63020E5D20721F480911C03846076C02F -:100E9000C83080E5D80719F480911C0327C0CA30F8 -:100EA00090E5D90721F480911C03806167C0CC30A4 -:100EB00020E5D20721F480911C0380625FC0CE3010 -:100EC00080E5D80721F480911C03806457C0C031AD -:100ED00090E5D90721F480911C0380684FC0C2318E -:100EE00020E5D20729F480911C038460886046C005 -:100EF000C33080E5D80721F480911C038E7F3EC06B -:100F0000C53090E5D90721F480911C038D7F36C050 -:100F1000C73020E5D20721F480911C038B7F2EC0BF -:100F2000C93080E5D80719F480911C0326C0CB3066 -:100F300090E5D90721F480911C038F7E1FC0CD302E -:100F400020E5D20721F480911C038F7D17C0CF309C -:100F500080E5D80721F480911C038F7B0FC0C1313D -:100F600090E5D90721F480911C038F7707C0C33126 -:100F7000D04531F480911C038B7F877F80931C03C5 -:100F800080911C030E94B123ABC08D2F99278F70D5 -:100F9000992781309105D9F49E012370332702C02F -:100FA000880F991F2A95E2F79C688E0144E0000F94 -:100FB000111F4A95E1F700271370802B912B53E006 -:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 -:100FD000910531F4DC2FCC278E01016F106A80C09F -:100FE0008330910569F4CE018370992701E010E008 -:100FF00002C0000F111F8A95E2F7C8019C680FC05C -:1010000084309105B9F4CE018370992701E010E096 -:1010100002C0000F111F8A95E2F7C8019A6823E009 -:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 -:101030001D2B56C08530910531F4DC2FCC278E0155 -:10104000046F106A4DC0069709F04AC0CF71DD27C2 -:10105000DC2FCC278E01106243C000E010E040C0BE -:101060008E013EC001E810E43BC003E810E438C044 -:1010700002EE14E435C009EE14E432C00AEE14E4C2 -:101080002FC005EB14E42CC006EB14E429C007EBD9 -:1010900014E426C00CEC14E423C00DEC14E420C0CE -:1010A00003E815E41DC00AE815E41AC002E915E4D6 -:1010B00017C004E915E414C001E216E411C003E20C -:1010C00016E40EC004E216E40BC005E216E408C004 -:1010D00006E216E405C007E216E402C00AE216E4DE -:1010E000C801DF91CF911F910F9108959CE0799FE6 -:1010F000F001112490E3899FE00DF11D1124E60F0A -:10110000F11DEE0FFF1FEA52FE4F85919491803E34 -:101110009105E0F4803C910558F58133910509F47F -:101120006FC048F48932910509F463C08A32910591 -:1011300009F46DC072C089339105E9F082389105D8 -:10114000D1F08533910509F44DC067C0833E910508 -:1011500081F138F4803E9105B9F0823E9105D9F0D5 -:101160005CC0863E910561F1873E9105A1F155C0B5 -:101170000E940406089520911C0320FD02C021FF57 -:101180004CC080EE90E049C080911C0380FFF9CFF5 -:1011900089E390E042C080911C0382FF0EC08091E1 -:1011A0001C0384FF03C080E090E037C083EE90E032 -:1011B00034C080911C0382FFF2CF82EE90E02DC0FC -:1011C00080911C0383FF0BC080911C0384FDEBCF37 -:1011D00087EE90E022C080911C0383FFF5CF86EE5E -:1011E00090E01BC080911C0385FF07C089E290E05E -:1011F00014C080911C0385FFF9CF85E390E00DC0FA -:1012000080911C0386FF07C08AE290E006C08091AF -:101210001C0386FFF9CF81E390E00E941406089535 -:101220000C94E502E82FF0E0E25BFE4F8081E82FAE -:10123000EF70F0E082958F7021E030E0A90102C0EC -:10124000440F551F8A95E2F740A308950F931F930B -:10125000CF93DF9385B7806885BF85B7806885BFEA -:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 -:10127000E82FEF70F0E021A182958F70A80102C0E5 -:10128000440F551F8A95E2F7CA01822B81A38C2F48 -:101290000E941209219740F78BE090E061E070E036 -:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 -:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F -:1012C0009D01242B22A3019758F7DF91CF911F9105 -:1012D0000F910C948F03EF92FF920F931F93CF9374 -:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA -:1012F0008C2F0E9412098BE090E040E050E0FC014E -:10130000EE5BFE4F6081E62FEF70F0E020A130E051 -:1013100062956F7002C0359527956A95E2F720FDBA -:1013200009C09701082E02C0220F331F0A94E2F76A -:10133000422B532B019718F7F801929182918F015C -:101340008417950721F051834083D09305018C2F9A -:101350000E941209C15060F68091050187FD2CC0E2 -:101360008150809305018F3F39F08FE99FE001970D -:10137000F1F700C0000020C080911E0290911F0272 -:10138000909327028093260280911C0290911D0267 -:10139000909325028093240280911A0290911B025F -:1013A0009093230280932202809118029091190257 -:1013B00090932102809320020E94910381E0DF91AB -:1013C000CF911F910F91FF90EF900895E82FF0E0DB -:1013D000EE0FFF1FE05EFD4F80819181089508951B -:1013E0000F931F93CF9308E212E0C0E0F8019291AF -:1013F00082918F010E945622C80FF2E000321F072F -:10140000A9F78C2FCF911F910F9108950E949A23D5 -:10141000811102C00E9476230E94BF23809307039C -:101420003E9A809171008D7F8093710082E080935D -:1014300090008AE18093910081E080932A020895D0 -:1014400080912A02811102C00E94060A10927A023B -:1014500010927902809171008D7F8093710080914C -:1014600090008F738093900010923C0210923B0288 -:10147000109273021092740210927502109276020A -:101480001092720210927102E1E5F2E0A1E4B2E082 -:1014900011921192119211921D921D9282E0E137E8 -:1014A000F807B1F70895CF92DF92EF92FF920F9372 -:1014B0001F93CF93DF9320913B02222309F484C032 -:1014C0006B017C0180912A02811102C00E94060AF0 -:1014D00001E712E0C7E0D0E0A7019601F801929180 -:1014E0008291729162918F010E940A29811131C00B -:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 -:10150000118212821382DE01AA0FBB1FAF5BBD4F97 -:1015100011961C921E92C730D105E9F021964481A4 -:1015200055816681778140835183628373831482FE -:1015300015821682178212968D919C91139711969F -:101540009C938E9313961C921E9212973496129629 -:10155000E2CF219708F68091790290917A02019763 -:1015600097FD05C090937A028093790204C010928F -:101570007A02109279028091790290917A022091F8 -:101580007702309178022817390724F010927802F8 -:1015900010927702892BC1F4809171008D7F809326 -:1015A0007100809190008F7380939000109273026D -:1015B00010927402109275021092760210927202CA -:1015C0001092710210923B02DF91CF911F910F9107 -:1015D000FF90EF90DF90CF9008951F920F920FB67B -:1015E0000F9211244F925F926F927F928F929F92EF -:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 -:101600004F935F936F937F938F939F93AF93BF930A -:10161000CF93DF93EF93FF9380913B02882309F4EC -:101620009BC1C0917902D0917A021C161D060CF064 -:1016300093C140902B0250902C0260902D0270902C -:101640002E0220E030E0A901C301B2010E94B52AB8 -:1016500018160CF065C0C130D10509F452C0809154 -:10166000770290917802BE010E94872C7C019093B2 -:1016700078028093770280903D0290903E02A09085 -:101680003F02B090400220E030E040E85FE3C50157 -:10169000B4010E94A62860933D0270933E0280939D -:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 -:1016B000EF5AFD4FA3019201608171818281938174 -:1016C0000E940E2920E030E040E05EE30E94B92A4B -:1016D0009B01AC01C501B4010E94B52A18168CF417 -:1016E000C7010196BE010E94872C909378028093D7 -:1016F000770210923D0210923E0210923F02109229 -:101700004002E0917702F0917802EE0FFF1FEE0F9A -:10171000FF1FEF5AFD4F6081718182819381D0C09C -:10172000C0907302D0907402E0907502F09076023F -:1017300020E030E0A901C701B6010E940A292197E3 -:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A -:10175000EF5AFD4F80809180A280B380A501940153 -:10176000C701B6010E940A2987FF31C0A501940173 -:1017700060E070E08CED93EC0E940E2920E030E0F8 -:1017800040E451E40E940E2920E030E040E05FE3B5 -:101790000E94B92A9B01AC0160E070E080E090E417 -:1017A0000E941C2B9B01AC01C501B4010E94B92A07 -:1017B0009B01AC01C701B6010E940A2987FF07C03F -:1017C000A701960160E070E08CED93E439C0A501BB -:1017D0009401C701B6010E94B52A18160CF055C035 -:1017E000A501940160E070E08CED93E40E940E2965 -:1017F00020E030E040E451E40E940E2920E030E097 -:1018000040E05FE30E94B92A9B01AC0160E070E018 -:1018100080E090E40E941C2B9B01AC01C501B40147 -:101820000E94B92A9B01AC01C701B6010E94B52AEA -:1018300018165CF5A701960160E070E08CED93EC62 -:101840000E940E2920E030E040E451E40E940E297D -:1018500020E030E040E05FE30E94B92A9B01AC0148 -:1018600060E070E080E090E40E941C2B9B01AC01E2 -:10187000C701B6010E94B92A609373027093740283 -:10188000809375029093760213C0FE01EE0FFF1F46 -:10189000EE0FFF1FEF5AFD4F80819181A281B3812E -:1018A0008093730290937402A0937502B0937602B2 -:1018B000609173027091740280917502909176022A -:1018C00020912802309129022F3F4FEF340731F049 -:1018D0002F5F3F4F30932902209328020E94950EDC -:1018E0006B017C0120E034E244EF51E40E940A29BC -:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 -:1019000081E4F82E20E030E040E051E4C701B60168 -:101910000E94B92A9B01AC0160E074E284E79BE479 -:101920000E940E296B017C010E947B297093970015 -:1019300060939600209106013091070140910801C3 -:1019400050910901C701B6010E94B92A0E947B2962 -:10195000709399006093980080913C02882309F469 -:1019600033C1C0903702D0903802E0903902F09035 -:101970003A0220E030E0A901C701B6010E94B52A71 -:101980001816D4F580912802909129028F3F2FEFED -:10199000920729F001969093290280932802C701AB -:1019A000B6010E94950E20E030E040E051E40E9434 -:1019B000B92A9B01AC0160E074E284E79BE40E94D9 -:1019C0000E296B017C010E947B2970939700609324 -:1019D0009600209106013091070140910801509135 -:1019E0000901C701B6010E94B92A0E947B297093A0 -:1019F00099006093980008C010929700109296008A -:101A00001092990010929800609131027091320208 -:101A10006F5F7F4F70933202609331022091960086 -:101A20003091970080E090E0232BF1F0C091960078 -:101A3000D09197000E94A7296B017C01BE0180E034 -:101A400090E00E94A7299B01AC0160913302709144 -:101A5000340280913502909136020E940E2920E0D6 -:101A60003FEF4FE757E410C00E94A7296B017C01AC -:101A700020E030EE4FEF54E4609133027091340275 -:101A800080913502909136020E94B92A9B01AC01E7 -:101A9000C701B6010E94B52A87FD96C080912F022A -:101AA0008F5F80932F0290E0209103033091040315 -:101AB00082179307A0F080910E03882319F01092EB -:101AC0002F020DC0809171008D7F809371008091F5 -:101AD00090008F738093900010923C027DC08091A3 -:101AE0003002C0912F02811128C0C0900803D0900D -:101AF0000903E0900A03F0900B0320E030E0A90115 -:101B0000C701B6010E94B52A1816BCF481E0809383 -:101B1000300210923702109238021092390210925D -:101B20003A02C0923302D0923402E0923502F0922F -:101B30003602C150C0932F0243C01092300210925F -:101B4000290210922802E0910503F091060348E073 -:101B5000C49FE00DF11D112480819181A281B38188 -:101B60008093370290933802A0933902B0933A02DF -:101B700020E030E040E85EE36481758186819781F2 -:101B80000E94B92A6B017C0180910A01682F70E0E4 -:101B900080E090E00E94A72920E030E048EC52E489 -:101BA0000E940E299B01AC01C701B6010E94B92A0F -:101BB000609333027093340280933502909336021F -:101BC00010923202109231028091070380FD04C00E -:101BD00010923C0210923B02FF91EF91DF91CF9166 -:101BE000BF91AF919F918F917F916F915F914F9135 -:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB -:101C00009F908F907F906F905F904F900F900FBE3E -:101C10000F901F901895CF92DF92EF92FF92CF9383 -:101C2000DF936B017C01EA0180912A02811102C0DD -:101C30000E94060A8091070380FF46C080917902C6 -:101C400090917A0208970CF03FC0809171008D7FCF -:101C50008093710080913C0281110E94200A81E0F2 -:101C600080933B02109229021092280220E030E07B -:101C7000A901C701B6010E94B52A1816DCF48091AB -:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 -:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 -:101CA000FF1FEF5BFD4FD183C083019690937A02B3 -:101CB000809379028091710082608093710080919D -:101CC0009000806880939000DF91CF91FF90EF901B -:101CD000DF90CF90089580910703817008958091DF -:101CE00007038160809307030E94C3230C94EB03D6 -:101CF000809107038E7F809307030C94C323809108 -:101D00007B0290E0019666E070E00E94872C809351 -:101D10007B02089580917B0290E0019766E070E07D -:101D20000E94872C80937B0208958F929F92AF929E -:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 -:101D4000DF936B017C01C0912802D0912902BE0172 -:101D500080E090E00E94A7294B015C01A701960159 -:101D600060E070E08CE594E40E940E299B01AC01D8 -:101D7000C501B4010E94B92A0E947B2920917B02EF -:101D8000233009F473C028F4222351F02130E9F004 -:101D90002CC1243009F4A0C0253009F4E0C025C1CD -:101DA00080E090E0A0E0BFE38093060190930701FC -:101DB000A0930801B093090110922B0210922C02FB -:101DC00010922D0210922E0210C110922B0210922E -:101DD0002C0210922D0210922E026431710540F4F3 -:101DE0006A30710560F520E030E040E85EE32BC02A -:101DF000693C710508F0AAC080E090E00E94A72924 -:101E000020E030E040EA51E40E94A52820E030E0E4 -:101E100044E353E40E940E299B01AC010E94B92ABD -:101E200020E030E040E05EE30E94B92A9B01AC0173 -:101E300060E070E080E09EE30E94A52844C020E0BE -:101E400030E040E05FE3C701B6010E94B92A6B01B0 -:101E50007C0180E090E0A0E0BEE3809306019093D7 -:101E60000701A0930801B0930901BFC010922B0293 -:101E700010922C0210922D0210922E024AE0469FE0 -:101E80009001479F300D1124C90168EB7BE00E944F -:101E9000732CBC016C5D754077FF03C07195619533 -:101EA0007109882777FD8095982F0E94A9292EE334 -:101EB00033EC4EE259E30E94B92A20E030E040ECD6 -:101EC0005EE30E94A6286093060170930701809349 -:101ED00008019093090189C010922B0210922C02E4 -:101EE00010922D0210922E02CE0183709927892B19 -:101EF000E1F0BE016170772780E090E00E94A729A1 -:101F000020E030E040E05EE30E94B92A20E030E0CB -:101F100040E45FE30E94A6286093060170930701E6 -:101F200080930801909309010CC080E090E0A0E04C -:101F3000BFE38093060190930701A0930801B0933B -:101F40000901C770DD27CD2B09F04FC010920601A3 -:101F500010920701109208011092090146C01092D8 -:101F60002B0210922C0210922D0210922E0200E0F1 -:101F700010E020E03FE30093060110930701209357 -:101F80000801309309016739710578F180E090E02C -:101F90000E94A72920E030E047E153E40E94A528F1 -:101FA00020E030E04AE754E40E940E2920E030E0CF -:101FB00048E452E40E94B92A20E030E040EA51E4CB -:101FC0000E94EB290E947629660F771F660F771F04 -:101FD000FB01EE5AFE4F2081318142815381C701BE -:101FE000B6010E94B92A6B017C01C701B601DF91DD -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:10200000AF909F908F90089580918C020895CF9308 -:10201000DF9300D01F92CDB7DEB79C0180911303F0 -:10202000843019F593E099833B832A839093E900E8 -:102030008FEF9091E800815095FD06C095ED9A953F -:10204000F1F700008111F5CF8091E80085FF0DC008 -:1020500040E050E063E070E0CE0101960E9468121B -:102060008091E8008E778093E8000F900F900F909A -:10207000DF91CF910895CF93DF9300D01F92CDB71A -:10208000DEB720911303243021F522E029839B83BE -:102090008A8383E08093E9008FEF9091E80081507C -:1020A00095FD06C095ED9A95F1F700008111F5CFE9 -:1020B0008091E80085FF0DC040E050E063E070E0F3 -:1020C000CE0101960E9468128091E8008E7780937D -:1020D000E8000F900F900F90DF91CF91089520911D -:1020E00013032430F1F422E02093E9002FEF309124 -:1020F000E800215035FD06C035ED3A95F1F70000B6 -:102100002111F5CF2091E80025FF0BC040E050E001 -:1021100065E070E00E9468128091E8008E778093FD -:10212000E8000895CF93DF93EC019091130394306E -:1021300009F046C0809115018823D9F080911601DD -:102140008823B9F09093E9008FEF9091E8008150D7 -:1021500095FD06C095E19A95F1F700008111F5CF44 -:102160008091E80085FF2CC040E050E060E170E025 -:1021700017C081E08093E9008FEF9091E8008150D3 -:1021800095FD06C095ED9A95F1F700008111F5CF08 -:102190008091E80085FF14C040E050E068E070E006 -:1021A000CE010E9468128091E8008E778093E8004B -:1021B00080E1FE01ACE7B2E001900D928A95E1F773 -:1021C000DF91CF91089580911203811109C00E947F -:1021D000FD130E945A148091E20084608093E20013 -:1021E0000895109212030895089508950C94A12261 -:1021F00042E061EC81E00E94771342E061EC82E012 -:102200000E94771342E061EC83E00E94771342E181 -:1022100061EC84E00C94771380911503833009F40A -:1022200055C030F4813071F0823009F48EC00895C9 -:102230008A3009F47AC08B3009F460C0893009F023 -:102240009CC020C080911403813A09F096C080910F -:10225000E800877F8093E80080911803909119032C -:10226000892B21F460E18CE792E003C060E080E01C -:1022700090E070E00E94B3128091E8008B77809329 -:10228000E800089580911403813209F076C08091AE -:10229000180390911903009719F0039709F06DC086 -:1022A0008091E800877F8093E8008091E80082FDBC -:1022B00005C0809113038111F8CF5FC08091F100B8 -:1022C00080938C028091E8008B7753C08091140337 -:1022D000813A09F052C08091180390911903892B1B -:1022E00009F04BC08091E800877F8093E8008091DF -:1022F000E80080FFFCCF8091150136C08091140367 -:102300008132D9F58091180390911903892BA9F591 -:102310008091E800877F8093E8000E94AC13809151 -:102320001603809315010C94E21B809114038132F3 -:1023300021F58091E800877F8093E8000E94AC132C -:102340008091170380938D02089580911403813A40 -:10235000A1F48091E800877F8093E8008091E800F5 -:1023600080FFFCCF80918D028093F1008091E80086 -:102370008E778093E8000C94AC13089584B7877F20 -:1023800084BF88E10FB6F8948093600010926000DB -:102390000FBE90E080E80FB6F894809361009093B0 -:1023A00061000FBE0E944F170E94FD130E945A1435 -:1023B0008091E20084608093E20078940E94E016AD -:1023C0000E9451178BE091E00E94FB16809113034D -:1023D000853069F40E946222809111038823B1F351 -:1023E0000E949022882391F30E945212EFCF0E9404 -:1023F0005917ECCF292F332723303105C9F064F466 -:102400002130310581F02230310509F043C08DE6DD -:1024100090E022EB33E042C021323105F1F022326C -:10242000310541F137C082E190E02FE134E036C060 -:1024300099278130910541F08230910541F0892B37 -:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 -:10245000F3E0849190E09F0121C06430D8F4E62F2E -:10246000F0E0EE0FFF1FE255FE4F2081318189E041 -:1024700090E014C0643070F470E0FB01EE0FFF1FB9 -:10248000EA55FE4F20813181FB01EE55FE4F8081E0 -:1024900090E004C080E090E020E030E0FA01318379 -:1024A0002083089580E189BD82E189BD09B400FEE1 -:1024B000FDCF8091D8008F7D8093D8008091E0007F -:1024C00082608093E0008091E00081FDFCCF089560 -:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 -:1024E000EC018B016A010E94CB13811133C0C1142E -:1024F000D10439F0F60180819181081B190BC80FB6 -:10250000D91FE12CF12C0115110519F18091E8007A -:1025100085FD16C08091E8008E778093E800C11495 -:10252000D10449F0F60180819181E80EF91EF18213 -:10253000E08285E00FC00E94CB13882321F30AC0FC -:1025400089918093F10001501109FFEFEF1AFF0A02 -:10255000DACF80E0DF91CF911F910F91FF90EF9044 -:10256000DF90CF90089520911A0330911B03261716 -:10257000370748F06115710539F42091E8002E778E -:102580002093E80001C0B90140E061157105A9F18F -:1025900020911303222309F443C0253009F442C0DB -:1025A0002091E80023FD40C02091E80022FD32C0C8 -:1025B0002091E80020FFE9CF4091F3002091F20044 -:1025C00030E0342BFC01CF016115710559F0283042 -:1025D000310540F481918093F100615071092F5FC2 -:1025E0003F4FF1CF41E02830310509F040E0209124 -:1025F000E8002E772093E800C8CF4111C9CF0AC068 -:1026000080911303882361F0853061F08091E800A8 -:1026100083FD0AC08091E80082FFF2CF80E0089538 -:1026200082E0089583E0089581E0089520911A03DF -:1026300030911B032617370748F06115710539F4EF -:102640002091E8002E772093E80001C0B901FC0139 -:1026500020E06115710591F180911303882309F43D -:1026600040C0853009F43FC08091E80083FD3DC043 -:102670008091E80082FD2FC08091E80080FFE9CFC3 -:102680002091F3008091F20090E0922B611571058A -:1026900059F08830910540F424912093F10031964F -:1026A000615071090196F2CF21E0089709F020E00E -:1026B0008091E8008E778093E800CBCF2111CCCFBA -:1026C0000AC080911303882361F0853061F0809106 -:1026D000E80083FD0AC08091E80082FFF2CF80E02D -:1026E000089582E0089583E0089581E00895982F89 -:1026F000973058F59093E900981739F07091EC00F5 -:102700002091ED005091F00003C0242F762F50E06F -:1027100021FF19C03091EB003E7F3093EB003091E8 -:10272000ED003D7F3093ED003091EB003160309350 -:10273000EB007093EC002093ED005093F00020919B -:10274000EE0027FF07C09F5FD3CF8F708093E90013 -:1027500081E0089580E008958091140387FF11C0FF -:102760008091E80082FD05C0809113038111F8CFAC -:1027700011C08091E8008B770BC0809113038823F0 -:1027800049F08091E80080FFF8CF8091E8008E77D3 -:102790008093E80008952091E4003091E50095E6EB -:1027A0004091EC00842F817040FF22C08091E800AE -:1027B00080FD1CC080911303882391F0853091F037 -:1027C0008091EB0085FD10C04091E4005091E50040 -:1027D0004217530729F39A01915011F784E00895A5 -:1027E00082E0089583E0089581E0089580E00895EF -:1027F0004091E80042FFDECF08950E946B140E94D2 -:102800007314E0EEF0E0808181608083E8EDF0E019 -:1028100080818F77808319BCA7EDB0E08C918E7F8B -:102820008C9380818F7E80831092120308950F9382 -:102830001F93CF93DF930E946B140E947314C8ED13 -:10284000D0E088818F7788838881806888838881B9 -:102850008F7D888319BC1092130310920F0310927E -:1028600011031092100300EE10E0F80180818B7FBD -:10287000808388818160888342E060E080E00E94FC -:102880007713E1EEF0E080818E7F8083E2EEF0E06E -:10289000808181608083808188608083F80180816D -:1028A0008E7F8083888180618883DF91CF911F91A3 -:1028B0000F910895E8EDF0E080818F7E8083E7ED51 -:1028C000F0E080818160808384E082BF81E080933A -:1028D00012030C941714E8EDF0E080818E7F808362 -:1028E0001092E20008951092DA001092E10008952B -:1028F0001F920F920FB60F9211242F933F934F9375 -:102900005F936F937F938F939F93AF93BF93EF9357 -:10291000FF938091E10082FF0BC08091E20082FF73 -:1029200007C08091E1008B7F8093E1000E94DF1659 -:102930008091DA0080FF1FC08091D80080FF1BC00B -:102940008091DA008E7F8093DA008091D90080FF39 -:102950000DC080E189BD82E189BD09B400FEFDCFD3 -:1029600081E0809313030E94E31005C019BC10920C -:1029700013030E94F1108091E10080FF19C0809143 -:10298000E20080FF15C08091E2008E7F8093E2001C -:102990008091E20080618093E2008091D8008062A3 -:1029A0008093D80019BC85E0809313030E94F51032 -:1029B0008091E10084FF30C08091E20084FF2CC050 -:1029C00080E189BD82E189BD09B400FEFDCF80911F -:1029D000D8008F7D8093D8008091E1008F7E809316 -:1029E000E1008091E2008F7E8093E2008091E2001E -:1029F00081608093E20080910F03882311F084E0CE -:102A000007C08091E30087FD02C081E001C083E040 -:102A1000809313030E94F6108091E10083FF29C088 -:102A20008091E20083FF25C08091E100877F809341 -:102A3000E10082E08093130310920F038091E10084 -:102A40008E7F8093E1008091E2008E7F8093E20090 -:102A50008091E20080618093E20042E060E080E0EB -:102A60000E9477138091F00088608093F0000E94AC -:102A7000F410FF91EF91BF91AF919F918F917F9152 -:102A80006F915F914F913F912F910F900FBE0F90DB -:102A90001F9018951F920F920FB60F9211242F932B -:102AA0003F934F935F936F937F938F939F93AF93D6 -:102AB000BF93CF93DF93EF93FF93C091E900CF7063 -:102AC0008091EC00D82FD17080FDD0E81092E90001 -:102AD0008091F000877F8093F00078940E948E159B -:102AE0001092E9008091F00088608093F000CD2B77 -:102AF000CF70C093E900FF91EF91DF91CF91BF912B -:102B0000AF919F918F917F916F915F914F913F9185 -:102B10002F910F900FBE0F901F9018951F93CF937A -:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E -:102B3000CDBFE4E1F3E088E08E0F9091F100919336 -:102B40008E13FBCF0E940C118091E80083FF1FC100 -:102B50008091140390911503492F50E04A3051059C -:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB -:102B700081F0823809F00BC1809118038F70809327 -:102B8000E9008091EB0085FB882780F91092E9002D -:102B900006C0809110039091110391118260909171 -:102BA000E800977F9093E8008093F1001092F10085 -:102BB000C8C0282F2D7F09F0EAC0882319F0823081 -:102BC00061F0E5C080911603813009F0E0C09330D8 -:102BD00009F080E0809311032BC0809116038111CE -:102BE00027C0809118038F7009F4D1C08093E90049 -:102BF0002091EB0020FF1CC0933021F48091EB006A -:102C0000806214C09091EB0090619093EB0021E002 -:102C100030E0A90102C0440F551F8A95E2F74093A6 -:102C2000EA001092EA008091EB0088608093EB004C -:102C30001092E9008091E800877F86C08111A7C0CB -:102C4000109116031F778091E3008078812B809389 -:102C5000E3008091E800877F8093E8000E94AC1336 -:102C60008091E80080FFFCCF8091E3008068809332 -:102C7000E300111102C082E001C083E080931303DE -:102C800086C08058823008F082C0809116039091EF -:102C900017038C3D53E0950779F583E08A838AE238 -:102CA00089834FB7F894DE01139620E03EE051E2AD -:102CB000E32FF0E050935700E49120FF03C0E2952A -:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 -:102CD00001C0C0968D939D932F5F243149F74FBF5C -:102CE0008091E800877F8093E8006AE270E0CE017F -:102CF00001960E94B31214C0AE014F5F5F4F609106 -:102D000018030E94FA11BC01009709F440C0909189 -:102D1000E800977F9093E80089819A810E941613BA -:102D20008091E8008B778093E80031C0803879F596 -:102D30008091E800877F8093E80080910F03809363 -:102D4000F1008091E8008E778093E8000E94AC1338 -:102D50001EC081111CC0909116039230C0F4809166 -:102D6000E800877F8093E80090930F030E94AC13E4 -:102D700080910F03811106C08091E30087FD02C09E -:102D800081E001C084E0809313030E94F8108091D9 -:102D9000E80083FF0AC08091E800877F8093E80005 -:102DA0008091EB0080628093EB00AA960FB6F894B6 -:102DB000DEBF0FBECDBFDF91CF911F910895089563 -:102DC000CF93809113038823A1F0C091E900CF70C5 -:102DD0009091EC00892F817090FD80E8C82B1092B3 -:102DE000E9008091E80083FD0E948E15CF70C093AA -:102DF000E900CF91089590939302809392020895F1 -:102E0000E0919202F0919302309721F00190F081CD -:102E1000E02D099480E00895E0919202F0919302F0 -:102E2000309721F00280F381E02D09940895E0911C -:102E30009202F0919302309721F00480F581E02D09 -:102E4000099408952091900230919102821793077E -:102E500071F09093910280939002E0919202F09130 -:102E60009302309721F00680F781E02D09940895B0 -:102E700020918E0230918F028217930771F0909308 -:102E80008F0280938E02E0919202F091930230972C -:102E900021F00084F185E02D0994089508950C94A3 -:102EA0004E170E94D5220E9426090E945B230C9493 -:102EB0000A285F926F927F928F929F92AF92BF92F9 -:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 -:102ED00000D000D01F92CDB7DEB70E946B099DE9EC -:102EE000C92E92E0D92E03E010E0AA24A394B12CBD -:102EF000502E802F0E94E6094C01F60172906290DC -:102F00006F016826792661147104A1F4015011093A -:102F100078F78FEF89838A831B820E94DE2281608B -:102F2000782F9D838C8349815A816B818D810E948A -:102F3000091838C08091F20281FD0E94EF092BE050 -:102F400030E07501022E02C0EE0CFF1C0A94E2F77D -:102F5000C70186219721892B09F129835A828E2066 -:102F60009F2091E0892809F490E09B830E94DE2253 -:102F70008160782F9D838C8349815A816B818D81FB -:102F80000E940918000F111FF801EB56FD4F8081B8 -:102F90009181E826F926F182E08204C021503109AE -:102FA00080F6B4CF0E944225109194020E9400172F -:102FB0001817D1F00E940017809394020F900F9081 -:102FC0000F900F900F90DF91CF911F910F91FF9075 -:102FD000EF90DF90CF90BF90AF909F908F907F90B9 -:102FE0006F905F900C9410090F900F900F900F90BE -:102FF0000F90DF91CF911F910F91FF90EF90DF9095 -:10300000CF90BF90AF909F908F907F906F905F9088 -:103010000895CF93DF93CDB7DEB72B970FB6F89413 -:10302000DEBF0FBECDBF4F83588769877A878B87F6 -:10303000DE01119686E0FD0111928A95E9F785E09F -:10304000FE01379601900D928A95E1F749815A81E8 -:103050006B817C818D819E810E94801E2B960FB694 -:10306000F894DEBF0FBECDBFDF91CF910895CF930F -:10307000882309F4C2C0C82F823859F40E9400176F -:1030800081FDBBC089E30E945A210E94272289E367 -:103090000CC0833879F40E94001780FDAEC083E530 -:1030A0000E945A210E94272283E50E949C21CF91F1 -:1030B0000C942722843859F40E94001782FD9DC089 -:1030C00087E40E945A210E94272287E4EECF8CEFEA -:1030D0008C0F813A48F48C2F0E94722781118DC089 -:1030E0008C2F0E945A21E3CF80E28C0F883048F465 -:1030F000C77081E001C0880FCA95EAF70E94E021FD -:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 -:1031100031F083E890E005C081E890E002C082E8E9 -:1031200090E0CF910C94221788E58C0F833108F042 -:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 -:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 -:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 -:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 -:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B -:1031800090E038C082EE90E035C089EE90E032C029 -:103190008AEE90E02FC085EB90E02CC086EB90E0AB -:1031A00029C087EB90E026C08CEC90E023C08DEC2A -:1031B00090E020C083E891E01DC08AE891E01AC049 -:1031C00082E991E017C084E991E014C081E292E0C5 -:1031D00011C083E292E00EC084E292E00BC085E26F -:1031E00092E008C086E292E005C087E292E002C069 -:1031F0008AE292E0CF910C943817CF9108958823FA -:1032000009F44BC0823859F40E94001781FF45C071 -:1032100089E30E945A210E94272289E30CC0833847 -:1032200071F40E94001780FF38C083E50E945A2184 -:103230000E94272283E50E949C210C942722843837 -:1032400059F40E94001782FF28C087E40E945A2187 -:103250000E94272287E4EFCF9CEF980F913A58F312 -:1032600090E2980F983050F4877091E001C0990F68 -:103270008A95EAF7892F0E94E621DFCF9BE5980F18 -:10328000933020F480E090E00C942217885A833128 -:1032900020F480E090E00C9438170895882321F002 -:1032A0000E94E0210C9427220895882321F00E9497 -:1032B000E6210C94272208957F928F929F92AF92DD -:1032C000BF92CF92DF92EF92FF920F931F93CF9313 -:1032D000DF931F92CDB7DEB77C01C62E772EFC019F -:1032E000058102950F70128111110E94FD210E942B -:1032F0005321882379F0112369F080E28C0D883006 -:1033000048F082E00E943C210E94532191E0D82E97 -:10331000D92601C0D12CE72DE295EF70F0E0E05AFC -:10332000FF4F0C949B2C872D807F072D0F708823D7 -:1033300011F00295007F112389F0002309F499C14F -:1033400080E28C0D883020F4802F0E94E02103C0A1 -:10335000802F0E94F0210E9427228BC18C2D0E9479 -:10336000FF18002309F4C3C180E28C0D883020F4DB -:10337000802F0E94E62103C0802F0E94F6210E9428 -:103380002722B5C1872D807F972D9F70803211F441 -:10339000892F03C0892F8295807FCC2021F0F1E016 -:1033A000CF16A1F01DC0112339F0002319F101300F -:1033B00009F50E9410229BC1002319F0013009F485 -:1033C00096C189830E941322898110C1112321F0A3 -:1033D000063008F08CC10EC0053008F088C106C167 -:1033E000112359F0002331F0F701958190FF41C17D -:1033F0009F7095830E944E197AC1002309F4F6C08C -:103400003EC1872D86958695837090E0009719F0D0 -:10341000019761F06CC1112321F08C2D972D9370D1 -:1034200002C080E090E00E94221761C1112321F0C8 -:103430008C2D972D937002C080E090E00E94381789 -:1034400056C18C2D112319F00E944A2402C00E94FB -:10345000B2240E9437254BC1872D837009F052C0DA -:10346000111145C18C2D829586958770880F880F24 -:103470009C2D9F70892E912CA12CB12C082E04C05C -:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 -:103490000FE010E020E030E0B901A80104C0440FC3 -:1034A000551F661F771F8A95D2F7CB01BA01609529 -:1034B00070958095909503C060E070E0CB01272D5A -:1034C00026952695237030E02230310569F02330AF -:1034D000310589F0682979298A299B29213031050C -:1034E00071F00E94C81F03C1682979298A299B2984 -:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 -:10350000AC1FF5C0112319F0872D817001C086957D -:10351000882309F4ECC08C2D829586958770880FDE -:10352000880F9C2D9F70892E912CA12CB12C082ED8 -:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 -:1035400014C00FE010E020E030E0B901A80104C091 -:10355000440F551F661F771F8A95D2F7CB01BA011A -:10356000609570958095909503C060E070E0CB0108 -:10357000272D269526952370422F50E04230510585 -:1035800069F04330510589F0682979298A299B29F6 -:103590004130510571F00E94A220A9C06829792903 -:1035A0008A299B290E94BE20A2C00E94A220C50198 -:1035B000B4010E9486209BC08C2D90E0FC01E05E4F -:1035C000F109E531F10508F050C0E059FF4F0C94C6 -:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 -:1035E0001F20802F07CF0E944020802F0E94551956 -:1035F0007EC0112341F0053008F079C0872D8F710E -:103600000E94652074C0063008F071C0F7CF112306 -:1036100039F0872D8F710E941F2069C01123C9F3D3 -:10362000872D8F710E94402062C0112329F0872DC1 -:103630008F710E940A205BC00E94002058C0112395 -:1036400051F0172D1F71812F0E941F2063E0812FE1 -:103650000E9433214CC081E00E943C21023008F4DA -:1036600046C082E00E943C2142C0112331F0002379 -:1036700081F28C2D0E9437183AC0002389F28C2DDC -:103680000E94FF1834C0472D4F706C2DC7010E9457 -:10369000EE050E94241F2BC0111129C0472D4F7029 -:1036A00050E042305105B9F04CF44115510581F01C -:1036B00041305105E1F40E94322819C043305105D0 -:1036C00069F04430510599F48C2D0E9484280FC074 -:1036D0000E941B280CC00E944E2809C00E9461282D -:1036E00006C0472D4F706C2DC7010E94F105DD20EB -:1036F000F9F00E942F2180FD1BC0F70112820E9469 -:1037000029210E941F20C7010E94A71B0E94292176 -:103710000F90DF91CF911F910F91FF90EF90DF906D -:10372000CF90BF90AF909F908F907F900C9440204F -:103730000F90DF91CF911F910F91FF90EF90DF904D -:10374000CF90BF90AF909F908F907F9008950F93F0 -:103750001F93CF93DF93EC01888199812B813C816A -:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 -:10377000ED03882371F0688179818A810E94252177 -:103780008C010E94DA200E94A11FB801CE010E9484 -:103790005C19DF91CF911F910F9108950E94FD2137 -:1037A0000E940D220E94D2210E9427220E94E82519 -:1037B0000E94372580E090E00E94221780E090E090 -:1037C0000C9438170E94ED210C94CE1B0E941A21F4 -:1037D000292F22952F7030E02C3031054CF42A30FF -:1037E00031056CF42250310922303105A8F407C0AC -:1037F0002C30310569F02F30310551F00DC0803F7C -:1038000069F018F4803E40F409C0843F29F406C0F2 -:1038100093FB882780F9089580E0089581E008955A -:10382000CF93DF9300D000D01F92CDB7DEB70F90BB -:103830000F900F900F900F90DF91CF910895CF933D -:10384000DF9300D000D000D0CDB7DEB726960FB6FC -:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 -:10386000CF93DF93C0919D0216E080919E02C8170E -:1038700099F0D0E01C9FF0011D9FF00D1124E1563E -:10388000FD4F4081518162817381848195810E94C5 -:103890001F1C2196C770E9CFDF91CF911F9108952A -:1038A0004091CF025091D0026091D1027091D2022A -:1038B0008091D3029091D4020C941F1C8091D40269 -:1038C00082958F7009F054C08091D102882309F449 -:1038D0004FC080919D02A0919E026091CF02709195 -:1038E000D0024091D2025091D302B6E08A1709F477 -:1038F0003FC090E041155105C1F17F3F11F46F3F8A -:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 -:10391000218172132AC02081621327C022812111C4 -:1039200024C0238134812417350710F42150310934 -:10393000241B350B283C3105C0F42091D4022F7094 -:1039400020612093D40226E0289FF001299FF00DEA -:103950001124EC55FD4F80818F70806180838FEC46 -:1039600092E00E94A71B0C942F1C01968770BECF7B -:103970000895CF92DF92EF92FF920F931F93CF9310 -:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 -:10399000CDBF8C0185E0F801DE011D9601900D92EE -:1039A0008A95E1F7D8014C9111965C911197129686 -:1039B0006C9112971396CD90DC9014973091CF02B2 -:1039C0007091D0028091D2029091D302009709F4B5 -:1039D0006BC17F3F19F43F3F09F466C1E090D1020B -:1039E000EE2009F4C0C02091D402C816D90628F0F0 -:1039F000F601E81BF90BCF0104C0809590958C0D62 -:103A00009D1DFF24F394883C910578F0F12C207FD4 -:103A100009F0C6C07C2DD98AC88A89890E94101CE9 -:103A20008FEC92E00E94A71BB1C0822F807F09F02B -:103A300046C0751314C0341312C0611110C02F702A -:103A400020612093D4020E94501C8FEC92E00E94CF -:103A5000A71B8091D402D80115968C932EC0CD2837 -:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 -:103A700080919D0220919E0236E0821709F45AC07F -:103A800090E0389FF001399FF00D1124E156FD4F71 -:103A90007181571306C07081471303C07281711181 -:103AA00003C001968770E9CFF62E662309F418C18A -:103AB0008091D40281608093D402F12C11C17513DE -:103AC00008C0341306C0611104C08091D402D8012B -:103AD000C3C04D875E878D859E856A8B0E94E61BDD -:103AE0006A898823E1F16623D1F12091D402822FE3 -:103AF00082958F7090E0029774F08091CF02909140 -:103B0000D00298878F831986DB86CA862C87CE01E0 -:103B100007960E94A71B86E0F801AFECB2E0019087 -:103B20000D928A95E1F70E945E1C0E94501CFF24B2 -:103B3000F394D6C04D875E878D859E850E941A219D -:103B4000292F22952F7030E0223031050CF0BCC0B7 -:103B50009F7009F0B6C0805E883008F4C1C0C8010B -:103B60000E94A71BE4CFC816D90608F453C0F6017B -:103B7000E81BF90BCF01883C910508F450C0F12CEB -:103B80007C2DD98AC88A89890E94101CEFECF2E04A -:103B900086E0DF011D928A95E9F70E94501CA0C0C3 -:103BA000751314C0341312C0611110C08091D40277 -:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 -:103BC000DF011D928A95E9F7FE2C8AC04D875E873A -:103BD0008D859E856A8B0E94E61B6A89882309F47D -:103BE000BECF662309F4BBCF2091D402822F8295E9 -:103BF0008F7090E002970CF48ECF8091CF0290915D -:103C0000D0029A8389831B82DD82CC822E83CE01EF -:103C100001967FCF809590958C0D9D1DACCFF62E93 -:103C2000662309F49CCF75132EC034132CC0209149 -:103C3000D40220FD1FC0822F82958F70D9F0D80149 -:103C400015962C9315978F3049F08F5F982F92958A -:103C5000907F822F8F70892B15968C93C8010E94BC -:103C6000A71B86E0F801AFECB2E001900D928A95B7 -:103C7000E1F793CF86E0F801AFECB2E001900D924E -:103C80008A95E1F72DC04D875E878D859E850E94C0 -:103C9000E61B811140CF8091D40281608093D402D1 -:103CA000C8010E94A71B1CC0662309F458CF4D878A -:103CB0005E878D859E850E94E61B882309F44FCF81 -:103CC0002ACF811148CF0CC0243031050CF047CFEA -:103CD0009F7009F440CFF8019581907F09F03BCFA8 -:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 -:103CF000CF911F910F91FF90EF90DF90CF9008959B -:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 -:103D1000DEBF0FBECDBF4F83588769877A878B87F9 -:103D20009C87CE0107960E94B91C882369F08F8179 -:103D300098852A853B85232BF1F19F3F09F063C0CD -:103D40008F3F09F060C037C086E0FE013796DE0184 -:103D5000119601900D928A95E1F76F817885EA8539 -:103D6000FB85309741F17F3F11F46F3F21F12091A6 -:103D70009E0230E0C90101968770992740919D020B -:103D800050E08417950709F447C069837A83FD835F -:103D9000EC8396E0929FD001939FB00D1124A15621 -:103DA000BD4FFE01319601900D929A95E1F78093F7 -:103DB0009E020E942F1C16E080919D0290919E020F -:103DC0008917C1F1189FC001112481569D4F0E948F -:103DD000B91C882379F1E0919D021E9FF001112406 -:103DE000E156FD4F408151816281738184819581CB -:103DF0000E941F1C80919D0290E001968770992778 -:103E000080939D02D9CF4F81588569857A858B85AE -:103E10009C850E941F1CCFCF0E94E21B10929E0225 -:103E200010929D02EFECF2E086E0DF011D928A9590 -:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 -:103E4000DF91CF911F910895EF92FF920F931F93EF -:103E5000CF93DF938C01009709F46CC0F12CEE2412 -:103E6000E394E8012196F8018491843740F484308A -:103E700008F051C0813081F0823019F15BC0853784 -:103E800009F444C0A8F19CE7980F903708F052C09D -:103E90008F770E94FF1841C00E5F1F4FFE01C49133 -:103EA00080E28C0F883048F4C7708E2D01C0880FD7 -:103EB000CA95EAF70E94002214C08C2F0E9437187E -:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 -:103ED00058F4C7708E2D01C0880FCA95EAF70E946A -:103EE00006220E9427221AC08C2F0E94FF1816C09B -:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C -:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 -:103F1000FE01F49003C00E9437188E018F2D882374 -:103F200009F49FCFEFE9FFE03197F1F700C00000FF -:103F30008150F5CFDF91CF911F910F91FF90EF90BE -:103F4000089508956093D9027093DA028093DB029A -:103F50009093DC020C94CE1B0F931F930091D90217 -:103F60001091DA022091DB023091DC02DC01CB01FE -:103F7000802B912BA22BB32B8093D9029093DA0242 -:103F8000A093DB02B093DC021F910F910C94CE1B27 -:103F90000F931F930091D9021091DA022091DB0256 -:103FA0003091DC02DC01CB0180239123A223B323D7 -:103FB0008093D9029093DA02A093DB02B093DC02E3 -:103FC0001F910F910C94CE1B0F931F930091D90258 -:103FD0001091DA022091DB023091DC02DC01CB018E -:103FE00080279127A227B3278093D9029093DA02E2 -:103FF000A093DB02B093DC021F910F910C94CE1BB7 -:104000001092D5021092D6021092D7021092D802C6 -:104010000C94CE1B41E050E060E070E004C0440F1F -:10402000551F661F771F8A95D2F74093D50250938C -:10403000D6026093D7027093D8020C94CE1B41E055 -:1040400050E060E070E004C0440F551F661F771F0A -:104050008A95D2F78091D5029091D602A091D7028D -:10406000B091D802482B592B6A2B7B2B4093D50259 -:104070005093D6026093D7027093D8020C94CE1B53 -:1040800041E050E060E070E004C0440F551F661F3F -:10409000771F8A95D2F740955095609570958091DD -:1040A000D5029091D602A091D702B091D8024823B0 -:1040B00059236A237B234093D5025093D602609301 -:1040C000D7027093D8020C94CE1B41E050E060E020 -:1040D00070E004C0440F551F661F771F8A95D2F702 -:1040E0008091D5029091D602A091D702B091D802CA -:1040F000482759276A277B274093D5025093D60239 -:104100006093D7027093D8020C94CE1B0F931F9329 -:104110000091D5021091D6022091D7023091D80299 -:10412000DC01CB01802B912BA22BB32B8093D502EA -:104130009093D602A093D702B093D8021F910F910B -:104140000C94CE1B0F931F930091D5021091D602B1 -:104150002091D7023091D802DC01CB01802391233A -:10416000A223B3238093D5029093D602A093D702C3 -:10417000B093D8021F910F910C94CE1B0F931F93F5 -:104180000091D5021091D6022091D7023091D80229 -:10419000DC01CB0180279127A227B3278093D5028A -:1041A0009093D602A093D702B093D8021F910F919B -:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 -:1041C0001F93CF93DF938C01C090D902D090DA0275 -:1041D000E090DB02F090DC028091D5029091D60253 -:1041E000A091D702B091D802C82AD92AEA2AFB2A7C -:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B -:10420000979587950A94D2F780FF06C0B8018C2F46 -:104210000E947608019721F4219760F780E001C0A1 -:104220008C2FDF91CF911F910F91FF90EF90DF9036 -:10423000CF900895CF93DF93EC010E94DB20BE0165 -:104240000E947608DF91CF910895CB010E941A2138 -:1042500008958091DD0285958595859508958091D5 -:10426000DD028770089598E0899F90011124262B24 -:104270002093DD020C941F202091DD028095822383 -:104280008093DD02982F977069F430E0482F55270E -:1042900047FD50952417350729F085958595859517 -:1042A0000C94402008959091DD02977081E009F40C -:1042B00080E0089590911501992321F090911601C5 -:1042C000911109C02091170130911801F90132961E -:1042D0009FEF40E01FC0982F9695969596959F303A -:1042E00050F5E0911701F0911801E90FF11D877069 -:1042F00021E030E0A90102C0440F551F8A95E2F782 -:10430000CA019181892B818308959F3F39F04F5FC6 -:104310004E3041F051915813F8CF0DC05111F7CFE5 -:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B -:10433000FA9582830895089590911501992321F0AB -:1043400090911601911109C0209117013091180127 -:10435000F9013296205F3F4F1FC0982F9695969592 -:1043600096959F30F0F4E0911701F0911801E90F54 -:10437000F11D877021E030E0A90102C0440F551FF4 -:104380008A95E2F7CA0180959181892381830895F6 -:104390003196E217F30729F090819813F9CF108234 -:1043A000F7CF089581E090E0E0911701F0911801B6 -:1043B000E80FF91F1082019680319105A9F7089541 -:1043C0009091F102892B8093F1020895809590914C -:1043D000F10289238093F10208951092F102089569 -:1043E0009091F002892B8093F0020895809590912E -:1043F000F00289238093F00208951092F00208954C -:104400009091EF02892B8093EF020895809590910F -:10441000EF0289238093EF0208951092EF0208952E -:104420008093DE0208951092DE02089580911701B4 -:1044300090911801FC0131969C01205F3F4F80E074 -:10444000919191118F5FE217F307D1F70895E091F1 -:104450001701F09118018091F1028083E09117011A -:10446000F091180190818091F002892B8083E09176 -:104470001701F091180190818091EF02892B8083C0 -:104480008091DE02882361F0E0911701F09118011C -:104490009081892B80830E94162281111092DE0266 -:1044A00080911701909118010C940C1720E000974F -:1044B00039F0AC0141505109842395232F5FF7CF88 -:1044C000822F089580911303843039F11092F30202 -:1044D00020E488E190E00FB6F894A89580936000FE -:1044E0000FBE2093600080E00E94F10280E00E94F5 -:1044F000100983B7817F846083BF83B7816083BFE6 -:104500007894889583B78E7F83BF88E10FB6F8943F -:1045100080936000109260000FBE08950895089582 -:1045200080E00E94F1020E948E220E946B090E948C -:104530008F220E94F00991E0811101C090E0892F43 -:1045400008950E94E21B80E00E94F1020E940A2866 -:104550000E9400170C9410091F920F920FB60F9231 -:1045600011248F939F93AF93BF938091F302811196 -:1045700013C08091F4029091F502A091F602B091DF -:10458000F7024196A11DB11D8093F4029093F502AC -:10459000A093F602B093F702BF91AF919F918F91D4 -:1045A0000F900FBE0F901F90189582E084BD93E08E -:1045B00095BD9AEF97BD80936E0008952FB7F8943C -:1045C0008091F4029091F502A091F602B091F70269 -:1045D0002FBF0895CF92DF92EF92FF920F931F9318 -:1045E0002FB7F8944091F4025091F5026091F602D1 -:1045F0007091F7022FBF6A017B01EE24FF248C012A -:1046000020E030E0C016D106E206F30610F4415077 -:1046100051099A01281B390BC9011F910F91FF9075 -:10462000EF90DF90CF9008951F920F920FB60F92E8 -:1046300011248F939F93AF93BF938091F402909135 -:10464000F502A091F602B091F7020196A11DB11DED -:104650008093F4029093F502A093F602B093F702D0 -:10466000BF91AF919F918F910F900FBE0F901F90B0 -:1046700018950E94FD13F8942FEF87EA91E62150D8 -:1046800080409040E1F700C0000087E090EBDC0143 -:1046900080931E0390931F03A0932003B0932103E4 -:1046A0009CE088E10FB6F894A895809360000FBE57 -:1046B00090936000FFCF0E949A23811102C00E9454 -:1046C00076230E94A5238093F2020E94AD2380935B -:1046D0001C0387FB882780F9809316010E94A92379 -:1046E000682F70E080E090E00C94A21F6DEE7EEFEA -:1046F00080E090E00E94C12C60E082E090E00E94A7 -:10470000AF2C60E083E090E00E94AF2C60E084E09A -:1047100090E00E94AF2C60E085E090E00E94AF2C1A -:1047200060E086E090E00E94AF2C6FEF87E090E0C1 -:104730000C94AF2C80E090E00E94A92C21E08D3EEB -:104740009E4F09F020E0822F089582E090E00C94C3 -:10475000A12C83E090E00C94A12C84E090E00C94D8 -:10476000A12C682F84E090E00C94AF2C86E090E0C0 -:104770000C94A12C682F86E090E00C94AF2C87E07D -:1047800090E00C94A12C682F87E090E00C94AF2C63 -:104790008091FA0280FF0BC060911C0185E0689F48 -:1047A000B001112475956795759567952BC081FFAC -:1047B00009C060911C0185E0689FB00111247595C6 -:1047C000679520C082FF07C060911C0185E0689F4B -:1047D000B001112417C09091FB029923D1F0609190 -:1047E0001B01961788F720911C0185E0289F9001F6 -:1047F0001124929FA001939F500D112470E0CA01D3 -:104800000E94872C6038710540F46115710539F0FC -:1048100002C065E070E0862F08958FE7089581E07B -:1048200008958091FA0280FF08C060911A0170E03B -:10483000759567957595679521C081FF06C0609154 -:104840001A0170E07595679519C082FF04C06091E8 -:104850001A0170E010C09091FB029923C1F06091A1 -:1048600019019617A0F780911A01899FC0011124A0 -:1048700070E00E94872C6038710528F4611571057D -:1048800021F0862F08958FE7089581E0089561E073 -:1048900070E0F4CF803F21F40E94C823819504C0CA -:1048A000813F29F40E94C8238093FE020895823F2D -:1048B00021F40E94C823819504C0833F29F40E94FB -:1048C000C8238093FD020895893F19F40E941124A2 -:1048D00005C08A3F31F40E94112481958093FF0224 -:1048E00008958B3F21F40E941124819504C08C3FD0 -:1048F00029F40E941124809300030895843F21F439 -:104900008091FC02816017C0853F21F48091FC02F8 -:10491000826011C0863F21F48091FC0284600BC04C -:10492000873F21F48091FC02886005C0883F31F404 -:104930008091FC0280618093FC0208958D3F21F4F8 -:104940008091FA0281600BC08E3F21F48091FA02BF -:10495000826005C08F3F29F48091FA0284608093C1 -:10496000FA020895803F39F48091FE0287FF6CC0FF -:104970001092FE0269C0813F29F48091FE02181650 -:10498000BCF362C09091FD02823F29F497FF5CC0A6 -:104990001092FD0259C0833F19F41916CCF354C08C -:1049A000893F41F48091FF0218160CF04DC010921F -:1049B000FF024AC08A3F29F48091FF0287FF44C06A -:1049C000F6CF8B3F39F48091000387FF3DC01092F2 -:1049D00000033AC08C3F29F4809100031816BCF301 -:1049E00033C0843F21F48091FC028E7F17C0853F45 -:1049F00021F48091FC028D7F11C0863F21F48091CB -:104A0000FC028B7F0BC0873F21F48091FC02877FE3 -:104A100005C0883F31F48091FC028F7E8093FC02B8 -:104A200013C08D3F21F48091FA028E7F0BC08E3F20 -:104A300021F48091FA028D7F05C08F3F29F4809187 -:104A4000FA028B7F8093FA028091FD0281110EC0E1 -:104A50008091FE0281110AC08091FF02811106C07F -:104A600080910003811102C01092FB0208958CEF27 -:104A700092E00E9417170E94DE229093F902809321 -:104A8000F80208951F93CF93DF938091F8029091DD -:104A9000F9020E94EA22AC019091FB02992321F0D5 -:104AA00020911D0130E006C020911E018AE0289F60 -:104AB000900111244217530708F486C08091FD022B -:104AC000C091FE02D091FF0210910003811107C036 -:104AD000C11176C0D11174C0111172C075C09F3F51 -:104AE00019F09F5F9093FB02181624F40E94C823CC -:104AF0008093FD028091FD0287FF05C00E94C823BC -:104B000081958093FD021C1624F40E94C823809393 -:104B1000FE028091FE0287FF05C00E94C823819596 -:104B20008093FE026091FD02662339F1C091FE027E -:104B3000CC2319F1772767FD7095872F972F0E9457 -:104B4000A92923E333E343E35FE30E94B92A0E94E8 -:104B500076296093FD026C2F772767FD7095872F6C -:104B6000972F0E94A92923E333E343E35FE30E94E5 -:104B7000B92A0E9476296093FE021D1624F40E9431 -:104B800011248093FF028091FF0287FF05C00E94DD -:104B9000112481958093FF02111624F40E941124A0 -:104BA000809300038091000387FF05C00E941124B9 -:104BB000819580930003DF91CF911F910C9437254D -:104BC0009F3F09F08ECF96CFDF91CF911F9108952F -:104BD000ECEFF2E085E0DF011D928A95E9F7109293 -:104BE000FB021092FA020895833081F128F481309B -:104BF00059F08230D1F00895853009F449C0B8F1F8 -:104C0000863009F456C0089580911E01262F30E0A9 -:104C1000280F311D2F3F310524F4680F60931E01CA -:104C200008958FEF80931E01089580911D01262F16 -:104C300030E0280F311D2F3F310524F4680F6093B9 -:104C40001D0108958FEF80931D01089580911C012F -:104C5000262F30E0280F311D2F3F310524F4680F37 -:104C600060931C0108958FEF80931C01089580913B -:104C70001B01262F30E0280F311D2F3F310524F472 -:104C8000680F60931B0108958FEF80931B010895B7 -:104C900080911A01262F30E0280F311D2F3F31055A -:104CA00024F4680F60931A0108958FEF80931A011E -:104CB000089580911901262F30E0280F311D2F3FD4 -:104CC000310524F4680F6093190108958FEF8093E4 -:104CD00019010895833011F128F4813049F08230B0 -:104CE00091F00895853081F120F18630C1F1089569 -:104CF00080911E01681720F4861B80931E01089581 -:104D000010921E01089580911D01681720F4861BE2 -:104D100080931D01089510921D01089580911C013A -:104D2000681720F4861B80931C01089510921C01C3 -:104D3000089580911B01681720F4861B80931B0146 -:104D4000089510921B01089580911A01681720F4AC -:104D5000861B80931A01089510921A01089580917C -:104D60001901681720F4861B809319010895109289 -:104D7000190108950F931F93873208F048C08E31B0 -:104D800008F08DC0803109F477C008F5873009F448 -:104D900061C068F4863009F09DC08091F202817F85 -:104DA0008E7F8093F20281E08093020394C08B3067 -:104DB00009F489C08E3009F08DC08091F20282FB27 -:104DC000222720F991E0922790FB82F95EC086317C -:104DD00009F479C060F4813109F07CC00E94E21BC3 -:104DE0009091160181E08927809316016CC089316A -:104DF00009F469C08B3109F06DC08091F20281FB2A -:104E0000222720F991E0922790FB81F93EC0883358 -:104E100009F459C050F4893209F457C0853309F4B4 -:104E200054C0873209F451C055C0833409F44DC0D1 -:104E300028F48A3308F44EC0895332C0883409F00C -:104E400049C00E94E21B0E94200A0E94E4030E94C3 -:104E5000392339C09091F202892F8095817080FBAF -:104E600090F929F0966098609093F20234C0997F8F -:104E7000977F9093F20227C08091F20283FB222752 -:104E800020F991E0922790FB83F98093F202992315 -:104E9000D1F08091F20281608093F20214C08D51B2 -:104EA00041E050E060E070E08A019B0104C0000F27 -:104EB000111F221F331F8A95D2F7C901B8010E9422 -:104EC000A21F0E94E21B81E006C061E070E080E06A -:104ED00090E0F5CF80E01F910F91089580E0089554 -:104EE00080E00895CF93C82F80910203813069F04C -:104EF00018F08230C9F184C0E0911701F0911801D7 -:104F00008081823209F07EC007C0E0911701F091E4 -:104F100018018081823261F48C2F0E946E278111EA -:104F200004C08C2F0E94BA261DC081E090E01AC0F8 -:104F30008C2F0E947027811114C0C43179F048F47D -:104F4000CB3079F0C03109F061C082E08093020378 -:104F500008C0C93219F0C83321F058C010920203BA -:104F600055C081E0817054C0C93291F120F5C4313F -:104F700079F1B0F4C73009F047C08EE180931E018B -:104F800082E380931D018AE080931C0184E1809379 -:104F90001B0188E080931A0188E28093190134C0D4 -:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 -:104FB0008093010329C0CE34E9F020F4CB3421F5ED -:104FC0006AE013C0C13579F0C235F1F461E00DC07B -:104FD00080910103882319F01092010315C081E02C -:104FE0008093020315C061E006C0809101030E9416 -:104FF000F4250AC06AE0809101030E946A2604C079 -:105000001092020380E004C081E002C080E0AACFD9 -:10501000CF9108950E949A23811102C00E947623A5 -:105020000E94B62380931D0380FF02C0869501C0B5 -:1050300080E00C94F10280911D03982F9695292F02 -:1050400030E0233031054CF49F5F990F8170892B3C -:10505000816080931D030E94BA2380911D03869571 -:105060000C94F10280911D03982F969591F0915820 -:10507000990F8170892B80931D038E7F91E009F435 -:1050800090E080911D0390FB80F980931D030E94A6 -:10509000BA2380911D0386950C94F10280911D0323 -:1050A000982F909590FB80F980931D030E94BA235E -:1050B00080911D0380FF02C0869501C080E00C94A2 -:1050C000F10290911D03892F86958F5F8F779170E4 -:1050D000843028F4880F892B80931D0302C090939D -:1050E0001D0380911D038E7F91E009F490E0809173 -:1050F0001D0390FB80F980931D030E94BA238091C9 -:105100001D0386950C94F10220911D03922F969514 -:105110008927982F990F822F8170892B80931D03E7 -:105120008E7F91E009F490E080911D0390FB80F95F -:1051300080931D030E94BA2380911D0386950C94D1 -:10514000F10280911D03869508955058BB27AA2728 -:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 -:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF -:10517000D3D180F3BA17620773078407950718F035 -:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 -:105190000B01B90190010C01CA01A0011124FF27E4 -:1051A000591B99F0593F50F4503E68F11A16F040DF -:1051B000A22F232F342F4427585FF3CF46953795DE -:1051C0002795A795F0405395C9F77EF41F16BA0BA3 -:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 -:1051E000661F771F881FC2F70EC0BA0F621F731F9A -:1051F000841F48F4879577956795B795F7959E3FF7 -:1052000008F0B3CF9395880F08F09927EE0F979584 -:105210008795089527D108F481E008950CD06BC1DB -:1052200063D140F05AD130F021F45F3F19F03EC114 -:10523000511195C14FC170D198F39923C9F35523EA -:10524000B1F3951B550BBB27AA2762177307840779 -:1052500038F09F5F5F4F220F331F441FAA1FA9F32F -:1052600033D00E2E3AF0E0E830D091505040E69521 -:10527000001CCAF729D0FE2F27D0660F771F881F82 -:10528000BB1F261737074807AB07B0E809F0BB0B71 -:10529000802DBF01FF2793585F4F2AF09E3F510595 -:1052A00068F004C15CC15F3FECF3983EDCF3869587 -:1052B00077956795B795F7959F5FC9F7880F911D0B -:1052C0009695879597F90895E1E0660F771F881FF7 -:1052D000BB1F621773078407BA0720F0621B730BAA -:1052E000840BBA0BEE1F88F7E095089504D06894FC -:1052F000B11135C1089518D188F09F5790F0B92F9A -:105300009927B751A0F0D1F0660F771F881F991F1A -:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF -:1053200008951CC1672F782F8827B85F39F0B93FDF -:10533000CCF3869577956795B395D9F73EF490951C -:105340008095709561957F4F8F4F9F4F0895E8949A -:1053500009C097FB3EF490958095709561957F4FBD -:105360008F4F9F4F9923A9F0F92F96E9BB2793956B -:10537000F695879577956795B795F111F8CFFAF47B -:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC -:1053900016C0882311F096E911C0772321F09EE80A -:1053A000872F762F05C0662371F096E8862F70E070 -:1053B00060E02AF09A95660F771F881FDAF7880F4A -:1053C0009695879597F9089588D018F011F08CD0AC -:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F -:1053E000E7FB6217730784079507A8F199F3E92F84 -:1053F000FF2788232AF03197660F771F881FDAF777 -:10540000952F5527442332F091505040220F331FDF -:10541000441FD2F7BB27E91BF50B621B730B840BF0 -:10542000B109C1F222F4620F731F841FB11D3197BD -:105430002AF0660F771F881FBB1FEFCF9150504097 -:105440005AF041F0882332F0660F771F881F915081 -:105450005040C1F7939530C08695779567959F5FCB -:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 -:1054700016161706E807F907C0F012161306E40718 -:10548000F50798F0621B730B840B950B39F40A2611 -:1054900061F0232B242B252B21F408950A2609F4EF -:1054A000A140A6958FEF811D811D089597F99F67F3 -:1054B00080E870E060E008959F3F31F0915020F463 -:1054C000879577956795B795880F911D96958795E0 -:1054D00097F908959FEF80EC089500240A9416161A -:1054E000170618060906089500240A9412161306D2 -:1054F000140605060895092E0394000C11F4882360 -:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B -:105510007F4F8F4F9F4F089557FD9058440F551F51 -:1055200059F05F3F71F04795880F97FB991F61F025 -:105530009F3F79F087950895121613061406551F9C -:10554000F2CF4695F1DF08C0161617061806991F08 -:10555000F1CF86957105610508940895E894BB27FD -:1055600066277727CB0197F908957CDF08F48FEF42 -:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 -:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF -:10559000D1F3950F50E0551F629FF001729FBB271A -:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 -:1055B0006627B00DA11D661F829F2227B00DA11D79 -:1055C000621F739FB00DA11D621F839FA00D611DFF -:1055D000221F749F3327A00D611D231F849F600D20 -:1055E000211D822F762F6A2F11249F5750408AF059 -:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 -:10560000881F91505040A9F79E3F510570F04ECF32 -:10561000A6CF5F3FECF3983EDCF3869577956795D0 -:10562000B795F795E7959F5FC1F7FE2B880F911D02 -:105630009695879597F90895FA01EE0FFF1F30961A -:105640002105310599F16115710561F48038BFE3D9 -:105650009B0749F168949038810561F08038BFEF6D -:105660009B0741F0992342F5FF3FE10531052105F4 -:1056700011F1E8940894E795D901AA2329F4AB2FF6 -:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F -:10569000F73950F019F0FF3A38F49F779F930CD008 -:1056A0000F9007FC905808953EF014CF60E070E032 -:1056B00080E89FE308954FE79F775F934F933F9371 -:1056C0002F939ED02F913F914F915F9152DF05C054 -:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C -:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C -:1056F0004EDF0F920F920F924DB75EB70F92C0D050 -:10570000EAE0F1E016D04F915F91EF91FF91E595BE -:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD -:10572000FA95E1F74195550B32D00F9007FE26C050 -:105730000895DF93CF931F930F93FF92EF92DF9221 -:105740007B018C01689405C0DA2EEF011EDFFE019B -:10575000E894A5912591359145915591AEF3EF01CE -:1057600006DDFE019701A801DA9479F7DF90EF904A -:10577000FF900F911F91CF91DF9108959B01AC0194 -:1057800060E070E080E89FE349CD90CE95CECCDE1E -:10579000E8F39923D9F3940F511DBBF39150504076 -:1057A00094F059F0882332F0660F771F881F9150CC -:1057B0005040C1F79E3F510544F7880F911D9695C3 -:1057C000879597F908955F3FACF0983E9CF0BB2712 -:1057D000869577956795B79508F4B1609395C1F76D -:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B -:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 -:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD -:105810000F93FF92C92FDD2788232AF02197660F67 -:10582000771F881FDAF720E030E040E85FEB9FE366 -:10583000883920F0803E30F021968F7787DCE2E3D4 -:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 -:10585000EC01FB2E6F5771097595771F880B990B1B -:1058600078DD28E132E741E35FE38FDEAF2D980179 -:10587000AE01FF900F911F91CF91DF9178DC3BCE6D -:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 -:1058900022273327442750781FC0B75188F4AB2FF5 -:1058A0000024469537952795011CA395D2F3002037 -:1058B00069F0220F331F441FB395DAF30DD045CCA6 -:1058C00061307105A0E88A07B94630F49B01AC014C -:1058D0006627772788279078309621F020833183B8 -:1058E000428353830895AA1BBB1B51E107C0AA1F23 -:1058F000BB1FA617B70710F0A61BB70B881F991F71 -:105900005A95A9F780959095BC01CD01089597FB14 -:10591000072E16F4009407D077FD09D00E94732C4F -:1059200007FC05D03EF4909581959F4F08957095A2 -:1059300061957F4F0895EE0FFF1F0590F491E02DC4 -:105940000994F999FECF92BD81BDF89A992780B547 -:105950000895A8E1B0E042E050E00C94C92C262F55 -:10596000F999FECF92BD81BDF89A019700B4021655 -:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 -:1059800008950196272F0E94B02C0C94AF2CDC01B7 -:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A -:1059A000319600B40D9241505040B8F70895F894E4 -:0259B000FFCF27 -:1059B200640007000CFF0000003F64041092106FA7 -:1059C200103B1007100101DF022808140A321E00E2 -:1059D20002040507090B0C0E1011131517181A1CD7 -:1059E2001D1F2123242628292B2D2F303234353711 -:1059F200393B1F0F03764F5F6F7F4969437909591E -:105A020053633149803F5D8B803FF8BF803FCAE1DD -:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE -:105A2200803F3149803F0000803FF16D7F3F75EA42 -:105A32007E3F4C827E3F833F7E3F84287E3F833F72 -:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 -:105A5200803F3F4D3639ED04A0046A043104C4038B -:105A6200DD03F6030F04010203040506070809001B -:00000001FF diff --git a/keyboard/planck/keymaps/mollat/compiled.hex b/keyboard/planck/keymaps/mollat/compiled.hex deleted file mode 100644 index 549b7a8dfa..0000000000 --- a/keyboard/planck/keymaps/mollat/compiled.hex +++ /dev/null @@ -1,1495 +0,0 @@ -:100000000C94A5030C94E9030C94E9030C94E90304 -:100010000C94E9030C94E9030C94E9030C94E903B0 -:100020000C94E9030C94E9030C94E9150C94BB16A9 -:100030000C941D240C94E9030C94E9030C94E9033B -:100040000C94E9030C944B040C94E9030C94E9031D -:100050000C94E9030C9485240C94E9030C94E903B3 -:100060000C94E9030C94E9030C94E9030C94E90360 -:100070000C94E9030C94E9030C94E9030C94E90350 -:100080000C945E0C0C94E9030C94E9030C94E903C2 -:100090000C94E9030C94E9030C94E9030C94E90330 -:1000A0000C94E9030C94E9030C94E903A704AD0450 -:1000B000B304B904BF04C404C904CE04D304D804EF -:1000C000DD04E204E704EC04F104F60428174A17FF -:1000D00038184A1738188F17B217381807181A180F -:1000E000041B041B331B331B721B921BE81CE81CF4 -:1000F0009D1BE81C4D1C4D1CB41CBD1CE81CE21CC7 -:100100005A1C5A1C5A1C5A1C5A1C5A1C5A1C5A1C3F -:100110005A1C5A1C5A1C5A1C5A1C5A1C5A1C5A1C2F -:100120006A1C781C7F1C861C901C07634236B79B98 -:10013000D8A71A39685618AEBAAB558C1D3CB7CC47 -:100140005763BD6DEDFD753EF6177231BF000000BF -:10015000803F08000000BE922449123EABAAAA2AA2 -:10016000BECDCCCC4C3E00000080BEABAAAAAA3EBD -:1001700000000000BF000000803F000000000008F9 -:100180004178D3BB4387D1133D190E3CC3BD428296 -:10019000AD2B3E68EC8276BED98FE1A93E4C80EF54 -:1001A000FFBE01C4FF7F3F00000000000000000010 -:1001B00000000000000000010204060A0F17202CB6 -:1001C0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9B2 -:1001D000DAC7B39D87715D4A3A2C20170F0A0604CF -:1001E00002010000000000000000000001E0010525 -:1001F000020502E0000129022901E1013302330274 -:10020000E10114021401280228000129022901E158 -:100210000133023302E1011A021A01280228000107 -:10022000E00105020502E0010602060001E0010509 -:10023000020502E0011302130001E00105020502BC -:10024000E0011102110001E00105020502E0010FC9 -:10025000020F0001E00105020502E0012502250070 -:1002600001E00105020502E0012402240001E00191 -:1002700005020502E0012302230001E00105020559 -:1002800002E0012202220001E00105020502E00174 -:100290002102210001E00105020502E00120022007 -:1002A0000001E00105020502E0011F021F0001E05C -:1002B0000105020502E0011E021E0001E001050227 -:1002C0000502E001270227000000000000000000F6 -:1002D00000000C30294614001A0008001500170011 -:1002E0001C0018000C00120013002A002B4304000D -:1002F0001600070009000A000B000D000E000F0099 -:1003000033003400E1001D001B0006001900050049 -:10031000110010003600370038002872000000007D -:10032000E300E200E0002C442C410252E600E7002A -:100330000000000035001E021F02200221022202DE -:10034000230224022502260227022D0000001E009F -:100350001F00200021002200230024002500260089 -:1003600027002E0000000000000000000000000038 -:1003700000000000360037003100310200000000AC -:10038000000000000000000001000000000000006C -:100390000000000035020000000000000000000026 -:1003A0000000000000002F0230022D0200003A0081 -:1003B0003B003C003D003E003F00400041002F005C -:1003C00030002E020000000000000000000042008B -:1003D0004300440045000000000000000000000051 -:1003E000000000000000000000000100000000000C -:1003F000000000000000000000004D0000000000B0 -:1004000000000000490000004C001C140100000026 -:10041000161400004E0022145000510052004F00EC -:100420001314141400004A000000000000004B00E8 -:100430000000000000000000000028000050000044 -:100440000000000000002C002C0000000000000054 -:100450000000000000000E300D3000000000000021 -:1004600000000000000000000B30000000300130F0 -:1004700002300330043005300630073008300930D0 -:10048000000000000000000000000C300000000030 -:100490000A30000000000000000000000000000022 -:1004A000000000000000010000000000000000004B -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000000010000000000000000000000DA -:1005200000000000000000000000000000000000CB -:1005300000000000FA000000F200F100F000F300FB -:100540000000000000000000000000000000F900B2 -:10055000000000000000000000000000000000009B -:100560000000FF00FE00FD00F400F600F5000000B2 -:1005700000000000280354006800650020005000BF -:100580006C0061006E0063006B0020004B00650092 -:10059000790062006F0061007200640000002C03AB -:1005A0004F007200740068006F006C0069006E00FC -:1005B00065006100720020004B0065007900620058 -:1005C0006F006100720064007300000004030904FE -:1005D00009026D00040100A0FA09040000010301F2 -:1005E0000100092111010001223F000705810308D4 -:1005F000000A0904010001030102000921110100A0 -:1006000001224D000705820308000A0904020001C7 -:1006100003000000092111010001223600070583B3 -:100620000308000A09040300010300000009211166 -:100630000100012239000705840310000112011096 -:100640000100000008EDFE606001000102000105EC -:10065000010906A101050719E029E7150025019503 -:100660000875018102050819012905950575019193 -:1006700002950175039101050719002977150025D9 -:1006800001957875018102C005010980A1018502EB -:1006900016010026B7001A01002AB700751095014F -:1006A0008100C0050C0901A1018503160100269CEB -:1006B000021A01002A9C02751095018100C00501F3 -:1006C0000902A1010901A100050919012905150067 -:1006D00025019505750181029501750381010501CB -:1006E000093009311581257F950275088106093881 -:1006F0001581257F950175088106050C0A380215BC -:1007000081257F950175088106C0C005010906A1F4 -:1007100001050719E029E7150025019508750181F4 -:1007200002950175088101050819012905950575CE -:100730000191029501750391010507190029FF1523 -:100740000025FF950675088100C011241FBECFEF5C -:10075000DAE0DEBFCDBF04B603FE24C080911E03E5 -:1007600090911F03A0912003B09121038730904BFB -:10077000A740B04BB9F410921E0310921F031092C1 -:1007800020031092210314BE84B7877F84BF88E1C1 -:100790000FB6F89480936000109260000FBEE0E006 -:1007A000F8E3099511E0A0E0B1E0E4E9FCE502C05E -:1007B00005900D92A03CB107D9F713E0A0ECB1E091 -:1007C00001C01D92AE31B107E1F70E942F130C94C6 -:1007D000482E0C9400000895089581E0089508952E -:1007E0000C94EC030C94ED030C94EF030E94122A7A -:1007F00023E030E0281B3109220F2093C401089523 -:10080000282F2F9880918000211108C0877F809326 -:10081000800010928D0010928C001BC08860809325 -:100820008000233019F48FEF9FEF0FC083E090E03A -:10083000821B9109880F991F2FEF3FEFA90102C07A -:10084000569547958A95E2F7CA0190938D0080935B -:100850008C000C94F6030E94F60384E08093C3019D -:100860001092C0010895279A2F988FEF9FEF9093D1 -:100870008700809386008AE08093800089E18093DE -:1008800081000E947B290C942B040E9433046E9AF1 -:10089000769A0C94EB031F920F920FB60F921124CD -:1008A0002F933F938F939F93EF93FF93E091C10119 -:1008B000F091C201CF0101969093C2018093C101D2 -:1008C0000090C30102C0F695E7950A94E2F7EF7332 -:1008D0008091C001823019F4E03251F404C08130BB -:1008E00039F4EF3329F480916F008D7F80936F008E -:1008F000F0E0E455FE4FE49121E031E0E29FC001D9 -:10090000E39F900D11240090C40102C09695879535 -:100910000A94E2F790938D0080938C00FF91EF9101 -:100920009F918F913F912F910F900FBE0F901F902D -:100930001895462F50E04031510508F05CC0FA018F -:10094000EA5AFF4FDC0112968C910C940C2E8823EE -:1009500009F451C08BEB92E00895882309F44BC051 -:100960008EEA92E00895882309F445C081EA92E076 -:100970000895882309F43FC084E992E0089588230C -:10098000D1F187E892E008958823A9F18AE792E0FF -:100990000895882381F18DE692E00895882359F126 -:1009A00080E692E00895882331F183E592E008958E -:1009B000882309F186E492E008958823E1F089E331 -:1009C00092E008958823B9F08CE292E0089588239C -:1009D00091F08FE192E00895882369F08AE092E037 -:1009E0000895882341F085EF91E00895882319F058 -:1009F0008CEE91E0089580E090E0089581E0089504 -:100A00000C94FE0408950C944504809115028823EB -:100A100009F448C08091D1019091D201009779F4F6 -:100A20000E944F249093D2018093D1018091D301F1 -:100A300090E0009771F48091D40190E00AC00E9488 -:100A40005B2420910001309101012817390740F300 -:100A500029C00197880F991F880F991FFC01EB523D -:100A6000FE4F60817181828193810E94C40BE0916D -:100A7000D30184E0E89FF0011124EB52FE4F608126 -:100A80007181828193814FE050E00E947C0F8091C0 -:100A9000D30190E001966091D40170E00E94F82D9E -:100AA0008093D3010C94F003109217020C94910BD5 -:100AB0000895089581E0809317020C9459050895D4 -:100AC00008958F929F92AF92BF92EF92FF920F93F1 -:100AD0001F93CF93DF93CDB7DEB7A3970FB6F894EC -:100AE000DEBF0FBECDBF7C01FC0100811181C801BA -:100AF0000E944C22B8010E9463078C01B7010E943A -:100B00000005882309F4CCC10032F0E51F0741F449 -:100B1000F7018281882309F458C00E94E00FC0C108 -:100B20000132F0E51F0741F4F7018281882309F4BF -:100B30004CC00E94E90FB4C10232F0E51F0751F426 -:100B4000F7018281882309F440C00E94DC0F8111E3 -:100B5000F0CFE3CF0332F0E51F0739F4F7018281CC -:100B6000882399F10E945A059BC10432F0E51F07C2 -:100B700039F4F7018281882341F10E94540590C124 -:100B80000532F0E51F0749F4F70182818823E9F077 -:100B9000809117028111F1CFE5CF0632F0E51F07F2 -:100BA00039F4F7018281882381F00E94F00F0AC096 -:100BB0000732F0E51F0749F4F7018281882329F005 -:100BC0000E94FB0F0E9460056BC18091170281118A -:100BD00005C0F70182818111CFC018C1003E110507 -:100BE00079F4F7018281882309F44DC00E94910BAA -:100BF00081E080931602109215021092D40150C128 -:100C0000023E110559F4F70182818823E1F10E9427 -:100C1000910B109216021092150242C1033E11056B -:100C200091F4F7018281882371F10E94910B109257 -:100C3000160281E0809315021092D3011092D20126 -:100C40001092D1012DC10235110559F4F7018281AD -:100C5000882309F425C180910001909101010A9730 -:100C60000DC00135110579F4F7018281882309F45B -:100C700017C180910001909101010A9690930101A2 -:100C8000809300010DC14091040183E2EFE1F1E0A6 -:100C9000DE01119601900D928A95E1F7F7018081AE -:100CA00021E030E02C0F3D1F280F311DC90120919C -:100CB000020130910301FC01E20FF31F60817727ED -:100CC00067FD7095640F711D882777FD8095982FBB -:100CD0000E941A2B20E030E040E451E40E947F2A79 -:100CE0004B015C01F701218184E090E0821B9109B6 -:100CF000BC01882777FD8095982F0E941A2B9B01B5 -:100D0000AC01C501B4010E94172A9B01AC0160E04F -:100D100070E080E090E40E948D2C20E030E04CED0B -:100D200050E40E942A2C4B015C01F7018281882348 -:100D3000D1F04FE050E0C501B4010E947C0F8091DA -:100D400016028823A1F08091D40124E0829FF00153 -:100D50001124EB52FE4F80829182A282B3828F5F78 -:100D60008093D40104C0C501B4010E94C40B0F3F9D -:100D7000110508F02ECF94C08091D00181111FC0C1 -:100D8000043130E5130709F051C00E94020581E0EB -:100D90008093D0010E944F249093CF018093CE0185 -:100DA0001092C7011092C9011092C8011092CB0194 -:100DB0001092CA011092CD011092CC0171C08091A5 -:100DC000CE019091CF010E945B24883C910570F484 -:100DD0008091C701E82FF0E0EE0FFF1FE853FE4FB0 -:100DE000118300838F5F8093C7015AC0043880E568 -:100DF000180721F00538104501F13AC0F70182814A -:100E0000882341F01092C50182E01EC0043830E50D -:100E1000130759F58091C501811106C086E20E9431 -:100E2000A81986E20E94701A82E01CC00438F0E51E -:100E30001F0741F305381045D9F4F7018281882353 -:100E400031F01092C60180E20E94BF1A29C0809141 -:100E5000C601811106C087E20E94A81987E20E949C -:100E6000701A80E20E94C61A1BC00538104529F38B -:100E700081E08093C5018093C601C701A3960FB698 -:100E8000F894DEBF0FBECDBFDF91CF911F910F91C0 -:100E9000FF90EF90BF90AF909F908F900C94F203D3 -:100EA00080E0A3960FB6F894DEBF0FBECDBFDF91F2 -:100EB000CF911F910F91FF90EF90BF90AF909F90B7 -:100EC0008F90089508959CE0799FF001112490E39C -:100ED000899FE00DF11D1124E60FF11DEE0FFF1F9C -:100EE000EC52FD4F859194910895880F991FFC0154 -:100EF000E85BFE4F859194910895880F991FFC013E -:100F0000E853FD4F8591949108950F931F93CF93CC -:100F1000DF93EC01811521E39207A0F5C11580E371 -:100F2000D80708F0D7C0C83ED105D8F4C03ED105D7 -:100F300008F007C2C83AD10578F4C53AD10508F0DF -:100F40006AC0C130D10509F463C008F4F7C1C430E8 -:100F5000D10508F0F6C1F2C1CB3BD10508F466C05B -:100F6000EDC1C11590E2D90708F0AFC0C11521E06D -:100F7000D20708F0E6C1C03FD10508F4DFC18E01F9 -:100F800010651FC2C03880E5D80700F5C03790E56E -:100F9000D90708F0A3C0C11520E5D20709F4ACC0F9 -:100FA00050F4CE01905480319F4008F0C7C1DF70EB -:100FB0008E01106A06C2C13080E5D80709F4AEC0C0 -:100FC000C43190E5D90708F4AFC0B8C1C33820E5F3 -:100FD000D20709F48EC050F4C13890E5D90709F45E -:100FE00082C008F083C000E011EDEBC1C03181E5A3 -:100FF000D80708F4A3C1C11597E5D90708F436C18D -:10100000CE0190578115904108F098C1DF7093C1CF -:1010100001E010E0D6C1C53AD10509F494C1C63A41 -:10102000D10509F093C102E810E4CBC1C83AD1055B -:1010300009F48FC1C93AD10509F48EC1CA3AD10564 -:1010400009F48DC1CB3AD10509F48CC1CC3AD10554 -:1010500009F48BC1CD3AD10509F48AC1C03BD10551 -:1010600009F489C1CE3AD10509F488C1CF3AD10536 -:1010700009F487C1C13BD10509F486C1C23BD10542 -:1010800009F485C1C33BD10509F484C1C43BD10532 -:1010900009F483C1C53BD10509F482C1C63BD10522 -:1010A00009F481C1C73BD10509F480C1C83BD10512 -:1010B00009F47FC1C93BD10509F47EC1CA3BD10502 -:1010C00009F47DC100E014E47CC1CE019F700E9450 -:1010D0007D0778C1DD278E01106C73C1CF70DD27CD -:1010E0008E01146D6EC100E010ED6BC100E012EDD9 -:1010F00068C100E013ED65C10E94531D0E94910B71 -:101100000E9458058FEF94E32CE0815090402040DE -:10111000E1F700C000000E94AA2453C18091F202AE -:1011200081608093F2024DC10E940B25811102C0A3 -:101130000E94E7240E941E2590E090931D03809357 -:101140001C03C23080E5D80721F480911C03816024 -:1011500086C0C43090E5D90721F480911C038260D9 -:101160007EC0C63020E5D20721F480911C03846044 -:1011700076C0C83080E5D80719F480911C0327C0D9 -:10118000CA3090E5D90721F480911C03806167C0C3 -:10119000CC3020E5D20721F480911C0380625FC02F -:1011A000CE3080E5D80721F480911C03806457C0BD -:1011B000C03190E5D90721F480911C0380684FC0AD -:1011C000C23120E5D20729F480911C038460886035 -:1011D00046C0C33080E5D80721F480911C038E7F80 -:1011E0003EC0C53090E5D90721F480911C038D7F66 -:1011F00036C0C73020E5D20721F480911C038B7FD5 -:101200002EC0C93080E5D80719F480911C0326C090 -:10121000CB3090E5D90721F480911C038F7E1FC04D -:10122000CD3020E5D20721F480911C038F7D17C0BB -:10123000CF3080E5D80721F480911C038F7B0FC04D -:10124000C13190E5D90721F480911C038F7707C045 -:10125000C331D04531F480911C038B7F877F80930D -:101260001C0380911C030E942225ABC08D2F99275F -:101270008F70992781309105D9F49E01237033270F -:1012800002C0880F991F2A95E2F79C688E0144E0FE -:10129000000F111F4A95E1F700271370802B912B47 -:1012A00053E0CC0FDD1F5A95E1F7C076DD272FC044 -:1012B0008230910531F4DC2FCC278E01016F106A4A -:1012C00080C08330910569F4CE018370992701E0D5 -:1012D00010E002C0000F111F8A95E2F7C8019C6858 -:1012E0000FC084309105B9F4CE018370992701E0D5 -:1012F00010E002C0000F111F8A95E2F7C8019A683A -:1013000023E0CC0FDD1F2A95E1F7C07ED7708C015A -:101310000C2B1D2B56C08530910531F4DC2FCC27CA -:101320008E01046F106A4DC0069709F04AC0CF7154 -:10133000DD27DC2FCC278E01106243C000E010E0D7 -:1013400040C08E013EC001E810E43BC003E810E459 -:1013500038C002EE14E435C009EE14E432C00AEEDF -:1013600014E42FC005EB14E42CC006EB14E429C0F0 -:1013700007EB14E426C00CEC14E423C00DEC14E4D9 -:1013800020C003E815E41DC00AE815E41AC002E90C -:1013900015E417C004E915E414C001E216E411C015 -:1013A00003E216E40EC004E216E40BC005E216E404 -:1013B00008C006E216E405C007E216E402C00AE22D -:1013C00016E4C801DF91CF911F910F9108959CE021 -:1013D000799FF001112490E3899FE00DF11D112404 -:1013E000E60FF11DEE0FFF1FEC52FD4F859194911A -:1013F000803E9105E0F4803C910558F581339105DC -:1014000009F46FC048F48932910509F463C08A3247 -:10141000910509F46DC072C089339105E9F08238F5 -:101420009105D1F08533910509F44DC067C0833E25 -:10143000910581F138F4803E9105B9F0823E910525 -:10144000D9F05CC0863E910561F1873E9105A1F11E -:1014500055C00E947507089520911C0320FD02C00D -:1014600021FF4CC080EE90E049C080911C0380FFBA -:10147000F9CF89E390E042C080911C0382FF0EC047 -:1014800080911C0384FF03C080E090E037C083EEAE -:1014900090E034C080911C0382FFF2CF82EE90E096 -:1014A0002DC080911C0383FF0BC080911C0384FD21 -:1014B000EBCF87EE90E022C080911C0383FFF5CF35 -:1014C00086EE90E01BC080911C0385FF07C089E277 -:1014D00090E014C080911C0385FFF9CF85E390E074 -:1014E0000DC080911C0386FF07C08AE290E006C011 -:1014F00080911C0386FFF9CF81E390E00E9485076D -:1015000008950C94F403E82FF0E0E25BFE4F808135 -:10151000E82FEF70F0E082958F7021E030E0A901B4 -:1015200002C0440F551F8A95E2F740A308950F9318 -:101530001F93CF93DF9385B7806885BF85B7806899 -:1015400085BFC3E0D0E001E010E0FE01E25BFE4FAA -:101550008081E82FEF70F0E021A182958F70A801C3 -:1015600002C0440F551F8A95E2F7CA01822B81A35E -:101570008C2F0E94830A219740F78BE090E061E076 -:1015800070E0FC01EE5BFE4F2081E22FEF70F0E097 -:1015900042A122952F70DB0102C0AA0FBB1F2A9522 -:1015A000E2F79D01242B22A3019758F7DF91CF91F9 -:1015B0001F910F910C940305EF92FF920F931F93CD -:1015C000CF93DF9300E212E0C3E0EE24E394F12C2A -:1015D000D5E08C2F0E94830A8BE090E040E050E041 -:1015E000FC01EE5BFE4F6081E62FEF70F0E020A182 -:1015F00030E062956F7002C0359527956A95E2F7E5 -:1016000020FD09C09701082E02C0220F331F0A9443 -:10161000E2F7422B532B019718F7F8019291829130 -:101620008F018417950721F051834083D0930501E2 -:101630008C2F0E94830AC15060F68091050187FDBE -:101640002CC08150809305018F3F39F08FE99FE0D6 -:101650000197F1F700C0000020C080911E02909118 -:101660001F02909327028093260280911C02909182 -:101670001D02909325028093240280911A0290917A -:101680001B02909323028093220280911802909172 -:10169000190290932102809320020E94050581E0A7 -:1016A000DF91CF911F910F91FF90EF900895E82F58 -:1016B000F0E0EE0FFF1FE05EFD4F80819181089505 -:1016C00008950F931F93CF9308E212E0C0E0F80152 -:1016D000929182918F010E94C723C80FF2E00032DD -:1016E0001F07A9F78C2FCF911F910F9108950E948A -:1016F0000B25811102C00E94E7240E9430258093AF -:1017000007033E9A809171008D7F8093710082E083 -:10171000809390008AE18093910081E080932A0277 -:10172000089580912A02811102C00E94770B1092C5 -:101730007A0210927902809171008D7F80937100FE -:10174000809190008F738093900010923C021092D1 -:101750003B02109273021092740210927502109262 -:1017600076021092720210927102E1E5F2E0A1E4B9 -:10177000B2E011921192119211921D921D9282E08B -:10178000E137F807B1F70895CF92DF92EF92FF9219 -:101790000F931F93CF93DF9320913B02222309F4F1 -:1017A00084C06B017C0180912A02811102C00E94D9 -:1017B000770B01E712E0C7E0D0E0A7019601F8013E -:1017C00092918291729162918F010E947B2A811184 -:1017D00031C0FE01EE0FFF1FEE0FFF1FEF5AFD4F4E -:1017E0001082118212821382DE01AA0FBB1FAF5B2F -:1017F000BD4F11961C921E92C730D105E9F021967B -:1018000044815581668177814083518362837383EC -:10181000148215821682178212968D919C911397CD -:1018200011969C938E9313961C921E921297349647 -:101830001296E2CF219708F68091790290917A0270 -:10184000019797FD05C090937A028093790204C0B6 -:1018500010927A02109279028091790290917A0224 -:1018600020917702309178022817390724F01092DE -:10187000780210927702892BC1F4809171008D7FDC -:1018800080937100809190008F73809390001092EC -:1018900073021092740210927502109276021092E6 -:1018A00072021092710210923B02DF91CF911F9150 -:1018B0000F91FF90EF90DF90CF9008951F920F92BD -:1018C0000FB60F9211244F925F926F927F928F9278 -:1018D0009F92AF92BF92CF92DF92EF92FF922F939F -:1018E0003F934F935F936F937F938F939F93AF93A8 -:1018F000BF93CF93DF93EF93FF9380913B028823B5 -:1019000009F49BC1C0917902D0917A021C161D0680 -:101910000CF093C140902B0250902C0260902D024D -:1019200070902E0220E030E0A901C301B2010E94B4 -:10193000262C18160CF065C0C130D10509F452C030 -:101940008091770290917802BE010E94F82D7C016F -:10195000909378028093770280903D0290903E02AF -:10196000A0903F02B090400220E030E040E85FE30A -:10197000C501B4010E94172A60933D0270933E0294 -:1019800080933F0290934002F701EE0FFF1FEE0F8E -:10199000FF1FEF5AFD4FA301920160817181828187 -:1019A00093810E947F2A20E030E040E05EE30E94C5 -:1019B0002A2C9B01AC01C501B4010E94262C1816EB -:1019C0008CF4C7010196BE010E94F82D9093780215 -:1019D0008093770210923D0210923E0210923F02D5 -:1019E00010924002E0917702F0917802EE0FFF1F13 -:1019F000EE0FFF1FEF5AFD4F60817181828193814D -:101A0000D0C0C0907302D0907402E0907502F09044 -:101A1000760220E030E0A901C701B6010E947B2ACE -:101A20002197882309F4A2C0FE01EE0FFF1FEE0FDD -:101A3000FF1FEF5AFD4F80809180A280B380A501E7 -:101A40009401C701B6010E947B2A87FF31C0A5011E -:101A5000940160E070E08CED93EC0E947F2A20E01E -:101A600030E040E451E40E947F2A20E030E040E092 -:101A70005FE30E942A2C9B01AC0160E070E080E0F3 -:101A800090E40E948D2C9B01AC01C501B4010E9421 -:101A90002A2C9B01AC01C701B6010E947B2A87FF5B -:101AA00007C0A701960160E070E08CED93E439C0B7 -:101AB000A5019401C701B6010E94262C18160CF04E -:101AC00055C0A501940160E070E08CED93E40E94A4 -:101AD0007F2A20E030E040E451E40E947F2A20E0A9 -:101AE00030E040E05FE30E942A2C9B01AC0160E003 -:101AF00070E080E090E40E948D2C9B01AC01C50158 -:101B0000B4010E942A2C9B01AC01C701B6010E94BE -:101B1000262C18165CF5A701960160E070E08CEDAC -:101B200093EC0E947F2A20E030E040E451E40E94E0 -:101B30007F2A20E030E040E05FE30E942A2C9B01F6 -:101B4000AC0160E070E080E090E40E948D2C9B018D -:101B5000AC01C701B6010E942A2C609373027093F6 -:101B60007402809375029093760213C0FE01EE0F0B -:101B7000FF1FEE0FFF1FEF5AFD4F80819181A28161 -:101B8000B3818093730290937402A0937502B09313 -:101B90007602609173027091740280917502909147 -:101BA000760220912802309129022F3F4FEF34070F -:101BB00031F02F5F3F4F30932902209328020E947B -:101BC00006106B017C0120E034E244EF51E40E94F6 -:101BD0007B2A87FF08C086EFC82E88E2D82E84EFC4 -:101BE000E82E81E4F82E20E030E040E051E4C70127 -:101BF000B6010E942A2C9B01AC0160E074E284E7EC -:101C00009BE40E947F2A6B017C010E94EC2A709366 -:101C10009700609396002091060130910701409152 -:101C2000080150910901C701B6010E942A2C0E94A7 -:101C3000EC2A709399006093980080913C0288236D -:101C400009F433C1C0903702D0903802E0903902D5 -:101C5000F0903A0220E030E0A901C701B6010E94ED -:101C6000262C1816D4F580912802909129028F3FD6 -:101C70002FEF920729F00196909329028093280272 -:101C8000C701B6010E94061020E030E040E051E4B8 -:101C90000E942A2C9B01AC0160E074E284E79BE483 -:101CA0000E947F2A6B017C010E94EC2A70939700AE -:101CB0006093960020910601309107014091080140 -:101CC00050910901C701B6010E942A2C0E94EC2AFA -:101CD000709399006093980008C01092970010923A -:101CE00096001092990010929800609131027091C4 -:101CF00032026F5F7F4F7093320260933102209106 -:101D000096003091970080E090E0232BF1F0C09195 -:101D10009600D09197000E94182B6B017C01BE01A8 -:101D200080E090E00E94182B9B01AC01609133028F -:101D30007091340280913502909136020E947F2A80 -:101D400020E03FEF4FE757E410C00E94182B6B01D3 -:101D50007C0120E030EE4FEF54E46091330270914B -:101D6000340280913502909136020E942A2C9B0108 -:101D7000AC01C701B6010E94262C87FD96C0809158 -:101D80002F028F5F80932F0290E020910303309108 -:101D9000040382179307A0F080910E03882319F0A3 -:101DA00010922F020DC0809171008D7F8093710081 -:101DB000809190008F738093900010923C027DC0C0 -:101DC00080913002C0912F02811128C0C090080379 -:101DD000D0900903E0900A03F0900B0320E030E07C -:101DE000A901C701B6010E94262C1816BCF481E097 -:101DF000809330021092370210923802109239020A -:101E000010923A02C0923302D0923402E09235022C -:101E1000F0923602C150C0932F0243C0109230029C -:101E20001092290210922802E0910503F091060316 -:101E300048E0C49FE00DF11D112480819181A281B1 -:101E4000B3818093370290933802A0933902B09304 -:101E50003A0220E030E040E85EE3648175818681EB -:101E600097810E942A2C6B017C0180910A01682FC6 -:101E700070E080E090E00E94182B20E030E048EC19 -:101E800052E40E947F2A9B01AC01C701B6010E9467 -:101E90002A2C60933302709334028093350290931E -:101EA000360210923202109231028091070380FDB7 -:101EB00004C010923C0210923B02FF91EF91DF911F -:101EC000CF91BF91AF919F918F917F916F915F91D2 -:101ED0004F913F912F91FF90EF90DF90CF90BF9067 -:101EE000AF909F908F907F906F905F904F900F90EA -:101EF0000FBE0F901F901895CF92DF92EF92FF9236 -:101F0000CF93DF936B017C01EA0180912A0281115A -:101F100002C00E94770B8091070380FF46C080912A -:101F2000790290917A0208970CF03FC0809171007D -:101F30008D7F8093710080913C0281110E94910BF2 -:101F400081E080933B02109229021092280220E047 -:101F500030E0A901C701B6010E94262C1816DCF456 -:101F60008091790290917A02FC01EE0FFF1FEE0F33 -:101F7000FF1FEF5AFD4FC082D182E282F382FC0143 -:101F8000EE0FFF1FEF5BFD4FD183C083019690934F -:101F90007A0280937902809171008260809371004F -:101FA00080919000806880939000DF91CF91FF90A6 -:101FB000EF90DF90CF90089580910703817008958E -:101FC000809107038160809307030E9434250C945D -:101FD0005F05809107038E7F809307030C9434255F -:101FE00080917B0290E0019666E070E00E94F82DFF -:101FF00080937B02089580917B0290E0019766E0D8 -:1020000070E00E94F82D80937B0208958F929F923A -:10201000AF92BF92CF92DF92EF92FF920F931F93F6 -:10202000CF93DF936B017C01C0912802D0912902EC -:10203000BE0180E090E00E94182B4B015C01A701DB -:10204000960160E070E08CE594E40E947F2A9B0199 -:10205000AC01C501B4010E942A2C0E94EC2A2091F7 -:102060007B02233009F473C028F4222351F021307D -:10207000E9F02CC1243009F4A0C0253009F4E0C0F7 -:1020800025C180E090E0A0E0BFE38093060190933B -:102090000701A0930801B093090110922B0210923E -:1020A0002C0210922D0210922E0210C110922B02BF -:1020B00010922C0210922D0210922E0264317105A2 -:1020C00040F46A30710560F520E030E040E85EE3FE -:1020D0002BC0693C710508F0AAC080E090E00E9426 -:1020E000182B20E030E040EA51E40E94162A20E05C -:1020F00030E044E353E40E947F2A9B01AC010E943C -:102100002A2C20E030E040E05EE30E942A2C9B0174 -:10211000AC0160E070E080E09EE30E94162A44C0BB -:1021200020E030E040E05FE3C701B6010E942A2CC6 -:102130006B017C0180E090E0A0E0BEE380930601AB -:1021400090930701A0930801B0930901BFC01092BA -:102150002B0210922C0210922D0210922E024AE0B5 -:10216000469F9001479F300D1124C90168EB7BE029 -:102170000E94E42DBC016C5D754077FF03C0719532 -:1021800061957109882777FD8095982F0E941A2BF9 -:102190002EE333EC4EE259E30E942A2C20E030E09B -:1021A00040EC5EE30E94172A6093060170930701DA -:1021B000809308019093090189C010922B0210921C -:1021C0002C0210922D0210922E02CE0183709927BC -:1021D000892BE1F0BE016170772780E090E00E94DA -:1021E000182B20E030E040E05EE30E942A2C20E043 -:1021F00030E040E45FE30E94172A60930601709389 -:10220000070180930801909309010CC080E090E0E1 -:10221000A0E0BFE38093060190930701A09308011B -:10222000B0930901C770DD27CD2B09F04FC0109284 -:10223000060110920701109208011092090146C090 -:1022400010922B0210922C0210922D0210922E024C -:1022500000E010E020E03FE3009306011093070147 -:1022600020930801309309016739710578F180E006 -:1022700090E00E94182B20E030E047E153E40E94F8 -:10228000162A20E030E04AE754E40E947F2A20E04A -:1022900030E048E452E40E942A2C20E030E040EA9A -:1022A00051E40E945C2B0E94E72A660F771F660F9D -:1022B000771FFB01EE5AFE4F20813181428153810D -:1022C000C701B6010E942A2C6B017C01C701B6012F -:1022D000DF91CF911F910F91FF90EF90DF90CF9002 -:1022E000BF90AF909F908F90089580918C02089539 -:1022F000CF93DF9300D01F92CDB7DEB79C018091C2 -:102300001303843019F593E099833B832A839093D8 -:10231000E9008FEF9091E800815095FD06C095EDA2 -:102320009A95F1F700008111F5CF8091E80085FFC3 -:102330000DC040E050E063E070E0CE0101960E94E5 -:10234000D9138091E8008E778093E8000F900F906A -:102350000F90DF91CF910895CF93DF9300D01F921C -:10236000CDB7DEB720911303243021F522E0298375 -:102370009B838A8383E08093E9008FEF9091E8004C -:10238000815095FD06C095ED9A95F1F700008111F9 -:10239000F5CF8091E80085FF0DC040E050E063E09C -:1023A00070E0CE0101960E94D9138091E8008E77EB -:1023B0008093E8000F900F900F90DF91CF910895D8 -:1023C000209113032430F1F422E02093E9002FEF51 -:1023D0003091E800215035FD06C035ED3A95F1F712 -:1023E00000002111F5CF2091E80025FF0BC040E04F -:1023F00050E065E070E00E94D9138091E8008E778C -:102400008093E8000895CF93DF93EC01909113033C -:10241000943009F046C0809115018823D9F080914D -:1024200016018823B9F09093E9008FEF9091E800AE -:10243000815095FD06C095E19A95F1F70000811154 -:10244000F5CF8091E80085FF2CC040E050E060E1CE -:1024500070E017C081E08093E9008FEF9091E80071 -:10246000815095FD06C095ED9A95F1F70000811118 -:10247000F5CF8091E80085FF14C040E050E068E0AF -:1024800070E0CE010E94D9138091E8008E7780938E -:10249000E80080E1FE01ACE7B2E001900D928A9580 -:1024A000E1F7DF91CF91089580911203811109C066 -:1024B0000E946E150E94CB158091E200846080938B -:1024C000E2000895109212030895089508950C945F -:1024D000122442E061EC81E00E94E81442E061ECE9 -:1024E00082E00E94E81442E061EC83E00E94E8147C -:1024F00042E161EC84E00C94E81480911503833090 -:1025000009F455C030F4813071F0823009F48EC086 -:1025100008958A3009F47AC08B3009F460C089309C -:1025200009F09CC020C080911403813A09F096C044 -:102530008091E800877F8093E80080911803909154 -:102540001903892B21F460E18CE792E003C060E07D -:1025500080E090E070E00E9424148091E8008B7786 -:102560008093E800089580911403813209F076C0C9 -:102570008091180390911903009719F0039709F0BF -:102580006DC08091E800877F8093E8008091E8002B -:1025900082FD05C0809113038111F8CF5FC0809147 -:1025A000F10080938C028091E8008B7753C080917A -:1025B0001403813A09F052C08091180390911903D5 -:1025C000892B09F04BC08091E800877F8093E80059 -:1025D0008091E80080FFFCCF8091150136C080918A -:1025E00014038132D9F58091180390911903892B36 -:1025F000A9F58091E800877F8093E8000E941D156F -:1026000080911603809315010C94531D809114033F -:10261000813221F58091E800877F8093E8000E9455 -:102620001D158091170380938D02089580911403E6 -:10263000813AA1F48091E800877F8093E80080913F -:10264000E80080FFFCCF80918D028093F1008091A3 -:10265000E8008E778093E8000C941D15089584B7E8 -:10266000877F84BF88E10FB6F89480936000109252 -:1026700060000FBE90E080E80FB6F8948093610090 -:10268000909361000FBE0E94C0180E946E150E94B8 -:10269000CB158091E20084608093E20078940E94E0 -:1026A00051180E94C2188BE091E00E946C18809132 -:1026B0001303853069F40E94D3238091110388238A -:1026C000B1F30E940124882391F30E94C313EFCF3A -:1026D0000E94CA18ECCF292F332723303105C9F0C7 -:1026E00064F42130310581F02230310509F043C016 -:1026F0008DE690E020ED35E042C021323105F1F069 -:102700002232310541F137C082E190E02DE336E01D -:1027100036C099278130910541F08230910541F012 -:10272000892B49F5ECECF5E005C0EEE9F5E002C0D7 -:10273000E4E7F5E0849190E09F0121C06430D8F493 -:10274000E62FF0E0EE0FFF1FE255FE4F20813181B2 -:1027500089E090E014C0643070F470E0FB01EE0F8B -:10276000FF1FEA55FE4F20813181FB01EE55FE4FE0 -:10277000808190E004C080E090E020E030E0FA0149 -:1027800031832083089580E189BD82E189BD09B448 -:1027900000FEFDCF8091D8008F7D8093D80080917E -:1027A000E00082608093E0008091E00081FDFCCF3A -:1027B0000895CF92DF92EF92FF920F931F93CF93E2 -:1027C000DF93EC018B016A010E943C15811133C03B -:1027D000C114D10439F0F60180819181081B190BD5 -:1027E000C80FD91FE12CF12C0115110519F18091A9 -:1027F000E80085FD16C08091E8008E778093E800A0 -:10280000C114D10449F0F60180819181E80EF91ECE -:10281000F182E08285E00FC00E943C15882321F3FD -:102820000AC089918093F10001501109FFEFEF1A5E -:10283000FF0ADACF80E0DF91CF911F910F91FF90D7 -:10284000EF90DF90CF90089520911A0330911B03F1 -:102850002617370748F06115710539F42091E80013 -:102860002E772093E80001C0B90140E061157105A1 -:10287000A9F120911303222309F443C0253009F460 -:1028800042C02091E80023FD40C02091E80022FDD5 -:1028900032C02091E80020FFE9CF4091F300209161 -:1028A000F20030E0342BFC01CF016115710559F0C5 -:1028B0002830310540F481918093F1006150710915 -:1028C0002F5F3F4FF1CF41E02830310509F040E064 -:1028D0002091E8002E772093E800C8CF4111C9CF9E -:1028E0000AC080911303882361F0853061F08091E4 -:1028F000E80083FD0AC08091E80082FFF2CF80E00B -:10290000089582E0089583E0089581E0089520917C -:102910001A0330911B032617370748F0611571051C -:1029200039F42091E8002E772093E80001C0B90126 -:10293000FC0120E06115710591F18091130388235A -:1029400009F440C0853009F43FC08091E80083FD60 -:102950003DC08091E80082FD2FC08091E80080FF9B -:10296000E9CF2091F3008091F20090E0922B611565 -:10297000710559F08830910540F424912093F100BD -:102980003196615071090196F2CF21E0089709F064 -:1029900020E08091E8008E778093E800CBCF211172 -:1029A000CCCF0AC080911303882361F0853061F099 -:1029B0008091E80083FD0AC08091E80082FFF2CF99 -:1029C00080E0089582E0089583E0089581E008950D -:1029D000982F973058F59093E900981739F0709137 -:1029E000EC002091ED005091F00003C0242F762FD1 -:1029F00050E021FF19C03091EB003E7F3093EB0097 -:102A00003091ED003D7F3093ED003091EB0031606F -:102A10003093EB007093EC002093ED005093F000A6 -:102A20002091EE0027FF07C09F5FD3CF8F70809368 -:102A3000E90081E0089580E008958091140387FF04 -:102A400011C08091E80082FD05C0809113038111BF -:102A5000F8CF11C08091E8008B770BC080911303F1 -:102A6000882349F08091E80080FFF8CF8091E8004A -:102A70008E778093E80008952091E4003091E5007E -:102A800095E64091EC00842F817040FF22C0809138 -:102A9000E80080FD1CC080911303882391F08530ED -:102AA00091F08091EB0085FD10C04091E4005091C1 -:102AB000E5004217530729F39A01915011F784E07A -:102AC000089582E0089583E0089581E0089580E00C -:102AD00008954091E80042FFDECF08950E94DC1582 -:102AE0000E94E415E0EEF0E0808181608083E8EDF3 -:102AF000F0E080818F77808319BCA7EDB0E08C91E6 -:102B00008E7F8C9380818F7E808310921203089534 -:102B10000F931F93CF93DF930E94DC150E94E4155F -:102B2000C8EDD0E088818F7788838881806888832A -:102B300088818F7D888319BC1092130310920F0334 -:102B4000109211031092100300EE10E0F801808142 -:102B50008B7F808388818160888342E060E080E0B1 -:102B60000E94E814E1EEF0E080818E7F8083E2EE47 -:102B7000F0E0808181608083808188608083F801BB -:102B800080818E7F8083888180618883DF91CF916F -:102B90001F910F910895E8EDF0E080818F7E808392 -:102BA000E7EDF0E080818160808384E082BF81E096 -:102BB000809312030C948815E8EDF0E080818E7FFD -:102BC00080831092E20008951092DA001092E100E2 -:102BD00008951F920F920FB60F9211242F933F93D7 -:102BE0004F935F936F937F938F939F93AF93BF9315 -:102BF000EF93FF938091E10082FF0BC08091E20090 -:102C000082FF07C08091E1008B7F8093E1000E94EA -:102C100050188091DA0080FF1FC08091D80080FF9B -:102C20001BC08091DA008E7F8093DA008091D900FA -:102C300080FF0DC080E189BD82E189BD09B400FE3D -:102C4000FDCF81E0809313030E94541205C019BC8C -:102C5000109213030E9462128091E10080FF19C05C -:102C60008091E20080FF15C08091E2008E7F80930A -:102C7000E2008091E20080618093E2008091D800C0 -:102C800080628093D80019BC85E0809313030E9472 -:102C900066128091E10084FF30C08091E20084FFE1 -:102CA0002CC080E189BD82E189BD09B400FEFDCF61 -:102CB0008091D8008F7D8093D8008091E1008F7E35 -:102CC0008093E1008091E2008F7E8093E20080910A -:102CD000E20081608093E20080910F03882311F06D -:102CE00084E007C08091E30087FD02C081E001C05D -:102CF00083E0809313030E9467128091E10083FFB9 -:102D000029C08091E20083FF25C08091E100877F88 -:102D10008093E10082E08093130310920F0380916F -:102D2000E1008E7F8093E1008091E2008E7F8093AE -:102D3000E2008091E20080618093E20042E060E086 -:102D400080E00E94E8148091F00088608093F00099 -:102D50000E946512FF91EF91BF91AF919F918F916A -:102D60007F916F915F914F913F912F910F900FBE87 -:102D70000F901F9018951F920F920FB60F9211246B -:102D80002F933F934F935F936F937F938F939F9373 -:102D9000AF93BF93CF93DF93EF93FF93C091E9007D -:102DA000CF708091EC00D82FD17080FDD0E81092C8 -:102DB000E9008091F000877F8093F00078940E9472 -:102DC000FF161092E9008091F00088608093F00077 -:102DD000CD2BCF70C093E900FF91EF91DF91CF91A0 -:102DE000BF91AF919F918F917F916F915F914F9123 -:102DF0003F912F910F900FBE0F901F9018951F932A -:102E0000CF93DF93CDB7DEB7AA970FB6F894DEBFA6 -:102E10000FBECDBFE4E1F3E088E08E0F9091F100AA -:102E200091938E13FBCF0E947D128091E80083FF67 -:102E30001FC18091140390911503492F50E04A302F -:102E4000510508F015C1FA01EA59FF4F0C940C2EF8 -:102E5000803881F0823809F00BC1809118038F709F -:102E60008093E9008091EB0085FB882780F9109220 -:102E7000E90006C0809110039091110391118260C6 -:102E80009091E800977F9093E8008093F100109272 -:102E9000F100C8C0282F2D7F09F0EAC0882319F05F -:102EA000823061F0E5C080911603813009F0E0C006 -:102EB000933009F080E0809311032BC080911603BA -:102EC000811127C0809118038F7009F4D1C08093BD -:102ED000E9002091EB0020FF1CC0933021F4809189 -:102EE000EB00806214C09091EB0090619093EB0036 -:102EF00021E030E0A90102C0440F551F8A95E2F796 -:102F00004093EA001092EA008091EB008860809381 -:102F1000EB001092E9008091E800877F86C0811164 -:102F2000A7C0109116031F778091E3008078812B52 -:102F30008093E3008091E800877F8093E8000E94FF -:102F40001D158091E80080FFFCCF8091E300806830 -:102F50008093E300111102C082E001C083E08093FE -:102F6000130386C08058823008F082C08091160317 -:102F7000909117038C3D53E0950779F583E08A83A0 -:102F80008AE289834FB7F894DE01139620E03EE091 -:102F900051E2E32FF0E050935700E49120FF03C08B -:102FA000E295EF703F5FEF708E2F90E0EA3010F007 -:102FB000C79601C0C0968D939D932F5F243149F72A -:102FC0004FBF8091E800877F8093E8006AE270E05D -:102FD000CE0101960E94241414C0AE014F5F5F4FD2 -:102FE000609118030E946B13BC01009709F440C064 -:102FF0009091E800977F9093E80089819A810E94E0 -:1030000087148091E8008B778093E80031C0803886 -:1030100079F58091E800877F8093E80080910F0325 -:103020008093F1008091E8008E778093E8000E9401 -:103030001D151EC081111CC0909116039230C0F462 -:103040008091E800877F8093E80090930F030E94AF -:103050001D1580910F03811106C08091E30087FD4B -:1030600002C081E001C084E0809313030E946912D2 -:103070008091E80083FF0AC08091E800877F8093F9 -:10308000E8008091EB0080628093EB00AA960FB677 -:10309000F894DEBF0FBECDBFDF91CF911F91089591 -:1030A0000895CF93809113038823A1F0C091E90084 -:1030B000CF709091EC00892F817090FD80E8C82B33 -:1030C0001092E9008091E80083FD0E94FF16CF7006 -:1030D000C093E900CF910895909393028093920258 -:1030E0000895E0919202F0919302309721F00190BF -:1030F000F081E02D099480E00895E0919202F09132 -:103100009302309721F00280F381E02D0994089515 -:10311000E0919202F0919302309721F00480F581C2 -:10312000E02D099408952091900230919102821728 -:10313000930771F09093910280939002E091920234 -:10314000F0919302309721F00680F781E02D0994E9 -:10315000089520918E0230918F028217930771F0AB -:1031600090938F0280938E02E0919202F0919302ED -:10317000309721F00084F185E02D09940895089599 -:103180000C94BF180E9446240E94970A0E94CC24E7 -:103190000C947B295F926F927F928F929F92AF9255 -:1031A000BF92CF92DF92EF92FF920F931F93CF9334 -:1031B000DF9300D000D01F92CDB7DEB70E94DC0AAB -:1031C0009DE9C92E92E0D92E03E010E0AA24A39431 -:1031D000B12C502E802F0E94570B4C01F60172909B -:1031E00062906F016826792661147104A1F4015080 -:1031F000110978F78FEF89838A831B820E944F24FD -:103200008160782F9D838C8349815A816B818D8168 -:103210000E947A1938C08091F20281FD0E94600BF1 -:103220002BE030E07501022E02C0EE0CFF1C0A9468 -:10323000E2F7C70186219721892B09F129835A8258 -:103240008E209F2091E0892809F490E09B830E94C2 -:103250004F248160782F9D838C8349815A816B81B3 -:103260008D810E947A19000F111FF801EB56FD4F56 -:1032700080819181E826F926F182E08204C0215004 -:10328000310980F6B4CF0E94B326109194020E94B7 -:1032900071181817D1F00E947118809394020F9042 -:1032A0000F900F900F900F90DF91CF911F910F9182 -:1032B000FF90EF90DF90CF90BF90AF909F908F9056 -:1032C0007F906F905F900C94810A0F900F900F90F9 -:1032D0000F900F90DF91CF911F910F91FF90EF9082 -:1032E000DF90CF90BF90AF909F908F907F906F9026 -:1032F0005F900895CF93DF93CDB7DEB72B970FB6CE -:10330000F894DEBF0FBECDBF4F83588769877A8799 -:103310008B87DE01119686E0FD0111928A95E9F70F -:1033200085E0FE01379601900D928A95E1F749817B -:103330005A816B817C818D819E810E94F11F2B9629 -:103340000FB6F894DEBF0FBECDBFDF91CF910895C9 -:10335000CF93882309F4C2C0C82F823859F40E9441 -:10336000711881FDBBC089E30E94CB220E94982383 -:1033700089E30CC0833879F40E94711880FDAEC0D7 -:1033800083E50E94CB220E94982383E50E940D23AF -:10339000CF910C949823843859F40E94711882FDBF -:1033A0009DC087E40E94CB220E94982387E4EECF41 -:1033B0008CEF8C0F813A48F48C2F0E94E328811106 -:1033C0008DC08C2F0E94CB22E3CF80E28C0F8830FF -:1033D00048F4C77081E001C0880FCA95EAF70E94DF -:1033E0005123D6CF8BE58C0F833078F4C53A29F082 -:1033F000C63A31F083E890E005C081E890E002C071 -:1034000082E890E0CF910C94931888E58C0F83317B -:1034100008F064C0C83A39F1C93A41F1CA3A49F1F1 -:10342000CB3A51F1CC3A59F1CD3A61F1C03B69F157 -:10343000CE3A71F1CF3A79F1C13B81F1C23B89F1CA -:10344000C33B91F1C43B99F1C53BA1F1C63BA9F146 -:10345000C73BB1F1C83BB9F1C93BC1F1CA3BC9F1A6 -:1034600080E090E038C082EE90E035C089EE90E0D8 -:1034700032C08AEE90E02FC085EB90E02CC086EB46 -:1034800090E029C087EB90E026C08CEC90E023C050 -:103490008DEC90E020C083E891E01DC08AE891E0C7 -:1034A0001AC082E991E017C084E991E014C081E27A -:1034B00092E011C083E292E00EC084E292E00BC081 -:1034C00085E292E008C086E292E005C087E292E0E1 -:1034D00002C08AE292E0CF910C94A918CF9108958E -:1034E000882309F44BC0823859F40E94711881FF77 -:1034F00045C089E30E94CB220E94982389E30CC037 -:10350000833871F40E94711880FF38C083E50E94EF -:10351000CB220E94982383E50E940D230C949823CC -:10352000843859F40E94711882FF28C087E40E94F1 -:10353000CB220E94982387E4EFCF9CEF980F913A1B -:1035400058F390E2980F983050F4877091E001C0E2 -:10355000990F8A95EAF7892F0E945723DFCF9BE5C1 -:10356000980F933020F480E090E00C949318885AE0 -:10357000833120F480E090E00C94A918089588230A -:1035800021F00E9451230C9498230895882321F060 -:103590000E9457230C94982308957F928F929F92B4 -:1035A000AF92BF92CF92DF92EF92FF920F931F9351 -:1035B000CF93DF931F92CDB7DEB77C01C62E772E57 -:1035C000FC01058102950F70128111110E946E237A -:1035D0000E94C422882379F0112369F080E28C0DC7 -:1035E000883048F082E00E94AD220E94C42291E01F -:1035F000D82ED92601C0D12CE72DE295EF70F0E04E -:10360000E059FF4F0C940C2E872D807F072D0F70F3 -:10361000882311F00295007F112389F0002309F41B -:1036200099C180E28C0D883020F4802F0E945123B4 -:1036300003C0802F0E9461230E9498238BC18C2D90 -:103640000E94701A002309F4C3C180E28C0D8830F7 -:1036500020F4802F0E94572303C0802F0E946723ED -:103660000E949823B5C1872D807F972D9F7080324F -:1036700011F4892F03C0892F8295807FCC2021F0FF -:10368000F1E0CF16A1F01DC0112339F0002319F18C -:10369000013009F50E9481239BC1002319F00130FC -:1036A00009F496C189830E948423898110C1112362 -:1036B00021F0063008F08CC10EC0053008F088C13A -:1036C00006C1112359F0002331F0F701958190FFD5 -:1036D00041C19F7095830E94BF1A7AC1002309F4EB -:1036E000F6C03EC1872D86958695837090E0009741 -:1036F00019F0019761F06CC1112321F08C2D972DE9 -:10370000937002C080E090E00E94931861C1112381 -:1037100021F08C2D972D937002C080E090E00E94E4 -:10372000A91856C18C2D112319F00E94BB2502C087 -:103730000E9423260E94A8264BC1872D837009F082 -:1037400052C0111145C18C2D829586958770880FC6 -:10375000880F9C2D9F70892E912CA12CB12C082EA6 -:1037600004C0880C991CAA1CBB1C0A94D2F7C4FE86 -:1037700014C00FE010E020E030E0B901A80104C05F -:10378000440F551F661F771F8A95D2F7CB01BA01E8 -:10379000609570958095909503C060E070E0CB01D6 -:1037A000272D26952695237030E02230310569F0CB -:1037B0002330310589F0682979298A299B2921300C -:1037C000310571F00E94392103C1682979298A29BC -:1037D0009B290E945521FCC00E943921C501B401DA -:1037E0000E941D21F5C0112319F0872D817001C0A1 -:1037F0008695882309F4ECC08C2D82958695877078 -:10380000880F880F9C2D9F70892E912CA12CB12C94 -:10381000082E04C0880C991CAA1CBB1C0A94D2F761 -:10382000C4FE14C00FE010E020E030E0B901A801B0 -:1038300004C0440F551F661F771F8A95D2F7CB012E -:10384000BA01609570958095909503C060E070E036 -:10385000CB01272D269526952370422F50E042302C -:10386000510569F04330510589F0682979298A2981 -:103870009B294130510571F00E941322A9C068298B -:1038800079298A299B290E942F22A2C00E941322F3 -:10389000C501B4010E94F7219BC08C2D90E0FC0172 -:1038A000E05EF109E531F10508F050C0E058FF4F46 -:1038B0000C940C2E0C2D0F70872D8F71112321F07D -:1038C0000E949021802F07CF0E94B121802F0E945B -:1038D000C61A7EC0112341F0053008F079C0872D4B -:1038E0008F710E94D62174C0063008F071C0F7CFE6 -:1038F000112339F0872D8F710E94902169C0112307 -:10390000C9F3872D8F710E94B12162C0112329F064 -:10391000872D8F710E947B215BC00E94712158C04E -:10392000112351F0172D1F71812F0E94902163E008 -:10393000812F0E94A4224CC081E00E94AD2202305F -:1039400008F446C082E00E94AD2242C0112331F04B -:10395000002381F28C2D0E94A8193AC0002389F21D -:103960008C2D0E94701A34C0472D4F706C2DC701EA -:103970000E9499040E9495202BC0111129C0472D47 -:103980004F7050E042305105B9F04CF441155105EB -:1039900081F041305105E1F40E94A32919C0433060 -:1039A000510569F04430510599F48C2D0E94F52998 -:1039B0000FC00E948C290CC00E94BF2909C00E9420 -:1039C000D22906C0472D4F706C2DC7010E94620797 -:1039D000DD20F9F00E94A02280FD1BC0F7011282B9 -:1039E0000E949A220E949021C7010E94181D0E94E5 -:1039F0009A220F90DF91CF911F910F91FF90EF903E -:103A0000DF90CF90BF90AF909F908F907F900C945D -:103A1000B1210F90DF91CF911F910F91FF90EF9007 -:103A2000DF90CF90BF90AF909F908F907F90089540 -:103A30000F931F93CF93DF93EC01888199812B81A2 -:103A40003C81232BB9F09F3F11F48F3F99F0CE01B9 -:103A50000E946105882371F0688179818A810E94C2 -:103A600096228C010E944B220E941221B801CE01A5 -:103A70000E94CD1ADF91CF911F910F9108950E945E -:103A80006E230E947E230E9443230E9498230E945B -:103A900059270E94A82680E090E00E94931880E0B9 -:103AA00090E00C94A9180E945E230C943F1D0E9484 -:103AB0008B22292F22952F7030E02C3031054CF4C9 -:103AC0002A3031056CF42250310922303105A8F436 -:103AD00007C02C30310569F02F30310551F00DC091 -:103AE000803F69F018F4803E40F409C0843F29F417 -:103AF00006C093FB882780F9089580E0089581E04F -:103B00000895CF93DF9300D000D01F92CDB7DEB7DA -:103B10000F900F900F900F900F90DF91CF9108951D -:103B2000CF93DF9300D000D000D0CDB7DEB726967C -:103B30000FB6F894DEBF0FBECDBFDF91CF910895D1 -:103B40001F93CF93DF93C0919D0216E080919E0258 -:103B5000C81799F0D0E01C9FF0011D9FF00D1124B3 -:103B6000E156FD4F4081518162817381848195814D -:103B70000E94901D2196C770E9CFDF91CF911F91D0 -:103B800008954091CF025091D0026091D10270917E -:103B9000D2028091D3029091D4020C94901D809116 -:103BA000D40282958F7009F054C08091D10288238D -:103BB00009F44FC080919D02A0919E026091CF02B6 -:103BC0007091D0024091D2025091D302B6E08A1790 -:103BD00009F43FC090E041155105C1F17F3F11F458 -:103BE0006F3FA1F1B89FF001B99FF00D1124E1568C -:103BF000FD4F218172132AC02081621327C02281C8 -:103C0000211124C0238134812417350710F4215059 -:103C10003109241B350B283C3105C0F42091D40216 -:103C20002F7020612093D40226E0289FF001299F65 -:103C3000F00D1124EC55FD4F80818F7080618083E1 -:103C40008FEC92E00E94181D0C94A01D01968770C5 -:103C5000BECF0895CF92DF92EF92FF920F931F9302 -:103C6000CF93DF93CDB7DEB762970FB6F894DEBF80 -:103C70000FBECDBF8C0185E0F801DE011D960190DD -:103C80000D928A95E1F7D8014C9111965C911197AC -:103C900012966C9112971396CD90DC9014973091F8 -:103CA000CF027091D0028091D2029091D3020097FE -:103CB00009F46BC17F3F19F43F3F09F466C1E090FE -:103CC000D102EE2009F4C0C02091D402C816D90652 -:103CD00028F0F601E81BF90BCF0104C08095909500 -:103CE0008C0D9D1DFF24F394883C910578F0F12CF8 -:103CF000207F09F0C6C07C2DD98AC88A89890E9494 -:103D0000811D8FEC92E00E94181DB1C0822F807F30 -:103D100009F046C0751314C0341312C0611110C0ED -:103D20002F7020612093D4020E94C11D8FEC92E07D -:103D30000E94181D8091D402D80115968C932EC034 -:103D4000CD2819F15F3F11F44F3FF9F0F62E6111C4 -:103D50001CC080919D0220919E0236E0821709F4DA -:103D60005AC090E0389FF001399FF00D1124E156C0 -:103D7000FD4F7181571306C07081471303C07281D4 -:103D8000711103C001968770E9CFF62E662309F4FE -:103D900018C18091D40281608093D402F12C11C1AA -:103DA000751308C0341306C0611104C08091D40299 -:103DB000D801C3C04D875E878D859E856A8B0E9422 -:103DC000571D6A898823E1F16623D1F12091D4023D -:103DD000822F82958F7090E0029774F08091CF02CD -:103DE0009091D00298878F831986DB86CA862C87AC -:103DF000CE0107960E94181D86E0F801AFECB2E0F4 -:103E000001900D928A95E1F70E94CF1D0E94C11D7D -:103E1000FF24F394D6C04D875E878D859E850E94D2 -:103E20008B22292F22952F7030E0223031050CF0A3 -:103E3000BCC09F7009F0B6C0805E883008F4C1C075 -:103E4000C8010E94181DE4CFC816D90608F453C053 -:103E5000F601E81BF90BCF01883C910508F450C02E -:103E6000F12C7C2DD98AC88A89890E94811DEFECAA -:103E7000F2E086E0DF011D928A95E9F70E94C11DFC -:103E8000A0C0751314C0341312C0611110C080910A -:103E9000D402F8018583C8010E94181D86E0EFEC6A -:103EA000F2E0DF011D928A95E9F7FE2C8AC04D876A -:103EB0005E878D859E856A8B0E94571D6A8988233F -:103EC00009F4BECF662309F4BBCF2091D402822F20 -:103ED00082958F7090E002970CF48ECF8091CF0284 -:103EE0009091D0029A8389831B82DD82CC822E83BB -:103EF000CE0101967FCF809590958C0D9D1DACCF06 -:103F0000F62E662309F49CCF75132EC034132CC0F3 -:103F10002091D40220FD1FC0822F82958F70D9F08E -:103F2000D80115962C9315978F3049F08F5F982FF5 -:103F30009295907F822F8F70892B15968C93C80154 -:103F40000E94181D86E0F801AFECB2E001900D92DE -:103F50008A95E1F793CF86E0F801AFECB2E00190EB -:103F60000D928A95E1F72DC04D875E878D859E85E0 -:103F70000E94571D811140CF8091D40281608093AF -:103F8000D402C8010E94181D1CC0662309F458CF32 -:103F90004D875E878D859E850E94571D882309F475 -:103FA0004FCF2ACF811148CF0CC0243031050CF0FF -:103FB00047CF9F7009F440CFF8019581907F09F0B9 -:103FC0003BCF8F2D62960FB6F894DEBF0FBECDBFEC -:103FD000DF91CF911F910F91FF90EF90DF90CF90E5 -:103FE00008951F93CF93DF93CDB7DEB72C970FB60D -:103FF000F894DEBF0FBECDBF4F83588769877A879D -:104000008B879C87CE0107960E942A1E882369F021 -:104010008F8198852A853B85232BF1F19F3F09F0FD -:1040200063C08F3F09F060C037C086E0FE0137965D -:10403000DE01119601900D928A95E1F76F817885E6 -:10404000EA85FB85309741F17F3F11F46F3F21F105 -:1040500020919E0230E0C901019687709927409116 -:104060009D0250E08417950709F447C069837A835D -:10407000FD83EC8396E0929FD001939FB00D1124B5 -:10408000A156BD4FFE01319601900D929A95E1F730 -:1040900080939E020E94A01D16E080919D02909147 -:1040A0009E028917C1F1189FC001112481569D4FAE -:1040B0000E942A1E882379F1E0919D021E9FF00143 -:1040C0001124E156FD4F40815181628173818481C9 -:1040D00095810E94901D80919D0290E001968770CD -:1040E000992780939D02D9CF4F81588569857A851C -:1040F0008B859C850E94901DCFCF0E94531D1092EE -:104100009E0210929D02EFECF2E086E0DF011D922C -:104110008A95E9F7C1CF2C960FB6F894DEBF0FBE93 -:10412000CDBFDF91CF911F910895EF92FF920F9332 -:104130001F93CF93DF938C01009709F46CC0F12C8F -:10414000EE24E394E8012196F8018491843740F449 -:10415000843008F051C0813081F0823019F15BC0A9 -:10416000853709F444C0A8F19CE7980F903708F010 -:1041700052C08F770E94701A41C00E5F1F4FFE0120 -:10418000C49180E28C0F883048F4C7708E2D01C036 -:10419000880FCA95EAF70E94712314C08C2F0E94E1 -:1041A000A8192DC00E5F1F4FFE01C49180E28C0F35 -:1041B000883058F4C7708E2D01C0880FCA95EAF771 -:1041C0000E9477230E9498231AC08C2F0E94701A95 -:1041D00016C00E5F1F4FFE01C491CC2381F08FE902 -:1041E0009FE00197F1F700C00000C150F6CF0E5FCD -:1041F0001F4FFE01F49003C00E94A8198E018F2D5D -:10420000882309F49FCFEFE9FFE03197F1F700C071 -:1042100000008150F5CFDF91CF911F910F91FF905A -:10422000EF90089508956093D9027093DA02809315 -:10423000DB029093DC020C943F1D0F931F930091BF -:10424000D9021091DA022091DB023091DC02DC010C -:10425000CB01802B912BA22BB32B8093D90290936F -:10426000DA02A093DB02B093DC021F910F910C9451 -:104270003F1D0F931F930091D9021091DA022091F4 -:10428000DB023091DC02DC01CB0180239123A223ED -:10429000B3238093D9029093DA02A093DB02B09308 -:1042A000DC021F910F910C943F1D0F931F930091FF -:1042B000D9021091DA022091DB023091DC02DC019C -:1042C000CB0180279127A227B3278093D90290930F -:1042D000DA02A093DB02B093DC021F910F910C94E1 -:1042E0003F1D1092D5021092D6021092D702109262 -:1042F000D8020C943F1D41E050E060E070E004C043 -:10430000440F551F661F771F8A95D2F74093D50239 -:104310005093D6026093D7027093D8020C943F1D3D -:1043200041E050E060E070E004C0440F551F661F9C -:10433000771F8A95D2F78091D5029091D602A091ED -:10434000D702B091D802482B592B6A2B7B2B409374 -:10435000D5025093D6026093D7027093D8020C9482 -:104360003F1D41E050E060E070E004C0440F551F85 -:10437000661F771F8A95D2F7409550956095709586 -:104380008091D5029091D602A091D702B091D80227 -:10439000482359236A237B234093D5025093D602A6 -:1043A0006093D7027093D8020C943F1D41E050E017 -:1043B00060E070E004C0440F551F661F771F8A95A8 -:1043C000D2F78091D5029091D602A091D702B091F8 -:1043D000D802482759276A277B274093D502509354 -:1043E000D6026093D7027093D8020C943F1D0F93AE -:1043F0001F930091D5021091D6022091D7023091DF -:10440000D802DC01CB01802B912BA22BB32B809304 -:10441000D5029093D602A093D702B093D8021F91F1 -:104420000F910C943F1D0F931F930091D502109193 -:10443000D6022091D7023091D802DC01CB01802333 -:104440009123A223B3238093D5029093D602A09305 -:10445000D702B093D8021F910F910C943F1D0F9378 -:104460001F930091D5021091D6022091D70230916E -:10447000D802DC01CB0180279127A227B3278093A4 -:10448000D5029093D602A093D702B093D8021F9181 -:104490000F910C943F1D0895CF92DF92EF92FF92FF -:1044A0000F931F93CF93DF938C01C090D902D090CC -:1044B000DA02E090DB02F090DC028091D50290916C -:1044C000D602A091D702B091D802C82AD92AEA2AE6 -:1044D000FB2ACFE1D0E0D701C6010C2E04C0B6956F -:1044E000A795979587950A94D2F780FF06C0B801E3 -:1044F0008C2F0E94E709019721F4219760F780E053 -:1045000001C08C2FDF91CF911F910F91FF90EF9001 -:10451000DF90CF900895CF93DF93EC010E944C225F -:10452000BE010E94E709DF91CF910895CB010E945F -:104530008B2208958091DD02859585958595089556 -:104540008091DD028770089598E0899F9001112481 -:10455000262B2093DD020C9490212091DD02809582 -:1045600082238093DD02982F977069F430E0482F02 -:10457000552747FD50952417350729F085958595D2 -:1045800085950C94B12108959091DD02977081E09A -:1045900009F480E0089590911501992321F09091FC -:1045A0001601911109C02091170130911801F901EC -:1045B00032969FEF40E01FC0982F9695969596955E -:1045C0009F3050F5E0911701F0911801E90FF11DAE -:1045D000877021E030E0A90102C0440F551F8A9581 -:1045E000E2F7CA019181892B818308959F3F39F0B9 -:1045F0004F5F4E3041F051915813F8CF0DC051111B -:10460000F7CF942FF5CF9F3F39F0F901E90FF11D56 -:1046100097FDFA9582830895089590911501992345 -:1046200021F090911601911109C02091170130914C -:104630001801F9013296205F3F4F1FC0982F9695C1 -:10464000969596959F30F0F4E0911701F09118013E -:10465000E90FF11D877021E030E0A90102C0440F8D -:10466000551F8A95E2F7CA0180959181892381833C -:1046700008953196E217F30729F090819813F9CF46 -:104680001082F7CF089581E090E0E0911701F0915A -:104690001801E80FF91F1082019680319105A9F7E2 -:1046A00008959091F102892B8093F10208958095ED -:1046B0009091F10289238093F10208951092F10202 -:1046C00008959091F002892B8093F00208958095CF -:1046D0009091F00289238093F00208951092F002E5 -:1046E00008959091EF02892B8093EF0208958095B1 -:1046F0009091EF0289238093EF0208951092EF02C8 -:1047000008958093DE0208951092DE02089580914C -:10471000170190911801FC0131969C01205F3F4FD9 -:1047200080E0919191118F5FE217F307D1F708951F -:10473000E0911701F09118018091F1028083E091DE -:104740001701F091180190818091F002892B8083EC -:10475000E0911701F091180190818091EF02892B6F -:1047600080838091DE02882361F0E0911701F0914F -:1047700018019081892B80830E94872381111092D8 -:10478000DE0280911701909118010C947D1820E0B1 -:10479000009739F0AC0141505109842395232F5FD4 -:1047A000F7CF822F089580911303843039F110924E -:1047B000F30220E488E190E00FB6F894A895809386 -:1047C00060000FBE2093600080E00E94000480E043 -:1047D0000E94810A83B7817F846083BF83B7816031 -:1047E00083BF7894889583B78E7F83BF88E10FB6A7 -:1047F000F89480936000109260000FBE08950895B1 -:10480000089580E00E9400040E94FF230E94DC0AB9 -:104810000E9400240E94610B91E0811101C090E090 -:10482000892F08950E94531D80E00E9400040E9479 -:104830007B290E9471180C94810A1F920F920FB667 -:104840000F9211248F939F93AF93BF938091F302A4 -:10485000811113C08091F4029091F502A091F602AB -:10486000B091F7024196A11DB11D8093F40290937F -:10487000F502A093F602B093F702BF91AF919F911A -:104880008F910F900FBE0F901F90189582E084BDFE -:1048900093E095BD9AEF97BD80936E0008952FB772 -:1048A000F8948091F4029091F502A091F602B091F3 -:1048B000F7022FBF0895CF92DF92EF92FF920F93EE -:1048C0001F932FB7F8944091F4025091F502609134 -:1048D000F6027091F7022FBF6A017B01EE24FF24DC -:1048E0008C0120E030E0C016D106E206F30610F499 -:1048F000415051099A01281B390BC9011F910F9191 -:10490000FF90EF90DF90CF9008951F920F920FB617 -:104910000F9211248F939F93AF93BF938091F402D2 -:104920009091F502A091F602B091F7020196A11DB7 -:10493000B11D8093F4029093F502A093F602B09318 -:10494000F702BF91AF919F918F910F900FBE0F9083 -:104950001F9018950E946E15F8942FEF87EA91E644 -:10496000215080409040E1F700C0000087E090EBCC -:10497000DC0180931E0390931F03A0932003B09348 -:1049800021039CE088E10FB6F894A895809360001D -:104990000FBE90936000FFCF0E940B25811102C0D3 -:1049A0000E94E7240E9416258093F2020E941E2591 -:1049B00080931C0387FB882780F9809316010E944F -:1049C0001A25682F70E080E090E00C9413216DEEC2 -:1049D0007EEF80E090E00E94322E60E082E090E086 -:1049E0000E94202E60E083E090E00E94202E60E094 -:1049F00084E090E00E94202E60E085E090E00E943C -:104A0000202E60E086E090E00E94202E6FEF87E08D -:104A100090E00C94202E80E090E00E941A2E21E07D -:104A20008D3E9E4F09F020E0822F089582E090E0B5 -:104A30000C94122E83E090E00C94122E84E090E00F -:104A40000C94122E682F84E090E00C94202E86E0C7 -:104A500090E00C94122E682F86E090E00C94202EAB -:104A600087E090E00C94122E682F87E090E00C9481 -:104A7000202E8091FA0280FF0BC060911C0185E01E -:104A8000689FB001112475956795759567952BC042 -:104A900081FF09C060911C0185E0689FB00111246D -:104AA0007595679520C082FF07C060911C0185E065 -:104AB000689FB001112417C09091FB029923D1F097 -:104AC00060911B01961788F720911C0185E0289FB3 -:104AD00090011124929FA001939F500D112470E02A -:104AE000CA010E94F82D6038710540F46115710506 -:104AF00039F002C065E070E0862F08958FE70895D1 -:104B000081E008958091FA0280FF08C060911A0147 -:104B100070E0759567957595679521C081FF06C012 -:104B200060911A0170E07595679519C082FF04C005 -:104B300060911A0170E010C09091FB029923C1F0BE -:104B4000609119019617A0F780911A01899FC00101 -:104B5000112470E00E94F82D6038710528F4611569 -:104B6000710521F0862F08958FE7089581E008955B -:104B700061E070E0F4CF803F21F40E9439258195F7 -:104B800004C0813F29F40E9439258093FE020895D4 -:104B9000823F21F40E943925819504C0833F29F486 -:104BA0000E9439258093FD020895893F19F40E94DF -:104BB000822505C08A3F31F40E9482258195809329 -:104BC000FF0208958B3F21F40E948225819504C045 -:104BD0008C3F29F40E948225809300030895843F2E -:104BE00021F48091FC02816017C0853F21F48091FF -:104BF000FC02826011C0863F21F48091FC02846037 -:104C00000BC0873F21F48091FC02886005C0883F7B -:104C100031F48091FC0280618093FC0208958D3F05 -:104C200021F48091FA0281600BC08E3F21F48091C3 -:104C3000FA02826005C08F3F29F48091FA028460F5 -:104C40008093FA020895803F39F48091FE0287FF35 -:104C50006CC01092FE0269C0813F29F48091FE026F -:104C60001816BCF362C09091FD02823F29F497FFB1 -:104C70005CC01092FD0259C0833F19F41916CCF3A1 -:104C800054C0893F41F48091FF0218160CF04DC0CA -:104C90001092FF024AC08A3F29F48091FF0287FFE9 -:104CA00044C0F6CF8B3F39F48091000387FF3DC0AD -:104CB000109200033AC08C3F29F48091000318162B -:104CC000BCF333C0843F21F48091FC028E7F17C077 -:104CD000853F21F48091FC028D7F11C0863F21F435 -:104CE0008091FC028B7F0BC0873F21F48091FC02F6 -:104CF000877F05C0883F31F48091FC028F7E8093CE -:104D0000FC0213C08D3F21F48091FA028E7F0BC00C -:104D10008E3F21F48091FA028D7F05C08F3F29F4E8 -:104D20008091FA028B7F8093FA028091FD028111BB -:104D30000EC08091FE0281110AC08091FF02811194 -:104D400006C080910003811102C01092FB020895F9 -:104D50008CEF92E00E9488180E944F249093F902F1 -:104D60008093F80208951F93CF93DF938091F80208 -:104D70009091F9020E945B24AC019091FB0299236F -:104D800021F020911D0130E006C020911E018AE033 -:104D9000289F900111244217530708F486C0809180 -:104DA000FD02C091FE02D091FF021091000381111B -:104DB00007C0C11176C0D11174C0111172C075C085 -:104DC0009F3F19F09F5F9093FB02181624F40E94F6 -:104DD00039258093FD028091FD0287FF05C00E9466 -:104DE000392581958093FD021C1624F40E943925F3 -:104DF0008093FE028091FE0287FF05C00E94392544 -:104E000081958093FE026091FD02662339F1C09185 -:104E1000FE02CC2319F1772767FD7095872F972F16 -:104E20000E941A2B23E333E343E35FE30E942A2C1F -:104E30000E94E72A6093FD026C2F772767FD70952B -:104E4000872F972F0E941A2B23E333E343E35FE37B -:104E50000E942A2C0E94E72A6093FE021D1624F469 -:104E60000E9482258093FF028091FF0287FF05C088 -:104E70000E94822581958093FF02111624F40E94DE -:104E80008225809300038091000387FF05C00E9464 -:104E90008225819580930003DF91CF911F910C941F -:104EA000A8269F3F09F08ECF96CFDF91CF911F911B -:104EB0000895ECEFF2E085E0DF011D928A95E9F7B5 -:104EC0001092FB021092FA020895833081F128F4C7 -:104ED000813059F08230D1F00895853009F449C00D -:104EE000B8F1863009F456C0089580911E01262F2E -:104EF00030E0280F311D2F3F310524F4680F6093F7 -:104F00001E0108958FEF80931E01089580911D0169 -:104F1000262F30E0280F311D2F3F310524F4680F74 -:104F200060931D0108958FEF80931D010895809176 -:104F30001C01262F30E0280F311D2F3F310524F4AE -:104F4000680F60931C0108958FEF80931C010895F2 -:104F500080911B01262F30E0280F311D2F3F310596 -:104F600024F4680F60931B0108958FEF80931B0159 -:104F7000089580911A01262F30E0280F311D2F3F10 -:104F8000310524F4680F60931A0108958FEF809320 -:104F90001A01089580911901262F30E0280F311D44 -:104FA0002F3F310524F4680F6093190108958FEFA6 -:104FB000809319010895833011F128F4813049F06C -:104FC000823091F00895853081F120F18630C1F171 -:104FD000089580911E01681720F4861B80931E019E -:104FE000089510921E01089580911D01681720F404 -:104FF000861B80931D01089510921D0108958091D4 -:105000001C01681720F4861B80931C0108951092E0 -:105010001C01089580911B01681720F4861B809362 -:105020001B01089510921B01089580911A016817C1 -:1050300020F4861B80931A01089510921A01089596 -:1050400080911901681720F4861B80931901089537 -:105050001092190108950F931F93873208F048C0EA -:105060008E3108F08DC0803109F477C008F58730A3 -:1050700009F461C068F4863009F09DC08091F202A5 -:10508000817F8E7F8093F20281E08093020394C03F -:105090008B3009F489C08E3009F08DC08091F20206 -:1050A00082FB222720F991E0922790FB82F95EC0D3 -:1050B000863109F479C060F4813109F07CC00E9426 -:1050C000531D9091160181E08927809316016CC0D1 -:1050D000893109F469C08B3109F06DC08091F20209 -:1050E00081FB222720F991E0922790FB81F93EC0B5 -:1050F000883309F459C050F4893209F457C0853314 -:1051000009F454C0873209F451C055C0833409F4FE -:105110004DC028F48A3308F44EC0895332C0883415 -:1051200009F049C00E94531D0E94910B0E9458052E -:105130000E94AA2439C09091F202892F8095817033 -:1051400080FB90F929F0966098609093F20234C049 -:10515000997F977F9093F20227C08091F20283FBA0 -:10516000222720F991E0922790FB83F98093F202A5 -:105170009923D1F08091F20281608093F20214C0F1 -:105180008D5141E050E060E070E08A019B0104C075 -:10519000000F111F221F331F8A95D2F7C901B801D2 -:1051A0000E9413210E94531D81E006C061E070E05F -:1051B00080E090E0F5CF80E01F910F91089580E0AE -:1051C000089580E00895CF93C82F80910203813025 -:1051D00069F018F08230C9F184C0E0911701F091B4 -:1051E00018018081823209F07EC007C0E09117016A -:1051F000F09118018081823261F48C2F0E94DF28A7 -:10520000811104C08C2F0E942B281DC081E090E0EA -:105210001AC08C2F0E94E128811114C0C43179F08A -:1052200048F4CB3079F0C03109F061C082E080935E -:10523000020308C0C93219F0C83321F058C01092D7 -:10524000020355C081E0817054C0C93291F120F54C -:10525000C43179F1B0F4C73009F047C08EE18093D2 -:105260001E0182E380931D018AE080931C0184E18A -:1052700080931B0188E080931A0188E280931901D2 -:1052800034C0CE51C63088F5EC2FF0E0EA54FE4F22 -:1052900080818093010329C0CE34E9F020F4CB341F -:1052A00021F56AE013C0C13579F0C235F1F461E04F -:1052B0000DC080910103882319F01092010315C0DD -:1052C00081E08093020315C061E006C08091010374 -:1052D0000E9465270AC06AE0809101030E94DB27D3 -:1052E00004C01092020380E004C081E002C080E0AC -:1052F000AACFCF9108950E940B25811102C00E9470 -:10530000E7240E94272580931D0380FF02C0869515 -:1053100001C080E00C94000480911D03982F9695A5 -:10532000292F30E0233031054CF49F5F990F8170B5 -:10533000892B816080931D030E942B2580911D0382 -:1053400086950C94000480911D03982F969591F0FA -:105350009158990F8170892B80931D038E7F91E066 -:1053600009F490E080911D0390FB80F980931D0368 -:105370000E942B2580911D0386950C94000480913A -:105380001D03982F909590FB80F980931D030E9438 -:105390002B2580911D0380FF02C0869501C080E00F -:1053A0000C94000490911D03892F86958F5F8F7751 -:1053B0009170843028F4880F892B80931D0302C0DC -:1053C00090931D0380911D038E7F91E009F490E07E -:1053D00080911D0390FB80F980931D030E942B2573 -:1053E00080911D0386950C94000420911D03922F3B -:1053F00096958927982F990F822F8170892B8093FA -:105400001D038E7F91E009F490E080911D0390FBD5 -:1054100080F980931D030E942B2580911D038695A2 -:105420000C94000480911D03869508955058BB2765 -:10543000AA270ED0D1C1C2D130F0C7D120F031F4AB -:105440009F3F11F41EF4B7C10EF4E095E7FB9FC136 -:10545000E92FD3D180F3BA17620773078407950742 -:1054600018F071F49EF5EBC10EF4E0950B2EBA2FF7 -:10547000A02D0B01B90190010C01CA01A00111245A -:10548000FF27591B99F0593F50F4503E68F11A1606 -:10549000F040A22F232F342F4427585FF3CF469597 -:1054A00037952795A795F0405395C9F77EF41F16B9 -:1054B000BA0B620B730B840BBAF09150A1F0FF0F83 -:1054C000BB1F661F771F881FC2F70EC0BA0F621F6F -:1054D000731F841F48F4879577956795B795F7955F -:1054E0009E3F08F0B3CF9395880F08F09927EE0FF1 -:1054F00097958795089527D108F481E008950CD0F9 -:105500006BC163D140F05AD130F021F45F3F19F004 -:105510003EC1511195C14FC170D198F39923C9F380 -:105520005523B1F3951B550BBB27AA2762177307A9 -:10553000840738F09F5F5F4F220F331F441FAA1F5D -:10554000A9F333D00E2E3AF0E0E830D0915050401D -:10555000E695001CCAF729D0FE2F27D0660F771FCB -:10556000881FBB1F261737074807AB07B0E809F0AD -:10557000BB0B802DBF01FF2793585F4F2AF09E3F42 -:10558000510568F004C15CC15F3FECF3983EDCF369 -:10559000869577956795B795F7959F5FC9F7880FBB -:1055A000911D9695879597F90895E1E0660F771F0D -:1055B000881FBB1F621773078407BA0720F0621B9E -:1055C000730B840BBA0BEE1F88F7E095089504D097 -:1055D0006894B11135C1089518D188F09F5790F0A3 -:1055E000B92F9927B751A0F0D1F0660F771F881F08 -:1055F000991F1AF0BA95C9F712C0B13081F01FD1C6 -:10560000B1E008951CC1672F782F8827B85F39F063 -:10561000B93FCCF3869577956795B395D9F73EF466 -:1056200090958095709561957F4F8F4F9F4F08950E -:10563000E89409C097FB3EF490958095709561952C -:105640007F4F8F4F9F4F9923A9F0F92F96E9BB27E2 -:105650009395F695879577956795B795F111F8CF5E -:10566000FAF4BB0F11F460FF1BC06F5F7F4F8F4FC9 -:105670009F4F16C0882311F096E911C0772321F0BF -:105680009EE8872F762F05C0662371F096E8862F57 -:1056900070E060E02AF09A95660F771F881FDAF7AE -:1056A000880F9695879597F9089588D018F011F08E -:1056B0008CD038F480C0C4C0E92F9FD0B0F35523FC -:1056C000C9F3E7FB6217730784079507A8F199F3FD -:1056D000E92FFF2788232AF03197660F771F881F4D -:1056E000DAF7952F5527442332F091505040220F7E -:1056F000331F441FD2F7BB27E91BF50B621B730B4B -:10570000840BB109C1F222F4620F731F841FB11D13 -:1057100031972AF0660F771F881FBB1FEFCF91507C -:1057200050405AF041F0882332F0660F771F881FEF -:1057300091505040C1F7939530C086957795679505 -:105740009F5FD9F7F8CF990F0008550FAA0BE0E833 -:10575000FEEF16161706E807F907C0F01216130633 -:10576000E407F50798F0621B730B840B950B39F473 -:105770000A2661F0232B242B252B21F408950A26D9 -:1057800009F4A140A6958FEF811D811D089597F919 -:105790009F6780E870E060E008959F3F31F091508E -:1057A00020F4879577956795B795880F911D969505 -:1057B000879597F908959FEF80EC089500240A9447 -:1057C0001616170618060906089500240A941216DC -:1057D0001306140605060895092E0394000C11F40F -:1057E000882352F0BB0F40F4BF2B11F460FF04C0BC -:1057F0006F5F7F4F8F4F9F4F089557FD9058440F15 -:10580000551F59F05F3F71F04795880F97FB991F1F -:1058100061F09F3F79F087950895121613061406DC -:10582000551FF2CF4695F1DF08C016161706180669 -:10583000991FF1CF86957105610508940895E89444 -:10584000BB2766277727CB0197F908957CDF08F4FB -:105850008FEF08950BD0C0CFB1DF28F0B6DF18F07E -:10586000952309F094CFA7CF1124EACFC6DFA0F388 -:10587000959FD1F3950F50E0551F629FF001729FE5 -:10588000BB27F00DB11D639FAA27F00DB11DAA1F04 -:10589000649F6627B00DA11D661F829F2227B00D51 -:1058A000A11D621F739FB00DA11D621F839FA00DDC -:1058B000611D221F749F3327A00D611D231F849F2C -:1058C000600D211D822F762F6A2F11249F57504083 -:1058D0008AF0E1F088234AF0EE0FFF1FBB1F661F1E -:1058E000771F881F91505040A9F79E3F510570F0D7 -:1058F0004ECFA6CF5F3FECF3983EDCF386957795CD -:105900006795B795F795E7959F5FC1F7FE2B880FD1 -:10591000911D9695879597F90895FA01EE0FFF1F4F -:1059200030962105310599F16115710561F48038D2 -:10593000BFE39B0749F168949038810561F0803896 -:10594000BFEF9B0741F0992342F5FF3FE105310589 -:10595000210511F1E8940894E795D901AA2329F4C7 -:10596000AB2FBE2FF85FD0F310C0FF5F70F4A69589 -:10597000E0F7F73950F019F0FF3A38F49F779F932A -:105980000CD00F9007FC905808953EF014CF60E0C3 -:1059900070E080E89FE308954FE79F775F934F9310 -:1059A0003F932F939ED02F913F914F915F9152DF64 -:1059B00005C019F40EF0EBCE42CFFDCE26DFC8F3C2 -:1059C0009638C0F707F80F92E8942BE33AEA48EBD1 -:1059D0005FE74EDF0F920F920F924DB75EB70F92B7 -:1059E000C0D0EAE2F1E016D04F915F91EF91FF91C4 -:1059F000E595EE1FFF1F49F0FE57E0684427EE0FC4 -:105A0000441FFA95E1F74195550B32D00F9007FEF0 -:105A100026C00895DF93CF931F930F93FF92EF92C9 -:105A2000DF927B018C01689405C0DA2EEF011EDF46 -:105A3000FE01E894A5912591359145915591AEF3DC -:105A4000EF0106DDFE019701A801DA9479F7DF90F6 -:105A5000EF90FF900F911F91CF91DF9108959B01DF -:105A6000AC0160E070E080E89FE349CD90CE95CE38 -:105A7000CCDEE8F39923D9F3940F511DBBF3915079 -:105A8000504094F059F0882332F0660F771F881F3A -:105A900091505040C1F79E3F510544F7880F911D2A -:105AA0009695879597F908955F3FACF0983E9CF0E6 -:105AB000BB27869577956795B79508F4B160939560 -:105AC000C1F7BB0F58F711F460FFE8CF6F5F7F4F4E -:105AD0008F4F9F4FE3CFB4CE0EF05FCE6CCE689465 -:105AE00056CE93DEC8F39923D1F3C6F3DF93CF9359 -:105AF0001F930F93FF92C92FDD2788232AF0219748 -:105B0000660F771F881FDAF720E030E040E85FEB90 -:105B10009FE3883920F0803E30F021968F7787DC34 -:105B2000E2E5F1E003C083DCEFE7F1E073DF8B0136 -:105B3000BE01EC01FB2E6F5771097595771F880B1D -:105B4000990B78DD28E132E741E35FE38FDEAF2D8B -:105B50009801AE01FF900F911F91CF91DF9178DCFA -:105B60003BCEFA01DC01AA0FBB1F9B01AC01BF5762 -:105B700028F422273327442750781FC0B75188F4D0 -:105B8000AB2F0024469537952795011CA395D2F39A -:105B9000002069F0220F331F441FB395DAF30DD0B4 -:105BA00045CC61307105A0E88A07B94630F49B0105 -:105BB000AC016627772788279078309621F02083DC -:105BC0003183428353830895AA1BBB1B51E107C055 -:105BD000AA1FBB1FA617B70710F0A61BB70B881F7D -:105BE000991F5A95A9F780959095BC01CD0108950C -:105BF00097FB072E16F4009407D077FD09D00E947A -:105C0000E42D07FC05D03EF4909581959F4F0895B3 -:105C1000709561957F4F0895EE0FFF1F0590F491E9 -:105C2000E02D0994F999FECF92BD81BDF89A99278C -:105C300080B50895A8E1B0E042E050E00C943A2E1F -:105C4000262FF999FECF92BD81BDF89A019700B435 -:105C5000021639F01FBA20BD0FB6F894FA9AF99AD5 -:105C60000FBE08950196272F0E94212E0C94202EFE -:105C7000DC01CB01FC01F999FECF06C0F2BDE1BD0C -:105C8000F89A319600B40D9241505040B8F70895FB -:045C9000F894FFCFB6 -:105C9400640007000CFF0000003F6475110312E06C -:105CA40011AC1178110101DF022808140A321E0018 -:105CB40002040507090B0C0E1011131517181A1CF2 -:105CC4001D1F2123242628292B2D2F30323435372C -:105CD400393B1F0F03764F5F6F7F49694379095939 -:105CE40053633149803F5D8B803FF8BF803FCAE1F9 -:105CF400803F73ED803FCAE1803FF8BF803F5D8BFA -:105D0400803F3149803F0000803FF16D7F3F75EA5D -:105D14007E3F4C827E3F833F7E3F84287E3F833F8D -:105D24007E3F4C827E3F75EA7E3FF16D7F3F0000EF -:105D3400803F3F4D36390B07BE0688064F06E20505 -:105D4400FB0514062D0601020304050607080900D5 -:00000001FF diff --git a/keyboard/planck/keymaps/nico/compiled.hex b/keyboard/planck/keymaps/nico/compiled.hex deleted file mode 100644 index 61527c5307..0000000000 --- a/keyboard/planck/keymaps/nico/compiled.hex +++ /dev/null @@ -1,1456 +0,0 @@ -:100000000C94C4020C9408030C9408030C94080389 -:100010000C9408030C9408030C9408030C94080334 -:100020000C9408030C9408030C94B5140C948715D5 -:100030000C94E9220C9408030C9408030C94080314 -:100040000C9408030C946A030C9408030C940803A2 -:100050000C9408030C9451230C9408030C9408038B -:100060000C9408030C9408030C9408030C940803E4 -:100070000C9408030C9408030C9408030C940803D4 -:100080000C942A0B0C9408030C9408030C9408039A -:100090000C9408030C9408030C9408030C940803B4 -:1000A0000C9408030C9408030C940803F41516161A -:1000B0000417161604175B167E160417D316E616D9 -:1000C000D019D019FF19FF193E1A5E1AB41BB41BC0 -:1000D000691AB41B191B191B801B891BB41BAE1B8F -:1000E000261B261B261B261B261B261B261B261B08 -:1000F000261B261B261B261B261B261B261B261BF8 -:10010000361B441B4B1B521B5C1B07634236B79BC1 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C00002010000000000000000000000002AA35F -:1001D00028A42B0014001A000800150017001C00AA -:1001E00018000C00120013002A00E00004001600A2 -:1001F000070009000A000B000D000E000F0033007D -:100200003400E1001D001B0006001900050011006C -:100210001000360037003800280000302900E200C6 -:10022000E30001202C002C0002205000510052005D -:100230004F002B0014001A00090013000A000D00E3 -:100240000F0018001C0033002A00E0000400150015 -:100250001600170007000B00110008000C00120028 -:100260003400E1001D001B000600190005000E000F -:100270001000360037003800280000302900E20066 -:10028000E30001202C002C000220500051005200FD -:100290004F002B0034003600370013001C0009000B -:1002A0000A00060015000F002A00E00004001200FA -:1002B000080018000C0007000B00170011001600C2 -:1002C0003800E100330014000D000E001B00050093 -:1002D00010001A0019001D00280000302900E2005B -:1002E000E30001202C002C0002205000510052009D -:1002F0004F0035021E021F022002210222022302A9 -:1003000024022502260227022A0001003A003B00AF -:100310003C003D003E003F002D022E022F02300225 -:10032000310201004000410042004300440045000A -:10033000005301530253005001000030010001003E -:100340000100010069006A000100BB00AA00A900C9 -:10035000AE0035001E001F002000210022002300F7 -:1003600024002500260027002A0001003A003B0057 -:100370003C003D003E003F002D002E002F003000CD -:1003800031000100400041004200430044004500AC -:1003900000530153025300500100003001000100DE -:1003A0000100010069006A000100BB00AA00A90069 -:1003B000AE002803540068006500200050006C0067 -:1003C00061006E0063006B0020004B006500790047 -:1003D00062006F0061007200640000002C034F0097 -:1003E0007200740068006F006C0069006E006500A8 -:1003F0006100720020004B006500790062006F0010 -:100400006100720064007300000004030904090223 -:100410006D00040100A0FA090400000103010100BD -:10042000092111010001223F000705810308000A8C -:100430000904010001030102000921110100012248 -:100440004D000705820308000A09040200010300A9 -:10045000000009211101000122360007058303086D -:10046000000A090403000103000000092111010032 -:100470000122390007058403100001120110010058 -:10048000000008EDFE6060010001020001050109A5 -:1004900006A101050719E029E71500250195087552 -:1004A000018102050819012905950575019102953B -:1004B000017503910105071900297715002501959C -:1004C0007875018102C005010980A101850216012C -:1004D0000026B7001A01002AB700751095018100A7 -:1004E000C0050C0901A1018503160100269C021A12 -:1004F00001002A9C02751095018100C005010902C6 -:10050000A1010901A100050919012905150025010D -:100510009505750181029501750381010501093079 -:1005200009311581257F95027508810609381581E5 -:10053000257F950175088106050C0A38021581256D -:100540007F950175088106C0C005010906A1010556 -:100550000719E029E7150025019508750181029525 -:100560000175088101050819012905950575019195 -:10057000029501750391010507190029FF15002552 -:10058000FF950675088100C011241FBECFEFDAE089 -:10059000DEBFCDBF04B603FE24C080911E03909140 -:1005A0001F03A0912003B09121038730904BA740F7 -:1005B000B04BB9F410921E0310921F031092200347 -:1005C0001092210314BE84B7877F84BF88E10FB6E1 -:1005D000F89480936000109260000FBEE0E0F8E3B2 -:1005E000099511E0A0E0B1E0ECE2FAE502C0059067 -:1005F0000D92A03CB107D9F713E0A0ECB1E001C027 -:100600001D92AE31B107E1F70E94FB110C94142D3D -:100610000C9400000895089581E0089508950C94C5 -:100620000B030C940C030C940E030E94DE2823E0B1 -:1006300030E0281B3109220F2093C4010895282F90 -:100640002F9880918000211108C0877F80938000BF -:1006500010928D0010928C001BC0886080938000E7 -:10066000233019F48FEF9FEF0FC083E090E0821BDF -:100670009109880F991F2FEF3FEFA90102C05695EE -:1006800047958A95E2F7CA0190938D0080938C007C -:100690000C9415030E94150384E08093C30110920B -:1006A000C0010895279A2F988FEF9FEF90938700AE -:1006B000809386008AE08093800089E180938100A6 -:1006C0000E9447280C944A030E9452036E9A769A1D -:1006D0000C940A031F920F920FB60F9211242F93BE -:1006E0003F938F939F93EF93FF93E091C101F0911C -:1006F000C201CF0101969093C2018093C101009085 -:10070000C30102C0F695E7950A94E2F7EF73809172 -:10071000C001823019F4E03251F404C0813039F460 -:10072000EF3329F480916F008D7F80936F00F0E0AC -:10073000E457FE4FE49121E031E0E29FC001E39FE6 -:10074000900D11240090C40102C0969587950A94DB -:10075000E2F790938D0080938C00FF91EF919F9131 -:100760008F913F912F910F900FBE0F901F90189572 -:1007700061110DC0FC018281882331F085EE0E9459 -:1007800074180E949E2803C085EE0E943C1980E0E8 -:1007900090E0089581E008950C94CA0308950C94A4 -:1007A000640380911502882309F448C08091D10127 -:1007B0009091D201009779F40E941B239093D2016B -:1007C0008093D1018091D30190E0009771F48091E2 -:1007D000D40190E00AC00E942723209100013091AB -:1007E00001012817390740F329C00197880F991F85 -:1007F000880F991FFC01EB52FE4F6081718182814D -:1008000093810E94900AE091D30184E0E89FF00177 -:100810001124EB52FE4F60817181828193814FE000 -:1008200050E00E94480E8091D30190E001966091C3 -:10083000D40170E00E94C42C8093D3010C940F0368 -:10084000109217020C945D0A0895089581E0809338 -:1008500017020C942504089508958F929F92AF92E9 -:10086000BF92EF92FF920F931F93CF93DF93CDB779 -:10087000DEB7A3970FB6F894DEBF0FBECDBF7C01E5 -:10088000FC0100811181C8010E941821B8010E9459 -:100890002F068C01B7010E94CC03882309F4CCC138 -:1008A0000032F0E51F0741F4F7018281882309F443 -:1008B00058C00E94AC0EC0C10132F0E51F0741F4E0 -:1008C000F7018281882309F44CC00E94B50EB4C19F -:1008D0000232F0E51F0751F4F7018281882309F401 -:1008E00040C00E94A80E8111F0CFE3CF0332F0E5A3 -:1008F0001F0739F4F7018281882399F10E942604A9 -:100900009BC10432F0E51F0739F4F7018281882387 -:1009100041F10E94200490C10532F0E51F0749F41F -:10092000F70182818823E9F0809117028111F1CFCC -:10093000E5CF0632F0E51F0739F4F70182818823FD -:1009400081F00E94BC0E0AC00732F0E51F0749F48F -:10095000F7018281882329F00E94C70E0E942C048F -:100960006BC180911702811105C0F701828181114D -:10097000CFC018C1003E110579F4F70182818823A8 -:1009800009F44DC00E945D0A81E080931602109226 -:1009900015021092D40150C1023E110559F4F7011D -:1009A00082818823E1F10E945D0A10921602109262 -:1009B000150242C1033E110591F4F701828188239B -:1009C00071F10E945D0A1092160281E08093150277 -:1009D0001092D3011092D2011092D1012DC1023593 -:1009E000110559F4F7018281882309F425C180910A -:1009F0000001909101010A970DC00135110579F4AC -:100A0000F7018281882309F417C180910001909138 -:100A100001010A9690930101809300010DC140915C -:100A2000040183E2EFE1F1E0DE01119601900D9205 -:100A30008A95E1F7F701808121E030E02C0F3D1F1E -:100A4000280F311DC9012091020130910301FC01E1 -:100A5000E20FF31F6081772767FD7095640F711DAA -:100A6000882777FD8095982F0E94E62920E030E0C6 -:100A700040E451E40E944B294B015C01F7012181C4 -:100A800084E090E0821B9109BC01882777FD809566 -:100A9000982F0E94E6299B01AC01C501B4010E9478 -:100AA000E3289B01AC0160E070E080E090E40E94EC -:100AB000592B20E030E04CED50E40E94F62A4B0127 -:100AC0005C01F70182818823D1F04FE050E0C5013D -:100AD000B4010E94480E809116028823A1F08091F3 -:100AE000D40124E0829FF0011124EB52FE4F80825A -:100AF0009182A282B3828F5F8093D40104C0C5012A -:100B0000B4010E94900A0F3F110508F02ECF94C047 -:100B10008091D00181111FC0043130E5130709F025 -:100B200051C00E94CE0381E08093D0010E941B231C -:100B30009093CF018093CE011092C7011092C9010A -:100B40001092C8011092CB011092CA011092CD01EF -:100B50001092CC0171C08091CE019091CF010E9482 -:100B60002723883C910570F48091C701E82FF0E0BD -:100B7000EE0FFF1FE853FE4F118300838F5F8093BA -:100B8000C7015AC0043880E5180721F00538104520 -:100B900001F13AC0F7018281882341F01092C5012A -:100BA00082E01EC0043830E5130759F58091C50175 -:100BB000811106C086E20E94741886E20E943C19E8 -:100BC00082E01CC00438F0E51F0741F305381045EA -:100BD000D9F4F7018281882331F01092C60180E2B6 -:100BE0000E948B1929C08091C601811106C087E23D -:100BF0000E94741887E20E943C1980E20E949219B8 -:100C00001BC00538104529F381E08093C50180930E -:100C1000C601C701A3960FB6F894DEBF0FBECDBFC5 -:100C2000DF91CF911F910F91FF90EF90BF90AF9008 -:100C30009F908F900C94110380E0A3960FB6F894C8 -:100C4000DEBF0FBECDBFDF91CF911F910F91FF90FF -:100C5000EF90BF90AF909F908F90089508959CE083 -:100C6000799FF001112490E3899FE00DF11D11247B -:100C7000E60FF11DEE0FFF1FEE52FE4F859194918E -:100C80000895880F991FFC01E45BFF4F85919491B3 -:100C90000895880F991FFC01E453FE4F85919491AC -:100CA00008950F931F93CF93DF93EC01811521E3F8 -:100CB0009207A0F5C11580E3D80708F0D7C0C83E59 -:100CC000D105D8F4C03ED10508F007C2C83AD10515 -:100CD00078F4C53AD10508F06AC0C130D10509F4ED -:100CE00063C008F4F7C1C430D10508F0F6C1F2C101 -:100CF000CB3BD10508F466C0EDC1C11590E2D90720 -:100D000008F0AFC0C11521E0D20708F0E6C1C03F2E -:100D1000D10508F4DFC18E0110651FC2C03880E51F -:100D2000D80700F5C03790E5D90708F0A3C0C11572 -:100D300020E5D20709F4ACC050F4CE0190548031C4 -:100D40009F4008F0C7C1DF708E01106A06C2C13033 -:100D500080E5D80709F4AEC0C43190E5D90708F49E -:100D6000AFC0B8C1C33820E5D20709F48EC050F433 -:100D7000C13890E5D90709F482C008F083C000E0CB -:100D800011EDEBC1C03181E5D80708F4A3C1C1154D -:100D900097E5D90708F436C1CE01905781159041E7 -:100DA00008F098C1DF7093C101E010E0D6C1C53AE8 -:100DB000D10509F494C1C63AD10509F093C102E8FE -:100DC00010E4CBC1C83AD10509F48FC1C93AD105A5 -:100DD00009F48EC1CA3AD10509F48DC1CB3AD105C7 -:100DE00009F48CC1CC3AD10509F48BC1CD3AD105B7 -:100DF00009F48AC1C03BD10509F489C1CE3AD105B5 -:100E000009F488C1CF3AD10509F487C1C13BD105A6 -:100E100009F486C1C23BD10509F485C1C33BD105A4 -:100E200009F484C1C43BD10509F483C1C53BD10594 -:100E300009F482C1C63BD10509F481C1C73BD10584 -:100E400009F480C1C83BD10509F47FC1C93BD10574 -:100E500009F47EC1CA3BD10509F47DC100E014E468 -:100E60007CC1CE019F700E94490678C1DD278E01AA -:100E7000106C73C1CF70DD278E01146D6EC100E060 -:100E800010ED6BC100E012ED68C100E013ED65C12B -:100E90000E941F1C0E945D0A0E9424048FEF94E3AD -:100EA0002CE0815090402040E1F700C000000E94FB -:100EB000762353C18091F20281608093F2024DC18A -:100EC0000E94D723811102C00E94B3230E94EA230B -:100ED00090E090931D0380931C03C23080E5D807F7 -:100EE00021F480911C03816086C0C43090E5D9074D -:100EF00021F480911C0382607EC0C63020E5D207B9 -:100F000021F480911C03846076C0C83080E5D80746 -:100F100019F480911C0327C0CA3090E5D90721F449 -:100F200080911C03806167C0CC3020E5D20721F49A -:100F300080911C0380625FC0CE3080E5D80721F429 -:100F400080911C03806457C0C03190E5D90721F41B -:100F500080911C0380684FC0C23120E5D20729F47C -:100F600080911C038460886046C0C33080E5D80748 -:100F700021F480911C038E7F3EC0C53090E5D907D7 -:100F800021F480911C038D7F36C0C73020E5D20745 -:100F900021F480911C038B7F2EC0C93080E5D807D7 -:100FA00019F480911C0326C0CB3090E5D90721F4B9 -:100FB00080911C038F7E1FC0CD3020E5D20721F425 -:100FC00080911C038F7D17C0CF3080E5D80721F4B6 -:100FD00080911C038F7B0FC0C13190E5D90721F4AC -:100FE00080911C038F7707C0C331D04531F48091C5 -:100FF0001C038B7F877F80931C0380911C030E94BE -:10100000EE23ABC08D2F99278F70992781309105E2 -:10101000D9F49E012370332702C0880F991F2A95A7 -:10102000E2F79C688E0144E0000F111F4A95E1F73A -:1010300000271370802B912B53E0CC0FDD1F5A95A6 -:10104000E1F7C076DD272FC08230910531F4DC2F27 -:10105000CC278E01016F106A80C08330910569F43E -:10106000CE018370992701E010E002C0000F111F2C -:101070008A95E2F7C8019C680FC084309105B9F4E5 -:10108000CE018370992701E010E002C0000F111F0C -:101090008A95E2F7C8019A6823E0CC0FDD1F2A95F4 -:1010A000E1F7C07ED7708C010C2B1D2B56C085300C -:1010B000910531F4DC2FCC278E01046F106A4DC0EE -:1010C000069709F04AC0CF71DD27DC2FCC278E01AF -:1010D000106243C000E010E040C08E013EC001E855 -:1010E00010E43BC003E810E438C002EE14E435C05D -:1010F00009EE14E432C00AEE14E42FC005EB14E448 -:101100002CC006EB14E429C007EB14E426C00CEC59 -:1011100014E423C00DEC14E420C003E815E41DC062 -:101120000AE815E41AC002E915E417C004E915E459 -:1011300014C001E216E411C003E216E40EC004E29A -:1011400016E40BC005E216E408C006E216E405C08A -:1011500007E216E402C00AE216E4C801DF91CF916B -:101160001F910F9108959CE0799FF001112490E365 -:10117000899FE00DF11D1124E60FF11DEE0FFF1FF9 -:10118000EE52FE4F85919491803E9105E0F4803CB3 -:10119000910558F58133910509F46FC048F48932FF -:1011A000910509F463C08A32910509F46DC072C0DB -:1011B00089339105E9F082389105D1F085339105A5 -:1011C00009F44DC067C0833E910581F138F4803E3B -:1011D0009105B9F0823E9105D9F05CC0863E91053B -:1011E00061F1873E9105A1F155C00E944106089525 -:1011F00020911C0320FD02C021FF4CC080EE90E036 -:1012000049C080911C0380FFF9CF89E390E042C080 -:1012100080911C0382FF0EC080911C0384FF03C0D9 -:1012200080E090E037C083EE90E034C080911C03F2 -:1012300082FFF2CF82EE90E02DC080911C0383FFED -:101240000BC080911C0384FDEBCF87EE90E022C0A1 -:1012500080911C0383FFF5CF86EE90E01BC0809148 -:101260001C0385FF07C089E290E014C080911C0335 -:1012700085FFF9CF85E390E00DC080911C0386FFC8 -:1012800007C08AE290E006C080911C0386FFF9CF78 -:1012900081E390E00E94510608950C941303E82F17 -:1012A000F0E0E25BFE4F8081E82FEF70F0E0829586 -:1012B0008F7021E030E0A90102C0440F551F8A95CC -:1012C000E2F740A308950F931F93CF93DF9385B761 -:1012D000806885BF85B7806885BFC3E0D0E001E046 -:1012E00010E0FE01E25BFE4F8081E82FEF70F0E03E -:1012F00021A182958F70A80102C0440F551F8A95C5 -:10130000E2F7CA01822B81A38C2F0E944F092197FB -:1013100040F78BE090E061E070E0FC01EE5BFE4F97 -:101320002081E22FEF70F0E042A122952F70DB01C7 -:1013300002C0AA0FBB1F2A95E2F79D01242B22A30E -:10134000019758F7DF91CF911F910F910C94CF0324 -:10135000EF92FF920F931F93CF93DF9300E212E07F -:10136000C3E0EE24E394F12CD5E08C2F0E944F09CA -:101370008BE090E040E050E0FC01EE5BFE4F6081CE -:10138000E62FEF70F0E020A130E062956F7002C0B0 -:10139000359527956A95E2F720FD09C09701082E3B -:1013A00002C0220F331F0A94E2F7422B532B0197FE -:1013B00018F7F801929182918F018417950721F017 -:1013C00051834083D09305018C2F0E944F09C15057 -:1013D00060F68091050187FD2CC081508093050146 -:1013E0008F3F39F08FE99FE00197F1F700C00000CF -:1013F00020C080911E0290911F029093270280933B -:10140000260280911C0290911D02909325028093E8 -:10141000240280911A0290911B02909323028093E0 -:1014200022028091180290911902909321028093D8 -:1014300020020E94D10381E0DF91CF911F910F9193 -:10144000FF90EF900895E82FF0E0EE0FFF1FE05EB1 -:10145000FD4F80819181089508950F931F93CF933D -:1014600008E212E0C0E0F801929182918F010E949F -:101470009322C80FF2E000321F07A9F78C2FCF91FB -:101480001F910F9108950E94D723811102C00E94DD -:10149000B3230E94FC23809307033E9A809171003E -:1014A0008D7F8093710082E0809390008AE1809329 -:1014B000910081E080932A02089580912A0281118F -:1014C00002C00E94430A10927A021092790280911F -:1014D00071008D7F80937100809190008F73809355 -:1014E000900010923C0210923B02109273021092F4 -:1014F000740210927502109276021092720210928B -:101500007102E1E5F2E0A1E4B2E0119211921192D0 -:1015100011921D921D9282E0E137F807B1F708950C -:10152000CF92DF92EF92FF920F931F93CF93DF93AF -:1015300020913B02222309F484C06B017C0180913D -:101540002A02811102C00E94430A01E712E0C7E0AB -:10155000D0E0A7019601F801929182917291629177 -:101560008F010E944729811131C0FE01EE0FFF1F3C -:10157000EE0FFF1FEF5AFD4F10821182128213826D -:10158000DE01AA0FBB1FAF5BBD4F11961C921E92CE -:10159000C730D105E9F02196448155816681778174 -:1015A000408351836283738314821582168217826B -:1015B00012968D919C91139711969C938E931396EE -:1015C0001C921E92129734961296E2CF219708F63B -:1015D0008091790290917A02019797FD05C09093CE -:1015E0007A028093790204C010927A0210927902F2 -:1015F0008091790290917A0220917702309178025D -:101600002817390724F01092780210927702892B5C -:10161000C1F4809171008D7F809371008091900062 -:101620008F73809390001092730210927402109244 -:10163000750210927602109272021092710210924C -:101640003B02DF91CF911F910F91FF90EF90DF90C0 -:10165000CF9008951F920F920FB60F9211244F92C0 -:101660005F926F927F928F929F92AF92BF92CF9232 -:10167000DF92EF92FF922F933F934F935F936F937D -:101680007F938F939F93AF93BF93CF93DF93EF930A -:10169000FF9380913B02882309F49BC1C09179029A -:1016A000D0917A021C161D060CF093C140902B02BB -:1016B00050902C0260902D0270902E0220E030E0BD -:1016C000A901C301B2010E94F22A18160CF065C0EC -:1016D000C130D10509F452C080917702909178020F -:1016E000BE010E94C42C7C01909378028093770203 -:1016F00080903D0290903E02A0903F02B090400248 -:1017000020E030E040E85FE3C501B4010E94E32837 -:1017100060933D0270933E0280933F02909340029B -:10172000F701EE0FFF1FEE0FFF1FEF5AFD4FA30152 -:10173000920160817181828193810E944B2920E016 -:1017400030E040E05EE30E94F62A9B01AC01C50157 -:10175000B4010E94F22A18168CF4C7010196BE014A -:101760000E94C42C909378028093770210923D02DD -:1017700010923E0210923F0210924002E0917702D6 -:10178000F0917802EE0FFF1FEE0FFF1FEF5AFD4F93 -:101790006081718182819381D0C0C0907302D090AA -:1017A0007402E0907502F090760220E030E0A9012A -:1017B000C701B6010E9447292197882309F4A2C0D6 -:1017C000FE01EE0FFF1FEE0FFF1FEF5AFD4F80804F -:1017D0009180A280B380A5019401C701B6010E9447 -:1017E000472987FF31C0A501940160E070E08CEDCE -:1017F00093EC0E944B2920E030E040E451E40E9449 -:101800004B2920E030E040E05FE30E94F62A9B0194 -:10181000AC0160E070E080E090E40E94592B9B01F5 -:10182000AC01C501B4010E94F62A9B01AC01C701BD -:10183000B6010E94472987FF07C0A701960160E013 -:1018400070E08CED93E439C0A5019401C701B601A5 -:101850000E94F22A18160CF055C0A501940160E010 -:1018600070E08CED93E40E944B2920E030E040E4EE -:1018700051E40E944B2920E030E040E05FE30E9409 -:10188000F62A9B01AC0160E070E080E090E40E94E9 -:10189000592B9B01AC01C501B4010E94F62A9B01A2 -:1018A000AC01C701B6010E94F22A18165CF5A70127 -:1018B000960160E070E08CED93EC0E944B2920E0F3 -:1018C00030E040E451E40E944B2920E030E040E069 -:1018D0005FE30E94F62A9B01AC0160E070E080E0CB -:1018E00090E40E94592B9B01AC01C701B6010E94F4 -:1018F000F62A60937302709374028093750290933A -:10190000760213C0FE01EE0FFF1FEE0FFF1FEF5A0E -:10191000FD4F80819181A281B38180937302909366 -:101920007402A0937502B093760260917302709175 -:101930007402809175029091760220912802309174 -:1019400029022F3F4FEF340731F02F5F3F4F309385 -:101950002902209328020E94D20E6B017C0120E014 -:1019600034E244EF51E40E94472987FF08C086EF24 -:10197000C82E88E2D82E84EFE82E81E4F82E20E0ED -:1019800030E040E051E4C701B6010E94F62A9B0115 -:10199000AC0160E074E284E79BE40E944B296B0198 -:1019A0007C010E94B8297093970060939600209163 -:1019B0000601309107014091080150910901C701CA -:1019C000B6010E94F62A0E94B8297093990060938C -:1019D000980080913C02882309F433C1C0903702FB -:1019E000D0903802E0903902F0903A0220E030E0E6 -:1019F000A901C701B6010E94F22A1816D4F58091F8 -:101A00002802909129028F3F2FEF920729F001962B -:101A10009093290280932802C701B6010E94D20E3A -:101A200020E030E040E051E40E94F62A9B01AC0146 -:101A300060E074E284E79BE40E944B296B017C0127 -:101A40000E94B82970939700609396002091060138 -:101A5000309107014091080150910901C701B60179 -:101A60000E94F62A0E94B82970939900609398000A -:101A700008C0109297001092960010929900109250 -:101A8000980060913102709132026F5F7F4F7093C6 -:101A9000320260933102209196003091970080E0ED -:101AA00090E0232BF1F0C0919600D09197000E9416 -:101AB000E4296B017C01BE0180E090E00E94E429F2 -:101AC0009B01AC0160913302709134028091350228 -:101AD000909136020E944B2920E03FEF4FE757E4F8 -:101AE00010C00E94E4296B017C0120E030EE4FEF32 -:101AF00054E46091330270913402809135029091E8 -:101B000036020E94F62A9B01AC01C701B6010E9471 -:101B1000F22A87FD96C080912F028F5F80932F025B -:101B200090E0209103033091040382179307A0F003 -:101B300080910E03882319F010922F020DC080911E -:101B400071008D7F80937100809190008F738093DE -:101B5000900010923C027DC080913002C0912F0213 -:101B6000811128C0C0900803D0900903E0900A03B7 -:101B7000F0900B0320E030E0A901C701B6010E94FC -:101B8000F22A1816BCF481E08093300210923702DA -:101B9000109238021092390210923A02C092330227 -:101BA000D0923402E0923502F0923602C150C093D6 -:101BB0002F0243C010923002109229021092280284 -:101BC000E0910503F091060348E0C49FE00DF11D8C -:101BD000112480819181A281B381809337029093F7 -:101BE0003802A0933902B0933A0220E030E040E896 -:101BF0005EE364817581868197810E94F62A6B017C -:101C00007C0180910A01682F70E080E090E00E94E2 -:101C1000E42920E030E048EC52E40E944B299B018B -:101C2000AC01C701B6010E94F62A6093330270939B -:101C30003402809335029093360210923202109251 -:101C400031028091070380FD04C010923C02109283 -:101C50003B02FF91EF91DF91CF91BF91AF919F91A7 -:101C60008F917F916F915F914F913F912F91FF9055 -:101C7000EF90DF90CF90BF90AF909F908F907F902C -:101C80006F905F904F900F900FBE0F901F90189520 -:101C9000CF92DF92EF92FF92CF93DF936B017C01A3 -:101CA000EA0180912A02811102C00E94430A8091B8 -:101CB000070380FF46C08091790290917A020897CD -:101CC0000CF03FC0809171008D7F809371008091F6 -:101CD0003C0281110E945D0A81E080933B021092D8 -:101CE00029021092280220E030E0A901C701B601C4 -:101CF0000E94F22A1816DCF48091790290917A02FF -:101D0000FC01EE0FFF1FEE0FFF1FEF5AFD4FC082C9 -:101D1000D182E282F382FC01EE0FFF1FEF5BFD4FE9 -:101D2000D183C083019690937A0280937902809147 -:101D30007100826080937100809190008068809330 -:101D40009000DF91CF91FF90EF90DF90CF900895BA -:101D500080910703817008958091070381608093CB -:101D600007030E9400240C942B04809107038E7FAC -:101D7000809307030C94002480917B0290E00196ED -:101D800066E070E00E94C42C80937B0208958091ED -:101D90007B0290E0019766E070E00E94C42C809383 -:101DA0007B0208958F929F92AF92BF92CF92DF9263 -:101DB000EF92FF920F931F93CF93DF936B017C0100 -:101DC000C0912802D0912902BE0180E090E00E94DB -:101DD000E4294B015C01A701960160E070E08CE50D -:101DE00094E40E944B299B01AC01C501B4010E94FF -:101DF000F62A0E94B82920917B02233009F473C08F -:101E000028F4222351F02130E9F02CC1243009F4C8 -:101E1000A0C0253009F4E0C025C180E090E0A0E03A -:101E2000BFE38093060190930701A0930801B0934C -:101E3000090110922B0210922C0210922D02109286 -:101E40002E0210C110922B0210922C0210922D0221 -:101E500010922E026431710540F46A30710560F50C -:101E600020E030E040E85EE32BC0693C710508F0FB -:101E7000AAC080E090E00E94E42920E030E040EA3F -:101E800051E40E94E22820E030E044E353E40E9461 -:101E90004B299B01AC010E94F62A20E030E040E093 -:101EA0005EE30E94F62A9B01AC0160E070E080E0F6 -:101EB0009EE30E94E22844C020E030E040E05FE37F -:101EC000C701B6010E94F62A6B017C0180E090E018 -:101ED000A0E0BEE38093060190930701A093080160 -:101EE000B0930901BFC010922B0210922C021092E5 -:101EF0002D0210922E024AE0469F9001479F300D1E -:101F00001124C90168EB7BE00E94B02CBC016C5D20 -:101F1000754077FF03C0719561957109882777FD3A -:101F20008095982F0E94E6292EE333EC4EE259E388 -:101F30000E94F62A20E030E040EC5EE30E94E328B5 -:101F40006093060170930701809308019093090143 -:101F500089C010922B0210922C0210922D02109226 -:101F60002E02CE0183709927892BE1F0BE016170AA -:101F7000772780E090E00E94E42920E030E040E014 -:101F80005EE30E94F62A20E030E040E45FE30E9436 -:101F9000E3286093060170930701809308019093F2 -:101FA00009010CC080E090E0A0E0BFE3809306014F -:101FB00090930701A0930801B0930901C770DD2732 -:101FC000CD2B09F04FC0109206011092070110921C -:101FD00008011092090146C010922B0210922C02A7 -:101FE00010922D0210922E0200E010E020E03FE35C -:101FF0000093060110930701209308013093090113 -:102000006739710578F180E090E00E94E42920E0D2 -:1020100030E047E153E40E94E22820E030E04AE764 -:1020200054E40E944B2920E030E048E452E40E944E -:10203000F62A20E030E040EA51E40E94282A0E947B -:10204000B329660F771F660F771FFB01EE5AFE4F0D -:102050002081318142815381C701B6010E94F62A55 -:102060006B017C01C701B601DF91CF911F910F91E8 -:10207000FF90EF90DF90CF90BF90AF909F908F90A8 -:10208000089580918C020895CF93DF9300D01F9222 -:10209000CDB7DEB79C0180911303843019F593E02E -:1020A00099833B832A839093E9008FEF9091E80016 -:1020B000815095FD06C095ED9A95F1F700008111CC -:1020C000F5CF8091E80085FF0DC040E050E063E06F -:1020D00070E0CE0101960E94A5128091E8008E77F3 -:1020E0008093E8000F900F900F90DF91CF910895AB -:1020F000CF93DF9300D01F92CDB7DEB720911303AB -:10210000243021F522E029839B838A8383E0809316 -:10211000E9008FEF9091E800815095FD06C095EDA4 -:102120009A95F1F700008111F5CF8091E80085FFC5 -:102130000DC040E050E063E070E0CE0101960E94E7 -:10214000A5128091E8008E778093E8000F900F90A1 -:102150000F90DF91CF910895209113032430F1F473 -:1021600022E02093E9002FEF3091E800215035FD67 -:1021700006C035ED3A95F1F700002111F5CF209119 -:10218000E80025FF0BC040E050E065E070E00E94F1 -:10219000A5128091E8008E778093E8000895CF9390 -:1021A000DF93EC0190911303943009F046C08091C5 -:1021B00015018823D9F0809116018823B9F09093F6 -:1021C000E9008FEF9091E800815095FD06C095E100 -:1021D0009A95F1F700008111F5CF8091E80085FF15 -:1021E0002CC040E050E060E170E017C081E08093D7 -:1021F000E9008FEF9091E800815095FD06C095EDC4 -:102200009A95F1F700008111F5CF8091E80085FFE4 -:1022100014C040E050E068E070E0CE010E94A512DA -:102220008091E8008E778093E80080E1FE01ACE7C2 -:10223000B2E001900D928A95E1F7DF91CF91089578 -:1022400080911203811109C00E943A140E949714D0 -:102250008091E20084608093E2000895109212035E -:102260000895089508950C94DE2242E061EC81E027 -:102270000E94B41342E061EC82E00E94B41342E099 -:1022800061EC83E00E94B41342E161EC84E00C94C1 -:10229000B41380911503833009F455C030F48130B4 -:1022A00071F0823009F48EC008958A3009F47AC042 -:1022B0008B3009F460C0893009F09CC020C0809147 -:1022C0001403813A09F096C08091E800877F8093DB -:1022D000E8008091180390911903892B21F460E1A3 -:1022E0008CE792E003C060E080E090E070E00E9444 -:1022F000F0128091E8008B778093E8000895809138 -:102300001403813209F076C080911803909119036B -:10231000009719F0039709F06DC08091E800877F5E -:102320008093E8008091E80082FD05C0809113034E -:102330008111F8CF5FC08091F10080938C02809171 -:10234000E8008B7753C080911403813A09F052C0A2 -:102350008091180390911903892B09F04BC080914B -:10236000E800877F8093E8008091E80080FFFCCF41 -:102370008091150136C0809114038132D9F5809186 -:10238000180390911903892BA9F58091E800877FA4 -:102390008093E8000E94E913809116038093150151 -:1023A0000C941F1C80911403813221F58091E80068 -:1023B000877F8093E8000E94E91380911703809340 -:1023C0008D02089580911403813AA1F48091E80070 -:1023D000877F8093E8008091E80080FFFCCF8091A8 -:1023E0008D028093F1008091E8008E778093E80061 -:1023F0000C94E913089584B7877F84BF88E10FB6F2 -:10240000F89480936000109260000FBE90E080E826 -:102410000FB6F89480936100909361000FBE0E9404 -:102420008C170E943A140E9497148091E2008460F5 -:102430008093E20078940E941D170E948E178BE013 -:1024400091E00E94381780911303853069F40E944F -:102450009F22809111038823B1F30E94CD2288230B -:1024600091F30E948F12EFCF0E949617ECCF292F85 -:10247000332723303105C9F064F42130310581F070 -:102480002230310509F043C08DE690E02EE034E0C3 -:1024900042C021323105F1F02232310541F137C01D -:1024A00082E190E02BE734E036C099278130910536 -:1024B00041F08230910541F0892B49F5EAE0F4E0E2 -:1024C00005C0ECEDF3E002C0E2EBF3E0849190E0B4 -:1024D0009F0121C06430D8F4E62FF0E0EE0FFF1F1B -:1024E000E255FE4F2081318189E090E014C06430D4 -:1024F00070F470E0FB01EE0FFF1FEA55FE4F2081E4 -:102500003181FB01EE55FE4F808190E004C080E0F8 -:1025100090E020E030E0FA0131832083089580E1EB -:1025200089BD82E189BD09B400FEFDCF8091D8004C -:102530008F7D8093D8008091E00082608093E000DE -:102540008091E00081FDFCCF0895CF92DF92EF9261 -:10255000FF920F931F93CF93DF93EC018B016A01DE -:102560000E940814811133C0C114D10439F0F6015E -:1025700080819181081B190BC80FD91FE12CF12C08 -:102580000115110519F18091E80085FD16C08091B3 -:10259000E8008E778093E800C114D10449F0F60179 -:1025A00080819181E80EF91EF182E08285E00FC002 -:1025B0000E940814882321F30AC089918093F100B6 -:1025C00001501109FFEFEF1AFF0ADACF80E0DF9127 -:1025D000CF911F910F91FF90EF90DF90CF900895D2 -:1025E00020911A0330911B032617370748F0611515 -:1025F000710539F42091E8002E772093E80001C09E -:10260000B90140E061157105A9F12091130322235E -:1026100009F443C0253009F442C02091E80023FDAD -:1026200040C02091E80022FD32C02091E80020FF48 -:10263000E9CF4091F3002091F20030E0342BFC010F -:10264000CF016115710559F02830310540F48191B1 -:102650008093F100615071092F5F3F4FF1CF41E04E -:102660002830310509F040E02091E8002E772093D2 -:10267000E800C8CF4111C9CF0AC080911303882355 -:1026800061F0853061F08091E80083FD0AC080919F -:10269000E80082FFF2CF80E0089582E0089583E0B1 -:1026A000089581E0089520911A0330911B032617A5 -:1026B000370748F06115710539F42091E8002E774D -:1026C0002093E80001C0B901FC0120E0611571050B -:1026D00091F180911303882309F440C0853009F4F7 -:1026E0003FC08091E80083FD3DC08091E80082FDFD -:1026F0002FC08091E80080FFE9CF2091F300809106 -:10270000F20090E0922B6115710559F08830910527 -:1027100040F424912093F1003196615071090196A3 -:10272000F2CF21E0089709F020E08091E8008E7751 -:102730008093E800CBCF2111CCCF0AC08091130346 -:10274000882361F0853061F08091E80083FD0AC044 -:102750008091E80082FFF2CF80E0089582E0089542 -:1027600083E0089581E00895982F973058F590936D -:10277000E900981739F07091EC002091ED0050912C -:10278000F00003C0242F762F50E021FF19C03091B4 -:10279000EB003E7F3093EB003091ED003D7F3093B6 -:1027A000ED003091EB0031603093EB007093EC0062 -:1027B0002093ED005093F0002091EE0027FF07C01A -:1027C0009F5FD3CF8F708093E90081E0089580E010 -:1027D00008958091140387FF11C08091E80082FD65 -:1027E00005C0809113038111F8CF11C08091E800DA -:1027F0008B770BC080911303882349F08091E80008 -:1028000080FFF8CF8091E8008E778093E8000895EC -:102810002091E4003091E50095E64091EC00842F92 -:10282000817040FF22C08091E80080FD1CC0809133 -:102830001303882391F0853091F08091EB0085FDA2 -:1028400010C04091E4005091E5004217530729F36E -:102850009A01915011F784E0089582E0089583E091 -:10286000089581E0089580E008954091E80042FFD6 -:10287000DECF08950E94A8140E94B014E0EEF0E0AC -:10288000808181608083E8EDF0E080818F778083B4 -:1028900019BCA7EDB0E08C918E7F8C9380818F7EE8 -:1028A00080831092120308950F931F93CF93DF93A9 -:1028B0000E94A8140E94B014C8EDD0E088818F77E0 -:1028C000888388818068888388818F7D888319BC0C -:1028D0001092130310920F03109211031092100321 -:1028E00000EE10E0F80180818B7F80838881816019 -:1028F000888342E060E080E00E94B413E1EEF0E003 -:1029000080818E7F8083E2EEF0E080818160808331 -:10291000808188608083F80180818E7F80838881B8 -:1029200080618883DF91CF911F910F910895E8ED29 -:10293000F0E080818F7E8083E7EDF0E08081816030 -:10294000808384E082BF81E0809312030C9454144E -:10295000E8EDF0E080818E7F80831092E2000895A0 -:102960001092DA001092E10008951F920F920FB6B4 -:102970000F9211242F933F934F935F936F937F9305 -:102980008F939F93AF93BF93EF93FF938091E10059 -:1029900082FF0BC08091E20082FF07C08091E100BE -:1029A0008B7F8093E1000E941C178091DA0080FFEA -:1029B0001FC08091D80080FF1BC08091DA008E7FFD -:1029C0008093DA008091D90080FF0DC080E189BD3D -:1029D00082E189BD09B400FEFDCF81E0809313033D -:1029E0000E94201105C019BC109213030E942E11E1 -:1029F0008091E10080FF19C08091E20080FF15C046 -:102A00008091E2008E7F8093E2008091E2008061FD -:102A10008093E2008091D80080628093D80019BC36 -:102A200085E0809313030E9432118091E10084FFBE -:102A300030C08091E20084FF2CC080E189BD82E13A -:102A400089BD09B400FEFDCF8091D8008F7D8093B1 -:102A5000D8008091E1008F7E8093E1008091E200B8 -:102A60008F7E8093E2008091E20081608093E2009B -:102A700080910F03882311F084E007C08091E30068 -:102A800087FD02C081E001C083E0809313030E94B0 -:102A900033118091E10083FF29C08091E20083FF20 -:102AA00025C08091E100877F8093E10082E08093E0 -:102AB000130310920F038091E1008E7F8093E10059 -:102AC0008091E2008E7F8093E2008091E20080613D -:102AD0008093E20042E060E080E00E94B4138091C5 -:102AE000F00088608093F0000E943111FF91EF9117 -:102AF000BF91AF919F918F917F916F915F914F9116 -:102B00003F912F910F900FBE0F901F9018951F921D -:102B10000F920FB60F9211242F933F934F935F9311 -:102B20006F937F938F939F93AF93BF93CF93DF93D5 -:102B3000EF93FF93C091E900CF708091EC00D82F04 -:102B4000D17080FDD0E81092E9008091F000877F7D -:102B50008093F00078940E94CB151092E900809148 -:102B6000F00088608093F000CD2BCF70C093E90017 -:102B7000FF91EF91DF91CF91BF91AF919F918F9195 -:102B80007F916F915F914F913F912F910F900FBE69 -:102B90000F901F9018951F93CF93DF93CDB7DEB79B -:102BA000AA970FB6F894DEBF0FBECDBFE4E1F3E005 -:102BB00088E08E0F9091F10091938E13FBCF0E94CD -:102BC00049118091E80083FF1FC180911403909107 -:102BD0001503492F50E04A30510508F015C1FA019C -:102BE000EA5AFF4F0C94D82C803881F0823809F0D3 -:102BF0000BC1809118038F708093E9008091EB00E6 -:102C000085FB882780F91092E90006C080911003A7 -:102C100090911103911182609091E800977F9093B9 -:102C2000E8008093F1001092F100C8C0282F2D7F9A -:102C300009F0EAC0882319F0823061F0E5C0809184 -:102C40001603813009F0E0C0933009F080E08093F2 -:102C500011032BC080911603811127C080911803A6 -:102C60008F7009F4D1C08093E9002091EB0020FF20 -:102C70001CC0933021F48091EB00806214C09091CD -:102C8000EB0090619093EB0021E030E0A90102C0DD -:102C9000440F551F8A95E2F74093EA001092EA002C -:102CA0008091EB0088608093EB001092E9008091A6 -:102CB000E800877F86C08111A7C0109116031F7797 -:102CC0008091E3008078812B8093E3008091E8007D -:102CD000877F8093E8000E94E9138091E80080FFDD -:102CE000FCCF8091E30080688093E300111102C063 -:102CF00082E001C083E08093130386C08058823055 -:102D000008F082C080911603909117038C3D53E028 -:102D1000950779F583E08A838AE289834FB7F8942F -:102D2000DE01139620E03EE051E2E32FF0E0509305 -:102D30005700E49120FF03C0E295EF703F5FEF7012 -:102D40008E2F90E0EA3010F0C79601C0C0968D93A8 -:102D50009D932F5F243149F74FBF8091E800877F13 -:102D60008093E8006AE270E0CE0101960E94F012C2 -:102D700014C0AE014F5F5F4F609118030E9437127D -:102D8000BC01009709F440C09091E800977F9093B0 -:102D9000E80089819A810E9453138091E8008B7723 -:102DA0008093E80031C0803879F58091E800877F12 -:102DB0008093E80080910F038093F1008091E800F8 -:102DC0008E778093E8000E94E9131EC081111CC019 -:102DD000909116039230C0F48091E800877F809331 -:102DE000E80090930F030E94E91380910F03811173 -:102DF00006C08091E30087FD02C081E001C084E04D -:102E0000809313030E9435118091E80083FF0AC06C -:102E10008091E800877F8093E8008091EB008062DA -:102E20008093EB00AA960FB6F894DEBF0FBECDBF1D -:102E3000DF91CF911F9108950895CF93809113034F -:102E40008823A1F0C091E900CF709091EC00892F08 -:102E5000817090FD80E8C82B1092E9008091E80015 -:102E600083FD0E94CB15CF70C093E900CF910895E8 -:102E700090939302809392020895E0919202F091D0 -:102E80009302309721F00190F081E02D099480E0C9 -:102E90000895E0919202F0919302309721F0028020 -:102EA000F381E02D09940895E0919202F09193024C -:102EB000309721F00480F581E02D09940895209148 -:102EC0009002309191028217930771F090939102D2 -:102ED00080939002E0919202F0919302309721F05A -:102EE0000680F781E02D0994089520918E0230919B -:102EF0008F028217930771F090938F0280938E0256 -:102F0000E0919202F0919302309721F00084F185D4 -:102F1000E02D0994089508950C948B170E941223B4 -:102F20000E9463090E9498230C9447285F926F9235 -:102F30007F928F929F92AF92BF92CF92DF92EF9249 -:102F4000FF920F931F93CF93DF9300D000D01F9277 -:102F5000CDB7DEB70E94A8099DE9C92E92E0D92E0F -:102F600003E010E0AA24A394B12C502E802F0E94DD -:102F7000230A4C01F601729062906F01682679264F -:102F800061147104A1F40150110978F78FEF89835E -:102F90008A831B820E941B238160782F9D838C83F0 -:102FA00049815A816B818D810E94461838C0809179 -:102FB000F20281FD0E942C0A2BE030E07501022E06 -:102FC00002C0EE0CFF1C0A94E2F7C701862197218C -:102FD000892B09F129835A828E209F2091E089282C -:102FE00009F490E09B830E941B238160782F9D83CE -:102FF0008C8349815A816B818D810E944618000F14 -:10300000111FF801EB56FD4F80819181E826F926CA -:10301000F182E08204C02150310980F6B4CF0E94D1 -:103020007F25109194020E943D171817D1F00E943D -:103030003D17809394020F900F900F900F900F9078 -:10304000DF91CF911F910F91FF90EF90DF90CF9084 -:10305000BF90AF909F908F907F906F905F900C94F7 -:103060004D090F900F900F900F900F90DF91CF911F -:103070001F910F91FF90EF90DF90CF90BF90AF9096 -:103080009F908F907F906F905F900895CF93DF9384 -:10309000CDB7DEB72B970FB6F894DEBF0FBECDBF0E -:1030A0004F83588769877A878B87DE01119686E080 -:1030B000FD0111928A95E9F785E0FE0137960190AE -:1030C0000D928A95E1F749815A816B817C818D81CE -:1030D0009E810E94BD1E2B960FB6F894DEBF0FBED8 -:1030E000CDBFDF91CF910895CF93882309F4C2C05B -:1030F000C82F823859F40E943D1781FDBBC089E377 -:103100000E9497210E94642289E30CC0833879F4DD -:103110000E943D1780FDAEC083E50E9497210E946A -:10312000642283E50E94D921CF910C9464228438D3 -:1031300059F40E943D1782FD9DC087E40E949721AB -:103140000E94642287E4EECF8CEF8C0F813A48F422 -:103150008C2F0E94AF2781118DC08C2F0E94972148 -:10316000E3CF80E28C0F883048F4C77081E001C063 -:10317000880FCA95EAF70E941D22D6CF8BE58C0FE7 -:10318000833078F4C53A29F0C63A31F083E890E00C -:1031900005C081E890E002C082E890E0CF910C94F5 -:1031A0005F1788E58C0F833108F064C0C83A39F1A5 -:1031B000C93A41F1CA3A49F1CB3A51F1CC3A59F105 -:1031C000CD3A61F1C03B69F1CE3A71F1CF3A79F174 -:1031D000C13B81F1C23B89F1C33B91F1C43B99F101 -:1031E000C53BA1F1C63BA9F1C73BB1F1C83BB9F161 -:1031F000C93BC1F1CA3BC9F180E090E038C082EE22 -:1032000090E035C089EE90E032C08AEE90E02FC0A9 -:1032100085EB90E02CC086EB90E029C087EB90E036 -:1032200026C08CEC90E023C08DEC90E020C083E8B9 -:1032300091E01DC08AE891E01AC082E991E017C0D0 -:1032400084E991E014C081E292E011C083E292E04F -:103250000EC084E292E00BC085E292E008C086E2F4 -:1032600092E005C087E292E002C08AE292E0CF914C -:103270000C947517CF910895882309F44BC08238B8 -:1032800059F40E943D1781FF45C089E30E949721B0 -:103290000E94642289E30CC0833871F40E943D17B8 -:1032A00080FF38C083E50E9497210E94642283E555 -:1032B0000E94D9210C946422843859F40E943D174D -:1032C00082FF28C087E40E9497210E94642287E43D -:1032D000EFCF9CEF980F913A58F390E2980F983007 -:1032E00050F4877091E001C0990F8A95EAF7892F11 -:1032F0000E942322DFCF9BE5980F933020F480E0DB -:1033000090E00C945F17885A833120F480E090E0BD -:103310000C9475170895882321F00E941D220C94A7 -:1033200064220895882321F00E9423220C946422B1 -:1033300008957F928F929F92AF92BF92CF92DF9229 -:10334000EF92FF920F931F93CF93DF931F92CDB70E -:10335000DEB77C01C62E772EFC01058102950F7029 -:10336000128111110E943A220E949021882379F043 -:10337000112369F080E28C0D883048F082E00E94D1 -:1033800079210E94902191E0D82ED92601C0D12C1C -:10339000E72DE295EF70F0E0E05AFF4F0C94D82C47 -:1033A000872D807F072D0F70882311F00295007FF5 -:1033B000112389F0002309F499C180E28C0D883033 -:1033C00020F4802F0E941D2203C0802F0E942D22F6 -:1033D0000E9464228BC18C2D0E943C19002309F4A9 -:1033E000C3C180E28C0D883020F4802F0E942322FC -:1033F00003C0802F0E9433220E946422B5C1872D12 -:10340000807F972D9F70803211F4892F03C0892F00 -:103410008295807FCC2021F0F1E0CF16A1F01DC075 -:10342000112339F0002319F1013009F50E944D22D2 -:103430009BC1002319F0013009F496C189830E94D1 -:103440005022898110C1112321F0063008F08CC16F -:103450000EC0053008F088C106C1112359F00023C1 -:1034600031F0F701958190FF41C19F7095830E94D3 -:103470008B197AC1002309F4F6C03EC1872D8695C9 -:103480008695837090E0009719F0019761F06CC108 -:10349000112321F08C2D972D937002C080E090E0D5 -:1034A0000E945F1761C1112321F08C2D972D93701D -:1034B00002C080E090E00E94751756C18C2D112348 -:1034C00019F00E94872402C00E94EF240E947425F4 -:1034D0004BC1872D837009F052C0111145C18C2D4D -:1034E000829586958770880F880F9C2D9F70892EF6 -:1034F000912CA12CB12C082E04C0880C991CAA1C5C -:10350000BB1C0A94D2F7C4FE14C00FE010E020E008 -:1035100030E0B901A80104C0440F551F661F771F92 -:103520008A95D2F7CB01BA016095709580959095F8 -:1035300003C060E070E0CB01272D2695269523700F -:1035400030E02230310569F02330310589F06829F7 -:1035500079298A299B292130310571F00E940520A3 -:1035600003C1682979298A299B290E942120FCC04E -:103570000E940520C501B4010E94E91FF5C0112376 -:1035800019F0872D817001C08695882309F4ECC05D -:103590008C2D829586958770880F880F9C2D9F7043 -:1035A000892E912CA12CB12C082E04C0880C991CBA -:1035B000AA1CBB1C0A94D2F7C4FE14C00FE010E092 -:1035C00020E030E0B901A80104C0440F551F661F78 -:1035D000771F8A95D2F7CB01BA01609570958095D7 -:1035E000909503C060E070E0CB01272D26952695CD -:1035F0002370422F50E04230510569F043305105AD -:1036000089F0682979298A299B294130510571F06F -:103610000E94DF20A9C0682979298A299B290E9454 -:10362000FB20A2C00E94DF20C501B4010E94C3207C -:103630009BC08C2D90E0FC01E05EF109E531F105C5 -:1036400008F050C0E059FF4F0C94D82C0C2D0F708F -:10365000872D8F71112321F00E945C20802F07CFCE -:103660000E947D20802F0E9492197EC0112341F07C -:10367000053008F079C0872D8F710E94A22074C098 -:10368000063008F071C0F7CF112339F0872D8F7104 -:103690000E945C2069C01123C9F3872D8F710E949D -:1036A0007D2062C0112329F0872D8F710E94472051 -:1036B0005BC00E943D2058C0112351F0172D1F718F -:1036C000812F0E945C2063E0812F0E9470214CC0FA -:1036D00081E00E947921023008F446C082E00E9415 -:1036E000792142C0112331F0002381F28C2D0E94F8 -:1036F00074183AC0002389F28C2D0E943C1934C002 -:10370000472D4F706C2DC7010E94B8030E94611FA6 -:103710002BC0111129C0472D4F7050E04230510588 -:10372000B9F04CF44115510581F041305105E1F4F7 -:103730000E946F2819C04330510569F0443051058B -:1037400099F48C2D0E94C1280FC00E9458280CC0EB -:103750000E948B2809C00E949E2806C0472D4F70EA -:103760006C2DC7010E942E06DD20F9F00E946C210D -:1037700080FD1BC0F70112820E9466210E945C201E -:10378000C7010E94E41B0E9466210F90DF91CF9138 -:103790001F910F91FF90EF90DF90CF90BF90AF906F -:1037A0009F908F907F900C947D200F90DF91CF9110 -:1037B0001F910F91FF90EF90DF90CF90BF90AF904F -:1037C0009F908F907F9008950F931F93CF93DF93D7 -:1037D000EC01888199812B813C81232BB9F09F3F9B -:1037E00011F48F3F99F0CE010E942D04882371F0CF -:1037F000688179818A810E9462218C010E9417214F -:103800000E94DE1FB801CE010E949919DF91CF916D -:103810001F910F9108950E943A220E944A220E940D -:103820000F220E9464220E9425260E94742580E0B7 -:1038300090E00E945F1780E090E00C9475170E9462 -:103840002A220C940B1C0E945721292F22952F709D -:1038500030E02C3031054CF42A3031056CF4225024 -:10386000310922303105A8F407C02C30310569F048 -:103870002F30310551F00DC0803F69F018F4803EC3 -:1038800040F409C0843F29F406C093FB882780F9DF -:10389000089580E0089581E00895CF93DF9300D0EC -:1038A00000D01F92CDB7DEB70F900F900F900F9002 -:1038B0000F90DF91CF910895CF93DF9300D000D088 -:1038C00000D0CDB7DEB726960FB6F894DEBF0FBE98 -:1038D000CDBFDF91CF9108951F93CF93DF93C09118 -:1038E0009D0216E080919E02C81799F0D0E01C9FBF -:1038F000F0011D9FF00D1124E156FD4F40815181D3 -:1039000062817381848195810E945C1C2196C770BD -:10391000E9CFDF91CF911F9108954091CF0250914F -:10392000D0026091D1027091D2028091D302909125 -:10393000D4020C945C1C8091D40282958F7009F0A3 -:1039400054C08091D102882309F44FC080919D0218 -:10395000A0919E026091CF027091D0024091D2025C -:103960005091D302B6E08A1709F43FC090E04115A8 -:103970005105C1F17F3F11F46F3FA1F1B89FF001F4 -:10398000B99FF00D1124E156FD4F218172132AC019 -:103990002081621327C02281211124C02381348118 -:1039A0002417350710F421503109241B350B283C0E -:1039B0003105C0F42091D4022F7020612093D402ED -:1039C00026E0289FF001299FF00D1124EC55FD4FB2 -:1039D00080818F70806180838FEC92E00E94E41B75 -:1039E0000C946C1C01968770BECF0895CF92DF9225 -:1039F000EF92FF920F931F93CF93DF93CDB7DEB774 -:103A000062970FB6F894DEBF0FBECDBF8C0185E084 -:103A1000F801DE011D9601900D928A95E1F7D8011B -:103A20004C9111965C91119712966C911297139686 -:103A3000CD90DC9014973091CF027091D00280919C -:103A4000D2029091D302009709F46BC17F3F19F421 -:103A50003F3F09F466C1E090D102EE2009F4C0C0F6 -:103A60002091D402C816D90628F0F601E81BF90BFC -:103A7000CF0104C0809590958C0D9D1DFF24F3947B -:103A8000883C910578F0F12C207F09F0C6C07C2D90 -:103A9000D98AC88A89890E944D1C8FEC92E00E94C5 -:103AA000E41BB1C0822F807F09F046C0751314C09B -:103AB000341312C0611110C02F7020612093D40202 -:103AC0000E948D1C8FEC92E00E94E41B8091D40236 -:103AD000D80115968C932EC0CD2819F15F3F11F4B3 -:103AE0004F3FF9F0F62E61111CC080919D0220918C -:103AF0009E0236E0821709F45AC090E0389FF00128 -:103B0000399FF00D1124E156FD4F7181571306C006 -:103B10007081471303C07281711103C001968770D1 -:103B2000E9CFF62E662309F418C18091D402816092 -:103B30008093D402F12C11C1751308C0341306C050 -:103B4000611104C08091D402D801C3C04D875E8743 -:103B50008D859E856A8B0E94231C6A898823E1F1EA -:103B60006623D1F12091D402822F82958F7090E04C -:103B7000029774F08091CF029091D00298878F8342 -:103B80001986DB86CA862C87CE0107960E94E41B25 -:103B900086E0F801AFECB2E001900D928A95E1F772 -:103BA0000E949B1C0E948D1CFF24F394D6C04D875D -:103BB0005E878D859E850E945721292F22952F7023 -:103BC00030E0223031050CF0BCC09F7009F0B6C067 -:103BD000805E883008F4C1C0C8010E94E41BE4CFB5 -:103BE000C816D90608F453C0F601E81BF90BCF013B -:103BF000883C910508F450C0F12C7C2DD98AC88AE4 -:103C000089890E944D1CEFECF2E086E0DF011D92F5 -:103C10008A95E9F70E948D1CA0C0751314C0341357 -:103C200012C0611110C08091D402F8018583C801CF -:103C30000E94E41B86E0EFECF2E0DF011D928A9522 -:103C4000E9F7FE2C8AC04D875E878D859E856A8B3D -:103C50000E94231C6A89882309F4BECF662309F4D5 -:103C6000BBCF2091D402822F82958F7090E0029773 -:103C70000CF48ECF8091CF029091D0029A838983E9 -:103C80001B82DD82CC822E83CE0101967FCF809570 -:103C900090958C0D9D1DACCFF62E662309F49CCF1C -:103CA00075132EC034132CC02091D40220FD1FC0E8 -:103CB000822F82958F70D9F0D80115962C93159785 -:103CC0008F3049F08F5F982F9295907F822F8F7061 -:103CD000892B15968C93C8010E94E41B86E0F8019D -:103CE000AFECB2E001900D928A95E1F793CF86E0B8 -:103CF000F801AFECB2E001900D928A95E1F72DC08A -:103D00004D875E878D859E850E94231C811140CF43 -:103D10008091D40281608093D402C8010E94E41B88 -:103D20001CC0662309F458CF4D875E878D859E851C -:103D30000E94231C882309F44FCF2ACF811148CF3A -:103D40000CC0243031050CF047CF9F7009F440CFF0 -:103D5000F8019581907F09F03BCF8F2D62960FB6C9 -:103D6000F894DEBF0FBECDBFDF91CF911F910F91B1 -:103D7000FF90EF90DF90CF9008951F93CF93DF9344 -:103D8000CDB7DEB72C970FB6F894DEBF0FBECDBF10 -:103D90004F83588769877A878B879C87CE010796E0 -:103DA0000E94F61C882369F08F8198852A853B85BF -:103DB000232BF1F19F3F09F063C08F3F09F060C0F2 -:103DC00037C086E0FE013796DE01119601900D9214 -:103DD0008A95E1F76F817885EA85FB85309741F117 -:103DE0007F3F11F46F3F21F120919E0230E0C90125 -:103DF00001968770992740919D0250E0841795079E -:103E000009F447C069837A83FD83EC8396E0929F2F -:103E1000D001939FB00D1124A156BD4FFE013196E4 -:103E200001900D929A95E1F780939E020E946C1C7E -:103E300016E080919D0290919E028917C1F1189F12 -:103E4000C001112481569D4F0E94F61C882379F1F0 -:103E5000E0919D021E9FF0011124E156FD4F40812B -:103E6000518162817381848195810E945C1C809163 -:103E70009D0290E001968770992780939D02D9CF8B -:103E80004F81588569857A858B859C850E945C1C4D -:103E9000CFCF0E941F1C10929E0210929D02EFEC49 -:103EA000F2E086E0DF011D928A95E9F7C1CF2C96FA -:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B -:103EC0000895EF92FF920F931F93CF93DF938C018E -:103ED000009709F46CC0F12CEE24E394E8012196DC -:103EE000F8018491843740F4843008F051C0813067 -:103EF00081F0823019F15BC0853709F444C0A8F124 -:103F00009CE7980F903708F052C08F770E943C19B9 -:103F100041C00E5F1F4FFE01C49180E28C0F8830BC -:103F200048F4C7708E2D01C0880FCA95EAF70E9429 -:103F30003D2214C08C2F0E9474182DC00E5F1F4F9D -:103F4000FE01C49180E28C0F883058F4C7708E2D2A -:103F500001C0880FCA95EAF70E9443220E9464229A -:103F60001AC08C2F0E943C1916C00E5F1F4FFE0115 -:103F7000C491CC2381F08FE99FE00197F1F700C055 -:103F80000000C150F6CF0E5F1F4FFE01F49003C03A -:103F90000E9474188E018F2D882309F49FCFEFE9BA -:103FA000FFE03197F1F700C000008150F5CFDF91BD -:103FB000CF911F910F91FF90EF9008950895609316 -:103FC000D9027093DA028093DB029093DC020C94A6 -:103FD0000B1C0F931F930091D9021091DA022091CC -:103FE000DB023091DC02DC01CB01802B912BA22B78 -:103FF000B32B8093D9029093DA02A093DB02B093A3 -:10400000DC021F910F910C940B1C0F931F930091D6 -:10401000D9021091DA022091DB023091DC02DC013E -:10402000CB0180239123A223B3238093D9029093C1 -:10403000DA02A093DB02B093DC021F910F910C9483 -:104040000B1C0F931F930091D9021091DA0220915B -:10405000DB023091DC02DC01CB0180279127A22713 -:10406000B3278093D9029093DA02A093DB02B09336 -:10407000DC021F910F910C940B1C1092D502109230 -:10408000D6021092D7021092D8020C940B1C41E079 -:1040900050E060E070E004C0440F551F661F771FBA -:1040A0008A95D2F74093D5025093D6026093D702F7 -:1040B0007093D8020C940B1C41E050E060E070E07B -:1040C00004C0440F551F661F771F8A95D2F7809151 -:1040D000D5029091D602A091D702B091D802482B78 -:1040E000592B6A2B7B2B4093D5025093D6026093B9 -:1040F000D7027093D8020C940B1C41E050E060E0B2 -:1041000070E004C0440F551F661F771F8A95D2F7D1 -:1041100040955095609570958091D5029091D6020A -:10412000A091D702B091D802482359236A237B2358 -:104130004093D5025093D6026093D7027093D80271 -:104140000C940B1C41E050E060E070E004C0440FB0 -:10415000551F661F771F8A95D2F78091D5029091DF -:10416000D602A091D702B091D802482759276A27D2 -:104170007B274093D5025093D6026093D702709369 -:10418000D8020C940B1C0F931F930091D502109131 -:10419000D6022091D7023091D802DC01CB01802BCE -:1041A000912BA22BB32B8093D5029093D602A09390 -:1041B000D702B093D8021F910F910C940B1C0F9350 -:1041C0001F930091D5021091D6022091D702309111 -:1041D000D802DC01CB0180239123A223B323809357 -:1041E000D5029093D602A093D702B093D8021F9124 -:1041F0000F910C940B1C0F931F930091D5021091FB -:10420000D6022091D7023091D802DC01CB01802761 -:104210009127A227B3278093D5029093D602A0932B -:10422000D702B093D8021F910F910C940B1C0895E4 -:10423000CF92DF92EF92FF920F931F93CF93DF9372 -:104240008C01C090D902D090DA02E090DB02F090AD -:10425000DC028091D5029091D602A091D702B09154 -:10426000D802C82AD92AEA2AFB2ACFE1D0E0D7010E -:10427000C6010C2E04C0B695A795979587950A940C -:10428000D2F780FF06C0B8018C2F0E94B3080197B7 -:1042900021F4219760F780E001C08C2FDF91CF914E -:1042A0001F910F91FF90EF90DF90CF900895CF93E3 -:1042B000DF93EC010E941821BE010E94B308DF9138 -:1042C000CF910895CB010E94572108958091DD027E -:1042D00085958595859508958091DD02877008956F -:1042E00098E0899F90011124262B2093DD020C94E5 -:1042F0005C202091DD02809582238093DD02982F3F -:10430000977069F430E0482F552747FD50952417E2 -:10431000350729F08595859585950C947D20089520 -:104320009091DD02977081E009F480E0089590910A -:104330001501992321F090911601911109C0209146 -:10434000170130911801F90132969FEF40E01FC02C -:10435000982F9695969596959F3050F5E091170178 -:10436000F0911801E90FF11D877021E030E0A901FB -:1043700002C0440F551F8A95E2F7CA019181892B2B -:10438000818308959F3F39F04F5F4E3041F0519146 -:104390005813F8CF0DC05111F7CF942FF5CF9F3F91 -:1043A00039F0F901E90FF11D97FDFA95828308951F -:1043B000089590911501992321F090911601911182 -:1043C00009C02091170130911801F9013296205F40 -:1043D0003F4F1FC0982F9695969596959F30F0F475 -:1043E000E0911701F0911801E90FF11D877021E0AC -:1043F00030E0A90102C0440F551F8A95E2F7CA01B7 -:10440000809591818923818308953196E217F3077E -:1044100029F090819813F9CF1082F7CF089581E0A9 -:1044200090E0E0911701F0911801E80FF91F108258 -:10443000019680319105A9F708959091F102892B99 -:104440008093F102089580959091F10289238093E1 -:10445000F10208951092F10208959091F002892BD3 -:104460008093F002089580959091F00289238093C3 -:10447000F00208951092F00208959091EF02892BB6 -:104480008093EF02089580959091EF0289238093A5 -:10449000EF0208951092EF0208958093DE020895CE -:1044A0001092DE0208958091170190911801FC018D -:1044B00031969C01205F3F4F80E0919191118F5F79 -:1044C000E217F307D1F70895E0911701F091180171 -:1044D0008091F1028083E0911701F09118019081A1 -:1044E0008091F002892B8083E0911701F0911801EF -:1044F00090818091EF02892B80838091DE02882356 -:1045000061F0E0911701F09118019081892B80836F -:104510000E94532281111092DE0280911701909126 -:1045200018010C94491720E0009739F0AC01415074 -:104530005109842395232F5FF7CF822F089580910F -:104540001303843039F11092F30220E488E190E003 -:104550000FB6F894A895809360000FBE209360007A -:1045600080E00E941F0380E00E944D0983B7817F95 -:10457000846083BF83B7816083BF7894889583B755 -:104580008E7F83BF88E10FB6F8948093600010920D -:1045900060000FBE08950895089580E00E941F03F3 -:1045A0000E94CB220E94A8090E94CC220E942D0AC0 -:1045B00091E0811101C090E0892F08950E941F1C95 -:1045C00080E00E941F030E9447280E943D170C9420 -:1045D0004D091F920F920FB60F9211248F939F9344 -:1045E000AF93BF938091F302811113C08091F402C5 -:1045F0009091F502A091F602B091F7024196A11DAB -:10460000B11D8093F4029093F502A093F602B0934B -:10461000F702BF91AF919F918F910F900FBE0F90B6 -:104620001F90189582E084BD93E095BD9AEF97BDE9 -:1046300080936E0008952FB7F8948091F4029091C2 -:10464000F502A091F602B091F7022FBF0895CF9224 -:10465000DF92EF92FF920F931F932FB7F894409140 -:10466000F4025091F5026091F6027091F7022FBFAB -:104670006A017B01EE24FF248C0120E030E0C016AB -:10468000D106E206F30610F4415051099A01281BA5 -:10469000390BC9011F910F91FF90EF90DF90CF90E0 -:1046A00008951F920F920FB60F9211248F939F932C -:1046B000AF93BF938091F4029091F502A091F6021E -:1046C000B091F7020196A11DB11D8093F402909361 -:1046D000F502A093F602B093F702BF91AF919F91BC -:1046E0008F910F900FBE0F901F9018950E943A1453 -:1046F000F8942FEF87EA91E6215080409040E1F74F -:1047000000C0000087E090EBDC0180931E039093D3 -:104710001F03A0932003B09321039CE088E10FB610 -:10472000F894A895809360000FBE90936000FFCF2F -:104730000E94D723811102C00E94B3230E94E2236A -:104740008093F2020E94EA2380931C0387FB882750 -:1047500080F9809316010E94E623682F70E080E0C4 -:1047600090E00C94DF1F6DEE7EEF80E090E00E9401 -:10477000FE2C60E082E090E00E94EC2C60E083E0A0 -:1047800090E00E94EC2C60E084E090E00E94EC2C31 -:1047900060E085E090E00E94EC2C60E086E090E034 -:1047A0000E94EC2C6FEF87E090E00C94EC2C80E002 -:1047B00090E00E94E62C21E08D3E9E4F09F020E023 -:1047C000822F089582E090E00C94DE2C83E090E04C -:1047D0000C94DE2C84E090E00C94DE2C682F84E0B6 -:1047E00090E00C94EC2C86E090E00C94DE2C682F8A -:1047F00086E090E00C94EC2C87E090E00C94DE2CAA -:10480000682F87E090E00C94EC2C8091FA0280FFF6 -:104810000BC060911C0185E0689FB0011124759563 -:104820006795759567952BC081FF09C060911C0144 -:1048300085E0689FB00111247595679520C082FFBF -:1048400007C060911C0185E0689FB001112417C06A -:104850009091FB029923D1F060911B01961788F784 -:1048600020911C0185E0289F90011124929FA001B6 -:10487000939F500D112470E0CA010E94C42C60382F -:10488000710540F46115710539F002C065E070E012 -:10489000862F08958FE7089581E008958091FA02A8 -:1048A00080FF08C060911A0170E075956795759555 -:1048B000679521C081FF06C060911A0170E075956F -:1048C000679519C082FF04C060911A0170E010C0A2 -:1048D0009091FB029923C1F0609119019617A0F7FE -:1048E00080911A01899FC001112470E00E94C42C9C -:1048F0006038710528F46115710521F0862F08953F -:104900008FE7089581E0089561E070E0F4CF803F83 -:1049100021F40E940524819504C0813F29F40E945E -:1049200005248093FE020895823F21F40E9405240D -:10493000819504C0833F29F40E9405248093FD02E1 -:104940000895893F19F40E944E2405C08A3F31F42E -:104950000E944E2481958093FF0208958B3F21F49D -:104960000E944E24819504C08C3F29F40E944E245D -:10497000809300030895843F21F48091FC028160BC -:1049800017C0853F21F48091FC02826011C0863FF0 -:1049900021F48091FC0284600BC0873F21F4809158 -:1049A000FC02886005C0883F31F48091FC02806180 -:1049B0008093FC0208958D3F21F48091FA0281607A -:1049C0000BC08E3F21F48091FA02826005C08F3FB8 -:1049D00029F48091FA0284608093FA020895803F5E -:1049E00039F48091FE0287FF6CC01092FE0269C00C -:1049F000813F29F48091FE021816BCF362C09091A9 -:104A0000FD02823F29F497FF5CC01092FD0259C05D -:104A1000833F19F41916CCF354C0893F41F48091B7 -:104A2000FF0218160CF04DC01092FF024AC08A3FD8 -:104A300029F48091FF0287FF44C0F6CF8B3F39F401 -:104A40008091000387FF3DC0109200033AC08C3F65 -:104A500029F4809100031816BCF333C0843F21F47D -:104A60008091FC028E7F17C0853F21F48091FC026B -:104A70008D7F11C0863F21F48091FC028B7F0BC09B -:104A8000873F21F48091FC02877F05C0883F31F485 -:104A90008091FC028F7E8093FC0213C08D3F21F435 -:104AA0008091FA028E7F0BC08E3F21F48091FA0232 -:104AB0008D7F05C08F3F29F48091FA028B7F809310 -:104AC000FA028091FD0281110EC08091FE028111D7 -:104AD0000AC08091FF02811106C0809100038111FC -:104AE00002C01092FB0208958CEF92E00E945417CE -:104AF0000E941B239093F9028093F80208951F935C -:104B0000CF93DF938091F8029091F9020E942723BE -:104B1000AC019091FB02992321F020911D0130E01E -:104B200006C020911E018AE0289F9001112442179F -:104B3000530708F486C08091FD02C091FE02D09117 -:104B4000FF0210910003811107C0C11176C0D1117D -:104B500074C0111172C075C09F3F19F09F5F909390 -:104B6000FB02181624F40E9405248093FD02809114 -:104B7000FD0287FF05C00E94052481958093FD02F8 -:104B80001C1624F40E9405248093FE028091FE02EC -:104B900087FF05C00E94052481958093FE026091E5 -:104BA000FD02662339F1C091FE02CC2319F177276B -:104BB00067FD7095872F972F0E94E62923E333E343 -:104BC00043E35FE30E94F62A0E94B3296093FD024B -:104BD0006C2F772767FD7095872F972F0E94E62906 -:104BE00023E333E343E35FE30E94F62A0E94B32901 -:104BF0006093FE021D1624F40E944E248093FF024F -:104C00008091FF0287FF05C00E944E24819580930A -:104C1000FF02111624F40E944E2480930003809119 -:104C2000000387FF05C00E944E24819580930003F6 -:104C3000DF91CF911F910C9474259F3F09F08ECF87 -:104C400096CFDF91CF911F910895ECEFF2E085E0D0 -:104C5000DF011D928A95E9F71092FB021092FA0289 -:104C60000895833081F128F4813059F08230D1F0F9 -:104C70000895853009F449C0B8F1863009F456C06A -:104C8000089580911E01262F30E0280F311D2F3FFF -:104C9000310524F4680F60931E0108958FEF80930F -:104CA0001E01089580911D01262F30E0280F311D2F -:104CB0002F3F310524F4680F60931D0108958FEF95 -:104CC00080931D01089580911C01262F30E0280F4C -:104CD000311D2F3F310524F4680F60931C010895A6 -:104CE0008FEF80931C01089580911B01262F30E0E7 -:104CF000280F311D2F3F310524F4680F60931B01ED -:104D000008958FEF80931B01089580911A01262F3B -:104D100030E0280F311D2F3F310524F4680F6093D8 -:104D20001A0108958FEF80931A0108958091190157 -:104D3000262F30E0280F311D2F3F310524F4680F56 -:104D40006093190108958FEF8093190108958330BE -:104D500011F128F4813049F0823091F008958530C6 -:104D600081F120F18630C1F1089580911E0168170C -:104D700020F4861B80931E01089510921E01089551 -:104D800080911D01681720F4861B80931D010895F2 -:104D900010921D01089580911C01681720F4861B54 -:104DA00080931C01089510921C01089580911B01AD -:104DB000681720F4861B80931B01089510921B0135 -:104DC000089580911A01681720F4861B80931A01B8 -:104DD000089510921A01089580911901681720F41E -:104DE000861B8093190108951092190108950F935D -:104DF0001F93873208F048C08E3108F08DC0803193 -:104E000009F477C008F5873009F461C068F486308A -:104E100009F09DC08091F202817F8E7F8093F20223 -:104E200081E08093020394C08B3009F489C08E30F6 -:104E300009F08DC08091F20282FB222720F991E0D7 -:104E4000922790FB82F95EC0863109F479C060F444 -:104E5000813109F07CC00E941F1C9091160181E0F5 -:104E60008927809316016CC0893109F469C08B31A0 -:104E700009F06DC08091F20281FB222720F991E0B8 -:104E8000922790FB81F93EC0883309F459C050F451 -:104E9000893209F457C0853309F454C0873209F4C4 -:104EA00051C055C0833409F44DC028F48A3308F446 -:104EB0004EC0895332C0883409F049C00E941F1C7B -:104EC0000E945D0A0E9424040E94762339C09091BA -:104ED000F202892F8095817080FB90F929F096600D -:104EE00098609093F20234C0997F977F9093F2027A -:104EF00027C08091F20283FB222720F991E09227BC -:104F000090FB83F98093F2029923D1F08091F20211 -:104F100081608093F20214C08D5141E050E060E066 -:104F200070E08A019B0104C0000F111F221F331F74 -:104F30008A95D2F7C901B8010E94DF1F0E941F1C89 -:104F400081E006C061E070E080E090E0F5CF80E0B5 -:104F50001F910F91089580E0089580E00895CF9308 -:104F6000C82F80910203813069F018F08230C9F1B6 -:104F700084C0E0911701F09118018081823209F01C -:104F80007EC007C0E0911701F09118018081823244 -:104F900061F48C2F0E94AB27811104C08C2F0E94DA -:104FA000F7261DC081E090E01AC08C2F0E94AD272B -:104FB000811114C0C43179F048F4CB3079F0C0319C -:104FC00009F061C082E08093020308C0C93219F081 -:104FD000C83321F058C01092020355C081E081709F -:104FE00054C0C93291F120F5C43179F1B0F4C73021 -:104FF00009F047C08EE180931E0182E380931D017A -:105000008AE080931C0184E180931B0188E08093F7 -:105010001A0188E28093190134C0CE51C63088F558 -:10502000EC2FF0E0EA54FE4F80818093010329C009 -:10503000CE34E9F020F4CB3421F56AE013C0C13559 -:1050400079F0C235F1F461E00DC08091010388234D -:1050500019F01092010315C081E08093020315C07E -:1050600061E006C0809101030E9431260AC06AE017 -:10507000809101030E94A72604C01092020380E0E1 -:1050800004C081E002C080E0AACFCF9108950E94C1 -:10509000D723811102C00E94B3230E94F32380937F -:1050A0001D0380FF02C0869501C080E00C941F03A1 -:1050B00080911D03982F9695292F30E023303105DC -:1050C0004CF49F5F990F8170892B816080931D0341 -:1050D0000E94F72380911D0386950C941F038091F5 -:1050E0001D03982F969591F09158990F8170892BF7 -:1050F00080931D038E7F91E009F490E080911D0361 -:1051000090FB80F980931D030E94F72380911D037B -:1051100086950C941F0380911D03982F909590FB0A -:1051200080F980931D030E94F72380911D0380FF67 -:1051300002C0869501C080E00C941F0390911D036E -:10514000892F86958F5F8F779170843028F4880F30 -:10515000892B80931D0302C090931D0380911D0332 -:105160008E7F91E009F490E080911D0390FB80F91F -:1051700080931D030E94F72380911D0386950C9454 -:105180001F0320911D03922F96958927982F990F21 -:10519000822F8170892B80931D038E7F91E009F40B -:1051A00090E080911D0390FB80F980931D030E9485 -:1051B000F72380911D0386950C941F0380911D0396 -:1051C000869508955058BB27AA270ED0D1C1C2D1C9 -:1051D00030F0C7D120F031F49F3F11F41EF4B7C175 -:1051E0000EF4E095E7FB9FC1E92FD3D180F3BA1706 -:1051F000620773078407950718F071F49EF5EBC1F9 -:105200000EF4E0950B2EBA2FA02D0B01B9019001E1 -:105210000C01CA01A0011124FF27591B99F0593F25 -:1052200050F4503E68F11A16F040A22F232F342F6D -:105230004427585FF3CF469537952795A795F040BB -:105240005395C9F77EF41F16BA0B620B730B840BD0 -:10525000BAF09150A1F0FF0FBB1F661F771F881F88 -:10526000C2F70EC0BA0F621F731F841F48F48795E0 -:1052700077956795B795F7959E3F08F0B3CF9395CF -:10528000880F08F09927EE0F97958795089527D1F5 -:1052900008F481E008950CD06BC163D140F05AD17D -:1052A00030F021F45F3F19F03EC1511195C14FC15B -:1052B00070D198F39923C9F35523B1F3951B550B7E -:1052C000BB27AA2762177307840738F09F5F5F4FD9 -:1052D000220F331F441FAA1FA9F333D00E2E3AF01A -:1052E000E0E830D091505040E695001CCAF729D034 -:1052F000FE2F27D0660F771F881FBB1F2617370783 -:105300004807AB07B0E809F0BB0B802DBF01FF27B2 -:1053100093585F4F2AF09E3F510568F004C15CC16D -:105320005F3FECF3983EDCF3869577956795B795EC -:10533000F7959F5FC9F7880F911D9695879597F907 -:105340000895E1E0660F771F881FBB1F6217730780 -:105350008407BA0720F0621B730B840BBA0BEE1F95 -:1053600088F7E095089504D06894B11135C1089587 -:1053700018D188F09F5790F0B92F9927B751A0F016 -:10538000D1F0660F771F881F991F1AF0BA95C9F7D9 -:1053900012C0B13081F01FD1B1E008951CC1672F58 -:1053A000782F8827B85F39F0B93FCCF38695779589 -:1053B0006795B395D9F73EF4909580957095619572 -:1053C0007F4F8F4F9F4F0895E89409C097FB3EF49D -:1053D00090958095709561957F4F8F4F9F4F992342 -:1053E000A9F0F92F96E9BB279395F69587957795C0 -:1053F0006795B795F111F8CFFAF4BB0F11F460FF80 -:105400001BC06F5F7F4F8F4F9F4F16C0882311F0D7 -:1054100096E911C0772321F09EE8872F762F05C0EB -:10542000662371F096E8862F70E060E02AF09A9586 -:10543000660F771F881FDAF7880F9695879597F97B -:10544000089588D018F011F08CD038F480C0C4C012 -:10545000E92F9FD0B0F35523C9F3E7FB6217730719 -:1054600084079507A8F199F3E92FFF2788232AF0ED -:105470003197660F771F881FDAF7952F552744233A -:1054800032F091505040220F331F441FD2F7BB27F8 -:10549000E91BF50B621B730B840BB109C1F222F4FB -:1054A000620F731F841FB11D31972AF0660F771F9B -:1054B000881FBB1FEFCF915050405AF041F0882316 -:1054C00032F0660F771F881F91505040C1F79395B7 -:1054D00030C08695779567959F5FD9F7F8CF990F7C -:1054E0000008550FAA0BE0E8FEEF16161706E807AE -:1054F000F907C0F012161306E407F50798F0621BCF -:10550000730B840B950B39F40A2661F0232B242BA3 -:10551000252B21F408950A2609F4A140A6958FEFC2 -:10552000811D811D089597F99F6780E870E060E014 -:1055300008959F3F31F0915020F4879577956795B6 -:10554000B795880F911D9695879597F908959FEFC8 -:1055500080EC089500240A9416161706180609060A -:10556000089500240A9412161306140605060895D9 -:10557000092E0394000C11F4882352F0BB0F40F461 -:10558000BF2B11F460FF04C06F5F7F4F8F4F9F4FA1 -:10559000089557FD9058440F551F59F05F3F71F023 -:1055A0004795880F97FB991F61F09F3F79F087958A -:1055B0000895121613061406551FF2CF4695F1DF13 -:1055C00008C0161617061806991FF1CF86957105A3 -:1055D000610508940895E894BB2766277727CB01D7 -:1055E00097F908957CDF08F48FEF08950BD0C0CFB2 -:1055F000B1DF28F0B6DF18F0952309F094CFA7CFDC -:105600001124EACFC6DFA0F3959FD1F3950F50E0A8 -:10561000551F629FF001729FBB27F00DB11D639F64 -:10562000AA27F00DB11DAA1F649F6627B00DA11D0A -:10563000661F829F2227B00DA11D621F739FB00DB0 -:10564000A11D621F839FA00D611D221F749F332720 -:10565000A00D611D231F849F600D211D822F762FB9 -:105660006A2F11249F5750408AF0E1F088234AF0B6 -:10567000EE0FFF1FBB1F661F771F881F9150504002 -:10568000A9F79E3F510570F04ECFA6CF5F3FECF3D8 -:10569000983EDCF3869577956795B795F795E795EE -:1056A0009F5FC1F7FE2B880F911D9695879597F9FF -:1056B0000895FA01EE0FFF1F30962105310599F18B -:1056C0006115710561F48038BFE39B0749F1689467 -:1056D0009038810561F08038BFEF9B0741F0992336 -:1056E00042F5FF3FE1053105210511F1E8940894E9 -:1056F000E795D901AA2329F4AB2FBE2FF85FD0F389 -:1057000010C0FF5F70F4A695E0F7F73950F019F07C -:10571000FF3A38F49F779F930CD00F9007FC905876 -:1057200008953EF014CF60E070E080E89FE30895B4 -:105730004FE79F775F934F933F932F939ED02F9187 -:105740003F914F915F9152DF05C019F40EF0EBCEFF -:1057500042CFFDCE26DFC8F39638C0F707F80F9288 -:10576000E8942BE33AEA48EB5FE74EDF0F920F92A3 -:105770000F924DB75EB70F92C0D0EAE0F1E016D0BD -:105780004F915F91EF91FF91E595EE1FFF1F49F05B -:10579000FE57E0684427EE0F441FFA95E1F7419564 -:1057A000550B32D00F9007FE26C00895DF93CF939C -:1057B0001F930F93FF92EF92DF927B018C0168940D -:1057C00005C0DA2EEF011EDFFE01E894A5912591B8 -:1057D000359145915591AEF3EF0106DDFE0197013C -:1057E000A801DA9479F7DF90EF90FF900F911F9165 -:1057F000CF91DF9108959B01AC0160E070E080E8FB -:105800009FE349CD90CE95CECCDEE8F39923D9F332 -:10581000940F511DBBF39150504094F059F08823E0 -:1058200032F0660F771F881F91505040C1F79E3F9E -:10583000510544F7880F911D9695879597F908951E -:105840005F3FACF0983E9CF0BB27869577956795B7 -:10585000B79508F4B1609395C1F7BB0F58F711F4F1 -:1058600060FFE8CF6F5F7F4F8F4F9F4FE3CFB4CE86 -:105870000EF05FCE6CCE689456CE93DEC8F39923BB -:10588000D1F3C6F3DF93CF931F930F93FF92C92FEA -:10589000DD2788232AF02197660F771F881FDAF704 -:1058A00020E030E040E85FEB9FE3883920F0803E65 -:1058B00030F021968F7787DCE2E3F1E003C083DCF0 -:1058C000EFE5F1E073DF8B01BE01EC01FB2E6F57BA -:1058D00071097595771F880B990B78DD28E132E700 -:1058E00041E35FE38FDEAF2D9801AE01FF900F9192 -:1058F0001F91CF91DF9178DC3BCEFA01DC01AA0F3A -:10590000BB1F9B01AC01BF5728F422273327442734 -:1059100050781FC0B75188F4AB2F002446953795B7 -:105920002795011CA395D2F3002069F0220F331FA5 -:10593000441FB395DAF30DD045CC61307105A0E872 -:105940008A07B94630F49B01AC0166277727882780 -:105950009078309621F020833183428353830895D9 -:10596000AA1BBB1B51E107C0AA1FBB1FA617B70785 -:1059700010F0A61BB70B881F991F5A95A9F78095A1 -:105980009095BC01CD01089597FB072E16F4009465 -:1059900007D077FD09D00E94B02C07FC05D03EF45B -:1059A000909581959F4F0895709561957F4F0895CB -:1059B000EE0FFF1F0590F491E02D0994F999FECFA9 -:1059C00092BD81BDF89A992780B50895A8E1B0E00D -:1059D00042E050E00C94062D262FF999FECF92BD9F -:1059E00081BDF89A019700B4021639F01FBA20BDA4 -:1059F0000FB6F894FA9AF99A0FBE08950196272FD8 -:105A00000E94ED2C0C94EC2CDC01CB01FC01F999EB -:105A1000FECF06C0F2BDE1BDF89A319600B40D92FA -:0C5A200041505040B8F70895F894FFCFB3 -:105A2C00640007000CFF0000003F644110CF10AC75 -:105A3C0010781044100101DF022808140A321E00ED -:105A4C0002040507090B0C0E1011131517181A1C5C -:105A5C001D1F2123242628292B2D2F303234353796 -:105A6C00393B1F0F03764F5F6F7F496943790959A3 -:105A7C0053633149803F5D8B803FF8BF803FCAE163 -:105A8C00803F73ED803FCAE1803FF8BF803F5D8B64 -:105A9C00803F3149803F0000803FF16D7F3F75EAC8 -:105AAC007E3F4C827E3F833F7E3F84287E3F833FF8 -:105ABC007E3F4C827E3F75EA7E3FF16D7F3F00005A -:105ACC00803F3F4D36394905FC04C6048D04200443 -:105ADC00390452046B04010203040506070809008B -:00000001FF diff --git a/keyboard/planck/keymaps/pete/compiled.hex b/keyboard/planck/keymaps/pete/compiled.hex deleted file mode 100644 index ddf70df507..0000000000 --- a/keyboard/planck/keymaps/pete/compiled.hex +++ /dev/null @@ -1,1143 +0,0 @@ -:100000000C94F1020C9435030C9435030C943503D5 -:100010000C9435030C9435030C9435030C94350380 -:100020000C9435030C9435030C94D20D0C94A40E4F -:100030000C94061C0C9435030C9435030C94350376 -:100040000C9435030C9496030C9435030C943503EF -:100050000C9435030C946E1C0C9435030C943503EE -:100060000C9435030C9435030C9435030C94350330 -:100070000C9435030C9435030C9435030C94350320 -:100080000C9435030C9435030C9435030C94350310 -:100090000C9435030C9435030C9435030C94350300 -:1000A0000C9435030C9435030C943503FC030404C1 -:1000B0000E0416041E042F0458045804580458044F -:1000C0005804580458045804580458043B04110FA9 -:1000D000330F2110330F2110780F9B0F2110F00FD9 -:1000E0000310ED12ED121C131C135B137B13D114C0 -:1000F000D1148613D114361436149D14A614D114B9 -:10010000CB144314431443144314431443144314AF -:100110004314431443144314431443144314431427 -:1001200043145314611468146F1479140000000010 -:1001300000000000000000010204060A0F17202C36 -:100140003A4A5D71879DB3C7DAE9F5FCFFFCF5E932 -:10015000DAC7B39D87715D4A3A2C20170F0A06044F -:100160000201000000000000000000002B0014004D -:100170001A000800150017001C0018000C001200DF -:1001800013002A00290004001600070009000A00D5 -:100190000B000D000E000F0033003400E1001D00C5 -:1001A0001B00060019000500110010003600370082 -:1001B000380028000530E000E200E30003302C00A6 -:1001C0002C0004305000510052004F002B0014004E -:1001D0001A00090013000A000D000F0018001C008F -:1001E00033002A002900040015001600170007003C -:1001F0000B00110008000C0012003400E1001D008B -:100200001B000600190005000E0010003600370024 -:10021000380028000530E000E200E30003302C0045 -:100220002C0004305000510052004F002B003400CD -:100230003600370013001C0009000A0006001500F4 -:100240000F002A00290004001200080018000C000A -:1002500007000B001700110016003800E100330002 -:1002600014000D000E001B00050010001A001900FC -:100270001D0028000530E000E200E30003302C0000 -:100280002C0004305000510052004F0035021E0275 -:100290001F0220022102220223022402250226023A -:1002A00027022A00010001000100010001000100F5 -:1002B00001002D022E022F02300231020100010046 -:1002C0000100010001000100010001000100010026 -:1002D0000100010001000100010001000100010016 -:1002E00001000100AB00AA00A900AE0035001E000D -:1002F0001F002000210022002300240025002600EA -:1003000027002A0001000100010001000100010096 -:1003100001002D002E002F003000310001000100EF -:1003200001000100010001000100010001000100C5 -:1003300001000100010001000100010001000100B5 -:1003400001000100AB00AA00A900AE0083506603C3 -:10035000000000000000000000003A003B003C00EC -:100360003D004C0001001030A800AA00A9000000C8 -:1003700000003E003F0040004100200A0100350817 -:10038000AC00AE00AB00000000004200430044009F -:100390004500210A053001000100010000000000B5 -:1003A000000000004A004E004B004D00010001001B -:1003B0000100010001000100010001000100010035 -:1003C0000100010001000100010001000100010025 -:1003D0000100003001300230010001000100010085 -:1003E0000100010001000100010001000100010005 -:1003F00001000100010001000100010001000050A6 -:100400000050010001000100010001002803540018 -:1004100068006500200050006C0061006E00630001 -:100420006B0020004B006500790062006F006100E6 -:100430007200640000002C034F007200740068001A -:100440006F006C0069006E006500610072002000A2 -:100450004B006500790062006F006100720064006B -:10046000730000000403090409026D00040100A0E8 -:10047000FA09040000010301010009211101000132 -:10048000223F000705810308000A09040100010357 -:10049000010200092111010001224D00070582031C -:1004A00008000A09040200010300000009211101EB -:1004B00000012236000705830308000A090403002F -:1004C0000103000000092111010001223900070584 -:1004D00084031000011201100100000008EDFE600D -:1004E0006001000102000105010906A101050719CB -:1004F000E029E71500250195087501810205081915 -:100500000129059505750191029501750391010574 -:10051000071900297715002501957875018102C01A -:1005200005010980A101850216010026B7001A0104 -:10053000002AB700751095018100C0050C0901A1C2 -:10054000018503160100269C021A01002A9C0275EF -:100550001095018100C005010902A1010901A10056 -:100560000509190129051500250195057501810267 -:100570009501750381010501093009311581257F38 -:1005800095027508810609381581257F9501750842 -:100590008106050C0A38021581257F9501750881B1 -:1005A00006C0C005010906A101050719E029E715E4 -:1005B00000250195087501810295017508810105E5 -:1005C0000819012905950575019102950175039199 -:1005D000010507190029FF150025FF9506750881FB -:1005E00000C011241FBECFEFDAE0DEBFCDBF04B6DE -:1005F00003FE24C08091FB019091FC01A091FD01BC -:10060000B091FE018730904BA740B04BB9F41092E7 -:10061000FB011092FC011092FD011092FE0114BE2C -:1006200084B7877F84BF88E10FB6F8948093600019 -:10063000109260000FBEE0E0F8E3099511E0A0E041 -:10064000B1E0E6E0F7E402C005900D92A434B107F2 -:10065000D9F711E0A4E4B1E001C01D92AB3FB107AE -:10066000E1F70E94180B0C9481230C94000008956C -:1006700081E0089508950C9437030C9438030C948A -:100680003A030E94F72123E030E0281B3109220FB2 -:10069000209348010895282F2F98809180002111E0 -:1006A00008C0877F8093800010928D0010928C008C -:1006B0001BC0886080938000233019F48FEF9FEF78 -:1006C0000FC083E090E0821B9109880F991F2FEFE4 -:1006D0003FEFA90102C0569547958A95E2F7CA01F6 -:1006E00090938D0080938C000C9441030E944103F1 -:1006F00084E080934701109244010895279A2F982F -:100700008FEF9FEF90938700809386008AE080931D -:10071000800089E1809381000E9460210C9476031F -:100720000E947E036E9A769A0C945B041F920F923D -:100730000FB60F9211242F933F938F939F93EF93B4 -:10074000FF93E0914501F0914601CF01019690930E -:100750004601809345010090470102C0F695E79558 -:100760000A94E2F7EF7380914401823019F4E03289 -:1007700051F404C0813039F4EF3329F480916F00D3 -:100780008D7F80936F00F0E0E45DFE4FE49121E007 -:1007900031E0E29FC001E39F900D112400904801D9 -:1007A00002C0969587950A94E2F790938D00809306 -:1007B0008C00FF91EF919F918F913F912F910F901E -:1007C0000FBE0F901F901895CF93DF93EC010E94FE -:1007D000021DBE0180E090E0DF91CF910C94FC18E7 -:1007E000462F50E04131510508F062C0DC01FA01AA -:1007F000EA5AFF4F0C94312312968C91882309F406 -:1008000057C081E090E007C012968C91882309F4CC -:100810004FC082E090E00E94E4034AC012968C919F -:10082000882309F445C084E090E0F5CF12968C91BE -:10083000882311F083E007C083E00EC012968C91EC -:10084000882349F084E00E94791946E064E083E05F -:100850000E9428082DC084E00E949A19F6CF1296B3 -:100860008C91882321F085E00E94791921C085E0D0 -:100870000E949A191DC012968C91882369F085EE0A -:100880000E94911184EE0E94911186EE0E949111B6 -:1008900087EE0E9491110CC085EE0E94591284EEE1 -:1008A0000E94591286EE0E94591287EE0E94591238 -:1008B00080E090E00895089581E008950C945C0430 -:1008C00008950F931F93CF93DF938C01FC01C08198 -:1008D000D181CE010E94351ABE010E940E05EC01A5 -:1008E000B8010E945E04882309F48DC0F80182815A -:1008F000882309F44AC08091540181111FC0C4317A -:10090000F0E5DF0709F051C00E94600481E08093A8 -:1009100054010E94381C909353018093520110920D -:100920004B0110924D0110924C0110924F01109208 -:100930004E01109251011092500165C080915201F8 -:10094000909153010E94441C883C910570F4809161 -:100950004B01E82FF0E0EE0FFF1FE45BFE4FD18369 -:10096000C0838F5F80934B014EC0C43880E5D807A9 -:1009700021F0C538D04501F13AC0F80182818823C1 -:1009800041F01092490182E01EC0C438E0E5DE0764 -:1009900059F580914901811106C086E20E949111AA -:1009A00086E20E94591282E01CC0C438F0E5DF07DD -:1009B00041F3C538D045D9F4F8018281882331F05C -:1009C00010924A0180E20E94A8121DC080914A0143 -:1009D000811106C087E20E94911187E20E9459129C -:1009E00080E20E94AF120FC0C538D04529F381E0E4 -:1009F0008093490180934A01C801DF91CF911F91F3 -:100A00000F910C943D0380E0DF91CF911F910F91E6 -:100A100008950C9490030C943B0308959CE0799FF7 -:100A2000F001112490E3899FE00DF11D1124E60FE0 -:100A3000F11DEE0FFF1FE459FE4F8591949108952B -:100A4000880F991FFC01E451F0408591949108951D -:100A5000880F991FFC01E459FE4F859194910895E8 -:100A60000F931F93CF93DF93EC01811521E392073E -:100A7000A0F5C11580E3D80708F0D7C0C83ED1055E -:100A8000D8F4C03ED10508F003C2C83AD10578F4C5 -:100A9000C53AD10508F06AC0C130D10509F463C078 -:100AA00008F4F3C1C430D10508F0F2C1EEC1CB3B6C -:100AB000D10508F466C0E9C1C11590E2D90708F074 -:100AC000AFC0C11521E0D20708F0E2C1C03FD10597 -:100AD00008F4DBC18E0110651BC2C03880E5D80761 -:100AE00000F5C03790E5D90708F0A3C0C11520E58F -:100AF000D20709F4ACC050F4CE01905480319F402D -:100B000008F0C3C1DF708E01106A02C2C13080E5F7 -:100B1000D80709F4AAC0C43190E5D90708F4ABC0DE -:100B2000B4C1C33820E5D20709F48EC050F4C138EF -:100B300090E5D90709F482C008F083C000E011ED08 -:100B4000E7C1C03181E5D80708F49FC1C11597E519 -:100B5000D90708F432C1CE0190578115904108F0B1 -:100B600094C1DF708FC101E010E0D2C1C53AD10558 -:100B700009F490C1C63AD10509F08FC102E810E42A -:100B8000C7C1C83AD10509F48BC1C93AD10509F4E6 -:100B90008AC1CA3AD10509F489C1CB3AD10509F411 -:100BA00088C1CC3AD10509F487C1CD3AD10509F401 -:100BB00086C1C03BD10509F485C1CE3AD10509F4FF -:100BC00084C1CF3AD10509F483C1C13BD10509F4F1 -:100BD00082C1C23BD10509F481C1C33BD10509F4EF -:100BE00080C1C43BD10509F47FC1C53BD10509F4DF -:100BF0007EC1C63BD10509F47DC1C73BD10509F4CF -:100C00007CC1C83BD10509F47BC1C93BD10509F4BE -:100C10007AC1CA3BD10509F479C100E014E478C176 -:100C2000CE019F700E94280574C1DD278E01106CD3 -:100C30006FC1CF70DD278E01146D6AC100E010ED29 -:100C400067C100E012ED64C100E013ED61C10E94D4 -:100C50003C158FEF94E32CE0815090402040E1F769 -:100C600000C000000E94931C53C18091DB01816091 -:100C70008093DB014DC10E94EF1C811102C00E94D4 -:100C8000D01C0E94071D90E09093FA018093F90117 -:100C9000C23080E5D80721F48091F901816086C0D7 -:100CA000C43090E5D90721F48091F90182607EC0BB -:100CB000C63020E5D20721F48091F901846076C026 -:100CC000C83080E5D80719F48091F90127C0CA30EF -:100CD00090E5D90721F48091F901806167C0CC309B -:100CE00020E5D20721F48091F90180625FC0CE3007 -:100CF00080E5D80721F48091F901806457C0C031A4 -:100D000090E5D90721F48091F90180684FC0C23184 -:100D100020E5D20729F48091F9018460886046C0FB -:100D2000C33080E5D80721F48091F9018E7F3EC061 -:100D3000C53090E5D90721F48091F9018D7F36C047 -:100D4000C73020E5D20721F48091F9018B7F2EC0B6 -:100D5000C93080E5D80719F48091F90126C0CB305D -:100D600090E5D90721F48091F9018F7E1FC0CD3025 -:100D700020E5D20721F48091F9018F7D17C0CF3093 -:100D800080E5D80721F48091F9018F7B0FC0C13134 -:100D900090E5D90721F48091F9018F7707C0C3311D -:100DA000D04531F48091F9018B7F877F8093F901E1 -:100DB0008091F9010E940B1DABC08D2F99278F7078 -:100DC000992781309105D9F49E012370332702C001 -:100DD000880F991F2A95E2F79C688E0144E0000F66 -:100DE000111F4A95E1F700271370802B912B53E0D8 -:100DF000CC0FDD1F5A95E1F7C076DD272FC082307A -:100E0000910531F4DC2FCC278E01016F106A80C070 -:100E10008330910569F4CE018370992701E010E0D9 -:100E200002C0000F111F8A95E2F7C8019C680FC02D -:100E300084309105B9F4CE018370992701E010E068 -:100E400002C0000F111F8A95E2F7C8019A6823E0DB -:100E5000CC0FDD1F2A95E1F7C07ED7708C010C2BDB -:100E60001D2B56C08530910531F4DC2FCC278E0127 -:100E7000046F106A4DC0069709F04AC0CF71DD2794 -:100E8000DC2FCC278E01106243C000E010E040C090 -:100E90008E013EC001E810E43BC003E810E438C016 -:100EA00002EE14E435C009EE14E432C00AEE14E494 -:100EB0002FC005EB14E42CC006EB14E429C007EBAB -:100EC00014E426C00CEC14E423C00DEC14E420C0A0 -:100ED00003E815E41DC00AE815E41AC002E915E4A8 -:100EE00017C004E915E414C001E216E411C003E2DE -:100EF00016E40EC004E216E40BC005E216E408C0D6 -:100F000006E216E405C007E216E402C00AE216E4AF -:100F1000C801DF91CF911F910F9108959CE0799FB7 -:100F2000F001112490E3899FE00DF11D1124E60FDB -:100F3000F11DEE0FFF1FE459FE4F85919491803E05 -:100F40009105E0F4803C910558F58133910509F451 -:100F50006FC048F48932910509F463C08A32910563 -:100F600009F46DC072C089339105E9F082389105AA -:100F7000D1F08533910509F44DC067C0833E9105DA -:100F800081F138F4803E9105B9F0823E9105D9F0A7 -:100F90005CC0863E910561F1873E9105A1F155C087 -:100FA0000E94200508952091F90120FD02C021FF33 -:100FB0004CC080EE90E049C08091F90180FFF9CFEC -:100FC00089E390E042C08091F90182FF0EC08091D8 -:100FD000F90184FF03C080E090E037C083EE90E029 -:100FE00034C08091F90182FFF2CF82EE90E02DC0F3 -:100FF0008091F90183FF0BC08091F90184FDEBCF53 -:1010000087EE90E022C08091F90183FFF5CF86EE54 -:1010100090E01BC08091F90185FF07C089E290E054 -:1010200014C08091F90185FFF9CF85E390E00DC0F0 -:101030008091F90186FF07C08AE290E006C08091A6 -:10104000F90186FFF9CF81E390E00E943005089511 -:10105000CF92DF92EF92FF920F931F9301E010E087 -:1010600020E030E06801790104C0CC0CDD1CEE1CEE -:10107000FF1C8A95D2F704C0000F111F221F331FD7 -:101080006A95D2F70C291D292E293F29C090BE014F -:10109000D090BF01E090C001F090C101C022D122E8 -:1010A000E222F322842FC016D106E206F30641F4B1 -:1010B0001F910F91FF90EF90DF90CF900C947919D2 -:1010C0001F910F91FF90EF90DF90CF900C949A19A1 -:1010D0000C943F03E82FF0E0EF5DFE4F8081E82F96 -:1010E000EF70F0E082958F7021E030E0A90102C03E -:1010F000440F551F8A95E2F740A308950F931F935D -:10110000CF93DF9385B7806885BF85B7806885BF3B -:10111000C3E0D0E001E010E0FE01EF5DFE4F808112 -:10112000E82FEF70F0E021A182958F70A80102C036 -:10113000440F551F8A95E2F7CA01822B81A38C2F99 -:101140000E946A08219740F78BE090E061E070E030 -:10115000FC01EB5EFE4F2081E22FEF70F0E042A138 -:1011600022952F70DB0102C0AA0FBB1F2A95E2F760 -:101170009D01242B22A3019758F7DF91CF911F9156 -:101180000F910C940905EF92FF920F931F93CF9349 -:10119000DF930DE511E0C3E0EE24E394F12CD5E0FC -:1011A0008C2F0E946A088BE090E040E050E0FC0148 -:1011B000EB5EFE4F6081E62FEF70F0E020A130E0A3 -:1011C00062956F7002C0359527956A95E2F720FD0C -:1011D00009C09701082E02C0220F331F0A94E2F7BC -:1011E000422B532B019718F7F801929182918F01AE -:1011F0008417950721F051834083D09300018C2FF1 -:101200000E946A08C15060F68091000187FD2CC0E1 -:101210008150809300018F3F39F08FE99FE0019763 -:10122000F1F700C0000020C080915B0190915C014B -:1012300090936401809363018091590190915A01C8 -:1012400090936201809361018091570190915801C0 -:101250009093600180935F018091550190915601B8 -:1012600090935E0180935D010E940B0581E0DF9108 -:10127000CF911F910F91FF90EF900895E82FF0E02C -:10128000EE0FFF1FE35AFE4F80819181089508956C -:101290000F931F93CF9305E611E0C0E0F801929100 -:1012A00082918F010E94B01BC80FF1E00D351F071E -:1012B000A9F78C2FCF911F910F91089580917501FF -:1012C0000895CF93DF9300D01F92CDB7DEB79C0176 -:1012D0008091F001843019F593E099833B832A8350 -:1012E0009093E9008FEF9091E800815095FD06C042 -:1012F00095ED9A95F1F700008111F5CF8091E80006 -:1013000085FF0DC040E050E063E070E0CE01019643 -:101310000E94C20B8091E8008E778093E8000F90C6 -:101320000F900F90DF91CF910895CF93DF9300D06E -:101330001F92CDB7DEB72091F001243021F522E0D5 -:1013400029839B838A8383E08093E9008FEF9091C8 -:10135000E800815095FD06C095ED9A95F1F70000E3 -:101360008111F5CF8091E80085FF0DC040E050E08D -:1013700063E070E0CE0101960E94C20B8091E8000C -:101380008E778093E8000F900F900F90DF91CF91B0 -:1013900008952091F0012430F1F422E02093E90037 -:1013A0002FEF3091E800215035FD06C035ED3A951C -:1013B000F1F700002111F5CF2091E80025FF0BC0C7 -:1013C00040E050E065E070E00E94C20B8091E800D0 -:1013D0008E778093E8000895CF93DF93EC0190918E -:1013E000F001943009F046C080910B018823D9F0B8 -:1013F00080910C018823B9F09093E9008FEF9091D0 -:10140000E800815095FD06C095E19A95F1F700003E -:101410008111F5CF8091E80085FF2CC040E050E0BD -:1014200060E170E017C081E08093E9008FEF909158 -:10143000E800815095FD06C095ED9A95F1F7000002 -:101440008111F5CF8091E80085FF14C040E050E0A5 -:1014500068E070E0CE010E94C20B8091E8008E77B8 -:101460008093E80080E1FE01A5E6B1E001900D92D5 -:101470008A95E1F7DF91CF9108958091EF01811175 -:1014800009C00E94570D0E94B40D8091E200846053 -:101490008093E20008951092EF0108950895089551 -:1014A0000C94FB1B42E061EC81E00E94D10C42E015 -:1014B00061EC82E00E94D10C42E061EC83E00E948A -:1014C000D10C42E161EC84E00C94D10C8091F201EA -:1014D000833009F455C030F4813071F0823009F462 -:1014E0008EC008958A3009F47AC08B3009F460C048 -:1014F000893009F09CC020C08091F101813A09F047 -:1015000096C08091E800877F8093E8008091F50184 -:101510009091F601892B21F460E185E691E003C00A -:1015200060E080E090E070E00E940D0C8091E800A7 -:101530008B778093E80008958091F101813209F062 -:1015400076C08091F5019091F601009719F003970C -:1015500009F06DC08091E800877F8093E80080915A -:10156000E80082FD05C08091F0018111F8CF5FC0D5 -:101570008091F100809375018091E8008B7753C0D2 -:101580008091F101813A09F052C08091F50190916A -:10159000F601892B09F04BC08091E800877F80938A -:1015A000E8008091E80080FFFCCF80910B0136C0FD -:1015B0008091F1018132D9F58091F5019091F60188 -:1015C000892BA9F58091E800877F8093E8000E942D -:1015D000060D8091F30180930B010C943C158091D2 -:1015E000F101813221F58091E800877F8093E80046 -:1015F0000E94060D8091F4018093760108958091F8 -:10160000F101813AA1F48091E800877F8093E8009E -:101610008091E80080FFFCCF809176018093F100FB -:101620008091E8008E778093E8000C94060D089571 -:1016300084B7877F84BF88E10FB6F89480936000F9 -:10164000109260000FBE90E080E80FB6F89480938F -:101650006100909361000FBE0E94A9100E94570D77 -:101660000E94B40D8091E20084608093E20078943F -:101670000E943A100E94AB1081E091E00E94551048 -:101680008091F001853069F40E94BC1B8091EE01CD -:101690008823B1F30E94EA1B882391F30E94AC0BCC -:1016A000EFCF0E94B310ECCF292F33272330310521 -:1016B000C9F064F42130310581F02230310509F0A0 -:1016C00043C08DE690E028E634E042C02132310587 -:1016D000F1F02232310541F137C082E190E025ED91 -:1016E00034E036C099278130910541F08230910570 -:1016F00041F0892B49F5E4E6F4E005C0E6E3F4E0C7 -:1017000002C0ECE0F4E0849190E09F0121C06430DD -:10171000D8F4E62FF0E0EE0FFF1FEF5CFE4F2081C4 -:10172000318189E090E014C0643070F470E0FB0116 -:10173000EE0FFF1FE75DFE4F20813181FB01EB5D66 -:10174000FE4F808190E004C080E090E020E030E037 -:10175000FA0131832083089580E189BD82E189BD4A -:1017600009B400FEFDCF8091D8008F7D8093D80012 -:101770008091E00082608093E0008091E00081FD34 -:10178000FCCF0895CF92DF92EF92FF920F931F93B9 -:10179000CF93DF93EC018B016A010E94250D81112B -:1017A00033C0C114D10439F0F60180819181081B46 -:1017B000190BC80FD91FE12CF12C0115110519F1D6 -:1017C0008091E80085FD16C08091E8008E778093B7 -:1017D000E800C114D10449F0F60180819181E80E3E -:1017E000F91EF182E08285E00FC00E94250D88235A -:1017F00021F30AC089918093F10001501109FFEF94 -:10180000EF1AFF0ADACF80E0DF91CF911F910F919D -:10181000FF90EF90DF90CF9008952091F7013091E5 -:10182000F8012617370748F06115710539F4209142 -:10183000E8002E772093E80001C0B90140E061156F -:101840007105A9F12091F001222309F443C025304C -:1018500009F442C02091E80023FD40C02091E80037 -:1018600022FD32C02091E80020FFE9CF4091F30033 -:101870002091F20030E0342BFC01CF01611571059D -:1018800059F02830310540F481918093F100615086 -:1018900071092F5F3F4FF1CF41E02830310509F04A -:1018A00040E02091E8002E772093E800C8CF411156 -:1018B000C9CF0AC08091F001882361F0853061F0C2 -:1018C0008091E80083FD0AC08091E80082FFF2CF9A -:1018D00080E0089582E0089583E0089581E008950E -:1018E0002091F7013091F8012617370748F061156C -:1018F000710539F42091E8002E772093E80001C0AB -:10190000B901FC0120E06115710591F18091F001B0 -:10191000882309F440C0853009F43FC08091E80075 -:1019200083FD3DC08091E80082FD2FC08091E800DA -:1019300080FFE9CF2091F3008091F20090E0922B9C -:101940006115710559F08830910540F42491209378 -:10195000F1003196615071090196F2CF21E00897AC -:1019600009F020E08091E8008E778093E800CBCFEB -:101970002111CCCF0AC08091F001882361F085301D -:1019800061F08091E80083FD0AC08091E80082FF49 -:10199000F2CF80E0089582E0089583E0089581E029 -:1019A0000895982F973058F59093E900981739F0DB -:1019B0007091EC002091ED005091F00003C0242FB5 -:1019C000762F50E021FF19C03091EB003E7F30931D -:1019D000EB003091ED003D7F3093ED003091EB0056 -:1019E00031603093EB007093EC002093ED00509346 -:1019F000F0002091EE0027FF07C09F5FD3CF8F70CC -:101A00008093E90081E0089580E008958091F101DC -:101A100087FF11C08091E80082FD05C08091F00130 -:101A20008111F8CF11C08091E8008B770BC08091B5 -:101A3000F001882349F08091E80080FFF8CF809181 -:101A4000E8008E778093E80008952091E4003091BB -:101A5000E50095E64091EC00842F817040FF22C0A4 -:101A60008091E80080FD1CC08091F001882391F0F6 -:101A7000853091F08091EB0085FD10C04091E4002D -:101A80005091E5004217530729F39A01915011F73D -:101A900084E0089582E0089583E0089581E0089548 -:101AA00080E008954091E80042FFDECF08950E9453 -:101AB000C50D0E94CD0DE0EEF0E080818160808355 -:101AC000E8EDF0E080818F77808319BCA7EDB0E06E -:101AD0008C918E7F8C9380818F7E80831092EF011A -:101AE00008950F931F93CF93DF930E94C50D0E941B -:101AF000CD0DC8EDD0E088818F778883888180689C -:101B0000888388818F7D888319BC1092F0011092A0 -:101B1000EC011092EE011092ED0100EE10E0F801E0 -:101B200080818B7F808388818160888342E060E050 -:101B300080E00E94D10CE1EEF0E080818E7F808316 -:101B4000E2EEF0E080818160808380818860808324 -:101B5000F80180818E7F8083888180618883DF9116 -:101B6000CF911F910F910895E8EDF0E080818F7E75 -:101B70008083E7EDF0E080818160808384E082BF34 -:101B800081E08093EF010C94710DE8EDF0E080812D -:101B90008E7F80831092E20008951092DA001092F6 -:101BA000E10008951F920F920FB60F9211242F9308 -:101BB0003F934F935F936F937F938F939F93AF93D5 -:101BC000BF93EF93FF938091E10082FF0BC0809160 -:101BD000E20082FF07C08091E1008B7F8093E100EB -:101BE0000E9439108091DA0080FF1FC08091D800D8 -:101BF00080FF1BC08091DA008E7F8093DA00809195 -:101C0000D90080FF0DC080E189BD82E189BD09B4A2 -:101C100000FEFDCF81E08093F0010E943D0A05C0E7 -:101C200019BC1092F0010E944B0A8091E10080FFE4 -:101C300019C08091E20080FF15C08091E2008E7F84 -:101C40008093E2008091E20080618093E2008091C5 -:101C5000D80080628093D80019BC85E08093F001A1 -:101C60000E944F0A8091E10084FF30C08091E20021 -:101C700084FF2CC080E189BD82E189BD09B400FEEA -:101C8000FDCF8091D8008F7D8093D8008091E100B6 -:101C90008F7E8093E1008091E2008F7E8093E2004E -:101CA0008091E20081608093E2008091EC018823C2 -:101CB00011F084E007C08091E30087FD02C081E05D -:101CC00001C083E08093F0010E94500A8091E100FE -:101CD00083FF29C08091E20083FF25C08091E1004D -:101CE000877F8093E10082E08093F0011092EC0105 -:101CF0008091E1008E7F8093E1008091E2008E7FF1 -:101D00008093E2008091E20080618093E20042E0F3 -:101D100060E080E00E94D10C8091F00088608093A8 -:101D2000F0000E944E0AFF91EF91BF91AF919F91F9 -:101D30008F917F916F915F914F913F912F910F9074 -:101D40000FBE0F901F9018951F920F920FB60F9213 -:101D500011242F933F934F935F936F937F938F93B0 -:101D60009F93AF93BF93CF93DF93EF93FF93C09174 -:101D7000E900CF708091EC00D82FD17080FDD0E8C1 -:101D80001092E9008091F000877F8093F0007894B2 -:101D90000E94E80E1092E9008091F0008860809324 -:101DA000F000CD2BCF70C093E900FF91EF91DF9150 -:101DB000CF91BF91AF919F918F917F916F915F91E3 -:101DC0004F913F912F910F900FBE0F901F9018953C -:101DD0001F93CF93DF93CDB7DEB7AA970FB6F894D2 -:101DE000DEBF0FBECDBFE1EFF1E088E08E0F909136 -:101DF000F10091938E13FBCF0E94660A8091E80058 -:101E000083FF1FC18091F1019091F201492F50E0B1 -:101E10004A30510508F015C1FA01E959FF4F0C94F9 -:101E20003123803881F0823809F00BC18091F501AF -:101E30008F708093E9008091EB0085FB882780F903 -:101E40001092E90006C08091ED019091EE01911190 -:101E500082609091E800977F9093E8008093F10072 -:101E60001092F100C8C0282F2D7F09F0EAC0882306 -:101E700019F0823061F0E5C08091F301813009F002 -:101E8000E0C0933009F080E08093EE012BC0809198 -:101E9000F301811127C08091F5018F7009F4D1C041 -:101EA0008093E9002091EB0020FF1CC0933021F4C7 -:101EB0008091EB00806214C09091EB009061909350 -:101EC000EB0021E030E0A90102C0440F551F8A95C4 -:101ED000E2F74093EA001092EA008091EB008860FC -:101EE0008093EB001092E9008091E800877F86C024 -:101EF0008111A7C01091F3011F778091E3008078D2 -:101F0000812B8093E3008091E800877F8093E80035 -:101F10000E94060D8091E80080FFFCCF8091E300D5 -:101F200080688093E300111102C082E001C083E069 -:101F30008093F00186C08058823008F082C0809182 -:101F4000F3019091F4018C3D53E0950779F583E01E -:101F50008A838AE289834FB7F894DE01139620E0E2 -:101F60003EE051E2E32FF0E050935700E49120FF70 -:101F700003C0E295EF703F5FEF708E2F90E0EA3084 -:101F800010F0C79601C0C0968D939D932F5F2431AA -:101F900049F74FBF8091E800877F8093E8006AE2AD -:101FA00070E0CE0101960E940D0C14C0AE014F5F8F -:101FB0005F4F6091F5010E94540BBC01009709F43A -:101FC00040C09091E800977F9093E80089819A81C2 -:101FD0000E94700C8091E8008B778093E80031C0FC -:101FE000803879F58091E800877F8093E8008091C0 -:101FF000EC018093F1008091E8008E778093E800F7 -:102000000E94060D1EC081111CC09091F3019230F8 -:10201000C0F48091E800877F8093E8009093EC0102 -:102020000E94060D8091EC01811106C08091E300B1 -:1020300087FD02C081E001C084E08093F0010E942E -:10204000520A8091E80083FF0AC08091E800877FF0 -:102050008093E8008091EB0080628093EB00AA9669 -:102060000FB6F894DEBF0FBECDBFDF91CF911F91A9 -:1020700008950895CF938091F0018823A1F0C09135 -:10208000E900CF709091EC00892F817090FD80E87D -:10209000C82B1092E9008091E80083FD0E94E80EB1 -:1020A000CF70C093E900CF91089590937C01809305 -:1020B0007B010895E0917B01F0917C01309721F044 -:1020C0000190F081E02D099480E00895E0917B017A -:1020D000F0917C01309721F00280F381E02D09948A -:1020E0000895E0917B01F0917C01309721F004800C -:1020F000F581E02D099408952091790130917A01BC -:102100008217930771F090937A0180937901E0919F -:102110007B01F0917C01309721F00680F781E02D62 -:1021200009940895209177013091780182179307DF -:1021300071F09093780180937701E0917B01F091A9 -:102140007C01309721F00084F185E02D09940895F9 -:1021500008950C94A8100E942F1C0E947E080E94D3 -:10216000B51C0C9460215F926F927F928F929F9228 -:10217000AF92BF92CF92DF92EF92FF920F931F9395 -:10218000CF93DF9300D000D01F92CDB7DEB70E946F -:10219000C30896E8C92E91E0D92E03E010E0AA24E6 -:1021A000A394B12C502E802F0E943E094C01F601C1 -:1021B000729062906F016826792661147104A1F40F -:1021C0000150110978F78FEF89838A831B820E945F -:1021D000381C8160782F9D838C8349815A816B8163 -:1021E0008D810E94631138C08091DB0181FD0E94C6 -:1021F00047092BE030E07501022E02C0EE0CFF1CF7 -:102200000A94E2F7C70186219721892B09F12983D6 -:102210005A828E209F2091E0892809F490E09B83C8 -:102220000E94381C8160782F9D838C8349815A815C -:102230006B818D810E946311000F111FF801E2581C -:10224000FE4F80819181E826F926F182E08204C068 -:102250002150310980F6B4CF0E94931E10917D0168 -:102260000E945A101817D1F00E945A1080937D01D5 -:102270000F900F900F900F900F90DF91CF911F91C3 -:102280000F91FF90EF90DF90CF90BF90AF909F9015 -:102290008F907F906F905F900C9468080F900F90D4 -:1022A0000F900F900F90DF91CF911F910F91FF90A2 -:1022B000EF90DF90CF90BF90AF909F908F907F90E6 -:1022C0006F905F900895CF93DF93CDB7DEB72B97D4 -:1022D0000FB6F894DEBF0FBECDBF4F835887698716 -:1022E0007A878B87DE01119686E0FD0111928A952F -:1022F000E9F785E0FE01379601900D928A95E1F7A6 -:1023000049815A816B817C818D819E810E94DA177F -:102310002B960FB6F894DEBF0FBECDBFDF91CF91E5 -:102320000895CF93882309F4C2C0C82F823859F486 -:102330000E945A1081FDBBC089E30E94B41A0E941A -:10234000811B89E30CC0833879F40E945A1080FD08 -:10235000AEC083E50E94B41A0E94811B83E50E94EF -:10236000F61ACF910C94811B843859F40E945A10AC -:1023700082FD9DC087E40E94B41A0E94811B87E4FD -:10238000EECF8CEF8C0F813A48F48C2F0E94C8203E -:1023900081118DC08C2F0E94B41AE3CF80E28C0F84 -:1023A000883048F4C77081E001C0880FCA95EAF709 -:1023B0000E943A1BD6CF8BE58C0F833078F4C53A58 -:1023C00029F0C63A31F083E890E005C081E890E05A -:1023D00002C082E890E0CF910C947C1088E58C0FCD -:1023E000833108F064C0C83A39F1C93A41F1CA3AB8 -:1023F00049F1CB3A51F1CC3A59F1CD3A61F1C03BB8 -:1024000069F1CE3A71F1CF3A79F1C13B81F1C23B2A -:1024100089F1C33B91F1C43B99F1C53BA1F1C63BA6 -:10242000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B06 -:10243000C9F180E090E038C082EE90E035C089EECE -:1024400090E032C08AEE90E02FC085EB90E02CC087 -:1024500086EB90E029C087EB90E026C08CEC90E002 -:1024600023C08DEC90E020C083E891E01DC08AE895 -:1024700091E01AC082E991E017C084E991E014C0AC -:1024800081E292E011C083E292E00EC084E292E029 -:102490000BC085E292E008C086E292E005C087E2C8 -:1024A00092E002C08AE292E0CF910C949210CF9118 -:1024B0000895882309F44BC0823859F40E945A10B9 -:1024C00081FF45C089E30E94B41A0E94811B89E301 -:1024D0000CC0833871F40E945A1080FF38C083E525 -:1024E0000E94B41A0E94811B83E50E94F61A0C9484 -:1024F000811B843859F40E945A1082FF28C087E457 -:102500000E94B41A0E94811B87E4EFCF9CEF980FC2 -:10251000913A58F390E2980F983050F4877091E018 -:1025200001C0990F8A95EAF7892F0E94401BDFCFDF -:102530009BE5980F933020F480E090E00C947C10A1 -:10254000885A833120F480E090E00C949210089532 -:10255000882321F00E943A1B0C94811B0895882344 -:1025600021F00E94401B0C94811B08957F928F9252 -:102570009F92AF92BF92CF92DF92EF92FF920F9312 -:102580001F93CF93DF931F92CDB7DEB77C01C62E8A -:10259000772EFC01058102950F70128111110E94A6 -:1025A000571B0E94AD1A882379F0112369F080E24D -:1025B0008C0D883048F082E00E94961A0E94AD1A75 -:1025C00091E0D82ED92601C0D12CE72DE295EF70ED -:1025D000F0E0EF58FF4F0C943123872D807F072DBB -:1025E0000F70882311F00295007F112389F00023DA -:1025F00009F499C180E28C0D883020F4802F0E946C -:102600003A1B03C0802F0E944A1B0E94811B8BC172 -:102610008C2D0E945912002309F4C3C180E28C0D55 -:10262000883020F4802F0E94401B03C0802F0E941E -:10263000501B0E94811BB5C1872D807F972D9F70F5 -:10264000803211F4892F03C0892F8295807FCC209E -:1026500021F0F1E0CF16A1F01DC0112339F00023C5 -:1026600019F1013009F50E946A1B9BC1002319F082 -:10267000013009F496C189830E946D1B898110C1C4 -:10268000112321F0063008F08CC10EC0053008F08F -:1026900088C106C1112359F0002331F0F70195815B -:1026A00090FF41C19F7095830E94A8127AC10023B8 -:1026B00009F4F6C03EC1872D86958695837090E01B -:1026C000009719F0019761F06CC1112321F08C2D56 -:1026D000972D937002C080E090E00E947C1061C151 -:1026E000112321F08C2D972D937002C080E090E093 -:1026F0000E94921056C18C2D112319F00E949B1D2F -:1027000002C00E94031E0E94881E4BC1872D837049 -:1027100009F052C0111145C18C2D829586958770A4 -:10272000880F880F9C2D9F70892E912CA12CB12C85 -:10273000082E04C0880C991CAA1CBB1C0A94D2F752 -:10274000C4FE14C00FE010E020E030E0B901A801A1 -:1027500004C0440F551F661F771F8A95D2F7CB011F -:10276000BA01609570958095909503C060E070E027 -:10277000CB01272D26952695237030E02230310598 -:1027800069F02330310589F0682979298A299B2944 -:102790002130310571F00E94221903C1682979297D -:1027A0008A299B290E943E19FCC00E942219C5015A -:1027B000B4010E940619F5C0112319F0872D81700C -:1027C00001C08695882309F4ECC08C2D82958695EE -:1027D0008770880F880F9C2D9F70892E912CA12CBB -:1027E000B12C082E04C0880C991CAA1CBB1C0A948E -:1027F000D2F7C4FE14C00FE010E020E030E0B901D1 -:10280000A80104C0440F551F661F771F8A95D2F791 -:10281000CB01BA01609570958095909503C060E0FA -:1028200070E0CB01272D269526952370422F50E08E -:102830004230510569F04330510589F06829792902 -:102840008A299B294130510571F00E94FC19A9C0C9 -:10285000682979298A299B290E94181AA2C00E94F6 -:10286000FC19C501B4010E94E0199BC08C2D90E0B9 -:10287000FC01E05EF109E531F10508F050C0EF57C9 -:10288000FF4F0C9431230C2D0F70872D8F71112366 -:1028900021F00E947919802F07CF0E949A19802F6A -:1028A0000E94AF127EC0112341F0053008F079C0BC -:1028B000872D8F710E94BF1974C0063008F071C057 -:1028C000F7CF112339F0872D8F710E94791969C0D4 -:1028D0001123C9F3872D8F710E949A1962C01123A9 -:1028E00029F0872D8F710E9464195BC00E945A19CC -:1028F00058C0112351F0172D1F71812F0E94791993 -:1029000063E0812F0E948D1A4CC081E00E94961ACC -:10291000023008F446C082E00E94961A42C0112399 -:1029200031F0002381F28C2D0E9491113AC00023D6 -:1029300089F28C2D0E94591234C0472D4F706C2D96 -:10294000C7010E94F0030E947E182BC0111129C0FC -:10295000472D4F7050E042305105B9F04CF441150D -:10296000510581F041305105E1F40E94882119C0E0 -:102970004330510569F04430510599F48C2D0E9483 -:10298000DA210FC00E9471210CC00E94A42109C04D -:102990000E94B72106C0472D4F706C2DC7010E94C1 -:1029A0000D05DD20F9F00E94891A80FD1BC0F7019A -:1029B00012820E94831A0E947919C7010E94011590 -:1029C0000E94831A0F90DF91CF911F910F91FF907A -:1029D000EF90DF90CF90BF90AF909F908F907F90BF -:1029E0000C949A190F90DF91CF911F910F91FF9046 -:1029F000EF90DF90CF90BF90AF909F908F907F909F -:102A000008950F931F93CF93DF93EC0188819981F1 -:102A10002B813C81232BB9F09F3F11F48F3F99F01C -:102A2000CE010E946104882371F0688179818A81D6 -:102A30000E947F1A8C010E94341A0E94FB18B80170 -:102A4000CE010E94B612DF91CF911F910F91089590 -:102A50000E94571B0E94671B0E942C1B0E94811B17 -:102A60000E94391F0E94881E80E090E00E947C1026 -:102A700080E090E00C9492100E94471B0C94281563 -:102A80000E94741A292F22952F7030E02C303105C6 -:102A90004CF42A3031056CF42250310922303105D2 -:102AA000A8F407C02C30310569F02F30310551F002 -:102AB0000DC0803F69F018F4803E40F409C0843FA7 -:102AC00029F406C093FB882780F9089580E00895D3 -:102AD00081E00895CF93DF9300D000D01F92CDB74F -:102AE000DEB70F900F900F900F900F90DF91CF9166 -:102AF0000895CF93DF9300D000D000D0CDB7DEB7DC -:102B000026960FB6F894DEBF0FBECDBFDF91CF91F2 -:102B100008951F93CF93DF93C091860116E08091B3 -:102B20008701C81799F0D0E01C9FF0011D9FF00DA0 -:102B30001124E857FE4F4081518162817381848165 -:102B400095810E9479152196C770E9CFDF91CF91C9 -:102B50001F9108954091B8015091B9016091BA0157 -:102B60007091BB018091BC019091BD010C947915CD -:102B70008091BD0182958F7009F054C08091BA0197 -:102B8000882309F44FC080918601A091870160914C -:102B9000B8017091B9014091BB015091BC01B6E000 -:102BA0008A1709F43FC090E041155105C1F17F3FFC -:102BB00011F46F3FA1F1B89FF001B99FF00D1124FE -:102BC000E857FE4F218172132AC02081621327C06B -:102BD0002281211124C0238134812417350710F468 -:102BE00021503109241B350B283C3105C0F42091BC -:102BF000BD012F7020612093BD0126E0289FF001C8 -:102C0000299FF00D1124E357FE4F80818F70806162 -:102C1000808388EB91E00E9401150C948915019640 -:102C20008770BECF0895CF92DF92EF92FF920F93FD -:102C30001F93CF93DF93CDB7DEB762970FB6F894AB -:102C4000DEBF0FBECDBF8C0185E0F801DE011D9611 -:102C500001900D928A95E1F7D8014C9111965C9103 -:102C6000119712966C9112971396CD90DC90149751 -:102C70003091B8017091B9018091BB019091BC0174 -:102C8000009709F46BC17F3F19F43F3F09F466C117 -:102C9000E090BA01EE2009F4C0C02091BD01C81631 -:102CA000D90628F0F601E81BF90BCF0104C0809586 -:102CB00090958C0D9D1DFF24F394883C910578F030 -:102CC000F12C207F09F0C6C07C2DD98AC88A898959 -:102CD0000E946A1588EB91E00E940115B1C0822F15 -:102CE000807F09F046C0751314C0341312C06111FF -:102CF00010C02F7020612093BD010E94AA1588EB9F -:102D000091E00E9401158091BD01D80115968C9328 -:102D10002EC0CD2819F15F3F11F44F3FF9F0F62E88 -:102D200061111CC0809186012091870136E08217D5 -:102D300009F45AC090E0389FF001399FF00D11243A -:102D4000E857FE4F7181571306C07081471303C0C7 -:102D50007281711103C001968770E9CFF62E662348 -:102D600009F418C18091BD0181608093BD01F12CEF -:102D700011C1751308C0341306C0611104C08091DD -:102D8000BD01D801C3C04D875E878D859E856A8B46 -:102D90000E9440156A898823E1F16623D1F12091D0 -:102DA000BD01822F82958F7090E0029774F0809120 -:102DB000B8019091B90198878F831986DB86CA86FE -:102DC0002C87CE0107960E94011586E0F801A8EB3A -:102DD000B1E001900D928A95E1F70E94B8150E942A -:102DE000AA15FF24F394D6C04D875E878D859E85F6 -:102DF0000E94741A292F22952F7030E0223031055D -:102E00000CF0BCC09F7009F0B6C0805E883008F43A -:102E1000C1C0C8010E940115E4CFC816D90608F444 -:102E200053C0F601E81BF90BCF01883C910508F46B -:102E300050C0F12C7C2DD98AC88A89890E946A15D4 -:102E4000E8EBF1E086E0DF011D928A95E9F70E9448 -:102E5000AA15A0C0751314C0341312C0611110C09C -:102E60008091BD01F8018583C8010E94011586E0AB -:102E7000E8EBF1E0DF011D928A95E9F7FE2C8AC0AC -:102E80004D875E878D859E856A8B0E9440156A8975 -:102E9000882309F4BECF662309F4BBCF2091BD017E -:102EA000822F82958F7090E002970CF48ECF8091E4 -:102EB000B8019091B9019A8389831B82DD82CC820B -:102EC0002E83CE0101967FCF809590958C0D9D1D10 -:102ED000ACCFF62E662309F49CCF75132EC03413A5 -:102EE0002CC02091BD0120FD1FC0822F82958F70C4 -:102EF000D9F0D80115962C9315978F3049F08F5F34 -:102F0000982F9295907F822F8F70892B15968C9396 -:102F1000C8010E94011586E0F801A8EBB1E001901C -:102F20000D928A95E1F793CF86E0F801A8EBB1E026 -:102F300001900D928A95E1F72DC04D875E878D85B2 -:102F40009E850E944015811140CF8091BD01816016 -:102F50008093BD01C8010E9401151CC0662309F4BD -:102F600058CF4D875E878D859E850E9440158823AA -:102F700009F44FCF2ACF811148CF0CC0243031053E -:102F80000CF047CF9F7009F440CFF8019581907FF6 -:102F900009F03BCF8F2D62960FB6F894DEBF0FBEBF -:102FA000CDBFDF91CF911F910F91FF90EF90DF90F8 -:102FB000CF9008951F93CF93DF93CDB7DEB72C97B3 -:102FC0000FB6F894DEBF0FBECDBF4F835887698719 -:102FD0007A878B879C87CE0107960E9413168823D9 -:102FE00069F08F8198852A853B85232BF1F19F3FDE -:102FF00009F063C08F3F09F060C037C086E0FE0172 -:103000003796DE01119601900D928A95E1F76F8156 -:103010007885EA85FB85309741F17F3F11F46F3F5A -:1030200021F12091870130E0C9010196877099272D -:103030004091860150E08417950709F447C06983E1 -:103040007A83FD83EC8396E0929FD001939FB00D2D -:103050001124A857BE4FFE01319601900D929A950A -:10306000E1F7809387010E94891516E0809186011F -:10307000909187018917C1F1189FC00111248857C9 -:103080009E4F0E941316882379F1E09186011E9FBE -:10309000F0011124E857FE4F408151816281738114 -:1030A000848195810E9479158091860190E0019636 -:1030B0008770992780938601D9CF4F81588569857C -:1030C0007A858B859C850E947915CFCF0E943C150F -:1030D0001092870110928601E8EBF1E086E0DF01B3 -:1030E0001D928A95E9F7C1CF2C960FB6F894DEBFF2 -:1030F0000FBECDBFDF91CF911F910895EF92FF9248 -:103100000F931F93CF93DF938C01009709F46CC04A -:10311000F12CEE24E394E8012196F80184918437A0 -:1031200040F4843008F051C0813081F0823019F1D0 -:103130005BC0853709F444C0A8F19CE7980F90372D -:1031400008F052C08F770E94591241C00E5F1F4F86 -:10315000FE01C49180E28C0F883048F4C7708E2D38 -:1031600001C0880FCA95EAF70E945A1B14C08C2F21 -:103170000E9491112DC00E5F1F4FFE01C49180E28D -:103180008C0F883058F4C7708E2D01C0880FCA95F7 -:10319000EAF70E94601B0E94811B1AC08C2F0E94BC -:1031A000591216C00E5F1F4FFE01C491CC2381F04F -:1031B0008FE99FE00197F1F700C00000C150F6CF02 -:1031C0000E5F1F4FFE01F49003C00E9491118E010B -:1031D0008F2D882309F49FCFEFE9FFE03197F1F7B6 -:1031E00000C000008150F5CFDF91CF911F910F916A -:1031F000FF90EF90089508956093C2017093C3010A -:103200008093C4019093C5010C9428150F931F93CC -:103210000091C2011091C3012091C4013091C501F8 -:10322000DC01CB01802B912BA22BB32B8093C2010D -:103230009093C301A093C401B093C5011F910F9156 -:103240000C9428150F931F930091C2011091C30194 -:103250002091C4013091C501DC01CB018023912371 -:10326000A223B3238093C2019093C301A093C4010E -:10327000B093C5011F910F910C9428150F931F93C4 -:103280000091C2011091C3012091C4013091C50188 -:10329000DC01CB0180279127A227B3278093C201AD -:1032A0009093C301A093C401B093C5011F910F91E6 -:1032B0000C9428151092BE011092BF011092C0010B -:1032C0001092C1010C94281541E050E060E070E0DC -:1032D00004C0440F551F661F771F8A95D2F740938D -:1032E000BE015093BF016093C0017093C1010C9463 -:1032F000281541E050E060E070E004C0440F551F25 -:10330000661F771F8A95D2F78091BE019091BF0109 -:10331000A091C001B091C101482B592B6A2B7B2B86 -:103320004093BE015093BF016093C0017093C101EF -:103330000C94281541E050E060E070E004C0440FB8 -:10334000551F661F771F8A95D2F740955095609557 -:1033500070958091BE019091BF01A091C001B09184 -:10336000C101482359236A237B234093BE01509314 -:10337000BF016093C0017093C1010C94281541E016 -:1033800050E060E070E004C0440F551F661F771FD7 -:103390008A95D2F78091BE019091BF01A091C001A2 -:1033A000B091C101482759276A277B274093BE0166 -:1033B0005093BF016093C0017093C1010C94281514 -:1033C0000F931F930091BE011091BF012091C00186 -:1033D0003091C101DC01CB01802B912BA22BB32BAF -:1033E0008093BE019093BF01A093C001B093C1012F -:1033F0001F910F910C9428150F931F930091BE01FC -:103400001091BF012091C0013091C101DC01CB01BD -:1034100080239123A223B3238093BE019093BF0105 -:10342000A093C001B093C1011F910F910C94281576 -:103430000F931F930091BE011091BF012091C00115 -:103440003091C101DC01CB0180279127A227B3274E -:103450008093BE019093BF01A093C001B093C101BE -:103460001F910F910C9428150895CF92DF92EF923F -:10347000FF920F931F93CF93DF938C01C090C201F3 -:10348000D090C301E090C401F090C5018091BE01CD -:103490009091BF01A091C001B091C101C82AD92A61 -:1034A000EA2AFB2ACFE1D0E0D701C6010C2E04C0E6 -:1034B000B695A795979587950A94D2F780FF06C091 -:1034C000B8018C2F0E948E07019721F4219760F795 -:1034D00080E001C08C2FDF91CF911F910F91FF9061 -:1034E000EF90DF90CF900895CF93DF93EC010E948F -:1034F000351ABE010E948E07DF91CF910895CB014E -:103500000E94741A08958091C601859585958595C8 -:1035100008958091C6018770089598E0899F900171 -:103520001124262B2093C6010C9479192091C601F1 -:10353000809582238093C601982F977069F430E0BC -:10354000482F552747FD50952417350729F08595B5 -:10355000859585950C949A1908959091C601977058 -:1035600081E009F480E0089590910B01992321F006 -:1035700090910C01911109C020910D0130910E0123 -:10358000F90132969FEF40E01FC0982F96959695CF -:1035900096959F3050F5E0910D01F0910E01E90FE5 -:1035A000F11D877021E030E0A90102C0440F551FD2 -:1035B0008A95E2F7CA019181892B818308959F3F03 -:1035C00039F04F5F4E3041F051915813F8CF0DC094 -:1035D0005111F7CF942FF5CF9F3F39F0F901E90F43 -:1035E000F11D97FDFA9582830895089590910B013E -:1035F000992321F090910C01911109C020910D01A6 -:1036000030910E01F9013296205F3F4F1FC0982F75 -:103610009695969596959F30F0F4E0910D01F09176 -:103620000E01E90FF11D877021E030E0A90102C011 -:10363000440F551F8A95E2F7CA018095918189232D -:10364000818308953196E217F30729F0908198134A -:10365000F9CF1082F7CF089581E090E0E0910D015D -:10366000F0910E01E80FF91F10820196803191054B -:10367000A9F708959091DA01892B8093DA010895D2 -:1036800080959091DA0189238093DA010895109250 -:10369000DA0108959091D901892B8093D901089579 -:1036A00080959091D90189238093D9010895109232 -:1036B000D90108959091D801892B8093D80108955C -:1036C00080959091D80189238093D8010895109214 -:1036D000D80108958093C70108951092C7010895F5 -:1036E00080910D0190910E01FC0131969C01205FAB -:1036F0003F4F80E0919191118F5FE217F307D1F76F -:103700000895E0910D01F0910E018091DA0180831E -:10371000E0910D01F0910E0190818091D901892BEA -:103720008083E0910D01F0910E0190818091D8018C -:10373000892B80838091C701882361F0E0910D017E -:10374000F0910E019081892B80830E94701B811162 -:103750001092C70180910D0190910E010C9466109A -:1037600020E0009739F0AC014150510984239523A2 -:103770002F5FF7CF822F08958091F001843039F1C7 -:103780001092DC0120E488E190E00FB6F894A8954F -:10379000809360000FBE2093600080E00E944B0386 -:1037A00080E00E94680883B7817F846083BF83B70D -:1037B000816083BF7894889583B78E7F83BF88E1CB -:1037C0000FB6F89480936000109260000FBE0895C9 -:1037D0000895089580E00E944B030E94E81B0E9418 -:1037E000C3080E94E91B0E94480991E0811101C0B1 -:1037F00090E0892F08950E943C1580E00E944B03C1 -:103800000E9460210E945A100C9468081F920F9227 -:103810000FB60F9211248F939F93AF93BF93809114 -:10382000DC01811113C08091DD019091DE01A09136 -:10383000DF01B091E0014196A11DB11D8093DD0132 -:103840009093DE01A093DF01B093E001BF91AF91AF -:103850009F918F910F900FBE0F901F90189582E04F -:1038600084BD93E095BD9AEF97BD80936E00089557 -:103870002FB7F8948091DD019091DE01A091DF01D6 -:10388000B091E0012FBF0895CF92DF92EF92FF92A7 -:103890000F931F932FB7F8944091DD015091DE01F3 -:1038A0006091DF017091E0012FBF6A017B01EE247E -:1038B000FF248C0120E030E0C016D106E206F306BA -:1038C00010F4415051099A01281B390BC9011F916D -:1038D0000F91FF90EF90DF90CF9008951F920F927D -:1038E0000FB60F9211248F939F93AF93BF93809144 -:1038F000DD019091DE01A091DF01B091E001019620 -:10390000A11DB11D8093DD019093DE01A093DF0125 -:10391000B093E001BF91AF919F918F910F900FBE37 -:103920000F901F9018950E94570DF8942FEF87EA7B -:1039300091E6215080409040E1F700C0000087E010 -:1039400090EBDC018093FB019093FC01A093FD01BF -:10395000B093FE019CE088E10FB6F894A89580939F -:1039600060000FBE90936000FFCF0E94EF1C81119A -:1039700002C00E94D01C0E94FA1C8093DB010E94AE -:10398000071D8093F90187FB882780F980930C013C -:103990000E94FE1C682F70E080E090E00C94FC1800 -:1039A0006DEE7EEF80E090E00E946B2360E082E0AD -:1039B00090E00E94592360E083E090E00E94592348 -:1039C00060E084E090E00E94592360E085E090E0B0 -:1039D0000E94592360E086E090E00C94592380E037 -:1039E00090E00E94532321E08D3E9E4F09F020E09D -:1039F000822F089582E090E00C944B2383E090E0C6 -:103A00000C944B23682F83E090E00C94592384E0BE -:103A100090E00C944B23682F84E090E00C945923A1 -:103A200086E090E00C944B23682F86E090E00C94A5 -:103A300059238091E30180FF0BC06091120185E062 -:103A4000689FB001112475956795759567952BC092 -:103A500081FF09C06091120185E0689FB0011124C7 -:103A60007595679520C082FF07C06091120185E0BF -:103A7000689FB001112417C09091E4019923D1F0FF -:103A800060911101961788F72091120185E0289F17 -:103A900090011124929FA001939F500D112470E07A -:103AA000CA010E941D236038710540F4611571053B -:103AB00039F002C065E070E0862F08958FE7089521 -:103AC00081E008958091E30180FF08C060911001BA -:103AD00070E0759567957595679521C081FF06C063 -:103AE0006091100170E07595679519C082FF04C060 -:103AF0006091100170E010C09091E4019923C1F031 -:103B000060910F019617A0F780911001899FC00165 -:103B1000112470E00E941D236038710528F461159E -:103B2000710521F0862F08958FE7089581E00895AB -:103B300061E070E0F4CF803F21F40E94191D81956F -:103B400004C0813F29F40E94191D8093E701089564 -:103B5000823F21F40E94191D819504C0833F29F4FE -:103B60000E94191D8093E6010895893F19F40E946F -:103B7000621D05C08A3F31F40E94621D81958093C9 -:103B8000E80108958B3F21F40E94621D819504C0D5 -:103B90008C3F29F40E94621D8093E9010895843FBF -:103BA00021F48091E501816017C0853F21F4809167 -:103BB000E501826011C0863F21F48091E5018460B7 -:103BC0000BC0873F21F48091E501886005C0883FE4 -:103BD00031F48091E50180618093E50108958D3F86 -:103BE00021F48091E30181600BC08E3F21F480912C -:103BF000E301826005C08F3F29F48091E301846076 -:103C00008093E3010895803F39F48091E70187FFB5 -:103C10006CC01092E70169C0813F29F48091E701EF -:103C20001816BCF362C09091E601823F29F497FF19 -:103C30005CC01092E60159C0833F19F41916CCF309 -:103C400054C0893F41F48091E80118160CF04DC032 -:103C50001092E8014AC08A3F29F48091E80187FF69 -:103C600044C0F6CF8B3F39F48091E90187FF3DC016 -:103C70001092E9013AC08C3F29F48091E9011816AD -:103C8000BCF333C0843F21F48091E5018E7F17C0DF -:103C9000853F21F48091E5018D7F11C0863F21F49D -:103CA0008091E5018B7F0BC0873F21F48091E50176 -:103CB000877F05C0883F31F48091E5018F7E809336 -:103CC000E50113C08D3F21F48091E3018E7F0BC08D -:103CD0008E3F21F48091E3018D7F05C08F3F29F451 -:103CE0008091E3018B7F8093E3018091E601811154 -:103CF0000EC08091E70181110AC08091E801811115 -:103D000006C08091E901811102C01092E40108957A -:103D100085EE91E00E9471100E94381C9093E201A0 -:103D20008093E10108951F93CF93DF938091E10188 -:103D30009091E2010E94441CAC019091E40199230E -:103D400021F02091130130E006C0209114018AE097 -:103D5000289F900111244217530708F486C08091D0 -:103D6000E601C091E701D091E8011091E9018111CC -:103D700007C0C11176C0D11174C0111172C075C0D5 -:103D80009F3F19F09F5F9093E401181624F40E945E -:103D9000191D8093E6018091E60187FF05C00E940E -:103DA000191D81958093E6011C1624F40E94191DAB -:103DB0008093E7018091E70187FF05C00E94191DEC -:103DC00081958093E7016091E601662339F1C09106 -:103DD000E701CC2319F1772767FD7095872F972F7F -:103DE0000E942E2223E333E343E35FE30E94922207 -:103DF0000E94FB216093E6016C2F772767FD709589 -:103E0000872F972F0E942E2223E333E343E35FE3C0 -:103E10000E9492220E94FB216093E7011D1624F468 -:103E20000E94621D8093E8018091E80187FF05C030 -:103E30000E94621D81958093E801111624F40E946E -:103E4000621D8093E9018091E90187FF05C00E940E -:103E5000621D81958093E901DF91CF911F910C94B0 -:103E6000881E9F3F09F08ECF96CFDF91CF911F9193 -:103E70000895E5EEF1E085E0DF011D928A95E9F70E -:103E80001092E4011092E3010895833081F128F447 -:103E9000813059F08230D1F00895853009F449C05D -:103EA000B8F1863009F456C0089580911401262F88 -:103EB00030E0280F311D2F3F310524F4680F609347 -:103EC000140108958FEF80931401089580911301D8 -:103ED000262F30E0280F311D2F3F310524F4680FC5 -:103EE0006093130108958FEF8093130108958091DB -:103EF0001201262F30E0280F311D2F3F310524F409 -:103F0000680F6093120108958FEF80931201089556 -:103F100080911101262F30E0280F311D2F3F3105F0 -:103F200024F4680F6093110108958FEF80931101BD -:103F3000089580911001262F30E0280F311D2F3F6A -:103F4000310524F4680F6093100108958FEF80937A -:103F50001001089580910F01262F30E0280F311DA8 -:103F60002F3F310524F4680F60930F0108958FEF00 -:103F700080930F010895833011F128F4813049F0C6 -:103F8000823091F00895853081F120F18630C1F1C1 -:103F9000089580911401681720F4861B8093140102 -:103FA000089510921401089580911301681720F468 -:103FB000861B809313010895109213010895809138 -:103FC0001201681720F4861B809312010895109245 -:103FD0001201089580911101681720F4861B8093C7 -:103FE0001101089510921101089580911001681730 -:103FF00020F4861B809310010895109210010895FB -:1040000080910F01681720F4861B80930F0108959B -:1040100010920F0108950F931F93873208F048C044 -:104020008E3108F092C0803109F47CC008F58730E9 -:1040300009F466C068F4863009F0A2C08091DB0103 -:10404000817F8E7F8093DB0181E08093EB0199C0BB -:104050008B3009F48EC08E3009F092C08091DB0164 -:1040600082FB222720F991E0922790FB82F963C01E -:10407000863109F47EC060F4813109F081C00E946C -:104080003C1590910C0181E0892780930C0171C04F -:10409000893109F46EC08B3109F072C08091DB0167 -:1040A00081FB222720F991E0922790FB81F943C000 -:1040B000883309F45EC050F4893209F45CC085335A -:1040C00009F459C0873209F456C05AC0833409F440 -:1040D00052C028F48A3308F453C0895337C0883457 -:1040E00009F04EC00E943C150FEF13ED20E3015084 -:1040F00010402040E1F700C000000E94931C39C02E -:104100009091DB01892F8095817080FB90F929F0D7 -:10411000966098609093DB0134C0997F977F90936D -:10412000DB0127C08091DB0183FB222720F991E08E -:10413000922790FB83F98093DB019923D1F0809142 -:10414000DB0181608093DB0114C08D5141E050E0C0 -:1041500060E070E08A019B0104C0000F111F221F64 -:10416000331F8A95D2F7C901B8010E94FC180E943A -:104170003C1581E006C061E070E080E090E0F5CFA2 -:1041800080E01F910F91089580E0089580E00895E8 -:10419000CF93C82F8091EB01813069F018F0823005 -:1041A000C9F184C0E0910D01F0910E01808182324D -:1041B00009F07EC007C0E0910D01F0910E018081F1 -:1041C000823261F48C2F0E94C420811104C08C2F94 -:1041D0000E940B201DC081E090E01AC08C2F0E942D -:1041E000C620811114C0C43179F048F4CB3079F085 -:1041F000C03109F061C082E08093EB0108C0C93290 -:1042000019F0C83321F058C01092EB0155C081E07D -:10421000817054C0C93291F120F5C43179F1B0F404 -:10422000C73009F047C08EE18093140182E3809388 -:1042300013018AE08093120184E18093110188E0E8 -:104240008093100188E280930F0134C0CE51C630B4 -:1042500088F5EC2FF0E0E75CFE4F80818093EA0167 -:1042600029C0CE34E9F020F4CB3421F56AE013C044 -:10427000C13579F0C235F1F461E00DC08091EA01F9 -:10428000882319F01092EA0115C081E08093EB01B8 -:1042900015C061E006C08091EA010E94451F0AC076 -:1042A0006AE08091EA010E94BB1F04C01092EB01FA -:1042B00080E004C081E002C080E0AACFCF910895E1 -:1042C0000E94EF1C811102C00E94D01C0E94101D90 -:1042D0008093FA0180FF02C0869501C080E00C94B3 -:1042E0004B038091FA01982F9695292F30E02330C7 -:1042F00031054CF49F5F990F8170892B8160809309 -:10430000FA010E94141D8091FA0186950C944B03CA -:104310008091FA01982F969591F09158990F81709C -:10432000892B8093FA018E7F91E009F490E08091CF -:10433000FA0190FB80F98093FA010E94141D80918C -:10434000FA0186950C944B038091FA01982F909571 -:1043500090FB80F98093FA010E94141D8091FA016C -:1043600080FF02C0869501C080E00C944B039091C1 -:10437000FA01892F86958F5F8F779170843028F4AA -:10438000880F892B8093FA0102C09093FA018091E3 -:10439000FA018E7F91E009F490E08091FA0190FBA0 -:1043A00080F98093FA010E94141D8091FA0186958C -:1043B0000C944B032091FA01922F96958927982F00 -:1043C000990F822F8170892B8093FA018E7F91E063 -:1043D00009F490E08091FA0190FB80F98093FA0152 -:1043E0000E94141D8091FA0186950C944B038091D4 -:1043F000FA018695089504D06894B1118DC008958E -:1044000070D088F09F5790F0B92F9927B751A0F03E -:10441000D1F0660F771F881F991F1AF0BA95C9F758 -:1044200012C0B13081F077D0B1E0089574C0672F29 -:10443000782F8827B85F39F0B93FCCF38695779508 -:104440006795B395D9F73EF49095809570956195F1 -:104450007F4F8F4F9F4F0895E89409C097FB3EF41C -:1044600090958095709561957F4F8F4F9F4F9923C1 -:10447000A9F0F92F96E9BB279395F695879577953F -:104480006795B795F111F8CFFAF4BB0F11F460FFFF -:104490001BC06F5F7F4F8F4F9F4F16C0882311F057 -:1044A00096E911C0772321F09EE8872F762F05C06B -:1044B000662371F096E8862F70E060E02AF09A9506 -:1044C000660F771F881FDAF7880F9695879597F9FB -:1044D000089557FD9058440F551F59F05F3F71F0F4 -:1044E0004795880F97FB991F61F09F3F79F087955B -:1044F0000895121613061406551FF2CF4695F1DFE4 -:1045000008C0161617061806991FF1CF8695710573 -:10451000610508940895E894BB2766277727CB01A7 -:1045200097F908950BD078C069D028F06ED018F0B4 -:10453000952309F05AC05FC01124EECFCADFA0F363 -:10454000959FD1F3950F50E0551F629FF001729F28 -:10455000BB27F00DB11D639FAA27F00DB11DAA1F47 -:10456000649F6627B00DA11D661F829F2227B00D94 -:10457000A11D621F739FB00DA11D621F839FA00D1F -:10458000611D221F749F3327A00D611D231F849F6F -:10459000600D211D822F762F6A2F11249F575040C6 -:1045A0008AF0E1F088234AF0EE0FFF1FBB1F661F61 -:1045B000771F881F91505040A9F79E3F510570F01A -:1045C00014C0AACF5F3FECF3983EDCF38695779555 -:1045D0006795B795F795E7959F5FC1F7FE2B880F15 -:1045E000911D9695879597F9089597F99F6780E8AB -:1045F00070E060E008959FEF80EC089500240A9435 -:104600001616170618060906089500240A941216AD -:104610001306140605060895092E0394000C11F4E0 -:10462000882352F0BB0F40F4BF2B11F460FF04C08D -:104630006F5F7F4F8F4F9F4F089597FB072E16F4A4 -:10464000009407D077FD09D00E94372307FC05D0DE -:104650003EF4909581959F4F0895709561957F4F99 -:104660000895EE0FFF1F0590F491E02D0994AA1B09 -:10467000BB1B51E107C0AA1FBB1FA617B70710F04D -:10468000A61BB70B881F991F5A95A9F7809590957F -:10469000BC01CD010895F999FECF92BD81BDF89A74 -:1046A000992780B50895A8E1B0E042E050E00C946D -:1046B0007323262FF999FECF92BD81BDF89A0197F9 -:1046C00000B4021639F01FBA20BD0FB6F894FA9A5A -:1046D000F99A0FBE08950196272F0E945A230C9431 -:1046E0005923DC01CB01FC01F999FECF06C0F2BDD4 -:1046F000E1BDF89A319600B40D9241505040B8F7A0 -:064700000895F894FFCFBC -:10470600FF5E09EC09C909950961090101C801287B -:1047160008140A321E1F0F03764F5F6F7F496943E5 -:1047260079095953633F4D3639A30556052005E7E8 -:10473600047A049304AC04C50401020304050607C5 -:04474600080900005E -:00000001FF diff --git a/keyboard/planck/keymaps/pvc/compiled.hex b/keyboard/planck/keymaps/pvc/compiled.hex deleted file mode 100644 index 9e6f0ffe20..0000000000 --- a/keyboard/planck/keymaps/pvc/compiled.hex +++ /dev/null @@ -1,1635 +0,0 @@ -:100000000C9467030C94AB030C94AB030C94AB03FC -:100010000C94AB030C94AB030C94AB030C94AB03A8 -:100020000C94AB030C94AB030C94BE170C94901877 -:100030000C94F2250C94AB030C94AB030C94AB031F -:100040000C94AB030C940B040C94AB030C94AB0317 -:100050000C94AB030C945A260C94AB030C94AB0396 -:100060000C94AB030C94AB030C94AB030C94AB0358 -:100070000C94AB030C94AB030C94AB030C94AB0348 -:100080000C947A0D0C94AB030C94AB030C94AB035F -:100090000C94AB030C94AB030C94AB030C94AB0328 -:1000A0000C94AB030C94AB030C94AB037504870462 -:1000B0009B04B404AD04C404D304DB04E304ED04E2 -:1000C000F504FD0404050B051705170517051705AD -:1000D00017051705CF04FD181F190D1A1F190D1A42 -:1000E000641987190D1ADC19EF19D91CD91C081DC0 -:1000F000081D471D671DBD1EBD1E721DBD1E221E93 -:10010000221E891E921EBD1EB71E2F1E2F1E2F1EC1 -:100110002F1E2F1E2F1E2F1E2F1E2F1E2F1E2F1E77 -:100120002F1E2F1E2F1E2F1E2F1E3F1E4D1E541E14 -:100130005B1E651E07634236B79BD8A71A396856FF -:1001400018AEBAAB558C1D3CB7CC5763BD6DEDFDF9 -:10015000753EF6177231BF000000803F08000000B6 -:10016000BE922449123EABAAAA2ABECDCCCC4C3EAC -:1001700000000080BEABAAAAAA3E00000000BF009B -:100180000000803F0000000000084178D3BB438797 -:10019000D1133D190E3CC3BD4282AD2B3E68EC82AB -:1001A00076BED98FE1A93E4C80EFFFBE01C4FF7F30 -:1001B0003F00000000000000000000000000000000 -:1001C00000010204060A0F17202C3A4A5D71879D30 -:1001D000B3C7DAE9F5FCFFFCF5E9DAC7B39D87712F -:1001E0005D4A3A2C20170F0A0604020100000000A5 -:1001F00000000000000000222B0014001A0008007C -:10020000150017001C0018000C00120013002A0033 -:10021000290004001600070009000A000B000D0069 -:100220000E000F0033003400E1001D001B0006002B -:100230001900050011001000360037005200280098 -:10024000E000E3000530E20003302C002C00043015 -:10025000C000500051004F002B0014001A0009008C -:1002600013000A000D000F0018001C0033002900C5 -:100270002A00040015001600170007000B001100EB -:1002800008000C0012003400E1001D001B000600F5 -:10029000190005000E00100036003700520028003B -:1002A000E000E3000530E20003302C002C000430B5 -:1002B000C000500051004F002B00340036003700C2 -:1002C00013001C0009000A00060015000F002A0098 -:1002D000290004001200080018000C0007000B00A1 -:1002E0001700110016003800E100330014000D0063 -:1002F0000E001B00050010001A0019001D00280048 -:10030000E000E3000530E20003302C002C00043054 -:100310005200510050004F0046003A003B003C00A4 -:100320003D00530054005F006000610056004C0027 -:1003300039003E003F0040004100470055005C008E -:100340005D005E0057004900010042004300440088 -:1003500045004800000059005A005B0058004A0060 -:1003600001000100010001000100620062000100C3 -:10037000E600630058004D00010021022F022F000B -:100380002602220220022702300030021F024B0008 -:1003900001002302250257005600330033022D02CC -:1003A0003400340235004E000100310224021E02E6 -:1003B0003502380031002E003602370238024A007A -:1003C0000100010001000100010001000100010025 -:1003D0000100010001004D0053003A003B003C00C9 -:1003E0003D003E003F004000410042004300480005 -:1003F000390044004500680069006A006B006C0029 -:100400006D006E006F004600470000000000000015 -:100410000000000000000000000000000000A80034 -:1004200001000100010001000100AE00AE0001006A -:10043000A900AA00AC00AB002900FD00FE00FF00EF -:100440000000000000000000000000000000290083 -:10045000000000000000000000000000000000009C -:1004600000000000000000000100F800F700F600A6 -:10047000F50000000000000000000000F900FA0094 -:1004800001000100010001000100F400F40001007E -:10049000F000F100F200F3000100073008300930ED -:1004A0000A300B300C300D30010001002550225075 -:1004B00001000030013002300100010001000100A4 -:1004C0000100010001000100010001000100010024 -:1004D00014300050010006300100010026500100D8 -:1004E0000100010001000100010001000100010004 -:1004F0000100010027500100280354006800650036 -:10050000200050006C0061006E0063006B00200052 -:100510004B006500790062006F00610072006400AA -:1005200000002C034F007200740068006F006C0024 -:1005300069006E0065006100720020004B006500DC -:10054000790062006F0061007200640073000000B7 -:100550000403090409026D00040100A0FA09040063 -:10056000000103010100092111010001223F0007E0 -:1005700005810308000A09040100010301020009C2 -:100580002111010001224D000705820308000A091C -:1005900004020001030000000921110100012236BC -:1005A000000705830308000A090403000103000093 -:1005B0000009211101000122390007058403100000 -:1005C000011201100100000008EDFE606001000151 -:1005D00002000105010906A101050719E029E71537 -:1005E0000025019508750181020508190129059565 -:1005F00005750191029501750391010507190029FF -:100600007715002501957875018102C005010980E3 -:10061000A101850216010026B7001A01002AB700C1 -:10062000751095018100C0050C0901A10185031613 -:100630000100269C021A01002A9C02751095018176 -:1006400000C005010902A1010901A1000509190164 -:100650002905150025019505750181029501750390 -:1006600081010501093009311581257F9502750841 -:10067000810609381581257F950175088106050CCD -:100680000A38021581257F950175088106C0C005CD -:10069000010906A101050719E029E71500250195C3 -:1006A0000875018102950175088101050819012964 -:1006B00005950575019102950175039101050719CD -:1006C0000029FF150025FF950675088100C011243B -:1006D0001FBECFEFDAE0DEBFCDBF04B603FE24C0FD -:1006E00080916F0590917005A0917105B091720590 -:1006F0008730904BA740B04BB9F410926F05109221 -:100700007005109271051092720514BE84B7877F30 -:1007100084BF88E10FB6F894809360001092600067 -:100720000FBEE0E0F8E3099514E0A0E0B1E0EAE0F4 -:10073000F3E602C005900D92A031B107D9F715E09C -:10074000A0E1B4E001C01D92AF36B107E1F70E940D -:1007500004150C9483310C940000089581E00895F1 -:100760000C94AD030C94AE030C941E050E944D2D09 -:1007700023E030E0281B3109220F20931404089550 -:10078000282F2F9880918000211108C0877F8093A7 -:10079000800010928D0010928C001BC088608093A6 -:1007A0008000233019F48FEF9FEF0FC083E090E0BB -:1007B000821B9109880F991F2FEF3FEFA90102C0FB -:1007C000569547958A95E2F7CA0190938D008093DC -:1007D0008C000C94B6030E94B60384E0809313044B -:1007E000109210040895279A2F988FEF9FEF9093FF -:1007F0008700809386008AE08093800089E180935F -:1008000081000E94B62C0C94EB030E94F3036E9AB5 -:10081000769A0C948F051F920F920FB60F921124A7 -:100820002F933F938F939F93EF93FF93E091110446 -:10083000F0911204CF010196909312048093110459 -:100840000090130402C0F695E7950A94E2F7EF735F -:1008500080911004823019F4E03251F404C08130E8 -:1008600039F4EF3329F480916F008D7F80936F000E -:10087000F0E0EA54FE4FE49121E031E0E29FC00154 -:10088000E39F900D11240090140402C09695879563 -:100890000A94E2F790938D0080938C00FF91EF9182 -:1008A0009F918F913F912F910F900FBE0F901F90AE -:1008B0001895CF93DF93EC010E944E28BE0180E093 -:1008C00090E0DF91CF910C94E8220F931F93CF9388 -:1008D000DF93462F50E04531510508F0A8C0EC01E8 -:1008E000FA01EA5AFF4F0C9447318A81882309F4B0 -:1008F0009EC081E090E00E9459040AE017ED23E2D7 -:100900003CE340E064E070E080E792E011C08A815F -:10091000882309F48CC082E090E00E9459040AE028 -:1009200017ED23E23CE340E066E070E080E092E017 -:100930000E94F8107CC08A81882309F478C084E082 -:1009400090E00E9459040AE017ED23E23CE340E006 -:1009500068E070E080E392E0EBCF8A81882311F0B9 -:1009600084E006C084E00DC08A81882349F083E0DA -:100970000E94652347E063E084E00E945D0B57C05E -:1009800083E00E948623F6CF8A81882321F085E0C8 -:100990000E9465234CC085E00E94862348C08A815E -:1009A00081110E940D2D8A81882309F440C086E0C0 -:1009B0000E94AB233CC08A818823C9F160E070E0CB -:1009C00080E09EE307C08A81882389F160E070E0BF -:1009D00080E89EE30E949F112AC08A81882339F112 -:1009E00060E070E080E09FE3F5CF8A818823F9F032 -:1009F00060E070E080E49FE3EDCF8A818823B9F066 -:100A00008AE00E94B11113C08A81882381F08AE0B4 -:100A10000E94AB110CC08A81882349F060E070E02D -:100A200080E09FE30E949F1184E60E94A81180E06D -:100A300090E0DF91CF911F910F9108950F931F9335 -:100A4000CF93C82F8FE39CE90197F1F700C0000016 -:100A500090911504C1FF0BC091FD14C000E010E09F -:100A6000980140E062E070E080E991E03AC091FFD7 -:100A700009C000E010E0980140E062E070E080E82A -:100A800091E02FC0C0FF0BC090FD14C000E010E04B -:100A9000980140E062E070E080E791E022C090FFC2 -:100AA00009C000E010E0980140E062E070E080E6FC -:100AB00091E017C0C2FF0BC092FD15C000E010E02E -:100AC000980140E062E070E080E591E00AC092FFAA -:100AD0000AC000E010E0980140E062E070E080E4CD -:100AE00091E00E94F810C0931504CF911F910F91CF -:100AF00008950F931F938FE39CE90197F1F700C0CE -:100B000000000AE017ED23E23CE340E06FE070E014 -:100B100088ED92E00E94F8101F910F91089580E0F7 -:100B20000E94C2110C9479050F931F930AE017EDF0 -:100B300023E23CE340E069E070E080E992E00E945B -:100B4000F8102FEF87EA91E6215080409040E1F7BE -:100B500000C000001F910F910C94AD0C0F931F93D8 -:100B60000AE017ED23E23CE340E065E070E088ED49 -:100B700091E00E94F8101F910F9108950F931F9319 -:100B80000AE017ED23E23CE340E067E070E080EA32 -:100B900091E00E94F8101F910F9108950F931F93F9 -:100BA0000AE017ED23E23CE340E068E070E080E01B -:100BB00091E00E94F8101F910F91089581E008952F -:100BC0000C94DE0508950C94050480916604882336 -:100BD00009F448C08091220490912304009779F48D -:100BE0000E9424269093230480932204809124045D -:100BF00090E0009771F48091250490E00AC00E9473 -:100C0000302620915003309151032817390740F3C3 -:100C100029C00197880F991F880F991FFC01EA5D71 -:100C2000FB4F60817181828193810E94E00CE09191 -:100C3000240484E0E89FF0011124EA5DFB4F608109 -:100C40007181828193814FE050E00E9498108091E1 -:100C5000240490E001966091250470E00E943331F5 -:100C6000809324040C94B003109268040C94AD0C8F -:100C700081E0809368040C94BE058F929F92AF929E -:100C8000BF92EF92FF920F931F93CF93DF93CDB755 -:100C9000DEB7A3970FB6F894DEBF0FBECDBF7C01C1 -:100CA000FC0100811181C8010E942124B8010E9429 -:100CB0003F088C01B7010E94E005882309F4CCC1EC -:100CC0000032F0E51F0741F4F7018281882309F41F -:100CD00058C00E948F11C0C10132F0E51F0741F4D6 -:100CE000F7018281882309F44CC00E949811B4C195 -:100CF0000232F0E51F0751F4F7018281882309F4DD -:100D000040C00E948B118111F0CFE3CF0332F0E598 -:100D10001F0739F4F7018281882399F10E94380670 -:100D20009BC10432F0E51F0739F4F7018281882363 -:100D300041F10E94340690C10532F0E51F0749F4E5 -:100D4000F70182818823E9F0809168048111F1CF55 -:100D5000E5CF0632F0E51F0739F4F70182818823D9 -:100D600081F00E94C5110AC00732F0E51F0749F45F -:100D7000F7018281882329F00E94D0110E94CE05BC -:100D80006BC180916804811105C0F70182818111D6 -:100D9000CFC018C1003E110579F4F7018281882384 -:100DA00009F44DC00E94AD0C81E08093670410925D -:100DB00066041092250450C1023E110559F4F70152 -:100DC00082818823E1F10E94AD0C10926704109299 -:100DD000660442C1033E110591F4F7018281882324 -:100DE00071F10E94AD0C1092670481E0809366045B -:100DF0001092240410922304109222042DC1023573 -:100E0000110559F4F7018281882309F425C18091E5 -:100E10005003909151030A970DC00135110579F4E3 -:100E2000F7018281882309F417C1809150039091C2 -:100E300051030A9690935103809350030DC1409142 -:100E4000540383E2EFE6F3E0DE01119601900D9288 -:100E50008A95E1F7F701808121E030E02C0F3D1FFA -:100E6000280F311DC9012091520330915303FC0119 -:100E7000E20FF31F6081772767FD7095640F711D86 -:100E8000882777FD8095982F0E94552E20E030E02E -:100E900040E451E40E94BA2D4B015C01F70121812D -:100EA00084E090E0821B9109BC01882777FD809542 -:100EB000982F0E94552E9B01AC01C501B4010E94E0 -:100EC000522D9B01AC0160E070E080E090E40E9454 -:100ED000C82F20E030E04CED50E40E94652F4B011C -:100EE0005C01F70182818823D1F04FE050E0C50119 -:100EF000B4010E949810809167048823A1F080912A -:100F0000250424E0829FF0011124EA5DFB4F8082DA -:100F10009182A282B3828F5F8093250404C0C501B1 -:100F2000B4010E94E00C0F3F110508F02ECF94C0D1 -:100F30008091210481111FC0043130E5130709F0AD -:100F400051C00E94E20581E0809321040E94242682 -:100F50009093200480931F041092180410921A0496 -:100F60001092190410921C0410921B0410921E047B -:100F700010921D0471C080911F04909120040E9462 -:100F80003026883C910570F480911804E82FF0E039 -:100F9000EE0FFF1FE75EFB4F118300838F5F80938F -:100FA00018045AC0043880E5180721F005381045A8 -:100FB00001F13AC0F7018281882341F010921604B2 -:100FC00082E01EC0043830E5130759F580911604FD -:100FD000811106C086E20E947D1B86E20E94451CAC -:100FE00082E01CC00438F0E51F0741F305381045C6 -:100FF000D9F4F7018281882331F01092170480E23E -:101000000E94941C29C080911704811106C087E2B8 -:101010000E947D1B87E20E94451C80E20E949B1C6F -:101020001BC00538104529F381E080931604809396 -:101030001704C701A3960FB6F894DEBF0FBECDBF4D -:10104000DF91CF911F910F91FF90EF90BF90AF90E4 -:101050009F908F900C94B20380E0A3960FB6F89403 -:10106000DEBF0FBECDBFDF91CF911F910F91FF90DB -:10107000EF90BF90AF909F908F90089508959CE05F -:10108000799FF001112490E3899FE00DF11D112457 -:10109000E60FF11DEE0FFF1FE850FE4F8591949172 -:1010A0000895880F991FFC01EA58FF4F859194918C -:1010B0000895880F991FFC01EA50FE4F8591949185 -:1010C00008950F931F93CF93DF93EC01811521E3D4 -:1010D0009207A0F5C11580E3D80708F0D7C0C83E35 -:1010E000D105D8F4C03ED10508F007C2C83AD105F1 -:1010F00078F4C53AD10508F06AC0C130D10509F4C9 -:1011000063C008F4F7C1C430D10508F0F6C1F2C1DC -:10111000CB3BD10508F466C0EDC1C11590E2D907FB -:1011200008F0AFC0C11521E0D20708F0E6C1C03F0A -:10113000D10508F4DFC18E0110651FC2C03880E5FB -:10114000D80700F5C03790E5D90708F0A3C0C1154E -:1011500020E5D20709F4ACC050F4CE0190548031A0 -:101160009F4008F0C7C1DF708E01106A06C2C1300F -:1011700080E5D80709F4AEC0C43190E5D90708F47A -:10118000AFC0B8C1C33820E5D20709F48EC050F40F -:10119000C13890E5D90709F482C008F083C000E0A7 -:1011A00011EDEBC1C03181E5D80708F4A3C1C11529 -:1011B00097E5D90708F436C1CE01905781159041C3 -:1011C00008F098C1DF7093C101E010E0D6C1C53AC4 -:1011D000D10509F494C1C63AD10509F093C102E8DA -:1011E00010E4CBC1C83AD10509F48FC1C93AD10581 -:1011F00009F48EC1CA3AD10509F48DC1CB3AD105A3 -:1012000009F48CC1CC3AD10509F48BC1CD3AD10592 -:1012100009F48AC1C03BD10509F489C1CE3AD10590 -:1012200009F488C1CF3AD10509F487C1C13BD10582 -:1012300009F486C1C23BD10509F485C1C33BD10580 -:1012400009F484C1C43BD10509F483C1C53BD10570 -:1012500009F482C1C63BD10509F481C1C73BD10560 -:1012600009F480C1C83BD10509F47FC1C93BD10550 -:1012700009F47EC1CA3BD10509F47DC100E014E444 -:101280007CC1CE019F700E94590878C1DD278E0174 -:10129000106C73C1CF70DD278E01146D6EC100E03C -:1012A00010ED6BC100E012ED68C100E013ED65C107 -:1012B0000E94281F0E94AD0C0E9494058FEF94E3BA -:1012C0002CE0815090402040E1F700C000000E94D7 -:1012D0007F2653C1809143058160809343054DC1B2 -:1012E0000E943628811102C00E9412280E945328B1 -:1012F00090E090936E0580936D05C23080E5D8072D -:1013000021F480916D05816086C0C43090E5D907D5 -:1013100021F480916D0582607EC0C63020E5D20741 -:1013200021F480916D05846076C0C83080E5D807CF -:1013300019F480916D0527C0CA3090E5D90721F4D2 -:1013400080916D05806167C0CC3020E5D20721F423 -:1013500080916D0580625FC0CE3080E5D80721F4B2 -:1013600080916D05806457C0C03190E5D90721F4A4 -:1013700080916D0580684FC0C23120E5D20729F405 -:1013800080916D058460886046C0C33080E5D807D1 -:1013900021F480916D058E7F3EC0C53090E5D90760 -:1013A00021F480916D058D7F36C0C73020E5D207CE -:1013B00021F480916D058B7F2EC0C93080E5D80760 -:1013C00019F480916D0526C0CB3090E5D90721F442 -:1013D00080916D058F7E1FC0CD3020E5D20721F4AE -:1013E00080916D058F7D17C0CF3080E5D80721F43F -:1013F00080916D058F7B0FC0C13190E5D90721F435 -:1014000080916D058F7707C0C331D04531F480914D -:101410006D058B7F877F80936D0580916D050E94A0 -:101420005728ABC08D2F99278F7099278130910550 -:10143000D9F49E012370332702C0880F991F2A9583 -:10144000E2F79C688E0144E0000F111F4A95E1F716 -:1014500000271370802B912B53E0CC0FDD1F5A9582 -:10146000E1F7C076DD272FC08230910531F4DC2F03 -:10147000CC278E01016F106A80C08330910569F41A -:10148000CE018370992701E010E002C0000F111F08 -:101490008A95E2F7C8019C680FC084309105B9F4C1 -:1014A000CE018370992701E010E002C0000F111FE8 -:1014B0008A95E2F7C8019A6823E0CC0FDD1F2A95D0 -:1014C000E1F7C07ED7708C010C2B1D2B56C08530E8 -:1014D000910531F4DC2FCC278E01046F106A4DC0CA -:1014E000069709F04AC0CF71DD27DC2FCC278E018B -:1014F000106243C000E010E040C08E013EC001E831 -:1015000010E43BC003E810E438C002EE14E435C038 -:1015100009EE14E432C00AEE14E42FC005EB14E423 -:101520002CC006EB14E429C007EB14E426C00CEC35 -:1015300014E423C00DEC14E420C003E815E41DC03E -:101540000AE815E41AC002E915E417C004E915E435 -:1015500014C001E216E411C003E216E40EC004E276 -:1015600016E40BC005E216E408C006E216E405C066 -:1015700007E216E402C00AE216E4C801DF91CF9147 -:101580001F910F9108959CE0799FF001112490E341 -:10159000899FE00DF11D1124E60FF11DEE0FFF1FD5 -:1015A000E850FE4F85919491803E9105E0F4803C97 -:1015B000910558F58133910509F46FC048F48932DB -:1015C000910509F463C08A32910509F46DC072C0B7 -:1015D00089339105E9F082389105D1F08533910581 -:1015E00009F44DC067C0833E910581F138F4803E17 -:1015F0009105B9F0823E9105D9F05CC0863E910517 -:1016000061F1873E9105A1F155C00E9451080895EE -:1016100020916D0520FD02C021FF4CC080EE90E0BE -:1016200049C080916D0580FFF9CF89E390E042C009 -:1016300080916D0582FF0EC080916D0584FF03C00F -:1016400080E090E037C083EE90E034C080916D057B -:1016500082FFF2CF82EE90E02DC080916D0583FF76 -:101660000BC080916D0584FDEBCF87EE90E022C02A -:1016700080916D0583FFF5CF86EE90E01BC08091D1 -:101680006D0585FF07C089E290E014C080916D056B -:1016900085FFF9CF85E390E00DC080916D0586FF51 -:1016A00007C08AE290E006C080916D0586FFF9CF01 -:1016B00081E390E00E9461080895CF92DF92EF925B -:1016C000FF920F931F9301E010E020E030E06801EB -:1016D000790104C0CC0CDD1CEE1CFF1C8A95D2F7EE -:1016E00004C0000F111F221F331F6A95D2F70C2967 -:1016F0001D292E293F29C0902605D0902705E0906E -:101700002805F0902905C022D122E222F322842F5D -:10171000C016D106E206F30641F41F910F91FF9027 -:10172000EF90DF90CF900C9465231F910F91FF9065 -:10173000EF90DF90CF900C9486230C94B403E82FA5 -:10174000F0E0E256FC4F8081E82FEF70F0E08295E8 -:101750008F7021E030E0A90102C0440F551F8A9527 -:10176000E2F740A308950F931F93CF93DF9385B7BC -:10177000806885BF85B7806885BFC3E0D0E001E0A1 -:1017800010E0FE01E256FC4F8081E82FEF70F0E0A0 -:1017900021A182958F70A80102C0440F551F8A9520 -:1017A000E2F7CA01822B81A38C2F0E949F0B219705 -:1017B00040F78BE090E061E070E0FC01EE56FC4FFA -:1017C0002081E22FEF70F0E042A122952F70DB0123 -:1017D00002C0AA0FBB1F2A95E2F79D01242B22A36A -:1017E000019758F7DF91CF911F910F910C94E3056A -:1017F000EF92FF920F931F93CF93DF9301E714E0D3 -:10180000C3E0EE24E394F12CD5E08C2F0E949F0BD3 -:101810008BE090E040E050E0FC01EE56FC4F608130 -:10182000E62FEF70F0E020A130E062956F7002C00B -:10183000359527956A95E2F720FD09C09701082E96 -:1018400002C0220F331F0A94E2F7422B532B019759 -:1018500018F7F801929182918F018417950721F072 -:1018600051834083D09355038C2F0E949F0BC1500E -:1018700060F68091550387FD2CC0815080935503FD -:101880008F3F39F08FE99FE00197F1F700C000002A -:1018900020C080916F04909170049093780480939D -:1018A000770480916D0490916E04909376048093F8 -:1018B000750480916B0490916C04909374048093F0 -:1018C00073048091690490916A04909372048093E8 -:1018D00071040E94E50581E0DF91CF911F910F9186 -:1018E000FF90EF900895E82FF0E0EE0FFF1FEF5804 -:1018F000FB4F80819181089508950F931F93CF939B -:1019000009E714E0C0E0F801929182918F010E94F2 -:101910009C25C80FF4E001371F07A9F78C2FCF9142 -:101920001F910F9108950E943628811102C00E94D4 -:1019300012280E946528809358053E9A8091710074 -:101940008D7F8093710082E0809390008AE1809384 -:10195000910081E080937B04089580917B04811144 -:1019600002C00E94930C1092CB041092CA04809182 -:1019700071008D7F80937100809190008F738093B0 -:10198000900010928D0410928C041092C404109256 -:10199000C5041092C6041092C7041092C30410929A -:1019A000C204E2EAF4E0A2E9B4E0119211921192C9 -:1019B00011921D921D9284E0E23CF807B1F7089560 -:1019C000CF92DF92EF92FF920F931F93CF93DF930B -:1019D00020918C04222309F484C06B017C01809146 -:1019E0007B04811102C00E94930C02EC14E0C7E05A -:1019F000D0E0A7019601F8019291829172916291D3 -:101A00008F010E94B62D811131C0FE01EE0FFF1F24 -:101A1000EE0FFF1FEE55FB4F1082118212821382D0 -:101A2000DE01AA0FBB1FAE56BB4F11961C921E9231 -:101A3000C730D105E9F021964481558166817781CF -:101A400040835183628373831482158216821782C6 -:101A500012968D919C91139711969C938E93139649 -:101A60001C921E92129734961296E2CF219708F696 -:101A70008091CA049091CB04019797FD05C0909383 -:101A8000CB048093CA0404C01092CB041092CA0401 -:101A90008091CA049091CB042091C8043091C9046C -:101AA0002817390724F01092C9041092C804892B12 -:101AB000C1F4809171008D7F8093710080919000BE -:101AC0008F73809390001092C4041092C5041092FA -:101AD000C6041092C7041092C3041092C20410925C -:101AE0008C04DF91CF911F910F91FF90EF90DF90C9 -:101AF000CF9008951F920F920FB60F9211244F921C -:101B00005F926F927F928F929F92AF92BF92CF928D -:101B1000DF92EF92FF922F933F934F935F936F93D8 -:101B20007F938F939F93AF93BF93CF93DF93EF9365 -:101B3000FF9380918C04882309F49BC1C091CA044F -:101B4000D091CB041C161D060CF093C140907C0470 -:101B500050907D0460907E0470907F0420E030E01F -:101B6000A901C301B2010E94612F18160CF065C0D3 -:101B7000C130D10509F452C08091C8049091C904C4 -:101B8000BE010E9433317C019093C9048093C80444 -:101B900080908E0490908F04A0909004B090910457 -:101BA00020E030E040E85FE3C501B4010E94522D1F -:101BB00060938E0470938F048093900490939104AB -:101BC000F701EE0FFF1FEE0FFF1FEE55FB4FA301B6 -:101BD000920160817181828193810E94BA2D20E0FF -:101BE00030E040E05EE30E94652F9B01AC01C5013F -:101BF000B4010E94612F18168CF4C7010196BE0132 -:101C00000E9433319093C9048093C80410928E04CB -:101C100010928F041092900410929104E091C804E5 -:101C2000F091C904EE0FFF1FEE0FFF1FEE55FB4FA3 -:101C30006081718182819381D0C0C090C404D090B2 -:101C4000C504E090C604F090C70420E030E0A9018C -:101C5000C701B6010E94B62D2197882309F4A2C0BE -:101C6000FE01EE0FFF1FEE0FFF1FEE55FB4F8080B2 -:101C70009180A280B380A5019401C701B6010E94A2 -:101C8000B62D87FF31C0A501940160E070E08CEDB6 -:101C900093EC0E94BA2D20E030E040E451E40E9431 -:101CA000BA2D20E030E040E05FE30E94652F9B0109 -:101CB000AC0160E070E080E090E40E94C82F9B01DE -:101CC000AC01C501B4010E94652F9B01AC01C701A5 -:101CD000B6010E94B62D87FF07C0A701960160E0FC -:101CE00070E08CED93E439C0A5019401C701B60101 -:101CF0000E94612F18160CF055C0A501940160E0F8 -:101D000070E08CED93E40E94BA2D20E030E040E4D6 -:101D100051E40E94BA2D20E030E040E05FE30E94F1 -:101D2000652F9B01AC0160E070E080E090E40E94D0 -:101D3000C82F9B01AC01C501B4010E94652F9B0116 -:101D4000AC01C701B6010E94612F18165CF5A7010E -:101D5000960160E070E08CED93EC0E94BA2D20E0DB -:101D600030E040E451E40E94BA2D20E030E040E051 -:101D70005FE30E94652F9B01AC0160E070E080E0B2 -:101D800090E40E94C82F9B01AC01C701B6010E94DC -:101D9000652F6093C4047093C5048093C604909328 -:101DA000C70413C0FE01EE0FFF1FEE0FFF1FEE551D -:101DB000FB4F80819181A281B3818093C404909371 -:101DC000C504A093C604B093C7046091C404709185 -:101DD000C5048091C6049091C70420917904309184 -:101DE0007A042F3F4FEF340731F02F5F3F4F30938E -:101DF0007A04209379040E94DB116B017C0120E0BE -:101E000034E244EF51E40E94B62D87FF08C086EF0C -:101E1000C82E88E2D82E84EFE82E81E4F82E20E048 -:101E200030E040E051E4C701B6010E94652F9B01FC -:101E3000AC0160E074E284E79BE40E94BA2D6B0180 -:101E40007C010E94272E709397006093960020914A -:101E50005603309157034091580350915903C701DD -:101E6000B6010E94652F0E94272E709399006093FF -:101E7000980080918D04882309F433C1C0908804B0 -:101E8000D0908904E0908A04F0908B0420E030E048 -:101E9000A901C701B6010E94612F1816D4F58091DF -:101EA000790490917A048F3F2FEF920729F00196E1 -:101EB00090937A0480937904C701B6010E94DB11E4 -:101EC00020E030E040E051E40E94652F9B01AC012E -:101ED00060E074E284E79BE40E94BA2D6B017C0110 -:101EE0000E94272E709397006093960020915603CE -:101EF000309157034091580350915903C701B601DF -:101F00000E94652F0E94272E70939900609398007D -:101F100008C01092970010929600109299001092AB -:101F2000980060918204709183046F5F7F4F70937B -:101F3000830460938204209196003091970080E0A2 -:101F400090E0232BF1F0C0919600D09197000E9471 -:101F5000532E6B017C01BE0180E090E00E94532E65 -:101F60009B01AC016091840470918504809186048A -:101F7000909187040E94BA2D20E03FEF4FE757E48D -:101F800010C00E94532E6B017C0120E030EE4FEF19 -:101F900054E460918404709185048091860490914A -:101FA00087040E94652F9B01AC01C701B6010E9406 -:101FB000612F87FD96C0809180048F5F809380049D -:101FC00090E0209154053091550582179307A0F0B9 -:101FD00080915F05882319F0109280040DC08091D4 -:101FE00071008D7F80937100809190008F7380933A -:101FF000900010928D047DC080918104C091800476 -:10200000811128C0C0905905D0905A05E0905B0519 -:10201000F0905C0520E030E0A901C701B6010E9404 -:10202000612F1816BCF481E080938104109288041B -:102030001092890410928A0410928B04C092840436 -:10204000D0928504E0928604F0928704C150C09338 -:10205000800443C01092810410927A041092790493 -:10206000E0915605F091570548E0C49FE00DF11D41 -:10207000112480819181A281B381809388049093FF -:102080008904A0938A04B0938B0420E030E040E8F8 -:102090005EE364817581868197810E94652F6B0163 -:1020A0007C0180915A03682F70E080E090E00E94EC -:1020B000532E20E030E048EC52E40E94BA2D9B0100 -:1020C000AC01C701B6010E94652F60938404709330 -:1020D0008504809386049093870410928304109261 -:1020E00082048091580580FD04C010928D041092E6 -:1020F0008C04FF91EF91DF91CF91BF91AF919F91B0 -:102100008F917F916F915F914F913F912F91FF90B0 -:10211000EF90DF90CF90BF90AF909F908F907F9087 -:102120006F905F904F900F900FBE0F901F9018957B -:10213000CF92DF92EF92FF92CF93DF936B017C01FE -:10214000EA0180917B04811102C00E94930C80916E -:10215000580580FF46C08091CA049091CB0408972F -:102160000CF03FC0809171008D7F80937100809151 -:102170008D0481110E94AD0C81E080938C0410923B -:102180007A041092790420E030E0A901C701B60179 -:102190000E94612F1816DCF48091CA049091CB0440 -:1021A000FC01EE0FFF1FEE0FFF1FEE55FB4FC0822D -:1021B000D182E282F382FC01EE0FFF1FEE56FB4F4D -:1021C000D183C08301969093CB048093CA048091FD -:1021D000710082608093710080919000806880938C -:1021E0009000DF91CF91FF90EF90DF90CF90089516 -:1021F0008F929F92AF92BF92CF92DF92EF92FF9217 -:102200000F931F93CF93DF93EC017B01D42E4801F2 -:10221000590180917B04811102C00E94930C80912E -:10222000580580FF6BC0809171008D7F8093710095 -:1022300080918C0481110E94AD0C81E080938D040B -:10224000D0935705C0935605F0925505E09254057A -:10225000D0925F058092590590925A05A0925B0535 -:10226000B0925C0510928E0410928F04109290042C -:10227000109291041092800488819981AA81BB8177 -:102280008093880490938904A0938A04B0938B046C -:1022900020E030E040E85EE36C817D818E819F81AB -:1022A0000E94652F6B017C0180915A03682F70E0BA -:1022B00080E090E00E94532E20E030E048EC52E4B1 -:1022C0000E94BA2D9B01AC01C701B6010E94652F87 -:1022D00060938404709385048093860490938704AC -:1022E0001092830410928204809171008260809326 -:1022F000710080919000806880939000DF91CF9171 -:102300001F910F91FF90EF90DF90CF90BF90AF9013 -:102310009F908F90089580915805817008958091C5 -:1023200058058160809358050E9469280C94AE0579 -:10233000809158058E7F809358050C94692860938E -:10234000560370935703809358039093590308954D -:1023500080935A03089590915A03890F80935A03EA -:10236000089590915A03292F30E0281B31092A3013 -:10237000310524F48AE080935A030895981B9093C2 -:102380005A0308958093CC0408958091CC0490E082 -:10239000019666E070E00E9433318093CC0408958A -:1023A0008091CC0490E0019766E070E00E943331A8 -:1023B0008093CC0408958F929F92AF92BF92CF9258 -:1023C000DF92EF92FF920F931F93CF93DF936B01F6 -:1023D0007C01C0917904D0917A04BE0180E090E044 -:1023E0000E94532E4B015C01A701960160E070E052 -:1023F0008CE594E40E94BA2D9B01AC01C501B401A7 -:102400000E94652F0E94272E2091CC04233009F4CE -:1024100073C028F4222351F02130E9F02CC124307C -:1024200009F4A0C0253009F4E0C025C180E090E0A7 -:10243000A0E0BFE38093560390935703A093580303 -:10244000B093590310927C0410927D0410927E0484 -:1024500010927F0410C110927C0410927D0410929F -:102460007E0410927F046431710540F46A30710576 -:1024700060F520E030E040E85EE32BC0693C710588 -:1024800008F0AAC080E090E00E94532E20E030E0E7 -:1024900040EA51E40E94512D20E030E044E353E44F -:1024A0000E94BA2D9B01AC010E94652F20E030E014 -:1024B00040E05EE30E94652F9B01AC0160E070E0AC -:1024C00080E09EE30E94512D44C020E030E040E0D7 -:1024D0005FE3C701B6010E94652F6B017C0180E0BC -:1024E00090E0A0E0BEE38093560390935703A0933F -:1024F0005803B0935903BFC010927C0410927D041E -:1025000010927E0410927F044AE0469F9001479FFC -:10251000300D1124C90168EB7BE00E941F31BC0122 -:102520006C5D754077FF03C07195619571098827CF -:1025300077FD8095982F0E94552E2EE333EC4EE2C6 -:1025400059E30E94652F20E030E040EC5EE30E94FA -:10255000522D6093560370935703809358039093C2 -:10256000590389C010927C0410927D0410927E045D -:1025700010927F04CE0183709927892BE1F0BE0170 -:102580006170772780E090E00E94532E20E030E0D9 -:1025900040E05EE30E94652F20E030E040E45FE32E -:1025A0000E94522D609356037093570380935803F3 -:1025B000909359030CC080E090E0A0E0BFE38093CB -:1025C000560390935703A0935803B0935903C770D1 -:1025D000DD27CD2B09F04FC0109256031092570300 -:1025E000109258031092590346C010927C04109226 -:1025F0007D0410927E0410927F0400E010E020E041 -:102600003FE30093560310935703209358033093EE -:1026100059036739710578F180E090E00E94532EEC -:1026200020E030E047E153E40E94512D20E030E00B -:102630004AE754E40E94BA2D20E030E048E452E436 -:102640000E94652F20E030E040EA51E40E94972E7E -:102650000E94222E660F771F660F771FFB01EE5533 -:10266000FC4F2081318142815381C701B6010E9414 -:10267000652F6B017C01C701B601DF91CF911F91DE -:102680000F91FF90EF90DF90CF90BF90AF909F9011 -:102690008F9008958091DD040895CF93DF9300D04B -:1026A0001F92CDB7DEB79C0180916405843019F587 -:1026B00093E099833B832A839093E9008FEF909175 -:1026C000E800815095FD06C095ED9A95F1F7000060 -:1026D0008111F5CF8091E80085FF0DC040E050E00A -:1026E00063E070E0CE0101960E94AE158091E80093 -:1026F0008E778093E8000F900F900F90DF91CF912D -:102700000895CF93DF9300D01F92CDB7DEB720910D -:102710006405243021F522E029839B838A8383E0AA -:102720008093E9008FEF9091E800815095FD06C0FD -:1027300095ED9A95F1F700008111F5CF8091E800B1 -:1027400085FF0DC040E050E063E070E0CE010196EF -:102750000E94AE158091E8008E778093E8000F907C -:102760000F900F90DF91CF91089520916405243050 -:10277000F1F422E02093E9002FEF3091E80021509E -:1027800035FD06C035ED3A95F1F700002111F5CF82 -:102790002091E80025FF0BC040E050E065E070E0CC -:1027A0000E94AE158091E8008E778093E80008952E -:1027B000CF93DF93EC0190916405943009F046C00B -:1027C000809165038823D9F0809166038823B9F04E -:1027D0009093E9008FEF9091E800815095FD06C03D -:1027E00095E19A95F1F700008111F5CF8091E8000D -:1027F00085FF2CC040E050E060E170E017C081E050 -:102800008093E9008FEF9091E800815095FD06C01C -:1028100095ED9A95F1F700008111F5CF8091E800D0 -:1028200085FF14C040E050E068E070E0CE010E94F7 -:10283000AE158091E8008E778093E80080E1FE017C -:10284000ADECB4E001900D928A95E1F7DF91CF9164 -:10285000089580916305811109C00E9443170E9469 -:10286000A0178091E20084608093E20008951092A6 -:1028700063050895089508950C94E72542E061ECFE -:1028800081E00E94BD1642E061EC82E00E94BD162C -:1028900042E061EC83E00E94BD1642E161EC84E01D -:1028A0000C94BD1680916605833009F455C030F450 -:1028B000813071F0823009F48EC008958A3009F4B5 -:1028C0007AC08B3009F460C0893009F09CC020C008 -:1028D00080916505813A09F096C08091E800877F74 -:1028E0008093E8008091690590916A05892B21F415 -:1028F00060E18DEC94E003C060E080E090E070E087 -:102900000E94F9158091E8008B778093E800089584 -:1029100080916505813209F076C0809169059091BA -:102920006A05009719F0039709F06DC08091E800DF -:10293000877F8093E8008091E80082FD05C0809148 -:1029400064058111F8CF5FC08091F1008093DD04B0 -:102950008091E8008B7753C080916505813A09F03A -:1029600052C08091690590916A05892B09F04BC08E -:102970008091E800877F8093E8008091E80080FFE5 -:10298000FCCF8091650336C0809165058132D9F511 -:102990008091690590916A05892BA9F58091E800DD -:1029A000877F8093E8000E94F216809167058093EC -:1029B00065030C94281F80916505813221F5809173 -:1029C000E800877F8093E8000E94F21680916805F6 -:1029D0008093DE04089580916505813AA1F4809189 -:1029E000E800877F8093E8008091E80080FFFCCFBB -:1029F0008091DE048093F1008091E8008E778093CF -:102A0000E8000C94F216089584B7877F84BF88E1AC -:102A10000FB6F89480936000109260000FBE90E0B3 -:102A200080E80FB6F89480936100909361000FBE28 -:102A30000E94951A0E9443170E94A0178091E200FD -:102A400084608093E20078940E94261A0E94971A6C -:102A50008BE593E00E94411A80916405853069F40A -:102A60000E94A825809162058823B1F30E94D62593 -:102A7000882391F30E949815EFCF0E949F1AECCF04 -:102A8000292F332723303105C9F064F42130310573 -:102A900081F02230310509F043C08DE690E024E555 -:102AA00035E042C021323105F1F02232310541F1E9 -:102AB00037C082E190E021EC35E036C099278130C3 -:102AC000910541F08230910541F0892B49F5E0E50F -:102AD000F5E005C0E2E2F5E002C0E8EFF4E0849141 -:102AE00090E09F0121C06430D8F4E62FF0E0EE0FB3 -:102AF000FF1FE250FC4F2081318189E090E014C03B -:102B0000643070F470E0FB01EE0FFF1FEA50FC4FE1 -:102B100020813181FB01EE50FC4F808190E004C0A8 -:102B200080E090E020E030E0FA01318320830895D6 -:102B300080E189BD82E189BD09B400FEFDCF8091AD -:102B4000D8008F7D8093D8008091E00082608093D0 -:102B5000E0008091E00081FDFCCF0895CF92DF92EC -:102B6000EF92FF920F931F93CF93DF93EC018B01B2 -:102B70006A010E941117811133C0C114D10439F0C8 -:102B8000F60180819181081B190BC80FD91FE12C18 -:102B9000F12C0115110519F18091E80085FD16C091 -:102BA0008091E8008E778093E800C114D10449F049 -:102BB000F60180819181E80EF91EF182E08285E0C4 -:102BC0000FC00E941117882321F30AC089918093B6 -:102BD000F10001501109FFEFEF1AFF0ADACF80E090 -:102BE000DF91CF911F910F91FF90EF90DF90CF90E9 -:102BF000089520916B0530916C052617370748F032 -:102C00006115710539F42091E8002E772093E800D2 -:102C100001C0B90140E061157105A9F12091640579 -:102C2000222309F443C0253009F442C02091E80072 -:102C300023FD40C02091E80022FD32C02091E80031 -:102C400020FFE9CF4091F3002091F20030E0342BD7 -:102C5000FC01CF016115710559F02830310540F4B0 -:102C600081918093F100615071092F5F3F4FF1CF47 -:102C700041E02830310509F040E02091E8002E774E -:102C80002093E800C8CF4111C9CF0AC080916405E4 -:102C9000882361F0853061F08091E80083FD0AC0EF -:102CA0008091E80082FFF2CF80E0089582E00895ED -:102CB00083E0089581E0089520916B0530916C05C3 -:102CC0002617370748F06115710539F42091E8009F -:102CD0002E772093E80001C0B901FC0120E06115C6 -:102CE000710591F180916405882309F440C0853015 -:102CF00009F43FC08091E80083FD3DC08091E80069 -:102D000082FD2FC08091E80080FFE9CF2091F30081 -:102D10008091F20090E0922B6115710559F0883096 -:102D2000910540F424912093F1003196615071098E -:102D30000196F2CF21E0089709F020E08091E800A9 -:102D40008E778093E800CBCF2111CCCF0AC0809141 -:102D50006405882361F0853061F08091E80083FD8F -:102D60000AC08091E80082FFF2CF80E0089582E0FF -:102D7000089583E0089581E00895982F973058F5DD -:102D80009093E900981739F07091EC002091ED00D4 -:102D90005091F00003C0242F762F50E021FF19C07E -:102DA0003091EB003E7F3093EB003091ED003D7FA2 -:102DB0003093ED003091EB0031603093EB00709375 -:102DC000EC002093ED005093F0002091EE0027FFDF -:102DD00007C09F5FD3CF8F708093E90081E0089593 -:102DE00080E008958091650587FF11C08091E8001B -:102DF00082FD05C0809164058111F8CF11C08091DA -:102E0000E8008B770BC080916405882349F080919E -:102E1000E80080FFF8CF8091E8008E778093E8008B -:102E200008952091E4003091E50095E64091EC0092 -:102E3000842F817040FF22C08091E80080FD1CC07B -:102E400080916405882391F0853091F08091EB00AA -:102E500085FD10C04091E4005091E50042175307F2 -:102E600029F39A01915011F784E0089582E00895C2 -:102E700083E0089581E0089580E008954091E8009E -:102E800042FFDECF08950E94B1170E94B917E0EE0D -:102E9000F0E0808181608083E8EDF0E080818F77D1 -:102EA000808319BCA7EDB0E08C918E7F8C938081DC -:102EB0008F7E80831092630508950F931F93CF93A5 -:102EC000DF930E94B1170E94B917C8EDD0E0888146 -:102ED0008F77888388818068888388818F7D8883C5 -:102EE00019BC109264051092600510926205109250 -:102EF000610500EE10E0F80180818B7F808388817E -:102F00008160888342E060E080E00E94BD16E1EECF -:102F1000F0E080818E7F8083E2EEF0E0808181604E -:102F20008083808188608083F80180818E7F8083A8 -:102F3000888180618883DF91CF911F910F910895DF -:102F4000E8EDF0E080818F7E8083E7EDF0E0808126 -:102F50008160808384E082BF81E0809363050C946C -:102F60005D17E8EDF0E080818E7F80831092E200B3 -:102F700008951092DA001092E10008951F920F92C6 -:102F80000FB60F9211242F933F934F935F936F933C -:102F90007F938F939F93AF93BF93EF93FF93809112 -:102FA000E10082FF0BC08091E20082FF07C08091A8 -:102FB000E1008B7F8093E1000E94251A8091DA0066 -:102FC00080FF1FC08091D80080FF1BC08091DA0075 -:102FD0008E7F8093DA008091D90080FF0DC080E160 -:102FE00089BD82E189BD09B400FEFDCF81E08093F7 -:102FF00064050E94291405C019BC109264050E9442 -:1030000037148091E10080FF19C08091E20080FFB9 -:1030100015C08091E2008E7F8093E2008091E200F3 -:1030200080618093E2008091D80080628093D80014 -:1030300019BC85E0809364050E943B148091E100F7 -:1030400084FF30C08091E20084FF2CC080E189BD04 -:1030500082E189BD09B400FEFDCF8091D8008F7D4B -:103060008093D8008091E1008F7E8093E100809171 -:10307000E2008F7E8093E2008091E2008160809385 -:10308000E20080916005882311F084E007C0809100 -:10309000E30087FD02C081E001C083E08093640506 -:1030A0000E943C148091E10083FF29C08091E200DE -:1030B00083FF25C08091E100877F8093E10082E05B -:1030C00080936405109260058091E1008E7F80936B -:1030D000E1008091E2008E7F8093E2008091E20027 -:1030E00080618093E20042E060E080E00E94BD16D3 -:1030F0008091F00088608093F0000E943A14FF9164 -:10310000EF91BF91AF919F918F917F916F915F915F -:103110004F913F912F910F900FBE0F901F901895D8 -:103120001F920F920FB60F9211242F933F934F933C -:103130005F936F937F938F939F93AF93BF93CF933F -:10314000DF93EF93FF93C091E900CF708091EC0083 -:10315000D82FD17080FDD0E81092E9008091F00066 -:10316000877F8093F00078940E94D4181092E90031 -:103170008091F00088608093F000CD2BCF70C093D9 -:10318000E900FF91EF91DF91CF91BF91AF919F91B6 -:103190008F917F916F915F914F913F912F910F9000 -:1031A0000FBE0F901F9018951F93CF93DF93CDB74D -:1031B000DEB7AA970FB6F894DEBF0FBECDBFE5E627 -:1031C000F5E088E08E0F9091F10091938E13FBCF84 -:1031D0000E9452148091E80083FF1FC18091650511 -:1031E00090916605492F50E04A30510508F015C10D -:1031F000FA01E559FF4F0C944731803881F082384D -:1032000009F00BC1809169058F708093E90080916E -:10321000EB0085FB882780F91092E90006C08091B9 -:10322000610590916205911182609091E800977F0D -:103230009093E8008093F1001092F100C8C0282F0D -:103240002D7F09F0EAC0882319F0823061F0E5C0D3 -:1032500080916705813009F0E0C0933009F080E08B -:10326000809362052BC080916705811127C08091F2 -:1032700069058F7009F4D1C08093E9002091EB00BB -:1032800020FF1CC0933021F48091EB00806214C0B9 -:103290009091EB0090619093EB0021E030E0A90168 -:1032A00002C0440F551F8A95E2F74093EA0010923E -:1032B000EA008091EB0088608093EB001092E900B7 -:1032C0008091E800877F86C08111A7C010916705B3 -:1032D0001F778091E3008078812B8093E3008091B9 -:1032E000E800877F8093E8000E94F2168091E80052 -:1032F00080FFFCCF8091E30080688093E300111190 -:1033000002C082E001C083E08093640586C08058DB -:10331000823008F082C080916705909168058C3DED -:1033200053E0950779F583E08A838AE289834FB772 -:10333000F894DE01139620E03EE051E2E32FF0E046 -:1033400050935700E49120FF03C0E295EF703F5F78 -:10335000EF708E2F90E0EA3010F0C79601C0C09653 -:103360008D939D932F5F243149F74FBF8091E800E3 -:10337000877F8093E8006AE270E0CE0101960E94A8 -:10338000F91514C0AE014F5F5F4F609169050E944F -:103390004015BC01009709F440C09091E800977F68 -:1033A0009093E80089819A810E945C168091E800E0 -:1033B0008B778093E80031C0803879F58091E80000 -:1033C000877F8093E800809160058093F100809171 -:1033D000E8008E778093E8000E94F2161EC08111EB -:1033E0001CC0909167059230C0F48091E800877FFF -:1033F0008093E800909360050E94F216809160052A -:10340000811106C08091E30087FD02C081E001C008 -:1034100084E0809364050E943E148091E80083FF5D -:103420000AC08091E800877F8093E8008091EB00DC -:1034300080628093EB00AA960FB6F894DEBF0FBEB1 -:10344000CDBFDF91CF911F9108950895CF938091C3 -:1034500064058823A1F0C091E900CF709091EC0041 -:10346000892F817090FD80E8C82B1092E90080912F -:10347000E80083FD0E94D418CF70C093E900CF917B -:1034800008959093E4048093E3040895E091E304A5 -:10349000F091E404309721F00190F081E02D09943F -:1034A00080E00895E091E304F091E404309721F086 -:1034B0000280F381E02D09940895E091E304F091F6 -:1034C000E404309721F00480F581E02D09940895FB -:1034D0002091E1043091E2048217930771F09093F8 -:1034E000E2048093E104E091E304F091E404309776 -:1034F00021F00680F781E02D099408952091DF04E2 -:103500003091E0048217930771F09093E004809368 -:10351000DF04E091E304F091E404309721F00084AB -:10352000F185E02D0994089508950C94941A0E9451 -:103530001B260E94B30B0E94E5260C94B62C5F92CA -:103540006F927F928F929F92AF92BF92CF92DF92B3 -:10355000EF92FF920F931F93CF93DF9300D000D091 -:103560001F92CDB7DEB70E94F80B9EEEC92E94E0F5 -:10357000D92E03E010E0AA24A394B12C502E802F62 -:103580000E94730C4C01F601729062906F016826E4 -:10359000792661147104A1F40150110978F78FEFB5 -:1035A00089838A831B820E9424268160782F9D83D1 -:1035B0008C8349815A816B818D810E944F1B38C059 -:1035C0008091430581FD0E947C0C2BE030E0750169 -:1035D000022E02C0EE0CFF1C0A94E2F7C7018621FE -:1035E0009721892B09F129835A828E209F2091E00F -:1035F000892809F490E09B830E9424268160782F1B -:103600009D838C8349815A816B818D810E944F1BE0 -:10361000000F111FF801EA51FB4F80819181E826CC -:10362000F926F182E08204C02150310980F6B4CF3E -:103630000E94E8291091E5040E94461A1817D1F05B -:103640000E94461A8093E5040F900F900F900F9000 -:103650000F90DF91CF911F910F91FF90EF90DF902E -:10366000CF90BF90AF909F908F907F906F905F9022 -:103670000C949D0B0F900F900F900F900F90DF9177 -:10368000CF911F910F91FF90EF90DF90CF90BF905F -:10369000AF909F908F907F906F905F900895CF93A1 -:1036A000DF93CDB7DEB72B970FB6F894DEBF0FBE12 -:1036B000CDBF4F83588769877A878B87DE01119644 -:1036C00086E0FD0111928A95E9F785E0FE013796C3 -:1036D00001900D928A95E1F749815A816B817C8135 -:1036E0008D819E810E94C6212B960FB6F894DEBF75 -:1036F0000FBECDBFDF91CF910895CF93882309F4FA -:10370000C2C0C82F823859F40E94461A81FDBBC03E -:1037100089E30E94A0240E946D2589E30CC08338B0 -:1037200079F40E94461A80FDAEC083E50E94A02471 -:103730000E946D2583E50E94E224CF910C946D25B3 -:10374000843859F40E94461A82FD9DC087E40E9485 -:10375000A0240E946D2587E4EECF8CEF8C0F813A78 -:1037600048F48C2F0E941E2C81118DC08C2F0E943A -:10377000A024E3CF80E28C0F883048F4C77081E04A -:1037800001C0880FCA95EAF70E942625D6CF8BE59F -:103790008C0F833078F4C53A29F0C63A31F083E8CB -:1037A00090E005C081E890E002C082E890E0CF910F -:1037B0000C94681A88E58C0F833108F064C0C83A0D -:1037C00039F1C93A41F1CA3A49F1CB3A51F1CC3A0F -:1037D00059F1CD3A61F1C03B69F1CE3A71F1CF3A7E -:1037E00079F1C13B81F1C23B89F1C33B91F1C43B0B -:1037F00099F1C53BA1F1C63BA9F1C73BB1F1C83B6B -:10380000B9F1C93BC1F1CA3BC9F180E090E038C0D1 -:1038100082EE90E035C089EE90E032C08AEE90E012 -:103820002FC085EB90E02CC086EB90E029C087EBA1 -:1038300090E026C08CEC90E023C08DEC90E020C09E -:1038400083E891E01DC08AE891E01AC082E991E026 -:1038500017C084E991E014C081E292E011C083E2D4 -:1038600092E00EC084E292E00BC085E292E008C0D4 -:1038700086E292E005C087E292E002C08AE292E02E -:10388000CF910C947E1ACF910895882309F44BC0F0 -:10389000823859F40E94461A81FF45C089E30E948C -:1038A000A0240E946D2589E30CC0833871F40E9426 -:1038B000461A80FF38C083E50E94A0240E946D252F -:1038C00083E50E94E2240C946D25843859F40E940B -:1038D000461A82FF28C087E40E94A0240E946D251A -:1038E00087E4EFCF9CEF980F913A58F390E2980F4E -:1038F000983050F4877091E001C0990F8A95EAF7EB -:10390000892F0E942C25DFCF9BE5980F933020F460 -:1039100080E090E00C94681A885A833120F480E0AB -:1039200090E00C947E1A0895882321F00E942625A9 -:103930000C946D250895882321F00E942C250C9469 -:103940006D2508957F928F929F92AF92BF92CF92F2 -:10395000DF92EF92FF920F931F93CF93DF931F920B -:10396000CDB7DEB77C01C62E772EFC01058102950E -:103970000F70128111110E9443250E9499248823FF -:1039800079F0112369F080E28C0D883048F082E0F4 -:103990000E9482240E94992491E0D82ED92601C049 -:1039A000D12CE72DE295EF70F0E0EB58FF4F0C942F -:1039B0004731872D807F072D0F70882311F00295E6 -:1039C000007F112389F0002309F499C180E28C0D56 -:1039D000883020F4802F0E94262503C0802F0E946B -:1039E00036250E946D258BC18C2D0E94451C00231D -:1039F00009F4C3C180E28C0D883020F4802F0E942E -:103A00002C2503C0802F0E943C250E946D25B5C146 -:103A1000872D807F972D9F70803211F4892F03C0EE -:103A2000892F8295807FCC2021F0F1E0CF16A1F084 -:103A30001DC0112339F0002319F1013009F50E944E -:103A400056259BC1002319F0013009F496C18983E2 -:103A50000E945925898110C1112321F0063008F0F8 -:103A60008CC10EC0053008F088C106C1112359F081 -:103A7000002331F0F701958190FF41C19F7095833C -:103A80000E94941C7AC1002309F4F6C03EC1872D20 -:103A900086958695837090E0009719F0019761F004 -:103AA0006CC1112321F08C2D972D937002C080E002 -:103AB00090E00E94681A61C1112321F08C2D972D8E -:103AC000937002C080E090E00E947E1A56C18C2D57 -:103AD000112319F00E94F02802C00E9458290E9468 -:103AE000DD294BC1872D837009F052C0111145C1EA -:103AF0008C2D829586958770880F880F9C2D9F70DE -:103B0000892E912CA12CB12C082E04C0880C991C54 -:103B1000AA1CBB1C0A94D2F7C4FE14C00FE010E02C -:103B200020E030E0B901A80104C0440F551F661F12 -:103B3000771F8A95D2F7CB01BA0160957095809571 -:103B4000909503C060E070E0CB01272D2695269567 -:103B5000237030E02230310569F02330310589F0DF -:103B6000682979298A299B292130310571F00E9421 -:103B70000E2303C1682979298A299B290E942A23B7 -:103B8000FCC00E940E23C501B4010E94F222F5C0C0 -:103B9000112319F0872D817001C08695882309F4BF -:103BA000ECC08C2D829586958770880F880F9C2D90 -:103BB0009F70892E912CA12CB12C082E04C0880C4A -:103BC000991CAA1CBB1C0A94D2F7C4FE14C00FE0B7 -:103BD00010E020E030E0B901A80104C0440F551FF7 -:103BE000661F771F8A95D2F7CB01BA016095709551 -:103BF0008095909503C060E070E0CB01272D26955D -:103C000026952370422F50E04230510569F0433031 -:103C1000510589F0682979298A299B294130510564 -:103C200071F00E94E823A9C0682979298A299B2973 -:103C30000E940424A2C00E94E823C501B4010E948E -:103C4000CC239BC08C2D90E0FC01E05EF109E531B6 -:103C5000F10508F050C0EB57FF4F0C9447310C2D85 -:103C60000F70872D8F71112321F00E946523802F03 -:103C700007CF0E948623802F0E949B1C7EC01123A9 -:103C800041F0053008F079C0872D8F710E94AB2379 -:103C900074C0063008F071C0F7CF112339F0872DBA -:103CA0008F710E94652369C01123C9F3872D8F711D -:103CB0000E94862362C0112329F0872D8F710E94F4 -:103CC00050235BC00E94462358C0112351F0172D8A -:103CD0001F71812F0E94652363E0812F0E94792448 -:103CE0004CC081E00E948224023008F446C082E089 -:103CF0000E94822442C0112331F0002381F28C2DD6 -:103D00000E947D1B3AC0002389F28C2D0E94451C25 -:103D100034C0472D4F706C2DC7010E9465040E946E -:103D20006A222BC0111129C0472D4F7050E042303C -:103D30005105B9F04CF44115510581F04130510560 -:103D4000E1F40E94DE2C19C04330510569F0443083 -:103D5000510599F48C2D0E94302D0FC00E94C72C64 -:103D60000CC00E94FA2C09C00E940D2D06C0472DE0 -:103D70004F706C2DC7010E943E08DD20F9F00E94B3 -:103D8000752480FD1BC0F70112820E946F240E94DF -:103D90006523C7010E94ED1E0E946F240F90DF91E2 -:103DA000CF911F910F91FF90EF90DF90CF90BF9038 -:103DB000AF909F908F907F900C9486230F90DF910F -:103DC000CF911F910F91FF90EF90DF90CF90BF9018 -:103DD000AF909F908F907F9008950F931F93CF93F4 -:103DE000DF93EC01888199812B813C81232BB9F0F1 -:103DF0009F3F11F48F3F99F0CE010E943D0688232A -:103E000071F0688179818A810E946B248C010E9403 -:103E100020240E94E722B801CE010E94A21CDF915B -:103E2000CF911F910F9108950E9443250E94532521 -:103E30000E9418250E946D250E948E2A0E94DD296D -:103E400080E090E00E94681A80E090E00C947E1A76 -:103E50000E9433250C94141F0E946024292F229560 -:103E60002F7030E02C3031054CF42A3031056CF4E1 -:103E70002250310922303105A8F407C02C30310519 -:103E800069F02F30310551F00DC0803F69F018F412 -:103E9000803E40F409C0843F29F406C093FB882784 -:103EA00080F9089580E0089581E00895CF93DF932D -:103EB00000D000D01F92CDB7DEB70F900F900F90BB -:103EC0000F900F90DF91CF910895CF93DF9300D0A3 -:103ED00000D000D0CDB7DEB726960FB6F894DEBF7F -:103EE0000FBECDBFDF91CF9108951F93CF93DF9386 -:103EF000C091EE0416E08091EF04C81799F0D0E06D -:103F00001C9FF0011D9FF00D1124E051FB4F4081DB -:103F1000518162817381848195810E94651F219600 -:103F2000C770E9CFDF91CF911F910895409120058F -:103F300050912105609122057091230580912405FF -:103F4000909125050C94651F8091250582958F70B1 -:103F500009F054C080912205882309F44FC0809154 -:103F6000EE04A091EF04609120057091210540912D -:103F7000230550912405B6E08A1709F43FC090E06C -:103F800041155105C1F17F3F11F46F3FA1F1B89F79 -:103F9000F001B99FF00D1124E051FB4F2181721304 -:103FA0002AC02081621327C02281211124C02381CD -:103FB00034812417350710F421503109241B350BA7 -:103FC000283C3105C0F4209125052F7020612093F5 -:103FD000250526E0289FF001299FF00D1124EB50C4 -:103FE000FB4F80818F708061808380E295E00E942A -:103FF000ED1E0C94751F01968770BECF0895CF9269 -:10400000DF92EF92FF920F931F93CF93DF93CDB781 -:10401000DEB762970FB6F894DEBF0FBECDBF8C013E -:1040200085E0F801DE011D9601900D928A95E1F779 -:10403000D8014C9111965C91119712966C91129740 -:104040001396CD90DC901497309120057091210546 -:104050008091230590912405009709F46BC17F3F5F -:1040600019F43F3F09F466C1E0902205EE2009F4FF -:10407000C0C020912505C816D90628F0F601E81B16 -:10408000F90BCF0104C0809590958C0D9D1DFF24E8 -:10409000F394883C910578F0F12C207F09F0C6C09C -:1040A0007C2DD98AC88A89890E94561F80E295E0B2 -:1040B0000E94ED1EB1C0822F807F09F046C07513AB -:1040C00014C0341312C0611110C02F7020612093EE -:1040D00025050E94961F80E295E00E94ED1E8091CA -:1040E0002505D80115968C932EC0CD2819F15F3F78 -:1040F00011F44F3FF9F0F62E61111CC08091EE04CF -:104100002091EF0436E0821709F45AC090E0389FFE -:10411000F001399FF00D1124E051FB4F71815713CD -:1041200006C07081471303C07281711103C00196EC -:104130008770E9CFF62E662309F418C18091250512 -:10414000816080932505F12C11C1751308C03413CB -:1041500006C0611104C080912505D801C3C04D87F8 -:104160005E878D859E856A8B0E942C1F6A898823B5 -:10417000E1F16623D1F120912505822F82958F7080 -:1041800090E0029774F08091200590912105988726 -:104190008F831986DB86CA862C87CE0107960E94FC -:1041A000ED1E86E0F801A0E2B5E001900D928A953F -:1041B000E1F70E94A41F0E94961FFF24F394D6C02B -:1041C0004D875E878D859E850E946024292F2295CC -:1041D0002F7030E0223031050CF0BCC09F7009F028 -:1041E000B6C0805E883008F4C1C0C8010E94ED1ED0 -:1041F000E4CFC816D90608F453C0F601E81BF90B42 -:10420000CF01883C910508F450C0F12C7C2DD98A4F -:10421000C88A89890E94561FE0E2F5E086E0DF0146 -:104220001D928A95E9F70E94961FA0C0751314C0CD -:10423000341312C0611110C080912505F8018583E7 -:10424000C8010E94ED1E86E0E0E2F5E0DF011D926C -:104250008A95E9F7FE2C8AC04D875E878D859E85FD -:104260006A8B0E942C1F6A89882309F4BECF6623BB -:1042700009F4BBCF20912505822F82958F7090E0A5 -:1042800002970CF48ECF80912005909121059A839E -:1042900089831B82DD82CC822E83CE0101967FCF63 -:1042A000809590958C0D9D1DACCFF62E662309F45C -:1042B0009CCF75132EC034132CC02091250520FDF2 -:1042C0001FC0822F82958F70D9F0D80115962C933C -:1042D00015978F3049F08F5F982F9295907F822F9E -:1042E0008F70892B15968C93C8010E94ED1E86E075 -:1042F000F801A0E2B5E001900D928A95E1F793CF25 -:1043000086E0F801A0E2B5E001900D928A95E1F710 -:104310002DC04D875E878D859E850E942C1F811143 -:1043200040CF80912505816080932505C8010E94BA -:10433000ED1E1CC0662309F458CF4D875E878D851E -:104340009E850E942C1F882309F44FCF2ACF81110C -:1043500048CF0CC0243031050CF047CF9F7009F4D2 -:1043600040CFF8019581907F09F03BCF8F2D629669 -:104370000FB6F894DEBF0FBECDBFDF91CF911F9176 -:104380000F91FF90EF90DF90CF9008951F93CF9300 -:10439000DF93CDB7DEB72C970FB6F894DEBF0FBE14 -:1043A000CDBF4F83588769877A878B879C87CE01DB -:1043B00007960E94FF1F882369F08F8198852A85C0 -:1043C0003B85232BF1F19F3F09F063C08F3F09F03C -:1043D00060C037C086E0FE013796DE01119601907D -:1043E0000D928A95E1F76F817885EA85FB85309794 -:1043F00041F17F3F11F46F3F21F12091EF0430E054 -:10440000C9010196877099274091EE0450E0841706 -:10441000950709F447C069837A83FD83EC8396E0AE -:10442000929FD001939FB00D1124A051BB4FFE016C -:10443000319601900D929A95E1F78093EF040E94D6 -:10444000751F16E08091EE049091EF048917C1F179 -:10445000189FC001112480519B4F0E94FF1F882389 -:1044600079F1E091EE041E9FF0011124E051FB4F21 -:104470004081518162817381848195810E94651F91 -:104480008091EE0490E00196877099278093EE0466 -:10449000D9CF4F81588569857A858B859C850E9407 -:1044A000651FCFCF0E94281F1092EF041092EE04D8 -:1044B000E0E2F5E086E0DF011D928A95E9F7C1CFE1 -:1044C0002C960FB6F894DEBF0FBECDBFDF91CF9113 -:1044D0001F910895EF92FF920F931F93CF93DF9355 -:1044E0008C01009709F46CC0F12CEE24E394E801F0 -:1044F0002196F8018491843740F4843008F051C04B -:10450000813081F0823019F15BC0853709F444C0F5 -:10451000A8F19CE7980F903708F052C08F770E945F -:10452000451C41C00E5F1F4FFE01C49180E28C0FFD -:10453000883048F4C7708E2D01C0880FCA95EAF7FD -:104540000E94462514C08C2F0E947D1B2DC00E5F3B -:104550001F4FFE01C49180E28C0F883058F4C77061 -:104560008E2D01C0880FCA95EAF70E944C250E9443 -:104570006D251AC08C2F0E94451C16C00E5F1F4F60 -:10458000FE01C491CC2381F08FE99FE00197F1F700 -:1045900000C00000C150F6CF0E5F1F4FFE01F49027 -:1045A00003C00E947D1B8E018F2D882309F49FCFAD -:1045B000EFE9FFE03197F1F700C000008150F5CF3F -:1045C000DF91CF911F910F91FF90EF900895089583 -:1045D00060932A0570932B0580932C0590932D05ED -:1045E0000C94141F0F931F9300912A0510912B0513 -:1045F00020912C0530912D05DC01CB01802B912BD6 -:10460000A22BB32B80932A0590932B05A0932C0506 -:10461000B0932D051F910F910C94141F0F931F93AE -:1046200000912A0510912B0520912C0530912D0524 -:10463000DC01CB0180239123A223B32380932A059D -:1046400090932B05A0932C05B0932D051F910F91EE -:104650000C94141F0F931F9300912A0510912B05A2 -:1046600020912C0530912D05DC01CB01802791276D -:10467000A227B32780932A0590932B05A0932C059E -:10468000B0932D051F910F910C94141F10922605C5 -:104690001092270510922805109229050C94141FDA -:1046A00041E050E060E070E004C0440F551F661F19 -:1046B000771F8A95D2F7409326055093270560937C -:1046C0002805709329050C94141F41E050E060E028 -:1046D00070E004C0440F551F661F771F8A95D2F7FC -:1046E0008091260590912705A0912805B091290574 -:1046F000482B592B6A2B7B2B40932605509327057B -:1047000060932805709329050C94141F41E050E034 -:1047100060E070E004C0440F551F661F771F8A9544 -:10472000D2F74095509560957095809126059091AF -:104730002705A0912805B0912905482359236A230C -:104740007B2340932605509327056093280570939B -:1047500029050C94141F41E050E060E070E004C0B3 -:10476000440F551F661F771F8A95D2F78091260543 -:1047700090912705A0912805B09129054827592730 -:104780006A277B27409326055093270560932805C9 -:10479000709329050C94141F0F931F930091260505 -:1047A000109127052091280530912905DC01CB01C6 -:1047B000802B912BA22BB32B80932605909327055A -:1047C000A0932805B09329051F910F910C94141FF5 -:1047D0000F931F930091260510912705209128051E -:1047E00030912905DC01CB0180239123A223B3233F -:1047F0008093260590932705A0932805B09329055B -:104800001F910F910C94141F0F931F930091260575 -:10481000109127052091280530912905DC01CB0155 -:1048200080279127A227B3278093260590932705F9 -:10483000A0932805B09329051F910F910C94141F84 -:104840000895CF92DF92EF92FF920F931F93CF9331 -:10485000DF938C01C0902A05D0902B05E0902C05A9 -:10486000F0902D058091260590912705A0912805AF -:10487000B0912905C82AD92AEA2AFB2ACFE1D0E03B -:10488000D701C6010C2E04C0B695A79597958795BC -:104890000A94D2F780FF06C0B8018C2F0E94C30A89 -:1048A000019721F4219760F780E001C08C2FDF9100 -:1048B000CF911F910F91FF90EF90DF90CF900895CF -:1048C000CF93DF93EC010E942124BE010E94C30A12 -:1048D000DF91CF910895CB010E94602408958091CB -:1048E0002E05859585958595089580912E0587706F -:1048F000089598E0899F90011124262B20932E057E -:104900000C94652320912E058095822380932E059B -:10491000982F977069F430E0482F552747FD509540 -:104920002417350729F08595859585950C94862360 -:10493000089590912E05977081E009F480E0089524 -:1049400090916503992321F090916603911109C01C -:104950002091670330916803F90132969FEF40E0A0 -:104960001FC0982F9695969596959F3050F5E0919B -:104970006703F0916803E90FF11D877021E030E0D3 -:10498000A90102C0440F551F8A95E2F7CA0191811F -:10499000892B818308959F3F39F04F5F4E3041F05E -:1049A00051915813F8CF0DC05111F7CF942FF5CF77 -:1049B0009F3F39F0F901E90FF11D97FDFA958283C8 -:1049C0000895089590916503992321F090916603CD -:1049D000911109C02091670330916803F901329663 -:1049E000205F3F4F1FC0982F9695969596959F30C4 -:1049F000F0F4E0916703F0916803E90FF11D87700F -:104A000021E030E0A90102C0440F551F8A95E2F76A -:104A1000CA01809591818923818308953196E21797 -:104A2000F30729F090819813F9CF1082F7CF0895FA -:104A300081E090E0E0916703F0916803E80FF91FCF -:104A40001082019680319105A9F708959091420551 -:104A5000892B809342050895809590914205892382 -:104A60008093420508951092420508959091410562 -:104A7000892B809341050895809590914105892364 -:104A80008093410508951092410508959091400545 -:104A9000892B809340050895809590914005892346 -:104AA00080934005089510924005089580932F0546 -:104AB000089510922F0508958091670390916803DF -:104AC000FC0131969C01205F3F4F80E09191911154 -:104AD0008F5FE217F307D1F70895E0916703F09134 -:104AE0006803809142058083E0916703F091680339 -:104AF000908180914105892B8083E0916703F0913B -:104B00006803908180914005892B808380912F05D7 -:104B1000882361F0E0916703F09168039081892B0D -:104B200080830E945C25811110922F05809167037C -:104B3000909168030C94521A20E0009739F0AC0170 -:104B400041505109842395232F5FF7CF822F089579 -:104B500080916405843039F11092440520E488E1A5 -:104B600090E00FB6F894A895809360000FBE209354 -:104B7000600080E00E94C00380E00E949D0B83B72C -:104B8000817F846083BF83B7816083BF7894889579 -:104B900083B78E7F83BF88E10FB6F894809360005F -:104BA000109260000FBE08950895089580E00E945D -:104BB000C0030E94D4250E94F80B0E94D5250E94B4 -:104BC0007D0C91E0811101C090E0892F08950E9431 -:104BD000281F80E00E94C0030E94B62C0E94461A43 -:104BE0000C949D0B1F920F920FB60F9211248F936E -:104BF0009F93AF93BF9380914405811113C080911F -:104C0000450590914605A0914705B091480541960C -:104C1000A11DB11D8093450590934605A0934705BE -:104C2000B0934805BF91AF919F918F910F900FBEA8 -:104C30000F901F90189582E084BD93E095BD9AEF88 -:104C400097BD80936E0008952FB7F8948091450525 -:104C500090914605A0914705B09148052FBF089552 -:104C6000CF92DF92EF92FF920F931F932FB7F8949A -:104C70004091450550914605609147057091480562 -:104C80002FBF6A017B01EE24FF248C0120E030E07D -:104C9000C016D106E206F30610F4415051099A01FC -:104CA000281B390BC9011F910F91FF90EF90DF90E6 -:104CB000CF9008951F920F920FB60F9211248F93E9 -:104CC0009F93AF93BF938091450590914605A09126 -:104CD0004705B09148050196A11DB11D809345057A -:104CE00090934605A0934705B0934805BF91AF91B7 -:104CF0009F918F910F900FBE0F901F9018950E945B -:104D00004317F8942FEF87EA91E6215080409040B6 -:104D1000E1F700C0000087E090EBDC0180936F05B5 -:104D200090937005A0937105B09372059CE088E1A3 -:104D30000FB6F894A895809360000FBE9093600022 -:104D4000FFCFCF92DF92EF92FF920F931F93CF93FB -:104D5000DF93D82FC3E0EE24E394F12C8C2F0E9434 -:104D6000730C6C010BE010E09701002E02C0220FC3 -:104D7000331F0A94E2F72C213D21232B49F0602FA9 -:104D80007C2F80E00E943F08D81302C081E006C05B -:104D90000150110948F7C15008F780E0DF91CF9129 -:104DA0001F910F91FF90EF90DF90CF900895CF93D8 -:104DB000C82F8CE20E94A126882321F08C2FCF914E -:104DC0000C94A12680E0CF910895CF930E943628BD -:104DD000811102C00E941228C5E6C15049F00E940C -:104DE000F80B8FE39CE90197F1F700C00000F5CFC5 -:104DF00089E20E94D726811113C18AE20E94D72638 -:104E000081110E94122885E00E94D72681110E94FC -:104E10007F260E9441288093430587E00E94D72681 -:104E20008823A9F18BE10E94D726882351F0809135 -:104E3000430581FB222720F991E0922790FB81F91D -:104E40000EC08EE00E94D726882361F08091430532 -:104E500082FB222720F991E0922790FB82F9809330 -:104E6000430515C080E10E94D72690914305882311 -:104E700041F093FB222720F981E0822780FB93F900 -:104E800004C0892F809580FB90F990934305809111 -:104E900043050E9445280E94532880936D0580EEAB -:104EA0000E94D726882341F080916D05982F909518 -:104EB00090FB80F980936D0589E30E94D7268823B3 -:104EC00059F080916D0581FB222720F991E092270E -:104ED00090FB81F980936D0582EE0E94D72688238E -:104EE00059F080916D0582FB222720F991E09227ED -:104EF00090FB82F980936D0586EE0E94D726882369 -:104F000059F080916D0583FB222720F991E09227CB -:104F100090FB83F980936D0583EE0E94D72688234A -:104F200059F080916D0584FB222720F991E09227AA -:104F300090FB84F980936D0585E30E94D726882332 -:104F400059F080916D0585FB222720F991E0922789 -:104F500090FB85F980936D0581E30E94D726882315 -:104F600059F080916D0586FB222720F991E0922768 -:104F700090FB86F980936D0581E10E94D7268823F6 -:104F800059F080916D0587FB222720F991E0922747 -:104F900090FB87F980936D0580916D050E945728DD -:104FA00080916D0587FB882780F98093660387E2EF -:104FB0000E94D726C82F8EE10E94D7268111C26099 -:104FC0008FE10E94D7268111C46080E20E94D7261B -:104FD0008111C86081E20E94D7268111C06182E2FE -:104FE0000E94D7268111C06283E20E94D7268111D8 -:104FF000C06484E20E94D726882311F0C06802C0F2 -:10500000CC2329F08C2F0E944E286C2F03C00E94C5 -:105010004A28682F70E080E090E0CF910C94E8225D -:10502000CF9108956DEE7EEF80E090E00E946D31AB -:1050300060E082E090E00E945B3160E083E090E01D -:105040000E945B3160E084E090E00E945B3160E0B0 -:1050500085E090E00E945B3160E086E090E00E9495 -:105060005B316FEF87E090E00C945B3180E090E083 -:105070000E94553121E08D3E9E4F09F020E0822FA5 -:10508000089582E090E00C944D31682F82E090E02A -:105090000C945B3183E090E00C944D31682F83E0F9 -:1050A00090E00C945B3184E090E00C944D31682FDB -:1050B00084E090E00C945B3186E090E00C944D31FC -:1050C000682F86E090E00C945B3187E090E00C94D0 -:1050D0004D31682F87E090E00C945B3180914B0557 -:1050E00080FF0BC060916C0385E0689FB0011124C4 -:1050F00075956795759567952BC081FF09C060917F -:105100006C0385E0689FB00111247595679520C0F8 -:1051100082FF07C060916C0385E0689FB001112495 -:1051200017C090914C059923D1F060916B039617AD -:1051300088F720916C0385E0289F90011124929FAD -:10514000A001939F500D112470E0CA010E943331D9 -:105150006038710540F46115710539F002C065E0F1 -:1051600070E0862F08958FE7089581E0089580917B -:105170004B0580FF08C060916A0370E075956795E4 -:105180007595679521C081FF06C060916A0370E044 -:105190007595679519C082FF04C060916A0370E03D -:1051A00010C090914C059923C1F060916903961746 -:1051B000A0F780916A03899FC001112470E00E94CA -:1051C00033316038710528F46115710521F0862F9F -:1051D00008958FE7089581E0089561E070E0F4CFCD -:1051E000803F21F40E946E28819504C0813F29F4FC -:1051F0000E946E2880934F050895823F21F40E94FB -:105200006E28819504C0833F29F40E946E28809304 -:105210004E050895893F19F40E94B72805C08A3FBA -:1052200031F40E94B72881958093500508958B3FF3 -:1052300021F40E94B728819504C08C3F29F40E9474 -:10524000B728809351050895843F21F480914D053E -:10525000816017C0853F21F480914D05826011C0A7 -:10526000863F21F480914D0584600BC0873F21F477 -:1052700080914D05886005C0883F31F480914D05CF -:10528000806180934D0508958D3F21F480914B05F9 -:1052900081600BC08E3F21F480914B05826005C078 -:1052A0008F3F29F480914B05846080934B050895CE -:1052B000803F39F480914F0587FF6CC010924F05F5 -:1052C00069C0813F29F480914F051816BCF362C074 -:1052D00090914E05823F29F497FF5CC010924E05D5 -:1052E00059C0833F19F41916CCF354C0893F41F4D7 -:1052F0008091500518160CF04DC0109250054AC010 -:105300008A3F29F48091500587FF44C0F6CF8B3F38 -:1053100039F48091510587FF3DC0109251053AC084 -:105320008C3F29F4809151051816BCF333C0843F9B -:1053300021F480914D058E7F17C0853F21F4809127 -:105340004D058D7F11C0863F21F480914D058B7FE7 -:105350000BC0873F21F480914D05877F05C0883FB2 -:1053600031F480914D058F7E80934D0513C08D3FA4 -:1053700021F480914B058E7F0BC08E3F21F48091EC -:105380004B058D7F05C08F3F29F480914B058B7FA6 -:1053900080934B0580914E0581110EC080914F0581 -:1053A00081110AC080915005811106C0809151057C -:1053B000811102C010924C0508958DE495E00E9481 -:1053C0005D1A0E94242690934A058093490508950A -:1053D0001F93CF93DF938091490590914A050E94D6 -:1053E0003026AC0190914C05992321F020916D035A -:1053F00030E006C020916E038AE0289F90011124BE -:105400004217530708F486C080914E05C0914F059E -:10541000D091500510915105811107C0C11176C07E -:10542000D11174C0111172C075C09F3F19F09F5FF8 -:1054300090934C05181624F40E946E2880934E0514 -:1054400080914E0587FF05C00E946E28819580934C -:105450004E051C1624F40E946E2880934F058091FF -:105460004F0587FF05C00E946E28819580934F05E8 -:1054700060914E05662339F1C0914F05CC2319F197 -:10548000772767FD7095872F972F0E94552E23E36E -:1054900033E343E35FE30E94652F0E94222E609373 -:1054A0004E056C2F772767FD7095872F972F0E94E9 -:1054B000552E23E333E343E35FE30E94652F0E940D -:1054C000222E60934F051D1624F40E94B728809366 -:1054D00050058091500587FF05C00E94B72881952F -:1054E00080935005111624F40E94B728809351052B -:1054F0008091510587FF05C00E94B7288195809350 -:105500005105DF91CF911F910C94DD299F3F09F048 -:105510008ECF96CFDF91CF911F910895EDE4F5E006 -:1055200085E0DF011D928A95E9F710924C051092F3 -:105530004B050895833081F128F4813059F0823091 -:10554000D1F00895853009F449C0B8F1863009F4E6 -:1055500056C0089580916E03262F30E0280F311D2C -:105560002F3F310524F4680F60936E0308958FEF89 -:1055700080936E03089580916D03262F30E0280FED -:10558000311D2F3F310524F4680F60936D0308959A -:105590008FEF80936D03089580916C03262F30E088 -:1055A000280F311D2F3F310524F4680F60936C03E1 -:1055B00008958FEF80936C03089580916B03262FDD -:1055C00030E0280F311D2F3F310524F4680F609320 -:1055D0006B0308958FEF80936B03089580916A03A6 -:1055E000262F30E0280F311D2F3F310524F4680F9E -:1055F00060936A0308958FEF80936A030895809102 -:105600006903262F30E0280F311D2F3F310524F488 -:10561000680F6093690308958FEF8093690308957D -:10562000833011F128F4813049F0823091F00895EF -:10563000853081F120F18630C1F1089580916E03AB -:10564000681720F4861B80936E03089510926E03F2 -:10565000089580916D03681720F4861B80936D0375 -:10566000089510926D03089580916C03681720F4DB -:10567000861B80936C03089510926C0308958091AB -:105680006B03681720F4861B80936B0308951092B8 -:105690006B03089580916A03681720F4861B80933A -:1056A0006A03089510926A03089580916903681748 -:1056B00020F4861B8093690308951092690308956E -:1056C0000F931F938B3109F470C0A0F58E3009F44D -:1056D0007FC0C0F4873009F456C068F4863009F002 -:1056E000A5C080914305817F8E7F8093430581E033 -:1056F000809353059CC0883009F491C08B3009F425 -:105700008EC094C0813109F46DC068F4803109F015 -:105710008DC08091430583FB222720F991E09227D9 -:1057200090FB83F94BC0863109F479C0893109F4C3 -:1057300076C07CC0853309F474C068F4873209F4FC -:1057400070C028F48E3108F471C08D5155C0893273 -:1057500009F467C06BC0833438F48A3308F04BC057 -:10576000883309F45CC062C0833409F45AC08834B9 -:1057700009F05CC00E94281F0E94AD0C0E94940595 -:105780000E947F264CC090914305892F809581709F -:1057900080FB90F929F0966098609093430547C08C -:1057A000997F977F909343053AC08091430581FB91 -:1057B000222720F991E0922790FB81F980934305FD -:1057C000992369F18091430581608093430527C047 -:1057D0008091430582FB222720F991E0922790FBDC -:1057E00082F9ECCF0E94281F9091660381E08927FF -:1057F0008093660314C0895341E050E060E070E09C -:105800008A019B0104C0000F111F221F331F8A95BC -:10581000D2F7C901B8010E94E8220E94281F81E046 -:1058200006C061E070E080E090E0F5CF80E01F917D -:105830000F91089580E0089580E00895CF93C82FD8 -:1058400080915305813069F018F08230C9F184C02D -:10585000E0916703F09168038081823209F07EC095 -:1058600007C0E0916703F09168038081823261F4A0 -:105870008C2F0E941A2C811104C08C2F0E94602B47 -:105880001DC081E090E01AC08C2F0E941C2C811159 -:1058900014C0C43179F048F4CB3079F0C03109F04C -:1058A00061C082E08093530508C0C93219F0C83343 -:1058B00021F058C01092530555C081E0817054C04A -:1058C000C93291F120F5C43179F1B0F4C73009F053 -:1058D00047C08EE180936E0382E380936D038AE07C -:1058E00080936C0384E180936B0388E080936A0368 -:1058F00088E28093690334C0CE51C63088F5EC2F1E -:10590000F0E0EA5FFB4F80818093520529C0CE34DE -:10591000E9F020F4CB3421F56AE013C0C13579F009 -:10592000C235F1F461E00DC080915205882319F071 -:105930001092520515C081E08093530515C061E0B7 -:1059400006C0809152050E949A2A0AC06AE080919E -:1059500052050E94102B04C01092530580E004C031 -:1059600081E002C080E0AACFCF9108950E9436283E -:10597000811102C00E9412280E945C2880936E054B -:1059800080FF02C0869501C080E00C94C003809126 -:105990006E05982F9695292F30E0233031054CF471 -:1059A0009F5F990F8170892B816080936E050E94A3 -:1059B000602880916E0586950C94C00380916E05D9 -:1059C000982F969591F09158990F8170892B80931B -:1059D0006E058E7F91E009F490E080916E0590FB5A -:1059E00080F980936E050E94602880916E058695EF -:1059F0000C94C00380916E05982F909590FB80F9D0 -:105A000080936E050E94602880916E0580FF02C021 -:105A1000869501C080E00C94C00390916E05892F9B -:105A200086958F5F8F779170843028F4880F892B4B -:105A300080936E0502C090936E0580916E058E7FF7 -:105A400091E009F490E080916E0590FB80F98093DD -:105A50006E050E94602880916E0586950C94C003A7 -:105A600020916E05922F96958927982F990F822F56 -:105A70008170892B80936E058E7F91E009F490E010 -:105A800080916E0590FB80F980936E050E946028DE -:105A900080916E0586950C94C00380916E05869565 -:105AA00008955058BB27AA270ED0D1C1C2D130F0DB -:105AB000C7D120F031F49F3F11F41EF4B7C10EF4AA -:105AC000E095E7FB9FC1E92FD3D180F3BA176207B6 -:105AD00073078407950718F071F49EF5EBC10EF477 -:105AE000E0950B2EBA2FA02D0B01B90190010C01EE -:105AF000CA01A0011124FF27591B99F0593F50F406 -:105B0000503E68F11A16F040A22F232F342F44275D -:105B1000585FF3CF469537952795A795F040539555 -:105B2000C9F77EF41F16BA0B620B730B840BBAF025 -:105B30009150A1F0FF0FBB1F661F771F881FC2F790 -:105B40000EC0BA0F621F731F841F48F487957795A4 -:105B50006795B795F7959E3F08F0B3CF9395880F5B -:105B600008F09927EE0F97958795089527D108F4A7 -:105B700081E008950CD06BC163D140F05AD130F070 -:105B800021F45F3F19F03EC1511195C14FC170D151 -:105B900098F39923C9F35523B1F3951B550BBB27F4 -:105BA000AA2762177307840738F09F5F5F4F220FA1 -:105BB000331F441FAA1FA9F333D00E2E3AF0E0E89A -:105BC00030D091505040E695001CCAF729D0FE2FE6 -:105BD00027D0660F771F881FBB1F26173707480778 -:105BE000AB07B0E809F0BB0B802DBF01FF2793582E -:105BF0005F4F2AF09E3F510568F004C15CC15F3FD2 -:105C0000ECF3983EDCF3869577956795B795F79515 -:105C10009F5FC9F7880F911D9695879597F908950D -:105C2000E1E0660F771F881FBB1F621773078407A9 -:105C3000BA0720F0621B730B840BBA0BEE1F88F7B8 -:105C4000E095089504D06894B11135C1089518D134 -:105C500088F09F5790F0B92F9927B751A0F0D1F055 -:105C6000660F771F881F991F1AF0BA95C9F712C0DF -:105C7000B13081F01FD1B1E008951CC1672F782F9A -:105C80008827B85F39F0B93FCCF38695779567954B -:105C9000B395D9F73EF490958095709561957F4FB7 -:105CA0008F4F9F4F0895E89409C097FB3EF490955D -:105CB0008095709561957F4F8F4F9F4F9923A9F0E5 -:105CC000F92F96E9BB279395F69587957795679574 -:105CD000B795F111F8CFFAF4BB0F11F460FF1BC0B8 -:105CE0006F5F7F4F8F4F9F4F16C0882311F096E94B -:105CF00011C0772321F09EE8872F762F05C06623F9 -:105D000071F096E8862F70E060E02AF09A95660FB1 -:105D1000771F881FDAF7880F9695879597F908956A -:105D200088D018F011F08CD038F480C0C4C0E92FAE -:105D30009FD0B0F35523C9F3E7FB621773078407BD -:105D40009507A8F199F3E92FFF2788232AF03197C7 -:105D5000660F771F881FDAF7952F5527442332F0F7 -:105D600091505040220F331F441FD2F7BB27E91B2D -:105D7000F50B621B730B840BB109C1F222F4620FA5 -:105D8000731F841FB11D31972AF0660F771F881F7C -:105D9000BB1FEFCF915050405AF041F0882332F0B2 -:105DA000660F771F881F91505040C1F7939530C000 -:105DB0008695779567959F5FD9F7F8CF990F00087B -:105DC000550FAA0BE0E8FEEF16161706E807F907CD -:105DD000C0F012161306E407F50798F0621B730B68 -:105DE000840B950B39F40A2661F0232B242B252BE9 -:105DF00021F408950A2609F4A140A6958FEF811D8C -:105E0000811D089597F99F6780E870E060E008952C -:105E10009F3F31F0915020F4879577956795B7951E -:105E2000880F911D9695879597F908959FEF80ECBF -:105E3000089500240A9416161706180609060895F0 -:105E400000240A9412161306140605060895092E56 -:105E50000394000C11F4882352F0BB0F40F4BF2BC5 -:105E600011F460FF04C06F5F7F4F8F4F9F4F089505 -:105E700057FD9058440F551F59F05F3F71F04795FB -:105E8000880F97FB991F61F09F3F79F087950895E0 -:105E9000121613061406551FF2CF4695F1DF08C0FF -:105EA000161617061806991FF1CF8695710561051C -:105EB00008940895E894BB2766277727CB0197F9C4 -:105EC00008957CDF08F48FEF08950BD0C0CFB1DFC9 -:105ED00028F0B6DF18F0952309F094CFA7CF11244E -:105EE000EACFC6DFA0F3959FD1F3950F50E0551F81 -:105EF000629FF001729FBB27F00DB11D639FAA271F -:105F0000F00DB11DAA1F649F6627B00DA11D661F6D -:105F1000829F2227B00DA11D621F739FB00DA11D8E -:105F2000621F839FA00D611D221F749F3327A00D48 -:105F3000611D231F849F600D211D822F762F6A2FE4 -:105F400011249F5750408AF0E1F088234AF0EE0F69 -:105F5000FF1FBB1F661F771F881F91505040A9F776 -:105F60009E3F510570F04ECFA6CF5F3FECF3983EB9 -:105F7000DCF3869577956795B795F795E7959F5FDD -:105F8000C1F7FE2B880F911D9695879597F9089577 -:105F9000FA01EE0FFF1F30962105310599F16115C9 -:105FA000710561F48038BFE39B0749F1689490382C -:105FB000810561F08038BFEF9B0741F0992342F5DE -:105FC000FF3FE1053105210511F1E8940894E795BB -:105FD000D901AA2329F4AB2FBE2FF85FD0F310C04C -:105FE000FF5F70F4A695E0F7F73950F019F0FF3A2B -:105FF00038F49F779F930CD00F9007FC905808952A -:106000003EF014CF60E070E080E89FE308954FE732 -:106010009F775F934F933F932F939ED02F913F9104 -:106020004F915F9152DF05C019F40EF0EBCE42CFD5 -:10603000FDCE26DFC8F39638C0F707F80F92E89434 -:106040002BE33AEA48EB5FE74EDF0F920F920F9295 -:106050004DB75EB70F92C0D0E4E3F1E016D04F9198 -:106060005F91EF91FF91E595EE1FFF1F49F0FE57FD -:10607000E0684427EE0F441FFA95E1F74195550B70 -:1060800032D00F9007FE26C00895DF93CF931F9361 -:106090000F93FF92EF92DF927B018C01689405C011 -:1060A000DA2EEF011EDFFE01E894A59125913591CE -:1060B00045915591AEF3EF0106DDFE019701A80170 -:1060C000DA9479F7DF90EF90FF900F911F91CF91C5 -:1060D000DF9108959B01AC0160E070E080E89FE3F0 -:1060E00049CD90CE95CECCDEE8F39923D9F3940F29 -:1060F000511DBBF39150504094F059F0882332F079 -:10610000660F771F881F91505040C1F79E3F510581 -:1061100044F7880F911D9695879597F908955F3FED -:10612000ACF0983E9CF0BB27869577956795B79520 -:1061300008F4B1609395C1F7BB0F58F711F460FFF5 -:10614000E8CF6F5F7F4F8F4F9F4FE3CFB4CE0EF0FE -:106150005FCE6CCE689456CE93DEC8F39923D1F30C -:10616000C6F3DF93CF931F930F93FF92C92FDD27C1 -:1061700088232AF02197660F771F881FDAF720E01F -:1061800030E040E85FEB9FE3883920F0803E30F05C -:1061900021968F7787DCECE5F1E003C083DCE9E84A -:1061A000F1E073DF8B01BE01EC01FB2E6F5771092B -:1061B0007595771F880B990B78DD28E132E741E36D -:1061C0005FE38FDEAF2D9801AE01FF900F911F911D -:1061D000CF91DF9178DC3BCEFA01DC01AA0FBB1F27 -:1061E0009B01AC01BF5728F422273327442750785E -:1061F0001FC0B75188F4AB2F0024469537952795DB -:10620000011CA395D2F3002069F0220F331F441F15 -:10621000B395DAF30DD045CC61307105A0E88A075B -:10622000B94630F49B01AC01662777278827907820 -:10623000309621F020833183428353830895AA1B33 -:10624000BB1B51E107C0AA1FBB1FA617B70710F061 -:10625000A61BB70B881F991F5A95A9F78095909593 -:10626000BC01CD01089597FB072E16F4009407D0CA -:1062700077FD09D00E941F3107FC05D03EF49095B0 -:1062800081959F4F0895709561957F4F0895EE0F0A -:10629000FF1F0590F491E02D0994F999FECF92BD6E -:1062A00081BDF89A992780B50895A8E1B0E042E051 -:1062B00050E00C947531262FF999FECF92BD81BD27 -:1062C000F89A019700B4021639F01FBA20BD0FB634 -:1062D000F894FA9AF99A0FBE08950196272F0E9412 -:1062E0005C310C945B31DC01CB01FC01F999FECFF0 -:1062F00006C0F2BDE1BDF89A319600B40D9241504E -:0A6300005040B8F70895F894FFCF5D -:10630A0000005C440000004148F17644000000416E -:10631A005C978A44000000411FD592440000004166 -:10632A0052D0A444000000415CFFB8440000004180 -:10633A000AA7CF44000000410000DC4400000041ED -:10634A00A4D0A443000000417BD492430000004142 -:10635A007BD4924300000041A4D0A4430000004132 -:10636A00A4D02444000000411FD51244000000417B -:10637A001FD5124400000041A4D02444000000416B -:10638A00A4F076430000004100005C430000004195 -:10639A0000005C4300000041A4F076430000004185 -:1063AA00A4D082430000C0417BD492430000004144 -:1063BA00A4D0A4430000C041A4D0824300000041FD -:1063CA00A4D0A44300008041A4D0824300008041AD -:1063DA00A4D0A443000080411FD51244000080418C -:1063EA00A4D024440000804100D00244000080412F -:1063FA00A4D08243000080410000C44300008041D1 -:10640A000AA7CF44000000410000DC44000000411C -:10641A00000000000000804052D0244500004041A6 -:10642A0000000000000080400AA74F4500004041DC -:10643A000AA7CF44000000410000DC4400000041EC -:10644A00000000000000804052D0244500000041B6 -:10645A0000000000000080405CFF38450000004159 -:10646A00000000000000804052D024450000004196 -:10647A000AA7CF44000000410000DC4400000041AC -:10648A00000000000000804052D0244500008041F6 -:10649A00A4F0F6430000C0417BD4924300000041BF -:1064AA0048F176440000804100005C44000000424C -:1064BA005CFF434400008041A4F0F6430000C04161 -:1064CA001FD51244000000415CFF43440000804194 -:1064DA005CFF384400000042A4D0A443000080417D -:1064EA00A4D0A44300008041719DAE4300008041C6 -:1064FA000000C443000080410000C4430000804102 -:10650A00719DAE4300008041A4D0A44300008041A5 -:10651A007BD4924300008041A4D082430000804192 -:10652A00A4D08243000080417BD492430000804182 -:10653A00A4D0A44300008041A4D0A4430000C041D9 -:10654A007BD49243000000417BD492430000004276 -:10655A00640007000CFF0000003F644A13D813B51B -:10656A001381134D13010130052808140A321E0045 -:10657A0002040507090B0C0E1011131517181A1C23 -:10658A001D1F2123242628292B2D2F30323435375D -:10659A00393B1F0F03764F5F6F7F4969437909596A -:1065AA0053633149803F5D8B803FF8BF803FCAE12A -:1065BA00803F73ED803FCAE1803FF8BF803F5D8B2B -:1065CA00803F3149803F0000803FF16D7F3F75EA8F -:1065DA007E3F4C827E3F833F7E3F84287E3F833FBF -:1065EA007E3F4C827E3F75EA7E3FF16D7F3F000021 -:1065FA00803F3F4D36398F0642060C06D3056605A5 -:10660A007F059805B105010203040506070809007C -:00000001FF diff --git a/keyboard/planck/keymaps/tak3over/compiled.hex b/keyboard/planck/keymaps/tak3over/compiled.hex deleted file mode 100644 index 0eec0b65c7..0000000000 --- a/keyboard/planck/keymaps/tak3over/compiled.hex +++ /dev/null @@ -1,1456 +0,0 @@ -:100000000C94C1020C9405030C9405030C94050395 -:100010000C9405030C9405030C9405030C94050340 -:100020000C9405030C9405030C94B2140C948415E1 -:100030000C94E6220C9405030C9405030C94050320 -:100040000C9405030C9467030C9405030C940503AE -:100050000C9405030C944E230C9405030C94050397 -:100060000C9405030C9405030C9405030C940503F0 -:100070000C9405030C9405030C9405030C940503E0 -:100080000C94270B0C9405030C9405030C940503A6 -:100090000C9405030C9405030C9405030C940503C0 -:1000A0000C9405030C9405030C940503F115131629 -:1000B00001171316011758167B160117D016E316F1 -:1000C000CD19CD19FC19FC193B1A5B1AB11BB11BD8 -:1000D000661AB11B161B161B7D1B861BB11BAB1BA7 -:1000E000231B231B231B231B231B231B231B231B20 -:1000F000231B231B231B231B231B231B231B231B10 -:10010000331B411B481B4F1B591B07634236B79BD0 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F00000000000000000030 -:1001900000000000000000010204060A0F17202CD6 -:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 -:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF -:1001C0000201000000000000000000002B001400ED -:1001D0001A000800150017001C0018000C0012007F -:1001E00013002A00290004001600070009000A0075 -:1001F0000B000D000E000F0033003400E1001D0065 -:100200001B00060019000500110010003600370021 -:1002100038002800E000E200E300045202522C0003 -:100220002C0003525000510052004F002B001400CC -:100230001A00090013000A000D000F0018001C002E -:1002400033002A00290004001500160017000700DB -:100250000B00110008000C0012003400E1001D002A -:100260001B000600190005000E00100036003700C4 -:1002700038002800E000E200E300045202522C00A3 -:100280002C0003525000510052004F0035021E0254 -:100290001F0220022102220223022402250226023A -:1002A00027022A000100005049004A004B00015378 -:1002B00050002D002E002F003000310001000030D2 -:1002C0004C004D004E0000534C002D022E022F0218 -:1002D00030020100010001000100010001000100E5 -:1002E00001000100010001000100010035001E00B5 -:1002F0001F002000210022002300240025002600EA -:1003000027002A0001003A003B003C003D003E006F -:100310003F002D002E002F00300031020100400070 -:10032000410042004300440045002D022E022F02EE -:100330003002010001000100010001000100010084 -:1003400001000100010001000100010035001E0054 -:100350001F00200021002200230024002500260089 -:1003600027002A000100E7001B00060019001D00FD -:100370005000510052004F004C0031000100E400D9 -:100380001B00060019001D00AB00A800AA00A90070 -:10039000AE000100010001000100010001000100A8 -:1003A00001000100010001000100010028035400C8 -:1003B00068006500200050006C0061006E00630062 -:1003C0006B0020004B006500790062006F00610047 -:1003D0007200640000002C034F007200740068007B -:1003E0006F006C0069006E00650061007200200003 -:1003F0004B006500790062006F00610072006400CC -:10040000730000000403090409026D00040100A048 -:10041000FA09040000010301010009211101000192 -:10042000223F000705810308000A090401000103B7 -:10043000010200092111010001224D00070582037C -:1004400008000A090402000103000000092111014B -:1004500000012236000705830308000A090403008F -:1004600001030000000921110100012239000705E4 -:1004700084031000011201100100000008EDFE606D -:100480006001000102000105010906A1010507192B -:10049000E029E71500250195087501810205081975 -:1004A00001290595057501910295017503910105D5 -:1004B000071900297715002501957875018102C07B -:1004C00005010980A101850216010026B7001A0165 -:1004D000002AB700751095018100C0050C0901A123 -:1004E000018503160100269C021A01002A9C027550 -:1004F0001095018100C005010902A1010901A100B7 -:1005000005091901290515002501950575018102C7 -:100510009501750381010501093009311581257F98 -:1005200095027508810609381581257F95017508A2 -:100530008106050C0A38021581257F950175088111 -:1005400006C0C005010906A101050719E029E71544 -:100550000025019508750181029501750881010545 -:1005600008190129059505750191029501750391F9 -:10057000010507190029FF150025FF95067508815B -:1005800000C011241FBECFEFDAE0DEBFCDBF04B63E -:1005900003FE24C080911E0390911F03A0912003AD -:1005A000B09121038730904BA740B04BB9F4109223 -:1005B0001E0310921F03109220031092210314BEF9 -:1005C00084B7877F84BF88E10FB6F894809360007A -:1005D000109260000FBEE0E0F8E3099511E0A0E0A2 -:1005E000B1E0E6E2FAE502C005900D92A03CB10749 -:1005F000D9F713E0A0ECB1E001C01D92AE31B10714 -:10060000E1F70E94F8110C94112D0C94000008954C -:10061000089581E0089508950C9408030C9409034B -:100620000C940B030E94DB2823E030E0281B3109E7 -:10063000220F2093C4010895282F2F9880918000C5 -:10064000211108C0877F8093800010928D00109246 -:100650008C001BC0886080938000233019F48FEFDA -:100660009FEF0FC083E090E0821B9109880F991FD4 -:100670002FEF3FEFA90102C0569547958A95E2F703 -:10068000CA0190938D0080938C000C9412030E94F9 -:10069000120384E08093C3011092C0010895279A49 -:1006A0002F988FEF9FEF90938700809386008AE0CA -:1006B0008093800089E1809381000E9444280C94FB -:1006C00047030E944F036E9A769A0C9407031F9279 -:1006D0000F920FB60F9211242F933F938F939F93F6 -:1006E000EF93FF93E091C101F091C201CF01019618 -:1006F0009093C2018093C1010090C30102C0F6959E -:10070000E7950A94E2F7EF738091C001823019F403 -:10071000E03251F404C0813039F4EF3329F4809190 -:100720006F008D7F80936F00F0E0E457FE4FE491FF -:1007300021E031E0E29FC001E39F900D1124009081 -:10074000C40102C0969587950A94E2F790938D00B4 -:1007500080938C00FF91EF919F918F913F912F910A -:100760000F900FBE0F901F90189561110DC0FC01E6 -:100770008281882331F085EE0E9471180E949B28A7 -:1007800003C085EE0E94391980E090E0089581E071 -:1007900008950C94C70308950C9461038091150289 -:1007A000882309F448C08091D1019091D20100972B -:1007B00079F40E9418239093D2018093D101809103 -:1007C000D30190E0009771F48091D40190E00AC0C9 -:1007D0000E9424232091000130910101281739073C -:1007E00040F329C00197880F991F880F991FFC01BA -:1007F000EB52FE4F60817181828193810E948D0A4C -:10080000E091D30184E0E89FF0011124EB52FE4F08 -:1008100060817181828193814FE050E00E94450E9A -:100820008091D30190E001966091D40170E00E9424 -:10083000C12C8093D3010C940C03109217020C94DA -:100840005A0A0895089581E0809317020C942204B7 -:10085000089508958F929F92AF92BF92EF92FF9268 -:100860000F931F93CF93DF93CDB7DEB7A3970FB648 -:10087000F894DEBF0FBECDBF7C01FC010081118169 -:10088000C8010E941521B8010E942C068C01B701F5 -:100890000E94C903882309F4CCC10032F0E51F0788 -:1008A00041F4F7018281882309F458C00E94A90EFF -:1008B000C0C10132F0E51F0741F4F70182818823AE -:1008C00009F44CC00E94B20EB4C10232F0E51F0719 -:1008D00051F4F7018281882309F440C00E94A50EDB -:1008E0008111F0CFE3CF0332F0E51F0739F4F701B0 -:1008F0008281882399F10E9423049BC10432F0E590 -:100900001F0739F4F7018281882341F10E941D04F9 -:1009100090C10532F0E51F0749F4F7018281882371 -:10092000E9F0809117028111F1CFE5CF0632F0E5B1 -:100930001F0739F4F7018281882381F00E94B90EE4 -:100940000AC00732F0E51F0749F4F70182818823C6 -:1009500029F00E94C40E0E9429046BC180911702E5 -:10096000811105C0F70182818111CFC018C1003EFD -:10097000110579F4F7018281882309F44DC00E94A2 -:100980005A0A81E080931602109215021092D40147 -:1009900050C1023E110559F4F70182818823E1F12B -:1009A0000E945A0A109216021092150242C1033E8A -:1009B000110591F4F7018281882371F10E945A0A8E -:1009C0001092160281E0809315021092D3011092CA -:1009D000D2011092D1012DC10235110559F4F70150 -:1009E0008281882309F425C1809100019091010141 -:1009F0000A970DC00135110579F4F701828188232A -:100A000009F417C180910001909101010A96909319 -:100A10000101809300010DC14091040183E2EFE1E7 -:100A2000F1E0DE01119601900D928A95E1F7F70150 -:100A3000808121E030E02C0F3D1F280F311DC901BE -:100A40002091020130910301FC01E20FF31F60814C -:100A5000772767FD7095640F711D882777FD809556 -:100A6000982F0E94E32920E030E040E451E40E9406 -:100A700048294B015C01F701218184E090E0821B51 -:100A80009109BC01882777FD8095982F0E94E32962 -:100A90009B01AC01C501B4010E94E0289B01AC019F -:100AA00060E070E080E090E40E94562B20E030E0AF -:100AB0004CED50E40E94F32A4B015C01F701828166 -:100AC0008823D1F04FE050E0C501B4010E94450EEB -:100AD000809116028823A1F08091D40124E0829FA6 -:100AE000F0011124EB52FE4F80829182A282B382E8 -:100AF0008F5F8093D40104C0C501B4010E948D0AA8 -:100B00000F3F110508F02ECF94C08091D0018111C4 -:100B10001FC0043130E5130709F051C00E94CB0318 -:100B200081E08093D0010E9418239093CF0180939D -:100B3000CE011092C7011092C9011092C801109203 -:100B4000CB011092CA011092CD011092CC0171C05C -:100B50008091CE019091CF010E942423883C910581 -:100B600070F48091C701E82FF0E0EE0FFF1FE8530B -:100B7000FE4F118300838F5F8093C7015AC00438F2 -:100B800080E5180721F00538104501F13AC0F7015A -:100B90008281882341F01092C50182E01EC0043892 -:100BA00030E5130759F58091C501811106C086E231 -:100BB0000E94711886E20E94391982E01CC0043834 -:100BC000F0E51F0741F305381045D9F4F70182819C -:100BD000882331F01092C60180E20E94881929C052 -:100BE0008091C601811106C087E20E94711887E2D8 -:100BF0000E94391980E20E948F191BC005381045E8 -:100C000029F381E08093C5018093C601C701A396B3 -:100C10000FB6F894DEBF0FBECDBFDF91CF911F910D -:100C20000F91FF90EF90BF90AF909F908F900C949A -:100C30000E0380E0A3960FB6F894DEBF0FBECDBFC3 -:100C4000DF91CF911F910F91FF90EF90BF90AF90E8 -:100C50009F908F90089508959CE0799FF001112452 -:100C600090E3899FE00DF11D1124E60FF11DEE0FB9 -:100C7000FF1FE453FE4F859194910895880F991FAB -:100C8000FC01E45BFF4F859194910895880F991FB3 -:100C9000FC01E453FE4F8591949108950F931F93A7 -:100CA000CF93DF93EC01811521E39207A0F5C115E5 -:100CB00080E3D80708F0D7C0C83ED105D8F4C03EBD -:100CC000D10508F007C2C83AD10578F4C53AD10574 -:100CD00008F06AC0C130D10509F463C008F4F7C157 -:100CE000C430D10508F0F6C1F2C1CB3BD10508F400 -:100CF00066C0EDC1C11590E2D90708F0AFC0C115BB -:100D000021E0D20708F0E6C1C03FD10508F4DFC1F9 -:100D10008E0110651FC2C03880E5D80700F5C037C6 -:100D200090E5D90708F0A3C0C11520E5D20709F462 -:100D3000ACC050F4CE01905480319F4008F0C7C140 -:100D4000DF708E01106A06C2C13080E5D80709F451 -:100D5000AEC0C43190E5D90708F4AFC0B8C1C338FC -:100D600020E5D20709F48EC050F4C13890E5D907C8 -:100D700009F482C008F083C000E011EDEBC1C0317E -:100D800081E5D80708F4A3C1C11597E5D90708F490 -:100D900036C1CE0190578115904108F098C1DF709F -:100DA00093C101E010E0D6C1C53AD10509F494C160 -:100DB000C63AD10509F093C102E810E4CBC1C83AA4 -:100DC000D10509F48FC1C93AD10509F48EC1CA3AD7 -:100DD000D10509F48DC1CB3AD10509F48CC1CC3AC7 -:100DE000D10509F48BC1CD3AD10509F48AC1C03BC4 -:100DF000D10509F489C1CE3AD10509F488C1CF3AA9 -:100E0000D10509F487C1C13BD10509F486C1C23BB4 -:100E1000D10509F485C1C33BD10509F484C1C43BA4 -:100E2000D10509F483C1C53BD10509F482C1C63B94 -:100E3000D10509F481C1C73BD10509F480C1C83B84 -:100E4000D10509F47FC1C93BD10509F47EC1CA3B74 -:100E5000D10509F47DC100E014E47CC1CE019F708E -:100E60000E94460678C1DD278E01106C73C1CF70D9 -:100E7000DD278E01146D6EC100E010ED6BC100E046 -:100E800012ED68C100E013ED65C10E941C1C0E94B8 -:100E90005A0A0E9421048FEF94E32CE08150904085 -:100EA0002040E1F700C000000E94732353C18091ED -:100EB000F20281608093F2024DC10E94D42381111D -:100EC00002C00E94B0230E94E72390E090931D038C -:100ED00080931C03C23080E5D80721F480911C0365 -:100EE000816086C0C43090E5D90721F480911C034D -:100EF00082607EC0C63020E5D20721F480911C03B9 -:100F0000846076C0C83080E5D80719F480911C034E -:100F100027C0CA3090E5D90721F480911C03806175 -:100F200067C0CC3020E5D20721F480911C03806299 -:100F30005FC0CE3080E5D80721F480911C03806427 -:100F400057C0C03190E5D90721F480911C03806817 -:100F50004FC0C23120E5D20729F480911C03846080 -:100F6000886046C0C33080E5D80721F480911C0317 -:100F70008E7F3EC0C53090E5D90721F480911C03D7 -:100F80008D7F36C0C73020E5D20721F480911C0345 -:100F90008B7F2EC0C93080E5D80719F480911C03DF -:100FA00026C0CB3090E5D90721F480911C038F7EB9 -:100FB0001FC0CD3020E5D20721F480911C038F7D26 -:100FC00017C0CF3080E5D80721F480911C038F7BB8 -:100FD0000FC0C13190E5D90721F480911C038F77B0 -:100FE00007C0C331D04531F480911C038B7F877FCC -:100FF00080931C0380911C030E94EB23ABC08D2FB8 -:1010000099278F70992781309105D9F49E0123701B -:10101000332702C0880F991F2A95E2F79C688E013A -:1010200044E0000F111F4A95E1F700271370802B51 -:10103000912B53E0CC0FDD1F5A95E1F7C076DD27E9 -:101040002FC08230910531F4DC2FCC278E01016F47 -:10105000106A80C08330910569F4CE0183709927AE -:1010600001E010E002C0000F111F8A95E2F7C801ED -:101070009C680FC084309105B9F4CE018370992724 -:1010800001E010E002C0000F111F8A95E2F7C801CD -:101090009A6823E0CC0FDD1F2A95E1F7C07ED77058 -:1010A0008C010C2B1D2B56C08530910531F4DC2FA3 -:1010B000CC278E01046F106A4DC0069709F04AC014 -:1010C000CF71DD27DC2FCC278E01106243C000E0FA -:1010D00010E040C08E013EC001E810E43BC003E8D0 -:1010E00010E438C002EE14E435C009EE14E432C056 -:1010F0000AEE14E42FC005EB14E42CC006EB14E454 -:1011000029C007EB14E426C00CEC14E423C00DEC5A -:1011100014E420C003E815E41DC00AE815E41AC071 -:1011200002E915E417C004E915E414C001E216E46D -:1011300011C003E216E40EC004E216E40BC005E29F -:1011400016E408C006E216E405C007E216E402C091 -:101150000AE216E4C801DF91CF911F910F91089523 -:101160009CE0799FF001112490E3899FE00DF11D2F -:101170001124E60FF11DEE0FFF1FE453FE4F859182 -:101180009491803E9105E0F4803C910558F58133BF -:10119000910509F46FC048F48932910509F463C0E0 -:1011A0008A32910509F46DC072C089339105E9F066 -:1011B00082389105D1F08533910509F44DC067C09F -:1011C000833E910581F138F4803E9105B9F0823E6D -:1011D0009105D9F05CC0863E910561F1873E91058D -:1011E000A1F155C00E943E06089520911C0320FDE8 -:1011F00002C021FF4CC080EE90E049C080911C03EA -:1012000080FFF9CF89E390E042C080911C0382FF08 -:101210000EC080911C0384FF03C080E090E037C0C3 -:1012200083EE90E034C080911C0382FFF2CF82EE07 -:1012300090E02DC080911C0383FF0BC080911C03A4 -:1012400084FDEBCF87EE90E022C080911C0383FFEA -:10125000F5CF86EE90E01BC080911C0385FF07C090 -:1012600089E290E014C080911C0385FFF9CF85E3EB -:1012700090E00DC080911C0386FF07C08AE290E0D9 -:1012800006C080911C0386FFF9CF81E390E00E94A5 -:101290004E0608950C941003E82FF0E0E25BFE4F39 -:1012A0008081E82FEF70F0E082958F7021E030E0D0 -:1012B000A90102C0440F551F8A95E2F740A3089583 -:1012C0000F931F93CF93DF9385B7806885BF85B752 -:1012D000806885BFC3E0D0E001E010E0FE01E25B82 -:1012E000FE4F8081E82FEF70F0E021A182958F7092 -:1012F000A80102C0440F551F8A95E2F7CA01822B4C -:1013000081A38C2F0E944C09219740F78BE090E03D -:1013100061E070E0FC01EE5BFE4F2081E22FEF7098 -:10132000F0E042A122952F70DB0102C0AA0FBB1F83 -:101330002A95E2F79D01242B22A3019758F7DF910C -:10134000CF911F910F910C94CC03EF92FF920F93CA -:101350001F93CF93DF9300E212E0C3E0EE24E39407 -:10136000F12CD5E08C2F0E944C098BE090E040E0FE -:1013700050E0FC01EE5BFE4F6081E62FEF70F0E085 -:1013800020A130E062956F7002C0359527956A956F -:10139000E2F720FD09C09701082E02C0220F331F7B -:1013A0000A94E2F7422B532B019718F7F801929118 -:1013B00082918F018417950721F051834083D09348 -:1013C00005018C2F0E944C09C15060F680910501E7 -:1013D00087FD2CC08150809305018F3F39F08FE944 -:1013E0009FE00197F1F700C0000020C080911E022D -:1013F00090911F02909327028093260280911C02F5 -:1014000090911D02909325028093240280911A02EC -:1014100090911B02909323028093220280911802E4 -:101420009091190290932102809320020E94CE0392 -:1014300081E0DF91CF911F910F91FF90EF90089580 -:10144000E82FF0E0EE0FFF1FE05EFD4F80819181FD -:10145000089508950F931F93CF9308E212E0C0E020 -:10146000F801929182918F010E949022C80FF2E0C0 -:1014700000321F07A9F78C2FCF911F910F9108956C -:101480000E94D423811102C00E94B0230E94F9233C -:10149000809307033E9A809171008D7F8093710045 -:1014A00082E0809390008AE18093910081E08093B4 -:1014B0002A02089580912A02811102C00E94400AE6 -:1014C00010927A0210927902809171008D7F809340 -:1014D0007100809190008F738093900010923C0275 -:1014E00010923B02109273021092740210927502D5 -:1014F000109276021092720210927102E1E5F2E00F -:10150000A1E4B2E011921192119211921D921D92DA -:1015100082E0E137F807B1F70895CF92DF92EF92BA -:10152000FF920F931F93CF93DF9320913B022223CF -:1015300009F484C06B017C0180912A02811102C0F0 -:101540000E94400A01E712E0C7E0D0E0A70196013F -:10155000F80192918291729162918F010E944429C7 -:10156000811131C0FE01EE0FFF1FEE0FFF1FEF5A7A -:10157000FD4F1082118212821382DE01AA0FBB1F5F -:10158000AF5BBD4F11961C921E92C730D105E9F09A -:10159000219644815581668177814083518362839E -:1015A0007383148215821682178212968D919C91F4 -:1015B000139711969C938E9313961C921E921297DA -:1015C00034961296E2CF219708F680917902909195 -:1015D0007A02019797FD05C090937A028093790271 -:1015E00004C010927A02109279028091790290914F -:1015F0007A0220917702309178022817390724F077 -:101600001092780210927702892BC1F480917100B8 -:101610008D7F80937100809190008F7380939000F4 -:101620001092730210927402109275021092760258 -:10163000109272021092710210923B02DF91CF91D0 -:101640001F910F91FF90EF90DF90CF9008951F9220 -:101650000F920FB60F9211244F925F926F927F926A -:101660008F929F92AF92BF92CF92DF92EF92FF92B2 -:101670002F933F934F935F936F937F938F939F939A -:10168000AF93BF93CF93DF93EF93FF9380913B0290 -:10169000882309F49BC1C0917902D0917A021C166B -:1016A0001D060CF093C140902B0250902C026090CC -:1016B0002D0270902E0220E030E0A901C301B2019A -:1016C0000E94EF2A18160CF065C0C130D10509F44C -:1016D00052C08091770290917802BE010E94C12C85 -:1016E0007C01909378028093770280903D029090E5 -:1016F0003E02A0903F02B090400220E030E040E87F -:101700005FE3C501B4010E94E02860933D0270933D -:101710003E0280933F0290934002F701EE0FFF1FBD -:10172000EE0FFF1FEF5AFD4FA301920160817181FF -:10173000828193810E94482920E030E040E05EE30E -:101740000E94F32A9B01AC01C501B4010E94EF2A5B -:1017500018168CF4C7010196BE010E94C12C90930B -:1017600078028093770210923D0210923E0210920E -:101770003F0210924002E0917702F0917802EE0F62 -:10178000FF1FEE0FFF1FEF5AFD4F608171818281B5 -:101790009381D0C0C0907302D0907402E090750223 -:1017A000F090760220E030E0A901C701B6010E9466 -:1017B00044292197882309F4A2C0FE01EE0FFF1FE0 -:1017C000EE0FFF1FEF5AFD4F80809180A280B38003 -:1017D000A5019401C701B6010E94442987FF31C0C9 -:1017E000A501940160E070E08CED93EC0E94482923 -:1017F00020E030E040E451E40E94482920E030E05D -:1018000040E05FE30E94F32A9B01AC0160E070E0DE -:1018100080E090E40E94562B9B01AC01C501B4010D -:101820000E94F32A9B01AC01C701B6010E94442922 -:1018300087FF07C0A701960160E070E08CED93E49C -:1018400039C0A5019401C701B6010E94EF2A1816FC -:101850000CF055C0A501940160E070E08CED93E4BC -:101860000E94482920E030E040E451E40E944829E9 -:1018700020E030E040E05FE30E94F32A9B01AC01EE -:1018800060E070E080E090E40E94562B9B01AC0188 -:10189000C501B4010E94F32A9B01AC01C701B60146 -:1018A0000E94EF2A18165CF5A701960160E070E02F -:1018B0008CED93EC0E94482920E030E040E451E4B4 -:1018C0000E94482920E030E040E05FE30E94F32AD4 -:1018D0009B01AC0160E070E080E090E40E94562B38 -:1018E0009B01AC01C701B6010E94F32A6093730209 -:1018F00070937402809375029093760213C0FE0178 -:10190000EE0FFF1FEE0FFF1FEF5AFD4F80819181F9 -:10191000A281B3818093730290937402A0937502A5 -:10192000B093760260917302709174028091750297 -:101930009091760220912802309129022F3F4FEF9B -:10194000340731F02F5F3F4F309329022093280254 -:101950000E94CF0E6B017C0120E034E244EF51E4A1 -:101960000E94442987FF08C086EFC82E88E2D82E3F -:1019700084EFE82E81E4F82E20E030E040E051E4EE -:10198000C701B6010E94F32A9B01AC0160E074E23A -:1019900084E79BE40E9448296B017C010E94B529E1 -:1019A0007093970060939600209106013091070193 -:1019B0004091080150910901C701B6010E94F32A24 -:1019C0000E94B529709399006093980080913C0221 -:1019D000882309F433C1C0903702D0903802E090D8 -:1019E0003902F0903A0220E030E0A901C701B601C7 -:1019F0000E94EF2A1816D4F58091280290912902AE -:101A00008F3F2FEF920729F0019690932902809340 -:101A10002802C701B6010E94CF0E20E030E040E06E -:101A200051E40E94F32A9B01AC0160E074E284E778 -:101A30009BE40E9448296B017C010E94B5297093A8 -:101A40009700609396002091060130910701409124 -:101A5000080150910901C701B6010E94F32A0E94B2 -:101A6000B529709399006093980008C01092970070 -:101A70001092960010929900109298006091310295 -:101A8000709132026F5F7F4F709332026093310228 -:101A9000209196003091970080E090E0232BF1F0A8 -:101AA000C0919600D09197000E94E1296B017C01C2 -:101AB000BE0180E090E00E94E1299B01AC016091B1 -:101AC00033027091340280913502909136020E9467 -:101AD000482920E03FEF4FE757E410C00E94E1297A -:101AE0006B017C0120E030EE4FEF54E46091330253 -:101AF0007091340280913502909136020E94F32A4F -:101B00009B01AC01C701B6010E94EF2A87FD96C078 -:101B100080912F028F5F80932F0290E0209103032A -:101B20003091040382179307A0F080910E0388235D -:101B300019F010922F020DC0809171008D7F80935B -:101B40007100809190008F738093900010923C02FE -:101B50007DC080913002C0912F02811128C0C090B9 -:101B60000803D0900903E0900A03F0900B0320E0F3 -:101B700030E0A901C701B6010E94EF2A1816BCF493 -:101B800081E0809330021092370210923802109256 -:101B9000390210923A02C0923302D0923402E0929B -:101BA0003502F0923602C150C0932F0243C010920A -:101BB00030021092290210922802E0910503F09160 -:101BC000060348E0C49FE00DF11D1124808191813E -:101BD000A281B3818093370290933802A093390297 -:101BE000B0933A0220E030E040E85EE36481758122 -:101BF000868197810E94F32A6B017C0180910A0102 -:101C0000682F70E080E090E00E94E12920E030E061 -:101C100048EC52E40E9448299B01AC01C701B6017F -:101C20000E94F32A6093330270933402809335024A -:101C30009093360210923202109231028091070383 -:101C400080FD04C010923C0210923B02FF91EF9184 -:101C5000DF91CF91BF91AF919F918F917F916F91C4 -:101C60005F914F913F912F91FF90EF90DF90CF9038 -:101C7000BF90AF909F908F907F906F905F904F90AC -:101C80000F900FBE0F901F901895CF92DF92EF929A -:101C9000FF92CF93DF936B017C01EA0180912A02CE -:101CA000811102C00E94400A8091070380FF46C054 -:101CB0008091790290917A0208970CF03FC0809150 -:101CC00071008D7F8093710080913C0281110E9490 -:101CD0005A0A81E080933B02109229021092280256 -:101CE00020E030E0A901C701B6010E94EF2A1816D2 -:101CF000DCF48091790290917A02FC01EE0FFF1FD3 -:101D0000EE0FFF1FEF5AFD4FC082D182E282F382B5 -:101D1000FC01EE0FFF1FEF5BFD4FD183C0830196E7 -:101D200090937A028093790280917100826080930F -:101D3000710080919000806880939000DF91CF9136 -:101D4000FF90EF90DF90CF9008958091070381700E -:101D50000895809107038160809307030E94FD230B -:101D60000C942804809107038E7F809307030C94C2 -:101D7000FD2380917B0290E0019666E070E00E9476 -:101D8000C12C80937B02089580917B0290E00197A3 -:101D900066E070E00E94C12C80937B0208958F92D0 -:101DA0009F92AF92BF92CF92DF92EF92FF920F93EA -:101DB0001F93CF93DF936B017C01C0912802D091D8 -:101DC0002902BE0180E090E00E94E1294B015C0104 -:101DD000A701960160E070E08CE594E40E94482938 -:101DE0009B01AC01C501B4010E94F32A0E94B529F0 -:101DF00020917B02233009F473C028F4222351F090 -:101E00002130E9F02CC1243009F4A0C0253009F4B8 -:101E1000E0C025C180E090E0A0E0BFE38093060130 -:101E200090930701A0930801B093090110922B022F -:101E300010922C0210922D0210922E0210C11092BC -:101E40002B0210922C0210922D0210922E0264315D -:101E5000710540F46A30710560F520E030E040E83B -:101E60005EE32BC0693C710508F0AAC080E090E0F9 -:101E70000E94E12920E030E040EA51E40E94DF289E -:101E800020E030E044E353E40E9448299B01AC0188 -:101E90000E94F32A20E030E040E05EE30E94F32A53 -:101EA0009B01AC0160E070E080E09EE30E94DF28CF -:101EB00044C020E030E040E05FE3C701B6010E948B -:101EC000F32A6B017C0180E090E0A0E0BEE3809308 -:101ED000060190930701A0930801B0930901BFC0C8 -:101EE00010922B0210922C0210922D0210922E02B0 -:101EF0004AE0469F9001479F300D1124C90168EBCD -:101F00007BE00E94AD2CBC016C5D754077FF03C087 -:101F1000719561957109882777FD8095982F0E94AA -:101F2000E3292EE333EC4EE259E30E94F32A20E04A -:101F300030E040EC5EE30E94E0286093060170937D -:101F40000701809308019093090189C010922B0228 -:101F500010922C0210922D0210922E02CE0183704C -:101F60009927892BE1F0BE016170772780E090E02E -:101F70000E94E12920E030E040E05EE30E94F32A85 -:101F800020E030E040E45FE30E94E0286093060137 -:101F90007093070180930801909309010CC080E0C1 -:101FA00090E0A0E0BFE38093060190930701A09327 -:101FB0000801B0930901C770DD27CD2B09F04FC090 -:101FC0001092060110920701109208011092090167 -:101FD00046C010922B0210922C0210922D021092E9 -:101FE0002E0200E010E020E03FE300930601109392 -:101FF000070120930801309309016739710578F1D1 -:1020000080E090E00E94E12920E030E047E153E4E5 -:102010000E94DF2820E030E04AE754E40E9448298B -:1020200020E030E048E452E40E94F32A20E030E06F -:1020300040EA51E40E94252A0E94B029660F771FCA -:10204000660F771FFB01EE5AFE4F208131814281DE -:102050005381C701B6010E94F32A6B017C01C701BD -:10206000B601DF91CF911F910F91FF90EF90DF901C -:10207000CF90BF90AF909F908F90089580918C02E9 -:102080000895CF93DF9300D01F92CDB7DEB79C01A8 -:1020900080911303843019F593E099833B832A835D -:1020A0009093E9008FEF9091E800815095FD06C074 -:1020B00095ED9A95F1F700008111F5CF8091E80038 -:1020C00085FF0DC040E050E063E070E0CE01019676 -:1020D0000E94A2128091E8008E778093E8000F9012 -:1020E0000F900F90DF91CF910895CF93DF9300D0A1 -:1020F0001F92CDB7DEB720911303243021F522E0E3 -:1021000029839B838A8383E08093E9008FEF9091FA -:10211000E800815095FD06C095ED9A95F1F7000015 -:102120008111F5CF8091E80085FF0DC040E050E0BF -:1021300063E070E0CE0101960E94A2128091E80057 -:102140008E778093E8000F900F900F90DF91CF91E2 -:102150000895209113032430F1F422E02093E90044 -:102160002FEF3091E800215035FD06C035ED3A954E -:10217000F1F700002111F5CF2091E80025FF0BC0F9 -:1021800040E050E065E070E00E94A2128091E8001B -:102190008E778093E8000895CF93DF93EC019091C0 -:1021A0001303943009F046C0809115018823D9F0BB -:1021B000809116018823B9F09093E9008FEF9091F8 -:1021C000E800815095FD06C095E19A95F1F7000071 -:1021D0008111F5CF8091E80085FF2CC040E050E0F0 -:1021E00060E170E017C081E08093E9008FEF90918B -:1021F000E800815095FD06C095ED9A95F1F7000035 -:102200008111F5CF8091E80085FF14C040E050E0D7 -:1022100068E070E0CE010E94A2128091E8008E7703 -:102220008093E80080E1FE01ACE7B2E001900D92FE -:102230008A95E1F7DF91CF91089580911203811182 -:1022400009C00E9437140E9494148091E2008460B7 -:102250008093E2000895109212030895089508955E -:102260000C94DB2242E061EC81E00E94B11342E079 -:1022700061EC82E00E94B11342E061EC83E00E94D5 -:10228000B11342E161EC84E00C94B1138091150329 -:10229000833009F455C030F4813071F0823009F494 -:1022A0008EC008958A3009F47AC08B3009F460C07A -:1022B000893009F09CC020C080911403813A09F054 -:1022C00096C08091E800877F8093E8008091180392 -:1022D00090911903892B21F460E18CE792E003C00F -:1022E00060E080E090E070E00E94ED128091E800F4 -:1022F0008B778093E800089580911403813209F070 -:1023000076C08091180390911903009719F00397F4 -:1023100009F06DC08091E800877F8093E80080918C -:10232000E80082FD05C0809113038111F8CF5FC0E2 -:102330008091F10080938C028091E8008B7753C0EC -:1023400080911403813A09F052C080911803909152 -:102350001903892B09F04BC08091E800877F809397 -:10236000E8008091E80080FFFCCF8091150136C025 -:10237000809114038132D9F580911803909119034B -:10238000892BA9F58091E800877F8093E8000E945F -:10239000E61380911603809315010C941C1C809108 -:1023A0001403813221F58091E800877F8093E80053 -:1023B0000E94E6138091170380938D020895809107 -:1023C0001403813AA1F48091E800877F8093E800AC -:1023D0008091E80080FFFCCF80918D028093F10016 -:1023E0008091E8008E778093E8000C94E6130895BE -:1023F00084B7877F84BF88E10FB6F894809360002C -:10240000109260000FBE90E080E80FB6F8948093C1 -:102410006100909361000FBE0E9489170E943714DB -:102420000E9494148091E20084608093E20078948A -:102430000E941A170E948B178BE091E00E943517BB -:1024400080911303853069F40E949C2280911103CE -:102450008823B1F30E94CA22882391F30E948C1230 -:10246000EFCF0E949317ECCF292F3327233031056C -:10247000C9F064F42130310581F02230310509F0D2 -:1024800043C08DE690E028E034E042C021323105BF -:10249000F1F02232310541F137C082E190E025E7C9 -:1024A00034E036C099278130910541F082309105A2 -:1024B00041F0892B49F5E4E0F4E005C0E6EDF3E0F6 -:1024C00002C0ECEAF3E0849190E09F0121C0643007 -:1024D000D8F4E62FF0E0EE0FFF1FE255FE4F20810B -:1024E000318189E090E014C0643070F470E0FB0149 -:1024F000EE0FFF1FEA55FE4F20813181FB01EE55A3 -:10250000FE4F808190E004C080E090E020E030E069 -:10251000FA0131832083089580E189BD82E189BD7C -:1025200009B400FEFDCF8091D8008F7D8093D80044 -:102530008091E00082608093E0008091E00081FD66 -:10254000FCCF0895CF92DF92EF92FF920F931F93EB -:10255000CF93DF93EC018B016A010E940514811176 -:1025600033C0C114D10439F0F60180819181081B78 -:10257000190BC80FD91FE12CF12C0115110519F108 -:102580008091E80085FD16C08091E8008E778093E9 -:10259000E800C114D10449F0F60180819181E80E70 -:1025A000F91EF182E08285E00FC00E9405148823A5 -:1025B00021F30AC089918093F10001501109FFEFC6 -:1025C000EF1AFF0ADACF80E0DF91CF911F910F91D0 -:1025D000FF90EF90DF90CF90089520911A033091F3 -:1025E0001B032617370748F06115710539F4209150 -:1025F000E8002E772093E80001C0B90140E06115A2 -:102600007105A9F120911303222309F443C0253059 -:1026100009F442C02091E80023FD40C02091E80069 -:1026200022FD32C02091E80020FFE9CF4091F30065 -:102630002091F20030E0342BFC01CF0161157105CF -:1026400059F02830310540F481918093F1006150B8 -:1026500071092F5F3F4FF1CF41E02830310509F07C -:1026600040E02091E8002E772093E800C8CF411188 -:10267000C9CF0AC080911303882361F0853061F0CF -:102680008091E80083FD0AC08091E80082FFF2CFCC -:1026900080E0089582E0089583E0089581E0089540 -:1026A00020911A0330911B032617370748F0611554 -:1026B000710539F42091E8002E772093E80001C0DD -:1026C000B901FC0120E06115710591F180911303BE -:1026D000882309F440C0853009F43FC08091E800A8 -:1026E00083FD3DC08091E80082FD2FC08091E8000D -:1026F00080FFE9CF2091F3008091F20090E0922BCF -:102700006115710559F08830910540F424912093AA -:10271000F1003196615071090196F2CF21E00897DE -:1027200009F020E08091E8008E778093E800CBCF1D -:102730002111CCCF0AC080911303882361F085302A -:1027400061F08091E80083FD0AC08091E80082FF7B -:10275000F2CF80E0089582E0089583E0089581E05B -:102760000895982F973058F59093E900981739F00D -:102770007091EC002091ED005091F00003C0242FE7 -:10278000762F50E021FF19C03091EB003E7F30934F -:10279000EB003091ED003D7F3093ED003091EB0088 -:1027A00031603093EB007093EC002093ED00509378 -:1027B000F0002091EE0027FF07C09F5FD3CF8F70FE -:1027C0008093E90081E0089580E0089580911403EA -:1027D00087FF11C08091E80082FD05C0809113033E -:1027E0008111F8CF11C08091E8008B770BC08091E8 -:1027F0001303882349F08091E80080FFF8CF80918F -:10280000E8008E778093E80008952091E4003091ED -:10281000E50095E64091EC00842F817040FF22C0D6 -:102820008091E80080FD1CC080911303882391F003 -:10283000853091F08091EB0085FD10C04091E4005F -:102840005091E5004217530729F39A01915011F76F -:1028500084E0089582E0089583E0089581E008957A -:1028600080E008954091E80042FFDECF08950E9485 -:10287000A5140E94AD14E0EEF0E0808181608083B9 -:10288000E8EDF0E080818F77808319BCA7EDB0E0A0 -:102890008C918E7F8C9380818F7E80831092120327 -:1028A00008950F931F93CF93DF930E94A5140E9466 -:1028B000AD14C8EDD0E088818F77888388818068E7 -:1028C000888388818F7D888319BC109213031092AE -:1028D0000F03109211031092100300EE10E0F801A4 -:1028E00080818B7F808388818160888342E060E083 -:1028F00080E00E94B113E1EEF0E080818E7F808362 -:10290000E2EEF0E080818160808380818860808356 -:10291000F80180818E7F8083888180618883DF9148 -:10292000CF911F910F910895E8EDF0E080818F7EA7 -:102930008083E7EDF0E080818160808384E082BF66 -:1029400081E0809312030C945114E8EDF0E0808153 -:102950008E7F80831092E20008951092DA00109228 -:10296000E10008951F920F920FB60F9211242F933A -:102970003F934F935F936F937F938F939F93AF9307 -:10298000BF93EF93FF938091E10082FF0BC0809192 -:10299000E20082FF07C08091E1008B7F8093E1001D -:1029A0000E9419178091DA0080FF1FC08091D80023 -:1029B00080FF1BC08091DA008E7F8093DA008091C7 -:1029C000D90080FF0DC080E189BD82E189BD09B4D5 -:1029D00000FEFDCF81E0809313030E941D1105C00E -:1029E00019BC109213030E942B118091E10080FF0B -:1029F00019C08091E20080FF15C08091E2008E7FB7 -:102A00008093E2008091E20080618093E2008091F7 -:102A1000D80080628093D80019BC85E080931303AE -:102A20000E942F118091E10084FF30C08091E2006C -:102A300084FF2CC080E189BD82E189BD09B400FE1C -:102A4000FDCF8091D8008F7D8093D8008091E100E8 -:102A50008F7E8093E1008091E2008F7E8093E20080 -:102A60008091E20081608093E20080910F038823CF -:102A700011F084E007C08091E30087FD02C081E08F -:102A800001C083E0809313030E9430118091E10024 -:102A900083FF29C08091E20083FF25C08091E1007F -:102AA000877F8093E10082E08093130310920F03ED -:102AB0008091E1008E7F8093E1008091E2008E7F23 -:102AC0008093E2008091E20080618093E20042E026 -:102AD00060E080E00E94B1138091F00088608093F4 -:102AE000F0000E942E11FF91EF91BF91AF919F9145 -:102AF0008F917F916F915F914F913F912F910F90A7 -:102B00000FBE0F901F9018951F920F920FB60F9245 -:102B100011242F933F934F935F936F937F938F93E2 -:102B20009F93AF93BF93CF93DF93EF93FF93C091A6 -:102B3000E900CF708091EC00D82FD17080FDD0E8F3 -:102B40001092E9008091F000877F8093F0007894E4 -:102B50000E94C8151092E9008091F000886080936F -:102B6000F000CD2BCF70C093E900FF91EF91DF9182 -:102B7000CF91BF91AF919F918F917F916F915F9115 -:102B80004F913F912F910F900FBE0F901F9018956E -:102B90001F93CF93DF93CDB7DEB7AA970FB6F89404 -:102BA000DEBF0FBECDBFE4E1F3E088E08E0F909171 -:102BB000F10091938E13FBCF0E9446118091E800A3 -:102BC00083FF1FC18091140390911503492F50E09A -:102BD0004A30510508F015C1FA01EA5AFF4F0C942A -:102BE000D52C803881F0823809F00BC18091180310 -:102BF0008F708093E9008091EB0085FB882780F936 -:102C00001092E90006C08091100390911103911178 -:102C100082609091E800977F9093E8008093F100A4 -:102C20001092F100C8C0282F2D7F09F0EAC0882338 -:102C300019F0823061F0E5C080911603813009F00F -:102C4000E0C0933009F080E0809311032BC08091A5 -:102C50001603811127C0809118038F7009F4D1C029 -:102C60008093E9002091EB0020FF1CC0933021F4F9 -:102C70008091EB00806214C09091EB009061909382 -:102C8000EB0021E030E0A90102C0440F551F8A95F6 -:102C9000E2F74093EA001092EA008091EB0088602E -:102CA0008093EB001092E9008091E800877F86C056 -:102CB0008111A7C0109116031F778091E3008078DF -:102CC000812B8093E3008091E800877F8093E80068 -:102CD0000E94E6138091E80080FFFCCF8091E30022 -:102CE00080688093E300111102C082E001C083E09C -:102CF0008093130386C08058823008F082C0809190 -:102D00001603909117038C3D53E0950779F583E006 -:102D10008A838AE289834FB7F894DE01139620E014 -:102D20003EE051E2E32FF0E050935700E49120FFA2 -:102D300003C0E295EF703F5FEF708E2F90E0EA30B6 -:102D400010F0C79601C0C0968D939D932F5F2431DC -:102D500049F74FBF8091E800877F8093E8006AE2DF -:102D600070E0CE0101960E94ED1214C0AE014F5FDB -:102D70005F4F609118030E943412BC01009709F460 -:102D800040C09091E800977F9093E80089819A81F4 -:102D90000E9450138091E8008B778093E80031C047 -:102DA000803879F58091E800877F8093E8008091F2 -:102DB0000F038093F1008091E8008E778093E80004 -:102DC0000E94E6131EC081111CC090911603923020 -:102DD000C0F48091E800877F8093E80090930F0310 -:102DE0000E94E61380910F03811106C08091E300D9 -:102DF00087FD02C081E001C084E0809313030E943C -:102E000032118091E80083FF0AC08091E800877F3B -:102E10008093E8008091EB0080628093EB00AA969B -:102E20000FB6F894DEBF0FBECDBFDF91CF911F91DB -:102E300008950895CF93809113038823A1F0C09142 -:102E4000E900CF709091EC00892F817090FD80E8AF -:102E5000C82B1092E9008091E80083FD0E94C815FC -:102E6000CF70C093E900CF9108959093930280931F -:102E700092020895E0919202F0919302309721F02E -:102E80000190F081E02D099480E00895E091920294 -:102E9000F0919302309721F00280F381E02D0994A4 -:102EA0000895E0919202F0919302309721F004800E -:102EB000F581E02D099408952091900230919102BE -:102EC0008217930771F09093910280939002E091A2 -:102ED0009202F0919302309721F00680F781E02D65 -:102EE0000994089520918E0230918F0282179307E2 -:102EF00071F090938F0280938E02E0919202F09194 -:102F00009302309721F00084F185E02D0994089513 -:102F100008950C9488170E940F230E9460090E9454 -:102F200095230C9444285F926F927F928F929F9288 -:102F3000AF92BF92CF92DF92EF92FF920F931F93C7 -:102F4000CF93DF9300D000D01F92CDB7DEB70E94A1 -:102F5000A5099DE9C92E92E0D92E03E010E0AA242C -:102F6000A394B12C502E802F0E94200A4C01F60110 -:102F7000729062906F016826792661147104A1F441 -:102F80000150110978F78FEF89838A831B820E9491 -:102F900018238160782F9D838C8349815A816B81AE -:102FA0008D810E94431838C08091F20281FD0E94F9 -:102FB000290A2BE030E07501022E02C0EE0CFF1C46 -:102FC0000A94E2F7C70186219721892B09F1298309 -:102FD0005A828E209F2091E0892809F490E09B83FB -:102FE0000E9418238160782F9D838C8349815A81A8 -:102FF0006B818D810E944318000F111FF801EB5661 -:10300000FD4F80819181E826F926F182E08204C09B -:103010002150310980F6B4CF0E947C251091940292 -:103020000E943A171817D1F00E943A178093940221 -:103030000F900F900F900F900F90DF91CF911F91F5 -:103040000F91FF90EF90DF90CF90BF90AF909F9047 -:103050008F907F906F905F900C944A090F900F9023 -:103060000F900F900F90DF91CF911F910F91FF90D4 -:10307000EF90DF90CF90BF90AF909F908F907F9018 -:103080006F905F900895CF93DF93CDB7DEB72B9706 -:103090000FB6F894DEBF0FBECDBF4F835887698748 -:1030A0007A878B87DE01119686E0FD0111928A9561 -:1030B000E9F785E0FE01379601900D928A95E1F7D8 -:1030C00049815A816B817C818D819E810E94BA1ECB -:1030D0002B960FB6F894DEBF0FBECDBFDF91CF9118 -:1030E0000895CF93882309F4C2C0C82F823859F4B9 -:1030F0000E943A1781FDBBC089E30E9494210E947F -:10310000612289E30CC0833879F40E943A1780FD6C -:10311000AEC083E50E9494210E94612283E50E9453 -:10312000D621CF910C946122843859F40E943A1729 -:1031300082FD9DC087E40E9494210E94612287E461 -:10314000EECF8CEF8C0F813A48F48C2F0E94AC2785 -:1031500081118DC08C2F0E949421E3CF80E28C0FCF -:10316000883048F4C77081E001C0880FCA95EAF73B -:103170000E941A22D6CF8BE58C0F833078F4C53AA3 -:1031800029F0C63A31F083E890E005C081E890E08C -:1031900002C082E890E0CF910C945C1788E58C0F18 -:1031A000833108F064C0C83A39F1C93A41F1CA3AEA -:1031B00049F1CB3A51F1CC3A59F1CD3A61F1C03BEA -:1031C00069F1CE3A71F1CF3A79F1C13B81F1C23B5D -:1031D00089F1C33B91F1C43B99F1C53BA1F1C63BD9 -:1031E000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B39 -:1031F000C9F180E090E038C082EE90E035C089EE01 -:1032000090E032C08AEE90E02FC085EB90E02CC0B9 -:1032100086EB90E029C087EB90E026C08CEC90E034 -:1032200023C08DEC90E020C083E891E01DC08AE8C7 -:1032300091E01AC082E991E017C084E991E014C0DE -:1032400081E292E011C083E292E00EC084E292E05B -:103250000BC085E292E008C086E292E005C087E2FA -:1032600092E002C08AE292E0CF910C947217CF9163 -:103270000895882309F44BC0823859F40E943A1704 -:1032800081FF45C089E30E9494210E94612289E365 -:103290000CC0833871F40E943A1780FF38C083E570 -:1032A0000E9494210E94612283E50E94D6210C9401 -:1032B0006122843859F40E943A1782FF28C087E4BB -:1032C0000E9494210E94612287E4EFCF9CEF980F27 -:1032D000913A58F390E2980F983050F4877091E04B -:1032E00001C0990F8A95EAF7892F0E942022DFCF2B -:1032F0009BE5980F933020F480E090E00C945C17ED -:10330000885A833120F480E090E00C94721708957D -:10331000882321F00E941A220C94612208958823A8 -:1033200021F00E9420220C94612208957F928F92B6 -:103330009F92AF92BF92CF92DF92EF92FF920F9344 -:103340001F93CF93DF931F92CDB7DEB77C01C62EBC -:10335000772EFC01058102950F70128111110E94D8 -:1033600037220E948D21882379F0112369F080E2B1 -:103370008C0D883048F082E00E9476210E948D21D9 -:1033800091E0D82ED92601C0D12CE72DE295EF701F -:10339000F0E0E05AFF4F0C94D52C872D807F072D4D -:1033A0000F70882311F00295007F112389F000230C -:1033B00009F499C180E28C0D883020F4802F0E949E -:1033C0001A2203C0802F0E942A220E9461228BC1F0 -:1033D0008C2D0E943919002309F4C3C180E28C0DA1 -:1033E000883020F4802F0E94202203C0802F0E946A -:1033F00030220E946122B5C1872D807F972D9F705A -:10340000803211F4892F03C0892F8295807FCC20D0 -:1034100021F0F1E0CF16A1F01DC0112339F00023F7 -:1034200019F1013009F50E944A229BC1002319F0CD -:10343000013009F496C189830E944D22898110C10F -:10344000112321F0063008F08CC10EC0053008F0C1 -:1034500088C106C1112359F0002331F0F70195818D -:1034600090FF41C19F7095830E9488197AC1002303 -:1034700009F4F6C03EC1872D86958695837090E04D -:10348000009719F0019761F06CC1112321F08C2D88 -:10349000972D937002C080E090E00E945C1761C19C -:1034A000112321F08C2D972D937002C080E090E0C5 -:1034B0000E94721756C18C2D112319F00E9484248A -:1034C00002C00E94EC240E9471254BC1872D83709D -:1034D00009F052C0111145C18C2D829586958770D7 -:1034E000880F880F9C2D9F70892E912CA12CB12CB8 -:1034F000082E04C0880C991CAA1CBB1C0A94D2F785 -:10350000C4FE14C00FE010E020E030E0B901A801D3 -:1035100004C0440F551F661F771F8A95D2F7CB0151 -:10352000BA01609570958095909503C060E070E059 -:10353000CB01272D26952695237030E022303105CA -:1035400069F02330310589F0682979298A299B2976 -:103550002130310571F00E94022003C168297929C8 -:103560008A299B290E941E20FCC00E940220C501BE -:10357000B4010E94E61FF5C0112319F0872D817058 -:1035800001C08695882309F4ECC08C2D8295869520 -:103590008770880F880F9C2D9F70892E912CA12CED -:1035A000B12C082E04C0880C991CAA1CBB1C0A94C0 -:1035B000D2F7C4FE14C00FE010E020E030E0B90103 -:1035C000A80104C0440F551F661F771F8A95D2F7C4 -:1035D000CB01BA01609570958095909503C060E02D -:1035E00070E0CB01272D269526952370422F50E0C1 -:1035F0004230510569F04330510589F06829792935 -:103600008A299B294130510571F00E94DC20A9C014 -:10361000682979298A299B290E94F820A2C00E9442 -:10362000DC20C501B4010E94C0209BC08C2D90E01D -:10363000FC01E05EF109E531F10508F050C0E05908 -:10364000FF4F0C94D52C0C2D0F70872D8F711123EB -:1036500021F00E945920802F07CF0E947A20802FCE -:103660000E948F197EC0112341F0053008F079C007 -:10367000872D8F710E949F2074C0063008F071C0A2 -:10368000F7CF112339F0872D8F710E94592069C01F -:103690001123C9F3872D8F710E947A2062C01123F4 -:1036A00029F0872D8F710E9444205BC00E943A2030 -:1036B00058C0112351F0172D1F71812F0E945920DE -:1036C00063E0812F0E946D214CC081E00E94762131 -:1036D000023008F446C082E00E94762142C01123E5 -:1036E00031F0002381F28C2D0E9471183AC0002322 -:1036F00089F28C2D0E94391934C0472D4F706C2DE2 -:10370000C7010E94B5030E945E1F2BC0111129C082 -:10371000472D4F7050E042305105B9F04CF441153F -:10372000510581F041305105E1F40E946C2819C027 -:103730004330510569F04430510599F48C2D0E94B5 -:10374000BE280FC00E9455280CC00E94882809C0BE -:103750000E949B2806C0472D4F706C2DC7010E9408 -:103760002B06DD20F9F00E94692180FD1BC0F701C6 -:1037700012820E9463210E945920C7010E94E11B0E -:103780000E9463210F90DF91CF911F910F91FF90C5 -:10379000EF90DF90CF90BF90AF909F908F907F90F1 -:1037A0000C947A200F90DF91CF911F910F91FF9091 -:1037B000EF90DF90CF90BF90AF909F908F907F90D1 -:1037C00008950F931F93CF93DF93EC018881998124 -:1037D0002B813C81232BB9F09F3F11F48F3F99F04F -:1037E000CE010E942A04882371F0688179818A8140 -:1037F0000E945F218C010E9414210E94DB1FB801EE -:10380000CE010E949619DF91CF911F910F910895DB -:103810000E9437220E9447220E940C220E946122AD -:103820000E9422260E94712580E090E00E945C1791 -:1038300080E090E00C9472170E9427220C94081CE0 -:103840000E945421292F22952F7030E02C30310511 -:103850004CF42A3031056CF4225031092230310504 -:10386000A8F407C02C30310569F02F30310551F034 -:103870000DC0803F69F018F4803E40F409C0843FD9 -:1038800029F406C093FB882780F9089580E0089505 -:1038900081E00895CF93DF9300D000D01F92CDB781 -:1038A000DEB70F900F900F900F900F90DF91CF9198 -:1038B0000895CF93DF9300D000D000D0CDB7DEB70E -:1038C00026960FB6F894DEBF0FBECDBFDF91CF9125 -:1038D00008951F93CF93DF93C0919D0216E08091CE -:1038E0009E02C81799F0D0E01C9FF0011D9FF00DBB -:1038F0001124E156FD4F40815181628173818481A1 -:1039000095810E94591C2196C770E9CFDF91CF9114 -:103910001F9108954091CF025091D0026091D10241 -:103920007091D2028091D3029091D4020C94591CD0 -:103930008091D40282958F7009F054C08091D10299 -:10394000882309F44FC080919D02A0919E0260914E -:10395000CF027091D0024091D2025091D302B6E0D2 -:103960008A1709F43FC090E041155105C1F17F3F2E -:1039700011F46F3FA1F1B89FF001B99FF00D112430 -:10398000E156FD4F218172132AC02081621327C0A6 -:103990002281211124C0238134812417350710F49A -:1039A00021503109241B350B283C3105C0F42091EE -:1039B000D4022F7020612093D40226E0289FF001CA -:1039C000299FF00D1124EC55FD4F80818F7080618F -:1039D00080838FEC92E00E94E11B0C94691C01969D -:1039E0008770BECF0895CF92DF92EF92FF920F9330 -:1039F0001F93CF93DF93CDB7DEB762970FB6F894DE -:103A0000DEBF0FBECDBF8C0185E0F801DE011D9643 -:103A100001900D928A95E1F7D8014C9111965C9135 -:103A2000119712966C9112971396CD90DC90149783 -:103A30003091CF027091D0028091D2029091D30246 -:103A4000009709F46BC17F3F19F43F3F09F466C149 -:103A5000E090D102EE2009F4C0C02091D402C81633 -:103A6000D90628F0F601E81BF90BCF0104C08095B8 -:103A700090958C0D9D1DFF24F394883C910578F062 -:103A8000F12C207F09F0C6C07C2DD98AC88A89898B -:103A90000E944A1C8FEC92E00E94E11BB1C0822F71 -:103AA000807F09F046C0751314C0341312C0611131 -:103AB00010C02F7020612093D4020E948A1C8FECCA -:103AC00092E00E94E11B8091D402D80115968C935C -:103AD0002EC0CD2819F15F3F11F44F3FF9F0F62EBB -:103AE00061111CC080919D0220919E0236E08217D8 -:103AF00009F45AC090E0389FF001399FF00D11246D -:103B0000E156FD4F7181571306C07081471303C002 -:103B10007281711103C001968770E9CFF62E66237A -:103B200009F418C18091D40281608093D402F12CF1 -:103B300011C1751308C0341306C0611104C080910F -:103B4000D402D801C3C04D875E878D859E856A8B60 -:103B50000E94201C6A898823E1F16623D1F120911B -:103B6000D402822F82958F7090E0029774F080913A -:103B7000CF029091D00298878F831986DB86CA8600 -:103B80002C87CE0107960E94E11B86E0F801AFEC7E -:103B9000B2E001900D928A95E1F70E94981C0E9474 -:103BA0008A1CFF24F394D6C04D875E878D859E8541 -:103BB0000E945421292F22952F7030E022303105A8 -:103BC0000CF0BCC09F7009F0B6C0805E883008F46D -:103BD000C1C0C8010E94E11BE4CFC816D90608F491 -:103BE00053C0F601E81BF90BCF01883C910508F49E -:103BF00050C0F12C7C2DD98AC88A89890E944A1C20 -:103C0000EFECF2E086E0DF011D928A95E9F70E9471 -:103C10008A1CA0C0751314C0341312C0611110C0E7 -:103C20008091D402F8018583C8010E94E11B86E0DF -:103C3000EFECF2E0DF011D928A95E9F7FE2C8AC0D5 -:103C40004D875E878D859E856A8B0E94201C6A89C0 -:103C5000882309F4BECF662309F4BBCF2091D40298 -:103C6000822F82958F7090E002970CF48ECF809116 -:103C7000CF029091D0029A8389831B82DD82CC820D -:103C80002E83CE0101967FCF809590958C0D9D1D42 -:103C9000ACCFF62E662309F49CCF75132EC03413D7 -:103CA0002CC02091D40220FD1FC0822F82958F70DE -:103CB000D9F0D80115962C9315978F3049F08F5F66 -:103CC000982F9295907F822F8F70892B15968C93C9 -:103CD000C8010E94E11B86E0F801AFECB2E0019060 -:103CE0000D928A95E1F793CF86E0F801AFECB2E050 -:103CF00001900D928A95E1F72DC04D875E878D85E5 -:103D00009E850E94201C811140CF8091D402816049 -:103D10008093D402C8010E94E11B1CC0662309F4F1 -:103D200058CF4D875E878D859E850E94201C8823F5 -:103D300009F44FCF2ACF811148CF0CC02430310570 -:103D40000CF047CF9F7009F440CFF8019581907F28 -:103D500009F03BCF8F2D62960FB6F894DEBF0FBEF1 -:103D6000CDBFDF91CF911F910F91FF90EF90DF902A -:103D7000CF9008951F93CF93DF93CDB7DEB72C97E5 -:103D80000FB6F894DEBF0FBECDBF4F83588769874B -:103D90007A878B879C87CE0107960E94F31C882325 -:103DA00069F08F8198852A853B85232BF1F19F3F10 -:103DB00009F063C08F3F09F060C037C086E0FE01A4 -:103DC0003796DE01119601900D928A95E1F76F8189 -:103DD0007885EA85FB85309741F17F3F11F46F3F8D -:103DE00021F120919E0230E0C90101968770992748 -:103DF00040919D0250E08417950709F447C06983FC -:103E00007A83FD83EC8396E0929FD001939FB00D5F -:103E10001124A156BD4FFE01319601900D929A9545 -:103E2000E1F780939E020E94691C16E080919D023A -:103E300090919E028917C1F1189FC00111248156EB -:103E40009D4F0E94F31C882379F1E0919D021E9FF3 -:103E5000F0011124E156FD4F40815181628173814F -:103E6000848195810E94591C80919D0290E0019669 -:103E70008770992780939D02D9CF4F815885698596 -:103E80007A858B859C850E94591CCFCF0E941C1C73 -:103E900010929E0210929D02EFECF2E086E0DF01AC -:103EA0001D928A95E9F7C1CF2C960FB6F894DEBF24 -:103EB0000FBECDBFDF91CF911F910895EF92FF927A -:103EC0000F931F93CF93DF938C01009709F46CC07D -:103ED000F12CEE24E394E8012196F80184918437D3 -:103EE00040F4843008F051C0813081F0823019F103 -:103EF0005BC0853709F444C0A8F19CE7980F903760 -:103F000008F052C08F770E94391941C00E5F1F4FD1 -:103F1000FE01C49180E28C0F883048F4C7708E2D6A -:103F200001C0880FCA95EAF70E943A2214C08C2F6C -:103F30000E9471182DC00E5F1F4FFE01C49180E2D8 -:103F40008C0F883058F4C7708E2D01C0880FCA9529 -:103F5000EAF70E9440220E9461221AC08C2F0E9420 -:103F6000391916C00E5F1F4FFE01C491CC2381F09A -:103F70008FE99FE00197F1F700C00000C150F6CF34 -:103F80000E5F1F4FFE01F49003C00E9471188E0156 -:103F90008F2D882309F49FCFEFE9FFE03197F1F7E8 -:103FA00000C000008150F5CFDF91CF911F910F919C -:103FB000FF90EF90089508956093D9027093DA020C -:103FC0008093DB029093DC020C94081C0F931F93E8 -:103FD0000091D9021091DA022091DB023091DC02CB -:103FE000DC01CB01802B912BA22BB32B8093D90228 -:103FF0009093DA02A093DB02B093DC021F910F9141 -:104000000C94081C0F931F930091D9021091DA02AF -:104010002091DB023091DC02DC01CB018023912373 -:10402000A223B3238093D9029093DA02A093DB02F8 -:10403000B093DC021F910F910C94081C0F931F93F7 -:104040000091D9021091DA022091DB023091DC025A -:10405000DC01CB0180279127A227B3278093D902C7 -:104060009093DA02A093DB02B093DC021F910F91D0 -:104070000C94081C1092D5021092D6021092D7020E -:104080001092D8020C94081C41E050E060E070E00F -:1040900004C0440F551F661F771F8A95D2F74093BF -:1040A000D5025093D6026093D7027093D8020C9435 -:1040B000081C41E050E060E070E004C0440F551F70 -:1040C000661F771F8A95D2F78091D5029091D6020C -:1040D000A091D702B091D802482B592B6A2B7B2B89 -:1040E0004093D5025093D6026093D7027093D802C2 -:1040F0000C94081C41E050E060E070E004C0440F04 -:10410000551F661F771F8A95D2F740955095609589 -:1041100070958091D5029091D602A091D702B0916E -:10412000D802482359236A237B234093D502509316 -:10413000D6026093D7027093D8020C94081C41E019 -:1041400050E060E070E004C0440F551F661F771F09 -:104150008A95D2F78091D5029091D602A091D7028C -:10416000B091D802482759276A277B274093D50268 -:104170005093D6026093D7027093D8020C94081C17 -:104180000F931F930091D5021091D6022091D70270 -:104190003091D802DC01CB01802B912BA22BB32BC9 -:1041A0008093D5029093D602A093D702B093D80201 -:1041B0001F910F910C94081C0F931F930091D5022F -:1041C0001091D6022091D7023091D802DC01CB01A8 -:1041D00080239123A223B3238093D5029093D60208 -:1041E000A093D702B093D8021F910F910C94081C92 -:1041F0000F931F930091D5021091D6022091D70200 -:104200003091D802DC01CB0180279127A227B32768 -:104210008093D5029093D602A093D702B093D80290 -:104220001F910F910C94081C0895CF92DF92EF928A -:10423000FF920F931F93CF93DF938C01C090D9020D -:10424000D090DA02E090DB02F090DC028091D5029F -:104250009091D602A091D702B091D802C82AD92A4B -:10426000EA2AFB2ACFE1D0E0D701C6010C2E04C018 -:10427000B695A795979587950A94D2F780FF06C0C3 -:10428000B8018C2F0E94B008019721F4219760F7A4 -:1042900080E001C08C2FDF91CF911F910F91FF9093 -:1042A000EF90DF90CF900895CF93DF93EC010E94C1 -:1042B0001521BE010E94B008DF91CF910895CB0176 -:1042C0000E94542108958091DD02859585958595FC -:1042D00008958091DD028770089598E0899F90018C -:1042E0001124262B2093DD020C9459202091DD020D -:1042F000809582238093DD02982F977069F430E0D7 -:10430000482F552747FD50952417350729F08595E7 -:10431000859585950C947A2008959091DD0297708B -:1043200081E009F480E0089590911501992321F02E -:1043300090911601911109C0209117013091180137 -:10434000F90132969FEF40E01FC0982F9695969501 -:1043500096959F3050F5E0911701F0911801E90F03 -:10436000F11D877021E030E0A90102C0440F551F04 -:104370008A95E2F7CA019181892B818308959F3F35 -:1043800039F04F5F4E3041F051915813F8CF0DC0C6 -:104390005111F7CF942FF5CF9F3F39F0F901E90F75 -:1043A000F11D97FDFA958283089508959091150166 -:1043B000992321F090911601911109C020911701C4 -:1043C00030911801F9013296205F3F4F1FC0982F9E -:1043D0009695969596959F30F0F4E0911701F0919F -:1043E0001801E90FF11D877021E030E0A90102C03A -:1043F000440F551F8A95E2F7CA0180959181892360 -:10440000818308953196E217F30729F0908198137C -:10441000F9CF1082F7CF089581E090E0E091170185 -:10442000F0911801E80FF91F108201968031910573 -:10443000A9F708959091F102892B8093F1020895D4 -:1044400080959091F10289238093F1020895109252 -:10445000F10208959091F002892B8093F002089563 -:1044600080959091F00289238093F0020895109234 -:10447000F00208959091EF02892B8093EF02089546 -:1044800080959091EF0289238093EF020895109216 -:10449000EF0208958093DE0208951092DE020895DF -:1044A0008091170190911801FC0131969C01205FC9 -:1044B0003F4F80E0919191118F5FE217F307D1F7A1 -:1044C0000895E0911701F09118018091F102808325 -:1044D000E0911701F091180190818091F002892BF1 -:1044E0008083E0911701F091180190818091EF0293 -:1044F000892B80838091DE02882361F0E09117018F -:10450000F09118019081892B80830E9450228111A3 -:104510001092DE0280911701909118010C944617B9 -:1045200020E0009739F0AC014150510984239523D4 -:104530002F5FF7CF822F089580911303843039F1D4 -:104540001092F30220E488E190E00FB6F894A89569 -:10455000809360000FBE2093600080E00E941C03E7 -:1045600080E00E944A0983B7817F846083BF83B75C -:10457000816083BF7894889583B78E7F83BF88E1FD -:104580000FB6F89480936000109260000FBE0895FB -:104590000895089580E00E941C030E94C8220E9492 -:1045A000A5090E94C9220E942A0A91E0811101C036 -:1045B00090E0892F08950E941C1C80E00E941C033B -:1045C0000E9444280E943A170C944A091F920F92A5 -:1045D0000FB60F9211248F939F93AF93BF93809147 -:1045E000F302811113C08091F4029091F502A09121 -:1045F000F602B091F7024196A11DB11D8093F4021D -:104600009093F502A093F602B093F702BF91AF9199 -:104610009F918F910F900FBE0F901F90189582E081 -:1046200084BD93E095BD9AEF97BD80936E00089589 -:104630002FB7F8948091F4029091F502A091F602C0 -:10464000B091F7022FBF0895CF92DF92EF92FF92C1 -:104650000F931F932FB7F8944091F4025091F502F5 -:104660006091F6027091F7022FBF6A017B01EE2480 -:10467000FF248C0120E030E0C016D106E206F306EC -:1046800010F4415051099A01281B390BC9011F919F -:104690000F91FF90EF90DF90CF9008951F920F92AF -:1046A0000FB60F9211248F939F93AF93BF93809176 -:1046B000F4029091F502A091F602B091F7020196F2 -:1046C000A11DB11D8093F4029093F502A093F60210 -:1046D000B093F702BF91AF919F918F910F900FBE52 -:1046E0000F901F9018950E943714F8942FEF87EAC7 -:1046F00091E6215080409040E1F700C0000087E043 -:1047000090EBDC0180931E0390931F03A093200382 -:10471000B09321039CE088E10FB6F894A8958093AC -:1047200060000FBE90936000FFCF0E94D4238111E0 -:1047300002C00E94B0230E94DF238093F2020E94F5 -:10474000E72380931C0387FB882780F98093160159 -:104750000E94E323682F70E080E090E00C94DC1F5F -:104760006DEE7EEF80E090E00E94FB2C60E082E046 -:1047700090E00E94E92C60E083E090E00E94E92C48 -:1047800060E084E090E00E94E92C60E085E090E049 -:104790000E94E92C60E086E090E00E94E92C6FEF37 -:1047A00087E090E00C94E92C80E090E00E94E32CFC -:1047B00021E08D3E9E4F09F020E0822F089582E097 -:1047C00090E00C94DB2C83E090E00C94DB2C84E0F4 -:1047D00090E00C94DB2C682F84E090E00C94E92CA2 -:1047E00086E090E00C94DB2C682F86E090E00C943F -:1047F000E92C87E090E00C94DB2C682F87E090E0B8 -:104800000C94E92C8091FA0280FF0BC060911C018E -:1048100085E0689FB001112475956795759567953A -:104820002BC081FF09C060911C0185E0689FB00129 -:1048300011247595679520C082FF07C060911C0107 -:1048400085E0689FB001112417C09091FB02992365 -:10485000D1F060911B01961788F720911C0185E02B -:10486000289F90011124929FA001939F500D112425 -:1048700070E0CA010E94C12C6038710540F46115D6 -:10488000710539F002C065E070E0862F08958FE76A -:10489000089581E008958091FA0280FF08C0609138 -:1048A0001A0170E0759567957595679521C081FF30 -:1048B00006C060911A0170E07595679519C082FF76 -:1048C00004C060911A0170E010C09091FB0299231E -:1048D000C1F0609119019617A0F780911A01899F84 -:1048E000C001112470E00E94C12C6038710528F4C9 -:1048F0006115710521F0862F08958FE7089581E0F5 -:10490000089561E070E0F4CF803F21F40E9402241A -:10491000819504C0813F29F40E9402248093FE0205 -:104920000895823F21F40E940224819504C0833FB0 -:1049300029F40E9402248093FD020895893F19F40E -:104940000E944B2405C08A3F31F40E944B2481957C -:104950008093FF0208958B3F21F40E944B248195A0 -:1049600004C08C3F29F40E944B24809300030895D7 -:10497000843F21F48091FC02816017C0853F21F4BF -:104980008091FC02826011C0863F21F48091FC027C -:1049900084600BC0873F21F48091FC02886005C0D1 -:1049A000883F31F48091FC0280618093FC0208957D -:1049B0008D3F21F48091FA0281600BC08E3F21F47B -:1049C0008091FA02826005C08F3F29F48091FA023B -:1049D00084608093FA020895803F39F48091FE024A -:1049E00087FF6CC01092FE0269C0813F29F480915C -:1049F000FE021816BCF362C09091FD02823F29F4BA -:104A000097FF5CC01092FD0259C0833F19F419163C -:104A1000CCF354C0893F41F48091FF0218160CF08A -:104A20004DC01092FF024AC08A3F29F48091FF02D4 -:104A300087FF44C0F6CF8B3F39F48091000387FF96 -:104A40003DC0109200033AC08C3F29F480910003CE -:104A50001816BCF333C0843F21F48091FC028E7F92 -:104A600017C0853F21F48091FC028D7F11C0863FE5 -:104A700021F48091FC028B7F0BC0873F21F4809151 -:104A8000FC02877F05C0883F31F48091FC028F7E55 -:104A90008093FC0213C08D3F21F48091FA028E7F37 -:104AA0000BC08E3F21F48091FA028D7F05C08F3FAD -:104AB00029F48091FA028B7F8093FA028091FD02A3 -:104AC00081110EC08091FE0281110AC08091FF0207 -:104AD000811106C080910003811102C01092FB0277 -:104AE00008958CEF92E00E9451170E941823909332 -:104AF000F9028093F80208951F93CF93DF9380917A -:104B0000F8029091F9020E942423AC019091FB02DB -:104B1000992321F020911D0130E006C020911E0153 -:104B20008AE0289F900111244217530708F486C099 -:104B30008091FD02C091FE02D091FF02109100030E -:104B4000811107C0C11176C0D11174C0111172C09A -:104B500075C09F3F19F09F5F9093FB02181624F4D5 -:104B60000E9402248093FD028091FD0287FF05C010 -:104B70000E94022481958093FD021C1624F40E9459 -:104B800002248093FE028091FE0287FF05C00E94EE -:104B9000022481958093FE026091FD02662339F123 -:104BA000C091FE02CC2319F1772767FD7095872FFE -:104BB000972F0E94E32923E333E343E35FE30E945B -:104BC000F32A0E94B0296093FD026C2F772767FDBE -:104BD0007095872F972F0E94E32923E333E343E364 -:104BE0005FE30E94F32A0E94B0296093FE021D1623 -:104BF00024F40E944B248093FF028091FF0287FFE0 -:104C000005C00E944B2481958093FF02111624F465 -:104C10000E944B24809300038091000387FF05C00E -:104C20000E944B24819580930003DF91CF911F91C7 -:104C30000C9471259F3F09F08ECF96CFDF91CF91D5 -:104C40001F910895ECEFF2E085E0DF011D928A9557 -:104C5000E9F71092FB021092FA020895833081F175 -:104C600028F4813059F08230D1F00895853009F46C -:104C700049C0B8F1863009F456C0089580911E01EC -:104C8000262F30E0280F311D2F3F310524F4680F07 -:104C900060931E0108958FEF80931E010895809107 -:104CA0001D01262F30E0280F311D2F3F310524F440 -:104CB000680F60931D0108958FEF80931D01089583 -:104CC00080911C01262F30E0280F311D2F3F310528 -:104CD00024F4680F60931C0108958FEF80931C01EA -:104CE000089580911B01262F30E0280F311D2F3FA2 -:104CF000310524F4680F60931B0108958FEF8093B2 -:104D00001B01089580911A01262F30E0280F311DD4 -:104D10002F3F310524F4680F60931A0108958FEF37 -:104D200080931A01089580911901262F30E0280FF1 -:104D3000311D2F3F310524F4680F60931901089548 -:104D40008FEF809319010895833011F128F4813099 -:104D500049F0823091F00895853081F120F186305C -:104D6000C1F1089580911E01681720F4861B80937D -:104D70001E01089510921E01089580911D0168176B -:104D800020F4861B80931D01089510921D01089543 -:104D900080911C01681720F4861B80931C010895E4 -:104DA00010921C01089580911B01681720F4861B46 -:104DB00080931B01089510921B01089580911A01A0 -:104DC000681720F4861B80931A01089510921A0127 -:104DD000089580911901681720F4861B80931901AA -:104DE00008951092190108950F931F93873208F0C8 -:104DF00048C08E3108F08DC0803109F477C008F5C5 -:104E0000873009F461C068F4863009F09DC0809154 -:104E1000F202817F8E7F8093F20281E08093020311 -:104E200094C08B3009F489C08E3009F08DC0809118 -:104E3000F20282FB222720F991E0922790FB82F96F -:104E40005EC0863109F479C060F4813109F07CC01C -:104E50000E941C1C9091160181E089278093160105 -:104E60006CC0893109F469C08B3109F06DC0809143 -:104E7000F20281FB222720F991E0922790FB81F931 -:104E80003EC0883309F459C050F4893209F457C040 -:104E9000853309F454C0873209F451C055C08334B6 -:104EA00009F44DC028F48A3308F44EC0895332C047 -:104EB000883409F049C00E941C1C0E945A0A0E94B2 -:104EC00021040E94732339C09091F202892F8095AA -:104ED000817080FB90F929F0966098609093F202BF -:104EE00034C0997F977F9093F20227C08091F2029D -:104EF00083FB222720F991E0922790FB83F980938E -:104F0000F2029923D1F08091F20281608093F20243 -:104F100014C08D5141E050E060E070E08A019B01D7 -:104F200004C0000F111F221F331F8A95D2F7C90139 -:104F3000B8010E94DC1F0E941C1C81E006C061E0D9 -:104F400070E080E090E0F5CF80E01F910F91089530 -:104F500080E0089580E00895CF93C82F80910203E8 -:104F6000813069F018F08230C9F184C0E0911701F6 -:104F7000F09118018081823209F07EC007C0E09173 -:104F80001701F09118018081823261F48C2F0E9408 -:104F9000A827811104C08C2F0E94F4261DC081E037 -:104FA00090E01AC08C2F0E94AA27811114C0C4312E -:104FB00079F048F4CB3079F0C03109F061C082E07B -:104FC0008093020308C0C93219F0C83321F058C0D9 -:104FD0001092020355C081E0817054C0C93291F132 -:104FE00020F5C43179F1B0F4C73009F047C08EE143 -:104FF00080931E0182E380931D018AE080931C014F -:1050000084E180931B0188E080931A0188E28093F9 -:10501000190134C0CE51C63088F5EC2FF0E0EA54C7 -:10502000FE4F80818093010329C0CE34E9F020F443 -:10503000CB3421F56AE013C0C13579F0C235F1F403 -:1050400061E00DC080910103882319F010920103E3 -:1050500015C081E08093020315C061E006C0809115 -:1050600001030E942E260AC06AE0809101030E947B -:10507000A42604C01092020380E004C081E002C0B4 -:1050800080E0AACFCF9108950E94D423811102C05D -:105090000E94B0230E94F02380931D0380FF02C072 -:1050A000869501C080E00C941C0380911D03982F0D -:1050B0009695292F30E0233031054CF49F5F990FEE -:1050C0008170892B816080931D030E94F42380915D -:1050D0001D0386950C941C0380911D03982F9695B3 -:1050E00091F09158990F8170892B80931D038E7FC9 -:1050F00091E009F490E080911D0390FB80F980938A -:105100001D030E94F42380911D0386950C941C03BB -:1051100080911D03982F909590FB80F980931D033B -:105120000E94F42380911D0380FF02C0869501C078 -:1051300080E00C941C0390911D03892F86958F5F4E -:105140008F779170843028F4880F892B80931D030A -:1051500002C090931D0380911D038E7F91E009F49E -:1051600090E080911D0390FB80F980931D030E94C5 -:10517000F42380911D0386950C941C0320911D033C -:10518000922F96958927982F990F822F8170892BBE -:1051900080931D038E7F91E009F490E080911D03C0 -:1051A00090FB80F980931D030E94F42380911D03DE -:1051B00086950C941C0380911D0386950895505884 -:1051C000BB27AA270ED0D1C1C2D130F0C7D120F061 -:1051D00031F49F3F11F41EF4B7C10EF4E095E7FBE4 -:1051E0009FC1E92FD3D180F3BA17620773078407F1 -:1051F000950718F071F49EF5EBC10EF4E0950B2EB7 -:10520000BA2FA02D0B01B90190010C01CA01A00118 -:105210001124FF27591B99F0593F50F4503E68F173 -:105220001A16F040A22F232F342F4427585FF3CFB4 -:10523000469537952795A795F0405395C9F77EF485 -:105240001F16BA0B620B730B840BBAF09150A1F0CE -:10525000FF0FBB1F661F771F881FC2F70EC0BA0F54 -:10526000621F731F841F48F4879577956795B795DC -:10527000F7959E3F08F0B3CF9395880F08F09927D4 -:10528000EE0F97958795089527D108F481E008954A -:105290000CD06BC163D140F05AD130F021F45F3FA4 -:1052A00019F03EC1511195C14FC170D198F39923A6 -:1052B000C9F35523B1F3951B550BBB27AA276217DA -:1052C0007307840738F09F5F5F4F220F331F441F1F -:1052D000AA1FA9F333D00E2E3AF0E0E830D0915057 -:1052E0005040E695001CCAF729D0FE2F27D0660F44 -:1052F000771F881FBB1F261737074807AB07B0E883 -:1053000009F0BB0B802DBF01FF2793585F4F2AF098 -:105310009E3F510568F004C15CC15F3FECF3983ECD -:10532000DCF3869577956795B795F7959F5FC9F7F5 -:10533000880F911D9695879597F90895E1E0660F7E -:10534000771F881FBB1F621773078407BA0720F0F7 -:10535000621B730B840BBA0BEE1F88F7E095089560 -:1053600004D06894B11135C1089518D188F09F57C1 -:1053700090F0B92F9927B751A0F0D1F0660F771FA1 -:10538000881F991F1AF0BA95C9F712C0B13081F081 -:105390001FD1B1E008951CC1672F782F8827B85F0F -:1053A00039F0B93FCCF3869577956795B395D9F7E2 -:1053B0003EF490958095709561957F4F8F4F9F4FEC -:1053C0000895E89409C097FB3EF4909580957095F8 -:1053D00061957F4F8F4F9F4F9923A9F0F92F96E941 -:1053E000BB279395F695879577956795B795F111B6 -:1053F000F8CFFAF4BB0F11F460FF1BC06F5F7F4F53 -:105400008F4F9F4F16C0882311F096E911C0772364 -:1054100021F09EE8872F762F05C0662371F096E86D -:10542000862F70E060E02AF09A95660F771F881F3C -:10543000DAF7880F9695879597F9089588D018F030 -:1054400011F08CD038F480C0C4C0E92F9FD0B0F3E5 -:105450005523C9F3E7FB6217730784079507A8F183 -:1054600099F3E92FFF2788232AF03197660F771FDA -:10547000881FDAF7952F5527442332F0915050407A -:10548000220F331F441FD2F7BB27E91BF50B621B0A -:10549000730B840BB109C1F222F4620F731F841FD6 -:1054A000B11D31972AF0660F771F881FBB1FEFCF02 -:1054B000915050405AF041F0882332F0660F771F28 -:1054C000881F91505040C1F7939530C086957795CD -:1054D00067959F5FD9F7F8CF990F0008550FAA0B72 -:1054E000E0E8FEEF16161706E807F907C0F01216F7 -:1054F0001306E407F50798F0621B730B840B950BFA -:1055000039F40A2661F0232B242B252B21F408954E -:105510000A2609F4A140A6958FEF811D811D0895EB -:1055200097F99F6780E870E060E008959F3F31F051 -:10553000915020F4879577956795B795880F911DC1 -:105540009695879597F908959FEF80EC089500242C -:105550000A941616170618060906089500240A94D8 -:1055600012161306140605060895092E0394000C5E -:1055700011F4882352F0BB0F40F4BF2B11F460FFED -:1055800004C06F5F7F4F8F4F9F4F089557FD905816 -:10559000440F551F59F05F3F71F04795880F97FBF7 -:1055A000991F61F09F3F79F08795089512161306B1 -:1055B0001406551FF2CF4695F1DF08C016161706E0 -:1055C0001806991FF1CF8695710561050894089515 -:1055D000E894BB2766277727CB0197F908957CDFEE -:1055E00008F48FEF08950BD0C0CFB1DF28F0B6DFFD -:1055F00018F0952309F094CFA7CF1124EACFC6DF86 -:10560000A0F3959FD1F3950F50E0551F629FF001D5 -:10561000729FBB27F00DB11D639FAA27F00DB11D2E -:10562000AA1F649F6627B00DA11D661F829F2227B7 -:10563000B00DA11D621F739FB00DA11D621F839F3E -:10564000A00D611D221F749F3327A00D611D231F14 -:10565000849F600D211D822F762F6A2F11249F5762 -:1056600050408AF0E1F088234AF0EE0FFF1FBB1F85 -:10567000661F771F881F91505040A9F79E3F510524 -:1056800070F04ECFA6CF5F3FECF3983EDCF38695EB -:1056900077956795B795F795E7959F5FC1F7FE2BCF -:1056A000880F911D9695879597F90895FA01EE0F49 -:1056B000FF1F30962105310599F16115710561F4DF -:1056C0008038BFE39B0749F168949038810561F009 -:1056D0008038BFEF9B0741F0992342F5FF3FE1057A -:1056E0003105210511F1E8940894E795D901AA2321 -:1056F00029F4AB2FBE2FF85FD0F310C0FF5F70F41A -:10570000A695E0F7F73950F019F0FF3A38F49F7793 -:105710009F930CD00F9007FC905808953EF014CF43 -:1057200060E070E080E89FE308954FE79F775F9324 -:105730004F933F932F939ED02F913F914F915F9125 -:1057400052DF05C019F40EF0EBCE42CFFDCE26DFBE -:10575000C8F39638C0F707F80F92E8942BE33AEABB -:1057600048EB5FE74EDF0F920F920F924DB75EB797 -:105770000F92C0D0EAE0F1E016D04F915F91EF9127 -:10578000FF91E595EE1FFF1F49F0FE57E0684427A3 -:10579000EE0F441FFA95E1F74195550B32D00F906B -:1057A00007FE26C00895DF93CF931F930F93FF92B8 -:1057B000EF92DF927B018C01689405C0DA2EEF0135 -:1057C0001EDFFE01E894A5912591359145915591F3 -:1057D000AEF3EF0106DDFE019701A801DA9479F737 -:1057E000DF90EF90FF900F911F91CF91DF9108957F -:1057F0009B01AC0160E070E080E89FE349CD90CE72 -:1058000095CECCDEE8F39923D9F3940F511DBBF369 -:105810009150504094F059F0882332F0660F771F72 -:10582000881F91505040C1F79E3F510544F7880FA3 -:10583000911D9695879597F908955F3FACF0983E36 -:105840009CF0BB27869577956795B79508F4B1606E -:105850009395C1F7BB0F58F711F460FFE8CF6F5F66 -:105860007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE05 -:10587000689456CE93DEC8F39923D1F3C6F3DF9331 -:10588000CF931F930F93FF92C92FDD2788232AF010 -:105890002197660F771F881FDAF720E030E040E895 -:1058A0005FEB9FE3883920F0803E30F021968F77C0 -:1058B00087DCE2E3F1E003C083DCEFE5F1E073DFD6 -:1058C0008B01BE01EC01FB2E6F5771097595771F97 -:1058D000880B990B78DD28E132E741E35FE38FDE47 -:1058E000AF2D9801AE01FF900F911F91CF91DF91E5 -:1058F00078DC3BCEFA01DC01AA0FBB1F9B01AC0197 -:10590000BF5728F422273327442750781FC0B751A8 -:1059100088F4AB2F0024469537952795011CA39555 -:10592000D2F3002069F0220F331F441FB395DAF33E -:105930000DD045CC61307105A0E88A07B94630F436 -:105940009B01AC016627772788279078309621F055 -:1059500020833183428353830895AA1BBB1B51E1EB -:1059600007C0AA1FBB1FA617B70710F0A61BB70BCF -:10597000881F991F5A95A9F780959095BC01CD0174 -:10598000089597FB072E16F4009407D077FD09D0F1 -:105990000E94AD2C07FC05D03EF4909581959F4F59 -:1059A0000895709561957F4F0895EE0FFF1F059044 -:1059B000F491E02D0994F999FECF92BD81BDF89A3A -:1059C000992780B50895A8E1B0E042E050E00C943A -:1059D000032D262FF999FECF92BD81BDF89A01972C -:1059E00000B4021639F01FBA20BD0FB6F894FA9A27 -:1059F000F99A0FBE08950196272F0E94EA2C0C9465 -:105A0000E92CDC01CB01FC01F999FECF06C0F2BD07 -:105A1000E1BDF89A319600B40D9241505040B8F76C -:065A20000895F894FFCF89 -:105A2600640007000CFF0000003F643E10CC10A984 -:105A360010751041100101DF022808140A321E00F9 -:105A460002040507090B0C0E1011131517181A1C62 -:105A56001D1F2123242628292B2D2F30323435379C -:105A6600393B1F0F03764F5F6F7F496943790959A9 -:105A760053633149803F5D8B803FF8BF803FCAE169 -:105A8600803F73ED803FCAE1803FF8BF803F5D8B6A -:105A9600803F3149803F0000803FF16D7F3F75EACE -:105AA6007E3F4C827E3F833F7E3F84287E3F833FFE -:105AB6007E3F4C827E3F75EA7E3FF16D7F3F000060 -:105AC600803F3F4D36394305F604C00487041A0467 -:105AD60033044C04650401020304050607080900A3 -:00000001FF diff --git a/keyboard/planck/keymaps/unicode/compiled.hex b/keyboard/planck/keymaps/unicode/compiled.hex deleted file mode 100644 index a32eb3a4a9..0000000000 --- a/keyboard/planck/keymaps/unicode/compiled.hex +++ /dev/null @@ -1,1185 +0,0 @@ -:100000000C9493040C94D7040C94D7040C94D70448 -:100010000C94D7040C94D7040C94D7040C94D704F4 -:100020000C94D7040C94D7040C948A0F0C945C1095 -:100030000C94741D0C94D7040C94D7040C94D7041E -:100040000C94D7040C94D7040C94D7040C94D704C4 -:100050000C94D7040C94DC1D0C94D7040C94D70496 -:100060000C94D7040C94D7040C94D7040C94D704A4 -:100070000C94D7040C94D7040C94D7040C94D70494 -:100080000C94D7040C94D7040C94D7040C94D70484 -:100090000C94D7040C94D7040C94D7040C94D70474 -:1000A0000C94D7040C94D7040C94D704500558052D -:1000B00062056A0579058305C005C005C005C00550 -:1000C000C005C0059105B405BC05C910EB10D911D8 -:1000D000EB10D91130115311D911A811BB11A5146E -:1000E000A514D414D41413153315891689163E1586 -:1000F0008916EE15EE1555165E1689168316FB1534 -:10010000FB15FB15FB15FB15FB15FB15FB15FB156F -:10011000FB15FB15FB15FB15FB15FB15FB150B164E -:1001200019162016271631160108011501090119A3 -:100130000112010F02080215020902190212020F30 -:10014000002B0014001A000800150017001C0018EE -:10015000000C00120013002A0029000400160007FA -:100160000009000A000B000D000E000F00330034E0 -:1001700000E1001D001B0006001900050011001021 -:100180000036003700380028000530E000E200E3C8 -:100190000003302C002C0004305000510052004F5E -:1001A000002B00718077806680708067806A806C29 -:1001B00080758079803B800880290061807280731F -:1001C000807480648068806E80658069806F80271D -:1001D00080E1007A8078806380768062806B806DB9 -:1001E000802C802E802F8028000100E000E200E3B8 -:1001F0000003302C002C0004305000510052004FFE -:10020000002B0034003600370013001C0009000AE0 -:1002100000060015000F002A002900040012000843 -:100220000018000C0007000B001700110016003822 -:1002300000E100330014000D000E001B000500104B -:10024000001A0019001D0028000530E000E200E35C -:100250000003302C002C0004305000510052004F9D -:100260000035021E021F0220022102220223022464 -:10027000022502260227022A004C003A003B003CDD -:10028000003D003E003F002D022E022F02300231C1 -:1002900002010040004100420043004400450001CB -:1002A0000001000100010001000100010001000146 -:1002B000000100010001000100AB00AA00A900AE8E -:1002C0000035001E001F0020002100220023002412 -:1002D000002500260027002A004C003A003B003C85 -:1002E000003D003E003F002D002E002F0030003169 -:1002F000000100400041004200430044004500016D -:1003000000010001000100010001000100010001E5 -:10031000000100010001000100AB00AA00A900AE2D -:10032000001E001E001E001E001E001E001E001EDD -:10033000001E001E001E001E00000014001A00080F -:1003400000150017001C0018000C00120013002FED -:10035000000E3004001600070009000A000B000D13 -:10036000000E000F00330034000D300000000006C6 -:100370000019000000000011001000000000000043 -: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 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:100740000001000050010001000100010001000152 -:10075000000100010001004C000100010001002027 -:10076000502150135012500030013002300C300133 -:1007700000010027502650235024502850295001B2 -:100780000001000100010001000100010001000161 -:100790000001000100010001000100010001000151 -:1007A000002803540068006500200050006C0061C0 -:1007B000006E0063006B0020004B00650079006252 -:1007C000006F0061007200640000002C034F007293 -:1007D00000740068006F006C0069006E00650061C5 -:1007E00000720020004B006500790062006F00611C -:1007F000007200640073000000040309040902543D -:1008000000030100A0FA090400000103010100092E -:100810002111010001223F000705810308000A0998 -:100820000401000103010200092111010001224D10 -:10083000000705820308000A090402000103000002 -:100840000009211101000122360007058303080079 -:100850000A1201100100000008EDFE6060010001B5 -:1008600002000105010980A101850216010026B7D9 -:10087000001A01002AB700751095018100C0050C0F -:100880000901A1018503160100269C021A01002A14 -:100890009C02751095018100C005010902A10109A2 -:1008A00001A1000509190129051500250195057506 -:1008B0000181029501750381010501093009311596 -:1008C00081257F95027508810609381581257F9558 -:1008D0000175088106050C0A38021581257F9501EE -:1008E00075088106C0C005010906A101050719E0C8 -:1008F00029E7150025019508750181029501750804 -:1009000081010508190129059505750191029501D7 -:10091000750391010507190029FF150025FF9506AC -:1009200075088100C00011241FBECFEFDAE0DEBFE2 -:10093000CDBF04B603FE24C08091E4019091E5018F -:10094000A091E601B091E7018730904BA740B04BF2 -:10095000B9F41092E4011092E5011092E6011092B0 -:10096000E70114BE84B7877F84BF88E10FB6F8948F -:1009700080936000109260000FBEE0E0F8E30995FC -:1009800011E0A0E0B1E0ECEBF9E402C005900D92BB -:10099000AE33B107D9F711E0AEE3B1E001C01D926B -:1009A000A43EB107E1F70E94D00C0C94DC240C9417 -:1009B0000000089581E0089508950C94D9040C94E2 -:1009C000DA040C94DC040E94522323E030E0281B5C -:1009D0003109220F209340010895282F2F988091EC -:1009E0008000211108C0877F8093800010928D00C5 -:1009F00010928C001BC0886080938000233019F413 -:100A00008FEF9FEF0FC083E090E0821B9109880F6A -:100A1000991F2FEF3FEFA90102C0569547958A9580 -:100A2000E2F7CA0190938D0080938C000C94E3044C -:100A30000E94E30484E080933F0110923E010895F8 -:100A4000279A2F988FEF9FEF9093870080938600CF -:100A50008AE08093800089E1809381000E94BB221C -:100A60000C9418050E9420056E9A769A0C94C6057F -:100A7000CF93DF93EC010E946B1EBE0180E090E0FB -:100A8000DF91CF910C94B41A462F50E04F305105AE -:100A900008F076C0DC01FA01EA5AFF4F0C948C246E -:100AA00012968C91882309F46BC081E090E007C016 -:100AB00012968C91882309F463C082E090E00E9432 -:100AC00038055EC012968C91882309F459C084E0E1 -:100AD00090E0F5CF12968C91882311F083E00EC040 -:100AE00083E00E94521B40E164E083E00E94080A18 -:100AF00047C012968C91882321F084E00E94311B1C -:100B0000F2CF84E0EECF12968C91882331F085EEFF -:100B10000E9449130E94122333C085EE0E941114D3 -:100B20002FC012968C91882359F184E00E94521BA9 -:100B300083E00E94521B80E10E94521B85E00E94CC -:100B4000311B0E94581E811102C00E94391E0E9452 -:100B5000701E90E09093E3018093E201806880939F -:100B6000E2010E94741E0CC012968C91882341F001 -:100B700085E00E94521B04C012968C91811103C023 -:100B800080E090E0089588E291E00895089581E082 -:100B900008950C94C7050895282F882339F090E014 -:100BA0002A3010F44D9608950697089587E290E054 -:100BB0000895AF92BF92DF92EF92FF920F931F932F -:100BC000CF93DF938C01FC01C081D181CE010E94C3 -:100BD000ED1BBE010E94EE06EC01B8010E94C905A2 -:100BE000882309F4EBC0F8018281882309F4A0C0AE -:100BF00080914D0181111FC0C431F0E5DF0709F07C -:100C0000D7C00E94CB0581E080934D010E94A61DB4 -:100C100090934C0180934B01109244011092460135 -:100C200010924501109248011092470110924A011A -:100C300010924901C3C080914B0190914C010E94D8 -:100C4000B21D883C910570F480914401E82FF0E0DA -:100C5000EE0FFF1FEB5BFE4FD183C0838F5F80934E -:100C60004401ACC0C13080E8D80708F451C0F80195 -:100C70008281882309F460C05E01E894B7F880910E -:100C80004301813079F050F08230C1F482EE0E944D -:100C9000491387E50E94491387E50EC082EE0E9442 -:100CA00049130CC080EE0E94491381EE0E94491343 -:100CB00088E10E94491388E10E9411148CE0E82E1B -:100CC000F12CC5010E2C02C0969587950A94E2F787 -:100CD0008F700E94CC05D82E0E9449138D2D0E9442 -:100CE0001114F4E0EF1AF1088CEFE8168FEFF80614 -:100CF00041F780914301813029F010F0823041F4B6 -:100D000082EE04C080EE0E94111481EE0E94111444 -:100D1000C438E0E5DE0721F0C538D04501F137C021 -:100D2000F8018281882361F01092410182E01EC0A7 -:100D3000C130F0E8DF0760F3C43880E5D80761F41C -:100D400080914101811106C086E20E94491386E22A -:100D50000E94111482E018C0C538D045C1F4F801D2 -:100D60008281882331F01092420180E20E94601457 -:100D700025C080914201811106C087E20E9449137B -:100D800087E20E94111480E20E94671417C081E07C -:100D90008093410180934201C801DF91CF911F915F -:100DA0000F91FF90EF90DF90BF90AF900C94DF0415 -:100DB000C130F0E8DF0708F05FCFAACF80E0DF9115 -:100DC000CF911F910F91FF90EF90DF90BF90AF9068 -:100DD00008950C9432050C94DD0408959CE0799FED -:100DE000F001112490E3899FE00DF11D1124E60F1D -:100DF000F11DEE0FFF1FEF5BFE4F8591949108955B -:100E0000880F991FFC01EF53F0408591949108954C -:100E1000880F991FFC01EF5BFE4F85919491089517 -:100E20000F931F93CF93DF93EC01811521E392077A -:100E3000A0F5C11580E3D80708F0D7C0C83ED1059A -:100E4000D8F4C03ED10508F003C2C83AD10578F401 -:100E5000C53AD10508F06AC0C130D10509F463C0B4 -:100E600008F4F3C1C430D10508F0F2C1EEC1CB3BA8 -:100E7000D10508F466C0E9C1C11590E2D90708F0B0 -:100E8000AFC0C11521E0D20708F0E2C1C03FD105D3 -:100E900008F4DBC18E0110651BC2C03880E5D8079D -:100EA00000F5C03790E5D90708F0A3C0C11520E5CB -:100EB000D20709F4ACC050F4CE01905480319F4069 -:100EC00008F0C3C1DF708E01106A02C2C13080E534 -:100ED000D80709F4AAC0C43190E5D90708F4ABC01B -:100EE000B4C1C33820E5D20709F48EC050F4C1382C -:100EF00090E5D90709F482C008F083C000E011ED45 -:100F0000E7C1C03181E5D80708F49FC1C11597E555 -:100F1000D90708F432C1CE0190578115904108F0ED -:100F200094C1DF708FC101E010E0D2C1C53AD10594 -:100F300009F490C1C63AD10509F08FC102E810E466 -:100F4000C7C1C83AD10509F48BC1C93AD10509F422 -:100F50008AC1CA3AD10509F489C1CB3AD10509F44D -:100F600088C1CC3AD10509F487C1CD3AD10509F43D -:100F700086C1C03BD10509F485C1CE3AD10509F43B -:100F800084C1CF3AD10509F483C1C13BD10509F42D -:100F900082C1C23BD10509F481C1C33BD10509F42B -:100FA00080C1C43BD10509F47FC1C53BD10509F41B -:100FB0007EC1C63BD10509F47DC1C73BD10509F40B -:100FC0007CC1C83BD10509F47BC1C93BD10509F4FB -:100FD0007AC1CA3BD10509F479C100E014E478C1B3 -:100FE000CE019F700E94080774C1DD278E01106C2E -:100FF0006FC1CF70DD278E01146D6AC100E010ED66 -:1010000067C100E012ED64C100E013ED61C10E9410 -:10101000F4168FEF94E32CE0815090402040E1F7EC -:1010200000C000000E94011E53C18091C401816074 -:101030008093C4014DC10E94581E811102C00E94BC -:10104000391E0E94701E90E09093E3018093E201AC -:10105000C23080E5D80721F48091E201816086C02A -:10106000C43090E5D90721F48091E20182607EC00E -:10107000C63020E5D20721F48091E201846076C079 -:10108000C83080E5D80719F48091E20127C0CA3042 -:1010900090E5D90721F48091E201806167C0CC30EE -:1010A00020E5D20721F48091E20180625FC0CE305A -:1010B00080E5D80721F48091E201806457C0C031F7 -:1010C00090E5D90721F48091E20180684FC0C231D8 -:1010D00020E5D20729F48091E2018460886046C04F -:1010E000C33080E5D80721F48091E2018E7F3EC0B5 -:1010F000C53090E5D90721F48091E2018D7F36C09B -:10110000C73020E5D20721F48091E2018B7F2EC009 -:10111000C93080E5D80719F48091E20126C0CB30B0 -:1011200090E5D90721F48091E2018F7E1FC0CD3078 -:1011300020E5D20721F48091E2018F7D17C0CF30E6 -:1011400080E5D80721F48091E2018F7B0FC0C13187 -:1011500090E5D90721F48091E2018F7707C0C33170 -:10116000D04531F48091E2018B7F877F8093E2014B -:101170008091E2010E94741EABC08D2F99278F7061 -:10118000992781309105D9F49E012370332702C03D -:10119000880F991F2A95E2F79C688E0144E0000FA2 -:1011A000111F4A95E1F700271370802B912B53E014 -:1011B000CC0FDD1F5A95E1F7C076DD272FC08230B6 -:1011C000910531F4DC2FCC278E01016F106A80C0AD -:1011D0008330910569F4CE018370992701E010E016 -:1011E00002C0000F111F8A95E2F7C8019C680FC06A -:1011F00084309105B9F4CE018370992701E010E0A5 -:1012000002C0000F111F8A95E2F7C8019A6823E017 -:10121000CC0FDD1F2A95E1F7C07ED7708C010C2B17 -:101220001D2B56C08530910531F4DC2FCC278E0163 -:10123000046F106A4DC0069709F04AC0CF71DD27D0 -:10124000DC2FCC278E01106243C000E010E040C0CC -:101250008E013EC001E810E43BC003E810E438C052 -:1012600002EE14E435C009EE14E432C00AEE14E4D0 -:101270002FC005EB14E42CC006EB14E429C007EBE7 -:1012800014E426C00CEC14E423C00DEC14E420C0DC -:1012900003E815E41DC00AE815E41AC002E915E4E4 -:1012A00017C004E915E414C001E216E411C003E21A -:1012B00016E40EC004E216E40BC005E216E408C012 -:1012C00006E216E405C007E216E402C00AE216E4EC -:1012D000C801DF91CF911F910F9108959CE0799FF4 -:1012E000F001112490E3899FE00DF11D1124E60F18 -:1012F000F11DEE0FFF1FEF5BFE4F85919491803E35 -:101300009105E0F4803C910558F58133910509F48D -:101310006FC048F48932910509F463C08A3291059F -:1013200009F46DC072C089339105E9F082389105E6 -:10133000D1F08533910509F44DC067C0833E910516 -:1013400081F138F4803E9105B9F0823E9105D9F0E3 -:101350005CC0863E910561F1873E9105A1F155C0C3 -:101360000E94000708952091E20120FD02C021FFA4 -:101370004CC080EE90E049C08091E20180FFF9CF3F -:1013800089E390E042C08091E20182FF0EC080912B -:10139000E20184FF03C080E090E037C083EE90E07C -:1013A00034C08091E20182FFF2CF82EE90E02DC046 -:1013B0008091E20183FF0BC08091E20184FDEBCFBD -:1013C00087EE90E022C08091E20183FFF5CF86EEA8 -:1013D00090E01BC08091E20185FF07C089E290E0A8 -:1013E00014C08091E20185FFF9CF85E390E00DC044 -:1013F0008091E20186FF07C08AE290E006C08091FA -:10140000E20186FFF9CF81E390E00E941007089582 -:10141000CF92DF92EF92FF920F931F9301E010E0C3 -:1014200020E030E06801790104C0CC0CDD1CEE1C2A -:10143000FF1C8A95D2F704C0000F111F221F331F13 -:101440006A95D2F70C291D292E293F29C090AF019A -:10145000D090B001E090B101F090B201C022D12251 -:10146000E222F322842FC016D106E206F30641F4ED -:101470001F910F91FF90EF90DF90CF900C94311B54 -:101480001F910F91FF90EF90DF90CF900C94521B23 -:101490000C94E104E82FF0E0E05EFE4F8081E82F3D -:1014A000EF70F0E082958F7021E030E0A90102C07A -:1014B000440F551F8A95E2F740A308950F931F9399 -:1014C000CF93DF9385B7806885BF85B7806885BF78 -:1014D000C3E0D0E001E010E0FE01E05EFE4F80815D -:1014E000E82FEF70F0E021A182958F70A80102C073 -:1014F000440F551F8A95E2F7CA01822B81A38C2FD6 -:101500000E944A0A219740F78BE090E061E070E08A -:10151000FC01EC5EFE4F2081E22FEF70F0E042A173 -:1015200022952F70DB0102C0AA0FBB1F2A95E2F79C -:101530009D01242B22A3019758F7DF91CF911F9192 -:101540000F910C94E906EF92FF920F931F93CF93A4 -:10155000DF9306E511E0C3E0EE24E394F12CD5E03F -:101560008C2F0E944A0A8BE090E040E050E0FC01A2 -:10157000EC5EFE4F6081E62FEF70F0E020A130E0DE -:1015800062956F7002C0359527956A95E2F720FD48 -:1015900009C09701082E02C0220F331F0A94E2F7F8 -:1015A000422B532B019718F7F801929182918F01EA -:1015B0008417950721F051834083D09300018C2F2D -:1015C0000E944A0AC15060F68091000187FD2CC03C -:1015D0008150809300018F3F39F08FE99FE00197A0 -:1015E000F1F700C0000020C0809154019091550196 -:1015F00090935D0180935C01809152019091530121 -:1016000090935B0180935A01809150019091510118 -:10161000909359018093580180914E0190914F0110 -:1016200090935701809356010E94EB0681E0DF9171 -:10163000CF911F910F91FF90EF900895E82FF0E068 -:10164000EE0FFF1FEA5AFE4F8081918108950895A1 -:101650000F931F93CF930EE511E0C0E0F801929134 -:1016600082918F010E941E1DC80FF1E006351F07F1 -:10167000A9F78C2FCF911F910F910895809166014A -:101680000895CF93DF9300D01F92CDB7DEB79C01B2 -:101690008091D901843019F593E099833B832A83A3 -:1016A0009093E9008FEF9091E800815095FD06C07E -:1016B00095ED9A95F1F700008111F5CF8091E80042 -:1016C00085FF0DC040E050E063E070E0CE01019680 -:1016D0000E947A0D8091E8008E778093E8000F9049 -:1016E0000F900F90DF91CF910895CF93DF9300D0AB -:1016F0001F92CDB7DEB72091D901243021F522E029 -:1017000029839B838A8383E08093E9008FEF909104 -:10171000E800815095FD06C095ED9A95F1F700001F -:101720008111F5CF8091E80085FF0DC040E050E0C9 -:1017300063E070E0CE0101960E947A0D8091E8008E -:101740008E778093E8000F900F900F90DF91CF91EC -:1017500008952091D9012430F1F422E02093E9008A -:101760002FEF3091E800215035FD06C035ED3A9558 -:10177000F1F700002111F5CF2091E80025FF0BC003 -:1017800040E050E065E070E00E947A0D8091E80052 -:101790008E778093E8000895CF93DF932091D9014D -:1017A000243039F521E02093E9002FEF3091E80053 -:1017B000215035FD06C035ED3A95F1F700002111B5 -:1017C000F5CF2091E80025FF14C0EC0140E050E087 -:1017D00068E070E00E947A0D8091E8008E77809337 -:1017E000E80088E0FE01AEE5B1E001900D928A9537 -:1017F000E1F7DF91CF9108958091D801811109C05F -:101800000E940F0F0E946C0F8091E2008460809311 -:10181000E20008951092D8010895089508950C9457 -:10182000691D42E061EC81E00E94890E42E061ECBA -:1018300082E00E94890E42E061EC83E00C94890E04 -:101840008091DB01833009F453C030F4813071F0B2 -:10185000823009F48CC008958A3009F478C08B3046 -:1018600009F45EC0893009F09AC020C08091DA0185 -:10187000813A09F094C08091E800877F8093E80066 -:101880008091DE019091DF01892B21F468E08EE5E3 -:1018900091E003C060E080E090E070E00E94C50D40 -:1018A0008091E8008B778093E80008958091DA01B9 -:1018B000813209F074C08091DE019091DF01892BA3 -:1018C00009F06DC08091E800877F8093E8008091E7 -:1018D000E80082FD05C08091D9018111F8CF5FC079 -:1018E0008091F100809366018091E8008B7753C06E -:1018F0008091DA01813A09F052C08091DE01909125 -:10190000DF01892B09F04BC08091E800877F80932D -:10191000E8008091E80080FFFCCF80910B0136C089 -:101920008091DA018132D9F58091DE019091DF0159 -:10193000892BA9F58091E800877F8093E8000E94B9 -:10194000BE0E8091DC0180930B010C94F416809103 -:10195000DA01813221F58091E800877F8093E800E9 -:101960000E94BE0E8091DD018093670108958091F1 -:10197000DA01813AA1F48091E800877F8093E80042 -:101980008091E80080FFFCCF809167018093F10097 -:101990008091E8008E778093E8000C94BE0E089545 -:1019A00084B7877F84BF88E10FB6F8948093600086 -:1019B000109260000FBE90E080E80FB6F89480931C -:1019C0006100909361000FBE0E9461120E940F0F90 -:1019D0000E946C0F8091E20084608093E200789412 -:1019E0000E94F2110E94631281E091E00E940D12A8 -:1019F0008091D901853069F40E942A1D8091D70118 -:101A00008823B1F30E94581D882391F30E94640D2E -:101A1000EFCF0E946B12ECCF292F332723303105F3 -:101A2000C9F064F42130310581F02230310509F02C -:101A300043C084E590E02DEF37E042C0213231050C -:101A4000F1F02232310541F137C082E190E021E529 -:101A500038E036C099278130910541F082309105F8 -:101A600041F0892B49F5E9EFF7E005C0EBECF7E031 -:101A700002C0E1EAF7E0849190E09F0121C0633069 -:101A8000D8F4E62FF0E0EE0FFF1FE35DFE4F20815C -:101A9000318189E090E014C0633070F470E0FB01A4 -:101AA000EE0FFF1FE95DFE4F20813181FB01EC5DF0 -:101AB000FE4F808190E004C080E090E020E030E0C4 -:101AC000FA0131832083089580E189BD82E189BDD7 -:101AD00009B400FEFDCF8091D8008F7D8093D8009F -:101AE0008091E00082608093E0008091E00081FDC1 -:101AF000FCCF0895CF92DF92EF92FF920F931F9346 -:101B0000CF93DF93EC018B016A010E94DD0E8111FE -:101B100033C0C114D10439F0F60180819181081BD2 -:101B2000190BC80FD91FE12CF12C0115110519F162 -:101B30008091E80085FD16C08091E8008E77809343 -:101B4000E800C114D10449F0F60180819181E80ECA -:101B5000F91EF182E08285E00FC00E94DD0E88232D -:101B600021F30AC089918093F10001501109FFEF20 -:101B7000EF1AFF0ADACF80E0DF91CF911F910F912A -:101B8000FF90EF90DF90CF9008952091E001309189 -:101B9000E1012617370748F06115710539F42091E6 -:101BA000E8002E772093E80001C0B90140E06115FC -:101BB0007105A9F12091D901222309F443C02530F0 -:101BC00009F442C02091E80023FD40C02091E800C4 -:101BD00022FD32C02091E80020FFE9CF4091F300C0 -:101BE0002091F20030E0342BFC01CF01611571052A -:101BF00059F02830310540F481918093F100615013 -:101C000071092F5F3F4FF1CF41E02830310509F0D6 -:101C100040E02091E8002E772093E800C8CF4111E2 -:101C2000C9CF0AC08091D901882361F0853061F065 -:101C30008091E80083FD0AC08091E80082FFF2CF26 -:101C400080E0089582E0089583E0089581E008959A -:101C50002091E0013091E1012617370748F0611526 -:101C6000710539F42091E8002E772093E80001C037 -:101C7000B901FC0120E06115710591F18091D90154 -:101C8000882309F440C0853009F43FC08091E80002 -:101C900083FD3DC08091E80082FD2FC08091E80067 -:101CA00080FFE9CF2091F3008091F20090E0922B29 -:101CB0006115710559F08830910540F42491209305 -:101CC000F1003196615071090196F2CF21E0089739 -:101CD00009F020E08091E8008E778093E800CBCF78 -:101CE0002111CCCF0AC08091D901882361F08530C1 -:101CF00061F08091E80083FD0AC08091E80082FFD6 -:101D0000F2CF80E0089582E0089583E0089581E0B5 -:101D10000895982F973058F59093E900981739F067 -:101D20007091EC002091ED005091F00003C0242F41 -:101D3000762F50E021FF19C03091EB003E7F3093A9 -:101D4000EB003091ED003D7F3093ED003091EB00E2 -:101D500031603093EB007093EC002093ED005093D2 -:101D6000F0002091EE0027FF07C09F5FD3CF8F7058 -:101D70008093E90081E0089580E008958091DA0180 -:101D800087FF11C08091E80082FD05C08091D901D4 -:101D90008111F8CF11C08091E8008B770BC0809142 -:101DA000D901882349F08091E80080FFF8CF809125 -:101DB000E8008E778093E80008952091E400309148 -:101DC000E50095E64091EC00842F817040FF22C031 -:101DD0008091E80080FD1CC08091D901882391F09A -:101DE000853091F08091EB0085FD10C04091E400BA -:101DF0005091E5004217530729F39A01915011F7CA -:101E000084E0089582E0089583E0089581E00895D4 -:101E100080E008954091E80042FFDECF08950E94DF -:101E20007D0F0E94850FE0EEF0E08081816080836D -:101E3000E8EDF0E080818F77808319BCA7EDB0E0FA -:101E40008C918E7F8C9380818F7E80831092D801BD -:101E500008950F931F93CF93DF930E947D0F0E94ED -:101E6000850FC8EDD0E088818F778883888180686E -:101E7000888388818F7D888319BC1092D901109244 -:101E8000D5011092D7011092D60100EE10E0F801B2 -:101E900080818B7F808388818160888342E060E0DD -:101EA00080E00E94890EE1EEF0E080818E7F8083E9 -:101EB000E2EEF0E0808181608083808188608083B1 -:101EC000F80180818E7F8083888180618883DF91A3 -:101ED000CF911F910F910895E8EDF0E080818F7E02 -:101EE0008083E7EDF0E080818160808384E082BFC1 -:101EF00081E08093D8010C94290FE8EDF0E0808117 -:101F00008E7F80831092E20008951092DA00109282 -:101F1000E10008951F920F920FB60F9211242F9394 -:101F20003F934F935F936F937F938F939F93AF9361 -:101F3000BF93EF93FF938091E10082FF0BC08091EC -:101F4000E20082FF07C08091E1008B7F8093E10077 -:101F50000E94F1118091DA0080FF1FC08091D800AB -:101F600080FF1BC08091DA008E7F8093DA00809121 -:101F7000D90080FF0DC080E189BD82E189BD09B42F -:101F800000FEFDCF81E08093D9010E94FC0B05C0CB -:101F900019BC1092D9010E940A0C8091E10080FFC7 -:101FA00019C08091E20080FF15C08091E2008E7F11 -:101FB0008093E2008091E20080618093E200809152 -:101FC000D80080628093D80019BC85E08093D90145 -:101FD0000E940E0C8091E10084FF30C08091E200ED -:101FE00084FF2CC080E189BD82E189BD09B400FE77 -:101FF000FDCF8091D8008F7D8093D8008091E10043 -:102000008F7E8093E1008091E2008F7E8093E200DA -:102010008091E20081608093E2008091D501882365 -:1020200011F084E007C08091E30087FD02C081E0E9 -:1020300001C083E08093D9010E940F0C8091E100E0 -:1020400083FF29C08091E20083FF25C08091E100D9 -:10205000877F8093E10082E08093D9011092D501BF -:102060008091E1008E7F8093E1008091E2008E7F7D -:102070008093E2008091E20080618093E20042E080 -:1020800060E080E00E94890E8091F000886080937B -:10209000F0000E940D0CFF91EF91BF91AF919F91C5 -:1020A0008F917F916F915F914F913F912F910F9001 -:1020B0000FBE0F901F9018951F920F920FB60F92A0 -:1020C00011242F933F934F935F936F937F938F933D -:1020D0009F93AF93BF93CF93DF93EF93FF93C09101 -:1020E000E900CF708091EC00D82FD17080FDD0E84E -:1020F0001092E9008091F000877F8093F00078943F -:102100000E94A0101092E9008091F00088608093F6 -:10211000F000CD2BCF70C093E900FF91EF91DF91DC -:10212000CF91BF91AF919F918F917F916F915F916F -:102130004F913F912F910F900FBE0F901F901895C8 -:102140001F93CF93DF93CDB7DEB7AA970FB6F8945E -:10215000DEBF0FBECDBFEAEDF1E088E08E0F9091BB -:10216000F10091938E13FBCF0E94200C8091E80028 -:1021700083FF1FC18091DA019091DB01492F50E06C -:102180004A30510508F015C1FA01EB59FF4F0C9484 -:102190008C24803881F0823809F00BC18091DE01F7 -:1021A0008F708093E9008091EB0085FB882780F990 -:1021B0001092E90006C08091D6019091D70191114B -:1021C00082609091E800977F9093E8008093F100FF -:1021D0001092F100C8C0282F2D7F09F0EAC0882393 -:1021E00019F0823061F0E5C08091DC01813009F0A6 -:1021F000E0C0933009F080E08093D7012BC080913C -:10220000DC01811127C08091DE018F7009F4D1C0FB -:102210008093E9002091EB0020FF1CC0933021F453 -:102220008091EB00806214C09091EB0090619093DC -:10223000EB0021E030E0A90102C0440F551F8A9550 -:10224000E2F74093EA001092EA008091EB00886088 -:102250008093EB001092E9008091E800877F86C0B0 -:102260008111A7C01091DC011F778091E300807875 -:10227000812B8093E3008091E800877F8093E800C2 -:102280000E94BE0E8091E80080FFFCCF8091E300A9 -:1022900080688093E300111102C082E001C083E0F6 -:1022A0008093D90186C08058823008F082C0809126 -:1022B000DC019091DD018C3D53E0950779F583E0D9 -:1022C0008A838AE289834FB7F894DE01139620E06F -:1022D0003EE051E2E32FF0E050935700E49120FFFD -:1022E00003C0E295EF703F5FEF708E2F90E0EA3011 -:1022F00010F0C79601C0C0968D939D932F5F243137 -:1023000049F74FBF8091E800877F8093E8006AE239 -:1023100070E0CE0101960E94C50D14C0AE014F5F62 -:102320005F4F6091DE010E940C0DBC01009709F423 -:1023300040C09091E800977F9093E80089819A814E -:102340000E94280E8091E8008B778093E80031C0CE -:10235000803879F58091E800877F8093E80080914C -:10236000D5018093F1008091E8008E778093E8009A -:102370000E94BE0E1EC081111CC09091DC019230E3 -:10238000C0F48091E800877F8093E8009093D501A6 -:102390000E94BE0E8091D501811106C08091E3009C -:1023A00087FD02C081E001C084E08093D9010E94D2 -:1023B000110C8091E80083FF0AC08091E800877FBC -:1023C0008093E8008091EB0080628093EB00AA96F6 -:1023D0000FB6F894DEBF0FBECDBFDF91CF911F9136 -:1023E00008950895CF938091D9018823A1F0C091D9 -:1023F000E900CF709091EC00892F817090FD80E80A -:10240000C82B1092E9008091E80083FD0E94A01083 -:10241000CF70C093E900CF91089590936D018093A0 -:102420006C010895E0916C01F0916D01309721F0FD -:102430000190F081E02D099480E00895E0916C0115 -:10244000F0916D01309721F00280F381E02D099425 -:102450000895E0916C01F0916D01309721F00480B6 -:10246000F581E02D0994089520916A0130916B0166 -:102470008217930771F090936B0180936A01E0914A -:102480006C01F0916D01309721F00680F781E02D0D -:10249000099408952091680130916901821793078A -:1024A00071F09093690180936801E0916C01F09163 -:1024B0006D01309721F00084F185E02D0994089595 -:1024C00008950C9460120E949D1D0E945E0A0E9455 -:1024D000231E0C94BB225F926F927F928F929F92E9 -:1024E000AF92BF92CF92DF92EF92FF920F931F9322 -:1024F000CF93DF9300D000D01F92CDB7DEB70E94FC -:10250000A30A97E7C92E91E0D92E03E010E0AA2490 -:10251000A394B12C502E802F0E941E0B4C01F6016B -:10252000729062906F016826792661147104A1F49B -:102530000150110978F78FEF89838A831B820E94EB -:10254000A61D8160782F9D838C8349815A816B8180 -:102550008D810E941B1338C08091C40181FD0E94AF -:10256000270B2BE030E07501022E02C0EE0CFF1CA1 -:102570000A94E2F7C70186219721892B09F1298363 -:102580005A828E209F2091E0892809F490E09B8355 -:102590000E94A61D8160782F9D838C8349815A817A -:1025A0006B818D810E941B13000F111FF801E159EF -:1025B000FE4F80819181E826F926F182E08204C0F5 -:1025C0002150310980F6B4CF0E94FC1F10916E019A -:1025D0000E9412121817D1F00E94121280936E01FD -:1025E0000F900F900F900F900F90DF91CF911F9150 -:1025F0000F91FF90EF90DF90CF90BF90AF909F90A2 -:102600008F907F906F905F900C94480A0F900F907E -:102610000F900F900F90DF91CF911F910F91FF902E -:10262000EF90DF90CF90BF90AF909F908F907F9072 -:102630006F905F900895CF93DF93CDB7DEB72B9760 -:102640000FB6F894DEBF0FBECDBF4F8358876987A2 -:102650007A878B87DE01119686E0FD0111928A95BB -:10266000E9F785E0FE01379601900D928A95E1F732 -:1026700049815A816B817C818D819E810E94921952 -:102680002B960FB6F894DEBF0FBECDBFDF91CF9172 -:102690000895CF93882309F4C2C0C82F823859F413 -:1026A0000E94121281FDBBC089E30E946C1C0E9433 -:1026B000EF1C89E30CC0833879F40E94121280FD6C -:1026C000AEC083E50E946C1C0E94EF1C83E50E9453 -:1026D000891CCF910C94EF1C843859F40E9412127B -:1026E00082FD9DC087E40E946C1C0E94EF1C87E461 -:1026F000EECF8CEF8C0F813A48F48C2F0E9423226E -:1027000081118DC08C2F0E946C1CE3CF80E28C0F56 -:10271000883048F4C77081E001C0880FCA95EAF795 -:102720000E94A81CD6CF8BE58C0F833078F4C53A75 -:1027300029F0C63A31F083E890E005C081E890E0E6 -:1027400002C082E890E0CF910C94341288E58C0F9F -:10275000833108F064C0C83A39F1C93A41F1CA3A44 -:1027600049F1CB3A51F1CC3A59F1CD3A61F1C03B44 -:1027700069F1CE3A71F1CF3A79F1C13B81F1C23BB7 -:1027800089F1C33B91F1C43B99F1C53BA1F1C63B33 -:10279000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B93 -:1027A000C9F180E090E038C082EE90E035C089EE5B -:1027B00090E032C08AEE90E02FC085EB90E02CC014 -:1027C00086EB90E029C087EB90E026C08CEC90E08F -:1027D00023C08DEC90E020C083E891E01DC08AE822 -:1027E00091E01AC082E991E017C084E991E014C039 -:1027F00081E292E011C083E292E00EC084E292E0B6 -:102800000BC085E292E008C086E292E005C087E254 -:1028100092E002C08AE292E0CF910C944A12CF91EA -:102820000895882309F44BC0823859F40E9412128B -:1028300081FF45C089E30E946C1C0E94EF1C89E364 -:102840000CC0833871F40E94121280FF38C083E5F7 -:102850000E946C1C0E94EF1C83E50E94891C0C9452 -:10286000EF1C843859F40E94121282FF28C087E4BA -:102870000E946C1C0E94EF1C87E4EFCF9CEF980F26 -:10288000913A58F390E2980F983050F4877091E0A5 -:1028900001C0990F8A95EAF7892F0E94AE1CDFCFFD -:1028A0009BE5980F933020F480E090E00C94341274 -:1028B000885A833120F480E090E00C944A12089505 -:1028C000882321F00E94A81C0C94EF1C08958823F3 -:1028D00021F00E94AE1C0C94EF1C08957F928F9201 -:1028E0009F92AF92BF92CF92DF92EF92FF920F939F -:1028F0001F93CF93DF931F92CDB7DEB77C01C62E17 -:10290000772EFC01058102950F70128111110E9432 -:10291000C51C0E94651C882379F0112369F080E2B0 -:102920008C0D883048F082E00E944E1C0E94651C8D -:1029300091E0D82ED92601C0D12CE72DE295EF7079 -:10294000F0E0E159FF4F0C948C24872D807F072DF8 -:102950000F70882311F00295007F112389F0002366 -:1029600009F499C180E28C0D883020F4802F0E94F8 -:10297000A81C03C0802F0E94B81C0E94EF1C8BC1B2 -:102980008C2D0E941114002309F4C3C180E28C0D28 -:10299000883020F4802F0E94AE1C03C0802F0E943C -:1029A000BE1C0E94EF1CB5C1872D807F972D9F70A4 -:1029B000803211F4892F03C0892F8295807FCC202B -:1029C00021F0F1E0CF16A1F01DC0112339F0002352 -:1029D00019F1013009F50E94D81C9BC1002319F0A0 -:1029E000013009F496C189830E94DB1C898110C1E2 -:1029F000112321F0063008F08CC10EC0053008F01C -:102A000088C106C1112359F0002331F0F7019581E7 -:102A100090FF41C19F7095830E9460147AC100238A -:102A200009F4F6C03EC1872D86958695837090E0A7 -:102A3000009719F0019761F06CC1112321F08C2DE2 -:102A4000972D937002C080E090E00E94341261C123 -:102A5000112321F08C2D972D937002C080E090E01F -:102A60000E944A1256C18C2D112319F00E94041F96 -:102A700002C00E946C1F0E94F11F4BC1872D837002 -:102A800009F052C0111145C18C2D82958695877031 -:102A9000880F880F9C2D9F70892E912CA12CB12C12 -:102AA000082E04C0880C991CAA1CBB1C0A94D2F7DF -:102AB000C4FE14C00FE010E020E030E0B901A8012E -:102AC00004C0440F551F661F771F8A95D2F7CB01AC -:102AD000BA01609570958095909503C060E070E0B4 -:102AE000CB01272D26952695237030E02230310525 -:102AF00069F02330310589F0682979298A299B29D1 -:102B00002130310571F00E94DA1A03C16829792950 -:102B10008A299B290E94F61AFCC00E94DA1AC50174 -:102B2000B4010E94BE1AF5C0112319F0872D8170DF -:102B300001C08695882309F4ECC08C2D829586957A -:102B40008770880F880F9C2D9F70892E912CA12C47 -:102B5000B12C082E04C0880C991CAA1CBB1C0A941A -:102B6000D2F7C4FE14C00FE010E020E030E0B9015D -:102B7000A80104C0440F551F661F771F8A95D2F71E -:102B8000CB01BA01609570958095909503C060E087 -:102B900070E0CB01272D269526952370422F50E01B -:102BA0004230510569F04330510589F0682979298F -:102BB0008A299B294130510571F00E94B41BA9C09C -:102BC000682979298A299B290E94D01BA2C00E94CA -:102BD000B41BC501B4010E94981B9BC08C2D90E0D2 -:102BE000FC01E05EF109E531F10508F050C0E15863 -:102BF000FF4F0C948C240C2D0F70872D8F71112397 -:102C000021F00E94311B802F07CF0E94521B802F82 -:102C10000E9467147EC0112341F0053008F079C08E -:102C2000872D8F710E94771B74C0063008F071C029 -:102C3000F7CF112339F0872D8F710E94311B69C0A6 -:102C40001123C9F3872D8F710E94521B62C011237B -:102C500029F0872D8F710E941C1B5BC00E94121BE4 -:102C600058C0112351F0172D1F71812F0E94311B65 -:102C700063E0812F0E94451C4CC081E00E944E1CE5 -:102C8000023008F446C082E00E944E1C42C011236C -:102C900031F0002381F28C2D0E9449133AC00023A9 -:102CA00089F28C2D0E94111434C0472D4F706C2D69 -:102CB000C7010E9444050E94361A2BC0111129C079 -:102CC000472D4F7050E042305105B9F04CF441159A -:102CD000510581F041305105E1F40E94E32219C011 -:102CE0004330510569F04430510599F48C2D0E9410 -:102CF00035230FC00E94CC220CC00E94FF2209C0C5 -:102D00000E94122306C0472D4F706C2DC7010E94F0 -:102D1000ED06DD20F9F00E94411C80FD1BC0F7018B -:102D200012820E943B1C0E94311BC7010E94B916EF -:102D30000E943B1C0F90DF91CF911F910F91FF904C -:102D4000EF90DF90CF90BF90AF909F908F907F904B -:102D50000C94521B0F90DF91CF911F910F91FF9018 -:102D6000EF90DF90CF90BF90AF909F908F907F902B -:102D700008950F931F93CF93DF93EC01888199817E -:102D80002B813C81232BB9F09F3F11F48F3F99F0A9 -:102D9000CE010E94D905882371F0688179818A81EA -:102DA0000E94371C8C010E94EC1B0E94B31AB801D0 -:102DB000CE010E946E14DF91CF911F910F91089563 -:102DC0000E94C51C0E94D51C0E949A1C0E94EF1CE8 -:102DD0000E94A2200E94F11F80E090E00E94341225 -:102DE00080E090E00C944A120E94B51C0C94E0160E -:102DF0000E942C1C292F22952F7030E02C30310599 -:102E00004CF42A3031056CF422503109223031055E -:102E1000A8F407C02C30310569F02F30310551F08E -:102E20000DC0803F69F018F4803E40F409C0843F33 -:102E300029F406C093FB882780F9089580E008955F -:102E400081E00895CF93DF9300D000D01F92CDB7DB -:102E5000DEB70F900F900F900F900F90DF91CF91F2 -:102E60000895CF93DF9300D000D000D0CDB7DEB768 -:102E700026960FB6F894DEBF0FBECDBFDF91CF917F -:102E800008951F93CF93DF93C091770116E080914F -:102E90007801C81799F0D0E01C9FF0011D9FF00D3C -:102EA0001124E758FE4F40815181628173818481F2 -:102EB00095810E9431172196C770E9CFDF91CF919C -:102EC0001F9108954091A9015091AA016091AB0111 -:102ED0007091AC018091AD019091AE010C943117CD -:102EE0008091AE0182958F7009F054C08091AB0142 -:102EF000882309F44FC080917701A09178016091F7 -:102F0000A9017091AA014091AC015091AD01B6E0C8 -:102F10008A1709F43FC090E041155105C1F17F3F88 -:102F200011F46F3FA1F1B89FF001B99FF00D11248A -:102F3000E758FE4F218172132AC02081621327C0F7 -:102F40002281211124C0238134812417350710F4F4 -:102F500021503109241B350B283C3105C0F4209148 -:102F6000AE012F7020612093AE0126E0289FF00172 -:102F7000299FF00D1124E258FE4F80818F708061EF -:102F8000808389EA91E00E94B9160C94411701965A -:102F90008770BECF0895CF92DF92EF92FF920F938A -:102FA0001F93CF93DF93CDB7DEB762970FB6F89438 -:102FB000DEBF0FBECDBF8C0185E0F801DE011D969E -:102FC00001900D928A95E1F7D8014C9111965C9190 -:102FD000119712966C9112971396CD90DC901497DE -:102FE0003091A9017091AA018091AC019091AD013D -:102FF000009709F46BC17F3F19F43F3F09F466C1A4 -:10300000E090AB01EE2009F4C0C02091AE01C816DB -:10301000D90628F0F601E81BF90BCF0104C0809512 -:1030200090958C0D9D1DFF24F394883C910578F0BC -:10303000F12C207F09F0C6C07C2DD98AC88A8989E5 -:103040000E94221789EA91E00E94B916B1C0822F2E -:10305000807F09F046C0751314C0341312C061118B -:1030600010C02F7020612093AE010E94621789EA80 -:1030700091E00E94B9168091AE01D80115968C930B -:103080002EC0CD2819F15F3F11F44F3FF9F0F62E15 -:1030900061111CC0809177012091780136E0821780 -:1030A00009F45AC090E0389FF001399FF00D1124C7 -:1030B000E758FE4F7181571306C07081471303C054 -:1030C0007281711103C001968770E9CFF62E6623D5 -:1030D00009F418C18091AE0181608093AE01F12C9A -:1030E00011C1751308C0341306C0611104C080916A -:1030F000AE01D801C3C04D875E878D859E856A8BE2 -:103100000E94F8166A898823E1F16623D1F12091A3 -:10311000AE01822F82958F7090E0029774F08091BB -:10312000A9019091AA0198878F831986DB86CA86A8 -:103130002C87CE0107960E94B91686E0F801A9EA0D -:10314000B1E001900D928A95E1F70E9470170E94FC -:103150006217FF24F394D6C04D875E878D859E85C8 -:103160000E942C1C292F22952F7030E0223031052F -:103170000CF0BCC09F7009F0B6C0805E883008F4C7 -:10318000C1C0C8010E94B916E4CFC816D90608F418 -:1031900053C0F601E81BF90BCF01883C910508F4F8 -:1031A00050C0F12C7C2DD98AC88A89890E942217A7 -:1031B000E9EAF1E086E0DF011D928A95E9F70E94D5 -:1031C0006217A0C0751314C0341312C0611110C06F -:1031D0008091AE01F8018583C8010E94B91686E08E -:1031E000E9EAF1E0DF011D928A95E9F7FE2C8AC039 -:1031F0004D875E878D859E856A8B0E94F8166A8949 -:10320000882309F4BECF662309F4BBCF2091AE0119 -:10321000822F82958F7090E002970CF48ECF809170 -:10322000A9019091AA019A8389831B82DD82CC82B5 -:103230002E83CE0101967FCF809590958C0D9D1D9C -:10324000ACCFF62E662309F49CCF75132EC0341331 -:103250002CC02091AE0120FD1FC0822F82958F705F -:10326000D9F0D80115962C9315978F3049F08F5FC0 -:10327000982F9295907F822F8F70892B15968C9323 -:10328000C8010E94B91686E0F801A9EAB1E00190F0 -:103290000D928A95E1F793CF86E0F801A9EAB1E0B3 -:1032A00001900D928A95E1F72DC04D875E878D853F -:1032B0009E850E94F816811140CF8091AE018160F9 -:1032C0008093AE01C8010E94B9161CC0662309F4A0 -:1032D00058CF4D875E878D859E850E94F81688237E -:1032E00009F44FCF2ACF811148CF0CC024303105CB -:1032F0000CF047CF9F7009F440CFF8019581907F83 -:1033000009F03BCF8F2D62960FB6F894DEBF0FBE4B -:10331000CDBFDF91CF911F910F91FF90EF90DF9084 -:10332000CF9008951F93CF93DF93CDB7DEB72C973F -:103330000FB6F894DEBF0FBECDBF4F8358876987A5 -:103340007A878B879C87CE0107960E94CB178823AC -:1033500069F08F8198852A853B85232BF1F19F3F6A -:1033600009F063C08F3F09F060C037C086E0FE01FE -:103370003796DE01119601900D928A95E1F76F81E3 -:103380007885EA85FB85309741F17F3F11F46F3FE7 -:1033900021F12091780130E0C901019687709927C9 -:1033A0004091770150E08417950709F447C069837D -:1033B0007A83FD83EC8396E0929FD001939FB00DBA -:1033C0001124A758BE4FFE01319601900D929A9597 -:1033D000E1F7809378010E94411716E08091770110 -:1033E000909178018917C1F1189FC0011124875865 -:1033F0009E4F0E94CB17882379F1E09177011E9FA1 -:10340000F0011124E758FE4F4081518162817381A0 -:10341000848195810E9431178091770190E0019617 -:103420008770992780937701D9CF4F815885698517 -:103430007A858B859C850E943117CFCF0E94F41628 -:103440001092780110927701E9EAF1E086E0DF015D -:103450001D928A95E9F7C1CF2C960FB6F894DEBF7E -:103460000FBECDBFDF91CF911F910895EF92FF92D4 -:103470000F931F93CF93DF938C01009709F46CC0D7 -:10348000F12CEE24E394E8012196F801849184372D -:1034900040F4843008F051C0813081F0823019F15D -:1034A0005BC0853709F444C0A8F19CE7980F9037BA -:1034B00008F052C08F770E94111441C00E5F1F4F59 -:1034C000FE01C49180E28C0F883048F4C7708E2DC5 -:1034D00001C0880FCA95EAF70E94C81C14C08C2F3F -:1034E0000E9449132DC00E5F1F4FFE01C49180E260 -:1034F0008C0F883058F4C7708E2D01C0880FCA9584 -:10350000EAF70E94CE1C0E94EF1C1AC08C2F0E946A -:10351000111416C00E5F1F4FFE01C491CC2381F021 -:103520008FE99FE00197F1F700C00000C150F6CF8E -:103530000E5F1F4FFE01F49003C00E9449138E01DD -:103540008F2D882309F49FCFEFE9FFE03197F1F742 -:1035500000C000008150F5CFDF91CF911F910F91F6 -:10356000FF90EF90089508956093B3017093B401B4 -:103570008093B5019093B6010C94E0160F931F93BE -:103580000091B3011091B4012091B5013091B601C1 -:10359000DC01CB01802B912BA22BB32B8093B301A9 -:1035A0009093B401A093B501B093B6011F910F9110 -:1035B0000C94E0160F931F930091B3011091B40186 -:1035C0002091B5013091B601DC01CB01802391231C -:1035D000A223B3238093B3019093B401A093B501C8 -:1035E000B093B6011F910F910C94E0160F931F93A7 -:1035F0000091B3011091B4012091B5013091B60151 -:10360000DC01CB0180279127A227B3278093B30148 -:103610009093B401A093B501B093B6011F910F919F -:103620000C94E0161092AF011092B0011092B1010B -:103630001092B2010C94E01641E050E060E070E0BE -:1036400004C0440F551F661F771F8A95D2F7409319 -:10365000AF015093B0016093B1017093B2010C942B -:10366000E01641E050E060E070E004C0440F551FF8 -:10367000661F771F8A95D2F78091AF019091B001B4 -:10368000A091B101B091B201482B592B6A2B7B2B31 -:103690004093AF015093B0016093B1017093B201B8 -:1036A0000C94E01641E050E060E070E004C0440F8C -:1036B000551F661F771F8A95D2F7409550956095E4 -:1036C00070958091AF019091B001A091B101B0913E -:1036D000B201482359236A237B234093AF015093BF -:1036E000B0016093B1017093B2010C94E01641E017 -:1036F00050E060E070E004C0440F551F661F771F64 -:103700008A95D2F78091AF019091B001A091B1015B -:10371000B091B201482759276A277B274093AF0110 -:103720005093B0016093B1017093B2010C94E01614 -:103730000F931F930091AF011091B0012091B1013F -:103740003091B201DC01CB01802B912BA22BB32B4A -:103750008093AF019093B001A093B101B093B201F7 -:103760001F910F910C94E0160F931F930091AF01DE -:103770001091B0012091B1013091B201DC01CB0177 -:1037800080239123A223B3238093AF019093B001B0 -:10379000A093B101B093B2011F910F910C94E01668 -:1037A0000F931F930091AF011091B0012091B101CF -:1037B0003091B201DC01CB0180279127A227B327EA -:1037C0008093AF019093B001A093B101B093B20187 -:1037D0001F910F910C94E0160895CF92DF92EF9213 -:1037E000FF920F931F93CF93DF938C01C090B3018F -:1037F000D090B401E090B501F090B6018091AF0196 -:103800009091B001A091B101B091B201C82AD92A1A -:10381000EA2AFB2ACFE1D0E0D701C6010C2E04C072 -:10382000B695A795979587950A94D2F780FF06C01D -:10383000B8018C2F0E946E09019721F4219760F73F -:1038400080E001C08C2FDF91CF911F910F91FF90ED -:10385000EF90DF90CF900895CF93DF93EC010E941B -:10386000ED1BBE010E946E09DF91CF910895CB013F -:103870000E942C1C08958091B701859585958595AA -:1038800008958091B7018770089598E0899F90010D -:103890001124262B2093B7010C94311B2091B701E2 -:1038A000809582238093B701982F977069F430E058 -:1038B000482F552747FD50952417350729F0859542 -:1038C000859585950C94521B08959091B70197703A -:1038D00081E009F480E0089520910C0130910D0100 -:1038E000F90132969FEF40E05191581789F09F3FC0 -:1038F00019F4511101C0942F4F5F4630A9F79F3F33 -:1039000039F0F901E90FF11D97FDFA9582830895C9 -:10391000089520910C0130910D01F9013296285F34 -:103920003F4F9081981301C010823196E217F30740 -:10393000C1F7089581E090E0E0910C01F0910D0154 -:10394000E80FF91F1082019688309105A9F70895B4 -:103950009091C301892B8093C30108958095909124 -:10396000C30189238093C30108951092C301089570 -:103970009091C201892B8093C20108958095909106 -:10398000C20189238093C20108951092C201089553 -:103990009091C101892B8093C101089580959091E8 -:1039A000C10189238093C10108951092C101089536 -:1039B0008093B80108951092B801089580910C0188 -:1039C00090910D01FC0131969C01285F3F4F80E0F2 -:1039D000919191118F5FE217F307D1F70895E0916C -:1039E0000C01F0910D018091C3018083E0910C01E5 -:1039F000F0910D0190818091C201892B8083E0912B -:103A00000C01F0910D0190818091C101892B80837F -:103A10008091B801882361F0E0910C01F0910D01D3 -:103A20009081892B80830E94DE1C81111092B80145 -:103A300080910C0190910D010C941E1220E00097D2 -:103A400039F0AC0141505109842395232F5FF7CF02 -:103A5000822F08958091D901843039F11092C501E7 -:103A600020E488E190E00FB6F894A8958093600078 -:103A70000FBE2093600080E00E94ED0480E00E9471 -:103A8000480A83B7817F846083BF83B7816083BF27 -:103A90007894889583B78E7F83BF88E10FB6F894BA -:103AA00080936000109260000FBE089508950895FD -:103AB00080E00E94ED040E94561D0E94A30A0E940D -:103AC000571D0E94280B91E0811101C090E0892FC1 -:103AD00008950E94F41680E00E94ED040E94BB222B -:103AE0000E9412120C94480A1F920F920FB60F9266 -:103AF00011248F939F93AF93BF938091C501811140 -:103B000013C08091C6019091C701A091C801B091E6 -:103B1000C9014196A11DB11D8093C6019093C701B3 -:103B2000A093C801B093C901BF91AF919F918F91AC -:103B30000F900FBE0F901F90189582E084BD93E008 -:103B400095BD9AEF97BD80936E0008952FB7F894B6 -:103B50008091C6019091C701A091C801B091C9019F -:103B60002FBF0895CF92DF92EF92FF920F931F9392 -:103B70002FB7F8944091C6015091C7016091C801D8 -:103B80007091C9012FBF6A017B01EE24FF248C01D3 -:103B900020E030E0C016D106E206F30610F44150F2 -:103BA00051099A01281B390BC9011F910F91FF90F0 -:103BB000EF90DF90CF9008951F920F920FB60F9263 -:103BC00011248F939F93AF93BF938091C6019091DF -:103BD000C701A091C801B091C9010196A11DB11DF5 -:103BE0008093C6019093C701A093C801B093C90107 -:103BF000BF91AF919F918F910F900FBE0F901F902B -:103C000018950E940F0FF8942FEF87EA91E6215044 -:103C100080409040E1F700C0000087E090EBDC01BD -:103C20008093E4019093E501A093E601B093E7014E -:103C30009CE088E10FB6F894A895809360000FBED1 -:103C400090936000FFCF0E94581E811102C00E9415 -:103C5000391E0E94631E8093C4010E94701E8093CF -:103C6000E2010E94671E682F70E080E090E00C94F3 -:103C7000B41A6DEE7EEF80E090E00E94C62460E012 -:103C800082E090E00E94B42460E083E090E00E9433 -:103C9000B42460E084E090E00E94B42460E085E019 -:103CA00090E00E94B42460E086E090E00C94B4249C -:103CB00080E090E00E94AE2421E08D3E9E4F09F00E -:103CC00020E0822F089582E090E00C94A62483E007 -:103CD00090E00C94A624682F83E090E00C94B42428 -:103CE00084E090E00C94A624682F84E090E00C948B -:103CF000B42486E090E00C94A624682F86E090E03F -:103D00000C94B4248091CC0180FF0BC06091110110 -:103D100085E0689FB0011124759567957595679545 -:103D20002BC081FF09C06091110185E0689FB0013F -:103D300011247595679520C082FF07C0609111011D -:103D400085E0689FB001112417C09091CD0199239F -:103D5000D1F060911001961788F72091110185E04C -:103D6000289F90011124929FA001939F500D112430 -:103D700070E0CA010E9478246038710540F4611532 -:103D8000710539F002C065E070E0862F08958FE775 -:103D9000089581E008958091CC0180FF08C0609172 -:103DA0000F0170E0759567957595679521C081FF46 -:103DB00006C060910F0170E07595679519C082FF8C -:103DC00004C060910F0170E010C09091CD01992363 -:103DD000C1F060910E019617A0F780910F01899FA5 -:103DE000C001112470E00E9478246038710528F425 -:103DF0006115710521F0862F08958FE7089581E000 -:103E0000089561E070E0F4CF803F21F40E94821EAB -:103E1000819504C0813F29F40E94821E8093D001C5 -:103E20000895823F21F40E94821E819504C0833F41 -:103E300029F40E94821E8093CF010895893F19F4CE -:103E40000E94CB1E05C08A3F31F40E94CB1E819593 -:103E50008093D10108958B3F21F40E94CB1E819560 -:103E600004C08C3F29F40E94CB1E8093D201089598 -:103E7000843F21F48091CE01816017C0853F21F4F9 -:103E80008091CE01826011C0863F21F48091CE01E5 -:103E900084600BC0873F21F48091CE01886005C00B -:103EA000883F31F48091CE0180618093CE010895E6 -:103EB0008D3F21F48091CC0181600BC08E3F21F4B5 -:103EC0008091CC01826005C08F3F29F48091CC01A4 -:103ED00084608093CC010895803F39F48091D001B3 -:103EE00087FF6CC01092D00169C0813F29F4809196 -:103EF000D0011816BCF362C09091CF01823F29F423 -:103F000097FF5CC01092CF0159C0833F19F4191676 -:103F1000CCF354C0893F41F48091D10118160CF0C4 -:103F20004DC01092D1014AC08A3F29F48091D1013D -:103F300087FF44C0F6CF8B3F39F48091D20187FFD1 -:103F40003DC01092D2013AC08C3F29F48091D20139 -:103F50001816BCF333C0843F21F48091CE018E7FCC -:103F600017C0853F21F48091CE018D7F11C0863F1F -:103F700021F48091CE018B7F0BC0873F21F480918B -:103F8000CE01877F05C0883F31F48091CE018F7EBE -:103F90008093CE0113C08D3F21F48091CC018E7FA0 -:103FA0000BC08E3F21F48091CC018D7F05C08F3FE7 -:103FB00029F48091CC018B7F8093CC018091CF013B -:103FC00081110EC08091D00181110AC08091D10170 -:103FD000811106C08091D201811102C01092CD01E1 -:103FE00008958EEC91E00E9429120E94A61D9093E4 -:103FF000CB018093CA0108951F93CF93DF938091E3 -:10400000CA019091CB010E94B21DAC019091CD01EB -:10401000992321F02091120130E006C02091130174 -:104020008AE0289F900111244217530708F486C0A4 -:104030008091CF01C091D001D091D1011091D201D6 -:10404000811107C0C11176C0D11174C0111172C0A5 -:1040500075C09F3F19F09F5F9093CD01181624F40F -:104060000E94821E8093CF018091CF0187FF05C0FF -:104070000E94821E81958093CF011C1624F40E9419 -:10408000821E8093D0018091D00187FF05C00E94DD -:10409000821E81958093D0016091CF01662339F112 -:1040A000C091D001CC2319F1772767FD7095872F38 -:1040B000972F0E94892323E333E343E35FE30E94C6 -:1040C000ED230E9456236093CF016C2F772767FD65 -:1040D0007095872F972F0E94892323E333E343E3CF -:1040E0005FE30E94ED230E9456236093D0011D16CA -:1040F00024F40E94CB1E8093D1018091D10187FFCF -:1041000005C00E94CB1E81958093D101111624F425 -:104110000E94CB1E8093D2018091D20187FF05C0FF -:104120000E94CB1E81958093D201DF91CF911F9188 -:104130000C94F11F9F3F09F08ECF96CFDF91CF9166 -:104140001F910895EEECF1E085E0DF011D928A9564 -:10415000E9F71092CD011092CC010895833081F1DE -:1041600028F4813059F08230D1F00895853009F477 -:1041700049C0B8F1863009F456C008958091130102 -:10418000262F30E0280F311D2F3F310524F4680F12 -:104190006093130108958FEF809313010895809128 -:1041A0001201262F30E0280F311D2F3F310524F456 -:1041B000680F6093120108958FEF809312010895A4 -:1041C00080911101262F30E0280F311D2F3F31053E -:1041D00024F4680F6093110108958FEF809311010B -:1041E000089580911001262F30E0280F311D2F3FB8 -:1041F000310524F4680F6093100108958FEF8093C8 -:104200001001089580910F01262F30E0280F311DF5 -:104210002F3F310524F4680F60930F0108958FEF4D -:1042200080930F01089580910E01262F30E0280F12 -:10423000311D2F3F310524F4680F60930E0108955E -:104240008FEF80930E010895833011F128F48130AF -:1042500049F0823091F00895853081F120F1863067 -:10426000C1F1089580911301681720F4861B809393 -:104270001301089510921301089580911201681797 -:1042800020F4861B80931201089510921201089564 -:1042900080911101681720F4861B80931101089505 -:1042A00010921101089580911001681720F4861B67 -:1042B00080931001089510921001089580910F01CC -:1042C000681720F4861B80930F01089510920F0148 -:1042D000089580910E01681720F4861B80930E01CB -:1042E000089510920E0108950F931F938732D8F509 -:1042F0008E3108F085C08E3009F46FC098F4873095 -:1043000009F459C08B3009F48FC0863009F093C08E -:104310008091C401817F8E7F8093C40181E080936E -:10432000D4018AC0863109F47FC068F4803109F075 -:1043300082C08091C40183FB222720F991E092275B -:1043400090FB83F953C0893109F46EC08B3109F0B9 -:1043500072C08091C40181FB222720F991E092274D -:1043600090FB81F943C0883309F45EC050F4893270 -:1043700009F45CC0853309F459C0873209F456C08A -:104380005AC0833409F452C028F48A3308F453C065 -:10439000895337C0883409F04EC00E94F4160FEFDD -:1043A00013ED20E3015010402040E1F700C0000071 -:1043B0000E94011E39C09091C401892F809581709F -:1043C00080FB90F929F0966098609093C40134C006 -:1043D000997F977F9093C40127C08091C40182FB8D -:1043E000222720F991E0922790FB82F98093C40163 -:1043F0009923D1F08091C40181608093C40114C0DD -:104400008D5141E050E060E070E08A019B0104C002 -:10441000000F111F221F331F8A95D2F7C901B8015F -:104420000E94B41A0E94F41681E006C061E070E0B8 -:1044300080E090E0F5CF80E01F910F91089580E03B -:10444000089580E00895CF93C82F8091D4018130E2 -:1044500069F018F08230C9F184C0E0910C01F0914C -:104460000D018081823209F07EC007C0E0910C010D -:10447000F0910D018081823261F48C2F0E941F2205 -:10448000811104C08C2F0E9474211DC081E090E036 -:104490001AC08C2F0E942122811114C0C43179F0DE -:1044A00048F4CB3079F0C03109F061C082E08093EC -:1044B000D40108C0C93219F0C83321F058C0109295 -:1044C000D40155C081E0817054C0C93291F120F50A -:1044D000C43179F1B0F4C73009F047C08EE1809360 -:1044E000130182E3809312018AE08093110184E139 -:1044F0008093100188E080930F0188E280930E0181 -:1045000034C0CE51C63088F5EC2FF0E0ED5CFE4FA4 -:1045100080818093D30129C0CE34E9F020F4CB34DC -:1045200021F56AE013C0C13579F0C235F1F461E0DC -:104530000DC08091D301882319F01092D30115C0CA -:1045400081E08093D40115C061E006C08091D30161 -:104550000E94AE200AC06AE08091D3010E9424210B -:1045600004C01092D40180E004C081E002C080E069 -:10457000AACFCF9108950E94581E811102C00E94B7 -:10458000391E0E94791E8093E30180FF02C0869548 -:1045900001C080E00C94ED048091E301982F969582 -:1045A000292F30E0233031054CF49F5F990F817043 -:1045B000892B81608093E3010E947D1E8091E3013D -:1045C00086950C94ED048091E301982F969591F0D7 -:1045D0009158990F8170892B8093E3018E7F91E030 -:1045E00009F490E08091E30190FB80F98093E3016E -:1045F0000E947D1E8091E30186950C94ED048091CC -:10460000E301982F909590FB80F98093E3010E943D -:104610007D1E8091E30180FF02C0869501C080E08D -:104620000C94ED049091E301892F86958F5F8F772D -:104630009170843028F4880F892B8093E30102C0A5 -:104640009093E3018091E3018E7F91E009F490E083 -:104650008091E30190FB80F98093E3010E947D1E2D -:104660008091E30186950C94ED042091E301922F53 -:1046700096958927982F990F822F8170892B809387 -:10468000E3018E7F91E009F490E08091E30190FBDB -:1046900080F98093E3010E947D1E8091E30186955D -:1046A0000C94ED048091E3018695089504D06894FC -:1046B000B1118DC0089570D088F09F5790F0B92F38 -:1046C0009927B751A0F0D1F0660F771F881F991F67 -:1046D0001AF0BA95C9F712C0B13081F077D0B1E0C5 -:1046E000089574C0672F782F8827B85F39F0B93FD5 -:1046F000CCF3869577956795B395D9F73EF4909569 -:104700008095709561957F4F8F4F9F4F0895E894E6 -:1047100009C097FB3EF490958095709561957F4F09 -:104720008F4F9F4F9923A9F0F92F96E9BB279395B7 -:10473000F695879577956795B795F111F8CFFAF4C7 -:10474000BB0F11F460FF1BC06F5F7F4F8F4F9F4FF8 -:1047500016C0882311F096E911C0772321F09EE856 -:10476000872F762F05C0662371F096E8862F70E0BC -:1047700060E02AF09A95660F771F881FDAF7880F96 -:104780009695879597F9089557FD9058440F551FB2 -:1047900059F05F3F71F04795880F97FB991F61F0C3 -:1047A0009F3F79F087950895121613061406551F3A -:1047B000F2CF4695F1DF08C0161617061806991FA6 -:1047C000F1CF86957105610508940895E894BB279B -:1047D00066277727CB0197F908950BD078C069D069 -:1047E00028F06ED018F0952309F05AC05FC011244C -:1047F000EECFCADFA0F3959FD1F3950F50E0551F80 -:10480000629FF001729FBB27F00DB11D639FAA2725 -:10481000F00DB11DAA1F649F6627B00DA11D661F74 -:10482000829F2227B00DA11D621F739FB00DA11D95 -:10483000621F839FA00D611D221F749F3327A00D4F -:10484000611D231F849F600D211D822F762F6A2FEB -:1048500011249F5750408AF0E1F088234AF0EE0F70 -:10486000FF1FBB1F661F771F881F91505040A9F77D -:104870009E3F510570F014C0AACF5F3FECF3983E05 -:10488000DCF3869577956795B795F795E7959F5FE4 -:10489000C1F7FE2B880F911D9695879597F908957E -:1048A00097F99F6780E870E060E008959FEF80ECE3 -:1048B000089500240A941616170618060906089586 -:1048C00000240A9412161306140605060895092EEC -:1048D0000394000C11F4882352F0BB0F40F4BF2B5B -:1048E00011F460FF04C06F5F7F4F8F4F9F4F08959B -:1048F00097FB072E16F4009407D077FD09D00E948D -:10490000922407FC05D03EF4909581959F4F089521 -:10491000709561957F4F0895EE0FFF1F0590F491FC -:10492000E02D0994AA1BBB1B51E107C0AA1FBB1FA6 -:10493000A617B70710F0A61BB70B881F991F5A952B -:10494000A9F780959095BC01CD010895F999FECF06 -:1049500092BD81BDF89A992780B50895A8E1B0E08D -:1049600042E050E00C94CE24262FF999FECF92BD60 -:1049700081BDF89A019700B4021639F01FBA20BD24 -:104980000FB6F894FA9AF99A0FBE08950196272F58 -:104990000E94B5240C94B424DC01CB01FC01F999EC -:1049A000FECF06C0F2BDE1BDF89A319600B40D927B -:0C49B00041505040B8F70895F894FFCF34 -:1049BC00FF3E0BCC0BA90B750B410B01B901280861 -:1049CC00140A321E1F0F03764F5F6F7F49694379BC -:1049DC00095953633F4D36E608990863080F0828B8 -:0E49EC0008410801020304050607080900003F -:00000001FF diff --git a/keyboard/planck/keymaps/yang/compiled.hex b/keyboard/planck/keymaps/yang/compiled.hex deleted file mode 100644 index da6b0017a1..0000000000 --- a/keyboard/planck/keymaps/yang/compiled.hex +++ /dev/null @@ -1,1318 +0,0 @@ -:100000000C949F030C94E3030C94E3030C94E3031C -:100010000C94E3030C94E3030C94E3030C94E303C8 -:100020000C94E3030C94E3030C94A4130C94761443 -:100030000C948E210C94E3030C94E3030C94E303DF -:100040000C94E3030C9447040C94E3030C94E30333 -:100050000C94E3030C94F6210C94E3030C94E30357 -:100060000C94E3030C94E3030C94E3030C94E30378 -:100070000C94E3030C94E3030C94E3030C94E30368 -:100080000C94060F0C94E3030C94E3030C94E30329 -:100090000C94E3030C94E3030C94E3030C94E30348 -:1000A0000C94E3030C94E3030C94E303B404D00432 -:1000B000B804BC04C004C404C804CC04E31405158B -:1000C000F3150515F3154A156D15F315C215D5155C -:1000D000BF18BF18EE18EE182D194D19A31AA31A40 -:1000E0005819A31A081A081A6F1A781AA31A9D1A0F -:1000F000151A151A151A151A151A151A151A151A88 -:10010000151A151A151A151A151A151A151A151A77 -:10011000251A331A3A1A411A4B1A0000000000003F -:100120000000000000010204060A0F17202C3A4AC2 -:100130005D71879DB3C7DAE9F5FCFFFCF5E9DAC725 -:10014000B39D87715D4A3A2C20170F0A06040201FD -:10015000000000000000000000002CA500F001F0ED -:1001600002F003F004F005F006F007F02B00140095 -:100170001A000800150017001C0018000C001200DF -:1001800013002A00290004001600070009000A00D5 -:100190000B000D000E000F0033003400E1001D00C5 -:1001A0001B00060019000500110010003600370082 -:1001B000380028000030E000E200E3000352002095 -:1001C000002004525000510052004F002B00140038 -:1001D0001A00090013000A000D000F0018001C008F -:1001E00033002A002900040015001600170007003C -:1001F0000B00110008000C0012003400E1001D008B -:100200001B000600190005000E0010003600370024 -:10021000380028000030E000E200E3000352002034 -:10022000002004525000510052004F002B003400B7 -:100230003600370013001C0009000A0006001500F4 -:100240000F002A00290004001200080018000C000A -:1002500007000B001700110016003800E100330002 -:1002600014000D000E001B00050010001A001900FC -:100270001D0028000030E000E200E30003520020EF -:10028000002004525000510052004F0035021E025F -:100290001F0220022102220223022402250226023A -:1002A00027022A0001003A003B003C003D003E00CE -:1002B0003F002D022E022F023002310201004000C9 -:1002C00041004200430044004500005301530253E3 -:1002D00000500100010001000100010001000100C7 -:1002E00001000100AB00AA00A900AE0035001E000D -:1002F0001F002000210022002300240025002600EA -:1003000027002A0001003A003B003C003D003E006F -:100310003F002D002E002F00300031000100400072 -:100320004100420043004400450000530153025382 -:100330000050010001000100010001000100010066 -:1003400001000100AB00AA00A900AE0001004B00B3 -:1003500052004E00010001000100010001000100F7 -:1003600001004C000100500051004F0001004A0004 -:100370005000510052004F004D00010001000120CB -:100380000220032004200520062007200820010069 -:100390000100010001000100010001000100010055 -:1003A0000100010001000100010001006432146439 -:1003B0003214783C1E1E140A0500000000010101E1 -:1003C0000202030405050607090A0B0C0E0F1112A1 -:1003D000141517191B1D1F212325282A2C2F3134F2 -:1003E00036393B3E414346494C4F5255585A5D6160 -:1003F00064676A6D707376797C7F8386898C8F924F -:1004000095989B9EA2A5A7AAADB0B3B6B9BCBEC134 -:10041000C4C6C9CBCED0D3D5D7DADCDEE0E2E4E681 -:10042000E8EAEBEDEEF0F1F3F4F5F6F8F9FAFAFBA1 -:10043000FCFDFDFEFEFEFFFFFFFFFFFFFFFEFEFED9 -:10044000FDFDFCFBFAFAF9F8F6F5F4F3F1F0EEED48 -:10045000EBEAE8E6E4E2E0DEDCDAD7D5D3D0CECBD7 -:10046000C9C6C4C1BEBCB9B6B3B0ADAAA7A5A29E49 -:100470009B9895928F8C898683807C797673706D3A -:100480006A6764615D5A5855524F4C494643413E34 -:100490003B393634312F2C2A282523211F1D1B19C7 -:1004A00017151412110F0E0C0B0A09070605050487 -:1004B0000302020101010000000001010202020228 -:1004C00002020303030303030303030303030303FE -:1004D00004040404040404040404040405050505D8 -:1004E00005050505050506060606060606060707B0 -:1004F000070707070708080808080809090909097C -:10050000090A0A0A0A0A0B0B0B0B0B0C0C0C0C0C3D -:100510000D0D0D0D0E0E0E0E0F0F0F1010101011F1 -:100520001111121212131313141414151516161692 -:10053000171718181919191A1A1B1B1C1C1D1D1E18 -:100540001E1F20202121222323242425262627287C -:1005500028292A2B2B2C2D2E2F30303132333435B5 -:10056000363738393A3B3C3D3E3F404142444546B0 -:1005700047494A4B4C4E4F5152535556585A5B5D62 -:100580005E6062636567696B6D6E70727476797BAD -:100590007D7F818486888B8D909295979A9D9FA26E -:1005A000A5A8ABAEB1B4B7BABEC1C4C8CBCFD3D681 -:1005B000DADEE2E6EAEEF2F8FF28035400680065AE -:1005C00000200050006C0061006E0063006B002092 -:1005D000004B006500790062006F006100720064EA -:1005E0000000002C034F007200740068006F006C64 -:1005F0000069006E0065006100720020004B00651C -:1006000000790062006F00610072006400730000F6 -:10061000000403090409025400030100A0FA0904BC -:1006200000000103010100092111010001223F0026 -:100630000705810308000A09040100010301020003 -:10064000092111010001224D000705820308000A5B -:100650000904020001030000000921110100012228 -:1006600036000705830308000A120110010000008C -:1006700008EDFE606001000102000105010980A192 -:1006800001850216010026B7001A01002AB700757D -:100690001095018100C0050C0901A1018503160117 -:1006A00000269C021A01002A9C0275109501810007 -:1006B000C005010902A1010901A1000509190129CB -:1006C00005150025019505750181029501750381C8 -:1006D000010501093009311581257F9502750881D1 -:1006E0000609381581257F950175088106050C0AD4 -:1006F00038021581257F950175088106C0C0050166 -:100700000906A101050719E029E71500250195084B -:1007100075018102950175088101050819012905F6 -:100720009505750191029501750391010507190061 -:1007300029FF150025FF950675088100C0001124CA -:100740001FBECFEFDAE0DEBFCDBF04B603FE24C08C -:100750008091540290915502A0915602B091570297 -:100760008730904BA740B04BB9F4109254021092CE -:100770005502109256021092570214BE84B7877F1A -:1007800084BF88E10FB6F8948093600010926000F7 -:100790000FBEE0E0F8E3099511E0A0E0B1E0EAE087 -:1007A000F2E502C005900D92AE33B107D9F712E021 -:1007B000AEE3B1E001C01D92A435B107E1F70E949C -:1007C000EA100C9403290C9400000895089581E028 -:1007D000089508950C94E6030C94E7030C94E90340 -:1007E0000E94672723E030E0281B3109220F209365 -:1007F00042010895282F2F9880918000211108C070 -:10080000877F8093800010928D0010928C001BC017 -:10081000886080938000233019F48FEF9FEF0FC022 -:1008200083E090E0821B9109880F991F2FEF3FEF23 -:10083000A90102C0569547958A95E2F7CA0190939F -:100840008D0080938C000C94F0030E94F00384E0F0 -:100850008093410110923E010895279A2F988FEFBF -:100860009FEF90938700809386008AE080938000BA -:1008700089E1809381000E94D0260C9425040E9477 -:100880002D040E94780C6E9A769A0C94E5031F92C0 -:100890000F920FB60F9211242F933F938F939F9334 -:1008A000EF93FF93E0913F01F0914001CF0101965A -:1008B0009093400180933F010090410102C0F69562 -:1008C000E7950A94E2F7EF7380913E01823019F4C4 -:1008D000E03251F404C0813039F4EF3329F48091CF -:1008E0006F008D7F80936F00F0E0E65EFE4FE49135 -:1008F00021E031E0E29FC001E39F900D11240090C0 -:10090000420102C0969587950A94E2F790938D0074 -:1009100080938C00FF91EF919F918F913F912F9148 -:100920000F900FBE0F901F90189561110DC0FC0124 -:100930008281882331F085EE0E9463170E94272769 -:1009400003C085EE0E942B1880E090E00895462FAA -:1009500050E04830510538F5FA01EA5AFF4FDC0102 -:1009600012968C910C94B5288823E9F00C94B50C60 -:100970008823C9F00C94770B8823A9F00C948F0B73 -:10098000882389F00C94AE0B882369F00C94C90B72 -:10099000882349F00C94E30B882329F00C94FE0B78 -:1009A00081110C94AB0C089581E008950C94D4044B -:1009B00008950F931F93CF93DF938C01FC01C081A7 -:1009C000D181CE010E940720BE010E948505EC0165 -:1009D000B8010E94D604882309F48DC0F8018281F1 -:1009E000882309F44AC080914E0181111FC0C4318F -:1009F000F0E5DF0709F051C00E94D80481E0809340 -:100A00004E010E94C02190934D0180934C011092A1 -:100A1000450110924701109246011092490110922F -:100A2000480110924B0110924A0165C080914C011F -:100A300090914D010E94CC21883C910570F48091E9 -:100A40004501E82FF0E0EE0FFF1FEA5BFE4FD18378 -:100A5000C0838F5F809345014EC0C43880E5D807BE -:100A600021F0C538D04501F13AC0F80182818823D0 -:100A700041F01092430182E01EC0C438E0E5DE0779 -:100A800059F580914301811106C086E20E946317E7 -:100A900086E20E942B1882E01CC0C438F0E5DF0714 -:100AA00041F3C538D045D9F4F8018281882331F06B -:100AB0001092440180E20E947A181DC08091440186 -:100AC000811106C087E20E94631787E20E942B18FB -:100AD00080E20E9481180FC0C538D04529F381E01B -:100AE0008093430180934401C801DF91CF911F910E -:100AF0000F910C94EC0380E0DF91CF911F910F9147 -:100B000008950C943F040C94EA039CE0799FF00153 -:100B1000112490E3899FE00DF11D1124E60FF11DD2 -:100B2000EE0FFF1FE459FE4F859194910895880FB1 -:100B3000991FFC01E652F040859194910895880F29 -:100B4000991FFC01E65AFE4F8591949108950F93E9 -:100B50001F93CF93DF93EC01811521E39207A0F55A -:100B6000C11580E3D80708F0D7C0C83ED105D8F436 -:100B7000C03ED10508F003C2C83AD10578F4C53AA1 -:100B8000D10508F06AC0C130D10509F463C008F48A -:100B9000F3C1C430D10508F0F2C1EEC1CB3BD105A1 -:100BA00008F466C0E9C1C11590E2D90708F0AFC0EA -:100BB000C11521E0D20708F0E2C1C03FD10508F419 -:100BC000DBC18E0110651BC2C03880E5D80700F577 -:100BD000C03790E5D90708F0A3C0C11520E5D207BA -:100BE00009F4ACC050F4CE01905480319F4008F01D -:100BF000C3C1DF708E01106A02C2C13080E5D80720 -:100C000009F4AAC0C43190E5D90708F4ABC0B4C157 -:100C1000C33820E5D20709F48EC050F4C13890E5FE -:100C2000D90709F482C008F083C000E011EDE7C1E4 -:100C3000C03181E5D80708F49FC1C11597E5D907F0 -:100C400008F432C1CE0190578115904108F094C14B -:100C5000DF708FC101E010E0D2C1C53AD10509F4BF -:100C600090C1C63AD10509F08FC102E810E4C7C1AE -:100C7000C83AD10509F48BC1C93AD10509F48AC132 -:100C8000CA3AD10509F489C1CB3AD10509F488C122 -:100C9000CC3AD10509F487C1CD3AD10509F486C112 -:100CA000C03BD10509F485C1CE3AD10509F484C110 -:100CB000CF3AD10509F483C1C13BD10509F482C102 -:100CC000C23BD10509F481C1C33BD10509F480C100 -:100CD000C43BD10509F47FC1C53BD10509F47EC1F0 -:100CE000C63BD10509F47DC1C73BD10509F47CC1E0 -:100CF000C83BD10509F47BC1C93BD10509F47AC1D0 -:100D0000CA3BD10509F479C100E014E478C1CE01F1 -:100D10009F700E949F0574C1DD278E01106C6FC10A -:100D2000CF70DD278E01146D6AC100E010ED67C140 -:100D300000E012ED64C100E013ED61C10E940E1BE2 -:100D40008FEF94E32CE0815090402040E1F700C009 -:100D500000000E941B2253C18091D80181608093C2 -:100D6000D8014DC10E947222811102C00E945322FB -:100D70000E94852290E09093530280935202C230E9 -:100D800080E5D80721F480915202816086C0C4308A -:100D900090E5D90721F48091520282607EC0C6306E -:100DA00020E5D20721F480915202846076C0C830D9 -:100DB00080E5D80719F48091520227C0CA3090E527 -:100DC000D90721F480915202806167C0CC3020E5C0 -:100DD000D20721F48091520280625FC0CE3080E55C -:100DE000D80721F480915202806457C0C03190E549 -:100DF000D90721F48091520280684FC0C23120E5AA -:100E0000D20729F4809152028460886046C0C330C2 -:100E100080E5D80721F4809152028E7F3EC0C53014 -:100E200090E5D90721F4809152028D7F36C0C730FA -:100E300020E5D20721F4809152028B7F2EC0C93069 -:100E400080E5D80719F48091520226C0CB3090E596 -:100E5000D90721F4809152028F7E1FC0CD3020E54A -:100E6000D20721F4809152028F7D17C0CF3080E5E8 -:100E7000D80721F4809152028F7B0FC0C13190E5D9 -:100E8000D90721F4809152028F7707C0C331D04532 -:100E900031F4809152028B7F877F80935202809140 -:100EA00052020E948922ABC08D2F99278F709927FB -:100EB00081309105D9F49E012370332702C0880F39 -:100EC000991F2A95E2F79C688E0144E0000F111FDC -:100ED0004A95E1F700271370802B912B53E0CC0F3C -:100EE000DD1F5A95E1F7C076DD272FC082309105CE -:100EF00031F4DC2FCC278E01016F106A80C0833063 -:100F0000910569F4CE018370992701E010E002C0D9 -:100F1000000F111F8A95E2F7C8019C680FC084304A -:100F20009105B9F4CE018370992701E010E002C069 -:100F3000000F111F8A95E2F7C8019A6823E0CC0FD1 -:100F4000DD1F2A95E1F7C07ED7708C010C2B1D2B7D -:100F500056C08530910531F4DC2FCC278E01046F0B -:100F6000106A4DC0069709F04AC0CF71DD27DC2F0B -:100F7000CC278E01106243C000E010E040C08E011B -:100F80003EC001E810E43BC003E810E438C002EEC4 -:100F900014E435C009EE14E432C00AEE14E42FC0A4 -:100FA00005EB14E42CC006EB14E429C007EB14E4B1 -:100FB00026C00CEC14E423C00DEC14E420C003E8BC -:100FC00015E41DC00AE815E41AC002E915E417C0CB -:100FD00004E915E414C001E216E411C003E216E4CA -:100FE0000EC004E216E40BC005E216E408C006E2F7 -:100FF00016E405C007E216E402C00AE216E4C801DE -:10100000DF91CF911F910F9108959CE0799FF0019E -:10101000112490E3899FE00DF11D1124E60FF11DCD -:10102000EE0FFF1FE459FE4F85919491803E91058C -:10103000E0F4803C910558F58133910509F46FC0C7 -:1010400048F48932910509F463C08A32910509F4A4 -:101050006DC072C089339105E9F082389105D1F0F5 -:101060008533910509F44DC067C0833E910581F138 -:1010700038F4803E9105B9F0823E9105D9F05CC00C -:10108000863E910561F1873E9105A1F155C00E9410 -:10109000970508952091520220FD02C021FF4CC007 -:1010A00080EE90E049C08091520280FFF9CF89E341 -:1010B00090E042C08091520282FF0EC080915202A5 -:1010C00084FF03C080E090E037C083EE90E034C03E -:1010D0008091520282FFF2CF82EE90E02DC080918B -:1010E000520283FF0BC08091520284FDEBCF87EE4A -:1010F00090E022C08091520283FFF5CF86EE90E00F -:101100001BC08091520285FF07C089E290E014C0A5 -:101110008091520285FFF9CF85E390E00DC0809168 -:10112000520286FF07C08AE290E006C08091520218 -:1011300086FFF9CF81E390E00E94A70508950C9403 -:10114000EE03E82FF0E0EF5DFE4F8081E82FEF70B7 -:10115000F0E082958F7021E030E0A90102C0440FD9 -:10116000551F8A95E2F740A308950F931F93CF93DD -:10117000DF9385B7806885BF85B7806885BFC3E08A -:10118000D0E001E010E0FE01EF5DFE4F8081E82F2E -:10119000EF70F0E021A182958F70A80102C0440F8A -:1011A000551F8A95E2F7CA01822B81A38C2F0E94DA -:1011B000A108219740F78BE090E061E070E0FC012E -:1011C000EB5EFE4F2081E22FEF70F0E042A122950E -:1011D0002F70DB0102C0AA0FBB1F2A95E2F79D0109 -:1011E000242B22A3019758F7DF91CF911F910F91E4 -:1011F0000C948105EF92FF920F931F93CF93DF938F -:1012000007E511E0C3E0EE24E394F12CD5E08C2F48 -:101210000E94A1088BE090E040E050E0FC01EB5E12 -:10122000FE4F6081E62FEF70F0E020A130E0629584 -:101230006F7002C0359527956A95E2F720FD09C0C9 -:101240009701082E02C0220F331F0A94E2F7422BA7 -:10125000532B019718F7F801929182918F0184170F -:10126000950721F051834083D09300018C2F0E9479 -:10127000A108C15060F68091000187FD2CC081500B -:10128000809300018F3F39F08FE99FE00197F1F7DC -:1012900000C0000020C080915501909156019093AC -:1012A0005E0180935D018091530190915401909370 -:1012B0005C0180935B018091510190915201909368 -:1012C0005A018093590180914F0190915001909360 -:1012D0005801809357010E94830581E0DF91CF91EF -:1012E0001F910F91FF90EF900895E82FF0E0EE0F1F -:1012F000FF1FE95AFE4F80819181089508950F9351 -:101300001F93CF930FE511E0C0E0F8019291829115 -:101310008F010E943821C80FF1E007351F07A9F798 -:101320008C2FCF911F910F9108952BB1342F3095B1 -:1013300023233BB1432B3FB7F894FC01680F791F7F -:10134000E617F70789F0819198E04BB9000000C0DB -:1013500087FF2BB9880F000000C000C000C02BB968 -:1013600000C09A9591F7ECCF3FBF08952AB1242B86 -:101370002AB99B01220F331F620F731F0E94950928 -:1013800087EC90E00197F1F700C00000089542E07B -:101390000C94B609AF92BF92CF92DF92EF92FF9278 -:1013A0000F931F93CF93DF936C01790150E0FA0103 -:1013B000E754FB4F44918FEF90E0FC01E61BF109ED -:1013C000E754FB4FE491E09509F495C0C42FD0E0B9 -:1013D0008E1B91098C9F90018D9F300D9C9F300D2D -:1013E0001124E32F8CE3A82EB12CC601B5010E9475 -:1013F0008D28DC016230710509F446C0D0F4611516 -:10140000710599F16130710509F079C0C31BD109EB -:10141000B501681B790BC69FC001C79F900DD69F71 -:10142000900D1124B5010E948D28032F060F142F53 -:1014300067C06430710509F44BC0B8F165307105BF -:1014400009F05DC0C31BD109B501681B790BC69FAC -:10145000C001C79F900DD69F900D1124B5010E9429 -:101460008D28132FE32FE60F44C0C31BD109CC9D59 -:10147000C001CD9D900DDC9D900D1124B5010E9401 -:101480008D28132F160F35C0C31BD109CA9FC00169 -:10149000CB9F900DDA9F900D1124B5010E948D28ED -:1014A000142F032FE32FE60F2BC0C31BD109B50167 -:1014B000681B790BC69FC001C79F900DD69F900DEA -:1014C0001124B5010E948D28132F160F032F0FC072 -:1014D000C31BD109CA9FC001CB9F900DDA9F900D0D -:1014E0001124B5010E948D28032F060F132FE42F1E -:1014F00007C0042F05C0E42F142F042F01C0E0E023 -:10150000D70111960C9311971C931296EC93DF91CF -:10151000CF911F910F91FF90EF90DF90CF90BF90F0 -:10152000AF90089587E090E00C94C328AB01BC0114 -:1015300087E090E00C94E128E9EEF1E083E080831D -:10154000AAEEB1E08C91807884668F778C938CECD6 -:10155000828383836091E9017091EA018091EB01BC -:101560009091EC010C94960A8091E90180FF06C0ED -:101570006CE170E081EF91E00C94C70980E090E0AD -:10158000FC01EF50FE4F11821082128203968435C7 -:101590009105B1F7EDCF20E030E0F901EF50FE4FBB -:1015A0008183608342832D5F3F4F24353105A9F746 -:1015B0000C94B40AEF92FF920F931F93CF93DF9393 -:1015C00000D01F92CDB7DEB70091E9011091EA017A -:1015D0002091EB013091EC010093ED011093EE01AD -:1015E0002093EF013093F0012091E90120FF21C009 -:1015F000042FF62EE92E182F9E012F5F3F4F0E94D9 -:10160000CA098091ED0110FB87F98093ED011695D1 -:101610008091EE018078182BE0FA17F91093EE0113 -:10162000F092EF010093F0014B8169818A810E9461 -:10163000CB0A0F900F900F90DF91CF911F910F91D8 -:10164000FF90EF9008950F931F93CF93DF93EC01DA -:10165000062F142F9091E90190FF44C0892F8E77B7 -:10166000823021F4CE010E94DA0A1BC0892F8695B0 -:101670008F732EE3280F2F73243018F41091EC0190 -:1016800010C0865C8F73893060F4C92FCC1FCC27C3 -:10169000CC1FD091EA018D2F880FC82BD7FBDD27F7 -:1016A000D0F98091E901C0FB87F98093E901C695E3 -:1016B0008091EA018078C82BD0FBC7F9C093EA017A -:1016C0000093EB011093EC016091E9017091EA0144 -:1016D0008091EB019091EC01DF91CF911F910F91DF -:1016E0000C94960ADF91CF911F910F910895E9EE26 -:1016F000F1E02081221F2227221F3091EA01432F8F -:10170000440F842F822B37FB992790F90A9668E6BD -:1017100071E00E94A128438162810C94230B2091E7 -:10172000E901221F2227221F3091EA01432F440F93 -:10173000842F822B37FB992790F98A3091051CF46E -:10174000825A9E4F01C00A9768E671E00E94A12864 -:101750004091EC016091EB010C94230B6091EB0143 -:10176000862F90E08F3E910514F46F5E01C06FEFFD -:101770008091E901881F8827881F9091EA01292F0D -:10178000220F97FB992790F94091EC01822B0C9442 -:10179000230B6091EB01862F90E0419714F061518B -:1017A00001C060E08091E901881F8827881F90911F -:1017B000EA01292F220F97FB992790F94091EC011C -:1017C000822B0C94230B4091EC01842F90E08F3EF0 -:1017D000910514F44F5E01C04FEF8091E901881F1D -:1017E0008827881F9091EA01292F220F97FB9927BC -:1017F00090F96091EB01822B0C94230B4091EC014A -:10180000842F90E0419714F0415101C040E0809155 -:10181000E901881F8827881F9091EA01292F220F4C -:1018200097FB992790F96091EB01822B0C94230B85 -:101830008091700181110FC081E08093700189E077 -:10184000809391008FB7F89493E09093990090ED76 -:10185000909398008FBF0895E1E7F0E08081826067 -:1018600080830895E1E7F0E080818D7F8083089593 -:101870009091E90190FF3BC09178811102C0926084 -:1018800007C0883110F09E6203C08F73880F982BB9 -:101890009093E9016091E9017091EA018091EB0177 -:1018A0009091EC010E94960A8091E901982F9E7711 -:1018B000923019F40E94320C07C08695825C8F73B7 -:1018C000863110F40E942C0C8091E901881F882732 -:1018D000881F9091EA01292F220F97FB992790F9F1 -:1018E0004091EC016091EB01822B0C94230B089545 -:1018F0008091D80181608093D80181E0809371014B -:101900000E947222811104C00E9453220E949C0AEC -:101910000E94920A6093E9017093EA018093EB01BF -:101920009093EC016E7761F40E949C0A0E94920AE7 -:101930006093E9017093EA018093EB019093EC01CD -:101940000E94180C8091E90180FF04C086958F7376 -:101950000C94380C08958091E90186958F738F5F00 -:10196000883108F081E00C94380C8091E901982FBF -:10197000909590FB80F98093E9016091E901709165 -:10198000EA018091EB019091EC010E94960A80910E -:10199000E90180FF04C086958F730C94380C0E9477 -:1019A000320C2FEF80E792E0215080409040E1F729 -:1019B00000C000000C94B40ACF93C82F80916E0130 -:1019C00090916F010E94CC21EC2FF0E0EB54FC4F82 -:1019D000E491F0E08E179F0718F10E94C0219093C8 -:1019E0006F0180936E01E0916D01F0E0E754FC4FD0 -:1019F00044918091E901881F8827881F9091EA010E -:101A0000292F220F97FB992790F96091EB01822BE8 -:101A10000E94DA0A80916D0190E0019680936D0139 -:101A2000CF910895CF93C82F80916B0190916C0155 -:101A30000E94CC21EC2FF0E0EE54FC4FE491F0E05A -:101A40008E179F07E8F00E94C02190936C0180934D -:101A50006B014091EC016091EB01809169019091E3 -:101A60006A010E94DA0A8091690190916A010196E7 -:101A700068E671E00E948D2890936A018093690165 -:101A8000CF910895CF92DF92FF920F931F93CF9340 -:101A9000DF93F82E80916701909168010E94CC211C -:101AA000EF2DE695F0E0EE54FC4FE491F0E08E1758 -:101AB0009F07F0F10E94C021909368018093670115 -:101AC00001EF11E0C0E0D0E088E6C82EDD24D39419 -:101AD00080916501909166018C0F9D1FB6010E9457 -:101AE0008D2898014091EC016091EB010E94CA0998 -:101AF0002C960D5F1F4FC03581E0D80749F70E9433 -:101B0000B40A2091650130916601F0FE0BC0C90155 -:101B1000019668E671E00E948D289093660180939B -:101B2000650106C02150310930936601209365019B -:101B3000DF91CF911F910F91FF90DF90CF9008958B -:101B40008F929F92AF92BF92CF92DF92EF92FF92CD -:101B50000F931F93CF93DF93C82F80FF03C0DD2423 -:101B6000DA9402C0DD24D3948091630190916401E2 -:101B70000E94CC21C695EC2FF0E0E155FC4FE4919A -:101B8000F0E08E179F0708F467C00E94C021909371 -:101B900064018093630191EFE92E91E0F92E03EF48 -:101BA00011E0C0E0D0E027E0822E912CF8013197BF -:101BB0001082F7011082F801108287E0A82EB12C64 -:101BC000C12C809162018C0D87FD845E992787FD71 -:101BD0009095C817D907E9F42091EC012A9DC0011E -:101BE0002B9D900D1124B4010E94A128462F8091B5 -:101BF000E901881F8827881F9091EA01592F550F06 -:101C000097FB992790F997016091EB01852B0E9432 -:101C1000CA09CD0CF1E0AF1AB10899F6219683E01C -:101C2000E80EF11C0D5F1F4FCC31D10509F0BECF7E -:101C30000E94B40A8091620191E0D91206C081111C -:101C400002C08BE107C0815005C090E00196BE0143 -:101C50000E94A12880936201DF91CF911F910F9183 -:101C6000FF90EF90DF90CF90BF90AF909F908F90BC -:101C700008959F92AF92BF92CF92DF92EF92FF9220 -:101C80000F931F93CF93DF93CDB7DEB7C455D10920 -:101C90000FB6F894DEBF0FBECDBF182F8091600144 -:101CA000909161010E94CC21E12FF0E0E455FC4FBE -:101CB000E491F0E08E179F0708F495C00E94C021C0 -:101CC0009093610180936001CE0101967C015E01D9 -:101CD00093E0A90EB11CC12CD12C8701F5013197DD -:101CE0001082F7011082F5011082912C9091010170 -:101CF00080915F01999E800D112487FD04C08C3175 -:101D00001CF08BE101C080E0992787FD9095C816F3 -:101D1000D906A1F48091E901881F8827881F909136 -:101D2000EA01592F550F97FB992790F99701409198 -:101D3000EC016091EB01852B0E94CA099394F7E0B6 -:101D40009F12D4CF8FEFC81AD80A93E0E90EF11C86 -:101D5000E3E0AE0EB11CFCE1CF16D10409F0BECF1A -:101D600023EF31E059E0E52EF12C6CE1C62ED12CA9 -:101D7000C701B6010E94A128D9011197FC01EE0FFD -:101D8000FF1FE80FF91FE00FF11F81818C9311975E -:101D900080818C938281F9018083FFEFEF1AFF0A23 -:101DA0002D5F3F4F85E2E816F10411F70E94B40A57 -:101DB0009091010180915F01913049F48A3F2CF4A8 -:101DC00089EF80935F018FEF08C081500AC0833292 -:101DD0003CF082E280935F0181E08093010103C0C7 -:101DE0008F5F80935F01CC5ADF4F0FB6F894DEBF50 -:101DF0000FBECDBFDF91CF911F910F91FF90EF905C -:101E0000DF90CF90BF90AF909F9008951F920F9258 -:101E10000FB60F9211242F933F934F935F936F93BD -:101E20007F938F939F93AF93BF93EF93FF93809193 -:101E3000E90186958F739EE3980F9F73943020F489 -:101E400082500E94DC0C23C09AE3980F9F7393305A -:101E500020F486500E94120D1AC097E3980F9F73CA -:101E6000963020F489500E94420D11C091E3980FE2 -:101E70009F73963020F48F500E94A00D08C09BE203 -:101E8000980F9F73933018F485510E94390EFF917B -:101E9000EF91BF91AF919F918F917F916F915F91E2 -:101EA0004F913F912F910F900FBE0F901F9018955B -:101EB00080917A010895CF93DF9300D01F92CDB720 -:101EC000DEB79C0180914902843019F593E0998333 -:101ED0003B832A839093E9008FEF9091E800815033 -:101EE00095FD06C095ED9A95F1F700008111F5CFAB -:101EF0008091E80085FF0DC040E050E063E070E0B5 -:101F0000CE0101960E9494118091E8008E77809313 -:101F1000E8000F900F900F90DF91CF910895CF932D -:101F2000DF9300D01F92CDB7DEB720914902243055 -:101F300021F522E029839B838A8383E08093E90053 -:101F40008FEF9091E800815095FD06C095ED9A9530 -:101F5000F1F700008111F5CF8091E80085FF0DC0F9 -:101F600040E050E063E070E0CE0101960E949411E1 -:101F70008091E8008E778093E8000F900F900F908B -:101F8000DF91CF910895209149022430F1F422E0AD -:101F90002093E9002FEF3091E800215035FD06C075 -:101FA00035ED3A95F1F700002111F5CF2091E800C9 -:101FB00025FF0BC040E050E065E070E00E94941106 -:101FC0008091E8008E778093E8000895CF93DF93A7 -:101FD00020914902243039F521E02093E9002FEFC8 -:101FE0003091E800215035FD06C035ED3A95F1F706 -:101FF00000002111F5CF2091E80025FF14C0EC016D -:1020000040E050E068E070E00E9494118091E800A8 -:102010008E778093E80088E0FE01A2E7B1E00190AE -:102020000D928A95E1F7DF91CF9108958091480252 -:10203000811109C00E9429130E9486138091E20039 -:1020400084608093E20008951092480208950895F4 -:1020500008950C94832142E061EC81E00E94A31278 -:1020600042E061EC82E00E94A31242E061EC83E076 -:102070000C94A31280914B02833009F453C030F4C6 -:10208000813071F0823009F48CC008958A3009F4EF -:1020900078C08B3009F45EC0893009F09AC020C046 -:1020A00080914A02813A09F094C08091E800877FCC -:1020B0008093E80080914E0290914F02892B21F489 -:1020C00068E082E791E003C060E080E090E070E0CB -:1020D0000E94DF118091E8008B778093E8000895DB -:1020E00080914A02813209F074C080914E02909131 -:1020F0004F02892B09F06DC08091E800877F8093A3 -:10210000E8008091E80082FD05C0809149028111BC -:10211000F8CF5FC08091F10080937A018091E80050 -:102120008B7753C080914A02813A09F052C0809166 -:102130004E0290914F02892B09F04BC08091E8002C -:10214000877F8093E8008091E80080FFFCCF80913A -:102150000C0136C080914A028132D9F580914E023D -:1021600090914F02892BA9F58091E800877F809399 -:10217000E8000E94D81280914C0280930C010C94CC -:102180000E1B80914A02813221F58091E800877F01 -:102190008093E8000E94D81280914D0280937B01C9 -:1021A000089580914A02813AA1F48091E800877FE6 -:1021B0008093E8008091E80080FFFCCF80917B0154 -:1021C0008093F1008091E8008E778093E8000C9472 -:1021D000D812089584B7877F84BF88E10FB6F8943A -:1021E00080936000109260000FBE90E080E80FB610 -:1021F000F89480936100909361000FBE0E947B165B -:102200000E9429130E9486138091E20084608093CB -:10221000E20078940E940C160E947D1682E091E004 -:102220000E94271680914902853069F40E9444215A -:10223000809147028823B1F30E947221882391F391 -:102240000E947E11EFCF0E948516ECCF292F3327F5 -:1022500023303105C9F064F42130310581F022309A -:10226000310509F043C084E590E025E136E042C045 -:1022700021323105F1F02232310541F137C082E1DE -:1022800090E029E636E036C099278130910541F08B -:102290008230910541F0892B49F5E1E1F6E005C076 -:1022A000E3EEF5E002C0E9EBF5E0849190E09F01F8 -:1022B00021C06330D8F4E62FF0E0EE0FFF1FE25D9F -:1022C000FE4F2081318189E090E014C0633070F4CA -:1022D00070E0FB01EE0FFF1FE85DFE4F20813181B2 -:1022E000FB01EB5DFE4F808190E004C080E090E058 -:1022F00020E030E0FA0131832083089580E189BD38 -:1023000082E189BD09B400FEFDCF8091D8008F7DA8 -:102310008093D8008091E00082608093E0008091FB -:10232000E00081FDFCCF0895CF92DF92EF92FF9203 -:102330000F931F93CF93DF93EC018B016A010E94EF -:10234000F712811133C0C114D10439F0F601808134 -:102350009181081B190BC80FD91FE12CF12C011515 -:10236000110519F18091E80085FD16C08091E80003 -:102370008E778093E800C114D10449F0F601808182 -:102380009181E80EF91EF182E08285E00FC00E9483 -:10239000F712882321F30AC089918093F10001503C -:1023A0001109FFEFEF1AFF0ADACF80E0DF91CF913A -:1023B0001F910F91FF90EF90DF90CF9008952091A3 -:1023C0005002309151022617370748F06115710508 -:1023D00039F42091E8002E772093E80001C0B9017C -:1023E00040E061157105A9F120914902222309F409 -:1023F00043C0253009F442C02091E80023FD40C0CD -:102400002091E80022FD32C02091E80020FFE9CFB2 -:102410004091F3002091F20030E0342BFC01CF0119 -:102420006115710559F02830310540F48191809390 -:10243000F100615071092F5F3F4FF1CF41E028302B -:10244000310509F040E02091E8002E772093E80064 -:10245000C8CF4111C9CF0AC080914902882361F0D9 -:10246000853061F08091E80083FD0AC08091E8002A -:1024700082FFF2CF80E0089582E0089583E008951E -:1024800081E00895209150023091510226173707BC -:1024900048F06115710539F42091E8002E772093FA -:1024A000E80001C0B901FC0120E06115710591F15E -:1024B00080914902882309F440C0853009F43FC067 -:1024C0008091E80083FD3DC08091E80082FD2FC02F -:1024D0008091E80080FFE9CF2091F3008091F20025 -:1024E00090E0922B6115710559F08830910540F408 -:1024F00024912093F1003196615071090196F2CF39 -:1025000021E0089709F020E08091E8008E77809321 -:10251000E800CBCF2111CCCF0AC08091490288239B -:1025200061F0853061F08091E80083FD0AC0809100 -:10253000E80082FFF2CF80E0089582E0089583E012 -:10254000089581E00895982F973058F59093E90009 -:10255000981739F07091EC002091ED005091F00047 -:1025600003C0242F762F50E021FF19C03091EB00DB -:102570003E7F3093EB003091ED003D7F3093ED00D6 -:102580003091EB0031603093EB007093EC002093BE -:10259000ED005093F0002091EE0027FF07C09F5FF1 -:1025A000D3CF8F708093E90081E0089580E0089593 -:1025B00080914A0287FF11C08091E80082FD05C02A -:1025C000809149028111F8CF11C08091E8008B778A -:1025D0000BC080914902882349F08091E80080FF78 -:1025E000F8CF8091E8008E778093E80008952091DD -:1025F000E4003091E50095E64091EC00842F817075 -:1026000040FF22C08091E80080FD1CC080914902FB -:10261000882391F0853091F08091EB0085FD10C00A -:102620004091E4005091E5004217530729F39A01C5 -:10263000915011F784E0089582E0089583E00895B1 -:1026400081E0089580E008954091E80042FFDECFE8 -:1026500008950E9497130E949F13E0EEF0E080819E -:1026600081608083E8EDF0E080818F77808319BC02 -:10267000A7EDB0E08C918E7F8C9380818F7E8083DC -:102680001092480208950F931F93CF93DF930E94F7 -:1026900097130E949F13C8EDD0E088818F778883BD -:1026A00088818068888388818F7D888319BC109297 -:1026B000490210924502109247021092460200EE23 -:1026C00010E0F80180818B7F80838881816088831E -:1026D00042E060E080E00E94A312E1EEF0E0808141 -:1026E0008E7F8083E2EEF0E0808181608083808154 -:1026F00088608083F80180818E7F808388818061FB -:102700008883DF91CF911F910F910895E8EDF0E05C -:1027100080818F7E8083E7EDF0E08081816080831F -:1027200084E082BF81E0809348020C944313E8ED7B -:10273000F0E080818E7F80831092E20008951092F5 -:10274000DA001092E10008951F920F920FB60F92D7 -:1027500011242F933F934F935F936F937F938F93A6 -:102760009F93AF93BF93EF93FF938091E10082FF1C -:102770000BC08091E20082FF07C08091E1008B7F57 -:102780008093E1000E940B168091DA0080FF1FC049 -:102790008091D80080FF1BC08091DA008E7F8093EB -:1027A000DA008091D90080FF0DC080E189BD82E10F -:1027B00089BD09B400FEFDCF81E0809349020E94EB -:1027C000161005C019BC109249020E942410809175 -:1027D000E10080FF19C08091E20080FF15C0809168 -:1027E000E2008E7F8093E2008091E200806180931E -:1027F000E2008091D80080628093D80019BC85E007 -:10280000809349020E9428108091E10084FF30C02B -:102810008091E20084FF2CC080E189BD82E189BD06 -:1028200009B400FEFDCF8091D8008F7D8093D80041 -:102830008091E1008F7E8093E1008091E2008F7EA5 -:102840008093E2008091E20081608093E2008091B9 -:102850004502882311F084E007C08091E30087FDE2 -:1028600002C081E001C083E0809349020E942910E8 -:102870008091E10083FF29C08091E20083FF25C0A1 -:102880008091E100877F8093E10082E0809349029C -:10289000109245028091E1008E7F8093E10080914B -:1028A000E2008E7F8093E2008091E200806180935D -:1028B000E20042E060E080E00E94A3128091F0001C -:1028C00088608093F0000E942710FF91EF91BF91E4 -:1028D000AF919F918F917F916F915F914F913F91B8 -:1028E0002F910F900FBE0F901F9018951F920F926F -:1028F0000FB60F9211242F933F934F935F936F93D3 -:102900007F938F939F93AF93BF93CF93DF93EF9377 -:10291000FF93C091E900CF708091EC00D82FD17067 -:1029200080FDD0E81092E9008091F000877F8093CD -:10293000F00078940E94BA141092E9008091F0009F -:1029400088608093F000CD2BCF70C093E900FF9199 -:10295000EF91DF91CF91BF91AF919F918F917F9137 -:102960006F915F914F913F912F910F900FBE0F90FC -:102970001F9018951F93CF93DF93CDB7DEB7AA971B -:102980000FB6F894DEBF0FBECDBFEAE4F2E088E0F8 -:102990008E0F9091F10091938E13FBCF0E943A100D -:1029A0008091E80083FF1FC180914A0290914B0201 -:1029B000492F50E04A30510508F015C1FA01E25A9A -:1029C000FF4F0C94B528803881F0823809F00BC194 -:1029D00080914E028F708093E9008091EB0085FB1F -:1029E000882780F91092E90006C0809146029091F4 -:1029F0004702911182609091E800977F9093E800E0 -:102A00008093F1001092F100C8C0282F2D7F09F0AB -:102A1000EAC0882319F0823061F0E5C080914C0251 -:102A2000813009F0E0C0933009F080E080934702E4 -:102A30002BC080914C02811127C080914E028F7073 -:102A400009F4D1C08093E9002091EB0020FF1CC065 -:102A5000933021F48091EB00806214C09091EB00E0 -:102A600090619093EB0021E030E0A90102C0440F97 -:102A7000551F8A95E2F74093EA001092EA00809190 -:102A8000EB0088608093EB001092E9008091E800F1 -:102A9000877F86C08111A7C010914C021F7780915B -:102AA000E3008078812B8093E3008091E800877FAA -:102AB0008093E8000E94D8128091E80080FFFCCF4C -:102AC0008091E30080688093E300111102C082E0EE -:102AD00001C083E08093490286C08058823008F0AC -:102AE00082C080914C0290914D028C3D53E095073D -:102AF00079F583E08A838AE289834FB7F894DE010F -:102B0000139620E03EE051E2E32FF0E050935700AF -:102B1000E49120FF03C0E295EF703F5FEF708E2FCE -:102B200090E0EA3010F0C79601C0C0968D939D9357 -:102B30002F5F243149F74FBF8091E800877F809352 -:102B4000E8006AE270E0CE0101960E94DF1114C035 -:102B5000AE014F5F5F4F60914E020E942611BC0193 -:102B6000009709F440C09091E800977F9093E800A7 -:102B700089819A810E9442128091E8008B7780932C -:102B8000E80031C0803879F58091E800877F809334 -:102B9000E800809145028093F1008091E8008E77F3 -:102BA0008093E8000E94D8121EC081111CC0909131 -:102BB0004C029230C0F48091E800877F8093E80057 -:102BC000909345020E94D81280914502811106C05F -:102BD0008091E30087FD02C081E001C084E0809322 -:102BE00049020E942B108091E80083FF0AC0809167 -:102BF000E800877F8093E8008091EB0080628093FB -:102C0000EB00AA960FB6F894DEBF0FBECDBFDF91E2 -:102C1000CF911F9108950895CF9380914902882301 -:102C2000A1F0C091E900CF709091EC00892F8170E4 -:102C300090FD80E8C82B1092E9008091E80083FDA8 -:102C40000E94BA14CF70C093E900CF910895909379 -:102C50008101809380010895E0918001F0918101CC -:102C6000309721F00190F081E02D099480E00895E3 -:102C7000E0918001F0918101309721F00280F38191 -:102C8000E02D09940895E0918001F0918101309741 -:102C900021F00480F581E02D0994089520917E01B2 -:102CA00030917F018217930771F090937F01809399 -:102CB0007E01E0918001F0918101309721F0068042 -:102CC000F781E02D0994089520917C0130917D01D8 -:102CD0008217930771F090937D0180937C01E091BE -:102CE0008001F0918101309721F00084F185E02D81 -:102CF0000994089508950C947A160E94B7210E94B1 -:102D0000B5080E943D220C94D0265F926F927F926C -:102D10008F929F92AF92BF92CF92DF92EF92FF92EB -:102D20000F931F93CF93DF9300D000D01F92CDB7A6 -:102D3000DEB70E94FA089BE8C92E91E0D92E03E085 -:102D400010E0AA24A394B12C502E802F0E94750964 -:102D50004C01F601729062906F0168267926611429 -:102D60007104A1F40150110978F78FEF89838A83E8 -:102D70001B820E94C0218160782F9D838C834981B2 -:102D80005A816B818D810E94351738C08091D8019E -:102D900081FD0E947E092BE030E07501022E02C009 -:102DA000EE0CFF1C0A94E2F7C70186219721892BBC -:102DB00009F129835A828E209F2091E0892809F405 -:102DC00090E09B830E94C0218160782F9D838C833B -:102DD00049815A816B818D810E943517000F111F27 -:102DE000F801ED57FE4F80819181E826F926F182A6 -:102DF000E08204C02150310980F6B4CF0E94112432 -:102E0000109182010E942C161817D1F00E942C16E6 -:102E1000809382010F900F900F900F900F90DF9191 -:102E2000CF911F910F91FF90EF90DF90CF90BF90C7 -:102E3000AF909F908F907F906F905F900C949F08C1 -:102E40000F900F900F900F900F90DF91CF911F91E7 -:102E50000F91FF90EF90DF90CF90BF90AF909F9039 -:102E60008F907F906F905F900895CF93DF93CDB751 -:102E7000DEB72B970FB6F894DEBF0FBECDBF4F83E2 -:102E8000588769877A878B87DE01119686E0FD0176 -:102E900011928A95E9F785E0FE01379601900D922F -:102EA0008A95E1F749815A816B817C818D819E8170 -:102EB0000E94AC1D2B960FB6F894DEBF0FBECDBF9F -:102EC000DF91CF910895CF93882309F4C2C0C82F12 -:102ED000823859F40E942C1681FDBBC089E30E9400 -:102EE00086200E94092189E30CC0833879F40E946E -:102EF0002C1680FDAEC083E50E9486200E94092129 -:102F000083E50E94A320CF910C940921843859F4C1 -:102F10000E942C1682FD9DC087E40E9486200E949C -:102F2000092187E4EECF8CEF8C0F813A48F48C2F87 -:102F30000E94382681118DC08C2F0E948620E3CFFD -:102F400080E28C0F883048F4C77081E001C0880FA0 -:102F5000CA95EAF70E94C220D6CF8BE58C0F83304A -:102F600078F4C53A29F0C63A31F083E890E005C01C -:102F700081E890E002C082E890E0CF910C944E1678 -:102F800088E58C0F833108F064C0C83A39F1C93A3A -:102F900041F1CA3A49F1CB3A51F1CC3A59F1CD3A23 -:102FA00061F1C03B69F1CE3A71F1CF3A79F1C13BA1 -:102FB00081F1C23B89F1C33B91F1C43B99F1C53B1F -:102FC000A1F1C63BA9F1C73BB1F1C83BB9F1C93B7F -:102FD000C1F1CA3BC9F180E090E038C082EE90E0D8 -:102FE00035C089EE90E032C08AEE90E02FC085EBCC -:102FF00090E02CC086EB90E029C087EB90E026C0E3 -:103000008CEC90E023C08DEC90E020C083E891E050 -:103010001DC08AE891E01AC082E991E017C084E9F6 -:1030200091E014C081E292E011C083E292E00EC010 -:1030300084E292E00BC085E292E008C086E292E072 -:1030400005C087E292E002C08AE292E0CF910C9440 -:103050006416CF910895882309F44BC0823859F43F -:103060000E942C1681FF45C089E30E9486200E94A1 -:10307000092189E30CC0833871F40E942C1680FF6B -:1030800038C083E50E9486200E94092183E50E94C2 -:10309000A3200C940921843859F40E942C1682FF35 -:1030A00028C087E40E9486200E94092187E4EFCF90 -:1030B0009CEF980F913A58F390E2980F983050F4A3 -:1030C000877091E001C0990F8A95EAF7892F0E94D5 -:1030D000C820DFCF9BE5980F933020F480E090E08C -:1030E0000C944E16885A833120F480E090E00C94C2 -:1030F00064160895882321F00E94C2200C940921AF -:103100000895882321F00E94C8200C940921089575 -:103110007F928F929F92AF92BF92CF92DF92EF9267 -:10312000FF920F931F93CF93DF931F92CDB7DEB71C -:103130007C01C62E772EFC01058102950F7012814D -:1031400011110E94DF200E947F20882379F0112333 -:1031500069F080E28C0D883048F082E00E9468209F -:103160000E947F2091E0D82ED92601C0D12CE72DD6 -:10317000E295EF70F0E0E859FF4F0C94B528872DE9 -:10318000807F072D0F70882311F00295007F112397 -:1031900089F0002309F499C180E28C0D883020F475 -:1031A000802F0E94C22003C0802F0E94D2200E9444 -:1031B00009218BC18C2D0E942B18002309F4C3C157 -:1031C00080E28C0D883020F4802F0E94C82003C03C -:1031D000802F0E94D8200E940921B5C1872D807FB1 -:1031E000972D9F70803211F4892F03C0892F82950B -:1031F000807FCC2021F0F1E0CF16A1F01DC011237B -:1032000039F0002319F1013009F50E94F2209BC129 -:10321000002319F0013009F496C189830E94F5203A -:10322000898110C1112321F0063008F08CC10EC035 -:10323000053008F088C106C1112359F0002331F090 -:10324000F701958190FF41C19F7095830E947A1884 -:103250007AC1002309F4F6C03EC1872D8695869574 -:10326000837090E0009719F0019761F06CC1112311 -:1032700021F08C2D972D937002C080E090E00E9489 -:103280004E1661C1112321F08C2D972D937002C031 -:1032900080E090E00E94641656C18C2D112319F035 -:1032A0000E94192302C00E9481230E9406244BC160 -:1032B000872D837009F052C0111145C18C2D829564 -:1032C00086958770880F880F9C2D9F70892E912C72 -:1032D000A12CB12C082E04C0880C991CAA1CBB1C64 -:1032E0000A94D2F7C4FE14C00FE010E020E030E0F2 -:1032F000B901A80104C0440F551F661F771F8A95A6 -:10330000D2F7CB01BA01609570958095909503C076 -:1033100060E070E0CB01272D26952695237030E0E4 -:103320002230310569F02330310589F06829792987 -:103330008A299B292130310571F00E94F41E03C1B6 -:10334000682979298A299B290E94101FFCC00E94A4 -:10335000F41EC501B4010E94D81EF5C0112319F056 -:10336000872D817001C08695882309F4ECC08C2DCF -:10337000829586958770880F880F9C2D9F70892E67 -:10338000912CA12CB12C082E04C0880C991CAA1CCD -:10339000BB1C0A94D2F7C4FE14C00FE010E020E07A -:1033A00030E0B901A80104C0440F551F661F771F04 -:1033B0008A95D2F7CB01BA0160957095809590956A -:1033C00003C060E070E0CB01272D26952695237081 -:1033D000422F50E04230510569F04330510589F0E9 -:1033E000682979298A299B294130510571F00E9469 -:1033F000CE1FA9C0682979298A299B290E94EA1F22 -:10340000A2C00E94CE1FC501B4010E94B21F9BC082 -:103410008C2D90E0FC01E05EF109E531F10508F04A -:1034200050C0E858FF4F0C94B5280C2D0F70872D15 -:103430008F71112321F00E944B1F802F07CF0E9414 -:103440006C1F802F0E9481187EC0112341F005302F -:1034500008F079C0872D8F710E94911F74C00630CB -:1034600008F071C0F7CF112339F0872D8F710E94BA -:103470004B1F69C01123C9F3872D8F710E946C1FE8 -:1034800062C0112329F0872D8F710E94361F5BC007 -:103490000E942C1F58C0112351F0172D1F71812F2E -:1034A0000E944B1F63E0812F0E945F204CC081E08F -:1034B0000E946820023008F446C082E00E94682022 -:1034C00042C0112331F0002381F28C2D0E9463173A -:1034D0003AC0002389F28C2D0E942B1834C0472D4E -:1034E0004F706C2DC7010E9495040E94501E2BC086 -:1034F000111129C0472D4F7050E042305105B9F0ED -:103500004CF44115510581F041305105E1F40E9420 -:10351000F82619C04330510569F04430510599F43B -:103520008C2D0E944A270FC00E94E1260CC00E94E9 -:10353000142709C00E94272706C0472D4F706C2D05 -:10354000C7010E94A704DD20F9F00E945B2080FDE6 -:103550001BC0F70112820E9455200E944B1FC70119 -:103560000E94D31A0E9455200F90DF91CF911F9196 -:103570000F91FF90EF90DF90CF90BF90AF909F9012 -:103580008F907F900C946C1F0F90DF91CF911F91C3 -:103590000F91FF90EF90DF90CF90BF90AF909F90F2 -:1035A0008F907F9008950F931F93CF93DF93EC013B -:1035B000888199812B813C81232BB9F09F3F11F4A5 -:1035C0008F3F99F0CE010E94D904882371F0688161 -:1035D00079818A810E9451208C010E9406200E94DC -:1035E000CD1EB801CE010E948818DF91CF911F91A6 -:1035F0000F9108950E94DF200E94EF200E94B420C6 -:103600000E9409210E94B7240E94062480E090E0D5 -:103610000E944E1680E090E00C9464160E94CF2029 -:103620000C94FA1A0E944620292F22952F7030E020 -:103630002C3031054CF42A3031056CF4225031091C -:1036400022303105A8F407C02C30310569F02F3045 -:10365000310551F00DC0803F69F018F4803E40F410 -:1036600009C0843F29F406C093FB882780F9089598 -:1036700080E0089581E00895CF93DF9300D000D0DB -:103680001F92CDB7DEB70F900F900F900F900F9055 -:10369000DF91CF910895CF93DF9300D000D000D079 -:1036A000CDB7DEB726960FB6F894DEBF0FBECDBFFE -:1036B000DF91CF9108951F93CF93DF93C0918B013A -:1036C00016E080918C01C81799F0D0E01C9FF001A2 -:1036D0001D9FF00D1124E357FE4F408151816281FF -:1036E0007381848195810E944B1B2196C770E9CF1D -:1036F000DF91CF911F9108954091BD015091BE017E -:103700006091BF017091C0018091C1019091C2018F -:103710000C944B1B8091C20182958F7009F054C0AC -:103720008091BF01882309F44FC080918B01A09143 -:103730008C016091BD017091BE014091C00150911A -:10374000C101B6E08A1709F43FC090E04115510568 -:10375000C1F17F3F11F46F3FA1F1B89FF001B99F14 -:10376000F00D1124E357FE4F218172132AC02081EE -:10377000621327C02281211124C0238134812417A0 -:10378000350710F421503109241B350B283C310535 -:10379000C0F42091C2012F7020612093C20126E065 -:1037A000289FF001299FF00D1124EE56FE4F8081D5 -:1037B0008F70806180838DEB91E00E94D31A0C940E -:1037C0005B1B01968770BECF0895CF92DF92EF9278 -:1037D000FF920F931F93CF93DF93CDB7DEB762971E -:1037E0000FB6F894DEBF0FBECDBF8C0185E0F801A7 -:1037F000DE011D9601900D928A95E1F7D8014C915A -:1038000011965C91119712966C9112971396CD9028 -:10381000DC9014973091BD017091BE018091C00180 -:103820009091C101009709F46BC17F3F19F43F3FAC -:1038300009F466C1E090BF01EE2009F4C0C02091F8 -:10384000C201C816D90628F0F601E81BF90BCF0112 -:1038500004C0809590958C0D9D1DFF24F394883CA9 -:10386000910578F0F12C207F09F0C6C07C2DD98A13 -:10387000C88A89890E943C1B8DEB91E00E94D31A73 -:10388000B1C0822F807F09F046C0751314C0341375 -:1038900012C0611110C02F7020612093C2010E94DC -:1038A0007C1B8DEB91E00E94D31A8091C201D8015C -:1038B00015968C932EC0CD2819F15F3F11F44F3F20 -:1038C000F9F0F62E61111CC080918B0120918C01C2 -:1038D00036E0821709F45AC090E0389FF001399F12 -:1038E000F00D1124E357FE4F7181571306C070810C -:1038F000471303C07281711103C001968770E9CF2D -:10390000F62E662309F418C18091C201816080936C -:10391000C201F12C11C1751308C0341306C0611126 -:1039200004C08091C201D801C3C04D875E878D85D8 -:103930009E856A8B0E94121B6A898823E1F16623A7 -:10394000D1F12091C201822F82958F7090E0029771 -:1039500074F08091BD019091BE0198878F83198684 -:10396000DB86CA862C87CE0107960E94D31A86E092 -:10397000F801ADEBB1E001900D928A95E1F70E945C -:103980008A1B0E947C1BFF24F394D6C04D875E8760 -:103990008D859E850E944620292F22952F7030E02C -:1039A000223031050CF0BCC09F7009F0B6C0805EBB -:1039B000883008F4C1C0C8010E94D31AE4CFC816E9 -:1039C000D90608F453C0F601E81BF90BCF01883C77 -:1039D000910508F450C0F12C7C2DD98AC88A8989B8 -:1039E0000E943C1BEDEBF1E086E0DF011D928A9521 -:1039F000E9F70E947C1BA0C0751314C0341312C0D9 -:103A0000611110C08091C201F8018583C8010E9434 -:103A1000D31A86E0EDEBF1E0DF011D928A95E9F71C -:103A2000FE2C8AC04D875E878D859E856A8B0E949D -:103A3000121B6A89882309F4BECF662309F4BBCF21 -:103A40002091C201822F82958F7090E002970CF432 -:103A50008ECF8091BD019091BE019A8389831B8294 -:103A6000DD82CC822E83CE0101967FCF809590950A -:103A70008C0D9D1DACCFF62E662309F49CCF7513DB -:103A80002EC034132CC02091C20120FD1FC0822FF4 -:103A900082958F70D9F0D80115962C9315978F3099 -:103AA00049F08F5F982F9295907F822F8F70892B8E -:103AB00015968C93C8010E94D31A86E0F801ADEBED -:103AC000B1E001900D928A95E1F793CF86E0F8017D -:103AD000ADEBB1E001900D928A95E1F72DC04D87D5 -:103AE0005E878D859E850E94121B811140CF80913B -:103AF000C20181608093C201C8010E94D31A1CC018 -:103B0000662309F458CF4D875E878D859E850E9478 -:103B1000121B882309F44FCF2ACF811148CF0CC044 -:103B2000243031050CF047CF9F7009F440CFF801E5 -:103B30009581907F09F03BCF8F2D62960FB6F89458 -:103B4000DEBF0FBECDBFDF91CF911F910F91FF90D0 -:103B5000EF90DF90CF9008951F93CF93DF93CDB771 -:103B6000DEB72C970FB6F894DEBF0FBECDBF4F83E4 -:103B7000588769877A878B879C87CE0107960E9432 -:103B8000E51B882369F08F8198852A853B85232B47 -:103B9000F1F19F3F09F063C08F3F09F060C037C06B -:103BA00086E0FE013796DE01119601900D928A950E -:103BB000E1F76F817885EA85FB85309741F17F3F9A -:103BC00011F46F3F21F120918C0130E0C901019681 -:103BD0008770992740918B0150E08417950709F46D -:103BE00047C069837A83FD83EC8396E0929FD0017E -:103BF000939FB00D1124A357BE4FFE013196019043 -:103C00000D929A95E1F780938C010E945B1B16E060 -:103C100080918B0190918C018917C1F1189FC0018F -:103C2000112483579E4F0E94E51B882379F1E09170 -:103C30008B011E9FF0011124E357FE4F40815181FB -:103C400062817381848195810E944B1B80918B01DD -:103C500090E001968770992780938B01D9CF4F818F -:103C6000588569857A858B859C850E944B1BCFCFB3 -:103C70000E940E1B10928C0110928B01EDEBF1E073 -:103C800086E0DF011D928A95E9F7C1CF2C960FB629 -:103C9000F894DEBF0FBECDBFDF91CF911F91089585 -:103CA000EF92FF920F931F93CF93DF938C010097B6 -:103CB00009F46CC0F12CEE24E394E8012196F8019C -:103CC0008491843740F4843008F051C0813081F011 -:103CD000823019F15BC0853709F444C0A8F19CE734 -:103CE000980F903708F052C08F770E942B1841C070 -:103CF0000E5F1F4FFE01C49180E28C0F883048F4A4 -:103D0000C7708E2D01C0880FCA95EAF70E94E22085 -:103D100014C08C2F0E9463172DC00E5F1F4FFE0131 -:103D2000C49180E28C0F883058F4C7708E2D01C08A -:103D3000880FCA95EAF70E94E8200E9409211AC05C -:103D40008C2F0E942B1816C00E5F1F4FFE01C491CE -:103D5000CC2381F08FE99FE00197F1F700C00000CC -:103D6000C150F6CF0E5F1F4FFE01F49003C00E94BA -:103D700063178E018F2D882309F49FCFEFE9FFE0B1 -:103D80003197F1F700C000008150F5CFDF91CF915E -:103D90001F910F91FF90EF90089508956093C701D0 -:103DA0007093C8018093C9019093CA010C94FA1AC8 -:103DB0000F931F930091C7011091C8012091C90171 -:103DC0003091CA01DC01CB01802B912BA22BB32BAC -:103DD0008093C7019093C801A093C901B093CA0111 -:103DE0001F910F910C94FA1A0F931F930091C70122 -:103DF0001091C8012091C9013091CA01DC01CB01A9 -:103E000080239123A223B3238093C7019093C801F9 -:103E1000A093C901B093CA011F910F910C94FA1A93 -:103E20000F931F930091C7011091C8012091C90100 -:103E30003091CA01DC01CB0180279127A227B3274B -:103E40008093C7019093C801A093C901B093CA01A0 -:103E50001F910F910C94FA1A1092C3011092C40191 -:103E60001092C5011092C6010C94FA1A41E050E07C -:103E700060E070E004C0440F551F661F771F8A95ED -:103E8000D2F74093C3015093C4016093C50170936E -:103E9000C6010C94FA1A41E050E060E070E004C002 -:103EA000440F551F661F771F8A95D2F78091C30173 -:103EB0009091C401A091C501B091C601482B592B26 -:103EC0006A2B7B2B4093C3015093C4016093C501BF -:103ED0007093C6010C94FA1A41E050E060E070E083 -:103EE00004C0440F551F661F771F8A95D2F740956F -:103EF0005095609570958091C3019091C401A091F7 -:103F0000C501B091C601482359236A237B234093FE -:103F1000C3015093C4016093C5017093C6010C9412 -:103F2000FA1A41E050E060E070E004C0440F551F11 -:103F3000661F771F8A95D2F78091C3019091C401C3 -:103F4000A091C501B091C601482759276A277B2750 -:103F50004093C3015093C4016093C5017093C6019F -:103F60000C94FA1A0F931F930091C3011091C4018E -:103F70002091C5013091C601DC01CB01802B912B32 -:103F8000A22BB32B8093C3019093C401A093C501CE -:103F9000B093C6011F910F910C94FA1A0F931F93BF -:103FA0000091C3011091C4012091C5013091C60157 -:103FB000DC01CB0180239123A223B3238093C3018F -:103FC0009093C401A093C501B093C6011F910F91B6 -:103FD0000C94FA1A0F931F930091C3011091C4011E -:103FE0002091C5013091C601DC01CB0180279127CA -:103FF000A227B3278093C3019093C401A093C50166 -:10400000B093C6011F910F910C94FA1A0895CF92A4 -:10401000DF92EF92FF920F931F93CF93DF938C0168 -:10402000C090C701D090C801E090C901F090CA01CA -:104030008091C3019091C401A091C501B091C601C6 -:10404000C82AD92AEA2AFB2ACFE1D0E0D701C60143 -:104050000C2E04C0B695A795979587950A94D2F72C -:1040600080FF06C0B8018C2F0E940508019721F43B -:10407000219760F780E001C08C2FDF91CF911F91D5 -:104080000F91FF90EF90DF90CF900895CF93DF9343 -:10409000EC010E940720BE010E940508DF91CF912C -:1040A0000895CB010E94462008958091CB0185950B -:1040B0008595859508958091CB018770089598E046 -:1040C000899F90011124262B2093CB010C944B1F28 -:1040D0002091CB01809582238093CB01982F9770FC -:1040E00069F430E0482F552747FD509524173507D0 -:1040F00029F08595859585950C946C1F0895909170 -:10410000CB01977081E009F480E0089520910D01C2 -:1041100030910E01F90132969FEF40E0519158170E -:1041200089F09F3F19F4511101C0942F4F5F463021 -:10413000A9F79F3F39F0F901E90FF11D97FDFA95B5 -:1041400082830895089520910D0130910E01F901A7 -:104150003296285F3F4F9081981301C010823196AC -:10416000E217F307C1F7089581E090E0E0910D01B7 -:10417000F0910E01E80FF91F108201968830910529 -:10418000A9F708959091D701892B8093D7010895BD -:1041900080959091D70189238093D701089510923B -:1041A000D70108959091D601892B8093D601089567 -:1041B00080959091D60189238093D601089510921D -:1041C000D60108959091D501892B8093D50108954A -:1041D00080959091D50189238093D50108951092FF -:1041E000D50108958093CC0108951092CC010895D3 -:1041F00080910D0190910E01FC0131969C01285F88 -:104200003F4F80E0919191118F5FE217F307D1F753 -:104210000895E0910D01F0910E018091D701808306 -:10422000E0910D01F0910E0190818091D601892BD2 -:104230008083E0910D01F0910E0190818091D50174 -:10424000892B80838091CC01882361F0E0910D015E -:10425000F0910E019081892B80830E94F8208111BA -:104260001092CC0180910D0190910E010C943816A2 -:1042700020E0009739F0AC01415051098423952387 -:104280002F5FF7CF822F089580914902843039F152 -:104290001092D90120E488E190E00FB6F894A89537 -:1042A000809360000FBE2093600080E00E94FA03BC -:1042B00080E00E949F0883B7817F846083BF83B7BB -:1042C000816083BF7894889583B78E7F83BF88E1B0 -:1042D0000FB6F89480936000109260000FBE0895AE -:1042E0000895089580E00E94FA030E9470210E94C0 -:1042F000FA080E9471210E947F0991E0811101C09A -:1043000090E0892F08950E940E1B80E00E94FA031E -:104310000E94D0260E942C160C949F081F920F9288 -:104320000FB60F9211248F939F93AF93BF938091F9 -:10433000D901811113C08091DA019091DB01A09124 -:10434000DC01B091DD014196A11DB11D8093DA0120 -:104350009093DB01A093DC01B093DD01BF91AF919D -:104360009F918F910F900FBE0F901F90189582E034 -:1043700084BD93E095BD9AEF97BD80936E0008953C -:104380002FB7F8948091DA019091DB01A091DC01C4 -:10439000B091DD012FBF0895CF92DF92EF92FF928F -:1043A0000F931F932FB7F8944091DA015091DB01DE -:1043B0006091DC017091DD012FBF6A017B01EE2469 -:1043C000FF248C0120E030E0C016D106E206F3069F -:1043D00010F4415051099A01281B390BC9011F9152 -:1043E0000F91FF90EF90DF90CF9008951F920F9262 -:1043F0000FB60F9211248F939F93AF93BF93809129 -:10440000DA019091DB01A091DC01B091DD01019610 -:10441000A11DB11D8093DA019093DB01A093DC0113 -:10442000B093DD01BF91AF919F918F910F900FBE1F -:104430000F901F9018950E942913F8942FEF87EA88 -:1044400091E6215080409040E1F700C0000087E0F5 -:1044500090EBDC018093540290935502A093560296 -:10446000B09357029CE088E10FB6F894A89580932A -:1044700060000FBE90936000FFCF0E9472228111F6 -:1044800002C00E9453220E947D228093D8010E9484 -:104490008522809352020E948122682F70E080E082 -:1044A00090E00C94CE1E6DEE7EEF80E090E00E94D6 -:1044B000ED2860E082E090E00E94CF2860E083E099 -:1044C00090E00E94CF2860E084E090E00E94CF2836 -:1044D00060E085E090E00E94CF2860E086E090E018 -:1044E0000C94CF2880E090E00E94C92821E08D3E06 -:1044F0009E4F09F020E0822F089582E090E00C9416 -:10450000BB2883E090E00C94BB2884E090E00C94FE -:10451000BB28682F84E090E00C94CF2886E090E0E0 -:104520000C94BB28682F86E090E00C94CF288091F3 -:10453000E00180FF0BC06091120185E0689FB0012F -:10454000112475956795759567952BC081FF09C0F6 -:104550006091120185E0689FB001112475956795FF -:1045600020C082FF07C06091120185E0689FB00102 -:10457000112417C09091E1019923D1F060911101AC -:10458000961788F72091120185E0289F9001112449 -:10459000929FA001939F500D112470E0CA010E94C8 -:1045A000A1286038710540F46115710539F002C029 -:1045B00065E070E0862F08958FE7089581E0089503 -:1045C0008091E00180FF08C06091100170E0759556 -:1045D00067957595679521C081FF06C060911001B0 -:1045E00070E07595679519C082FF04C06091100155 -:1045F00070E010C09091E1019923C1F060910F012A -:104600009617A0F780911001899FC001112470E0D6 -:104610000E94A1286038710528F46115710521F008 -:10462000862F08958FE7089581E0089561E070E096 -:10463000F4CF803F21F40E949722819504C0813FEE -:1046400029F40E9497228093E4010895823F21F487 -:104650000E949722819504C0833F29F40E949722EB -:104660008093E3010895893F19F40E94E02205C078 -:104670008A3F31F40E94E02281958093E5010895FC -:104680008B3F21F40E94E022819504C08C3F29F4E5 -:104690000E94E0228093E6010895843F21F48091F6 -:1046A000E201816017C0853F21F48091E2018260C0 -:1046B00011C0863F21F48091E20184600BC0873FE6 -:1046C00021F48091E201886005C0883F31F4809137 -:1046D000E20180618093E20108958D3F21F4809191 -:1046E000E00181600BC08E3F21F48091E001826087 -:1046F00005C08F3F29F48091E00184608093E00140 -:104700000895803F39F48091E40187FF6CC01092D6 -:10471000E40169C0813F29F48091E4011816BCF3DB -:1047200062C09091E301823F29F497FF5CC0109230 -:10473000E30159C0833F19F41916CCF354C0893FE3 -:1047400041F48091E50118160CF04DC01092E5017E -:104750004AC08A3F29F48091E50187FF44C0F6CF23 -:104760008B3F39F48091E60187FF3DC01092E6014E -:104770003AC08C3F29F48091E6011816BCF333C08F -:10478000843F21F48091E2018E7F17C0853F21F4A0 -:104790008091E2018D7F11C0863F21F48091E2017A -:1047A0008B7F0BC0873F21F48091E201877F05C09A -:1047B000883F31F48091E2018F7E8093E20113C043 -:1047C0008D3F21F48091E0018E7F0BC08E3F21F45C -:1047D0008091E0018D7F05C08F3F29F48091E00139 -:1047E0008B7F8093E0018091E30181110EC0809165 -:1047F000E40181110AC08091E501811106C0809118 -:10480000E601811102C01092E101089582EE91E06B -:104810000E9443160E94C0219093DF018093DE0125 -:1048200008951F93CF93DF938091DE019091DF0174 -:104830000E94CC21AC019091E101992321F02091BB -:10484000130130E006C0209114018AE0289F9001F6 -:1048500011244217530708F486C08091E301C091E8 -:10486000E401D091E5011091E601811107C0C11169 -:1048700076C0D11174C0111172C075C09F3F19F07C -:104880009F5F9093E101181624F40E949722809371 -:10489000E3018091E30187FF05C00E949722819583 -:1048A0008093E3011C1624F40E9497228093E40174 -:1048B0008091E40187FF05C00E9497228195809333 -:1048C000E4016091E301662339F1C091E401CC2356 -:1048D00019F1772767FD7095872F972F0E949E27E4 -:1048E00023E333E343E35FE30E9402280E946B2744 -:1048F0006093E3016C2F772767FD7095872F972FC3 -:104900000E949E2723E333E343E35FE30E940228F0 -:104910000E946B276093E4011D1624F40E94E0229C -:104920008093E5018091E50187FF05C00E94E022A8 -:1049300081958093E501111624F40E94E022809372 -:10494000E6018091E60187FF05C00E94E022819583 -:104950008093E601DF91CF911F910C9406249F3F35 -:1049600009F08ECF96CFDF91CF911F910895E2EE9F -:10497000F1E085E0DF011D928A95E9F71092E101EF -:104980001092E0010895833081F128F4813059F0CC -:104990008230D1F00895853009F449C0B8F18630ED -:1049A00009F456C0089580911401262F30E0280F95 -:1049B000311D2F3F310524F4680F609314010895D1 -:1049C0008FEF80931401089580911301262F30E01A -:1049D000280F311D2F3F310524F4680F6093130118 -:1049E00008958FEF80931301089580911201262F6F -:1049F00030E0280F311D2F3F310524F4680F6093FC -:104A0000120108958FEF8093120108958091110192 -:104A1000262F30E0280F311D2F3F310524F4680F79 -:104A20006093110108958FEF809311010895809193 -:104A30001001262F30E0280F311D2F3F310524F4BF -:104A4000680F6093100108958FEF8093100108950F -:104A500080910F01262F30E0280F311D2F3F3105A7 -:104A600024F4680F60930F0108958FEF80930F0176 -:104A70000895833011F128F4813049F0823091F0AB -:104A80000895853081F120F18630C1F1089580913B -:104A90001401681720F4861B809314010895109266 -:104AA0001401089580911301681720F4861B8093E8 -:104AB000130108951092130108958091120168174F -:104AC00020F4861B8093120108951092120108951C -:104AD00080911101681720F4861B809311010895BD -:104AE00010921101089580911001681720F4861B1F -:104AF00080931001089510921001089580910F0184 -:104B0000681720F4861B80930F01089510920F01FF -:104B100008950F931F938732D8F58E3108F085C022 -:104B20008E3009F46FC098F4873009F459C08B3087 -:104B300009F48FC0863009F093C08091D801817F3D -:104B40008E7F8093D80181E08093E8018AC086310E -:104B500009F47FC068F4803109F082C08091D801E7 -:104B600083FB222720F991E0922790FB83F953C021 -:104B7000893109F46EC08B3109F072C08091D8017F -:104B800081FB222720F991E0922790FB81F943C015 -:104B9000883309F45EC050F4893209F45CC085336F -:104BA00009F459C0873209F456C05AC0833409F455 -:104BB00052C028F48A3308F453C0895337C088346C -:104BC00009F04EC00E940E1B0FEF13ED20E30150C1 -:104BD00010402040E1F700C000000E941B2239C0B5 -:104BE0009091D801892F8095817080FB90F929F0F0 -:104BF000966098609093D80134C0997F977F909386 -:104C0000D80127C08091D80182FB222720F991E0AA -:104C1000922790FB82F98093D8019923D1F080915B -:104C2000D80181608093D80114C08D5141E050E0DB -:104C300060E070E08A019B0104C0000F111F221F79 -:104C4000331F8A95D2F7C901B8010E94CE1E0E9477 -:104C50000E1B81E006C061E070E080E090E0F5CFDF -:104C600080E01F910F91089580E0089580E00895FD -:104C7000CF93C82F8091E801813069F018F082301D -:104C8000C9F184C0E0910D01F0910E018081823262 -:104C900009F07EC007C0E0910D01F0910E01808106 -:104CA000823261F48C2F0E943426811104C08C2F33 -:104CB0000E9489251DC081E090E01AC08C2F0E94BF -:104CC0003626811114C0C43179F048F4CB3079F024 -:104CD000C03109F061C082E08093E80108C0C932A8 -:104CE00019F0C83321F058C01092E80155C081E096 -:104CF000817054C0C93291F120F5C43179F1B0F41A -:104D0000C73009F047C08EE18093140182E380939D -:104D100013018AE08093120184E18093110188E0FD -:104D20008093100188E280930F0134C0CE51C630C9 -:104D300088F5EC2FF0E0EC5CFE4F80818093E7017A -:104D400029C0CE34E9F020F4CB3421F56AE013C059 -:104D5000C13579F0C235F1F461E00DC08091E70111 -:104D6000882319F01092E70115C081E08093E801D3 -:104D700015C061E006C08091E7010E94C3240AC00B -:104D80006AE08091E7010E94392504C01092E80191 -:104D900080E004C081E002C080E0AACFCF910895F6 -:104DA0000E947222811102C00E9453220E948E2210 -:104DB0008093530280FF02C0869501C080E00C946E -:104DC000FA0380915302982F9695292F30E02330D3 -:104DD00031054CF49F5F990F8170892B816080931E -:104DE00053020E9492228091530286950C94FA03FA -:104DF00080915302982F969591F09158990F817058 -:104E0000892B809353028E7F91E009F490E080918A -:104E1000530290FB80F9809353020E94922280916A -:104E2000530286950C94FA0380915302982F909523 -:104E300090FB80F9809353020E949222809153024A -:104E400080FF02C0869501C080E00C94FA03909127 -:104E50005302892F86958F5F8F779170843028F465 -:104E6000880F892B8093530202C090935302809144 -:104E700053028E7F91E009F490E08091530290FB01 -:104E800080F9809353020E9492228091530286956A -:104E90000C94FA0320915302922F96958927982F0C -:104EA000990F822F8170892B809353028E7F91E01E -:104EB00009F490E08091530290FB80F980935302B3 -:104EC0000E9492228091530286950C94FA0380915D -:104ED00053028695089504D06894B1118DC0089549 -:104EE00070D088F09F5790F0B92F9927B751A0F054 -:104EF000D1F0660F771F881F991F1AF0BA95C9F76E -:104F000012C0B13081F077D0B1E0089574C0672F3E -:104F1000782F8827B85F39F0B93FCCF3869577951D -:104F20006795B395D9F73EF4909580957095619506 -:104F30007F4F8F4F9F4F0895E89409C097FB3EF431 -:104F400090958095709561957F4F8F4F9F4F9923D6 -:104F5000A9F0F92F96E9BB279395F6958795779554 -:104F60006795B795F111F8CFFAF4BB0F11F460FF14 -:104F70001BC06F5F7F4F8F4F9F4F16C0882311F06C -:104F800096E911C0772321F09EE8872F762F05C080 -:104F9000662371F096E8862F70E060E02AF09A951B -:104FA000660F771F881FDAF7880F9695879597F910 -:104FB000089557FD9058440F551F59F05F3F71F009 -:104FC0004795880F97FB991F61F09F3F79F0879570 -:104FD0000895121613061406551FF2CF4695F1DFF9 -:104FE00008C0161617061806991FF1CF8695710589 -:104FF000610508940895E894BB2766277727CB01BD -:1050000097F908950BD078C069D028F06ED018F0C9 -:10501000952309F05AC05FC01124EECFCADFA0F378 -:10502000959FD1F3950F50E0551F629FF001729F3D -:10503000BB27F00DB11D639FAA27F00DB11DAA1F5C -:10504000649F6627B00DA11D661F829F2227B00DA9 -:10505000A11D621F739FB00DA11D621F839FA00D34 -:10506000611D221F749F3327A00D611D231F849F84 -:10507000600D211D822F762F6A2F11249F575040DB -:105080008AF0E1F088234AF0EE0FFF1FBB1F661F76 -:10509000771F881F91505040A9F79E3F510570F02F -:1050A00014C0AACF5F3FECF3983EDCF3869577956A -:1050B0006795B795F795E7959F5FC1F7FE2B880F2A -:1050C000911D9695879597F9089597F99F6780E8C0 -:1050D00070E060E008959FEF80EC089500240A944A -:1050E0001616170618060906089500240A941216C3 -:1050F0001306140605060895092E0394000C11F4F6 -:10510000882352F0BB0F40F4BF2B11F460FF04C0A2 -:105110006F5F7F4F8F4F9F4F0895AA1BBB1B51E1BD -:1051200007C0AA1FBB1FA617B70710F0A61BB70B17 -:10513000881F991F5A95A9F780959095BC01CD01BC -:10514000089597FB072E16F4009407D077FD09D039 -:105150000E948D2807FC05D03EF4909581959F4FC5 -:105160000895709561957F4F0895EE0FFF1F05908C -:10517000F491E02D0994F999FECF92BD81BDF89A82 -:10518000992780B50895A6E1B0E044E050E00C9482 -:10519000F528A8E1B0E042E050E00C94F528262F75 -:1051A000F999FECF92BD81BDF89A019700B402161D -:1051B00039F01FBA20BD0FB6F894FA9AF99A0FBECB -:1051C00008950396272F0E94D0280E94CF28252FCC -:1051D0000E94D028242F0C94D0280196272F0E94BB -:1051E000D0280C94CF28DC01CB01FC01F999FECF2B -:1051F00006C0F2BDE1BDF89A319600B40D9241505F -:0A5200005040B8F70895F894FFCF6E -:10520A00FFFF580FE60FC30F8F0F5B0F01CD012869 -:10521A0008140A321E1F0F03764F5F6F7F496943D6 -:10522A0079095953633F4D36FE06B1067B062706B8 -:0E523A00400659060102030405060708090094 -:00000001FF -- cgit v1.2.3 From 39cde914751bfa7d5013b7cb20002af6285cc943 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:39:57 -0400 Subject: Fix spelling in comment --- keyboard/planck/keymaps/angerthosenear/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/planck/keymaps/angerthosenear/keymap.c b/keyboard/planck/keymaps/angerthosenear/keymap.c index df13471e3d..fe049d0c84 100644 --- a/keyboard/planck/keymaps/angerthosenear/keymap.c +++ b/keyboard/planck/keymaps/angerthosenear/keymap.c @@ -6,7 +6,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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 + // Space is repeated to accommodate 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}, @@ -36,4 +36,4 @@ const uint16_t PROGMEM fn_actions[] = { [3] = ACTION_DEFAULT_LAYER_SET(0), [4] = ACTION_DEFAULT_LAYER_SET(1), -}; \ No newline at end of file +}; -- cgit v1.2.3 From e7b50feee434ad0035cdbddd1890c5992f28f712 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:42:05 -0400 Subject: Remove more generated files --- .../keymaps/experimental/planck_experimental.hex | 1645 -------------------- 1 file changed, 1645 deletions(-) delete mode 100644 keyboard/planck/keymaps/experimental/planck_experimental.hex diff --git a/keyboard/planck/keymaps/experimental/planck_experimental.hex b/keyboard/planck/keymaps/experimental/planck_experimental.hex deleted file mode 100644 index 76984a07cc..0000000000 --- a/keyboard/planck/keymaps/experimental/planck_experimental.hex +++ /dev/null @@ -1,1645 +0,0 @@ -:100000000C948F050C94D3050C94D3050C94D30554 -:100010000C94D3050C94D3050C94D3050C94D30500 -:100020000C94D3050C94D3050C94F9190C94CB1AA9 -:100030000C942D280C94D3050C94D3050C94D30563 -:100040000C94D3050C9486060C94D3050C94D3051C -:100050000C94D3050C9495280C94D3050C94D305DB -:100060000C94D3050C94D3050C94D3050C94D305B0 -:100070000C94D3050C94D3050C94D3050C94D305A0 -:100080000C94DB0F0C94D3050C94D3050C94D3057E -:100090000C94D3050C94D3050C94D3050C94D30580 -:1000A0000C94D3050C94D3050C94D305EE060007ED -:1000B000140726072E074407920792079207920714 -:1000C0009207920752078107381B5A1B481C5A1B7C -:1000D000481C9F1BC21B481C171C2A1C141F141FE2 -:1000E000431F431F821FA21FF820F820AD1FF820D6 -:1000F0005D205D20C420CD20F820F2206A206A20F7 -:100100006A206A206A206A206A206A206A206A209F -:100110006A206A206A206A206A206A207A20882061 -:100120008F209620A02007634236B79BD8A71A39A4 -:10013000685618AEBAAB558C1D3CB7CC5763BD6D35 -:10014000EDFD753EF6177231BF000000803F0800DC -:100150000000BE922449123EABAAAA2ABECDCCCC46 -:100160004C3E00000080BEABAAAAAA3E00000000E0 -:10017000BF000000803F0000000000084178D3BBB2 -:100180004387D1133D190E3CC3BD4282AD2B3E685F -:10019000EC8276BED98FE1A93E4C80EFFFBE01C450 -:1001A000FF7F3F0000000000000000000000000092 -:1001B000000000010204060A0F17202C3A4A5D7164 -:1001C000879DB3C7DAE9F5FCFFFCF5E9DAC7B39D13 -:1001D00087715D4A3A2C20170F0A060402010000BD -:1001E00000000000000000002B0014001A000800AE -:1001F000150017001C0018000C00120013002A0044 -:10020000290004001600070009000A000B000D0079 -:100210000E000F0033003400E1001D001B0006003B -:1002200019000500110010003600370038002800C2 -:100230000530E000E200E30003302C002C00043025 -:100240005000510052004F002B0014001A0009000A -:1002500013000A000D000F0018001C0033002A00D4 -:100260002900040015001600170007000B001100FC -:1002700008000C0012003400E1001D001B00060005 -:10028000190005000E001000360037003800280065 -:100290001450E000E200E30003302C002C00043096 -:1002A0005000510052004F002B0034003600370040 -:1002B00013001C0009000A00060015000F002A00A8 -:1002C000290004001200080018000C0007000B00B1 -:1002D0001700110016003800E100330014000D0073 -:1002E0000E001B00050010001A0019001D00280058 -:1002F0000530E000E200E30003302C002C00043065 -:100300005000510052004F0035021E021F02200211 -:1003100021022202230224022502260227022A00A9 -:100320004C003A003B003C003D003E003F002D02E7 -:100330002E022F0230023102010040004100420033 -:100340004300440045003202640201000100010044 -:100350000100010001000100010001000100010095 -:10036000AB00AA00A900AE0035001E001F0020004F -:1003700021002200230024002500260027002A0057 -:100380004C003A003B003C003D003E003F002D0089 -:100390002E002F00300031000100400041004200DB -:1003A000430044004500320032000100010001001A -:1003B0000100010001000100010001000100010035 -:1003C000AB00AA00A900AE001E001E001E001E0009 -:1003D0001E001E001E001E001E001E001E001E002D -:1003E000000014001A000800150017001C00180077 -:1003F0000C00120013002F0000000400160007007C -:1004000009000A000B000D000E000F00330034003D -:100410000D3000000000060019000000000011006F -:1004200010000000000000000000000000000000BC -: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 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E00000000000000000000100005001000100B6 -:1007F00001000100010001000100010001004C00A6 -:10080000010001000100205021501350125000300F -:10081000013002300C3001000100275026502350D7 -:10082000245028502950010001000100010001005E -:1008300001000100010001000100010001000100B0 -:1008400001000100010001000000000000000000A4 -:100850002A2B28000000000000000000000000001B -:1008600000000029000000002C1E34202122243426 -:100870002627252E362D3738271E1F2021222324F8 -:1008800025263333362E37381F0405060708090A94 -:100890000B0C0D0E0F101112131415161718191A30 -:1008A0001B1C1D2F3130232D350405060708090AAE -:1008B0000B0C0D0E0F101112131415161718191A10 -:1008C0001B1C1D2F3130354C0000000000000000C3 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000101010101010002 -:1008F00001010101000000000000000000000000F4 -:1009000000000100010001010101010101010101DB -:1009100001010101010101010101010101010101C7 -:1009200001010100000001010000000000000000C2 -:1009300000000000000000000000000000000000B7 -:100940000000000101010100280354006800650057 -:10095000200050006C0061006E0063006B002000FE -:100960004B006500790062006F0061007200640056 -:1009700000002C034F007200740068006F006C00D0 -:1009800069006E0065006100720020004B00650088 -:10099000790062006F006100720064007300000063 -:1009A0000403090409026D00040100A0FA0904000F -:1009B000000103010100092111010001223F00078C -:1009C00005810308000A090401000103010200096E -:1009D0002111010001224D000705820308000A09C8 -:1009E0000402000103000000092111010001223668 -:1009F000000705830308000A09040300010300003F -:100A000000092111010001223900070584031000AB -:100A1000011201100100000008EDFE6060010001FC -:100A200002000105010906A101050719E029E715E2 -:100A30000025019508750181020508190129059510 -:100A400005750191029501750391010507190029AA -:100A50007715002501957875018102C0050109808F -:100A6000A101850216010026B7001A01002AB7006D -:100A7000751095018100C0050C0901A101850316BF -:100A80000100269C021A01002A9C02751095018122 -:100A900000C005010902A1010901A1000509190110 -:100AA000290515002501950575018102950175033C -:100AB00081010501093009311581257F95027508ED -:100AC000810609381581257F950175088106050C79 -:100AD0000A38021581257F950175088106C0C00579 -:100AE000010906A101050719E029E715002501956F -:100AF0000875018102950175088101050819012910 -:100B00000595057501910295017503910105071978 -:100B10000029FF150025FF950675088100C01124E6 -:100B20001FBECFEFDAE0DEBFCDBF04B603FE24C0A8 -:100B300080915E0490915F04A0916004B091610483 -:100B40008730904BA740B04BB9F410925E041092DE -:100B50005F04109260041092610414BE84B7877F12 -:100B600084BF88E10FB6F894809360001092600013 -:100B70000FBEE0E0F8E3099513E0A0E0B1E0EEEB92 -:100B8000F4E602C005900D92A030B107D9F714E049 -:100B9000A0E0B3E001C01D92AE35B107E1F70E94BD -:100BA0003F170C945D320C94000081E00895089585 -:100BB0000C94AF070C94D5050C94D7050E94272EF2 -:100BC000811105C010920203109201030DC081E251 -:100BD00090E00090030302C0880F991F0A94E2F787 -:100BE000909302038093010382E08093000380913D -:100BF0006F00826080936F00089590916F0081E094 -:100C0000911101C080E008950E94272E23E030E07A -:100C1000281B3109220F209304030895282F2F98B1 -:100C200080918000211108C0877F809380001092FE -:100C30008D0010928C001BC0886080938000233050 -:100C400019F48FEF9FEF0FC083E090E0821B9109B2 -:100C5000880F991F2FEF3FEFA90102C056954795C6 -:100C60008A95E2F7CA0190938D0080938C000C94D2 -:100C70000406CF93C82F0E94FD05409103038823EB -:100C800029F090916F009D7F90936F00C0930303B4 -:100C90008823D1F0209101033091020302C03695E0 -:100CA00027954A95E2F72F733327C90102C0880FB1 -:100CB000991FCA95E2F790930203809301038091F4 -:100CC0006F00826080936F00CF9108950E940406A8 -:100CD00084E080930303109200030895279A2F98CD -:100CE0008FEF9FEF90938700809386008AE0809338 -:100CF000800089E1809381000E94902D0C9466060B -:100D00000E946E066E9A769A0C9497071F920F9225 -:100D10000FB60F9211242F933F938F939F93EF93CE -:100D2000FF93E0910103F0910203CF0101969093AC -:100D30000203809301030090030302C0F695E79538 -:100D40000A94E2F7EF7380910003823019F4E032E5 -:100D500051F404C0813039F4EF3329F480916F00ED -:100D60008D7F80936F00F0E0E855FE4FE49121E025 -:100D700031E0E29FC001E39F900D11240090040335 -:100D800002C0969587950A94E2F790938D00809320 -:100D90008C00FF91EF919F918F913F912F910F9038 -:100DA0000FBE0F901F901895CF93DF93EC010E9418 -:100DB0002E29BE0180E090E0DF91CF910C94232595 -:100DC0000F931F93462F50E04E30510508F0AAC0F4 -:100DD000DC01FA01EA5AFF4F0C94213212968C91F1 -:100DE000882309F49FC000E010E0980140E064E02F -:100DF00070E080ED91E00E94591381E090E011C015 -:100E000012968C91882309F48DC000E010E09801BF -:100E100040E066E070E080E691E00E94591382E0D5 -:100E200090E00E94D4067EC012968C91882309F42B -:100E300079C000E010E0980140E068E070E080E9EF -:100E400091E00E94591384E090E0EBCF12968C91D0 -:100E5000882311F083E007C083E013C012968C91C1 -:100E6000882371F084E00E94A02582E00E94390668 -:100E70000E94DE0540E164E083E00E94BE0D52C0A6 -:100E800084E00E94C125F6CF12968C91882331F020 -:100E900085EE0E94B81D0E94E72D44C085EE0E9499 -:100EA000801E40C012968C918823E1F10E940E0FA3 -:100EB00000E010E0980140E066E070E080E391E03F -:100EC0000E94591384E00E94C12583E00E94C1253D -:100ED00080E10E94C12585E00E94A0250E941B2977 -:100EE000811102C00E94F7280E94332990E090935C -:100EF0005D0480935C04806880935C040E943729C1 -:100F000011C012968C91882369F000E010E09801DE -:100F100040E066E070E080E091E00E94591385E0D7 -:100F20000E94C12580E090E01F910F9108950F93DA -:100F30001F932FEF89EF90E0215080409040E1F720 -:100F400000C0000000E010E0980140E065E070E0C3 -:100F500080EF91E00E9459131F910F9108958091A5 -:100F60001003882309F45AC080910E0390910F0357 -:100F70000E946B288D3291400CF450C010921003E7 -:100F80000E9414088091080390910903099781F445 -:100F900080910A0390910B03892B51F480910C03EB -:100FA00090910D03892B21F48AE592E00E941508A7 -:100FB0008091080390910903049791F480910A03AA -:100FC00090910B03469761F480910C0390910D036F -:100FD000892B31F48BE00E94B81D8BE00E94801EAB -:100FE00080910803909109030497C1F480910A034A -:100FF00090910B03469791F480910C0390910D030F -:10100000079761F483EE0E94B81D86E10E94B81D27 -:1010100086E10E94801E83EE0C94801E089581E07C -:1010200008950C940F08089508950F931F93CF937C -:101030008C01F80124912223F9F030E0F901E85BFA -:10104000F74FC491F901E853F74F2491222359F047 -:1010500081EE0E94B81D8C2F0E94B81D8C2F0E941B -:10106000801E81EE04C08C2F0E94B81D8C2F0E9420 -:10107000801E0F5F1F4FDDCFCF911F910F910895FD -:101080000C94800680915503882309F448C0809110 -:10109000110390911203009779F40E945F289093B6 -:1010A0001203809311038091130390E0009771F471 -:1010B0008091140390E00AC00E946B2820911802CE -:1010C000309119022817390740F329C00197880F7A -:1010D000991F880F991FFC01EB5EFC4F60817181A5 -:1010E000828193810E94410FE091130384E0E89F85 -:1010F000F0011124EB5EFC4F60817181828193814C -:101100004FE050E00E94F9128091130390E00196A5 -:101110006091140370E00E940D32809313030C94CD -:10112000D805109257030C940E0F0895089581E08E -:10113000809357030C949608089508958F929F9278 -:10114000AF92BF92EF92FF920F931F93CF93DF93D3 -:10115000CDB7DEB7A3970FB6F894DEBF0FBECDBFF5 -:101160007C01FC0100811181C8010E945C26B8014C -:101170000E94A00A8C01B7010E941108882309F47B -:10118000CCC10032F0E51F0741F4F70182818823CA -:1011900009F458C00E94F013C0C10132F0E51F07E6 -:1011A00041F4F7018281882309F44CC00E94F913AD -:1011B000B4C10232F0E51F0751F4F70182818823A0 -:1011C00009F440C00E94EC138111F0CFE3CF033249 -:1011D000F0E51F0739F4F7018281882399F10E9415 -:1011E00097089BC10432F0E51F0739F4F7018281AB -:1011F000882341F10E94910890C10532F0E51F0754 -:1012000049F4F70182818823E9F080915703811125 -:10121000F1CFE5CF0632F0E51F0739F4F7018281FF -:10122000882381F00E9400140AC00732F0E51F07EE -:1012300049F4F7018281882329F00E940B140E944F -:101240009D086BC180915703811105C0F701828110 -:101250008111CFC018C1003E110579F4F7018281D8 -:10126000882309F44DC00E940E0F81E0809356033D -:10127000109255031092140350C1023E110559F407 -:10128000F70182818823E1F10E940E0F109256032C -:101290001092550342C1033E110591F4F70182817A -:1012A000882371F10E940E0F1092560381E0809303 -:1012B00055031092130310921203109211032DC1C3 -:1012C0000235110559F4F7018281882309F425C1FB -:1012D00080911802909119020A970DC001351105ED -:1012E00079F4F7018281882309F417C180911802EB -:1012F000909119020A9690931902809318020DC1D9 -:1013000040911C0283E2E7E3F2E0DE0111960190D6 -:101310000D928A95E1F7F701808121E030E02C0FF2 -:101320003D1F280F311DC90120911A0230911B0267 -:10133000FC01E20FF31F6081772767FD7095640F52 -:10134000711D882777FD8095982F0E942F2F20E010 -:1013500030E040E451E40E94942E4B015C01F7011F -:10136000218184E090E0821B9109BC01882777FDF0 -:101370008095982F0E942F2F9B01AC01C501B401CD -:101380000E942C2E9B01AC0160E070E080E090E4B4 -:101390000E94A23020E030E04CED50E40E943F304B -:1013A0004B015C01F70182818823D1F04FE050E0CE -:1013B000C501B4010E94F912809156038823A1F05F -:1013C0008091140324E0829FF0011124EB5EFC4F16 -:1013D00080829182A282B3828F5F8093140304C0C3 -:1013E000C501B4010E94410F0F3F110508F02ECF37 -:1013F00094C08091100381111FC0043130E51307A0 -:1014000009F051C00E94130881E0809310030E94EC -:101410005F2890930F0380930E031092070310929E -:1014200009031092080310920B0310920A03109202 -:101430000D0310920C0371C080910E0390910F0365 -:101440000E946B28883C910570F480910703E82F77 -:10145000F0E0EE0FFF1FE85FFC4F118300838F5F0A -:10146000809307035AC0043880E5180721F0053837 -:10147000104501F13AC0F7018281882341F01092B2 -:10148000050382E01EC0043830E5130759F580914A -:101490000503811106C086E20E94B81D86E20E9403 -:1014A000801E82E01CC00438F0E51F0741F30538B8 -:1014B0001045D9F4F7018281882331F01092060398 -:1014C00080E20E94CF1E29C080910603811106C0D0 -:1014D00087E20E94B81D87E20E94801E80E20E947F -:1014E000D61E1BC00538104529F381E08093050303 -:1014F00080930603C701A3960FB6F894DEBF0FBE14 -:10150000CDBFDF91CF911F910F91FF90EF90BF90D2 -:10151000AF909F908F900C94DA0580E0A3960FB661 -:10152000F894DEBF0FBECDBFDF91CF911F910F9119 -:10153000FF90EF90BF90AF909F908F900895089587 -:101540009CE0799FF001112490E3899FE00DF11D4B -:101550001124E60FF11DEE0FFF1FE851FE4F85919C -:1015600094910895880F991FFC01E859FF4F8591C8 -:1015700094910895880F991FFC01E851FE4F8591C1 -:10158000949108950F931F93CF93DF93EC018115EE -:1015900021E39207A0F5C11580E3D80708F0D7C072 -:1015A000C83ED105D8F4C03ED10508F007C2C83AFC -:1015B000D10578F4C53AD10508F06AC0C130D1052B -:1015C00009F463C008F4F7C1C430D10508F0F6C1CE -:1015D000F2C1CB3BD10508F466C0EDC1C11590E264 -:1015E000D90708F0AFC0C11521E0D20708F0E6C165 -:1015F000C03FD10508F4DFC18E0110651FC2C0389D -:1016000080E5D80700F5C03790E5D90708F0A3C0FA -:10161000C11520E5D20709F4ACC050F4CE019054B6 -:1016200080319F4008F0C7C1DF708E01106A06C28A -:10163000C13080E5D80709F4AEC0C43190E5D907C0 -:1016400008F4AFC0B8C1C33820E5D20709F48EC092 -:1016500050F4C13890E5D90709F482C008F083C07E -:1016600000E011EDEBC1C03181E5D80708F4A3C15A -:10167000C11597E5D90708F436C1CE0190578115F9 -:10168000904108F098C1DF7093C101E010E0D6C12D -:10169000C53AD10509F494C1C63AD10509F093C100 -:1016A00002E810E4CBC1C83AD10509F48FC1C93AA8 -:1016B000D10509F48EC1CA3AD10509F48DC1CB3ADE -:1016C000D10509F48CC1CC3AD10509F48BC1CD3ACE -:1016D000D10509F48AC1C03BD10509F489C1CE3ACC -:1016E000D10509F488C1CF3AD10509F487C1C13BBE -:1016F000D10509F486C1C23BD10509F485C1C33BBC -:10170000D10509F484C1C43BD10509F483C1C53BAB -:10171000D10509F482C1C63BD10509F481C1C73B9B -:10172000D10509F480C1C83BD10509F47FC1C93B8B -:10173000D10509F47EC1CA3BD10509F47DC100E0A1 -:1017400014E47CC1CE019F700E94BA0A78C1DD27E3 -:101750008E01106C73C1CF70DD278E01146D6EC1C8 -:1017600000E010ED6BC100E012ED68C100E013ED88 -:1017700065C10E9463210E940E0F0E9495088FEFA1 -:1017800094E32CE0815090402040E1F700C000003D -:101790000E94BA2853C18091320481608093320440 -:1017A0004DC10E941B29811102C00E94F7280E948E -:1017B000332990E090935D0480935C04C23080E50F -:1017C000D80721F480915C04816086C0C43090E524 -:1017D000D90721F480915C0482607EC0C63020E588 -:1017E000D20721F480915C04846076C0C83080E523 -:1017F000D80719F480915C0427C0CA3090E5D90756 -:1018000021F480915C04806167C0CC3020E5D20770 -:1018100021F480915C0480625FC0CE3080E5D807FF -:1018200021F480915C04806457C0C03190E5D907F1 -:1018300021F480915C0480684FC0C23120E5D2075A -:1018400029F480915C048460886046C0C33080E5E0 -:10185000D80721F480915C048E7F3EC0C53090E5AE -:10186000D90721F480915C048D7F36C0C73020E514 -:10187000D20721F480915C048B7F2EC0C93080E5B3 -:10188000D80719F480915C0426C0CB3090E5D907C5 -:1018900021F480915C048F7E1FC0CD3020E5D207FB -:1018A00021F480915C048F7D17C0CF3080E5D8078C -:1018B00021F480915C048F7B0FC0C13190E5D90782 -:1018C00021F480915C048F7707C0C331D04531F497 -:1018D00080915C048B7F877F80935C0480915C04A3 -:1018E0000E943729ABC08D2F99278F70992781309F -:1018F0009105D9F49E012370332702C0880F991FE8 -:101900002A95E2F79C688E0144E0000F111F4A956A -:10191000E1F700271370802B912B53E0CC0FDD1FD4 -:101920005A95E1F7C076DD272FC08230910531F45A -:10193000DC2FCC278E01016F106A80C083309105A7 -:1019400069F4CE018370992701E010E002C0000F16 -:10195000111F8A95E2F7C8019C680FC08430910579 -:10196000B9F4CE018370992701E010E002C0000FA6 -:10197000111F8A95E2F7C8019A6823E0CC0FDD1F9A -:101980002A95E1F7C07ED7708C010C2B1D2B56C019 -:101990008530910531F4DC2FCC278E01046F106A5D -:1019A0004DC0069709F04AC0CF71DD27DC2FCC2748 -:1019B0008E01106243C000E010E040C08E013EC0C6 -:1019C00001E810E43BC003E810E438C002EE14E480 -:1019D00035C009EE14E432C00AEE14E42FC005EB62 -:1019E00014E42CC006EB14E429C007EB14E426C071 -:1019F0000CEC14E423C00DEC14E420C003E815E45F -:101A00001DC00AE815E41AC002E915E417C004E98C -:101A100015E414C001E216E411C003E216E40EC09E -:101A200004E216E40BC005E216E408C006E216E480 -:101A300005C007E216E402C00AE216E4C801DF911D -:101A4000CF911F910F9108959CE0799FF00111248F -:101A500090E3899FE00DF11D1124E60FF11DEE0FBB -:101A6000FF1FE851FE4F85919491803E9105E0F46F -:101A7000803C910558F58133910509F46FC048F415 -:101A80008932910509F463C08A32910509F46DC069 -:101A900072C089339105E9F082389105D1F0853320 -:101AA000910509F44DC067C0833E910581F138F47A -:101AB000803E9105B9F0823E9105D9F05CC0863E2A -:101AC000910561F1873E9105A1F155C00E94B20ACE -:101AD000089520915C0420FD02C021FF4CC080EEDF -:101AE00090E049C080915C0480FFF9CF89E390E0E9 -:101AF00042C080915C0482FF0EC080915C0484FF30 -:101B000003C080E090E037C083EE90E034C0809165 -:101B10005C0482FFF2CF82EE90E02DC080915C04E5 -:101B200083FF0BC080915C0484FDEBCF87EE90E0D7 -:101B300022C080915C0483FFF5CF86EE90E01BC04D -:101B400080915C0485FF07C089E290E014C0809119 -:101B50005C0485FFF9CF85E390E00DC080915C04C3 -:101B600086FF07C08AE290E006C080915C0486FF91 -:101B7000F9CF81E390E00E94C20A0895CF92DF92EC -:101B8000EF92FF920F931F9301E010E020E030E00E -:101B90006801790104C0CC0CDD1CEE1CFF1C8A9589 -:101BA000D2F704C0000F111F221F331F6A95D2F70E -:101BB0000C291D292E293F29C0901504D090160408 -:101BC000E0901704F0901804C022D122E222F32200 -:101BD000842FC016D106E206F30641F41F910F913F -:101BE000FF90EF90DF90CF900C94A0251F910F9164 -:101BF000FF90EF90DF90CF900C94C1250C94DC0502 -:101C0000E82FF0E0E257FD4F8081E82FEF70F0E021 -:101C100082958F7021E030E0A90102C0440F551F6A -:101C20008A95E2F740A308950F931F93CF93DF9314 -:101C300085B7806885BF85B7806885BFC3E0D0E081 -:101C400001E010E0FE01E257FD4F8081E82FEF70C8 -:101C5000F0E021A182958F70A80102C0440F551FAA -:101C60008A95E2F7CA01822B81A38C2F0E94000E75 -:101C7000219740F78BE090E061E070E0FC01EE57C7 -:101C8000FD4F2081E22FEF70F0E042A122952F70EE -:101C9000DB0102C0AA0FBB1F2A95E2F79D01242B8E -:101CA00022A3019758F7DF91CF911F910F910C94C8 -:101CB0004008EF92FF920F931F93CF93DF9300E6BC -:101CC00013E0C3E0EE24E394F12CD5E08C2F0E94C6 -:101CD000000E8BE090E040E050E0FC01EE57FD4F3D -:101CE0006081E62FEF70F0E020A130E062956F7028 -:101CF00002C0359527956A95E2F720FD09C0970146 -:101D0000082E02C0220F331F0A94E2F7422B532BF6 -:101D1000019718F7F801929182918F018417950726 -:101D200021F051834083D0931D028C2F0E94000E1E -:101D3000C15060F680911D0287FD2CC081508093B8 -:101D40001D028F3F39F08FE99FE00197F1F700C046 -:101D5000000020C080915E0390915F039093670321 -:101D60008093660380915C0390915D03909365037B -:101D70008093640380915A0390915B039093630373 -:101D8000809362038091580390915903909361036B -:101D9000809360030E94420881E0DF91CF911F9100 -:101DA0000F91FF90EF900895E82FF0E0EE0FFF1FE6 -:101DB000E05AFC4F80819181089508950F931F93FD -:101DC000CF9308E613E0C0E0F801929182918F0171 -:101DD0000E94D727C80FF3E000361F07A9F78C2F02 -:101DE000CF911F910F9108950E941B29811102C06C -:101DF0000E94F7280E944529809347043E9A8091CB -:101E000071008D7F8093710082E0809390008AE161 -:101E10008093910081E080936A03089580916A0322 -:101E2000811102C00E94F40E1092BA031092B903FD -:101E3000809171008D7F80937100809190008F73ED -:101E40008093900010927C0310927B031092B30356 -:101E50001092B4031092B5031092B6031092B2031D -:101E60001092B103E1E9F3E0A1E8B3E0119211921D -:101E7000119211921D921D9283E0E13BF807B1F798 -:101E80000895CF92DF92EF92FF920F931F93CF931B -:101E9000DF9320917B03222309F484C06B017C0132 -:101EA00080916A03811102C00E94F40E01EB13E0DD -:101EB000C7E0D0E0A7019601F8019291829172915A -:101EC00062918F010E94902E811131C0FE01EE0FB0 -:101ED000FF1FEE0FFF1FEF56FC4F10821182128280 -:101EE0001382DE01AA0FBB1FAF57BC4F11961C9285 -:101EF0001E92C730D105E9F0219644815581668153 -:101F000077814083518362837383148215821682A2 -:101F1000178212968D919C91139711969C938E9394 -:101F200013961C921E92129734961296E2CF219726 -:101F300008F68091B9039091BA03019797FD05C007 -:101F40009093BA038093B90304C01092BA0310921D -:101F5000B9038091B9039091BA032091B7033091EE -:101F6000B8032817390724F01092B8031092B7036A -:101F7000892BC1F4809171008D7F809371008091D5 -:101F800090008F73809390001092B3031092B4036B -:101F90001092B5031092B6031092B2031092B103DF -:101FA00010927B03DF91CF911F910F91FF90EF90E3 -:101FB000DF90CF9008951F920F920FB60F921124C9 -:101FC0004F925F926F927F928F929F92AF92BF9249 -:101FD000CF92DF92EF92FF922F933F934F935F93B5 -:101FE0006F937F938F939F93AF93BF93CF93DF9321 -:101FF000EF93FF9380917B03882309F49BC1C091E9 -:10200000B903D091BA031C161D060CF093C1409081 -:102010006B0350906C0360906D0370906E0320E032 -:1020200030E0A901C301B2010E943B3018160CF048 -:1020300065C0C130D10509F452C08091B7039091B9 -:10204000B803BE010E940D327C019093B8038093C7 -:10205000B70380907D0390907E03A0907F03B090A3 -:10206000800320E030E040E85FE3C501B4010E9456 -:102070002C2E60937D0370937E0380937F03909357 -:102080008003F701EE0FFF1FEE0FFF1FEF56FC4F0F -:10209000A301920160817181828193810E94942EBB -:1020A00020E030E040E05EE30E943F309B01AC0165 -:1020B000C501B4010E943B3018168CF4C70101968B -:1020C000BE010E940D329093B8038093B703109223 -:1020D0007D0310927E0310927F0310928003E091A3 -:1020E000B703F091B803EE0FFF1FEE0FFF1FEF567F -:1020F000FC4F6081718182819381D0C0C090B30315 -:10210000D090B403E090B503F090B60320E030E047 -:10211000A901C701B6010E94902E2197882309F4D6 -:10212000A2C0FE01EE0FFF1FEE0FFF1FEF56FC4F88 -:1021300080809180A280B380A5019401C701B6017F -:102140000E94902E87FF31C0A501940160E070E0ED -:102150008CED93EC0E94942E20E030E040E451E4BA -:102160000E94942E20E030E040E05FE30E943F3088 -:102170009B01AC0160E070E080E090E40E94A2303E -:102180009B01AC01C501B4010E943F309B01AC0131 -:10219000C701B6010E94902E87FF07C0A7019601D4 -:1021A00060E070E08CED93E439C0A5019401C701B3 -:1021B000B6010E943B3018160CF055C0A5019401E1 -:1021C00060E070E08CED93E40E94942E20E030E01B -:1021D00040E451E40E94942E20E030E040E05FE3D0 -:1021E0000E943F309B01AC0160E070E080E090E431 -:1021F0000E94A2309B01AC01C501B4010E943F3096 -:102200009B01AC01C701B6010E943B3018165CF57A -:10221000A701960160E070E08CED93EC0E94942E93 -:1022200020E030E040E451E40E94942E20E030E0D1 -:1022300040E05FE30E943F309B01AC0160E070E052 -:1022400080E090E40E94A2309B01AC01C701B6017E -:102250000E943F306093B3037093B4038093B5033F -:102260009093B60313C0FE01EE0FFF1FEE0FFF1F8A -:10227000EF56FC4F80819181A281B3818093B3039B -:102280009093B403A093B503B093B6036091B303E6 -:102290007091B4038091B5039091B60320916803C7 -:1022A000309169032F3F4FEF340731F02F5F3F4FDD -:1022B00030936903209368030E9416146B017C011C -:1022C00020E034E244EF51E40E94902E87FF08C0E2 -:1022D00086EFC82E88E2D82E84EFE82E81E4F82E0F -:1022E00020E030E040E051E4C701B6010E943F30F9 -:1022F0009B01AC0160E074E284E79BE40E94942EB1 -:102300006B017C010E94012F7093970060939600EF -:1023100020911E0230911F02409120025091210213 -:10232000C701B6010E943F300E94012F70939900AF -:102330006093980080917C03882309F433C1C09096 -:102340007703D0907803E0907903F0907A0320E04F -:1023500030E0A901C701B6010E943B301816D4F540 -:1023600080916803909169038F3F2FEF920729F0C6 -:1023700001969093690380936803C701B6010E9498 -:10238000161420E030E040E051E40E943F309B0111 -:10239000AC0160E074E284E79BE40E94942E6B0140 -:1023A0007C010E94012F709397006093960020910A -:1023B0001E0230911F024091200250912102C7015C -:1023C000B6010E943F300E94012F709399006093E4 -:1023D000980008C0109297001092960010929900F1 -:1023E0001092980060917103709172036F5F7F4F3C -:1023F000709372036093710320919600309197005F -:1024000080E090E0232BF1F0C0919600D0919700EE -:102410000E942D2F6B017C01BE0180E090E00E94A4 -:102420002D2F9B01AC016091730370917403809117 -:102430007503909176030E94942E20E03FEF4FE7C2 -:1024400057E410C00E942D2F6B017C0120E030EE7C -:102450004FEF54E46091730370917403809175039E -:10246000909176030E943F309B01AC01C701B601F9 -:102470000E943B3087FD96C080916F038F5F8093F1 -:102480006F0390E020914304309144048217930736 -:10249000A0F080914E04882319F010926F030DC0B4 -:1024A000809171008D7F80937100809190008F7377 -:1024B0008093900010927C037DC080917003C09146 -:1024C0006F03811128C0C0904804D0904904E09067 -:1024D0004A04F0904B0420E030E0A901C701B601A6 -:1024E0000E943B301816BCF481E080937003109278 -:1024F0007703109278031092790310927A03C092B6 -:102500007303D0927403E0927503F0927603C15086 -:10251000C0936F0343C0109270031092690310922E -:102520006803E0914504F091460448E0C49FE00D43 -:10253000F11D112480819181A281B3818093770361 -:1025400090937803A0937903B0937A0320E030E06E -:1025500040E85EE364817581868197810E943F3007 -:102560006B017C0180912202682F70E080E090E096 -:102570000E942D2F20E030E048EC52E40E94942E7F -:102580009B01AC01C701B6010E943F306093730309 -:102590007093740380937503909376031092720383 -:1025A000109271038091470480FD04C010927C0357 -:1025B00010927B03FF91EF91DF91CF91BF91AF918B -:1025C0009F918F917F916F915F914F913F912F914B -:1025D000FF90EF90DF90CF90BF90AF909F908F9043 -:1025E0007F906F905F904F900F900FBE0F901F9055 -:1025F0001895CF92DF92EF92FF92CF93DF936B010A -:102600007C01EA0180916A03811102C00E94F40EEC -:102610008091470480FF46C08091B9039091BA032E -:1026200008970CF03FC0809171008D7F80937100FE -:1026300080917C0381110E940E0F81E080937B03C7 -:10264000109269031092680320E030E0A901C701ED -:10265000B6010E943B301816DCF48091B9039091CA -:10266000BA03FC01EE0FFF1FEE0FFF1FEF56FC4FEA -:10267000C082D182E282F382FC01EE0FFF1FEF578E -:10268000FC4FD183C08301969093BA038093B90322 -:1026900080917100826080937100809190008068C9 -:1026A00080939000DF91CF91FF90EF90DF90CF90DB -:1026B00008958F929F92AF92BF92CF92DF92EF9246 -:1026C000FF920F931F93CF93DF93EC017B01D42EE6 -:1026D0004801590180916A03811102C00E94F40EE1 -:1026E0008091470480FF6BC0809171008D7F809343 -:1026F000710080917B0381110E940E0F81E0809315 -:102700007C03D0934604C0934504F0924404E092C5 -:102710004304D0924E048092480490924904A092BF -:102720004A04B0924B0410927D0310927E031092E3 -:102730007F031092800310926F0388819981AA8190 -:10274000BB818093770390937803A0937903B09330 -:102750007A0320E030E040E85EE36C817D818E8189 -:102760009F810E943F306B017C0180912202682F83 -:1027700070E080E090E00E942D2F20E030E048ECF7 -:1027800052E40E94942E9B01AC01C701B6010E9445 -:102790003F30609373037093740380937503909339 -:1027A000760310927203109271038091710082601F -:1027B0008093710080919000806880939000DF91F9 -:1027C000CF911F910F91FF90EF90DF90CF90BF902E -:1027D000AF909F908F9008958091470481700895E5 -:1027E000809147048160809347040E9449290C949A -:1027F0009C08809147048E7F809347040C9449295C -:102800008091BB0390E0019666E070E00E940D327B -:102810008093BB0308958091BB0390E0019766E02D -:1028200070E00E940D328093BB0308958F929F92B7 -:10283000AF92BF92CF92DF92EF92FF920F931F93CE -:10284000CF93DF936B017C01C0916803D091690342 -:10285000BE0180E090E00E942D2F4B015C01A7019A -:10286000960160E070E08CE594E40E94942E9B0158 -:10287000AC01C501B4010E943F300E94012F20919C -:10288000BB03233009F473C028F4222351F0213014 -:10289000E9F02CC1243009F4A0C0253009F4E0C0CF -:1028A00025C180E090E0A0E0BFE380931E029093FA -:1028B0001F02A0932002B093210210926B0310928A -:1028C0006C0310926D0310926E0310C110926B0393 -:1028D00010926C0310926D0310926E0364317105B7 -:1028E00040F46A30710560F520E030E040E85EE3D6 -:1028F0002BC0693C710508F0AAC080E090E00E94FE -:102900002D2F20E030E040EA51E40E942B2E20E001 -:1029100030E044E353E40E94942E9B01AC010E94FA -:102920003F3020E030E040E05EE30E943F309B011A -:10293000AC0160E070E080E09EE30E942B2E44C07A -:1029400020E030E040E05FE3C701B6010E943F3085 -:102950006B017C0180E090E0A0E0BEE380931E026A -:1029600090931F02A0932002B0932102BFC0109247 -:102970006B0310926C0310926D0310926E034AE089 -:10298000469F9001479F300D1124C90168EB7BE001 -:102990000E94F931BC016C5D754077FF03C07195F1 -:1029A00061957109882777FD8095982F0E942F2FB8 -:1029B0002EE333EC4EE259E30E943F3020E030E05A -:1029C00040EC5EE30E942C2E60931E0270931F0267 -:1029D000809320029093210289C010926B03109281 -:1029E0006C0310926D0310926E03CE0183709927D1 -:1029F000892BE1F0BE016170772780E090E00E94B2 -:102A00002D2F20E030E040E05EE30E943F3020E0E8 -:102A100030E040E45FE30E942C2E60931E0270932E -:102A20001F0280932002909321020CC080E090E06E -:102A3000A0E0BFE380931E0290931F02A0932002A8 -:102A4000B0932102C770DD27CD2B09F04FC0109243 -:102A50001E0210921F02109220021092210246C004 -:102A600010926B0310926C0310926D0310926E0320 -:102A700000E010E020E03FE300931E0210931F02ED -:102A800020932002309321026739710578F180E0AC -:102A900090E00E942D2F20E030E047E153E40E94B7 -:102AA0002B2E20E030E04AE754E40E94942E20E0F0 -:102AB00030E048E452E40E943F3020E030E040EA59 -:102AC00051E40E94712F0E94FC2E660F771F660F43 -:102AD000771FFB01EE56FD4F2081318142815381EA -:102AE000C701B6010E943F306B017C01C701B601EE -:102AF000DF91CF911F910F91FF90EF90DF90CF90DA -:102B0000BF90AF909F908F9008958091CC030895CF -:102B1000CF93DF9300D01F92CDB7DEB79C01809199 -:102B20005304843019F593E099833B832A8390936F -:102B3000E9008FEF9091E800815095FD06C095ED7A -:102B40009A95F1F700008111F5CF8091E80085FF9B -:102B50000DC040E050E063E070E0CE0101960E94BD -:102B6000E9178091E8008E778093E8000F900F902E -:102B70000F90DF91CF910895CF93DF9300D01F92F4 -:102B8000CDB7DEB720915304243021F522E029830C -:102B90009B838A8383E08093E9008FEF9091E80024 -:102BA000815095FD06C095ED9A95F1F700008111D1 -:102BB000F5CF8091E80085FF0DC040E050E063E074 -:102BC00070E0CE0101960E94E9178091E8008E77AF -:102BD0008093E8000F900F900F90DF91CF910895B0 -:102BE000209153042430F1F422E02093E9002FEFE8 -:102BF0003091E800215035FD06C035ED3A95F1F7EA -:102C000000002111F5CF2091E80025FF0BC040E026 -:102C100050E065E070E00E94E9178091E8008E774F -:102C20008093E8000895CF93DF93EC0190915304D3 -:102C3000943009F046C080912D028823D9F080910C -:102C40002E028823B9F09093E9008FEF9091E8006D -:102C5000815095FD06C095E19A95F1F7000081112C -:102C6000F5CF8091E80085FF2CC040E050E060E1A6 -:102C700070E017C081E08093E9008FEF9091E80049 -:102C8000815095FD06C095ED9A95F1F700008111F0 -:102C9000F5CF8091E80085FF14C040E050E068E087 -:102CA00070E0CE010E94E9178091E8008E77809352 -:102CB000E80080E1FE01ACEBB3E001900D928A9553 -:102CC000E1F7DF91CF91089580915204811109C0FD -:102CD0000E947E190E94DB198091E200846080933B -:102CE000E2000895109252040895089508950C94F6 -:102CF000222842E061EC81E00E94F81842E061EC99 -:102D000082E00E94F81842E061EC83E00E94F8182B -:102D100042E161EC84E00C94F81880915504833012 -:102D200009F455C030F4813071F0823009F48EC05E -:102D300008958A3009F47AC08B3009F460C0893074 -:102D400009F09CC020C080915404813A09F096C0DB -:102D50008091E800877F8093E800809158049091EB -:102D60005904892B21F460E18CEB93E003C060E00F -:102D700080E090E070E00E9434188091E8008B774A -:102D80008093E800089580915404813209F076C060 -:102D90008091580490915904009719F0039709F015 -:102DA0006DC08091E800877F8093E8008091E80003 -:102DB00082FD05C0809153048111F8CF5FC08091DE -:102DC000F1008093CC038091E8008B7753C0809111 -:102DD0005404813A09F052C08091580490915904EA -:102DE000892B09F04BC08091E800877F8093E80031 -:102DF0008091E80080FFFCCF80912D0236C0809149 -:102E000054048132D9F58091580490915904892B4A -:102E1000A9F58091E800877F8093E8000E942D1932 -:102E20008091560480932D020C9463218091540468 -:102E3000813221F58091E800877F8093E8000E942D -:102E40002D19809157048093CD03089580915404E7 -:102E5000813AA1F48091E800877F8093E800809117 -:102E6000E80080FFFCCF8091CD038093F10080913A -:102E7000E8008E778093E8000C942D19089584B7AC -:102E8000877F84BF88E10FB6F8948093600010922A -:102E900060000FBE90E080E80FB6F8948093610068 -:102EA000909361000FBE0E94D01C0E947E190E9468 -:102EB000DB198091E20084608093E20078940E94A4 -:102EC000611C0E94D21C83E292E00E947C1C8091D3 -:102ED0005304853069F40E94E327809151048823CC -:102EE000B1F30E941128882391F30E94D317EFCFEA -:102EF0000E94DA1CECCF292F332723303105C9F08B -:102F000064F42130310581F02230310509F043C0ED -:102F10008DE690E024EA39E042C021323105F1F03B -:102F20002232310541F137C082E190E021E13AE0FF -:102F300036C099278130910541F08230910541F0EA -:102F4000892B49F5E0EAF9E005C0E2E7F9E002C0C3 -:102F5000E8E4F9E0849190E09F0121C06430D8F466 -:102F6000E62FF0E0EE0FFF1FE251FD4F208131818F -:102F700089E090E014C0643070F470E0FB01EE0F63 -:102F8000FF1FEA51FD4F20813181FB01EE51FD4FC2 -:102F9000808190E004C080E090E020E030E0FA0121 -:102FA00031832083089580E189BD82E189BD09B420 -:102FB00000FEFDCF8091D8008F7D8093D800809156 -:102FC000E00082608093E0008091E00081FDFCCF12 -:102FD0000895CF92DF92EF92FF920F931F93CF93BA -:102FE000DF93EC018B016A010E944C19811133C0FF -:102FF000C114D10439F0F60180819181081B190BAD -:10300000C80FD91FE12CF12C0115110519F1809180 -:10301000E80085FD16C08091E8008E778093E80077 -:10302000C114D10449F0F60180819181E80EF91EA6 -:10303000F182E08285E00FC00E944C19882321F3C1 -:103040000AC089918093F10001501109FFEFEF1A36 -:10305000FF0ADACF80E0DF91CF911F910F91FF90AF -:10306000EF90DF90CF90089520915A0430915B0447 -:103070002617370748F06115710539F42091E800EB -:103080002E772093E80001C0B90140E06115710579 -:10309000A9F120915304222309F443C0253009F4F7 -:1030A00042C02091E80023FD40C02091E80022FDAD -:1030B00032C02091E80020FFE9CF4091F300209139 -:1030C000F20030E0342BFC01CF016115710559F09D -:1030D0002830310540F481918093F10061507109ED -:1030E0002F5F3F4FF1CF41E02830310509F040E03C -:1030F0002091E8002E772093E800C8CF4111C9CF76 -:103100000AC080915304882361F0853061F080917A -:10311000E80083FD0AC08091E80082FFF2CF80E0E2 -:10312000089582E0089583E0089581E00895209154 -:103130005A0430915B042617370748F06115710572 -:1031400039F42091E8002E772093E80001C0B901FE -:10315000FC0120E06115710591F1809153048823F1 -:1031600009F440C0853009F43FC08091E80083FD38 -:103170003DC08091E80082FD2FC08091E80080FF73 -:10318000E9CF2091F3008091F20090E0922B61153D -:10319000710559F08830910540F424912093F10095 -:1031A0003196615071090196F2CF21E0089709F03C -:1031B00020E08091E8008E778093E800CBCF21114A -:1031C000CCCF0AC080915304882361F0853061F030 -:1031D0008091E80083FD0AC08091E80082FFF2CF71 -:1031E00080E0089582E0089583E0089581E00895E5 -:1031F000982F973058F59093E900981739F070910F -:10320000EC002091ED005091F00003C0242F762FA8 -:1032100050E021FF19C03091EB003E7F3093EB006E -:103220003091ED003D7F3093ED003091EB00316047 -:103230003093EB007093EC002093ED005093F0007E -:103240002091EE0027FF07C09F5FD3CF8F70809340 -:10325000E90081E0089580E008958091540487FF9B -:1032600011C08091E80082FD05C080915304811156 -:10327000F8CF11C08091E8008B770BC08091530488 -:10328000882349F08091E80080FFF8CF8091E80022 -:103290008E778093E80008952091E4003091E50056 -:1032A00095E64091EC00842F817040FF22C0809110 -:1032B000E80080FD1CC080915304882391F0853084 -:1032C00091F08091EB0085FD10C04091E400509199 -:1032D000E5004217530729F39A01915011F784E052 -:1032E000089582E0089583E0089581E0089580E0E4 -:1032F00008954091E80042FFDECF08950E94EC1946 -:103300000E94F419E0EEF0E0808181608083E8EDB6 -:10331000F0E080818F77808319BCA7EDB0E08C91BD -:103320008E7F8C9380818F7E8083109252040895CB -:103330000F931F93CF93DF930E94EC190E94F4190F -:10334000C8EDD0E088818F77888388818068888302 -:1033500088818F7D888319BC1092530410924F048A -:10336000109251041092500400EE10E0F801808198 -:103370008B7F808388818160888342E060E080E089 -:103380000E94F818E1EEF0E080818E7F8083E2EE0B -:10339000F0E0808181608083808188608083F80193 -:1033A00080818E7F8083888180618883DF91CF9147 -:1033B0001F910F910895E8EDF0E080818F7E80836A -:1033C000E7EDF0E080818160808384E082BF81E06E -:1033D000809352040C949819E8EDF0E080818E7F80 -:1033E00080831092E20008951092DA001092E100BA -:1033F00008951F920F920FB60F9211242F933F93AF -:103400004F935F936F937F938F939F93AF93BF93EC -:10341000EF93FF938091E10082FF0BC08091E20067 -:1034200082FF07C08091E1008B7F8093E1000E94C2 -:10343000601C8091DA0080FF1FC08091D80080FF5F -:103440001BC08091DA008E7F8093DA008091D900D2 -:1034500080FF0DC080E189BD82E189BD09B400FE15 -:10346000FDCF81E0809353040E94641605C019BC0F -:10347000109253040E9472168091E10080FF19C0DF -:103480008091E20080FF15C08091E2008E7F8093E2 -:10349000E2008091E20080618093E2008091D80098 -:1034A00080628093D80019BC85E0809353040E9409 -:1034B00076168091E10084FF30C08091E20084FFA5 -:1034C0002CC080E189BD82E189BD09B400FEFDCF39 -:1034D0008091D8008F7D8093D8008091E1008F7E0D -:1034E0008093E1008091E2008F7E8093E2008091E2 -:1034F000E20081608093E20080914F04882311F004 -:1035000084E007C08091E30087FD02C081E001C034 -:1035100083E0809353040E9477168091E10083FF3B -:1035200029C08091E20083FF25C08091E100877F60 -:103530008093E10082E08093530410924F048091C5 -:10354000E1008E7F8093E1008091E2008E7F809386 -:10355000E2008091E20080618093E20042E060E05E -:1035600080E00E94F8188091F00088608093F0005D -:103570000E947516FF91EF91BF91AF919F918F912E -:103580007F916F915F914F913F912F910F900FBE5F -:103590000F901F9018951F920F920FB60F92112443 -:1035A0002F933F934F935F936F937F938F939F934B -:1035B000AF93BF93CF93DF93EF93FF93C091E90055 -:1035C000CF708091EC00D82FD17080FDD0E81092A0 -:1035D000E9008091F000877F8093F00078940E944A -:1035E0000F1B1092E9008091F00088608093F0003A -:1035F000CD2BCF70C093E900FF91EF91DF91CF9178 -:10360000BF91AF919F918F917F916F915F914F91FA -:103610003F912F910F900FBE0F901F9018951F9301 -:10362000CF93DF93CDB7DEB7AA970FB6F894DEBF7E -:103630000FBECDBFE4E5F4E088E08E0F9091F1007D -:1036400091938E13FBCF0E948D168091E80083FF2B -:103650001FC18091540490915504492F50E04A3085 -:10366000510508F015C1FA01EC59FF4F0C942132B5 -:10367000803881F0823809F00BC1809158048F7036 -:103680008093E9008091EB0085FB882780F91092F8 -:10369000E90006C08091500490915104911182601C -:1036A0009091E800977F9093E8008093F10010924A -:1036B000F100C8C0282F2D7F09F0EAC0882319F037 -:1036C000823061F0E5C080915604813009F0E0C09D -:1036D000933009F080E0809351042BC08091560410 -:1036E000811127C0809158048F7009F4D1C0809354 -:1036F000E9002091EB0020FF1CC0933021F4809161 -:10370000EB00806214C09091EB0090619093EB000D -:1037100021E030E0A90102C0440F551F8A95E2F76D -:103720004093EA001092EA008091EB008860809359 -:10373000EB001092E9008091E800877F86C081113C -:10374000A7C0109156041F778091E3008078812BE9 -:103750008093E3008091E800877F8093E8000E94D7 -:103760002D198091E80080FFFCCF8091E3008068F4 -:103770008093E300111102C082E001C083E08093D6 -:10378000530486C08058823008F082C0809156046D -:10379000909157048C3D53E0950779F583E08A8337 -:1037A0008AE289834FB7F894DE01139620E03EE069 -:1037B00051E2E32FF0E050935700E49120FF03C063 -:1037C000E295EF703F5FEF708E2F90E0EA3010F0DF -:1037D000C79601C0C0968D939D932F5F243149F702 -:1037E0004FBF8091E800877F8093E8006AE270E035 -:1037F000CE0101960E94341814C0AE014F5F5F4F96 -:10380000609158040E947B17BC01009709F440C0E6 -:103810009091E800977F9093E80089819A810E94B7 -:1038200097188091E8008B778093E80031C080384A -:1038300079F58091E800877F8093E80080914F04BC -:103840008093F1008091E8008E778093E8000E94D9 -:103850002D191EC081111CC0909156049230C0F4E5 -:103860008091E800877F8093E80090934F040E9446 -:103870002D1980914F04811106C08091E30087FDCE -:1038800002C081E001C084E0809353040E94791655 -:103890008091E80083FF0AC08091E800877F8093D1 -:1038A000E8008091EB0080628093EB00AA960FB64F -:1038B000F894DEBF0FBECDBFDF91CF911F91089569 -:1038C0000895CF93809153048823A1F0C091E9001B -:1038D000CF709091EC00892F817090FD80E8C82B0B -:1038E0001092E9008091E80083FD0E940F1BCF70C9 -:1038F000C093E900CF9108959093D3038093D203AE -:103900000895E091D203F091D303309721F0019014 -:10391000F081E02D099480E00895E091D203F091C8 -:10392000D303309721F00280F381E02D09940895AC -:10393000E091D203F091D303309721F00480F58118 -:10394000E02D099408952091D0033091D10382177E -:10395000930771F09093D1038093D003E091D20349 -:10396000F091D303309721F00680F781E02D099480 -:1039700008952091CE033091CF038217930771F001 -:103980009093CF038093CE03E091D203F091D303C1 -:10399000309721F00084F185E02D09940895089571 -:1039A0000C94CF1C0E9456280E94140E0E94DC2802 -:1039B0000C94902D5F926F927F928F929F92AF9214 -:1039C000BF92CF92DF92EF92FF920F931F93CF930C -:1039D000DF9300D000D01F92CDB7DEB70E94590E02 -:1039E0009DEDC92E93E0D92E03E010E0AA24A39404 -:1039F000B12C502E802F0E94D40E4C01F6017290F3 -:103A000062906F016826792661147104A1F4015057 -:103A1000110978F78FEF89838A831B820E945F28C0 -:103A20008160782F9D838C8349815A816B818D8140 -:103A30000E948A1D38C08091320481FD0E94DD0EF3 -:103A40002BE030E07501022E02C0EE0CFF1C0A9440 -:103A5000E2F7C70186219721892B09F129835A8230 -:103A60008E209F2091E0892809F490E09B830E949A -:103A70005F288160782F9D838C8349815A816B8177 -:103A80008D810E948A1D000F111FF801EB52FC4F1F -:103A900080819181E826F926F182E08204C02150DC -:103AA000310980F6B4CF0E94C82A1091D4030E9435 -:103AB000811C1817D1F00E94811C8093D4030F90B1 -:103AC0000F900F900F900F90DF91CF911F910F915A -:103AD000FF90EF90DF90CF90BF90AF909F908F902E -:103AE0007F906F905F900C94FE0D0F900F900F9051 -:103AF0000F900F90DF91CF911F910F91FF90EF905A -:103B0000DF90CF90BF90AF909F908F907F906F90FD -:103B10005F900895CF93DF93CDB7DEB72B970FB6A5 -:103B2000F894DEBF0FBECDBF4F83588769877A8771 -:103B30008B87DE01119686E0FD0111928A95E9F7E7 -:103B400085E0FE01379601900D928A95E1F7498153 -:103B50005A816B817C818D819E810E9401242B96EC -:103B60000FB6F894DEBF0FBECDBFDF91CF910895A1 -:103B7000CF93882309F4C2C0C82F823859F40E9419 -:103B8000811C81FDBBC089E30E94DB260E94A8271F -:103B900089E30CC0833879F40E94811C80FDAEC09B -:103BA00083E50E94DB260E94A82783E50E941D274B -:103BB000CF910C94A827843859F40E94811C82FD6F -:103BC0009DC087E40E94DB260E94A82787E4EECFF1 -:103BD0008CEF8C0F813A48F48C2F0E94F82C8111C5 -:103BE0008DC08C2F0E94DB26E3CF80E28C0F8830C3 -:103BF00048F4C77081E001C0880FCA95EAF70E94B7 -:103C00006127D6CF8BE58C0F833078F4C53A29F045 -:103C1000C63A31F083E890E005C081E890E002C048 -:103C200082E890E0CF910C94A31C88E58C0F83313F -:103C300008F064C0C83A39F1C93A41F1CA3A49F1C9 -:103C4000CB3A51F1CC3A59F1CD3A61F1C03B69F12F -:103C5000CE3A71F1CF3A79F1C13B81F1C23B89F1A2 -:103C6000C33B91F1C43B99F1C53BA1F1C63BA9F11E -:103C7000C73BB1F1C83BB9F1C93BC1F1CA3BC9F17E -:103C800080E090E038C082EE90E035C089EE90E0B0 -:103C900032C08AEE90E02FC085EB90E02CC086EB1E -:103CA00090E029C087EB90E026C08CEC90E023C028 -:103CB0008DEC90E020C083E891E01DC08AE891E09F -:103CC0001AC082E991E017C084E991E014C081E252 -:103CD00092E011C083E292E00EC084E292E00BC059 -:103CE00085E292E008C086E292E005C087E292E0B9 -:103CF00002C08AE292E0CF910C94B91CCF91089552 -:103D0000882309F44BC0823859F40E94811C81FF3A -:103D100045C089E30E94DB260E94A82789E30CC0E6 -:103D2000833871F40E94811C80FF38C083E50E94B3 -:103D3000DB260E94A82783E50E941D270C94A82754 -:103D4000843859F40E94811C82FF28C087E40E94B5 -:103D5000DB260E94A82787E4EFCF9CEF980F913ACB -:103D600058F390E2980F983050F4877091E001C0BA -:103D7000990F8A95EAF7892F0E946727DFCF9BE585 -:103D8000980F933020F480E090E00C94A31C885AA4 -:103D9000833120F480E090E00C94B91C08958823CE -:103DA00021F00E9461270C94A8270895882321F010 -:103DB0000E9467270C94A82708957F928F929F9264 -:103DC000AF92BF92CF92DF92EF92FF920F931F9329 -:103DD000CF93DF931F92CDB7DEB77C01C62E772E2F -:103DE000FC01058102950F70128111110E947E273E -:103DF0000E94D426882379F0112369F080E28C0D8B -:103E0000883048F082E00E94BD260E94D42691E0CE -:103E1000D82ED92601C0D12CE72DE295EF70F0E025 -:103E2000E259FF4F0C942132872D807F072D0F70B0 -:103E3000882311F00295007F112389F0002309F4F3 -:103E400099C180E28C0D883020F4802F0E94612778 -:103E500003C0802F0E9471270E94A8278BC18C2D40 -:103E60000E94801E002309F4C3C180E28C0D8830BB -:103E700020F4802F0E94672703C0802F0E9477279D -:103E80000E94A827B5C1872D807F972D9F70803213 -:103E900011F4892F03C0892F8295807FCC2021F0D7 -:103EA000F1E0CF16A1F01DC0112339F0002319F164 -:103EB000013009F50E9491279BC1002319F00130C0 -:103EC00009F496C189830E949427898110C1112326 -:103ED00021F0063008F08CC10EC0053008F088C112 -:103EE00006C1112359F0002331F0F701958190FFAD -:103EF00041C19F7095830E94CF1E7AC1002309F4AF -:103F0000F6C03EC1872D86958695837090E0009718 -:103F100019F0019761F06CC1112321F08C2D972DC0 -:103F2000937002C080E090E00E94A31C61C1112345 -:103F300021F08C2D972D937002C080E090E00E94BC -:103F4000B91C56C18C2D112319F00E94D02902C032 -:103F50000E94382A0E94BD2A4BC1872D837009F028 -:103F600052C0111145C18C2D829586958770880F9E -:103F7000880F9C2D9F70892E912CA12CB12C082E7E -:103F800004C0880C991CAA1CBB1C0A94D2F7C4FE5E -:103F900014C00FE010E020E030E0B901A80104C037 -:103FA000440F551F661F771F8A95D2F7CB01BA01C0 -:103FB000609570958095909503C060E070E0CB01AE -:103FC000272D26952695237030E02230310569F0A3 -:103FD0002330310589F0682979298A299B292130E4 -:103FE000310571F00E94492503C1682979298A2980 -:103FF0009B290E946525FCC00E944925C501B4018A -:104000000E942D25F5C0112319F0872D817001C064 -:104010008695882309F4ECC08C2D8295869587704F -:10402000880F880F9C2D9F70892E912CA12CB12C6C -:10403000082E04C0880C991CAA1CBB1C0A94D2F739 -:10404000C4FE14C00FE010E020E030E0B901A80188 -:1040500004C0440F551F661F771F8A95D2F7CB0106 -:10406000BA01609570958095909503C060E070E00E -:10407000CB01272D269526952370422F50E0423004 -:10408000510569F04330510589F0682979298A2959 -:104090009B294130510571F00E942326A9C068294F -:1040A00079298A299B290E943F26A2C00E942326A3 -:1040B000C501B4010E9407269BC08C2D90E0FC0135 -:1040C000E05EF109E531F10508F050C0E258FF4F1C -:1040D0000C9421320C2D0F70872D8F71112321F03C -:1040E0000E94A025802F07CF0E94C125802F0E940B -:1040F000D61E7EC0112341F0053008F079C0872D0F -:104100008F710E94E62574C0063008F071C0F7CFA9 -:10411000112339F0872D8F710E94A02569C01123CA -:10412000C9F3872D8F710E94C12562C0112329F028 -:10413000872D8F710E948B255BC00E94812558C0FE -:10414000112351F0172D1F71812F0E94A02563E0CC -:10415000812F0E94B4264CC081E00E94BD2602300F -:1041600008F446C082E00E94BD2642C0112331F00F -:10417000002381F28C2D0E94B81D3AC0002389F2E1 -:104180008C2D0E94801E34C0472D4F706C2DC701AE -:104190000E94E0060E94A5242BC0111129C0472DC2 -:1041A0004F7050E042305105B9F04CF441155105C3 -:1041B00081F041305105E1F40E94B82D19C043301F -:1041C000510569F04430510599F48C2D0E940A2E56 -:1041D0000FC00E94A12D0CC00E94D42D09C00E94C6 -:1041E000E72D06C0472D4F706C2DC7010E949F0A16 -:1041F000DD20F9F00E94B02680FD1BC0F70112827D -:104200000E94AA260E94A025C7010E9428210E9480 -:10421000AA260F90DF91CF911F910F91FF90EF9001 -:10422000DF90CF90BF90AF909F908F907F900C9435 -:10423000C1250F90DF91CF911F910F91FF90EF90CB -:10424000DF90CF90BF90AF909F908F907F90089518 -:104250000F931F93CF93DF93EC01888199812B817A -:104260003C81232BB9F09F3F11F48F3F99F0CE0191 -:104270000E949E08882371F0688179818A810E945A -:10428000A6268C010E945B260E942225B801CE0141 -:104290000E94DD1EDF91CF911F910F9108950E9422 -:1042A0007E270E948E270E9453270E94A8270E94E3 -:1042B0006E2B0E94BD2A80E090E00E94A31C80E04B -:1042C00090E00C94B91C0E946E270C944F210E9420 -:1042D0009B26292F22952F7030E02C3031054CF48D -:1042E0002A3031056CF42250310922303105A8F40E -:1042F00007C02C30310569F02F30310551F00DC069 -:10430000803F69F018F4803E40F409C0843F29F4EE -:1043100006C093FB882780F9089580E0089581E026 -:104320000895CF93DF9300D000D01F92CDB7DEB7B2 -:104330000F900F900F900F900F90DF91CF910895F5 -:10434000CF93DF9300D000D000D0CDB7DEB7269654 -:104350000FB6F894DEBF0FBECDBFDF91CF910895A9 -:104360001F93CF93DF93C091DD0316E08091DE03AE -:10437000C81799F0D0E01C9FF0011D9FF00D11248B -:10438000E152FC4F4081518162817381848195812A -:104390000E94A0212196C770E9CFDF91CF911F9194 -:1043A000089540910F045091100460911104709190 -:1043B000120480911304909114040C94A021809114 -:1043C000140482958F7009F054C0809111048823E1 -:1043D00009F44FC08091DD03A091DE0360910F04CA -:1043E000709110044091120450911304B6E08A17A2 -:1043F00009F43FC090E041155105C1F17F3F11F430 -:104400006F3FA1F1B89FF001B99FF00D1124E15267 -:10441000FC4F218172132AC02081621327C02281A0 -:10442000211124C0238134812417350710F4215031 -:104430003109241B350B283C3105C0F420911404AC -:104440002F7020612093140426E0289FF001299FFB -:10445000F00D1124EC51FC4F80818F7080618083BE -:104460008FE094E00E9428210C94B021019687707F -:10447000BECF0895CF92DF92EF92FF920F931F93DA -:10448000CF93DF93CDB7DEB762970FB6F894DEBF58 -:104490000FBECDBF8C0185E0F801DE011D960190B5 -:1044A0000D928A95E1F7D8014C9111965C91119784 -:1044B00012966C9112971396CD90DC9014973091D0 -:1044C0000F047091100480911204909113040097CE -:1044D00009F46BC17F3F19F43F3F09F466C1E090D6 -:1044E0001104EE2009F4C0C020911404C816D906A6 -:1044F00028F0F601E81BF90BCF0104C080959095D8 -:104500008C0D9D1DFF24F394883C910578F0F12CCF -:10451000207F09F0C6C07C2DD98AC88A89890E946B -:1045200091218FE094E00E942821B1C0822F807FEA -:1045300009F046C0751314C0341312C0611110C0C5 -:104540002F702061209314040E94D1218FE094E009 -:104550000E94282180911404D80115968C932EC0B6 -:10456000CD2819F15F3F11F44F3FF9F0F62E61119C -:104570001CC08091DD032091DE0336E0821709F430 -:104580005AC090E0389FF001399FF00D1124E1529C -:10459000FC4F7181571306C07081471303C07281AD -:1045A000711103C001968770E9CFF62E662309F4D6 -:1045B00018C180911404816080931404F12C11C1FE -:1045C000751308C0341306C0611104C0809114042F -:1045D000D801C3C04D875E878D859E856A8B0E94FA -:1045E00067216A898823E1F16623D1F120911404BF -:1045F000822F82958F7090E0029774F080910F0463 -:104600009091100498878F831986DB86CA862C8741 -:10461000CE0107960E94282186E0F801AFE0B4E0C1 -:1046200001900D928A95E1F70E94DF210E94D1212D -:10463000FF24F394D6C04D875E878D859E850E94AA -:104640009B26292F22952F7030E0223031050CF067 -:10465000BCC09F7009F0B6C0805E883008F4C1C04D -:10466000C8010E942821E4CFC816D90608F453C017 -:10467000F601E81BF90BCF01883C910508F450C006 -:10468000F12C7C2DD98AC88A89890E949121EFE07A -:10469000F4E086E0DF011D928A95E9F70E94D121BE -:1046A000A0C0751314C0341312C0611110C08091E2 -:1046B0001404F8018583C8010E94282186E0EFE0F8 -:1046C000F4E0DF011D928A95E9F7FE2C8AC04D8740 -:1046D0005E878D859E856A8B0E9467216A89882303 -:1046E00009F4BECF662309F4BBCF20911404822FB6 -:1046F00082958F7090E002970CF48ECF80910F041A -:10470000909110049A8389831B82DD82CC822E8350 -:10471000CE0101967FCF809590958C0D9D1DACCFDD -:10472000F62E662309F49CCF75132EC034132CC0CB -:104730002091140420FD1FC0822F82958F70D9F024 -:10474000D80115962C9315978F3049F08F5F982FCD -:104750009295907F822F8F70892B15968C93C8012C -:104760000E94282186E0F801AFE0B4E001900D92AC -:104770008A95E1F793CF86E0F801AFE0B4E00190CD -:104780000D928A95E1F72DC04D875E878D859E85B8 -:104790000E946721811140CF809114048160809331 -:1047A0001404C8010E9428211CC0662309F458CFB4 -:1047B0004D875E878D859E850E946721882309F439 -:1047C0004FCF2ACF811148CF0CC0243031050CF0D7 -:1047D00047CF9F7009F440CFF8019581907F09F091 -:1047E0003BCF8F2D62960FB6F894DEBF0FBECDBFC4 -:1047F000DF91CF911F910F91FF90EF90DF90CF90BD -:1048000008951F93CF93DF93CDB7DEB72C970FB6E4 -:10481000F894DEBF0FBECDBF4F83588769877A8774 -:104820008B879C87CE0107960E943A22882369F0E5 -:104830008F8198852A853B85232BF1F19F3F09F0D5 -:1048400063C08F3F09F060C037C086E0FE01379635 -:10485000DE01119601900D928A95E1F76F817885BE -:10486000EA85FB85309741F17F3F11F46F3F21F1DD -:104870002091DE0330E0C9010196877099274091AD -:10488000DD0350E08417950709F447C069837A83F4 -:10489000FD83EC8396E0929FD001939FB00D11248D -:1048A000A152BC4FFE01319601900D929A95E1F70D -:1048B0008093DE030E94B02116E08091DD03909189 -:1048C000DE038917C1F1189FC001112481529C4F4A -:1048D0000E943A22882379F1E091DD031E9FF001C6 -:1048E0001124E152FC4F40815181628173818481A6 -:1048F00095810E94A0218091DD0390E00196877050 -:1049000099278093DD03D9CF4F81588569857A85B2 -:104910008B859C850E94A021CFCF0E94632110929D -:10492000DE031092DD03EFE0F4E086E0DF011D928C -:104930008A95E9F7C1CF2C960FB6F894DEBF0FBE6B -:10494000CDBFDF91CF911F910895EF92FF920F930A -:104950001F93CF93DF938C01009709F46CC0F12C67 -:10496000EE24E394E8012196F8018491843740F421 -:10497000843008F051C0813081F0823019F15BC081 -:10498000853709F444C0A8F19CE7980F903708F0E8 -:1049900052C08F770E94801E41C00E5F1F4FFE01E4 -:1049A000C49180E28C0F883048F4C7708E2D01C00E -:1049B000880FCA95EAF70E94812714C08C2F0E94A5 -:1049C000B81D2DC00E5F1F4FFE01C49180E28C0FF9 -:1049D000883058F4C7708E2D01C0880FCA95EAF749 -:1049E0000E9487270E94A8271AC08C2F0E94801E31 -:1049F00016C00E5F1F4FFE01C491CC2381F08FE9DA -:104A00009FE00197F1F700C00000C150F6CF0E5FA4 -:104A10001F4FFE01F49003C00E94B81D8E018F2D20 -:104A2000882309F49FCFEFE9FFE03197F1F700C049 -:104A300000008150F5CFDF91CF911F910F91FF9032 -:104A4000EF90089508956093190470931A04809369 -:104A50001B0490931C040C944F210F931F930091FF -:104A6000190410911A0420911B0430911C04DC01DC -:104A7000CB01802B912BA22BB32B80931904909305 -:104A80001A04A0931B04B0931C041F910F910C9463 -:104A90004F210F931F930091190410911A04209134 -:104AA0001B0430911C04DC01CB0180239123A22341 -:104AB000B3238093190490931A04A0931B04B0931A -:104AC0001C041F910F910C944F210F931F93009181 -:104AD000190410911A0420911B0430911C04DC016C -:104AE000CB0180279127A227B327809319049093A5 -:104AF0001A04A0931B04B0931C041F910F910C94F3 -:104B00004F2110921504109216041092170410925F -:104B100018040C944F2141E050E060E070E004C0C4 -:104B2000440F551F661F771F8A95D2F740931504CF -:104B30005093160460931704709318040C944F213B -:104B400041E050E060E070E004C0440F551F661F74 -:104B5000771F8A95D2F78091150490911604A09141 -:104B60001704B0911804482B592B6A2B7B2B4093C8 -:104B700015045093160460931704709318040C9452 -:104B80004F2141E050E060E070E004C0440F551F49 -:104B9000661F771F8A95D2F740955095609570955E -:104BA0008091150490911604A0911704B0911804F7 -:104BB000482359236A237B234093150450931604FA -:104BC00060931704709318040C944F2141E050E057 -:104BD00060E070E004C0440F551F661F771F8A9580 -:104BE000D2F78091150490911604A0911704B0910A -:104BF0001804482759276A277B27409315045093A8 -:104C0000160460931704709318040C944F210F93AB -:104C10001F930091150410911604209117043091F0 -:104C20001804DC01CB01802B912BA22BB32B80939A -:104C3000150490931604A0931704B09318041F91C1 -:104C40000F910C944F210F931F9300911504109115 -:104C500016042091170430911804DC01CB01802345 -:104C60009123A223B3238093150490931604A09359 -:104C70001704B09318041F910F910C944F210F93B8 -:104C80001F93009115041091160420911704309180 -:104C90001804DC01CB0180279127A227B32780933A -:104CA000150490931604A0931704B09318041F9151 -:104CB0000F910C944F210895CF92DF92EF92FF92C3 -:104CC0000F931F93CF93DF938C01C0901904D09062 -:104CD0001A04E0901B04F0901C048091150490913C -:104CE0001604A0911704B0911804C82AD92AEA2AF8 -:104CF000FB2ACFE1D0E0D701C6010C2E04C0B69547 -:104D0000A795979587950A94D2F780FF06C0B801BA -:104D10008C2F0E94240D019721F4219760F780E0E9 -:104D200001C08C2FDF91CF911F910F91FF90EF90D9 -:104D3000DF90CF900895CF93DF93EC010E945C2623 -:104D4000BE010E94240DDF91CF910895CB010E94F6 -:104D50009B26089580911D048595859585950895D8 -:104D600080911D048770089598E0899F9001112417 -:104D7000262B20931D040C94A02520911D048095C2 -:104D8000822380931D04982F977069F430E0482F98 -:104D9000552747FD50952417350729F085958595AA -:104DA00085950C94C125089590911D04977081E01C -:104DB00009F480E0089590912D02992321F09091BB -:104DC0002E02911109C020912F0230913002F90179 -:104DD00032969FEF40E01FC0982F96959695969536 -:104DE0009F3050F5E0912F02F0913002E90FF11D54 -:104DF000877021E030E0A90102C0440F551F8A9559 -:104E0000E2F7CA019181892B818308959F3F39F090 -:104E10004F5F4E3041F051915813F8CF0DC05111F2 -:104E2000F7CF942FF5CF9F3F39F0F901E90FF11D2E -:104E300097FDFA9582830895089590912D02992304 -:104E400021F090912E02911109C020912F023091F2 -:104E50003002F9013296205F3F4F1FC0982F969580 -:104E6000969596959F30F0F4E0912F02F0913002E4 -:104E7000E90FF11D877021E030E0A90102C0440F65 -:104E8000551F8A95E2F7CA01809591818923818314 -:104E900008953196E217F30729F090819813F9CF1E -:104EA0001082F7CF089581E090E0E0912F02F09119 -:104EB0003002E80FF91F1082019680319105A9F7A1 -:104EC000089590913104892B809331040895809541 -:104ED0009091310489238093310408951092310414 -:104EE000089590913004892B809330040895809523 -:104EF00090913004892380933004089510923004F7 -:104F0000089590912F04892B80932F040895809504 -:104F100090912F04892380932F04089510922F04D9 -:104F2000089580931E04089510921E0408958091A0 -:104F30002F0290913002FC0131969C01205F3F4F7F -:104F400080E0919191118F5FE217F307D1F70895F7 -:104F5000E0912F02F0913002809131048083E09142 -:104F60002F02F0913002908180913004892B808350 -:104F7000E0912F02F0913002908180912F04892BD3 -:104F8000808380911E04882361F0E0912F02F091CC -:104F900030029081892B80830E9497278111109283 -:104FA0001E0480912F02909130020C948D1C20E001 -:104FB000009739F0AC0141505109842395232F5FAC -:104FC000F7CF822F089580915304843039F11092E5 -:104FD000330420E488E190E00FB6F894A89580931C -:104FE00060000FBE2093600080E00E940E0680E00B -:104FF0000E94FE0D83B7817F846083BF83B7816089 -:1050000083BF7894889583B78E7F83BF88E10FB67E -:10501000F89480936000109260000FBE0895089588 -:10502000089580E00E940E060E940F280E94590EEB -:105030000E9410280E94DE0E91E0811101C090E0D4 -:10504000892F08950E94632180E00E940E060E942D -:10505000902D0E94811C0C94FE0D1F920F920FB692 -:105060000F9211248F939F93AF93BF93809133043A -:10507000811113C08091340490913504A0913604BD -:10508000B09137044196A11DB11D809334049093D3 -:105090003504A0933604B0933704BF91AF919F912C -:1050A0008F910F900FBE0F901F90189582E084BDD6 -:1050B00093E095BD9AEF97BD80936E0008952FB74A -:1050C000F8948091340490913504A0913604B09105 -:1050D00037042FBF0895CF92DF92EF92FF920F9384 -:1050E0001F932FB7F8944091340450913504609188 -:1050F0003604709137042FBF6A017B01EE24FF2430 -:105100008C0120E030E0C016D106E206F30610F470 -:10511000415051099A01281B390BC9011F910F9168 -:10512000FF90EF90DF90CF9008951F920F920FB6EF -:105130000F9211248F939F93AF93BF938091340468 -:1051400090913504A0913604B09137040196A11DC9 -:10515000B11D8093340490933504A0933604B0932A -:105160003704BF91AF919F918F910F900FBE0F9019 -:105170001F9018950E947E19F8942FEF87EA91E608 -:10518000215080409040E1F700C0000087E090EBA4 -:10519000DC0180935E0490935F04A0936004B0935D -:1051A00061049CE088E10FB6F894A89580936000B4 -:1051B0000FBE90936000FFCF0E941B29811102C097 -:1051C0000E94F7280E942629809332040E943329E6 -:1051D00080935C0487FB882780F980932E020E94CD -:1051E0002A29682F70E080E090E00C9423256DEE72 -:1051F0007EEF80E090E00E94473260E082E090E045 -:105200000E94353260E083E090E00E94353260E039 -:1052100084E090E00E94353260E085E090E00E94FA -:10522000353260E086E090E00E9435326FEF87E033 -:1052300090E00C94353280E090E00E942F3221E023 -:105240008D3E9E4F09F020E0822F089582E090E08D -:105250000C94273283E090E00C942732682F83E08F -:1052600090E00C94353284E090E00C942732682F63 -:1052700084E090E00C94353286E090E00C94273284 -:10528000682F86E090E00C94353287E090E00C9433 -:105290002732682F87E090E00C94353280913A04F1 -:1052A00080FF0BC06091340285E0689FB00111243B -:1052B00075956795759567952BC081FF09C06091BD -:1052C000340285E0689FB00111247595679520C070 -:1052D00082FF07C06091340285E0689FB00111240D -:1052E00017C090913B049923D1F060913302961737 -:1052F00088F72091340285E0289F90011124929F25 -:10530000A001939F500D112470E0CA010E940D323C -:105310006038710540F46115710539F002C065E02F -:1053200070E0862F08958FE7089581E008958091B9 -:105330003A0480FF08C06091320270E0759567956D -:105340007595679521C081FF06C06091320270E0BB -:105350007595679519C082FF04C06091320270E0B4 -:1053600010C090913B049923C1F0609131029617CF -:10537000A0F780913202899FC001112470E00E9441 -:105380000D326038710528F46115710521F0862F02 -:1053900008958FE7089581E0089561E070E0F4CF0B -:1053A000803F21F40E944E29819504C0813F29F459 -:1053B0000E944E2980933E040895823F21F40E946A -:1053C0004E29819504C0833F29F40E944E29809381 -:1053D0003D040895893F19F40E94972905C08A3F2A -:1053E00031F40E949729819580933F0408958B3F63 -:1053F00021F40E949729819504C08C3F29F40E94D2 -:105400009729809340040895843F21F480913C04BF -:10541000816017C0853F21F480913C04826011C0F7 -:10542000863F21F480913C0484600BC0873F21F4C7 -:1054300080913C04886005C0883F31F480913C0431 -:10544000806180933C0408958D3F21F480913A045B -:1054500081600BC08E3F21F480913A04826005C0C8 -:105460008F3F29F480913A04846080933A04089530 -:10547000803F39F480913E0487FF6CC010923E0457 -:1054800069C0813F29F480913E041816BCF362C0C4 -:1054900090913D04823F29F497FF5CC010923D0437 -:1054A00059C0833F19F41916CCF354C0893F41F415 -:1054B00080913F0418160CF04DC010923F044AC072 -:1054C0008A3F29F480913F0487FF44C0F6CF8B3F89 -:1054D00039F48091400487FF3DC0109240043AC0E7 -:1054E0008C3F29F4809140041816BCF333C0843FEC -:1054F00021F480913C048E7F17C0853F21F4809178 -:105500003C048D7F11C0863F21F480913C048B7F49 -:105510000BC0873F21F480913C04877F05C0883F02 -:1055200031F480913C048F7E80933C0413C08D3F06 -:1055300021F480913A048E7F0BC08E3F21F480913C -:105540003A048D7F05C08F3F29F480913A048B7F08 -:1055500080933A0480913D0481110EC080913E04F5 -:1055600081110AC080913F04811106C080914004DE -:10557000811102C010923B0408958CE394E00E94D4 -:10558000981C0E945F2890933904809338040895F2 -:105590001F93CF93DF9380913804909139040E9438 -:1055A0006B28AC0190913B04992321F020913502A6 -:1055B00030E006C0209136028AE0289F9001112435 -:1055C0004217530708F486C080913D04C0913E0401 -:1055D000D0913F0410914004811107C0C11176C0E1 -:1055E000D11174C0111172C075C09F3F19F09F5F37 -:1055F00090933B04181624F40E944E2980933D0496 -:1056000080913D0487FF05C00E944E2981958093BB -:105610003D041C1624F40E944E2980933E04809180 -:105620003E0487FF05C00E944E29819580933E0469 -:1056300060913D04662339F1C0913E04CC2319F1F9 -:10564000772767FD7095872F972F0E942F2F23E3D1 -:1056500033E343E35FE30E943F300E94FC2E6093FC -:105660003D046C2F772767FD7095872F972F0E9439 -:105670002F2F23E333E343E35FE30E943F300E9495 -:10568000FC2E60933E041D1624F40E9497298093FB -:105690003F0480913F0487FF05C00E9497298195B0 -:1056A00080933F04111624F40E94972980934004AC -:1056B0008091400487FF05C00E94972981958093BF -:1056C0004004DF91CF911F910C94BD2A9F3F09F0B8 -:1056D0008ECF96CFDF91CF911F910895ECE3F4E048 -:1056E00085E0DF011D928A95E9F710923B04109244 -:1056F0003A040895833081F128F4813059F08230E2 -:10570000D1F00895853009F449C0B8F1863009F424 -:1057100056C0089580913602262F30E0280F311DA3 -:105720002F3F310524F4680F6093360208958FEF00 -:1057300080933602089580913502262F30E0280F9D -:10574000311D2F3F310524F4680F60933502089511 -:105750008FEF80933502089580913402262F30E038 -:10576000280F311D2F3F310524F4680F6093340258 -:1057700008958FEF80933402089580913302262F8D -:1057800030E0280F311D2F3F310524F4680F60935E -:10579000330208958FEF809333020895809132028F -:1057A000262F30E0280F311D2F3F310524F4680FDC -:1057B0006093320208958FEF8093320208958091B2 -:1057C0003102262F30E0280F311D2F3F310524F400 -:1057D000680F6093310208958FEF8093310208952E -:1057E000833011F128F4813049F0823091F008952E -:1057F000853081F120F18630C1F108958091360223 -:10580000681720F4861B80933602089510923602A2 -:10581000089580913502681720F4861B8093350225 -:10582000089510923502089580913402681720F48B -:10583000861B80933402089510923402089580915B -:105840003302681720F4861B809333020895109268 -:105850003302089580913202681720F4861B8093EA -:105860003202089510923202089580913102681731 -:1058700020F4861B8093310208951092310208951E -:105880000F931F93873208F048C08E3108F08DC007 -:10589000803109F477C008F5873009F461C068F4F5 -:1058A000863009F09DC080913204817F8E7F809385 -:1058B000320481E08093420494C08B3009F489C0A3 -:1058C0008E3009F08DC08091320482FB222720F9AE -:1058D00091E0922790FB82F95EC0863109F479C08D -:1058E00060F4813109F07CC00E94632190912E0206 -:1058F00081E0892780932E026CC0893109F469C048 -:105900008B3109F06DC08091320481FB222720F990 -:1059100091E0922790FB81F93EC0883309F459C089 -:1059200050F4893209F457C0853309F454C08732E2 -:1059300009F451C055C0833409F44DC028F48A33AA -:1059400008F44EC0895332C0883409F049C00E941F -:1059500063210E940E0F0E9495080E94BA2839C048 -:1059600090913204892F8095817080FB90F929F005 -:10597000966098609093320434C0997F977F90939B -:10598000320427C08091320483FB222720F991E062 -:10599000922790FB83F9809332049923D1F0809170 -:1059A000320481608093320414C08D5141E050E094 -:1059B00060E070E08A019B0104C0000F111F221FEC -:1059C000331F8A95D2F7C901B8010E9423250E948E -:1059D000632181E006C061E070E080E090E0F5CFF7 -:1059E00080E01F910F91089580E0089580E0089570 -:1059F000CF93C82F80914204813069F018F0823033 -:105A0000C9F184C0E0912F02F0913002808182328E -:105A100009F07EC007C0E0912F02F0913002808132 -:105A2000823261F48C2F0E94F42C811104C08C2FDF -:105A30000E94402C1DC081E090E01AC08C2F0E9473 -:105A4000F62C811114C0C43179F048F4CB3079F0D0 -:105A5000C03109F061C082E08093420408C0C932BD -:105A600019F0C83321F058C01092420455C081E0AB -:105A7000817054C0C93291F120F5C43179F1B0F48C -:105A8000C73009F047C08EE18093360282E38093ED -:105A900035028AE08093340284E18093330288E007 -:105AA0008093320288E28093310234C0CE51C630F6 -:105AB00088F5EC2FF0E0EA50FD4F8081809341049F -:105AC00029C0CE34E9F020F4CB3421F56AE013C0CC -:105AD000C13579F0C235F1F461E00DC08091410427 -:105AE000882319F01092410415C081E0809342048C -:105AF00015C061E006C0809141040E947A2B0AC063 -:105B00006AE0809141040E94F02B04C0109242048C -:105B100080E004C081E002C080E0AACFCF91089568 -:105B20000E941B29811102C00E94F7280E943C2973 -:105B300080935D0480FF02C0869501C080E00C94D4 -:105B40000E0680915D04982F9695292F30E0233022 -:105B500031054CF49F5F990F8170892B8160809390 -:105B60005D040E94402980915D0486950C940E0688 -:105B700080915D04982F969591F09158990F8170BE -:105B8000892B80935D048E7F91E009F490E08091F1 -:105B90005D0490FB80F980935D040E944029809110 -:105BA0005D0486950C940E0680915D04982F909567 -:105BB00090FB80F980935D040E94402980915D04F0 -:105BC00080FF02C0869501C080E00C940E06909183 -:105BD0005D04892F86958F5F8F779170843028F4CC -:105BE000880F892B80935D0402C090935D0480919F -:105BF0005D048E7F91E009F490E080915D0490FB5C -:105C000080F980935D040E94402980915D0486950F -:105C10000C940E0620915D04922F96958927982F5B -:105C2000990F822F8170892B80935D048E7F91E084 -:105C300009F490E080915D0490FB80F980935D040D -:105C40000E94402980915D0486950C940E068091F7 -:105C50005D04869508955058BB27AA270ED0D1C160 -:105C6000C2D130F0C7D120F031F49F3F11F41EF4BF -:105C7000B7C10EF4E095E7FB9FC1E92FD3D180F3C4 -:105C8000BA17620773078407950718F071F49EF539 -:105C9000EBC10EF4E0950B2EBA2FA02D0B01B9012C -:105CA00090010C01CA01A0011124FF27591B99F092 -:105CB000593F50F4503E68F11A16F040A22F232F9E -:105CC000342F4427585FF3CF469537952795A795EE -:105CD000F0405395C9F77EF41F16BA0B620B730B95 -:105CE000840BBAF09150A1F0FF0FBB1F661F771F06 -:105CF000881FC2F70EC0BA0F621F731F841F48F4BB -:105D0000879577956795B795F7959E3F08F0B3CF40 -:105D10009395880F08F09927EE0F9795879508952A -:105D200027D108F481E008950CD06BC163D140F015 -:105D30005AD130F021F45F3F19F03EC1511195C1A5 -:105D40004FC170D198F39923C9F35523B1F3951B33 -:105D5000550BBB27AA2762177307840738F09F5F8C -:105D60005F4F220F331F441FAA1FA9F333D00E2EFB -:105D70003AF0E0E830D091505040E695001CCAF768 -:105D800029D0FE2F27D0660F771F881FBB1F26172D -:105D900037074807AB07B0E809F0BB0B802DBF0100 -:105DA000FF2793585F4F2AF09E3F510568F004C1CA -:105DB0005CC15F3FECF3983EDCF386957795679581 -:105DC000B795F7959F5FC9F7880F911D96958795B1 -:105DD00097F90895E1E0660F771F881FBB1F6217D0 -:105DE00073078407BA0720F0621B730B840BBA0B8E -:105DF000EE1F88F7E095089504D06894B11135C17D -:105E0000089518D188F09F5790F0B92F9927B7516E -:105E1000A0F0D1F0660F771F881F991F1AF0BA956E -:105E2000C9F712C0B13081F01FD1B1E008951CC193 -:105E3000672F782F8827B85F39F0B93FCCF3869564 -:105E400077956795B395D9F73EF4909580957095C1 -:105E500061957F4F8F4F9F4F0895E89409C097FB3E -:105E60003EF490958095709561957F4F8F4F9F4F31 -:105E70009923A9F0F92F96E9BB279395F695879575 -:105E800077956795B795F111F8CFFAF4BB0F11F438 -:105E900060FF1BC06F5F7F4F8F4F9F4F16C08823DF -:105EA00011F096E911C0772321F09EE8872F762F15 -:105EB00005C0662371F096E8862F70E060E02AF056 -:105EC0009A95660F771F881FDAF7880F9695879542 -:105ED00097F9089588D018F011F08CD038F480C06C -:105EE000C4C0E92F9FD0B0F35523C9F3E7FB621775 -:105EF000730784079507A8F199F3E92FFF278823F3 -:105F00002AF03197660F771F881FDAF7952F5527EC -:105F1000442332F091505040220F331F441FD2F7D8 -:105F2000BB27E91BF50B621B730B840BB109C1F294 -:105F300022F4620F731F841FB11D31972AF0660F80 -:105F4000771F881FBB1FEFCF915050405AF041F090 -:105F5000882332F0660F771F881F91505040C1F799 -:105F6000939530C08695779567959F5FD9F7F8CF61 -:105F7000990F0008550FAA0BE0E8FEEF161617065A -:105F8000E807F907C0F012161306E407F50798F0C2 -:105F9000621B730B840B950B39F40A2661F0232BDB -:105FA000242B252B21F408950A2609F4A140A69557 -:105FB0008FEF811D811D089597F99F6780E870E03C -:105FC00060E008959F3F31F0915020F487957795D8 -:105FD0006795B795880F911D9695879597F90895C0 -:105FE0009FEF80EC089500240A94161617061806F1 -:105FF0000906089500240A941216130614060506CD -:106000000895092E0394000C11F4882352F0BB0F5D -:1060100040F4BF2B11F460FF04C06F5F7F4F8F4FC0 -:106020009F4F089557FD9058440F551F59F05F3FFB -:1060300071F04795880F97FB991F61F09F3F79F0AA -:1060400087950895121613061406551FF2CF46952C -:10605000F1DF08C0161617061806991FF1CF8695AE -:106060007105610508940895E894BB276627772792 -:10607000CB0197F908957CDF08F48FEF08950BD0DA -:10608000C0CFB1DF28F0B6DF18F0952309F094CF28 -:10609000A7CF1124EACFC6DFA0F3959FD1F3950FC8 -:1060A00050E0551F629FF001729FBB27F00DB11D9C -:1060B000639FAA27F00DB11DAA1F649F6627B00D2C -:1060C000A11D661F829F2227B00DA11D621F739F15 -:1060D000B00DA11D621F839FA00D611D221F749F23 -:1060E0003327A00D611D231F849F600D211D822F6A -:1060F000762F6A2F11249F5750408AF0E1F08823B1 -:106100004AF0EE0FFF1FBB1F661F771F881F9150BD -:106110005040A9F79E3F510570F04ECFA6CF5F3F8C -:10612000ECF3983EDCF3869577956795B795F795F0 -:10613000E7959F5FC1F7FE2B880F911D9695879578 -:1061400097F90895FA01EE0FFF1F309621053105EA -:1061500099F16115710561F48038BFE39B0749F13E -:1061600068949038810561F08038BFEF9B0741F05B -:10617000992342F5FF3FE1053105210511F1E8942E -:106180000894E795D901AA2329F4AB2FBE2FF85F15 -:10619000D0F310C0FF5F70F4A695E0F7F73950F028 -:1061A00019F0FF3A38F49F779F930CD00F9007FCBB -:1061B000905808953EF014CF60E070E080E89FE3CF -:1061C00008954FE79F775F934F933F932F939ED010 -:1061D0002F913F914F915F9152DF05C019F40EF05E -:1061E000EBCE42CFFDCE26DFC8F39638C0F707F8D6 -:1061F0000F92E8942BE33AEA48EB5FE74EDF0F9209 -:106200000F920F924DB75EB70F92C0D0E6E2F1E069 -:1062100016D04F915F91EF91FF91E595EE1FFF1F13 -:1062200049F0FE57E0684427EE0F441FFA95E1F766 -:106230004195550B32D00F9007FE26C00895DF938D -:10624000CF931F930F93FF92EF92DF927B018C010C -:10625000689405C0DA2EEF011EDFFE01E894A591D7 -:106260002591359145915591AEF3EF0106DDFE0183 -:106270009701A801DA9479F7DF90EF90FF900F91E2 -:106280001F91CF91DF9108959B01AC0160E070E018 -:1062900080E89FE349CD90CE95CECCDEE8F39923FC -:1062A000D9F3940F511DBBF39150504094F059F025 -:1062B000882332F0660F771F881F91505040C1F736 -:1062C0009E3F510544F7880F911D9695879597F944 -:1062D00008955F3FACF0983E9CF0BB27869577957C -:1062E0006795B79508F4B1609395C1F7BB0F58F760 -:1062F00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF69 -:10630000B4CE0EF05FCE6CCE689456CE93DEC8F35A -:106310009923D1F3C6F3DF93CF931F930F93FF928B -:10632000C92FDD2788232AF02197660F771F881F42 -:10633000DAF720E030E040E85FEB9FE3883920F0B7 -:10634000803E30F021968F7787DCEEE4F1E003C0E9 -:1063500083DCEBE7F1E073DF8B01BE01EC01FB2E88 -:106360006F5771097595771F880B990B78DD28E1B8 -:1063700032E741E35FE38FDEAF2D9801AE01FF907E -:106380000F911F91CF91DF9178DC3BCEFA01DC01B8 -:10639000AA0FBB1F9B01AC01BF5728F4222733274C -:1063A000442750781FC0B75188F4AB2F002446957E -:1063B00037952795011CA395D2F3002069F0220F91 -:1063C000331F441FB395DAF30DD045CC613071050E -:1063D000A0E88A07B94630F49B01AC01662777270D -:1063E00088279078309621F020833183428353832D -:1063F0000895AA1BBB1B51E107C0AA1FBB1FA6170C -:10640000B70710F0A61BB70B881F991F5A95A9F75D -:1064100080959095BC01CD01089597FB072E16F449 -:10642000009407D077FD09D00E94F93107FC05D010 -:106430003EF4909581959F4F0895709561957F4F9B -:106440000895EE0FFF1F0590F491E02D0994F9993E -:10645000FECF92BD81BDF89A992780B50895A8E135 -:10646000B0E042E050E00C944F32262FF999FECF75 -:1064700092BD81BDF89A019700B4021639F01FBA97 -:1064800020BD0FB6F894FA9AF99A0FBE08950196B6 -:10649000272F0E9436320C943532DC01CB01FC01EF -:1064A000F999FECF06C0F2BDE1BDF89A319600B46D -:0E64B0000D9241505040B8F70895F894FFCF78 -:1064BE000AA7CF44000000410000DC440000004168 -:1064CE00000000000000804000005C4500004041DC -:1064DE00000000000000804052D0244500004041E2 -:1064EE000AA7CF44000000410000DC440000004138 -:1064FE00000000000000804052D0244500004041C2 -:10650E00000000000000804000005C45000040419B -:10651E000AA7CF44000000410000DC440000004107 -:10652E00000000000000804052D024450000404191 -:10653E0000000000000080400AA74F4500004041C7 -:10654E000AA7CF44000000410000DC4400000041D7 -:10655E00000000000000804052D0244500000041A1 -:10656E0000000000000080405CFF38450000004144 -:10657E00000000000000804052D024450000004181 -:10658E000AA7CF44000000410000DC440000004197 -:10659E00000000000000804052D0244500008041E1 -:1065AE0053D024450000404160970A450000004149 -:1065BE0054D0A444000000410000DC44000000411F -:1065CE0060970A450000A041640007000CFF000020 -:1065DE00003F6485151316F015BC15881501011FB3 -:1065EE00042808140A321E0002040507090B0C0EBB -:1065FE001011131517181A1C1D1F212324262829C4 -:10660E002B2D2F3032343537393B6966207965733F -:10661E000A097065616E7574206275747465720A0C -:10662E00656C73650A097269636520736E61636BCD -:10663E0073001F0F03764F5F6F7F496943790959C6 -:10664E0053633149803F5D8B803FF8BF803FCAE185 -:10665E00803F73ED803FCAE1803FF8BF803F5D8B86 -:10666E00803F3149803F0000803FF16D7F3F75EAEA -:10667E007E3F4C827E3F833F7E3F84287E3F833F1A -:10668E007E3F4C827E3F75EA7E3FF16D7F3F00007C -:10669E00803F3F4D3639DF0A920A5C0A230AB6095B -:1066AE00CF09E809010A01020304050607080900DB -:00000001FF -- cgit v1.2.3 From ce1742a31fb785cae4cb12e9cf5f9eab00b9311f Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 15 Jun 2016 18:42:30 -0400 Subject: Add rule to ignore contents of .build directories; their contents are generated --- keyboard/planck/keymaps/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 keyboard/planck/keymaps/.gitignore diff --git a/keyboard/planck/keymaps/.gitignore b/keyboard/planck/keymaps/.gitignore new file mode 100644 index 0000000000..24e5b0a1ae --- /dev/null +++ b/keyboard/planck/keymaps/.gitignore @@ -0,0 +1 @@ +.build -- cgit v1.2.3 From f566125c6e29e3db62552c089428591d460ce583 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Thu, 16 Jun 2016 16:51:19 -0400 Subject: Revert removals of compiled files --- keyboard/planck/.gitignore | 1 - keyboard/planck/keymaps/alexey/compiled.hex | 1444 +++++++++++++++++ .../planck/keymaps/angerthosenear/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/austin/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/bone2planck/compiled.hex | 1450 +++++++++++++++++ keyboard/planck/keymaps/brandon/compiled.hex | 1456 +++++++++++++++++ keyboard/planck/keymaps/charlie/compiled.hex | 1445 +++++++++++++++++ keyboard/planck/keymaps/daniel/compiled.hex | 1448 +++++++++++++++++ keyboard/planck/keymaps/david/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/default/compiled.hex | 1611 +++++++++++++++++++ keyboard/planck/keymaps/dzobert/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/experimental/compiled.hex | 1645 ++++++++++++++++++++ .../keymaps/experimental/planck_experimental.hex | 1645 ++++++++++++++++++++ keyboard/planck/keymaps/gabriel/compiled.hex | 1450 +++++++++++++++++ keyboard/planck/keymaps/jacob/compiled.hex | 1444 +++++++++++++++++ keyboard/planck/keymaps/joe/compiled.hex | 1479 ++++++++++++++++++ keyboard/planck/keymaps/kyle/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/leo/compiled.hex | 1454 +++++++++++++++++ keyboard/planck/keymaps/lucas/compiled.hex | 1471 +++++++++++++++++ keyboard/planck/keymaps/lukas/compiled.hex | 1446 +++++++++++++++++ keyboard/planck/keymaps/max/compiled.hex | 1449 +++++++++++++++++ keyboard/planck/keymaps/mollat/compiled.hex | 1495 ++++++++++++++++++ keyboard/planck/keymaps/nico/compiled.hex | 1456 +++++++++++++++++ keyboard/planck/keymaps/pete/compiled.hex | 1143 ++++++++++++++ keyboard/planck/keymaps/pvc/compiled.hex | 1635 +++++++++++++++++++ keyboard/planck/keymaps/tak3over/compiled.hex | 1456 +++++++++++++++++ keyboard/planck/keymaps/unicode/compiled.hex | 1185 ++++++++++++++ keyboard/planck/keymaps/yang/compiled.hex | 1318 ++++++++++++++++ 28 files changed, 39270 insertions(+), 1 deletion(-) create mode 100644 keyboard/planck/keymaps/alexey/compiled.hex create mode 100644 keyboard/planck/keymaps/angerthosenear/compiled.hex create mode 100644 keyboard/planck/keymaps/austin/compiled.hex create mode 100644 keyboard/planck/keymaps/bone2planck/compiled.hex create mode 100644 keyboard/planck/keymaps/brandon/compiled.hex create mode 100644 keyboard/planck/keymaps/charlie/compiled.hex create mode 100644 keyboard/planck/keymaps/daniel/compiled.hex create mode 100644 keyboard/planck/keymaps/david/compiled.hex create mode 100644 keyboard/planck/keymaps/default/compiled.hex create mode 100644 keyboard/planck/keymaps/dzobert/compiled.hex create mode 100644 keyboard/planck/keymaps/experimental/compiled.hex create mode 100644 keyboard/planck/keymaps/experimental/planck_experimental.hex create mode 100644 keyboard/planck/keymaps/gabriel/compiled.hex create mode 100644 keyboard/planck/keymaps/jacob/compiled.hex create mode 100644 keyboard/planck/keymaps/joe/compiled.hex create mode 100644 keyboard/planck/keymaps/kyle/compiled.hex create mode 100644 keyboard/planck/keymaps/leo/compiled.hex create mode 100644 keyboard/planck/keymaps/lucas/compiled.hex create mode 100644 keyboard/planck/keymaps/lukas/compiled.hex create mode 100644 keyboard/planck/keymaps/max/compiled.hex create mode 100644 keyboard/planck/keymaps/mollat/compiled.hex create mode 100644 keyboard/planck/keymaps/nico/compiled.hex create mode 100644 keyboard/planck/keymaps/pete/compiled.hex create mode 100644 keyboard/planck/keymaps/pvc/compiled.hex create mode 100644 keyboard/planck/keymaps/tak3over/compiled.hex create mode 100644 keyboard/planck/keymaps/unicode/compiled.hex create mode 100644 keyboard/planck/keymaps/yang/compiled.hex diff --git a/keyboard/planck/.gitignore b/keyboard/planck/.gitignore index fc71164f75..6e92f57d46 100644 --- a/keyboard/planck/.gitignore +++ b/keyboard/planck/.gitignore @@ -1,2 +1 @@ tags -compiled.hex diff --git a/keyboard/planck/keymaps/alexey/compiled.hex b/keyboard/planck/keymaps/alexey/compiled.hex new file mode 100644 index 0000000000..deddcea06a --- /dev/null +++ b/keyboard/planck/keymaps/alexey/compiled.hex @@ -0,0 +1,1444 @@ +:100000000C9461020C94A5020C94A5020C94A50218 +:100010000C94A5020C94A5020C94A5020C94A502C4 +:100020000C94A5020C94A5020C9452140C94241563 +:100030000C9486220C94A5020C94A5020C94A502A3 +:100040000C94A5020C9407030C94A5020C94A50231 +:100050000C94A5020C94EE220C94A5020C94A5021B +:100060000C94A5020C94A5020C94A5020C94A50274 +:100070000C94A5020C94A5020C94A5020C94A50264 +:100080000C94C70A0C94A5020C94A5020C94A5022A +:100090000C94A5020C94A5020C94A5020C94A50244 +:1000A0000C94A5020C94A5020C94A5029115B3150D +:1000B000A116B315A116F8151B16A11670168316F6 +:1000C0006D196D199C199C19DB19FB19511B511BDA +:1000D000061A511BB61AB61A1D1B261B511B4B1BA9 +:1000E000C31AC31AC31AC31AC31AC31AC31AC31A28 +:1000F000C31AC31AC31AC31AC31AC31AC31AC31A18 +:10010000D31AE11AE81AEF1AF91A07634236B79BB5 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000002B001400ED +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A00290004001600070009000A0075 +:1001F0000B000D000E000F003300015201001D0026 +:100200001B00060019000500110010003600370021 +:10021000380001000030E300E200E000E1002C00C3 +:100220002C0002522D00340028000100010049007A +:100230004A0052004D004B000100400041004200C6 +:100240004300010001004C00500051004F004E00DF +:1002500001003D003E003F0044000100010001009C +:10026000010001000100010001003A003B003C00D8 +:100270004500010001000100010001000100010032 +:100280000100AA00A900AB00AE00010001001E029F +:100290001F022F02300231024B00240025002600ED +:1002A000250201000100200221022602270235005A +:1002B0004E002100220023002E0201000100220234 +:1002C00023022F003000350224021E001F002000F0 +:1002D000310001000100010049000100010001009E +:1002E00001000100010027002E0001002803540036 +:1002F00068006500200050006C0061006E00630023 +:100300006B0020004B006500790062006F00610007 +:100310007200640000002C034F007200740068003B +:100320006F006C0069006E006500610072002000C3 +:100330004B006500790062006F006100720064008C +:10034000730000000403090409026D00040100A009 +:10035000FA09040000010301010009211101000153 +:10036000223F000705810308000A09040100010378 +:10037000010200092111010001224D00070582033D +:1003800008000A090402000103000000092111010C +:1003900000012236000705830308000A0904030050 +:1003A00001030000000921110100012239000705A5 +:1003B00084031000011201100100000008EDFE602E +:1003C0006001000102000105010906A101050719EC +:1003D000E029E71500250195087501810205081936 +:1003E0000129059505750191029501750391010596 +:1003F000071900297715002501957875018102C03C +:1004000005010980A101850216010026B7001A0125 +:10041000002AB700751095018100C0050C0901A1E3 +:10042000018503160100269C021A01002A9C027510 +:100430001095018100C005010902A1010901A10077 +:100440000509190129051500250195057501810288 +:100450009501750381010501093009311581257F59 +:1004600095027508810609381581257F9501750863 +:100470008106050C0A38021581257F9501750881D2 +:1004800006C0C005010906A101050719E029E71505 +:100490000025019508750181029501750881010506 +:1004A00008190129059505750191029501750391BA +:1004B000010507190029FF150025FF95067508811C +:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF +:1004D00003FE24C080911E0390911F03A09120036E +:1004E000B09121038730904BA740B04BB9F41092E4 +:1004F0001E0310921F03109220031092210314BEBA +:1005000084B7877F84BF88E10FB6F894809360003A +:10051000109260000FBEE0E0F8E3099511E0A0E062 +:10052000B1E0E6E6F9E502C005900D92A03CB10706 +:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 +:10054000E1F70E9498110C94B12C0C9400000895CE +:10055000089581E0089508950C94A8020C94A902CE +:100560000C94AB020E947B2823E030E0281B310969 +:10057000220F2093C4010895282F2F988091800086 +:10058000211108C0877F8093800010928D00109207 +:100590008C001BC0886080938000233019F48FEF9B +:1005A0009FEF0FC083E090E0821B9109880F991F95 +:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 +:1005C000CA0190938D0080938C000C94B2020E941B +:1005D000B20284E08093C3011092C0010895279A6B +:1005E0002F988FEF9FEF90938700809386008AE08B +:1005F0008093800089E1809381000E94E4270C941D +:10060000E7020E94EF026E9A769A0C94A7021F925C +:100610000F920FB60F9211242F933F938F939F93B6 +:10062000EF93FF93E091C101F091C201CF010196D8 +:100630009093C2018093C1010090C30102C0F6955E +:10064000E7950A94E2F7EF738091C001823019F4C4 +:10065000E03251F404C0813039F4EF3329F4809151 +:100660006F008D7F80936F00F0E0E457FE4FE491C0 +:1006700021E031E0E29FC001E39F900D1124009042 +:10068000C40102C0969587950A94E2F790938D0075 +:1006900080938C00FF91EF919F918F913F912F91CB +:1006A0000F900FBE0F901F90189561110DC0FC01A7 +:1006B0008281882331F085EE0E9411180E943B2828 +:1006C00003C085EE0E94D91880E090E0089581E093 +:1006D00008950C94670308950C940103809115020A +:1006E000882309F448C08091D1019091D2010097EC +:1006F00079F40E94B8229093D2018093D101809125 +:10070000D30190E0009771F48091D40190E00AC089 +:100710000E94C4222091000130910101281739075D +:1007200040F329C00197880F991F880F991FFC017A +:10073000EB52FE4F60817181828193810E942D0A6C +:10074000E091D30184E0E89FF0011124EB52FE4FC9 +:1007500060817181828193814FE050E00E94E50DBC +:100760008091D30190E001966091D40170E00E94E5 +:10077000612C8093D3010C94AC02109217020C945C +:10078000FA090895089581E0809317020C94C2033A +:10079000089508958F929F92AF92BF92EF92FF9229 +:1007A0000F931F93CF93DF93CDB7DEB7A3970FB609 +:1007B000F894DEBF0FBECDBF7C01FC01008111812A +:1007C000C8010E94B520B8010E94CC058C01B70178 +:1007D0000E946903882309F4CCC10032F0E51F07A9 +:1007E00041F4F7018281882309F458C00E94490E20 +:1007F000C0C10132F0E51F0741F4F701828188236F +:1008000009F44CC00E94520EB4C10232F0E51F0739 +:1008100051F4F7018281882309F440C00E94450EFB +:100820008111F0CFE3CF0332F0E51F0739F4F70170 +:100830008281882399F10E94C3039BC10432F0E5B1 +:100840001F0739F4F7018281882341F10E94BD031B +:1008500090C10532F0E51F0749F4F7018281882332 +:10086000E9F0809117028111F1CFE5CF0632F0E572 +:100870001F0739F4F7018281882381F00E94590E05 +:100880000AC00732F0E51F0749F4F7018281882387 +:1008900029F00E94640E0E94C9036BC18091170267 +:1008A000811105C0F70182818111CFC018C1003EBE +:1008B000110579F4F7018281882309F44DC00E9463 +:1008C000FA0981E080931602109215021092D40169 +:1008D00050C1023E110559F4F70182818823E1F1EC +:1008E0000E94FA09109216021092150242C1033EAC +:1008F000110591F4F7018281882371F10E94FA09B0 +:100900001092160281E0809315021092D30110928A +:10091000D2011092D1012DC10235110559F4F70110 +:100920008281882309F425C1809100019091010101 +:100930000A970DC00135110579F4F70182818823EA +:1009400009F417C180910001909101010A969093DA +:100950000101809300010DC14091040183E2EFE1A8 +:10096000F1E0DE01119601900D928A95E1F7F70111 +:10097000808121E030E02C0F3D1F280F311DC9017F +:100980002091020130910301FC01E20FF31F60810D +:10099000772767FD7095640F711D882777FD809517 +:1009A000982F0E94832920E030E040E451E40E9427 +:1009B000E8284B015C01F701218184E090E0821B73 +:1009C0009109BC01882777FD8095982F0E94832983 +:1009D0009B01AC01C501B4010E9480289B01AC01C0 +:1009E00060E070E080E090E40E94F62A20E030E0D1 +:1009F0004CED50E40E94932A4B015C01F701828187 +:100A00008823D1F04FE050E0C501B4010E94E50D0C +:100A1000809116028823A1F08091D40124E0829F66 +:100A2000F0011124EB52FE4F80829182A282B382A8 +:100A30008F5F8093D40104C0C501B4010E942D0AC8 +:100A40000F3F110508F02ECF94C08091D001811185 +:100A50001FC0043130E5130709F051C00E946B0339 +:100A600081E08093D0010E94B8229093CF018093BF +:100A7000CE011092C7011092C9011092C8011092C4 +:100A8000CB011092CA011092CD011092CC0171C01D +:100A90008091CE019091CF010E94C422883C9105A3 +:100AA00070F48091C701E82FF0E0EE0FFF1FE853CC +:100AB000FE4F118300838F5F8093C7015AC00438B3 +:100AC00080E5180721F00538104501F13AC0F7011B +:100AD0008281882341F01092C50182E01EC0043853 +:100AE00030E5130759F58091C501811106C086E2F2 +:100AF0000E94111886E20E94D91882E01CC00438B6 +:100B0000F0E51F0741F305381045D9F4F70182815C +:100B1000882331F01092C60180E20E94281929C072 +:100B20008091C601811106C087E20E94111887E2F8 +:100B30000E94D91880E20E942F191BC00538104569 +:100B400029F381E08093C5018093C601C701A39674 +:100B50000FB6F894DEBF0FBECDBFDF91CF911F91CE +:100B60000F91FF90EF90BF90AF909F908F900C945B +:100B7000AE0280E0A3960FB6F894DEBF0FBECDBFE5 +:100B8000DF91CF911F910F91FF90EF90BF90AF90A9 +:100B90009F908F90089508959CE0799FF001112413 +:100BA00090E3899FE00DF11D1124E60FF11DEE0F7A +:100BB000FF1FE453FE4F859194910895880F991F6C +:100BC000FC01E45BFF4F859194910895880F991F74 +:100BD000FC01E453FE4F8591949108950F931F9368 +:100BE000CF93DF93EC01811521E39207A0F5C115A6 +:100BF00080E3D80708F0D7C0C83ED105D8F4C03E7E +:100C0000D10508F007C2C83AD10578F4C53AD10534 +:100C100008F06AC0C130D10509F463C008F4F7C117 +:100C2000C430D10508F0F6C1F2C1CB3BD10508F4C0 +:100C300066C0EDC1C11590E2D90708F0AFC0C1157B +:100C400021E0D20708F0E6C1C03FD10508F4DFC1BA +:100C50008E0110651FC2C03880E5D80700F5C03787 +:100C600090E5D90708F0A3C0C11520E5D20709F423 +:100C7000ACC050F4CE01905480319F4008F0C7C101 +:100C8000DF708E01106A06C2C13080E5D80709F412 +:100C9000AEC0C43190E5D90708F4AFC0B8C1C338BD +:100CA00020E5D20709F48EC050F4C13890E5D90789 +:100CB00009F482C008F083C000E011EDEBC1C0313F +:100CC00081E5D80708F4A3C1C11597E5D90708F451 +:100CD00036C1CE0190578115904108F098C1DF7060 +:100CE00093C101E010E0D6C1C53AD10509F494C121 +:100CF000C63AD10509F093C102E810E4CBC1C83A65 +:100D0000D10509F48FC1C93AD10509F48EC1CA3A97 +:100D1000D10509F48DC1CB3AD10509F48CC1CC3A87 +:100D2000D10509F48BC1CD3AD10509F48AC1C03B84 +:100D3000D10509F489C1CE3AD10509F488C1CF3A69 +:100D4000D10509F487C1C13BD10509F486C1C23B75 +:100D5000D10509F485C1C33BD10509F484C1C43B65 +:100D6000D10509F483C1C53BD10509F482C1C63B55 +:100D7000D10509F481C1C73BD10509F480C1C83B45 +:100D8000D10509F47FC1C93BD10509F47EC1CA3B35 +:100D9000D10509F47DC100E014E47CC1CE019F704F +:100DA0000E94E60578C1DD278E01106C73C1CF70FB +:100DB000DD278E01146D6EC100E010ED6BC100E007 +:100DC00012ED68C100E013ED65C10E94BC1B0E94DA +:100DD000FA090E94C1038FEF94E32CE08150904008 +:100DE0002040E1F700C000000E94132353C180910E +:100DF000F20281608093F2024DC10E94742381113E +:100E000002C00E9450230E94872390E090931D030C +:100E100080931C03C23080E5D80721F480911C0325 +:100E2000816086C0C43090E5D90721F480911C030D +:100E300082607EC0C63020E5D20721F480911C0379 +:100E4000846076C0C83080E5D80719F480911C030F +:100E500027C0CA3090E5D90721F480911C03806136 +:100E600067C0CC3020E5D20721F480911C0380625A +:100E70005FC0CE3080E5D80721F480911C038064E8 +:100E800057C0C03190E5D90721F480911C038068D8 +:100E90004FC0C23120E5D20729F480911C03846041 +:100EA000886046C0C33080E5D80721F480911C03D8 +:100EB0008E7F3EC0C53090E5D90721F480911C0398 +:100EC0008D7F36C0C73020E5D20721F480911C0306 +:100ED0008B7F2EC0C93080E5D80719F480911C03A0 +:100EE00026C0CB3090E5D90721F480911C038F7E7A +:100EF0001FC0CD3020E5D20721F480911C038F7DE7 +:100F000017C0CF3080E5D80721F480911C038F7B78 +:100F10000FC0C13190E5D90721F480911C038F7770 +:100F200007C0C331D04531F480911C038B7F877F8C +:100F300080931C0380911C030E948B23ABC08D2FD8 +:100F400099278F70992781309105D9F49E012370DC +:100F5000332702C0880F991F2A95E2F79C688E01FB +:100F600044E0000F111F4A95E1F700271370802B12 +:100F7000912B53E0CC0FDD1F5A95E1F7C076DD27AA +:100F80002FC08230910531F4DC2FCC278E01016F08 +:100F9000106A80C08330910569F4CE01837099276F +:100FA00001E010E002C0000F111F8A95E2F7C801AE +:100FB0009C680FC084309105B9F4CE0183709927E5 +:100FC00001E010E002C0000F111F8A95E2F7C8018E +:100FD0009A6823E0CC0FDD1F2A95E1F7C07ED77019 +:100FE0008C010C2B1D2B56C08530910531F4DC2F64 +:100FF000CC278E01046F106A4DC0069709F04AC0D5 +:10100000CF71DD27DC2FCC278E01106243C000E0BA +:1010100010E040C08E013EC001E810E43BC003E890 +:1010200010E438C002EE14E435C009EE14E432C016 +:101030000AEE14E42FC005EB14E42CC006EB14E414 +:1010400029C007EB14E426C00CEC14E423C00DEC1B +:1010500014E420C003E815E41DC00AE815E41AC032 +:1010600002E915E417C004E915E414C001E216E42E +:1010700011C003E216E40EC004E216E40BC005E260 +:1010800016E408C006E216E405C007E216E402C052 +:101090000AE216E4C801DF91CF911F910F910895E4 +:1010A0009CE0799FF001112490E3899FE00DF11DF0 +:1010B0001124E60FF11DEE0FFF1FE453FE4F859143 +:1010C0009491803E9105E0F4803C910558F5813380 +:1010D000910509F46FC048F48932910509F463C0A1 +:1010E0008A32910509F46DC072C089339105E9F027 +:1010F00082389105D1F08533910509F44DC067C060 +:10110000833E910581F138F4803E9105B9F0823E2D +:101110009105D9F05CC0863E910561F1873E91054D +:10112000A1F155C00E94DE05089520911C0320FD09 +:1011300002C021FF4CC080EE90E049C080911C03AA +:1011400080FFF9CF89E390E042C080911C0382FFC9 +:101150000EC080911C0384FF03C080E090E037C084 +:1011600083EE90E034C080911C0382FFF2CF82EEC8 +:1011700090E02DC080911C0383FF0BC080911C0365 +:1011800084FDEBCF87EE90E022C080911C0383FFAB +:10119000F5CF86EE90E01BC080911C0385FF07C051 +:1011A00089E290E014C080911C0385FFF9CF85E3AC +:1011B00090E00DC080911C0386FF07C08AE290E09A +:1011C00006C080911C0386FFF9CF81E390E00E9466 +:1011D000EE0508950C94B002E82FF0E0E25BFE4FBC +:1011E0008081E82FEF70F0E082958F7021E030E091 +:1011F000A90102C0440F551F8A95E2F740A3089544 +:101200000F931F93CF93DF9385B7806885BF85B712 +:10121000806885BFC3E0D0E001E010E0FE01E25B42 +:10122000FE4F8081E82FEF70F0E021A182958F7052 +:10123000A80102C0440F551F8A95E2F7CA01822B0C +:1012400081A38C2F0E94EC08219740F78BE090E05F +:1012500061E070E0FC01EE5BFE4F2081E22FEF7059 +:10126000F0E042A122952F70DB0102C0AA0FBB1F44 +:101270002A95E2F79D01242B22A3019758F7DF91CD +:10128000CF911F910F910C946C03EF92FF920F93EB +:101290001F93CF93DF9300E212E0C3E0EE24E394C8 +:1012A000F12CD5E08C2F0E94EC088BE090E040E020 +:1012B00050E0FC01EE5BFE4F6081E62FEF70F0E046 +:1012C00020A130E062956F7002C0359527956A9530 +:1012D000E2F720FD09C09701082E02C0220F331F3C +:1012E0000A94E2F7422B532B019718F7F8019291D9 +:1012F00082918F018417950721F051834083D09309 +:1013000005018C2F0E94EC08C15060F68091050108 +:1013100087FD2CC08150809305018F3F39F08FE904 +:101320009FE00197F1F700C0000020C080911E02ED +:1013300090911F02909327028093260280911C02B5 +:1013400090911D02909325028093240280911A02AD +:1013500090911B02909323028093220280911802A5 +:101360009091190290932102809320020E946E03B3 +:1013700081E0DF91CF911F910F91FF90EF90089541 +:10138000E82FF0E0EE0FFF1FE05EFD4F80819181BE +:10139000089508950F931F93CF9308E212E0C0E0E1 +:1013A000F801929182918F010E943022C80FF2E0E1 +:1013B00000321F07A9F78C2FCF911F910F9108952D +:1013C0000E947423811102C00E9450230E9499231D +:1013D000809307033E9A809171008D7F8093710006 +:1013E00082E0809390008AE18093910081E0809375 +:1013F0002A02089580912A02811102C00E94E00908 +:1014000010927A0210927902809171008D7F809300 +:101410007100809190008F738093900010923C0235 +:1014200010923B0210927302109274021092750295 +:10143000109276021092720210927102E1E5F2E0CF +:10144000A1E4B2E011921192119211921D921D929B +:1014500082E0E137F807B1F70895CF92DF92EF927B +:10146000FF920F931F93CF93DF9320913B02222390 +:1014700009F484C06B017C0180912A02811102C0B1 +:101480000E94E00901E712E0C7E0D0E0A701960161 +:10149000F80192918291729162918F010E94E428E9 +:1014A000811131C0FE01EE0FFF1FEE0FFF1FEF5A3B +:1014B000FD4F1082118212821382DE01AA0FBB1F20 +:1014C000AF5BBD4F11961C921E92C730D105E9F05B +:1014D000219644815581668177814083518362835F +:1014E0007383148215821682178212968D919C91B5 +:1014F000139711969C938E9313961C921E9212979B +:1015000034961296E2CF219708F680917902909155 +:101510007A02019797FD05C090937A028093790231 +:1015200004C010927A02109279028091790290910F +:101530007A0220917702309178022817390724F037 +:101540001092780210927702892BC1F48091710079 +:101550008D7F80937100809190008F7380939000B5 +:101560001092730210927402109275021092760219 +:10157000109272021092710210923B02DF91CF9191 +:101580001F910F91FF90EF90DF90CF9008951F92E1 +:101590000F920FB60F9211244F925F926F927F922B +:1015A0008F929F92AF92BF92CF92DF92EF92FF9273 +:1015B0002F933F934F935F936F937F938F939F935B +:1015C000AF93BF93CF93DF93EF93FF9380913B0251 +:1015D000882309F49BC1C0917902D0917A021C162C +:1015E0001D060CF093C140902B0250902C0260908D +:1015F0002D0270902E0220E030E0A901C301B2015B +:101600000E948F2A18160CF065C0C130D10509F46C +:1016100052C08091770290917802BE010E94612CA5 +:101620007C01909378028093770280903D029090A5 +:101630003E02A0903F02B090400220E030E040E83F +:101640005FE3C501B4010E94802860933D0270935E +:101650003E0280933F0290934002F701EE0FFF1F7E +:10166000EE0FFF1FEF5AFD4FA301920160817181C0 +:10167000828193810E94E82820E030E040E05EE330 +:101680000E94932A9B01AC01C501B4010E948F2ADC +:1016900018168CF4C7010196BE010E94612C90932C +:1016A00078028093770210923D0210923E021092CF +:1016B0003F0210924002E0917702F0917802EE0F23 +:1016C000FF1FEE0FFF1FEF5AFD4F60817181828176 +:1016D0009381D0C0C0907302D0907402E0907502E4 +:1016E000F090760220E030E0A901C701B6010E9427 +:1016F000E4282197882309F4A2C0FE01EE0FFF1F02 +:10170000EE0FFF1FEF5AFD4F80809180A280B380C3 +:10171000A5019401C701B6010E94E42887FF31C0EA +:10172000A501940160E070E08CED93EC0E94E82844 +:1017300020E030E040E451E40E94E82820E030E07E +:1017400040E05FE30E94932A9B01AC0160E070E0FF +:1017500080E090E40E94F62A9B01AC01C501B4012F +:101760000E94932A9B01AC01C701B6010E94E428A4 +:1017700087FF07C0A701960160E070E08CED93E45D +:1017800039C0A5019401C701B6010E948F2A18161D +:101790000CF055C0A501940160E070E08CED93E47D +:1017A0000E94E82820E030E040E451E40E94E8286C +:1017B00020E030E040E05FE30E94932A9B01AC010F +:1017C00060E070E080E090E40E94F62A9B01AC01AA +:1017D000C501B4010E94932A9B01AC01C701B60167 +:1017E0000E948F2A18165CF5A701960160E070E050 +:1017F0008CED93EC0E94E82820E030E040E451E4D6 +:101800000E94E82820E030E040E05FE30E94932A55 +:101810009B01AC0160E070E080E090E40E94F62A59 +:101820009B01AC01C701B6010E94932A6093730229 +:1018300070937402809375029093760213C0FE0138 +:10184000EE0FFF1FEE0FFF1FEF5AFD4F80819181BA +:10185000A281B3818093730290937402A093750266 +:10186000B093760260917302709174028091750258 +:101870009091760220912802309129022F3F4FEF5C +:10188000340731F02F5F3F4F309329022093280215 +:101890000E946F0E6B017C0120E034E244EF51E4C2 +:1018A0000E94E42887FF08C086EFC82E88E2D82E61 +:1018B00084EFE82E81E4F82E20E030E040E051E4AF +:1018C000C701B6010E94932A9B01AC0160E074E25B +:1018D00084E79BE40E94E8286B017C010E94552963 +:1018E0007093970060939600209106013091070154 +:1018F0004091080150910901C701B6010E94932A45 +:101900000E945529709399006093980080913C0241 +:10191000882309F433C1C0903702D0903802E09098 +:101920003902F0903A0220E030E0A901C701B60187 +:101930000E948F2A1816D4F58091280290912902CE +:101940008F3F2FEF920729F0019690932902809301 +:101950002802C701B6010E946F0E20E030E040E08F +:1019600051E40E94932A9B01AC0160E074E284E799 +:101970009BE40E94E8286B017C010E94552970932A +:1019800097006093960020910601309107014091E5 +:10199000080150910901C701B6010E94932A0E94D3 +:1019A0005529709399006093980008C01092970091 +:1019B0001092960010929900109298006091310256 +:1019C000709132026F5F7F4F7093320260933102E9 +:1019D000209196003091970080E090E0232BF1F069 +:1019E000C0919600D09197000E9481296B017C01E3 +:1019F000BE0180E090E00E9481299B01AC016091D2 +:101A000033027091340280913502909136020E9427 +:101A1000E82820E03FEF4FE757E410C00E948129FB +:101A20006B017C0120E030EE4FEF54E46091330213 +:101A30007091340280913502909136020E94932A6F +:101A40009B01AC01C701B6010E948F2A87FD96C099 +:101A500080912F028F5F80932F0290E020910303EB +:101A60003091040382179307A0F080910E0388231E +:101A700019F010922F020DC0809171008D7F80931C +:101A80007100809190008F738093900010923C02BF +:101A90007DC080913002C0912F02811128C0C0907A +:101AA0000803D0900903E0900A03F0900B0320E0B4 +:101AB00030E0A901C701B6010E948F2A1816BCF4B4 +:101AC00081E0809330021092370210923802109217 +:101AD000390210923A02C0923302D0923402E0925C +:101AE0003502F0923602C150C0932F0243C01092CB +:101AF00030021092290210922802E0910503F09121 +:101B0000060348E0C49FE00DF11D112480819181FE +:101B1000A281B3818093370290933802A093390257 +:101B2000B0933A0220E030E040E85EE364817581E2 +:101B3000868197810E94932A6B017C0180910A0122 +:101B4000682F70E080E090E00E94812920E030E082 +:101B500048EC52E40E94E8289B01AC01C701B601A1 +:101B60000E94932A6093330270933402809335026B +:101B70009093360210923202109231028091070344 +:101B800080FD04C010923C0210923B02FF91EF9145 +:101B9000DF91CF91BF91AF919F918F917F916F9185 +:101BA0005F914F913F912F91FF90EF90DF90CF90F9 +:101BB000BF90AF909F908F907F906F905F904F906D +:101BC0000F900FBE0F901F901895CF92DF92EF925B +:101BD000FF92CF93DF936B017C01EA0180912A028F +:101BE000811102C00E94E0098091070380FF46C076 +:101BF0008091790290917A0208970CF03FC0809111 +:101C000071008D7F8093710080913C0281110E9450 +:101C1000FA0981E080933B02109229021092280277 +:101C200020E030E0A901C701B6010E948F2A1816F2 +:101C3000DCF48091790290917A02FC01EE0FFF1F93 +:101C4000EE0FFF1FEF5AFD4FC082D182E282F38276 +:101C5000FC01EE0FFF1FEF5BFD4FD183C0830196A8 +:101C600090937A02809379028091710082608093D0 +:101C7000710080919000806880939000DF91CF91F7 +:101C8000FF90EF90DF90CF900895809107038170CF +:101C90000895809107038160809307030E949D232C +:101CA0000C94C803809107038E7F809307030C94E4 +:101CB0009D2380917B0290E0019666E070E00E9497 +:101CC000612C80937B02089580917B0290E00197C4 +:101CD00066E070E00E94612C80937B0208958F92F1 +:101CE0009F92AF92BF92CF92DF92EF92FF920F93AB +:101CF0001F93CF93DF936B017C01C0912802D09199 +:101D00002902BE0180E090E00E9481294B015C0124 +:101D1000A701960160E070E08CE594E40E94E82859 +:101D20009B01AC01C501B4010E94932A0E94552970 +:101D300020917B02233009F473C028F4222351F050 +:101D40002130E9F02CC1243009F4A0C0253009F479 +:101D5000E0C025C180E090E0A0E0BFE380930601F1 +:101D600090930701A0930801B093090110922B02F0 +:101D700010922C0210922D0210922E0210C110927D +:101D80002B0210922C0210922D0210922E0264311E +:101D9000710540F46A30710560F520E030E040E8FC +:101DA0005EE32BC0693C710508F0AAC080E090E0BA +:101DB0000E94812920E030E040EA51E40E947F281F +:101DC00020E030E044E353E40E94E8289B01AC01AA +:101DD0000E94932A20E030E040E05EE30E94932AD4 +:101DE0009B01AC0160E070E080E09EE30E947F28F0 +:101DF00044C020E030E040E05FE3C701B6010E944C +:101E0000932A6B017C0180E090E0A0E0BEE3809328 +:101E1000060190930701A0930801B0930901BFC088 +:101E200010922B0210922C0210922D0210922E0270 +:101E30004AE0469F9001479F300D1124C90168EB8D +:101E40007BE00E944D2CBC016C5D754077FF03C0A8 +:101E5000719561957109882777FD8095982F0E946B +:101E600083292EE333EC4EE259E30E94932A20E0CB +:101E700030E040EC5EE30E9480286093060170939E +:101E80000701809308019093090189C010922B02E9 +:101E900010922C0210922D0210922E02CE0183700D +:101EA0009927892BE1F0BE016170772780E090E0EF +:101EB0000E94812920E030E040E05EE30E94932A06 +:101EC00020E030E040E45FE30E9480286093060158 +:101ED0007093070180930801909309010CC080E082 +:101EE00090E0A0E0BFE38093060190930701A093E8 +:101EF0000801B0930901C770DD27CD2B09F04FC051 +:101F00001092060110920701109208011092090127 +:101F100046C010922B0210922C0210922D021092A9 +:101F20002E0200E010E020E03FE300930601109352 +:101F3000070120930801309309016739710578F191 +:101F400080E090E00E94812920E030E047E153E406 +:101F50000E947F2820E030E04AE754E40E94E8280D +:101F600020E030E048E452E40E94932A20E030E090 +:101F700040EA51E40E94C5290E945029660F771F4C +:101F8000660F771FFB01EE5AFE4F2081318142819F +:101F90005381C701B6010E94932A6B017C01C701DE +:101FA000B601DF91CF911F910F91FF90EF90DF90DD +:101FB000CF90BF90AF909F908F90089580918C02AA +:101FC0000895CF93DF9300D01F92CDB7DEB79C0169 +:101FD00080911303843019F593E099833B832A831E +:101FE0009093E9008FEF9091E800815095FD06C035 +:101FF00095ED9A95F1F700008111F5CF8091E800F9 +:1020000085FF0DC040E050E063E070E0CE01019636 +:102010000E9442128091E8008E778093E8000F9032 +:102020000F900F90DF91CF910895CF93DF9300D061 +:102030001F92CDB7DEB720911303243021F522E0A3 +:1020400029839B838A8383E08093E9008FEF9091BB +:10205000E800815095FD06C095ED9A95F1F70000D6 +:102060008111F5CF8091E80085FF0DC040E050E080 +:1020700063E070E0CE0101960E9442128091E80078 +:102080008E778093E8000F900F900F90DF91CF91A3 +:102090000895209113032430F1F422E02093E90005 +:1020A0002FEF3091E800215035FD06C035ED3A950F +:1020B000F1F700002111F5CF2091E80025FF0BC0BA +:1020C00040E050E065E070E00E9442128091E8003C +:1020D0008E778093E8000895CF93DF93EC01909181 +:1020E0001303943009F046C0809115018823D9F07C +:1020F000809116018823B9F09093E9008FEF9091B9 +:10210000E800815095FD06C095E19A95F1F7000031 +:102110008111F5CF8091E80085FF2CC040E050E0B0 +:1021200060E170E017C081E08093E9008FEF90914B +:10213000E800815095FD06C095ED9A95F1F70000F5 +:102140008111F5CF8091E80085FF14C040E050E098 +:1021500068E070E0CE010E9442128091E8008E7724 +:102160008093E80080E1FE01ACE7B2E001900D92BF +:102170008A95E1F7DF91CF91089580911203811143 +:1021800009C00E94D7130E9434148091E200846039 +:102190008093E2000895109212030895089508951F +:1021A0000C947B2242E061EC81E00E94511342E0FA +:1021B00061EC82E00E94511342E061EC83E00E94F6 +:1021C000511342E161EC84E00C94511380911503AA +:1021D000833009F455C030F4813071F0823009F455 +:1021E0008EC008958A3009F47AC08B3009F460C03B +:1021F000893009F09CC020C080911403813A09F015 +:1022000096C08091E800877F8093E8008091180352 +:1022100090911903892B21F460E18CE792E003C0CF +:1022200060E080E090E070E00E948D128091E80014 +:102230008B778093E800089580911403813209F030 +:1022400076C08091180390911903009719F00397B5 +:1022500009F06DC08091E800877F8093E80080914D +:10226000E80082FD05C0809113038111F8CF5FC0A3 +:102270008091F10080938C028091E8008B7753C0AD +:1022800080911403813A09F052C080911803909113 +:102290001903892B09F04BC08091E800877F809358 +:1022A000E8008091E80080FFFCCF8091150136C0E6 +:1022B000809114038132D9F580911803909119030C +:1022C000892BA9F58091E800877F8093E8000E9420 +:1022D000861380911603809315010C94BC1B80918A +:1022E0001403813221F58091E800877F8093E80014 +:1022F0000E9486138091170380938D020895809128 +:102300001403813AA1F48091E800877F8093E8006C +:102310008091E80080FFFCCF80918D028093F100D6 +:102320008091E8008E778093E8000C9486130895DE +:1023300084B7877F84BF88E10FB6F89480936000EC +:10234000109260000FBE90E080E80FB6F894809382 +:102350006100909361000FBE0E9429170E94D7135D +:102360000E9434148091E20084608093E2007894AB +:102370000E94BA160E942B178BE091E00E94D5169E +:1023800080911303853069F40E943C2280911103EF +:102390008823B1F30E946A22882391F30E942C12B1 +:1023A000EFCF0E943317ECCF292F3327233031058D +:1023B000C9F064F42130310581F02230310509F093 +:1023C00043C08DE690E028E433E042C0213231057D +:1023D000F1F02232310541F137C082E190E025EB86 +:1023E00033E036C099278130910541F08230910564 +:1023F00041F0892B49F5E4E4F3E005C0E6E1F3E0C0 +:1024000002C0ECEEF2E0849190E09F0121C06430C4 +:10241000D8F4E62FF0E0EE0FFF1FE255FE4F2081CB +:10242000318189E090E014C0643070F470E0FB0109 +:10243000EE0FFF1FEA55FE4F20813181FB01EE5563 +:10244000FE4F808190E004C080E090E020E030E02A +:10245000FA0131832083089580E189BD82E189BD3D +:1024600009B400FEFDCF8091D8008F7D8093D80005 +:102470008091E00082608093E0008091E00081FD27 +:10248000FCCF0895CF92DF92EF92FF920F931F93AC +:10249000CF93DF93EC018B016A010E94A513811198 +:1024A00033C0C114D10439F0F60180819181081B39 +:1024B000190BC80FD91FE12CF12C0115110519F1C9 +:1024C0008091E80085FD16C08091E8008E778093AA +:1024D000E800C114D10449F0F60180819181E80E31 +:1024E000F91EF182E08285E00FC00E94A5138823C7 +:1024F00021F30AC089918093F10001501109FFEF87 +:10250000EF1AFF0ADACF80E0DF91CF911F910F9190 +:10251000FF90EF90DF90CF90089520911A033091B3 +:102520001B032617370748F06115710539F4209110 +:10253000E8002E772093E80001C0B90140E0611562 +:102540007105A9F120911303222309F443C025301A +:1025500009F442C02091E80023FD40C02091E8002A +:1025600022FD32C02091E80020FFE9CF4091F30026 +:102570002091F20030E0342BFC01CF016115710590 +:1025800059F02830310540F481918093F100615079 +:1025900071092F5F3F4FF1CF41E02830310509F03D +:1025A00040E02091E8002E772093E800C8CF411149 +:1025B000C9CF0AC080911303882361F0853061F090 +:1025C0008091E80083FD0AC08091E80082FFF2CF8D +:1025D00080E0089582E0089583E0089581E0089501 +:1025E00020911A0330911B032617370748F0611515 +:1025F000710539F42091E8002E772093E80001C09E +:10260000B901FC0120E06115710591F1809113037E +:10261000882309F440C0853009F43FC08091E80068 +:1026200083FD3DC08091E80082FD2FC08091E800CD +:1026300080FFE9CF2091F3008091F20090E0922B8F +:102640006115710559F08830910540F4249120936B +:10265000F1003196615071090196F2CF21E008979F +:1026600009F020E08091E8008E778093E800CBCFDE +:102670002111CCCF0AC080911303882361F08530EB +:1026800061F08091E80083FD0AC08091E80082FF3C +:10269000F2CF80E0089582E0089583E0089581E01C +:1026A0000895982F973058F59093E900981739F0CE +:1026B0007091EC002091ED005091F00003C0242FA8 +:1026C000762F50E021FF19C03091EB003E7F309310 +:1026D000EB003091ED003D7F3093ED003091EB0049 +:1026E00031603093EB007093EC002093ED00509339 +:1026F000F0002091EE0027FF07C09F5FD3CF8F70BF +:102700008093E90081E0089580E0089580911403AA +:1027100087FF11C08091E80082FD05C080911303FE +:102720008111F8CF11C08091E8008B770BC08091A8 +:102730001303882349F08091E80080FFF8CF80914F +:10274000E8008E778093E80008952091E4003091AE +:10275000E50095E64091EC00842F817040FF22C097 +:102760008091E80080FD1CC080911303882391F0C4 +:10277000853091F08091EB0085FD10C04091E40020 +:102780005091E5004217530729F39A01915011F730 +:1027900084E0089582E0089583E0089581E008953B +:1027A00080E008954091E80042FFDECF08950E9446 +:1027B00045140E944D14E0EEF0E08081816080833A +:1027C000E8EDF0E080818F77808319BCA7EDB0E061 +:1027D0008C918E7F8C9380818F7E808310921203E8 +:1027E00008950F931F93CF93DF930E9445140E9487 +:1027F0004D14C8EDD0E088818F7788838881806808 +:10280000888388818F7D888319BC1092130310926E +:102810000F03109211031092100300EE10E0F80164 +:1028200080818B7F808388818160888342E060E043 +:1028300080E00E945113E1EEF0E080818E7F808382 +:10284000E2EEF0E080818160808380818860808317 +:10285000F80180818E7F8083888180618883DF9109 +:10286000CF911F910F910895E8EDF0E080818F7E68 +:102870008083E7EDF0E080818160808384E082BF27 +:1028800081E0809312030C94F113E8EDF0E0808175 +:102890008E7F80831092E20008951092DA001092E9 +:1028A000E10008951F920F920FB60F9211242F93FB +:1028B0003F934F935F936F937F938F939F93AF93C8 +:1028C000BF93EF93FF938091E10082FF0BC0809153 +:1028D000E20082FF07C08091E1008B7F8093E100DE +:1028E0000E94B9168091DA0080FF1FC08091D80045 +:1028F00080FF1BC08091DA008E7F8093DA00809188 +:10290000D90080FF0DC080E189BD82E189BD09B495 +:1029100000FEFDCF81E0809313030E94BD1005C02F +:1029200019BC109213030E94CB108091E10080FF2C +:1029300019C08091E20080FF15C08091E2008E7F77 +:102940008093E2008091E20080618093E2008091B8 +:10295000D80080628093D80019BC85E0809313036F +:102960000E94CF108091E10084FF30C08091E2008E +:1029700084FF2CC080E189BD82E189BD09B400FEDD +:10298000FDCF8091D8008F7D8093D8008091E100A9 +:102990008F7E8093E1008091E2008F7E8093E20041 +:1029A0008091E20081608093E20080910F03882390 +:1029B00011F084E007C08091E30087FD02C081E050 +:1029C00001C083E0809313030E94D0108091E10046 +:1029D00083FF29C08091E20083FF25C08091E10040 +:1029E000877F8093E10082E08093130310920F03AE +:1029F0008091E1008E7F8093E1008091E2008E7FE4 +:102A00008093E2008091E20080618093E20042E0E6 +:102A100060E080E00E9451138091F0008860809314 +:102A2000F0000E94CE10FF91EF91BF91AF919F9166 +:102A30008F917F916F915F914F913F912F910F9067 +:102A40000FBE0F901F9018951F920F920FB60F9206 +:102A500011242F933F934F935F936F937F938F93A3 +:102A60009F93AF93BF93CF93DF93EF93FF93C09167 +:102A7000E900CF708091EC00D82FD17080FDD0E8B4 +:102A80001092E9008091F000877F8093F0007894A5 +:102A90000E9468151092E9008091F0008860809390 +:102AA000F000CD2BCF70C093E900FF91EF91DF9143 +:102AB000CF91BF91AF919F918F917F916F915F91D6 +:102AC0004F913F912F910F900FBE0F901F9018952F +:102AD0001F93CF93DF93CDB7DEB7AA970FB6F894C5 +:102AE000DEBF0FBECDBFE4E1F3E088E08E0F909132 +:102AF000F10091938E13FBCF0E94E6108091E800C5 +:102B000083FF1FC18091140390911503492F50E05A +:102B10004A30510508F015C1FA01EA5AFF4F0C94EA +:102B2000752C803881F0823809F00BC18091180330 +:102B30008F708093E9008091EB0085FB882780F9F6 +:102B40001092E90006C08091100390911103911139 +:102B500082609091E800977F9093E8008093F10065 +:102B60001092F100C8C0282F2D7F09F0EAC08823F9 +:102B700019F0823061F0E5C080911603813009F0D0 +:102B8000E0C0933009F080E0809311032BC0809166 +:102B90001603811127C0809118038F7009F4D1C0EA +:102BA0008093E9002091EB0020FF1CC0933021F4BA +:102BB0008091EB00806214C09091EB009061909343 +:102BC000EB0021E030E0A90102C0440F551F8A95B7 +:102BD000E2F74093EA001092EA008091EB008860EF +:102BE0008093EB001092E9008091E800877F86C017 +:102BF0008111A7C0109116031F778091E3008078A0 +:102C0000812B8093E3008091E800877F8093E80028 +:102C10000E9486138091E80080FFFCCF8091E30042 +:102C200080688093E300111102C082E001C083E05C +:102C30008093130386C08058823008F082C0809150 +:102C40001603909117038C3D53E0950779F583E0C7 +:102C50008A838AE289834FB7F894DE01139620E0D5 +:102C60003EE051E2E32FF0E050935700E49120FF63 +:102C700003C0E295EF703F5FEF708E2F90E0EA3077 +:102C800010F0C79601C0C0968D939D932F5F24319D +:102C900049F74FBF8091E800877F8093E8006AE2A0 +:102CA00070E0CE0101960E948D1214C0AE014F5FFC +:102CB0005F4F609118030E94D411BC01009709F482 +:102CC00040C09091E800977F9093E80089819A81B5 +:102CD0000E94F0128091E8008B778093E80031C069 +:102CE000803879F58091E800877F8093E8008091B3 +:102CF0000F038093F1008091E8008E778093E800C5 +:102D00000E9486131EC081111CC090911603923040 +:102D1000C0F48091E800877F8093E80090930F03D0 +:102D20000E94861380910F03811106C08091E300F9 +:102D300087FD02C081E001C084E0809313030E94FC +:102D4000D2108091E80083FF0AC08091E800877F5D +:102D50008093E8008091EB0080628093EB00AA965C +:102D60000FB6F894DEBF0FBECDBFDF91CF911F919C +:102D700008950895CF93809113038823A1F0C09103 +:102D8000E900CF709091EC00892F817090FD80E870 +:102D9000C82B1092E9008091E80083FD0E9468151D +:102DA000CF70C093E900CF910895909393028093E0 +:102DB00092020895E0919202F0919302309721F0EF +:102DC0000190F081E02D099480E00895E091920255 +:102DD000F0919302309721F00280F381E02D099465 +:102DE0000895E0919202F0919302309721F00480CF +:102DF000F581E02D0994089520919002309191027F +:102E00008217930771F09093910280939002E09162 +:102E10009202F0919302309721F00680F781E02D25 +:102E20000994089520918E0230918F0282179307A2 +:102E300071F090938F0280938E02E0919202F09154 +:102E40009302309721F00084F185E02D09940895D4 +:102E500008950C9428170E94AF220E9400090E9436 +:102E600035230C94E4275F926F927F928F929F920A +:102E7000AF92BF92CF92DF92EF92FF920F931F9388 +:102E8000CF93DF9300D000D01F92CDB7DEB70E9462 +:102E900045099DE9C92E92E0D92E03E010E0AA244D +:102EA000A394B12C502E802F0E94C0094C01F60132 +:102EB000729062906F016826792661147104A1F402 +:102EC0000150110978F78FEF89838A831B820E9452 +:102ED000B8228160782F9D838C8349815A816B81D0 +:102EE0008D810E94E31738C08091F20281FD0E941B +:102EF000C9092BE030E07501022E02C0EE0CFF1C68 +:102F00000A94E2F7C70186219721892B09F12983C9 +:102F10005A828E209F2091E0892809F490E09B83BB +:102F20000E94B8228160782F9D838C8349815A81C9 +:102F30006B818D810E94E317000F111FF801EB5682 +:102F4000FD4F80819181E826F926F182E08204C05C +:102F50002150310980F6B4CF0E941C2510919402B3 +:102F60000E94DA161817D1F00E94DA1680939402A4 +:102F70000F900F900F900F900F90DF91CF911F91B6 +:102F80000F91FF90EF90DF90CF90BF90AF909F9008 +:102F90008F907F906F905F900C94EA080F900F9045 +:102FA0000F900F900F90DF91CF911F910F91FF9095 +:102FB000EF90DF90CF90BF90AF909F908F907F90D9 +:102FC0006F905F900895CF93DF93CDB7DEB72B97C7 +:102FD0000FB6F894DEBF0FBECDBF4F835887698709 +:102FE0007A878B87DE01119686E0FD0111928A9522 +:102FF000E9F785E0FE01379601900D928A95E1F799 +:1030000049815A816B817C818D819E810E945A1EEB +:103010002B960FB6F894DEBF0FBECDBFDF91CF91D8 +:103020000895CF93882309F4C2C0C82F823859F479 +:103030000E94DA1681FDBBC089E30E9434210E9400 +:10304000012289E30CC0833879F40E94DA1680FDEE +:10305000AEC083E50E9434210E94012283E50E94D4 +:103060007621CF910C940122843859F40E94DA160B +:1030700082FD9DC087E40E9434210E94012287E4E2 +:10308000EECF8CEF8C0F813A48F48C2F0E944C27A6 +:1030900081118DC08C2F0E943421E3CF80E28C0FF0 +:1030A000883048F4C77081E001C0880FCA95EAF7FC +:1030B0000E94BA21D6CF8BE58C0F833078F4C53AC5 +:1030C00029F0C63A31F083E890E005C081E890E04D +:1030D00002C082E890E0CF910C94FC1688E58C0F3A +:1030E000833108F064C0C83A39F1C93A41F1CA3AAB +:1030F00049F1CB3A51F1CC3A59F1CD3A61F1C03BAB +:1031000069F1CE3A71F1CF3A79F1C13B81F1C23B1D +:1031100089F1C33B91F1C43B99F1C53BA1F1C63B99 +:10312000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF9 +:10313000C9F180E090E038C082EE90E035C089EEC1 +:1031400090E032C08AEE90E02FC085EB90E02CC07A +:1031500086EB90E029C087EB90E026C08CEC90E0F5 +:1031600023C08DEC90E020C083E891E01DC08AE888 +:1031700091E01AC082E991E017C084E991E014C09F +:1031800081E292E011C083E292E00EC084E292E01C +:103190000BC085E292E008C086E292E005C087E2BB +:1031A00092E002C08AE292E0CF910C941217CF9184 +:1031B0000895882309F44BC0823859F40E94DA1626 +:1031C00081FF45C089E30E9434210E94012289E3E6 +:1031D0000CC0833871F40E94DA1680FF38C083E592 +:1031E0000E9434210E94012283E50E9476210C94E2 +:1031F0000122843859F40E94DA1682FF28C087E43D +:103200000E9434210E94012287E4EFCF9CEF980FA7 +:10321000913A58F390E2980F983050F4877091E00B +:1032200001C0990F8A95EAF7892F0E94C021DFCF4C +:103230009BE5980F933020F480E090E00C94FC160E +:10324000885A833120F480E090E00C94121708959E +:10325000882321F00E94BA210C940122089588232A +:1032600021F00E94C0210C94012208957F928F9238 +:103270009F92AF92BF92CF92DF92EF92FF920F9305 +:103280001F93CF93DF931F92CDB7DEB77C01C62E7D +:10329000772EFC01058102950F70128111110E9499 +:1032A000D7210E942D21882379F0112369F080E233 +:1032B0008C0D883048F082E00E9416210E942D215A +:1032C00091E0D82ED92601C0D12CE72DE295EF70E0 +:1032D000F0E0E05AFF4F0C94752C872D807F072D6E +:1032E0000F70882311F00295007F112389F00023CD +:1032F00009F499C180E28C0D883020F4802F0E945F +:10330000BA2103C0802F0E94CA210E9401228BC1D2 +:103310008C2D0E94D918002309F4C3C180E28C0DC2 +:10332000883020F4802F0E94C02103C0802F0E948B +:10333000D0210E940122B5C1872D807F972D9F70DB +:10334000803211F4892F03C0892F8295807FCC2091 +:1033500021F0F1E0CF16A1F01DC0112339F00023B8 +:1033600019F1013009F50E94EA219BC1002319F0EF +:10337000013009F496C189830E94ED21898110C131 +:10338000112321F0063008F08CC10EC0053008F082 +:1033900088C106C1112359F0002331F0F70195814E +:1033A00090FF41C19F7095830E9428197AC1002324 +:1033B00009F4F6C03EC1872D86958695837090E00E +:1033C000009719F0019761F06CC1112321F08C2D49 +:1033D000972D937002C080E090E00E94FC1661C1BE +:1033E000112321F08C2D972D937002C080E090E086 +:1033F0000E94121756C18C2D112319F00E9424240B +:1034000002C00E948C240E9411254BC1872D83701D +:1034100009F052C0111145C18C2D82958695877097 +:10342000880F880F9C2D9F70892E912CA12CB12C78 +:10343000082E04C0880C991CAA1CBB1C0A94D2F745 +:10344000C4FE14C00FE010E020E030E0B901A80194 +:1034500004C0440F551F661F771F8A95D2F7CB0112 +:10346000BA01609570958095909503C060E070E01A +:10347000CB01272D26952695237030E0223031058B +:1034800069F02330310589F0682979298A299B2937 +:103490002130310571F00E94A21F03C168297929EA +:1034A0008A299B290E94BE1FFCC00E94A21FC50141 +:1034B000B4010E94861FF5C0112319F0872D817079 +:1034C00001C08695882309F4ECC08C2D82958695E1 +:1034D0008770880F880F9C2D9F70892E912CA12CAE +:1034E000B12C082E04C0880C991CAA1CBB1C0A9481 +:1034F000D2F7C4FE14C00FE010E020E030E0B901C4 +:10350000A80104C0440F551F661F771F8A95D2F784 +:10351000CB01BA01609570958095909503C060E0ED +:1035200070E0CB01272D269526952370422F50E081 +:103530004230510569F04330510589F068297929F5 +:103540008A299B294130510571F00E947C20A9C035 +:10355000682979298A299B290E949820A2C00E9463 +:103560007C20C501B4010E9460209BC08C2D90E09E +:10357000FC01E05EF109E531F10508F050C0E059C9 +:10358000FF4F0C94752C0C2D0F70872D8F7111230C +:1035900021F00E94F91F802F07CF0E941A20802F50 +:1035A0000E942F197EC0112341F0053008F079C028 +:1035B000872D8F710E943F2074C0063008F071C0C3 +:1035C000F7CF112339F0872D8F710E94F91F69C041 +:1035D0001123C9F3872D8F710E941A2062C0112315 +:1035E00029F0872D8F710E94E41F5BC00E94DA1FB3 +:1035F00058C0112351F0172D1F71812F0E94F91F00 +:1036000063E0812F0E940D214CC081E00E941621B1 +:10361000023008F446C082E00E94162142C0112305 +:1036200031F0002381F28C2D0E9411183AC0002342 +:1036300089F28C2D0E94D91834C0472D4F706C2D03 +:10364000C7010E9455030E94FE1E2BC0111129C004 +:10365000472D4F7050E042305105B9F04CF4411500 +:10366000510581F041305105E1F40E940C2819C048 +:103670004330510569F04430510599F48C2D0E9476 +:103680005E280FC00E94F5270CC00E94282809C0A0 +:103690000E943B2806C0472D4F706C2DC7010E9429 +:1036A000CB05DD20F9F00E94092180FD1BC0F70148 +:1036B00012820E9403210E94F91FC7010E94811BF0 +:1036C0000E9403210F90DF91CF911F910F91FF90E6 +:1036D000EF90DF90CF90BF90AF909F908F907F90B2 +:1036E0000C941A200F90DF91CF911F910F91FF90B2 +:1036F000EF90DF90CF90BF90AF909F908F907F9092 +:1037000008950F931F93CF93DF93EC0188819981E4 +:103710002B813C81232BB9F09F3F11F48F3F99F00F +:10372000CE010E94CA03882371F0688179818A8161 +:103730000E94FF208C010E94B4200E947B1FB801D0 +:10374000CE010E943619DF91CF911F910F910895FC +:103750000E94D7210E94E7210E94AC210E940122F1 +:103760000E94C2250E94112580E090E00E94FC1674 +:1037700080E090E00C9412170E94C7210C94A81BC3 +:103780000E94F420292F22952F7030E02C30310533 +:103790004CF42A3031056CF42250310922303105C5 +:1037A000A8F407C02C30310569F02F30310551F0F5 +:1037B0000DC0803F69F018F4803E40F409C0843F9A +:1037C00029F406C093FB882780F9089580E00895C6 +:1037D00081E00895CF93DF9300D000D01F92CDB742 +:1037E000DEB70F900F900F900F900F90DF91CF9159 +:1037F0000895CF93DF9300D000D000D0CDB7DEB7CF +:1038000026960FB6F894DEBF0FBECDBFDF91CF91E5 +:1038100008951F93CF93DF93C0919D0216E080918E +:103820009E02C81799F0D0E01C9FF0011D9FF00D7B +:103830001124E156FD4F4081518162817381848161 +:1038400095810E94F91B2196C770E9CFDF91CF9136 +:103850001F9108954091CF025091D0026091D10202 +:103860007091D2028091D3029091D4020C94F91BF2 +:103870008091D40282958F7009F054C08091D1025A +:10388000882309F44FC080919D02A0919E0260910F +:10389000CF027091D0024091D2025091D302B6E093 +:1038A0008A1709F43FC090E041155105C1F17F3FEF +:1038B00011F46F3FA1F1B89FF001B99FF00D1124F1 +:1038C000E156FD4F218172132AC02081621327C067 +:1038D0002281211124C0238134812417350710F45B +:1038E00021503109241B350B283C3105C0F42091AF +:1038F000D4022F7020612093D40226E0289FF0018B +:10390000299FF00D1124EC55FD4F80818F7080614F +:1039100080838FEC92E00E94811B0C94091C01961D +:103920008770BECF0895CF92DF92EF92FF920F93F0 +:103930001F93CF93DF93CDB7DEB762970FB6F8949E +:10394000DEBF0FBECDBF8C0185E0F801DE011D9604 +:1039500001900D928A95E1F7D8014C9111965C91F6 +:10396000119712966C9112971396CD90DC90149744 +:103970003091CF027091D0028091D2029091D30207 +:10398000009709F46BC17F3F19F43F3F09F466C10A +:10399000E090D102EE2009F4C0C02091D402C816F4 +:1039A000D90628F0F601E81BF90BCF0104C0809579 +:1039B00090958C0D9D1DFF24F394883C910578F023 +:1039C000F12C207F09F0C6C07C2DD98AC88A89894C +:1039D0000E94EA1B8FEC92E00E94811BB1C0822FF3 +:1039E000807F09F046C0751314C0341312C06111F2 +:1039F00010C02F7020612093D4020E942A1C8FECEB +:103A000092E00E94811B8091D402D80115968C937C +:103A10002EC0CD2819F15F3F11F44F3FF9F0F62E7B +:103A200061111CC080919D0220919E0236E0821798 +:103A300009F45AC090E0389FF001399FF00D11242D +:103A4000E156FD4F7181571306C07081471303C0C3 +:103A50007281711103C001968770E9CFF62E66233B +:103A600009F418C18091D40281608093D402F12CB2 +:103A700011C1751308C0341306C0611104C08091D0 +:103A8000D402D801C3C04D875E878D859E856A8B21 +:103A90000E94C01B6A898823E1F16623D1F120913D +:103AA000D402822F82958F7090E0029774F08091FB +:103AB000CF029091D00298878F831986DB86CA86C1 +:103AC0002C87CE0107960E94811B86E0F801AFEC9F +:103AD000B2E001900D928A95E1F70E94381C0E9495 +:103AE0002A1CFF24F394D6C04D875E878D859E8562 +:103AF0000E94F420292F22952F7030E022303105CA +:103B00000CF0BCC09F7009F0B6C0805E883008F42D +:103B1000C1C0C8010E94811BE4CFC816D90608F4B1 +:103B200053C0F601E81BF90BCF01883C910508F45E +:103B300050C0F12C7C2DD98AC88A89890E94EA1B41 +:103B4000EFECF2E086E0DF011D928A95E9F70E9432 +:103B50002A1CA0C0751314C0341312C0611110C008 +:103B60008091D402F8018583C8010E94811B86E000 +:103B7000EFECF2E0DF011D928A95E9F7FE2C8AC096 +:103B80004D875E878D859E856A8B0E94C01B6A89E2 +:103B9000882309F4BECF662309F4BBCF2091D40259 +:103BA000822F82958F7090E002970CF48ECF8091D7 +:103BB000CF029091D0029A8389831B82DD82CC82CE +:103BC0002E83CE0101967FCF809590958C0D9D1D03 +:103BD000ACCFF62E662309F49CCF75132EC0341398 +:103BE0002CC02091D40220FD1FC0822F82958F709F +:103BF000D9F0D80115962C9315978F3049F08F5F27 +:103C0000982F9295907F822F8F70892B15968C9389 +:103C1000C8010E94811B86E0F801AFECB2E0019080 +:103C20000D928A95E1F793CF86E0F801AFECB2E010 +:103C300001900D928A95E1F72DC04D875E878D85A5 +:103C40009E850E94C01B811140CF8091D40281606B +:103C50008093D402C8010E94811B1CC0662309F412 +:103C600058CF4D875E878D859E850E94C01B882317 +:103C700009F44FCF2ACF811148CF0CC02430310531 +:103C80000CF047CF9F7009F440CFF8019581907FE9 +:103C900009F03BCF8F2D62960FB6F894DEBF0FBEB2 +:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB +:103CB000CF9008951F93CF93DF93CDB7DEB72C97A6 +:103CC0000FB6F894DEBF0FBECDBF4F83588769870C +:103CD0007A878B879C87CE0107960E94931C882346 +:103CE00069F08F8198852A853B85232BF1F19F3FD1 +:103CF00009F063C08F3F09F060C037C086E0FE0165 +:103D00003796DE01119601900D928A95E1F76F8149 +:103D10007885EA85FB85309741F17F3F11F46F3F4D +:103D200021F120919E0230E0C90101968770992708 +:103D300040919D0250E08417950709F447C06983BC +:103D40007A83FD83EC8396E0929FD001939FB00D20 +:103D50001124A156BD4FFE01319601900D929A9506 +:103D6000E1F780939E020E94091C16E080919D025B +:103D700090919E028917C1F1189FC00111248156AC +:103D80009D4F0E94931C882379F1E0919D021E9F14 +:103D9000F0011124E156FD4F408151816281738110 +:103DA000848195810E94F91B80919D0290E001968B +:103DB0008770992780939D02D9CF4F815885698557 +:103DC0007A858B859C850E94F91BCFCF0E94BC1BF6 +:103DD00010929E0210929D02EFECF2E086E0DF016D +:103DE0001D928A95E9F7C1CF2C960FB6F894DEBFE5 +:103DF0000FBECDBFDF91CF911F910895EF92FF923B +:103E00000F931F93CF93DF938C01009709F46CC03D +:103E1000F12CEE24E394E8012196F8018491843793 +:103E200040F4843008F051C0813081F0823019F1C3 +:103E30005BC0853709F444C0A8F19CE7980F903720 +:103E400008F052C08F770E94D91841C00E5F1F4FF3 +:103E5000FE01C49180E28C0F883048F4C7708E2D2B +:103E600001C0880FCA95EAF70E94DA2114C08C2F8E +:103E70000E9411182DC00E5F1F4FFE01C49180E2F9 +:103E80008C0F883058F4C7708E2D01C0880FCA95EA +:103E9000EAF70E94E0210E9401221AC08C2F0E94A2 +:103EA000D91816C00E5F1F4FFE01C491CC2381F0BC +:103EB0008FE99FE00197F1F700C00000C150F6CFF5 +:103EC0000E5F1F4FFE01F49003C00E9411188E0177 +:103ED0008F2D882309F49FCFEFE9FFE03197F1F7A9 +:103EE00000C000008150F5CFDF91CF911F910F915D +:103EF000FF90EF90089508956093D9027093DA02CD +:103F00008093DB029093DC020C94A81B0F931F9309 +:103F10000091D9021091DA022091DB023091DC028B +:103F2000DC01CB01802B912BA22BB32B8093D902E8 +:103F30009093DA02A093DB02B093DC021F910F9101 +:103F40000C94A81B0F931F930091D9021091DA02D1 +:103F50002091DB023091DC02DC01CB018023912334 +:103F6000A223B3238093D9029093DA02A093DB02B9 +:103F7000B093DC021F910F910C94A81B0F931F9319 +:103F80000091D9021091DA022091DB023091DC021B +:103F9000DC01CB0180279127A227B3278093D90288 +:103FA0009093DA02A093DB02B093DC021F910F9191 +:103FB0000C94A81B1092D5021092D6021092D70230 +:103FC0001092D8020C94A81B41E050E060E070E031 +:103FD00004C0440F551F661F771F8A95D2F7409380 +:103FE000D5025093D6026093D7027093D8020C94F6 +:103FF000A81B41E050E060E070E004C0440F551F92 +:10400000661F771F8A95D2F78091D5029091D602CC +:10401000A091D702B091D802482B592B6A2B7B2B49 +:104020004093D5025093D6026093D7027093D80282 +:104030000C94A81B41E050E060E070E004C0440F25 +:10404000551F661F771F8A95D2F74095509560954A +:1040500070958091D5029091D602A091D702B0912F +:10406000D802482359236A237B234093D5025093D7 +:10407000D6026093D7027093D8020C94A81B41E03B +:1040800050E060E070E004C0440F551F661F771FCA +:104090008A95D2F78091D5029091D602A091D7024D +:1040A000B091D802482759276A277B274093D50229 +:1040B0005093D6026093D7027093D8020C94A81B39 +:1040C0000F931F930091D5021091D6022091D70231 +:1040D0003091D802DC01CB01802B912BA22BB32B8A +:1040E0008093D5029093D602A093D702B093D802C2 +:1040F0001F910F910C94A81B0F931F930091D50251 +:104100001091D6022091D7023091D802DC01CB0168 +:1041100080239123A223B3238093D5029093D602C8 +:10412000A093D702B093D8021F910F910C94A81BB3 +:104130000F931F930091D5021091D6022091D702C0 +:104140003091D802DC01CB0180279127A227B32729 +:104150008093D5029093D602A093D702B093D80251 +:104160001F910F910C94A81B0895CF92DF92EF92AC +:10417000FF920F931F93CF93DF938C01C090D902CE +:10418000D090DA02E090DB02F090DC028091D50260 +:104190009091D602A091D702B091D802C82AD92A0C +:1041A000EA2AFB2ACFE1D0E0D701C6010C2E04C0D9 +:1041B000B695A795979587950A94D2F780FF06C084 +:1041C000B8018C2F0E945008019721F4219760F7C5 +:1041D00080E001C08C2FDF91CF911F910F91FF9054 +:1041E000EF90DF90CF900895CF93DF93EC010E9482 +:1041F000B520BE010E945008DF91CF910895CB01F8 +:104200000E94F42008958091DD028595859585951D +:1042100008958091DD028770089598E0899F90014C +:104220001124262B2093DD020C94F91F2091DD022E +:10423000809582238093DD02982F977069F430E097 +:10424000482F552747FD50952417350729F08595A8 +:10425000859585950C941A2008959091DD029770AC +:1042600081E009F480E0089590911501992321F0EF +:1042700090911601911109C02091170130911801F8 +:10428000F90132969FEF40E01FC0982F96959695C2 +:1042900096959F3050F5E0911701F0911801E90FC4 +:1042A000F11D877021E030E0A90102C0440F551FC5 +:1042B0008A95E2F7CA019181892B818308959F3FF6 +:1042C00039F04F5F4E3041F051915813F8CF0DC087 +:1042D0005111F7CF942FF5CF9F3F39F0F901E90F36 +:1042E000F11D97FDFA958283089508959091150127 +:1042F000992321F090911601911109C02091170185 +:1043000030911801F9013296205F3F4F1FC0982F5E +:104310009695969596959F30F0F4E0911701F0915F +:104320001801E90FF11D877021E030E0A90102C0FA +:10433000440F551F8A95E2F7CA0180959181892320 +:10434000818308953196E217F30729F0908198133D +:10435000F9CF1082F7CF089581E090E0E091170146 +:10436000F0911801E80FF91F108201968031910534 +:10437000A9F708959091F102892B8093F102089595 +:1043800080959091F10289238093F1020895109213 +:10439000F10208959091F002892B8093F002089524 +:1043A00080959091F00289238093F00208951092F5 +:1043B000F00208959091EF02892B8093EF02089507 +:1043C00080959091EF0289238093EF0208951092D7 +:1043D000EF0208958093DE0208951092DE020895A0 +:1043E0008091170190911801FC0131969C01205F8A +:1043F0003F4F80E0919191118F5FE217F307D1F762 +:104400000895E0911701F09118018091F1028083E5 +:10441000E0911701F091180190818091F002892BB1 +:104420008083E0911701F091180190818091EF0253 +:10443000892B80838091DE02882361F0E09117014F +:10444000F09118019081892B80830E94F0218111C5 +:104450001092DE0280911701909118010C94E616DB +:1044600020E0009739F0AC01415051098423952395 +:104470002F5FF7CF822F089580911303843039F195 +:104480001092F30220E488E190E00FB6F894A8952A +:10449000809360000FBE2093600080E00E94BC0209 +:1044A00080E00E94EA0883B7817F846083BF83B77E +:1044B000816083BF7894889583B78E7F83BF88E1BE +:1044C0000FB6F89480936000109260000FBE0895BC +:1044D0000895089580E00E94BC020E9468220E9414 +:1044E00045090E9469220E94CA0991E0811101C018 +:1044F00090E0892F08950E94BC1B80E00E94BC02BE +:104500000E94E4270E94DA160C94EA081F920F9288 +:104510000FB60F9211248F939F93AF93BF93809107 +:10452000F302811113C08091F4029091F502A091E1 +:10453000F602B091F7024196A11DB11D8093F402DD +:104540009093F502A093F602B093F702BF91AF915A +:104550009F918F910F900FBE0F901F90189582E042 +:1045600084BD93E095BD9AEF97BD80936E0008954A +:104570002FB7F8948091F4029091F502A091F60281 +:10458000B091F7022FBF0895CF92DF92EF92FF9282 +:104590000F931F932FB7F8944091F4025091F502B6 +:1045A0006091F6027091F7022FBF6A017B01EE2441 +:1045B000FF248C0120E030E0C016D106E206F306AD +:1045C00010F4415051099A01281B390BC9011F9160 +:1045D0000F91FF90EF90DF90CF9008951F920F9270 +:1045E0000FB60F9211248F939F93AF93BF93809137 +:1045F000F4029091F502A091F602B091F7020196B3 +:10460000A11DB11D8093F4029093F502A093F602D0 +:10461000B093F702BF91AF919F918F910F900FBE12 +:104620000F901F9018950E94D713F8942FEF87EAE8 +:1046300091E6215080409040E1F700C0000087E003 +:1046400090EBDC0180931E0390931F03A093200343 +:10465000B09321039CE088E10FB6F894A89580936D +:1046600060000FBE90936000FFCF0E947423811101 +:1046700002C00E9450230E947F238093F2020E9476 +:10468000872380931C0387FB882780F9809316017A +:104690000E948323682F70E080E090E00C947C1FE0 +:1046A0006DEE7EEF80E090E00E949B2C60E082E067 +:1046B00090E00E94892C60E083E090E00E94892CC9 +:1046C00060E084E090E00E94892C60E085E090E06A +:1046D0000E94892C60E086E090E00E94892C6FEFB8 +:1046E00087E090E00C94892C80E090E00E94832C7D +:1046F00021E08D3E9E4F09F020E0822F089582E058 +:1047000090E00C947B2C83E090E00C947B2C84E074 +:1047100090E00C947B2C682F84E090E00C94892C22 +:1047200086E090E00C947B2C682F86E090E00C945F +:10473000892C87E090E00C947B2C682F87E090E038 +:104740000C94892C8091FA0280FF0BC060911C01AF +:1047500085E0689FB00111247595679575956795FB +:104760002BC081FF09C060911C0185E0689FB001EA +:1047700011247595679520C082FF07C060911C01C8 +:1047800085E0689FB001112417C09091FB02992326 +:10479000D1F060911B01961788F720911C0185E0EC +:1047A000289F90011124929FA001939F500D1124E6 +:1047B00070E0CA010E94612C6038710540F46115F7 +:1047C000710539F002C065E070E0862F08958FE72B +:1047D000089581E008958091FA0280FF08C06091F9 +:1047E0001A0170E0759567957595679521C081FFF1 +:1047F00006C060911A0170E07595679519C082FF37 +:1048000004C060911A0170E010C09091FB029923DE +:10481000C1F0609119019617A0F780911A01899F44 +:10482000C001112470E00E94612C6038710528F4E9 +:104830006115710521F0862F08958FE7089581E0B5 +:10484000089561E070E0F4CF803F21F40E94A2233C +:10485000819504C0813F29F40E94A2238093FE0227 +:104860000895823F21F40E94A223819504C0833FD2 +:1048700029F40E94A2238093FD020895893F19F430 +:104880000E94EB2305C08A3F31F40E94EB238195FF +:104890008093FF0208958B3F21F40E94EB238195C2 +:1048A00004C08C3F29F40E94EB23809300030895F9 +:1048B000843F21F48091FC02816017C0853F21F480 +:1048C0008091FC02826011C0863F21F48091FC023D +:1048D00084600BC0873F21F48091FC02886005C092 +:1048E000883F31F48091FC0280618093FC0208953E +:1048F0008D3F21F48091FA0281600BC08E3F21F43C +:104900008091FA02826005C08F3F29F48091FA02FB +:1049100084608093FA020895803F39F48091FE020A +:1049200087FF6CC01092FE0269C0813F29F480911C +:10493000FE021816BCF362C09091FD02823F29F47A +:1049400097FF5CC01092FD0259C0833F19F41916FD +:10495000CCF354C0893F41F48091FF0218160CF04B +:104960004DC01092FF024AC08A3F29F48091FF0295 +:1049700087FF44C0F6CF8B3F39F48091000387FF57 +:104980003DC0109200033AC08C3F29F4809100038F +:104990001816BCF333C0843F21F48091FC028E7F53 +:1049A00017C0853F21F48091FC028D7F11C0863FA6 +:1049B00021F48091FC028B7F0BC0873F21F4809112 +:1049C000FC02877F05C0883F31F48091FC028F7E16 +:1049D0008093FC0213C08D3F21F48091FA028E7FF8 +:1049E0000BC08E3F21F48091FA028D7F05C08F3F6E +:1049F00029F48091FA028B7F8093FA028091FD0264 +:104A000081110EC08091FE0281110AC08091FF02C7 +:104A1000811106C080910003811102C01092FB0237 +:104A200008958CEF92E00E94F1160E94B8229093B4 +:104A3000F9028093F80208951F93CF93DF9380913A +:104A4000F8029091F9020E94C422AC019091FB02FD +:104A5000992321F020911D0130E006C020911E0114 +:104A60008AE0289F900111244217530708F486C05A +:104A70008091FD02C091FE02D091FF0210910003CF +:104A8000811107C0C11176C0D11174C0111172C05B +:104A900075C09F3F19F09F5F9093FB02181624F496 +:104AA0000E94A2238093FD028091FD0287FF05C032 +:104AB0000E94A22381958093FD021C1624F40E947B +:104AC000A2238093FE028091FE0287FF05C00E9410 +:104AD000A22381958093FE026091FD02662339F145 +:104AE000C091FE02CC2319F1772767FD7095872FBF +:104AF000972F0E94832923E333E343E35FE30E947C +:104B0000932A0E9450296093FD026C2F772767FD3E +:104B10007095872F972F0E94832923E333E343E384 +:104B20005FE30E94932A0E9450296093FE021D16A3 +:104B300024F40E94EB238093FF028091FF0287FF01 +:104B400005C00E94EB2381958093FF02111624F487 +:104B50000E94EB23809300038091000387FF05C030 +:104B60000E94EB23819580930003DF91CF911F91E9 +:104B70000C9411259F3F09F08ECF96CFDF91CF91F6 +:104B80001F910895ECEFF2E085E0DF011D928A9518 +:104B9000E9F71092FB021092FA020895833081F136 +:104BA00028F4813059F08230D1F00895853009F42D +:104BB00049C0B8F1863009F456C0089580911E01AD +:104BC000262F30E0280F311D2F3F310524F4680FC8 +:104BD00060931E0108958FEF80931E0108958091C8 +:104BE0001D01262F30E0280F311D2F3F310524F401 +:104BF000680F60931D0108958FEF80931D01089544 +:104C000080911C01262F30E0280F311D2F3F3105E8 +:104C100024F4680F60931C0108958FEF80931C01AA +:104C2000089580911B01262F30E0280F311D2F3F62 +:104C3000310524F4680F60931B0108958FEF809372 +:104C40001B01089580911A01262F30E0280F311D95 +:104C50002F3F310524F4680F60931A0108958FEFF8 +:104C600080931A01089580911901262F30E0280FB2 +:104C7000311D2F3F310524F4680F60931901089509 +:104C80008FEF809319010895833011F128F481305A +:104C900049F0823091F00895853081F120F186301D +:104CA000C1F1089580911E01681720F4861B80933E +:104CB0001E01089510921E01089580911D0168172C +:104CC00020F4861B80931D01089510921D01089504 +:104CD00080911C01681720F4861B80931C010895A5 +:104CE00010921C01089580911B01681720F4861B07 +:104CF00080931B01089510921B01089580911A0161 +:104D0000681720F4861B80931A01089510921A01E7 +:104D1000089580911901681720F4861B809319016A +:104D200008951092190108950F931F93873208F088 +:104D300048C08E3108F08DC0803109F477C008F585 +:104D4000873009F461C068F4863009F09DC0809115 +:104D5000F202817F8E7F8093F20281E080930203D2 +:104D600094C08B3009F489C08E3009F08DC08091D9 +:104D7000F20282FB222720F991E0922790FB82F930 +:104D80005EC0863109F479C060F4813109F07CC0DD +:104D90000E94BC1B9091160181E089278093160127 +:104DA0006CC0893109F469C08B3109F06DC0809104 +:104DB000F20281FB222720F991E0922790FB81F9F2 +:104DC0003EC0883309F459C050F4893209F457C001 +:104DD000853309F454C0873209F451C055C0833477 +:104DE00009F44DC028F48A3308F44EC0895332C008 +:104DF000883409F049C00E94BC1B0E94FA090E9435 +:104E0000C1030E94132339C09091F202892F80952B +:104E1000817080FB90F929F0966098609093F2027F +:104E200034C0997F977F9093F20227C08091F2025D +:104E300083FB222720F991E0922790FB83F980934E +:104E4000F2029923D1F08091F20281608093F20204 +:104E500014C08D5141E050E060E070E08A019B0198 +:104E600004C0000F111F221F331F8A95D2F7C901FA +:104E7000B8010E947C1F0E94BC1B81E006C061E05B +:104E800070E080E090E0F5CF80E01F910F910895F1 +:104E900080E0089580E00895CF93C82F80910203A9 +:104EA000813069F018F08230C9F184C0E0911701B7 +:104EB000F09118018081823209F07EC007C0E09134 +:104EC0001701F09118018081823261F48C2F0E94C9 +:104ED0004827811104C08C2F0E9494261DC081E0B8 +:104EE00090E01AC08C2F0E944A27811114C0C4314F +:104EF00079F048F4CB3079F0C03109F061C082E03C +:104F00008093020308C0C93219F0C83321F058C099 +:104F10001092020355C081E0817054C0C93291F1F2 +:104F200020F5C43179F1B0F4C73009F047C08EE103 +:104F300080931E0182E380931D018AE080931C010F +:104F400084E180931B0188E080931A0188E28093BA +:104F5000190134C0CE51C63088F5EC2FF0E0EA5488 +:104F6000FE4F80818093010329C0CE34E9F020F404 +:104F7000CB3421F56AE013C0C13579F0C235F1F4C4 +:104F800061E00DC080910103882319F010920103A4 +:104F900015C081E08093020315C061E006C08091D6 +:104FA00001030E94CE250AC06AE0809101030E949D +:104FB000442604C01092020380E004C081E002C0D5 +:104FC00080E0AACFCF9108950E947423811102C07E +:104FD0000E9450230E94902380931D0380FF02C0F3 +:104FE000869501C080E00C94BC0280911D03982F2F +:104FF0009695292F30E0233031054CF49F5F990FAF +:105000008170892B816080931D030E94942380917D +:105010001D0386950C94BC0280911D03982F9695D4 +:1050200091F09158990F8170892B80931D038E7F89 +:1050300091E009F490E080911D0390FB80F980934A +:105040001D030E94942380911D0386950C94BC023D +:1050500080911D03982F909590FB80F980931D03FC +:105060000E94942380911D0380FF02C0869501C099 +:1050700080E00C94BC0290911D03892F86958F5F70 +:105080008F779170843028F4880F892B80931D03CB +:1050900002C090931D0380911D038E7F91E009F45F +:1050A00090E080911D0390FB80F980931D030E9486 +:1050B000942380911D0386950C94BC0220911D03BE +:1050C000922F96958927982F990F822F8170892B7F +:1050D00080931D038E7F91E009F490E080911D0381 +:1050E00090FB80F980931D030E94942380911D03FF +:1050F00086950C94BC0280911D03869508955058A6 +:10510000BB27AA270ED0D1C1C2D130F0C7D120F021 +:1051100031F49F3F11F41EF4B7C10EF4E095E7FBA4 +:105120009FC1E92FD3D180F3BA17620773078407B1 +:10513000950718F071F49EF5EBC10EF4E0950B2E77 +:10514000BA2FA02D0B01B90190010C01CA01A001D9 +:105150001124FF27591B99F0593F50F4503E68F134 +:105160001A16F040A22F232F342F4427585FF3CF75 +:10517000469537952795A795F0405395C9F77EF446 +:105180001F16BA0B620B730B840BBAF09150A1F08F +:10519000FF0FBB1F661F771F881FC2F70EC0BA0F15 +:1051A000621F731F841F48F4879577956795B7959D +:1051B000F7959E3F08F0B3CF9395880F08F0992795 +:1051C000EE0F97958795089527D108F481E008950B +:1051D0000CD06BC163D140F05AD130F021F45F3F65 +:1051E00019F03EC1511195C14FC170D198F3992367 +:1051F000C9F35523B1F3951B550BBB27AA2762179B +:105200007307840738F09F5F5F4F220F331F441FDF +:10521000AA1FA9F333D00E2E3AF0E0E830D0915017 +:105220005040E695001CCAF729D0FE2F27D0660F04 +:10523000771F881FBB1F261737074807AB07B0E843 +:1052400009F0BB0B802DBF01FF2793585F4F2AF059 +:105250009E3F510568F004C15CC15F3FECF3983E8E +:10526000DCF3869577956795B795F7959F5FC9F7B6 +:10527000880F911D9695879597F90895E1E0660F3F +:10528000771F881FBB1F621773078407BA0720F0B8 +:10529000621B730B840BBA0BEE1F88F7E095089521 +:1052A00004D06894B11135C1089518D188F09F5782 +:1052B00090F0B92F9927B751A0F0D1F0660F771F62 +:1052C000881F991F1AF0BA95C9F712C0B13081F042 +:1052D0001FD1B1E008951CC1672F782F8827B85FD0 +:1052E00039F0B93FCCF3869577956795B395D9F7A3 +:1052F0003EF490958095709561957F4F8F4F9F4FAD +:105300000895E89409C097FB3EF4909580957095B8 +:1053100061957F4F8F4F9F4F9923A9F0F92F96E901 +:10532000BB279395F695879577956795B795F11176 +:10533000F8CFFAF4BB0F11F460FF1BC06F5F7F4F13 +:105340008F4F9F4F16C0882311F096E911C0772325 +:1053500021F09EE8872F762F05C0662371F096E82E +:10536000862F70E060E02AF09A95660F771F881FFD +:10537000DAF7880F9695879597F9089588D018F0F1 +:1053800011F08CD038F480C0C4C0E92F9FD0B0F3A6 +:105390005523C9F3E7FB6217730784079507A8F144 +:1053A00099F3E92FFF2788232AF03197660F771F9B +:1053B000881FDAF7952F5527442332F0915050403B +:1053C000220F331F441FD2F7BB27E91BF50B621BCB +:1053D000730B840BB109C1F222F4620F731F841F97 +:1053E000B11D31972AF0660F771F881FBB1FEFCFC3 +:1053F000915050405AF041F0882332F0660F771FE9 +:10540000881F91505040C1F7939530C0869577958D +:1054100067959F5FD9F7F8CF990F0008550FAA0B32 +:10542000E0E8FEEF16161706E807F907C0F01216B7 +:105430001306E407F50798F0621B730B840B950BBA +:1054400039F40A2661F0232B242B252B21F408950F +:105450000A2609F4A140A6958FEF811D811D0895AC +:1054600097F99F6780E870E060E008959F3F31F012 +:10547000915020F4879577956795B795880F911D82 +:105480009695879597F908959FEF80EC08950024ED +:105490000A941616170618060906089500240A9499 +:1054A00012161306140605060895092E0394000C1F +:1054B00011F4882352F0BB0F40F4BF2B11F460FFAE +:1054C00004C06F5F7F4F8F4F9F4F089557FD9058D7 +:1054D000440F551F59F05F3F71F04795880F97FBB8 +:1054E000991F61F09F3F79F0879508951216130672 +:1054F0001406551FF2CF4695F1DF08C016161706A1 +:105500001806991FF1CF86957105610508940895D5 +:10551000E894BB2766277727CB0197F908957CDFAE +:1055200008F48FEF08950BD0C0CFB1DF28F0B6DFBD +:1055300018F0952309F094CFA7CF1124EACFC6DF46 +:10554000A0F3959FD1F3950F50E0551F629FF00196 +:10555000729FBB27F00DB11D639FAA27F00DB11DEF +:10556000AA1F649F6627B00DA11D661F829F222778 +:10557000B00DA11D621F739FB00DA11D621F839FFF +:10558000A00D611D221F749F3327A00D611D231FD5 +:10559000849F600D211D822F762F6A2F11249F5723 +:1055A00050408AF0E1F088234AF0EE0FFF1FBB1F46 +:1055B000661F771F881F91505040A9F79E3F5105E5 +:1055C00070F04ECFA6CF5F3FECF3983EDCF38695AC +:1055D00077956795B795F795E7959F5FC1F7FE2B90 +:1055E000880F911D9695879597F90895FA01EE0F0A +:1055F000FF1F30962105310599F16115710561F4A0 +:105600008038BFE39B0749F168949038810561F0C9 +:105610008038BFEF9B0741F0992342F5FF3FE1053A +:105620003105210511F1E8940894E795D901AA23E1 +:1056300029F4AB2FBE2FF85FD0F310C0FF5F70F4DA +:10564000A695E0F7F73950F019F0FF3A38F49F7754 +:105650009F930CD00F9007FC905808953EF014CF04 +:1056600060E070E080E89FE308954FE79F775F93E5 +:105670004F933F932F939ED02F913F914F915F91E6 +:1056800052DF05C019F40EF0EBCE42CFFDCE26DF7F +:10569000C8F39638C0F707F80F92E8942BE33AEA7C +:1056A00048EB5FE74EDF0F920F920F924DB75EB758 +:1056B0000F92C0D0EAE0F1E016D04F915F91EF91E8 +:1056C000FF91E595EE1FFF1F49F0FE57E068442764 +:1056D000EE0F441FFA95E1F74195550B32D00F902C +:1056E00007FE26C00895DF93CF931F930F93FF9279 +:1056F000EF92DF927B018C01689405C0DA2EEF01F6 +:105700001EDFFE01E894A5912591359145915591B3 +:10571000AEF3EF0106DDFE019701A801DA9479F7F7 +:10572000DF90EF90FF900F911F91CF91DF9108953F +:105730009B01AC0160E070E080E89FE349CD90CE32 +:1057400095CECCDEE8F39923D9F3940F511DBBF32A +:105750009150504094F059F0882332F0660F771F33 +:10576000881F91505040C1F79E3F510544F7880F64 +:10577000911D9695879597F908955F3FACF0983EF7 +:105780009CF0BB27869577956795B79508F4B1602F +:105790009395C1F7BB0F58F711F460FFE8CF6F5F27 +:1057A0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCEC6 +:1057B000689456CE93DEC8F39923D1F3C6F3DF93F2 +:1057C000CF931F930F93FF92C92FDD2788232AF0D1 +:1057D0002197660F771F881FDAF720E030E040E856 +:1057E0005FEB9FE3883920F0803E30F021968F7781 +:1057F00087DCE2E3F1E003C083DCEFE5F1E073DF97 +:105800008B01BE01EC01FB2E6F5771097595771F57 +:10581000880B990B78DD28E132E741E35FE38FDE07 +:10582000AF2D9801AE01FF900F911F91CF91DF91A5 +:1058300078DC3BCEFA01DC01AA0FBB1F9B01AC0157 +:10584000BF5728F422273327442750781FC0B75169 +:1058500088F4AB2F0024469537952795011CA39516 +:10586000D2F3002069F0220F331F441FB395DAF3FF +:105870000DD045CC61307105A0E88A07B94630F4F7 +:105880009B01AC016627772788279078309621F016 +:1058900020833183428353830895AA1BBB1B51E1AC +:1058A00007C0AA1FBB1FA617B70710F0A61BB70B90 +:1058B000881F991F5A95A9F780959095BC01CD0135 +:1058C000089597FB072E16F4009407D077FD09D0B2 +:1058D0000E944D2C07FC05D03EF4909581959F4F7A +:1058E0000895709561957F4F0895EE0FFF1F059005 +:1058F000F491E02D0994F999FECF92BD81BDF89AFB +:10590000992780B50895A8E1B0E042E050E00C94FA +:10591000A32C262FF999FECF92BD81BDF89A01974D +:1059200000B4021639F01FBA20BD0FB6F894FA9AE7 +:10593000F99A0FBE08950196272F0E948A2C0C9485 +:10594000892CDC01CB01FC01F999FECF06C0F2BD28 +:10595000E1BDF89A319600B40D9241505040B8F72D +:065960000895F894FFCF4A +:10596600640007000CFF0000003F64DE0F6C104966 +:10597600101510E10F0101DF022808140A321E007B +:1059860002040507090B0C0E1011131517181A1C23 +:105996001D1F2123242628292B2D2F30323435375D +:1059A600393B1F0F03764F5F6F7F4969437909596A +:1059B60053633149803F5D8B803FF8BF803FCAE12A +:1059C600803F73ED803FCAE1803FF8BF803F5D8B2B +:1059D600803F3149803F0000803FF16D7F3F75EA8F +:1059E6007E3F4C827E3F833F7E3F84287E3F833FBF +:1059F6007E3F4C827E3F75EA7E3FF16D7F3F000021 +:105A0600803F3F4D3639830436040004C7035A03EA +:105A160073038C03A50301020304050607080900A6 +:00000001FF diff --git a/keyboard/planck/keymaps/angerthosenear/compiled.hex b/keyboard/planck/keymaps/angerthosenear/compiled.hex new file mode 100644 index 0000000000..b584d6a935 --- /dev/null +++ b/keyboard/planck/keymaps/angerthosenear/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C290014001A0008001500FC +:1001E00017001C0018000C00120013002A002B003E +:1001F00004001600070009000A000B000D000E00A5 +:100200000F0033002800E1001D001B00060019004C +:100210000500110010003600370038003400E000FF +:10022000E300E200835002202C002C00012050004B +:10023000510052004F0001000100010001000100C7 +:1002400001005F00600061005400560001000100E1 +:10025000010001000100010001005C005D005E0082 +:1002600055005700010001000100010001000100DC +:10027000010059005A005B006300580001000100B2 +:1002800001000100010002202C0062000120010099 +:1002900001000100010035001E001F0020002100A8 +:1002A0002200230024002500260027000100010071 +:1002B0000320042048120100010001002D002E003F +:1002C0002F00300031000100440045006800690043 +:1002D0006A006B006C006D006E006F000100010091 +:1002E00001000100010001000100AC000120AB0091 +:1002F000AA00A900AE0035021E021F022002210240 +:100300002202230224022502260227024C000100B9 +:100310000320042048120100010001002D022E02DA +:100320002F023002310201003A003B003C003D0048 +:100330003E003F0040004100420043000100010038 +:1003400001000100010002200100010001004A003B +:100350004E004B004D00280354006800650020004B +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/austin/compiled.hex b/keyboard/planck/keymaps/austin/compiled.hex new file mode 100644 index 0000000000..fcd925dae0 --- /dev/null +++ b/keyboard/planck/keymaps/austin/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C2B0014001A0008001500FA +:1001E00017001C0018000C00120013002A00290040 +:1001F00004001600070009000A000B000D000E00A5 +:100200000F0033003400E1001D001B000600190040 +:100210000500110010003600370038002800835018 +:10022000E300E200E00002202C002C00012050003E +:10023000510052004F002B0014001A000900130057 +:100240000A000D000F0018001C0033002A002900CE +:10025000040015001600170007000B00110008002D +:100260000C0012003400E1001D001B000600190004 +:1002700005000E0010003600370038002800C300CB +:10028000E300E200E00002202C002C0001205000DE +:10029000510052004F0035001E001F0020002100B9 +:1002A0002200230024002500260027002A00010048 +:1002B0000320042048120100010001002D002E003F +:1002C0002F00300031000100440045006800690043 +:1002D0006A006B006C006D006E006F000100010091 +:1002E0000100010001000100010001000120AB003C +:1002F000AA00A900AE0035021E021F022002210240 +:100300002202230224022502260227022A000100DB +:100310000320042048120100010001002D022E02DA +:100320002F023002310201003A003B003C003D0048 +:100330003E003F0040004100420043000100010038 +:100340000100010001000220010001000100AB00DA +:10035000AA00A900AE002803540068006500200030 +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/bone2planck/compiled.hex b/keyboard/planck/keymaps/bone2planck/compiled.hex new file mode 100644 index 0000000000..0d5287b3ee --- /dev/null +++ b/keyboard/planck/keymaps/bone2planck/compiled.hex @@ -0,0 +1,1450 @@ +:100000000C9491020C94D5020C94D5020C94D50258 +:100010000C94D5020C94D5020C94D5020C94D50204 +:100020000C94D5020C94D5020C9482140C945415A3 +:100030000C94B6220C94D5020C94D5020C94D502E3 +:100040000C94D5020C9437030C94D5020C94D50271 +:100050000C94D5020C941E230C94D5020C94D5025A +:100060000C94D5020C94D5020C94D5020C94D502B4 +:100070000C94D5020C94D5020C94D5020C94D502A4 +:100080000C94F70A0C94D5020C94D5020C94D5026A +:100090000C94D5020C94D5020C94D5020C94D50284 +:1000A0000C94D5020C94D5020C94D502C115E3151D +:1000B000D116E315D11628164B16D116A016B31675 +:1000C0009D199D19CC19CC190B1A2B1A811B811B58 +:1000D000361A811BE61AE61A4D1B561B811B7B1B29 +:1000E000F31AF31AF31AF31AF31AF31AF31AF31AA8 +:1000F000F31AF31AF31AF31AF31AF31AF31AF31A98 +:10010000031B111B181B1F1B291B07634236B79BC0 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C00002010000000000000000000014000D000B +:1001D0000700180004001B0013000B000F001000A4 +:1001E0001A002D000152060017000C000800120032 +:1001F00005001100150016000A0001521600090042 +:1002000019002F00340033001D001C003600370099 +:100210000E001600E000E300E200035202522C0040 +:100220002C000252035229002B002800350214141E +:1002300038022514261435001E02640064022702C9 +:100240002302000001002D1424022414271430027C +:100250002D0225022602380037020100000031007D +:100260002102641430140814300022021F023102EB +:100270003602000001000100010001000100010040 +:1002800001000100010001000100010000004B001D +:100290002A0052004C004E000000240025002600D9 +:1002A0000000000000004A00500051004F004D00C7 +:1002B0003700210022002300360000001600000055 +:1002C0002B0049002800000027001E001F0020000E +:1002D00036021600010001000100010001000100CA +:1002E0000100010001000100010001000000000008 +:1002F0004600470048000000000040004100420066 +:100300004500000000000000A800AA00A9000000AD +:1003100020143D003E003F004400000001000000AA +:10032000AC00AE00AB0000001F143A003B003C00E4 +:100330004300010001000100010001000000010074 +:100340000100000001000100010001002803540029 +:1003500068006500200050006C0061006E006300C2 +:100360006B0020004B006500790062006F006100A7 +:100370007200640000002C034F00720074006800DB +:100380006F006C0069006E00650061007200200063 +:100390004B006500790062006F006100720064002C +:1003A000730000000403090409026D00040100A0A9 +:1003B000FA090400000103010100092111010001F3 +:1003C000223F000705810308000A09040100010318 +:1003D000010200092111010001224D0007058203DD +:1003E00008000A09040200010300000009211101AC +:1003F00000012236000705830308000A09040300F0 +:100400000103000000092111010001223900070544 +:1004100084031000011201100100000008EDFE60CD +:100420006001000102000105010906A1010507198B +:10043000E029E715002501950875018102050819D5 +:100440000129059505750191029501750391010535 +:10045000071900297715002501957875018102C0DB +:1004600005010980A101850216010026B7001A01C5 +:10047000002AB700751095018100C0050C0901A183 +:10048000018503160100269C021A01002A9C0275B0 +:100490001095018100C005010902A1010901A10017 +:1004A0000509190129051500250195057501810228 +:1004B0009501750381010501093009311581257FF9 +:1004C00095027508810609381581257F9501750803 +:1004D0008106050C0A38021581257F950175088172 +:1004E00006C0C005010906A101050719E029E715A5 +:1004F00000250195087501810295017508810105A6 +:100500000819012905950575019102950175039159 +:10051000010507190029FF150025FF9506750881BB +:1005200000C011241FBECFEFDAE0DEBFCDBF04B69E +:1005300003FE24C080911E0390911F03A09120030D +:10054000B09121038730904BA740B04BB9F4109283 +:100550001E0310921F03109220031092210314BE59 +:1005600084B7877F84BF88E10FB6F89480936000DA +:10057000109260000FBEE0E0F8E3099511E0A0E002 +:10058000B1E0E6ECF9E502C005900D92A03CB107A0 +:10059000D9F713E0A0ECB1E001C01D92AE31B10774 +:1005A000E1F70E94C8110C94E12C0C94000008950E +:1005B000089581E0089508950C94D8020C94D9020E +:1005C0000C94DB020E94AB2823E030E0281B3109A9 +:1005D000220F2093C4010895282F2F988091800026 +:1005E000211108C0877F8093800010928D001092A7 +:1005F0008C001BC0886080938000233019F48FEF3B +:100600009FEF0FC083E090E0821B9109880F991F34 +:100610002FEF3FEFA90102C0569547958A95E2F763 +:10062000CA0190938D0080938C000C94E2020E948A +:10063000E20284E08093C3011092C0010895279ADA +:100640002F988FEF9FEF90938700809386008AE02A +:100650008093800089E1809381000E9414280C948B +:1006600017030E941F036E9A769A0C94D7021F926A +:100670000F920FB60F9211242F933F938F939F9356 +:10068000EF93FF93E091C101F091C201CF01019678 +:100690009093C2018093C1010090C30102C0F695FE +:1006A000E7950A94E2F7EF738091C001823019F464 +:1006B000E03251F404C0813039F4EF3329F48091F1 +:1006C0006F008D7F80936F00F0E0E457FE4FE49160 +:1006D00021E031E0E29FC001E39F900D11240090E2 +:1006E000C40102C0969587950A94E2F790938D0015 +:1006F00080938C00FF91EF919F918F913F912F916B +:100700000F900FBE0F901F90189561110DC0FC0146 +:100710008281882331F085EE0E9441180E946B2867 +:1007200003C085EE0E94091980E090E0089581E001 +:1007300008950C94970308950C9431038091150249 +:10074000882309F448C08091D1019091D20100978B +:1007500079F40E94E8229093D2018093D101809194 +:10076000D30190E0009771F48091D40190E00AC029 +:100770000E94F422209100013091010128173907CD +:1007800040F329C00197880F991F880F991FFC011A +:10079000EB52FE4F60817181828193810E945D0ADC +:1007A000E091D30184E0E89FF0011124EB52FE4F69 +:1007B00060817181828193814FE050E00E94150E2B +:1007C0008091D30190E001966091D40170E00E9485 +:1007D000912C8093D3010C94DC02109217020C949C +:1007E0002A0A0895089581E0809317020C94F20379 +:1007F000089508958F929F92AF92BF92EF92FF92C9 +:100800000F931F93CF93DF93CDB7DEB7A3970FB6A8 +:10081000F894DEBF0FBECDBF7C01FC0100811181C9 +:10082000C8010E94E520B8010E94FC058C01B701B7 +:100830000E949903882309F4CCC10032F0E51F0718 +:1008400041F4F7018281882309F458C00E94790E8F +:10085000C0C10132F0E51F0741F4F701828188230E +:1008600009F44CC00E94820EB4C10232F0E51F07A9 +:1008700051F4F7018281882309F440C00E94750E6B +:100880008111F0CFE3CF0332F0E51F0739F4F70110 +:100890008281882399F10E94F3039BC10432F0E521 +:1008A0001F0739F4F7018281882341F10E94ED038B +:1008B00090C10532F0E51F0749F4F70182818823D2 +:1008C000E9F0809117028111F1CFE5CF0632F0E512 +:1008D0001F0739F4F7018281882381F00E94890E75 +:1008E0000AC00732F0E51F0749F4F7018281882327 +:1008F00029F00E94940E0E94F9036BC180911702A7 +:10090000811105C0F70182818111CFC018C1003E5D +:10091000110579F4F7018281882309F44DC00E9402 +:100920002A0A81E080931602109215021092D401D7 +:1009300050C1023E110559F4F70182818823E1F18B +:100940000E942A0A109216021092150242C1033E1A +:10095000110591F4F7018281882371F10E942A0A1E +:100960001092160281E0809315021092D30110922A +:10097000D2011092D1012DC10235110559F4F701B0 +:100980008281882309F425C18091000190910101A1 +:100990000A970DC00135110579F4F701828188238A +:1009A00009F417C180910001909101010A9690937A +:1009B0000101809300010DC14091040183E2EFE148 +:1009C000F1E0DE01119601900D928A95E1F7F701B1 +:1009D000808121E030E02C0F3D1F280F311DC9011F +:1009E0002091020130910301FC01E20FF31F6081AD +:1009F000772767FD7095640F711D882777FD8095B7 +:100A0000982F0E94B32920E030E040E451E40E9496 +:100A100018294B015C01F701218184E090E0821BE1 +:100A20009109BC01882777FD8095982F0E94B329F2 +:100A30009B01AC01C501B4010E94B0289B01AC012F +:100A400060E070E080E090E40E94262B20E030E03F +:100A50004CED50E40E94C32A4B015C01F7018281F6 +:100A60008823D1F04FE050E0C501B4010E94150E7B +:100A7000809116028823A1F08091D40124E0829F06 +:100A8000F0011124EB52FE4F80829182A282B38248 +:100A90008F5F8093D40104C0C501B4010E945D0A38 +:100AA0000F3F110508F02ECF94C08091D001811125 +:100AB0001FC0043130E5130709F051C00E949B03A9 +:100AC00081E08093D0010E94E8229093CF0180932F +:100AD000CE011092C7011092C9011092C801109264 +:100AE000CB011092CA011092CD011092CC0171C0BD +:100AF0008091CE019091CF010E94F422883C910513 +:100B000070F48091C701E82FF0E0EE0FFF1FE8536B +:100B1000FE4F118300838F5F8093C7015AC0043852 +:100B200080E5180721F00538104501F13AC0F701BA +:100B30008281882341F01092C50182E01EC00438F2 +:100B400030E5130759F58091C501811106C086E291 +:100B50000E94411886E20E94091982E01CC00438F4 +:100B6000F0E51F0741F305381045D9F4F7018281FC +:100B7000882331F01092C60180E20E94581929C0E2 +:100B80008091C601811106C087E20E94411887E268 +:100B90000E94091980E20E945F191BC005381045A8 +:100BA00029F381E08093C5018093C601C701A39614 +:100BB0000FB6F894DEBF0FBECDBFDF91CF911F916E +:100BC0000F91FF90EF90BF90AF909F908F900C94FB +:100BD000DE0280E0A3960FB6F894DEBF0FBECDBF55 +:100BE000DF91CF911F910F91FF90EF90BF90AF9049 +:100BF0009F908F90089508959CE0799FF0011124B3 +:100C000090E3899FE00DF11D1124E60FF11DEE0F19 +:100C1000FF1FE453FE4F859194910895880F991F0B +:100C2000FC01E45BFF4F859194910895880F991F13 +:100C3000FC01E453FE4F8591949108950F931F9307 +:100C4000CF93DF93EC01811521E39207A0F5C11545 +:100C500080E3D80708F0D7C0C83ED105D8F4C03E1D +:100C6000D10508F007C2C83AD10578F4C53AD105D4 +:100C700008F06AC0C130D10509F463C008F4F7C1B7 +:100C8000C430D10508F0F6C1F2C1CB3BD10508F460 +:100C900066C0EDC1C11590E2D90708F0AFC0C1151B +:100CA00021E0D20708F0E6C1C03FD10508F4DFC15A +:100CB0008E0110651FC2C03880E5D80700F5C03727 +:100CC00090E5D90708F0A3C0C11520E5D20709F4C3 +:100CD000ACC050F4CE01905480319F4008F0C7C1A1 +:100CE000DF708E01106A06C2C13080E5D80709F4B2 +:100CF000AEC0C43190E5D90708F4AFC0B8C1C3385D +:100D000020E5D20709F48EC050F4C13890E5D90728 +:100D100009F482C008F083C000E011EDEBC1C031DE +:100D200081E5D80708F4A3C1C11597E5D90708F4F0 +:100D300036C1CE0190578115904108F098C1DF70FF +:100D400093C101E010E0D6C1C53AD10509F494C1C0 +:100D5000C63AD10509F093C102E810E4CBC1C83A04 +:100D6000D10509F48FC1C93AD10509F48EC1CA3A37 +:100D7000D10509F48DC1CB3AD10509F48CC1CC3A27 +:100D8000D10509F48BC1CD3AD10509F48AC1C03B24 +:100D9000D10509F489C1CE3AD10509F488C1CF3A09 +:100DA000D10509F487C1C13BD10509F486C1C23B15 +:100DB000D10509F485C1C33BD10509F484C1C43B05 +:100DC000D10509F483C1C53BD10509F482C1C63BF5 +:100DD000D10509F481C1C73BD10509F480C1C83BE5 +:100DE000D10509F47FC1C93BD10509F47EC1CA3BD5 +:100DF000D10509F47DC100E014E47CC1CE019F70EF +:100E00000E94160678C1DD278E01106C73C1CF7069 +:100E1000DD278E01146D6EC100E010ED6BC100E0A6 +:100E200012ED68C100E013ED65C10E94EC1B0E9449 +:100E30002A0A0E94F1038FEF94E32CE08150904046 +:100E40002040E1F700C000000E94432353C180917D +:100E5000F20281608093F2024DC10E94A4238111AD +:100E600002C00E9480230E94B72390E090931D034C +:100E700080931C03C23080E5D80721F480911C03C5 +:100E8000816086C0C43090E5D90721F480911C03AD +:100E900082607EC0C63020E5D20721F480911C0319 +:100EA000846076C0C83080E5D80719F480911C03AF +:100EB00027C0CA3090E5D90721F480911C038061D6 +:100EC00067C0CC3020E5D20721F480911C038062FA +:100ED0005FC0CE3080E5D80721F480911C03806488 +:100EE00057C0C03190E5D90721F480911C03806878 +:100EF0004FC0C23120E5D20729F480911C038460E1 +:100F0000886046C0C33080E5D80721F480911C0377 +:100F10008E7F3EC0C53090E5D90721F480911C0337 +:100F20008D7F36C0C73020E5D20721F480911C03A5 +:100F30008B7F2EC0C93080E5D80719F480911C033F +:100F400026C0CB3090E5D90721F480911C038F7E19 +:100F50001FC0CD3020E5D20721F480911C038F7D86 +:100F600017C0CF3080E5D80721F480911C038F7B18 +:100F70000FC0C13190E5D90721F480911C038F7710 +:100F800007C0C331D04531F480911C038B7F877F2C +:100F900080931C0380911C030E94BB23ABC08D2F48 +:100FA00099278F70992781309105D9F49E0123707C +:100FB000332702C0880F991F2A95E2F79C688E019B +:100FC00044E0000F111F4A95E1F700271370802BB2 +:100FD000912B53E0CC0FDD1F5A95E1F7C076DD274A +:100FE0002FC08230910531F4DC2FCC278E01016FA8 +:100FF000106A80C08330910569F4CE01837099270F +:1010000001E010E002C0000F111F8A95E2F7C8014D +:101010009C680FC084309105B9F4CE018370992784 +:1010200001E010E002C0000F111F8A95E2F7C8012D +:101030009A6823E0CC0FDD1F2A95E1F7C07ED770B8 +:101040008C010C2B1D2B56C08530910531F4DC2F03 +:10105000CC278E01046F106A4DC0069709F04AC074 +:10106000CF71DD27DC2FCC278E01106243C000E05A +:1010700010E040C08E013EC001E810E43BC003E830 +:1010800010E438C002EE14E435C009EE14E432C0B6 +:101090000AEE14E42FC005EB14E42CC006EB14E4B4 +:1010A00029C007EB14E426C00CEC14E423C00DECBB +:1010B00014E420C003E815E41DC00AE815E41AC0D2 +:1010C00002E915E417C004E915E414C001E216E4CE +:1010D00011C003E216E40EC004E216E40BC005E200 +:1010E00016E408C006E216E405C007E216E402C0F2 +:1010F0000AE216E4C801DF91CF911F910F91089584 +:101100009CE0799FF001112490E3899FE00DF11D8F +:101110001124E60FF11DEE0FFF1FE453FE4F8591E2 +:101120009491803E9105E0F4803C910558F581331F +:10113000910509F46FC048F48932910509F463C040 +:101140008A32910509F46DC072C089339105E9F0C6 +:1011500082389105D1F08533910509F44DC067C0FF +:10116000833E910581F138F4803E9105B9F0823ECD +:101170009105D9F05CC0863E910561F1873E9105ED +:10118000A1F155C00E940E06089520911C0320FD78 +:1011900002C021FF4CC080EE90E049C080911C034A +:1011A00080FFF9CF89E390E042C080911C0382FF69 +:1011B0000EC080911C0384FF03C080E090E037C024 +:1011C00083EE90E034C080911C0382FFF2CF82EE68 +:1011D00090E02DC080911C0383FF0BC080911C0305 +:1011E00084FDEBCF87EE90E022C080911C0383FF4B +:1011F000F5CF86EE90E01BC080911C0385FF07C0F1 +:1012000089E290E014C080911C0385FFF9CF85E34B +:1012100090E00DC080911C0386FF07C08AE290E039 +:1012200006C080911C0386FFF9CF81E390E00E9405 +:101230001E0608950C94E002E82FF0E0E25BFE4FFA +:101240008081E82FEF70F0E082958F7021E030E030 +:10125000A90102C0440F551F8A95E2F740A30895E3 +:101260000F931F93CF93DF9385B7806885BF85B7B2 +:10127000806885BFC3E0D0E001E010E0FE01E25BE2 +:10128000FE4F8081E82FEF70F0E021A182958F70F2 +:10129000A80102C0440F551F8A95E2F7CA01822BAC +:1012A00081A38C2F0E941C09219740F78BE090E0CE +:1012B00061E070E0FC01EE5BFE4F2081E22FEF70F9 +:1012C000F0E042A122952F70DB0102C0AA0FBB1FE4 +:1012D0002A95E2F79D01242B22A3019758F7DF916D +:1012E000CF911F910F910C949C03EF92FF920F935B +:1012F0001F93CF93DF9300E212E0C3E0EE24E39468 +:10130000F12CD5E08C2F0E941C098BE090E040E08E +:1013100050E0FC01EE5BFE4F6081E62FEF70F0E0E5 +:1013200020A130E062956F7002C0359527956A95CF +:10133000E2F720FD09C09701082E02C0220F331FDB +:101340000A94E2F7422B532B019718F7F801929178 +:1013500082918F018417950721F051834083D093A8 +:1013600005018C2F0E941C09C15060F68091050177 +:1013700087FD2CC08150809305018F3F39F08FE9A4 +:101380009FE00197F1F700C0000020C080911E028D +:1013900090911F02909327028093260280911C0255 +:1013A00090911D02909325028093240280911A024D +:1013B00090911B0290932302809322028091180245 +:1013C0009091190290932102809320020E949E0323 +:1013D00081E0DF91CF911F910F91FF90EF900895E1 +:1013E000E82FF0E0EE0FFF1FE05EFD4F808191815E +:1013F000089508950F931F93CF9308E212E0C0E081 +:10140000F801929182918F010E946022C80FF2E050 +:1014100000321F07A9F78C2FCF911F910F910895CC +:101420000E94A423811102C00E9480230E94C9232C +:10143000809307033E9A809171008D7F80937100A5 +:1014400082E0809390008AE18093910081E0809314 +:101450002A02089580912A02811102C00E94100A76 +:1014600010927A0210927902809171008D7F8093A0 +:101470007100809190008F738093900010923C02D5 +:1014800010923B0210927302109274021092750235 +:10149000109276021092720210927102E1E5F2E06F +:1014A000A1E4B2E011921192119211921D921D923B +:1014B00082E0E137F807B1F70895CF92DF92EF921B +:1014C000FF920F931F93CF93DF9320913B02222330 +:1014D00009F484C06B017C0180912A02811102C051 +:1014E0000E94100A01E712E0C7E0D0E0A7019601D0 +:1014F000F80192918291729162918F010E94142958 +:10150000811131C0FE01EE0FFF1FEE0FFF1FEF5ADA +:10151000FD4F1082118212821382DE01AA0FBB1FBF +:10152000AF5BBD4F11961C921E92C730D105E9F0FA +:1015300021964481558166817781408351836283FE +:101540007383148215821682178212968D919C9154 +:10155000139711969C938E9313961C921E9212973A +:1015600034961296E2CF219708F6809179029091F5 +:101570007A02019797FD05C090937A0280937902D1 +:1015800004C010927A0210927902809179029091AF +:101590007A0220917702309178022817390724F0D7 +:1015A0001092780210927702892BC1F48091710019 +:1015B0008D7F80937100809190008F738093900055 +:1015C00010927302109274021092750210927602B9 +:1015D000109272021092710210923B02DF91CF9131 +:1015E0001F910F91FF90EF90DF90CF9008951F9281 +:1015F0000F920FB60F9211244F925F926F927F92CB +:101600008F929F92AF92BF92CF92DF92EF92FF9212 +:101610002F933F934F935F936F937F938F939F93FA +:10162000AF93BF93CF93DF93EF93FF9380913B02F0 +:10163000882309F49BC1C0917902D0917A021C16CB +:101640001D060CF093C140902B0250902C0260902C +:101650002D0270902E0220E030E0A901C301B201FA +:101660000E94BF2A18160CF065C0C130D10509F4DC +:1016700052C08091770290917802BE010E94912C15 +:101680007C01909378028093770280903D02909045 +:101690003E02A0903F02B090400220E030E040E8DF +:1016A0005FE3C501B4010E94B02860933D027093CE +:1016B0003E0280933F0290934002F701EE0FFF1F1E +:1016C000EE0FFF1FEF5AFD4FA30192016081718160 +:1016D000828193810E94182920E030E040E05EE39F +:1016E0000E94C32A9B01AC01C501B4010E94BF2A1C +:1016F00018168CF4C7010196BE010E94912C90939C +:1017000078028093770210923D0210923E0210926E +:101710003F0210924002E0917702F0917802EE0FC2 +:10172000FF1FEE0FFF1FEF5AFD4F60817181828115 +:101730009381D0C0C0907302D0907402E090750283 +:10174000F090760220E030E0A901C701B6010E94C6 +:1017500014292197882309F4A2C0FE01EE0FFF1F70 +:10176000EE0FFF1FEF5AFD4F80809180A280B38063 +:10177000A5019401C701B6010E94142987FF31C059 +:10178000A501940160E070E08CED93EC0E941829B3 +:1017900020E030E040E451E40E94182920E030E0ED +:1017A00040E05FE30E94C32A9B01AC0160E070E06F +:1017B00080E090E40E94262B9B01AC01C501B4019E +:1017C0000E94C32A9B01AC01C701B6010E941429E3 +:1017D00087FF07C0A701960160E070E08CED93E4FD +:1017E00039C0A5019401C701B6010E94BF2A18168D +:1017F0000CF055C0A501940160E070E08CED93E41D +:101800000E94182920E030E040E451E40E941829A9 +:1018100020E030E040E05FE30E94C32A9B01AC017E +:1018200060E070E080E090E40E94262B9B01AC0118 +:10183000C501B4010E94C32A9B01AC01C701B601D6 +:101840000E94BF2A18165CF5A701960160E070E0BF +:101850008CED93EC0E94182920E030E040E451E444 +:101860000E94182920E030E040E05FE30E94C32A94 +:101870009B01AC0160E070E080E090E40E94262BC8 +:101880009B01AC01C701B6010E94C32A6093730299 +:1018900070937402809375029093760213C0FE01D8 +:1018A000EE0FFF1FEE0FFF1FEF5AFD4F808191815A +:1018B000A281B3818093730290937402A093750206 +:1018C000B0937602609173027091740280917502F8 +:1018D0009091760220912802309129022F3F4FEFFC +:1018E000340731F02F5F3F4F3093290220932802B5 +:1018F0000E949F0E6B017C0120E034E244EF51E432 +:101900000E94142987FF08C086EFC82E88E2D82ECF +:1019100084EFE82E81E4F82E20E030E040E051E44E +:10192000C701B6010E94C32A9B01AC0160E074E2CA +:1019300084E79BE40E9418296B017C010E948529A1 +:1019400070939700609396002091060130910701F3 +:101950004091080150910901C701B6010E94C32AB4 +:101960000E948529709399006093980080913C02B1 +:10197000882309F433C1C0903702D0903802E09038 +:101980003902F0903A0220E030E0A901C701B60127 +:101990000E94BF2A1816D4F580912802909129023E +:1019A0008F3F2FEF920729F00196909329028093A1 +:1019B0002802C701B6010E949F0E20E030E040E0FF +:1019C00051E40E94C32A9B01AC0160E074E284E709 +:1019D0009BE40E9418296B017C010E948529709369 +:1019E0009700609396002091060130910701409185 +:1019F000080150910901C701B6010E94C32A0E9443 +:101A00008529709399006093980008C01092970000 +:101A100010929600109299001092980060913102F5 +:101A2000709132026F5F7F4F709332026093310288 +:101A3000209196003091970080E090E0232BF1F008 +:101A4000C0919600D09197000E94B1296B017C0152 +:101A5000BE0180E090E00E94B1299B01AC01609141 +:101A600033027091340280913502909136020E94C7 +:101A7000182920E03FEF4FE757E410C00E94B1293A +:101A80006B017C0120E030EE4FEF54E460913302B3 +:101A90007091340280913502909136020E94C32ADF +:101AA0009B01AC01C701B6010E94BF2A87FD96C009 +:101AB00080912F028F5F80932F0290E0209103038B +:101AC0003091040382179307A0F080910E038823BE +:101AD00019F010922F020DC0809171008D7F8093BC +:101AE0007100809190008F738093900010923C025F +:101AF0007DC080913002C0912F02811128C0C0901A +:101B00000803D0900903E0900A03F0900B0320E053 +:101B100030E0A901C701B6010E94BF2A1816BCF423 +:101B200081E08093300210923702109238021092B6 +:101B3000390210923A02C0923302D0923402E092FB +:101B40003502F0923602C150C0932F0243C010926A +:101B500030021092290210922802E0910503F091C0 +:101B6000060348E0C49FE00DF11D1124808191819E +:101B7000A281B3818093370290933802A0933902F7 +:101B8000B0933A0220E030E040E85EE36481758182 +:101B9000868197810E94C32A6B017C0180910A0192 +:101BA000682F70E080E090E00E94B12920E030E0F2 +:101BB00048EC52E40E9418299B01AC01C701B60110 +:101BC0000E94C32A609333027093340280933502DB +:101BD00090933602109232021092310280910703E4 +:101BE00080FD04C010923C0210923B02FF91EF91E5 +:101BF000DF91CF91BF91AF919F918F917F916F9125 +:101C00005F914F913F912F91FF90EF90DF90CF9098 +:101C1000BF90AF909F908F907F906F905F904F900C +:101C20000F900FBE0F901F901895CF92DF92EF92FA +:101C3000FF92CF93DF936B017C01EA0180912A022E +:101C4000811102C00E94100A8091070380FF46C0E4 +:101C50008091790290917A0208970CF03FC08091B0 +:101C600071008D7F8093710080913C0281110E94F0 +:101C70002A0A81E080933B021092290210922802E6 +:101C800020E030E0A901C701B6010E94BF2A181662 +:101C9000DCF48091790290917A02FC01EE0FFF1F33 +:101CA000EE0FFF1FEF5AFD4FC082D182E282F38216 +:101CB000FC01EE0FFF1FEF5BFD4FD183C083019648 +:101CC00090937A0280937902809171008260809370 +:101CD000710080919000806880939000DF91CF9197 +:101CE000FF90EF90DF90CF9008958091070381706F +:101CF0000895809107038160809307030E94CD239C +:101D00000C94F803809107038E7F809307030C9453 +:101D1000CD2380917B0290E0019666E070E00E9406 +:101D2000912C80937B02089580917B0290E0019733 +:101D300066E070E00E94912C80937B0208958F9260 +:101D40009F92AF92BF92CF92DF92EF92FF920F934A +:101D50001F93CF93DF936B017C01C0912802D09138 +:101D60002902BE0180E090E00E94B1294B015C0194 +:101D7000A701960160E070E08CE594E40E941829C8 +:101D80009B01AC01C501B4010E94C32A0E948529B0 +:101D900020917B02233009F473C028F4222351F0F0 +:101DA0002130E9F02CC1243009F4A0C0253009F419 +:101DB000E0C025C180E090E0A0E0BFE38093060191 +:101DC00090930701A0930801B093090110922B0290 +:101DD00010922C0210922D0210922E0210C110921D +:101DE0002B0210922C0210922D0210922E026431BE +:101DF000710540F46A30710560F520E030E040E89C +:101E00005EE32BC0693C710508F0AAC080E090E059 +:101E10000E94B12920E030E040EA51E40E94AF285E +:101E200020E030E044E353E40E9418299B01AC0118 +:101E30000E94C32A20E030E040E05EE30E94C32A13 +:101E40009B01AC0160E070E080E09EE30E94AF285F +:101E500044C020E030E040E05FE3C701B6010E94EB +:101E6000C32A6B017C0180E090E0A0E0BEE3809398 +:101E7000060190930701A0930801B0930901BFC028 +:101E800010922B0210922C0210922D0210922E0210 +:101E90004AE0469F9001479F300D1124C90168EB2D +:101EA0007BE00E947D2CBC016C5D754077FF03C018 +:101EB000719561957109882777FD8095982F0E940B +:101EC000B3292EE333EC4EE259E30E94C32A20E00B +:101ED00030E040EC5EE30E94B0286093060170930E +:101EE0000701809308019093090189C010922B0289 +:101EF00010922C0210922D0210922E02CE018370AD +:101F00009927892BE1F0BE016170772780E090E08E +:101F10000E94B12920E030E040E05EE30E94C32A45 +:101F200020E030E040E45FE30E94B02860930601C7 +:101F30007093070180930801909309010CC080E021 +:101F400090E0A0E0BFE38093060190930701A09387 +:101F50000801B0930901C770DD27CD2B09F04FC0F0 +:101F600010920601109207011092080110920901C7 +:101F700046C010922B0210922C0210922D02109249 +:101F80002E0200E010E020E03FE3009306011093F2 +:101F9000070120930801309309016739710578F131 +:101FA00080E090E00E94B12920E030E047E153E476 +:101FB0000E94AF2820E030E04AE754E40E9418294C +:101FC00020E030E048E452E40E94C32A20E030E000 +:101FD00040EA51E40E94F5290E948029660F771F8C +:101FE000660F771FFB01EE5AFE4F2081318142813F +:101FF0005381C701B6010E94C32A6B017C01C7014E +:10200000B601DF91CF911F910F91FF90EF90DF907C +:10201000CF90BF90AF909F908F90089580918C0249 +:102020000895CF93DF9300D01F92CDB7DEB79C0108 +:1020300080911303843019F593E099833B832A83BD +:102040009093E9008FEF9091E800815095FD06C0D4 +:1020500095ED9A95F1F700008111F5CF8091E80098 +:1020600085FF0DC040E050E063E070E0CE010196D6 +:102070000E9472128091E8008E778093E8000F90A2 +:102080000F900F90DF91CF910895CF93DF9300D001 +:102090001F92CDB7DEB720911303243021F522E043 +:1020A00029839B838A8383E08093E9008FEF90915B +:1020B000E800815095FD06C095ED9A95F1F7000076 +:1020C0008111F5CF8091E80085FF0DC040E050E020 +:1020D00063E070E0CE0101960E9472128091E800E8 +:1020E0008E778093E8000F900F900F90DF91CF9143 +:1020F0000895209113032430F1F422E02093E900A5 +:102100002FEF3091E800215035FD06C035ED3A95AE +:10211000F1F700002111F5CF2091E80025FF0BC059 +:1021200040E050E065E070E00E9472128091E800AB +:102130008E778093E8000895CF93DF93EC01909120 +:102140001303943009F046C0809115018823D9F01B +:10215000809116018823B9F09093E9008FEF909158 +:10216000E800815095FD06C095E19A95F1F70000D1 +:102170008111F5CF8091E80085FF2CC040E050E050 +:1021800060E170E017C081E08093E9008FEF9091EB +:10219000E800815095FD06C095ED9A95F1F7000095 +:1021A0008111F5CF8091E80085FF14C040E050E038 +:1021B00068E070E0CE010E9472128091E8008E7794 +:1021C0008093E80080E1FE01ACE7B2E001900D925F +:1021D0008A95E1F7DF91CF910895809112038111E3 +:1021E00009C00E9407140E9464148091E200846078 +:1021F0008093E200089510921203089508950895BF +:102200000C94AB2242E061EC81E00E94811342E039 +:1022100061EC82E00E94811342E061EC83E00E9465 +:10222000811342E161EC84E00C94811380911503E9 +:10223000833009F455C030F4813071F0823009F4F4 +:102240008EC008958A3009F47AC08B3009F460C0DA +:10225000893009F09CC020C080911403813A09F0B4 +:1022600096C08091E800877F8093E80080911803F2 +:1022700090911903892B21F460E18CE792E003C06F +:1022800060E080E090E070E00E94BD128091E80084 +:102290008B778093E800089580911403813209F0D0 +:1022A00076C08091180390911903009719F0039755 +:1022B00009F06DC08091E800877F8093E8008091ED +:1022C000E80082FD05C0809113038111F8CF5FC043 +:1022D0008091F10080938C028091E8008B7753C04D +:1022E00080911403813A09F052C0809118039091B3 +:1022F0001903892B09F04BC08091E800877F8093F8 +:10230000E8008091E80080FFFCCF8091150136C085 +:10231000809114038132D9F58091180390911903AB +:10232000892BA9F58091E800877F8093E8000E94BF +:10233000B61380911603809315010C94EC1B8091C9 +:102340001403813221F58091E800877F8093E800B3 +:102350000E94B6138091170380938D020895809197 +:102360001403813AA1F48091E800877F8093E8000C +:102370008091E80080FFFCCF80918D028093F10076 +:102380008091E8008E778093E8000C94B61308954E +:1023900084B7877F84BF88E10FB6F894809360008C +:1023A000109260000FBE90E080E80FB6F894809322 +:1023B0006100909361000FBE0E9459170E9407149C +:1023C0000E9464148091E20084608093E20078941B +:1023D0000E94EA160E945B178BE091E00E940517AD +:1023E00080911303853069F40E946C22809111035F +:1023F0008823B1F30E949A22882391F30E945C12F1 +:10240000EFCF0E946317ECCF292F332723303105FC +:10241000C9F064F42130310581F02230310509F032 +:1024200043C08DE690E028EA33E042C02132310516 +:10243000F1F02232310541F137C082E190E025E12F +:1024400034E036C099278130910541F08230910502 +:1024500041F0892B49F5E4EAF3E005C0E6E7F3E053 +:1024600002C0ECE4F3E0849190E09F0121C064306D +:10247000D8F4E62FF0E0EE0FFF1FE255FE4F20816B +:10248000318189E090E014C0643070F470E0FB01A9 +:10249000EE0FFF1FEA55FE4F20813181FB01EE5503 +:1024A000FE4F808190E004C080E090E020E030E0CA +:1024B000FA0131832083089580E189BD82E189BDDD +:1024C00009B400FEFDCF8091D8008F7D8093D800A5 +:1024D0008091E00082608093E0008091E00081FDC7 +:1024E000FCCF0895CF92DF92EF92FF920F931F934C +:1024F000CF93DF93EC018B016A010E94D513811108 +:1025000033C0C114D10439F0F60180819181081BD8 +:10251000190BC80FD91FE12CF12C0115110519F168 +:102520008091E80085FD16C08091E8008E77809349 +:10253000E800C114D10449F0F60180819181E80ED0 +:10254000F91EF182E08285E00FC00E94D513882336 +:1025500021F30AC089918093F10001501109FFEF26 +:10256000EF1AFF0ADACF80E0DF91CF911F910F9130 +:10257000FF90EF90DF90CF90089520911A03309153 +:102580001B032617370748F06115710539F42091B0 +:10259000E8002E772093E80001C0B90140E0611502 +:1025A0007105A9F120911303222309F443C02530BA +:1025B00009F442C02091E80023FD40C02091E800CA +:1025C00022FD32C02091E80020FFE9CF4091F300C6 +:1025D0002091F20030E0342BFC01CF016115710530 +:1025E00059F02830310540F481918093F100615019 +:1025F00071092F5F3F4FF1CF41E02830310509F0DD +:1026000040E02091E8002E772093E800C8CF4111E8 +:10261000C9CF0AC080911303882361F0853061F02F +:102620008091E80083FD0AC08091E80082FFF2CF2C +:1026300080E0089582E0089583E0089581E00895A0 +:1026400020911A0330911B032617370748F06115B4 +:10265000710539F42091E8002E772093E80001C03D +:10266000B901FC0120E06115710591F1809113031E +:10267000882309F440C0853009F43FC08091E80008 +:1026800083FD3DC08091E80082FD2FC08091E8006D +:1026900080FFE9CF2091F3008091F20090E0922B2F +:1026A0006115710559F08830910540F4249120930B +:1026B000F1003196615071090196F2CF21E008973F +:1026C00009F020E08091E8008E778093E800CBCF7E +:1026D0002111CCCF0AC080911303882361F085308B +:1026E00061F08091E80083FD0AC08091E80082FFDC +:1026F000F2CF80E0089582E0089583E0089581E0BC +:102700000895982F973058F59093E900981739F06D +:102710007091EC002091ED005091F00003C0242F47 +:10272000762F50E021FF19C03091EB003E7F3093AF +:10273000EB003091ED003D7F3093ED003091EB00E8 +:1027400031603093EB007093EC002093ED005093D8 +:10275000F0002091EE0027FF07C09F5FD3CF8F705E +:102760008093E90081E0089580E00895809114034A +:1027700087FF11C08091E80082FD05C0809113039E +:102780008111F8CF11C08091E8008B770BC0809148 +:102790001303882349F08091E80080FFF8CF8091EF +:1027A000E8008E778093E80008952091E40030914E +:1027B000E50095E64091EC00842F817040FF22C037 +:1027C0008091E80080FD1CC080911303882391F064 +:1027D000853091F08091EB0085FD10C04091E400C0 +:1027E0005091E5004217530729F39A01915011F7D0 +:1027F00084E0089582E0089583E0089581E00895DB +:1028000080E008954091E80042FFDECF08950E94E5 +:1028100075140E947D14E0EEF0E080818160808379 +:10282000E8EDF0E080818F77808319BCA7EDB0E000 +:102830008C918E7F8C9380818F7E80831092120387 +:1028400008950F931F93CF93DF930E9475140E94F6 +:102850007D14C8EDD0E088818F7788838881806877 +:10286000888388818F7D888319BC1092130310920E +:102870000F03109211031092100300EE10E0F80104 +:1028800080818B7F808388818160888342E060E0E3 +:1028900080E00E948113E1EEF0E080818E7F8083F2 +:1028A000E2EEF0E0808181608083808188608083B7 +:1028B000F80180818E7F8083888180618883DF91A9 +:1028C000CF911F910F910895E8EDF0E080818F7E08 +:1028D0008083E7EDF0E080818160808384E082BFC7 +:1028E00081E0809312030C942114E8EDF0E08081E4 +:1028F0008E7F80831092E20008951092DA00109289 +:10290000E10008951F920F920FB60F9211242F939A +:102910003F934F935F936F937F938F939F93AF9367 +:10292000BF93EF93FF938091E10082FF0BC08091F2 +:10293000E20082FF07C08091E1008B7F8093E1007D +:102940000E94E9168091DA0080FF1FC08091D800B4 +:1029500080FF1BC08091DA008E7F8093DA00809127 +:10296000D90080FF0DC080E189BD82E189BD09B435 +:1029700000FEFDCF81E0809313030E94ED1005C09F +:1029800019BC109213030E94FB108091E10080FF9C +:1029900019C08091E20080FF15C08091E2008E7F17 +:1029A0008093E2008091E20080618093E200809158 +:1029B000D80080628093D80019BC85E0809313030F +:1029C0000E94FF108091E10084FF30C08091E200FE +:1029D00084FF2CC080E189BD82E189BD09B400FE7D +:1029E000FDCF8091D8008F7D8093D8008091E10049 +:1029F0008F7E8093E1008091E2008F7E8093E200E1 +:102A00008091E20081608093E20080910F0388232F +:102A100011F084E007C08091E30087FD02C081E0EF +:102A200001C083E0809313030E9400118091E100B4 +:102A300083FF29C08091E20083FF25C08091E100DF +:102A4000877F8093E10082E08093130310920F034D +:102A50008091E1008E7F8093E1008091E2008E7F83 +:102A60008093E2008091E20080618093E20042E086 +:102A700060E080E00E9481138091F0008860809384 +:102A8000F0000E94FE10FF91EF91BF91AF919F91D6 +:102A90008F917F916F915F914F913F912F910F9007 +:102AA0000FBE0F901F9018951F920F920FB60F92A6 +:102AB00011242F933F934F935F936F937F938F9343 +:102AC0009F93AF93BF93CF93DF93EF93FF93C09107 +:102AD000E900CF708091EC00D82FD17080FDD0E854 +:102AE0001092E9008091F000877F8093F000789445 +:102AF0000E9498151092E9008091F0008860809300 +:102B0000F000CD2BCF70C093E900FF91EF91DF91E2 +:102B1000CF91BF91AF919F918F917F916F915F9175 +:102B20004F913F912F910F900FBE0F901F901895CE +:102B30001F93CF93DF93CDB7DEB7AA970FB6F89464 +:102B4000DEBF0FBECDBFE4E1F3E088E08E0F9091D1 +:102B5000F10091938E13FBCF0E9416118091E80033 +:102B600083FF1FC18091140390911503492F50E0FA +:102B70004A30510508F015C1FA01EA5AFF4F0C948A +:102B8000A52C803881F0823809F00BC180911803A0 +:102B90008F708093E9008091EB0085FB882780F996 +:102BA0001092E90006C080911003909111039111D9 +:102BB00082609091E800977F9093E8008093F10005 +:102BC0001092F100C8C0282F2D7F09F0EAC0882399 +:102BD00019F0823061F0E5C080911603813009F070 +:102BE000E0C0933009F080E0809311032BC0809106 +:102BF0001603811127C0809118038F7009F4D1C08A +:102C00008093E9002091EB0020FF1CC0933021F459 +:102C10008091EB00806214C09091EB0090619093E2 +:102C2000EB0021E030E0A90102C0440F551F8A9556 +:102C3000E2F74093EA001092EA008091EB0088608E +:102C40008093EB001092E9008091E800877F86C0B6 +:102C50008111A7C0109116031F778091E30080783F +:102C6000812B8093E3008091E800877F8093E800C8 +:102C70000E94B6138091E80080FFFCCF8091E300B2 +:102C800080688093E300111102C082E001C083E0FC +:102C90008093130386C08058823008F082C08091F0 +:102CA0001603909117038C3D53E0950779F583E067 +:102CB0008A838AE289834FB7F894DE01139620E075 +:102CC0003EE051E2E32FF0E050935700E49120FF03 +:102CD00003C0E295EF703F5FEF708E2F90E0EA3017 +:102CE00010F0C79601C0C0968D939D932F5F24313D +:102CF00049F74FBF8091E800877F8093E8006AE240 +:102D000070E0CE0101960E94BD1214C0AE014F5F6B +:102D10005F4F609118030E940412BC01009709F4F0 +:102D200040C09091E800977F9093E80089819A8154 +:102D30000E9420138091E8008B778093E80031C0D7 +:102D4000803879F58091E800877F8093E800809152 +:102D50000F038093F1008091E8008E778093E80064 +:102D60000E94B6131EC081111CC0909116039230B0 +:102D7000C0F48091E800877F8093E80090930F0370 +:102D80000E94B61380910F03811106C08091E30069 +:102D900087FD02C081E001C084E0809313030E949C +:102DA00002118091E80083FF0AC08091E800877FCC +:102DB0008093E8008091EB0080628093EB00AA96FC +:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C +:102DD00008950895CF93809113038823A1F0C091A3 +:102DE000E900CF709091EC00892F817090FD80E810 +:102DF000C82B1092E9008091E80083FD0E9498158D +:102E0000CF70C093E900CF9108959093930280937F +:102E100092020895E0919202F0919302309721F08E +:102E20000190F081E02D099480E00895E0919202F4 +:102E3000F0919302309721F00280F381E02D099404 +:102E40000895E0919202F0919302309721F004806E +:102E5000F581E02D0994089520919002309191021E +:102E60008217930771F09093910280939002E09102 +:102E70009202F0919302309721F00680F781E02DC5 +:102E80000994089520918E0230918F028217930742 +:102E900071F090938F0280938E02E0919202F091F4 +:102EA0009302309721F00084F185E02D0994089574 +:102EB00008950C9458170E94DF220E9430090E9446 +:102EC00065230C9414285F926F927F928F929F9249 +:102ED000AF92BF92CF92DF92EF92FF920F931F9328 +:102EE000CF93DF9300D000D01F92CDB7DEB70E9402 +:102EF00075099DE9C92E92E0D92E03E010E0AA24BD +:102F0000A394B12C502E802F0E94F0094C01F601A1 +:102F1000729062906F016826792661147104A1F4A1 +:102F20000150110978F78FEF89838A831B820E94F1 +:102F3000E8228160782F9D838C8349815A816B813F +:102F40008D810E94131838C08091F20281FD0E9489 +:102F5000F9092BE030E07501022E02C0EE0CFF1CD7 +:102F60000A94E2F7C70186219721892B09F1298369 +:102F70005A828E209F2091E0892809F490E09B835B +:102F80000E94E8228160782F9D838C8349815A8139 +:102F90006B818D810E941318000F111FF801EB56F1 +:102FA000FD4F80819181E826F926F182E08204C0FC +:102FB0002150310980F6B4CF0E944C251091940223 +:102FC0000E940A171817D1F00E940A1780939402E2 +:102FD0000F900F900F900F900F90DF91CF911F9156 +:102FE0000F91FF90EF90DF90CF90BF90AF909F90A8 +:102FF0008F907F906F905F900C941A090F900F90B4 +:103000000F900F900F90DF91CF911F910F91FF9034 +:10301000EF90DF90CF90BF90AF909F908F907F9078 +:103020006F905F900895CF93DF93CDB7DEB72B9766 +:103030000FB6F894DEBF0FBECDBF4F8358876987A8 +:103040007A878B87DE01119686E0FD0111928A95C1 +:10305000E9F785E0FE01379601900D928A95E1F738 +:1030600049815A816B817C818D819E810E948A1E5B +:103070002B960FB6F894DEBF0FBECDBFDF91CF9178 +:103080000895CF93882309F4C2C0C82F823859F419 +:103090000E940A1781FDBBC089E30E9464210E943F +:1030A000312289E30CC0833879F40E940A1780FD2D +:1030B000AEC083E50E9464210E94312283E50E9414 +:1030C000A621CF910C943122843859F40E940A171A +:1030D00082FD9DC087E40E9464210E94312287E422 +:1030E000EECF8CEF8C0F813A48F48C2F0E947C2716 +:1030F00081118DC08C2F0E946421E3CF80E28C0F60 +:10310000883048F4C77081E001C0880FCA95EAF79B +:103110000E94EA21D6CF8BE58C0F833078F4C53A34 +:1031200029F0C63A31F083E890E005C081E890E0EC +:1031300002C082E890E0CF910C942C1788E58C0FA8 +:10314000833108F064C0C83A39F1C93A41F1CA3A4A +:1031500049F1CB3A51F1CC3A59F1CD3A61F1C03B4A +:1031600069F1CE3A71F1CF3A79F1C13B81F1C23BBD +:1031700089F1C33B91F1C43B99F1C53BA1F1C63B39 +:10318000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B99 +:10319000C9F180E090E038C082EE90E035C089EE61 +:1031A00090E032C08AEE90E02FC085EB90E02CC01A +:1031B00086EB90E029C087EB90E026C08CEC90E095 +:1031C00023C08DEC90E020C083E891E01DC08AE828 +:1031D00091E01AC082E991E017C084E991E014C03F +:1031E00081E292E011C083E292E00EC084E292E0BC +:1031F0000BC085E292E008C086E292E005C087E25B +:1032000092E002C08AE292E0CF910C944217CF91F3 +:103210000895882309F44BC0823859F40E940A1794 +:1032200081FF45C089E30E9464210E94312289E325 +:103230000CC0833871F40E940A1780FF38C083E500 +:103240000E9464210E94312283E50E94A6210C94F1 +:103250003122843859F40E940A1782FF28C087E47B +:103260000E9464210E94312287E4EFCF9CEF980FE7 +:10327000913A58F390E2980F983050F4877091E0AB +:1032800001C0990F8A95EAF7892F0E94F021DFCFBC +:103290009BE5980F933020F480E090E00C942C177D +:1032A000885A833120F480E090E00C94421708950E +:1032B000882321F00E94EA210C943122089588236A +:1032C00021F00E94F0210C94312208957F928F9278 +:1032D0009F92AF92BF92CF92DF92EF92FF920F93A5 +:1032E0001F93CF93DF931F92CDB7DEB77C01C62E1D +:1032F000772EFC01058102950F70128111110E9439 +:1033000007220E945D21882379F0112369F080E271 +:103310008C0D883048F082E00E9446210E945D2199 +:1033200091E0D82ED92601C0D12CE72DE295EF707F +:10333000F0E0E05AFF4F0C94A52C872D807F072DDD +:103340000F70882311F00295007F112389F000236C +:1033500009F499C180E28C0D883020F4802F0E94FE +:10336000EA2103C0802F0E94FA210E9431228BC1E2 +:103370008C2D0E940919002309F4C3C180E28C0D31 +:10338000883020F4802F0E94F02103C0802F0E94FB +:1033900000220E943122B5C1872D807F972D9F701A +:1033A000803211F4892F03C0892F8295807FCC2031 +:1033B00021F0F1E0CF16A1F01DC0112339F0002358 +:1033C00019F1013009F50E941A229BC1002319F05E +:1033D000013009F496C189830E941D22898110C1A0 +:1033E000112321F0063008F08CC10EC0053008F022 +:1033F00088C106C1112359F0002331F0F7019581EE +:1034000090FF41C19F7095830E9458197AC1002393 +:1034100009F4F6C03EC1872D86958695837090E0AD +:10342000009719F0019761F06CC1112321F08C2DE8 +:10343000972D937002C080E090E00E942C1761C12C +:10344000112321F08C2D972D937002C080E090E025 +:103450000E94421756C18C2D112319F00E9454244A +:1034600002C00E94BC240E9441254BC1872D83705D +:1034700009F052C0111145C18C2D82958695877037 +:10348000880F880F9C2D9F70892E912CA12CB12C18 +:10349000082E04C0880C991CAA1CBB1C0A94D2F7E5 +:1034A000C4FE14C00FE010E020E030E0B901A80134 +:1034B00004C0440F551F661F771F8A95D2F7CB01B2 +:1034C000BA01609570958095909503C060E070E0BA +:1034D000CB01272D26952695237030E0223031052B +:1034E00069F02330310589F0682979298A299B29D7 +:1034F0002130310571F00E94D21F03C1682979295A +:103500008A299B290E94EE1FFCC00E94D21FC50180 +:10351000B4010E94B61FF5C0112319F0872D8170E8 +:1035200001C08695882309F4ECC08C2D8295869580 +:103530008770880F880F9C2D9F70892E912CA12C4D +:10354000B12C082E04C0880C991CAA1CBB1C0A9420 +:10355000D2F7C4FE14C00FE010E020E030E0B90163 +:10356000A80104C0440F551F661F771F8A95D2F724 +:10357000CB01BA01609570958095909503C060E08D +:1035800070E0CB01272D269526952370422F50E021 +:103590004230510569F04330510589F06829792995 +:1035A0008A299B294130510571F00E94AC20A9C0A5 +:1035B000682979298A299B290E94C820A2C00E94D3 +:1035C000AC20C501B4010E9490209BC08C2D90E0DE +:1035D000FC01E05EF109E531F10508F050C0E05969 +:1035E000FF4F0C94A52C0C2D0F70872D8F7111237C +:1035F00021F00E942920802F07CF0E944A20802F8F +:103600000E945F197EC0112341F0053008F079C097 +:10361000872D8F710E946F2074C0063008F071C032 +:10362000F7CF112339F0872D8F710E94292069C0AF +:103630001123C9F3872D8F710E944A2062C0112384 +:1036400029F0872D8F710E9414205BC00E940A20F0 +:1036500058C0112351F0172D1F71812F0E9429206E +:1036600063E0812F0E943D214CC081E00E944621F1 +:10367000023008F446C082E00E94462142C0112375 +:1036800031F0002381F28C2D0E9441183AC00023B2 +:1036900089F28C2D0E94091934C0472D4F706C2D72 +:1036A000C7010E9485030E942E1F2BC0111129C043 +:1036B000472D4F7050E042305105B9F04CF44115A0 +:1036C000510581F041305105E1F40E943C2819C0B8 +:1036D0004330510569F04430510599F48C2D0E9416 +:1036E0008E280FC00E9425280CC00E94582809C0AF +:1036F0000E946B2806C0472D4F706C2DC7010E9499 +:10370000FB05DD20F9F00E94392180FD1BC0F70187 +:1037100012820E9433210E942920C7010E94B11BFE +:103720000E9433210F90DF91CF911F910F91FF9055 +:10373000EF90DF90CF90BF90AF909F908F907F9051 +:103740000C944A200F90DF91CF911F910F91FF9021 +:10375000EF90DF90CF90BF90AF909F908F907F9031 +:1037600008950F931F93CF93DF93EC018881998184 +:103770002B813C81232BB9F09F3F11F48F3F99F0AF +:10378000CE010E94FA03882371F0688179818A81D1 +:103790000E942F218C010E94E4200E94AB1FB801DF +:1037A000CE010E946619DF91CF911F910F9108956C +:1037B0000E9407220E9417220E94DC210E943122CF +:1037C0000E94F2250E94412580E090E00E942C1783 +:1037D00080E090E00C9442170E94F7210C94D81BD3 +:1037E0000E942421292F22952F7030E02C303105A2 +:1037F0004CF42A3031056CF4225031092230310565 +:10380000A8F407C02C30310569F02F30310551F094 +:103810000DC0803F69F018F4803E40F409C0843F39 +:1038200029F406C093FB882780F9089580E0089565 +:1038300081E00895CF93DF9300D000D01F92CDB7E1 +:10384000DEB70F900F900F900F900F90DF91CF91F8 +:103850000895CF93DF9300D000D000D0CDB7DEB76E +:1038600026960FB6F894DEBF0FBECDBFDF91CF9185 +:1038700008951F93CF93DF93C0919D0216E080912E +:103880009E02C81799F0D0E01C9FF0011D9FF00D1B +:103890001124E156FD4F4081518162817381848101 +:1038A00095810E94291C2196C770E9CFDF91CF91A5 +:1038B0001F9108954091CF025091D0026091D102A2 +:1038C0007091D2028091D3029091D4020C94291C61 +:1038D0008091D40282958F7009F054C08091D102FA +:1038E000882309F44FC080919D02A0919E026091AF +:1038F000CF027091D0024091D2025091D302B6E033 +:103900008A1709F43FC090E041155105C1F17F3F8E +:1039100011F46F3FA1F1B89FF001B99FF00D112490 +:10392000E156FD4F218172132AC02081621327C006 +:103930002281211124C0238134812417350710F4FA +:1039400021503109241B350B283C3105C0F420914E +:10395000D4022F7020612093D40226E0289FF0012A +:10396000299FF00D1124EC55FD4F80818F708061EF +:1039700080838FEC92E00E94B11B0C94391C01965D +:103980008770BECF0895CF92DF92EF92FF920F9390 +:103990001F93CF93DF93CDB7DEB762970FB6F8943E +:1039A000DEBF0FBECDBF8C0185E0F801DE011D96A4 +:1039B00001900D928A95E1F7D8014C9111965C9196 +:1039C000119712966C9112971396CD90DC901497E4 +:1039D0003091CF027091D0028091D2029091D302A7 +:1039E000009709F46BC17F3F19F43F3F09F466C1AA +:1039F000E090D102EE2009F4C0C02091D402C81694 +:103A0000D90628F0F601E81BF90BCF0104C0809518 +:103A100090958C0D9D1DFF24F394883C910578F0C2 +:103A2000F12C207F09F0C6C07C2DD98AC88A8989EB +:103A30000E941A1C8FEC92E00E94B11BB1C0822F31 +:103A4000807F09F046C0751314C0341312C0611191 +:103A500010C02F7020612093D4020E945A1C8FEC5A +:103A600092E00E94B11B8091D402D80115968C93EC +:103A70002EC0CD2819F15F3F11F44F3FF9F0F62E1B +:103A800061111CC080919D0220919E0236E0821738 +:103A900009F45AC090E0389FF001399FF00D1124CD +:103AA000E156FD4F7181571306C07081471303C063 +:103AB0007281711103C001968770E9CFF62E6623DB +:103AC00009F418C18091D40281608093D402F12C52 +:103AD00011C1751308C0341306C0611104C0809170 +:103AE000D402D801C3C04D875E878D859E856A8BC1 +:103AF0000E94F01B6A898823E1F16623D1F12091AD +:103B0000D402822F82958F7090E0029774F080919A +:103B1000CF029091D00298878F831986DB86CA8660 +:103B20002C87CE0107960E94B11B86E0F801AFEC0E +:103B3000B2E001900D928A95E1F70E94681C0E9404 +:103B40005A1CFF24F394D6C04D875E878D859E85D1 +:103B50000E942421292F22952F7030E02230310538 +:103B60000CF0BCC09F7009F0B6C0805E883008F4CD +:103B7000C1C0C8010E94B11BE4CFC816D90608F421 +:103B800053C0F601E81BF90BCF01883C910508F4FE +:103B900050C0F12C7C2DD98AC88A89890E941A1CB0 +:103BA000EFECF2E086E0DF011D928A95E9F70E94D2 +:103BB0005A1CA0C0751314C0341312C0611110C078 +:103BC0008091D402F8018583C8010E94B11B86E070 +:103BD000EFECF2E0DF011D928A95E9F7FE2C8AC036 +:103BE0004D875E878D859E856A8B0E94F01B6A8952 +:103BF000882309F4BECF662309F4BBCF2091D402F9 +:103C0000822F82958F7090E002970CF48ECF809176 +:103C1000CF029091D0029A8389831B82DD82CC826D +:103C20002E83CE0101967FCF809590958C0D9D1DA2 +:103C3000ACCFF62E662309F49CCF75132EC0341337 +:103C40002CC02091D40220FD1FC0822F82958F703E +:103C5000D9F0D80115962C9315978F3049F08F5FC6 +:103C6000982F9295907F822F8F70892B15968C9329 +:103C7000C8010E94B11B86E0F801AFECB2E00190F0 +:103C80000D928A95E1F793CF86E0F801AFECB2E0B0 +:103C900001900D928A95E1F72DC04D875E878D8545 +:103CA0009E850E94F01B811140CF8091D4028160DB +:103CB0008093D402C8010E94B11B1CC0662309F482 +:103CC00058CF4D875E878D859E850E94F01B882387 +:103CD00009F44FCF2ACF811148CF0CC024303105D1 +:103CE0000CF047CF9F7009F440CFF8019581907F89 +:103CF00009F03BCF8F2D62960FB6F894DEBF0FBE52 +:103D0000CDBFDF91CF911F910F91FF90EF90DF908A +:103D1000CF9008951F93CF93DF93CDB7DEB72C9745 +:103D20000FB6F894DEBF0FBECDBF4F8358876987AB +:103D30007A878B879C87CE0107960E94C31C8823B5 +:103D400069F08F8198852A853B85232BF1F19F3F70 +:103D500009F063C08F3F09F060C037C086E0FE0104 +:103D60003796DE01119601900D928A95E1F76F81E9 +:103D70007885EA85FB85309741F17F3F11F46F3FED +:103D800021F120919E0230E0C901019687709927A8 +:103D900040919D0250E08417950709F447C069835C +:103DA0007A83FD83EC8396E0929FD001939FB00DC0 +:103DB0001124A156BD4FFE01319601900D929A95A6 +:103DC000E1F780939E020E94391C16E080919D02CB +:103DD00090919E028917C1F1189FC001112481564C +:103DE0009D4F0E94C31C882379F1E0919D021E9F84 +:103DF000F0011124E156FD4F4081518162817381B0 +:103E0000848195810E94291C80919D0290E00196F9 +:103E10008770992780939D02D9CF4F8158856985F6 +:103E20007A858B859C850E94291CCFCF0E94EC1B34 +:103E300010929E0210929D02EFECF2E086E0DF010C +:103E40001D928A95E9F7C1CF2C960FB6F894DEBF84 +:103E50000FBECDBFDF91CF911F910895EF92FF92DA +:103E60000F931F93CF93DF938C01009709F46CC0DD +:103E7000F12CEE24E394E8012196F8018491843733 +:103E800040F4843008F051C0813081F0823019F163 +:103E90005BC0853709F444C0A8F19CE7980F9037C0 +:103EA00008F052C08F770E94091941C00E5F1F4F62 +:103EB000FE01C49180E28C0F883048F4C7708E2DCB +:103EC00001C0880FCA95EAF70E940A2214C08C2FFD +:103ED0000E9441182DC00E5F1F4FFE01C49180E269 +:103EE0008C0F883058F4C7708E2D01C0880FCA958A +:103EF000EAF70E9410220E9431221AC08C2F0E94E1 +:103F0000091916C00E5F1F4FFE01C491CC2381F02A +:103F10008FE99FE00197F1F700C00000C150F6CF94 +:103F20000E5F1F4FFE01F49003C00E9441188E01E6 +:103F30008F2D882309F49FCFEFE9FFE03197F1F748 +:103F400000C000008150F5CFDF91CF911F910F91FC +:103F5000FF90EF90089508956093D9027093DA026C +:103F60008093DB029093DC020C94D81B0F931F9379 +:103F70000091D9021091DA022091DB023091DC022B +:103F8000DC01CB01802B912BA22BB32B8093D90288 +:103F90009093DA02A093DB02B093DC021F910F91A1 +:103FA0000C94D81B0F931F930091D9021091DA0241 +:103FB0002091DB023091DC02DC01CB0180239123D4 +:103FC000A223B3238093D9029093DA02A093DB0259 +:103FD000B093DC021F910F910C94D81B0F931F9389 +:103FE0000091D9021091DA022091DB023091DC02BB +:103FF000DC01CB0180279127A227B3278093D90228 +:104000009093DA02A093DB02B093DC021F910F9130 +:104010000C94D81B1092D5021092D6021092D7029F +:104020001092D8020C94D81B41E050E060E070E0A0 +:1040300004C0440F551F661F771F8A95D2F740931F +:10404000D5025093D6026093D7027093D8020C9495 +:10405000D81B41E050E060E070E004C0440F551F01 +:10406000661F771F8A95D2F78091D5029091D6026C +:10407000A091D702B091D802482B592B6A2B7B2BE9 +:104080004093D5025093D6026093D7027093D80222 +:104090000C94D81B41E050E060E070E004C0440F95 +:1040A000551F661F771F8A95D2F7409550956095EA +:1040B00070958091D5029091D602A091D702B091CF +:1040C000D802482359236A237B234093D502509377 +:1040D000D6026093D7027093D8020C94D81B41E0AB +:1040E00050E060E070E004C0440F551F661F771F6A +:1040F0008A95D2F78091D5029091D602A091D702ED +:10410000B091D802482759276A277B274093D502C8 +:104110005093D6026093D7027093D8020C94D81BA8 +:104120000F931F930091D5021091D6022091D702D0 +:104130003091D802DC01CB01802B912BA22BB32B29 +:104140008093D5029093D602A093D702B093D80261 +:104150001F910F910C94D81B0F931F930091D502C0 +:104160001091D6022091D7023091D802DC01CB0108 +:1041700080239123A223B3238093D5029093D60268 +:10418000A093D702B093D8021F910F910C94D81B23 +:104190000F931F930091D5021091D6022091D70260 +:1041A0003091D802DC01CB0180279127A227B327C9 +:1041B0008093D5029093D602A093D702B093D802F1 +:1041C0001F910F910C94D81B0895CF92DF92EF921C +:1041D000FF920F931F93CF93DF938C01C090D9026E +:1041E000D090DA02E090DB02F090DC028091D50200 +:1041F0009091D602A091D702B091D802C82AD92AAC +:10420000EA2AFB2ACFE1D0E0D701C6010C2E04C078 +:10421000B695A795979587950A94D2F780FF06C023 +:10422000B8018C2F0E948008019721F4219760F734 +:1042300080E001C08C2FDF91CF911F910F91FF90F3 +:10424000EF90DF90CF900895CF93DF93EC010E9421 +:10425000E520BE010E948008DF91CF910895CB0137 +:104260000E94242108958091DD028595859585958C +:1042700008958091DD028770089598E0899F9001EC +:104280001124262B2093DD020C9429202091DD029D +:10429000809582238093DD02982F977069F430E037 +:1042A000482F552747FD50952417350729F0859548 +:1042B000859585950C944A2008959091DD0297701C +:1042C00081E009F480E0089590911501992321F08F +:1042D00090911601911109C0209117013091180198 +:1042E000F90132969FEF40E01FC0982F9695969562 +:1042F00096959F3050F5E0911701F0911801E90F64 +:10430000F11D877021E030E0A90102C0440F551F64 +:104310008A95E2F7CA019181892B818308959F3F95 +:1043200039F04F5F4E3041F051915813F8CF0DC026 +:104330005111F7CF942FF5CF9F3F39F0F901E90FD5 +:10434000F11D97FDFA9582830895089590911501C6 +:10435000992321F090911601911109C02091170124 +:1043600030911801F9013296205F3F4F1FC0982FFE +:104370009695969596959F30F0F4E0911701F091FF +:104380001801E90FF11D877021E030E0A90102C09A +:10439000440F551F8A95E2F7CA01809591818923C0 +:1043A000818308953196E217F30729F090819813DD +:1043B000F9CF1082F7CF089581E090E0E0911701E6 +:1043C000F0911801E80FF91F1082019680319105D4 +:1043D000A9F708959091F102892B8093F102089535 +:1043E00080959091F10289238093F10208951092B3 +:1043F000F10208959091F002892B8093F0020895C4 +:1044000080959091F00289238093F0020895109294 +:10441000F00208959091EF02892B8093EF020895A6 +:1044200080959091EF0289238093EF020895109276 +:10443000EF0208958093DE0208951092DE0208953F +:104440008091170190911801FC0131969C01205F29 +:104450003F4F80E0919191118F5FE217F307D1F701 +:104460000895E0911701F09118018091F102808385 +:10447000E0911701F091180190818091F002892B51 +:104480008083E0911701F091180190818091EF02F3 +:10449000892B80838091DE02882361F0E0911701EF +:1044A000F09118019081892B80830E942022811134 +:1044B0001092DE0280911701909118010C9416174A +:1044C00020E0009739F0AC01415051098423952335 +:1044D0002F5FF7CF822F089580911303843039F135 +:1044E0001092F30220E488E190E00FB6F894A895CA +:1044F000809360000FBE2093600080E00E94EC0279 +:1045000080E00E941A0983B7817F846083BF83B7EC +:10451000816083BF7894889583B78E7F83BF88E15D +:104520000FB6F89480936000109260000FBE08955B +:104530000895089580E00E94EC020E9498220E9453 +:1045400075090E9499220E94FA0991E0811101C027 +:1045500090E0892F08950E94EC1B80E00E94EC02FD +:104560000E9414280E940A170C941A091F920F9295 +:104570000FB60F9211248F939F93AF93BF938091A7 +:10458000F302811113C08091F4029091F502A09181 +:10459000F602B091F7024196A11DB11D8093F4027D +:1045A0009093F502A093F602B093F702BF91AF91FA +:1045B0009F918F910F900FBE0F901F90189582E0E2 +:1045C00084BD93E095BD9AEF97BD80936E000895EA +:1045D0002FB7F8948091F4029091F502A091F60221 +:1045E000B091F7022FBF0895CF92DF92EF92FF9222 +:1045F0000F931F932FB7F8944091F4025091F50256 +:104600006091F6027091F7022FBF6A017B01EE24E0 +:10461000FF248C0120E030E0C016D106E206F3064C +:1046200010F4415051099A01281B390BC9011F91FF +:104630000F91FF90EF90DF90CF9008951F920F920F +:104640000FB60F9211248F939F93AF93BF938091D6 +:10465000F4029091F502A091F602B091F702019652 +:10466000A11DB11D8093F4029093F502A093F60270 +:10467000B093F702BF91AF919F918F910F900FBEB2 +:104680000F901F9018950E940714F8942FEF87EA57 +:1046900091E6215080409040E1F700C0000087E0A3 +:1046A00090EBDC0180931E0390931F03A0932003E3 +:1046B000B09321039CE088E10FB6F894A89580930D +:1046C00060000FBE90936000FFCF0E94A423811171 +:1046D00002C00E9480230E94AF238093F2020E94B6 +:1046E000B72380931C0387FB882780F980931601EA +:1046F0000E94B323682F70E080E090E00C94AC1F20 +:104700006DEE7EEF80E090E00E94CB2C60E082E0D6 +:1047100090E00E94B92C60E083E090E00E94B92C08 +:1047200060E084E090E00E94B92C60E085E090E0D9 +:104730000E94B92C60E086E090E00E94B92C6FEFF7 +:1047400087E090E00C94B92C80E090E00E94B32CBC +:1047500021E08D3E9E4F09F020E0822F089582E0F7 +:1047600090E00C94AB2C83E090E00C94AB2C84E0B4 +:1047700090E00C94AB2C682F84E090E00C94B92C62 +:1047800086E090E00C94AB2C682F86E090E00C94CF +:10479000B92C87E090E00C94AB2C682F87E090E078 +:1047A0000C94B92C8091FA0280FF0BC060911C011F +:1047B00085E0689FB001112475956795759567959B +:1047C0002BC081FF09C060911C0185E0689FB0018A +:1047D00011247595679520C082FF07C060911C0168 +:1047E00085E0689FB001112417C09091FB029923C6 +:1047F000D1F060911B01961788F720911C0185E08C +:10480000289F90011124929FA001939F500D112485 +:1048100070E0CA010E94912C6038710540F4611566 +:10482000710539F002C065E070E0862F08958FE7CA +:10483000089581E008958091FA0280FF08C0609198 +:104840001A0170E0759567957595679521C081FF90 +:1048500006C060911A0170E07595679519C082FFD6 +:1048600004C060911A0170E010C09091FB0299237E +:10487000C1F0609119019617A0F780911A01899FE4 +:10488000C001112470E00E94912C6038710528F459 +:104890006115710521F0862F08958FE7089581E055 +:1048A000089561E070E0F4CF803F21F40E94D223AC +:1048B000819504C0813F29F40E94D2238093FE0297 +:1048C0000895823F21F40E94D223819504C0833F42 +:1048D00029F40E94D2238093FD020895893F19F4A0 +:1048E0000E941B2405C08A3F31F40E941B2481953D +:1048F0008093FF0208958B3F21F40E941B24819531 +:1049000004C08C3F29F40E941B2480930003089567 +:10491000843F21F48091FC02816017C0853F21F41F +:104920008091FC02826011C0863F21F48091FC02DC +:1049300084600BC0873F21F48091FC02886005C031 +:10494000883F31F48091FC0280618093FC020895DD +:104950008D3F21F48091FA0281600BC08E3F21F4DB +:104960008091FA02826005C08F3F29F48091FA029B +:1049700084608093FA020895803F39F48091FE02AA +:1049800087FF6CC01092FE0269C0813F29F48091BC +:10499000FE021816BCF362C09091FD02823F29F41A +:1049A00097FF5CC01092FD0259C0833F19F419169D +:1049B000CCF354C0893F41F48091FF0218160CF0EB +:1049C0004DC01092FF024AC08A3F29F48091FF0235 +:1049D00087FF44C0F6CF8B3F39F48091000387FFF7 +:1049E0003DC0109200033AC08C3F29F4809100032F +:1049F0001816BCF333C0843F21F48091FC028E7FF3 +:104A000017C0853F21F48091FC028D7F11C0863F45 +:104A100021F48091FC028B7F0BC0873F21F48091B1 +:104A2000FC02877F05C0883F31F48091FC028F7EB5 +:104A30008093FC0213C08D3F21F48091FA028E7F97 +:104A40000BC08E3F21F48091FA028D7F05C08F3F0D +:104A500029F48091FA028B7F8093FA028091FD0203 +:104A600081110EC08091FE0281110AC08091FF0267 +:104A7000811106C080910003811102C01092FB02D7 +:104A800008958CEF92E00E9421170E94E8229093F3 +:104A9000F9028093F80208951F93CF93DF938091DA +:104AA000F8029091F9020E94F422AC019091FB026D +:104AB000992321F020911D0130E006C020911E01B4 +:104AC0008AE0289F900111244217530708F486C0FA +:104AD0008091FD02C091FE02D091FF02109100036F +:104AE000811107C0C11176C0D11174C0111172C0FB +:104AF00075C09F3F19F09F5F9093FB02181624F436 +:104B00000E94D2238093FD028091FD0287FF05C0A1 +:104B10000E94D22381958093FD021C1624F40E94EA +:104B2000D2238093FE028091FE0287FF05C00E947F +:104B3000D22381958093FE026091FD02662339F1B4 +:104B4000C091FE02CC2319F1772767FD7095872F5E +:104B5000972F0E94B32923E333E343E35FE30E94EB +:104B6000C32A0E9480296093FD026C2F772767FD7E +:104B70007095872F972F0E94B32923E333E343E3F4 +:104B80005FE30E94C32A0E9480296093FE021D16E3 +:104B900024F40E941B248093FF028091FF0287FF70 +:104BA00005C00E941B2481958093FF02111624F4F6 +:104BB0000E941B24809300038091000387FF05C09F +:104BC0000E941B24819580930003DF91CF911F9158 +:104BD0000C9441259F3F09F08ECF96CFDF91CF9166 +:104BE0001F910895ECEFF2E085E0DF011D928A95B8 +:104BF000E9F71092FB021092FA020895833081F1D6 +:104C000028F4813059F08230D1F00895853009F4CC +:104C100049C0B8F1863009F456C0089580911E014C +:104C2000262F30E0280F311D2F3F310524F4680F67 +:104C300060931E0108958FEF80931E010895809167 +:104C40001D01262F30E0280F311D2F3F310524F4A0 +:104C5000680F60931D0108958FEF80931D010895E3 +:104C600080911C01262F30E0280F311D2F3F310588 +:104C700024F4680F60931C0108958FEF80931C014A +:104C8000089580911B01262F30E0280F311D2F3F02 +:104C9000310524F4680F60931B0108958FEF809312 +:104CA0001B01089580911A01262F30E0280F311D35 +:104CB0002F3F310524F4680F60931A0108958FEF98 +:104CC00080931A01089580911901262F30E0280F52 +:104CD000311D2F3F310524F4680F609319010895A9 +:104CE0008FEF809319010895833011F128F48130FA +:104CF00049F0823091F00895853081F120F18630BD +:104D0000C1F1089580911E01681720F4861B8093DD +:104D10001E01089510921E01089580911D016817CB +:104D200020F4861B80931D01089510921D010895A3 +:104D300080911C01681720F4861B80931C01089544 +:104D400010921C01089580911B01681720F4861BA6 +:104D500080931B01089510921B01089580911A0100 +:104D6000681720F4861B80931A01089510921A0187 +:104D7000089580911901681720F4861B809319010A +:104D800008951092190108950F931F93873208F028 +:104D900048C08E3108F08DC0803109F477C008F525 +:104DA000873009F461C068F4863009F09DC08091B5 +:104DB000F202817F8E7F8093F20281E08093020372 +:104DC00094C08B3009F489C08E3009F08DC0809179 +:104DD000F20282FB222720F991E0922790FB82F9D0 +:104DE0005EC0863109F479C060F4813109F07CC07D +:104DF0000E94EC1B9091160181E089278093160197 +:104E00006CC0893109F469C08B3109F06DC08091A3 +:104E1000F20281FB222720F991E0922790FB81F991 +:104E20003EC0883309F459C050F4893209F457C0A0 +:104E3000853309F454C0873209F451C055C0833416 +:104E400009F44DC028F48A3308F44EC0895332C0A7 +:104E5000883409F049C00E94EC1B0E942A0A0E9473 +:104E6000F1030E94432339C09091F202892F80956B +:104E7000817080FB90F929F0966098609093F2021F +:104E800034C0997F977F9093F20227C08091F202FD +:104E900083FB222720F991E0922790FB83F98093EE +:104EA000F2029923D1F08091F20281608093F202A4 +:104EB00014C08D5141E050E060E070E08A019B0138 +:104EC00004C0000F111F221F331F8A95D2F7C9019A +:104ED000B8010E94AC1F0E94EC1B81E006C061E09B +:104EE00070E080E090E0F5CF80E01F910F91089591 +:104EF00080E0089580E00895CF93C82F8091020349 +:104F0000813069F018F08230C9F184C0E091170156 +:104F1000F09118018081823209F07EC007C0E091D3 +:104F20001701F09118018081823261F48C2F0E9468 +:104F30007827811104C08C2F0E94C4261DC081E0F7 +:104F400090E01AC08C2F0E947A27811114C0C431BE +:104F500079F048F4CB3079F0C03109F061C082E0DB +:104F60008093020308C0C93219F0C83321F058C039 +:104F70001092020355C081E0817054C0C93291F192 +:104F800020F5C43179F1B0F4C73009F047C08EE1A3 +:104F900080931E0182E380931D018AE080931C01AF +:104FA00084E180931B0188E080931A0188E280935A +:104FB000190134C0CE51C63088F5EC2FF0E0EA5428 +:104FC000FE4F80818093010329C0CE34E9F020F4A4 +:104FD000CB3421F56AE013C0C13579F0C235F1F464 +:104FE00061E00DC080910103882319F01092010344 +:104FF00015C081E08093020315C061E006C0809176 +:1050000001030E94FE250AC06AE0809101030E940C +:10501000742604C01092020380E004C081E002C044 +:1050200080E0AACFCF9108950E94A423811102C0ED +:105030000E9480230E94C02380931D0380FF02C032 +:10504000869501C080E00C94EC0280911D03982F9E +:105050009695292F30E0233031054CF49F5F990F4E +:105060008170892B816080931D030E94C4238091ED +:105070001D0386950C94EC0280911D03982F969544 +:1050800091F09158990F8170892B80931D038E7F29 +:1050900091E009F490E080911D0390FB80F98093EA +:1050A0001D030E94C42380911D0386950C94EC027D +:1050B00080911D03982F909590FB80F980931D039C +:1050C0000E94C42380911D0380FF02C0869501C009 +:1050D00080E00C94EC0290911D03892F86958F5FE0 +:1050E0008F779170843028F4880F892B80931D036B +:1050F00002C090931D0380911D038E7F91E009F4FF +:1051000090E080911D0390FB80F980931D030E9425 +:10511000C42380911D0386950C94EC0220911D03FD +:10512000922F96958927982F990F822F8170892B1E +:1051300080931D038E7F91E009F490E080911D0320 +:1051400090FB80F980931D030E94C42380911D036E +:1051500086950C94EC0280911D0386950895505815 +:10516000BB27AA270ED0D1C1C2D130F0C7D120F0C1 +:1051700031F49F3F11F41EF4B7C10EF4E095E7FB44 +:105180009FC1E92FD3D180F3BA1762077307840751 +:10519000950718F071F49EF5EBC10EF4E0950B2E17 +:1051A000BA2FA02D0B01B90190010C01CA01A00179 +:1051B0001124FF27591B99F0593F50F4503E68F1D4 +:1051C0001A16F040A22F232F342F4427585FF3CF15 +:1051D000469537952795A795F0405395C9F77EF4E6 +:1051E0001F16BA0B620B730B840BBAF09150A1F02F +:1051F000FF0FBB1F661F771F881FC2F70EC0BA0FB5 +:10520000621F731F841F48F4879577956795B7953C +:10521000F7959E3F08F0B3CF9395880F08F0992734 +:10522000EE0F97958795089527D108F481E00895AA +:105230000CD06BC163D140F05AD130F021F45F3F04 +:1052400019F03EC1511195C14FC170D198F3992306 +:10525000C9F35523B1F3951B550BBB27AA2762173A +:105260007307840738F09F5F5F4F220F331F441F7F +:10527000AA1FA9F333D00E2E3AF0E0E830D09150B7 +:105280005040E695001CCAF729D0FE2F27D0660FA4 +:10529000771F881FBB1F261737074807AB07B0E8E3 +:1052A00009F0BB0B802DBF01FF2793585F4F2AF0F9 +:1052B0009E3F510568F004C15CC15F3FECF3983E2E +:1052C000DCF3869577956795B795F7959F5FC9F756 +:1052D000880F911D9695879597F90895E1E0660FDF +:1052E000771F881FBB1F621773078407BA0720F058 +:1052F000621B730B840BBA0BEE1F88F7E0950895C1 +:1053000004D06894B11135C1089518D188F09F5721 +:1053100090F0B92F9927B751A0F0D1F0660F771F01 +:10532000881F991F1AF0BA95C9F712C0B13081F0E1 +:105330001FD1B1E008951CC1672F782F8827B85F6F +:1053400039F0B93FCCF3869577956795B395D9F742 +:105350003EF490958095709561957F4F8F4F9F4F4C +:105360000895E89409C097FB3EF490958095709558 +:1053700061957F4F8F4F9F4F9923A9F0F92F96E9A1 +:10538000BB279395F695879577956795B795F11116 +:10539000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB3 +:1053A0008F4F9F4F16C0882311F096E911C07723C5 +:1053B00021F09EE8872F762F05C0662371F096E8CE +:1053C000862F70E060E02AF09A95660F771F881F9D +:1053D000DAF7880F9695879597F9089588D018F091 +:1053E00011F08CD038F480C0C4C0E92F9FD0B0F346 +:1053F0005523C9F3E7FB6217730784079507A8F1E4 +:1054000099F3E92FFF2788232AF03197660F771F3A +:10541000881FDAF7952F5527442332F091505040DA +:10542000220F331F441FD2F7BB27E91BF50B621B6A +:10543000730B840BB109C1F222F4620F731F841F36 +:10544000B11D31972AF0660F771F881FBB1FEFCF62 +:10545000915050405AF041F0882332F0660F771F88 +:10546000881F91505040C1F7939530C0869577952D +:1054700067959F5FD9F7F8CF990F0008550FAA0BD2 +:10548000E0E8FEEF16161706E807F907C0F0121657 +:105490001306E407F50798F0621B730B840B950B5A +:1054A00039F40A2661F0232B242B252B21F40895AF +:1054B0000A2609F4A140A6958FEF811D811D08954C +:1054C00097F99F6780E870E060E008959F3F31F0B2 +:1054D000915020F4879577956795B795880F911D22 +:1054E0009695879597F908959FEF80EC089500248D +:1054F0000A941616170618060906089500240A9439 +:1055000012161306140605060895092E0394000CBE +:1055100011F4882352F0BB0F40F4BF2B11F460FF4D +:1055200004C06F5F7F4F8F4F9F4F089557FD905876 +:10553000440F551F59F05F3F71F04795880F97FB57 +:10554000991F61F09F3F79F0879508951216130611 +:105550001406551FF2CF4695F1DF08C01616170640 +:105560001806991FF1CF8695710561050894089575 +:10557000E894BB2766277727CB0197F908957CDF4E +:1055800008F48FEF08950BD0C0CFB1DF28F0B6DF5D +:1055900018F0952309F094CFA7CF1124EACFC6DFE6 +:1055A000A0F3959FD1F3950F50E0551F629FF00136 +:1055B000729FBB27F00DB11D639FAA27F00DB11D8F +:1055C000AA1F649F6627B00DA11D661F829F222718 +:1055D000B00DA11D621F739FB00DA11D621F839F9F +:1055E000A00D611D221F749F3327A00D611D231F75 +:1055F000849F600D211D822F762F6A2F11249F57C3 +:1056000050408AF0E1F088234AF0EE0FFF1FBB1FE5 +:10561000661F771F881F91505040A9F79E3F510584 +:1056200070F04ECFA6CF5F3FECF3983EDCF386954B +:1056300077956795B795F795E7959F5FC1F7FE2B2F +:10564000880F911D9695879597F90895FA01EE0FA9 +:10565000FF1F30962105310599F16115710561F43F +:105660008038BFE39B0749F168949038810561F069 +:105670008038BFEF9B0741F0992342F5FF3FE105DA +:105680003105210511F1E8940894E795D901AA2381 +:1056900029F4AB2FBE2FF85FD0F310C0FF5F70F47A +:1056A000A695E0F7F73950F019F0FF3A38F49F77F4 +:1056B0009F930CD00F9007FC905808953EF014CFA4 +:1056C00060E070E080E89FE308954FE79F775F9385 +:1056D0004F933F932F939ED02F913F914F915F9186 +:1056E00052DF05C019F40EF0EBCE42CFFDCE26DF1F +:1056F000C8F39638C0F707F80F92E8942BE33AEA1C +:1057000048EB5FE74EDF0F920F920F924DB75EB7F7 +:105710000F92C0D0EAE0F1E016D04F915F91EF9187 +:10572000FF91E595EE1FFF1F49F0FE57E068442703 +:10573000EE0F441FFA95E1F74195550B32D00F90CB +:1057400007FE26C00895DF93CF931F930F93FF9218 +:10575000EF92DF927B018C01689405C0DA2EEF0195 +:105760001EDFFE01E894A591259135914591559153 +:10577000AEF3EF0106DDFE019701A801DA9479F797 +:10578000DF90EF90FF900F911F91CF91DF910895DF +:105790009B01AC0160E070E080E89FE349CD90CED2 +:1057A00095CECCDEE8F39923D9F3940F511DBBF3CA +:1057B0009150504094F059F0882332F0660F771FD3 +:1057C000881F91505040C1F79E3F510544F7880F04 +:1057D000911D9695879597F908955F3FACF0983E97 +:1057E0009CF0BB27869577956795B79508F4B160CF +:1057F0009395C1F7BB0F58F711F460FFE8CF6F5FC7 +:105800007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE65 +:10581000689456CE93DEC8F39923D1F3C6F3DF9391 +:10582000CF931F930F93FF92C92FDD2788232AF070 +:105830002197660F771F881FDAF720E030E040E8F5 +:105840005FEB9FE3883920F0803E30F021968F7720 +:1058500087DCE2E3F1E003C083DCEFE5F1E073DF36 +:105860008B01BE01EC01FB2E6F5771097595771FF7 +:10587000880B990B78DD28E132E741E35FE38FDEA7 +:10588000AF2D9801AE01FF900F911F91CF91DF9145 +:1058900078DC3BCEFA01DC01AA0FBB1F9B01AC01F7 +:1058A000BF5728F422273327442750781FC0B75109 +:1058B00088F4AB2F0024469537952795011CA395B6 +:1058C000D2F3002069F0220F331F441FB395DAF39F +:1058D0000DD045CC61307105A0E88A07B94630F497 +:1058E0009B01AC016627772788279078309621F0B6 +:1058F00020833183428353830895AA1BBB1B51E14C +:1059000007C0AA1FBB1FA617B70710F0A61BB70B2F +:10591000881F991F5A95A9F780959095BC01CD01D4 +:10592000089597FB072E16F4009407D077FD09D051 +:105930000E947D2C07FC05D03EF4909581959F4FE9 +:105940000895709561957F4F0895EE0FFF1F0590A4 +:10595000F491E02D0994F999FECF92BD81BDF89A9A +:10596000992780B50895A8E1B0E042E050E00C949A +:10597000D32C262FF999FECF92BD81BDF89A0197BD +:1059800000B4021639F01FBA20BD0FB6F894FA9A87 +:10599000F99A0FBE08950196272F0E94BA2C0C94F5 +:1059A000B92CDC01CB01FC01F999FECF06C0F2BD98 +:1059B000E1BDF89A319600B40D9241505040B8F7CD +:0659C0000895F894FFCFEA +:1059C600640007000CFF0000003F640E109C107975 +:1059D60010451011100101DF022808140A321E00BA +:1059E60002040507090B0C0E1011131517181A1CC3 +:1059F6001D1F2123242628292B2D2F3032343537FD +:105A0600393B1F0F03764F5F6F7F49694379095909 +:105A160053633149803F5D8B803FF8BF803FCAE1C9 +:105A2600803F73ED803FCAE1803FF8BF803F5D8BCA +:105A3600803F3149803F0000803FF16D7F3F75EA2E +:105A46007E3F4C827E3F833F7E3F84287E3F833F5E +:105A56007E3F4C827E3F75EA7E3FF16D7F3F0000C0 +:105A6600803F3F4D3639E304960460042704BA03A9 +:105A7600D303EC0305040102030405060708090025 +:00000001FF diff --git a/keyboard/planck/keymaps/brandon/compiled.hex b/keyboard/planck/keymaps/brandon/compiled.hex new file mode 100644 index 0000000000..2b6bb328df --- /dev/null +++ b/keyboard/planck/keymaps/brandon/compiled.hex @@ -0,0 +1,1456 @@ +:100000000C94C1020C9405030C9405030C94050395 +:100010000C9405030C9405030C9405030C94050340 +:100020000C9405030C9405030C94B2140C948415E1 +:100030000C94E6220C9405030C9405030C94050320 +:100040000C9405030C9467030C9405030C940503AE +:100050000C9405030C944E230C9405030C94050397 +:100060000C9405030C9405030C9405030C940503F0 +:100070000C9405030C9405030C9405030C940503E0 +:100080000C94270B0C9405030C9405030C940503A6 +:100090000C9405030C9405030C9405030C940503C0 +:1000A0000C9405030C9405030C940503F115131629 +:1000B00001171316011758167B160117D016E316F1 +:1000C000CD19CD19FC19FC193B1A5B1AB11BB11BD8 +:1000D000661AB11B161B161B7D1B861BB11BAB1BA7 +:1000E000231B231B231B231B231B231B231B231B20 +:1000F000231B231B231B231B231B231B231B231B10 +:10010000331B411B481B4F1B591B07634236B79BD0 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C00002010000000000000000000029001400EF +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A002B0004001600070009000A0073 +:1001F0000B000D000E000F0033003400E1001D0065 +:100200001B00060019000500110010003600370021 +:1002100038002872E000E200E300025403522C0090 +:100220002C0004525000510052004F0029001400CD +:100230001A00090013000A000D000F0018001C002E +:1002400033002A002B0004001500160017000700D9 +:100250000B00110008000C0012003400E1001D002A +:100260001B000600190005000E00100036003700C4 +:1002700038002872E000E200E300025403522C0030 +:100280002C0004525000510052004F000100420067 +:100290004300440045004B002202380024002500A2 +:1002A00026002A0001003E003F00400041004E00B1 +:1002B0004A002502210022002300310201003A00F9 +:1002C0003B003C003D004C004D0027001E001F007D +:1002D00020000100010001000100010001000100F7 +:1002E000010001005000510052004F0035021E0273 +:1002F0001F022002210222022302240225022602DA +:1003000027022A0001003A003B003C003D003E006D +:100310003F002D022E022F02300231020100400068 +:1003200041004200430044004500005301530030A7 +:100330000050010001000100010001000100010066 +:1003400001000100AB00AA00A900AE0035001E00AC +:100350001F00200021002200230024002500260089 +:1003600027002A0001003A003B003C003D003E000F +:100370003F002D002E002F00300031000100400012 +:100380004100420043004400450000530153003047 +:100390000050010001000100010001000100010006 +:1003A00001000100AB00AA00A900AE002803540020 +:1003B00068006500200050006C0061006E00630062 +:1003C0006B0020004B006500790062006F00610047 +:1003D0007200640000002C034F007200740068007B +:1003E0006F006C0069006E00650061007200200003 +:1003F0004B006500790062006F00610072006400CC +:10040000730000000403090409026D00040100A048 +:10041000FA09040000010301010009211101000192 +:10042000223F000705810308000A090401000103B7 +:10043000010200092111010001224D00070582037C +:1004400008000A090402000103000000092111014B +:1004500000012236000705830308000A090403008F +:1004600001030000000921110100012239000705E4 +:1004700084031000011201100100000008EDFE606D +:100480006001000102000105010906A1010507192B +:10049000E029E71500250195087501810205081975 +:1004A00001290595057501910295017503910105D5 +:1004B000071900297715002501957875018102C07B +:1004C00005010980A101850216010026B7001A0165 +:1004D000002AB700751095018100C0050C0901A123 +:1004E000018503160100269C021A01002A9C027550 +:1004F0001095018100C005010902A1010901A100B7 +:1005000005091901290515002501950575018102C7 +:100510009501750381010501093009311581257F98 +:1005200095027508810609381581257F95017508A2 +:100530008106050C0A38021581257F950175088111 +:1005400006C0C005010906A101050719E029E71544 +:100550000025019508750181029501750881010545 +:1005600008190129059505750191029501750391F9 +:10057000010507190029FF150025FF95067508815B +:1005800000C011241FBECFEFDAE0DEBFCDBF04B63E +:1005900003FE24C080911E0390911F03A0912003AD +:1005A000B09121038730904BA740B04BB9F4109223 +:1005B0001E0310921F03109220031092210314BEF9 +:1005C00084B7877F84BF88E10FB6F894809360007A +:1005D000109260000FBEE0E0F8E3099511E0A0E0A2 +:1005E000B1E0E6E2FAE502C005900D92A03CB10749 +:1005F000D9F713E0A0ECB1E001C01D92AE31B10714 +:10060000E1F70E94F8110C94112D0C94000008954C +:10061000089581E0089508950C9408030C9409034B +:100620000C940B030E94DB2823E030E0281B3109E7 +:10063000220F2093C4010895282F2F9880918000C5 +:10064000211108C0877F8093800010928D00109246 +:100650008C001BC0886080938000233019F48FEFDA +:100660009FEF0FC083E090E0821B9109880F991FD4 +:100670002FEF3FEFA90102C0569547958A95E2F703 +:10068000CA0190938D0080938C000C9412030E94F9 +:10069000120384E08093C3011092C0010895279A49 +:1006A0002F988FEF9FEF90938700809386008AE0CA +:1006B0008093800089E1809381000E9444280C94FB +:1006C00047030E944F036E9A769A0C9407031F9279 +:1006D0000F920FB60F9211242F933F938F939F93F6 +:1006E000EF93FF93E091C101F091C201CF01019618 +:1006F0009093C2018093C1010090C30102C0F6959E +:10070000E7950A94E2F7EF738091C001823019F403 +:10071000E03251F404C0813039F4EF3329F4809190 +:100720006F008D7F80936F00F0E0E457FE4FE491FF +:1007300021E031E0E29FC001E39F900D1124009081 +:10074000C40102C0969587950A94E2F790938D00B4 +:1007500080938C00FF91EF919F918F913F912F910A +:100760000F900FBE0F901F90189561110DC0FC01E6 +:100770008281882331F085EE0E9471180E949B28A7 +:1007800003C085EE0E94391980E090E0089581E071 +:1007900008950C94C70308950C9461038091150289 +:1007A000882309F448C08091D1019091D20100972B +:1007B00079F40E9418239093D2018093D101809103 +:1007C000D30190E0009771F48091D40190E00AC0C9 +:1007D0000E9424232091000130910101281739073C +:1007E00040F329C00197880F991F880F991FFC01BA +:1007F000EB52FE4F60817181828193810E948D0A4C +:10080000E091D30184E0E89FF0011124EB52FE4F08 +:1008100060817181828193814FE050E00E94450E9A +:100820008091D30190E001966091D40170E00E9424 +:10083000C12C8093D3010C940C03109217020C94DA +:100840005A0A0895089581E0809317020C942204B7 +:10085000089508958F929F92AF92BF92EF92FF9268 +:100860000F931F93CF93DF93CDB7DEB7A3970FB648 +:10087000F894DEBF0FBECDBF7C01FC010081118169 +:10088000C8010E941521B8010E942C068C01B701F5 +:100890000E94C903882309F4CCC10032F0E51F0788 +:1008A00041F4F7018281882309F458C00E94A90EFF +:1008B000C0C10132F0E51F0741F4F70182818823AE +:1008C00009F44CC00E94B20EB4C10232F0E51F0719 +:1008D00051F4F7018281882309F440C00E94A50EDB +:1008E0008111F0CFE3CF0332F0E51F0739F4F701B0 +:1008F0008281882399F10E9423049BC10432F0E590 +:100900001F0739F4F7018281882341F10E941D04F9 +:1009100090C10532F0E51F0749F4F7018281882371 +:10092000E9F0809117028111F1CFE5CF0632F0E5B1 +:100930001F0739F4F7018281882381F00E94B90EE4 +:100940000AC00732F0E51F0749F4F70182818823C6 +:1009500029F00E94C40E0E9429046BC180911702E5 +:10096000811105C0F70182818111CFC018C1003EFD +:10097000110579F4F7018281882309F44DC00E94A2 +:100980005A0A81E080931602109215021092D40147 +:1009900050C1023E110559F4F70182818823E1F12B +:1009A0000E945A0A109216021092150242C1033E8A +:1009B000110591F4F7018281882371F10E945A0A8E +:1009C0001092160281E0809315021092D3011092CA +:1009D000D2011092D1012DC10235110559F4F70150 +:1009E0008281882309F425C1809100019091010141 +:1009F0000A970DC00135110579F4F701828188232A +:100A000009F417C180910001909101010A96909319 +:100A10000101809300010DC14091040183E2EFE1E7 +:100A2000F1E0DE01119601900D928A95E1F7F70150 +:100A3000808121E030E02C0F3D1F280F311DC901BE +:100A40002091020130910301FC01E20FF31F60814C +:100A5000772767FD7095640F711D882777FD809556 +:100A6000982F0E94E32920E030E040E451E40E9406 +:100A700048294B015C01F701218184E090E0821B51 +:100A80009109BC01882777FD8095982F0E94E32962 +:100A90009B01AC01C501B4010E94E0289B01AC019F +:100AA00060E070E080E090E40E94562B20E030E0AF +:100AB0004CED50E40E94F32A4B015C01F701828166 +:100AC0008823D1F04FE050E0C501B4010E94450EEB +:100AD000809116028823A1F08091D40124E0829FA6 +:100AE000F0011124EB52FE4F80829182A282B382E8 +:100AF0008F5F8093D40104C0C501B4010E948D0AA8 +:100B00000F3F110508F02ECF94C08091D0018111C4 +:100B10001FC0043130E5130709F051C00E94CB0318 +:100B200081E08093D0010E9418239093CF0180939D +:100B3000CE011092C7011092C9011092C801109203 +:100B4000CB011092CA011092CD011092CC0171C05C +:100B50008091CE019091CF010E942423883C910581 +:100B600070F48091C701E82FF0E0EE0FFF1FE8530B +:100B7000FE4F118300838F5F8093C7015AC00438F2 +:100B800080E5180721F00538104501F13AC0F7015A +:100B90008281882341F01092C50182E01EC0043892 +:100BA00030E5130759F58091C501811106C086E231 +:100BB0000E94711886E20E94391982E01CC0043834 +:100BC000F0E51F0741F305381045D9F4F70182819C +:100BD000882331F01092C60180E20E94881929C052 +:100BE0008091C601811106C087E20E94711887E2D8 +:100BF0000E94391980E20E948F191BC005381045E8 +:100C000029F381E08093C5018093C601C701A396B3 +:100C10000FB6F894DEBF0FBECDBFDF91CF911F910D +:100C20000F91FF90EF90BF90AF909F908F900C949A +:100C30000E0380E0A3960FB6F894DEBF0FBECDBFC3 +:100C4000DF91CF911F910F91FF90EF90BF90AF90E8 +:100C50009F908F90089508959CE0799FF001112452 +:100C600090E3899FE00DF11D1124E60FF11DEE0FB9 +:100C7000FF1FE453FE4F859194910895880F991FAB +:100C8000FC01E45BFF4F859194910895880F991FB3 +:100C9000FC01E453FE4F8591949108950F931F93A7 +:100CA000CF93DF93EC01811521E39207A0F5C115E5 +:100CB00080E3D80708F0D7C0C83ED105D8F4C03EBD +:100CC000D10508F007C2C83AD10578F4C53AD10574 +:100CD00008F06AC0C130D10509F463C008F4F7C157 +:100CE000C430D10508F0F6C1F2C1CB3BD10508F400 +:100CF00066C0EDC1C11590E2D90708F0AFC0C115BB +:100D000021E0D20708F0E6C1C03FD10508F4DFC1F9 +:100D10008E0110651FC2C03880E5D80700F5C037C6 +:100D200090E5D90708F0A3C0C11520E5D20709F462 +:100D3000ACC050F4CE01905480319F4008F0C7C140 +:100D4000DF708E01106A06C2C13080E5D80709F451 +:100D5000AEC0C43190E5D90708F4AFC0B8C1C338FC +:100D600020E5D20709F48EC050F4C13890E5D907C8 +:100D700009F482C008F083C000E011EDEBC1C0317E +:100D800081E5D80708F4A3C1C11597E5D90708F490 +:100D900036C1CE0190578115904108F098C1DF709F +:100DA00093C101E010E0D6C1C53AD10509F494C160 +:100DB000C63AD10509F093C102E810E4CBC1C83AA4 +:100DC000D10509F48FC1C93AD10509F48EC1CA3AD7 +:100DD000D10509F48DC1CB3AD10509F48CC1CC3AC7 +:100DE000D10509F48BC1CD3AD10509F48AC1C03BC4 +:100DF000D10509F489C1CE3AD10509F488C1CF3AA9 +:100E0000D10509F487C1C13BD10509F486C1C23BB4 +:100E1000D10509F485C1C33BD10509F484C1C43BA4 +:100E2000D10509F483C1C53BD10509F482C1C63B94 +:100E3000D10509F481C1C73BD10509F480C1C83B84 +:100E4000D10509F47FC1C93BD10509F47EC1CA3B74 +:100E5000D10509F47DC100E014E47CC1CE019F708E +:100E60000E94460678C1DD278E01106C73C1CF70D9 +:100E7000DD278E01146D6EC100E010ED6BC100E046 +:100E800012ED68C100E013ED65C10E941C1C0E94B8 +:100E90005A0A0E9421048FEF94E32CE08150904085 +:100EA0002040E1F700C000000E94732353C18091ED +:100EB000F20281608093F2024DC10E94D42381111D +:100EC00002C00E94B0230E94E72390E090931D038C +:100ED00080931C03C23080E5D80721F480911C0365 +:100EE000816086C0C43090E5D90721F480911C034D +:100EF00082607EC0C63020E5D20721F480911C03B9 +:100F0000846076C0C83080E5D80719F480911C034E +:100F100027C0CA3090E5D90721F480911C03806175 +:100F200067C0CC3020E5D20721F480911C03806299 +:100F30005FC0CE3080E5D80721F480911C03806427 +:100F400057C0C03190E5D90721F480911C03806817 +:100F50004FC0C23120E5D20729F480911C03846080 +:100F6000886046C0C33080E5D80721F480911C0317 +:100F70008E7F3EC0C53090E5D90721F480911C03D7 +:100F80008D7F36C0C73020E5D20721F480911C0345 +:100F90008B7F2EC0C93080E5D80719F480911C03DF +:100FA00026C0CB3090E5D90721F480911C038F7EB9 +:100FB0001FC0CD3020E5D20721F480911C038F7D26 +:100FC00017C0CF3080E5D80721F480911C038F7BB8 +:100FD0000FC0C13190E5D90721F480911C038F77B0 +:100FE00007C0C331D04531F480911C038B7F877FCC +:100FF00080931C0380911C030E94EB23ABC08D2FB8 +:1010000099278F70992781309105D9F49E0123701B +:10101000332702C0880F991F2A95E2F79C688E013A +:1010200044E0000F111F4A95E1F700271370802B51 +:10103000912B53E0CC0FDD1F5A95E1F7C076DD27E9 +:101040002FC08230910531F4DC2FCC278E01016F47 +:10105000106A80C08330910569F4CE0183709927AE +:1010600001E010E002C0000F111F8A95E2F7C801ED +:101070009C680FC084309105B9F4CE018370992724 +:1010800001E010E002C0000F111F8A95E2F7C801CD +:101090009A6823E0CC0FDD1F2A95E1F7C07ED77058 +:1010A0008C010C2B1D2B56C08530910531F4DC2FA3 +:1010B000CC278E01046F106A4DC0069709F04AC014 +:1010C000CF71DD27DC2FCC278E01106243C000E0FA +:1010D00010E040C08E013EC001E810E43BC003E8D0 +:1010E00010E438C002EE14E435C009EE14E432C056 +:1010F0000AEE14E42FC005EB14E42CC006EB14E454 +:1011000029C007EB14E426C00CEC14E423C00DEC5A +:1011100014E420C003E815E41DC00AE815E41AC071 +:1011200002E915E417C004E915E414C001E216E46D +:1011300011C003E216E40EC004E216E40BC005E29F +:1011400016E408C006E216E405C007E216E402C091 +:101150000AE216E4C801DF91CF911F910F91089523 +:101160009CE0799FF001112490E3899FE00DF11D2F +:101170001124E60FF11DEE0FFF1FE453FE4F859182 +:101180009491803E9105E0F4803C910558F58133BF +:10119000910509F46FC048F48932910509F463C0E0 +:1011A0008A32910509F46DC072C089339105E9F066 +:1011B00082389105D1F08533910509F44DC067C09F +:1011C000833E910581F138F4803E9105B9F0823E6D +:1011D0009105D9F05CC0863E910561F1873E91058D +:1011E000A1F155C00E943E06089520911C0320FDE8 +:1011F00002C021FF4CC080EE90E049C080911C03EA +:1012000080FFF9CF89E390E042C080911C0382FF08 +:101210000EC080911C0384FF03C080E090E037C0C3 +:1012200083EE90E034C080911C0382FFF2CF82EE07 +:1012300090E02DC080911C0383FF0BC080911C03A4 +:1012400084FDEBCF87EE90E022C080911C0383FFEA +:10125000F5CF86EE90E01BC080911C0385FF07C090 +:1012600089E290E014C080911C0385FFF9CF85E3EB +:1012700090E00DC080911C0386FF07C08AE290E0D9 +:1012800006C080911C0386FFF9CF81E390E00E94A5 +:101290004E0608950C941003E82FF0E0E25BFE4F39 +:1012A0008081E82FEF70F0E082958F7021E030E0D0 +:1012B000A90102C0440F551F8A95E2F740A3089583 +:1012C0000F931F93CF93DF9385B7806885BF85B752 +:1012D000806885BFC3E0D0E001E010E0FE01E25B82 +:1012E000FE4F8081E82FEF70F0E021A182958F7092 +:1012F000A80102C0440F551F8A95E2F7CA01822B4C +:1013000081A38C2F0E944C09219740F78BE090E03D +:1013100061E070E0FC01EE5BFE4F2081E22FEF7098 +:10132000F0E042A122952F70DB0102C0AA0FBB1F83 +:101330002A95E2F79D01242B22A3019758F7DF910C +:10134000CF911F910F910C94CC03EF92FF920F93CA +:101350001F93CF93DF9300E212E0C3E0EE24E39407 +:10136000F12CD5E08C2F0E944C098BE090E040E0FE +:1013700050E0FC01EE5BFE4F6081E62FEF70F0E085 +:1013800020A130E062956F7002C0359527956A956F +:10139000E2F720FD09C09701082E02C0220F331F7B +:1013A0000A94E2F7422B532B019718F7F801929118 +:1013B00082918F018417950721F051834083D09348 +:1013C00005018C2F0E944C09C15060F680910501E7 +:1013D00087FD2CC08150809305018F3F39F08FE944 +:1013E0009FE00197F1F700C0000020C080911E022D +:1013F00090911F02909327028093260280911C02F5 +:1014000090911D02909325028093240280911A02EC +:1014100090911B02909323028093220280911802E4 +:101420009091190290932102809320020E94CE0392 +:1014300081E0DF91CF911F910F91FF90EF90089580 +:10144000E82FF0E0EE0FFF1FE05EFD4F80819181FD +:10145000089508950F931F93CF9308E212E0C0E020 +:10146000F801929182918F010E949022C80FF2E0C0 +:1014700000321F07A9F78C2FCF911F910F9108956C +:101480000E94D423811102C00E94B0230E94F9233C +:10149000809307033E9A809171008D7F8093710045 +:1014A00082E0809390008AE18093910081E08093B4 +:1014B0002A02089580912A02811102C00E94400AE6 +:1014C00010927A0210927902809171008D7F809340 +:1014D0007100809190008F738093900010923C0275 +:1014E00010923B02109273021092740210927502D5 +:1014F000109276021092720210927102E1E5F2E00F +:10150000A1E4B2E011921192119211921D921D92DA +:1015100082E0E137F807B1F70895CF92DF92EF92BA +:10152000FF920F931F93CF93DF9320913B022223CF +:1015300009F484C06B017C0180912A02811102C0F0 +:101540000E94400A01E712E0C7E0D0E0A70196013F +:10155000F80192918291729162918F010E944429C7 +:10156000811131C0FE01EE0FFF1FEE0FFF1FEF5A7A +:10157000FD4F1082118212821382DE01AA0FBB1F5F +:10158000AF5BBD4F11961C921E92C730D105E9F09A +:10159000219644815581668177814083518362839E +:1015A0007383148215821682178212968D919C91F4 +:1015B000139711969C938E9313961C921E921297DA +:1015C00034961296E2CF219708F680917902909195 +:1015D0007A02019797FD05C090937A028093790271 +:1015E00004C010927A02109279028091790290914F +:1015F0007A0220917702309178022817390724F077 +:101600001092780210927702892BC1F480917100B8 +:101610008D7F80937100809190008F7380939000F4 +:101620001092730210927402109275021092760258 +:10163000109272021092710210923B02DF91CF91D0 +:101640001F910F91FF90EF90DF90CF9008951F9220 +:101650000F920FB60F9211244F925F926F927F926A +:101660008F929F92AF92BF92CF92DF92EF92FF92B2 +:101670002F933F934F935F936F937F938F939F939A +:10168000AF93BF93CF93DF93EF93FF9380913B0290 +:10169000882309F49BC1C0917902D0917A021C166B +:1016A0001D060CF093C140902B0250902C026090CC +:1016B0002D0270902E0220E030E0A901C301B2019A +:1016C0000E94EF2A18160CF065C0C130D10509F44C +:1016D00052C08091770290917802BE010E94C12C85 +:1016E0007C01909378028093770280903D029090E5 +:1016F0003E02A0903F02B090400220E030E040E87F +:101700005FE3C501B4010E94E02860933D0270933D +:101710003E0280933F0290934002F701EE0FFF1FBD +:10172000EE0FFF1FEF5AFD4FA301920160817181FF +:10173000828193810E94482920E030E040E05EE30E +:101740000E94F32A9B01AC01C501B4010E94EF2A5B +:1017500018168CF4C7010196BE010E94C12C90930B +:1017600078028093770210923D0210923E0210920E +:101770003F0210924002E0917702F0917802EE0F62 +:10178000FF1FEE0FFF1FEF5AFD4F608171818281B5 +:101790009381D0C0C0907302D0907402E090750223 +:1017A000F090760220E030E0A901C701B6010E9466 +:1017B00044292197882309F4A2C0FE01EE0FFF1FE0 +:1017C000EE0FFF1FEF5AFD4F80809180A280B38003 +:1017D000A5019401C701B6010E94442987FF31C0C9 +:1017E000A501940160E070E08CED93EC0E94482923 +:1017F00020E030E040E451E40E94482920E030E05D +:1018000040E05FE30E94F32A9B01AC0160E070E0DE +:1018100080E090E40E94562B9B01AC01C501B4010D +:101820000E94F32A9B01AC01C701B6010E94442922 +:1018300087FF07C0A701960160E070E08CED93E49C +:1018400039C0A5019401C701B6010E94EF2A1816FC +:101850000CF055C0A501940160E070E08CED93E4BC +:101860000E94482920E030E040E451E40E944829E9 +:1018700020E030E040E05FE30E94F32A9B01AC01EE +:1018800060E070E080E090E40E94562B9B01AC0188 +:10189000C501B4010E94F32A9B01AC01C701B60146 +:1018A0000E94EF2A18165CF5A701960160E070E02F +:1018B0008CED93EC0E94482920E030E040E451E4B4 +:1018C0000E94482920E030E040E05FE30E94F32AD4 +:1018D0009B01AC0160E070E080E090E40E94562B38 +:1018E0009B01AC01C701B6010E94F32A6093730209 +:1018F00070937402809375029093760213C0FE0178 +:10190000EE0FFF1FEE0FFF1FEF5AFD4F80819181F9 +:10191000A281B3818093730290937402A0937502A5 +:10192000B093760260917302709174028091750297 +:101930009091760220912802309129022F3F4FEF9B +:10194000340731F02F5F3F4F309329022093280254 +:101950000E94CF0E6B017C0120E034E244EF51E4A1 +:101960000E94442987FF08C086EFC82E88E2D82E3F +:1019700084EFE82E81E4F82E20E030E040E051E4EE +:10198000C701B6010E94F32A9B01AC0160E074E23A +:1019900084E79BE40E9448296B017C010E94B529E1 +:1019A0007093970060939600209106013091070193 +:1019B0004091080150910901C701B6010E94F32A24 +:1019C0000E94B529709399006093980080913C0221 +:1019D000882309F433C1C0903702D0903802E090D8 +:1019E0003902F0903A0220E030E0A901C701B601C7 +:1019F0000E94EF2A1816D4F58091280290912902AE +:101A00008F3F2FEF920729F0019690932902809340 +:101A10002802C701B6010E94CF0E20E030E040E06E +:101A200051E40E94F32A9B01AC0160E074E284E778 +:101A30009BE40E9448296B017C010E94B5297093A8 +:101A40009700609396002091060130910701409124 +:101A5000080150910901C701B6010E94F32A0E94B2 +:101A6000B529709399006093980008C01092970070 +:101A70001092960010929900109298006091310295 +:101A8000709132026F5F7F4F709332026093310228 +:101A9000209196003091970080E090E0232BF1F0A8 +:101AA000C0919600D09197000E94E1296B017C01C2 +:101AB000BE0180E090E00E94E1299B01AC016091B1 +:101AC00033027091340280913502909136020E9467 +:101AD000482920E03FEF4FE757E410C00E94E1297A +:101AE0006B017C0120E030EE4FEF54E46091330253 +:101AF0007091340280913502909136020E94F32A4F +:101B00009B01AC01C701B6010E94EF2A87FD96C078 +:101B100080912F028F5F80932F0290E0209103032A +:101B20003091040382179307A0F080910E0388235D +:101B300019F010922F020DC0809171008D7F80935B +:101B40007100809190008F738093900010923C02FE +:101B50007DC080913002C0912F02811128C0C090B9 +:101B60000803D0900903E0900A03F0900B0320E0F3 +:101B700030E0A901C701B6010E94EF2A1816BCF493 +:101B800081E0809330021092370210923802109256 +:101B9000390210923A02C0923302D0923402E0929B +:101BA0003502F0923602C150C0932F0243C010920A +:101BB00030021092290210922802E0910503F09160 +:101BC000060348E0C49FE00DF11D1124808191813E +:101BD000A281B3818093370290933802A093390297 +:101BE000B0933A0220E030E040E85EE36481758122 +:101BF000868197810E94F32A6B017C0180910A0102 +:101C0000682F70E080E090E00E94E12920E030E061 +:101C100048EC52E40E9448299B01AC01C701B6017F +:101C20000E94F32A6093330270933402809335024A +:101C30009093360210923202109231028091070383 +:101C400080FD04C010923C0210923B02FF91EF9184 +:101C5000DF91CF91BF91AF919F918F917F916F91C4 +:101C60005F914F913F912F91FF90EF90DF90CF9038 +:101C7000BF90AF909F908F907F906F905F904F90AC +:101C80000F900FBE0F901F901895CF92DF92EF929A +:101C9000FF92CF93DF936B017C01EA0180912A02CE +:101CA000811102C00E94400A8091070380FF46C054 +:101CB0008091790290917A0208970CF03FC0809150 +:101CC00071008D7F8093710080913C0281110E9490 +:101CD0005A0A81E080933B02109229021092280256 +:101CE00020E030E0A901C701B6010E94EF2A1816D2 +:101CF000DCF48091790290917A02FC01EE0FFF1FD3 +:101D0000EE0FFF1FEF5AFD4FC082D182E282F382B5 +:101D1000FC01EE0FFF1FEF5BFD4FD183C0830196E7 +:101D200090937A028093790280917100826080930F +:101D3000710080919000806880939000DF91CF9136 +:101D4000FF90EF90DF90CF9008958091070381700E +:101D50000895809107038160809307030E94FD230B +:101D60000C942804809107038E7F809307030C94C2 +:101D7000FD2380917B0290E0019666E070E00E9476 +:101D8000C12C80937B02089580917B0290E00197A3 +:101D900066E070E00E94C12C80937B0208958F92D0 +:101DA0009F92AF92BF92CF92DF92EF92FF920F93EA +:101DB0001F93CF93DF936B017C01C0912802D091D8 +:101DC0002902BE0180E090E00E94E1294B015C0104 +:101DD000A701960160E070E08CE594E40E94482938 +:101DE0009B01AC01C501B4010E94F32A0E94B529F0 +:101DF00020917B02233009F473C028F4222351F090 +:101E00002130E9F02CC1243009F4A0C0253009F4B8 +:101E1000E0C025C180E090E0A0E0BFE38093060130 +:101E200090930701A0930801B093090110922B022F +:101E300010922C0210922D0210922E0210C11092BC +:101E40002B0210922C0210922D0210922E0264315D +:101E5000710540F46A30710560F520E030E040E83B +:101E60005EE32BC0693C710508F0AAC080E090E0F9 +:101E70000E94E12920E030E040EA51E40E94DF289E +:101E800020E030E044E353E40E9448299B01AC0188 +:101E90000E94F32A20E030E040E05EE30E94F32A53 +:101EA0009B01AC0160E070E080E09EE30E94DF28CF +:101EB00044C020E030E040E05FE3C701B6010E948B +:101EC000F32A6B017C0180E090E0A0E0BEE3809308 +:101ED000060190930701A0930801B0930901BFC0C8 +:101EE00010922B0210922C0210922D0210922E02B0 +:101EF0004AE0469F9001479F300D1124C90168EBCD +:101F00007BE00E94AD2CBC016C5D754077FF03C087 +:101F1000719561957109882777FD8095982F0E94AA +:101F2000E3292EE333EC4EE259E30E94F32A20E04A +:101F300030E040EC5EE30E94E0286093060170937D +:101F40000701809308019093090189C010922B0228 +:101F500010922C0210922D0210922E02CE0183704C +:101F60009927892BE1F0BE016170772780E090E02E +:101F70000E94E12920E030E040E05EE30E94F32A85 +:101F800020E030E040E45FE30E94E0286093060137 +:101F90007093070180930801909309010CC080E0C1 +:101FA00090E0A0E0BFE38093060190930701A09327 +:101FB0000801B0930901C770DD27CD2B09F04FC090 +:101FC0001092060110920701109208011092090167 +:101FD00046C010922B0210922C0210922D021092E9 +:101FE0002E0200E010E020E03FE300930601109392 +:101FF000070120930801309309016739710578F1D1 +:1020000080E090E00E94E12920E030E047E153E4E5 +:102010000E94DF2820E030E04AE754E40E9448298B +:1020200020E030E048E452E40E94F32A20E030E06F +:1020300040EA51E40E94252A0E94B029660F771FCA +:10204000660F771FFB01EE5AFE4F208131814281DE +:102050005381C701B6010E94F32A6B017C01C701BD +:10206000B601DF91CF911F910F91FF90EF90DF901C +:10207000CF90BF90AF909F908F90089580918C02E9 +:102080000895CF93DF9300D01F92CDB7DEB79C01A8 +:1020900080911303843019F593E099833B832A835D +:1020A0009093E9008FEF9091E800815095FD06C074 +:1020B00095ED9A95F1F700008111F5CF8091E80038 +:1020C00085FF0DC040E050E063E070E0CE01019676 +:1020D0000E94A2128091E8008E778093E8000F9012 +:1020E0000F900F90DF91CF910895CF93DF9300D0A1 +:1020F0001F92CDB7DEB720911303243021F522E0E3 +:1021000029839B838A8383E08093E9008FEF9091FA +:10211000E800815095FD06C095ED9A95F1F7000015 +:102120008111F5CF8091E80085FF0DC040E050E0BF +:1021300063E070E0CE0101960E94A2128091E80057 +:102140008E778093E8000F900F900F90DF91CF91E2 +:102150000895209113032430F1F422E02093E90044 +:102160002FEF3091E800215035FD06C035ED3A954E +:10217000F1F700002111F5CF2091E80025FF0BC0F9 +:1021800040E050E065E070E00E94A2128091E8001B +:102190008E778093E8000895CF93DF93EC019091C0 +:1021A0001303943009F046C0809115018823D9F0BB +:1021B000809116018823B9F09093E9008FEF9091F8 +:1021C000E800815095FD06C095E19A95F1F7000071 +:1021D0008111F5CF8091E80085FF2CC040E050E0F0 +:1021E00060E170E017C081E08093E9008FEF90918B +:1021F000E800815095FD06C095ED9A95F1F7000035 +:102200008111F5CF8091E80085FF14C040E050E0D7 +:1022100068E070E0CE010E94A2128091E8008E7703 +:102220008093E80080E1FE01ACE7B2E001900D92FE +:102230008A95E1F7DF91CF91089580911203811182 +:1022400009C00E9437140E9494148091E2008460B7 +:102250008093E2000895109212030895089508955E +:102260000C94DB2242E061EC81E00E94B11342E079 +:1022700061EC82E00E94B11342E061EC83E00E94D5 +:10228000B11342E161EC84E00C94B1138091150329 +:10229000833009F455C030F4813071F0823009F494 +:1022A0008EC008958A3009F47AC08B3009F460C07A +:1022B000893009F09CC020C080911403813A09F054 +:1022C00096C08091E800877F8093E8008091180392 +:1022D00090911903892B21F460E18CE792E003C00F +:1022E00060E080E090E070E00E94ED128091E800F4 +:1022F0008B778093E800089580911403813209F070 +:1023000076C08091180390911903009719F00397F4 +:1023100009F06DC08091E800877F8093E80080918C +:10232000E80082FD05C0809113038111F8CF5FC0E2 +:102330008091F10080938C028091E8008B7753C0EC +:1023400080911403813A09F052C080911803909152 +:102350001903892B09F04BC08091E800877F809397 +:10236000E8008091E80080FFFCCF8091150136C025 +:10237000809114038132D9F580911803909119034B +:10238000892BA9F58091E800877F8093E8000E945F +:10239000E61380911603809315010C941C1C809108 +:1023A0001403813221F58091E800877F8093E80053 +:1023B0000E94E6138091170380938D020895809107 +:1023C0001403813AA1F48091E800877F8093E800AC +:1023D0008091E80080FFFCCF80918D028093F10016 +:1023E0008091E8008E778093E8000C94E6130895BE +:1023F00084B7877F84BF88E10FB6F894809360002C +:10240000109260000FBE90E080E80FB6F8948093C1 +:102410006100909361000FBE0E9489170E943714DB +:102420000E9494148091E20084608093E20078948A +:102430000E941A170E948B178BE091E00E943517BB +:1024400080911303853069F40E949C2280911103CE +:102450008823B1F30E94CA22882391F30E948C1230 +:10246000EFCF0E949317ECCF292F3327233031056C +:10247000C9F064F42130310581F02230310509F0D2 +:1024800043C08DE690E028E034E042C021323105BF +:10249000F1F02232310541F137C082E190E025E7C9 +:1024A00034E036C099278130910541F082309105A2 +:1024B00041F0892B49F5E4E0F4E005C0E6EDF3E0F6 +:1024C00002C0ECEAF3E0849190E09F0121C0643007 +:1024D000D8F4E62FF0E0EE0FFF1FE255FE4F20810B +:1024E000318189E090E014C0643070F470E0FB0149 +:1024F000EE0FFF1FEA55FE4F20813181FB01EE55A3 +:10250000FE4F808190E004C080E090E020E030E069 +:10251000FA0131832083089580E189BD82E189BD7C +:1025200009B400FEFDCF8091D8008F7D8093D80044 +:102530008091E00082608093E0008091E00081FD66 +:10254000FCCF0895CF92DF92EF92FF920F931F93EB +:10255000CF93DF93EC018B016A010E940514811176 +:1025600033C0C114D10439F0F60180819181081B78 +:10257000190BC80FD91FE12CF12C0115110519F108 +:102580008091E80085FD16C08091E8008E778093E9 +:10259000E800C114D10449F0F60180819181E80E70 +:1025A000F91EF182E08285E00FC00E9405148823A5 +:1025B00021F30AC089918093F10001501109FFEFC6 +:1025C000EF1AFF0ADACF80E0DF91CF911F910F91D0 +:1025D000FF90EF90DF90CF90089520911A033091F3 +:1025E0001B032617370748F06115710539F4209150 +:1025F000E8002E772093E80001C0B90140E06115A2 +:102600007105A9F120911303222309F443C0253059 +:1026100009F442C02091E80023FD40C02091E80069 +:1026200022FD32C02091E80020FFE9CF4091F30065 +:102630002091F20030E0342BFC01CF0161157105CF +:1026400059F02830310540F481918093F1006150B8 +:1026500071092F5F3F4FF1CF41E02830310509F07C +:1026600040E02091E8002E772093E800C8CF411188 +:10267000C9CF0AC080911303882361F0853061F0CF +:102680008091E80083FD0AC08091E80082FFF2CFCC +:1026900080E0089582E0089583E0089581E0089540 +:1026A00020911A0330911B032617370748F0611554 +:1026B000710539F42091E8002E772093E80001C0DD +:1026C000B901FC0120E06115710591F180911303BE +:1026D000882309F440C0853009F43FC08091E800A8 +:1026E00083FD3DC08091E80082FD2FC08091E8000D +:1026F00080FFE9CF2091F3008091F20090E0922BCF +:102700006115710559F08830910540F424912093AA +:10271000F1003196615071090196F2CF21E00897DE +:1027200009F020E08091E8008E778093E800CBCF1D +:102730002111CCCF0AC080911303882361F085302A +:1027400061F08091E80083FD0AC08091E80082FF7B +:10275000F2CF80E0089582E0089583E0089581E05B +:102760000895982F973058F59093E900981739F00D +:102770007091EC002091ED005091F00003C0242FE7 +:10278000762F50E021FF19C03091EB003E7F30934F +:10279000EB003091ED003D7F3093ED003091EB0088 +:1027A00031603093EB007093EC002093ED00509378 +:1027B000F0002091EE0027FF07C09F5FD3CF8F70FE +:1027C0008093E90081E0089580E0089580911403EA +:1027D00087FF11C08091E80082FD05C0809113033E +:1027E0008111F8CF11C08091E8008B770BC08091E8 +:1027F0001303882349F08091E80080FFF8CF80918F +:10280000E8008E778093E80008952091E4003091ED +:10281000E50095E64091EC00842F817040FF22C0D6 +:102820008091E80080FD1CC080911303882391F003 +:10283000853091F08091EB0085FD10C04091E4005F +:102840005091E5004217530729F39A01915011F76F +:1028500084E0089582E0089583E0089581E008957A +:1028600080E008954091E80042FFDECF08950E9485 +:10287000A5140E94AD14E0EEF0E0808181608083B9 +:10288000E8EDF0E080818F77808319BCA7EDB0E0A0 +:102890008C918E7F8C9380818F7E80831092120327 +:1028A00008950F931F93CF93DF930E94A5140E9466 +:1028B000AD14C8EDD0E088818F77888388818068E7 +:1028C000888388818F7D888319BC109213031092AE +:1028D0000F03109211031092100300EE10E0F801A4 +:1028E00080818B7F808388818160888342E060E083 +:1028F00080E00E94B113E1EEF0E080818E7F808362 +:10290000E2EEF0E080818160808380818860808356 +:10291000F80180818E7F8083888180618883DF9148 +:10292000CF911F910F910895E8EDF0E080818F7EA7 +:102930008083E7EDF0E080818160808384E082BF66 +:1029400081E0809312030C945114E8EDF0E0808153 +:102950008E7F80831092E20008951092DA00109228 +:10296000E10008951F920F920FB60F9211242F933A +:102970003F934F935F936F937F938F939F93AF9307 +:10298000BF93EF93FF938091E10082FF0BC0809192 +:10299000E20082FF07C08091E1008B7F8093E1001D +:1029A0000E9419178091DA0080FF1FC08091D80023 +:1029B00080FF1BC08091DA008E7F8093DA008091C7 +:1029C000D90080FF0DC080E189BD82E189BD09B4D5 +:1029D00000FEFDCF81E0809313030E941D1105C00E +:1029E00019BC109213030E942B118091E10080FF0B +:1029F00019C08091E20080FF15C08091E2008E7FB7 +:102A00008093E2008091E20080618093E2008091F7 +:102A1000D80080628093D80019BC85E080931303AE +:102A20000E942F118091E10084FF30C08091E2006C +:102A300084FF2CC080E189BD82E189BD09B400FE1C +:102A4000FDCF8091D8008F7D8093D8008091E100E8 +:102A50008F7E8093E1008091E2008F7E8093E20080 +:102A60008091E20081608093E20080910F038823CF +:102A700011F084E007C08091E30087FD02C081E08F +:102A800001C083E0809313030E9430118091E10024 +:102A900083FF29C08091E20083FF25C08091E1007F +:102AA000877F8093E10082E08093130310920F03ED +:102AB0008091E1008E7F8093E1008091E2008E7F23 +:102AC0008093E2008091E20080618093E20042E026 +:102AD00060E080E00E94B1138091F00088608093F4 +:102AE000F0000E942E11FF91EF91BF91AF919F9145 +:102AF0008F917F916F915F914F913F912F910F90A7 +:102B00000FBE0F901F9018951F920F920FB60F9245 +:102B100011242F933F934F935F936F937F938F93E2 +:102B20009F93AF93BF93CF93DF93EF93FF93C091A6 +:102B3000E900CF708091EC00D82FD17080FDD0E8F3 +:102B40001092E9008091F000877F8093F0007894E4 +:102B50000E94C8151092E9008091F000886080936F +:102B6000F000CD2BCF70C093E900FF91EF91DF9182 +:102B7000CF91BF91AF919F918F917F916F915F9115 +:102B80004F913F912F910F900FBE0F901F9018956E +:102B90001F93CF93DF93CDB7DEB7AA970FB6F89404 +:102BA000DEBF0FBECDBFE4E1F3E088E08E0F909171 +:102BB000F10091938E13FBCF0E9446118091E800A3 +:102BC00083FF1FC18091140390911503492F50E09A +:102BD0004A30510508F015C1FA01EA5AFF4F0C942A +:102BE000D52C803881F0823809F00BC18091180310 +:102BF0008F708093E9008091EB0085FB882780F936 +:102C00001092E90006C08091100390911103911178 +:102C100082609091E800977F9093E8008093F100A4 +:102C20001092F100C8C0282F2D7F09F0EAC0882338 +:102C300019F0823061F0E5C080911603813009F00F +:102C4000E0C0933009F080E0809311032BC08091A5 +:102C50001603811127C0809118038F7009F4D1C029 +:102C60008093E9002091EB0020FF1CC0933021F4F9 +:102C70008091EB00806214C09091EB009061909382 +:102C8000EB0021E030E0A90102C0440F551F8A95F6 +:102C9000E2F74093EA001092EA008091EB0088602E +:102CA0008093EB001092E9008091E800877F86C056 +:102CB0008111A7C0109116031F778091E3008078DF +:102CC000812B8093E3008091E800877F8093E80068 +:102CD0000E94E6138091E80080FFFCCF8091E30022 +:102CE00080688093E300111102C082E001C083E09C +:102CF0008093130386C08058823008F082C0809190 +:102D00001603909117038C3D53E0950779F583E006 +:102D10008A838AE289834FB7F894DE01139620E014 +:102D20003EE051E2E32FF0E050935700E49120FFA2 +:102D300003C0E295EF703F5FEF708E2F90E0EA30B6 +:102D400010F0C79601C0C0968D939D932F5F2431DC +:102D500049F74FBF8091E800877F8093E8006AE2DF +:102D600070E0CE0101960E94ED1214C0AE014F5FDB +:102D70005F4F609118030E943412BC01009709F460 +:102D800040C09091E800977F9093E80089819A81F4 +:102D90000E9450138091E8008B778093E80031C047 +:102DA000803879F58091E800877F8093E8008091F2 +:102DB0000F038093F1008091E8008E778093E80004 +:102DC0000E94E6131EC081111CC090911603923020 +:102DD000C0F48091E800877F8093E80090930F0310 +:102DE0000E94E61380910F03811106C08091E300D9 +:102DF00087FD02C081E001C084E0809313030E943C +:102E000032118091E80083FF0AC08091E800877F3B +:102E10008093E8008091EB0080628093EB00AA969B +:102E20000FB6F894DEBF0FBECDBFDF91CF911F91DB +:102E300008950895CF93809113038823A1F0C09142 +:102E4000E900CF709091EC00892F817090FD80E8AF +:102E5000C82B1092E9008091E80083FD0E94C815FC +:102E6000CF70C093E900CF9108959093930280931F +:102E700092020895E0919202F0919302309721F02E +:102E80000190F081E02D099480E00895E091920294 +:102E9000F0919302309721F00280F381E02D0994A4 +:102EA0000895E0919202F0919302309721F004800E +:102EB000F581E02D099408952091900230919102BE +:102EC0008217930771F09093910280939002E091A2 +:102ED0009202F0919302309721F00680F781E02D65 +:102EE0000994089520918E0230918F0282179307E2 +:102EF00071F090938F0280938E02E0919202F09194 +:102F00009302309721F00084F185E02D0994089513 +:102F100008950C9488170E940F230E9460090E9454 +:102F200095230C9444285F926F927F928F929F9288 +:102F3000AF92BF92CF92DF92EF92FF920F931F93C7 +:102F4000CF93DF9300D000D01F92CDB7DEB70E94A1 +:102F5000A5099DE9C92E92E0D92E03E010E0AA242C +:102F6000A394B12C502E802F0E94200A4C01F60110 +:102F7000729062906F016826792661147104A1F441 +:102F80000150110978F78FEF89838A831B820E9491 +:102F900018238160782F9D838C8349815A816B81AE +:102FA0008D810E94431838C08091F20281FD0E94F9 +:102FB000290A2BE030E07501022E02C0EE0CFF1C46 +:102FC0000A94E2F7C70186219721892B09F1298309 +:102FD0005A828E209F2091E0892809F490E09B83FB +:102FE0000E9418238160782F9D838C8349815A81A8 +:102FF0006B818D810E944318000F111FF801EB5661 +:10300000FD4F80819181E826F926F182E08204C09B +:103010002150310980F6B4CF0E947C251091940292 +:103020000E943A171817D1F00E943A178093940221 +:103030000F900F900F900F900F90DF91CF911F91F5 +:103040000F91FF90EF90DF90CF90BF90AF909F9047 +:103050008F907F906F905F900C944A090F900F9023 +:103060000F900F900F90DF91CF911F910F91FF90D4 +:10307000EF90DF90CF90BF90AF909F908F907F9018 +:103080006F905F900895CF93DF93CDB7DEB72B9706 +:103090000FB6F894DEBF0FBECDBF4F835887698748 +:1030A0007A878B87DE01119686E0FD0111928A9561 +:1030B000E9F785E0FE01379601900D928A95E1F7D8 +:1030C00049815A816B817C818D819E810E94BA1ECB +:1030D0002B960FB6F894DEBF0FBECDBFDF91CF9118 +:1030E0000895CF93882309F4C2C0C82F823859F4B9 +:1030F0000E943A1781FDBBC089E30E9494210E947F +:10310000612289E30CC0833879F40E943A1780FD6C +:10311000AEC083E50E9494210E94612283E50E9453 +:10312000D621CF910C946122843859F40E943A1729 +:1031300082FD9DC087E40E9494210E94612287E461 +:10314000EECF8CEF8C0F813A48F48C2F0E94AC2785 +:1031500081118DC08C2F0E949421E3CF80E28C0FCF +:10316000883048F4C77081E001C0880FCA95EAF73B +:103170000E941A22D6CF8BE58C0F833078F4C53AA3 +:1031800029F0C63A31F083E890E005C081E890E08C +:1031900002C082E890E0CF910C945C1788E58C0F18 +:1031A000833108F064C0C83A39F1C93A41F1CA3AEA +:1031B00049F1CB3A51F1CC3A59F1CD3A61F1C03BEA +:1031C00069F1CE3A71F1CF3A79F1C13B81F1C23B5D +:1031D00089F1C33B91F1C43B99F1C53BA1F1C63BD9 +:1031E000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B39 +:1031F000C9F180E090E038C082EE90E035C089EE01 +:1032000090E032C08AEE90E02FC085EB90E02CC0B9 +:1032100086EB90E029C087EB90E026C08CEC90E034 +:1032200023C08DEC90E020C083E891E01DC08AE8C7 +:1032300091E01AC082E991E017C084E991E014C0DE +:1032400081E292E011C083E292E00EC084E292E05B +:103250000BC085E292E008C086E292E005C087E2FA +:1032600092E002C08AE292E0CF910C947217CF9163 +:103270000895882309F44BC0823859F40E943A1704 +:1032800081FF45C089E30E9494210E94612289E365 +:103290000CC0833871F40E943A1780FF38C083E570 +:1032A0000E9494210E94612283E50E94D6210C9401 +:1032B0006122843859F40E943A1782FF28C087E4BB +:1032C0000E9494210E94612287E4EFCF9CEF980F27 +:1032D000913A58F390E2980F983050F4877091E04B +:1032E00001C0990F8A95EAF7892F0E942022DFCF2B +:1032F0009BE5980F933020F480E090E00C945C17ED +:10330000885A833120F480E090E00C94721708957D +:10331000882321F00E941A220C94612208958823A8 +:1033200021F00E9420220C94612208957F928F92B6 +:103330009F92AF92BF92CF92DF92EF92FF920F9344 +:103340001F93CF93DF931F92CDB7DEB77C01C62EBC +:10335000772EFC01058102950F70128111110E94D8 +:1033600037220E948D21882379F0112369F080E2B1 +:103370008C0D883048F082E00E9476210E948D21D9 +:1033800091E0D82ED92601C0D12CE72DE295EF701F +:10339000F0E0E05AFF4F0C94D52C872D807F072D4D +:1033A0000F70882311F00295007F112389F000230C +:1033B00009F499C180E28C0D883020F4802F0E949E +:1033C0001A2203C0802F0E942A220E9461228BC1F0 +:1033D0008C2D0E943919002309F4C3C180E28C0DA1 +:1033E000883020F4802F0E94202203C0802F0E946A +:1033F00030220E946122B5C1872D807F972D9F705A +:10340000803211F4892F03C0892F8295807FCC20D0 +:1034100021F0F1E0CF16A1F01DC0112339F00023F7 +:1034200019F1013009F50E944A229BC1002319F0CD +:10343000013009F496C189830E944D22898110C10F +:10344000112321F0063008F08CC10EC0053008F0C1 +:1034500088C106C1112359F0002331F0F70195818D +:1034600090FF41C19F7095830E9488197AC1002303 +:1034700009F4F6C03EC1872D86958695837090E04D +:10348000009719F0019761F06CC1112321F08C2D88 +:10349000972D937002C080E090E00E945C1761C19C +:1034A000112321F08C2D972D937002C080E090E0C5 +:1034B0000E94721756C18C2D112319F00E9484248A +:1034C00002C00E94EC240E9471254BC1872D83709D +:1034D00009F052C0111145C18C2D829586958770D7 +:1034E000880F880F9C2D9F70892E912CA12CB12CB8 +:1034F000082E04C0880C991CAA1CBB1C0A94D2F785 +:10350000C4FE14C00FE010E020E030E0B901A801D3 +:1035100004C0440F551F661F771F8A95D2F7CB0151 +:10352000BA01609570958095909503C060E070E059 +:10353000CB01272D26952695237030E022303105CA +:1035400069F02330310589F0682979298A299B2976 +:103550002130310571F00E94022003C168297929C8 +:103560008A299B290E941E20FCC00E940220C501BE +:10357000B4010E94E61FF5C0112319F0872D817058 +:1035800001C08695882309F4ECC08C2D8295869520 +:103590008770880F880F9C2D9F70892E912CA12CED +:1035A000B12C082E04C0880C991CAA1CBB1C0A94C0 +:1035B000D2F7C4FE14C00FE010E020E030E0B90103 +:1035C000A80104C0440F551F661F771F8A95D2F7C4 +:1035D000CB01BA01609570958095909503C060E02D +:1035E00070E0CB01272D269526952370422F50E0C1 +:1035F0004230510569F04330510589F06829792935 +:103600008A299B294130510571F00E94DC20A9C014 +:10361000682979298A299B290E94F820A2C00E9442 +:10362000DC20C501B4010E94C0209BC08C2D90E01D +:10363000FC01E05EF109E531F10508F050C0E05908 +:10364000FF4F0C94D52C0C2D0F70872D8F711123EB +:1036500021F00E945920802F07CF0E947A20802FCE +:103660000E948F197EC0112341F0053008F079C007 +:10367000872D8F710E949F2074C0063008F071C0A2 +:10368000F7CF112339F0872D8F710E94592069C01F +:103690001123C9F3872D8F710E947A2062C01123F4 +:1036A00029F0872D8F710E9444205BC00E943A2030 +:1036B00058C0112351F0172D1F71812F0E945920DE +:1036C00063E0812F0E946D214CC081E00E94762131 +:1036D000023008F446C082E00E94762142C01123E5 +:1036E00031F0002381F28C2D0E9471183AC0002322 +:1036F00089F28C2D0E94391934C0472D4F706C2DE2 +:10370000C7010E94B5030E945E1F2BC0111129C082 +:10371000472D4F7050E042305105B9F04CF441153F +:10372000510581F041305105E1F40E946C2819C027 +:103730004330510569F04430510599F48C2D0E94B5 +:10374000BE280FC00E9455280CC00E94882809C0BE +:103750000E949B2806C0472D4F706C2DC7010E9408 +:103760002B06DD20F9F00E94692180FD1BC0F701C6 +:1037700012820E9463210E945920C7010E94E11B0E +:103780000E9463210F90DF91CF911F910F91FF90C5 +:10379000EF90DF90CF90BF90AF909F908F907F90F1 +:1037A0000C947A200F90DF91CF911F910F91FF9091 +:1037B000EF90DF90CF90BF90AF909F908F907F90D1 +:1037C00008950F931F93CF93DF93EC018881998124 +:1037D0002B813C81232BB9F09F3F11F48F3F99F04F +:1037E000CE010E942A04882371F0688179818A8140 +:1037F0000E945F218C010E9414210E94DB1FB801EE +:10380000CE010E949619DF91CF911F910F910895DB +:103810000E9437220E9447220E940C220E946122AD +:103820000E9422260E94712580E090E00E945C1791 +:1038300080E090E00C9472170E9427220C94081CE0 +:103840000E945421292F22952F7030E02C30310511 +:103850004CF42A3031056CF4225031092230310504 +:10386000A8F407C02C30310569F02F30310551F034 +:103870000DC0803F69F018F4803E40F409C0843FD9 +:1038800029F406C093FB882780F9089580E0089505 +:1038900081E00895CF93DF9300D000D01F92CDB781 +:1038A000DEB70F900F900F900F900F90DF91CF9198 +:1038B0000895CF93DF9300D000D000D0CDB7DEB70E +:1038C00026960FB6F894DEBF0FBECDBFDF91CF9125 +:1038D00008951F93CF93DF93C0919D0216E08091CE +:1038E0009E02C81799F0D0E01C9FF0011D9FF00DBB +:1038F0001124E156FD4F40815181628173818481A1 +:1039000095810E94591C2196C770E9CFDF91CF9114 +:103910001F9108954091CF025091D0026091D10241 +:103920007091D2028091D3029091D4020C94591CD0 +:103930008091D40282958F7009F054C08091D10299 +:10394000882309F44FC080919D02A0919E0260914E +:10395000CF027091D0024091D2025091D302B6E0D2 +:103960008A1709F43FC090E041155105C1F17F3F2E +:1039700011F46F3FA1F1B89FF001B99FF00D112430 +:10398000E156FD4F218172132AC02081621327C0A6 +:103990002281211124C0238134812417350710F49A +:1039A00021503109241B350B283C3105C0F42091EE +:1039B000D4022F7020612093D40226E0289FF001CA +:1039C000299FF00D1124EC55FD4F80818F7080618F +:1039D00080838FEC92E00E94E11B0C94691C01969D +:1039E0008770BECF0895CF92DF92EF92FF920F9330 +:1039F0001F93CF93DF93CDB7DEB762970FB6F894DE +:103A0000DEBF0FBECDBF8C0185E0F801DE011D9643 +:103A100001900D928A95E1F7D8014C9111965C9135 +:103A2000119712966C9112971396CD90DC90149783 +:103A30003091CF027091D0028091D2029091D30246 +:103A4000009709F46BC17F3F19F43F3F09F466C149 +:103A5000E090D102EE2009F4C0C02091D402C81633 +:103A6000D90628F0F601E81BF90BCF0104C08095B8 +:103A700090958C0D9D1DFF24F394883C910578F062 +:103A8000F12C207F09F0C6C07C2DD98AC88A89898B +:103A90000E944A1C8FEC92E00E94E11BB1C0822F71 +:103AA000807F09F046C0751314C0341312C0611131 +:103AB00010C02F7020612093D4020E948A1C8FECCA +:103AC00092E00E94E11B8091D402D80115968C935C +:103AD0002EC0CD2819F15F3F11F44F3FF9F0F62EBB +:103AE00061111CC080919D0220919E0236E08217D8 +:103AF00009F45AC090E0389FF001399FF00D11246D +:103B0000E156FD4F7181571306C07081471303C002 +:103B10007281711103C001968770E9CFF62E66237A +:103B200009F418C18091D40281608093D402F12CF1 +:103B300011C1751308C0341306C0611104C080910F +:103B4000D402D801C3C04D875E878D859E856A8B60 +:103B50000E94201C6A898823E1F16623D1F120911B +:103B6000D402822F82958F7090E0029774F080913A +:103B7000CF029091D00298878F831986DB86CA8600 +:103B80002C87CE0107960E94E11B86E0F801AFEC7E +:103B9000B2E001900D928A95E1F70E94981C0E9474 +:103BA0008A1CFF24F394D6C04D875E878D859E8541 +:103BB0000E945421292F22952F7030E022303105A8 +:103BC0000CF0BCC09F7009F0B6C0805E883008F46D +:103BD000C1C0C8010E94E11BE4CFC816D90608F491 +:103BE00053C0F601E81BF90BCF01883C910508F49E +:103BF00050C0F12C7C2DD98AC88A89890E944A1C20 +:103C0000EFECF2E086E0DF011D928A95E9F70E9471 +:103C10008A1CA0C0751314C0341312C0611110C0E7 +:103C20008091D402F8018583C8010E94E11B86E0DF +:103C3000EFECF2E0DF011D928A95E9F7FE2C8AC0D5 +:103C40004D875E878D859E856A8B0E94201C6A89C0 +:103C5000882309F4BECF662309F4BBCF2091D40298 +:103C6000822F82958F7090E002970CF48ECF809116 +:103C7000CF029091D0029A8389831B82DD82CC820D +:103C80002E83CE0101967FCF809590958C0D9D1D42 +:103C9000ACCFF62E662309F49CCF75132EC03413D7 +:103CA0002CC02091D40220FD1FC0822F82958F70DE +:103CB000D9F0D80115962C9315978F3049F08F5F66 +:103CC000982F9295907F822F8F70892B15968C93C9 +:103CD000C8010E94E11B86E0F801AFECB2E0019060 +:103CE0000D928A95E1F793CF86E0F801AFECB2E050 +:103CF00001900D928A95E1F72DC04D875E878D85E5 +:103D00009E850E94201C811140CF8091D402816049 +:103D10008093D402C8010E94E11B1CC0662309F4F1 +:103D200058CF4D875E878D859E850E94201C8823F5 +:103D300009F44FCF2ACF811148CF0CC02430310570 +:103D40000CF047CF9F7009F440CFF8019581907F28 +:103D500009F03BCF8F2D62960FB6F894DEBF0FBEF1 +:103D6000CDBFDF91CF911F910F91FF90EF90DF902A +:103D7000CF9008951F93CF93DF93CDB7DEB72C97E5 +:103D80000FB6F894DEBF0FBECDBF4F83588769874B +:103D90007A878B879C87CE0107960E94F31C882325 +:103DA00069F08F8198852A853B85232BF1F19F3F10 +:103DB00009F063C08F3F09F060C037C086E0FE01A4 +:103DC0003796DE01119601900D928A95E1F76F8189 +:103DD0007885EA85FB85309741F17F3F11F46F3F8D +:103DE00021F120919E0230E0C90101968770992748 +:103DF00040919D0250E08417950709F447C06983FC +:103E00007A83FD83EC8396E0929FD001939FB00D5F +:103E10001124A156BD4FFE01319601900D929A9545 +:103E2000E1F780939E020E94691C16E080919D023A +:103E300090919E028917C1F1189FC00111248156EB +:103E40009D4F0E94F31C882379F1E0919D021E9FF3 +:103E5000F0011124E156FD4F40815181628173814F +:103E6000848195810E94591C80919D0290E0019669 +:103E70008770992780939D02D9CF4F815885698596 +:103E80007A858B859C850E94591CCFCF0E941C1C73 +:103E900010929E0210929D02EFECF2E086E0DF01AC +:103EA0001D928A95E9F7C1CF2C960FB6F894DEBF24 +:103EB0000FBECDBFDF91CF911F910895EF92FF927A +:103EC0000F931F93CF93DF938C01009709F46CC07D +:103ED000F12CEE24E394E8012196F80184918437D3 +:103EE00040F4843008F051C0813081F0823019F103 +:103EF0005BC0853709F444C0A8F19CE7980F903760 +:103F000008F052C08F770E94391941C00E5F1F4FD1 +:103F1000FE01C49180E28C0F883048F4C7708E2D6A +:103F200001C0880FCA95EAF70E943A2214C08C2F6C +:103F30000E9471182DC00E5F1F4FFE01C49180E2D8 +:103F40008C0F883058F4C7708E2D01C0880FCA9529 +:103F5000EAF70E9440220E9461221AC08C2F0E9420 +:103F6000391916C00E5F1F4FFE01C491CC2381F09A +:103F70008FE99FE00197F1F700C00000C150F6CF34 +:103F80000E5F1F4FFE01F49003C00E9471188E0156 +:103F90008F2D882309F49FCFEFE9FFE03197F1F7E8 +:103FA00000C000008150F5CFDF91CF911F910F919C +:103FB000FF90EF90089508956093D9027093DA020C +:103FC0008093DB029093DC020C94081C0F931F93E8 +:103FD0000091D9021091DA022091DB023091DC02CB +:103FE000DC01CB01802B912BA22BB32B8093D90228 +:103FF0009093DA02A093DB02B093DC021F910F9141 +:104000000C94081C0F931F930091D9021091DA02AF +:104010002091DB023091DC02DC01CB018023912373 +:10402000A223B3238093D9029093DA02A093DB02F8 +:10403000B093DC021F910F910C94081C0F931F93F7 +:104040000091D9021091DA022091DB023091DC025A +:10405000DC01CB0180279127A227B3278093D902C7 +:104060009093DA02A093DB02B093DC021F910F91D0 +:104070000C94081C1092D5021092D6021092D7020E +:104080001092D8020C94081C41E050E060E070E00F +:1040900004C0440F551F661F771F8A95D2F74093BF +:1040A000D5025093D6026093D7027093D8020C9435 +:1040B000081C41E050E060E070E004C0440F551F70 +:1040C000661F771F8A95D2F78091D5029091D6020C +:1040D000A091D702B091D802482B592B6A2B7B2B89 +:1040E0004093D5025093D6026093D7027093D802C2 +:1040F0000C94081C41E050E060E070E004C0440F04 +:10410000551F661F771F8A95D2F740955095609589 +:1041100070958091D5029091D602A091D702B0916E +:10412000D802482359236A237B234093D502509316 +:10413000D6026093D7027093D8020C94081C41E019 +:1041400050E060E070E004C0440F551F661F771F09 +:104150008A95D2F78091D5029091D602A091D7028C +:10416000B091D802482759276A277B274093D50268 +:104170005093D6026093D7027093D8020C94081C17 +:104180000F931F930091D5021091D6022091D70270 +:104190003091D802DC01CB01802B912BA22BB32BC9 +:1041A0008093D5029093D602A093D702B093D80201 +:1041B0001F910F910C94081C0F931F930091D5022F +:1041C0001091D6022091D7023091D802DC01CB01A8 +:1041D00080239123A223B3238093D5029093D60208 +:1041E000A093D702B093D8021F910F910C94081C92 +:1041F0000F931F930091D5021091D6022091D70200 +:104200003091D802DC01CB0180279127A227B32768 +:104210008093D5029093D602A093D702B093D80290 +:104220001F910F910C94081C0895CF92DF92EF928A +:10423000FF920F931F93CF93DF938C01C090D9020D +:10424000D090DA02E090DB02F090DC028091D5029F +:104250009091D602A091D702B091D802C82AD92A4B +:10426000EA2AFB2ACFE1D0E0D701C6010C2E04C018 +:10427000B695A795979587950A94D2F780FF06C0C3 +:10428000B8018C2F0E94B008019721F4219760F7A4 +:1042900080E001C08C2FDF91CF911F910F91FF9093 +:1042A000EF90DF90CF900895CF93DF93EC010E94C1 +:1042B0001521BE010E94B008DF91CF910895CB0176 +:1042C0000E94542108958091DD02859585958595FC +:1042D00008958091DD028770089598E0899F90018C +:1042E0001124262B2093DD020C9459202091DD020D +:1042F000809582238093DD02982F977069F430E0D7 +:10430000482F552747FD50952417350729F08595E7 +:10431000859585950C947A2008959091DD0297708B +:1043200081E009F480E0089590911501992321F02E +:1043300090911601911109C0209117013091180137 +:10434000F90132969FEF40E01FC0982F9695969501 +:1043500096959F3050F5E0911701F0911801E90F03 +:10436000F11D877021E030E0A90102C0440F551F04 +:104370008A95E2F7CA019181892B818308959F3F35 +:1043800039F04F5F4E3041F051915813F8CF0DC0C6 +:104390005111F7CF942FF5CF9F3F39F0F901E90F75 +:1043A000F11D97FDFA958283089508959091150166 +:1043B000992321F090911601911109C020911701C4 +:1043C00030911801F9013296205F3F4F1FC0982F9E +:1043D0009695969596959F30F0F4E0911701F0919F +:1043E0001801E90FF11D877021E030E0A90102C03A +:1043F000440F551F8A95E2F7CA0180959181892360 +:10440000818308953196E217F30729F0908198137C +:10441000F9CF1082F7CF089581E090E0E091170185 +:10442000F0911801E80FF91F108201968031910573 +:10443000A9F708959091F102892B8093F1020895D4 +:1044400080959091F10289238093F1020895109252 +:10445000F10208959091F002892B8093F002089563 +:1044600080959091F00289238093F0020895109234 +:10447000F00208959091EF02892B8093EF02089546 +:1044800080959091EF0289238093EF020895109216 +:10449000EF0208958093DE0208951092DE020895DF +:1044A0008091170190911801FC0131969C01205FC9 +:1044B0003F4F80E0919191118F5FE217F307D1F7A1 +:1044C0000895E0911701F09118018091F102808325 +:1044D000E0911701F091180190818091F002892BF1 +:1044E0008083E0911701F091180190818091EF0293 +:1044F000892B80838091DE02882361F0E09117018F +:10450000F09118019081892B80830E9450228111A3 +:104510001092DE0280911701909118010C944617B9 +:1045200020E0009739F0AC014150510984239523D4 +:104530002F5FF7CF822F089580911303843039F1D4 +:104540001092F30220E488E190E00FB6F894A89569 +:10455000809360000FBE2093600080E00E941C03E7 +:1045600080E00E944A0983B7817F846083BF83B75C +:10457000816083BF7894889583B78E7F83BF88E1FD +:104580000FB6F89480936000109260000FBE0895FB +:104590000895089580E00E941C030E94C8220E9492 +:1045A000A5090E94C9220E942A0A91E0811101C036 +:1045B00090E0892F08950E941C1C80E00E941C033B +:1045C0000E9444280E943A170C944A091F920F92A5 +:1045D0000FB60F9211248F939F93AF93BF93809147 +:1045E000F302811113C08091F4029091F502A09121 +:1045F000F602B091F7024196A11DB11D8093F4021D +:104600009093F502A093F602B093F702BF91AF9199 +:104610009F918F910F900FBE0F901F90189582E081 +:1046200084BD93E095BD9AEF97BD80936E00089589 +:104630002FB7F8948091F4029091F502A091F602C0 +:10464000B091F7022FBF0895CF92DF92EF92FF92C1 +:104650000F931F932FB7F8944091F4025091F502F5 +:104660006091F6027091F7022FBF6A017B01EE2480 +:10467000FF248C0120E030E0C016D106E206F306EC +:1046800010F4415051099A01281B390BC9011F919F +:104690000F91FF90EF90DF90CF9008951F920F92AF +:1046A0000FB60F9211248F939F93AF93BF93809176 +:1046B000F4029091F502A091F602B091F7020196F2 +:1046C000A11DB11D8093F4029093F502A093F60210 +:1046D000B093F702BF91AF919F918F910F900FBE52 +:1046E0000F901F9018950E943714F8942FEF87EAC7 +:1046F00091E6215080409040E1F700C0000087E043 +:1047000090EBDC0180931E0390931F03A093200382 +:10471000B09321039CE088E10FB6F894A8958093AC +:1047200060000FBE90936000FFCF0E94D4238111E0 +:1047300002C00E94B0230E94DF238093F2020E94F5 +:10474000E72380931C0387FB882780F98093160159 +:104750000E94E323682F70E080E090E00C94DC1F5F +:104760006DEE7EEF80E090E00E94FB2C60E082E046 +:1047700090E00E94E92C60E083E090E00E94E92C48 +:1047800060E084E090E00E94E92C60E085E090E049 +:104790000E94E92C60E086E090E00E94E92C6FEF37 +:1047A00087E090E00C94E92C80E090E00E94E32CFC +:1047B00021E08D3E9E4F09F020E0822F089582E097 +:1047C00090E00C94DB2C83E090E00C94DB2C84E0F4 +:1047D00090E00C94DB2C682F84E090E00C94E92CA2 +:1047E00086E090E00C94DB2C682F86E090E00C943F +:1047F000E92C87E090E00C94DB2C682F87E090E0B8 +:104800000C94E92C8091FA0280FF0BC060911C018E +:1048100085E0689FB001112475956795759567953A +:104820002BC081FF09C060911C0185E0689FB00129 +:1048300011247595679520C082FF07C060911C0107 +:1048400085E0689FB001112417C09091FB02992365 +:10485000D1F060911B01961788F720911C0185E02B +:10486000289F90011124929FA001939F500D112425 +:1048700070E0CA010E94C12C6038710540F46115D6 +:10488000710539F002C065E070E0862F08958FE76A +:10489000089581E008958091FA0280FF08C0609138 +:1048A0001A0170E0759567957595679521C081FF30 +:1048B00006C060911A0170E07595679519C082FF76 +:1048C00004C060911A0170E010C09091FB0299231E +:1048D000C1F0609119019617A0F780911A01899F84 +:1048E000C001112470E00E94C12C6038710528F4C9 +:1048F0006115710521F0862F08958FE7089581E0F5 +:10490000089561E070E0F4CF803F21F40E9402241A +:10491000819504C0813F29F40E9402248093FE0205 +:104920000895823F21F40E940224819504C0833FB0 +:1049300029F40E9402248093FD020895893F19F40E +:104940000E944B2405C08A3F31F40E944B2481957C +:104950008093FF0208958B3F21F40E944B248195A0 +:1049600004C08C3F29F40E944B24809300030895D7 +:10497000843F21F48091FC02816017C0853F21F4BF +:104980008091FC02826011C0863F21F48091FC027C +:1049900084600BC0873F21F48091FC02886005C0D1 +:1049A000883F31F48091FC0280618093FC0208957D +:1049B0008D3F21F48091FA0281600BC08E3F21F47B +:1049C0008091FA02826005C08F3F29F48091FA023B +:1049D00084608093FA020895803F39F48091FE024A +:1049E00087FF6CC01092FE0269C0813F29F480915C +:1049F000FE021816BCF362C09091FD02823F29F4BA +:104A000097FF5CC01092FD0259C0833F19F419163C +:104A1000CCF354C0893F41F48091FF0218160CF08A +:104A20004DC01092FF024AC08A3F29F48091FF02D4 +:104A300087FF44C0F6CF8B3F39F48091000387FF96 +:104A40003DC0109200033AC08C3F29F480910003CE +:104A50001816BCF333C0843F21F48091FC028E7F92 +:104A600017C0853F21F48091FC028D7F11C0863FE5 +:104A700021F48091FC028B7F0BC0873F21F4809151 +:104A8000FC02877F05C0883F31F48091FC028F7E55 +:104A90008093FC0213C08D3F21F48091FA028E7F37 +:104AA0000BC08E3F21F48091FA028D7F05C08F3FAD +:104AB00029F48091FA028B7F8093FA028091FD02A3 +:104AC00081110EC08091FE0281110AC08091FF0207 +:104AD000811106C080910003811102C01092FB0277 +:104AE00008958CEF92E00E9451170E941823909332 +:104AF000F9028093F80208951F93CF93DF9380917A +:104B0000F8029091F9020E942423AC019091FB02DB +:104B1000992321F020911D0130E006C020911E0153 +:104B20008AE0289F900111244217530708F486C099 +:104B30008091FD02C091FE02D091FF02109100030E +:104B4000811107C0C11176C0D11174C0111172C09A +:104B500075C09F3F19F09F5F9093FB02181624F4D5 +:104B60000E9402248093FD028091FD0287FF05C010 +:104B70000E94022481958093FD021C1624F40E9459 +:104B800002248093FE028091FE0287FF05C00E94EE +:104B9000022481958093FE026091FD02662339F123 +:104BA000C091FE02CC2319F1772767FD7095872FFE +:104BB000972F0E94E32923E333E343E35FE30E945B +:104BC000F32A0E94B0296093FD026C2F772767FDBE +:104BD0007095872F972F0E94E32923E333E343E364 +:104BE0005FE30E94F32A0E94B0296093FE021D1623 +:104BF00024F40E944B248093FF028091FF0287FFE0 +:104C000005C00E944B2481958093FF02111624F465 +:104C10000E944B24809300038091000387FF05C00E +:104C20000E944B24819580930003DF91CF911F91C7 +:104C30000C9471259F3F09F08ECF96CFDF91CF91D5 +:104C40001F910895ECEFF2E085E0DF011D928A9557 +:104C5000E9F71092FB021092FA020895833081F175 +:104C600028F4813059F08230D1F00895853009F46C +:104C700049C0B8F1863009F456C0089580911E01EC +:104C8000262F30E0280F311D2F3F310524F4680F07 +:104C900060931E0108958FEF80931E010895809107 +:104CA0001D01262F30E0280F311D2F3F310524F440 +:104CB000680F60931D0108958FEF80931D01089583 +:104CC00080911C01262F30E0280F311D2F3F310528 +:104CD00024F4680F60931C0108958FEF80931C01EA +:104CE000089580911B01262F30E0280F311D2F3FA2 +:104CF000310524F4680F60931B0108958FEF8093B2 +:104D00001B01089580911A01262F30E0280F311DD4 +:104D10002F3F310524F4680F60931A0108958FEF37 +:104D200080931A01089580911901262F30E0280FF1 +:104D3000311D2F3F310524F4680F60931901089548 +:104D40008FEF809319010895833011F128F4813099 +:104D500049F0823091F00895853081F120F186305C +:104D6000C1F1089580911E01681720F4861B80937D +:104D70001E01089510921E01089580911D0168176B +:104D800020F4861B80931D01089510921D01089543 +:104D900080911C01681720F4861B80931C010895E4 +:104DA00010921C01089580911B01681720F4861B46 +:104DB00080931B01089510921B01089580911A01A0 +:104DC000681720F4861B80931A01089510921A0127 +:104DD000089580911901681720F4861B80931901AA +:104DE00008951092190108950F931F93873208F0C8 +:104DF00048C08E3108F08DC0803109F477C008F5C5 +:104E0000873009F461C068F4863009F09DC0809154 +:104E1000F202817F8E7F8093F20281E08093020311 +:104E200094C08B3009F489C08E3009F08DC0809118 +:104E3000F20282FB222720F991E0922790FB82F96F +:104E40005EC0863109F479C060F4813109F07CC01C +:104E50000E941C1C9091160181E089278093160105 +:104E60006CC0893109F469C08B3109F06DC0809143 +:104E7000F20281FB222720F991E0922790FB81F931 +:104E80003EC0883309F459C050F4893209F457C040 +:104E9000853309F454C0873209F451C055C08334B6 +:104EA00009F44DC028F48A3308F44EC0895332C047 +:104EB000883409F049C00E941C1C0E945A0A0E94B2 +:104EC00021040E94732339C09091F202892F8095AA +:104ED000817080FB90F929F0966098609093F202BF +:104EE00034C0997F977F9093F20227C08091F2029D +:104EF00083FB222720F991E0922790FB83F980938E +:104F0000F2029923D1F08091F20281608093F20243 +:104F100014C08D5141E050E060E070E08A019B01D7 +:104F200004C0000F111F221F331F8A95D2F7C90139 +:104F3000B8010E94DC1F0E941C1C81E006C061E0D9 +:104F400070E080E090E0F5CF80E01F910F91089530 +:104F500080E0089580E00895CF93C82F80910203E8 +:104F6000813069F018F08230C9F184C0E0911701F6 +:104F7000F09118018081823209F07EC007C0E09173 +:104F80001701F09118018081823261F48C2F0E9408 +:104F9000A827811104C08C2F0E94F4261DC081E037 +:104FA00090E01AC08C2F0E94AA27811114C0C4312E +:104FB00079F048F4CB3079F0C03109F061C082E07B +:104FC0008093020308C0C93219F0C83321F058C0D9 +:104FD0001092020355C081E0817054C0C93291F132 +:104FE00020F5C43179F1B0F4C73009F047C08EE143 +:104FF00080931E0182E380931D018AE080931C014F +:1050000084E180931B0188E080931A0188E28093F9 +:10501000190134C0CE51C63088F5EC2FF0E0EA54C7 +:10502000FE4F80818093010329C0CE34E9F020F443 +:10503000CB3421F56AE013C0C13579F0C235F1F403 +:1050400061E00DC080910103882319F010920103E3 +:1050500015C081E08093020315C061E006C0809115 +:1050600001030E942E260AC06AE0809101030E947B +:10507000A42604C01092020380E004C081E002C0B4 +:1050800080E0AACFCF9108950E94D423811102C05D +:105090000E94B0230E94F02380931D0380FF02C072 +:1050A000869501C080E00C941C0380911D03982F0D +:1050B0009695292F30E0233031054CF49F5F990FEE +:1050C0008170892B816080931D030E94F42380915D +:1050D0001D0386950C941C0380911D03982F9695B3 +:1050E00091F09158990F8170892B80931D038E7FC9 +:1050F00091E009F490E080911D0390FB80F980938A +:105100001D030E94F42380911D0386950C941C03BB +:1051100080911D03982F909590FB80F980931D033B +:105120000E94F42380911D0380FF02C0869501C078 +:1051300080E00C941C0390911D03892F86958F5F4E +:105140008F779170843028F4880F892B80931D030A +:1051500002C090931D0380911D038E7F91E009F49E +:1051600090E080911D0390FB80F980931D030E94C5 +:10517000F42380911D0386950C941C0320911D033C +:10518000922F96958927982F990F822F8170892BBE +:1051900080931D038E7F91E009F490E080911D03C0 +:1051A00090FB80F980931D030E94F42380911D03DE +:1051B00086950C941C0380911D0386950895505884 +:1051C000BB27AA270ED0D1C1C2D130F0C7D120F061 +:1051D00031F49F3F11F41EF4B7C10EF4E095E7FBE4 +:1051E0009FC1E92FD3D180F3BA17620773078407F1 +:1051F000950718F071F49EF5EBC10EF4E0950B2EB7 +:10520000BA2FA02D0B01B90190010C01CA01A00118 +:105210001124FF27591B99F0593F50F4503E68F173 +:105220001A16F040A22F232F342F4427585FF3CFB4 +:10523000469537952795A795F0405395C9F77EF485 +:105240001F16BA0B620B730B840BBAF09150A1F0CE +:10525000FF0FBB1F661F771F881FC2F70EC0BA0F54 +:10526000621F731F841F48F4879577956795B795DC +:10527000F7959E3F08F0B3CF9395880F08F09927D4 +:10528000EE0F97958795089527D108F481E008954A +:105290000CD06BC163D140F05AD130F021F45F3FA4 +:1052A00019F03EC1511195C14FC170D198F39923A6 +:1052B000C9F35523B1F3951B550BBB27AA276217DA +:1052C0007307840738F09F5F5F4F220F331F441F1F +:1052D000AA1FA9F333D00E2E3AF0E0E830D0915057 +:1052E0005040E695001CCAF729D0FE2F27D0660F44 +:1052F000771F881FBB1F261737074807AB07B0E883 +:1053000009F0BB0B802DBF01FF2793585F4F2AF098 +:105310009E3F510568F004C15CC15F3FECF3983ECD +:10532000DCF3869577956795B795F7959F5FC9F7F5 +:10533000880F911D9695879597F90895E1E0660F7E +:10534000771F881FBB1F621773078407BA0720F0F7 +:10535000621B730B840BBA0BEE1F88F7E095089560 +:1053600004D06894B11135C1089518D188F09F57C1 +:1053700090F0B92F9927B751A0F0D1F0660F771FA1 +:10538000881F991F1AF0BA95C9F712C0B13081F081 +:105390001FD1B1E008951CC1672F782F8827B85F0F +:1053A00039F0B93FCCF3869577956795B395D9F7E2 +:1053B0003EF490958095709561957F4F8F4F9F4FEC +:1053C0000895E89409C097FB3EF4909580957095F8 +:1053D00061957F4F8F4F9F4F9923A9F0F92F96E941 +:1053E000BB279395F695879577956795B795F111B6 +:1053F000F8CFFAF4BB0F11F460FF1BC06F5F7F4F53 +:105400008F4F9F4F16C0882311F096E911C0772364 +:1054100021F09EE8872F762F05C0662371F096E86D +:10542000862F70E060E02AF09A95660F771F881F3C +:10543000DAF7880F9695879597F9089588D018F030 +:1054400011F08CD038F480C0C4C0E92F9FD0B0F3E5 +:105450005523C9F3E7FB6217730784079507A8F183 +:1054600099F3E92FFF2788232AF03197660F771FDA +:10547000881FDAF7952F5527442332F0915050407A +:10548000220F331F441FD2F7BB27E91BF50B621B0A +:10549000730B840BB109C1F222F4620F731F841FD6 +:1054A000B11D31972AF0660F771F881FBB1FEFCF02 +:1054B000915050405AF041F0882332F0660F771F28 +:1054C000881F91505040C1F7939530C086957795CD +:1054D00067959F5FD9F7F8CF990F0008550FAA0B72 +:1054E000E0E8FEEF16161706E807F907C0F01216F7 +:1054F0001306E407F50798F0621B730B840B950BFA +:1055000039F40A2661F0232B242B252B21F408954E +:105510000A2609F4A140A6958FEF811D811D0895EB +:1055200097F99F6780E870E060E008959F3F31F051 +:10553000915020F4879577956795B795880F911DC1 +:105540009695879597F908959FEF80EC089500242C +:105550000A941616170618060906089500240A94D8 +:1055600012161306140605060895092E0394000C5E +:1055700011F4882352F0BB0F40F4BF2B11F460FFED +:1055800004C06F5F7F4F8F4F9F4F089557FD905816 +:10559000440F551F59F05F3F71F04795880F97FBF7 +:1055A000991F61F09F3F79F08795089512161306B1 +:1055B0001406551FF2CF4695F1DF08C016161706E0 +:1055C0001806991FF1CF8695710561050894089515 +:1055D000E894BB2766277727CB0197F908957CDFEE +:1055E00008F48FEF08950BD0C0CFB1DF28F0B6DFFD +:1055F00018F0952309F094CFA7CF1124EACFC6DF86 +:10560000A0F3959FD1F3950F50E0551F629FF001D5 +:10561000729FBB27F00DB11D639FAA27F00DB11D2E +:10562000AA1F649F6627B00DA11D661F829F2227B7 +:10563000B00DA11D621F739FB00DA11D621F839F3E +:10564000A00D611D221F749F3327A00D611D231F14 +:10565000849F600D211D822F762F6A2F11249F5762 +:1056600050408AF0E1F088234AF0EE0FFF1FBB1F85 +:10567000661F771F881F91505040A9F79E3F510524 +:1056800070F04ECFA6CF5F3FECF3983EDCF38695EB +:1056900077956795B795F795E7959F5FC1F7FE2BCF +:1056A000880F911D9695879597F90895FA01EE0F49 +:1056B000FF1F30962105310599F16115710561F4DF +:1056C0008038BFE39B0749F168949038810561F009 +:1056D0008038BFEF9B0741F0992342F5FF3FE1057A +:1056E0003105210511F1E8940894E795D901AA2321 +:1056F00029F4AB2FBE2FF85FD0F310C0FF5F70F41A +:10570000A695E0F7F73950F019F0FF3A38F49F7793 +:105710009F930CD00F9007FC905808953EF014CF43 +:1057200060E070E080E89FE308954FE79F775F9324 +:105730004F933F932F939ED02F913F914F915F9125 +:1057400052DF05C019F40EF0EBCE42CFFDCE26DFBE +:10575000C8F39638C0F707F80F92E8942BE33AEABB +:1057600048EB5FE74EDF0F920F920F924DB75EB797 +:105770000F92C0D0EAE0F1E016D04F915F91EF9127 +:10578000FF91E595EE1FFF1F49F0FE57E0684427A3 +:10579000EE0F441FFA95E1F74195550B32D00F906B +:1057A00007FE26C00895DF93CF931F930F93FF92B8 +:1057B000EF92DF927B018C01689405C0DA2EEF0135 +:1057C0001EDFFE01E894A5912591359145915591F3 +:1057D000AEF3EF0106DDFE019701A801DA9479F737 +:1057E000DF90EF90FF900F911F91CF91DF9108957F +:1057F0009B01AC0160E070E080E89FE349CD90CE72 +:1058000095CECCDEE8F39923D9F3940F511DBBF369 +:105810009150504094F059F0882332F0660F771F72 +:10582000881F91505040C1F79E3F510544F7880FA3 +:10583000911D9695879597F908955F3FACF0983E36 +:105840009CF0BB27869577956795B79508F4B1606E +:105850009395C1F7BB0F58F711F460FFE8CF6F5F66 +:105860007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE05 +:10587000689456CE93DEC8F39923D1F3C6F3DF9331 +:10588000CF931F930F93FF92C92FDD2788232AF010 +:105890002197660F771F881FDAF720E030E040E895 +:1058A0005FEB9FE3883920F0803E30F021968F77C0 +:1058B00087DCE2E3F1E003C083DCEFE5F1E073DFD6 +:1058C0008B01BE01EC01FB2E6F5771097595771F97 +:1058D000880B990B78DD28E132E741E35FE38FDE47 +:1058E000AF2D9801AE01FF900F911F91CF91DF91E5 +:1058F00078DC3BCEFA01DC01AA0FBB1F9B01AC0197 +:10590000BF5728F422273327442750781FC0B751A8 +:1059100088F4AB2F0024469537952795011CA39555 +:10592000D2F3002069F0220F331F441FB395DAF33E +:105930000DD045CC61307105A0E88A07B94630F436 +:105940009B01AC016627772788279078309621F055 +:1059500020833183428353830895AA1BBB1B51E1EB +:1059600007C0AA1FBB1FA617B70710F0A61BB70BCF +:10597000881F991F5A95A9F780959095BC01CD0174 +:10598000089597FB072E16F4009407D077FD09D0F1 +:105990000E94AD2C07FC05D03EF4909581959F4F59 +:1059A0000895709561957F4F0895EE0FFF1F059044 +:1059B000F491E02D0994F999FECF92BD81BDF89A3A +:1059C000992780B50895A8E1B0E042E050E00C943A +:1059D000032D262FF999FECF92BD81BDF89A01972C +:1059E00000B4021639F01FBA20BD0FB6F894FA9A27 +:1059F000F99A0FBE08950196272F0E94EA2C0C9465 +:105A0000E92CDC01CB01FC01F999FECF06C0F2BD07 +:105A1000E1BDF89A319600B40D9241505040B8F76C +:065A20000895F894FFCF89 +:105A2600640007000CFF0000003F643E10CC10A984 +:105A360010751041100101DF022808140A321E00F9 +:105A460002040507090B0C0E1011131517181A1C62 +:105A56001D1F2123242628292B2D2F30323435379C +:105A6600393B1F0F03764F5F6F7F496943790959A9 +:105A760053633149803F5D8B803FF8BF803FCAE169 +:105A8600803F73ED803FCAE1803FF8BF803F5D8B6A +:105A9600803F3149803F0000803FF16D7F3F75EACE +:105AA6007E3F4C827E3F833F7E3F84287E3F833FFE +:105AB6007E3F4C827E3F75EA7E3FF16D7F3F000060 +:105AC600803F3F4D36394305F604C00487041A0467 +:105AD60033044C04650401020304050607080900A3 +:00000001FF diff --git a/keyboard/planck/keymaps/charlie/compiled.hex b/keyboard/planck/keymaps/charlie/compiled.hex new file mode 100644 index 0000000000..335b49d898 --- /dev/null +++ b/keyboard/planck/keymaps/charlie/compiled.hex @@ -0,0 +1,1445 @@ +:100000000C947D020C94C1020C94C1020C94C102A8 +:100010000C94C1020C94C1020C94C1020C94C10254 +:100020000C94C1020C94C1020C945F140C94311511 +:100030000C9493220C94C1020C94C1020C94C10242 +:100040000C94C1020C9423030C94C1020C94C102C1 +:100050000C94C1020C94FB220C94C1020C94C102BA +:100060000C94C1020C94C1020C94C1020C94C10204 +:100070000C94C1020C94C1020C94C1020C94C102F4 +:100080000C94D40A0C94C1020C94C1020C94C102C9 +:100090000C94C1020C94C1020C94C1020C94C102D4 +:1000A0000C94C1020C94C1020C94C1029E15C0159F +:1000B000AE16C015AE1605162816AE167D1690168D +:1000C0007A197A19A919A919E819081A5E1B5E1B71 +:1000D000131A5E1BC31AC31A2A1B331B5E1B581B41 +:1000E000D01AD01AD01AD01AD01AD01AD01AD01AC0 +:1000F000D01AD01AD01AD01AD01AD01AD01AD01AB0 +:10010000E01AEE1AF51AFC1A061B07634236B79B73 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000018C9F +:1001D000028CF1A242070C0310022A041B074507F8 +:1001E0002D010B0116013E033B013B0327010B03CD +:1001F0001603400741071B032D022A032E021D018F +:100200001C011501290014001A0008001500170030 +:100210001C0018000C001200130002202A00040029 +:100220001600070009000A000B000D000E000F0069 +:10023000330034002B001D001B00060019000500D0 +:100240001100100036003700380028004C00E00094 +:100250000000E100E2002C000000500051005200BC +:100260004F0000004C0027001E001F00200021004E +:1002700022002300240025002600012012000A008D +:100280001600180017001B207000430044004000B7 +:10029000410042002B000420052006203A000720E0 +:1002A0006D006E0072006F0071000920360037008B +:1002B00015000B2003202C000C203B0008203C00E4 +:1002C00069000000290019201A2000000000000029 +:1002D000000000000000000000000000000000001E +:1002E00000000000000000000000000000001320DB +:1002F00014201520060000001620052000001720FD +:1003000000000000000000000D2000000E200F2063 +:100310001020112003202C00122000000000730088 +:100320000000000028035400680065002000500011 +:100330006C0061006E0063006B0020004B006500E4 +:10034000790062006F0061007200640000002C03FD +:100350004F007200740068006F006C0069006E004E +:1003600065006100720020004B00650079006200AA +:100370006F00610072006400730000000403090450 +:1003800009026D00040100A0FA0904000001030144 +:100390000100092111010001223F00070581030826 +:1003A000000A0904010001030102000921110100F2 +:1003B00001224D000705820308000A09040200011A +:1003C0000300000009211101000122360007058306 +:1003D0000308000A090403000103000000092111B9 +:1003E00001000122390007058403100001120110E9 +:1003F0000100000008EDFE6060010001020001053F +:10040000010906A101050719E029E7150025019555 +:1004100008750181020508190129059505750191E5 +:10042000029501750391010507190029771500252B +:1004300001957875018102C005010980A10185023D +:1004400016010026B7001A01002AB70075109501A1 +:100450008100C0050C0901A1018503160100269C3D +:10046000021A01002A9C02751095018100C0050145 +:100470000902A1010901A1000509190129051500B9 +:10048000250195057501810295017503810105011D +:10049000093009311581257F9502750881060938D3 +:1004A0001581257F950175088106050C0A3802150E +:1004B00081257F950175088106C0C005010906A147 +:1004C00001050719E029E715002501950875018147 +:1004D0000295017508810105081901290595057521 +:1004E0000191029501750391010507190029FF1576 +:1004F0000025FF950675088100C011241FBECFEFAF +:10050000DAE0DEBFCDBF04B603FE24C080911E0337 +:1005100090911F03A0912003B09121038730904B4D +:10052000A740B04BB9F410921E0310921F03109213 +:1005300020031092210314BE84B7877F84BF88E113 +:100540000FB6F89480936000109260000FBEE0E058 +:10055000F8E3099511E0A0E0B1E0E0E8F9E502C0B8 +:1005600005900D92A03CB107D9F713E0A0ECB1E0E3 +:1005700001C01D92AE31B107E1F70E94A5110C94A4 +:10058000BE2C0C9400000895089581E0089508950C +:100590000C94C4020C94C5020C94C7020E948828D3 +:1005A00023E030E0281B3109220F2093C401089575 +:1005B000282F2F9880918000211108C0877F809379 +:1005C000800010928D0010928C001BC08860809378 +:1005D0008000233019F48FEF9FEF0FC083E090E08D +:1005E000821B9109880F991F2FEF3FEFA90102C0CD +:1005F000569547958A95E2F7CA0190938D008093AE +:100600008C000C94CE020E94CE0284E08093C30141 +:100610001092C0010895279A2F988FEF9FEF909323 +:100620008700809386008AE08093800089E1809330 +:1006300081000E94F1270C9403030E940B036E9A21 +:10064000769A0C94C3021F920F920FB60F92112448 +:100650002F933F938F939F93EF93FF93E091C1016B +:10066000F091C201CF0101969093C2018093C10124 +:100670000090C30102C0F695E7950A94E2F7EF7384 +:100680008091C001823019F4E03251F404C081300D +:1006900039F4EF3329F480916F008D7F80936F00E0 +:1006A000F0E0E457FE4FE49121E031E0E29FC00129 +:1006B000E39F900D11240090C40102C09695879588 +:1006C0000A94E2F790938D0080938C00FF91EF9154 +:1006D0009F918F913F912F910F900FBE0F901F9080 +:1006E000189581E008950C94710308950C941D03EE +:1006F00080911502882309F448C08091D10190911E +:10070000D201009779F40E94C5229093D201809380 +:10071000D1018091D30190E0009771F48091D401D0 +:1007200090E00AC00E94D122209100013091010185 +:100730002817390740F329C00197880F991F880FA0 +:10074000991FFC01EB52FE4F608171818281938180 +:100750000E943A0AE091D30184E0E89FF00111245D +:10076000EB52FE4F60817181828193814FE050E0B6 +:100770000E94F20D8091D30190E001966091D40126 +:1007800070E00E946E2C8093D3010C94C8021092EA +:1007900017020C94070A0895089581E080931702C8 +:1007A0000C94CC03089508958F929F92AF92BF92BC +:1007B000EF92FF920F931F93CF93DF93CDB7DEB7E6 +:1007C000A3970FB6F894DEBF0FBECDBF7C01FC012E +:1007D00000811181C8010E94C220B8010E94D90580 +:1007E0008C01B7010E947303882309F4CCC1003245 +:1007F000F0E51F0741F4F7018281882309F458C00E +:100800000E94560EC0C10132F0E51F0741F4F70106 +:100810008281882309F44CC00E945F0EB4C1023269 +:10082000F0E51F0751F4F7018281882309F440C0E5 +:100830000E94520E8111F0CFE3CF0332F0E51F0783 +:1008400039F4F7018281882399F10E94CD039BC17D +:100850000432F0E51F0739F4F7018281882341F162 +:100860000E94C70390C10532F0E51F0749F4F70164 +:1008700082818823E9F0809117028111F1CFE5CFC1 +:100880000632F0E51F0739F4F7018281882381F0F1 +:100890000E94660E0AC00732F0E51F0749F4F7010F +:1008A0008281882329F00E94710E0E94D3036BC1BC +:1008B00080911702811105C0F70182818111CFC09B +:1008C00018C1003E110579F4F7018281882309F4EB +:1008D0004DC00E94070A81E0809316021092150213 +:1008E0001092D40150C1023E110559F4F7018281E2 +:1008F0008823E1F10E94070A109216021092150255 +:1009000042C1033E110591F4F7018281882371F100 +:100910000E94070A1092160281E08093150210923D +:10092000D3011092D2011092D1012DC102351105CF +:1009300059F4F7018281882309F425C180910001CF +:10094000909101010A970DC00135110579F4F70165 +:100950008281882309F417C18091000190910101DF +:100960000A9690930101809300010DC1409104010A +:1009700083E2EFE1F1E0DE01119601900D928A959C +:10098000E1F7F701808121E030E02C0F3D1F280FB7 +:10099000311DC9012091020130910301FC01E20FD8 +:1009A000F31F6081772767FD7095640F711D88279D +:1009B00077FD8095982F0E94902920E030E040E458 +:1009C00051E40E94F5284B015C01F701218184E08C +:1009D00090E0821B9109BC01882777FD8095982FB4 +:1009E0000E9490299B01AC01C501B4010E948D2891 +:1009F0009B01AC0160E070E080E090E40E94032B7A +:100A000020E030E04CED50E40E94A02A4B015C0154 +:100A1000F70182818823D1F04FE050E0C501B40195 +:100A20000E94F20D809116028823A1F08091D401DA +:100A300024E0829FF0011124EB52FE4F80829182CC +:100A4000A282B3828F5F8093D40104C0C501B40138 +:100A50000E943A0A0F3F110508F02ECF94C08091F2 +:100A6000D00181111FC0043130E5130709F051C0D6 +:100A70000E94750381E08093D0010E94C52290936B +:100A8000CF018093CE011092C7011092C90110923C +:100A9000C8011092CB011092CA011092CD011092A0 +:100AA000CC0171C08091CE019091CF010E94D122E2 +:100AB000883C910570F48091C701E82FF0E0EE0FBB +:100AC000FF1FE853FE4F118300838F5F8093C701A0 +:100AD0005AC0043880E5180721F00538104501F1A7 +:100AE0003AC0F7018281882341F01092C50182E06B +:100AF0001EC0043830E5130759F58091C5018111F6 +:100B000006C086E20E941E1886E20E94E61882E075 +:100B10001CC00438F0E51F0741F305381045D9F42F +:100B2000F7018281882331F01092C60180E20E9491 +:100B3000351929C08091C601811106C087E20E9443 +:100B40001E1887E20E94E61880E20E943C191BC032 +:100B50000538104529F381E08093C5018093C601D3 +:100B6000C701A3960FB6F894DEBF0FBECDBFDF91CD +:100B7000CF911F910F91FF90EF90BF90AF909F90FA +:100B80008F900C94CA0280E0A3960FB6F894DEBF53 +:100B90000FBECDBFDF91CF911F910F91FF90EF90CE +:100BA000BF90AF909F908F90089580E090E008955F +:100BB00008959CE0799FF001112490E3899FE00D56 +:100BC000F11D1124E60FF11DEE0FFF1FEC5FFD4F2D +:100BD000859194910895880F991FFC01E45BFF4F64 +:100BE000859194910895880F991FFC01E453FE4F5D +:100BF0008591949108950F931F93CF93DF93EC0108 +:100C0000811521E39207A0F5C11580E3D80708F00C +:100C1000D7C0C83ED105D8F4C03ED10508F007C200 +:100C2000C83AD10578F4C53AD10508F06AC0C13098 +:100C3000D10509F463C008F4F7C1C430D10508F048 +:100C4000F6C1F2C1CB3BD10508F466C0EDC1C115B8 +:100C500090E2D90708F0AFC0C11521E0D20708F033 +:100C6000E6C1C03FD10508F4DFC18E0110651FC287 +:100C7000C03880E5D80700F5C03790E5D90708F0FF +:100C8000A3C0C11520E5D20709F4ACC050F4CE01D1 +:100C9000905480319F4008F0C7C1DF708E01106A08 +:100CA00006C2C13080E5D80709F4AEC0C43190E572 +:100CB000D90708F4AFC0B8C1C33820E5D20709F49A +:100CC0008EC050F4C13890E5D90709F482C008F00D +:100CD00083C000E011EDEBC1C03181E5D80708F415 +:100CE000A3C1C11597E5D90708F436C1CE019057C5 +:100CF0008115904108F098C1DF7093C101E010E0C8 +:100D0000D6C1C53AD10509F494C1C63AD10509F056 +:100D100093C102E810E4CBC1C83AD10509F48FC1F0 +:100D2000C93AD10509F48EC1CA3AD10509F48DC179 +:100D3000CB3AD10509F48CC1CC3AD10509F48BC169 +:100D4000CD3AD10509F48AC1C03BD10509F489C166 +:100D5000CE3AD10509F488C1CF3AD10509F487C14B +:100D6000C13BD10509F486C1C23BD10509F485C157 +:100D7000C33BD10509F484C1C43BD10509F483C147 +:100D8000C53BD10509F482C1C63BD10509F481C137 +:100D9000C73BD10509F480C1C83BD10509F47FC127 +:100DA000C93BD10509F47EC1CA3BD10509F47DC117 +:100DB00000E014E47CC1CE019F700E94F30578C16D +:100DC000DD278E01106C73C1CF70DD278E01146D8D +:100DD0006EC100E010ED6BC100E012ED68C100E0F3 +:100DE00013ED65C10E94C91B0E94070A0E94CB0334 +:100DF0008FEF94E32CE0815090402040E1F700C059 +:100E000000000E94202353C18091F20281608093F0 +:100E1000F2024DC10E948123811102C00E945D2314 +:100E20000E94942390E090931D0380931C03C23092 +:100E300080E5D80721F480911C03816086C0C4300E +:100E400090E5D90721F480911C0382607EC0C630F2 +:100E500020E5D20721F480911C03846076C0C8305D +:100E600080E5D80719F480911C0327C0CA3090E5AB +:100E7000D90721F480911C03806167C0CC3020E544 +:100E8000D20721F480911C0380625FC0CE3080E5E0 +:100E9000D80721F480911C03806457C0C03190E5CD +:100EA000D90721F480911C0380684FC0C23120E52E +:100EB000D20729F480911C038460886046C0C33047 +:100EC00080E5D80721F480911C038E7F3EC0C53099 +:100ED00090E5D90721F480911C038D7F36C0C7307F +:100EE00020E5D20721F480911C038B7F2EC0C930EE +:100EF00080E5D80719F480911C0326C0CB3090E51B +:100F0000D90721F480911C038F7E1FC0CD3020E5CE +:100F1000D20721F480911C038F7D17C0CF3080E56C +:100F2000D80721F480911C038F7B0FC0C13190E55D +:100F3000D90721F480911C038F7707C0C331D045B6 +:100F400031F480911C038B7F877F80931C038091F9 +:100F50001C030E949823ABC08D2F99278F7099276F +:100F600081309105D9F49E012370332702C0880F88 +:100F7000991F2A95E2F79C688E0144E0000F111F2B +:100F80004A95E1F700271370802B912B53E0CC0F8B +:100F9000DD1F5A95E1F7C076DD272FC0823091051D +:100FA00031F4DC2FCC278E01016F106A80C08330B2 +:100FB000910569F4CE018370992701E010E002C029 +:100FC000000F111F8A95E2F7C8019C680FC084309A +:100FD0009105B9F4CE018370992701E010E002C0B9 +:100FE000000F111F8A95E2F7C8019A6823E0CC0F21 +:100FF000DD1F2A95E1F7C07ED7708C010C2B1D2BCD +:1010000056C08530910531F4DC2FCC278E01046F5A +:10101000106A4DC0069709F04AC0CF71DD27DC2F5A +:10102000CC278E01106243C000E010E040C08E016A +:101030003EC001E810E43BC003E810E438C002EE13 +:1010400014E435C009EE14E432C00AEE14E42FC0F3 +:1010500005EB14E42CC006EB14E429C007EB14E400 +:1010600026C00CEC14E423C00DEC14E420C003E80B +:1010700015E41DC00AE815E41AC002E915E417C01A +:1010800004E915E414C001E216E411C003E216E419 +:101090000EC004E216E40BC005E216E408C006E246 +:1010A00016E405C007E216E402C00AE216E4C8012D +:1010B000DF91CF911F910F9108959CE0799FF001EE +:1010C000112490E3899FE00DF11D1124E60FF11D1D +:1010D000EE0FFF1FEC5FFD4F85919491803E9105CF +:1010E000E0F4803C910558F58133910509F46FC017 +:1010F00048F48932910509F463C08A32910509F4F4 +:101100006DC072C089339105E9F082389105D1F044 +:101110008533910509F44DC067C0833E910581F187 +:1011200038F4803E9105B9F0823E9105D9F05CC05B +:10113000863E910561F1873E9105A1F155C00E945F +:10114000EB05089520911C0320FD02C021FF4CC037 +:1011500080EE90E049C080911C0380FFF9CF89E3C5 +:1011600090E042C080911C0382FF0EC080911C035E +:1011700084FF03C080E090E037C083EE90E034C08D +:1011800080911C0382FFF2CF82EE90E02DC080910F +:101190001C0383FF0BC080911C0384FDEBCF87EE03 +:1011A00090E022C080911C0383FFF5CF86EE90E093 +:1011B0001BC080911C0385FF07C089E290E014C02A +:1011C00080911C0385FFF9CF85E390E00DC08091ED +:1011D0001C0386FF07C08AE290E006C080911C03D2 +:1011E00086FFF9CF81E390E00E94FB0508950C94FF +:1011F000CC02E82FF0E0E25BFE4F8081E82FEF7039 +:10120000F0E082958F7021E030E0A90102C0440F28 +:10121000551F8A95E2F740A308950F931F93CF932C +:10122000DF9385B7806885BF85B7806885BFC3E0D9 +:10123000D0E001E010E0FE01E25BFE4F8081E82F8C +:10124000EF70F0E021A182958F70A80102C0440FD9 +:10125000551F8A95E2F7CA01822B81A38C2F0E9429 +:10126000F908219740F78BE090E061E070E0FC0125 +:10127000EE5BFE4F2081E22FEF70F0E042A122955D +:101280002F70DB0102C0AA0FBB1F2A95E2F79D0158 +:10129000242B22A3019758F7DF91CF911F910F9133 +:1012A0000C947603EF92FF920F931F93CF93DF93EB +:1012B00000E212E0C3E0EE24E394F12CD5E08C2FA1 +:1012C0000E94F9088BE090E040E050E0FC01EE5B0A +:1012D000FE4F6081E62FEF70F0E020A130E06295D4 +:1012E0006F7002C0359527956A95E2F720FD09C019 +:1012F0009701082E02C0220F331F0A94E2F7422BF7 +:10130000532B019718F7F801929182918F0184175E +:10131000950721F051834083D09305018C2F0E94C3 +:10132000F908C15060F68091050187FD2CC08150FD +:10133000809305018F3F39F08FE99FE00197F1F726 +:1013400000C0000020C080911E0290911F02909367 +:1013500027028093260280911C0290911D02909397 +:1013600025028093240280911A0290911B0290938F +:101370002302809322028091180290911902909387 +:101380002102809320020E94780381E0DF91CF91B7 +:101390001F910F91FF90EF900895E82FF0E0EE0F6E +:1013A000FF1FE05EFD4F80819181089508950F93A6 +:1013B0001F93CF9308E212E0C0E0F801929182916E +:1013C0008F010E943D22C80FF2E000321F07A9F7EB +:1013D0008C2FCF911F910F9108950E94812381112D +:1013E00002C00E945D230E94A623809307033E9AB9 +:1013F000809171008D7F8093710082E080939000D6 +:101400008AE18093910081E080932A02089580917F +:101410002A02811102C00E94ED0910927A021092F4 +:101420007902809171008D7F80937100809190008E +:101430008F738093900010923C0210923B021092A6 +:10144000730210927402109275021092760210923A +:10145000720210927102E1E5F2E0A1E4B2E01192B1 +:101460001192119211921D921D9282E0E137F807BC +:10147000B1F70895CF92DF92EF92FF920F931F93EF +:10148000CF93DF9320913B02222309F484C06B01A8 +:101490007C0180912A02811102C00E94ED0901E7BE +:1014A00012E0C7E0D0E0A7019601F8019291829185 +:1014B000729162918F010E94F128811131C0FE0169 +:1014C000EE0FFF1FEE0FFF1FEF5AFD4F108211822C +:1014D00012821382DE01AA0FBB1FAF5BBD4F1196B4 +:1014E0001C921E92C730D105E9F0219644815581A6 +:1014F000668177814083518362837383148215826E +:101500001682178212968D919C91139711969C9337 +:101510008E9313961C921E92129734961296E2CFD7 +:10152000219708F68091790290917A02019797FDB0 +:1015300005C090937A028093790204C010927A02D7 +:10154000109279028091790290917A02209177022B +:10155000309178022817390724F0109278021092FF +:101560007702892BC1F4809171008D7F8093710087 +:10157000809190008F73809390001092730210926C +:1015800074021092750210927602109272021092FA +:10159000710210923B02DF91CF911F910F91FF904A +:1015A000EF90DF90CF9008951F920F920FB60F9299 +:1015B00011244F925F926F927F928F929F92AF927F +:1015C000BF92CF92DF92EF92FF922F933F934F9370 +:1015D0005F936F937F938F939F93AF93BF93CF93BB +:1015E000DF93EF93FF9380913B02882309F49BC123 +:1015F000C0917902D0917A021C161D060CF093C19D +:1016000040902B0250902C0260902D0270902E0280 +:1016100020E030E0A901C301B2010E949C2A181603 +:101620000CF065C0C130D10509F452C08091770239 +:1016300090917802BE010E946E2C7C0190937802FA +:101640008093770280903D0290903E02A0903F02EE +:10165000B090400220E030E040E85FE3C501B40113 +:101660000E948D2860933D0270933E0280933F025A +:1016700090934002F701EE0FFF1FEE0FFF1FEF5A8E +:10168000FD4FA301920160817181828193810E944B +:10169000F52820E030E040E05EE30E94A02A9B01B4 +:1016A000AC01C501B4010E949C2A18168CF4C70134 +:1016B0000196BE010E946E2C90937802809377026F +:1016C00010923D0210923E0210923F021092400290 +:1016D000E0917702F0917802EE0FFF1FEE0FFF1FEF +:1016E000EF5AFD4F6081718182819381D0C0C0909B +:1016F0007302D0907402E0907502F090760220E0C0 +:1017000030E0A901C701B6010E94F1282197882382 +:1017100009F4A2C0FE01EE0FFF1FEE0FFF1FEF5AEC +:10172000FD4F80809180A280B380A5019401C70104 +:10173000B6010E94F12887FF31C0A501940160E045 +:1017400070E08CED93EC0E94F52820E030E040E45E +:1017500051E40E94F52820E030E040E05FE30E9481 +:10176000A02A9B01AC0160E070E080E090E40E9460 +:10177000032B9B01AC01C501B4010E94A02A9B016F +:10178000AC01C701B6010E94F12887FF07C0A7017D +:10179000960160E070E08CED93E439C0A5019401FE +:1017A000C701B6010E949C2A18160CF055C0A5016D +:1017B000940160E070E08CED93E40E94F52820E055 +:1017C00030E040E451E40E94F52820E030E040E0C1 +:1017D0005FE30E94A02A9B01AC0160E070E080E022 +:1017E00090E40E94032B9B01AC01C501B4010E944F +:1017F000A02A9B01AC01C701B6010E949C2A1816C1 +:101800005CF5A701960160E070E08CED93EC0E941E +:10181000F52820E030E040E451E40E94F52820E083 +:1018200030E040E05FE30E94A02A9B01AC0160E051 +:1018300070E080E090E40E94032B9B01AC01C701A3 +:10184000B6010E94A02A6093730270937402809381 +:1018500075029093760213C0FE01EE0FFF1FEE0F8C +:10186000FF1FEF5AFD4F80819181A281B381809348 +:10187000730290937402A0937502B0937602609104 +:10188000730270917402809175029091760220919A +:101890002802309129022F3F4FEF340731F02F5F9C +:1018A0003F4F30932902209328020E947C0E6B0147 +:1018B0007C0120E034E244EF51E40E94F12887FFEC +:1018C00008C086EFC82E88E2D82E84EFE82E81E487 +:1018D000F82E20E030E040E051E4C701B6010E945C +:1018E000A02A9B01AC0160E074E284E79BE40E94C3 +:1018F000F5286B017C010E94622970939700609328 +:101900009600209106013091070140910801509105 +:101910000901C701B6010E94A02A0E9462297093A2 +:1019200099006093980080913C02882309F433C1A8 +:10193000C0903702D0903802E0903902F0903A021D +:1019400020E030E0A901C701B6010E949C2A1816C8 +:10195000D4F580912802909129028F3F2FEF9207B2 +:1019600029F001969093290280932802C701B601BD +:101970000E947C0E20E030E040E051E40E94A02A6A +:101980009B01AC0160E074E284E79BE40E94F528CF +:101990006B017C010E94622970939700609396000E +:1019A00020910601309107014091080150910901F1 +:1019B000C701B6010E94A02A0E9462297093990073 +:1019C0006093980008C010929700109296001092B1 +:1019D00099001092980060913102709132026F5F0D +:1019E0007F4F7093320260933102209196003091C4 +:1019F000970080E090E0232BF1F0C0919600D09109 +:101A000097000E948E296B017C01BE0180E090E06E +:101A10000E948E299B01AC016091330270913402C7 +:101A200080913502909136020E94F52820E03FEF28 +:101A30004FE757E410C00E948E296B017C0120E023 +:101A400030EE4FEF54E46091330270913402809194 +:101A50003502909136020E94A02A9B01AC01C70179 +:101A6000B6010E949C2A87FD96C080912F028F5F4D +:101A700080932F0290E0209103033091040382179A +:101A80009307A0F080910E03882319F010922F0283 +:101A90000DC0809171008D7F8093710080919000C6 +:101AA0008F738093900010923C027DC08091300231 +:101AB000C0912F02811128C0C0900803D090090363 +:101AC000E0900A03F0900B0320E030E0A901C70189 +:101AD000B6010E949C2A1816BCF481E08093300263 +:101AE00010923702109238021092390210923A0284 +:101AF000C0923302D0923402E0923502F092360264 +:101B0000C150C0932F0243C010923002109229029C +:101B100010922802E0910503F091060348E0C49F6B +:101B2000E00DF11D112480819181A281B381809308 +:101B3000370290933802A0933902B0933A0220E022 +:101B400030E040E85EE364817581868197810E9480 +:101B5000A02A6B017C0180910A01682F70E080E06F +:101B600090E00E948E2920E030E048EC52E40E9490 +:101B7000F5289B01AC01C701B6010E94A02A609321 +:101B800033027093340280933502909336021092A0 +:101B90003202109231028091070380FD04C010923E +:101BA0003C0210923B02FF91EF91DF91CF91BF91E8 +:101BB000AF919F918F917F916F915F914F913F91E5 +:101BC0002F91FF90EF90DF90CF90BF90AF909F90BC +:101BD0008F907F906F905F904F900F900FBE0F90FF +:101BE0001F901895CF92DF92EF92FF92CF93DF93E1 +:101BF0006B017C01EA0180912A02811102C00E94DE +:101C0000ED098091070380FF46C080917902909191 +:101C10007A0208970CF03FC0809171008D7F80930D +:101C2000710080913C0281110E94070A81E080933B +:101C30003B02109229021092280220E030E0A90114 +:101C4000C701B6010E949C2A1816DCF48091790223 +:101C500090917A02FC01EE0FFF1FEE0FFF1FEF5A6B +:101C6000FD4FC082D182E282F382FC01EE0FFF1FA2 +:101C7000EF5BFD4FD183C083019690937A028093EE +:101C80007902809171008260809371008091900050 +:101C9000806880939000DF91CF91FF90EF90DF906C +:101CA000CF90089580910703817008958091070374 +:101CB0008160809307030E94AA230C94D203809131 +:101CC00007038E7F809307030C94AA2380917B02E5 +:101CD00090E0019666E070E00E946E2C80937B029B +:101CE000089580917B0290E0019766E070E00E9489 +:101CF0006E2C80937B0208958F929F92AF92BF9239 +:101D0000CF92DF92EF92FF920F931F93CF93DF93C7 +:101D10006B017C01C0912802D0912902BE0180E0B4 +:101D200090E00E948E294B015C01A701960160E0C2 +:101D300070E08CE594E40E94F5289B01AC01C5019C +:101D4000B4010E94A02A0E94622920917B022330C4 +:101D500009F473C028F4222351F02130E9F02CC19A +:101D6000243009F4A0C0253009F4E0C025C180E08A +:101D700090E0A0E0BFE38093060190930701A09359 +:101D80000801B093090110922B0210922C021092BC +:101D90002D0210922E0210C110922B0210922C02D2 +:101DA00010922D0210922E026431710540F46A30B7 +:101DB000710560F520E030E040E85EE32BC0693C4F +:101DC000710508F0AAC080E090E00E948E2920E012 +:101DD00030E040EA51E40E948C2820E030E044E307 +:101DE00053E40E94F5289B01AC010E94A02A20E048 +:101DF00030E040E05EE30E94A02A9B01AC0160E07D +:101E000070E080E09EE30E948C2844C020E030E037 +:101E100040E05FE3C701B6010E94A02A6B017C018C +:101E200080E090E0A0E0BEE380930601909307017C +:101E3000A0930801B0930901BFC010922B02109229 +:101E40002C0210922D0210922E024AE0469F900121 +:101E5000479F300D1124C90168EB7BE00E945A2C8A +:101E6000BC016C5D754077FF03C071956195710988 +:101E7000882777FD8095982F0E9490292EE333ECD8 +:101E80004EE259E30E94A02A20E030E040EC5EE3FD +:101E90000E948D28609306017093070180930801CA +:101EA0009093090189C010922B0210922C0210927B +:101EB0002D0210922E02CE0183709927892BE1F01A +:101EC000BE016170772780E090E00E948E2920E0BB +:101ED00030E040E05EE30E94A02A20E030E040E4F1 +:101EE0005FE30E948D286093060170930701809341 +:101EF0000801909309010CC080E090E0A0E0BFE3EE +:101F00008093060190930701A0930801B093090103 +:101F1000C770DD27CD2B09F04FC01092060110923B +:101F20000701109208011092090146C010922B027D +:101F300010922C0210922D0210922E0200E010E05E +:101F400020E03FE30093060110930701209308016E +:101F5000309309016739710578F180E090E00E94C3 +:101F60008E2920E030E047E153E40E948C2820E0F5 +:101F700030E04AE754E40E94F52820E030E048E4ED +:101F800052E40E94A02A20E030E040EA51E40E949E +:101F9000D2290E945D29660F771F660F771FFB010C +:101FA000EE5AFE4F2081318142815381C701B60133 +:101FB0000E94A02A6B017C01C701B601DF91CF917D +:101FC0001F910F91FF90EF90DF90CF90BF90AF9057 +:101FD0009F908F90089580918C020895CF93DF9306 +:101FE00000D01F92CDB7DEB79C01809113038430DF +:101FF00019F593E099833B832A839093E9008FEF4F +:102000009091E800815095FD06C095ED9A95F1F705 +:1020100000008111F5CF8091E80085FF0DC040E000 +:1020200050E063E070E0CE0101960E944F12809173 +:10203000E8008E778093E8000F900F900F90DF916B +:10204000CF910895CF93DF9300D01F92CDB7DEB725 +:1020500020911303243021F522E029839B838A8376 +:1020600083E08093E9008FEF9091E800815095FD27 +:1020700006C095ED9A95F1F700008111F5CF80919A +:10208000E80085FF0DC040E050E063E070E0CE0165 +:1020900001960E944F128091E8008E778093E800AD +:1020A0000F900F900F90DF91CF910895209113031F +:1020B0002430F1F422E02093E9002FEF3091E80082 +:1020C000215035FD06C035ED3A95F1F7000021119C +:1020D000F5CF2091E80025FF0BC040E050E065E01F +:1020E00070E00E944F128091E8008E778093E800A4 +:1020F0000895CF93DF93EC0190911303943009F08E +:1021000046C0809115018823D9F08091160188235B +:10211000B9F09093E9008FEF9091E800815095FD20 +:1021200006C095E19A95F1F700008111F5CF8091F5 +:10213000E80085FF2CC040E050E060E170E017C08F +:1021400081E08093E9008FEF9091E800815095FD48 +:1021500006C095ED9A95F1F700008111F5CF8091B9 +:10216000E80085FF14C040E050E068E070E0CE0178 +:102170000E944F128091E8008E778093E80080E102 +:10218000FE01ACE7B2E001900D928A95E1F7DF9194 +:10219000CF91089580911203811109C00E94E41328 +:1021A0000E9441148091E20084608093E2000895CF +:1021B000109212030895089508950C94882242E025 +:1021C00061EC81E00E945E1342E061EC82E00E94DB +:1021D0005E1342E061EC83E00E945E1342E161EC39 +:1021E00084E00C945E1380911503833009F455C08C +:1021F00030F4813071F0823009F48EC008958A3055 +:1022000009F47AC08B3009F460C0893009F09CC0B1 +:1022100020C080911403813A09F096C08091E800B3 +:10222000877F8093E8008091180390911903892B90 +:1022300021F460E18CE792E003C060E080E090E090 +:1022400070E00E949A128091E8008B778093E800FA +:10225000089580911403813209F076C080911803AB +:1022600090911903009719F0039709F06DC08091C0 +:10227000E800877F8093E8008091E80082FD05C038 +:10228000809113038111F8CF5FC08091F10080939A +:102290008C028091E8008B7753C080911403813ABF +:1022A00009F052C08091180390911903892B09F00D +:1022B0004BC08091E800877F8093E8008091E80020 +:1022C00080FFFCCF8091150136C0809114038132CC +:1022D000D9F58091180390911903892BA9F5809164 +:1022E000E800877F8093E8000E9493138091160393 +:1022F000809315010C94C91B80911403813221F540 +:102300008091E800877F8093E8000E94931380917A +:10231000170380938D02089580911403813AA1F4EC +:102320008091E800877F8093E8008091E80080FF3B +:10233000FCCF80918D028093F1008091E8008E7730 +:102340008093E8000C949313089584B7877F84BF2B +:1023500088E10FB6F89480936000109260000FBE81 +:1023600090E080E80FB6F89480936100909361004C +:102370000FBE0E9436170E94E4130E944114809100 +:10238000E20084608093E20078940E94C7160E9465 +:1023900038178BE091E00E94E2168091130385309C +:1023A00069F40E944922809111038823B1F30E94AD +:1023B0007722882391F30E943912EFCF0E944017B1 +:1023C000ECCF292F332723303105C9F064F42130B5 +:1023D000310581F02230310509F043C08DE690E0EF +:1023E00020E833E042C021323105F1F022323105DC +:1023F00041F137C082E190E02DEE33E036C09927FD +:102400008130910541F08230910541F0892B49F5E9 +:10241000ECE7F3E005C0EEE4F3E002C0E4E2F3E051 +:10242000849190E09F0121C06430D8F4E62FF0E061 +:10243000EE0FFF1FE255FE4F2081318189E090E0D1 +:1024400014C0643070F470E0FB01EE0FFF1FEA551A +:10245000FE4F20813181FB01EE55FE4F808190E0DF +:1024600004C080E090E020E030E0FA013183208376 +:10247000089580E189BD82E189BD09B400FEFDCFE8 +:102480008091D8008F7D8093D8008091E000826099 +:102490008093E0008091E00081FDFCCF0895CF9211 +:1024A000DF92EF92FF920F931F93CF93DF93EC0194 +:1024B0008B016A010E94B213811133C0C114D1048F +:1024C00039F0F60180819181081B190BC80FD91FC3 +:1024D000E12CF12C0115110519F18091E80085FD21 +:1024E00016C08091E8008E778093E800C114D10473 +:1024F00049F0F60180819181E80EF91EF182E082B7 +:1025000085E00FC00E94B213882321F30AC089918D +:102510008093F10001501109FFEFEF1AFF0ADACFA3 +:1025200080E0DF91CF911F910F91FF90EF90DF90AE +:10253000CF90089520911A0330911B032617370777 +:1025400048F06115710539F42091E8002E77209349 +:10255000E80001C0B90140E061157105A9F12091C1 +:102560001303222309F443C0253009F442C020910B +:10257000E80023FD40C02091E80022FD32C02091F8 +:10258000E80020FFE9CF4091F3002091F20030E015 +:10259000342BFC01CF016115710559F0283031054C +:1025A00040F481918093F100615071092F5F3F4F9A +:1025B000F1CF41E02830310509F040E02091E800FA +:1025C0002E772093E800C8CF4111C9CF0AC080916F +:1025D0001303882361F0853061F08091E80083FD6A +:1025E0000AC08091E80082FFF2CF80E0089582E087 +:1025F000089583E0089581E0089520911A033091B1 +:102600001B032617370748F06115710539F420912F +:10261000E8002E772093E80001C0B901FC0120E01A +:102620006115710591F180911303882309F440C06D +:10263000853009F43FC08091E80083FD3DC0809162 +:10264000E80082FD2FC08091E80080FFE9CF209153 +:10265000F3008091F20090E0922B6115710559F022 +:102660008830910540F424912093F1003196615017 +:1026700071090196F2CF21E0089709F020E08091DE +:10268000E8008E778093E800CBCF2111CCCF0AC031 +:1026900080911303882361F0853061F08091E80018 +:1026A00083FD0AC08091E80082FFF2CF80E00895A8 +:1026B00082E0089583E0089581E00895982F97308F +:1026C00058F59093E900981739F07091EC0020913B +:1026D000ED005091F00003C0242F762F50E021FF31 +:1026E00019C03091EB003E7F3093EB003091ED004C +:1026F0003D7F3093ED003091EB0031603093EB0083 +:102700007093EC002093ED005093F0002091EE00C8 +:1027100027FF07C09F5FD3CF8F708093E90081E0D0 +:10272000089580E008958091140387FF11C080917F +:10273000E80082FD05C0809113038111F8CF11C01C +:102740008091E8008B770BC080911303882349F0B8 +:102750008091E80080FFF8CF8091E8008E77809329 +:10276000E80008952091E4003091E50095E640915D +:10277000EC00842F817040FF22C08091E80080FD32 +:102780001CC080911303882391F0853091F08091D3 +:10279000EB0085FD10C04091E4005091E500421728 +:1027A000530729F39A01915011F784E0089582E0CC +:1027B000089583E0089581E0089580E008954091B0 +:1027C000E80042FFDECF08950E9452140E945A147E +:1027D000E0EEF0E0808181608083E8EDF0E08081D0 +:1027E0008F77808319BCA7EDB0E08C918E7F8C939E +:1027F00080818F7E80831092120308950F931F9320 +:10280000CF93DF930E9452140E945A14C8EDD0E077 +:1028100088818F77888388818068888388818F7D8D +:10282000888319BC1092130310920F0310921103A6 +:102830001092100300EE10E0F80180818B7F8083FE +:1028400088818160888342E060E080E00E945E13BE +:10285000E1EEF0E080818E7F8083E2EEF0E0808127 +:1028600081608083808188608083F80180818E7F91 +:102870008083888180618883DF91CF911F910F9140 +:102880000895E8EDF0E080818F7E8083E7EDF0E051 +:1028900080818160808384E082BF81E08093120325 +:1028A0000C94FE13E8EDF0E080818E7F808310921F +:1028B000E20008951092DA001092E10008951F924C +:1028C0000F920FB60F9211242F933F934F935F9364 +:1028D0006F937F938F939F93AF93BF93EF93FF93E8 +:1028E0008091E10082FF0BC08091E20082FF07C06F +:1028F0008091E1008B7F8093E1000E94C616809159 +:10290000DA0080FF1FC08091D80080FF1BC080913B +:10291000DA008E7F8093DA008091D90080FF0DC0AD +:1029200080E189BD82E189BD09B400FEFDCF81E06F +:10293000809313030E94CA1005C019BC10921303A0 +:102940000E94D8108091E10080FF19C08091E200C0 +:1029500080FF15C08091E2008E7F8093E20080911D +:10296000E20080618093E2008091D80080628093D1 +:10297000D80019BC85E0809313030E94DC1080917D +:10298000E10084FF30C08091E20084FF2CC080E130 +:1029900089BD82E189BD09B400FEFDCF8091D800D8 +:1029A0008F7D8093D8008091E1008F7E8093E1003D +:1029B0008091E2008F7E8093E2008091E20081604E +:1029C0008093E20080910F03882311F084E007C018 +:1029D0008091E30087FD02C081E001C083E0809325 +:1029E00013030E94DD108091E10083FF29C08091D4 +:1029F000E20083FF25C08091E100877F8093E100A2 +:102A000082E08093130310920F038091E1008E7F88 +:102A10008093E1008091E2008E7F8093E2008091BC +:102A2000E20080618093E20042E060E080E00E948A +:102A30005E138091F00088608093F0000E94DB10AC +:102A4000FF91EF91BF91AF919F918F917F916F9186 +:102A50005F914F913F912F910F900FBE0F901F905C +:102A600018951F920F920FB60F9211242F933F9338 +:102A70004F935F936F937F938F939F93AF93BF9386 +:102A8000CF93DF93EF93FF93C091E900CF708091D4 +:102A9000EC00D82FD17080FDD0E81092E900809131 +:102AA000F000877F8093F00078940E947515109253 +:102AB000E9008091F00088608093F000CD2BCF700A +:102AC000C093E900FF91EF91DF91CF91BF91AF915A +:102AD0009F918F917F916F915F914F913F912F9136 +:102AE0000F900FBE0F901F9018951F93CF93DF93F9 +:102AF000CDB7DEB7AA970FB6F894DEBF0FBECDBF35 +:102B0000E4E1F3E088E08E0F9091F10091938E1351 +:102B1000FBCF0E94F3108091E80083FF1FC18091DA +:102B2000140390911503492F50E04A30510508F0E5 +:102B300015C1FA01EA5AFF4F0C94822C803881F0BB +:102B4000823809F00BC1809118038F708093E900DF +:102B50008091EB0085FB882780F91092E90006C080 +:102B60008091100390911103911182609091E8007F +:102B7000977F9093E8008093F1001092F100C8C015 +:102B8000282F2D7F09F0EAC0882319F0823061F0E8 +:102B9000E5C080911603813009F0E0C0933009F060 +:102BA00080E0809311032BC080911603811127C010 +:102BB000809118038F7009F4D1C08093E9002091AF +:102BC000EB0020FF1CC0933021F48091EB00806269 +:102BD00014C09091EB0090619093EB0021E030E005 +:102BE000A90102C0440F551F8A95E2F74093EA00FD +:102BF0001092EA008091EB0088608093EB001092C5 +:102C0000E9008091E800877F86C08111A7C01091FC +:102C100016031F778091E3008078812B8093E30077 +:102C20008091E800877F8093E8000E949313809151 +:102C3000E80080FFFCCF8091E30080688093E30090 +:102C4000111102C082E001C083E08093130386C0AB +:102C50008058823008F082C080911603909117034B +:102C60008C3D53E0950779F583E08A838AE2898376 +:102C70004FB7F894DE01139620E03EE051E2E32FD7 +:102C8000F0E050935700E49120FF03C0E295EF700D +:102C90003F5FEF708E2F90E0EA3010F0C79601C0D2 +:102CA000C0968D939D932F5F243149F74FBF80913C +:102CB000E800877F8093E8006AE270E0CE01019629 +:102CC0000E949A1214C0AE014F5F5F4F60911803CB +:102CD0000E94E111BC01009709F440C09091E80006 +:102CE000977F9093E80089819A810E94FD128091DC +:102CF000E8008B778093E80031C0803879F58091C7 +:102D0000E800877F8093E80080910F038093F100B3 +:102D10008091E8008E778093E8000E9493131EC094 +:102D200081111CC0909116039230C0F48091E8008C +:102D3000877F8093E80090930F030E949313809104 +:102D40000F03811106C08091E30087FD02C081E07E +:102D500001C084E0809313030E94DF108091E8009B +:102D600083FF0AC08091E800877F8093E80080910C +:102D7000EB0080628093EB00AA960FB6F894DEBF5A +:102D80000FBECDBFDF91CF911F9108950895CF93CE +:102D9000809113038823A1F0C091E900CF70909136 +:102DA000EC00892F817090FD80E8C82B1092E9001B +:102DB0008091E80083FD0E947515CF70C093E900F3 +:102DC000CF91089590939302809392020895E09199 +:102DD0009202F0919302309721F00190F081E02D62 +:102DE000099480E00895E0919202F0919302309767 +:102DF00021F00280F381E02D09940895E091920280 +:102E0000F0919302309721F00480F581E02D099430 +:102E1000089520919002309191028217930771F0EA +:102E20009093910280939002E0919202F09193022C +:102E3000309721F00680F781E02D099408952091C4 +:102E40008E0230918F028217930771F090938F0258 +:102E500080938E02E0919202F0919302309721F0DC +:102E60000084F185E02D0994089508950C94351798 +:102E70000E94BC220E940D090E9442230C94F1275B +:102E80005F926F927F928F929F92AF92BF92CF92FA +:102E9000DF92EF92FF920F931F93CF93DF9300D0B7 +:102EA00000D01F92CDB7DEB70E9452099DE9C92E0E +:102EB00092E0D92E03E010E0AA24A394B12C502E66 +:102EC000802F0E94CD094C01F601729062906F0133 +:102ED0006826792661147104A1F40150110978F76C +:102EE0008FEF89838A831B820E94C5228160782F9D +:102EF0009D838C8349815A816B818D810E94F0175B +:102F000038C08091F20281FD0E94D6092BE030E0AA +:102F10007501022E02C0EE0CFF1C0A94E2F7C701F5 +:102F200086219721892B09F129835A828E209F209F +:102F300091E0892809F490E09B830E94C52281607A +:102F4000782F9D838C8349815A816B818D810E946A +:102F5000F017000F111FF801EB56FD4F8081918192 +:102F6000E826F926F182E08204C02150310980F67A +:102F7000B4CF0E942925109194020E94E7161817D9 +:102F8000D1F00E94E716809394020F900F900F905B +:102F90000F900F90DF91CF911F910F91FF90EF90C5 +:102FA000DF90CF90BF90AF909F908F907F906F9069 +:102FB0005F900C94F7080F900F900F900F900F9068 +:102FC000DF91CF911F910F91FF90EF90DF90CF9005 +:102FD000BF90AF909F908F907F906F905F9008957B +:102FE000CF93DF93CDB7DEB72B970FB6F894DEBF44 +:102FF0000FBECDBF4F83588769877A878B87DE01E5 +:10300000119686E0FD0111928A95E9F785E0FE01AF +:10301000379601900D928A95E1F749815A816B812B +:103020007C818D819E810E94671E2B960FB6F8943D +:10303000DEBF0FBECDBFDF91CF910895CF93882320 +:1030400009F4C2C0C82F823859F40E94E71681FDE6 +:10305000BBC089E30E9441210E940E2289E30CC07B +:10306000833879F40E94E71680FDAEC083E50E94A4 +:1030700041210E940E2283E50E948321CF910C946E +:103080000E22843859F40E94E71682FD9DC087E421 +:103090000E9441210E940E2287E4EECF8CEF8C0F1C +:1030A000813A48F48C2F0E94592781118DC08C2FB2 +:1030B0000E944121E3CF80E28C0F883048F4C77032 +:1030C00081E001C0880FCA95EAF70E94C721D6CFD8 +:1030D0008BE58C0F833078F4C53A29F0C63A31F08D +:1030E00083E890E005C081E890E002C082E890E0CB +:1030F000CF910C94091788E58C0F833108F064C0D8 +:10310000C83A39F1C93A41F1CA3A49F1CB3A51F1D9 +:10311000CC3A59F1CD3A61F1C03B69F1CE3A71F147 +:10312000CF3A79F1C13B81F1C23B89F1C33B91F1C7 +:10313000C43B99F1C53BA1F1C63BA9F1C73BB1F135 +:10314000C83BB9F1C93BC1F1CA3BC9F180E090E08D +:1031500038C082EE90E035C089EE90E032C08AEE51 +:1031600090E02FC085EB90E02CC086EB90E029C06A +:1031700087EB90E026C08CEC90E023C08DEC90E0D3 +:1031800020C083E891E01DC08AE891E01AC082E97E +:1031900091E017C084E991E014C081E292E011C08F +:1031A00083E292E00EC084E292E00BC085E292E0FE +:1031B00008C086E292E005C087E292E002C08AE29F +:1031C00092E0CF910C941F17CF910895882309F4B2 +:1031D0004BC0823859F40E94E71681FF45C089E34D +:1031E0000E9441210E940E2289E30CC0833871F4B1 +:1031F0000E94E71680FF38C083E50E9441210E94AB +:103200000E2283E50E9483210C940E22843859F407 +:103210000E94E71682FF28C087E40E9441210E9495 +:103220000E2287E4EFCF9CEF980F913A58F390E28B +:10323000980F983050F4877091E001C0990F8A95EB +:10324000EAF7892F0E94CD21DFCF9BE5980F9330BD +:1032500020F480E090E00C940917885A833120F420 +:1032600080E090E00C941F170895882321F00E94BD +:10327000C7210C940E220895882321F00E94CD21AD +:103280000C940E2208957F928F929F92AF92BF92DC +:10329000CF92DF92EF92FF920F931F93CF93DF9322 +:1032A0001F92CDB7DEB77C01C62E772EFC010581BB +:1032B00002950F70128111110E94E4210E943A219F +:1032C000882379F0112369F080E28C0D883048F072 +:1032D00082E00E9423210E943A2191E0D82ED92633 +:1032E00001C0D12CE72DE295EF70F0E0E05AFF4FDE +:1032F0000C94822C872D807F072D0F70882311F06E +:103300000295007F112389F0002309F499C180E21E +:103310008C0D883020F4802F0E94C72103C0802F9D +:103320000E94D7210E940E228BC18C2D0E94E6188C +:10333000002309F4C3C180E28C0D883020F4802F73 +:103340000E94CD2103C0802F0E94DD210E940E2209 +:10335000B5C1872D807F972D9F70803211F4892F02 +:1033600003C0892F8295807FCC2021F0F1E0CF1619 +:10337000A1F01DC0112339F0002319F1013009F526 +:103380000E94F7219BC1002319F0013009F496C176 +:1033900089830E94FA21898110C1112321F006300E +:1033A00008F08CC10EC0053008F088C106C1112399 +:1033B00059F0002331F0F701958190FF41C19F70D2 +:1033C00095830E9435197AC1002309F4F6C03EC1E5 +:1033D000872D86958695837090E0009719F0019768 +:1033E00061F06CC1112321F08C2D972D937002C0D8 +:1033F00080E090E00E94091761C1112321F08C2D1B +:10340000972D937002C080E090E00E941F1756C174 +:103410008C2D112319F00E94312402C00E9499249E +:103420000E941E254BC1872D837009F052C01111D7 +:1034300045C18C2D829586958770880F880F9C2DAD +:103440009F70892E912CA12CB12C082E04C0880CC1 +:10345000991CAA1CBB1C0A94D2F7C4FE14C00FE02E +:1034600010E020E030E0B901A80104C0440F551F6E +:10347000661F771F8A95D2F7CB01BA0160957095C8 +:103480008095909503C060E070E0CB01272D2695D4 +:103490002695237030E02230310569F02330310564 +:1034A00089F0682979298A299B292130310571F011 +:1034B0000E94AF1F03C1682979298A299B290E948C +:1034C000CB1FFCC00E94AF1FC501B4010E94931F17 +:1034D000F5C0112319F0872D817001C086958823CE +:1034E00009F4ECC08C2D829586958770880F880F23 +:1034F0009C2D9F70892E912CA12CB12C082E04C0DC +:10350000880C991CAA1CBB1C0A94D2F7C4FE14C0D8 +:103510000FE010E020E030E0B901A80104C0440F42 +:10352000551F661F771F8A95D2F7CB01BA016095A8 +:1035300070958095909503C060E070E0CB01272DD9 +:10354000269526952370422F50E04230510569F0B0 +:103550004330510589F0682979298A299B2941300E +:10356000510571F00E948920A9C0682979298A290A +:103570009B290E94A520A2C00E948920C501B401F8 +:103580000E946D209BC08C2D90E0FC01E05EF10953 +:10359000E531F10508F050C0E059FF4F0C94822C42 +:1035A0000C2D0F70872D8F71112321F00E940620A2 +:1035B000802F07CF0E942720802F0E943C197EC0B9 +:1035C000112341F0053008F079C0872D8F710E94DA +:1035D0004C2074C0063008F071C0F7CF112339F0C9 +:1035E000872D8F710E94062069C01123C9F3872D92 +:1035F0008F710E94272062C0112329F0872D8F71BF +:103600000E94F11F5BC00E94E71F58C0112351F0B8 +:10361000172D1F71812F0E94062063E0812F0E94C9 +:103620001A214CC081E00E942321023008F446C0D8 +:1036300082E00E94232142C0112331F0002381F255 +:103640008C2D0E941E183AC0002389F28C2D0E94F6 +:10365000E61834C0472D4F706C2DC7010E94D50568 +:103660000E940B1F2BC0111129C0472D4F7050E035 +:1036700042305105B9F04CF44115510581F041300B +:103680005105E1F40E94192819C04330510569F031 +:103690004430510599F48C2D0E946B280FC00E9474 +:1036A00002280CC00E94352809C00E94482806C084 +:1036B000472D4F706C2DC7010E94D805DD20F9F011 +:1036C0000E94162180FD1BC0F70112820E9410216A +:1036D0000E940620C7010E948E1B0E9410210F909D +:1036E000DF91CF911F910F91FF90EF90DF90CF90DE +:1036F000BF90AF909F908F907F900C9427200F9059 +:10370000DF91CF911F910F91FF90EF90DF90CF90BD +:10371000BF90AF909F908F907F9008950F931F93CD +:10372000CF93DF93EC01888199812B813C81232BFE +:10373000B9F09F3F11F48F3F99F0CE010E94D4035E +:10374000882371F0688179818A810E940C218C0123 +:103750000E94C1200E94881FB801CE010E94431917 +:10376000DF91CF911F910F9108950E94E4210E9453 +:10377000F4210E94B9210E940E220E94CF250E94AE +:103780001E2580E090E00E94091780E090E00C94F4 +:103790001F170E94D4210C94B51B0E940121292FD0 +:1037A00022952F7030E02C3031054CF42A30310551 +:1037B0006CF42250310922303105A8F407C02C30B6 +:1037C000310569F02F30310551F00DC0803F69F0AF +:1037D00018F4803E40F409C0843F29F406C093FBEE +:1037E000882780F9089580E0089581E00895CF93B7 +:1037F000DF9300D000D01F92CDB7DEB70F900F90AF +:103800000F900F900F90DF91CF910895CF93DF939A +:1038100000D000D000D0CDB7DEB726960FB6F89412 +:10382000DEBF0FBECDBFDF91CF9108951F93CF9321 +:10383000DF93C0919D0216E080919E02C81799F017 +:10384000D0E01C9FF0011D9FF00D1124E156FD4FAB +:103850004081518162817381848195810E94061C1F +:103860002196C770E9CFDF91CF911F9108954091C4 +:10387000CF025091D0026091D1027091D20280911A +:10388000D3029091D4020C94061C8091D4028295AC +:103890008F7009F054C08091D102882309F44FC081 +:1038A00080919D02A0919E026091CF027091D00202 +:1038B0004091D2025091D302B6E08A1709F43FC07A +:1038C00090E041155105C1F17F3F11F46F3FA1F127 +:1038D000B89FF001B99FF00D1124E156FD4F2181F1 +:1038E00072132AC02081621327C02281211124C0B3 +:1038F000238134812417350710F421503109241B0A +:10390000350B283C3105C0F42091D4022F70206182 +:103910002093D40226E0289FF001299FF00D112466 +:10392000EC55FD4F80818F70806180838FEC92E039 +:103930000E948E1B0C94161C01968770BECF0895B2 +:10394000CF92DF92EF92FF920F931F93CF93DF936B +:10395000CDB7DEB762970FB6F894DEBF0FBECDBF0E +:103960008C0185E0F801DE011D9601900D928A958B +:10397000E1F7D8014C9111965C91119712966C91D8 +:1039800012971396CD90DC9014973091CF027091DE +:10399000D0028091D2029091D302009709F46BC1BA +:1039A0007F3F19F43F3F09F466C1E090D102EE2059 +:1039B00009F4C0C02091D402C816D90628F0F60137 +:1039C000E81BF90BCF0104C0809590958C0D9D1DCF +:1039D000FF24F394883C910578F0F12C207F09F0C6 +:1039E000C6C07C2DD98AC88A89890E94F71B8FECB2 +:1039F00092E00E948E1BB1C0822F807F09F046C0EA +:103A0000751314C0341312C0611110C02F702061DF +:103A10002093D4020E94371C8FEC92E00E948E1BF0 +:103A20008091D402D80115968C932EC0CD2819F11F +:103A30005F3F11F44F3FF9F0F62E61111CC08091E9 +:103A40009D0220919E0236E0821709F45AC090E050 +:103A5000389FF001399FF00D1124E156FD4F71811F +:103A6000571306C07081471303C07281711103C0E0 +:103A700001968770E9CFF62E662309F418C180916C +:103A8000D40281608093D402F12C11C1751308C057 +:103A9000341306C0611104C08091D402D801C3C0A0 +:103AA0004D875E878D859E856A8B0E94CD1B6A89B6 +:103AB0008823E1F16623D1F12091D402822F8295EF +:103AC0008F7090E0029774F08091CF029091D002B5 +:103AD00098878F831986DB86CA862C87CE01079646 +:103AE0000E948E1B86E0F801AFECB2E001900D92CF +:103AF0008A95E1F70E94451C0E94371CFF24F3942D +:103B0000D6C04D875E878D859E850E940121292F15 +:103B100022952F7030E0223031050CF0BCC09F7030 +:103B200009F0B6C0805E883008F4C1C0C8010E94A8 +:103B30008E1BE4CFC816D90608F453C0F601E81B63 +:103B4000F90BCF01883C910508F450C0F12C7C2D75 +:103B5000D98AC88A89890E94F71BEFECF2E086E0D7 +:103B6000DF011D928A95E9F70E94371CA0C07513EA +:103B700014C0341312C0611110C08091D402F80136 +:103B80008583C8010E948E1B86E0EFECF2E0DF0126 +:103B90001D928A95E9F7FE2C8AC04D875E878D8538 +:103BA0009E856A8B0E94CD1B6A89882309F4BECF4B +:103BB000662309F4BBCF2091D402822F82958F70A7 +:103BC00090E002970CF48ECF8091CF029091D002BA +:103BD0009A8389831B82DD82CC822E83CE0101965B +:103BE0007FCF809590958C0D9D1DACCFF62E6623D2 +:103BF00009F49CCF75132EC034132CC02091D4022D +:103C000020FD1FC0822F82958F70D9F0D8011596A4 +:103C10002C9315978F3049F08F5F982F9295907F56 +:103C2000822F8F70892B15968C93C8010E948E1B52 +:103C300086E0F801AFECB2E001900D928A95E1F7D1 +:103C400093CF86E0F801AFECB2E001900D928A9537 +:103C5000E1F72DC04D875E878D859E850E94CD1B27 +:103C6000811140CF8091D40281608093D402C80139 +:103C70000E948E1B1CC0662309F458CF4D875E87B7 +:103C80008D859E850E94CD1B882309F44FCF2ACFB6 +:103C9000811148CF0CC0243031050CF047CF9F7004 +:103CA00009F440CFF8019581907F09F03BCF8F2D2B +:103CB00062960FB6F894DEBF0FBECDBFDF91CF91F5 +:103CC0001F910F91FF90EF90DF90CF9008951F9379 +:103CD000CF93DF93CDB7DEB72C970FB6F894DEBF46 +:103CE0000FBECDBF4F83588769877A878B879C87A4 +:103CF000CE0107960E94A01C882369F08F819885C9 +:103D00002A853B85232BF1F19F3F09F063C08F3F4C +:103D100009F060C037C086E0FE013796DE011196DB +:103D200001900D928A95E1F76F817885EA85FB8590 +:103D3000309741F17F3F11F46F3F21F120919E02B6 +:103D400030E0C90101968770992740919D0250E0AB +:103D50008417950709F447C069837A83FD83EC8350 +:103D600096E0929FD001939FB00D1124A156BD4FB4 +:103D7000FE01319601900D929A95E1F780939E0293 +:103D80000E94161C16E080919D0290919E02891758 +:103D9000C1F1189FC001112481569D4F0E94A01CA3 +:103DA000882379F1E0919D021E9FF0011124E156D4 +:103DB000FD4F4081518162817381848195810E9490 +:103DC000061C80919D0290E0019687709927809350 +:103DD0009D02D9CF4F81588569857A858B859C85D1 +:103DE0000E94061CCFCF0E94C91B10929E02109207 +:103DF0009D02EFECF2E086E0DF011D928A95E9F783 +:103E0000C1CF2C960FB6F894DEBF0FBECDBFDF91A9 +:103E1000CF911F910895EF92FF920F931F93CF932D +:103E2000DF938C01009709F46CC0F12CEE24E3942D +:103E3000E8012196F8018491843740F4843008F039 +:103E400051C0813081F0823019F15BC0853709F4AF +:103E500044C0A8F19CE7980F903708F052C08F77C4 +:103E60000E94E61841C00E5F1F4FFE01C49180E220 +:103E70008C0F883048F4C7708E2D01C0880FCA950A +:103E8000EAF70E94E72114C08C2F0E941E182DC053 +:103E90000E5F1F4FFE01C49180E28C0F883058F4F2 +:103EA000C7708E2D01C0880FCA95EAF70E94ED21D8 +:103EB0000E940E221AC08C2F0E94E61816C00E5FB8 +:103EC0001F4FFE01C491CC2381F08FE99FE0019741 +:103ED000F1F700C00000C150F6CF0E5F1F4FFE018A +:103EE000F49003C00E941E188E018F2D882309F4C0 +:103EF0009FCFEFE9FFE03197F1F700C0000081505C +:103F0000F5CFDF91CF911F910F91FF90EF90089522 +:103F100008956093D9027093DA028093DB02909344 +:103F2000DC020C94B51B0F931F930091D9021091E2 +:103F3000DA022091DB023091DC02DC01CB01802B24 +:103F4000912BA22BB32B8093D9029093DA02A093EA +:103F5000DB02B093DC021F910F910C94B51B0F9301 +:103F60001F930091D9021091DA022091DB02309167 +:103F7000DC02DC01CB0180239123A223B3238093B5 +:103F8000D9029093DA02A093DB02B093DC021F9176 +:103F90000F910C94B51B0F931F930091D9021091B0 +:103FA000DA022091DB023091DC02DC01CB018027B8 +:103FB0009127A227B3278093D9029093DA02A09386 +:103FC000DB02B093DC021F910F910C94B51B109291 +:103FD000D5021092D6021092D7021092D8020C94F9 +:103FE000B51B41E050E060E070E004C0440F551F95 +:103FF000661F771F8A95D2F74093D5025093D60259 +:104000006093D7027093D8020C94B51B41E050E046 +:1040100060E070E004C0440F551F661F771F8A954B +:10402000D2F78091D5029091D602A091D702B0919B +:10403000D802482B592B6A2B7B2B4093D5025093E7 +:10404000D6026093D7027093D8020C94B51B41E05E +:1040500050E060E070E004C0440F551F661F771FFA +:104060008A95D2F740955095609570958091D502CC +:104070009091D602A091D702B091D802482359233B +:104080006A237B234093D5025093D6026093D702D4 +:104090007093D8020C94B51B41E050E060E070E0F2 +:1040A00004C0440F551F661F771F8A95D2F7809171 +:1040B000D5029091D602A091D702B091D80248279C +:1040C00059276A277B274093D5025093D6026093E5 +:1040D000D7027093D8020C94B51B0F931F930091D5 +:1040E000D5021091D6022091D7023091D802DC017E +:1040F000CB01802B912BA22BB32B8093D5029093D5 +:10410000D602A093D702B093D8021F910F910C94BE +:10411000B51B0F931F930091D5021091D6022091E9 +:10412000D7023091D802DC01CB0180239123A22356 +:10413000B3238093D5029093D602A093D702B09375 +:10414000D8021F910F910C94B51B0F931F930091F0 +:10415000D5021091D6022091D7023091D802DC010D +:10416000CB0180279127A227B3278093D502909374 +:10417000D602A093D702B093D8021F910F910C944E +:10418000B51B0895CF92DF92EF92FF920F931F938A +:10419000CF93DF938C01C090D902D090DA02E090E7 +:1041A000DB02F090DC028091D5029091D602A091C2 +:1041B000D702B091D802C82AD92AEA2AFB2ACFE12D +:1041C000D0E0D701C6010C2E04C0B695A7959795EF +:1041D00087950A94D2F780FF06C0B8018C2F0E9401 +:1041E0005D08019721F4219760F780E001C08C2FD2 +:1041F000DF91CF911F910F91FF90EF90DF90CF90C3 +:104200000895CF93DF93EC010E94C220BE010E946B +:104210005D08DF91CF910895CB010E94012108959F +:104220008091DD0285958595859508958091DD02C3 +:104230008770089598E0899F90011124262B209380 +:10424000DD020C9406202091DD028095822380936C +:10425000DD02982F977069F430E0482F552747FD0D +:1042600050952417350729F08595859585950C94EB +:10427000272008959091DD02977081E009F480E095 +:10428000089590911501992321F0909116019111B3 +:1042900009C02091170130911801F90132969FEF62 +:1042A00040E01FC0982F9695969596959F3050F5B3 +:1042B000E0911701F0911801E90FF11D877021E0DD +:1042C00030E0A90102C0440F551F8A95E2F7CA01E8 +:1042D0009181892B818308959F3F39F04F5F4E3044 +:1042E00041F051915813F8CF0DC05111F7CF942FD1 +:1042F000F5CF9F3F39F0F901E90FF11D97FDFA95D0 +:1043000082830895089590911501992321F0909149 +:104310001601911109C02091170130911801F9017E +:104320003296205F3F4F1FC0982F96959695969591 +:104330009F30F0F4E0911701F0911801E90FF11DA1 +:10434000877021E030E0A90102C0440F551F8A9513 +:10435000E2F7CA018095918189238183089531967E +:10436000E217F30729F090819813F9CF1082F7CF65 +:10437000089581E090E0E0911701F0911801E80FB5 +:10438000F91F1082019680319105A9F70895909147 +:10439000F102892B8093F102089580959091F102AA +:1043A00089238093F10208951092F102089590916B +:1043B000F002892B8093F002089580959091F0028D +:1043C00089238093F00208951092F002089590914D +:1043D000EF02892B8093EF02089580959091EF0270 +:1043E00089238093EF0208951092EF02089580933D +:1043F000DE0208951092DE020895809117019091D7 +:104400001801FC0131969C01205F3F4F80E09191A3 +:1044100091118F5FE217F307D1F70895E09117012B +:10442000F09118018091F1028083E0911701F091E1 +:10443000180190818091F002892B8083E09117010F +:10444000F091180190818091EF02892B80838091F7 +:10445000DE02882361F0E0911701F091180190814C +:10446000892B80830E94FD2181111092DE028091B0 +:104470001701909118010C94F31620E0009739F081 +:10448000AC0141505109842395232F5FF7CF822F30 +:10449000089580911303843039F11092F30220E4DF +:1044A00088E190E00FB6F894A895809360000FBE65 +:1044B0002093600080E00E94D80280E00E94F7080C +:1044C00083B7817F846083BF83B7816083BF789423 +:1044D000889583B78E7F83BF88E10FB6F894809369 +:1044E0006000109260000FBE08950895089580E066 +:1044F0000E94D8020E9475220E9452090E947622D0 +:104500000E94D70991E0811101C090E0892F0895A0 +:104510000E94C91B80E00E94D8020E94F1270E94DD +:10452000E7160C94F7081F920F920FB60F92112402 +:104530008F939F93AF93BF938091F302811113C028 +:104540008091F4029091F502A091F602B091F702E9 +:104550004196A11DB11D8093F4029093F502A093A2 +:10456000F602B093F702BF91AF919F918F910F9098 +:104570000FBE0F901F90189582E084BD93E095BD0B +:104580009AEF97BD80936E0008952FB7F8948091AD +:10459000F4029091F502A091F602B091F7022FBFBC +:1045A0000895CF92DF92EF92FF920F931F932FB750 +:1045B000F8944091F4025091F5026091F6027091E6 +:1045C000F7022FBF6A017B01EE24FF248C0120E05B +:1045D00030E0C016D106E206F30610F4415051094E +:1045E0009A01281B390BC9011F910F91FF90EF9081 +:1045F000DF90CF9008951F920F920FB60F92112463 +:104600008F939F93AF93BF938091F4029091F502A3 +:10461000A091F602B091F7020196A11DB11D809301 +:10462000F4029093F502A093F602B093F702BF91C3 +:10463000AF919F918F910F900FBE0F901F90189583 +:104640000E94E413F8942FEF87EA91E6215080400E +:104650009040E1F700C0000087E090EBDC01809320 +:104660001E0390931F03A0932003B09321039CE0AB +:1046700088E10FB6F894A895809360000FBE9093E0 +:104680006000FFCF0E948123811102C00E945D2340 +:104690000E948C238093F2020E94942380931C0337 +:1046A00087FB882780F9809316010E949023682F4A +:1046B00070E080E090E00C94891F6DEE7EEF80E06A +:1046C00090E00E94A82C60E082E090E00E94962C8E +:1046D00060E083E090E00E94962C60E084E090E04F +:1046E0000E94962C60E085E090E00E94962C60E0AD +:1046F00086E090E00E94962C6FEF87E090E00C94AB +:10470000962C80E090E00E94902C21E08D3E9E4F00 +:1047100009F020E0822F089582E090E00C94882C2C +:1047200083E090E00C94882C84E090E00C94882C3A +:10473000682F84E090E00C94962C86E090E00C9436 +:10474000882C682F86E090E00C94962C87E090E00F +:104750000C94882C682F87E090E00C94962C809124 +:10476000FA0280FF0BC060911C0185E0689FB001D8 +:10477000112475956795759567952BC081FF09C0C4 +:1047800060911C0185E0689FB001112475956795C3 +:1047900020C082FF07C060911C0185E0689FB001C6 +:1047A000112417C09091FB029923D1F060911B0155 +:1047B000961788F720911C0185E0289F900111240D +:1047C000929FA001939F500D112470E0CA010E9496 +:1047D0006E2C6038710540F46115710539F002C026 +:1047E00065E070E0862F08958FE7089581E00895D1 +:1047F0008091FA0280FF08C060911A0170E07595FF +:1048000067957595679521C081FF06C060911A0173 +:1048100070E07595679519C082FF04C060911A0118 +:1048200070E010C09091FB029923C1F060911901D2 +:104830009617A0F780911A01899FC001112470E09A +:104840000E946E2C6038710528F46115710521F005 +:10485000862F08958FE7089581E0089561E070E064 +:10486000F4CF803F21F40E94AF23819504C0813FA3 +:1048700029F40E94AF238093FE020895823F21F421 +:104880000E94AF23819504C0833F29F40E94AF2387 +:104890008093FD020895893F19F40E94F82305C012 +:1048A0008A3F31F40E94F82381958093FF02089596 +:1048B0008B3F21F40E94F823819504C08C3F29F49A +:1048C0000E94F823809300030895843F21F480918F +:1048D000FC02816017C0853F21F48091FC02826058 +:1048E00011C0863F21F48091FC0284600BC0873F99 +:1048F00021F48091FC02886005C0883F31F48091EA +:10490000FC0280618093FC0208958D3F21F4809128 +:10491000FA0281600BC08E3F21F48091FA0282601E +:1049200005C08F3F29F48091FA0284608093FA02D7 +:104930000895803F39F48091FE0287FF6CC0109289 +:10494000FE0269C0813F29F48091FE021816BCF373 +:1049500062C09091FD02823F29F497FF5CC01092E3 +:10496000FD0259C0833F19F41916CCF354C0893F96 +:1049700041F48091FF0218160CF04DC01092FF0216 +:104980004AC08A3F29F48091FF0287FF44C0F6CFD6 +:104990008B3F39F48091000387FF3DC010920003E4 +:1049A0003AC08C3F29F4809100031816BCF333C041 +:1049B000843F21F48091FC028E7F17C0853F21F453 +:1049C0008091FC028D7F11C0863F21F48091FC0212 +:1049D0008B7F0BC0873F21F48091FC02877F05C04D +:1049E000883F31F48091FC028F7E8093FC0213C0DB +:1049F0008D3F21F48091FA028E7F0BC08E3F21F40F +:104A00008091FA028D7F05C08F3F29F48091FA02D0 +:104A10008B7F8093FA028091FD0281110EC08091FC +:104A2000FE0281110AC08091FF02811106C08091AF +:104A30000003811102C01092FB0208958CEF92E0F6 +:104A40000E94FE160E94C5229093F9028093F802FC +:104A500008951F93CF93DF938091F8029091F9020C +:104A60000E94D122AC019091FB02992321F0209168 +:104A70001D0130E006C020911E018AE0289F9001B0 +:104A800011244217530708F486C08091FD02C0919B +:104A9000FE02D091FF0210910003811107C0C111E5 +:104AA00076C0D11174C0111172C075C09F3F19F04A +:104AB0009F5F9093FB02181624F40E94AF2380930B +:104AC000FD028091FD0287FF05C00E94AF23819502 +:104AD0008093FD021C1624F40E94AF238093FE02F3 +:104AE0008091FE0287FF05C00E94AF2381958093CD +:104AF000FE026091FD02662339F1C091FE02CC23D3 +:104B000019F1772767FD7095872F972F0E949029BD +:104B100023E333E343E35FE30E94A02A0E945D297D +:104B20006093FD026C2F772767FD7095872F972F75 +:104B30000E94902923E333E343E35FE30E94A02A2A +:104B40000E945D296093FE021D1624F40E94F82342 +:104B50008093FF028091FF0287FF05C00E94F82327 +:104B600081958093FF02111624F40E94F82380930C +:104B700000038091000387FF05C00E94F823819500 +:104B800080930003DF91CF911F910C941E259F3FCE +:104B900009F08ECF96CFDF91CF911F910895ECEF62 +:104BA000F2E085E0DF011D928A95E9F71092FB02A1 +:104BB0001092FA020895833081F128F4813059F07F +:104BC0008230D1F00895853009F449C0B8F18630BB +:104BD00009F456C0089580911E01262F30E0280F59 +:104BE000311D2F3F310524F4680F60931E01089595 +:104BF0008FEF80931E01089580911D01262F30E0D4 +:104C0000280F311D2F3F310524F4680F60931D01DB +:104C100008958FEF80931D01089580911C01262F28 +:104C200030E0280F311D2F3F310524F4680F6093C9 +:104C30001C0108958FEF80931C01089580911B0142 +:104C4000262F30E0280F311D2F3F310524F4680F47 +:104C500060931B0108958FEF80931B01089580914D +:104C60001A01262F30E0280F311D2F3F310524F483 +:104C7000680F60931A0108958FEF80931A010895C9 +:104C800080911901262F30E0280F311D2F3F31056B +:104C900024F4680F6093190108958FEF8093190130 +:104CA0000895833011F128F4813049F0823091F079 +:104CB0000895853081F120F18630C1F10895809109 +:104CC0001E01681720F4861B80931E010895109220 +:104CD0001E01089580911D01681720F4861B8093A2 +:104CE0001D01089510921D01089580911C016817FF +:104CF00020F4861B80931C01089510921C010895D6 +:104D000080911B01681720F4861B80931B01089576 +:104D100010921B01089580911A01681720F4861BD8 +:104D200080931A01089510921A0108958091190133 +:104D3000681720F4861B80931901089510921901B9 +:104D400008950F931F93873208F048C08E3108F002 +:104D50008DC0803109F477C008F5873009F461C04F +:104D600068F4863009F09DC08091F202817F8E7FC9 +:104D70008093F20281E08093020394C08B3009F4A7 +:104D800089C08E3009F08DC08091F20282FB22270B +:104D900020F991E0922790FB82F95EC0863109F4F8 +:104DA00079C060F4813109F07CC00E94C91B9091E8 +:104DB000160181E08927809316016CC0893109F4BE +:104DC00069C08B3109F06DC08091F20281FB22270E +:104DD00020F991E0922790FB81F93EC0883309F4D5 +:104DE00059C050F4893209F457C0853309F454C0CE +:104DF000873209F451C055C0833409F44DC028F4FA +:104E00008A3308F44EC0895332C0883409F049C04F +:104E10000E94C91B0E94070A0E94CB030E94202304 +:104E200039C09091F202892F8095817080FB90F9B2 +:104E300029F0966098609093F20234C0997F977F32 +:104E40009093F20227C08091F20283FB222720F97F +:104E500091E0922790FB83F98093F2029923D1F09D +:104E60008091F20281608093F20214C08D5141E082 +:104E700050E060E070E08A019B0104C0000F111F48 +:104E8000221F331F8A95D2F7C901B8010E94891FDA +:104E90000E94C91B81E006C061E070E080E090E004 +:104EA000F5CF80E01F910F91089580E0089580E094 +:104EB0000895CF93C82F80910203813069F018F0D4 +:104EC0008230C9F184C0E0911701F091180180810E +:104ED000823209F07EC007C0E0911701F0911801FD +:104EE0008081823261F48C2F0E945527811104C089 +:104EF0008C2F0E94A1261DC081E090E01AC08C2F4B +:104F00000E945727811114C0C43179F048F4CB3086 +:104F100079F0C03109F061C082E08093020308C0DB +:104F2000C93219F0C83321F058C01092020355C09D +:104F300081E0817054C0C93291F120F5C43179F11A +:104F4000B0F4C73009F047C08EE180931E0182E3C0 +:104F500080931D018AE080931C0184E180931B01F2 +:104F600088E080931A0188E28093190134C0CE5101 +:104F7000C63088F5EC2FF0E0EA54FE4F8081809334 +:104F8000010329C0CE34E9F020F4CB3421F56AE0E6 +:104F900013C0C13579F0C235F1F461E00DC08091E4 +:104FA0000103882319F01092010315C081E080935A +:104FB000020315C061E006C0809101030E94DB2559 +:104FC0000AC06AE0809101030E94512604C0109239 +:104FD000020380E004C081E002C080E0AACFCF914C +:104FE00008950E948123811102C00E945D230E94C6 +:104FF0009D2380931D0380FF02C0869501C080E041 +:105000000C94D80280911D03982F9695292F30E09B +:10501000233031054CF49F5F990F8170892B81609B +:1050200080931D030E94A12380911D0386950C94FB +:10503000D80280911D03982F969591F09158990F61 +:105040008170892B80931D038E7F91E009F490E09D +:1050500080911D0390FB80F980931D030E94A12382 +:1050600080911D0386950C94D80280911D03982F82 +:10507000909590FB80F980931D030E94A12380915D +:105080001D0380FF02C0869501C080E00C94D80209 +:1050900090911D03892F86958F5F8F779170843053 +:1050A00028F4880F892B80931D0302C090931D0361 +:1050B00080911D038E7F91E009F490E080911D03A3 +:1050C00090FB80F980931D030E94A12380911D0312 +:1050D00086950C94D80220911D03922F96958927CE +:1050E000982F990F822F8170892B80931D038E7FBB +:1050F00091E009F490E080911D0390FB80F980938A +:105100001D030E94A12380911D0386950C94D80253 +:1051100080911D03869508955058BB27AA270ED06D +:10512000D1C1C2D130F0C7D120F031F49F3F11F48A +:105130001EF4B7C10EF4E095E7FB9FC1E92FD3D170 +:1051400080F3BA17620773078407950718F071F4A4 +:105150009EF5EBC10EF4E0950B2EBA2FA02D0B019E +:10516000B90190010C01CA01A0011124FF27591BAC +:1051700099F0593F50F4503E68F11A16F040A22FB2 +:10518000232F342F4427585FF3CF46953795279523 +:10519000A795F0405395C9F77EF41F16BA0B620B22 +:1051A000730B840BBAF09150A1F0FF0FBB1F661F69 +:1051B000771F881FC2F70EC0BA0F621F731F841FAC +:1051C00048F4879577956795B795F7959E3F08F0D2 +:1051D000B3CF9395880F08F09927EE0F9795879591 +:1051E000089527D108F481E008950CD06BC163D1F4 +:1051F00040F05AD130F021F45F3F19F03EC1511117 +:1052000095C14FC170D198F39923C9F35523B1F3D8 +:10521000951B550BBB27AA2762177307840738F025 +:105220009F5F5F4F220F331F441FAA1FA9F333D084 +:105230000E2E3AF0E0E830D091505040E695001C38 +:10524000CAF729D0FE2F27D0660F771F881FBB1FF4 +:10525000261737074807AB07B0E809F0BB0B802DCE +:10526000BF01FF2793585F4F2AF09E3F510568F01A +:1052700004C15CC15F3FECF3983EDCF38695779503 +:105280006795B795F7959F5FC9F7880F911D96951C +:10529000879597F90895E1E0660F771F881FBB1F78 +:1052A000621773078407BA0720F0621B730B840B25 +:1052B000BA0BEE1F88F7E095089504D06894B111F9 +:1052C00035C1089518D188F09F5790F0B92F9927CC +:1052D000B751A0F0D1F0660F771F881F991F1AF001 +:1052E000BA95C9F712C0B13081F01FD1B1E008956D +:1052F0001CC1672F782F8827B85F39F0B93FCCF3EE +:10530000869577956795B395D9F73EF490958095F6 +:10531000709561957F4F8F4F9F4F0895E89409C016 +:1053200097FB3EF490958095709561957F4F8F4FD8 +:105330009F4F9923A9F0F92F96E9BB279395F695EE +:10534000879577956795B795F111F8CFFAF4BB0F6C +:1053500011F460FF1BC06F5F7F4F8F4F9F4F16C0D0 +:10536000882311F096E911C0772321F09EE8872F5A +:10537000762F05C0662371F096E8862F70E060E016 +:105380002AF09A95660F771F881FDAF7880F96958F +:10539000879597F9089588D018F011F08CD038F4DB +:1053A00080C0C4C0E92F9FD0B0F35523C9F3E7FBF9 +:1053B0006217730784079507A8F199F3E92FFF2770 +:1053C00088232AF03197660F771F881FDAF7952F09 +:1053D0005527442332F091505040220F331F441F71 +:1053E000D2F7BB27E91BF50B621B730B840BB109CA +:1053F000C1F222F4620F731F841FB11D31972AF08E +:10540000660F771F881FBB1FEFCF915050405AF097 +:1054100041F0882332F0660F771F881F915050406B +:10542000C1F7939530C08695779567959F5FD9F7BB +:10543000F8CF990F0008550FAA0BE0E8FEEF1616FB +:105440001706E807F907C0F012161306E407F50778 +:1054500098F0621B730B840B950B39F40A2661F0EC +:10546000232B242B252B21F408950A2609F4A1408F +:10547000A6958FEF811D811D089597F99F6780E89C +:1054800070E060E008959F3F31F0915020F48795DF +:1054900077956795B795880F911D9695879597F99C +:1054A00008959FEF80EC089500240A9416161706BD +:1054B00018060906089500240A9412161306140605 +:1054C00005060895092E0394000C11F4882352F068 +:1054D000BB0F40F4BF2B11F460FF04C06F5F7F4F20 +:1054E0008F4F9F4F089557FD9058440F551F59F007 +:1054F0005F3F71F04795880F97FB991F61F09F3FC1 +:1055000079F087950895121613061406551FF2CFE9 +:105510004695F1DF08C0161617061806991FF1CF39 +:1055200086957105610508940895E894BB27662760 +:105530007727CB0197F908957CDF08F48FEF089562 +:105540000BD0C0CFB1DF28F0B6DF18F0952309F0FB +:1055500094CFA7CF1124EACFC6DFA0F3959FD1F354 +:10556000950F50E0551F629FF001729FBB27F00D11 +:10557000B11D639FAA27F00DB11DAA1F649F662766 +:10558000B00DA11D661F829F2227B00DA11D621FB5 +:10559000739FB00DA11D621F839FA00D611D221F6F +:1055A000749F3327A00D611D231F849F600D211D53 +:1055B000822F762F6A2F11249F5750408AF0E1F0F6 +:1055C00088234AF0EE0FFF1FBB1F661F771F881F3F +:1055D00091505040A9F79E3F510570F04ECFA6CF95 +:1055E0005F3FECF3983EDCF3869577956795B7952A +:1055F000F795E7959F5FC1F7FE2B880F911D969554 +:10560000879597F90895FA01EE0FFF1F309621054F +:10561000310599F16115710561F48038BFE39B078D +:1056200049F168949038810561F08038BFEF9B079D +:1056300041F0992342F5FF3FE1053105210511F1C4 +:10564000E8940894E795D901AA2329F4AB2FBE2F3B +:10565000F85FD0F310C0FF5F70F4A695E0F7F7395C +:1056600050F019F0FF3A38F49F779F930CD00F90C9 +:1056700007FC905808953EF014CF60E070E080E899 +:105680009FE308954FE79F775F934F933F932F9347 +:105690009ED02F913F914F915F9152DF05C019F439 +:1056A0000EF0EBCE42CFFDCE26DFC8F39638C0F722 +:1056B00007F80F92E8942BE33AEA48EB5FE74EDFF6 +:1056C0000F920F920F924DB75EB70F92C0D0EAE0E3 +:1056D000F1E016D04F915F91EF91FF91E595EE1FAC +:1056E000FF1F49F0FE57E0684427EE0F441FFA956C +:1056F000E1F74195550B32D00F9007FE26C0089573 +:10570000DF93CF931F930F93FF92EF92DF927B0172 +:105710008C01689405C0DA2EEF011EDFFE01E894CB +:10572000A5912591359145915591AEF3EF0106DD97 +:10573000FE019701A801DA9479F7DF90EF90FF90CE +:105740000F911F91CF91DF9108959B01AC0160E013 +:1057500070E080E89FE349CD90CE95CECCDEE8F3B3 +:105760009923D9F3940F511DBBF39150504094F0FD +:1057700059F0882332F0660F771F881F91505040F0 +:10578000C1F79E3F510544F7880F911D9695879567 +:1057900097F908955F3FACF0983E9CF0BB27869543 +:1057A00077956795B79508F4B1609395C1F7BB0FEE +:1057B00058F711F460FFE8CF6F5F7F4F8F4F9F4F17 +:1057C000E3CFB4CE0EF05FCE6CCE689456CE93DEAF +:1057D000C8F39923D1F3C6F3DF93CF931F930F93AD +:1057E000FF92C92FDD2788232AF02197660F771FA4 +:1057F000881FDAF720E030E040E85FEB9FE388396C +:1058000020F0803E30F021968F7787DCE2E3F1E0F4 +:1058100003C083DCEFE5F1E073DF8B01BE01EC0137 +:10582000FB2E6F5771097595771F880B990B78DDE3 +:1058300028E132E741E35FE38FDEAF2D9801AE014F +:10584000FF900F911F91CF91DF9178DC3BCEFA0151 +:10585000DC01AA0FBB1F9B01AC01BF5728F4222714 +:105860003327442750781FC0B75188F4AB2F00244A +:10587000469537952795011CA395D2F3002069F032 +:10588000220F331F441FB395DAF30DD045CC61309E +:105890007105A0E88A07B94630F49B01AC01662780 +:1058A000772788279078309621F0208331834283B0 +:1058B00053830895AA1BBB1B51E107C0AA1FBB1F3E +:1058C000A617B70710F0A61BB70B881F991F5A958C +:1058D000A9F780959095BC01CD01089597FB072EFF +:1058E00016F4009407D077FD09D00E945A2C07FCCB +:1058F00005D03EF4909581959F4F089570956195E0 +:105900007F4F0895EE0FFF1F0590F491E02D09944D +:10591000F999FECF92BD81BDF89A992780B5089577 +:10592000A8E1B0E042E050E00C94B02C262FF999A9 +:10593000FECF92BD81BDF89A019700B4021639F0EE +:105940001FBA20BD0FB6F894FA9AF99A0FBE0895BF +:105950000196272F0E94972C0C94962CDC01CB01EA +:10596000FC01F999FECF06C0F2BDE1BDF89A31966F +:1059700000B40D9241505040B8F70895F894FFCF0D +:10598000640007000CFF0000003F64EB0F79105625 +:10599000102210EE0F0101DF022808140A321E0047 +:1059A00002040507090B0C0E1011131517181A1C09 +:1059B0001D1F2123242628292B2D2F303234353743 +:1059C000393B1F0F03764F5F6F7F49694379095950 +:1059D00053633149803F5D8B803FF8BF803FCAE110 +:1059E000803F73ED803FCAE1803FF8BF803F5D8B11 +:1059F000803F3149803F0000803FF16D7F3F75EA75 +:105A00007E3F4C827E3F833F7E3F84287E3F833FA4 +:105A10007E3F4C827E3F75EA7E3FF16D7F3F000006 +:105A2000803F3F4D3639BB046E043804FF039203B8 +:105A3000AB03C403DD0301020304050607080900E4 +:00000001FF diff --git a/keyboard/planck/keymaps/daniel/compiled.hex b/keyboard/planck/keymaps/daniel/compiled.hex new file mode 100644 index 0000000000..d7e56a3e22 --- /dev/null +++ b/keyboard/planck/keymaps/daniel/compiled.hex @@ -0,0 +1,1448 @@ +:100000000C9495020C94D9020C94D9020C94D90248 +:100010000C94D9020C94D9020C94D9020C94D902F4 +:100020000C94D9020C94D9020C9477140C944915B1 +:100030000C94AB220C94D9020C94D9020C94D902E2 +:100040000C94D9020C943B030C94D9020C94D90261 +:100050000C94D9020C9413230C94D9020C94D90259 +:100060000C94D9020C94D9020C94D9020C94D902A4 +:100070000C94D9020C94D9020C94D9020C94D90294 +:100080000C94EC0A0C94D9020C94D9020C94D90269 +:100090000C94D9020C94D9020C94D9020C94D90274 +:1000A0000C94D9020C94D9020C94D902B615D81527 +:1000B000C616D815C6161D164016C6169516A816CD +:1000C00092199219C119C119001A201A761B761BB0 +:1000D0002B1A761BDB1ADB1A421B4B1B761B701B81 +:1000E000E81AE81AE81AE81AE81AE81AE81AE81A00 +:1000F000E81AE81AE81AE81AE81AE81AE81AE81AF0 +:10010000F81A061B0D1B141B1E1B07634236B79BF8 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A19A +:1001D000F1A2F1A3290014001A000800150017006D +:1001E0001C0018000C00120013002A002B00040051 +:1001F0001600070009000A000B000D000E000F009A +:1002000033003400E1001D001B000600190005004A +:1002100011001000360037003800E5000320E00030 +:10022000E200E30002202C002C00012050005100CD +:1002300052004F0035001E021F022002210222023E +:10024000230224022502260227022E0001000100BB +:100250000100010001000100010001000100010096 +:100260002F00300001000100010001000100010029 +:10027000010001002D002D023100010001000100EC +:10028000010001000100010001000120AB00AA00F3 +:10029000A900AE0035021E001F0020002100220030 +:1002A000230024002500260027002E023A003B00F0 +:1002B0003C003D003E003F00400041004200430042 +:1002C0004400450039003A003B003C003D003E0040 +:1002D0003F004000410042004300280001000100AF +:1002E000010001000220010001000100AB00AA0092 +:1002F000A900AE00290014001A000800150017001C +:100300001C0018000C00120013004C002B0004000D +:100310001600070009000A000B000D000E000F0078 +:1003200033003400E1001D001B0006001900050029 +:1003300011001000360037003800E5000100E00031 +:10034000E200E30002202C002C00012050005100AC +:1003500052004F0028035400680065002000500040 +:100360006C0061006E0063006B0020004B006500B4 +:10037000790062006F0061007200640000002C03CD +:100380004F007200740068006F006C0069006E001E +:1003900065006100720020004B006500790062007A +:1003A0006F00610072006400730000000403090420 +:1003B00009026D00040100A0FA0904000001030114 +:1003C0000100092111010001223F000705810308F6 +:1003D000000A0904010001030102000921110100C2 +:1003E00001224D000705820308000A0904020001EA +:1003F00003000000092111010001223600070583D6 +:100400000308000A09040300010300000009211188 +:1004100001000122390007058403100001120110B8 +:100420000100000008EDFE6060010001020001050E +:10043000010906A101050719E029E7150025019525 +:1004400008750181020508190129059505750191B5 +:1004500002950175039101050719002977150025FB +:1004600001957875018102C005010980A10185020D +:1004700016010026B7001A01002AB7007510950171 +:100480008100C0050C0901A1018503160100269C0D +:10049000021A01002A9C02751095018100C0050115 +:1004A0000902A1010901A100050919012905150089 +:1004B00025019505750181029501750381010501ED +:1004C000093009311581257F9502750881060938A3 +:1004D0001581257F950175088106050C0A380215DE +:1004E00081257F950175088106C0C005010906A117 +:1004F00001050719E029E715002501950875018117 +:1005000002950175088101050819012905950575F0 +:100510000191029501750391010507190029FF1545 +:100520000025FF950675088100C011241FBECFEF7E +:10053000DAE0DEBFCDBF04B603FE24C080911E0307 +:1005400090911F03A0912003B09121038730904B1D +:10055000A740B04BB9F410921E0310921F031092E3 +:1005600020031092210314BE84B7877F84BF88E1E3 +:100570000FB6F89480936000109260000FBEE0E028 +:10058000F8E3099511E0A0E0B1E0E0EBF9E502C085 +:1005900005900D92A03CB107D9F713E0A0ECB1E0B3 +:1005A00001C01D92AE31B107E1F70E94BD110C945C +:1005B000D62C0C9400000895089581E008950895C4 +:1005C0000C94DC020C94DD020C94DF020E94A02843 +:1005D00023E030E0281B3109220F2093C401089545 +:1005E000282F2F9880918000211108C0877F809349 +:1005F000800010928D0010928C001BC08860809348 +:100600008000233019F48FEF9FEF0FC083E090E05C +:10061000821B9109880F991F2FEF3FEFA90102C09C +:10062000569547958A95E2F7CA0190938D0080937D +:100630008C000C94E6020E94E60284E08093C301E1 +:100640001092C0010895279A2F988FEF9FEF9093F3 +:100650008700809386008AE08093800089E1809300 +:1006600081000E9409280C941B030E9423036E9AA8 +:10067000769A0C94DB021F920F920FB60F92112400 +:100680002F933F938F939F93EF93FF93E091C1013B +:10069000F091C201CF0101969093C2018093C101F4 +:1006A0000090C30102C0F695E7950A94E2F7EF7354 +:1006B0008091C001823019F4E03251F404C08130DD +:1006C00039F4EF3329F480916F008D7F80936F00B0 +:1006D000F0E0E457FE4FE49121E031E0E29FC001F9 +:1006E000E39F900D11240090C40102C09695879558 +:1006F0000A94E2F790938D0080938C00FF91EF9124 +:100700009F918F913F912F910F900FBE0F901F904F +:10071000189581E008950C94890308950C9435038D +:1007200080911502882309F448C08091D1019091ED +:10073000D201009779F40E94DD229093D201809338 +:10074000D1018091D30190E0009771F48091D401A0 +:1007500090E00AC00E94E92220910001309101013D +:100760002817390740F329C00197880F991F880F70 +:10077000991FFC01EB52FE4F608171818281938150 +:100780000E94520AE091D30184E0E89FF001112415 +:10079000EB52FE4F60817181828193814FE050E086 +:1007A0000E940A0E8091D30190E001966091D401DD +:1007B00070E00E94862C8093D3010C94E00210928A +:1007C00017020C941F0A0895089581E08093170280 +:1007D0000C94E403089508958F929F92AF92BF9274 +:1007E000EF92FF920F931F93CF93DF93CDB7DEB7B6 +:1007F000A3970FB6F894DEBF0FBECDBF7C01FC01FE +:1008000000811181C8010E94DA20B8010E94F1051F +:100810008C01B7010E948B03882309F4CCC10032FC +:10082000F0E51F0741F4F7018281882309F458C0DD +:100830000E946E0EC0C10132F0E51F0741F4F701BE +:100840008281882309F44CC00E94770EB4C1023221 +:10085000F0E51F0751F4F7018281882309F440C0B5 +:100860000E946A0E8111F0CFE3CF0332F0E51F073B +:1008700039F4F7018281882399F10E94E5039BC135 +:100880000432F0E51F0739F4F7018281882341F132 +:100890000E94DF0390C10532F0E51F0749F4F7011C +:1008A00082818823E9F0809117028111F1CFE5CF91 +:1008B0000632F0E51F0739F4F7018281882381F0C1 +:1008C0000E947E0E0AC00732F0E51F0749F4F701C7 +:1008D0008281882329F00E94890E0E94EB036BC15C +:1008E00080911702811105C0F70182818111CFC06B +:1008F00018C1003E110579F4F7018281882309F4BB +:100900004DC00E941F0A81E08093160210921502CA +:100910001092D40150C1023E110559F4F7018281B1 +:100920008823E1F10E941F0A10921602109215020C +:1009300042C1033E110591F4F7018281882371F1D0 +:100940000E941F0A1092160281E0809315021092F5 +:10095000D3011092D2011092D1012DC1023511059F +:1009600059F4F7018281882309F425C1809100019F +:10097000909101010A970DC00135110579F4F70135 +:100980008281882309F417C18091000190910101AF +:100990000A9690930101809300010DC140910401DA +:1009A00083E2EFE1F1E0DE01119601900D928A956C +:1009B000E1F7F701808121E030E02C0F3D1F280F87 +:1009C000311DC9012091020130910301FC01E20FA8 +:1009D000F31F6081772767FD7095640F711D88276D +:1009E00077FD8095982F0E94A82920E030E040E410 +:1009F00051E40E940D294B015C01F701218184E043 +:100A000090E0821B9109BC01882777FD8095982F83 +:100A10000E94A8299B01AC01C501B4010E94A52830 +:100A20009B01AC0160E070E080E090E40E941B2B31 +:100A300020E030E04CED50E40E94B82A4B015C010C +:100A4000F70182818823D1F04FE050E0C501B40165 +:100A50000E940A0E809116028823A1F08091D40191 +:100A600024E0829FF0011124EB52FE4F808291829C +:100A7000A282B3828F5F8093D40104C0C501B40108 +:100A80000E94520A0F3F110508F02ECF94C08091AA +:100A9000D00181111FC0043130E5130709F051C0A6 +:100AA0000E948D0381E08093D0010E94DD2290930B +:100AB000CF018093CE011092C7011092C90110920C +:100AC000C8011092CB011092CA011092CD01109270 +:100AD000CC0171C08091CE019091CF010E94E9229A +:100AE000883C910570F48091C701E82FF0E0EE0F8B +:100AF000FF1FE853FE4F118300838F5F8093C70170 +:100B00005AC0043880E5180721F00538104501F176 +:100B10003AC0F7018281882341F01092C50182E03A +:100B20001EC0043830E5130759F58091C5018111C5 +:100B300006C086E20E94361886E20E94FE1882E015 +:100B40001CC00438F0E51F0741F305381045D9F4FF +:100B5000F7018281882331F01092C60180E20E9461 +:100B60004D1929C08091C601811106C087E20E94FB +:100B7000361887E20E94FE1880E20E9454191BC0BA +:100B80000538104529F381E08093C5018093C601A3 +:100B9000C701A3960FB6F894DEBF0FBECDBFDF919D +:100BA000CF911F910F91FF90EF90BF90AF909F90CA +:100BB0008F900C94E20280E0A3960FB6F894DEBF0B +:100BC0000FBECDBFDF91CF911F910F91FF90EF909E +:100BD000BF90AF909F908F90089580E090E008952F +:100BE00008959CE0799FF001112490E3899FE00D26 +:100BF000F11D1124E60FF11DEE0FFF1FEC52FE4F09 +:100C0000859194910895880F991FFC01E45BFF4F33 +:100C1000859194910895880F991FFC01E453FE4F2C +:100C20008591949108950F931F93CF93DF93EC01D7 +:100C3000811521E39207A0F5C11580E3D80708F0DC +:100C4000D7C0C83ED105D8F4C03ED10508F007C2D0 +:100C5000C83AD10578F4C53AD10508F06AC0C13068 +:100C6000D10509F463C008F4F7C1C430D10508F018 +:100C7000F6C1F2C1CB3BD10508F466C0EDC1C11588 +:100C800090E2D90708F0AFC0C11521E0D20708F003 +:100C9000E6C1C03FD10508F4DFC18E0110651FC257 +:100CA000C03880E5D80700F5C03790E5D90708F0CF +:100CB000A3C0C11520E5D20709F4ACC050F4CE01A1 +:100CC000905480319F4008F0C7C1DF708E01106AD8 +:100CD00006C2C13080E5D80709F4AEC0C43190E542 +:100CE000D90708F4AFC0B8C1C33820E5D20709F46A +:100CF0008EC050F4C13890E5D90709F482C008F0DD +:100D000083C000E011EDEBC1C03181E5D80708F4E4 +:100D1000A3C1C11597E5D90708F436C1CE01905794 +:100D20008115904108F098C1DF7093C101E010E097 +:100D3000D6C1C53AD10509F494C1C63AD10509F026 +:100D400093C102E810E4CBC1C83AD10509F48FC1C0 +:100D5000C93AD10509F48EC1CA3AD10509F48DC149 +:100D6000CB3AD10509F48CC1CC3AD10509F48BC139 +:100D7000CD3AD10509F48AC1C03BD10509F489C136 +:100D8000CE3AD10509F488C1CF3AD10509F487C11B +:100D9000C13BD10509F486C1C23BD10509F485C127 +:100DA000C33BD10509F484C1C43BD10509F483C117 +:100DB000C53BD10509F482C1C63BD10509F481C107 +:100DC000C73BD10509F480C1C83BD10509F47FC1F7 +:100DD000C93BD10509F47EC1CA3BD10509F47DC1E7 +:100DE00000E014E47CC1CE019F700E940B0678C124 +:100DF000DD278E01106C73C1CF70DD278E01146D5D +:100E00006EC100E010ED6BC100E012ED68C100E0C2 +:100E100013ED65C10E94E11B0E941F0A0E94E303BB +:100E20008FEF94E32CE0815090402040E1F700C028 +:100E300000000E94382353C18091F20281608093A8 +:100E4000F2024DC10E949923811102C00E947523B4 +:100E50000E94AC2390E090931D0380931C03C2304A +:100E600080E5D80721F480911C03816086C0C430DE +:100E700090E5D90721F480911C0382607EC0C630C2 +:100E800020E5D20721F480911C03846076C0C8302D +:100E900080E5D80719F480911C0327C0CA3090E57B +:100EA000D90721F480911C03806167C0CC3020E514 +:100EB000D20721F480911C0380625FC0CE3080E5B0 +:100EC000D80721F480911C03806457C0C03190E59D +:100ED000D90721F480911C0380684FC0C23120E5FE +:100EE000D20729F480911C038460886046C0C33017 +:100EF00080E5D80721F480911C038E7F3EC0C53069 +:100F000090E5D90721F480911C038D7F36C0C7304E +:100F100020E5D20721F480911C038B7F2EC0C930BD +:100F200080E5D80719F480911C0326C0CB3090E5EA +:100F3000D90721F480911C038F7E1FC0CD3020E59E +:100F4000D20721F480911C038F7D17C0CF3080E53C +:100F5000D80721F480911C038F7B0FC0C13190E52D +:100F6000D90721F480911C038F7707C0C331D04586 +:100F700031F480911C038B7F877F80931C038091C9 +:100F80001C030E94B023ABC08D2F99278F70992727 +:100F900081309105D9F49E012370332702C0880F58 +:100FA000991F2A95E2F79C688E0144E0000F111FFB +:100FB0004A95E1F700271370802B912B53E0CC0F5B +:100FC000DD1F5A95E1F7C076DD272FC082309105ED +:100FD00031F4DC2FCC278E01016F106A80C0833082 +:100FE000910569F4CE018370992701E010E002C0F9 +:100FF000000F111F8A95E2F7C8019C680FC084306A +:101000009105B9F4CE018370992701E010E002C088 +:10101000000F111F8A95E2F7C8019A6823E0CC0FF0 +:10102000DD1F2A95E1F7C07ED7708C010C2B1D2B9C +:1010300056C08530910531F4DC2FCC278E01046F2A +:10104000106A4DC0069709F04AC0CF71DD27DC2F2A +:10105000CC278E01106243C000E010E040C08E013A +:101060003EC001E810E43BC003E810E438C002EEE3 +:1010700014E435C009EE14E432C00AEE14E42FC0C3 +:1010800005EB14E42CC006EB14E429C007EB14E4D0 +:1010900026C00CEC14E423C00DEC14E420C003E8DB +:1010A00015E41DC00AE815E41AC002E915E417C0EA +:1010B00004E915E414C001E216E411C003E216E4E9 +:1010C0000EC004E216E40BC005E216E408C006E216 +:1010D00016E405C007E216E402C00AE216E4C801FD +:1010E000DF91CF911F910F9108959CE0799FF001BE +:1010F000112490E3899FE00DF11D1124E60FF11DED +:10110000EE0FFF1FEC52FE4F85919491803E9105AA +:10111000E0F4803C910558F58133910509F46FC0E6 +:1011200048F48932910509F463C08A32910509F4C3 +:101130006DC072C089339105E9F082389105D1F014 +:101140008533910509F44DC067C0833E910581F157 +:1011500038F4803E9105B9F0823E9105D9F05CC02B +:10116000863E910561F1873E9105A1F155C00E942F +:101170000306089520911C0320FD02C021FF4CC0EE +:1011800080EE90E049C080911C0380FFF9CF89E395 +:1011900090E042C080911C0382FF0EC080911C032E +:1011A00084FF03C080E090E037C083EE90E034C05D +:1011B00080911C0382FFF2CF82EE90E02DC08091DF +:1011C0001C0383FF0BC080911C0384FDEBCF87EED3 +:1011D00090E022C080911C0383FFF5CF86EE90E063 +:1011E0001BC080911C0385FF07C089E290E014C0FA +:1011F00080911C0385FFF9CF85E390E00DC08091BD +:101200001C0386FF07C08AE290E006C080911C03A1 +:1012100086FFF9CF81E390E00E94130608950C94B5 +:10122000E402E82FF0E0E25BFE4F8081E82FEF70F0 +:10123000F0E082958F7021E030E0A90102C0440FF8 +:10124000551F8A95E2F740A308950F931F93CF93FC +:10125000DF9385B7806885BF85B7806885BFC3E0A9 +:10126000D0E001E010E0FE01E25BFE4F8081E82F5C +:10127000EF70F0E021A182958F70A80102C0440FA9 +:10128000551F8A95E2F7CA01822B81A38C2F0E94F9 +:101290001109219740F78BE090E061E070E0FC01DC +:1012A000EE5BFE4F2081E22FEF70F0E042A122952D +:1012B0002F70DB0102C0AA0FBB1F2A95E2F79D0128 +:1012C000242B22A3019758F7DF91CF911F910F9103 +:1012D0000C948E03EF92FF920F931F93CF93DF93A3 +:1012E00000E212E0C3E0EE24E394F12CD5E08C2F71 +:1012F0000E9411098BE090E040E050E0FC01EE5BC1 +:10130000FE4F6081E62FEF70F0E020A130E06295A3 +:101310006F7002C0359527956A95E2F720FD09C0E8 +:101320009701082E02C0220F331F0A94E2F7422BC6 +:10133000532B019718F7F801929182918F0184172E +:10134000950721F051834083D09305018C2F0E9493 +:101350001109C15060F68091050187FD2CC08150B4 +:10136000809305018F3F39F08FE99FE00197F1F7F6 +:1013700000C0000020C080911E0290911F02909337 +:1013800027028093260280911C0290911D02909367 +:1013900025028093240280911A0290911B0290935F +:1013A0002302809322028091180290911902909357 +:1013B0002102809320020E94900381E0DF91CF916F +:1013C0001F910F91FF90EF900895E82FF0E0EE0F3E +:1013D000FF1FE05EFD4F80819181089508950F9376 +:1013E0001F93CF9308E212E0C0E0F801929182913E +:1013F0008F010E945522C80FF2E000321F07A9F7A3 +:101400008C2FCF911F910F9108950E9499238111E4 +:1014100002C00E9475230E94BE23809307033E9A58 +:10142000809171008D7F8093710082E080939000A5 +:101430008AE18093910081E080932A02089580914F +:101440002A02811102C00E94050A10927A021092AB +:101450007902809171008D7F80937100809190005E +:101460008F738093900010923C0210923B02109276 +:10147000730210927402109275021092760210920A +:10148000720210927102E1E5F2E0A1E4B2E0119281 +:101490001192119211921D921D9282E0E137F8078C +:1014A000B1F70895CF92DF92EF92FF920F931F93BF +:1014B000CF93DF9320913B02222309F484C06B0178 +:1014C0007C0180912A02811102C00E94050A01E775 +:1014D00012E0C7E0D0E0A7019601F8019291829155 +:1014E000729162918F010E940929811131C0FE0120 +:1014F000EE0FFF1FEE0FFF1FEF5AFD4F10821182FC +:1015000012821382DE01AA0FBB1FAF5BBD4F119683 +:101510001C921E92C730D105E9F021964481558175 +:10152000668177814083518362837383148215823D +:101530001682178212968D919C91139711969C9307 +:101540008E9313961C921E92129734961296E2CFA7 +:10155000219708F68091790290917A02019797FD80 +:1015600005C090937A028093790204C010927A02A7 +:10157000109279028091790290917A0220917702FB +:10158000309178022817390724F0109278021092CF +:101590007702892BC1F4809171008D7F8093710057 +:1015A000809190008F73809390001092730210923C +:1015B00074021092750210927602109272021092CA +:1015C000710210923B02DF91CF911F910F91FF901A +:1015D000EF90DF90CF9008951F920F920FB60F9269 +:1015E00011244F925F926F927F928F929F92AF924F +:1015F000BF92CF92DF92EF92FF922F933F934F9340 +:101600005F936F937F938F939F93AF93BF93CF938A +:10161000DF93EF93FF9380913B02882309F49BC1F2 +:10162000C0917902D0917A021C161D060CF093C16C +:1016300040902B0250902C0260902D0270902E0250 +:1016400020E030E0A901C301B2010E94B42A1816BB +:101650000CF065C0C130D10509F452C08091770209 +:1016600090917802BE010E94862C7C0190937802B2 +:101670008093770280903D0290903E02A0903F02BE +:10168000B090400220E030E040E85FE3C501B401E3 +:101690000E94A52860933D0270933E0280933F0212 +:1016A00090934002F701EE0FFF1FEE0FFF1FEF5A5E +:1016B000FD4FA301920160817181828193810E941B +:1016C0000D2920E030E040E05EE30E94B82A9B0153 +:1016D000AC01C501B4010E94B42A18168CF4C701EC +:1016E0000196BE010E94862C909378028093770227 +:1016F00010923D0210923E0210923F021092400260 +:10170000E0917702F0917802EE0FFF1FEE0FFF1FBE +:10171000EF5AFD4F6081718182819381D0C0C0906A +:101720007302D0907402E0907502F090760220E08F +:1017300030E0A901C701B6010E9409292197882339 +:1017400009F4A2C0FE01EE0FFF1FEE0FFF1FEF5ABC +:10175000FD4F80809180A280B380A5019401C701D4 +:10176000B6010E94092987FF31C0A501940160E0FC +:1017700070E08CED93EC0E940D2920E030E040E415 +:1017800051E40E940D2920E030E040E05FE30E9438 +:10179000B82A9B01AC0160E070E080E090E40E9418 +:1017A0001B2B9B01AC01C501B4010E94B82A9B010F +:1017B000AC01C701B6010E94092987FF07C0A70134 +:1017C000960160E070E08CED93E439C0A5019401CE +:1017D000C701B6010E94B42A18160CF055C0A50125 +:1017E000940160E070E08CED93E40E940D2920E00C +:1017F00030E040E451E40E940D2920E030E040E078 +:101800005FE30E94B82A9B01AC0160E070E080E0D9 +:1018100090E40E941B2B9B01AC01C501B4010E9406 +:10182000B82A9B01AC01C701B6010E94B42A181660 +:101830005CF5A701960160E070E08CED93EC0E94EE +:101840000D2920E030E040E451E40E940D2920E021 +:1018500030E040E05FE30E94B82A9B01AC0160E009 +:1018600070E080E090E40E941B2B9B01AC01C7015B +:10187000B6010E94B82A6093730270937402809339 +:1018800075029093760213C0FE01EE0FFF1FEE0F5C +:10189000FF1FEF5AFD4F80819181A281B381809318 +:1018A000730290937402A0937502B09376026091D4 +:1018B000730270917402809175029091760220916A +:1018C0002802309129022F3F4FEF340731F02F5F6C +:1018D0003F4F30932902209328020E94940E6B01FF +:1018E0007C0120E034E244EF51E40E94092987FFA3 +:1018F00008C086EFC82E88E2D82E84EFE82E81E457 +:10190000F82E20E030E040E051E4C701B6010E942B +:10191000B82A9B01AC0160E074E284E79BE40E947A +:101920000D296B017C010E947A29709397006093C6 +:1019300096002091060130910701409108015091D5 +:101940000901C701B6010E94B82A0E947A29709342 +:1019500099006093980080913C02882309F433C178 +:10196000C0903702D0903802E0903902F0903A02ED +:1019700020E030E0A901C701B6010E94B42A181680 +:10198000D4F580912802909129028F3F2FEF920782 +:1019900029F001969093290280932802C701B6018D +:1019A0000E94940E20E030E040E051E40E94B82A0A +:1019B0009B01AC0160E074E284E79BE40E940D2986 +:1019C0006B017C010E947A297093970060939600C6 +:1019D00020910601309107014091080150910901C1 +:1019E000C701B6010E94B82A0E947A297093990013 +:1019F0006093980008C01092970010929600109281 +:101A000099001092980060913102709132026F5FDC +:101A10007F4F709332026093310220919600309193 +:101A2000970080E090E0232BF1F0C0919600D091D8 +:101A300097000E94A6296B017C01BE0180E090E026 +:101A40000E94A6299B01AC0160913302709134027F +:101A500080913502909136020E940D2920E03FEFDF +:101A60004FE757E410C00E94A6296B017C0120E0DB +:101A700030EE4FEF54E46091330270913402809164 +:101A80003502909136020E94B82A9B01AC01C70131 +:101A9000B6010E94B42A87FD96C080912F028F5F05 +:101AA00080932F0290E0209103033091040382176A +:101AB0009307A0F080910E03882319F010922F0253 +:101AC0000DC0809171008D7F809371008091900096 +:101AD0008F738093900010923C027DC08091300201 +:101AE000C0912F02811128C0C0900803D090090333 +:101AF000E0900A03F0900B0320E030E0A901C70159 +:101B0000B6010E94B42A1816BCF481E0809330021A +:101B100010923702109238021092390210923A0253 +:101B2000C0923302D0923402E0923502F092360233 +:101B3000C150C0932F0243C010923002109229026C +:101B400010922802E0910503F091060348E0C49F3B +:101B5000E00DF11D112480819181A281B3818093D8 +:101B6000370290933802A0933902B0933A0220E0F2 +:101B700030E040E85EE364817581868197810E9450 +:101B8000B82A6B017C0180910A01682F70E080E027 +:101B900090E00E94A62920E030E048EC52E40E9448 +:101BA0000D299B01AC01C701B6010E94B82A6093C0 +:101BB0003302709334028093350290933602109270 +:101BC0003202109231028091070380FD04C010920E +:101BD0003C0210923B02FF91EF91DF91CF91BF91B8 +:101BE000AF919F918F917F916F915F914F913F91B5 +:101BF0002F91FF90EF90DF90CF90BF90AF909F908C +:101C00008F907F906F905F904F900F900FBE0F90CE +:101C10001F901895CF92DF92EF92FF92CF93DF93B0 +:101C20006B017C01EA0180912A02811102C00E94AD +:101C3000050A8091070380FF46C080917902909148 +:101C40007A0208970CF03FC0809171008D7F8093DD +:101C5000710080913C0281110E941F0A81E08093F3 +:101C60003B02109229021092280220E030E0A901E4 +:101C7000C701B6010E94B42A1816DCF480917902DB +:101C800090917A02FC01EE0FFF1FEE0FFF1FEF5A3B +:101C9000FD4FC082D182E282F382FC01EE0FFF1F72 +:101CA000EF5BFD4FD183C083019690937A028093BE +:101CB0007902809171008260809371008091900020 +:101CC000806880939000DF91CF91FF90EF90DF903C +:101CD000CF90089580910703817008958091070344 +:101CE0008160809307030E94C2230C94EA038091D1 +:101CF00007038E7F809307030C94C22380917B029D +:101D000090E0019666E070E00E94862C80937B0252 +:101D1000089580917B0290E0019766E070E00E9458 +:101D2000862C80937B0208958F929F92AF92BF92F0 +:101D3000CF92DF92EF92FF920F931F93CF93DF9397 +:101D40006B017C01C0912802D0912902BE0180E084 +:101D500090E00E94A6294B015C01A701960160E07A +:101D600070E08CE594E40E940D299B01AC01C50153 +:101D7000B4010E94B82A0E947A2920917B02233064 +:101D800009F473C028F4222351F02130E9F02CC16A +:101D9000243009F4A0C0253009F4E0C025C180E05A +:101DA00090E0A0E0BFE38093060190930701A09329 +:101DB0000801B093090110922B0210922C0210928C +:101DC0002D0210922E0210C110922B0210922C02A2 +:101DD00010922D0210922E026431710540F46A3087 +:101DE000710560F520E030E040E85EE32BC0693C1F +:101DF000710508F0AAC080E090E00E94A62920E0CA +:101E000030E040EA51E40E94A42820E030E044E3BE +:101E100053E40E940D299B01AC010E94B82A20E0E6 +:101E200030E040E05EE30E94B82A9B01AC0160E034 +:101E300070E080E09EE30E94A42844C020E030E0EF +:101E400040E05FE3C701B6010E94B82A6B017C0144 +:101E500080E090E0A0E0BEE380930601909307014C +:101E6000A0930801B0930901BFC010922B021092F9 +:101E70002C0210922D0210922E024AE0469F9001F1 +:101E8000479F300D1124C90168EB7BE00E94722C42 +:101E9000BC016C5D754077FF03C071956195710958 +:101EA000882777FD8095982F0E94A8292EE333EC90 +:101EB0004EE259E30E94B82A20E030E040EC5EE3B5 +:101EC0000E94A52860930601709307018093080182 +:101ED0009093090189C010922B0210922C0210924B +:101EE0002D0210922E02CE0183709927892BE1F0EA +:101EF000BE016170772780E090E00E94A62920E073 +:101F000030E040E05EE30E94B82A20E030E040E4A8 +:101F10005FE30E94A52860930601709307018093F8 +:101F20000801909309010CC080E090E0A0E0BFE3BD +:101F30008093060190930701A0930801B0930901D3 +:101F4000C770DD27CD2B09F04FC01092060110920B +:101F50000701109208011092090146C010922B024D +:101F600010922C0210922D0210922E0200E010E02E +:101F700020E03FE30093060110930701209308013E +:101F8000309309016739710578F180E090E00E9493 +:101F9000A62920E030E047E153E40E94A42820E095 +:101FA00030E04AE754E40E940D2920E030E048E4A4 +:101FB00052E40E94B82A20E030E040EA51E40E9456 +:101FC000EA290E947529660F771F660F771FFB01AC +:101FD000EE5AFE4F2081318142815381C701B60103 +:101FE0000E94B82A6B017C01C701B601DF91CF9135 +:101FF0001F910F91FF90EF90DF90CF90BF90AF9027 +:102000009F908F90089580918C020895CF93DF93D5 +:1020100000D01F92CDB7DEB79C01809113038430AE +:1020200019F593E099833B832A839093E9008FEF1E +:102030009091E800815095FD06C095ED9A95F1F7D5 +:1020400000008111F5CF8091E80085FF0DC040E0D0 +:1020500050E063E070E0CE0101960E94671280912B +:10206000E8008E778093E8000F900F900F90DF913B +:10207000CF910895CF93DF9300D01F92CDB7DEB7F5 +:1020800020911303243021F522E029839B838A8346 +:1020900083E08093E9008FEF9091E800815095FDF7 +:1020A00006C095ED9A95F1F700008111F5CF80916A +:1020B000E80085FF0DC040E050E063E070E0CE0135 +:1020C00001960E9467128091E8008E778093E80065 +:1020D0000F900F900F90DF91CF91089520911303EF +:1020E0002430F1F422E02093E9002FEF3091E80052 +:1020F000215035FD06C035ED3A95F1F7000021116C +:10210000F5CF2091E80025FF0BC040E050E065E0EE +:1021100070E00E9467128091E8008E778093E8005B +:102120000895CF93DF93EC0190911303943009F05D +:1021300046C0809115018823D9F08091160188232B +:10214000B9F09093E9008FEF9091E800815095FDF0 +:1021500006C095E19A95F1F700008111F5CF8091C5 +:10216000E80085FF2CC040E050E060E170E017C05F +:1021700081E08093E9008FEF9091E800815095FD18 +:1021800006C095ED9A95F1F700008111F5CF809189 +:10219000E80085FF14C040E050E068E070E0CE0148 +:1021A0000E9467128091E8008E778093E80080E1BA +:1021B000FE01ACE7B2E001900D928A95E1F7DF9164 +:1021C000CF91089580911203811109C00E94FC13E0 +:1021D0000E9459148091E20084608093E200089587 +:1021E000109212030895089508950C94A02242E0DD +:1021F00061EC81E00E94761342E061EC82E00E9493 +:10220000761342E061EC83E00E94761342E161ECD8 +:1022100084E00C94761380911503833009F455C043 +:1022200030F4813071F0823009F48EC008958A3024 +:1022300009F47AC08B3009F460C0893009F09CC081 +:1022400020C080911403813A09F096C08091E80083 +:10225000877F8093E8008091180390911903892B60 +:1022600021F460E18CE792E003C060E080E090E060 +:1022700070E00E94B2128091E8008B778093E800B2 +:10228000089580911403813209F076C0809118037B +:1022900090911903009719F0039709F06DC0809190 +:1022A000E800877F8093E8008091E80082FD05C008 +:1022B000809113038111F8CF5FC08091F10080936A +:1022C0008C028091E8008B7753C080911403813A8F +:1022D00009F052C08091180390911903892B09F0DD +:1022E0004BC08091E800877F8093E8008091E800F0 +:1022F00080FFFCCF8091150136C08091140381329C +:10230000D9F58091180390911903892BA9F5809133 +:10231000E800877F8093E8000E94AB13809116034A +:10232000809315010C94E11B80911403813221F5F7 +:102330008091E800877F8093E8000E94AB13809132 +:10234000170380938D02089580911403813AA1F4BC +:102350008091E800877F8093E8008091E80080FF0B +:10236000FCCF80918D028093F1008091E8008E7700 +:102370008093E8000C94AB13089584B7877F84BFE3 +:1023800088E10FB6F89480936000109260000FBE51 +:1023900090E080E80FB6F89480936100909361001C +:1023A0000FBE0E944E170E94FC130E945914809188 +:1023B000E20084608093E20078940E94DF160E941D +:1023C00050178BE091E00E94FA168091130385303C +:1023D00069F40E946122809111038823B1F30E9465 +:1023E0008F22882391F30E945112EFCF0E94581739 +:1023F000ECCF292F332723303105C9F064F4213085 +:10240000310581F02230310509F043C08DE690E0BE +:1024100020EB33E042C021323105F1F022323105A8 +:1024200041F137C082E190E02DE134E036C09927D8 +:102430008130910541F08230910541F0892B49F5B9 +:10244000ECEAF3E005C0EEE7F3E002C0E4E5F3E018 +:10245000849190E09F0121C06430D8F4E62FF0E031 +:10246000EE0FFF1FE255FE4F2081318189E090E0A1 +:1024700014C0643070F470E0FB01EE0FFF1FEA55EA +:10248000FE4F20813181FB01EE55FE4F808190E0AF +:1024900004C080E090E020E030E0FA013183208346 +:1024A000089580E189BD82E189BD09B400FEFDCFB8 +:1024B0008091D8008F7D8093D8008091E000826069 +:1024C0008093E0008091E00081FDFCCF0895CF92E1 +:1024D000DF92EF92FF920F931F93CF93DF93EC0164 +:1024E0008B016A010E94CA13811133C0C114D10447 +:1024F00039F0F60180819181081B190BC80FD91F93 +:10250000E12CF12C0115110519F18091E80085FDF0 +:1025100016C08091E8008E778093E800C114D10442 +:1025200049F0F60180819181E80EF91EF182E08286 +:1025300085E00FC00E94CA13882321F30AC0899145 +:102540008093F10001501109FFEFEF1AFF0ADACF73 +:1025500080E0DF91CF911F910F91FF90EF90DF907E +:10256000CF90089520911A0330911B032617370747 +:1025700048F06115710539F42091E8002E77209319 +:10258000E80001C0B90140E061157105A9F1209191 +:102590001303222309F443C0253009F442C02091DB +:1025A000E80023FD40C02091E80022FD32C02091C8 +:1025B000E80020FFE9CF4091F3002091F20030E0E5 +:1025C000342BFC01CF016115710559F0283031051C +:1025D00040F481918093F100615071092F5F3F4F6A +:1025E000F1CF41E02830310509F040E02091E800CA +:1025F0002E772093E800C8CF4111C9CF0AC080913F +:102600001303882361F0853061F08091E80083FD39 +:102610000AC08091E80082FFF2CF80E0089582E056 +:10262000089583E0089581E0089520911A03309180 +:102630001B032617370748F06115710539F42091FF +:10264000E8002E772093E80001C0B901FC0120E0EA +:102650006115710591F180911303882309F440C03D +:10266000853009F43FC08091E80083FD3DC0809132 +:10267000E80082FD2FC08091E80080FFE9CF209123 +:10268000F3008091F20090E0922B6115710559F0F2 +:102690008830910540F424912093F10031966150E7 +:1026A00071090196F2CF21E0089709F020E08091AE +:1026B000E8008E778093E800CBCF2111CCCF0AC001 +:1026C00080911303882361F0853061F08091E800E8 +:1026D00083FD0AC08091E80082FFF2CF80E0089578 +:1026E00082E0089583E0089581E00895982F97305F +:1026F00058F59093E900981739F07091EC0020910B +:10270000ED005091F00003C0242F762F50E021FF00 +:1027100019C03091EB003E7F3093EB003091ED001B +:102720003D7F3093ED003091EB0031603093EB0052 +:102730007093EC002093ED005093F0002091EE0098 +:1027400027FF07C09F5FD3CF8F708093E90081E0A0 +:10275000089580E008958091140387FF11C080914F +:10276000E80082FD05C0809113038111F8CF11C0EC +:102770008091E8008B770BC080911303882349F088 +:102780008091E80080FFF8CF8091E8008E778093F9 +:10279000E80008952091E4003091E50095E640912D +:1027A000EC00842F817040FF22C08091E80080FD02 +:1027B0001CC080911303882391F0853091F08091A3 +:1027C000EB0085FD10C04091E4005091E5004217F8 +:1027D000530729F39A01915011F784E0089582E09C +:1027E000089583E0089581E0089580E00895409180 +:1027F000E80042FFDECF08950E946A140E9472141E +:10280000E0EEF0E0808181608083E8EDF0E080819F +:102810008F77808319BCA7EDB0E08C918E7F8C936D +:1028200080818F7E80831092120308950F931F93EF +:10283000CF93DF930E946A140E947214C8EDD0E017 +:1028400088818F77888388818068888388818F7D5D +:10285000888319BC1092130310920F031092110376 +:102860001092100300EE10E0F80180818B7F8083CE +:1028700088818160888342E060E080E00E94761376 +:10288000E1EEF0E080818E7F8083E2EEF0E08081F7 +:1028900081608083808188608083F80180818E7F61 +:1028A0008083888180618883DF91CF911F910F9110 +:1028B0000895E8EDF0E080818F7E8083E7EDF0E021 +:1028C00080818160808384E082BF81E080931203F5 +:1028D0000C941614E8EDF0E080818E7F80831092D6 +:1028E000E20008951092DA001092E10008951F921C +:1028F0000F920FB60F9211242F933F934F935F9334 +:102900006F937F938F939F93AF93BF93EF93FF93B7 +:102910008091E10082FF0BC08091E20082FF07C03E +:102920008091E1008B7F8093E1000E94DE16809110 +:10293000DA0080FF1FC08091D80080FF1BC080910B +:10294000DA008E7F8093DA008091D90080FF0DC07D +:1029500080E189BD82E189BD09B400FEFDCF81E03F +:10296000809313030E94E21005C019BC1092130358 +:102970000E94F0108091E10080FF19C08091E20078 +:1029800080FF15C08091E2008E7F8093E2008091ED +:10299000E20080618093E2008091D80080628093A1 +:1029A000D80019BC85E0809313030E94F410809135 +:1029B000E10084FF30C08091E20084FF2CC080E100 +:1029C00089BD82E189BD09B400FEFDCF8091D800A8 +:1029D0008F7D8093D8008091E1008F7E8093E1000D +:1029E0008091E2008F7E8093E2008091E20081601E +:1029F0008093E20080910F03882311F084E007C0E8 +:102A00008091E30087FD02C081E001C083E08093F4 +:102A100013030E94F5108091E10083FF29C080918B +:102A2000E20083FF25C08091E100877F8093E10071 +:102A300082E08093130310920F038091E1008E7F58 +:102A40008093E1008091E2008E7F8093E20080918C +:102A5000E20080618093E20042E060E080E00E945A +:102A600076138091F00088608093F0000E94F3104C +:102A7000FF91EF91BF91AF919F918F917F916F9156 +:102A80005F914F913F912F910F900FBE0F901F902C +:102A900018951F920F920FB60F9211242F933F9308 +:102AA0004F935F936F937F938F939F93AF93BF9356 +:102AB000CF93DF93EF93FF93C091E900CF708091A4 +:102AC000EC00D82FD17080FDD0E81092E900809101 +:102AD000F000877F8093F00078940E948D1510920B +:102AE000E9008091F00088608093F000CD2BCF70DA +:102AF000C093E900FF91EF91DF91CF91BF91AF912A +:102B00009F918F917F916F915F914F913F912F9105 +:102B10000F900FBE0F901F9018951F93CF93DF93C8 +:102B2000CDB7DEB7AA970FB6F894DEBF0FBECDBF04 +:102B3000E4E1F3E088E08E0F9091F10091938E1321 +:102B4000FBCF0E940B118091E80083FF1FC1809191 +:102B5000140390911503492F50E04A30510508F0B5 +:102B600015C1FA01EA5AFF4F0C949A2C803881F073 +:102B7000823809F00BC1809118038F708093E900AF +:102B80008091EB0085FB882780F91092E90006C050 +:102B90008091100390911103911182609091E8004F +:102BA000977F9093E8008093F1001092F100C8C0E5 +:102BB000282F2D7F09F0EAC0882319F0823061F0B8 +:102BC000E5C080911603813009F0E0C0933009F030 +:102BD00080E0809311032BC080911603811127C0E0 +:102BE000809118038F7009F4D1C08093E90020917F +:102BF000EB0020FF1CC0933021F48091EB00806239 +:102C000014C09091EB0090619093EB0021E030E0D4 +:102C1000A90102C0440F551F8A95E2F74093EA00CC +:102C20001092EA008091EB0088608093EB00109294 +:102C3000E9008091E800877F86C08111A7C01091CC +:102C400016031F778091E3008078812B8093E30047 +:102C50008091E800877F8093E8000E94AB13809109 +:102C6000E80080FFFCCF8091E30080688093E30060 +:102C7000111102C082E001C083E08093130386C07B +:102C80008058823008F082C080911603909117031B +:102C90008C3D53E0950779F583E08A838AE2898346 +:102CA0004FB7F894DE01139620E03EE051E2E32FA7 +:102CB000F0E050935700E49120FF03C0E295EF70DD +:102CC0003F5FEF708E2F90E0EA3010F0C79601C0A2 +:102CD000C0968D939D932F5F243149F74FBF80910C +:102CE000E800877F8093E8006AE270E0CE010196F9 +:102CF0000E94B21214C0AE014F5F5F4F6091180383 +:102D00000E94F911BC01009709F440C09091E800BD +:102D1000977F9093E80089819A810E941513809192 +:102D2000E8008B778093E80031C0803879F5809196 +:102D3000E800877F8093E80080910F038093F10083 +:102D40008091E8008E778093E8000E94AB131EC04C +:102D500081111CC0909116039230C0F48091E8005C +:102D6000877F8093E80090930F030E94AB138091BC +:102D70000F03811106C08091E30087FD02C081E04E +:102D800001C084E0809313030E94F7108091E80053 +:102D900083FF0AC08091E800877F8093E8008091DC +:102DA000EB0080628093EB00AA960FB6F894DEBF2A +:102DB0000FBECDBFDF91CF911F9108950895CF939E +:102DC000809113038823A1F0C091E900CF70909106 +:102DD000EC00892F817090FD80E8C82B1092E900EB +:102DE0008091E80083FD0E948D15CF70C093E900AB +:102DF000CF91089590939302809392020895E09169 +:102E00009202F0919302309721F00190F081E02D31 +:102E1000099480E00895E0919202F0919302309736 +:102E200021F00280F381E02D09940895E09192024F +:102E3000F0919302309721F00480F581E02D099400 +:102E4000089520919002309191028217930771F0BA +:102E50009093910280939002E0919202F0919302FC +:102E6000309721F00680F781E02D09940895209194 +:102E70008E0230918F028217930771F090938F0228 +:102E800080938E02E0919202F0919302309721F0AC +:102E90000084F185E02D0994089508950C944D1750 +:102EA0000E94D4220E9425090E945A230C940928CA +:102EB0005F926F927F928F929F92AF92BF92CF92CA +:102EC000DF92EF92FF920F931F93CF93DF9300D087 +:102ED00000D01F92CDB7DEB70E946A099DE9C92EC6 +:102EE00092E0D92E03E010E0AA24A394B12C502E36 +:102EF000802F0E94E5094C01F601729062906F01EB +:102F00006826792661147104A1F40150110978F73B +:102F10008FEF89838A831B820E94DD228160782F54 +:102F20009D838C8349815A816B818D810E94081811 +:102F300038C08091F20281FD0E94EE092BE030E062 +:102F40007501022E02C0EE0CFF1C0A94E2F7C701C5 +:102F500086219721892B09F129835A828E209F206F +:102F600091E0892809F490E09B830E94DD22816032 +:102F7000782F9D838C8349815A816B818D810E943A +:102F80000818000F111FF801EB56FD4F8081918149 +:102F9000E826F926F182E08204C02150310980F64A +:102FA000B4CF0E944125109194020E94FF16181779 +:102FB000D1F00E94FF16809394020F900F900F9013 +:102FC0000F900F90DF91CF911F910F91FF90EF9095 +:102FD000DF90CF90BF90AF909F908F907F906F9039 +:102FE0005F900C940F090F900F900F900F900F901F +:102FF000DF91CF911F910F91FF90EF90DF90CF90D5 +:10300000BF90AF909F908F907F906F905F9008954A +:10301000CF93DF93CDB7DEB72B970FB6F894DEBF13 +:103020000FBECDBF4F83588769877A878B87DE01B4 +:10303000119686E0FD0111928A95E9F785E0FE017F +:10304000379601900D928A95E1F749815A816B81FB +:103050007C818D819E810E947F1E2B960FB6F894F5 +:10306000DEBF0FBECDBFDF91CF910895CF938823F0 +:1030700009F4C2C0C82F823859F40E94FF1681FD9E +:10308000BBC089E30E9459210E94262289E30CC01B +:10309000833879F40E94FF1680FDAEC083E50E945C +:1030A00059210E94262283E50E949B21CF910C94F6 +:1030B0002622843859F40E94FF1682FD9DC087E4C1 +:1030C0000E9459210E94262287E4EECF8CEF8C0FBC +:1030D000813A48F48C2F0E94712781118DC08C2F6A +:1030E0000E945921E3CF80E28C0F883048F4C770EA +:1030F00081E001C0880FCA95EAF70E94DF21D6CF90 +:103100008BE58C0F833078F4C53A29F0C63A31F05C +:1031100083E890E005C081E890E002C082E890E09A +:10312000CF910C94211788E58C0F833108F064C08F +:10313000C83A39F1C93A41F1CA3A49F1CB3A51F1A9 +:10314000CC3A59F1CD3A61F1C03B69F1CE3A71F117 +:10315000CF3A79F1C13B81F1C23B89F1C33B91F197 +:10316000C43B99F1C53BA1F1C63BA9F1C73BB1F105 +:10317000C83BB9F1C93BC1F1CA3BC9F180E090E05D +:1031800038C082EE90E035C089EE90E032C08AEE21 +:1031900090E02FC085EB90E02CC086EB90E029C03A +:1031A00087EB90E026C08CEC90E023C08DEC90E0A3 +:1031B00020C083E891E01DC08AE891E01AC082E94E +:1031C00091E017C084E991E014C081E292E011C05F +:1031D00083E292E00EC084E292E00BC085E292E0CE +:1031E00008C086E292E005C087E292E002C08AE26F +:1031F00092E0CF910C943717CF910895882309F46A +:103200004BC0823859F40E94FF1681FF45C089E304 +:103210000E9459210E94262289E30CC0833871F450 +:103220000E94FF1680FF38C083E50E9459210E944A +:10323000262283E50E949B210C942622843859F48F +:103240000E94FF1682FF28C087E40E9459210E9435 +:10325000262287E4EFCF9CEF980F913A58F390E243 +:10326000980F983050F4877091E001C0990F8A95BB +:10327000EAF7892F0E94E521DFCF9BE5980F933075 +:1032800020F480E090E00C942117885A833120F4D8 +:1032900080E090E00C9437170895882321F00E9475 +:1032A000DF210C9426220895882321F00E94E52135 +:1032B0000C94262208957F928F929F92AF92BF9294 +:1032C000CF92DF92EF92FF920F931F93CF93DF93F2 +:1032D0001F92CDB7DEB77C01C62E772EFC0105818B +:1032E00002950F70128111110E94FC210E9452213F +:1032F000882379F0112369F080E28C0D883048F042 +:1033000082E00E943B210E94522191E0D82ED926D2 +:1033100001C0D12CE72DE295EF70F0E0E05AFF4FAD +:103320000C949A2C872D807F072D0F70882311F025 +:103330000295007F112389F0002309F499C180E2EE +:103340008C0D883020F4802F0E94DF2103C0802F55 +:103350000E94EF210E9426228BC18C2D0E94FE1814 +:10336000002309F4C3C180E28C0D883020F4802F43 +:103370000E94E52103C0802F0E94F5210E94262291 +:10338000B5C1872D807F972D9F70803211F4892FD2 +:1033900003C0892F8295807FCC2021F0F1E0CF16E9 +:1033A000A1F01DC0112339F0002319F1013009F5F6 +:1033B0000E940F229BC1002319F0013009F496C12D +:1033C00089830E941222898110C1112321F00630C5 +:1033D00008F08CC10EC0053008F088C106C1112369 +:1033E00059F0002331F0F701958190FF41C19F70A2 +:1033F00095830E944D197AC1002309F4F6C03EC19D +:10340000872D86958695837090E0009719F0019737 +:1034100061F06CC1112321F08C2D972D937002C0A7 +:1034200080E090E00E94211761C1112321F08C2DD2 +:10343000972D937002C080E090E00E94371756C12C +:103440008C2D112319F00E94492402C00E94B1243E +:103450000E9436254BC1872D837009F052C011118F +:1034600045C18C2D829586958770880F880F9C2D7D +:103470009F70892E912CA12CB12C082E04C0880C91 +:10348000991CAA1CBB1C0A94D2F7C4FE14C00FE0FE +:1034900010E020E030E0B901A80104C0440F551F3E +:1034A000661F771F8A95D2F7CB01BA016095709598 +:1034B0008095909503C060E070E0CB01272D2695A4 +:1034C0002695237030E02230310569F02330310534 +:1034D00089F0682979298A299B292130310571F0E1 +:1034E0000E94C71F03C1682979298A299B290E9444 +:1034F000E31FFCC00E94C71FC501B4010E94AB1F9F +:10350000F5C0112319F0872D817001C0869588239D +:1035100009F4ECC08C2D829586958770880F880FF2 +:103520009C2D9F70892E912CA12CB12C082E04C0AB +:10353000880C991CAA1CBB1C0A94D2F7C4FE14C0A8 +:103540000FE010E020E030E0B901A80104C0440F12 +:10355000551F661F771F8A95D2F7CB01BA01609578 +:1035600070958095909503C060E070E0CB01272DA9 +:10357000269526952370422F50E04230510569F080 +:103580004330510589F0682979298A299B294130DE +:10359000510571F00E94A120A9C0682979298A29C2 +:1035A0009B290E94BD20A2C00E94A120C501B40198 +:1035B0000E9485209BC08C2D90E0FC01E05EF1090B +:1035C000E531F10508F050C0E059FF4F0C949A2CFA +:1035D0000C2D0F70872D8F71112321F00E941E205A +:1035E000802F07CF0E943F20802F0E9454197EC059 +:1035F000112341F0053008F079C0872D8F710E94AA +:10360000642074C0063008F071C0F7CF112339F080 +:10361000872D8F710E941E2069C01123C9F3872D49 +:103620008F710E943F2062C0112329F0872D8F7176 +:103630000E9409205BC00E94FF1F58C0112351F057 +:10364000172D1F71812F0E941E2063E0812F0E9481 +:1036500032214CC081E00E943B21023008F446C078 +:1036600082E00E943B2142C0112331F0002381F20D +:103670008C2D0E9436183AC0002389F28C2D0E94AE +:10368000FE1834C0472D4F706C2DC7010E94ED0508 +:103690000E94231F2BC0111129C0472D4F7050E0ED +:1036A00042305105B9F04CF44115510581F04130DB +:1036B0005105E1F40E94312819C04330510569F0E9 +:1036C0004430510599F48C2D0E9483280FC00E942C +:1036D0001A280CC00E944D2809C00E94602806C00C +:1036E000472D4F706C2DC7010E94F005DD20F9F0C9 +:1036F0000E942E2180FD1BC0F70112820E9428210A +:103700000E941E20C7010E94A61B0E9428210F9024 +:10371000DF91CF911F910F91FF90EF90DF90CF90AD +:10372000BF90AF909F908F907F900C943F200F9010 +:10373000DF91CF911F910F91FF90EF90DF90CF908D +:10374000BF90AF909F908F907F9008950F931F939D +:10375000CF93DF93EC01888199812B813C81232BCE +:10376000B9F09F3F11F48F3F99F0CE010E94EC0316 +:10377000882371F0688179818A810E9424218C01DB +:103780000E94D9200E94A01FB801CE010E945B199F +:10379000DF91CF911F910F9108950E94FC210E940B +:1037A0000C220E94D1210E9426220E94E7250E941D +:1037B000362580E090E00E94211780E090E00C9494 +:1037C00037170E94EC210C94CD1B0E941921292F40 +:1037D00022952F7030E02C3031054CF42A30310521 +:1037E0006CF42250310922303105A8F407C02C3086 +:1037F000310569F02F30310551F00DC0803F69F07F +:1038000018F4803E40F409C0843F29F406C093FBBD +:10381000882780F9089580E0089581E00895CF9386 +:10382000DF9300D000D01F92CDB7DEB70F900F907E +:103830000F900F900F90DF91CF910895CF93DF936A +:1038400000D000D000D0CDB7DEB726960FB6F894E2 +:10385000DEBF0FBECDBFDF91CF9108951F93CF93F1 +:10386000DF93C0919D0216E080919E02C81799F0E7 +:10387000D0E01C9FF0011D9FF00D1124E156FD4F7B +:103880004081518162817381848195810E941E1CD7 +:103890002196C770E9CFDF91CF911F910895409194 +:1038A000CF025091D0026091D1027091D2028091EA +:1038B000D3029091D4020C941E1C8091D402829564 +:1038C0008F7009F054C08091D102882309F44FC051 +:1038D00080919D02A0919E026091CF027091D002D2 +:1038E0004091D2025091D302B6E08A1709F43FC04A +:1038F00090E041155105C1F17F3F11F46F3FA1F1F7 +:10390000B89FF001B99FF00D1124E156FD4F2181C0 +:1039100072132AC02081621327C02281211124C082 +:10392000238134812417350710F421503109241BD9 +:10393000350B283C3105C0F42091D4022F70206152 +:103940002093D40226E0289FF001299FF00D112436 +:10395000EC55FD4F80818F70806180838FEC92E009 +:103960000E94A61B0C942E1C01968770BECF089552 +:10397000CF92DF92EF92FF920F931F93CF93DF933B +:10398000CDB7DEB762970FB6F894DEBF0FBECDBFDE +:103990008C0185E0F801DE011D9601900D928A955B +:1039A000E1F7D8014C9111965C91119712966C91A8 +:1039B00012971396CD90DC9014973091CF027091AE +:1039C000D0028091D2029091D302009709F46BC18A +:1039D0007F3F19F43F3F09F466C1E090D102EE2029 +:1039E00009F4C0C02091D402C816D90628F0F60107 +:1039F000E81BF90BCF0104C0809590958C0D9D1D9F +:103A0000FF24F394883C910578F0F12C207F09F095 +:103A1000C6C07C2DD98AC88A89890E940F1C8FEC68 +:103A200092E00E94A61BB1C0822F807F09F046C0A1 +:103A3000751314C0341312C0611110C02F702061AF +:103A40002093D4020E944F1C8FEC92E00E94A61B90 +:103A50008091D402D80115968C932EC0CD2819F1EF +:103A60005F3F11F44F3FF9F0F62E61111CC08091B9 +:103A70009D0220919E0236E0821709F45AC090E020 +:103A8000389FF001399FF00D1124E156FD4F7181EF +:103A9000571306C07081471303C07281711103C0B0 +:103AA00001968770E9CFF62E662309F418C180913C +:103AB000D40281608093D402F12C11C1751308C027 +:103AC000341306C0611104C08091D402D801C3C070 +:103AD0004D875E878D859E856A8B0E94E51B6A896E +:103AE0008823E1F16623D1F12091D402822F8295BF +:103AF0008F7090E0029774F08091CF029091D00285 +:103B000098878F831986DB86CA862C87CE01079615 +:103B10000E94A61B86E0F801AFECB2E001900D9286 +:103B20008A95E1F70E945D1C0E944F1CFF24F394CC +:103B3000D6C04D875E878D859E850E941921292FCD +:103B400022952F7030E0223031050CF0BCC09F7000 +:103B500009F0B6C0805E883008F4C1C0C8010E9478 +:103B6000A61BE4CFC816D90608F453C0F601E81B1B +:103B7000F90BCF01883C910508F450C0F12C7C2D45 +:103B8000D98AC88A89890E940F1CEFECF2E086E08E +:103B9000DF011D928A95E9F70E944F1CA0C07513A2 +:103BA00014C0341312C0611110C08091D402F80106 +:103BB0008583C8010E94A61B86E0EFECF2E0DF01DE +:103BC0001D928A95E9F7FE2C8AC04D875E878D8508 +:103BD0009E856A8B0E94E51B6A89882309F4BECF03 +:103BE000662309F4BBCF2091D402822F82958F7077 +:103BF00090E002970CF48ECF8091CF029091D0028A +:103C00009A8389831B82DD82CC822E83CE0101962A +:103C10007FCF809590958C0D9D1DACCFF62E6623A1 +:103C200009F49CCF75132EC034132CC02091D402FC +:103C300020FD1FC0822F82958F70D9F0D801159674 +:103C40002C9315978F3049F08F5F982F9295907F26 +:103C5000822F8F70892B15968C93C8010E94A61B0A +:103C600086E0F801AFECB2E001900D928A95E1F7A1 +:103C700093CF86E0F801AFECB2E001900D928A9507 +:103C8000E1F72DC04D875E878D859E850E94E51BDF +:103C9000811140CF8091D40281608093D402C80109 +:103CA0000E94A61B1CC0662309F458CF4D875E876F +:103CB0008D859E850E94E51B882309F44FCF2ACF6E +:103CC000811148CF0CC0243031050CF047CF9F70D4 +:103CD00009F440CFF8019581907F09F03BCF8F2DFB +:103CE00062960FB6F894DEBF0FBECDBFDF91CF91C5 +:103CF0001F910F91FF90EF90DF90CF9008951F9349 +:103D0000CF93DF93CDB7DEB72C970FB6F894DEBF15 +:103D10000FBECDBF4F83588769877A878B879C8773 +:103D2000CE0107960E94B81C882369F08F81988580 +:103D30002A853B85232BF1F19F3F09F063C08F3F1C +:103D400009F060C037C086E0FE013796DE011196AB +:103D500001900D928A95E1F76F817885EA85FB8560 +:103D6000309741F17F3F11F46F3F21F120919E0286 +:103D700030E0C90101968770992740919D0250E07B +:103D80008417950709F447C069837A83FD83EC8320 +:103D900096E0929FD001939FB00D1124A156BD4F84 +:103DA000FE01319601900D929A95E1F780939E0263 +:103DB0000E942E1C16E080919D0290919E02891710 +:103DC000C1F1189FC001112481569D4F0E94B81C5B +:103DD000882379F1E0919D021E9FF0011124E156A4 +:103DE000FD4F4081518162817381848195810E9460 +:103DF0001E1C80919D0290E0019687709927809308 +:103E00009D02D9CF4F81588569857A858B859C85A0 +:103E10000E941E1CCFCF0E94E11B10929E021092A6 +:103E20009D02EFECF2E086E0DF011D928A95E9F752 +:103E3000C1CF2C960FB6F894DEBF0FBECDBFDF9179 +:103E4000CF911F910895EF92FF920F931F93CF93FD +:103E5000DF938C01009709F46CC0F12CEE24E394FD +:103E6000E8012196F8018491843740F4843008F009 +:103E700051C0813081F0823019F15BC0853709F47F +:103E800044C0A8F19CE7980F903708F052C08F7794 +:103E90000E94FE1841C00E5F1F4FFE01C49180E2D8 +:103EA0008C0F883048F4C7708E2D01C0880FCA95DA +:103EB000EAF70E94FF2114C08C2F0E9436182DC0F3 +:103EC0000E5F1F4FFE01C49180E28C0F883058F4C2 +:103ED000C7708E2D01C0880FCA95EAF70E9405228F +:103EE0000E9426221AC08C2F0E94FE1816C00E5F58 +:103EF0001F4FFE01C491CC2381F08FE99FE0019711 +:103F0000F1F700C00000C150F6CF0E5F1F4FFE0159 +:103F1000F49003C00E9436188E018F2D882309F477 +:103F20009FCFEFE9FFE03197F1F700C0000081502B +:103F3000F5CFDF91CF911F910F91FF90EF900895F2 +:103F400008956093D9027093DA028093DB02909314 +:103F5000DC020C94CD1B0F931F930091D90210919A +:103F6000DA022091DB023091DC02DC01CB01802BF4 +:103F7000912BA22BB32B8093D9029093DA02A093BA +:103F8000DB02B093DC021F910F910C94CD1B0F93B9 +:103F90001F930091D9021091DA022091DB02309137 +:103FA000DC02DC01CB0180239123A223B323809385 +:103FB000D9029093DA02A093DB02B093DC021F9146 +:103FC0000F910C94CD1B0F931F930091D902109168 +:103FD000DA022091DB023091DC02DC01CB01802788 +:103FE0009127A227B3278093D9029093DA02A09356 +:103FF000DB02B093DC021F910F910C94CD1B109249 +:10400000D5021092D6021092D7021092D8020C94C8 +:10401000CD1B41E050E060E070E004C0440F551F4C +:10402000661F771F8A95D2F74093D5025093D60228 +:104030006093D7027093D8020C94CD1B41E050E0FE +:1040400060E070E004C0440F551F661F771F8A951B +:10405000D2F78091D5029091D602A091D702B0916B +:10406000D802482B592B6A2B7B2B4093D5025093B7 +:10407000D6026093D7027093D8020C94CD1B41E016 +:1040800050E060E070E004C0440F551F661F771FCA +:104090008A95D2F740955095609570958091D5029C +:1040A0009091D602A091D702B091D802482359230B +:1040B0006A237B234093D5025093D6026093D702A4 +:1040C0007093D8020C94CD1B41E050E060E070E0AA +:1040D00004C0440F551F661F771F8A95D2F7809141 +:1040E000D5029091D602A091D702B091D80248276C +:1040F00059276A277B274093D5025093D6026093B5 +:10410000D7027093D8020C94CD1B0F931F9300918C +:10411000D5021091D6022091D7023091D802DC014D +:10412000CB01802B912BA22BB32B8093D5029093A4 +:10413000D602A093D702B093D8021F910F910C948E +:10414000CD1B0F931F930091D5021091D6022091A1 +:10415000D7023091D802DC01CB0180239123A22326 +:10416000B3238093D5029093D602A093D702B09345 +:10417000D8021F910F910C94CD1B0F931F930091A8 +:10418000D5021091D6022091D7023091D802DC01DD +:10419000CB0180279127A227B3278093D502909344 +:1041A000D602A093D702B093D8021F910F910C941E +:1041B000CD1B0895CF92DF92EF92FF920F931F9342 +:1041C000CF93DF938C01C090D902D090DA02E090B7 +:1041D000DB02F090DC028091D5029091D602A09192 +:1041E000D702B091D802C82AD92AEA2AFB2ACFE1FD +:1041F000D0E0D701C6010C2E04C0B695A7959795BF +:1042000087950A94D2F780FF06C0B8018C2F0E94D0 +:104210007508019721F4219760F780E001C08C2F89 +:10422000DF91CF911F910F91FF90EF90DF90CF9092 +:104230000895CF93DF93EC010E94DA20BE010E9423 +:104240007508DF91CF910895CB010E94192108953F +:104250008091DD0285958595859508958091DD0293 +:104260008770089598E0899F90011124262B209350 +:10427000DD020C941E202091DD0280958223809324 +:10428000DD02982F977069F430E0482F552747FDDD +:1042900050952417350729F08595859585950C94BB +:1042A0003F2008959091DD02977081E009F480E04D +:1042B000089590911501992321F090911601911183 +:1042C00009C02091170130911801F90132969FEF32 +:1042D00040E01FC0982F9695969596959F3050F583 +:1042E000E0911701F0911801E90FF11D877021E0AD +:1042F00030E0A90102C0440F551F8A95E2F7CA01B8 +:104300009181892B818308959F3F39F04F5F4E3013 +:1043100041F051915813F8CF0DC05111F7CF942FA0 +:10432000F5CF9F3F39F0F901E90FF11D97FDFA959F +:1043300082830895089590911501992321F0909119 +:104340001601911109C02091170130911801F9014E +:104350003296205F3F4F1FC0982F96959695969561 +:104360009F30F0F4E0911701F0911801E90FF11D71 +:10437000877021E030E0A90102C0440F551F8A95E3 +:10438000E2F7CA018095918189238183089531964E +:10439000E217F30729F090819813F9CF1082F7CF35 +:1043A000089581E090E0E0911701F0911801E80F85 +:1043B000F91F1082019680319105A9F70895909117 +:1043C000F102892B8093F102089580959091F1027A +:1043D00089238093F10208951092F102089590913B +:1043E000F002892B8093F002089580959091F0025D +:1043F00089238093F00208951092F002089590911D +:10440000EF02892B8093EF02089580959091EF023F +:1044100089238093EF0208951092EF02089580930C +:10442000DE0208951092DE020895809117019091A6 +:104430001801FC0131969C01205F3F4F80E0919173 +:1044400091118F5FE217F307D1F70895E0911701FB +:10445000F09118018091F1028083E0911701F091B1 +:10446000180190818091F002892B8083E0911701DF +:10447000F091180190818091EF02892B80838091C7 +:10448000DE02882361F0E0911701F091180190811C +:10449000892B80830E94152281111092DE02809167 +:1044A0001701909118010C940B1720E0009739F038 +:1044B000AC0141505109842395232F5FF7CF822F00 +:1044C000089580911303843039F11092F30220E4AF +:1044D00088E190E00FB6F894A895809360000FBE35 +:1044E0002093600080E00E94F00280E00E940F09AB +:1044F00083B7817F846083BF83B7816083BF7894F3 +:10450000889583B78E7F83BF88E10FB6F894809338 +:104510006000109260000FBE08950895089580E035 +:104520000E94F0020E948D220E946A090E948E223F +:104530000E94EF0991E0811101C090E0892F089558 +:104540000E94E11B80E00E94F0020E9409280E9464 +:10455000FF160C940F091F920F920FB60F921124A1 +:104560008F939F93AF93BF938091F302811113C0F8 +:104570008091F4029091F502A091F602B091F702B9 +:104580004196A11DB11D8093F4029093F502A09372 +:10459000F602B093F702BF91AF919F918F910F9068 +:1045A0000FBE0F901F90189582E084BD93E095BDDB +:1045B0009AEF97BD80936E0008952FB7F89480917D +:1045C000F4029091F502A091F602B091F7022FBF8C +:1045D0000895CF92DF92EF92FF920F931F932FB720 +:1045E000F8944091F4025091F5026091F6027091B6 +:1045F000F7022FBF6A017B01EE24FF248C0120E02B +:1046000030E0C016D106E206F30610F4415051091D +:104610009A01281B390BC9011F910F91FF90EF9050 +:10462000DF90CF9008951F920F920FB60F92112432 +:104630008F939F93AF93BF938091F4029091F50273 +:10464000A091F602B091F7020196A11DB11D8093D1 +:10465000F4029093F502A093F602B093F702BF9193 +:10466000AF919F918F910F900FBE0F901F90189553 +:104670000E94FC13F8942FEF87EA91E621508040C6 +:104680009040E1F700C0000087E090EBDC018093F0 +:104690001E0390931F03A0932003B09321039CE07B +:1046A00088E10FB6F894A895809360000FBE9093B0 +:1046B0006000FFCF0E949923811102C00E947523E0 +:1046C0000E94A4238093F2020E94AC2380931C03D7 +:1046D00087FB882780F9809316010E94A823682F02 +:1046E00070E080E090E00C94A11F6DEE7EEF80E022 +:1046F00090E00E94C02C60E082E090E00E94AE2C2E +:1047000060E083E090E00E94AE2C60E084E090E006 +:104710000E94AE2C60E085E090E00E94AE2C60E04C +:1047200086E090E00E94AE2C6FEF87E090E00C9462 +:10473000AE2C80E090E00E94A82C21E08D3E9E4FA0 +:1047400009F020E0822F089582E090E00C94A02CE4 +:1047500083E090E00C94A02C84E090E00C94A02CDA +:10476000682F84E090E00C94AE2C86E090E00C94EE +:10477000A02C682F86E090E00C94AE2C87E090E0AF +:104780000C94A02C682F87E090E00C94AE2C8091C4 +:10479000FA0280FF0BC060911C0185E0689FB001A8 +:1047A000112475956795759567952BC081FF09C094 +:1047B00060911C0185E0689FB00111247595679593 +:1047C00020C082FF07C060911C0185E0689FB00196 +:1047D000112417C09091FB029923D1F060911B0125 +:1047E000961788F720911C0185E0289F90011124DD +:1047F000929FA001939F500D112470E0CA010E9466 +:10480000862C6038710540F46115710539F002C0DD +:1048100065E070E0862F08958FE7089581E00895A0 +:104820008091FA0280FF08C060911A0170E07595CE +:1048300067957595679521C081FF06C060911A0143 +:1048400070E07595679519C082FF04C060911A01E8 +:1048500070E010C09091FB029923C1F060911901A2 +:104860009617A0F780911A01899FC001112470E06A +:104870000E94862C6038710528F46115710521F0BD +:10488000862F08958FE7089581E0089561E070E034 +:10489000F4CF803F21F40E94C723819504C0813F5B +:1048A00029F40E94C7238093FE020895823F21F4D9 +:1048B0000E94C723819504C0833F29F40E94C72327 +:1048C0008093FD020895893F19F40E94102405C0C9 +:1048D0008A3F31F40E94102481958093FF0208954D +:1048E0008B3F21F40E941024819504C08C3F29F451 +:1048F0000E941024809300030895843F21F4809146 +:10490000FC02816017C0853F21F48091FC02826027 +:1049100011C0863F21F48091FC0284600BC0873F68 +:1049200021F48091FC02886005C0883F31F48091B9 +:10493000FC0280618093FC0208958D3F21F48091F8 +:10494000FA0281600BC08E3F21F48091FA028260EE +:1049500005C08F3F29F48091FA0284608093FA02A7 +:104960000895803F39F48091FE0287FF6CC0109259 +:10497000FE0269C0813F29F48091FE021816BCF343 +:1049800062C09091FD02823F29F497FF5CC01092B3 +:10499000FD0259C0833F19F41916CCF354C0893F66 +:1049A00041F48091FF0218160CF04DC01092FF02E6 +:1049B0004AC08A3F29F48091FF0287FF44C0F6CFA6 +:1049C0008B3F39F48091000387FF3DC010920003B4 +:1049D0003AC08C3F29F4809100031816BCF333C011 +:1049E000843F21F48091FC028E7F17C0853F21F423 +:1049F0008091FC028D7F11C0863F21F48091FC02E2 +:104A00008B7F0BC0873F21F48091FC02877F05C01C +:104A1000883F31F48091FC028F7E8093FC0213C0AA +:104A20008D3F21F48091FA028E7F0BC08E3F21F4DE +:104A30008091FA028D7F05C08F3F29F48091FA02A0 +:104A40008B7F8093FA028091FD0281110EC08091CC +:104A5000FE0281110AC08091FF02811106C080917F +:104A60000003811102C01092FB0208958CEF92E0C6 +:104A70000E9416170E94DD229093F9028093F8029B +:104A800008951F93CF93DF938091F8029091F902DC +:104A90000E94E922AC019091FB02992321F0209120 +:104AA0001D0130E006C020911E018AE0289F900180 +:104AB00011244217530708F486C08091FD02C0916B +:104AC000FE02D091FF0210910003811107C0C111B5 +:104AD00076C0D11174C0111172C075C09F3F19F01A +:104AE0009F5F9093FB02181624F40E94C7238093C3 +:104AF000FD028091FD0287FF05C00E94C7238195BA +:104B00008093FD021C1624F40E94C7238093FE02AA +:104B10008091FE0287FF05C00E94C7238195809384 +:104B2000FE026091FD02662339F1C091FE02CC23A2 +:104B300019F1772767FD7095872F972F0E94A82975 +:104B400023E333E343E35FE30E94B82A0E9475291D +:104B50006093FD026C2F772767FD7095872F972F45 +:104B60000E94A82923E333E343E35FE30E94B82ACA +:104B70000E9475296093FE021D1624F40E941024E1 +:104B80008093FF028091FF0287FF05C00E941024DE +:104B900081958093FF02111624F40E9410248093C3 +:104BA00000038091000387FF05C00E9410248195B7 +:104BB00080930003DF91CF911F910C9436259F3F86 +:104BC00009F08ECF96CFDF91CF911F910895ECEF32 +:104BD000F2E085E0DF011D928A95E9F71092FB0271 +:104BE0001092FA020895833081F128F4813059F04F +:104BF0008230D1F00895853009F449C0B8F186308B +:104C000009F456C0089580911E01262F30E0280F28 +:104C1000311D2F3F310524F4680F60931E01089564 +:104C20008FEF80931E01089580911D01262F30E0A3 +:104C3000280F311D2F3F310524F4680F60931D01AB +:104C400008958FEF80931D01089580911C01262FF8 +:104C500030E0280F311D2F3F310524F4680F609399 +:104C60001C0108958FEF80931C01089580911B0112 +:104C7000262F30E0280F311D2F3F310524F4680F17 +:104C800060931B0108958FEF80931B01089580911D +:104C90001A01262F30E0280F311D2F3F310524F453 +:104CA000680F60931A0108958FEF80931A01089599 +:104CB00080911901262F30E0280F311D2F3F31053B +:104CC00024F4680F6093190108958FEF8093190100 +:104CD0000895833011F128F4813049F0823091F049 +:104CE0000895853081F120F18630C1F108958091D9 +:104CF0001E01681720F4861B80931E0108951092F0 +:104D00001E01089580911D01681720F4861B809371 +:104D10001D01089510921D01089580911C016817CE +:104D200020F4861B80931C01089510921C010895A5 +:104D300080911B01681720F4861B80931B01089546 +:104D400010921B01089580911A01681720F4861BA8 +:104D500080931A01089510921A0108958091190103 +:104D6000681720F4861B8093190108951092190189 +:104D700008950F931F93873208F048C08E3108F0D2 +:104D80008DC0803109F477C008F5873009F461C01F +:104D900068F4863009F09DC08091F202817F8E7F99 +:104DA0008093F20281E08093020394C08B3009F477 +:104DB00089C08E3009F08DC08091F20282FB2227DB +:104DC00020F991E0922790FB82F95EC0863109F4C8 +:104DD00079C060F4813109F07CC00E94E11B9091A0 +:104DE000160181E08927809316016CC0893109F48E +:104DF00069C08B3109F06DC08091F20281FB2227DE +:104E000020F991E0922790FB81F93EC0883309F4A4 +:104E100059C050F4893209F457C0853309F454C09D +:104E2000873209F451C055C0833409F44DC028F4C9 +:104E30008A3308F44EC0895332C0883409F049C01F +:104E40000E94E11B0E941F0A0E94E3030E94382374 +:104E500039C09091F202892F8095817080FB90F982 +:104E600029F0966098609093F20234C0997F977F02 +:104E70009093F20227C08091F20283FB222720F94F +:104E800091E0922790FB83F98093F2029923D1F06D +:104E90008091F20281608093F20214C08D5141E052 +:104EA00050E060E070E08A019B0104C0000F111F18 +:104EB000221F331F8A95D2F7C901B8010E94A11F92 +:104EC0000E94E11B81E006C061E070E080E090E0BC +:104ED000F5CF80E01F910F91089580E0089580E064 +:104EE0000895CF93C82F80910203813069F018F0A4 +:104EF0008230C9F184C0E0911701F09118018081DE +:104F0000823209F07EC007C0E0911701F0911801CC +:104F10008081823261F48C2F0E946D27811104C040 +:104F20008C2F0E94B9261DC081E090E01AC08C2F02 +:104F30000E946F27811114C0C43179F048F4CB303E +:104F400079F0C03109F061C082E08093020308C0AB +:104F5000C93219F0C83321F058C01092020355C06D +:104F600081E0817054C0C93291F120F5C43179F1EA +:104F7000B0F4C73009F047C08EE180931E0182E390 +:104F800080931D018AE080931C0184E180931B01C2 +:104F900088E080931A0188E28093190134C0CE51D1 +:104FA000C63088F5EC2FF0E0EA54FE4F8081809304 +:104FB000010329C0CE34E9F020F4CB3421F56AE0B6 +:104FC00013C0C13579F0C235F1F461E00DC08091B4 +:104FD0000103882319F01092010315C081E080932A +:104FE000020315C061E006C0809101030E94F32511 +:104FF0000AC06AE0809101030E94692604C01092F1 +:10500000020380E004C081E002C080E0AACFCF911B +:1050100008950E949923811102C00E9475230E9465 +:10502000B52380931D0380FF02C0869501C080E0F8 +:105030000C94F00280911D03982F9695292F30E053 +:10504000233031054CF49F5F990F8170892B81606B +:1050500080931D030E94B92380911D0386950C94B3 +:10506000F00280911D03982F969591F09158990F19 +:105070008170892B80931D038E7F91E009F490E06D +:1050800080911D0390FB80F980931D030E94B9233A +:1050900080911D0386950C94F00280911D03982F3A +:1050A000909590FB80F980931D030E94B923809115 +:1050B0001D0380FF02C0869501C080E00C94F002C1 +:1050C00090911D03892F86958F5F8F779170843023 +:1050D00028F4880F892B80931D0302C090931D0331 +:1050E00080911D038E7F91E009F490E080911D0373 +:1050F00090FB80F980931D030E94B92380911D03CA +:1051000086950C94F00220911D03922F9695892785 +:10511000982F990F822F8170892B80931D038E7F8A +:1051200091E009F490E080911D0390FB80F9809359 +:105130001D030E94B92380911D0386950C94F002F3 +:1051400080911D03869508955058BB27AA270ED03D +:10515000D1C1C2D130F0C7D120F031F49F3F11F45A +:105160001EF4B7C10EF4E095E7FB9FC1E92FD3D140 +:1051700080F3BA17620773078407950718F071F474 +:105180009EF5EBC10EF4E0950B2EBA2FA02D0B016E +:10519000B90190010C01CA01A0011124FF27591B7C +:1051A00099F0593F50F4503E68F11A16F040A22F82 +:1051B000232F342F4427585FF3CF469537952795F3 +:1051C000A795F0405395C9F77EF41F16BA0B620BF2 +:1051D000730B840BBAF09150A1F0FF0FBB1F661F39 +:1051E000771F881FC2F70EC0BA0F621F731F841F7C +:1051F00048F4879577956795B795F7959E3F08F0A2 +:10520000B3CF9395880F08F09927EE0F9795879560 +:10521000089527D108F481E008950CD06BC163D1C3 +:1052200040F05AD130F021F45F3F19F03EC15111E6 +:1052300095C14FC170D198F39923C9F35523B1F3A8 +:10524000951B550BBB27AA2762177307840738F0F5 +:105250009F5F5F4F220F331F441FAA1FA9F333D054 +:105260000E2E3AF0E0E830D091505040E695001C08 +:10527000CAF729D0FE2F27D0660F771F881FBB1FC4 +:10528000261737074807AB07B0E809F0BB0B802D9E +:10529000BF01FF2793585F4F2AF09E3F510568F0EA +:1052A00004C15CC15F3FECF3983EDCF386957795D3 +:1052B0006795B795F7959F5FC9F7880F911D9695EC +:1052C000879597F90895E1E0660F771F881FBB1F48 +:1052D000621773078407BA0720F0621B730B840BF5 +:1052E000BA0BEE1F88F7E095089504D06894B111C9 +:1052F00035C1089518D188F09F5790F0B92F99279C +:10530000B751A0F0D1F0660F771F881F991F1AF0D0 +:10531000BA95C9F712C0B13081F01FD1B1E008953C +:105320001CC1672F782F8827B85F39F0B93FCCF3BD +:10533000869577956795B395D9F73EF490958095C6 +:10534000709561957F4F8F4F9F4F0895E89409C0E6 +:1053500097FB3EF490958095709561957F4F8F4FA8 +:105360009F4F9923A9F0F92F96E9BB279395F695BE +:10537000879577956795B795F111F8CFFAF4BB0F3C +:1053800011F460FF1BC06F5F7F4F8F4F9F4F16C0A0 +:10539000882311F096E911C0772321F09EE8872F2A +:1053A000762F05C0662371F096E8862F70E060E0E6 +:1053B0002AF09A95660F771F881FDAF7880F96955F +:1053C000879597F9089588D018F011F08CD038F4AB +:1053D00080C0C4C0E92F9FD0B0F35523C9F3E7FBC9 +:1053E0006217730784079507A8F199F3E92FFF2740 +:1053F00088232AF03197660F771F881FDAF7952FD9 +:105400005527442332F091505040220F331F441F40 +:10541000D2F7BB27E91BF50B621B730B840BB10999 +:10542000C1F222F4620F731F841FB11D31972AF05D +:10543000660F771F881FBB1FEFCF915050405AF067 +:1054400041F0882332F0660F771F881F915050403B +:10545000C1F7939530C08695779567959F5FD9F78B +:10546000F8CF990F0008550FAA0BE0E8FEEF1616CB +:105470001706E807F907C0F012161306E407F50748 +:1054800098F0621B730B840B950B39F40A2661F0BC +:10549000232B242B252B21F408950A2609F4A1405F +:1054A000A6958FEF811D811D089597F99F6780E86C +:1054B00070E060E008959F3F31F0915020F48795AF +:1054C00077956795B795880F911D9695879597F96C +:1054D00008959FEF80EC089500240A94161617068D +:1054E00018060906089500240A94121613061406D5 +:1054F00005060895092E0394000C11F4882352F038 +:10550000BB0F40F4BF2B11F460FF04C06F5F7F4FEF +:105510008F4F9F4F089557FD9058440F551F59F0D6 +:105520005F3F71F04795880F97FB991F61F09F3F90 +:1055300079F087950895121613061406551FF2CFB9 +:105540004695F1DF08C0161617061806991FF1CF09 +:1055500086957105610508940895E894BB27662730 +:105560007727CB0197F908957CDF08F48FEF089532 +:105570000BD0C0CFB1DF28F0B6DF18F0952309F0CB +:1055800094CFA7CF1124EACFC6DFA0F3959FD1F324 +:10559000950F50E0551F629FF001729FBB27F00DE1 +:1055A000B11D639FAA27F00DB11DAA1F649F662736 +:1055B000B00DA11D661F829F2227B00DA11D621F85 +:1055C000739FB00DA11D621F839FA00D611D221F3F +:1055D000749F3327A00D611D231F849F600D211D23 +:1055E000822F762F6A2F11249F5750408AF0E1F0C6 +:1055F00088234AF0EE0FFF1FBB1F661F771F881F0F +:1056000091505040A9F79E3F510570F04ECFA6CF64 +:105610005F3FECF3983EDCF3869577956795B795F9 +:10562000F795E7959F5FC1F7FE2B880F911D969523 +:10563000879597F90895FA01EE0FFF1F309621051F +:10564000310599F16115710561F48038BFE39B075D +:1056500049F168949038810561F08038BFEF9B076D +:1056600041F0992342F5FF3FE1053105210511F194 +:10567000E8940894E795D901AA2329F4AB2FBE2F0B +:10568000F85FD0F310C0FF5F70F4A695E0F7F7392C +:1056900050F019F0FF3A38F49F779F930CD00F9099 +:1056A00007FC905808953EF014CF60E070E080E869 +:1056B0009FE308954FE79F775F934F933F932F9317 +:1056C0009ED02F913F914F915F9152DF05C019F409 +:1056D0000EF0EBCE42CFFDCE26DFC8F39638C0F7F2 +:1056E00007F80F92E8942BE33AEA48EB5FE74EDFC6 +:1056F0000F920F920F924DB75EB70F92C0D0EAE0B3 +:10570000F1E016D04F915F91EF91FF91E595EE1F7B +:10571000FF1F49F0FE57E0684427EE0F441FFA953B +:10572000E1F74195550B32D00F9007FE26C0089542 +:10573000DF93CF931F930F93FF92EF92DF927B0142 +:105740008C01689405C0DA2EEF011EDFFE01E8949B +:10575000A5912591359145915591AEF3EF0106DD67 +:10576000FE019701A801DA9479F7DF90EF90FF909E +:105770000F911F91CF91DF9108959B01AC0160E0E3 +:1057800070E080E89FE349CD90CE95CECCDEE8F383 +:105790009923D9F3940F511DBBF39150504094F0CD +:1057A00059F0882332F0660F771F881F91505040C0 +:1057B000C1F79E3F510544F7880F911D9695879537 +:1057C00097F908955F3FACF0983E9CF0BB27869513 +:1057D00077956795B79508F4B1609395C1F7BB0FBE +:1057E00058F711F460FFE8CF6F5F7F4F8F4F9F4FE7 +:1057F000E3CFB4CE0EF05FCE6CCE689456CE93DE7F +:10580000C8F39923D1F3C6F3DF93CF931F930F937C +:10581000FF92C92FDD2788232AF02197660F771F73 +:10582000881FDAF720E030E040E85FEB9FE388393B +:1058300020F0803E30F021968F7787DCE2E3F1E0C4 +:1058400003C083DCEFE5F1E073DF8B01BE01EC0107 +:10585000FB2E6F5771097595771F880B990B78DDB3 +:1058600028E132E741E35FE38FDEAF2D9801AE011F +:10587000FF900F911F91CF91DF9178DC3BCEFA0121 +:10588000DC01AA0FBB1F9B01AC01BF5728F42227E4 +:105890003327442750781FC0B75188F4AB2F00241A +:1058A000469537952795011CA395D2F3002069F002 +:1058B000220F331F441FB395DAF30DD045CC61306E +:1058C0007105A0E88A07B94630F49B01AC01662750 +:1058D000772788279078309621F020833183428380 +:1058E00053830895AA1BBB1B51E107C0AA1FBB1F0E +:1058F000A617B70710F0A61BB70B881F991F5A955C +:10590000A9F780959095BC01CD01089597FB072ECE +:1059100016F4009407D077FD09D00E94722C07FC82 +:1059200005D03EF4909581959F4F089570956195AF +:105930007F4F0895EE0FFF1F0590F491E02D09941D +:10594000F999FECF92BD81BDF89A992780B5089547 +:10595000A8E1B0E042E050E00C94C82C262FF99961 +:10596000FECF92BD81BDF89A019700B4021639F0BE +:105970001FBA20BD0FB6F894FA9AF99A0FBE08958F +:105980000196272F0E94AF2C0C94AE2CDC01CB018A +:10599000FC01F999FECF06C0F2BDE1BDF89A31963F +:1059A00000B40D9241505040B8F70895F894FFCFDD +:1059B000640007000CFF0000003F64031091106EAC +:1059C000103A1006100101DF022808140A321E00E6 +:1059D00002040507090B0C0E1011131517181A1CD9 +:1059E0001D1F2123242628292B2D2F303234353713 +:1059F000393B1F0F03764F5F6F7F49694379095920 +:105A000053633149803F5D8B803FF8BF803FCAE1DF +:105A1000803F73ED803FCAE1803FF8BF803F5D8BE0 +:105A2000803F3149803F0000803FF16D7F3F75EA44 +:105A30007E3F4C827E3F833F7E3F84287E3F833F74 +:105A40007E3F4C827E3F75EA7E3FF16D7F3F0000D6 +:105A5000803F3F4D3639EB049E0468042F04C20397 +:105A6000DB03F4030D040102030405060708090023 +:00000001FF diff --git a/keyboard/planck/keymaps/david/compiled.hex b/keyboard/planck/keymaps/david/compiled.hex new file mode 100644 index 0000000000..c78779128e --- /dev/null +++ b/keyboard/planck/keymaps/david/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C14001A000800150017000E +:1001E0002A001C0018000C00120013002A00040052 +:1001F0001600070009000A0028000B000D000E0081 +:100200000F00330034001D001B000600190005001C +:1002100029001100100036003700380028000A308D +:10022000E000E200E30002202C002C00012050003E +:10023000510052004F002B0014001A000900130057 +:100240000A000D000F0018001C0033002A002900CE +:10025000040015001600170007000B00110008002D +:100260000C0012003400E1001D001B000600190004 +:1002700005000E0010003600370038002800C300CB +:10028000E000E200E30002202C002C0001205000DE +:10029000510052004F0035001E001F0020002100B9 +:1002A0002200230024002500260027002A00010048 +:1002B0000320042000500030013002302D002E00B9 +:1002C0002F003000310001004400450000300130B3 +:1002D00002300330043005300630073001000100E1 +:1002E0000100010001000100010001000120AB003C +:1002F000AA00A900AE0035021E021F022002210240 +:100300002202230224022502260227022A000100DB +:100310000320042000500030013002302D022E0254 +:100320002F023002310201003A003B003C003D0048 +:100330003E003F0040004100420043000100010038 +:100340000100010001000220010001000100AB00DA +:10035000AA00A900AE002803540068006500200030 +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/default/compiled.hex b/keyboard/planck/keymaps/default/compiled.hex new file mode 100644 index 0000000000..a4d69eaa9f --- /dev/null +++ b/keyboard/planck/keymaps/default/compiled.hex @@ -0,0 +1,1611 @@ +:100000000C941D050C9461050C9461050C9461051C +:100010000C9461050C9461050C9461050C946105C8 +:100020000C9461050C9461050C94D2180C94A419DD +:100030000C9406270C9461050C9461050C946105E1 +:100040000C9461050C94C2050C9461050C94610537 +:100050000C9461050C946E270C9461050C94610559 +:100060000C9461050C9461050C9461050C94610578 +:100070000C9461050C9461050C9461050C94610568 +:100080000C94B80E0C9461050C9461050C946105F8 +:100090000C9461050C9461050C9461050C94610548 +:1000A0000C9461050C9461050C9461052A063C06CC +:1000B0005006620671067B06CF06CF06CF06CF0636 +:1000C000CF06CF068906B906CB06111A331A211BB3 +:1000D000331A211B781A9B1A211BF01A031BED1DE2 +:1000E000ED1D1C1E1C1E5B1E7B1ED11FD11F861EFC +:1000F000D11F361F361F9D1FA61FD11FCB1F431FA9 +:10010000431F431F431F431F431F431F431F431FDF +:10011000431F431F431F431F431F431F431F531FBF +:10012000611F681F6F1F791F07634236B79BD8A7EF +:100130001A39685618AEBAAB558C1D3CB7CC57630C +:10014000BD6DEDFD753EF6177231BF000000803FBA +:1001500008000000BE922449123EABAAAA2ABECDD6 +:10016000CCCC4C3E00000080BEABAAAAAA3E000048 +:100170000000BF000000803F000000000008417840 +:10018000D3BB4387D1133D190E3CC3BD4282AD2B77 +:100190003E68EC8276BED98FE1A93E4C80EFFFBE6F +:1001A00001C4FF7F3F0000000000000000000000CD +:1001B0000000000000010204060A0F17202C3A4A32 +:1001C0005D71879DB3C7DAE9F5FCFFFCF5E9DAC795 +:1001D000B39D87715D4A3A2C20170F0A060402016D +:1001E00000000000000000000000010801150109E6 +:1001F00001190112010F0208021502090219021267 +:10020000020F002B0014001A000800150017001C34 +:100210000018000C00120013002A00290004001628 +:1002200000070009000A000B000D000E000F00334C +:10023000003400E1001D001B00060019000500113C +:1002400000100036003700380028000530E000E2DA +:1002500000E30003302C002C000430500051005209 +:10026000004F002B0014001A00090013000A000DB3 +:10027000000F0018001C0033002A0029000400159C +:10028000001600170007000B00110008000C0012F8 +:10029000003400E1001D001B000600190005000EDF +:1002A00000100036003700380028000530E000E27A +:1002B00000E30003302C002C0004305000510052A9 +:1002C000004F002B0034003600370013001C0009DB +:1002D000000A00060015000F002A00290004001281 +:1002E00000080018000C0007000B00170011001692 +:1002F000003800E100330014000D000E001B000563 +:100300000010001A0019001D0028000530E000E26E +:1003100000E30003302C002C000430500051005248 +:10032000004F0035021E021F02200221022202237A +:100330000224022502260227022A004C003A003B32 +:10034000003C003D003E003F002D022E022F0230F7 +:1003500002310201004000410042004300440045D8 +:1003600000320264020100010001000100010001ED +:100370000001000100010001000100AB00AA00A97A +:1003800000AE0035001E001F0020002100220023C7 +:100390000024002500260027002A004C003A003BDC +:1003A000003C003D003E003F002D002E002F00309D +:1003B000003100010040004100420043004400457C +:1003C0000032006400010001000100010001000191 +:1003D0000001000100010001000100AB00AA00A91A +:1003E00000AE001E001E001E001E001E001E001E8D +:1003F000001E001E001E001E001E00000014001A39 +:10040000000800150017001C0018000C0012001353 +:10041000002F000E3004001600070009000A000B30 +:10042000000D000E000F00330034000D30000000FE +:10043000000600190000000000110010000000007C +: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 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:100800000000000100005001000100010001000192 +:100810000001000100010001004C00010001000185 +:100820000020502150135012500030013002300C83 +:100830003001000100275026502350245028502911 +:100840005001000100010001000100010001000150 +:100850000001000100010001000100010001000190 +:100860000001002803540068006500200050006C5F +:100870000061006E0063006B0020004B0065007992 +:100880000062006F0061007200640000002C034FE2 +:10089000007200740068006F006C0069006E0065F3 +:1008A000006100720020004B006500790062006F5B +:1008B0000061007200640073000000040309040971 +:1008C000026D00040100A0FA090400000103010107 +:1008D00000092111010001224000070581030800E1 +:1008E0000A090401000103010200092111010001AC +:1008F000224D000705820308000A090402000103D3 +:1009000000000009211101000122360007058303C0 +:1009100008000A0904030001030000000921110175 +:1009200000012239000705840310000112011001A3 +:1009300000000008EDFE60600100010200010501F9 +:100940000906A101050719E029E715002501950809 +:1009500075018102050819012905950575019102A6 +:1009600095017503910105071900297715002501E7 +:10097000957875018102C005010980A101850216E3 +:10098000010026B7001A01002AB7007510950181F1 +:1009900000C0050C0901A1018503160100269C0277 +:1009A0001A01002A9C02751095018100C0050109F9 +:1009B00002A1010901A10005091901290515002558 +:1009C00001950575018102950175038101050109F4 +:1009D0003009311581257F95027508810609381582 +:1009E00081257F950175088106050C0A380215815D +:1009F000257F950175088106C0C005010906A10182 +:100A0000050719E029E71500250195087501810200 +:100A100095017508810105081901290595057501DC +:100A200091029501750391010507190029FF150031 +:100A300026FF00950675088100C011241FBECFEF68 +:100A4000DAE0DEBFCDBF04B603FE24C080918E0481 +:100A500090918F04A0919004B09191048730904BB5 +:100A6000A740B04BB9F410928E0410928F041092EC +:100A700090041092910414BE84B7877F84BF88E1EC +:100A80000FB6F89480936000109260000FBEE0E013 +:100A9000F8E3099513E0A0E0B1E0E0E7F2E602C078 +:100AA00005900D92A033B107D9F714E0A0E3B3E0AD +:100AB00001C01D92AE38B107E1F70E941C160C94DC +:100AC00036310C940000089581E0089508950C9447 +:100AD00063050C9464050C9466050E94002D23E0C8 +:100AE00030E0281B3109220F209334030895282F6A +:100AF0002F9880918000211108C0877F809380000B +:100B000010928D0010928C001BC088608093800032 +:100B1000233019F48FEF9FEF0FC083E090E0821B2A +:100B20009109880F991F2FEF3FEFA90102C0569539 +:100B300047958A95E2F7CA0190938D0080938C00C7 +:100B40000C946D050E946D0584E080933303109230 +:100B500030030895279A2F988FEF9FEF9093870087 +:100B6000809386008AE08093800089E180938100F1 +:100B70000E94692C0C94A2050E94AA056E9A769A8E +:100B80000C94EF061F920F920FB60F9211242F9321 +:100B90003F938F939F93EF93FF93E0913103F091F5 +:100BA0003203CF010196909332038093310300907A +:100BB000330302C0F695E7950A94E2F7EF7380914C +:100BC0003003823019F4E03251F404C0813039F43A +:100BD000EF3329F480916F008D7F80936F00F0E0F8 +:100BE000E655FE4FE49121E031E0E29FC001E39F32 +:100BF000900D11240090340302C0969587950A94B5 +:100C0000E2F790938D0080938C00FF91EF919F917C +:100C10008F913F912F910F900FBE0F901F901895BD +:100C2000CF93DF93EC010E940728BE0180E090E0A3 +:100C3000DF91CF910C94FC230F931F93462F50E02C +:100C40004F30510508F0ABC0DC01FA01EA5AFF4F02 +:100C50000C94FA3012968C91882309F4A0C000E01D +:100C600010E0980140E064E070E088E292E00E94C9 +:100C7000361281E090E011C012968C91882309F41D +:100C80008EC000E010E0980140E066E070E088EB84 +:100C900091E00E94361282E090E00E9410067FC030 +:100CA00012968C91882309F47AC000E010E0980134 +:100CB00040E068E070E088EE91E00E94361284E047 +:100CC00090E0EBCF12968C91882311F083E00EC058 +:100CD00083E00E949A2440E164E083E00E949B0C40 +:100CE0005EC012968C91882321F084E00E947924C2 +:100CF000F2CF84E0EECF12968C91882331F085EE0E +:100D00000E94911C0E94C02C4AC085EE0E94591D71 +:100D100046C012968C91882309F441C00E94EB0DC5 +:100D200000E010E0980140E066E070E088E891E0C3 +:100D30000E94361284E00E949A2483E00E949A2442 +:100D400080E10E949A2485E00E9479240E94F42781 +:100D5000811102C00E94D0270E940C2890E090933D +:100D60008D0480938C04806880938C040E941028EA +:100D700016C012968C91882391F000E010E0980143 +:100D800040E066E070E088E591E00E94361285E080 +:100D90000E949A2404C012968C91811103C080E0B5 +:100DA00090E002C08AEE91E01F910F9108950F9399 +:100DB0001F932FEF89EF90E0215080409040E1F7A2 +:100DC00000C0000000E010E0980140E065E070E045 +:100DD00088E492E00E9436121F910F9108950C94BE +:100DE000D7060F931F9300E010E0980140E063E006 +:100DF00070E080E091E00E9436122FEF82E597E0EC +:100E0000215080409040E1F700C000001F910F91F9 +:100E10000C94EB0D0F931F9300E010E0980140E05D +:100E200068E070E088E191E00E9436121F910F9116 +:100E300008950C940A0781E008950C941B07089507 +:100E40000C94BC0580918503882309F448C08091E7 +:100E5000410390914203009779F40E9438279093C0 +:100E60004203809341038091430390E0009771F423 +:100E70008091440390E00AC00E94442720917002B0 +:100E8000309171022817390740F329C00197880F64 +:100E9000991F880F991FFC01EB5BFC4F60817181EA +:100EA000828193810E941E0EE091430384E0E89FBB +:100EB000F0011124EB5BFC4F608171818281938191 +:100EC0004FE050E00E94D6118091430390E00196DC +:100ED0006091440370E00E94E630809343030C94D9 +:100EE0006705109287030C94EB0D81E080938703D4 +:100EF0000C94190708958F929F92AF92BF92EF9230 +:100F0000FF920F931F93CF93DF93CDB7DEB7A397D5 +:100F10000FB6F894DEBF0FBECDBF7C01FC0100818F +:100F20001181C8010E943525B8010E947D098C01FC +:100F3000B7010E941D07882309F4CCC10032F0E5F7 +:100F40001F0741F4F7018281882309F458C00E94E9 +:100F5000CD12C0C10132F0E51F0741F4F7018281D3 +:100F6000882309F44CC00E94D612B4C10232F0E5C5 +:100F70001F0751F4F7018281882309F440C00E94C1 +:100F8000C9128111F0CFE3CF0332F0E51F0739F426 +:100F9000F7018281882399F10E9475079BC1043271 +:100FA000F0E51F0739F4F7018281882341F10E949F +:100FB000710790C10532F0E51F0749F4F7018281FE +:100FC0008823E9F0809187038111F1CFE5CF0632C4 +:100FD000F0E51F0739F4F7018281882381F00E9430 +:100FE000DD120AC00732F0E51F0749F4F7018281DC +:100FF000882329F00E94E8120E940A076BC18091A1 +:101000008703811105C0F70182818111CFC018C10A +:10101000003E110579F4F7018281882309F44DC05F +:101020000E94EB0D81E0809386031092850310925D +:10103000440350C1023E110559F4F701828188230F +:10104000E1F10E94EB0D109286031092850342C1DC +:10105000033E110591F4F7018281882371F10E940A +:10106000EB0D1092860381E0809385031092430379 +:1010700010924203109241032DC10235110559F41B +:10108000F7018281882309F425C180917002909133 +:1010900071020A970DC00135110579F4F7018281BB +:1010A000882309F417C180917002909171020A9609 +:1010B00090937102809370020DC14091740283E29B +:1010C000EFE8F2E0DE01119601900D928A95E1F7CA +:1010D000F701808121E030E02C0F3D1F280F311DEA +:1010E000C9012091720230917302FC01E20FF31FDB +:1010F0006081772767FD7095640F711D882777FDE4 +:101100008095982F0E94082E20E030E040E451E4C2 +:101110000E946D2D4B015C01F701218184E090E07C +:10112000821B9109BC01882777FD8095982F0E942A +:10113000082E9B01AC01C501B4010E94052D9B0145 +:10114000AC0160E070E080E090E40E947B2F20E042 +:1011500030E04CED50E40E94182F4B015C01F70188 +:1011600082818823D1F04FE050E0C501B4010E9494 +:10117000D611809186038823A1F08091440324E056 +:10118000829FF0011124EB5BFC4F80829182A2824E +:10119000B3828F5F8093440304C0C501B4010E94F1 +:1011A0001E0E0F3F110508F02ECF94C08091400312 +:1011B00081111FC0043130E5130709F051C00E94AE +:1011C0001F0781E0809340030E94382790933F03DC +:1011D00080933E0310923703109239031092380324 +:1011E00010923B0310923A0310923D0310923C037D +:1011F00071C080913E0390913F030E944427883C38 +:10120000910570F480913703E82FF0E0EE0FFF1F97 +:10121000E85CFC4F118300838F5F809337035AC0D3 +:10122000043880E5180721F00538104501F13AC06F +:10123000F7018281882341F01092350382E01EC0BD +:10124000043830E5130759F580913503811106C044 +:1012500086E20E94911C86E20E94591D82E01CC019 +:101260000438F0E51F0741F305381045D9F4F701BC +:101270008281882331F01092360380E20E94A81DFB +:1012800029C080913603811106C087E20E94911C1B +:1012900087E20E94591D80E20E94AF1D1BC00538E5 +:1012A000104529F381E08093350380933603C7010D +:1012B000A3960FB6F894DEBF0FBECDBFDF91CF91DE +:1012C0001F910F91FF90EF90BF90AF909F908F90E4 +:1012D0000C94690580E0A3960FB6F894DEBF0FBEAC +:1012E000CDBFDF91CF911F910F91FF90EF90BF90F5 +:1012F000AF909F908F90089508959CE0799FF001A2 +:10130000112490E3899FE00DF11D1124E60FF11DDA +:10131000EE0FFF1FED5FFD4F859194910895880FAB +:10132000991FFC01ED57FF4F859194910895880F07 +:10133000991FFC01ED5FFD4F8591949108950F93E6 +:101340001F93CF93DF93EC01811521E39207A0F562 +:10135000C11580E3D80708F0D7C0C83ED105D8F43E +:10136000C03ED10508F007C2C83AD10578F4C53AA5 +:10137000D10508F06AC0C130D10509F463C008F492 +:10138000F7C1C430D10508F0F6C1F2C1CB3BD1059D +:1013900008F466C0EDC1C11590E2D90708F0AFC0EE +:1013A000C11521E0D20708F0E6C1C03FD10508F41D +:1013B000DFC18E0110651FC2C03880E5D80700F577 +:1013C000C03790E5D90708F0A3C0C11520E5D207C2 +:1013D00009F4ACC050F4CE01905480319F4008F025 +:1013E000C7C1DF708E01106A06C2C13080E5D80720 +:1013F00009F4AEC0C43190E5D90708F4AFC0B8C154 +:10140000C33820E5D20709F48EC050F4C13890E506 +:10141000D90709F482C008F083C000E011EDEBC1E8 +:10142000C03181E5D80708F4A3C1C11597E5D907F4 +:1014300008F436C1CE0190578115904108F098C14B +:10144000DF7093C101E010E0D6C1C53AD10509F4BF +:1014500094C1C63AD10509F093C102E810E4CBC1AA +:10146000C83AD10509F48FC1C93AD10509F48EC132 +:10147000CA3AD10509F48DC1CB3AD10509F48CC122 +:10148000CC3AD10509F48BC1CD3AD10509F48AC112 +:10149000C03BD10509F489C1CE3AD10509F488C110 +:1014A000CF3AD10509F487C1C13BD10509F486C102 +:1014B000C23BD10509F485C1C33BD10509F484C100 +:1014C000C43BD10509F483C1C53BD10509F482C1F0 +:1014D000C63BD10509F481C1C73BD10509F480C1E0 +:1014E000C83BD10509F47FC1C93BD10509F47EC1D0 +:1014F000CA3BD10509F47DC100E014E47CC1CE01F2 +:101500009F700E94970978C1DD278E01106C73C10E +:10151000CF70DD278E01146D6EC100E010ED6BC140 +:1015200000E012ED68C100E013ED65C10E943C20AF +:101530000E94EB0D0E94F1068FEF94E32CE08150A6 +:1015400090402040E1F700C000000E94932753C163 +:10155000809162048160809362044DC10E94F427EF +:10156000811102C00E94D0270E940C2890E0909325 +:101570008D0480938C04C23080E5D80721F48091DB +:101580008C04816086C0C43090E5D90721F4809135 +:101590008C0482607EC0C63020E5D20721F48091A1 +:1015A0008C04846076C0C83080E5D80719F4809137 +:1015B0008C0427C0CA3090E5D90721F480918C04AF +:1015C000806167C0CC3020E5D20721F480918C0483 +:1015D00080625FC0CE3080E5D80721F480918C0412 +:1015E000806457C0C03190E5D90721F480918C0404 +:1015F00080684FC0C23120E5D20729F480918C0465 +:101600008460886046C0C33080E5D80721F48091AB +:101610008C048E7F3EC0C53090E5D90721F48091BF +:101620008C048D7F36C0C73020E5D20721F480912D +:101630008C048B7F2EC0C93080E5D80719F48091C7 +:101640008C0426C0CB3090E5D90721F480918C041E +:101650008F7E1FC0CD3020E5D20721F480918C040D +:101660008F7D17C0CF3080E5D80721F480918C049E +:101670008F7B0FC0C13190E5D90721F480918C0494 +:101680008F7707C0C331D04531F480918C048B7FB4 +:10169000877F80938C0480918C040E941028ABC0BB +:1016A0008D2F99278F70992781309105D9F49E014C +:1016B0002370332702C0880F991F2A95E2F79C6890 +:1016C0008E0144E0000F111F4A95E1F700271370C7 +:1016D000802B912B53E0CC0FDD1F5A95E1F7C0769C +:1016E000DD272FC08230910531F4DC2FCC278E010D +:1016F000016F106A80C08330910569F4CE01837058 +:10170000992701E010E002C0000F111F8A95E2F74F +:10171000C8019C680FC084309105B9F4CE01837074 +:10172000992701E010E002C0000F111F8A95E2F72F +:10173000C8019A6823E0CC0FDD1F2A95E1F7C07E2F +:10174000D7708C010C2B1D2B56C08530910531F4C0 +:10175000DC2FCC278E01046F106A4DC0069709F06C +:101760004AC0CF71DD27DC2FCC278E01106243C029 +:1017700000E010E040C08E013EC001E810E43BC034 +:1017800003E810E438C002EE14E435C009EE14E4B6 +:1017900032C00AEE14E42FC005EB14E42CC006EBB3 +:1017A00014E429C007EB14E426C00CEC14E423C0B5 +:1017B0000DEC14E420C003E815E41DC00AE815E4AC +:1017C0001AC002E915E417C004E915E414C001E2E7 +:1017D00016E411C003E216E40EC004E216E40BC0E6 +:1017E00005E216E408C006E216E405C007E216E4C6 +:1017F00002C00AE216E4C801DF91CF911F910F9158 +:1018000008959CE0799FF001112490E3899FE00DF9 +:10181000F11D1124E60FF11DEE0FFF1FED5FFD4FCF +:1018200085919491803E9105E0F4803C910558F5B6 +:101830008133910509F46FC048F48932910509F4A8 +:1018400063C08A32910509F46DC072C08933910575 +:10185000E9F082389105D1F08533910509F44DC046 +:1018600067C0833E910581F138F4803E9105B9F05F +:10187000823E9105D9F05CC0863E910561F1873EBC +:101880009105A1F155C00E948F09089520918C0403 +:1018900020FD02C021FF4CC080EE90E049C0809145 +:1018A0008C0480FFF9CF89E390E042C080918C04E2 +:1018B00082FF0EC080918C0484FF03C080E090E022 +:1018C00037C083EE90E034C080918C0482FFF2CF69 +:1018D00082EE90E02DC080918C0483FF0BC080913C +:1018E0008C0484FDEBCF87EE90E022C080918C04C5 +:1018F00083FFF5CF86EE90E01BC080918C0485FFBE +:1019000007C089E290E014C080918C0485FFF9CF74 +:1019100085E390E00DC080918C0486FF07C08AE2C9 +:1019200090E006C080918C0486FFF9CF81E390E0BF +:101930000E949F090895CF92DF92EF92FF920F933A +:101940001F9301E010E020E030E06801790104C05D +:10195000CC0CDD1CEE1CFF1C8A95D2F704C0000FD6 +:10196000111F221F331F6A95D2F70C291D292E291A +:101970003F29C0904504D0904604E0904704F09081 +:101980004804C022D122E222F322842FC016D106BD +:10199000E206F30641F41F910F91FF90EF90DF9064 +:1019A000CF900C9479241F910F91FF90EF90DF90CE +:1019B000CF900C949A240C946B05E82FF0E0E2543D +:1019C000FD4F8081E82FEF70F0E082958F7021E06D +:1019D00030E0A90102C0440F551F8A95E2F740A3E9 +:1019E00008950F931F93CF93DF9385B7806885BFCA +:1019F00085B7806885BFC3E0D0E001E010E0FE015C +:101A0000E254FD4F8081E82FEF70F0E021A1829534 +:101A10008F70A80102C0440F551F8A95E2F7CA01D2 +:101A2000822B81A38C2F0E94DD0C219740F78BE045 +:101A300090E061E070E0FC01EE54FD4F2081E22F68 +:101A4000EF70F0E042A122952F70DB0102C0AA0FD7 +:101A5000BB1F2A95E2F79D01242B22A3019758F77B +:101A6000DF91CF911F910F910C942007EF92FF927D +:101A70000F931F93CF93DF9300E913E0C3E0EE24AD +:101A8000E394F12CD5E08C2F0E94DD0C8BE090E0EC +:101A900040E050E0FC01EE54FD4F6081E62FEF7016 +:101AA000F0E020A130E062956F7002C03595279577 +:101AB0006A95E2F720FD09C09701082E02C0220FA7 +:101AC000331F0A94E2F7422B532B019718F7F801C2 +:101AD000929182918F018417950721F05183408361 +:101AE000D09375028C2F0E94DD0CC15060F680915E +:101AF000750287FD2CC08150809375028F3F39F0AD +:101B00008FE99FE00197F1F700C0000020C08091AD +:101B10008E0390918F039093970380939603809107 +:101B20008C0390918D0390939503809394038091FF +:101B30008A0390918B0390939303809392038091F7 +:101B400088039091890390939103809390030E945E +:101B5000220781E0DF91CF911F910F91FF90EF90CD +:101B60000895E82FF0E0EE0FFF1FE057FC4F808153 +:101B70009181089508950F931F93CF9308E913E07F +:101B8000C0E0F801929182918F010E94B026C80FA7 +:101B9000F3E000391F07A9F78C2FCF911F910F9108 +:101BA00008950E94F427811102C00E94D0270E944C +:101BB0001E28809377043E9A809171008D7F8093D8 +:101BC000710082E0809390008AE18093910081E02F +:101BD00080939A03089580919A03811102C00E9414 +:101BE000D10D1092EA031092E903809171008D7F6C +:101BF00080937100809190008F7380939000109279 +:101C0000AC031092AB031092E3031092E403109222 +:101C1000E5031092E6031092E2031092E103E1EC77 +:101C2000F3E0A1EBB3E011921192119211921D9287 +:101C30001D9283E0E13EF807B1F70895CF92DF925D +:101C4000EF92FF920F931F93CF93DF932091AB03FB +:101C5000222309F484C06B017C0180919A038111D5 +:101C600002C00E94D10D01EE13E0C7E0D0E0A70151 +:101C70009601F80192918291729162918F010E9476 +:101C8000692D811131C0FE01EE0FFF1FEE0FFF1F06 +:101C9000EF53FC4F1082118212821382DE01AA0FD1 +:101CA000BB1FAF54BC4F11961C921E92C730D1057A +:101CB000E9F0219644815581668177814083518383 +:101CC00062837383148215821682178212968D9115 +:101CD0009C91139711969C938E9313961C921E922F +:101CE000129734961296E2CF219708F68091E90375 +:101CF0009091EA03019797FD05C09093EA038093C2 +:101D0000E90304C01092EA031092E9038091E90309 +:101D10009091EA032091E7033091E80328173907EF +:101D200024F01092E8031092E703892BC1F480910C +:101D300071008D7F80937100809190008F738093EC +:101D400090001092E3031092E4031092E5031092C6 +:101D5000E6031092E2031092E1031092AB03DF91CD +:101D6000CF911F910F91FF90EF90DF90CF9008954A +:101D70001F920F920FB60F9211244F925F926F92A3 +:101D80007F928F929F92AF92BF92CF92DF92EF920B +:101D9000FF922F933F934F935F936F937F938F9314 +:101DA0009F93AF93BF93CF93DF93EF93FF93809174 +:101DB000AB03882309F49BC1C091E903D091EA03E6 +:101DC0001C161D060CF093C140909B0350909C0381 +:101DD00060909D0370909E0320E030E0A901C30154 +:101DE000B2010E94142F18160CF065C0C130D10545 +:101DF00009F452C08091E7039091E803BE010E946C +:101E0000E6307C019093E8038093E7038090AD0374 +:101E10009090AE03A090AF03B090B00320E030E00C +:101E200040E85FE3C501B4010E94052D6093AD0356 +:101E30007093AE038093AF039093B003F701EE0F5E +:101E4000FF1FEE0FFF1FEF53FC4FA30192016081B4 +:101E50007181828193810E946D2D20E030E040E00D +:101E60005EE30E94182F9B01AC01C501B4010E94E2 +:101E7000142F18168CF4C7010196BE010E94E6309B +:101E80009093E8038093E7031092AD031092AE03A2 +:101E90001092AF031092B003E091E703F091E803D2 +:101EA000EE0FFF1FEE0FFF1FEF53FC4F608171819C +:101EB00082819381D0C0C090E303D090E403E0908E +:101EC000E503F090E60320E030E0A901C701B60188 +:101ED0000E94692D2197882309F4A2C0FE01EE0F0C +:101EE000FF1FEE0FFF1FEF53FC4F80809180A280F9 +:101EF000B380A5019401C701B6010E94692D87FF37 +:101F000031C0A501940160E070E08CED93EC0E947B +:101F10006D2D20E030E040E451E40E946D2D20E082 +:101F200030E040E05FE30E94182F9B01AC0160E0CD +:101F300070E080E090E40E947B2F9B01AC01C50122 +:101F4000B4010E94182F9B01AC01C701B6010E9489 +:101F5000692D87FF07C0A701960160E070E08CED56 +:101F600093E439C0A5019401C701B6010E94142F62 +:101F700018160CF055C0A501940160E070E08CEDDE +:101F800093E40E946D2D20E030E040E451E40E9493 +:101F90006D2D20E030E040E05FE30E94182F9B01B0 +:101FA000AC0160E070E080E090E40E947B2F9B0138 +:101FB000AC01C501B4010E94182F9B01AC01C701FF +:101FC000B6010E94142F18165CF5A701960160E077 +:101FD00070E08CED93EC0E946D2D20E030E040E449 +:101FE00051E40E946D2D20E030E040E05FE30E946C +:101FF000182F9B01AC0160E070E080E090E40E944B +:102000007B2F9B01AC01C701B6010E94182F609382 +:10201000E3037093E4038093E5039093E60313C016 +:10202000FE01EE0FFF1FEE0FFF1FEF53FC4F8081ED +:102030009181A281B3818093E3039093E403A09301 +:10204000E503B093E6036091E3037091E4038091AC +:10205000E5039091E60320919803309199032F3F77 +:102060004FEF340731F02F5F3F4F309399032093A8 +:1020700098030E94F3126B017C0120E034E244EFEC +:1020800051E40E94692D87FF08C086EFC82E88E2C0 +:10209000D82E84EFE82E81E4F82E20E030E040E0F6 +:1020A00051E4C701B6010E94182F9B01AC0160E00A +:1020B00074E284E79BE40E946D2D6B017C010E9419 +:1020C000DA2D7093970060939600209176023091FC +:1020D00077024091780250917902C701B6010E94BF +:1020E000182F0E94DA2D70939900609398008091C8 +:1020F000AC03882309F433C1C090A703D090A80390 +:10210000E090A903F090AA0320E030E0A901C70104 +:10211000B6010E94142F1816D4F58091980390915F +:1021200099038F3F2FEF920729F00196909399031F +:1021300080939803C701B6010E94F31220E030E0BB +:1021400040E051E40E94182F9B01AC0160E074E272 +:1021500084E79BE40E946D2D6B017C010E94DA2DC7 +:1021600070939700609396002091760230917702E9 +:102170004091780250917902C701B6010E94182F50 +:102180000E94DA2D709399006093980008C0109215 +:10219000970010929600109299001092980060910A +:1021A000A1037091A2036F5F7F4F7093A2036093AE +:1021B000A103209196003091970080E090E0232BBE +:1021C000F1F0C0919600D09197000E94062E6B010D +:1021D0007C01BE0180E090E00E94062E9B01AC01D4 +:1021E0006091A3037091A4038091A5039091A6032D +:1021F0000E946D2D20E03FEF4FE757E410C00E9492 +:10220000062E6B017C0120E030EE4FEF54E460912C +:10221000A3037091A4038091A5039091A6030E944B +:10222000182F9B01AC01C701B6010E94142F87FD36 +:1022300096C080919F038F5F80939F0390E02091D1 +:1022400073043091740482179307A0F080917E0488 +:10225000882319F010929F030DC0809171008D7F2B +:1022600080937100809190008F7380939000109202 +:10227000AC037DC08091A003C0919F03811128C051 +:10228000C0907804D0907904E0907A04F0907B04B8 +:1022900020E030E0A901C701B6010E94142F1816F2 +:1022A000BCF481E08093A0031092A7031092A803CE +:1022B0001092A9031092AA03C092A303D092A40380 +:1022C000E092A503F092A603C150C0939F0343C0C0 +:1022D0001092A0031092990310929803E091750454 +:1022E000F091760448E0C49FE00DF11D1124808137 +:1022F0009181A281B3818093A7039093A803A093B7 +:10230000A903B093AA0320E030E040E85EE36481D3 +:102310007581868197810E94182F6B017C018091C5 +:102320007A02682F70E080E090E00E94062E20E0A4 +:1023300030E048EC52E40E946D2D9B01AC01C701D6 +:10234000B6010E94182F6093A3037093A403809397 +:10235000A5039093A6031092A2031092A10380916B +:10236000770480FD04C01092AC031092AB03FF9180 +:10237000EF91DF91CF91BF91AF919F918F917F911D +:102380006F915F914F913F912F91FF90EF90DF9070 +:10239000CF90BF90AF909F908F907F906F905F9005 +:1023A0004F900F900FBE0F901F901895CF92DF9215 +:1023B000EF92FF92CF93DF936B017C01EA01809152 +:1023C0009A03811102C00E94D10D8091770480FF91 +:1023D00046C08091E9039091EA0308970CF03FC052 +:1023E000809171008D7F809371008091AC03811189 +:1023F0000E94EB0D81E08093AB0310929903109241 +:10240000980320E030E0A901C701B6010E94142F13 +:102410001816DCF48091E9039091EA03FC01EE0FB9 +:10242000FF1FEE0FFF1FEF53FC4FC082D182E282ED +:10243000F382FC01EE0FFF1FEF54FC4FD183C083EA +:1024400001969093EA038093E90380917100826082 +:102450008093710080919000806880939000DF915C +:10246000CF91FF90EF90DF90CF9008958F929F9241 +:10247000AF92BF92CF92DF92EF92FF920F931F9392 +:10248000CF93DF93EC017B01D42E48015901809159 +:102490009A03811102C00E94D10D8091770480FFC0 +:1024A0006BC0809171008D7F809371008091AB0330 +:1024B00081110E94EB0D81E08093AC03D0937604F0 +:1024C000C0937504F0927404E0927304D0927E0479 +:1024D0008092780490927904A0927A04B0927B045E +:1024E0001092AD031092AE031092AF031092B0039E +:1024F00010929F0388819981AA81BB818093A70351 +:102500009093A803A093A903B093AA0320E030E01E +:1025100040E85EE36C817D818E819F810E94182F4F +:102520006B017C0180917A02682F70E080E090E07E +:102530000E94062E20E030E048EC52E40E946D2D0F +:102540009B01AC01C701B6010E94182F6093A30341 +:102550007093A4038093A5039093A6031092A20303 +:102560001092A1038091710082608093710080912C +:102570009000806880939000DF91CF911F910F9120 +:10258000FF90EF90DF90CF90BF90AF909F908F9093 +:102590000895809177048170089580917704816017 +:1025A000809377040E9422280C947A078091770404 +:1025B0008E7F809377040C9422288091EB0390E027 +:1025C000019666E070E00E94E6308093EB03089588 +:1025D0008091EB0390E0019766E070E00E94E630A6 +:1025E0008093EB0308958F929F92AF92BF92CF9208 +:1025F000DF92EF92FF920F931F93CF93DF936B01C4 +:102600007C01C0919803D0919903BE0180E090E0D5 +:102610000E94062E4B015C01A701960160E070E06C +:102620008CE594E40E946D2D9B01AC01C501B401C1 +:102630000E94182F0E94DA2D2091EB03233009F419 +:1026400073C028F4222351F02130E9F02CC124304A +:1026500009F4A0C0253009F4E0C025C180E090E075 +:10266000A0E0BFE38093760290937702A093780274 +:10267000B093790210929B0310929C0310929D03D9 +:1026800010929E0310C110929B0310929C03109213 +:102690009D0310929E036431710540F46A30710508 +:1026A00060F520E030E040E85EE32BC0693C710556 +:1026B00008F0AAC080E090E00E94062E20E030E002 +:1026C00040EA51E40E94042D20E030E044E353E46A +:1026D0000E946D2D9B01AC010E94182F20E030E07C +:1026E00040E05EE30E94182F9B01AC0160E070E0C7 +:1026F00080E09EE30E94042D44C020E030E040E0F2 +:102700005FE3C701B6010E94182F6B017C0180E0D6 +:1027100090E0A0E0BEE38093760290937702A093CE +:102720007802B0937902BFC010929B0310929C0371 +:1027300010929D0310929E034AE0469F9001479F8E +:10274000300D1124C90168EB7BE00E94D230BC013E +:102750006C5D754077FF03C071956195710988279D +:1027600077FD8095982F0E94082E2EE333EC4EE2E1 +:1027700059E30E94182F20E030E040EC5EE30E9415 +:10278000052D609376027093770280937802909380 +:10279000790289C010929B0310929C0310929D03B2 +:1027A00010929E03CE0183709927892BE1F0BE0120 +:1027B0006170772780E090E00E94062E20E030E0F4 +:1027C00040E05EE30E94182F20E030E040E45FE349 +:1027D0000E94052D609376027093770280937802B1 +:1027E000909379020CC080E090E0A0E0BFE380937A +:1027F000760290937702A0937802B0937902C77023 +:10280000DD27CD2B09F04FC010927602109277028F +:10281000109278021092790246C010929B03109297 +:102820009C0310929D0310929E0300E010E020E0B4 +:102830003FE300937602109377022093780230935F +:1028400079026739710578F180E090E00E94062EE8 +:1028500020E030E047E153E40E94042D20E030E026 +:102860004AE754E40E946D2D20E030E048E452E451 +:102870000E94182F20E030E040EA51E40E944A2EE6 +:102880000E94D52D660F771F660F771FFB01EE5351 +:10289000FD4F2081318142815381C701B6010E94E1 +:1028A000182F6B017C01C701B601DF91CF911F91F9 +:1028B0000F91FF90EF90DF90CF90BF90AF909F90DF +:1028C0008F9008958091FC030895CF93DF9300D0FB +:1028D0001F92CDB7DEB79C0180918304843019F537 +:1028E00093E099833B832A839093E9008FEF909143 +:1028F000E800815095FD06C095ED9A95F1F700002E +:102900008111F5CF8091E80085FF0DC040E050E0D7 +:1029100063E070E0CE0101960E94C2168091E8004B +:102920008E778093E8000F900F900F90DF91CF91FA +:102930000895CF93DF9300D01F92CDB7DEB72091DB +:102940008304243021F522E029839B838A8383E05A +:102950008093E9008FEF9091E800815095FD06C0CB +:1029600095ED9A95F1F700008111F5CF8091E8007F +:1029700085FF0DC040E050E063E070E0CE010196BD +:102980000E94C2168091E8008E778093E8000F9035 +:102990000F900F90DF91CF91089520918304243000 +:1029A000F1F422E02093E9002FEF3091E80021506C +:1029B00035FD06C035ED3A95F1F700002111F5CF50 +:1029C0002091E80025FF0BC040E050E065E070E09A +:1029D0000E94C2168091E8008E778093E8000895E7 +:1029E000CF93DF93EC0190918304943009F046C0BB +:1029F000809185028823D9F0809186028823B9F0DE +:102A00009093E9008FEF9091E800815095FD06C00A +:102A100095E19A95F1F700008111F5CF8091E800DA +:102A200085FF2CC040E050E060E170E017C081E01D +:102A30008093E9008FEF9091E800815095FD06C0EA +:102A400095ED9A95F1F700008111F5CF8091E8009E +:102A500085FF14C040E050E068E070E0CE010E94C5 +:102A6000C2168091E8008E778093E80080E1FE0135 +:102A7000ACEEB3E001900D928A95E1F7DF91CF9132 +:102A8000089580918204811109C00E9457180E9404 +:102A9000B4188091E20084608093E200089510925F +:102AA00082040895089508950C94FB2642E061EC99 +:102AB00081E00E94D11742E061EC82E00E94D117D0 +:102AC00042E061EC83E00E94D11742E161EC84E0D6 +:102AD0000C94D11780918504833009F455C030F4EB +:102AE000813071F0823009F48EC008958A3009F483 +:102AF0007AC08B3009F460C0893009F09CC020C0D6 +:102B000080918404813A09F096C08091E800877F23 +:102B10008093E8008091880490918904892B21F4A6 +:102B200060E18CEE93E003C060E080E090E070E054 +:102B30000E940D178091E8008B778093E80008953C +:102B400080918404813209F076C08091880490914C +:102B50008904009719F0039709F06DC08091E8008F +:102B6000877F8093E8008091E80082FD05C0809116 +:102B700083048111F8CF5FC08091F1008093FC0342 +:102B80008091E8008B7753C080918404813A09F0EA +:102B900052C08091880490918904892B09F04BC020 +:102BA0008091E800877F8093E8008091E80080FFB3 +:102BB000FCCF8091850236C0809184048132D9F5A2 +:102BC0008091880490918904892BA9F58091E8006F +:102BD000877F8093E8000E94061880918604809386 +:102BE00085020C943C2080918404813221F58091EF +:102BF000E800877F8093E8000E9406188091870490 +:102C00008093FD03089580918404813AA1F480911A +:102C1000E800877F8093E8008091E80080FFFCCF88 +:102C20008091FD038093F1008091E8008E7780937E +:102C3000E8000C940618089584B7877F84BF88E164 +:102C40000FB6F89480936000109260000FBE80E889 +:102C500080936100109261000E94A91B0E94571886 +:102C60000E94B4188091E20084608093E20078941E +:102C70000E943A1B0E94AB1B8BE792E00E94551BFF +:102C800080918304853069F40E94BC268091810480 +:102C90008823B1F30E94EA26882391F30E94AC16A0 +:102CA000EFCF0E94B31BECCF292F33272330310500 +:102CB000C9F064F42130310581F02230310509F08A +:102CC00043C08DE690E02FEB38E042C02132310561 +:102CD000F1F02232310541F137C082E190E02CE27F +:102CE00039E036C099278130910541F08230910555 +:102CF00041F0892B49F5EBEBF8E005C0EDE8F8E091 +:102D000002C0E3E6F8E0849190E09F0121C06430C6 +:102D1000D8F4E62FF0E0EE0FFF1FE25EFC4F2081BB +:102D2000318189E090E014C0643070F470E0FB0100 +:102D3000EE0FFF1FEA5EFC4F20813181FB01EE5E4A +:102D4000FC4F808190E004C080E090E020E030E023 +:102D5000FA0131832083089580E189BD82E189BD34 +:102D600009B400FEFDCF8091D8008F7D8093D800FC +:102D70008091E00082608093E0008091E00081FD1E +:102D8000FCCF0895CF92DF92EF92FF920F931F93A3 +:102D9000CF93DF93EC018B016A010E94251881110A +:102DA00033C0C114D10439F0F60180819181081B30 +:102DB000190BC80FD91FE12CF12C0115110519F1C0 +:102DC0008091E80085FD16C08091E8008E778093A1 +:102DD000E800C114D10449F0F60180819181E80E28 +:102DE000F91EF182E08285E00FC00E942518882339 +:102DF00021F30AC089918093F10001501109FFEF7E +:102E0000EF1AFF0ADACF80E0DF91CF911F910F9187 +:102E1000FF90EF90DF90CF90089520918A04309139 +:102E20008B042617370748F06115710539F4209196 +:102E3000E8002E772093E80001C0B90140E0611559 +:102E40007105A9F120918304222309F443C02530A0 +:102E500009F442C02091E80023FD40C02091E80021 +:102E600022FD32C02091E80020FFE9CF4091F3001D +:102E70002091F20030E0342BFC01CF016115710587 +:102E800059F02830310540F481918093F100615070 +:102E900071092F5F3F4FF1CF41E02830310509F034 +:102EA00040E02091E8002E772093E800C8CF411140 +:102EB000C9CF0AC080918304882361F0853061F016 +:102EC0008091E80083FD0AC08091E80082FFF2CF84 +:102ED00080E0089582E0089583E0089581E00895F8 +:102EE00020918A0430918B042617370748F061152A +:102EF000710539F42091E8002E772093E80001C095 +:102F0000B901FC0120E06115710591F18091830404 +:102F1000882309F440C0853009F43FC08091E8005F +:102F200083FD3DC08091E80082FD2FC08091E800C4 +:102F300080FFE9CF2091F3008091F20090E0922B86 +:102F40006115710559F08830910540F42491209362 +:102F5000F1003196615071090196F2CF21E0089796 +:102F600009F020E08091E8008E778093E800CBCFD5 +:102F70002111CCCF0AC080918304882361F0853071 +:102F800061F08091E80083FD0AC08091E80082FF33 +:102F9000F2CF80E0089582E0089583E0089581E013 +:102FA0000895982F973058F59093E900981739F0C5 +:102FB0007091EC002091ED005091F00003C0242F9F +:102FC000762F50E021FF19C03091EB003E7F309307 +:102FD000EB003091ED003D7F3093ED003091EB0040 +:102FE00031603093EB007093EC002093ED00509330 +:102FF000F0002091EE0027FF07C09F5FD3CF8F70B6 +:103000008093E90081E0089580E008958091840430 +:1030100087FF11C08091E80082FD05C08091830484 +:103020008111F8CF11C08091E8008B770BC080919F +:103030008304882349F08091E80080FFF8CF8091D5 +:10304000E8008E778093E80008952091E4003091A5 +:10305000E50095E64091EC00842F817040FF22C08E +:103060008091E80080FD1CC080918304882391F04A +:10307000853091F08091EB0085FD10C04091E40017 +:103080005091E5004217530729F39A01915011F727 +:1030900084E0089582E0089583E0089581E0089532 +:1030A00080E008954091E80042FFDECF08950E943D +:1030B000C5180E94CD18E0EEF0E080818160808329 +:1030C000E8EDF0E080818F77808319BCA7EDB0E058 +:1030D0008C918E7F8C9380818F7E8083109282046E +:1030E00008950F931F93CF93DF930E94C5180E94FA +:1030F000CD18C8EDD0E088818F778883888180687B +:10310000888388818F7D888319BC109283041092F4 +:103110007F04109281041092800400EE10E0F80108 +:1031200080818B7F808388818160888342E060E03A +:1031300080E00E94D117E1EEF0E080818E7F8083F5 +:10314000E2EEF0E08081816080838081886080830E +:10315000F80180818E7F8083888180618883DF9100 +:10316000CF911F910F910895E8EDF0E080818F7E5F +:103170008083E7EDF0E080818160808384E082BF1E +:1031800081E0809382040C947118E8EDF0E0808176 +:103190008E7F80831092E20008951092DA001092E0 +:1031A000E10008951F920F920FB60F9211242F93F2 +:1031B0003F934F935F936F937F938F939F93AF93BF +:1031C000BF93EF93FF938091E10082FF0BC080914A +:1031D000E20082FF07C08091E1008B7F8093E100D5 +:1031E0000E94391B8091DA0080FF1FC08091D800B7 +:1031F00080FF1BC08091DA008E7F8093DA0080917F +:10320000D90080FF0DC080E189BD82E189BD09B48C +:1032100000FEFDCF81E0809383040E94411505C02C +:1032200019BC109283040E944F158091E10080FF29 +:1032300019C08091E20080FF15C08091E2008E7F6E +:103240008093E2008091E20080618093E2008091AF +:10325000D80080628093D80019BC85E080938304F5 +:103260000E9453158091E10084FF30C08091E200FC +:1032700084FF2CC080E189BD82E189BD09B400FED4 +:10328000FDCF8091D8008F7D8093D8008091E100A0 +:103290008F7E8093E1008091E2008F7E8093E20038 +:1032A0008091E20081608093E20080917F04882316 +:1032B00011F084E007C08091E30087FD02C081E047 +:1032C00001C083E0809383040E9454158091E10043 +:1032D00083FF29C08091E20083FF25C08091E10037 +:1032E000877F8093E10082E08093830410927F04C3 +:1032F0008091E1008E7F8093E1008091E2008E7FDB +:103300008093E2008091E20080618093E20042E0DD +:1033100060E080E00E94D1178091F0008860809387 +:10332000F0000E945215FF91EF91BF91AF919F91D4 +:103330008F917F916F915F914F913F912F910F905E +:103340000FBE0F901F9018951F920F920FB60F92FD +:1033500011242F933F934F935F936F937F938F939A +:103360009F93AF93BF93CF93DF93EF93FF93C0915E +:10337000E900CF708091EC00D82FD17080FDD0E8AB +:103380001092E9008091F000877F8093F00078949C +:103390000E94E8191092E9008091F0008860809303 +:1033A000F000CD2BCF70C093E900FF91EF91DF913A +:1033B000CF91BF91AF919F918F917F916F915F91CD +:1033C0004F913F912F910F900FBE0F901F90189526 +:1033D0001F93CF93DF93CDB7DEB7AA970FB6F894BC +:1033E000DEBF0FBECDBFE4E8F4E088E08E0F909121 +:1033F000F10091938E13FBCF0E946A158091E80033 +:1034000083FF1FC18091840490918504492F50E06F +:103410004A30510508F015C1FA01EB59FF4F0C94E1 +:10342000FA30803881F0823809F00BC1809188042D +:103430008F708093E9008091EB0085FB882780F9ED +:103440001092E90006C0809180049091810491114E +:1034500082609091E800977F9093E8008093F1005C +:103460001092F100C8C0282F2D7F09F0EAC08823F0 +:1034700019F0823061F0E5C080918604813009F056 +:10348000E0C0933009F080E0809381042BC08091EC +:103490008604811127C0809188048F7009F4D1C0FF +:1034A0008093E9002091EB0020FF1CC0933021F4B1 +:1034B0008091EB00806214C09091EB00906190933A +:1034C000EB0021E030E0A90102C0440F551F8A95AE +:1034D000E2F74093EA001092EA008091EB008860E6 +:1034E0008093EB001092E9008091E800877F86C00E +:1034F0008111A7C0109186041F778091E300807826 +:10350000812B8093E3008091E800877F8093E8001F +:103510000E9406188091E80080FFFCCF8091E300B4 +:1035200080688093E300111102C082E001C083E053 +:103530008093830486C08058823008F082C08091D6 +:103540008604909187048C3D53E0950779F583E0DC +:103550008A838AE289834FB7F894DE01139620E0CC +:103560003EE051E2E32FF0E050935700E49120FF5A +:1035700003C0E295EF703F5FEF708E2F90E0EA306E +:1035800010F0C79601C0C0968D939D932F5F243194 +:1035900049F74FBF8091E800877F8093E8006AE297 +:1035A00070E0CE0101960E940D1714C0AE014F5F6E +:1035B0005F4F609188040E945416BC01009709F483 +:1035C00040C09091E800977F9093E80089819A81AC +:1035D0000E9470178091E8008B778093E80031C0DB +:1035E000803879F58091E800877F8093E8008091AA +:1035F0007F048093F1008091E8008E778093E8004B +:103600000E9406181EC081111CC090918604923041 +:10361000C0F48091E800877F8093E80090937F0456 +:103620000E94061880917F04811106C08091E300FA +:1036300087FD02C081E001C084E0809383040E9482 +:1036400056158091E80083FF0AC08091E800877FCB +:103650008093E8008091EB0080628093EB00AA9653 +:103660000FB6F894DEBF0FBECDBFDF91CF911F9193 +:1036700008950895CF93809183048823A1F0C09189 +:10368000E900CF709091EC00892F817090FD80E867 +:10369000C82B1092E9008091E80083FD0E94E81990 +:1036A000CF70C093E900CF91089590930304809365 +:1036B00002040895E0910204F0910304309721F090 +:1036C0000190F081E02D099480E00895E0910204DA +:1036D000F0910304309721F00280F381E02D0994EA +:1036E0000895E0910204F0910304309721F00480E2 +:1036F000F581E02D09940895209100043091010492 +:103700008217930771F09093010480930004E09175 +:103710000204F0910304309721F00680F781E02D38 +:10372000099408952091FE033091FF0382179307B7 +:1037300071F09093FF038093FE03E0910204F091F7 +:103740000304309721F00084F185E02D0994089559 +:1037500008950C94A81B0E942F270E94F10C0E9430 +:10376000B5270C94692C5F926F927F928F929F92F3 +:10377000AF92BF92CF92DF92EF92FF920F931F937F +:10378000CF93DF9300D000D01F92CDB7DEB70E9459 +:10379000360D9DE0C92E94E0D92E03E010E0AA2456 +:1037A000A394B12C502E802F0E94B10D4C01F60134 +:1037B000729062906F016826792661147104A1F4F9 +:1037C0000150110978F78FEF89838A831B820E9449 +:1037D00038278160782F9D838C8349815A816B8142 +:1037E0008D810E94631C38C08091620481FD0E941B +:1037F000BA0D2BE030E07501022E02C0EE0CFF1C6A +:103800000A94E2F7C70186219721892B09F12983C0 +:103810005A828E209F2091E0892809F490E09B83B2 +:103820000E9438278160782F9D838C8349815A813B +:103830006B818D810E94631C000F111FF801EB5FEB +:10384000FB4F80819181E826F926F182E08204C055 +:103850002150310980F6B4CF0E94A12910910404AF +:103860000E945A1B1817D1F00E945A1B809304041F +:103870000F900F900F900F900F90DF91CF911F91AD +:103880000F91FF90EF90DF90CF90BF90AF909F90FF +:103890008F907F906F905F900C94DB0C0F900F9047 +:1038A0000F900F900F90DF91CF911F910F91FF908C +:1038B000EF90DF90CF90BF90AF909F908F907F90D0 +:1038C0006F905F900895CF93DF93CDB7DEB72B97BE +:1038D0000FB6F894DEBF0FBECDBF4F835887698700 +:1038E0007A878B87DE01119686E0FD0111928A9519 +:1038F000E9F785E0FE01379601900D928A95E1F790 +:1039000049815A816B817C818D819E810E94DA225E +:103910002B960FB6F894DEBF0FBECDBFDF91CF91CF +:103920000895CF93882309F4C2C0C82F823859F470 +:103930000E945A1B81FDBBC089E30E94B4250E94EE +:10394000812689E30CC0833879F40E945A1B80FDDC +:10395000AEC083E50E94B4250E94812683E50E94C3 +:10396000F625CF910C948126843859F40E945A1B75 +:1039700082FD9DC087E40E94B4250E94812687E4D1 +:10398000EECF8CEF8C0F813A48F48C2F0E94D12B14 +:1039900081118DC08C2F0E94B425E3CF80E28C0F63 +:1039A000883048F4C77081E001C0880FCA95EAF7F3 +:1039B0000E943A26D6CF8BE58C0F833078F4C53A37 +:1039C00029F0C63A31F083E890E005C081E890E044 +:1039D00002C082E890E0CF910C947C1B88E58C0FAC +:1039E000833108F064C0C83A39F1C93A41F1CA3AA2 +:1039F00049F1CB3A51F1CC3A59F1CD3A61F1C03BA2 +:103A000069F1CE3A71F1CF3A79F1C13B81F1C23B14 +:103A100089F1C33B91F1C43B99F1C53BA1F1C63B90 +:103A2000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF0 +:103A3000C9F180E090E038C082EE90E035C089EEB8 +:103A400090E032C08AEE90E02FC085EB90E02CC071 +:103A500086EB90E029C087EB90E026C08CEC90E0EC +:103A600023C08DEC90E020C083E891E01DC08AE87F +:103A700091E01AC082E991E017C084E991E014C096 +:103A800081E292E011C083E292E00EC084E292E013 +:103A90000BC085E292E008C086E292E005C087E2B2 +:103AA00092E002C08AE292E0CF910C94921BCF91F7 +:103AB0000895882309F44BC0823859F40E945A1B98 +:103AC00081FF45C089E30E94B4250E94812689E3D5 +:103AD0000CC0833871F40E945A1B80FF38C083E504 +:103AE0000E94B4250E94812683E50E94F6250C944D +:103AF0008126843859F40E945A1B82FF28C087E42B +:103B00000E94B4250E94812687E4EFCF9CEF980F96 +:103B1000913A58F390E2980F983050F4877091E002 +:103B200001C0990F8A95EAF7892F0E944026DFCFBE +:103B30009BE5980F933020F480E090E00C947C1B80 +:103B4000885A833120F480E090E00C94921B089511 +:103B5000882321F00E943A260C9481260895882318 +:103B600021F00E9440260C94812608957F928F9226 +:103B70009F92AF92BF92CF92DF92EF92FF920F93FC +:103B80001F93CF93DF931F92CDB7DEB77C01C62E74 +:103B9000772EFC01058102950F70128111110E9490 +:103BA00057260E94AD25882379F0112369F080E221 +:103BB0008C0D883048F082E00E9496250E94AD2549 +:103BC00091E0D82ED92601C0D12CE72DE295EF70D7 +:103BD000F0E0E159FF4F0C94FA30872D807F072DDC +:103BE0000F70882311F00295007F112389F00023C4 +:103BF00009F499C180E28C0D883020F4802F0E9456 +:103C00003A2603C0802F0E944A260E9481268BC13B +:103C10008C2D0E94591D002309F4C3C180E28C0D34 +:103C2000883020F4802F0E94402603C0802F0E94FD +:103C300050260E948126B5C1872D807F972D9F70C9 +:103C4000803211F4892F03C0892F8295807FCC2088 +:103C500021F0F1E0CF16A1F01DC0112339F00023AF +:103C600019F1013009F50E946A269BC1002319F061 +:103C7000013009F496C189830E946D26898110C1A3 +:103C8000112321F0063008F08CC10EC0053008F079 +:103C900088C106C1112359F0002331F0F701958145 +:103CA00090FF41C19F7095830E94A81D7AC1002397 +:103CB00009F4F6C03EC1872D86958695837090E005 +:103CC000009719F0019761F06CC1112321F08C2D40 +:103CD000972D937002C080E090E00E947C1B61C130 +:103CE000112321F08C2D972D937002C080E090E07D +:103CF0000E94921B56C18C2D112319F00E94A928F5 +:103D000002C00E9411290E9496294BC1872D837001 +:103D100009F052C0111145C18C2D8295869587708E +:103D2000880F880F9C2D9F70892E912CA12CB12C6F +:103D3000082E04C0880C991CAA1CBB1C0A94D2F73C +:103D4000C4FE14C00FE010E020E030E0B901A8018B +:103D500004C0440F551F661F771F8A95D2F7CB0109 +:103D6000BA01609570958095909503C060E070E011 +:103D7000CB01272D26952695237030E02230310582 +:103D800069F02330310589F0682979298A299B292E +:103D90002130310571F00E94222403C1682979295C +:103DA0008A299B290E943E24FCC00E942224C5012E +:103DB000B4010E940624F5C0112319F0872D8170EB +:103DC00001C08695882309F4ECC08C2D82958695D8 +:103DD0008770880F880F9C2D9F70892E912CA12CA5 +:103DE000B12C082E04C0880C991CAA1CBB1C0A9478 +:103DF000D2F7C4FE14C00FE010E020E030E0B901BB +:103E0000A80104C0440F551F661F771F8A95D2F77B +:103E1000CB01BA01609570958095909503C060E0E4 +:103E200070E0CB01272D269526952370422F50E078 +:103E30004230510569F04330510589F068297929EC +:103E40008A299B294130510571F00E94FC24A9C0A8 +:103E5000682979298A299B290E941825A2C00E94D5 +:103E6000FC24C501B4010E94E0249BC08C2D90E08D +:103E7000FC01E05EF109E531F10508F050C0E158C0 +:103E8000FF4F0C94FA300C2D0F70872D8F7111237A +:103E900021F00E947924802F07CF0E949A24802F3E +:103EA0000E94AF1D7EC0112341F0053008F079C09B +:103EB000872D8F710E94BF2474C0063008F071C036 +:103EC000F7CF112339F0872D8F710E94792469C0B3 +:103ED0001123C9F3872D8F710E949A2462C0112388 +:103EE00029F0872D8F710E9464245BC00E945A24A0 +:103EF00058C0112351F0172D1F71812F0E94792472 +:103F000063E0812F0E948D254CC081E00E949625A0 +:103F1000023008F446C082E00E94962542C0112378 +:103F200031F0002381F28C2D0E94911C3AC00023B5 +:103F300089F28C2D0E94591D34C0472D4F706C2D75 +:103F4000C7010E941C060E947E232BC0111129C0AC +:103F5000472D4F7050E042305105B9F04CF44115F7 +:103F6000510581F041305105E1F40E94912C19C0B6 +:103F70004330510569F04430510599F48C2D0E946D +:103F8000E32C0FC00E947A2C0CC00E94AD2C09C0FB +:103F90000E94C02C06C0472D4F706C2DC7010E9497 +:103FA0007C09DD20F9F00E94892580FD1BC0F70106 +:103FB00012820E9483250E947924C7010E94012059 +:103FC0000E9483250F90DF91CF911F910F91FF9059 +:103FD000EF90DF90CF90BF90AF909F908F907F90A9 +:103FE0000C949A240F90DF91CF911F910F91FF9025 +:103FF000EF90DF90CF90BF90AF909F908F907F9089 +:1040000008950F931F93CF93DF93EC0188819981DB +:104010002B813C81232BB9F09F3F11F48F3F99F006 +:10402000CE010E947B07882371F0688179818A81A3 +:104030000E947F258C010E9434250E94FB23B80139 +:10404000CE010E94B61DDF91CF911F910F9108956F +:104050000E9457260E9467260E942C260E948126D5 +:104060000E94472A0E94962980E090E00E947C1BD3 +:1040700080E090E00C94921B0E9447260C9428202C +:104080000E947425292F22952F7030E02C303105A5 +:104090004CF42A3031056CF42250310922303105BC +:1040A000A8F407C02C30310569F02F30310551F0EC +:1040B0000DC0803F69F018F4803E40F409C0843F91 +:1040C00029F406C093FB882780F9089580E00895BD +:1040D00081E00895CF93DF9300D000D01F92CDB739 +:1040E000DEB70F900F900F900F900F90DF91CF9150 +:1040F0000895CF93DF9300D000D000D0CDB7DEB7C6 +:1041000026960FB6F894DEBF0FBECDBFDF91CF91DC +:1041100008951F93CF93DF93C0910D0416E0809113 +:104120000E04C81799F0D0E01C9FF0011D9FF00D00 +:104130001124E15FFB4F4081518162817381848151 +:1041400095810E9479202196C770E9CFDF91CF91A8 +:104150001F91089540913F045091400460914104A3 +:104160007091420480914304909144040C9479200E +:104170008091440482958F7009F054C0809141046D +:10418000882309F44FC080910D04A0910E04609122 +:104190003F04709140044091420450914304B6E0C2 +:1041A0008A1709F43FC090E041155105C1F17F3FE6 +:1041B00011F46F3FA1F1B89FF001B99FF00D1124E8 +:1041C000E15FFB4F218172132AC02081621327C057 +:1041D0002281211124C0238134812417350710F452 +:1041E00021503109241B350B283C3105C0F42091A6 +:1041F00044042F7020612093440426E0289FF0019E +:10420000299FF00D1124EC5EFB4F80818F7080613F +:1042100080838FE394E00E9401200C948920019612 +:104220008770BECF0895CF92DF92EF92FF920F93E7 +:104230001F93CF93DF93CDB7DEB762970FB6F89495 +:10424000DEBF0FBECDBF8C0185E0F801DE011D96FB +:1042500001900D928A95E1F7D8014C9111965C91ED +:10426000119712966C9112971396CD90DC9014973B +:1042700030913F0470914004809142049091430436 +:10428000009709F46BC17F3F19F43F3F09F466C101 +:10429000E0904104EE2009F4C0C020914404C81607 +:1042A000D90628F0F601E81BF90BCF0104C0809570 +:1042B00090958C0D9D1DFF24F394883C910578F01A +:1042C000F12C207F09F0C6C07C2DD98AC88A898943 +:1042D0000E946A208FE394E00E940120B1C0822FE7 +:1042E000807F09F046C0751314C0341312C06111E9 +:1042F00010C02F702061209344040E94AA208FE3F5 +:1043000094E00E94012080914404D80115968C937A +:104310002EC0CD2819F15F3F11F44F3FF9F0F62E72 +:1043200061111CC080910D0420910E0436E08217AB +:1043300009F45AC090E0389FF001399FF00D112424 +:10434000E15FFB4F7181571306C07081471303C0B3 +:104350007281711103C001968770E9CFF62E662332 +:1043600009F418C180914404816080934404F12CC5 +:1043700011C1751308C0341306C0611104C08091C7 +:104380004404D801C3C04D875E878D859E856A8BA6 +:104390000E9440206A898823E1F16623D1F12091AF +:1043A0004404822F82958F7090E0029774F0809180 +:1043B0003F049091400498878F831986DB86CA86D4 +:1043C0002C87CE0107960E94012086E0F801AFE31A +:1043D000B4E001900D928A95E1F70E94B8200E9406 +:1043E000AA20FF24F394D6C04D875E878D859E85D5 +:1043F0000E947425292F22952F7030E0223031053C +:104400000CF0BCC09F7009F0B6C0805E883008F424 +:10441000C1C0C8010E940120E4CFC816D90608F423 +:1044200053C0F601E81BF90BCF01883C910508F455 +:1044300050C0F12C7C2DD98AC88A89890E946A20B3 +:10444000EFE3F4E086E0DF011D928A95E9F70E9430 +:10445000AA20A0C0751314C0341312C0611110C07B +:1044600080914404F8018583C8010E94012086E000 +:10447000EFE3F4E0DF011D928A95E9F7FE2C8AC094 +:104480004D875E878D859E856A8B0E9440206A8954 +:10449000882309F4BECF662309F4BBCF20914404DE +:1044A000822F82958F7090E002970CF48ECF8091CE +:1044B0003F04909140049A8389831B82DD82CC82E1 +:1044C0002E83CE0101967FCF809590958C0D9D1DFA +:1044D000ACCFF62E662309F49CCF75132EC034138F +:1044E0002CC02091440420FD1FC0822F82958F7024 +:1044F000D9F0D80115962C9315978F3049F08F5F1E +:10450000982F9295907F822F8F70892B15968C9380 +:10451000C8010E94012086E0F801AFE3B4E00190F9 +:104520000D928A95E1F793CF86E0F801AFE3B4E00E +:1045300001900D928A95E1F72DC04D875E878D859C +:104540009E850E944020811140CF8091440481606B +:1045500080934404C8010E9401201CC0662309F412 +:1045600058CF4D875E878D859E850E944020882389 +:1045700009F44FCF2ACF811148CF0CC02430310528 +:104580000CF047CF9F7009F440CFF8019581907FE0 +:1045900009F03BCF8F2D62960FB6F894DEBF0FBEA9 +:1045A000CDBFDF91CF911F910F91FF90EF90DF90E2 +:1045B000CF9008951F93CF93DF93CDB7DEB72C979D +:1045C0000FB6F894DEBF0FBECDBF4F835887698703 +:1045D0007A878B879C87CE0107960E9413218823B8 +:1045E00069F08F8198852A853B85232BF1F19F3FC8 +:1045F00009F063C08F3F09F060C037C086E0FE015C +:104600003796DE01119601900D928A95E1F76F8140 +:104610007885EA85FB85309741F17F3F11F46F3F44 +:1046200021F120910E0430E0C9010196877099278D +:1046300040910D0450E08417950709F447C0698341 +:104640007A83FD83EC8396E0929FD001939FB00D17 +:104650001124A15FBB4FFE01319601900D929A95F6 +:10466000E1F780930E040E94892016E080910D04EA +:1046700090910E048917C1F1189FC0011124815F28 +:104680009B4F0E941321882379F1E0910D041E9F16 +:10469000F0011124E15FFB4F408151816281738100 +:1046A000848195810E94792080910D0490E001968B +:1046B0008770992780930D04D9CF4F8158856985DC +:1046C0007A858B859C850E947920CFCF0E943C20E3 +:1046D00010920E0410920D04EFE3F4E086E0DF0187 +:1046E0001D928A95E9F7C1CF2C960FB6F894DEBFDC +:1046F0000FBECDBFDF91CF911F910895EF92FF9232 +:104700000F931F93CF93DF938C01009709F46CC034 +:10471000F12CEE24E394E8012196F801849184378A +:1047200040F4843008F051C0813081F0823019F1BA +:104730005BC0853709F444C0A8F19CE7980F903717 +:1047400008F052C08F770E94591D41C00E5F1F4F65 +:10475000FE01C49180E28C0F883048F4C7708E2D22 +:1047600001C0880FCA95EAF70E945A2614C08C2F00 +:104770000E94911C2DC00E5F1F4FFE01C49180E26C +:104780008C0F883058F4C7708E2D01C0880FCA95E1 +:10479000EAF70E9460260E9481261AC08C2F0E9490 +:1047A000591D16C00E5F1F4FFE01C491CC2381F02E +:1047B0008FE99FE00197F1F700C00000C150F6CFEC +:1047C0000E5F1F4FFE01F49003C00E94911C8E01EA +:1047D0008F2D882309F49FCFEFE9FFE03197F1F7A0 +:1047E00000C000008150F5CFDF91CF911F910F9154 +:1047F000FF90EF90089508956093490470934A04E0 +:1048000080934B0490934C040C9428200F931F9397 +:104810000091490410914A0420914B0430914C04BA +:10482000DC01CB01802B912BA22BB32B809349046D +:1048300090934A04A0934B04B0934C041F910F91A2 +:104840000C9428200F931F930091490410914A045F +:1048500020914B0430914C04DC01CB018023912347 +:10486000A223B3238093490490934A04A0934B045A +:10487000B0934C041F910F910C9428200F931F9319 +:104880000091490410914A0420914B0430914C044A +:10489000DC01CB0180279127A227B327809349040D +:1048A00090934A04A0934B04B0934C041F910F9132 +:1048B0000C9428201092450410924604109247044C +:1048C000109248040C94282041E050E060E070E031 +:1048D00004C0440F551F661F771F8A95D2F7409377 +:1048E00045045093460460934704709348040C9425 +:1048F000282041E050E060E070E004C0440F551F04 +:10490000661F771F8A95D2F78091450490914604DF +:10491000A0914704B0914804482B592B6A2B7B2B5C +:1049200040934504509346046093470470934804B1 +:104930000C94282041E050E060E070E004C0440F97 +:10494000551F661F771F8A95D2F740955095609541 +:1049500070958091450490914604A0914704B091D0 +:104960004804482359236A237B23409345045093EA +:10497000460460934704709348040C94282041E057 +:1049800050E060E070E004C0440F551F661F771FC1 +:104990008A95D2F78091450490914604A0914704EE +:1049A000B0914804482759276A277B27409345043C +:1049B0005093460460934704709348040C94282055 +:1049C0000F931F93009145041091460420914704D2 +:1049D00030914804DC01CB01802B912BA22BB32B0F +:1049E0008093450490934604A0934704B0934804F1 +:1049F0001F910F910C9428200F931F930091450451 +:104A0000109146042091470430914804DC01CB0109 +:104A100080239123A223B3238093450490934604DB +:104A2000A0934704B09348041F910F910C94282041 +:104A30000F931F9300914504109146042091470461 +:104A400030914804DC01CB0180279127A227B327AE +:104A50008093450490934604A0934704B093480480 +:104A60001F910F910C9428200895CF92DF92EF921E +:104A7000FF920F931F93CF93DF938C01C090490453 +:104A8000D0904A04E0904B04F0904C04809145048F +:104A900090914604A0914704B0914804C82AD92AAD +:104AA000EA2AFB2ACFE1D0E0D701C6010C2E04C0D0 +:104AB000B695A795979587950A94D2F780FF06C07B +:104AC000B8018C2F0E94010C019721F4219760F707 +:104AD00080E001C08C2FDF91CF911F910F91FF904B +:104AE000EF90DF90CF900895CF93DF93EC010E9479 +:104AF0003525BE010E94010CDF91CF910895CB01B5 +:104B00000E947425089580914D048595859585951D +:104B1000089580914D048770089598E0899F9001D1 +:104B20001124262B20934D040C94792420914D04BC +:104B30008095822380934D04982F977069F430E01C +:104B4000482F552747FD50952417350729F085959F +:104B5000859585950C949A24089590914D049770AD +:104B600081E009F480E0089590918502992321F075 +:104B700090918602911109C020918702309188029C +:104B8000F90132969FEF40E01FC0982F96959695B9 +:104B900096959F3050F5E0918702F0918802E90FD9 +:104BA000F11D877021E030E0A90102C0440F551FBC +:104BB0008A95E2F7CA019181892B818308959F3FED +:104BC00039F04F5F4E3041F051915813F8CF0DC07E +:104BD0005111F7CF942FF5CF9F3F39F0F901E90F2D +:104BE000F11D97FDFA9582830895089590918502AD +:104BF000992321F090918602911109C0209187029A +:104C000030918802F9013296205F3F4F1FC0982FE4 +:104C10009695969596959F30F0F4E0918702F091E5 +:104C20008802E90FF11D877021E030E0A90102C080 +:104C3000440F551F8A95E2F7CA0180959181892317 +:104C4000818308953196E217F30729F09081981334 +:104C5000F9CF1082F7CF089581E090E0E0918702CC +:104C6000F0918802E80FF91F1082019680319105BA +:104C7000A9F7089590916104892B809361040895A8 +:104C80008095909161048923809361040895109226 +:104C90006104089590916004892B809360040895C5 +:104CA0008095909160048923809360040895109208 +:104CB0006004089590915F04892B80935F040895A8 +:104CC000809590915F04892380935F0408951092EA +:104CD0005F04089580934E04089510924E04089541 +:104CE0008091870290918802FC0131969C01205F9F +:104CF0003F4F80E0919191118F5FE217F307D1F759 +:104D00000895E0918702F091880280916104808388 +:104D1000E0918702F0918802908180916004892B54 +:104D20008083E0918702F0918802908180915F04F6 +:104D3000892B808380914E04882361F0E091870263 +:104D4000F09188029081892B80830E9470268111C6 +:104D500010924E0480918702909188020C94661BF9 +:104D600020E0009739F0AC0141505109842395238C +:104D70002F5FF7CF822F089580918304843039F11B +:104D80001092630420E488E190E00FB6F894A895AF +:104D9000809360000FBE2093600080E00E94770542 +:104DA00080E00E94DB0C83B7817F846083BF83B780 +:104DB000816083BF7894889583B78E7F83BF88E1B5 +:104DC0000FB6F89480936000109260000FBE0895B3 +:104DD0000895089580E00E9477050E94E8260E94C9 +:104DE000360D0E94E9260E94BB0D91E0811101C0A1 +:104DF00090E0892F08950E943C2080E00E94770572 +:104E00000E94692C0E945A1B0C94DB0C1F920F927B +:104E10000FB60F9211248F939F93AF93BF938091FE +:104E20006304811113C08091640490916504A09182 +:104E30006604B09167044196A11DB11D809364047E +:104E400090936504A0936604B0936704BF91AF91FB +:104E50009F918F910F900FBE0F901F90189582E039 +:104E600084BD93E095BD9AEF97BD80936E00089541 +:104E70002FB7F8948091640490916504A091660422 +:104E8000B09167042FBF0895CF92DF92EF92FF9207 +:104E90000F931F932FB7F8944091640450916504C9 +:104EA00060916604709167042FBF6A017B01EE2454 +:104EB000FF248C0120E030E0C016D106E206F306A4 +:104EC00010F4415051099A01281B390BC9011F9157 +:104ED0000F91FF90EF90DF90CF9008951F920F9267 +:104EE0000FB60F9211248F939F93AF93BF9380912E +:104EF000640490916504A0916604B09167040196E2 +:104F0000A11DB11D8093640490936504A093660471 +:104F1000B0936704BF91AF919F918F910F900FBE97 +:104F20000F901F9018950E945718F8942FEF87EA5A +:104F300091E6215080409040E1F700C0000087E0FA +:104F400090EBDC0180938E0490938F04A0939004E7 +:104F5000B09391049CE088E10FB6F894A8958093F3 +:104F600060000FBE90936000FFCF0E94F427811174 +:104F700002C00E94D0270E94FF27809362040E94F3 +:104F80000C2880938C0487FB882780F98093860205 +:104F90000E940328682F70E080E090E00C94FC23CE +:104FA0006DEE7EEF80E090E00E94203160E082E0D4 +:104FB00090E00E940E3160E083E090E00E940E31AC +:104FC00060E084E090E00E940E3160E085E090E0D7 +:104FD0000E940E3160E086E090E00E940E316FEF9B +:104FE00087E090E00C940E3180E090E00E94083160 +:104FF00021E08D3E9E4F09F020E0822F089582E04F +:1050000090E00C94003183E090E00C940031682F24 +:1050100083E090E00C940E3184E090E00C94003139 +:10502000682F84E090E00C940E3186E090E00C94C0 +:105030000031682F86E090E00C940E3187E090E01C +:105040000C940031682F87E090E00C940E31809131 +:105050006A0480FF0BC060918C0285E0689FB001FC +:10506000112475956795759567952BC081FF09C0CB +:1050700060918C0285E0689FB00111247595679559 +:1050800020C082FF07C060918C0285E0689FB0015C +:10509000112417C090916B049923D1F060918B0279 +:1050A000961788F720918C0285E0289F90011124A3 +:1050B000929FA001939F500D112470E0CA010E949D +:1050C000E6306038710540F46115710539F002C0B1 +:1050D00065E070E0862F08958FE7089581E00895D8 +:1050E00080916A0480FF08C060918A0270E0759523 +:1050F00067957595679521C081FF06C060918A020A +:1051000070E07595679519C082FF04C060918A02AE +:1051100070E010C090916B049923C1F060918902F6 +:105120009617A0F780918A02899FC001112470E030 +:105130000E94E6306038710528F46115710521F090 +:10514000862F08958FE7089581E0089561E070E06B +:10515000F4CF803F21F40E942728819504C0813F2D +:1051600029F40E94272880936E040895823F21F439 +:105170000E942728819504C0833F29F40E94272894 +:1051800080936D040895893F19F40E94702805C02A +:105190008A3F31F40E947028819580936F040895AE +:1051A0008B3F21F40E947028819504C08C3F29F424 +:1051B0000E947028809370040895843F21F48091A8 +:1051C0006C04816017C0853F21F480916C0482607B +:1051D00011C0863F21F480916C0484600BC0873F2E +:1051E00021F480916C04886005C0883F31F480917F +:1051F0006C04806180936C0408958D3F21F480914C +:105200006A0481600BC08E3F21F480916A04826041 +:1052100005C08F3F29F480916A04846080936A04FA +:105220000895803F39F480916E0487FF6CC010921E +:105230006E0469C0813F29F480916E041816BCF396 +:1052400062C090916D04823F29F497FF5CC0109278 +:105250006D0459C0833F19F41916CCF354C0893F2B +:1052600041F480916F0418160CF04DC010926F0439 +:105270004AC08A3F29F480916F0487FF44C0F6CF6B +:105280008B3F39F48091700487FF3DC01092700409 +:105290003AC08C3F29F4809170041816BCF333C0D7 +:1052A000843F21F480916C048E7F17C0853F21F4E8 +:1052B00080916C048D7F11C0863F21F480916C0435 +:1052C0008B7F0BC0873F21F480916C04877F05C0E2 +:1052D000883F31F480916C048F7E80936C0413C0FE +:1052E0008D3F21F480916A048E7F0BC08E3F21F4A4 +:1052F00080916A048D7F05C08F3F29F480916A04F4 +:105300008B7F80936A0480916D0481110EC080911F +:105310006E0481110AC080916F04811106C08091D2 +:105320007004811102C010926B0408958CE694E021 +:105330000E94711B0E94382790936904809368042F +:1053400008951F93CF93DF9380916804909169042F +:105350000E944427AC0190916B04992321F0209185 +:105360008D0230E006C020918E028AE0289F9001D5 +:1053700011244217530708F486C080916D04C09130 +:105380006E04D0916F0410917004811107C0C11197 +:1053900076C0D11174C0111172C075C09F3F19F051 +:1053A0009F5F90936B04181624F40E942728809323 +:1053B0006D0480916D0487FF05C00E9427288195A8 +:1053C00080936D041C1624F40E94272880936E0499 +:1053D00080916E0487FF05C00E94272881958093E5 +:1053E0006E0460916D04662339F1C0916E04CC2384 +:1053F00019F1772767FD7095872F972F0E94082E48 +:1054000023E333E343E35FE30E94182F0E94D52D8B +:1054100060936D046C2F772767FD7095872F972F0A +:105420000E94082E23E333E343E35FE30E94182F37 +:105430000E94D52D60936E041D1624F40E947028DE +:1054400080936F0480916F0487FF05C00E947028CD +:10545000819580936F04111624F40E947028809324 +:1054600070048091700487FF05C00E9470288195A8 +:1054700080937004DF91CF911F910C9496299F3FE8 +:1054800009F08ECF96CFDF91CF911F910895ECE672 +:10549000F4E085E0DF011D928A95E9F710926B0434 +:1054A00010926A040895833081F128F4813059F014 +:1054B0008230D1F00895853009F449C0B8F18630C2 +:1054C00009F456C0089580918E02262F30E0280FEF +:1054D000311D2F3F310524F4680F60938E0208952B +:1054E0008FEF80938E02089580918D02262F30E0F9 +:1054F000280F311D2F3F310524F4680F60938D0272 +:1055000008958FEF80938D02089580918C02262F4D +:1055100030E0280F311D2F3F310524F4680F6093D0 +:105520008C0208958FEF80938C02089580918B02F6 +:10553000262F30E0280F311D2F3F310524F4680F4E +:1055400060938B0208958FEF80938B020895809172 +:105550008A02262F30E0280F311D2F3F310524F419 +:10556000680F60938A0208958FEF80938A020895EE +:1055700080918902262F30E0280F311D2F3F310501 +:1055800024F4680F6093890208958FEF8093890255 +:105590000895833011F128F4813049F0823091F080 +:1055A0000895853081F120F18630C1F10895809110 +:1055B0008E02681720F4861B80938E020895109245 +:1055C0008E02089580918D02681720F4861B8093C7 +:1055D0008D02089510928D02089580918C026817B3 +:1055E00020F4861B80938C02089510928C020895FB +:1055F00080918B02681720F4861B80938B0208959C +:1056000010928B02089580918A02681720F4861BFD +:1056100080938A02089510928A02089580918902E7 +:10562000681720F4861B80938902089510928902DE +:1056300008950F931F93873208F048C08E3108F009 +:105640008DC0803109F477C008F5873009F461C056 +:1056500068F4863009F09DC080916204817F8E7F5E +:105660008093620481E08093720494C08B3009F4CB +:1056700089C08E3009F08DC08091620482FB2227A0 +:1056800020F991E0922790FB82F95EC0863109F4FF +:1056900079C060F4813109F07CC00E943C20909177 +:1056A000860281E08927809386026CC0893109F4E3 +:1056B00069C08B3109F06DC08091620481FB2227A3 +:1056C00020F991E0922790FB81F93EC0883309F4DC +:1056D00059C050F4893209F457C0853309F454C0D5 +:1056E000873209F451C055C0833409F44DC028F401 +:1056F0008A3308F44EC0895332C0883409F049C057 +:105700000E943C200E94EB0D0E94F1060E9493270C +:1057100039C090916204892F8095817080FB90F947 +:1057200029F0966098609093620434C0997F977FC7 +:105730009093620427C08091620483FB222720F9A2 +:1057400091E0922790FB83F9809362049923D1F032 +:105750008091620481608093620414C08D5141E0A5 +:1057600050E060E070E08A019B0104C0000F111F4F +:10577000221F331F8A95D2F7C901B8010E94FC236A +:105780000E943C2081E006C061E070E080E090E093 +:10579000F5CF80E01F910F91089580E0089580E09B +:1057A0000895CF93C82F80917204813069F018F06A +:1057B0008230C9F184C0E0918702F0918802808133 +:1057C000823209F07EC007C0E0918702F091880222 +:1057D0008081823261F48C2F0E94CD2B811104C014 +:1057E0008C2F0E94192B1DC081E090E01AC08C2FD5 +:1057F0000E94CF2B811114C0C43179F048F4CB3012 +:1058000079F0C03109F061C082E08093720408C071 +:10581000C93219F0C83321F058C01092720455C033 +:1058200081E0817054C0C93291F120F5C43179F121 +:10583000B0F4C73009F047C08EE180938E0282E356 +:1058400080938D028AE080938C0284E180938B02A6 +:1058500088E080938A0288E28093890234C0CE5126 +:10586000C63088F5EC2FF0E0EA5DFC4F8081809334 +:10587000710429C0CE34E9F020F4CB3421F56AE07C +:1058800013C0C13579F0C235F1F461E00DC08091EB +:105890007104882319F01092710415C081E080937F +:1058A000720415C061E006C0809171040E94532A01 +:1058B0000AC06AE0809171040E94C92A04C0109253 +:1058C000720480E004C081E002C080E0AACFCF91E2 +:1058D00008950E94F427811102C00E94D0270E94DF +:1058E000152880938D0480FF02C0869501C080E05A +:1058F0000C94770580918D04982F9695292F30E090 +:10590000233031054CF49F5F990F8170892B8160A2 +:1059100080938D040E94192880918D0486950C94A3 +:10592000770580918D04982F969591F09158990F55 +:105930008170892B80938D048E7F91E009F490E033 +:1059400080918D0490FB80F980938D040E9419282A +:1059500080918D0486950C94770580918D04982F05 +:10596000909590FB80F980938D040E941928809176 +:105970008D0480FF02C0869501C080E00C947705FD +:1059800090918D04892F86958F5F8F7791708430E9 +:1059900028F4880F892B80938D0402C090938D0486 +:1059A00080918D048E7F91E009F490E080918D04C8 +:1059B00090FB80F980938D040E94192880918D04BA +:1059C00086950C94770520918D04922F96958927C2 +:1059D000982F990F822F8170892B80938D048E7F51 +:1059E00091E009F490E080918D0490FB80F9809320 +:1059F0008D040E94192880918D0486950C9477055A +:105A000080918D04869508955058BB27AA270ED003 +:105A1000D1C1C2D130F0C7D120F031F49F3F11F491 +:105A20001EF4B7C10EF4E095E7FB9FC1E92FD3D177 +:105A300080F3BA17620773078407950718F071F4AB +:105A40009EF5EBC10EF4E0950B2EBA2FA02D0B01A5 +:105A5000B90190010C01CA01A0011124FF27591BB3 +:105A600099F0593F50F4503E68F11A16F040A22FB9 +:105A7000232F342F4427585FF3CF4695379527952A +:105A8000A795F0405395C9F77EF41F16BA0B620B29 +:105A9000730B840BBAF09150A1F0FF0FBB1F661F70 +:105AA000771F881FC2F70EC0BA0F621F731F841FB3 +:105AB00048F4879577956795B795F7959E3F08F0D9 +:105AC000B3CF9395880F08F09927EE0F9795879598 +:105AD000089527D108F481E008950CD06BC163D1FB +:105AE00040F05AD130F021F45F3F19F03EC151111E +:105AF00095C14FC170D198F39923C9F35523B1F3E0 +:105B0000951B550BBB27AA2762177307840738F02C +:105B10009F5F5F4F220F331F441FAA1FA9F333D08B +:105B20000E2E3AF0E0E830D091505040E695001C3F +:105B3000CAF729D0FE2F27D0660F771F881FBB1FFB +:105B4000261737074807AB07B0E809F0BB0B802DD5 +:105B5000BF01FF2793585F4F2AF09E3F510568F021 +:105B600004C15CC15F3FECF3983EDCF3869577950A +:105B70006795B795F7959F5FC9F7880F911D969523 +:105B8000879597F90895E1E0660F771F881FBB1F7F +:105B9000621773078407BA0720F0621B730B840B2C +:105BA000BA0BEE1F88F7E095089504D06894B11100 +:105BB00035C1089518D188F09F5790F0B92F9927D3 +:105BC000B751A0F0D1F0660F771F881F991F1AF008 +:105BD000BA95C9F712C0B13081F01FD1B1E0089574 +:105BE0001CC1672F782F8827B85F39F0B93FCCF3F5 +:105BF000869577956795B395D9F73EF490958095FE +:105C0000709561957F4F8F4F9F4F0895E89409C01D +:105C100097FB3EF490958095709561957F4F8F4FDF +:105C20009F4F9923A9F0F92F96E9BB279395F695F5 +:105C3000879577956795B795F111F8CFFAF4BB0F73 +:105C400011F460FF1BC06F5F7F4F8F4F9F4F16C0D7 +:105C5000882311F096E911C0772321F09EE8872F61 +:105C6000762F05C0662371F096E8862F70E060E01D +:105C70002AF09A95660F771F881FDAF7880F969596 +:105C8000879597F9089588D018F011F08CD038F4E2 +:105C900080C0C4C0E92F9FD0B0F35523C9F3E7FB00 +:105CA0006217730784079507A8F199F3E92FFF2777 +:105CB00088232AF03197660F771F881FDAF7952F10 +:105CC0005527442332F091505040220F331F441F78 +:105CD000D2F7BB27E91BF50B621B730B840BB109D1 +:105CE000C1F222F4620F731F841FB11D31972AF095 +:105CF000660F771F881FBB1FEFCF915050405AF09F +:105D000041F0882332F0660F771F881F9150504072 +:105D1000C1F7939530C08695779567959F5FD9F7C2 +:105D2000F8CF990F0008550FAA0BE0E8FEEF161602 +:105D30001706E807F907C0F012161306E407F5077F +:105D400098F0621B730B840B950B39F40A2661F0F3 +:105D5000232B242B252B21F408950A2609F4A14096 +:105D6000A6958FEF811D811D089597F99F6780E8A3 +:105D700070E060E008959F3F31F0915020F48795E6 +:105D800077956795B795880F911D9695879597F9A3 +:105D900008959FEF80EC089500240A9416161706C4 +:105DA00018060906089500240A941216130614060C +:105DB00005060895092E0394000C11F4882352F06F +:105DC000BB0F40F4BF2B11F460FF04C06F5F7F4F27 +:105DD0008F4F9F4F089557FD9058440F551F59F00E +:105DE0005F3F71F04795880F97FB991F61F09F3FC8 +:105DF00079F087950895121613061406551FF2CFF1 +:105E00004695F1DF08C0161617061806991FF1CF40 +:105E100086957105610508940895E894BB27662767 +:105E20007727CB0197F908957CDF08F48FEF089569 +:105E30000BD0C0CFB1DF28F0B6DF18F0952309F002 +:105E400094CFA7CF1124EACFC6DFA0F3959FD1F35B +:105E5000950F50E0551F629FF001729FBB27F00D18 +:105E6000B11D639FAA27F00DB11DAA1F649F66276D +:105E7000B00DA11D661F829F2227B00DA11D621FBC +:105E8000739FB00DA11D621F839FA00D611D221F76 +:105E9000749F3327A00D611D231F849F600D211D5A +:105EA000822F762F6A2F11249F5750408AF0E1F0FD +:105EB00088234AF0EE0FFF1FBB1F661F771F881F46 +:105EC00091505040A9F79E3F510570F04ECFA6CF9C +:105ED0005F3FECF3983EDCF3869577956795B79531 +:105EE000F795E7959F5FC1F7FE2B880F911D96955B +:105EF000879597F90895FA01EE0FFF1F3096210557 +:105F0000310599F16115710561F48038BFE39B0794 +:105F100049F168949038810561F08038BFEF9B07A4 +:105F200041F0992342F5FF3FE1053105210511F1CB +:105F3000E8940894E795D901AA2329F4AB2FBE2F42 +:105F4000F85FD0F310C0FF5F70F4A695E0F7F73963 +:105F500050F019F0FF3A38F49F779F930CD00F90D0 +:105F600007FC905808953EF014CF60E070E080E8A0 +:105F70009FE308954FE79F775F934F933F932F934E +:105F80009ED02F913F914F915F9152DF05C019F440 +:105F90000EF0EBCE42CFFDCE26DFC8F39638C0F729 +:105FA00007F80F92E8942BE33AEA48EB5FE74EDFFD +:105FB0000F920F920F924DB75EB70F92C0D0E8E2EA +:105FC000F1E016D04F915F91EF91FF91E595EE1FB3 +:105FD000FF1F49F0FE57E0684427EE0F441FFA9573 +:105FE000E1F74195550B32D00F9007FE26C008957A +:105FF000DF93CF931F930F93FF92EF92DF927B017A +:106000008C01689405C0DA2EEF011EDFFE01E894D2 +:10601000A5912591359145915591AEF3EF0106DD9E +:10602000FE019701A801DA9479F7DF90EF90FF90D5 +:106030000F911F91CF91DF9108959B01AC0160E01A +:1060400070E080E89FE349CD90CE95CECCDEE8F3BA +:106050009923D9F3940F511DBBF39150504094F004 +:1060600059F0882332F0660F771F881F91505040F7 +:10607000C1F79E3F510544F7880F911D969587956E +:1060800097F908955F3FACF0983E9CF0BB2786954A +:1060900077956795B79508F4B1609395C1F7BB0FF5 +:1060A00058F711F460FFE8CF6F5F7F4F8F4F9F4F1E +:1060B000E3CFB4CE0EF05FCE6CCE689456CE93DEB6 +:1060C000C8F39923D1F3C6F3DF93CF931F930F93B4 +:1060D000FF92C92FDD2788232AF02197660F771FAB +:1060E000881FDAF720E030E040E85FEB9FE3883973 +:1060F00020F0803E30F021968F7787DCE0E5F1E0FC +:1061000003C083DCEDE7F1E073DF8B01BE01EC013E +:10611000FB2E6F5771097595771F880B990B78DDEA +:1061200028E132E741E35FE38FDEAF2D9801AE0156 +:10613000FF900F911F91CF91DF9178DC3BCEFA0158 +:10614000DC01AA0FBB1F9B01AC01BF5728F422271B +:106150003327442750781FC0B75188F4AB2F002451 +:10616000469537952795011CA395D2F3002069F039 +:10617000220F331F441FB395DAF30DD045CC6130A5 +:106180007105A0E88A07B94630F49B01AC01662787 +:10619000772788279078309621F0208331834283B7 +:1061A00053830895AA1BBB1B51E107C0AA1FBB1F45 +:1061B000A617B70710F0A61BB70B881F991F5A9593 +:1061C000A9F780959095BC01CD01089597FB072E06 +:1061D00016F4009407D077FD09D00E94D23007FC56 +:1061E00005D03EF4909581959F4F089570956195E7 +:1061F0007F4F0895EE0FFF1F0590F491E02D099455 +:10620000F999FECF92BD81BDF89A992780B508957E +:10621000A8E1B0E042E050E00C942831262FF99933 +:10622000FECF92BD81BDF89A019700B4021639F0F5 +:106230001FBA20BD0FB6F894FA9AF99A0FBE0895C6 +:106240000196272F0E940F310C940E31DC01CB01F7 +:10625000FC01F999FECF06C0F2BDE1BDF89A319676 +:1062600000B40D9241505040B8F70895F894FFCF14 +:1062700052D02445000000410000DC4400000041F1 +:1062800052D0A4440000404100005C4400000041A2 +:1062900048F17644000000415C978A4400000041C8 +:1062A0001FD592440000004152D0A4440000004198 +:1062B0005CFFB844000000410AA7CF440000004141 +:1062C0000000DC44000000410AA7CF440000004168 +:1062D0000000DC440000004100000000000080409D +:1062E00000005C45000040410000000000008040CC +:1062F00052D02445000040410AA7CF44000000418D +:106300000000DC440000004100000000000080406C +:1063100052D02445000040410000000000008040B1 +:1063200000005C45000040410AA7CF440000004146 +:106330000000DC440000004100000000000080403C +:1063400052D0244500004041000000000000804081 +:106350000AA74F45000040410AA7CF440000004172 +:106360000000DC440000004100000000000080400C +:1063700052D0244500000041000000000000804091 +:106380005CFF384500000041000000000000804034 +:1063900052D02445000000410AA7CF44000000412C +:1063A0000000DC44000000410000000000008040CC +:1063B00052D024450000804152D024450000404185 +:1063C0005C970A450000004152D0A44400000041FF +:1063D0000000DC44000000415C970A450000A04139 +:1063E000640007000CFF0000003F646214F014CD4D +:1063F000149914651401014F042808140A321E0070 +:1064000002040507090B0C0E1011131517181A1C9E +:106410001D1F2123242628292B2D2F3032343537D8 +:10642000393B1F0F03764F5F6F7F496943790959E5 +:1064300053633149803F5D8B803FF8BF803FCAE1A5 +:10644000803F73ED803FCAE1803FF8BF803F5D8BA6 +:10645000803F3149803F0000803FF16D7F3F75EA0A +:106460007E3F4C827E3F833F7E3F84287E3F833F3A +:106470007E3F4C827E3F75EA7E3FF16D7F3F00009C +:10648000803F404D3639FA09AD0977093E09D108F8 +:10649000EA0803091C0901020304050607080900AC +:00000001FF diff --git a/keyboard/planck/keymaps/dzobert/compiled.hex b/keyboard/planck/keymaps/dzobert/compiled.hex new file mode 100644 index 0000000000..cb3972bc01 --- /dev/null +++ b/keyboard/planck/keymaps/dzobert/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C290014001A0008001500FC +:1001E00017001C0018000C00120013002B00E00088 +:1001F00004001600070009000A000B000D000E00A5 +:100200000F0033002A00E2001D001B000600190049 +:100210000500110010003600370038002800C40027 +:10022000E500E300E10002202C002C00012050003A +:10023000510052004F002B0014001A000900130057 +:100240000A000D000F0018001C0033002B002900CD +:10025000040015001600170007000B00110008002D +:100260000C0012002A00E2001D001B00060019000D +:1002700005000E0010003600370038002800C300CB +:10028000E500E300E10002202C002C0001205000DA +:10029000510052004F003A003B003C003D003E0040 +:1002A0003F0040004100420043004400450001007F +:1002B0001E001F0020002100220023002400250032 +:1002C00026004C000000010035002D002E003400F7 +:1002D00034022F0230022F003000310001000100F3 +:1002E00001000100010001000100010001204A009D +:1002F0004B004E004D00660046004700480053008A +:1003000074007600650024002500260054000100DA +:10031000AA00A900A80039009B007A0079002100FA +:10032000220023005500010049007B007C007D0075 +:100330003100260027001E001F002000560001008B +:10034000010001000100022001000100010027005E +:10035000630058005700280354006800650020001F +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/experimental/compiled.hex b/keyboard/planck/keymaps/experimental/compiled.hex new file mode 100644 index 0000000000..76984a07cc --- /dev/null +++ b/keyboard/planck/keymaps/experimental/compiled.hex @@ -0,0 +1,1645 @@ +:100000000C948F050C94D3050C94D3050C94D30554 +:100010000C94D3050C94D3050C94D3050C94D30500 +:100020000C94D3050C94D3050C94F9190C94CB1AA9 +:100030000C942D280C94D3050C94D3050C94D30563 +:100040000C94D3050C9486060C94D3050C94D3051C +:100050000C94D3050C9495280C94D3050C94D305DB +:100060000C94D3050C94D3050C94D3050C94D305B0 +:100070000C94D3050C94D3050C94D3050C94D305A0 +:100080000C94DB0F0C94D3050C94D3050C94D3057E +:100090000C94D3050C94D3050C94D3050C94D30580 +:1000A0000C94D3050C94D3050C94D305EE060007ED +:1000B000140726072E074407920792079207920714 +:1000C0009207920752078107381B5A1B481C5A1B7C +:1000D000481C9F1BC21B481C171C2A1C141F141FE2 +:1000E000431F431F821FA21FF820F820AD1FF820D6 +:1000F0005D205D20C420CD20F820F2206A206A20F7 +:100100006A206A206A206A206A206A206A206A209F +:100110006A206A206A206A206A206A207A20882061 +:100120008F209620A02007634236B79BD8A71A39A4 +:10013000685618AEBAAB558C1D3CB7CC5763BD6D35 +:10014000EDFD753EF6177231BF000000803F0800DC +:100150000000BE922449123EABAAAA2ABECDCCCC46 +:100160004C3E00000080BEABAAAAAA3E00000000E0 +:10017000BF000000803F0000000000084178D3BBB2 +:100180004387D1133D190E3CC3BD4282AD2B3E685F +:10019000EC8276BED98FE1A93E4C80EFFFBE01C450 +:1001A000FF7F3F0000000000000000000000000092 +:1001B000000000010204060A0F17202C3A4A5D7164 +:1001C000879DB3C7DAE9F5FCFFFCF5E9DAC7B39D13 +:1001D00087715D4A3A2C20170F0A060402010000BD +:1001E00000000000000000002B0014001A000800AE +:1001F000150017001C0018000C00120013002A0044 +:10020000290004001600070009000A000B000D0079 +:100210000E000F0033003400E1001D001B0006003B +:1002200019000500110010003600370038002800C2 +:100230000530E000E200E30003302C002C00043025 +:100240005000510052004F002B0014001A0009000A +:1002500013000A000D000F0018001C0033002A00D4 +:100260002900040015001600170007000B001100FC +:1002700008000C0012003400E1001D001B00060005 +:10028000190005000E001000360037003800280065 +:100290001450E000E200E30003302C002C00043096 +:1002A0005000510052004F002B0034003600370040 +:1002B00013001C0009000A00060015000F002A00A8 +:1002C000290004001200080018000C0007000B00B1 +:1002D0001700110016003800E100330014000D0073 +:1002E0000E001B00050010001A0019001D00280058 +:1002F0000530E000E200E30003302C002C00043065 +:100300005000510052004F0035021E021F02200211 +:1003100021022202230224022502260227022A00A9 +:100320004C003A003B003C003D003E003F002D02E7 +:100330002E022F0230023102010040004100420033 +:100340004300440045003202640201000100010044 +:100350000100010001000100010001000100010095 +:10036000AB00AA00A900AE0035001E001F0020004F +:1003700021002200230024002500260027002A0057 +:100380004C003A003B003C003D003E003F002D0089 +:100390002E002F00300031000100400041004200DB +:1003A000430044004500320032000100010001001A +:1003B0000100010001000100010001000100010035 +:1003C000AB00AA00A900AE001E001E001E001E0009 +:1003D0001E001E001E001E001E001E001E001E002D +:1003E000000014001A000800150017001C00180077 +:1003F0000C00120013002F0000000400160007007C +:1004000009000A000B000D000E000F00330034003D +:100410000D3000000000060019000000000011006F +:1004200010000000000000000000000000000000BC +: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 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E00000000000000000000100005001000100B6 +:1007F00001000100010001000100010001004C00A6 +:10080000010001000100205021501350125000300F +:10081000013002300C3001000100275026502350D7 +:10082000245028502950010001000100010001005E +:1008300001000100010001000100010001000100B0 +:1008400001000100010001000000000000000000A4 +:100850002A2B28000000000000000000000000001B +:1008600000000029000000002C1E34202122243426 +:100870002627252E362D3738271E1F2021222324F8 +:1008800025263333362E37381F0405060708090A94 +:100890000B0C0D0E0F101112131415161718191A30 +:1008A0001B1C1D2F3130232D350405060708090AAE +:1008B0000B0C0D0E0F101112131415161718191A10 +:1008C0001B1C1D2F3130354C0000000000000000C3 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000101010101010002 +:1008F00001010101000000000000000000000000F4 +:1009000000000100010001010101010101010101DB +:1009100001010101010101010101010101010101C7 +:1009200001010100000001010000000000000000C2 +:1009300000000000000000000000000000000000B7 +:100940000000000101010100280354006800650057 +:10095000200050006C0061006E0063006B002000FE +:100960004B006500790062006F0061007200640056 +:1009700000002C034F007200740068006F006C00D0 +:1009800069006E0065006100720020004B00650088 +:10099000790062006F006100720064007300000063 +:1009A0000403090409026D00040100A0FA0904000F +:1009B000000103010100092111010001223F00078C +:1009C00005810308000A090401000103010200096E +:1009D0002111010001224D000705820308000A09C8 +:1009E0000402000103000000092111010001223668 +:1009F000000705830308000A09040300010300003F +:100A000000092111010001223900070584031000AB +:100A1000011201100100000008EDFE6060010001FC +:100A200002000105010906A101050719E029E715E2 +:100A30000025019508750181020508190129059510 +:100A400005750191029501750391010507190029AA +:100A50007715002501957875018102C0050109808F +:100A6000A101850216010026B7001A01002AB7006D +:100A7000751095018100C0050C0901A101850316BF +:100A80000100269C021A01002A9C02751095018122 +:100A900000C005010902A1010901A1000509190110 +:100AA000290515002501950575018102950175033C +:100AB00081010501093009311581257F95027508ED +:100AC000810609381581257F950175088106050C79 +:100AD0000A38021581257F950175088106C0C00579 +:100AE000010906A101050719E029E715002501956F +:100AF0000875018102950175088101050819012910 +:100B00000595057501910295017503910105071978 +:100B10000029FF150025FF950675088100C01124E6 +:100B20001FBECFEFDAE0DEBFCDBF04B603FE24C0A8 +:100B300080915E0490915F04A0916004B091610483 +:100B40008730904BA740B04BB9F410925E041092DE +:100B50005F04109260041092610414BE84B7877F12 +:100B600084BF88E10FB6F894809360001092600013 +:100B70000FBEE0E0F8E3099513E0A0E0B1E0EEEB92 +:100B8000F4E602C005900D92A030B107D9F714E049 +:100B9000A0E0B3E001C01D92AE35B107E1F70E94BD +:100BA0003F170C945D320C94000081E00895089585 +:100BB0000C94AF070C94D5050C94D7050E94272EF2 +:100BC000811105C010920203109201030DC081E251 +:100BD00090E00090030302C0880F991F0A94E2F787 +:100BE000909302038093010382E08093000380913D +:100BF0006F00826080936F00089590916F0081E094 +:100C0000911101C080E008950E94272E23E030E07A +:100C1000281B3109220F209304030895282F2F98B1 +:100C200080918000211108C0877F809380001092FE +:100C30008D0010928C001BC0886080938000233050 +:100C400019F48FEF9FEF0FC083E090E0821B9109B2 +:100C5000880F991F2FEF3FEFA90102C056954795C6 +:100C60008A95E2F7CA0190938D0080938C000C94D2 +:100C70000406CF93C82F0E94FD05409103038823EB +:100C800029F090916F009D7F90936F00C0930303B4 +:100C90008823D1F0209101033091020302C03695E0 +:100CA00027954A95E2F72F733327C90102C0880FB1 +:100CB000991FCA95E2F790930203809301038091F4 +:100CC0006F00826080936F00CF9108950E940406A8 +:100CD00084E080930303109200030895279A2F98CD +:100CE0008FEF9FEF90938700809386008AE0809338 +:100CF000800089E1809381000E94902D0C9466060B +:100D00000E946E066E9A769A0C9497071F920F9225 +:100D10000FB60F9211242F933F938F939F93EF93CE +:100D2000FF93E0910103F0910203CF0101969093AC +:100D30000203809301030090030302C0F695E79538 +:100D40000A94E2F7EF7380910003823019F4E032E5 +:100D500051F404C0813039F4EF3329F480916F00ED +:100D60008D7F80936F00F0E0E855FE4FE49121E025 +:100D700031E0E29FC001E39F900D11240090040335 +:100D800002C0969587950A94E2F790938D00809320 +:100D90008C00FF91EF919F918F913F912F910F9038 +:100DA0000FBE0F901F901895CF93DF93EC010E9418 +:100DB0002E29BE0180E090E0DF91CF910C94232595 +:100DC0000F931F93462F50E04E30510508F0AAC0F4 +:100DD000DC01FA01EA5AFF4F0C94213212968C91F1 +:100DE000882309F49FC000E010E0980140E064E02F +:100DF00070E080ED91E00E94591381E090E011C015 +:100E000012968C91882309F48DC000E010E09801BF +:100E100040E066E070E080E691E00E94591382E0D5 +:100E200090E00E94D4067EC012968C91882309F42B +:100E300079C000E010E0980140E068E070E080E9EF +:100E400091E00E94591384E090E0EBCF12968C91D0 +:100E5000882311F083E007C083E013C012968C91C1 +:100E6000882371F084E00E94A02582E00E94390668 +:100E70000E94DE0540E164E083E00E94BE0D52C0A6 +:100E800084E00E94C125F6CF12968C91882331F020 +:100E900085EE0E94B81D0E94E72D44C085EE0E9499 +:100EA000801E40C012968C918823E1F10E940E0FA3 +:100EB00000E010E0980140E066E070E080E391E03F +:100EC0000E94591384E00E94C12583E00E94C1253D +:100ED00080E10E94C12585E00E94A0250E941B2977 +:100EE000811102C00E94F7280E94332990E090935C +:100EF0005D0480935C04806880935C040E943729C1 +:100F000011C012968C91882369F000E010E09801DE +:100F100040E066E070E080E091E00E94591385E0D7 +:100F20000E94C12580E090E01F910F9108950F93DA +:100F30001F932FEF89EF90E0215080409040E1F720 +:100F400000C0000000E010E0980140E065E070E0C3 +:100F500080EF91E00E9459131F910F9108958091A5 +:100F60001003882309F45AC080910E0390910F0357 +:100F70000E946B288D3291400CF450C010921003E7 +:100F80000E9414088091080390910903099781F445 +:100F900080910A0390910B03892B51F480910C03EB +:100FA00090910D03892B21F48AE592E00E941508A7 +:100FB0008091080390910903049791F480910A03AA +:100FC00090910B03469761F480910C0390910D036F +:100FD000892B31F48BE00E94B81D8BE00E94801EAB +:100FE00080910803909109030497C1F480910A034A +:100FF00090910B03469791F480910C0390910D030F +:10100000079761F483EE0E94B81D86E10E94B81D27 +:1010100086E10E94801E83EE0C94801E089581E07C +:1010200008950C940F08089508950F931F93CF937C +:101030008C01F80124912223F9F030E0F901E85BFA +:10104000F74FC491F901E853F74F2491222359F047 +:1010500081EE0E94B81D8C2F0E94B81D8C2F0E941B +:10106000801E81EE04C08C2F0E94B81D8C2F0E9420 +:10107000801E0F5F1F4FDDCFCF911F910F910895FD +:101080000C94800680915503882309F448C0809110 +:10109000110390911203009779F40E945F289093B6 +:1010A0001203809311038091130390E0009771F471 +:1010B0008091140390E00AC00E946B2820911802CE +:1010C000309119022817390740F329C00197880F7A +:1010D000991F880F991FFC01EB5EFC4F60817181A5 +:1010E000828193810E94410FE091130384E0E89F85 +:1010F000F0011124EB5EFC4F60817181828193814C +:101100004FE050E00E94F9128091130390E00196A5 +:101110006091140370E00E940D32809313030C94CD +:10112000D805109257030C940E0F0895089581E08E +:10113000809357030C949608089508958F929F9278 +:10114000AF92BF92EF92FF920F931F93CF93DF93D3 +:10115000CDB7DEB7A3970FB6F894DEBF0FBECDBFF5 +:101160007C01FC0100811181C8010E945C26B8014C +:101170000E94A00A8C01B7010E941108882309F47B +:10118000CCC10032F0E51F0741F4F70182818823CA +:1011900009F458C00E94F013C0C10132F0E51F07E6 +:1011A00041F4F7018281882309F44CC00E94F913AD +:1011B000B4C10232F0E51F0751F4F70182818823A0 +:1011C00009F440C00E94EC138111F0CFE3CF033249 +:1011D000F0E51F0739F4F7018281882399F10E9415 +:1011E00097089BC10432F0E51F0739F4F7018281AB +:1011F000882341F10E94910890C10532F0E51F0754 +:1012000049F4F70182818823E9F080915703811125 +:10121000F1CFE5CF0632F0E51F0739F4F7018281FF +:10122000882381F00E9400140AC00732F0E51F07EE +:1012300049F4F7018281882329F00E940B140E944F +:101240009D086BC180915703811105C0F701828110 +:101250008111CFC018C1003E110579F4F7018281D8 +:10126000882309F44DC00E940E0F81E0809356033D +:10127000109255031092140350C1023E110559F407 +:10128000F70182818823E1F10E940E0F109256032C +:101290001092550342C1033E110591F4F70182817A +:1012A000882371F10E940E0F1092560381E0809303 +:1012B00055031092130310921203109211032DC1C3 +:1012C0000235110559F4F7018281882309F425C1FB +:1012D00080911802909119020A970DC001351105ED +:1012E00079F4F7018281882309F417C180911802EB +:1012F000909119020A9690931902809318020DC1D9 +:1013000040911C0283E2E7E3F2E0DE0111960190D6 +:101310000D928A95E1F7F701808121E030E02C0FF2 +:101320003D1F280F311DC90120911A0230911B0267 +:10133000FC01E20FF31F6081772767FD7095640F52 +:10134000711D882777FD8095982F0E942F2F20E010 +:1013500030E040E451E40E94942E4B015C01F7011F +:10136000218184E090E0821B9109BC01882777FDF0 +:101370008095982F0E942F2F9B01AC01C501B401CD +:101380000E942C2E9B01AC0160E070E080E090E4B4 +:101390000E94A23020E030E04CED50E40E943F304B +:1013A0004B015C01F70182818823D1F04FE050E0CE +:1013B000C501B4010E94F912809156038823A1F05F +:1013C0008091140324E0829FF0011124EB5EFC4F16 +:1013D00080829182A282B3828F5F8093140304C0C3 +:1013E000C501B4010E94410F0F3F110508F02ECF37 +:1013F00094C08091100381111FC0043130E51307A0 +:1014000009F051C00E94130881E0809310030E94EC +:101410005F2890930F0380930E031092070310929E +:1014200009031092080310920B0310920A03109202 +:101430000D0310920C0371C080910E0390910F0365 +:101440000E946B28883C910570F480910703E82F77 +:10145000F0E0EE0FFF1FE85FFC4F118300838F5F0A +:10146000809307035AC0043880E5180721F0053837 +:10147000104501F13AC0F7018281882341F01092B2 +:10148000050382E01EC0043830E5130759F580914A +:101490000503811106C086E20E94B81D86E20E9403 +:1014A000801E82E01CC00438F0E51F0741F30538B8 +:1014B0001045D9F4F7018281882331F01092060398 +:1014C00080E20E94CF1E29C080910603811106C0D0 +:1014D00087E20E94B81D87E20E94801E80E20E947F +:1014E000D61E1BC00538104529F381E08093050303 +:1014F00080930603C701A3960FB6F894DEBF0FBE14 +:10150000CDBFDF91CF911F910F91FF90EF90BF90D2 +:10151000AF909F908F900C94DA0580E0A3960FB661 +:10152000F894DEBF0FBECDBFDF91CF911F910F9119 +:10153000FF90EF90BF90AF909F908F900895089587 +:101540009CE0799FF001112490E3899FE00DF11D4B +:101550001124E60FF11DEE0FFF1FE851FE4F85919C +:1015600094910895880F991FFC01E859FF4F8591C8 +:1015700094910895880F991FFC01E851FE4F8591C1 +:10158000949108950F931F93CF93DF93EC018115EE +:1015900021E39207A0F5C11580E3D80708F0D7C072 +:1015A000C83ED105D8F4C03ED10508F007C2C83AFC +:1015B000D10578F4C53AD10508F06AC0C130D1052B +:1015C00009F463C008F4F7C1C430D10508F0F6C1CE +:1015D000F2C1CB3BD10508F466C0EDC1C11590E264 +:1015E000D90708F0AFC0C11521E0D20708F0E6C165 +:1015F000C03FD10508F4DFC18E0110651FC2C0389D +:1016000080E5D80700F5C03790E5D90708F0A3C0FA +:10161000C11520E5D20709F4ACC050F4CE019054B6 +:1016200080319F4008F0C7C1DF708E01106A06C28A +:10163000C13080E5D80709F4AEC0C43190E5D907C0 +:1016400008F4AFC0B8C1C33820E5D20709F48EC092 +:1016500050F4C13890E5D90709F482C008F083C07E +:1016600000E011EDEBC1C03181E5D80708F4A3C15A +:10167000C11597E5D90708F436C1CE0190578115F9 +:10168000904108F098C1DF7093C101E010E0D6C12D +:10169000C53AD10509F494C1C63AD10509F093C100 +:1016A00002E810E4CBC1C83AD10509F48FC1C93AA8 +:1016B000D10509F48EC1CA3AD10509F48DC1CB3ADE +:1016C000D10509F48CC1CC3AD10509F48BC1CD3ACE +:1016D000D10509F48AC1C03BD10509F489C1CE3ACC +:1016E000D10509F488C1CF3AD10509F487C1C13BBE +:1016F000D10509F486C1C23BD10509F485C1C33BBC +:10170000D10509F484C1C43BD10509F483C1C53BAB +:10171000D10509F482C1C63BD10509F481C1C73B9B +:10172000D10509F480C1C83BD10509F47FC1C93B8B +:10173000D10509F47EC1CA3BD10509F47DC100E0A1 +:1017400014E47CC1CE019F700E94BA0A78C1DD27E3 +:101750008E01106C73C1CF70DD278E01146D6EC1C8 +:1017600000E010ED6BC100E012ED68C100E013ED88 +:1017700065C10E9463210E940E0F0E9495088FEFA1 +:1017800094E32CE0815090402040E1F700C000003D +:101790000E94BA2853C18091320481608093320440 +:1017A0004DC10E941B29811102C00E94F7280E948E +:1017B000332990E090935D0480935C04C23080E50F +:1017C000D80721F480915C04816086C0C43090E524 +:1017D000D90721F480915C0482607EC0C63020E588 +:1017E000D20721F480915C04846076C0C83080E523 +:1017F000D80719F480915C0427C0CA3090E5D90756 +:1018000021F480915C04806167C0CC3020E5D20770 +:1018100021F480915C0480625FC0CE3080E5D807FF +:1018200021F480915C04806457C0C03190E5D907F1 +:1018300021F480915C0480684FC0C23120E5D2075A +:1018400029F480915C048460886046C0C33080E5E0 +:10185000D80721F480915C048E7F3EC0C53090E5AE +:10186000D90721F480915C048D7F36C0C73020E514 +:10187000D20721F480915C048B7F2EC0C93080E5B3 +:10188000D80719F480915C0426C0CB3090E5D907C5 +:1018900021F480915C048F7E1FC0CD3020E5D207FB +:1018A00021F480915C048F7D17C0CF3080E5D8078C +:1018B00021F480915C048F7B0FC0C13190E5D90782 +:1018C00021F480915C048F7707C0C331D04531F497 +:1018D00080915C048B7F877F80935C0480915C04A3 +:1018E0000E943729ABC08D2F99278F70992781309F +:1018F0009105D9F49E012370332702C0880F991FE8 +:101900002A95E2F79C688E0144E0000F111F4A956A +:10191000E1F700271370802B912B53E0CC0FDD1FD4 +:101920005A95E1F7C076DD272FC08230910531F45A +:10193000DC2FCC278E01016F106A80C083309105A7 +:1019400069F4CE018370992701E010E002C0000F16 +:10195000111F8A95E2F7C8019C680FC08430910579 +:10196000B9F4CE018370992701E010E002C0000FA6 +:10197000111F8A95E2F7C8019A6823E0CC0FDD1F9A +:101980002A95E1F7C07ED7708C010C2B1D2B56C019 +:101990008530910531F4DC2FCC278E01046F106A5D +:1019A0004DC0069709F04AC0CF71DD27DC2FCC2748 +:1019B0008E01106243C000E010E040C08E013EC0C6 +:1019C00001E810E43BC003E810E438C002EE14E480 +:1019D00035C009EE14E432C00AEE14E42FC005EB62 +:1019E00014E42CC006EB14E429C007EB14E426C071 +:1019F0000CEC14E423C00DEC14E420C003E815E45F +:101A00001DC00AE815E41AC002E915E417C004E98C +:101A100015E414C001E216E411C003E216E40EC09E +:101A200004E216E40BC005E216E408C006E216E480 +:101A300005C007E216E402C00AE216E4C801DF911D +:101A4000CF911F910F9108959CE0799FF00111248F +:101A500090E3899FE00DF11D1124E60FF11DEE0FBB +:101A6000FF1FE851FE4F85919491803E9105E0F46F +:101A7000803C910558F58133910509F46FC048F415 +:101A80008932910509F463C08A32910509F46DC069 +:101A900072C089339105E9F082389105D1F0853320 +:101AA000910509F44DC067C0833E910581F138F47A +:101AB000803E9105B9F0823E9105D9F05CC0863E2A +:101AC000910561F1873E9105A1F155C00E94B20ACE +:101AD000089520915C0420FD02C021FF4CC080EEDF +:101AE00090E049C080915C0480FFF9CF89E390E0E9 +:101AF00042C080915C0482FF0EC080915C0484FF30 +:101B000003C080E090E037C083EE90E034C0809165 +:101B10005C0482FFF2CF82EE90E02DC080915C04E5 +:101B200083FF0BC080915C0484FDEBCF87EE90E0D7 +:101B300022C080915C0483FFF5CF86EE90E01BC04D +:101B400080915C0485FF07C089E290E014C0809119 +:101B50005C0485FFF9CF85E390E00DC080915C04C3 +:101B600086FF07C08AE290E006C080915C0486FF91 +:101B7000F9CF81E390E00E94C20A0895CF92DF92EC +:101B8000EF92FF920F931F9301E010E020E030E00E +:101B90006801790104C0CC0CDD1CEE1CFF1C8A9589 +:101BA000D2F704C0000F111F221F331F6A95D2F70E +:101BB0000C291D292E293F29C0901504D090160408 +:101BC000E0901704F0901804C022D122E222F32200 +:101BD000842FC016D106E206F30641F41F910F913F +:101BE000FF90EF90DF90CF900C94A0251F910F9164 +:101BF000FF90EF90DF90CF900C94C1250C94DC0502 +:101C0000E82FF0E0E257FD4F8081E82FEF70F0E021 +:101C100082958F7021E030E0A90102C0440F551F6A +:101C20008A95E2F740A308950F931F93CF93DF9314 +:101C300085B7806885BF85B7806885BFC3E0D0E081 +:101C400001E010E0FE01E257FD4F8081E82FEF70C8 +:101C5000F0E021A182958F70A80102C0440F551FAA +:101C60008A95E2F7CA01822B81A38C2F0E94000E75 +:101C7000219740F78BE090E061E070E0FC01EE57C7 +:101C8000FD4F2081E22FEF70F0E042A122952F70EE +:101C9000DB0102C0AA0FBB1F2A95E2F79D01242B8E +:101CA00022A3019758F7DF91CF911F910F910C94C8 +:101CB0004008EF92FF920F931F93CF93DF9300E6BC +:101CC00013E0C3E0EE24E394F12CD5E08C2F0E94C6 +:101CD000000E8BE090E040E050E0FC01EE57FD4F3D +:101CE0006081E62FEF70F0E020A130E062956F7028 +:101CF00002C0359527956A95E2F720FD09C0970146 +:101D0000082E02C0220F331F0A94E2F7422B532BF6 +:101D1000019718F7F801929182918F018417950726 +:101D200021F051834083D0931D028C2F0E94000E1E +:101D3000C15060F680911D0287FD2CC081508093B8 +:101D40001D028F3F39F08FE99FE00197F1F700C046 +:101D5000000020C080915E0390915F039093670321 +:101D60008093660380915C0390915D03909365037B +:101D70008093640380915A0390915B039093630373 +:101D8000809362038091580390915903909361036B +:101D9000809360030E94420881E0DF91CF911F9100 +:101DA0000F91FF90EF900895E82FF0E0EE0FFF1FE6 +:101DB000E05AFC4F80819181089508950F931F93FD +:101DC000CF9308E613E0C0E0F801929182918F0171 +:101DD0000E94D727C80FF3E000361F07A9F78C2F02 +:101DE000CF911F910F9108950E941B29811102C06C +:101DF0000E94F7280E944529809347043E9A8091CB +:101E000071008D7F8093710082E0809390008AE161 +:101E10008093910081E080936A03089580916A0322 +:101E2000811102C00E94F40E1092BA031092B903FD +:101E3000809171008D7F80937100809190008F73ED +:101E40008093900010927C0310927B031092B30356 +:101E50001092B4031092B5031092B6031092B2031D +:101E60001092B103E1E9F3E0A1E8B3E0119211921D +:101E7000119211921D921D9283E0E13BF807B1F798 +:101E80000895CF92DF92EF92FF920F931F93CF931B +:101E9000DF9320917B03222309F484C06B017C0132 +:101EA00080916A03811102C00E94F40E01EB13E0DD +:101EB000C7E0D0E0A7019601F8019291829172915A +:101EC00062918F010E94902E811131C0FE01EE0FB0 +:101ED000FF1FEE0FFF1FEF56FC4F10821182128280 +:101EE0001382DE01AA0FBB1FAF57BC4F11961C9285 +:101EF0001E92C730D105E9F0219644815581668153 +:101F000077814083518362837383148215821682A2 +:101F1000178212968D919C91139711969C938E9394 +:101F200013961C921E92129734961296E2CF219726 +:101F300008F68091B9039091BA03019797FD05C007 +:101F40009093BA038093B90304C01092BA0310921D +:101F5000B9038091B9039091BA032091B7033091EE +:101F6000B8032817390724F01092B8031092B7036A +:101F7000892BC1F4809171008D7F809371008091D5 +:101F800090008F73809390001092B3031092B4036B +:101F90001092B5031092B6031092B2031092B103DF +:101FA00010927B03DF91CF911F910F91FF90EF90E3 +:101FB000DF90CF9008951F920F920FB60F921124C9 +:101FC0004F925F926F927F928F929F92AF92BF9249 +:101FD000CF92DF92EF92FF922F933F934F935F93B5 +:101FE0006F937F938F939F93AF93BF93CF93DF9321 +:101FF000EF93FF9380917B03882309F49BC1C091E9 +:10200000B903D091BA031C161D060CF093C1409081 +:102010006B0350906C0360906D0370906E0320E032 +:1020200030E0A901C301B2010E943B3018160CF048 +:1020300065C0C130D10509F452C08091B7039091B9 +:10204000B803BE010E940D327C019093B8038093C7 +:10205000B70380907D0390907E03A0907F03B090A3 +:10206000800320E030E040E85FE3C501B4010E9456 +:102070002C2E60937D0370937E0380937F03909357 +:102080008003F701EE0FFF1FEE0FFF1FEF56FC4F0F +:10209000A301920160817181828193810E94942EBB +:1020A00020E030E040E05EE30E943F309B01AC0165 +:1020B000C501B4010E943B3018168CF4C70101968B +:1020C000BE010E940D329093B8038093B703109223 +:1020D0007D0310927E0310927F0310928003E091A3 +:1020E000B703F091B803EE0FFF1FEE0FFF1FEF567F +:1020F000FC4F6081718182819381D0C0C090B30315 +:10210000D090B403E090B503F090B60320E030E047 +:10211000A901C701B6010E94902E2197882309F4D6 +:10212000A2C0FE01EE0FFF1FEE0FFF1FEF56FC4F88 +:1021300080809180A280B380A5019401C701B6017F +:102140000E94902E87FF31C0A501940160E070E0ED +:102150008CED93EC0E94942E20E030E040E451E4BA +:102160000E94942E20E030E040E05FE30E943F3088 +:102170009B01AC0160E070E080E090E40E94A2303E +:102180009B01AC01C501B4010E943F309B01AC0131 +:10219000C701B6010E94902E87FF07C0A7019601D4 +:1021A00060E070E08CED93E439C0A5019401C701B3 +:1021B000B6010E943B3018160CF055C0A5019401E1 +:1021C00060E070E08CED93E40E94942E20E030E01B +:1021D00040E451E40E94942E20E030E040E05FE3D0 +:1021E0000E943F309B01AC0160E070E080E090E431 +:1021F0000E94A2309B01AC01C501B4010E943F3096 +:102200009B01AC01C701B6010E943B3018165CF57A +:10221000A701960160E070E08CED93EC0E94942E93 +:1022200020E030E040E451E40E94942E20E030E0D1 +:1022300040E05FE30E943F309B01AC0160E070E052 +:1022400080E090E40E94A2309B01AC01C701B6017E +:102250000E943F306093B3037093B4038093B5033F +:102260009093B60313C0FE01EE0FFF1FEE0FFF1F8A +:10227000EF56FC4F80819181A281B3818093B3039B +:102280009093B403A093B503B093B6036091B303E6 +:102290007091B4038091B5039091B60320916803C7 +:1022A000309169032F3F4FEF340731F02F5F3F4FDD +:1022B00030936903209368030E9416146B017C011C +:1022C00020E034E244EF51E40E94902E87FF08C0E2 +:1022D00086EFC82E88E2D82E84EFE82E81E4F82E0F +:1022E00020E030E040E051E4C701B6010E943F30F9 +:1022F0009B01AC0160E074E284E79BE40E94942EB1 +:102300006B017C010E94012F7093970060939600EF +:1023100020911E0230911F02409120025091210213 +:10232000C701B6010E943F300E94012F70939900AF +:102330006093980080917C03882309F433C1C09096 +:102340007703D0907803E0907903F0907A0320E04F +:1023500030E0A901C701B6010E943B301816D4F540 +:1023600080916803909169038F3F2FEF920729F0C6 +:1023700001969093690380936803C701B6010E9498 +:10238000161420E030E040E051E40E943F309B0111 +:10239000AC0160E074E284E79BE40E94942E6B0140 +:1023A0007C010E94012F709397006093960020910A +:1023B0001E0230911F024091200250912102C7015C +:1023C000B6010E943F300E94012F709399006093E4 +:1023D000980008C0109297001092960010929900F1 +:1023E0001092980060917103709172036F5F7F4F3C +:1023F000709372036093710320919600309197005F +:1024000080E090E0232BF1F0C0919600D0919700EE +:102410000E942D2F6B017C01BE0180E090E00E94A4 +:102420002D2F9B01AC016091730370917403809117 +:102430007503909176030E94942E20E03FEF4FE7C2 +:1024400057E410C00E942D2F6B017C0120E030EE7C +:102450004FEF54E46091730370917403809175039E +:10246000909176030E943F309B01AC01C701B601F9 +:102470000E943B3087FD96C080916F038F5F8093F1 +:102480006F0390E020914304309144048217930736 +:10249000A0F080914E04882319F010926F030DC0B4 +:1024A000809171008D7F80937100809190008F7377 +:1024B0008093900010927C037DC080917003C09146 +:1024C0006F03811128C0C0904804D0904904E09067 +:1024D0004A04F0904B0420E030E0A901C701B601A6 +:1024E0000E943B301816BCF481E080937003109278 +:1024F0007703109278031092790310927A03C092B6 +:102500007303D0927403E0927503F0927603C15086 +:10251000C0936F0343C0109270031092690310922E +:102520006803E0914504F091460448E0C49FE00D43 +:10253000F11D112480819181A281B3818093770361 +:1025400090937803A0937903B0937A0320E030E06E +:1025500040E85EE364817581868197810E943F3007 +:102560006B017C0180912202682F70E080E090E096 +:102570000E942D2F20E030E048EC52E40E94942E7F +:102580009B01AC01C701B6010E943F306093730309 +:102590007093740380937503909376031092720383 +:1025A000109271038091470480FD04C010927C0357 +:1025B00010927B03FF91EF91DF91CF91BF91AF918B +:1025C0009F918F917F916F915F914F913F912F914B +:1025D000FF90EF90DF90CF90BF90AF909F908F9043 +:1025E0007F906F905F904F900F900FBE0F901F9055 +:1025F0001895CF92DF92EF92FF92CF93DF936B010A +:102600007C01EA0180916A03811102C00E94F40EEC +:102610008091470480FF46C08091B9039091BA032E +:1026200008970CF03FC0809171008D7F80937100FE +:1026300080917C0381110E940E0F81E080937B03C7 +:10264000109269031092680320E030E0A901C701ED +:10265000B6010E943B301816DCF48091B9039091CA +:10266000BA03FC01EE0FFF1FEE0FFF1FEF56FC4FEA +:10267000C082D182E282F382FC01EE0FFF1FEF578E +:10268000FC4FD183C08301969093BA038093B90322 +:1026900080917100826080937100809190008068C9 +:1026A00080939000DF91CF91FF90EF90DF90CF90DB +:1026B00008958F929F92AF92BF92CF92DF92EF9246 +:1026C000FF920F931F93CF93DF93EC017B01D42EE6 +:1026D0004801590180916A03811102C00E94F40EE1 +:1026E0008091470480FF6BC0809171008D7F809343 +:1026F000710080917B0381110E940E0F81E0809315 +:102700007C03D0934604C0934504F0924404E092C5 +:102710004304D0924E048092480490924904A092BF +:102720004A04B0924B0410927D0310927E031092E3 +:102730007F031092800310926F0388819981AA8190 +:10274000BB818093770390937803A0937903B09330 +:102750007A0320E030E040E85EE36C817D818E8189 +:102760009F810E943F306B017C0180912202682F83 +:1027700070E080E090E00E942D2F20E030E048ECF7 +:1027800052E40E94942E9B01AC01C701B6010E9445 +:102790003F30609373037093740380937503909339 +:1027A000760310927203109271038091710082601F +:1027B0008093710080919000806880939000DF91F9 +:1027C000CF911F910F91FF90EF90DF90CF90BF902E +:1027D000AF909F908F9008958091470481700895E5 +:1027E000809147048160809347040E9449290C949A +:1027F0009C08809147048E7F809347040C9449295C +:102800008091BB0390E0019666E070E00E940D327B +:102810008093BB0308958091BB0390E0019766E02D +:1028200070E00E940D328093BB0308958F929F92B7 +:10283000AF92BF92CF92DF92EF92FF920F931F93CE +:10284000CF93DF936B017C01C0916803D091690342 +:10285000BE0180E090E00E942D2F4B015C01A7019A +:10286000960160E070E08CE594E40E94942E9B0158 +:10287000AC01C501B4010E943F300E94012F20919C +:10288000BB03233009F473C028F4222351F0213014 +:10289000E9F02CC1243009F4A0C0253009F4E0C0CF +:1028A00025C180E090E0A0E0BFE380931E029093FA +:1028B0001F02A0932002B093210210926B0310928A +:1028C0006C0310926D0310926E0310C110926B0393 +:1028D00010926C0310926D0310926E0364317105B7 +:1028E00040F46A30710560F520E030E040E85EE3D6 +:1028F0002BC0693C710508F0AAC080E090E00E94FE +:102900002D2F20E030E040EA51E40E942B2E20E001 +:1029100030E044E353E40E94942E9B01AC010E94FA +:102920003F3020E030E040E05EE30E943F309B011A +:10293000AC0160E070E080E09EE30E942B2E44C07A +:1029400020E030E040E05FE3C701B6010E943F3085 +:102950006B017C0180E090E0A0E0BEE380931E026A +:1029600090931F02A0932002B0932102BFC0109247 +:102970006B0310926C0310926D0310926E034AE089 +:10298000469F9001479F300D1124C90168EB7BE001 +:102990000E94F931BC016C5D754077FF03C07195F1 +:1029A00061957109882777FD8095982F0E942F2FB8 +:1029B0002EE333EC4EE259E30E943F3020E030E05A +:1029C00040EC5EE30E942C2E60931E0270931F0267 +:1029D000809320029093210289C010926B03109281 +:1029E0006C0310926D0310926E03CE0183709927D1 +:1029F000892BE1F0BE016170772780E090E00E94B2 +:102A00002D2F20E030E040E05EE30E943F3020E0E8 +:102A100030E040E45FE30E942C2E60931E0270932E +:102A20001F0280932002909321020CC080E090E06E +:102A3000A0E0BFE380931E0290931F02A0932002A8 +:102A4000B0932102C770DD27CD2B09F04FC0109243 +:102A50001E0210921F02109220021092210246C004 +:102A600010926B0310926C0310926D0310926E0320 +:102A700000E010E020E03FE300931E0210931F02ED +:102A800020932002309321026739710578F180E0AC +:102A900090E00E942D2F20E030E047E153E40E94B7 +:102AA0002B2E20E030E04AE754E40E94942E20E0F0 +:102AB00030E048E452E40E943F3020E030E040EA59 +:102AC00051E40E94712F0E94FC2E660F771F660F43 +:102AD000771FFB01EE56FD4F2081318142815381EA +:102AE000C701B6010E943F306B017C01C701B601EE +:102AF000DF91CF911F910F91FF90EF90DF90CF90DA +:102B0000BF90AF909F908F9008958091CC030895CF +:102B1000CF93DF9300D01F92CDB7DEB79C01809199 +:102B20005304843019F593E099833B832A8390936F +:102B3000E9008FEF9091E800815095FD06C095ED7A +:102B40009A95F1F700008111F5CF8091E80085FF9B +:102B50000DC040E050E063E070E0CE0101960E94BD +:102B6000E9178091E8008E778093E8000F900F902E +:102B70000F90DF91CF910895CF93DF9300D01F92F4 +:102B8000CDB7DEB720915304243021F522E029830C +:102B90009B838A8383E08093E9008FEF9091E80024 +:102BA000815095FD06C095ED9A95F1F700008111D1 +:102BB000F5CF8091E80085FF0DC040E050E063E074 +:102BC00070E0CE0101960E94E9178091E8008E77AF +:102BD0008093E8000F900F900F90DF91CF910895B0 +:102BE000209153042430F1F422E02093E9002FEFE8 +:102BF0003091E800215035FD06C035ED3A95F1F7EA +:102C000000002111F5CF2091E80025FF0BC040E026 +:102C100050E065E070E00E94E9178091E8008E774F +:102C20008093E8000895CF93DF93EC0190915304D3 +:102C3000943009F046C080912D028823D9F080910C +:102C40002E028823B9F09093E9008FEF9091E8006D +:102C5000815095FD06C095E19A95F1F7000081112C +:102C6000F5CF8091E80085FF2CC040E050E060E1A6 +:102C700070E017C081E08093E9008FEF9091E80049 +:102C8000815095FD06C095ED9A95F1F700008111F0 +:102C9000F5CF8091E80085FF14C040E050E068E087 +:102CA00070E0CE010E94E9178091E8008E77809352 +:102CB000E80080E1FE01ACEBB3E001900D928A9553 +:102CC000E1F7DF91CF91089580915204811109C0FD +:102CD0000E947E190E94DB198091E200846080933B +:102CE000E2000895109252040895089508950C94F6 +:102CF000222842E061EC81E00E94F81842E061EC99 +:102D000082E00E94F81842E061EC83E00E94F8182B +:102D100042E161EC84E00C94F81880915504833012 +:102D200009F455C030F4813071F0823009F48EC05E +:102D300008958A3009F47AC08B3009F460C0893074 +:102D400009F09CC020C080915404813A09F096C0DB +:102D50008091E800877F8093E800809158049091EB +:102D60005904892B21F460E18CEB93E003C060E00F +:102D700080E090E070E00E9434188091E8008B774A +:102D80008093E800089580915404813209F076C060 +:102D90008091580490915904009719F0039709F015 +:102DA0006DC08091E800877F8093E8008091E80003 +:102DB00082FD05C0809153048111F8CF5FC08091DE +:102DC000F1008093CC038091E8008B7753C0809111 +:102DD0005404813A09F052C08091580490915904EA +:102DE000892B09F04BC08091E800877F8093E80031 +:102DF0008091E80080FFFCCF80912D0236C0809149 +:102E000054048132D9F58091580490915904892B4A +:102E1000A9F58091E800877F8093E8000E942D1932 +:102E20008091560480932D020C9463218091540468 +:102E3000813221F58091E800877F8093E8000E942D +:102E40002D19809157048093CD03089580915404E7 +:102E5000813AA1F48091E800877F8093E800809117 +:102E6000E80080FFFCCF8091CD038093F10080913A +:102E7000E8008E778093E8000C942D19089584B7AC +:102E8000877F84BF88E10FB6F8948093600010922A +:102E900060000FBE90E080E80FB6F8948093610068 +:102EA000909361000FBE0E94D01C0E947E190E9468 +:102EB000DB198091E20084608093E20078940E94A4 +:102EC000611C0E94D21C83E292E00E947C1C8091D3 +:102ED0005304853069F40E94E327809151048823CC +:102EE000B1F30E941128882391F30E94D317EFCFEA +:102EF0000E94DA1CECCF292F332723303105C9F08B +:102F000064F42130310581F02230310509F043C0ED +:102F10008DE690E024EA39E042C021323105F1F03B +:102F20002232310541F137C082E190E021E13AE0FF +:102F300036C099278130910541F08230910541F0EA +:102F4000892B49F5E0EAF9E005C0E2E7F9E002C0C3 +:102F5000E8E4F9E0849190E09F0121C06430D8F466 +:102F6000E62FF0E0EE0FFF1FE251FD4F208131818F +:102F700089E090E014C0643070F470E0FB01EE0F63 +:102F8000FF1FEA51FD4F20813181FB01EE51FD4FC2 +:102F9000808190E004C080E090E020E030E0FA0121 +:102FA00031832083089580E189BD82E189BD09B420 +:102FB00000FEFDCF8091D8008F7D8093D800809156 +:102FC000E00082608093E0008091E00081FDFCCF12 +:102FD0000895CF92DF92EF92FF920F931F93CF93BA +:102FE000DF93EC018B016A010E944C19811133C0FF +:102FF000C114D10439F0F60180819181081B190BAD +:10300000C80FD91FE12CF12C0115110519F1809180 +:10301000E80085FD16C08091E8008E778093E80077 +:10302000C114D10449F0F60180819181E80EF91EA6 +:10303000F182E08285E00FC00E944C19882321F3C1 +:103040000AC089918093F10001501109FFEFEF1A36 +:10305000FF0ADACF80E0DF91CF911F910F91FF90AF +:10306000EF90DF90CF90089520915A0430915B0447 +:103070002617370748F06115710539F42091E800EB +:103080002E772093E80001C0B90140E06115710579 +:10309000A9F120915304222309F443C0253009F4F7 +:1030A00042C02091E80023FD40C02091E80022FDAD +:1030B00032C02091E80020FFE9CF4091F300209139 +:1030C000F20030E0342BFC01CF016115710559F09D +:1030D0002830310540F481918093F10061507109ED +:1030E0002F5F3F4FF1CF41E02830310509F040E03C +:1030F0002091E8002E772093E800C8CF4111C9CF76 +:103100000AC080915304882361F0853061F080917A +:10311000E80083FD0AC08091E80082FFF2CF80E0E2 +:10312000089582E0089583E0089581E00895209154 +:103130005A0430915B042617370748F06115710572 +:1031400039F42091E8002E772093E80001C0B901FE +:10315000FC0120E06115710591F1809153048823F1 +:1031600009F440C0853009F43FC08091E80083FD38 +:103170003DC08091E80082FD2FC08091E80080FF73 +:10318000E9CF2091F3008091F20090E0922B61153D +:10319000710559F08830910540F424912093F10095 +:1031A0003196615071090196F2CF21E0089709F03C +:1031B00020E08091E8008E778093E800CBCF21114A +:1031C000CCCF0AC080915304882361F0853061F030 +:1031D0008091E80083FD0AC08091E80082FFF2CF71 +:1031E00080E0089582E0089583E0089581E00895E5 +:1031F000982F973058F59093E900981739F070910F +:10320000EC002091ED005091F00003C0242F762FA8 +:1032100050E021FF19C03091EB003E7F3093EB006E +:103220003091ED003D7F3093ED003091EB00316047 +:103230003093EB007093EC002093ED005093F0007E +:103240002091EE0027FF07C09F5FD3CF8F70809340 +:10325000E90081E0089580E008958091540487FF9B +:1032600011C08091E80082FD05C080915304811156 +:10327000F8CF11C08091E8008B770BC08091530488 +:10328000882349F08091E80080FFF8CF8091E80022 +:103290008E778093E80008952091E4003091E50056 +:1032A00095E64091EC00842F817040FF22C0809110 +:1032B000E80080FD1CC080915304882391F0853084 +:1032C00091F08091EB0085FD10C04091E400509199 +:1032D000E5004217530729F39A01915011F784E052 +:1032E000089582E0089583E0089581E0089580E0E4 +:1032F00008954091E80042FFDECF08950E94EC1946 +:103300000E94F419E0EEF0E0808181608083E8EDB6 +:10331000F0E080818F77808319BCA7EDB0E08C91BD +:103320008E7F8C9380818F7E8083109252040895CB +:103330000F931F93CF93DF930E94EC190E94F4190F +:10334000C8EDD0E088818F77888388818068888302 +:1033500088818F7D888319BC1092530410924F048A +:10336000109251041092500400EE10E0F801808198 +:103370008B7F808388818160888342E060E080E089 +:103380000E94F818E1EEF0E080818E7F8083E2EE0B +:10339000F0E0808181608083808188608083F80193 +:1033A00080818E7F8083888180618883DF91CF9147 +:1033B0001F910F910895E8EDF0E080818F7E80836A +:1033C000E7EDF0E080818160808384E082BF81E06E +:1033D000809352040C949819E8EDF0E080818E7F80 +:1033E00080831092E20008951092DA001092E100BA +:1033F00008951F920F920FB60F9211242F933F93AF +:103400004F935F936F937F938F939F93AF93BF93EC +:10341000EF93FF938091E10082FF0BC08091E20067 +:1034200082FF07C08091E1008B7F8093E1000E94C2 +:10343000601C8091DA0080FF1FC08091D80080FF5F +:103440001BC08091DA008E7F8093DA008091D900D2 +:1034500080FF0DC080E189BD82E189BD09B400FE15 +:10346000FDCF81E0809353040E94641605C019BC0F +:10347000109253040E9472168091E10080FF19C0DF +:103480008091E20080FF15C08091E2008E7F8093E2 +:10349000E2008091E20080618093E2008091D80098 +:1034A00080628093D80019BC85E0809353040E9409 +:1034B00076168091E10084FF30C08091E20084FFA5 +:1034C0002CC080E189BD82E189BD09B400FEFDCF39 +:1034D0008091D8008F7D8093D8008091E1008F7E0D +:1034E0008093E1008091E2008F7E8093E2008091E2 +:1034F000E20081608093E20080914F04882311F004 +:1035000084E007C08091E30087FD02C081E001C034 +:1035100083E0809353040E9477168091E10083FF3B +:1035200029C08091E20083FF25C08091E100877F60 +:103530008093E10082E08093530410924F048091C5 +:10354000E1008E7F8093E1008091E2008E7F809386 +:10355000E2008091E20080618093E20042E060E05E +:1035600080E00E94F8188091F00088608093F0005D +:103570000E947516FF91EF91BF91AF919F918F912E +:103580007F916F915F914F913F912F910F900FBE5F +:103590000F901F9018951F920F920FB60F92112443 +:1035A0002F933F934F935F936F937F938F939F934B +:1035B000AF93BF93CF93DF93EF93FF93C091E90055 +:1035C000CF708091EC00D82FD17080FDD0E81092A0 +:1035D000E9008091F000877F8093F00078940E944A +:1035E0000F1B1092E9008091F00088608093F0003A +:1035F000CD2BCF70C093E900FF91EF91DF91CF9178 +:10360000BF91AF919F918F917F916F915F914F91FA +:103610003F912F910F900FBE0F901F9018951F9301 +:10362000CF93DF93CDB7DEB7AA970FB6F894DEBF7E +:103630000FBECDBFE4E5F4E088E08E0F9091F1007D +:1036400091938E13FBCF0E948D168091E80083FF2B +:103650001FC18091540490915504492F50E04A3085 +:10366000510508F015C1FA01EC59FF4F0C942132B5 +:10367000803881F0823809F00BC1809158048F7036 +:103680008093E9008091EB0085FB882780F91092F8 +:10369000E90006C08091500490915104911182601C +:1036A0009091E800977F9093E8008093F10010924A +:1036B000F100C8C0282F2D7F09F0EAC0882319F037 +:1036C000823061F0E5C080915604813009F0E0C09D +:1036D000933009F080E0809351042BC08091560410 +:1036E000811127C0809158048F7009F4D1C0809354 +:1036F000E9002091EB0020FF1CC0933021F4809161 +:10370000EB00806214C09091EB0090619093EB000D +:1037100021E030E0A90102C0440F551F8A95E2F76D +:103720004093EA001092EA008091EB008860809359 +:10373000EB001092E9008091E800877F86C081113C +:10374000A7C0109156041F778091E3008078812BE9 +:103750008093E3008091E800877F8093E8000E94D7 +:103760002D198091E80080FFFCCF8091E3008068F4 +:103770008093E300111102C082E001C083E08093D6 +:10378000530486C08058823008F082C0809156046D +:10379000909157048C3D53E0950779F583E08A8337 +:1037A0008AE289834FB7F894DE01139620E03EE069 +:1037B00051E2E32FF0E050935700E49120FF03C063 +:1037C000E295EF703F5FEF708E2F90E0EA3010F0DF +:1037D000C79601C0C0968D939D932F5F243149F702 +:1037E0004FBF8091E800877F8093E8006AE270E035 +:1037F000CE0101960E94341814C0AE014F5F5F4F96 +:10380000609158040E947B17BC01009709F440C0E6 +:103810009091E800977F9093E80089819A810E94B7 +:1038200097188091E8008B778093E80031C080384A +:1038300079F58091E800877F8093E80080914F04BC +:103840008093F1008091E8008E778093E8000E94D9 +:103850002D191EC081111CC0909156049230C0F4E5 +:103860008091E800877F8093E80090934F040E9446 +:103870002D1980914F04811106C08091E30087FDCE +:1038800002C081E001C084E0809353040E94791655 +:103890008091E80083FF0AC08091E800877F8093D1 +:1038A000E8008091EB0080628093EB00AA960FB64F +:1038B000F894DEBF0FBECDBFDF91CF911F91089569 +:1038C0000895CF93809153048823A1F0C091E9001B +:1038D000CF709091EC00892F817090FD80E8C82B0B +:1038E0001092E9008091E80083FD0E940F1BCF70C9 +:1038F000C093E900CF9108959093D3038093D203AE +:103900000895E091D203F091D303309721F0019014 +:10391000F081E02D099480E00895E091D203F091C8 +:10392000D303309721F00280F381E02D09940895AC +:10393000E091D203F091D303309721F00480F58118 +:10394000E02D099408952091D0033091D10382177E +:10395000930771F09093D1038093D003E091D20349 +:10396000F091D303309721F00680F781E02D099480 +:1039700008952091CE033091CF038217930771F001 +:103980009093CF038093CE03E091D203F091D303C1 +:10399000309721F00084F185E02D09940895089571 +:1039A0000C94CF1C0E9456280E94140E0E94DC2802 +:1039B0000C94902D5F926F927F928F929F92AF9214 +:1039C000BF92CF92DF92EF92FF920F931F93CF930C +:1039D000DF9300D000D01F92CDB7DEB70E94590E02 +:1039E0009DEDC92E93E0D92E03E010E0AA24A39404 +:1039F000B12C502E802F0E94D40E4C01F6017290F3 +:103A000062906F016826792661147104A1F4015057 +:103A1000110978F78FEF89838A831B820E945F28C0 +:103A20008160782F9D838C8349815A816B818D8140 +:103A30000E948A1D38C08091320481FD0E94DD0EF3 +:103A40002BE030E07501022E02C0EE0CFF1C0A9440 +:103A5000E2F7C70186219721892B09F129835A8230 +:103A60008E209F2091E0892809F490E09B830E949A +:103A70005F288160782F9D838C8349815A816B8177 +:103A80008D810E948A1D000F111FF801EB52FC4F1F +:103A900080819181E826F926F182E08204C02150DC +:103AA000310980F6B4CF0E94C82A1091D4030E9435 +:103AB000811C1817D1F00E94811C8093D4030F90B1 +:103AC0000F900F900F900F90DF91CF911F910F915A +:103AD000FF90EF90DF90CF90BF90AF909F908F902E +:103AE0007F906F905F900C94FE0D0F900F900F9051 +:103AF0000F900F90DF91CF911F910F91FF90EF905A +:103B0000DF90CF90BF90AF909F908F907F906F90FD +:103B10005F900895CF93DF93CDB7DEB72B970FB6A5 +:103B2000F894DEBF0FBECDBF4F83588769877A8771 +:103B30008B87DE01119686E0FD0111928A95E9F7E7 +:103B400085E0FE01379601900D928A95E1F7498153 +:103B50005A816B817C818D819E810E9401242B96EC +:103B60000FB6F894DEBF0FBECDBFDF91CF910895A1 +:103B7000CF93882309F4C2C0C82F823859F40E9419 +:103B8000811C81FDBBC089E30E94DB260E94A8271F +:103B900089E30CC0833879F40E94811C80FDAEC09B +:103BA00083E50E94DB260E94A82783E50E941D274B +:103BB000CF910C94A827843859F40E94811C82FD6F +:103BC0009DC087E40E94DB260E94A82787E4EECFF1 +:103BD0008CEF8C0F813A48F48C2F0E94F82C8111C5 +:103BE0008DC08C2F0E94DB26E3CF80E28C0F8830C3 +:103BF00048F4C77081E001C0880FCA95EAF70E94B7 +:103C00006127D6CF8BE58C0F833078F4C53A29F045 +:103C1000C63A31F083E890E005C081E890E002C048 +:103C200082E890E0CF910C94A31C88E58C0F83313F +:103C300008F064C0C83A39F1C93A41F1CA3A49F1C9 +:103C4000CB3A51F1CC3A59F1CD3A61F1C03B69F12F +:103C5000CE3A71F1CF3A79F1C13B81F1C23B89F1A2 +:103C6000C33B91F1C43B99F1C53BA1F1C63BA9F11E +:103C7000C73BB1F1C83BB9F1C93BC1F1CA3BC9F17E +:103C800080E090E038C082EE90E035C089EE90E0B0 +:103C900032C08AEE90E02FC085EB90E02CC086EB1E +:103CA00090E029C087EB90E026C08CEC90E023C028 +:103CB0008DEC90E020C083E891E01DC08AE891E09F +:103CC0001AC082E991E017C084E991E014C081E252 +:103CD00092E011C083E292E00EC084E292E00BC059 +:103CE00085E292E008C086E292E005C087E292E0B9 +:103CF00002C08AE292E0CF910C94B91CCF91089552 +:103D0000882309F44BC0823859F40E94811C81FF3A +:103D100045C089E30E94DB260E94A82789E30CC0E6 +:103D2000833871F40E94811C80FF38C083E50E94B3 +:103D3000DB260E94A82783E50E941D270C94A82754 +:103D4000843859F40E94811C82FF28C087E40E94B5 +:103D5000DB260E94A82787E4EFCF9CEF980F913ACB +:103D600058F390E2980F983050F4877091E001C0BA +:103D7000990F8A95EAF7892F0E946727DFCF9BE585 +:103D8000980F933020F480E090E00C94A31C885AA4 +:103D9000833120F480E090E00C94B91C08958823CE +:103DA00021F00E9461270C94A8270895882321F010 +:103DB0000E9467270C94A82708957F928F929F9264 +:103DC000AF92BF92CF92DF92EF92FF920F931F9329 +:103DD000CF93DF931F92CDB7DEB77C01C62E772E2F +:103DE000FC01058102950F70128111110E947E273E +:103DF0000E94D426882379F0112369F080E28C0D8B +:103E0000883048F082E00E94BD260E94D42691E0CE +:103E1000D82ED92601C0D12CE72DE295EF70F0E025 +:103E2000E259FF4F0C942132872D807F072D0F70B0 +:103E3000882311F00295007F112389F0002309F4F3 +:103E400099C180E28C0D883020F4802F0E94612778 +:103E500003C0802F0E9471270E94A8278BC18C2D40 +:103E60000E94801E002309F4C3C180E28C0D8830BB +:103E700020F4802F0E94672703C0802F0E9477279D +:103E80000E94A827B5C1872D807F972D9F70803213 +:103E900011F4892F03C0892F8295807FCC2021F0D7 +:103EA000F1E0CF16A1F01DC0112339F0002319F164 +:103EB000013009F50E9491279BC1002319F00130C0 +:103EC00009F496C189830E949427898110C1112326 +:103ED00021F0063008F08CC10EC0053008F088C112 +:103EE00006C1112359F0002331F0F701958190FFAD +:103EF00041C19F7095830E94CF1E7AC1002309F4AF +:103F0000F6C03EC1872D86958695837090E0009718 +:103F100019F0019761F06CC1112321F08C2D972DC0 +:103F2000937002C080E090E00E94A31C61C1112345 +:103F300021F08C2D972D937002C080E090E00E94BC +:103F4000B91C56C18C2D112319F00E94D02902C032 +:103F50000E94382A0E94BD2A4BC1872D837009F028 +:103F600052C0111145C18C2D829586958770880F9E +:103F7000880F9C2D9F70892E912CA12CB12C082E7E +:103F800004C0880C991CAA1CBB1C0A94D2F7C4FE5E +:103F900014C00FE010E020E030E0B901A80104C037 +:103FA000440F551F661F771F8A95D2F7CB01BA01C0 +:103FB000609570958095909503C060E070E0CB01AE +:103FC000272D26952695237030E02230310569F0A3 +:103FD0002330310589F0682979298A299B292130E4 +:103FE000310571F00E94492503C1682979298A2980 +:103FF0009B290E946525FCC00E944925C501B4018A +:104000000E942D25F5C0112319F0872D817001C064 +:104010008695882309F4ECC08C2D8295869587704F +:10402000880F880F9C2D9F70892E912CA12CB12C6C +:10403000082E04C0880C991CAA1CBB1C0A94D2F739 +:10404000C4FE14C00FE010E020E030E0B901A80188 +:1040500004C0440F551F661F771F8A95D2F7CB0106 +:10406000BA01609570958095909503C060E070E00E +:10407000CB01272D269526952370422F50E0423004 +:10408000510569F04330510589F0682979298A2959 +:104090009B294130510571F00E942326A9C068294F +:1040A00079298A299B290E943F26A2C00E942326A3 +:1040B000C501B4010E9407269BC08C2D90E0FC0135 +:1040C000E05EF109E531F10508F050C0E258FF4F1C +:1040D0000C9421320C2D0F70872D8F71112321F03C +:1040E0000E94A025802F07CF0E94C125802F0E940B +:1040F000D61E7EC0112341F0053008F079C0872D0F +:104100008F710E94E62574C0063008F071C0F7CFA9 +:10411000112339F0872D8F710E94A02569C01123CA +:10412000C9F3872D8F710E94C12562C0112329F028 +:10413000872D8F710E948B255BC00E94812558C0FE +:10414000112351F0172D1F71812F0E94A02563E0CC +:10415000812F0E94B4264CC081E00E94BD2602300F +:1041600008F446C082E00E94BD2642C0112331F00F +:10417000002381F28C2D0E94B81D3AC0002389F2E1 +:104180008C2D0E94801E34C0472D4F706C2DC701AE +:104190000E94E0060E94A5242BC0111129C0472DC2 +:1041A0004F7050E042305105B9F04CF441155105C3 +:1041B00081F041305105E1F40E94B82D19C043301F +:1041C000510569F04430510599F48C2D0E940A2E56 +:1041D0000FC00E94A12D0CC00E94D42D09C00E94C6 +:1041E000E72D06C0472D4F706C2DC7010E949F0A16 +:1041F000DD20F9F00E94B02680FD1BC0F70112827D +:104200000E94AA260E94A025C7010E9428210E9480 +:10421000AA260F90DF91CF911F910F91FF90EF9001 +:10422000DF90CF90BF90AF909F908F907F900C9435 +:10423000C1250F90DF91CF911F910F91FF90EF90CB +:10424000DF90CF90BF90AF909F908F907F90089518 +:104250000F931F93CF93DF93EC01888199812B817A +:104260003C81232BB9F09F3F11F48F3F99F0CE0191 +:104270000E949E08882371F0688179818A810E945A +:10428000A6268C010E945B260E942225B801CE0141 +:104290000E94DD1EDF91CF911F910F9108950E9422 +:1042A0007E270E948E270E9453270E94A8270E94E3 +:1042B0006E2B0E94BD2A80E090E00E94A31C80E04B +:1042C00090E00C94B91C0E946E270C944F210E9420 +:1042D0009B26292F22952F7030E02C3031054CF48D +:1042E0002A3031056CF42250310922303105A8F40E +:1042F00007C02C30310569F02F30310551F00DC069 +:10430000803F69F018F4803E40F409C0843F29F4EE +:1043100006C093FB882780F9089580E0089581E026 +:104320000895CF93DF9300D000D01F92CDB7DEB7B2 +:104330000F900F900F900F900F90DF91CF910895F5 +:10434000CF93DF9300D000D000D0CDB7DEB7269654 +:104350000FB6F894DEBF0FBECDBFDF91CF910895A9 +:104360001F93CF93DF93C091DD0316E08091DE03AE +:10437000C81799F0D0E01C9FF0011D9FF00D11248B +:10438000E152FC4F4081518162817381848195812A +:104390000E94A0212196C770E9CFDF91CF911F9194 +:1043A000089540910F045091100460911104709190 +:1043B000120480911304909114040C94A021809114 +:1043C000140482958F7009F054C0809111048823E1 +:1043D00009F44FC08091DD03A091DE0360910F04CA +:1043E000709110044091120450911304B6E08A17A2 +:1043F00009F43FC090E041155105C1F17F3F11F430 +:104400006F3FA1F1B89FF001B99FF00D1124E15267 +:10441000FC4F218172132AC02081621327C02281A0 +:10442000211124C0238134812417350710F4215031 +:104430003109241B350B283C3105C0F420911404AC +:104440002F7020612093140426E0289FF001299FFB +:10445000F00D1124EC51FC4F80818F7080618083BE +:104460008FE094E00E9428210C94B021019687707F +:10447000BECF0895CF92DF92EF92FF920F931F93DA +:10448000CF93DF93CDB7DEB762970FB6F894DEBF58 +:104490000FBECDBF8C0185E0F801DE011D960190B5 +:1044A0000D928A95E1F7D8014C9111965C91119784 +:1044B00012966C9112971396CD90DC9014973091D0 +:1044C0000F047091100480911204909113040097CE +:1044D00009F46BC17F3F19F43F3F09F466C1E090D6 +:1044E0001104EE2009F4C0C020911404C816D906A6 +:1044F00028F0F601E81BF90BCF0104C080959095D8 +:104500008C0D9D1DFF24F394883C910578F0F12CCF +:10451000207F09F0C6C07C2DD98AC88A89890E946B +:1045200091218FE094E00E942821B1C0822F807FEA +:1045300009F046C0751314C0341312C0611110C0C5 +:104540002F702061209314040E94D1218FE094E009 +:104550000E94282180911404D80115968C932EC0B6 +:10456000CD2819F15F3F11F44F3FF9F0F62E61119C +:104570001CC08091DD032091DE0336E0821709F430 +:104580005AC090E0389FF001399FF00D1124E1529C +:10459000FC4F7181571306C07081471303C07281AD +:1045A000711103C001968770E9CFF62E662309F4D6 +:1045B00018C180911404816080931404F12C11C1FE +:1045C000751308C0341306C0611104C0809114042F +:1045D000D801C3C04D875E878D859E856A8B0E94FA +:1045E00067216A898823E1F16623D1F120911404BF +:1045F000822F82958F7090E0029774F080910F0463 +:104600009091100498878F831986DB86CA862C8741 +:10461000CE0107960E94282186E0F801AFE0B4E0C1 +:1046200001900D928A95E1F70E94DF210E94D1212D +:10463000FF24F394D6C04D875E878D859E850E94AA +:104640009B26292F22952F7030E0223031050CF067 +:10465000BCC09F7009F0B6C0805E883008F4C1C04D +:10466000C8010E942821E4CFC816D90608F453C017 +:10467000F601E81BF90BCF01883C910508F450C006 +:10468000F12C7C2DD98AC88A89890E949121EFE07A +:10469000F4E086E0DF011D928A95E9F70E94D121BE +:1046A000A0C0751314C0341312C0611110C08091E2 +:1046B0001404F8018583C8010E94282186E0EFE0F8 +:1046C000F4E0DF011D928A95E9F7FE2C8AC04D8740 +:1046D0005E878D859E856A8B0E9467216A89882303 +:1046E00009F4BECF662309F4BBCF20911404822FB6 +:1046F00082958F7090E002970CF48ECF80910F041A +:10470000909110049A8389831B82DD82CC822E8350 +:10471000CE0101967FCF809590958C0D9D1DACCFDD +:10472000F62E662309F49CCF75132EC034132CC0CB +:104730002091140420FD1FC0822F82958F70D9F024 +:10474000D80115962C9315978F3049F08F5F982FCD +:104750009295907F822F8F70892B15968C93C8012C +:104760000E94282186E0F801AFE0B4E001900D92AC +:104770008A95E1F793CF86E0F801AFE0B4E00190CD +:104780000D928A95E1F72DC04D875E878D859E85B8 +:104790000E946721811140CF809114048160809331 +:1047A0001404C8010E9428211CC0662309F458CFB4 +:1047B0004D875E878D859E850E946721882309F439 +:1047C0004FCF2ACF811148CF0CC0243031050CF0D7 +:1047D00047CF9F7009F440CFF8019581907F09F091 +:1047E0003BCF8F2D62960FB6F894DEBF0FBECDBFC4 +:1047F000DF91CF911F910F91FF90EF90DF90CF90BD +:1048000008951F93CF93DF93CDB7DEB72C970FB6E4 +:10481000F894DEBF0FBECDBF4F83588769877A8774 +:104820008B879C87CE0107960E943A22882369F0E5 +:104830008F8198852A853B85232BF1F19F3F09F0D5 +:1048400063C08F3F09F060C037C086E0FE01379635 +:10485000DE01119601900D928A95E1F76F817885BE +:10486000EA85FB85309741F17F3F11F46F3F21F1DD +:104870002091DE0330E0C9010196877099274091AD +:10488000DD0350E08417950709F447C069837A83F4 +:10489000FD83EC8396E0929FD001939FB00D11248D +:1048A000A152BC4FFE01319601900D929A95E1F70D +:1048B0008093DE030E94B02116E08091DD03909189 +:1048C000DE038917C1F1189FC001112481529C4F4A +:1048D0000E943A22882379F1E091DD031E9FF001C6 +:1048E0001124E152FC4F40815181628173818481A6 +:1048F00095810E94A0218091DD0390E00196877050 +:1049000099278093DD03D9CF4F81588569857A85B2 +:104910008B859C850E94A021CFCF0E94632110929D +:10492000DE031092DD03EFE0F4E086E0DF011D928C +:104930008A95E9F7C1CF2C960FB6F894DEBF0FBE6B +:10494000CDBFDF91CF911F910895EF92FF920F930A +:104950001F93CF93DF938C01009709F46CC0F12C67 +:10496000EE24E394E8012196F8018491843740F421 +:10497000843008F051C0813081F0823019F15BC081 +:10498000853709F444C0A8F19CE7980F903708F0E8 +:1049900052C08F770E94801E41C00E5F1F4FFE01E4 +:1049A000C49180E28C0F883048F4C7708E2D01C00E +:1049B000880FCA95EAF70E94812714C08C2F0E94A5 +:1049C000B81D2DC00E5F1F4FFE01C49180E28C0FF9 +:1049D000883058F4C7708E2D01C0880FCA95EAF749 +:1049E0000E9487270E94A8271AC08C2F0E94801E31 +:1049F00016C00E5F1F4FFE01C491CC2381F08FE9DA +:104A00009FE00197F1F700C00000C150F6CF0E5FA4 +:104A10001F4FFE01F49003C00E94B81D8E018F2D20 +:104A2000882309F49FCFEFE9FFE03197F1F700C049 +:104A300000008150F5CFDF91CF911F910F91FF9032 +:104A4000EF90089508956093190470931A04809369 +:104A50001B0490931C040C944F210F931F930091FF +:104A6000190410911A0420911B0430911C04DC01DC +:104A7000CB01802B912BA22BB32B80931904909305 +:104A80001A04A0931B04B0931C041F910F910C9463 +:104A90004F210F931F930091190410911A04209134 +:104AA0001B0430911C04DC01CB0180239123A22341 +:104AB000B3238093190490931A04A0931B04B0931A +:104AC0001C041F910F910C944F210F931F93009181 +:104AD000190410911A0420911B0430911C04DC016C +:104AE000CB0180279127A227B327809319049093A5 +:104AF0001A04A0931B04B0931C041F910F910C94F3 +:104B00004F2110921504109216041092170410925F +:104B100018040C944F2141E050E060E070E004C0C4 +:104B2000440F551F661F771F8A95D2F740931504CF +:104B30005093160460931704709318040C944F213B +:104B400041E050E060E070E004C0440F551F661F74 +:104B5000771F8A95D2F78091150490911604A09141 +:104B60001704B0911804482B592B6A2B7B2B4093C8 +:104B700015045093160460931704709318040C9452 +:104B80004F2141E050E060E070E004C0440F551F49 +:104B9000661F771F8A95D2F740955095609570955E +:104BA0008091150490911604A0911704B0911804F7 +:104BB000482359236A237B234093150450931604FA +:104BC00060931704709318040C944F2141E050E057 +:104BD00060E070E004C0440F551F661F771F8A9580 +:104BE000D2F78091150490911604A0911704B0910A +:104BF0001804482759276A277B27409315045093A8 +:104C0000160460931704709318040C944F210F93AB +:104C10001F930091150410911604209117043091F0 +:104C20001804DC01CB01802B912BA22BB32B80939A +:104C3000150490931604A0931704B09318041F91C1 +:104C40000F910C944F210F931F9300911504109115 +:104C500016042091170430911804DC01CB01802345 +:104C60009123A223B3238093150490931604A09359 +:104C70001704B09318041F910F910C944F210F93B8 +:104C80001F93009115041091160420911704309180 +:104C90001804DC01CB0180279127A227B32780933A +:104CA000150490931604A0931704B09318041F9151 +:104CB0000F910C944F210895CF92DF92EF92FF92C3 +:104CC0000F931F93CF93DF938C01C0901904D09062 +:104CD0001A04E0901B04F0901C048091150490913C +:104CE0001604A0911704B0911804C82AD92AEA2AF8 +:104CF000FB2ACFE1D0E0D701C6010C2E04C0B69547 +:104D0000A795979587950A94D2F780FF06C0B801BA +:104D10008C2F0E94240D019721F4219760F780E0E9 +:104D200001C08C2FDF91CF911F910F91FF90EF90D9 +:104D3000DF90CF900895CF93DF93EC010E945C2623 +:104D4000BE010E94240DDF91CF910895CB010E94F6 +:104D50009B26089580911D048595859585950895D8 +:104D600080911D048770089598E0899F9001112417 +:104D7000262B20931D040C94A02520911D048095C2 +:104D8000822380931D04982F977069F430E0482F98 +:104D9000552747FD50952417350729F085958595AA +:104DA00085950C94C125089590911D04977081E01C +:104DB00009F480E0089590912D02992321F09091BB +:104DC0002E02911109C020912F0230913002F90179 +:104DD00032969FEF40E01FC0982F96959695969536 +:104DE0009F3050F5E0912F02F0913002E90FF11D54 +:104DF000877021E030E0A90102C0440F551F8A9559 +:104E0000E2F7CA019181892B818308959F3F39F090 +:104E10004F5F4E3041F051915813F8CF0DC05111F2 +:104E2000F7CF942FF5CF9F3F39F0F901E90FF11D2E +:104E300097FDFA9582830895089590912D02992304 +:104E400021F090912E02911109C020912F023091F2 +:104E50003002F9013296205F3F4F1FC0982F969580 +:104E6000969596959F30F0F4E0912F02F0913002E4 +:104E7000E90FF11D877021E030E0A90102C0440F65 +:104E8000551F8A95E2F7CA01809591818923818314 +:104E900008953196E217F30729F090819813F9CF1E +:104EA0001082F7CF089581E090E0E0912F02F09119 +:104EB0003002E80FF91F1082019680319105A9F7A1 +:104EC000089590913104892B809331040895809541 +:104ED0009091310489238093310408951092310414 +:104EE000089590913004892B809330040895809523 +:104EF00090913004892380933004089510923004F7 +:104F0000089590912F04892B80932F040895809504 +:104F100090912F04892380932F04089510922F04D9 +:104F2000089580931E04089510921E0408958091A0 +:104F30002F0290913002FC0131969C01205F3F4F7F +:104F400080E0919191118F5FE217F307D1F70895F7 +:104F5000E0912F02F0913002809131048083E09142 +:104F60002F02F0913002908180913004892B808350 +:104F7000E0912F02F0913002908180912F04892BD3 +:104F8000808380911E04882361F0E0912F02F091CC +:104F900030029081892B80830E9497278111109283 +:104FA0001E0480912F02909130020C948D1C20E001 +:104FB000009739F0AC0141505109842395232F5FAC +:104FC000F7CF822F089580915304843039F11092E5 +:104FD000330420E488E190E00FB6F894A89580931C +:104FE00060000FBE2093600080E00E940E0680E00B +:104FF0000E94FE0D83B7817F846083BF83B7816089 +:1050000083BF7894889583B78E7F83BF88E10FB67E +:10501000F89480936000109260000FBE0895089588 +:10502000089580E00E940E060E940F280E94590EEB +:105030000E9410280E94DE0E91E0811101C090E0D4 +:10504000892F08950E94632180E00E940E060E942D +:10505000902D0E94811C0C94FE0D1F920F920FB692 +:105060000F9211248F939F93AF93BF93809133043A +:10507000811113C08091340490913504A0913604BD +:10508000B09137044196A11DB11D809334049093D3 +:105090003504A0933604B0933704BF91AF919F912C +:1050A0008F910F900FBE0F901F90189582E084BDD6 +:1050B00093E095BD9AEF97BD80936E0008952FB74A +:1050C000F8948091340490913504A0913604B09105 +:1050D00037042FBF0895CF92DF92EF92FF920F9384 +:1050E0001F932FB7F8944091340450913504609188 +:1050F0003604709137042FBF6A017B01EE24FF2430 +:105100008C0120E030E0C016D106E206F30610F470 +:10511000415051099A01281B390BC9011F910F9168 +:10512000FF90EF90DF90CF9008951F920F920FB6EF +:105130000F9211248F939F93AF93BF938091340468 +:1051400090913504A0913604B09137040196A11DC9 +:10515000B11D8093340490933504A0933604B0932A +:105160003704BF91AF919F918F910F900FBE0F9019 +:105170001F9018950E947E19F8942FEF87EA91E608 +:10518000215080409040E1F700C0000087E090EBA4 +:10519000DC0180935E0490935F04A0936004B0935D +:1051A00061049CE088E10FB6F894A89580936000B4 +:1051B0000FBE90936000FFCF0E941B29811102C097 +:1051C0000E94F7280E942629809332040E943329E6 +:1051D00080935C0487FB882780F980932E020E94CD +:1051E0002A29682F70E080E090E00C9423256DEE72 +:1051F0007EEF80E090E00E94473260E082E090E045 +:105200000E94353260E083E090E00E94353260E039 +:1052100084E090E00E94353260E085E090E00E94FA +:10522000353260E086E090E00E9435326FEF87E033 +:1052300090E00C94353280E090E00E942F3221E023 +:105240008D3E9E4F09F020E0822F089582E090E08D +:105250000C94273283E090E00C942732682F83E08F +:1052600090E00C94353284E090E00C942732682F63 +:1052700084E090E00C94353286E090E00C94273284 +:10528000682F86E090E00C94353287E090E00C9433 +:105290002732682F87E090E00C94353280913A04F1 +:1052A00080FF0BC06091340285E0689FB00111243B +:1052B00075956795759567952BC081FF09C06091BD +:1052C000340285E0689FB00111247595679520C070 +:1052D00082FF07C06091340285E0689FB00111240D +:1052E00017C090913B049923D1F060913302961737 +:1052F00088F72091340285E0289F90011124929F25 +:10530000A001939F500D112470E0CA010E940D323C +:105310006038710540F46115710539F002C065E02F +:1053200070E0862F08958FE7089581E008958091B9 +:105330003A0480FF08C06091320270E0759567956D +:105340007595679521C081FF06C06091320270E0BB +:105350007595679519C082FF04C06091320270E0B4 +:1053600010C090913B049923C1F0609131029617CF +:10537000A0F780913202899FC001112470E00E9441 +:105380000D326038710528F46115710521F0862F02 +:1053900008958FE7089581E0089561E070E0F4CF0B +:1053A000803F21F40E944E29819504C0813F29F459 +:1053B0000E944E2980933E040895823F21F40E946A +:1053C0004E29819504C0833F29F40E944E29809381 +:1053D0003D040895893F19F40E94972905C08A3F2A +:1053E00031F40E949729819580933F0408958B3F63 +:1053F00021F40E949729819504C08C3F29F40E94D2 +:105400009729809340040895843F21F480913C04BF +:10541000816017C0853F21F480913C04826011C0F7 +:10542000863F21F480913C0484600BC0873F21F4C7 +:1054300080913C04886005C0883F31F480913C0431 +:10544000806180933C0408958D3F21F480913A045B +:1054500081600BC08E3F21F480913A04826005C0C8 +:105460008F3F29F480913A04846080933A04089530 +:10547000803F39F480913E0487FF6CC010923E0457 +:1054800069C0813F29F480913E041816BCF362C0C4 +:1054900090913D04823F29F497FF5CC010923D0437 +:1054A00059C0833F19F41916CCF354C0893F41F415 +:1054B00080913F0418160CF04DC010923F044AC072 +:1054C0008A3F29F480913F0487FF44C0F6CF8B3F89 +:1054D00039F48091400487FF3DC0109240043AC0E7 +:1054E0008C3F29F4809140041816BCF333C0843FEC +:1054F00021F480913C048E7F17C0853F21F4809178 +:105500003C048D7F11C0863F21F480913C048B7F49 +:105510000BC0873F21F480913C04877F05C0883F02 +:1055200031F480913C048F7E80933C0413C08D3F06 +:1055300021F480913A048E7F0BC08E3F21F480913C +:105540003A048D7F05C08F3F29F480913A048B7F08 +:1055500080933A0480913D0481110EC080913E04F5 +:1055600081110AC080913F04811106C080914004DE +:10557000811102C010923B0408958CE394E00E94D4 +:10558000981C0E945F2890933904809338040895F2 +:105590001F93CF93DF9380913804909139040E9438 +:1055A0006B28AC0190913B04992321F020913502A6 +:1055B00030E006C0209136028AE0289F9001112435 +:1055C0004217530708F486C080913D04C0913E0401 +:1055D000D0913F0410914004811107C0C11176C0E1 +:1055E000D11174C0111172C075C09F3F19F09F5F37 +:1055F00090933B04181624F40E944E2980933D0496 +:1056000080913D0487FF05C00E944E2981958093BB +:105610003D041C1624F40E944E2980933E04809180 +:105620003E0487FF05C00E944E29819580933E0469 +:1056300060913D04662339F1C0913E04CC2319F1F9 +:10564000772767FD7095872F972F0E942F2F23E3D1 +:1056500033E343E35FE30E943F300E94FC2E6093FC +:105660003D046C2F772767FD7095872F972F0E9439 +:105670002F2F23E333E343E35FE30E943F300E9495 +:10568000FC2E60933E041D1624F40E9497298093FB +:105690003F0480913F0487FF05C00E9497298195B0 +:1056A00080933F04111624F40E94972980934004AC +:1056B0008091400487FF05C00E94972981958093BF +:1056C0004004DF91CF911F910C94BD2A9F3F09F0B8 +:1056D0008ECF96CFDF91CF911F910895ECE3F4E048 +:1056E00085E0DF011D928A95E9F710923B04109244 +:1056F0003A040895833081F128F4813059F08230E2 +:10570000D1F00895853009F449C0B8F1863009F424 +:1057100056C0089580913602262F30E0280F311DA3 +:105720002F3F310524F4680F6093360208958FEF00 +:1057300080933602089580913502262F30E0280F9D +:10574000311D2F3F310524F4680F60933502089511 +:105750008FEF80933502089580913402262F30E038 +:10576000280F311D2F3F310524F4680F6093340258 +:1057700008958FEF80933402089580913302262F8D +:1057800030E0280F311D2F3F310524F4680F60935E +:10579000330208958FEF809333020895809132028F +:1057A000262F30E0280F311D2F3F310524F4680FDC +:1057B0006093320208958FEF8093320208958091B2 +:1057C0003102262F30E0280F311D2F3F310524F400 +:1057D000680F6093310208958FEF8093310208952E +:1057E000833011F128F4813049F0823091F008952E +:1057F000853081F120F18630C1F108958091360223 +:10580000681720F4861B80933602089510923602A2 +:10581000089580913502681720F4861B8093350225 +:10582000089510923502089580913402681720F48B +:10583000861B80933402089510923402089580915B +:105840003302681720F4861B809333020895109268 +:105850003302089580913202681720F4861B8093EA +:105860003202089510923202089580913102681731 +:1058700020F4861B8093310208951092310208951E +:105880000F931F93873208F048C08E3108F08DC007 +:10589000803109F477C008F5873009F461C068F4F5 +:1058A000863009F09DC080913204817F8E7F809385 +:1058B000320481E08093420494C08B3009F489C0A3 +:1058C0008E3009F08DC08091320482FB222720F9AE +:1058D00091E0922790FB82F95EC0863109F479C08D +:1058E00060F4813109F07CC00E94632190912E0206 +:1058F00081E0892780932E026CC0893109F469C048 +:105900008B3109F06DC08091320481FB222720F990 +:1059100091E0922790FB81F93EC0883309F459C089 +:1059200050F4893209F457C0853309F454C08732E2 +:1059300009F451C055C0833409F44DC028F48A33AA +:1059400008F44EC0895332C0883409F049C00E941F +:1059500063210E940E0F0E9495080E94BA2839C048 +:1059600090913204892F8095817080FB90F929F005 +:10597000966098609093320434C0997F977F90939B +:10598000320427C08091320483FB222720F991E062 +:10599000922790FB83F9809332049923D1F0809170 +:1059A000320481608093320414C08D5141E050E094 +:1059B00060E070E08A019B0104C0000F111F221FEC +:1059C000331F8A95D2F7C901B8010E9423250E948E +:1059D000632181E006C061E070E080E090E0F5CFF7 +:1059E00080E01F910F91089580E0089580E0089570 +:1059F000CF93C82F80914204813069F018F0823033 +:105A0000C9F184C0E0912F02F0913002808182328E +:105A100009F07EC007C0E0912F02F0913002808132 +:105A2000823261F48C2F0E94F42C811104C08C2FDF +:105A30000E94402C1DC081E090E01AC08C2F0E9473 +:105A4000F62C811114C0C43179F048F4CB3079F0D0 +:105A5000C03109F061C082E08093420408C0C932BD +:105A600019F0C83321F058C01092420455C081E0AB +:105A7000817054C0C93291F120F5C43179F1B0F48C +:105A8000C73009F047C08EE18093360282E38093ED +:105A900035028AE08093340284E18093330288E007 +:105AA0008093320288E28093310234C0CE51C630F6 +:105AB00088F5EC2FF0E0EA50FD4F8081809341049F +:105AC00029C0CE34E9F020F4CB3421F56AE013C0CC +:105AD000C13579F0C235F1F461E00DC08091410427 +:105AE000882319F01092410415C081E0809342048C +:105AF00015C061E006C0809141040E947A2B0AC063 +:105B00006AE0809141040E94F02B04C0109242048C +:105B100080E004C081E002C080E0AACFCF91089568 +:105B20000E941B29811102C00E94F7280E943C2973 +:105B300080935D0480FF02C0869501C080E00C94D4 +:105B40000E0680915D04982F9695292F30E0233022 +:105B500031054CF49F5F990F8170892B8160809390 +:105B60005D040E94402980915D0486950C940E0688 +:105B700080915D04982F969591F09158990F8170BE +:105B8000892B80935D048E7F91E009F490E08091F1 +:105B90005D0490FB80F980935D040E944029809110 +:105BA0005D0486950C940E0680915D04982F909567 +:105BB00090FB80F980935D040E94402980915D04F0 +:105BC00080FF02C0869501C080E00C940E06909183 +:105BD0005D04892F86958F5F8F779170843028F4CC +:105BE000880F892B80935D0402C090935D0480919F +:105BF0005D048E7F91E009F490E080915D0490FB5C +:105C000080F980935D040E94402980915D0486950F +:105C10000C940E0620915D04922F96958927982F5B +:105C2000990F822F8170892B80935D048E7F91E084 +:105C300009F490E080915D0490FB80F980935D040D +:105C40000E94402980915D0486950C940E068091F7 +:105C50005D04869508955058BB27AA270ED0D1C160 +:105C6000C2D130F0C7D120F031F49F3F11F41EF4BF +:105C7000B7C10EF4E095E7FB9FC1E92FD3D180F3C4 +:105C8000BA17620773078407950718F071F49EF539 +:105C9000EBC10EF4E0950B2EBA2FA02D0B01B9012C +:105CA00090010C01CA01A0011124FF27591B99F092 +:105CB000593F50F4503E68F11A16F040A22F232F9E +:105CC000342F4427585FF3CF469537952795A795EE +:105CD000F0405395C9F77EF41F16BA0B620B730B95 +:105CE000840BBAF09150A1F0FF0FBB1F661F771F06 +:105CF000881FC2F70EC0BA0F621F731F841F48F4BB +:105D0000879577956795B795F7959E3F08F0B3CF40 +:105D10009395880F08F09927EE0F9795879508952A +:105D200027D108F481E008950CD06BC163D140F015 +:105D30005AD130F021F45F3F19F03EC1511195C1A5 +:105D40004FC170D198F39923C9F35523B1F3951B33 +:105D5000550BBB27AA2762177307840738F09F5F8C +:105D60005F4F220F331F441FAA1FA9F333D00E2EFB +:105D70003AF0E0E830D091505040E695001CCAF768 +:105D800029D0FE2F27D0660F771F881FBB1F26172D +:105D900037074807AB07B0E809F0BB0B802DBF0100 +:105DA000FF2793585F4F2AF09E3F510568F004C1CA +:105DB0005CC15F3FECF3983EDCF386957795679581 +:105DC000B795F7959F5FC9F7880F911D96958795B1 +:105DD00097F90895E1E0660F771F881FBB1F6217D0 +:105DE00073078407BA0720F0621B730B840BBA0B8E +:105DF000EE1F88F7E095089504D06894B11135C17D +:105E0000089518D188F09F5790F0B92F9927B7516E +:105E1000A0F0D1F0660F771F881F991F1AF0BA956E +:105E2000C9F712C0B13081F01FD1B1E008951CC193 +:105E3000672F782F8827B85F39F0B93FCCF3869564 +:105E400077956795B395D9F73EF4909580957095C1 +:105E500061957F4F8F4F9F4F0895E89409C097FB3E +:105E60003EF490958095709561957F4F8F4F9F4F31 +:105E70009923A9F0F92F96E9BB279395F695879575 +:105E800077956795B795F111F8CFFAF4BB0F11F438 +:105E900060FF1BC06F5F7F4F8F4F9F4F16C08823DF +:105EA00011F096E911C0772321F09EE8872F762F15 +:105EB00005C0662371F096E8862F70E060E02AF056 +:105EC0009A95660F771F881FDAF7880F9695879542 +:105ED00097F9089588D018F011F08CD038F480C06C +:105EE000C4C0E92F9FD0B0F35523C9F3E7FB621775 +:105EF000730784079507A8F199F3E92FFF278823F3 +:105F00002AF03197660F771F881FDAF7952F5527EC +:105F1000442332F091505040220F331F441FD2F7D8 +:105F2000BB27E91BF50B621B730B840BB109C1F294 +:105F300022F4620F731F841FB11D31972AF0660F80 +:105F4000771F881FBB1FEFCF915050405AF041F090 +:105F5000882332F0660F771F881F91505040C1F799 +:105F6000939530C08695779567959F5FD9F7F8CF61 +:105F7000990F0008550FAA0BE0E8FEEF161617065A +:105F8000E807F907C0F012161306E407F50798F0C2 +:105F9000621B730B840B950B39F40A2661F0232BDB +:105FA000242B252B21F408950A2609F4A140A69557 +:105FB0008FEF811D811D089597F99F6780E870E03C +:105FC00060E008959F3F31F0915020F487957795D8 +:105FD0006795B795880F911D9695879597F90895C0 +:105FE0009FEF80EC089500240A94161617061806F1 +:105FF0000906089500240A941216130614060506CD +:106000000895092E0394000C11F4882352F0BB0F5D +:1060100040F4BF2B11F460FF04C06F5F7F4F8F4FC0 +:106020009F4F089557FD9058440F551F59F05F3FFB +:1060300071F04795880F97FB991F61F09F3F79F0AA +:1060400087950895121613061406551FF2CF46952C +:10605000F1DF08C0161617061806991FF1CF8695AE +:106060007105610508940895E894BB276627772792 +:10607000CB0197F908957CDF08F48FEF08950BD0DA +:10608000C0CFB1DF28F0B6DF18F0952309F094CF28 +:10609000A7CF1124EACFC6DFA0F3959FD1F3950FC8 +:1060A00050E0551F629FF001729FBB27F00DB11D9C +:1060B000639FAA27F00DB11DAA1F649F6627B00D2C +:1060C000A11D661F829F2227B00DA11D621F739F15 +:1060D000B00DA11D621F839FA00D611D221F749F23 +:1060E0003327A00D611D231F849F600D211D822F6A +:1060F000762F6A2F11249F5750408AF0E1F08823B1 +:106100004AF0EE0FFF1FBB1F661F771F881F9150BD +:106110005040A9F79E3F510570F04ECFA6CF5F3F8C +:10612000ECF3983EDCF3869577956795B795F795F0 +:10613000E7959F5FC1F7FE2B880F911D9695879578 +:1061400097F90895FA01EE0FFF1F309621053105EA +:1061500099F16115710561F48038BFE39B0749F13E +:1061600068949038810561F08038BFEF9B0741F05B +:10617000992342F5FF3FE1053105210511F1E8942E +:106180000894E795D901AA2329F4AB2FBE2FF85F15 +:10619000D0F310C0FF5F70F4A695E0F7F73950F028 +:1061A00019F0FF3A38F49F779F930CD00F9007FCBB +:1061B000905808953EF014CF60E070E080E89FE3CF +:1061C00008954FE79F775F934F933F932F939ED010 +:1061D0002F913F914F915F9152DF05C019F40EF05E +:1061E000EBCE42CFFDCE26DFC8F39638C0F707F8D6 +:1061F0000F92E8942BE33AEA48EB5FE74EDF0F9209 +:106200000F920F924DB75EB70F92C0D0E6E2F1E069 +:1062100016D04F915F91EF91FF91E595EE1FFF1F13 +:1062200049F0FE57E0684427EE0F441FFA95E1F766 +:106230004195550B32D00F9007FE26C00895DF938D +:10624000CF931F930F93FF92EF92DF927B018C010C +:10625000689405C0DA2EEF011EDFFE01E894A591D7 +:106260002591359145915591AEF3EF0106DDFE0183 +:106270009701A801DA9479F7DF90EF90FF900F91E2 +:106280001F91CF91DF9108959B01AC0160E070E018 +:1062900080E89FE349CD90CE95CECCDEE8F39923FC +:1062A000D9F3940F511DBBF39150504094F059F025 +:1062B000882332F0660F771F881F91505040C1F736 +:1062C0009E3F510544F7880F911D9695879597F944 +:1062D00008955F3FACF0983E9CF0BB27869577957C +:1062E0006795B79508F4B1609395C1F7BB0F58F760 +:1062F00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF69 +:10630000B4CE0EF05FCE6CCE689456CE93DEC8F35A +:106310009923D1F3C6F3DF93CF931F930F93FF928B +:10632000C92FDD2788232AF02197660F771F881F42 +:10633000DAF720E030E040E85FEB9FE3883920F0B7 +:10634000803E30F021968F7787DCEEE4F1E003C0E9 +:1063500083DCEBE7F1E073DF8B01BE01EC01FB2E88 +:106360006F5771097595771F880B990B78DD28E1B8 +:1063700032E741E35FE38FDEAF2D9801AE01FF907E +:106380000F911F91CF91DF9178DC3BCEFA01DC01B8 +:10639000AA0FBB1F9B01AC01BF5728F4222733274C +:1063A000442750781FC0B75188F4AB2F002446957E +:1063B00037952795011CA395D2F3002069F0220F91 +:1063C000331F441FB395DAF30DD045CC613071050E +:1063D000A0E88A07B94630F49B01AC01662777270D +:1063E00088279078309621F020833183428353832D +:1063F0000895AA1BBB1B51E107C0AA1FBB1FA6170C +:10640000B70710F0A61BB70B881F991F5A95A9F75D +:1064100080959095BC01CD01089597FB072E16F449 +:10642000009407D077FD09D00E94F93107FC05D010 +:106430003EF4909581959F4F0895709561957F4F9B +:106440000895EE0FFF1F0590F491E02D0994F9993E +:10645000FECF92BD81BDF89A992780B50895A8E135 +:10646000B0E042E050E00C944F32262FF999FECF75 +:1064700092BD81BDF89A019700B4021639F01FBA97 +:1064800020BD0FB6F894FA9AF99A0FBE08950196B6 +:10649000272F0E9436320C943532DC01CB01FC01EF +:1064A000F999FECF06C0F2BDE1BDF89A319600B46D +:0E64B0000D9241505040B8F70895F894FFCF78 +:1064BE000AA7CF44000000410000DC440000004168 +:1064CE00000000000000804000005C4500004041DC +:1064DE00000000000000804052D0244500004041E2 +:1064EE000AA7CF44000000410000DC440000004138 +:1064FE00000000000000804052D0244500004041C2 +:10650E00000000000000804000005C45000040419B +:10651E000AA7CF44000000410000DC440000004107 +:10652E00000000000000804052D024450000404191 +:10653E0000000000000080400AA74F4500004041C7 +:10654E000AA7CF44000000410000DC4400000041D7 +:10655E00000000000000804052D0244500000041A1 +:10656E0000000000000080405CFF38450000004144 +:10657E00000000000000804052D024450000004181 +:10658E000AA7CF44000000410000DC440000004197 +:10659E00000000000000804052D0244500008041E1 +:1065AE0053D024450000404160970A450000004149 +:1065BE0054D0A444000000410000DC44000000411F +:1065CE0060970A450000A041640007000CFF000020 +:1065DE00003F6485151316F015BC15881501011FB3 +:1065EE00042808140A321E0002040507090B0C0EBB +:1065FE001011131517181A1C1D1F212324262829C4 +:10660E002B2D2F3032343537393B6966207965733F +:10661E000A097065616E7574206275747465720A0C +:10662E00656C73650A097269636520736E61636BCD +:10663E0073001F0F03764F5F6F7F496943790959C6 +:10664E0053633149803F5D8B803FF8BF803FCAE185 +:10665E00803F73ED803FCAE1803FF8BF803F5D8B86 +:10666E00803F3149803F0000803FF16D7F3F75EAEA +:10667E007E3F4C827E3F833F7E3F84287E3F833F1A +:10668E007E3F4C827E3F75EA7E3FF16D7F3F00007C +:10669E00803F3F4D3639DF0A920A5C0A230AB6095B +:1066AE00CF09E809010A01020304050607080900DB +:00000001FF diff --git a/keyboard/planck/keymaps/experimental/planck_experimental.hex b/keyboard/planck/keymaps/experimental/planck_experimental.hex new file mode 100644 index 0000000000..76984a07cc --- /dev/null +++ b/keyboard/planck/keymaps/experimental/planck_experimental.hex @@ -0,0 +1,1645 @@ +:100000000C948F050C94D3050C94D3050C94D30554 +:100010000C94D3050C94D3050C94D3050C94D30500 +:100020000C94D3050C94D3050C94F9190C94CB1AA9 +:100030000C942D280C94D3050C94D3050C94D30563 +:100040000C94D3050C9486060C94D3050C94D3051C +:100050000C94D3050C9495280C94D3050C94D305DB +:100060000C94D3050C94D3050C94D3050C94D305B0 +:100070000C94D3050C94D3050C94D3050C94D305A0 +:100080000C94DB0F0C94D3050C94D3050C94D3057E +:100090000C94D3050C94D3050C94D3050C94D30580 +:1000A0000C94D3050C94D3050C94D305EE060007ED +:1000B000140726072E074407920792079207920714 +:1000C0009207920752078107381B5A1B481C5A1B7C +:1000D000481C9F1BC21B481C171C2A1C141F141FE2 +:1000E000431F431F821FA21FF820F820AD1FF820D6 +:1000F0005D205D20C420CD20F820F2206A206A20F7 +:100100006A206A206A206A206A206A206A206A209F +:100110006A206A206A206A206A206A207A20882061 +:100120008F209620A02007634236B79BD8A71A39A4 +:10013000685618AEBAAB558C1D3CB7CC5763BD6D35 +:10014000EDFD753EF6177231BF000000803F0800DC +:100150000000BE922449123EABAAAA2ABECDCCCC46 +:100160004C3E00000080BEABAAAAAA3E00000000E0 +:10017000BF000000803F0000000000084178D3BBB2 +:100180004387D1133D190E3CC3BD4282AD2B3E685F +:10019000EC8276BED98FE1A93E4C80EFFFBE01C450 +:1001A000FF7F3F0000000000000000000000000092 +:1001B000000000010204060A0F17202C3A4A5D7164 +:1001C000879DB3C7DAE9F5FCFFFCF5E9DAC7B39D13 +:1001D00087715D4A3A2C20170F0A060402010000BD +:1001E00000000000000000002B0014001A000800AE +:1001F000150017001C0018000C00120013002A0044 +:10020000290004001600070009000A000B000D0079 +:100210000E000F0033003400E1001D001B0006003B +:1002200019000500110010003600370038002800C2 +:100230000530E000E200E30003302C002C00043025 +:100240005000510052004F002B0014001A0009000A +:1002500013000A000D000F0018001C0033002A00D4 +:100260002900040015001600170007000B001100FC +:1002700008000C0012003400E1001D001B00060005 +:10028000190005000E001000360037003800280065 +:100290001450E000E200E30003302C002C00043096 +:1002A0005000510052004F002B0034003600370040 +:1002B00013001C0009000A00060015000F002A00A8 +:1002C000290004001200080018000C0007000B00B1 +:1002D0001700110016003800E100330014000D0073 +:1002E0000E001B00050010001A0019001D00280058 +:1002F0000530E000E200E30003302C002C00043065 +:100300005000510052004F0035021E021F02200211 +:1003100021022202230224022502260227022A00A9 +:100320004C003A003B003C003D003E003F002D02E7 +:100330002E022F0230023102010040004100420033 +:100340004300440045003202640201000100010044 +:100350000100010001000100010001000100010095 +:10036000AB00AA00A900AE0035001E001F0020004F +:1003700021002200230024002500260027002A0057 +:100380004C003A003B003C003D003E003F002D0089 +:100390002E002F00300031000100400041004200DB +:1003A000430044004500320032000100010001001A +:1003B0000100010001000100010001000100010035 +:1003C000AB00AA00A900AE001E001E001E001E0009 +:1003D0001E001E001E001E001E001E001E001E002D +:1003E000000014001A000800150017001C00180077 +:1003F0000C00120013002F0000000400160007007C +:1004000009000A000B000D000E000F00330034003D +:100410000D3000000000060019000000000011006F +:1004200010000000000000000000000000000000BC +: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 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E00000000000000000000100005001000100B6 +:1007F00001000100010001000100010001004C00A6 +:10080000010001000100205021501350125000300F +:10081000013002300C3001000100275026502350D7 +:10082000245028502950010001000100010001005E +:1008300001000100010001000100010001000100B0 +:1008400001000100010001000000000000000000A4 +:100850002A2B28000000000000000000000000001B +:1008600000000029000000002C1E34202122243426 +:100870002627252E362D3738271E1F2021222324F8 +:1008800025263333362E37381F0405060708090A94 +:100890000B0C0D0E0F101112131415161718191A30 +:1008A0001B1C1D2F3130232D350405060708090AAE +:1008B0000B0C0D0E0F101112131415161718191A10 +:1008C0001B1C1D2F3130354C0000000000000000C3 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000101010101010002 +:1008F00001010101000000000000000000000000F4 +:1009000000000100010001010101010101010101DB +:1009100001010101010101010101010101010101C7 +:1009200001010100000001010000000000000000C2 +:1009300000000000000000000000000000000000B7 +:100940000000000101010100280354006800650057 +:10095000200050006C0061006E0063006B002000FE +:100960004B006500790062006F0061007200640056 +:1009700000002C034F007200740068006F006C00D0 +:1009800069006E0065006100720020004B00650088 +:10099000790062006F006100720064007300000063 +:1009A0000403090409026D00040100A0FA0904000F +:1009B000000103010100092111010001223F00078C +:1009C00005810308000A090401000103010200096E +:1009D0002111010001224D000705820308000A09C8 +:1009E0000402000103000000092111010001223668 +:1009F000000705830308000A09040300010300003F +:100A000000092111010001223900070584031000AB +:100A1000011201100100000008EDFE6060010001FC +:100A200002000105010906A101050719E029E715E2 +:100A30000025019508750181020508190129059510 +:100A400005750191029501750391010507190029AA +:100A50007715002501957875018102C0050109808F +:100A6000A101850216010026B7001A01002AB7006D +:100A7000751095018100C0050C0901A101850316BF +:100A80000100269C021A01002A9C02751095018122 +:100A900000C005010902A1010901A1000509190110 +:100AA000290515002501950575018102950175033C +:100AB00081010501093009311581257F95027508ED +:100AC000810609381581257F950175088106050C79 +:100AD0000A38021581257F950175088106C0C00579 +:100AE000010906A101050719E029E715002501956F +:100AF0000875018102950175088101050819012910 +:100B00000595057501910295017503910105071978 +:100B10000029FF150025FF950675088100C01124E6 +:100B20001FBECFEFDAE0DEBFCDBF04B603FE24C0A8 +:100B300080915E0490915F04A0916004B091610483 +:100B40008730904BA740B04BB9F410925E041092DE +:100B50005F04109260041092610414BE84B7877F12 +:100B600084BF88E10FB6F894809360001092600013 +:100B70000FBEE0E0F8E3099513E0A0E0B1E0EEEB92 +:100B8000F4E602C005900D92A030B107D9F714E049 +:100B9000A0E0B3E001C01D92AE35B107E1F70E94BD +:100BA0003F170C945D320C94000081E00895089585 +:100BB0000C94AF070C94D5050C94D7050E94272EF2 +:100BC000811105C010920203109201030DC081E251 +:100BD00090E00090030302C0880F991F0A94E2F787 +:100BE000909302038093010382E08093000380913D +:100BF0006F00826080936F00089590916F0081E094 +:100C0000911101C080E008950E94272E23E030E07A +:100C1000281B3109220F209304030895282F2F98B1 +:100C200080918000211108C0877F809380001092FE +:100C30008D0010928C001BC0886080938000233050 +:100C400019F48FEF9FEF0FC083E090E0821B9109B2 +:100C5000880F991F2FEF3FEFA90102C056954795C6 +:100C60008A95E2F7CA0190938D0080938C000C94D2 +:100C70000406CF93C82F0E94FD05409103038823EB +:100C800029F090916F009D7F90936F00C0930303B4 +:100C90008823D1F0209101033091020302C03695E0 +:100CA00027954A95E2F72F733327C90102C0880FB1 +:100CB000991FCA95E2F790930203809301038091F4 +:100CC0006F00826080936F00CF9108950E940406A8 +:100CD00084E080930303109200030895279A2F98CD +:100CE0008FEF9FEF90938700809386008AE0809338 +:100CF000800089E1809381000E94902D0C9466060B +:100D00000E946E066E9A769A0C9497071F920F9225 +:100D10000FB60F9211242F933F938F939F93EF93CE +:100D2000FF93E0910103F0910203CF0101969093AC +:100D30000203809301030090030302C0F695E79538 +:100D40000A94E2F7EF7380910003823019F4E032E5 +:100D500051F404C0813039F4EF3329F480916F00ED +:100D60008D7F80936F00F0E0E855FE4FE49121E025 +:100D700031E0E29FC001E39F900D11240090040335 +:100D800002C0969587950A94E2F790938D00809320 +:100D90008C00FF91EF919F918F913F912F910F9038 +:100DA0000FBE0F901F901895CF93DF93EC010E9418 +:100DB0002E29BE0180E090E0DF91CF910C94232595 +:100DC0000F931F93462F50E04E30510508F0AAC0F4 +:100DD000DC01FA01EA5AFF4F0C94213212968C91F1 +:100DE000882309F49FC000E010E0980140E064E02F +:100DF00070E080ED91E00E94591381E090E011C015 +:100E000012968C91882309F48DC000E010E09801BF +:100E100040E066E070E080E691E00E94591382E0D5 +:100E200090E00E94D4067EC012968C91882309F42B +:100E300079C000E010E0980140E068E070E080E9EF +:100E400091E00E94591384E090E0EBCF12968C91D0 +:100E5000882311F083E007C083E013C012968C91C1 +:100E6000882371F084E00E94A02582E00E94390668 +:100E70000E94DE0540E164E083E00E94BE0D52C0A6 +:100E800084E00E94C125F6CF12968C91882331F020 +:100E900085EE0E94B81D0E94E72D44C085EE0E9499 +:100EA000801E40C012968C918823E1F10E940E0FA3 +:100EB00000E010E0980140E066E070E080E391E03F +:100EC0000E94591384E00E94C12583E00E94C1253D +:100ED00080E10E94C12585E00E94A0250E941B2977 +:100EE000811102C00E94F7280E94332990E090935C +:100EF0005D0480935C04806880935C040E943729C1 +:100F000011C012968C91882369F000E010E09801DE +:100F100040E066E070E080E091E00E94591385E0D7 +:100F20000E94C12580E090E01F910F9108950F93DA +:100F30001F932FEF89EF90E0215080409040E1F720 +:100F400000C0000000E010E0980140E065E070E0C3 +:100F500080EF91E00E9459131F910F9108958091A5 +:100F60001003882309F45AC080910E0390910F0357 +:100F70000E946B288D3291400CF450C010921003E7 +:100F80000E9414088091080390910903099781F445 +:100F900080910A0390910B03892B51F480910C03EB +:100FA00090910D03892B21F48AE592E00E941508A7 +:100FB0008091080390910903049791F480910A03AA +:100FC00090910B03469761F480910C0390910D036F +:100FD000892B31F48BE00E94B81D8BE00E94801EAB +:100FE00080910803909109030497C1F480910A034A +:100FF00090910B03469791F480910C0390910D030F +:10100000079761F483EE0E94B81D86E10E94B81D27 +:1010100086E10E94801E83EE0C94801E089581E07C +:1010200008950C940F08089508950F931F93CF937C +:101030008C01F80124912223F9F030E0F901E85BFA +:10104000F74FC491F901E853F74F2491222359F047 +:1010500081EE0E94B81D8C2F0E94B81D8C2F0E941B +:10106000801E81EE04C08C2F0E94B81D8C2F0E9420 +:10107000801E0F5F1F4FDDCFCF911F910F910895FD +:101080000C94800680915503882309F448C0809110 +:10109000110390911203009779F40E945F289093B6 +:1010A0001203809311038091130390E0009771F471 +:1010B0008091140390E00AC00E946B2820911802CE +:1010C000309119022817390740F329C00197880F7A +:1010D000991F880F991FFC01EB5EFC4F60817181A5 +:1010E000828193810E94410FE091130384E0E89F85 +:1010F000F0011124EB5EFC4F60817181828193814C +:101100004FE050E00E94F9128091130390E00196A5 +:101110006091140370E00E940D32809313030C94CD +:10112000D805109257030C940E0F0895089581E08E +:10113000809357030C949608089508958F929F9278 +:10114000AF92BF92EF92FF920F931F93CF93DF93D3 +:10115000CDB7DEB7A3970FB6F894DEBF0FBECDBFF5 +:101160007C01FC0100811181C8010E945C26B8014C +:101170000E94A00A8C01B7010E941108882309F47B +:10118000CCC10032F0E51F0741F4F70182818823CA +:1011900009F458C00E94F013C0C10132F0E51F07E6 +:1011A00041F4F7018281882309F44CC00E94F913AD +:1011B000B4C10232F0E51F0751F4F70182818823A0 +:1011C00009F440C00E94EC138111F0CFE3CF033249 +:1011D000F0E51F0739F4F7018281882399F10E9415 +:1011E00097089BC10432F0E51F0739F4F7018281AB +:1011F000882341F10E94910890C10532F0E51F0754 +:1012000049F4F70182818823E9F080915703811125 +:10121000F1CFE5CF0632F0E51F0739F4F7018281FF +:10122000882381F00E9400140AC00732F0E51F07EE +:1012300049F4F7018281882329F00E940B140E944F +:101240009D086BC180915703811105C0F701828110 +:101250008111CFC018C1003E110579F4F7018281D8 +:10126000882309F44DC00E940E0F81E0809356033D +:10127000109255031092140350C1023E110559F407 +:10128000F70182818823E1F10E940E0F109256032C +:101290001092550342C1033E110591F4F70182817A +:1012A000882371F10E940E0F1092560381E0809303 +:1012B00055031092130310921203109211032DC1C3 +:1012C0000235110559F4F7018281882309F425C1FB +:1012D00080911802909119020A970DC001351105ED +:1012E00079F4F7018281882309F417C180911802EB +:1012F000909119020A9690931902809318020DC1D9 +:1013000040911C0283E2E7E3F2E0DE0111960190D6 +:101310000D928A95E1F7F701808121E030E02C0FF2 +:101320003D1F280F311DC90120911A0230911B0267 +:10133000FC01E20FF31F6081772767FD7095640F52 +:10134000711D882777FD8095982F0E942F2F20E010 +:1013500030E040E451E40E94942E4B015C01F7011F +:10136000218184E090E0821B9109BC01882777FDF0 +:101370008095982F0E942F2F9B01AC01C501B401CD +:101380000E942C2E9B01AC0160E070E080E090E4B4 +:101390000E94A23020E030E04CED50E40E943F304B +:1013A0004B015C01F70182818823D1F04FE050E0CE +:1013B000C501B4010E94F912809156038823A1F05F +:1013C0008091140324E0829FF0011124EB5EFC4F16 +:1013D00080829182A282B3828F5F8093140304C0C3 +:1013E000C501B4010E94410F0F3F110508F02ECF37 +:1013F00094C08091100381111FC0043130E51307A0 +:1014000009F051C00E94130881E0809310030E94EC +:101410005F2890930F0380930E031092070310929E +:1014200009031092080310920B0310920A03109202 +:101430000D0310920C0371C080910E0390910F0365 +:101440000E946B28883C910570F480910703E82F77 +:10145000F0E0EE0FFF1FE85FFC4F118300838F5F0A +:10146000809307035AC0043880E5180721F0053837 +:10147000104501F13AC0F7018281882341F01092B2 +:10148000050382E01EC0043830E5130759F580914A +:101490000503811106C086E20E94B81D86E20E9403 +:1014A000801E82E01CC00438F0E51F0741F30538B8 +:1014B0001045D9F4F7018281882331F01092060398 +:1014C00080E20E94CF1E29C080910603811106C0D0 +:1014D00087E20E94B81D87E20E94801E80E20E947F +:1014E000D61E1BC00538104529F381E08093050303 +:1014F00080930603C701A3960FB6F894DEBF0FBE14 +:10150000CDBFDF91CF911F910F91FF90EF90BF90D2 +:10151000AF909F908F900C94DA0580E0A3960FB661 +:10152000F894DEBF0FBECDBFDF91CF911F910F9119 +:10153000FF90EF90BF90AF909F908F900895089587 +:101540009CE0799FF001112490E3899FE00DF11D4B +:101550001124E60FF11DEE0FFF1FE851FE4F85919C +:1015600094910895880F991FFC01E859FF4F8591C8 +:1015700094910895880F991FFC01E851FE4F8591C1 +:10158000949108950F931F93CF93DF93EC018115EE +:1015900021E39207A0F5C11580E3D80708F0D7C072 +:1015A000C83ED105D8F4C03ED10508F007C2C83AFC +:1015B000D10578F4C53AD10508F06AC0C130D1052B +:1015C00009F463C008F4F7C1C430D10508F0F6C1CE +:1015D000F2C1CB3BD10508F466C0EDC1C11590E264 +:1015E000D90708F0AFC0C11521E0D20708F0E6C165 +:1015F000C03FD10508F4DFC18E0110651FC2C0389D +:1016000080E5D80700F5C03790E5D90708F0A3C0FA +:10161000C11520E5D20709F4ACC050F4CE019054B6 +:1016200080319F4008F0C7C1DF708E01106A06C28A +:10163000C13080E5D80709F4AEC0C43190E5D907C0 +:1016400008F4AFC0B8C1C33820E5D20709F48EC092 +:1016500050F4C13890E5D90709F482C008F083C07E +:1016600000E011EDEBC1C03181E5D80708F4A3C15A +:10167000C11597E5D90708F436C1CE0190578115F9 +:10168000904108F098C1DF7093C101E010E0D6C12D +:10169000C53AD10509F494C1C63AD10509F093C100 +:1016A00002E810E4CBC1C83AD10509F48FC1C93AA8 +:1016B000D10509F48EC1CA3AD10509F48DC1CB3ADE +:1016C000D10509F48CC1CC3AD10509F48BC1CD3ACE +:1016D000D10509F48AC1C03BD10509F489C1CE3ACC +:1016E000D10509F488C1CF3AD10509F487C1C13BBE +:1016F000D10509F486C1C23BD10509F485C1C33BBC +:10170000D10509F484C1C43BD10509F483C1C53BAB +:10171000D10509F482C1C63BD10509F481C1C73B9B +:10172000D10509F480C1C83BD10509F47FC1C93B8B +:10173000D10509F47EC1CA3BD10509F47DC100E0A1 +:1017400014E47CC1CE019F700E94BA0A78C1DD27E3 +:101750008E01106C73C1CF70DD278E01146D6EC1C8 +:1017600000E010ED6BC100E012ED68C100E013ED88 +:1017700065C10E9463210E940E0F0E9495088FEFA1 +:1017800094E32CE0815090402040E1F700C000003D +:101790000E94BA2853C18091320481608093320440 +:1017A0004DC10E941B29811102C00E94F7280E948E +:1017B000332990E090935D0480935C04C23080E50F +:1017C000D80721F480915C04816086C0C43090E524 +:1017D000D90721F480915C0482607EC0C63020E588 +:1017E000D20721F480915C04846076C0C83080E523 +:1017F000D80719F480915C0427C0CA3090E5D90756 +:1018000021F480915C04806167C0CC3020E5D20770 +:1018100021F480915C0480625FC0CE3080E5D807FF +:1018200021F480915C04806457C0C03190E5D907F1 +:1018300021F480915C0480684FC0C23120E5D2075A +:1018400029F480915C048460886046C0C33080E5E0 +:10185000D80721F480915C048E7F3EC0C53090E5AE +:10186000D90721F480915C048D7F36C0C73020E514 +:10187000D20721F480915C048B7F2EC0C93080E5B3 +:10188000D80719F480915C0426C0CB3090E5D907C5 +:1018900021F480915C048F7E1FC0CD3020E5D207FB +:1018A00021F480915C048F7D17C0CF3080E5D8078C +:1018B00021F480915C048F7B0FC0C13190E5D90782 +:1018C00021F480915C048F7707C0C331D04531F497 +:1018D00080915C048B7F877F80935C0480915C04A3 +:1018E0000E943729ABC08D2F99278F70992781309F +:1018F0009105D9F49E012370332702C0880F991FE8 +:101900002A95E2F79C688E0144E0000F111F4A956A +:10191000E1F700271370802B912B53E0CC0FDD1FD4 +:101920005A95E1F7C076DD272FC08230910531F45A +:10193000DC2FCC278E01016F106A80C083309105A7 +:1019400069F4CE018370992701E010E002C0000F16 +:10195000111F8A95E2F7C8019C680FC08430910579 +:10196000B9F4CE018370992701E010E002C0000FA6 +:10197000111F8A95E2F7C8019A6823E0CC0FDD1F9A +:101980002A95E1F7C07ED7708C010C2B1D2B56C019 +:101990008530910531F4DC2FCC278E01046F106A5D +:1019A0004DC0069709F04AC0CF71DD27DC2FCC2748 +:1019B0008E01106243C000E010E040C08E013EC0C6 +:1019C00001E810E43BC003E810E438C002EE14E480 +:1019D00035C009EE14E432C00AEE14E42FC005EB62 +:1019E00014E42CC006EB14E429C007EB14E426C071 +:1019F0000CEC14E423C00DEC14E420C003E815E45F +:101A00001DC00AE815E41AC002E915E417C004E98C +:101A100015E414C001E216E411C003E216E40EC09E +:101A200004E216E40BC005E216E408C006E216E480 +:101A300005C007E216E402C00AE216E4C801DF911D +:101A4000CF911F910F9108959CE0799FF00111248F +:101A500090E3899FE00DF11D1124E60FF11DEE0FBB +:101A6000FF1FE851FE4F85919491803E9105E0F46F +:101A7000803C910558F58133910509F46FC048F415 +:101A80008932910509F463C08A32910509F46DC069 +:101A900072C089339105E9F082389105D1F0853320 +:101AA000910509F44DC067C0833E910581F138F47A +:101AB000803E9105B9F0823E9105D9F05CC0863E2A +:101AC000910561F1873E9105A1F155C00E94B20ACE +:101AD000089520915C0420FD02C021FF4CC080EEDF +:101AE00090E049C080915C0480FFF9CF89E390E0E9 +:101AF00042C080915C0482FF0EC080915C0484FF30 +:101B000003C080E090E037C083EE90E034C0809165 +:101B10005C0482FFF2CF82EE90E02DC080915C04E5 +:101B200083FF0BC080915C0484FDEBCF87EE90E0D7 +:101B300022C080915C0483FFF5CF86EE90E01BC04D +:101B400080915C0485FF07C089E290E014C0809119 +:101B50005C0485FFF9CF85E390E00DC080915C04C3 +:101B600086FF07C08AE290E006C080915C0486FF91 +:101B7000F9CF81E390E00E94C20A0895CF92DF92EC +:101B8000EF92FF920F931F9301E010E020E030E00E +:101B90006801790104C0CC0CDD1CEE1CFF1C8A9589 +:101BA000D2F704C0000F111F221F331F6A95D2F70E +:101BB0000C291D292E293F29C0901504D090160408 +:101BC000E0901704F0901804C022D122E222F32200 +:101BD000842FC016D106E206F30641F41F910F913F +:101BE000FF90EF90DF90CF900C94A0251F910F9164 +:101BF000FF90EF90DF90CF900C94C1250C94DC0502 +:101C0000E82FF0E0E257FD4F8081E82FEF70F0E021 +:101C100082958F7021E030E0A90102C0440F551F6A +:101C20008A95E2F740A308950F931F93CF93DF9314 +:101C300085B7806885BF85B7806885BFC3E0D0E081 +:101C400001E010E0FE01E257FD4F8081E82FEF70C8 +:101C5000F0E021A182958F70A80102C0440F551FAA +:101C60008A95E2F7CA01822B81A38C2F0E94000E75 +:101C7000219740F78BE090E061E070E0FC01EE57C7 +:101C8000FD4F2081E22FEF70F0E042A122952F70EE +:101C9000DB0102C0AA0FBB1F2A95E2F79D01242B8E +:101CA00022A3019758F7DF91CF911F910F910C94C8 +:101CB0004008EF92FF920F931F93CF93DF9300E6BC +:101CC00013E0C3E0EE24E394F12CD5E08C2F0E94C6 +:101CD000000E8BE090E040E050E0FC01EE57FD4F3D +:101CE0006081E62FEF70F0E020A130E062956F7028 +:101CF00002C0359527956A95E2F720FD09C0970146 +:101D0000082E02C0220F331F0A94E2F7422B532BF6 +:101D1000019718F7F801929182918F018417950726 +:101D200021F051834083D0931D028C2F0E94000E1E +:101D3000C15060F680911D0287FD2CC081508093B8 +:101D40001D028F3F39F08FE99FE00197F1F700C046 +:101D5000000020C080915E0390915F039093670321 +:101D60008093660380915C0390915D03909365037B +:101D70008093640380915A0390915B039093630373 +:101D8000809362038091580390915903909361036B +:101D9000809360030E94420881E0DF91CF911F9100 +:101DA0000F91FF90EF900895E82FF0E0EE0FFF1FE6 +:101DB000E05AFC4F80819181089508950F931F93FD +:101DC000CF9308E613E0C0E0F801929182918F0171 +:101DD0000E94D727C80FF3E000361F07A9F78C2F02 +:101DE000CF911F910F9108950E941B29811102C06C +:101DF0000E94F7280E944529809347043E9A8091CB +:101E000071008D7F8093710082E0809390008AE161 +:101E10008093910081E080936A03089580916A0322 +:101E2000811102C00E94F40E1092BA031092B903FD +:101E3000809171008D7F80937100809190008F73ED +:101E40008093900010927C0310927B031092B30356 +:101E50001092B4031092B5031092B6031092B2031D +:101E60001092B103E1E9F3E0A1E8B3E0119211921D +:101E7000119211921D921D9283E0E13BF807B1F798 +:101E80000895CF92DF92EF92FF920F931F93CF931B +:101E9000DF9320917B03222309F484C06B017C0132 +:101EA00080916A03811102C00E94F40E01EB13E0DD +:101EB000C7E0D0E0A7019601F8019291829172915A +:101EC00062918F010E94902E811131C0FE01EE0FB0 +:101ED000FF1FEE0FFF1FEF56FC4F10821182128280 +:101EE0001382DE01AA0FBB1FAF57BC4F11961C9285 +:101EF0001E92C730D105E9F0219644815581668153 +:101F000077814083518362837383148215821682A2 +:101F1000178212968D919C91139711969C938E9394 +:101F200013961C921E92129734961296E2CF219726 +:101F300008F68091B9039091BA03019797FD05C007 +:101F40009093BA038093B90304C01092BA0310921D +:101F5000B9038091B9039091BA032091B7033091EE +:101F6000B8032817390724F01092B8031092B7036A +:101F7000892BC1F4809171008D7F809371008091D5 +:101F800090008F73809390001092B3031092B4036B +:101F90001092B5031092B6031092B2031092B103DF +:101FA00010927B03DF91CF911F910F91FF90EF90E3 +:101FB000DF90CF9008951F920F920FB60F921124C9 +:101FC0004F925F926F927F928F929F92AF92BF9249 +:101FD000CF92DF92EF92FF922F933F934F935F93B5 +:101FE0006F937F938F939F93AF93BF93CF93DF9321 +:101FF000EF93FF9380917B03882309F49BC1C091E9 +:10200000B903D091BA031C161D060CF093C1409081 +:102010006B0350906C0360906D0370906E0320E032 +:1020200030E0A901C301B2010E943B3018160CF048 +:1020300065C0C130D10509F452C08091B7039091B9 +:10204000B803BE010E940D327C019093B8038093C7 +:10205000B70380907D0390907E03A0907F03B090A3 +:10206000800320E030E040E85FE3C501B4010E9456 +:102070002C2E60937D0370937E0380937F03909357 +:102080008003F701EE0FFF1FEE0FFF1FEF56FC4F0F +:10209000A301920160817181828193810E94942EBB +:1020A00020E030E040E05EE30E943F309B01AC0165 +:1020B000C501B4010E943B3018168CF4C70101968B +:1020C000BE010E940D329093B8038093B703109223 +:1020D0007D0310927E0310927F0310928003E091A3 +:1020E000B703F091B803EE0FFF1FEE0FFF1FEF567F +:1020F000FC4F6081718182819381D0C0C090B30315 +:10210000D090B403E090B503F090B60320E030E047 +:10211000A901C701B6010E94902E2197882309F4D6 +:10212000A2C0FE01EE0FFF1FEE0FFF1FEF56FC4F88 +:1021300080809180A280B380A5019401C701B6017F +:102140000E94902E87FF31C0A501940160E070E0ED +:102150008CED93EC0E94942E20E030E040E451E4BA +:102160000E94942E20E030E040E05FE30E943F3088 +:102170009B01AC0160E070E080E090E40E94A2303E +:102180009B01AC01C501B4010E943F309B01AC0131 +:10219000C701B6010E94902E87FF07C0A7019601D4 +:1021A00060E070E08CED93E439C0A5019401C701B3 +:1021B000B6010E943B3018160CF055C0A5019401E1 +:1021C00060E070E08CED93E40E94942E20E030E01B +:1021D00040E451E40E94942E20E030E040E05FE3D0 +:1021E0000E943F309B01AC0160E070E080E090E431 +:1021F0000E94A2309B01AC01C501B4010E943F3096 +:102200009B01AC01C701B6010E943B3018165CF57A +:10221000A701960160E070E08CED93EC0E94942E93 +:1022200020E030E040E451E40E94942E20E030E0D1 +:1022300040E05FE30E943F309B01AC0160E070E052 +:1022400080E090E40E94A2309B01AC01C701B6017E +:102250000E943F306093B3037093B4038093B5033F +:102260009093B60313C0FE01EE0FFF1FEE0FFF1F8A +:10227000EF56FC4F80819181A281B3818093B3039B +:102280009093B403A093B503B093B6036091B303E6 +:102290007091B4038091B5039091B60320916803C7 +:1022A000309169032F3F4FEF340731F02F5F3F4FDD +:1022B00030936903209368030E9416146B017C011C +:1022C00020E034E244EF51E40E94902E87FF08C0E2 +:1022D00086EFC82E88E2D82E84EFE82E81E4F82E0F +:1022E00020E030E040E051E4C701B6010E943F30F9 +:1022F0009B01AC0160E074E284E79BE40E94942EB1 +:102300006B017C010E94012F7093970060939600EF +:1023100020911E0230911F02409120025091210213 +:10232000C701B6010E943F300E94012F70939900AF +:102330006093980080917C03882309F433C1C09096 +:102340007703D0907803E0907903F0907A0320E04F +:1023500030E0A901C701B6010E943B301816D4F540 +:1023600080916803909169038F3F2FEF920729F0C6 +:1023700001969093690380936803C701B6010E9498 +:10238000161420E030E040E051E40E943F309B0111 +:10239000AC0160E074E284E79BE40E94942E6B0140 +:1023A0007C010E94012F709397006093960020910A +:1023B0001E0230911F024091200250912102C7015C +:1023C000B6010E943F300E94012F709399006093E4 +:1023D000980008C0109297001092960010929900F1 +:1023E0001092980060917103709172036F5F7F4F3C +:1023F000709372036093710320919600309197005F +:1024000080E090E0232BF1F0C0919600D0919700EE +:102410000E942D2F6B017C01BE0180E090E00E94A4 +:102420002D2F9B01AC016091730370917403809117 +:102430007503909176030E94942E20E03FEF4FE7C2 +:1024400057E410C00E942D2F6B017C0120E030EE7C +:102450004FEF54E46091730370917403809175039E +:10246000909176030E943F309B01AC01C701B601F9 +:102470000E943B3087FD96C080916F038F5F8093F1 +:102480006F0390E020914304309144048217930736 +:10249000A0F080914E04882319F010926F030DC0B4 +:1024A000809171008D7F80937100809190008F7377 +:1024B0008093900010927C037DC080917003C09146 +:1024C0006F03811128C0C0904804D0904904E09067 +:1024D0004A04F0904B0420E030E0A901C701B601A6 +:1024E0000E943B301816BCF481E080937003109278 +:1024F0007703109278031092790310927A03C092B6 +:102500007303D0927403E0927503F0927603C15086 +:10251000C0936F0343C0109270031092690310922E +:102520006803E0914504F091460448E0C49FE00D43 +:10253000F11D112480819181A281B3818093770361 +:1025400090937803A0937903B0937A0320E030E06E +:1025500040E85EE364817581868197810E943F3007 +:102560006B017C0180912202682F70E080E090E096 +:102570000E942D2F20E030E048EC52E40E94942E7F +:102580009B01AC01C701B6010E943F306093730309 +:102590007093740380937503909376031092720383 +:1025A000109271038091470480FD04C010927C0357 +:1025B00010927B03FF91EF91DF91CF91BF91AF918B +:1025C0009F918F917F916F915F914F913F912F914B +:1025D000FF90EF90DF90CF90BF90AF909F908F9043 +:1025E0007F906F905F904F900F900FBE0F901F9055 +:1025F0001895CF92DF92EF92FF92CF93DF936B010A +:102600007C01EA0180916A03811102C00E94F40EEC +:102610008091470480FF46C08091B9039091BA032E +:1026200008970CF03FC0809171008D7F80937100FE +:1026300080917C0381110E940E0F81E080937B03C7 +:10264000109269031092680320E030E0A901C701ED +:10265000B6010E943B301816DCF48091B9039091CA +:10266000BA03FC01EE0FFF1FEE0FFF1FEF56FC4FEA +:10267000C082D182E282F382FC01EE0FFF1FEF578E +:10268000FC4FD183C08301969093BA038093B90322 +:1026900080917100826080937100809190008068C9 +:1026A00080939000DF91CF91FF90EF90DF90CF90DB +:1026B00008958F929F92AF92BF92CF92DF92EF9246 +:1026C000FF920F931F93CF93DF93EC017B01D42EE6 +:1026D0004801590180916A03811102C00E94F40EE1 +:1026E0008091470480FF6BC0809171008D7F809343 +:1026F000710080917B0381110E940E0F81E0809315 +:102700007C03D0934604C0934504F0924404E092C5 +:102710004304D0924E048092480490924904A092BF +:102720004A04B0924B0410927D0310927E031092E3 +:102730007F031092800310926F0388819981AA8190 +:10274000BB818093770390937803A0937903B09330 +:102750007A0320E030E040E85EE36C817D818E8189 +:102760009F810E943F306B017C0180912202682F83 +:1027700070E080E090E00E942D2F20E030E048ECF7 +:1027800052E40E94942E9B01AC01C701B6010E9445 +:102790003F30609373037093740380937503909339 +:1027A000760310927203109271038091710082601F +:1027B0008093710080919000806880939000DF91F9 +:1027C000CF911F910F91FF90EF90DF90CF90BF902E +:1027D000AF909F908F9008958091470481700895E5 +:1027E000809147048160809347040E9449290C949A +:1027F0009C08809147048E7F809347040C9449295C +:102800008091BB0390E0019666E070E00E940D327B +:102810008093BB0308958091BB0390E0019766E02D +:1028200070E00E940D328093BB0308958F929F92B7 +:10283000AF92BF92CF92DF92EF92FF920F931F93CE +:10284000CF93DF936B017C01C0916803D091690342 +:10285000BE0180E090E00E942D2F4B015C01A7019A +:10286000960160E070E08CE594E40E94942E9B0158 +:10287000AC01C501B4010E943F300E94012F20919C +:10288000BB03233009F473C028F4222351F0213014 +:10289000E9F02CC1243009F4A0C0253009F4E0C0CF +:1028A00025C180E090E0A0E0BFE380931E029093FA +:1028B0001F02A0932002B093210210926B0310928A +:1028C0006C0310926D0310926E0310C110926B0393 +:1028D00010926C0310926D0310926E0364317105B7 +:1028E00040F46A30710560F520E030E040E85EE3D6 +:1028F0002BC0693C710508F0AAC080E090E00E94FE +:102900002D2F20E030E040EA51E40E942B2E20E001 +:1029100030E044E353E40E94942E9B01AC010E94FA +:102920003F3020E030E040E05EE30E943F309B011A +:10293000AC0160E070E080E09EE30E942B2E44C07A +:1029400020E030E040E05FE3C701B6010E943F3085 +:102950006B017C0180E090E0A0E0BEE380931E026A +:1029600090931F02A0932002B0932102BFC0109247 +:102970006B0310926C0310926D0310926E034AE089 +:10298000469F9001479F300D1124C90168EB7BE001 +:102990000E94F931BC016C5D754077FF03C07195F1 +:1029A00061957109882777FD8095982F0E942F2FB8 +:1029B0002EE333EC4EE259E30E943F3020E030E05A +:1029C00040EC5EE30E942C2E60931E0270931F0267 +:1029D000809320029093210289C010926B03109281 +:1029E0006C0310926D0310926E03CE0183709927D1 +:1029F000892BE1F0BE016170772780E090E00E94B2 +:102A00002D2F20E030E040E05EE30E943F3020E0E8 +:102A100030E040E45FE30E942C2E60931E0270932E +:102A20001F0280932002909321020CC080E090E06E +:102A3000A0E0BFE380931E0290931F02A0932002A8 +:102A4000B0932102C770DD27CD2B09F04FC0109243 +:102A50001E0210921F02109220021092210246C004 +:102A600010926B0310926C0310926D0310926E0320 +:102A700000E010E020E03FE300931E0210931F02ED +:102A800020932002309321026739710578F180E0AC +:102A900090E00E942D2F20E030E047E153E40E94B7 +:102AA0002B2E20E030E04AE754E40E94942E20E0F0 +:102AB00030E048E452E40E943F3020E030E040EA59 +:102AC00051E40E94712F0E94FC2E660F771F660F43 +:102AD000771FFB01EE56FD4F2081318142815381EA +:102AE000C701B6010E943F306B017C01C701B601EE +:102AF000DF91CF911F910F91FF90EF90DF90CF90DA +:102B0000BF90AF909F908F9008958091CC030895CF +:102B1000CF93DF9300D01F92CDB7DEB79C01809199 +:102B20005304843019F593E099833B832A8390936F +:102B3000E9008FEF9091E800815095FD06C095ED7A +:102B40009A95F1F700008111F5CF8091E80085FF9B +:102B50000DC040E050E063E070E0CE0101960E94BD +:102B6000E9178091E8008E778093E8000F900F902E +:102B70000F90DF91CF910895CF93DF9300D01F92F4 +:102B8000CDB7DEB720915304243021F522E029830C +:102B90009B838A8383E08093E9008FEF9091E80024 +:102BA000815095FD06C095ED9A95F1F700008111D1 +:102BB000F5CF8091E80085FF0DC040E050E063E074 +:102BC00070E0CE0101960E94E9178091E8008E77AF +:102BD0008093E8000F900F900F90DF91CF910895B0 +:102BE000209153042430F1F422E02093E9002FEFE8 +:102BF0003091E800215035FD06C035ED3A95F1F7EA +:102C000000002111F5CF2091E80025FF0BC040E026 +:102C100050E065E070E00E94E9178091E8008E774F +:102C20008093E8000895CF93DF93EC0190915304D3 +:102C3000943009F046C080912D028823D9F080910C +:102C40002E028823B9F09093E9008FEF9091E8006D +:102C5000815095FD06C095E19A95F1F7000081112C +:102C6000F5CF8091E80085FF2CC040E050E060E1A6 +:102C700070E017C081E08093E9008FEF9091E80049 +:102C8000815095FD06C095ED9A95F1F700008111F0 +:102C9000F5CF8091E80085FF14C040E050E068E087 +:102CA00070E0CE010E94E9178091E8008E77809352 +:102CB000E80080E1FE01ACEBB3E001900D928A9553 +:102CC000E1F7DF91CF91089580915204811109C0FD +:102CD0000E947E190E94DB198091E200846080933B +:102CE000E2000895109252040895089508950C94F6 +:102CF000222842E061EC81E00E94F81842E061EC99 +:102D000082E00E94F81842E061EC83E00E94F8182B +:102D100042E161EC84E00C94F81880915504833012 +:102D200009F455C030F4813071F0823009F48EC05E +:102D300008958A3009F47AC08B3009F460C0893074 +:102D400009F09CC020C080915404813A09F096C0DB +:102D50008091E800877F8093E800809158049091EB +:102D60005904892B21F460E18CEB93E003C060E00F +:102D700080E090E070E00E9434188091E8008B774A +:102D80008093E800089580915404813209F076C060 +:102D90008091580490915904009719F0039709F015 +:102DA0006DC08091E800877F8093E8008091E80003 +:102DB00082FD05C0809153048111F8CF5FC08091DE +:102DC000F1008093CC038091E8008B7753C0809111 +:102DD0005404813A09F052C08091580490915904EA +:102DE000892B09F04BC08091E800877F8093E80031 +:102DF0008091E80080FFFCCF80912D0236C0809149 +:102E000054048132D9F58091580490915904892B4A +:102E1000A9F58091E800877F8093E8000E942D1932 +:102E20008091560480932D020C9463218091540468 +:102E3000813221F58091E800877F8093E8000E942D +:102E40002D19809157048093CD03089580915404E7 +:102E5000813AA1F48091E800877F8093E800809117 +:102E6000E80080FFFCCF8091CD038093F10080913A +:102E7000E8008E778093E8000C942D19089584B7AC +:102E8000877F84BF88E10FB6F8948093600010922A +:102E900060000FBE90E080E80FB6F8948093610068 +:102EA000909361000FBE0E94D01C0E947E190E9468 +:102EB000DB198091E20084608093E20078940E94A4 +:102EC000611C0E94D21C83E292E00E947C1C8091D3 +:102ED0005304853069F40E94E327809151048823CC +:102EE000B1F30E941128882391F30E94D317EFCFEA +:102EF0000E94DA1CECCF292F332723303105C9F08B +:102F000064F42130310581F02230310509F043C0ED +:102F10008DE690E024EA39E042C021323105F1F03B +:102F20002232310541F137C082E190E021E13AE0FF +:102F300036C099278130910541F08230910541F0EA +:102F4000892B49F5E0EAF9E005C0E2E7F9E002C0C3 +:102F5000E8E4F9E0849190E09F0121C06430D8F466 +:102F6000E62FF0E0EE0FFF1FE251FD4F208131818F +:102F700089E090E014C0643070F470E0FB01EE0F63 +:102F8000FF1FEA51FD4F20813181FB01EE51FD4FC2 +:102F9000808190E004C080E090E020E030E0FA0121 +:102FA00031832083089580E189BD82E189BD09B420 +:102FB00000FEFDCF8091D8008F7D8093D800809156 +:102FC000E00082608093E0008091E00081FDFCCF12 +:102FD0000895CF92DF92EF92FF920F931F93CF93BA +:102FE000DF93EC018B016A010E944C19811133C0FF +:102FF000C114D10439F0F60180819181081B190BAD +:10300000C80FD91FE12CF12C0115110519F1809180 +:10301000E80085FD16C08091E8008E778093E80077 +:10302000C114D10449F0F60180819181E80EF91EA6 +:10303000F182E08285E00FC00E944C19882321F3C1 +:103040000AC089918093F10001501109FFEFEF1A36 +:10305000FF0ADACF80E0DF91CF911F910F91FF90AF +:10306000EF90DF90CF90089520915A0430915B0447 +:103070002617370748F06115710539F42091E800EB +:103080002E772093E80001C0B90140E06115710579 +:10309000A9F120915304222309F443C0253009F4F7 +:1030A00042C02091E80023FD40C02091E80022FDAD +:1030B00032C02091E80020FFE9CF4091F300209139 +:1030C000F20030E0342BFC01CF016115710559F09D +:1030D0002830310540F481918093F10061507109ED +:1030E0002F5F3F4FF1CF41E02830310509F040E03C +:1030F0002091E8002E772093E800C8CF4111C9CF76 +:103100000AC080915304882361F0853061F080917A +:10311000E80083FD0AC08091E80082FFF2CF80E0E2 +:10312000089582E0089583E0089581E00895209154 +:103130005A0430915B042617370748F06115710572 +:1031400039F42091E8002E772093E80001C0B901FE +:10315000FC0120E06115710591F1809153048823F1 +:1031600009F440C0853009F43FC08091E80083FD38 +:103170003DC08091E80082FD2FC08091E80080FF73 +:10318000E9CF2091F3008091F20090E0922B61153D +:10319000710559F08830910540F424912093F10095 +:1031A0003196615071090196F2CF21E0089709F03C +:1031B00020E08091E8008E778093E800CBCF21114A +:1031C000CCCF0AC080915304882361F0853061F030 +:1031D0008091E80083FD0AC08091E80082FFF2CF71 +:1031E00080E0089582E0089583E0089581E00895E5 +:1031F000982F973058F59093E900981739F070910F +:10320000EC002091ED005091F00003C0242F762FA8 +:1032100050E021FF19C03091EB003E7F3093EB006E +:103220003091ED003D7F3093ED003091EB00316047 +:103230003093EB007093EC002093ED005093F0007E +:103240002091EE0027FF07C09F5FD3CF8F70809340 +:10325000E90081E0089580E008958091540487FF9B +:1032600011C08091E80082FD05C080915304811156 +:10327000F8CF11C08091E8008B770BC08091530488 +:10328000882349F08091E80080FFF8CF8091E80022 +:103290008E778093E80008952091E4003091E50056 +:1032A00095E64091EC00842F817040FF22C0809110 +:1032B000E80080FD1CC080915304882391F0853084 +:1032C00091F08091EB0085FD10C04091E400509199 +:1032D000E5004217530729F39A01915011F784E052 +:1032E000089582E0089583E0089581E0089580E0E4 +:1032F00008954091E80042FFDECF08950E94EC1946 +:103300000E94F419E0EEF0E0808181608083E8EDB6 +:10331000F0E080818F77808319BCA7EDB0E08C91BD +:103320008E7F8C9380818F7E8083109252040895CB +:103330000F931F93CF93DF930E94EC190E94F4190F +:10334000C8EDD0E088818F77888388818068888302 +:1033500088818F7D888319BC1092530410924F048A +:10336000109251041092500400EE10E0F801808198 +:103370008B7F808388818160888342E060E080E089 +:103380000E94F818E1EEF0E080818E7F8083E2EE0B +:10339000F0E0808181608083808188608083F80193 +:1033A00080818E7F8083888180618883DF91CF9147 +:1033B0001F910F910895E8EDF0E080818F7E80836A +:1033C000E7EDF0E080818160808384E082BF81E06E +:1033D000809352040C949819E8EDF0E080818E7F80 +:1033E00080831092E20008951092DA001092E100BA +:1033F00008951F920F920FB60F9211242F933F93AF +:103400004F935F936F937F938F939F93AF93BF93EC +:10341000EF93FF938091E10082FF0BC08091E20067 +:1034200082FF07C08091E1008B7F8093E1000E94C2 +:10343000601C8091DA0080FF1FC08091D80080FF5F +:103440001BC08091DA008E7F8093DA008091D900D2 +:1034500080FF0DC080E189BD82E189BD09B400FE15 +:10346000FDCF81E0809353040E94641605C019BC0F +:10347000109253040E9472168091E10080FF19C0DF +:103480008091E20080FF15C08091E2008E7F8093E2 +:10349000E2008091E20080618093E2008091D80098 +:1034A00080628093D80019BC85E0809353040E9409 +:1034B00076168091E10084FF30C08091E20084FFA5 +:1034C0002CC080E189BD82E189BD09B400FEFDCF39 +:1034D0008091D8008F7D8093D8008091E1008F7E0D +:1034E0008093E1008091E2008F7E8093E2008091E2 +:1034F000E20081608093E20080914F04882311F004 +:1035000084E007C08091E30087FD02C081E001C034 +:1035100083E0809353040E9477168091E10083FF3B +:1035200029C08091E20083FF25C08091E100877F60 +:103530008093E10082E08093530410924F048091C5 +:10354000E1008E7F8093E1008091E2008E7F809386 +:10355000E2008091E20080618093E20042E060E05E +:1035600080E00E94F8188091F00088608093F0005D +:103570000E947516FF91EF91BF91AF919F918F912E +:103580007F916F915F914F913F912F910F900FBE5F +:103590000F901F9018951F920F920FB60F92112443 +:1035A0002F933F934F935F936F937F938F939F934B +:1035B000AF93BF93CF93DF93EF93FF93C091E90055 +:1035C000CF708091EC00D82FD17080FDD0E81092A0 +:1035D000E9008091F000877F8093F00078940E944A +:1035E0000F1B1092E9008091F00088608093F0003A +:1035F000CD2BCF70C093E900FF91EF91DF91CF9178 +:10360000BF91AF919F918F917F916F915F914F91FA +:103610003F912F910F900FBE0F901F9018951F9301 +:10362000CF93DF93CDB7DEB7AA970FB6F894DEBF7E +:103630000FBECDBFE4E5F4E088E08E0F9091F1007D +:1036400091938E13FBCF0E948D168091E80083FF2B +:103650001FC18091540490915504492F50E04A3085 +:10366000510508F015C1FA01EC59FF4F0C942132B5 +:10367000803881F0823809F00BC1809158048F7036 +:103680008093E9008091EB0085FB882780F91092F8 +:10369000E90006C08091500490915104911182601C +:1036A0009091E800977F9093E8008093F10010924A +:1036B000F100C8C0282F2D7F09F0EAC0882319F037 +:1036C000823061F0E5C080915604813009F0E0C09D +:1036D000933009F080E0809351042BC08091560410 +:1036E000811127C0809158048F7009F4D1C0809354 +:1036F000E9002091EB0020FF1CC0933021F4809161 +:10370000EB00806214C09091EB0090619093EB000D +:1037100021E030E0A90102C0440F551F8A95E2F76D +:103720004093EA001092EA008091EB008860809359 +:10373000EB001092E9008091E800877F86C081113C +:10374000A7C0109156041F778091E3008078812BE9 +:103750008093E3008091E800877F8093E8000E94D7 +:103760002D198091E80080FFFCCF8091E3008068F4 +:103770008093E300111102C082E001C083E08093D6 +:10378000530486C08058823008F082C0809156046D +:10379000909157048C3D53E0950779F583E08A8337 +:1037A0008AE289834FB7F894DE01139620E03EE069 +:1037B00051E2E32FF0E050935700E49120FF03C063 +:1037C000E295EF703F5FEF708E2F90E0EA3010F0DF +:1037D000C79601C0C0968D939D932F5F243149F702 +:1037E0004FBF8091E800877F8093E8006AE270E035 +:1037F000CE0101960E94341814C0AE014F5F5F4F96 +:10380000609158040E947B17BC01009709F440C0E6 +:103810009091E800977F9093E80089819A810E94B7 +:1038200097188091E8008B778093E80031C080384A +:1038300079F58091E800877F8093E80080914F04BC +:103840008093F1008091E8008E778093E8000E94D9 +:103850002D191EC081111CC0909156049230C0F4E5 +:103860008091E800877F8093E80090934F040E9446 +:103870002D1980914F04811106C08091E30087FDCE +:1038800002C081E001C084E0809353040E94791655 +:103890008091E80083FF0AC08091E800877F8093D1 +:1038A000E8008091EB0080628093EB00AA960FB64F +:1038B000F894DEBF0FBECDBFDF91CF911F91089569 +:1038C0000895CF93809153048823A1F0C091E9001B +:1038D000CF709091EC00892F817090FD80E8C82B0B +:1038E0001092E9008091E80083FD0E940F1BCF70C9 +:1038F000C093E900CF9108959093D3038093D203AE +:103900000895E091D203F091D303309721F0019014 +:10391000F081E02D099480E00895E091D203F091C8 +:10392000D303309721F00280F381E02D09940895AC +:10393000E091D203F091D303309721F00480F58118 +:10394000E02D099408952091D0033091D10382177E +:10395000930771F09093D1038093D003E091D20349 +:10396000F091D303309721F00680F781E02D099480 +:1039700008952091CE033091CF038217930771F001 +:103980009093CF038093CE03E091D203F091D303C1 +:10399000309721F00084F185E02D09940895089571 +:1039A0000C94CF1C0E9456280E94140E0E94DC2802 +:1039B0000C94902D5F926F927F928F929F92AF9214 +:1039C000BF92CF92DF92EF92FF920F931F93CF930C +:1039D000DF9300D000D01F92CDB7DEB70E94590E02 +:1039E0009DEDC92E93E0D92E03E010E0AA24A39404 +:1039F000B12C502E802F0E94D40E4C01F6017290F3 +:103A000062906F016826792661147104A1F4015057 +:103A1000110978F78FEF89838A831B820E945F28C0 +:103A20008160782F9D838C8349815A816B818D8140 +:103A30000E948A1D38C08091320481FD0E94DD0EF3 +:103A40002BE030E07501022E02C0EE0CFF1C0A9440 +:103A5000E2F7C70186219721892B09F129835A8230 +:103A60008E209F2091E0892809F490E09B830E949A +:103A70005F288160782F9D838C8349815A816B8177 +:103A80008D810E948A1D000F111FF801EB52FC4F1F +:103A900080819181E826F926F182E08204C02150DC +:103AA000310980F6B4CF0E94C82A1091D4030E9435 +:103AB000811C1817D1F00E94811C8093D4030F90B1 +:103AC0000F900F900F900F90DF91CF911F910F915A +:103AD000FF90EF90DF90CF90BF90AF909F908F902E +:103AE0007F906F905F900C94FE0D0F900F900F9051 +:103AF0000F900F90DF91CF911F910F91FF90EF905A +:103B0000DF90CF90BF90AF909F908F907F906F90FD +:103B10005F900895CF93DF93CDB7DEB72B970FB6A5 +:103B2000F894DEBF0FBECDBF4F83588769877A8771 +:103B30008B87DE01119686E0FD0111928A95E9F7E7 +:103B400085E0FE01379601900D928A95E1F7498153 +:103B50005A816B817C818D819E810E9401242B96EC +:103B60000FB6F894DEBF0FBECDBFDF91CF910895A1 +:103B7000CF93882309F4C2C0C82F823859F40E9419 +:103B8000811C81FDBBC089E30E94DB260E94A8271F +:103B900089E30CC0833879F40E94811C80FDAEC09B +:103BA00083E50E94DB260E94A82783E50E941D274B +:103BB000CF910C94A827843859F40E94811C82FD6F +:103BC0009DC087E40E94DB260E94A82787E4EECFF1 +:103BD0008CEF8C0F813A48F48C2F0E94F82C8111C5 +:103BE0008DC08C2F0E94DB26E3CF80E28C0F8830C3 +:103BF00048F4C77081E001C0880FCA95EAF70E94B7 +:103C00006127D6CF8BE58C0F833078F4C53A29F045 +:103C1000C63A31F083E890E005C081E890E002C048 +:103C200082E890E0CF910C94A31C88E58C0F83313F +:103C300008F064C0C83A39F1C93A41F1CA3A49F1C9 +:103C4000CB3A51F1CC3A59F1CD3A61F1C03B69F12F +:103C5000CE3A71F1CF3A79F1C13B81F1C23B89F1A2 +:103C6000C33B91F1C43B99F1C53BA1F1C63BA9F11E +:103C7000C73BB1F1C83BB9F1C93BC1F1CA3BC9F17E +:103C800080E090E038C082EE90E035C089EE90E0B0 +:103C900032C08AEE90E02FC085EB90E02CC086EB1E +:103CA00090E029C087EB90E026C08CEC90E023C028 +:103CB0008DEC90E020C083E891E01DC08AE891E09F +:103CC0001AC082E991E017C084E991E014C081E252 +:103CD00092E011C083E292E00EC084E292E00BC059 +:103CE00085E292E008C086E292E005C087E292E0B9 +:103CF00002C08AE292E0CF910C94B91CCF91089552 +:103D0000882309F44BC0823859F40E94811C81FF3A +:103D100045C089E30E94DB260E94A82789E30CC0E6 +:103D2000833871F40E94811C80FF38C083E50E94B3 +:103D3000DB260E94A82783E50E941D270C94A82754 +:103D4000843859F40E94811C82FF28C087E40E94B5 +:103D5000DB260E94A82787E4EFCF9CEF980F913ACB +:103D600058F390E2980F983050F4877091E001C0BA +:103D7000990F8A95EAF7892F0E946727DFCF9BE585 +:103D8000980F933020F480E090E00C94A31C885AA4 +:103D9000833120F480E090E00C94B91C08958823CE +:103DA00021F00E9461270C94A8270895882321F010 +:103DB0000E9467270C94A82708957F928F929F9264 +:103DC000AF92BF92CF92DF92EF92FF920F931F9329 +:103DD000CF93DF931F92CDB7DEB77C01C62E772E2F +:103DE000FC01058102950F70128111110E947E273E +:103DF0000E94D426882379F0112369F080E28C0D8B +:103E0000883048F082E00E94BD260E94D42691E0CE +:103E1000D82ED92601C0D12CE72DE295EF70F0E025 +:103E2000E259FF4F0C942132872D807F072D0F70B0 +:103E3000882311F00295007F112389F0002309F4F3 +:103E400099C180E28C0D883020F4802F0E94612778 +:103E500003C0802F0E9471270E94A8278BC18C2D40 +:103E60000E94801E002309F4C3C180E28C0D8830BB +:103E700020F4802F0E94672703C0802F0E9477279D +:103E80000E94A827B5C1872D807F972D9F70803213 +:103E900011F4892F03C0892F8295807FCC2021F0D7 +:103EA000F1E0CF16A1F01DC0112339F0002319F164 +:103EB000013009F50E9491279BC1002319F00130C0 +:103EC00009F496C189830E949427898110C1112326 +:103ED00021F0063008F08CC10EC0053008F088C112 +:103EE00006C1112359F0002331F0F701958190FFAD +:103EF00041C19F7095830E94CF1E7AC1002309F4AF +:103F0000F6C03EC1872D86958695837090E0009718 +:103F100019F0019761F06CC1112321F08C2D972DC0 +:103F2000937002C080E090E00E94A31C61C1112345 +:103F300021F08C2D972D937002C080E090E00E94BC +:103F4000B91C56C18C2D112319F00E94D02902C032 +:103F50000E94382A0E94BD2A4BC1872D837009F028 +:103F600052C0111145C18C2D829586958770880F9E +:103F7000880F9C2D9F70892E912CA12CB12C082E7E +:103F800004C0880C991CAA1CBB1C0A94D2F7C4FE5E +:103F900014C00FE010E020E030E0B901A80104C037 +:103FA000440F551F661F771F8A95D2F7CB01BA01C0 +:103FB000609570958095909503C060E070E0CB01AE +:103FC000272D26952695237030E02230310569F0A3 +:103FD0002330310589F0682979298A299B292130E4 +:103FE000310571F00E94492503C1682979298A2980 +:103FF0009B290E946525FCC00E944925C501B4018A +:104000000E942D25F5C0112319F0872D817001C064 +:104010008695882309F4ECC08C2D8295869587704F +:10402000880F880F9C2D9F70892E912CA12CB12C6C +:10403000082E04C0880C991CAA1CBB1C0A94D2F739 +:10404000C4FE14C00FE010E020E030E0B901A80188 +:1040500004C0440F551F661F771F8A95D2F7CB0106 +:10406000BA01609570958095909503C060E070E00E +:10407000CB01272D269526952370422F50E0423004 +:10408000510569F04330510589F0682979298A2959 +:104090009B294130510571F00E942326A9C068294F +:1040A00079298A299B290E943F26A2C00E942326A3 +:1040B000C501B4010E9407269BC08C2D90E0FC0135 +:1040C000E05EF109E531F10508F050C0E258FF4F1C +:1040D0000C9421320C2D0F70872D8F71112321F03C +:1040E0000E94A025802F07CF0E94C125802F0E940B +:1040F000D61E7EC0112341F0053008F079C0872D0F +:104100008F710E94E62574C0063008F071C0F7CFA9 +:10411000112339F0872D8F710E94A02569C01123CA +:10412000C9F3872D8F710E94C12562C0112329F028 +:10413000872D8F710E948B255BC00E94812558C0FE +:10414000112351F0172D1F71812F0E94A02563E0CC +:10415000812F0E94B4264CC081E00E94BD2602300F +:1041600008F446C082E00E94BD2642C0112331F00F +:10417000002381F28C2D0E94B81D3AC0002389F2E1 +:104180008C2D0E94801E34C0472D4F706C2DC701AE +:104190000E94E0060E94A5242BC0111129C0472DC2 +:1041A0004F7050E042305105B9F04CF441155105C3 +:1041B00081F041305105E1F40E94B82D19C043301F +:1041C000510569F04430510599F48C2D0E940A2E56 +:1041D0000FC00E94A12D0CC00E94D42D09C00E94C6 +:1041E000E72D06C0472D4F706C2DC7010E949F0A16 +:1041F000DD20F9F00E94B02680FD1BC0F70112827D +:104200000E94AA260E94A025C7010E9428210E9480 +:10421000AA260F90DF91CF911F910F91FF90EF9001 +:10422000DF90CF90BF90AF909F908F907F900C9435 +:10423000C1250F90DF91CF911F910F91FF90EF90CB +:10424000DF90CF90BF90AF909F908F907F90089518 +:104250000F931F93CF93DF93EC01888199812B817A +:104260003C81232BB9F09F3F11F48F3F99F0CE0191 +:104270000E949E08882371F0688179818A810E945A +:10428000A6268C010E945B260E942225B801CE0141 +:104290000E94DD1EDF91CF911F910F9108950E9422 +:1042A0007E270E948E270E9453270E94A8270E94E3 +:1042B0006E2B0E94BD2A80E090E00E94A31C80E04B +:1042C00090E00C94B91C0E946E270C944F210E9420 +:1042D0009B26292F22952F7030E02C3031054CF48D +:1042E0002A3031056CF42250310922303105A8F40E +:1042F00007C02C30310569F02F30310551F00DC069 +:10430000803F69F018F4803E40F409C0843F29F4EE +:1043100006C093FB882780F9089580E0089581E026 +:104320000895CF93DF9300D000D01F92CDB7DEB7B2 +:104330000F900F900F900F900F90DF91CF910895F5 +:10434000CF93DF9300D000D000D0CDB7DEB7269654 +:104350000FB6F894DEBF0FBECDBFDF91CF910895A9 +:104360001F93CF93DF93C091DD0316E08091DE03AE +:10437000C81799F0D0E01C9FF0011D9FF00D11248B +:10438000E152FC4F4081518162817381848195812A +:104390000E94A0212196C770E9CFDF91CF911F9194 +:1043A000089540910F045091100460911104709190 +:1043B000120480911304909114040C94A021809114 +:1043C000140482958F7009F054C0809111048823E1 +:1043D00009F44FC08091DD03A091DE0360910F04CA +:1043E000709110044091120450911304B6E08A17A2 +:1043F00009F43FC090E041155105C1F17F3F11F430 +:104400006F3FA1F1B89FF001B99FF00D1124E15267 +:10441000FC4F218172132AC02081621327C02281A0 +:10442000211124C0238134812417350710F4215031 +:104430003109241B350B283C3105C0F420911404AC +:104440002F7020612093140426E0289FF001299FFB +:10445000F00D1124EC51FC4F80818F7080618083BE +:104460008FE094E00E9428210C94B021019687707F +:10447000BECF0895CF92DF92EF92FF920F931F93DA +:10448000CF93DF93CDB7DEB762970FB6F894DEBF58 +:104490000FBECDBF8C0185E0F801DE011D960190B5 +:1044A0000D928A95E1F7D8014C9111965C91119784 +:1044B00012966C9112971396CD90DC9014973091D0 +:1044C0000F047091100480911204909113040097CE +:1044D00009F46BC17F3F19F43F3F09F466C1E090D6 +:1044E0001104EE2009F4C0C020911404C816D906A6 +:1044F00028F0F601E81BF90BCF0104C080959095D8 +:104500008C0D9D1DFF24F394883C910578F0F12CCF +:10451000207F09F0C6C07C2DD98AC88A89890E946B +:1045200091218FE094E00E942821B1C0822F807FEA +:1045300009F046C0751314C0341312C0611110C0C5 +:104540002F702061209314040E94D1218FE094E009 +:104550000E94282180911404D80115968C932EC0B6 +:10456000CD2819F15F3F11F44F3FF9F0F62E61119C +:104570001CC08091DD032091DE0336E0821709F430 +:104580005AC090E0389FF001399FF00D1124E1529C +:10459000FC4F7181571306C07081471303C07281AD +:1045A000711103C001968770E9CFF62E662309F4D6 +:1045B00018C180911404816080931404F12C11C1FE +:1045C000751308C0341306C0611104C0809114042F +:1045D000D801C3C04D875E878D859E856A8B0E94FA +:1045E00067216A898823E1F16623D1F120911404BF +:1045F000822F82958F7090E0029774F080910F0463 +:104600009091100498878F831986DB86CA862C8741 +:10461000CE0107960E94282186E0F801AFE0B4E0C1 +:1046200001900D928A95E1F70E94DF210E94D1212D +:10463000FF24F394D6C04D875E878D859E850E94AA +:104640009B26292F22952F7030E0223031050CF067 +:10465000BCC09F7009F0B6C0805E883008F4C1C04D +:10466000C8010E942821E4CFC816D90608F453C017 +:10467000F601E81BF90BCF01883C910508F450C006 +:10468000F12C7C2DD98AC88A89890E949121EFE07A +:10469000F4E086E0DF011D928A95E9F70E94D121BE +:1046A000A0C0751314C0341312C0611110C08091E2 +:1046B0001404F8018583C8010E94282186E0EFE0F8 +:1046C000F4E0DF011D928A95E9F7FE2C8AC04D8740 +:1046D0005E878D859E856A8B0E9467216A89882303 +:1046E00009F4BECF662309F4BBCF20911404822FB6 +:1046F00082958F7090E002970CF48ECF80910F041A +:10470000909110049A8389831B82DD82CC822E8350 +:10471000CE0101967FCF809590958C0D9D1DACCFDD +:10472000F62E662309F49CCF75132EC034132CC0CB +:104730002091140420FD1FC0822F82958F70D9F024 +:10474000D80115962C9315978F3049F08F5F982FCD +:104750009295907F822F8F70892B15968C93C8012C +:104760000E94282186E0F801AFE0B4E001900D92AC +:104770008A95E1F793CF86E0F801AFE0B4E00190CD +:104780000D928A95E1F72DC04D875E878D859E85B8 +:104790000E946721811140CF809114048160809331 +:1047A0001404C8010E9428211CC0662309F458CFB4 +:1047B0004D875E878D859E850E946721882309F439 +:1047C0004FCF2ACF811148CF0CC0243031050CF0D7 +:1047D00047CF9F7009F440CFF8019581907F09F091 +:1047E0003BCF8F2D62960FB6F894DEBF0FBECDBFC4 +:1047F000DF91CF911F910F91FF90EF90DF90CF90BD +:1048000008951F93CF93DF93CDB7DEB72C970FB6E4 +:10481000F894DEBF0FBECDBF4F83588769877A8774 +:104820008B879C87CE0107960E943A22882369F0E5 +:104830008F8198852A853B85232BF1F19F3F09F0D5 +:1048400063C08F3F09F060C037C086E0FE01379635 +:10485000DE01119601900D928A95E1F76F817885BE +:10486000EA85FB85309741F17F3F11F46F3F21F1DD +:104870002091DE0330E0C9010196877099274091AD +:10488000DD0350E08417950709F447C069837A83F4 +:10489000FD83EC8396E0929FD001939FB00D11248D +:1048A000A152BC4FFE01319601900D929A95E1F70D +:1048B0008093DE030E94B02116E08091DD03909189 +:1048C000DE038917C1F1189FC001112481529C4F4A +:1048D0000E943A22882379F1E091DD031E9FF001C6 +:1048E0001124E152FC4F40815181628173818481A6 +:1048F00095810E94A0218091DD0390E00196877050 +:1049000099278093DD03D9CF4F81588569857A85B2 +:104910008B859C850E94A021CFCF0E94632110929D +:10492000DE031092DD03EFE0F4E086E0DF011D928C +:104930008A95E9F7C1CF2C960FB6F894DEBF0FBE6B +:10494000CDBFDF91CF911F910895EF92FF920F930A +:104950001F93CF93DF938C01009709F46CC0F12C67 +:10496000EE24E394E8012196F8018491843740F421 +:10497000843008F051C0813081F0823019F15BC081 +:10498000853709F444C0A8F19CE7980F903708F0E8 +:1049900052C08F770E94801E41C00E5F1F4FFE01E4 +:1049A000C49180E28C0F883048F4C7708E2D01C00E +:1049B000880FCA95EAF70E94812714C08C2F0E94A5 +:1049C000B81D2DC00E5F1F4FFE01C49180E28C0FF9 +:1049D000883058F4C7708E2D01C0880FCA95EAF749 +:1049E0000E9487270E94A8271AC08C2F0E94801E31 +:1049F00016C00E5F1F4FFE01C491CC2381F08FE9DA +:104A00009FE00197F1F700C00000C150F6CF0E5FA4 +:104A10001F4FFE01F49003C00E94B81D8E018F2D20 +:104A2000882309F49FCFEFE9FFE03197F1F700C049 +:104A300000008150F5CFDF91CF911F910F91FF9032 +:104A4000EF90089508956093190470931A04809369 +:104A50001B0490931C040C944F210F931F930091FF +:104A6000190410911A0420911B0430911C04DC01DC +:104A7000CB01802B912BA22BB32B80931904909305 +:104A80001A04A0931B04B0931C041F910F910C9463 +:104A90004F210F931F930091190410911A04209134 +:104AA0001B0430911C04DC01CB0180239123A22341 +:104AB000B3238093190490931A04A0931B04B0931A +:104AC0001C041F910F910C944F210F931F93009181 +:104AD000190410911A0420911B0430911C04DC016C +:104AE000CB0180279127A227B327809319049093A5 +:104AF0001A04A0931B04B0931C041F910F910C94F3 +:104B00004F2110921504109216041092170410925F +:104B100018040C944F2141E050E060E070E004C0C4 +:104B2000440F551F661F771F8A95D2F740931504CF +:104B30005093160460931704709318040C944F213B +:104B400041E050E060E070E004C0440F551F661F74 +:104B5000771F8A95D2F78091150490911604A09141 +:104B60001704B0911804482B592B6A2B7B2B4093C8 +:104B700015045093160460931704709318040C9452 +:104B80004F2141E050E060E070E004C0440F551F49 +:104B9000661F771F8A95D2F740955095609570955E +:104BA0008091150490911604A0911704B0911804F7 +:104BB000482359236A237B234093150450931604FA +:104BC00060931704709318040C944F2141E050E057 +:104BD00060E070E004C0440F551F661F771F8A9580 +:104BE000D2F78091150490911604A0911704B0910A +:104BF0001804482759276A277B27409315045093A8 +:104C0000160460931704709318040C944F210F93AB +:104C10001F930091150410911604209117043091F0 +:104C20001804DC01CB01802B912BA22BB32B80939A +:104C3000150490931604A0931704B09318041F91C1 +:104C40000F910C944F210F931F9300911504109115 +:104C500016042091170430911804DC01CB01802345 +:104C60009123A223B3238093150490931604A09359 +:104C70001704B09318041F910F910C944F210F93B8 +:104C80001F93009115041091160420911704309180 +:104C90001804DC01CB0180279127A227B32780933A +:104CA000150490931604A0931704B09318041F9151 +:104CB0000F910C944F210895CF92DF92EF92FF92C3 +:104CC0000F931F93CF93DF938C01C0901904D09062 +:104CD0001A04E0901B04F0901C048091150490913C +:104CE0001604A0911704B0911804C82AD92AEA2AF8 +:104CF000FB2ACFE1D0E0D701C6010C2E04C0B69547 +:104D0000A795979587950A94D2F780FF06C0B801BA +:104D10008C2F0E94240D019721F4219760F780E0E9 +:104D200001C08C2FDF91CF911F910F91FF90EF90D9 +:104D3000DF90CF900895CF93DF93EC010E945C2623 +:104D4000BE010E94240DDF91CF910895CB010E94F6 +:104D50009B26089580911D048595859585950895D8 +:104D600080911D048770089598E0899F9001112417 +:104D7000262B20931D040C94A02520911D048095C2 +:104D8000822380931D04982F977069F430E0482F98 +:104D9000552747FD50952417350729F085958595AA +:104DA00085950C94C125089590911D04977081E01C +:104DB00009F480E0089590912D02992321F09091BB +:104DC0002E02911109C020912F0230913002F90179 +:104DD00032969FEF40E01FC0982F96959695969536 +:104DE0009F3050F5E0912F02F0913002E90FF11D54 +:104DF000877021E030E0A90102C0440F551F8A9559 +:104E0000E2F7CA019181892B818308959F3F39F090 +:104E10004F5F4E3041F051915813F8CF0DC05111F2 +:104E2000F7CF942FF5CF9F3F39F0F901E90FF11D2E +:104E300097FDFA9582830895089590912D02992304 +:104E400021F090912E02911109C020912F023091F2 +:104E50003002F9013296205F3F4F1FC0982F969580 +:104E6000969596959F30F0F4E0912F02F0913002E4 +:104E7000E90FF11D877021E030E0A90102C0440F65 +:104E8000551F8A95E2F7CA01809591818923818314 +:104E900008953196E217F30729F090819813F9CF1E +:104EA0001082F7CF089581E090E0E0912F02F09119 +:104EB0003002E80FF91F1082019680319105A9F7A1 +:104EC000089590913104892B809331040895809541 +:104ED0009091310489238093310408951092310414 +:104EE000089590913004892B809330040895809523 +:104EF00090913004892380933004089510923004F7 +:104F0000089590912F04892B80932F040895809504 +:104F100090912F04892380932F04089510922F04D9 +:104F2000089580931E04089510921E0408958091A0 +:104F30002F0290913002FC0131969C01205F3F4F7F +:104F400080E0919191118F5FE217F307D1F70895F7 +:104F5000E0912F02F0913002809131048083E09142 +:104F60002F02F0913002908180913004892B808350 +:104F7000E0912F02F0913002908180912F04892BD3 +:104F8000808380911E04882361F0E0912F02F091CC +:104F900030029081892B80830E9497278111109283 +:104FA0001E0480912F02909130020C948D1C20E001 +:104FB000009739F0AC0141505109842395232F5FAC +:104FC000F7CF822F089580915304843039F11092E5 +:104FD000330420E488E190E00FB6F894A89580931C +:104FE00060000FBE2093600080E00E940E0680E00B +:104FF0000E94FE0D83B7817F846083BF83B7816089 +:1050000083BF7894889583B78E7F83BF88E10FB67E +:10501000F89480936000109260000FBE0895089588 +:10502000089580E00E940E060E940F280E94590EEB +:105030000E9410280E94DE0E91E0811101C090E0D4 +:10504000892F08950E94632180E00E940E060E942D +:10505000902D0E94811C0C94FE0D1F920F920FB692 +:105060000F9211248F939F93AF93BF93809133043A +:10507000811113C08091340490913504A0913604BD +:10508000B09137044196A11DB11D809334049093D3 +:105090003504A0933604B0933704BF91AF919F912C +:1050A0008F910F900FBE0F901F90189582E084BDD6 +:1050B00093E095BD9AEF97BD80936E0008952FB74A +:1050C000F8948091340490913504A0913604B09105 +:1050D00037042FBF0895CF92DF92EF92FF920F9384 +:1050E0001F932FB7F8944091340450913504609188 +:1050F0003604709137042FBF6A017B01EE24FF2430 +:105100008C0120E030E0C016D106E206F30610F470 +:10511000415051099A01281B390BC9011F910F9168 +:10512000FF90EF90DF90CF9008951F920F920FB6EF +:105130000F9211248F939F93AF93BF938091340468 +:1051400090913504A0913604B09137040196A11DC9 +:10515000B11D8093340490933504A0933604B0932A +:105160003704BF91AF919F918F910F900FBE0F9019 +:105170001F9018950E947E19F8942FEF87EA91E608 +:10518000215080409040E1F700C0000087E090EBA4 +:10519000DC0180935E0490935F04A0936004B0935D +:1051A00061049CE088E10FB6F894A89580936000B4 +:1051B0000FBE90936000FFCF0E941B29811102C097 +:1051C0000E94F7280E942629809332040E943329E6 +:1051D00080935C0487FB882780F980932E020E94CD +:1051E0002A29682F70E080E090E00C9423256DEE72 +:1051F0007EEF80E090E00E94473260E082E090E045 +:105200000E94353260E083E090E00E94353260E039 +:1052100084E090E00E94353260E085E090E00E94FA +:10522000353260E086E090E00E9435326FEF87E033 +:1052300090E00C94353280E090E00E942F3221E023 +:105240008D3E9E4F09F020E0822F089582E090E08D +:105250000C94273283E090E00C942732682F83E08F +:1052600090E00C94353284E090E00C942732682F63 +:1052700084E090E00C94353286E090E00C94273284 +:10528000682F86E090E00C94353287E090E00C9433 +:105290002732682F87E090E00C94353280913A04F1 +:1052A00080FF0BC06091340285E0689FB00111243B +:1052B00075956795759567952BC081FF09C06091BD +:1052C000340285E0689FB00111247595679520C070 +:1052D00082FF07C06091340285E0689FB00111240D +:1052E00017C090913B049923D1F060913302961737 +:1052F00088F72091340285E0289F90011124929F25 +:10530000A001939F500D112470E0CA010E940D323C +:105310006038710540F46115710539F002C065E02F +:1053200070E0862F08958FE7089581E008958091B9 +:105330003A0480FF08C06091320270E0759567956D +:105340007595679521C081FF06C06091320270E0BB +:105350007595679519C082FF04C06091320270E0B4 +:1053600010C090913B049923C1F0609131029617CF +:10537000A0F780913202899FC001112470E00E9441 +:105380000D326038710528F46115710521F0862F02 +:1053900008958FE7089581E0089561E070E0F4CF0B +:1053A000803F21F40E944E29819504C0813F29F459 +:1053B0000E944E2980933E040895823F21F40E946A +:1053C0004E29819504C0833F29F40E944E29809381 +:1053D0003D040895893F19F40E94972905C08A3F2A +:1053E00031F40E949729819580933F0408958B3F63 +:1053F00021F40E949729819504C08C3F29F40E94D2 +:105400009729809340040895843F21F480913C04BF +:10541000816017C0853F21F480913C04826011C0F7 +:10542000863F21F480913C0484600BC0873F21F4C7 +:1054300080913C04886005C0883F31F480913C0431 +:10544000806180933C0408958D3F21F480913A045B +:1054500081600BC08E3F21F480913A04826005C0C8 +:105460008F3F29F480913A04846080933A04089530 +:10547000803F39F480913E0487FF6CC010923E0457 +:1054800069C0813F29F480913E041816BCF362C0C4 +:1054900090913D04823F29F497FF5CC010923D0437 +:1054A00059C0833F19F41916CCF354C0893F41F415 +:1054B00080913F0418160CF04DC010923F044AC072 +:1054C0008A3F29F480913F0487FF44C0F6CF8B3F89 +:1054D00039F48091400487FF3DC0109240043AC0E7 +:1054E0008C3F29F4809140041816BCF333C0843FEC +:1054F00021F480913C048E7F17C0853F21F4809178 +:105500003C048D7F11C0863F21F480913C048B7F49 +:105510000BC0873F21F480913C04877F05C0883F02 +:1055200031F480913C048F7E80933C0413C08D3F06 +:1055300021F480913A048E7F0BC08E3F21F480913C +:105540003A048D7F05C08F3F29F480913A048B7F08 +:1055500080933A0480913D0481110EC080913E04F5 +:1055600081110AC080913F04811106C080914004DE +:10557000811102C010923B0408958CE394E00E94D4 +:10558000981C0E945F2890933904809338040895F2 +:105590001F93CF93DF9380913804909139040E9438 +:1055A0006B28AC0190913B04992321F020913502A6 +:1055B00030E006C0209136028AE0289F9001112435 +:1055C0004217530708F486C080913D04C0913E0401 +:1055D000D0913F0410914004811107C0C11176C0E1 +:1055E000D11174C0111172C075C09F3F19F09F5F37 +:1055F00090933B04181624F40E944E2980933D0496 +:1056000080913D0487FF05C00E944E2981958093BB +:105610003D041C1624F40E944E2980933E04809180 +:105620003E0487FF05C00E944E29819580933E0469 +:1056300060913D04662339F1C0913E04CC2319F1F9 +:10564000772767FD7095872F972F0E942F2F23E3D1 +:1056500033E343E35FE30E943F300E94FC2E6093FC +:105660003D046C2F772767FD7095872F972F0E9439 +:105670002F2F23E333E343E35FE30E943F300E9495 +:10568000FC2E60933E041D1624F40E9497298093FB +:105690003F0480913F0487FF05C00E9497298195B0 +:1056A00080933F04111624F40E94972980934004AC +:1056B0008091400487FF05C00E94972981958093BF +:1056C0004004DF91CF911F910C94BD2A9F3F09F0B8 +:1056D0008ECF96CFDF91CF911F910895ECE3F4E048 +:1056E00085E0DF011D928A95E9F710923B04109244 +:1056F0003A040895833081F128F4813059F08230E2 +:10570000D1F00895853009F449C0B8F1863009F424 +:1057100056C0089580913602262F30E0280F311DA3 +:105720002F3F310524F4680F6093360208958FEF00 +:1057300080933602089580913502262F30E0280F9D +:10574000311D2F3F310524F4680F60933502089511 +:105750008FEF80933502089580913402262F30E038 +:10576000280F311D2F3F310524F4680F6093340258 +:1057700008958FEF80933402089580913302262F8D +:1057800030E0280F311D2F3F310524F4680F60935E +:10579000330208958FEF809333020895809132028F +:1057A000262F30E0280F311D2F3F310524F4680FDC +:1057B0006093320208958FEF8093320208958091B2 +:1057C0003102262F30E0280F311D2F3F310524F400 +:1057D000680F6093310208958FEF8093310208952E +:1057E000833011F128F4813049F0823091F008952E +:1057F000853081F120F18630C1F108958091360223 +:10580000681720F4861B80933602089510923602A2 +:10581000089580913502681720F4861B8093350225 +:10582000089510923502089580913402681720F48B +:10583000861B80933402089510923402089580915B +:105840003302681720F4861B809333020895109268 +:105850003302089580913202681720F4861B8093EA +:105860003202089510923202089580913102681731 +:1058700020F4861B8093310208951092310208951E +:105880000F931F93873208F048C08E3108F08DC007 +:10589000803109F477C008F5873009F461C068F4F5 +:1058A000863009F09DC080913204817F8E7F809385 +:1058B000320481E08093420494C08B3009F489C0A3 +:1058C0008E3009F08DC08091320482FB222720F9AE +:1058D00091E0922790FB82F95EC0863109F479C08D +:1058E00060F4813109F07CC00E94632190912E0206 +:1058F00081E0892780932E026CC0893109F469C048 +:105900008B3109F06DC08091320481FB222720F990 +:1059100091E0922790FB81F93EC0883309F459C089 +:1059200050F4893209F457C0853309F454C08732E2 +:1059300009F451C055C0833409F44DC028F48A33AA +:1059400008F44EC0895332C0883409F049C00E941F +:1059500063210E940E0F0E9495080E94BA2839C048 +:1059600090913204892F8095817080FB90F929F005 +:10597000966098609093320434C0997F977F90939B +:10598000320427C08091320483FB222720F991E062 +:10599000922790FB83F9809332049923D1F0809170 +:1059A000320481608093320414C08D5141E050E094 +:1059B00060E070E08A019B0104C0000F111F221FEC +:1059C000331F8A95D2F7C901B8010E9423250E948E +:1059D000632181E006C061E070E080E090E0F5CFF7 +:1059E00080E01F910F91089580E0089580E0089570 +:1059F000CF93C82F80914204813069F018F0823033 +:105A0000C9F184C0E0912F02F0913002808182328E +:105A100009F07EC007C0E0912F02F0913002808132 +:105A2000823261F48C2F0E94F42C811104C08C2FDF +:105A30000E94402C1DC081E090E01AC08C2F0E9473 +:105A4000F62C811114C0C43179F048F4CB3079F0D0 +:105A5000C03109F061C082E08093420408C0C932BD +:105A600019F0C83321F058C01092420455C081E0AB +:105A7000817054C0C93291F120F5C43179F1B0F48C +:105A8000C73009F047C08EE18093360282E38093ED +:105A900035028AE08093340284E18093330288E007 +:105AA0008093320288E28093310234C0CE51C630F6 +:105AB00088F5EC2FF0E0EA50FD4F8081809341049F +:105AC00029C0CE34E9F020F4CB3421F56AE013C0CC +:105AD000C13579F0C235F1F461E00DC08091410427 +:105AE000882319F01092410415C081E0809342048C +:105AF00015C061E006C0809141040E947A2B0AC063 +:105B00006AE0809141040E94F02B04C0109242048C +:105B100080E004C081E002C080E0AACFCF91089568 +:105B20000E941B29811102C00E94F7280E943C2973 +:105B300080935D0480FF02C0869501C080E00C94D4 +:105B40000E0680915D04982F9695292F30E0233022 +:105B500031054CF49F5F990F8170892B8160809390 +:105B60005D040E94402980915D0486950C940E0688 +:105B700080915D04982F969591F09158990F8170BE +:105B8000892B80935D048E7F91E009F490E08091F1 +:105B90005D0490FB80F980935D040E944029809110 +:105BA0005D0486950C940E0680915D04982F909567 +:105BB00090FB80F980935D040E94402980915D04F0 +:105BC00080FF02C0869501C080E00C940E06909183 +:105BD0005D04892F86958F5F8F779170843028F4CC +:105BE000880F892B80935D0402C090935D0480919F +:105BF0005D048E7F91E009F490E080915D0490FB5C +:105C000080F980935D040E94402980915D0486950F +:105C10000C940E0620915D04922F96958927982F5B +:105C2000990F822F8170892B80935D048E7F91E084 +:105C300009F490E080915D0490FB80F980935D040D +:105C40000E94402980915D0486950C940E068091F7 +:105C50005D04869508955058BB27AA270ED0D1C160 +:105C6000C2D130F0C7D120F031F49F3F11F41EF4BF +:105C7000B7C10EF4E095E7FB9FC1E92FD3D180F3C4 +:105C8000BA17620773078407950718F071F49EF539 +:105C9000EBC10EF4E0950B2EBA2FA02D0B01B9012C +:105CA00090010C01CA01A0011124FF27591B99F092 +:105CB000593F50F4503E68F11A16F040A22F232F9E +:105CC000342F4427585FF3CF469537952795A795EE +:105CD000F0405395C9F77EF41F16BA0B620B730B95 +:105CE000840BBAF09150A1F0FF0FBB1F661F771F06 +:105CF000881FC2F70EC0BA0F621F731F841F48F4BB +:105D0000879577956795B795F7959E3F08F0B3CF40 +:105D10009395880F08F09927EE0F9795879508952A +:105D200027D108F481E008950CD06BC163D140F015 +:105D30005AD130F021F45F3F19F03EC1511195C1A5 +:105D40004FC170D198F39923C9F35523B1F3951B33 +:105D5000550BBB27AA2762177307840738F09F5F8C +:105D60005F4F220F331F441FAA1FA9F333D00E2EFB +:105D70003AF0E0E830D091505040E695001CCAF768 +:105D800029D0FE2F27D0660F771F881FBB1F26172D +:105D900037074807AB07B0E809F0BB0B802DBF0100 +:105DA000FF2793585F4F2AF09E3F510568F004C1CA +:105DB0005CC15F3FECF3983EDCF386957795679581 +:105DC000B795F7959F5FC9F7880F911D96958795B1 +:105DD00097F90895E1E0660F771F881FBB1F6217D0 +:105DE00073078407BA0720F0621B730B840BBA0B8E +:105DF000EE1F88F7E095089504D06894B11135C17D +:105E0000089518D188F09F5790F0B92F9927B7516E +:105E1000A0F0D1F0660F771F881F991F1AF0BA956E +:105E2000C9F712C0B13081F01FD1B1E008951CC193 +:105E3000672F782F8827B85F39F0B93FCCF3869564 +:105E400077956795B395D9F73EF4909580957095C1 +:105E500061957F4F8F4F9F4F0895E89409C097FB3E +:105E60003EF490958095709561957F4F8F4F9F4F31 +:105E70009923A9F0F92F96E9BB279395F695879575 +:105E800077956795B795F111F8CFFAF4BB0F11F438 +:105E900060FF1BC06F5F7F4F8F4F9F4F16C08823DF +:105EA00011F096E911C0772321F09EE8872F762F15 +:105EB00005C0662371F096E8862F70E060E02AF056 +:105EC0009A95660F771F881FDAF7880F9695879542 +:105ED00097F9089588D018F011F08CD038F480C06C +:105EE000C4C0E92F9FD0B0F35523C9F3E7FB621775 +:105EF000730784079507A8F199F3E92FFF278823F3 +:105F00002AF03197660F771F881FDAF7952F5527EC +:105F1000442332F091505040220F331F441FD2F7D8 +:105F2000BB27E91BF50B621B730B840BB109C1F294 +:105F300022F4620F731F841FB11D31972AF0660F80 +:105F4000771F881FBB1FEFCF915050405AF041F090 +:105F5000882332F0660F771F881F91505040C1F799 +:105F6000939530C08695779567959F5FD9F7F8CF61 +:105F7000990F0008550FAA0BE0E8FEEF161617065A +:105F8000E807F907C0F012161306E407F50798F0C2 +:105F9000621B730B840B950B39F40A2661F0232BDB +:105FA000242B252B21F408950A2609F4A140A69557 +:105FB0008FEF811D811D089597F99F6780E870E03C +:105FC00060E008959F3F31F0915020F487957795D8 +:105FD0006795B795880F911D9695879597F90895C0 +:105FE0009FEF80EC089500240A94161617061806F1 +:105FF0000906089500240A941216130614060506CD +:106000000895092E0394000C11F4882352F0BB0F5D +:1060100040F4BF2B11F460FF04C06F5F7F4F8F4FC0 +:106020009F4F089557FD9058440F551F59F05F3FFB +:1060300071F04795880F97FB991F61F09F3F79F0AA +:1060400087950895121613061406551FF2CF46952C +:10605000F1DF08C0161617061806991FF1CF8695AE +:106060007105610508940895E894BB276627772792 +:10607000CB0197F908957CDF08F48FEF08950BD0DA +:10608000C0CFB1DF28F0B6DF18F0952309F094CF28 +:10609000A7CF1124EACFC6DFA0F3959FD1F3950FC8 +:1060A00050E0551F629FF001729FBB27F00DB11D9C +:1060B000639FAA27F00DB11DAA1F649F6627B00D2C +:1060C000A11D661F829F2227B00DA11D621F739F15 +:1060D000B00DA11D621F839FA00D611D221F749F23 +:1060E0003327A00D611D231F849F600D211D822F6A +:1060F000762F6A2F11249F5750408AF0E1F08823B1 +:106100004AF0EE0FFF1FBB1F661F771F881F9150BD +:106110005040A9F79E3F510570F04ECFA6CF5F3F8C +:10612000ECF3983EDCF3869577956795B795F795F0 +:10613000E7959F5FC1F7FE2B880F911D9695879578 +:1061400097F90895FA01EE0FFF1F309621053105EA +:1061500099F16115710561F48038BFE39B0749F13E +:1061600068949038810561F08038BFEF9B0741F05B +:10617000992342F5FF3FE1053105210511F1E8942E +:106180000894E795D901AA2329F4AB2FBE2FF85F15 +:10619000D0F310C0FF5F70F4A695E0F7F73950F028 +:1061A00019F0FF3A38F49F779F930CD00F9007FCBB +:1061B000905808953EF014CF60E070E080E89FE3CF +:1061C00008954FE79F775F934F933F932F939ED010 +:1061D0002F913F914F915F9152DF05C019F40EF05E +:1061E000EBCE42CFFDCE26DFC8F39638C0F707F8D6 +:1061F0000F92E8942BE33AEA48EB5FE74EDF0F9209 +:106200000F920F924DB75EB70F92C0D0E6E2F1E069 +:1062100016D04F915F91EF91FF91E595EE1FFF1F13 +:1062200049F0FE57E0684427EE0F441FFA95E1F766 +:106230004195550B32D00F9007FE26C00895DF938D +:10624000CF931F930F93FF92EF92DF927B018C010C +:10625000689405C0DA2EEF011EDFFE01E894A591D7 +:106260002591359145915591AEF3EF0106DDFE0183 +:106270009701A801DA9479F7DF90EF90FF900F91E2 +:106280001F91CF91DF9108959B01AC0160E070E018 +:1062900080E89FE349CD90CE95CECCDEE8F39923FC +:1062A000D9F3940F511DBBF39150504094F059F025 +:1062B000882332F0660F771F881F91505040C1F736 +:1062C0009E3F510544F7880F911D9695879597F944 +:1062D00008955F3FACF0983E9CF0BB27869577957C +:1062E0006795B79508F4B1609395C1F7BB0F58F760 +:1062F00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF69 +:10630000B4CE0EF05FCE6CCE689456CE93DEC8F35A +:106310009923D1F3C6F3DF93CF931F930F93FF928B +:10632000C92FDD2788232AF02197660F771F881F42 +:10633000DAF720E030E040E85FEB9FE3883920F0B7 +:10634000803E30F021968F7787DCEEE4F1E003C0E9 +:1063500083DCEBE7F1E073DF8B01BE01EC01FB2E88 +:106360006F5771097595771F880B990B78DD28E1B8 +:1063700032E741E35FE38FDEAF2D9801AE01FF907E +:106380000F911F91CF91DF9178DC3BCEFA01DC01B8 +:10639000AA0FBB1F9B01AC01BF5728F4222733274C +:1063A000442750781FC0B75188F4AB2F002446957E +:1063B00037952795011CA395D2F3002069F0220F91 +:1063C000331F441FB395DAF30DD045CC613071050E +:1063D000A0E88A07B94630F49B01AC01662777270D +:1063E00088279078309621F020833183428353832D +:1063F0000895AA1BBB1B51E107C0AA1FBB1FA6170C +:10640000B70710F0A61BB70B881F991F5A95A9F75D +:1064100080959095BC01CD01089597FB072E16F449 +:10642000009407D077FD09D00E94F93107FC05D010 +:106430003EF4909581959F4F0895709561957F4F9B +:106440000895EE0FFF1F0590F491E02D0994F9993E +:10645000FECF92BD81BDF89A992780B50895A8E135 +:10646000B0E042E050E00C944F32262FF999FECF75 +:1064700092BD81BDF89A019700B4021639F01FBA97 +:1064800020BD0FB6F894FA9AF99A0FBE08950196B6 +:10649000272F0E9436320C943532DC01CB01FC01EF +:1064A000F999FECF06C0F2BDE1BDF89A319600B46D +:0E64B0000D9241505040B8F70895F894FFCF78 +:1064BE000AA7CF44000000410000DC440000004168 +:1064CE00000000000000804000005C4500004041DC +:1064DE00000000000000804052D0244500004041E2 +:1064EE000AA7CF44000000410000DC440000004138 +:1064FE00000000000000804052D0244500004041C2 +:10650E00000000000000804000005C45000040419B +:10651E000AA7CF44000000410000DC440000004107 +:10652E00000000000000804052D024450000404191 +:10653E0000000000000080400AA74F4500004041C7 +:10654E000AA7CF44000000410000DC4400000041D7 +:10655E00000000000000804052D0244500000041A1 +:10656E0000000000000080405CFF38450000004144 +:10657E00000000000000804052D024450000004181 +:10658E000AA7CF44000000410000DC440000004197 +:10659E00000000000000804052D0244500008041E1 +:1065AE0053D024450000404160970A450000004149 +:1065BE0054D0A444000000410000DC44000000411F +:1065CE0060970A450000A041640007000CFF000020 +:1065DE00003F6485151316F015BC15881501011FB3 +:1065EE00042808140A321E0002040507090B0C0EBB +:1065FE001011131517181A1C1D1F212324262829C4 +:10660E002B2D2F3032343537393B6966207965733F +:10661E000A097065616E7574206275747465720A0C +:10662E00656C73650A097269636520736E61636BCD +:10663E0073001F0F03764F5F6F7F496943790959C6 +:10664E0053633149803F5D8B803FF8BF803FCAE185 +:10665E00803F73ED803FCAE1803FF8BF803F5D8B86 +:10666E00803F3149803F0000803FF16D7F3F75EAEA +:10667E007E3F4C827E3F833F7E3F84287E3F833F1A +:10668E007E3F4C827E3F75EA7E3FF16D7F3F00007C +:10669E00803F3F4D3639DF0A920A5C0A230AB6095B +:1066AE00CF09E809010A01020304050607080900DB +:00000001FF diff --git a/keyboard/planck/keymaps/gabriel/compiled.hex b/keyboard/planck/keymaps/gabriel/compiled.hex new file mode 100644 index 0000000000..93d8502845 --- /dev/null +++ b/keyboard/planck/keymaps/gabriel/compiled.hex @@ -0,0 +1,1450 @@ +:100000000C9491020C94D5020C94D5020C94D50258 +:100010000C94D5020C94D5020C94D5020C94D50204 +:100020000C94D5020C94D5020C9482140C945415A3 +:100030000C94B6220C94D5020C94D5020C94D502E3 +:100040000C94D5020C9437030C94D5020C94D50271 +:100050000C94D5020C941E230C94D5020C94D5025A +:100060000C94D5020C94D5020C94D5020C94D502B4 +:100070000C94D5020C94D5020C94D5020C94D502A4 +:100080000C94F70A0C94D5020C94D5020C94D5026A +:100090000C94D5020C94D5020C94D5020C94D50284 +:1000A0000C94D5020C94D5020C94D502C115E3151D +:1000B000D116E315D11628164B16D116A016B31675 +:1000C0009D199D19CC19CC190B1A2B1A811B811B58 +:1000D000361A811BE61AE61A4D1B561B811B7B1B29 +:1000E000F31AF31AF31AF31AF31AF31AF31AF31AA8 +:1000F000F31AF31AF31AF31AF31AF31AF31AF31A98 +:10010000031B111B181B1F1B291B07634236B79BC0 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C00002010000000000000000000029001400EF +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A002B0004001600070009000A0073 +:1001F0000B000D000E000F0033003400E1001D0065 +:100200001B00060019000500110010003600370021 +:10021000380028000352E000E200E30001522C0005 +:100220002C0002525000510052004F0035021E02B5 +:100230001F0220022102220223022402250226029A +:1002400027022A0001003A003B003C003D003E002E +:100250003F002D022E002F0230023100010040002D +:10026000410042004300440045000100010001003C +:100270000100010001000100010001000100010076 +:1002800001000100010001000100010035001E0015 +:100290001F0020002100220023002400250026004A +:1002A00027002A0001003A003B003C003D003E00D0 +:1002B0003F002D002E022F003000310201004000CF +:1002C00041004200430044004500010001000100DC +:1002D0000100010001000100010001000100010016 +:1002E0000100010001000100010001000100010006 +:1002F00001000100010001000100010001000100F6 +:1003000001004C000100010001000100010001009A +:1003100001000100010001000100010001000100D5 +:1003200001000100010001000100010001000100C5 +:1003300001000100010001000100010001000100B5 +:10034000010001004A004E004B004D0028035400FC +:1003500068006500200050006C0061006E006300C2 +:100360006B0020004B006500790062006F006100A7 +:100370007200640000002C034F00720074006800DB +:100380006F006C0069006E00650061007200200063 +:100390004B006500790062006F006100720064002C +:1003A000730000000403090409026D00040100A0A9 +:1003B000FA090400000103010100092111010001F3 +:1003C000223F000705810308000A09040100010318 +:1003D000010200092111010001224D0007058203DD +:1003E00008000A09040200010300000009211101AC +:1003F00000012236000705830308000A09040300F0 +:100400000103000000092111010001223900070544 +:1004100084031000011201100100000008EDFE60CD +:100420006001000102000105010906A1010507198B +:10043000E029E715002501950875018102050819D5 +:100440000129059505750191029501750391010535 +:10045000071900297715002501957875018102C0DB +:1004600005010980A101850216010026B7001A01C5 +:10047000002AB700751095018100C0050C0901A183 +:10048000018503160100269C021A01002A9C0275B0 +:100490001095018100C005010902A1010901A10017 +:1004A0000509190129051500250195057501810228 +:1004B0009501750381010501093009311581257FF9 +:1004C00095027508810609381581257F9501750803 +:1004D0008106050C0A38021581257F950175088172 +:1004E00006C0C005010906A101050719E029E715A5 +:1004F00000250195087501810295017508810105A6 +:100500000819012905950575019102950175039159 +:10051000010507190029FF150025FF9506750881BB +:1005200000C011241FBECFEFDAE0DEBFCDBF04B69E +:1005300003FE24C080911E0390911F03A09120030D +:10054000B09121038730904BA740B04BB9F4109283 +:100550001E0310921F03109220031092210314BE59 +:1005600084B7877F84BF88E10FB6F89480936000DA +:10057000109260000FBEE0E0F8E3099511E0A0E002 +:10058000B1E0E6ECF9E502C005900D92A03CB107A0 +:10059000D9F713E0A0ECB1E001C01D92AE31B10774 +:1005A000E1F70E94C8110C94E12C0C94000008950E +:1005B000089581E0089508950C94D8020C94D9020E +:1005C0000C94DB020E94AB2823E030E0281B3109A9 +:1005D000220F2093C4010895282F2F988091800026 +:1005E000211108C0877F8093800010928D001092A7 +:1005F0008C001BC0886080938000233019F48FEF3B +:100600009FEF0FC083E090E0821B9109880F991F34 +:100610002FEF3FEFA90102C0569547958A95E2F763 +:10062000CA0190938D0080938C000C94E2020E948A +:10063000E20284E08093C3011092C0010895279ADA +:100640002F988FEF9FEF90938700809386008AE02A +:100650008093800089E1809381000E9414280C948B +:1006600017030E941F036E9A769A0C94D7021F926A +:100670000F920FB60F9211242F933F938F939F9356 +:10068000EF93FF93E091C101F091C201CF01019678 +:100690009093C2018093C1010090C30102C0F695FE +:1006A000E7950A94E2F7EF738091C001823019F464 +:1006B000E03251F404C0813039F4EF3329F48091F1 +:1006C0006F008D7F80936F00F0E0E457FE4FE49160 +:1006D00021E031E0E29FC001E39F900D11240090E2 +:1006E000C40102C0969587950A94E2F790938D0015 +:1006F00080938C00FF91EF919F918F913F912F916B +:100700000F900FBE0F901F90189561110DC0FC0146 +:100710008281882331F085EE0E9441180E946B2867 +:1007200003C085EE0E94091980E090E0089581E001 +:1007300008950C94970308950C9431038091150249 +:10074000882309F448C08091D1019091D20100978B +:1007500079F40E94E8229093D2018093D101809194 +:10076000D30190E0009771F48091D40190E00AC029 +:100770000E94F422209100013091010128173907CD +:1007800040F329C00197880F991F880F991FFC011A +:10079000EB52FE4F60817181828193810E945D0ADC +:1007A000E091D30184E0E89FF0011124EB52FE4F69 +:1007B00060817181828193814FE050E00E94150E2B +:1007C0008091D30190E001966091D40170E00E9485 +:1007D000912C8093D3010C94DC02109217020C949C +:1007E0002A0A0895089581E0809317020C94F20379 +:1007F000089508958F929F92AF92BF92EF92FF92C9 +:100800000F931F93CF93DF93CDB7DEB7A3970FB6A8 +:10081000F894DEBF0FBECDBF7C01FC0100811181C9 +:10082000C8010E94E520B8010E94FC058C01B701B7 +:100830000E949903882309F4CCC10032F0E51F0718 +:1008400041F4F7018281882309F458C00E94790E8F +:10085000C0C10132F0E51F0741F4F701828188230E +:1008600009F44CC00E94820EB4C10232F0E51F07A9 +:1008700051F4F7018281882309F440C00E94750E6B +:100880008111F0CFE3CF0332F0E51F0739F4F70110 +:100890008281882399F10E94F3039BC10432F0E521 +:1008A0001F0739F4F7018281882341F10E94ED038B +:1008B00090C10532F0E51F0749F4F70182818823D2 +:1008C000E9F0809117028111F1CFE5CF0632F0E512 +:1008D0001F0739F4F7018281882381F00E94890E75 +:1008E0000AC00732F0E51F0749F4F7018281882327 +:1008F00029F00E94940E0E94F9036BC180911702A7 +:10090000811105C0F70182818111CFC018C1003E5D +:10091000110579F4F7018281882309F44DC00E9402 +:100920002A0A81E080931602109215021092D401D7 +:1009300050C1023E110559F4F70182818823E1F18B +:100940000E942A0A109216021092150242C1033E1A +:10095000110591F4F7018281882371F10E942A0A1E +:100960001092160281E0809315021092D30110922A +:10097000D2011092D1012DC10235110559F4F701B0 +:100980008281882309F425C18091000190910101A1 +:100990000A970DC00135110579F4F701828188238A +:1009A00009F417C180910001909101010A9690937A +:1009B0000101809300010DC14091040183E2EFE148 +:1009C000F1E0DE01119601900D928A95E1F7F701B1 +:1009D000808121E030E02C0F3D1F280F311DC9011F +:1009E0002091020130910301FC01E20FF31F6081AD +:1009F000772767FD7095640F711D882777FD8095B7 +:100A0000982F0E94B32920E030E040E451E40E9496 +:100A100018294B015C01F701218184E090E0821BE1 +:100A20009109BC01882777FD8095982F0E94B329F2 +:100A30009B01AC01C501B4010E94B0289B01AC012F +:100A400060E070E080E090E40E94262B20E030E03F +:100A50004CED50E40E94C32A4B015C01F7018281F6 +:100A60008823D1F04FE050E0C501B4010E94150E7B +:100A7000809116028823A1F08091D40124E0829F06 +:100A8000F0011124EB52FE4F80829182A282B38248 +:100A90008F5F8093D40104C0C501B4010E945D0A38 +:100AA0000F3F110508F02ECF94C08091D001811125 +:100AB0001FC0043130E5130709F051C00E949B03A9 +:100AC00081E08093D0010E94E8229093CF0180932F +:100AD000CE011092C7011092C9011092C801109264 +:100AE000CB011092CA011092CD011092CC0171C0BD +:100AF0008091CE019091CF010E94F422883C910513 +:100B000070F48091C701E82FF0E0EE0FFF1FE8536B +:100B1000FE4F118300838F5F8093C7015AC0043852 +:100B200080E5180721F00538104501F13AC0F701BA +:100B30008281882341F01092C50182E01EC00438F2 +:100B400030E5130759F58091C501811106C086E291 +:100B50000E94411886E20E94091982E01CC00438F4 +:100B6000F0E51F0741F305381045D9F4F7018281FC +:100B7000882331F01092C60180E20E94581929C0E2 +:100B80008091C601811106C087E20E94411887E268 +:100B90000E94091980E20E945F191BC005381045A8 +:100BA00029F381E08093C5018093C601C701A39614 +:100BB0000FB6F894DEBF0FBECDBFDF91CF911F916E +:100BC0000F91FF90EF90BF90AF909F908F900C94FB +:100BD000DE0280E0A3960FB6F894DEBF0FBECDBF55 +:100BE000DF91CF911F910F91FF90EF90BF90AF9049 +:100BF0009F908F90089508959CE0799FF0011124B3 +:100C000090E3899FE00DF11D1124E60FF11DEE0F19 +:100C1000FF1FE453FE4F859194910895880F991F0B +:100C2000FC01E45BFF4F859194910895880F991F13 +:100C3000FC01E453FE4F8591949108950F931F9307 +:100C4000CF93DF93EC01811521E39207A0F5C11545 +:100C500080E3D80708F0D7C0C83ED105D8F4C03E1D +:100C6000D10508F007C2C83AD10578F4C53AD105D4 +:100C700008F06AC0C130D10509F463C008F4F7C1B7 +:100C8000C430D10508F0F6C1F2C1CB3BD10508F460 +:100C900066C0EDC1C11590E2D90708F0AFC0C1151B +:100CA00021E0D20708F0E6C1C03FD10508F4DFC15A +:100CB0008E0110651FC2C03880E5D80700F5C03727 +:100CC00090E5D90708F0A3C0C11520E5D20709F4C3 +:100CD000ACC050F4CE01905480319F4008F0C7C1A1 +:100CE000DF708E01106A06C2C13080E5D80709F4B2 +:100CF000AEC0C43190E5D90708F4AFC0B8C1C3385D +:100D000020E5D20709F48EC050F4C13890E5D90728 +:100D100009F482C008F083C000E011EDEBC1C031DE +:100D200081E5D80708F4A3C1C11597E5D90708F4F0 +:100D300036C1CE0190578115904108F098C1DF70FF +:100D400093C101E010E0D6C1C53AD10509F494C1C0 +:100D5000C63AD10509F093C102E810E4CBC1C83A04 +:100D6000D10509F48FC1C93AD10509F48EC1CA3A37 +:100D7000D10509F48DC1CB3AD10509F48CC1CC3A27 +:100D8000D10509F48BC1CD3AD10509F48AC1C03B24 +:100D9000D10509F489C1CE3AD10509F488C1CF3A09 +:100DA000D10509F487C1C13BD10509F486C1C23B15 +:100DB000D10509F485C1C33BD10509F484C1C43B05 +:100DC000D10509F483C1C53BD10509F482C1C63BF5 +:100DD000D10509F481C1C73BD10509F480C1C83BE5 +:100DE000D10509F47FC1C93BD10509F47EC1CA3BD5 +:100DF000D10509F47DC100E014E47CC1CE019F70EF +:100E00000E94160678C1DD278E01106C73C1CF7069 +:100E1000DD278E01146D6EC100E010ED6BC100E0A6 +:100E200012ED68C100E013ED65C10E94EC1B0E9449 +:100E30002A0A0E94F1038FEF94E32CE08150904046 +:100E40002040E1F700C000000E94432353C180917D +:100E5000F20281608093F2024DC10E94A4238111AD +:100E600002C00E9480230E94B72390E090931D034C +:100E700080931C03C23080E5D80721F480911C03C5 +:100E8000816086C0C43090E5D90721F480911C03AD +:100E900082607EC0C63020E5D20721F480911C0319 +:100EA000846076C0C83080E5D80719F480911C03AF +:100EB00027C0CA3090E5D90721F480911C038061D6 +:100EC00067C0CC3020E5D20721F480911C038062FA +:100ED0005FC0CE3080E5D80721F480911C03806488 +:100EE00057C0C03190E5D90721F480911C03806878 +:100EF0004FC0C23120E5D20729F480911C038460E1 +:100F0000886046C0C33080E5D80721F480911C0377 +:100F10008E7F3EC0C53090E5D90721F480911C0337 +:100F20008D7F36C0C73020E5D20721F480911C03A5 +:100F30008B7F2EC0C93080E5D80719F480911C033F +:100F400026C0CB3090E5D90721F480911C038F7E19 +:100F50001FC0CD3020E5D20721F480911C038F7D86 +:100F600017C0CF3080E5D80721F480911C038F7B18 +:100F70000FC0C13190E5D90721F480911C038F7710 +:100F800007C0C331D04531F480911C038B7F877F2C +:100F900080931C0380911C030E94BB23ABC08D2F48 +:100FA00099278F70992781309105D9F49E0123707C +:100FB000332702C0880F991F2A95E2F79C688E019B +:100FC00044E0000F111F4A95E1F700271370802BB2 +:100FD000912B53E0CC0FDD1F5A95E1F7C076DD274A +:100FE0002FC08230910531F4DC2FCC278E01016FA8 +:100FF000106A80C08330910569F4CE01837099270F +:1010000001E010E002C0000F111F8A95E2F7C8014D +:101010009C680FC084309105B9F4CE018370992784 +:1010200001E010E002C0000F111F8A95E2F7C8012D +:101030009A6823E0CC0FDD1F2A95E1F7C07ED770B8 +:101040008C010C2B1D2B56C08530910531F4DC2F03 +:10105000CC278E01046F106A4DC0069709F04AC074 +:10106000CF71DD27DC2FCC278E01106243C000E05A +:1010700010E040C08E013EC001E810E43BC003E830 +:1010800010E438C002EE14E435C009EE14E432C0B6 +:101090000AEE14E42FC005EB14E42CC006EB14E4B4 +:1010A00029C007EB14E426C00CEC14E423C00DECBB +:1010B00014E420C003E815E41DC00AE815E41AC0D2 +:1010C00002E915E417C004E915E414C001E216E4CE +:1010D00011C003E216E40EC004E216E40BC005E200 +:1010E00016E408C006E216E405C007E216E402C0F2 +:1010F0000AE216E4C801DF91CF911F910F91089584 +:101100009CE0799FF001112490E3899FE00DF11D8F +:101110001124E60FF11DEE0FFF1FE453FE4F8591E2 +:101120009491803E9105E0F4803C910558F581331F +:10113000910509F46FC048F48932910509F463C040 +:101140008A32910509F46DC072C089339105E9F0C6 +:1011500082389105D1F08533910509F44DC067C0FF +:10116000833E910581F138F4803E9105B9F0823ECD +:101170009105D9F05CC0863E910561F1873E9105ED +:10118000A1F155C00E940E06089520911C0320FD78 +:1011900002C021FF4CC080EE90E049C080911C034A +:1011A00080FFF9CF89E390E042C080911C0382FF69 +:1011B0000EC080911C0384FF03C080E090E037C024 +:1011C00083EE90E034C080911C0382FFF2CF82EE68 +:1011D00090E02DC080911C0383FF0BC080911C0305 +:1011E00084FDEBCF87EE90E022C080911C0383FF4B +:1011F000F5CF86EE90E01BC080911C0385FF07C0F1 +:1012000089E290E014C080911C0385FFF9CF85E34B +:1012100090E00DC080911C0386FF07C08AE290E039 +:1012200006C080911C0386FFF9CF81E390E00E9405 +:101230001E0608950C94E002E82FF0E0E25BFE4FFA +:101240008081E82FEF70F0E082958F7021E030E030 +:10125000A90102C0440F551F8A95E2F740A30895E3 +:101260000F931F93CF93DF9385B7806885BF85B7B2 +:10127000806885BFC3E0D0E001E010E0FE01E25BE2 +:10128000FE4F8081E82FEF70F0E021A182958F70F2 +:10129000A80102C0440F551F8A95E2F7CA01822BAC +:1012A00081A38C2F0E941C09219740F78BE090E0CE +:1012B00061E070E0FC01EE5BFE4F2081E22FEF70F9 +:1012C000F0E042A122952F70DB0102C0AA0FBB1FE4 +:1012D0002A95E2F79D01242B22A3019758F7DF916D +:1012E000CF911F910F910C949C03EF92FF920F935B +:1012F0001F93CF93DF9300E212E0C3E0EE24E39468 +:10130000F12CD5E08C2F0E941C098BE090E040E08E +:1013100050E0FC01EE5BFE4F6081E62FEF70F0E0E5 +:1013200020A130E062956F7002C0359527956A95CF +:10133000E2F720FD09C09701082E02C0220F331FDB +:101340000A94E2F7422B532B019718F7F801929178 +:1013500082918F018417950721F051834083D093A8 +:1013600005018C2F0E941C09C15060F68091050177 +:1013700087FD2CC08150809305018F3F39F08FE9A4 +:101380009FE00197F1F700C0000020C080911E028D +:1013900090911F02909327028093260280911C0255 +:1013A00090911D02909325028093240280911A024D +:1013B00090911B0290932302809322028091180245 +:1013C0009091190290932102809320020E949E0323 +:1013D00081E0DF91CF911F910F91FF90EF900895E1 +:1013E000E82FF0E0EE0FFF1FE05EFD4F808191815E +:1013F000089508950F931F93CF9308E212E0C0E081 +:10140000F801929182918F010E946022C80FF2E050 +:1014100000321F07A9F78C2FCF911F910F910895CC +:101420000E94A423811102C00E9480230E94C9232C +:10143000809307033E9A809171008D7F80937100A5 +:1014400082E0809390008AE18093910081E0809314 +:101450002A02089580912A02811102C00E94100A76 +:1014600010927A0210927902809171008D7F8093A0 +:101470007100809190008F738093900010923C02D5 +:1014800010923B0210927302109274021092750235 +:10149000109276021092720210927102E1E5F2E06F +:1014A000A1E4B2E011921192119211921D921D923B +:1014B00082E0E137F807B1F70895CF92DF92EF921B +:1014C000FF920F931F93CF93DF9320913B02222330 +:1014D00009F484C06B017C0180912A02811102C051 +:1014E0000E94100A01E712E0C7E0D0E0A7019601D0 +:1014F000F80192918291729162918F010E94142958 +:10150000811131C0FE01EE0FFF1FEE0FFF1FEF5ADA +:10151000FD4F1082118212821382DE01AA0FBB1FBF +:10152000AF5BBD4F11961C921E92C730D105E9F0FA +:1015300021964481558166817781408351836283FE +:101540007383148215821682178212968D919C9154 +:10155000139711969C938E9313961C921E9212973A +:1015600034961296E2CF219708F6809179029091F5 +:101570007A02019797FD05C090937A0280937902D1 +:1015800004C010927A0210927902809179029091AF +:101590007A0220917702309178022817390724F0D7 +:1015A0001092780210927702892BC1F48091710019 +:1015B0008D7F80937100809190008F738093900055 +:1015C00010927302109274021092750210927602B9 +:1015D000109272021092710210923B02DF91CF9131 +:1015E0001F910F91FF90EF90DF90CF9008951F9281 +:1015F0000F920FB60F9211244F925F926F927F92CB +:101600008F929F92AF92BF92CF92DF92EF92FF9212 +:101610002F933F934F935F936F937F938F939F93FA +:10162000AF93BF93CF93DF93EF93FF9380913B02F0 +:10163000882309F49BC1C0917902D0917A021C16CB +:101640001D060CF093C140902B0250902C0260902C +:101650002D0270902E0220E030E0A901C301B201FA +:101660000E94BF2A18160CF065C0C130D10509F4DC +:1016700052C08091770290917802BE010E94912C15 +:101680007C01909378028093770280903D02909045 +:101690003E02A0903F02B090400220E030E040E8DF +:1016A0005FE3C501B4010E94B02860933D027093CE +:1016B0003E0280933F0290934002F701EE0FFF1F1E +:1016C000EE0FFF1FEF5AFD4FA30192016081718160 +:1016D000828193810E94182920E030E040E05EE39F +:1016E0000E94C32A9B01AC01C501B4010E94BF2A1C +:1016F00018168CF4C7010196BE010E94912C90939C +:1017000078028093770210923D0210923E0210926E +:101710003F0210924002E0917702F0917802EE0FC2 +:10172000FF1FEE0FFF1FEF5AFD4F60817181828115 +:101730009381D0C0C0907302D0907402E090750283 +:10174000F090760220E030E0A901C701B6010E94C6 +:1017500014292197882309F4A2C0FE01EE0FFF1F70 +:10176000EE0FFF1FEF5AFD4F80809180A280B38063 +:10177000A5019401C701B6010E94142987FF31C059 +:10178000A501940160E070E08CED93EC0E941829B3 +:1017900020E030E040E451E40E94182920E030E0ED +:1017A00040E05FE30E94C32A9B01AC0160E070E06F +:1017B00080E090E40E94262B9B01AC01C501B4019E +:1017C0000E94C32A9B01AC01C701B6010E941429E3 +:1017D00087FF07C0A701960160E070E08CED93E4FD +:1017E00039C0A5019401C701B6010E94BF2A18168D +:1017F0000CF055C0A501940160E070E08CED93E41D +:101800000E94182920E030E040E451E40E941829A9 +:1018100020E030E040E05FE30E94C32A9B01AC017E +:1018200060E070E080E090E40E94262B9B01AC0118 +:10183000C501B4010E94C32A9B01AC01C701B601D6 +:101840000E94BF2A18165CF5A701960160E070E0BF +:101850008CED93EC0E94182920E030E040E451E444 +:101860000E94182920E030E040E05FE30E94C32A94 +:101870009B01AC0160E070E080E090E40E94262BC8 +:101880009B01AC01C701B6010E94C32A6093730299 +:1018900070937402809375029093760213C0FE01D8 +:1018A000EE0FFF1FEE0FFF1FEF5AFD4F808191815A +:1018B000A281B3818093730290937402A093750206 +:1018C000B0937602609173027091740280917502F8 +:1018D0009091760220912802309129022F3F4FEFFC +:1018E000340731F02F5F3F4F3093290220932802B5 +:1018F0000E949F0E6B017C0120E034E244EF51E432 +:101900000E94142987FF08C086EFC82E88E2D82ECF +:1019100084EFE82E81E4F82E20E030E040E051E44E +:10192000C701B6010E94C32A9B01AC0160E074E2CA +:1019300084E79BE40E9418296B017C010E948529A1 +:1019400070939700609396002091060130910701F3 +:101950004091080150910901C701B6010E94C32AB4 +:101960000E948529709399006093980080913C02B1 +:10197000882309F433C1C0903702D0903802E09038 +:101980003902F0903A0220E030E0A901C701B60127 +:101990000E94BF2A1816D4F580912802909129023E +:1019A0008F3F2FEF920729F00196909329028093A1 +:1019B0002802C701B6010E949F0E20E030E040E0FF +:1019C00051E40E94C32A9B01AC0160E074E284E709 +:1019D0009BE40E9418296B017C010E948529709369 +:1019E0009700609396002091060130910701409185 +:1019F000080150910901C701B6010E94C32A0E9443 +:101A00008529709399006093980008C01092970000 +:101A100010929600109299001092980060913102F5 +:101A2000709132026F5F7F4F709332026093310288 +:101A3000209196003091970080E090E0232BF1F008 +:101A4000C0919600D09197000E94B1296B017C0152 +:101A5000BE0180E090E00E94B1299B01AC01609141 +:101A600033027091340280913502909136020E94C7 +:101A7000182920E03FEF4FE757E410C00E94B1293A +:101A80006B017C0120E030EE4FEF54E460913302B3 +:101A90007091340280913502909136020E94C32ADF +:101AA0009B01AC01C701B6010E94BF2A87FD96C009 +:101AB00080912F028F5F80932F0290E0209103038B +:101AC0003091040382179307A0F080910E038823BE +:101AD00019F010922F020DC0809171008D7F8093BC +:101AE0007100809190008F738093900010923C025F +:101AF0007DC080913002C0912F02811128C0C0901A +:101B00000803D0900903E0900A03F0900B0320E053 +:101B100030E0A901C701B6010E94BF2A1816BCF423 +:101B200081E08093300210923702109238021092B6 +:101B3000390210923A02C0923302D0923402E092FB +:101B40003502F0923602C150C0932F0243C010926A +:101B500030021092290210922802E0910503F091C0 +:101B6000060348E0C49FE00DF11D1124808191819E +:101B7000A281B3818093370290933802A0933902F7 +:101B8000B0933A0220E030E040E85EE36481758182 +:101B9000868197810E94C32A6B017C0180910A0192 +:101BA000682F70E080E090E00E94B12920E030E0F2 +:101BB00048EC52E40E9418299B01AC01C701B60110 +:101BC0000E94C32A609333027093340280933502DB +:101BD00090933602109232021092310280910703E4 +:101BE00080FD04C010923C0210923B02FF91EF91E5 +:101BF000DF91CF91BF91AF919F918F917F916F9125 +:101C00005F914F913F912F91FF90EF90DF90CF9098 +:101C1000BF90AF909F908F907F906F905F904F900C +:101C20000F900FBE0F901F901895CF92DF92EF92FA +:101C3000FF92CF93DF936B017C01EA0180912A022E +:101C4000811102C00E94100A8091070380FF46C0E4 +:101C50008091790290917A0208970CF03FC08091B0 +:101C600071008D7F8093710080913C0281110E94F0 +:101C70002A0A81E080933B021092290210922802E6 +:101C800020E030E0A901C701B6010E94BF2A181662 +:101C9000DCF48091790290917A02FC01EE0FFF1F33 +:101CA000EE0FFF1FEF5AFD4FC082D182E282F38216 +:101CB000FC01EE0FFF1FEF5BFD4FD183C083019648 +:101CC00090937A0280937902809171008260809370 +:101CD000710080919000806880939000DF91CF9197 +:101CE000FF90EF90DF90CF9008958091070381706F +:101CF0000895809107038160809307030E94CD239C +:101D00000C94F803809107038E7F809307030C9453 +:101D1000CD2380917B0290E0019666E070E00E9406 +:101D2000912C80937B02089580917B0290E0019733 +:101D300066E070E00E94912C80937B0208958F9260 +:101D40009F92AF92BF92CF92DF92EF92FF920F934A +:101D50001F93CF93DF936B017C01C0912802D09138 +:101D60002902BE0180E090E00E94B1294B015C0194 +:101D7000A701960160E070E08CE594E40E941829C8 +:101D80009B01AC01C501B4010E94C32A0E948529B0 +:101D900020917B02233009F473C028F4222351F0F0 +:101DA0002130E9F02CC1243009F4A0C0253009F419 +:101DB000E0C025C180E090E0A0E0BFE38093060191 +:101DC00090930701A0930801B093090110922B0290 +:101DD00010922C0210922D0210922E0210C110921D +:101DE0002B0210922C0210922D0210922E026431BE +:101DF000710540F46A30710560F520E030E040E89C +:101E00005EE32BC0693C710508F0AAC080E090E059 +:101E10000E94B12920E030E040EA51E40E94AF285E +:101E200020E030E044E353E40E9418299B01AC0118 +:101E30000E94C32A20E030E040E05EE30E94C32A13 +:101E40009B01AC0160E070E080E09EE30E94AF285F +:101E500044C020E030E040E05FE3C701B6010E94EB +:101E6000C32A6B017C0180E090E0A0E0BEE3809398 +:101E7000060190930701A0930801B0930901BFC028 +:101E800010922B0210922C0210922D0210922E0210 +:101E90004AE0469F9001479F300D1124C90168EB2D +:101EA0007BE00E947D2CBC016C5D754077FF03C018 +:101EB000719561957109882777FD8095982F0E940B +:101EC000B3292EE333EC4EE259E30E94C32A20E00B +:101ED00030E040EC5EE30E94B0286093060170930E +:101EE0000701809308019093090189C010922B0289 +:101EF00010922C0210922D0210922E02CE018370AD +:101F00009927892BE1F0BE016170772780E090E08E +:101F10000E94B12920E030E040E05EE30E94C32A45 +:101F200020E030E040E45FE30E94B02860930601C7 +:101F30007093070180930801909309010CC080E021 +:101F400090E0A0E0BFE38093060190930701A09387 +:101F50000801B0930901C770DD27CD2B09F04FC0F0 +:101F600010920601109207011092080110920901C7 +:101F700046C010922B0210922C0210922D02109249 +:101F80002E0200E010E020E03FE3009306011093F2 +:101F9000070120930801309309016739710578F131 +:101FA00080E090E00E94B12920E030E047E153E476 +:101FB0000E94AF2820E030E04AE754E40E9418294C +:101FC00020E030E048E452E40E94C32A20E030E000 +:101FD00040EA51E40E94F5290E948029660F771F8C +:101FE000660F771FFB01EE5AFE4F2081318142813F +:101FF0005381C701B6010E94C32A6B017C01C7014E +:10200000B601DF91CF911F910F91FF90EF90DF907C +:10201000CF90BF90AF909F908F90089580918C0249 +:102020000895CF93DF9300D01F92CDB7DEB79C0108 +:1020300080911303843019F593E099833B832A83BD +:102040009093E9008FEF9091E800815095FD06C0D4 +:1020500095ED9A95F1F700008111F5CF8091E80098 +:1020600085FF0DC040E050E063E070E0CE010196D6 +:102070000E9472128091E8008E778093E8000F90A2 +:102080000F900F90DF91CF910895CF93DF9300D001 +:102090001F92CDB7DEB720911303243021F522E043 +:1020A00029839B838A8383E08093E9008FEF90915B +:1020B000E800815095FD06C095ED9A95F1F7000076 +:1020C0008111F5CF8091E80085FF0DC040E050E020 +:1020D00063E070E0CE0101960E9472128091E800E8 +:1020E0008E778093E8000F900F900F90DF91CF9143 +:1020F0000895209113032430F1F422E02093E900A5 +:102100002FEF3091E800215035FD06C035ED3A95AE +:10211000F1F700002111F5CF2091E80025FF0BC059 +:1021200040E050E065E070E00E9472128091E800AB +:102130008E778093E8000895CF93DF93EC01909120 +:102140001303943009F046C0809115018823D9F01B +:10215000809116018823B9F09093E9008FEF909158 +:10216000E800815095FD06C095E19A95F1F70000D1 +:102170008111F5CF8091E80085FF2CC040E050E050 +:1021800060E170E017C081E08093E9008FEF9091EB +:10219000E800815095FD06C095ED9A95F1F7000095 +:1021A0008111F5CF8091E80085FF14C040E050E038 +:1021B00068E070E0CE010E9472128091E8008E7794 +:1021C0008093E80080E1FE01ACE7B2E001900D925F +:1021D0008A95E1F7DF91CF910895809112038111E3 +:1021E00009C00E9407140E9464148091E200846078 +:1021F0008093E200089510921203089508950895BF +:102200000C94AB2242E061EC81E00E94811342E039 +:1022100061EC82E00E94811342E061EC83E00E9465 +:10222000811342E161EC84E00C94811380911503E9 +:10223000833009F455C030F4813071F0823009F4F4 +:102240008EC008958A3009F47AC08B3009F460C0DA +:10225000893009F09CC020C080911403813A09F0B4 +:1022600096C08091E800877F8093E80080911803F2 +:1022700090911903892B21F460E18CE792E003C06F +:1022800060E080E090E070E00E94BD128091E80084 +:102290008B778093E800089580911403813209F0D0 +:1022A00076C08091180390911903009719F0039755 +:1022B00009F06DC08091E800877F8093E8008091ED +:1022C000E80082FD05C0809113038111F8CF5FC043 +:1022D0008091F10080938C028091E8008B7753C04D +:1022E00080911403813A09F052C0809118039091B3 +:1022F0001903892B09F04BC08091E800877F8093F8 +:10230000E8008091E80080FFFCCF8091150136C085 +:10231000809114038132D9F58091180390911903AB +:10232000892BA9F58091E800877F8093E8000E94BF +:10233000B61380911603809315010C94EC1B8091C9 +:102340001403813221F58091E800877F8093E800B3 +:102350000E94B6138091170380938D020895809197 +:102360001403813AA1F48091E800877F8093E8000C +:102370008091E80080FFFCCF80918D028093F10076 +:102380008091E8008E778093E8000C94B61308954E +:1023900084B7877F84BF88E10FB6F894809360008C +:1023A000109260000FBE90E080E80FB6F894809322 +:1023B0006100909361000FBE0E9459170E9407149C +:1023C0000E9464148091E20084608093E20078941B +:1023D0000E94EA160E945B178BE091E00E940517AD +:1023E00080911303853069F40E946C22809111035F +:1023F0008823B1F30E949A22882391F30E945C12F1 +:10240000EFCF0E946317ECCF292F332723303105FC +:10241000C9F064F42130310581F02230310509F032 +:1024200043C08DE690E028EA33E042C02132310516 +:10243000F1F02232310541F137C082E190E025E12F +:1024400034E036C099278130910541F08230910502 +:1024500041F0892B49F5E4EAF3E005C0E6E7F3E053 +:1024600002C0ECE4F3E0849190E09F0121C064306D +:10247000D8F4E62FF0E0EE0FFF1FE255FE4F20816B +:10248000318189E090E014C0643070F470E0FB01A9 +:10249000EE0FFF1FEA55FE4F20813181FB01EE5503 +:1024A000FE4F808190E004C080E090E020E030E0CA +:1024B000FA0131832083089580E189BD82E189BDDD +:1024C00009B400FEFDCF8091D8008F7D8093D800A5 +:1024D0008091E00082608093E0008091E00081FDC7 +:1024E000FCCF0895CF92DF92EF92FF920F931F934C +:1024F000CF93DF93EC018B016A010E94D513811108 +:1025000033C0C114D10439F0F60180819181081BD8 +:10251000190BC80FD91FE12CF12C0115110519F168 +:102520008091E80085FD16C08091E8008E77809349 +:10253000E800C114D10449F0F60180819181E80ED0 +:10254000F91EF182E08285E00FC00E94D513882336 +:1025500021F30AC089918093F10001501109FFEF26 +:10256000EF1AFF0ADACF80E0DF91CF911F910F9130 +:10257000FF90EF90DF90CF90089520911A03309153 +:102580001B032617370748F06115710539F42091B0 +:10259000E8002E772093E80001C0B90140E0611502 +:1025A0007105A9F120911303222309F443C02530BA +:1025B00009F442C02091E80023FD40C02091E800CA +:1025C00022FD32C02091E80020FFE9CF4091F300C6 +:1025D0002091F20030E0342BFC01CF016115710530 +:1025E00059F02830310540F481918093F100615019 +:1025F00071092F5F3F4FF1CF41E02830310509F0DD +:1026000040E02091E8002E772093E800C8CF4111E8 +:10261000C9CF0AC080911303882361F0853061F02F +:102620008091E80083FD0AC08091E80082FFF2CF2C +:1026300080E0089582E0089583E0089581E00895A0 +:1026400020911A0330911B032617370748F06115B4 +:10265000710539F42091E8002E772093E80001C03D +:10266000B901FC0120E06115710591F1809113031E +:10267000882309F440C0853009F43FC08091E80008 +:1026800083FD3DC08091E80082FD2FC08091E8006D +:1026900080FFE9CF2091F3008091F20090E0922B2F +:1026A0006115710559F08830910540F4249120930B +:1026B000F1003196615071090196F2CF21E008973F +:1026C00009F020E08091E8008E778093E800CBCF7E +:1026D0002111CCCF0AC080911303882361F085308B +:1026E00061F08091E80083FD0AC08091E80082FFDC +:1026F000F2CF80E0089582E0089583E0089581E0BC +:102700000895982F973058F59093E900981739F06D +:102710007091EC002091ED005091F00003C0242F47 +:10272000762F50E021FF19C03091EB003E7F3093AF +:10273000EB003091ED003D7F3093ED003091EB00E8 +:1027400031603093EB007093EC002093ED005093D8 +:10275000F0002091EE0027FF07C09F5FD3CF8F705E +:102760008093E90081E0089580E00895809114034A +:1027700087FF11C08091E80082FD05C0809113039E +:102780008111F8CF11C08091E8008B770BC0809148 +:102790001303882349F08091E80080FFF8CF8091EF +:1027A000E8008E778093E80008952091E40030914E +:1027B000E50095E64091EC00842F817040FF22C037 +:1027C0008091E80080FD1CC080911303882391F064 +:1027D000853091F08091EB0085FD10C04091E400C0 +:1027E0005091E5004217530729F39A01915011F7D0 +:1027F00084E0089582E0089583E0089581E00895DB +:1028000080E008954091E80042FFDECF08950E94E5 +:1028100075140E947D14E0EEF0E080818160808379 +:10282000E8EDF0E080818F77808319BCA7EDB0E000 +:102830008C918E7F8C9380818F7E80831092120387 +:1028400008950F931F93CF93DF930E9475140E94F6 +:102850007D14C8EDD0E088818F7788838881806877 +:10286000888388818F7D888319BC1092130310920E +:102870000F03109211031092100300EE10E0F80104 +:1028800080818B7F808388818160888342E060E0E3 +:1028900080E00E948113E1EEF0E080818E7F8083F2 +:1028A000E2EEF0E0808181608083808188608083B7 +:1028B000F80180818E7F8083888180618883DF91A9 +:1028C000CF911F910F910895E8EDF0E080818F7E08 +:1028D0008083E7EDF0E080818160808384E082BFC7 +:1028E00081E0809312030C942114E8EDF0E08081E4 +:1028F0008E7F80831092E20008951092DA00109289 +:10290000E10008951F920F920FB60F9211242F939A +:102910003F934F935F936F937F938F939F93AF9367 +:10292000BF93EF93FF938091E10082FF0BC08091F2 +:10293000E20082FF07C08091E1008B7F8093E1007D +:102940000E94E9168091DA0080FF1FC08091D800B4 +:1029500080FF1BC08091DA008E7F8093DA00809127 +:10296000D90080FF0DC080E189BD82E189BD09B435 +:1029700000FEFDCF81E0809313030E94ED1005C09F +:1029800019BC109213030E94FB108091E10080FF9C +:1029900019C08091E20080FF15C08091E2008E7F17 +:1029A0008093E2008091E20080618093E200809158 +:1029B000D80080628093D80019BC85E0809313030F +:1029C0000E94FF108091E10084FF30C08091E200FE +:1029D00084FF2CC080E189BD82E189BD09B400FE7D +:1029E000FDCF8091D8008F7D8093D8008091E10049 +:1029F0008F7E8093E1008091E2008F7E8093E200E1 +:102A00008091E20081608093E20080910F0388232F +:102A100011F084E007C08091E30087FD02C081E0EF +:102A200001C083E0809313030E9400118091E100B4 +:102A300083FF29C08091E20083FF25C08091E100DF +:102A4000877F8093E10082E08093130310920F034D +:102A50008091E1008E7F8093E1008091E2008E7F83 +:102A60008093E2008091E20080618093E20042E086 +:102A700060E080E00E9481138091F0008860809384 +:102A8000F0000E94FE10FF91EF91BF91AF919F91D6 +:102A90008F917F916F915F914F913F912F910F9007 +:102AA0000FBE0F901F9018951F920F920FB60F92A6 +:102AB00011242F933F934F935F936F937F938F9343 +:102AC0009F93AF93BF93CF93DF93EF93FF93C09107 +:102AD000E900CF708091EC00D82FD17080FDD0E854 +:102AE0001092E9008091F000877F8093F000789445 +:102AF0000E9498151092E9008091F0008860809300 +:102B0000F000CD2BCF70C093E900FF91EF91DF91E2 +:102B1000CF91BF91AF919F918F917F916F915F9175 +:102B20004F913F912F910F900FBE0F901F901895CE +:102B30001F93CF93DF93CDB7DEB7AA970FB6F89464 +:102B4000DEBF0FBECDBFE4E1F3E088E08E0F9091D1 +:102B5000F10091938E13FBCF0E9416118091E80033 +:102B600083FF1FC18091140390911503492F50E0FA +:102B70004A30510508F015C1FA01EA5AFF4F0C948A +:102B8000A52C803881F0823809F00BC180911803A0 +:102B90008F708093E9008091EB0085FB882780F996 +:102BA0001092E90006C080911003909111039111D9 +:102BB00082609091E800977F9093E8008093F10005 +:102BC0001092F100C8C0282F2D7F09F0EAC0882399 +:102BD00019F0823061F0E5C080911603813009F070 +:102BE000E0C0933009F080E0809311032BC0809106 +:102BF0001603811127C0809118038F7009F4D1C08A +:102C00008093E9002091EB0020FF1CC0933021F459 +:102C10008091EB00806214C09091EB0090619093E2 +:102C2000EB0021E030E0A90102C0440F551F8A9556 +:102C3000E2F74093EA001092EA008091EB0088608E +:102C40008093EB001092E9008091E800877F86C0B6 +:102C50008111A7C0109116031F778091E30080783F +:102C6000812B8093E3008091E800877F8093E800C8 +:102C70000E94B6138091E80080FFFCCF8091E300B2 +:102C800080688093E300111102C082E001C083E0FC +:102C90008093130386C08058823008F082C08091F0 +:102CA0001603909117038C3D53E0950779F583E067 +:102CB0008A838AE289834FB7F894DE01139620E075 +:102CC0003EE051E2E32FF0E050935700E49120FF03 +:102CD00003C0E295EF703F5FEF708E2F90E0EA3017 +:102CE00010F0C79601C0C0968D939D932F5F24313D +:102CF00049F74FBF8091E800877F8093E8006AE240 +:102D000070E0CE0101960E94BD1214C0AE014F5F6B +:102D10005F4F609118030E940412BC01009709F4F0 +:102D200040C09091E800977F9093E80089819A8154 +:102D30000E9420138091E8008B778093E80031C0D7 +:102D4000803879F58091E800877F8093E800809152 +:102D50000F038093F1008091E8008E778093E80064 +:102D60000E94B6131EC081111CC0909116039230B0 +:102D7000C0F48091E800877F8093E80090930F0370 +:102D80000E94B61380910F03811106C08091E30069 +:102D900087FD02C081E001C084E0809313030E949C +:102DA00002118091E80083FF0AC08091E800877FCC +:102DB0008093E8008091EB0080628093EB00AA96FC +:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C +:102DD00008950895CF93809113038823A1F0C091A3 +:102DE000E900CF709091EC00892F817090FD80E810 +:102DF000C82B1092E9008091E80083FD0E9498158D +:102E0000CF70C093E900CF9108959093930280937F +:102E100092020895E0919202F0919302309721F08E +:102E20000190F081E02D099480E00895E0919202F4 +:102E3000F0919302309721F00280F381E02D099404 +:102E40000895E0919202F0919302309721F004806E +:102E5000F581E02D0994089520919002309191021E +:102E60008217930771F09093910280939002E09102 +:102E70009202F0919302309721F00680F781E02DC5 +:102E80000994089520918E0230918F028217930742 +:102E900071F090938F0280938E02E0919202F091F4 +:102EA0009302309721F00084F185E02D0994089574 +:102EB00008950C9458170E94DF220E9430090E9446 +:102EC00065230C9414285F926F927F928F929F9249 +:102ED000AF92BF92CF92DF92EF92FF920F931F9328 +:102EE000CF93DF9300D000D01F92CDB7DEB70E9402 +:102EF00075099DE9C92E92E0D92E03E010E0AA24BD +:102F0000A394B12C502E802F0E94F0094C01F601A1 +:102F1000729062906F016826792661147104A1F4A1 +:102F20000150110978F78FEF89838A831B820E94F1 +:102F3000E8228160782F9D838C8349815A816B813F +:102F40008D810E94131838C08091F20281FD0E9489 +:102F5000F9092BE030E07501022E02C0EE0CFF1CD7 +:102F60000A94E2F7C70186219721892B09F1298369 +:102F70005A828E209F2091E0892809F490E09B835B +:102F80000E94E8228160782F9D838C8349815A8139 +:102F90006B818D810E941318000F111FF801EB56F1 +:102FA000FD4F80819181E826F926F182E08204C0FC +:102FB0002150310980F6B4CF0E944C251091940223 +:102FC0000E940A171817D1F00E940A1780939402E2 +:102FD0000F900F900F900F900F90DF91CF911F9156 +:102FE0000F91FF90EF90DF90CF90BF90AF909F90A8 +:102FF0008F907F906F905F900C941A090F900F90B4 +:103000000F900F900F90DF91CF911F910F91FF9034 +:10301000EF90DF90CF90BF90AF909F908F907F9078 +:103020006F905F900895CF93DF93CDB7DEB72B9766 +:103030000FB6F894DEBF0FBECDBF4F8358876987A8 +:103040007A878B87DE01119686E0FD0111928A95C1 +:10305000E9F785E0FE01379601900D928A95E1F738 +:1030600049815A816B817C818D819E810E948A1E5B +:103070002B960FB6F894DEBF0FBECDBFDF91CF9178 +:103080000895CF93882309F4C2C0C82F823859F419 +:103090000E940A1781FDBBC089E30E9464210E943F +:1030A000312289E30CC0833879F40E940A1780FD2D +:1030B000AEC083E50E9464210E94312283E50E9414 +:1030C000A621CF910C943122843859F40E940A171A +:1030D00082FD9DC087E40E9464210E94312287E422 +:1030E000EECF8CEF8C0F813A48F48C2F0E947C2716 +:1030F00081118DC08C2F0E946421E3CF80E28C0F60 +:10310000883048F4C77081E001C0880FCA95EAF79B +:103110000E94EA21D6CF8BE58C0F833078F4C53A34 +:1031200029F0C63A31F083E890E005C081E890E0EC +:1031300002C082E890E0CF910C942C1788E58C0FA8 +:10314000833108F064C0C83A39F1C93A41F1CA3A4A +:1031500049F1CB3A51F1CC3A59F1CD3A61F1C03B4A +:1031600069F1CE3A71F1CF3A79F1C13B81F1C23BBD +:1031700089F1C33B91F1C43B99F1C53BA1F1C63B39 +:10318000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B99 +:10319000C9F180E090E038C082EE90E035C089EE61 +:1031A00090E032C08AEE90E02FC085EB90E02CC01A +:1031B00086EB90E029C087EB90E026C08CEC90E095 +:1031C00023C08DEC90E020C083E891E01DC08AE828 +:1031D00091E01AC082E991E017C084E991E014C03F +:1031E00081E292E011C083E292E00EC084E292E0BC +:1031F0000BC085E292E008C086E292E005C087E25B +:1032000092E002C08AE292E0CF910C944217CF91F3 +:103210000895882309F44BC0823859F40E940A1794 +:1032200081FF45C089E30E9464210E94312289E325 +:103230000CC0833871F40E940A1780FF38C083E500 +:103240000E9464210E94312283E50E94A6210C94F1 +:103250003122843859F40E940A1782FF28C087E47B +:103260000E9464210E94312287E4EFCF9CEF980FE7 +:10327000913A58F390E2980F983050F4877091E0AB +:1032800001C0990F8A95EAF7892F0E94F021DFCFBC +:103290009BE5980F933020F480E090E00C942C177D +:1032A000885A833120F480E090E00C94421708950E +:1032B000882321F00E94EA210C943122089588236A +:1032C00021F00E94F0210C94312208957F928F9278 +:1032D0009F92AF92BF92CF92DF92EF92FF920F93A5 +:1032E0001F93CF93DF931F92CDB7DEB77C01C62E1D +:1032F000772EFC01058102950F70128111110E9439 +:1033000007220E945D21882379F0112369F080E271 +:103310008C0D883048F082E00E9446210E945D2199 +:1033200091E0D82ED92601C0D12CE72DE295EF707F +:10333000F0E0E05AFF4F0C94A52C872D807F072DDD +:103340000F70882311F00295007F112389F000236C +:1033500009F499C180E28C0D883020F4802F0E94FE +:10336000EA2103C0802F0E94FA210E9431228BC1E2 +:103370008C2D0E940919002309F4C3C180E28C0D31 +:10338000883020F4802F0E94F02103C0802F0E94FB +:1033900000220E943122B5C1872D807F972D9F701A +:1033A000803211F4892F03C0892F8295807FCC2031 +:1033B00021F0F1E0CF16A1F01DC0112339F0002358 +:1033C00019F1013009F50E941A229BC1002319F05E +:1033D000013009F496C189830E941D22898110C1A0 +:1033E000112321F0063008F08CC10EC0053008F022 +:1033F00088C106C1112359F0002331F0F7019581EE +:1034000090FF41C19F7095830E9458197AC1002393 +:1034100009F4F6C03EC1872D86958695837090E0AD +:10342000009719F0019761F06CC1112321F08C2DE8 +:10343000972D937002C080E090E00E942C1761C12C +:10344000112321F08C2D972D937002C080E090E025 +:103450000E94421756C18C2D112319F00E9454244A +:1034600002C00E94BC240E9441254BC1872D83705D +:1034700009F052C0111145C18C2D82958695877037 +:10348000880F880F9C2D9F70892E912CA12CB12C18 +:10349000082E04C0880C991CAA1CBB1C0A94D2F7E5 +:1034A000C4FE14C00FE010E020E030E0B901A80134 +:1034B00004C0440F551F661F771F8A95D2F7CB01B2 +:1034C000BA01609570958095909503C060E070E0BA +:1034D000CB01272D26952695237030E0223031052B +:1034E00069F02330310589F0682979298A299B29D7 +:1034F0002130310571F00E94D21F03C1682979295A +:103500008A299B290E94EE1FFCC00E94D21FC50180 +:10351000B4010E94B61FF5C0112319F0872D8170E8 +:1035200001C08695882309F4ECC08C2D8295869580 +:103530008770880F880F9C2D9F70892E912CA12C4D +:10354000B12C082E04C0880C991CAA1CBB1C0A9420 +:10355000D2F7C4FE14C00FE010E020E030E0B90163 +:10356000A80104C0440F551F661F771F8A95D2F724 +:10357000CB01BA01609570958095909503C060E08D +:1035800070E0CB01272D269526952370422F50E021 +:103590004230510569F04330510589F06829792995 +:1035A0008A299B294130510571F00E94AC20A9C0A5 +:1035B000682979298A299B290E94C820A2C00E94D3 +:1035C000AC20C501B4010E9490209BC08C2D90E0DE +:1035D000FC01E05EF109E531F10508F050C0E05969 +:1035E000FF4F0C94A52C0C2D0F70872D8F7111237C +:1035F00021F00E942920802F07CF0E944A20802F8F +:103600000E945F197EC0112341F0053008F079C097 +:10361000872D8F710E946F2074C0063008F071C032 +:10362000F7CF112339F0872D8F710E94292069C0AF +:103630001123C9F3872D8F710E944A2062C0112384 +:1036400029F0872D8F710E9414205BC00E940A20F0 +:1036500058C0112351F0172D1F71812F0E9429206E +:1036600063E0812F0E943D214CC081E00E944621F1 +:10367000023008F446C082E00E94462142C0112375 +:1036800031F0002381F28C2D0E9441183AC00023B2 +:1036900089F28C2D0E94091934C0472D4F706C2D72 +:1036A000C7010E9485030E942E1F2BC0111129C043 +:1036B000472D4F7050E042305105B9F04CF44115A0 +:1036C000510581F041305105E1F40E943C2819C0B8 +:1036D0004330510569F04430510599F48C2D0E9416 +:1036E0008E280FC00E9425280CC00E94582809C0AF +:1036F0000E946B2806C0472D4F706C2DC7010E9499 +:10370000FB05DD20F9F00E94392180FD1BC0F70187 +:1037100012820E9433210E942920C7010E94B11BFE +:103720000E9433210F90DF91CF911F910F91FF9055 +:10373000EF90DF90CF90BF90AF909F908F907F9051 +:103740000C944A200F90DF91CF911F910F91FF9021 +:10375000EF90DF90CF90BF90AF909F908F907F9031 +:1037600008950F931F93CF93DF93EC018881998184 +:103770002B813C81232BB9F09F3F11F48F3F99F0AF +:10378000CE010E94FA03882371F0688179818A81D1 +:103790000E942F218C010E94E4200E94AB1FB801DF +:1037A000CE010E946619DF91CF911F910F9108956C +:1037B0000E9407220E9417220E94DC210E943122CF +:1037C0000E94F2250E94412580E090E00E942C1783 +:1037D00080E090E00C9442170E94F7210C94D81BD3 +:1037E0000E942421292F22952F7030E02C303105A2 +:1037F0004CF42A3031056CF4225031092230310565 +:10380000A8F407C02C30310569F02F30310551F094 +:103810000DC0803F69F018F4803E40F409C0843F39 +:1038200029F406C093FB882780F9089580E0089565 +:1038300081E00895CF93DF9300D000D01F92CDB7E1 +:10384000DEB70F900F900F900F900F90DF91CF91F8 +:103850000895CF93DF9300D000D000D0CDB7DEB76E +:1038600026960FB6F894DEBF0FBECDBFDF91CF9185 +:1038700008951F93CF93DF93C0919D0216E080912E +:103880009E02C81799F0D0E01C9FF0011D9FF00D1B +:103890001124E156FD4F4081518162817381848101 +:1038A00095810E94291C2196C770E9CFDF91CF91A5 +:1038B0001F9108954091CF025091D0026091D102A2 +:1038C0007091D2028091D3029091D4020C94291C61 +:1038D0008091D40282958F7009F054C08091D102FA +:1038E000882309F44FC080919D02A0919E026091AF +:1038F000CF027091D0024091D2025091D302B6E033 +:103900008A1709F43FC090E041155105C1F17F3F8E +:1039100011F46F3FA1F1B89FF001B99FF00D112490 +:10392000E156FD4F218172132AC02081621327C006 +:103930002281211124C0238134812417350710F4FA +:1039400021503109241B350B283C3105C0F420914E +:10395000D4022F7020612093D40226E0289FF0012A +:10396000299FF00D1124EC55FD4F80818F708061EF +:1039700080838FEC92E00E94B11B0C94391C01965D +:103980008770BECF0895CF92DF92EF92FF920F9390 +:103990001F93CF93DF93CDB7DEB762970FB6F8943E +:1039A000DEBF0FBECDBF8C0185E0F801DE011D96A4 +:1039B00001900D928A95E1F7D8014C9111965C9196 +:1039C000119712966C9112971396CD90DC901497E4 +:1039D0003091CF027091D0028091D2029091D302A7 +:1039E000009709F46BC17F3F19F43F3F09F466C1AA +:1039F000E090D102EE2009F4C0C02091D402C81694 +:103A0000D90628F0F601E81BF90BCF0104C0809518 +:103A100090958C0D9D1DFF24F394883C910578F0C2 +:103A2000F12C207F09F0C6C07C2DD98AC88A8989EB +:103A30000E941A1C8FEC92E00E94B11BB1C0822F31 +:103A4000807F09F046C0751314C0341312C0611191 +:103A500010C02F7020612093D4020E945A1C8FEC5A +:103A600092E00E94B11B8091D402D80115968C93EC +:103A70002EC0CD2819F15F3F11F44F3FF9F0F62E1B +:103A800061111CC080919D0220919E0236E0821738 +:103A900009F45AC090E0389FF001399FF00D1124CD +:103AA000E156FD4F7181571306C07081471303C063 +:103AB0007281711103C001968770E9CFF62E6623DB +:103AC00009F418C18091D40281608093D402F12C52 +:103AD00011C1751308C0341306C0611104C0809170 +:103AE000D402D801C3C04D875E878D859E856A8BC1 +:103AF0000E94F01B6A898823E1F16623D1F12091AD +:103B0000D402822F82958F7090E0029774F080919A +:103B1000CF029091D00298878F831986DB86CA8660 +:103B20002C87CE0107960E94B11B86E0F801AFEC0E +:103B3000B2E001900D928A95E1F70E94681C0E9404 +:103B40005A1CFF24F394D6C04D875E878D859E85D1 +:103B50000E942421292F22952F7030E02230310538 +:103B60000CF0BCC09F7009F0B6C0805E883008F4CD +:103B7000C1C0C8010E94B11BE4CFC816D90608F421 +:103B800053C0F601E81BF90BCF01883C910508F4FE +:103B900050C0F12C7C2DD98AC88A89890E941A1CB0 +:103BA000EFECF2E086E0DF011D928A95E9F70E94D2 +:103BB0005A1CA0C0751314C0341312C0611110C078 +:103BC0008091D402F8018583C8010E94B11B86E070 +:103BD000EFECF2E0DF011D928A95E9F7FE2C8AC036 +:103BE0004D875E878D859E856A8B0E94F01B6A8952 +:103BF000882309F4BECF662309F4BBCF2091D402F9 +:103C0000822F82958F7090E002970CF48ECF809176 +:103C1000CF029091D0029A8389831B82DD82CC826D +:103C20002E83CE0101967FCF809590958C0D9D1DA2 +:103C3000ACCFF62E662309F49CCF75132EC0341337 +:103C40002CC02091D40220FD1FC0822F82958F703E +:103C5000D9F0D80115962C9315978F3049F08F5FC6 +:103C6000982F9295907F822F8F70892B15968C9329 +:103C7000C8010E94B11B86E0F801AFECB2E00190F0 +:103C80000D928A95E1F793CF86E0F801AFECB2E0B0 +:103C900001900D928A95E1F72DC04D875E878D8545 +:103CA0009E850E94F01B811140CF8091D4028160DB +:103CB0008093D402C8010E94B11B1CC0662309F482 +:103CC00058CF4D875E878D859E850E94F01B882387 +:103CD00009F44FCF2ACF811148CF0CC024303105D1 +:103CE0000CF047CF9F7009F440CFF8019581907F89 +:103CF00009F03BCF8F2D62960FB6F894DEBF0FBE52 +:103D0000CDBFDF91CF911F910F91FF90EF90DF908A +:103D1000CF9008951F93CF93DF93CDB7DEB72C9745 +:103D20000FB6F894DEBF0FBECDBF4F8358876987AB +:103D30007A878B879C87CE0107960E94C31C8823B5 +:103D400069F08F8198852A853B85232BF1F19F3F70 +:103D500009F063C08F3F09F060C037C086E0FE0104 +:103D60003796DE01119601900D928A95E1F76F81E9 +:103D70007885EA85FB85309741F17F3F11F46F3FED +:103D800021F120919E0230E0C901019687709927A8 +:103D900040919D0250E08417950709F447C069835C +:103DA0007A83FD83EC8396E0929FD001939FB00DC0 +:103DB0001124A156BD4FFE01319601900D929A95A6 +:103DC000E1F780939E020E94391C16E080919D02CB +:103DD00090919E028917C1F1189FC001112481564C +:103DE0009D4F0E94C31C882379F1E0919D021E9F84 +:103DF000F0011124E156FD4F4081518162817381B0 +:103E0000848195810E94291C80919D0290E00196F9 +:103E10008770992780939D02D9CF4F8158856985F6 +:103E20007A858B859C850E94291CCFCF0E94EC1B34 +:103E300010929E0210929D02EFECF2E086E0DF010C +:103E40001D928A95E9F7C1CF2C960FB6F894DEBF84 +:103E50000FBECDBFDF91CF911F910895EF92FF92DA +:103E60000F931F93CF93DF938C01009709F46CC0DD +:103E7000F12CEE24E394E8012196F8018491843733 +:103E800040F4843008F051C0813081F0823019F163 +:103E90005BC0853709F444C0A8F19CE7980F9037C0 +:103EA00008F052C08F770E94091941C00E5F1F4F62 +:103EB000FE01C49180E28C0F883048F4C7708E2DCB +:103EC00001C0880FCA95EAF70E940A2214C08C2FFD +:103ED0000E9441182DC00E5F1F4FFE01C49180E269 +:103EE0008C0F883058F4C7708E2D01C0880FCA958A +:103EF000EAF70E9410220E9431221AC08C2F0E94E1 +:103F0000091916C00E5F1F4FFE01C491CC2381F02A +:103F10008FE99FE00197F1F700C00000C150F6CF94 +:103F20000E5F1F4FFE01F49003C00E9441188E01E6 +:103F30008F2D882309F49FCFEFE9FFE03197F1F748 +:103F400000C000008150F5CFDF91CF911F910F91FC +:103F5000FF90EF90089508956093D9027093DA026C +:103F60008093DB029093DC020C94D81B0F931F9379 +:103F70000091D9021091DA022091DB023091DC022B +:103F8000DC01CB01802B912BA22BB32B8093D90288 +:103F90009093DA02A093DB02B093DC021F910F91A1 +:103FA0000C94D81B0F931F930091D9021091DA0241 +:103FB0002091DB023091DC02DC01CB0180239123D4 +:103FC000A223B3238093D9029093DA02A093DB0259 +:103FD000B093DC021F910F910C94D81B0F931F9389 +:103FE0000091D9021091DA022091DB023091DC02BB +:103FF000DC01CB0180279127A227B3278093D90228 +:104000009093DA02A093DB02B093DC021F910F9130 +:104010000C94D81B1092D5021092D6021092D7029F +:104020001092D8020C94D81B41E050E060E070E0A0 +:1040300004C0440F551F661F771F8A95D2F740931F +:10404000D5025093D6026093D7027093D8020C9495 +:10405000D81B41E050E060E070E004C0440F551F01 +:10406000661F771F8A95D2F78091D5029091D6026C +:10407000A091D702B091D802482B592B6A2B7B2BE9 +:104080004093D5025093D6026093D7027093D80222 +:104090000C94D81B41E050E060E070E004C0440F95 +:1040A000551F661F771F8A95D2F7409550956095EA +:1040B00070958091D5029091D602A091D702B091CF +:1040C000D802482359236A237B234093D502509377 +:1040D000D6026093D7027093D8020C94D81B41E0AB +:1040E00050E060E070E004C0440F551F661F771F6A +:1040F0008A95D2F78091D5029091D602A091D702ED +:10410000B091D802482759276A277B274093D502C8 +:104110005093D6026093D7027093D8020C94D81BA8 +:104120000F931F930091D5021091D6022091D702D0 +:104130003091D802DC01CB01802B912BA22BB32B29 +:104140008093D5029093D602A093D702B093D80261 +:104150001F910F910C94D81B0F931F930091D502C0 +:104160001091D6022091D7023091D802DC01CB0108 +:1041700080239123A223B3238093D5029093D60268 +:10418000A093D702B093D8021F910F910C94D81B23 +:104190000F931F930091D5021091D6022091D70260 +:1041A0003091D802DC01CB0180279127A227B327C9 +:1041B0008093D5029093D602A093D702B093D802F1 +:1041C0001F910F910C94D81B0895CF92DF92EF921C +:1041D000FF920F931F93CF93DF938C01C090D9026E +:1041E000D090DA02E090DB02F090DC028091D50200 +:1041F0009091D602A091D702B091D802C82AD92AAC +:10420000EA2AFB2ACFE1D0E0D701C6010C2E04C078 +:10421000B695A795979587950A94D2F780FF06C023 +:10422000B8018C2F0E948008019721F4219760F734 +:1042300080E001C08C2FDF91CF911F910F91FF90F3 +:10424000EF90DF90CF900895CF93DF93EC010E9421 +:10425000E520BE010E948008DF91CF910895CB0137 +:104260000E94242108958091DD028595859585958C +:1042700008958091DD028770089598E0899F9001EC +:104280001124262B2093DD020C9429202091DD029D +:10429000809582238093DD02982F977069F430E037 +:1042A000482F552747FD50952417350729F0859548 +:1042B000859585950C944A2008959091DD0297701C +:1042C00081E009F480E0089590911501992321F08F +:1042D00090911601911109C0209117013091180198 +:1042E000F90132969FEF40E01FC0982F9695969562 +:1042F00096959F3050F5E0911701F0911801E90F64 +:10430000F11D877021E030E0A90102C0440F551F64 +:104310008A95E2F7CA019181892B818308959F3F95 +:1043200039F04F5F4E3041F051915813F8CF0DC026 +:104330005111F7CF942FF5CF9F3F39F0F901E90FD5 +:10434000F11D97FDFA9582830895089590911501C6 +:10435000992321F090911601911109C02091170124 +:1043600030911801F9013296205F3F4F1FC0982FFE +:104370009695969596959F30F0F4E0911701F091FF +:104380001801E90FF11D877021E030E0A90102C09A +:10439000440F551F8A95E2F7CA01809591818923C0 +:1043A000818308953196E217F30729F090819813DD +:1043B000F9CF1082F7CF089581E090E0E0911701E6 +:1043C000F0911801E80FF91F1082019680319105D4 +:1043D000A9F708959091F102892B8093F102089535 +:1043E00080959091F10289238093F10208951092B3 +:1043F000F10208959091F002892B8093F0020895C4 +:1044000080959091F00289238093F0020895109294 +:10441000F00208959091EF02892B8093EF020895A6 +:1044200080959091EF0289238093EF020895109276 +:10443000EF0208958093DE0208951092DE0208953F +:104440008091170190911801FC0131969C01205F29 +:104450003F4F80E0919191118F5FE217F307D1F701 +:104460000895E0911701F09118018091F102808385 +:10447000E0911701F091180190818091F002892B51 +:104480008083E0911701F091180190818091EF02F3 +:10449000892B80838091DE02882361F0E0911701EF +:1044A000F09118019081892B80830E942022811134 +:1044B0001092DE0280911701909118010C9416174A +:1044C00020E0009739F0AC01415051098423952335 +:1044D0002F5FF7CF822F089580911303843039F135 +:1044E0001092F30220E488E190E00FB6F894A895CA +:1044F000809360000FBE2093600080E00E94EC0279 +:1045000080E00E941A0983B7817F846083BF83B7EC +:10451000816083BF7894889583B78E7F83BF88E15D +:104520000FB6F89480936000109260000FBE08955B +:104530000895089580E00E94EC020E9498220E9453 +:1045400075090E9499220E94FA0991E0811101C027 +:1045500090E0892F08950E94EC1B80E00E94EC02FD +:104560000E9414280E940A170C941A091F920F9295 +:104570000FB60F9211248F939F93AF93BF938091A7 +:10458000F302811113C08091F4029091F502A09181 +:10459000F602B091F7024196A11DB11D8093F4027D +:1045A0009093F502A093F602B093F702BF91AF91FA +:1045B0009F918F910F900FBE0F901F90189582E0E2 +:1045C00084BD93E095BD9AEF97BD80936E000895EA +:1045D0002FB7F8948091F4029091F502A091F60221 +:1045E000B091F7022FBF0895CF92DF92EF92FF9222 +:1045F0000F931F932FB7F8944091F4025091F50256 +:104600006091F6027091F7022FBF6A017B01EE24E0 +:10461000FF248C0120E030E0C016D106E206F3064C +:1046200010F4415051099A01281B390BC9011F91FF +:104630000F91FF90EF90DF90CF9008951F920F920F +:104640000FB60F9211248F939F93AF93BF938091D6 +:10465000F4029091F502A091F602B091F702019652 +:10466000A11DB11D8093F4029093F502A093F60270 +:10467000B093F702BF91AF919F918F910F900FBEB2 +:104680000F901F9018950E940714F8942FEF87EA57 +:1046900091E6215080409040E1F700C0000087E0A3 +:1046A00090EBDC0180931E0390931F03A0932003E3 +:1046B000B09321039CE088E10FB6F894A89580930D +:1046C00060000FBE90936000FFCF0E94A423811171 +:1046D00002C00E9480230E94AF238093F2020E94B6 +:1046E000B72380931C0387FB882780F980931601EA +:1046F0000E94B323682F70E080E090E00C94AC1F20 +:104700006DEE7EEF80E090E00E94CB2C60E082E0D6 +:1047100090E00E94B92C60E083E090E00E94B92C08 +:1047200060E084E090E00E94B92C60E085E090E0D9 +:104730000E94B92C60E086E090E00E94B92C6FEFF7 +:1047400087E090E00C94B92C80E090E00E94B32CBC +:1047500021E08D3E9E4F09F020E0822F089582E0F7 +:1047600090E00C94AB2C83E090E00C94AB2C84E0B4 +:1047700090E00C94AB2C682F84E090E00C94B92C62 +:1047800086E090E00C94AB2C682F86E090E00C94CF +:10479000B92C87E090E00C94AB2C682F87E090E078 +:1047A0000C94B92C8091FA0280FF0BC060911C011F +:1047B00085E0689FB001112475956795759567959B +:1047C0002BC081FF09C060911C0185E0689FB0018A +:1047D00011247595679520C082FF07C060911C0168 +:1047E00085E0689FB001112417C09091FB029923C6 +:1047F000D1F060911B01961788F720911C0185E08C +:10480000289F90011124929FA001939F500D112485 +:1048100070E0CA010E94912C6038710540F4611566 +:10482000710539F002C065E070E0862F08958FE7CA +:10483000089581E008958091FA0280FF08C0609198 +:104840001A0170E0759567957595679521C081FF90 +:1048500006C060911A0170E07595679519C082FFD6 +:1048600004C060911A0170E010C09091FB0299237E +:10487000C1F0609119019617A0F780911A01899FE4 +:10488000C001112470E00E94912C6038710528F459 +:104890006115710521F0862F08958FE7089581E055 +:1048A000089561E070E0F4CF803F21F40E94D223AC +:1048B000819504C0813F29F40E94D2238093FE0297 +:1048C0000895823F21F40E94D223819504C0833F42 +:1048D00029F40E94D2238093FD020895893F19F4A0 +:1048E0000E941B2405C08A3F31F40E941B2481953D +:1048F0008093FF0208958B3F21F40E941B24819531 +:1049000004C08C3F29F40E941B2480930003089567 +:10491000843F21F48091FC02816017C0853F21F41F +:104920008091FC02826011C0863F21F48091FC02DC +:1049300084600BC0873F21F48091FC02886005C031 +:10494000883F31F48091FC0280618093FC020895DD +:104950008D3F21F48091FA0281600BC08E3F21F4DB +:104960008091FA02826005C08F3F29F48091FA029B +:1049700084608093FA020895803F39F48091FE02AA +:1049800087FF6CC01092FE0269C0813F29F48091BC +:10499000FE021816BCF362C09091FD02823F29F41A +:1049A00097FF5CC01092FD0259C0833F19F419169D +:1049B000CCF354C0893F41F48091FF0218160CF0EB +:1049C0004DC01092FF024AC08A3F29F48091FF0235 +:1049D00087FF44C0F6CF8B3F39F48091000387FFF7 +:1049E0003DC0109200033AC08C3F29F4809100032F +:1049F0001816BCF333C0843F21F48091FC028E7FF3 +:104A000017C0853F21F48091FC028D7F11C0863F45 +:104A100021F48091FC028B7F0BC0873F21F48091B1 +:104A2000FC02877F05C0883F31F48091FC028F7EB5 +:104A30008093FC0213C08D3F21F48091FA028E7F97 +:104A40000BC08E3F21F48091FA028D7F05C08F3F0D +:104A500029F48091FA028B7F8093FA028091FD0203 +:104A600081110EC08091FE0281110AC08091FF0267 +:104A7000811106C080910003811102C01092FB02D7 +:104A800008958CEF92E00E9421170E94E8229093F3 +:104A9000F9028093F80208951F93CF93DF938091DA +:104AA000F8029091F9020E94F422AC019091FB026D +:104AB000992321F020911D0130E006C020911E01B4 +:104AC0008AE0289F900111244217530708F486C0FA +:104AD0008091FD02C091FE02D091FF02109100036F +:104AE000811107C0C11176C0D11174C0111172C0FB +:104AF00075C09F3F19F09F5F9093FB02181624F436 +:104B00000E94D2238093FD028091FD0287FF05C0A1 +:104B10000E94D22381958093FD021C1624F40E94EA +:104B2000D2238093FE028091FE0287FF05C00E947F +:104B3000D22381958093FE026091FD02662339F1B4 +:104B4000C091FE02CC2319F1772767FD7095872F5E +:104B5000972F0E94B32923E333E343E35FE30E94EB +:104B6000C32A0E9480296093FD026C2F772767FD7E +:104B70007095872F972F0E94B32923E333E343E3F4 +:104B80005FE30E94C32A0E9480296093FE021D16E3 +:104B900024F40E941B248093FF028091FF0287FF70 +:104BA00005C00E941B2481958093FF02111624F4F6 +:104BB0000E941B24809300038091000387FF05C09F +:104BC0000E941B24819580930003DF91CF911F9158 +:104BD0000C9441259F3F09F08ECF96CFDF91CF9166 +:104BE0001F910895ECEFF2E085E0DF011D928A95B8 +:104BF000E9F71092FB021092FA020895833081F1D6 +:104C000028F4813059F08230D1F00895853009F4CC +:104C100049C0B8F1863009F456C0089580911E014C +:104C2000262F30E0280F311D2F3F310524F4680F67 +:104C300060931E0108958FEF80931E010895809167 +:104C40001D01262F30E0280F311D2F3F310524F4A0 +:104C5000680F60931D0108958FEF80931D010895E3 +:104C600080911C01262F30E0280F311D2F3F310588 +:104C700024F4680F60931C0108958FEF80931C014A +:104C8000089580911B01262F30E0280F311D2F3F02 +:104C9000310524F4680F60931B0108958FEF809312 +:104CA0001B01089580911A01262F30E0280F311D35 +:104CB0002F3F310524F4680F60931A0108958FEF98 +:104CC00080931A01089580911901262F30E0280F52 +:104CD000311D2F3F310524F4680F609319010895A9 +:104CE0008FEF809319010895833011F128F48130FA +:104CF00049F0823091F00895853081F120F18630BD +:104D0000C1F1089580911E01681720F4861B8093DD +:104D10001E01089510921E01089580911D016817CB +:104D200020F4861B80931D01089510921D010895A3 +:104D300080911C01681720F4861B80931C01089544 +:104D400010921C01089580911B01681720F4861BA6 +:104D500080931B01089510921B01089580911A0100 +:104D6000681720F4861B80931A01089510921A0187 +:104D7000089580911901681720F4861B809319010A +:104D800008951092190108950F931F93873208F028 +:104D900048C08E3108F08DC0803109F477C008F525 +:104DA000873009F461C068F4863009F09DC08091B5 +:104DB000F202817F8E7F8093F20281E08093020372 +:104DC00094C08B3009F489C08E3009F08DC0809179 +:104DD000F20282FB222720F991E0922790FB82F9D0 +:104DE0005EC0863109F479C060F4813109F07CC07D +:104DF0000E94EC1B9091160181E089278093160197 +:104E00006CC0893109F469C08B3109F06DC08091A3 +:104E1000F20281FB222720F991E0922790FB81F991 +:104E20003EC0883309F459C050F4893209F457C0A0 +:104E3000853309F454C0873209F451C055C0833416 +:104E400009F44DC028F48A3308F44EC0895332C0A7 +:104E5000883409F049C00E94EC1B0E942A0A0E9473 +:104E6000F1030E94432339C09091F202892F80956B +:104E7000817080FB90F929F0966098609093F2021F +:104E800034C0997F977F9093F20227C08091F202FD +:104E900083FB222720F991E0922790FB83F98093EE +:104EA000F2029923D1F08091F20281608093F202A4 +:104EB00014C08D5141E050E060E070E08A019B0138 +:104EC00004C0000F111F221F331F8A95D2F7C9019A +:104ED000B8010E94AC1F0E94EC1B81E006C061E09B +:104EE00070E080E090E0F5CF80E01F910F91089591 +:104EF00080E0089580E00895CF93C82F8091020349 +:104F0000813069F018F08230C9F184C0E091170156 +:104F1000F09118018081823209F07EC007C0E091D3 +:104F20001701F09118018081823261F48C2F0E9468 +:104F30007827811104C08C2F0E94C4261DC081E0F7 +:104F400090E01AC08C2F0E947A27811114C0C431BE +:104F500079F048F4CB3079F0C03109F061C082E0DB +:104F60008093020308C0C93219F0C83321F058C039 +:104F70001092020355C081E0817054C0C93291F192 +:104F800020F5C43179F1B0F4C73009F047C08EE1A3 +:104F900080931E0182E380931D018AE080931C01AF +:104FA00084E180931B0188E080931A0188E280935A +:104FB000190134C0CE51C63088F5EC2FF0E0EA5428 +:104FC000FE4F80818093010329C0CE34E9F020F4A4 +:104FD000CB3421F56AE013C0C13579F0C235F1F464 +:104FE00061E00DC080910103882319F01092010344 +:104FF00015C081E08093020315C061E006C0809176 +:1050000001030E94FE250AC06AE0809101030E940C +:10501000742604C01092020380E004C081E002C044 +:1050200080E0AACFCF9108950E94A423811102C0ED +:105030000E9480230E94C02380931D0380FF02C032 +:10504000869501C080E00C94EC0280911D03982F9E +:105050009695292F30E0233031054CF49F5F990F4E +:105060008170892B816080931D030E94C4238091ED +:105070001D0386950C94EC0280911D03982F969544 +:1050800091F09158990F8170892B80931D038E7F29 +:1050900091E009F490E080911D0390FB80F98093EA +:1050A0001D030E94C42380911D0386950C94EC027D +:1050B00080911D03982F909590FB80F980931D039C +:1050C0000E94C42380911D0380FF02C0869501C009 +:1050D00080E00C94EC0290911D03892F86958F5FE0 +:1050E0008F779170843028F4880F892B80931D036B +:1050F00002C090931D0380911D038E7F91E009F4FF +:1051000090E080911D0390FB80F980931D030E9425 +:10511000C42380911D0386950C94EC0220911D03FD +:10512000922F96958927982F990F822F8170892B1E +:1051300080931D038E7F91E009F490E080911D0320 +:1051400090FB80F980931D030E94C42380911D036E +:1051500086950C94EC0280911D0386950895505815 +:10516000BB27AA270ED0D1C1C2D130F0C7D120F0C1 +:1051700031F49F3F11F41EF4B7C10EF4E095E7FB44 +:105180009FC1E92FD3D180F3BA1762077307840751 +:10519000950718F071F49EF5EBC10EF4E0950B2E17 +:1051A000BA2FA02D0B01B90190010C01CA01A00179 +:1051B0001124FF27591B99F0593F50F4503E68F1D4 +:1051C0001A16F040A22F232F342F4427585FF3CF15 +:1051D000469537952795A795F0405395C9F77EF4E6 +:1051E0001F16BA0B620B730B840BBAF09150A1F02F +:1051F000FF0FBB1F661F771F881FC2F70EC0BA0FB5 +:10520000621F731F841F48F4879577956795B7953C +:10521000F7959E3F08F0B3CF9395880F08F0992734 +:10522000EE0F97958795089527D108F481E00895AA +:105230000CD06BC163D140F05AD130F021F45F3F04 +:1052400019F03EC1511195C14FC170D198F3992306 +:10525000C9F35523B1F3951B550BBB27AA2762173A +:105260007307840738F09F5F5F4F220F331F441F7F +:10527000AA1FA9F333D00E2E3AF0E0E830D09150B7 +:105280005040E695001CCAF729D0FE2F27D0660FA4 +:10529000771F881FBB1F261737074807AB07B0E8E3 +:1052A00009F0BB0B802DBF01FF2793585F4F2AF0F9 +:1052B0009E3F510568F004C15CC15F3FECF3983E2E +:1052C000DCF3869577956795B795F7959F5FC9F756 +:1052D000880F911D9695879597F90895E1E0660FDF +:1052E000771F881FBB1F621773078407BA0720F058 +:1052F000621B730B840BBA0BEE1F88F7E0950895C1 +:1053000004D06894B11135C1089518D188F09F5721 +:1053100090F0B92F9927B751A0F0D1F0660F771F01 +:10532000881F991F1AF0BA95C9F712C0B13081F0E1 +:105330001FD1B1E008951CC1672F782F8827B85F6F +:1053400039F0B93FCCF3869577956795B395D9F742 +:105350003EF490958095709561957F4F8F4F9F4F4C +:105360000895E89409C097FB3EF490958095709558 +:1053700061957F4F8F4F9F4F9923A9F0F92F96E9A1 +:10538000BB279395F695879577956795B795F11116 +:10539000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB3 +:1053A0008F4F9F4F16C0882311F096E911C07723C5 +:1053B00021F09EE8872F762F05C0662371F096E8CE +:1053C000862F70E060E02AF09A95660F771F881F9D +:1053D000DAF7880F9695879597F9089588D018F091 +:1053E00011F08CD038F480C0C4C0E92F9FD0B0F346 +:1053F0005523C9F3E7FB6217730784079507A8F1E4 +:1054000099F3E92FFF2788232AF03197660F771F3A +:10541000881FDAF7952F5527442332F091505040DA +:10542000220F331F441FD2F7BB27E91BF50B621B6A +:10543000730B840BB109C1F222F4620F731F841F36 +:10544000B11D31972AF0660F771F881FBB1FEFCF62 +:10545000915050405AF041F0882332F0660F771F88 +:10546000881F91505040C1F7939530C0869577952D +:1054700067959F5FD9F7F8CF990F0008550FAA0BD2 +:10548000E0E8FEEF16161706E807F907C0F0121657 +:105490001306E407F50798F0621B730B840B950B5A +:1054A00039F40A2661F0232B242B252B21F40895AF +:1054B0000A2609F4A140A6958FEF811D811D08954C +:1054C00097F99F6780E870E060E008959F3F31F0B2 +:1054D000915020F4879577956795B795880F911D22 +:1054E0009695879597F908959FEF80EC089500248D +:1054F0000A941616170618060906089500240A9439 +:1055000012161306140605060895092E0394000CBE +:1055100011F4882352F0BB0F40F4BF2B11F460FF4D +:1055200004C06F5F7F4F8F4F9F4F089557FD905876 +:10553000440F551F59F05F3F71F04795880F97FB57 +:10554000991F61F09F3F79F0879508951216130611 +:105550001406551FF2CF4695F1DF08C01616170640 +:105560001806991FF1CF8695710561050894089575 +:10557000E894BB2766277727CB0197F908957CDF4E +:1055800008F48FEF08950BD0C0CFB1DF28F0B6DF5D +:1055900018F0952309F094CFA7CF1124EACFC6DFE6 +:1055A000A0F3959FD1F3950F50E0551F629FF00136 +:1055B000729FBB27F00DB11D639FAA27F00DB11D8F +:1055C000AA1F649F6627B00DA11D661F829F222718 +:1055D000B00DA11D621F739FB00DA11D621F839F9F +:1055E000A00D611D221F749F3327A00D611D231F75 +:1055F000849F600D211D822F762F6A2F11249F57C3 +:1056000050408AF0E1F088234AF0EE0FFF1FBB1FE5 +:10561000661F771F881F91505040A9F79E3F510584 +:1056200070F04ECFA6CF5F3FECF3983EDCF386954B +:1056300077956795B795F795E7959F5FC1F7FE2B2F +:10564000880F911D9695879597F90895FA01EE0FA9 +:10565000FF1F30962105310599F16115710561F43F +:105660008038BFE39B0749F168949038810561F069 +:105670008038BFEF9B0741F0992342F5FF3FE105DA +:105680003105210511F1E8940894E795D901AA2381 +:1056900029F4AB2FBE2FF85FD0F310C0FF5F70F47A +:1056A000A695E0F7F73950F019F0FF3A38F49F77F4 +:1056B0009F930CD00F9007FC905808953EF014CFA4 +:1056C00060E070E080E89FE308954FE79F775F9385 +:1056D0004F933F932F939ED02F913F914F915F9186 +:1056E00052DF05C019F40EF0EBCE42CFFDCE26DF1F +:1056F000C8F39638C0F707F80F92E8942BE33AEA1C +:1057000048EB5FE74EDF0F920F920F924DB75EB7F7 +:105710000F92C0D0EAE0F1E016D04F915F91EF9187 +:10572000FF91E595EE1FFF1F49F0FE57E068442703 +:10573000EE0F441FFA95E1F74195550B32D00F90CB +:1057400007FE26C00895DF93CF931F930F93FF9218 +:10575000EF92DF927B018C01689405C0DA2EEF0195 +:105760001EDFFE01E894A591259135914591559153 +:10577000AEF3EF0106DDFE019701A801DA9479F797 +:10578000DF90EF90FF900F911F91CF91DF910895DF +:105790009B01AC0160E070E080E89FE349CD90CED2 +:1057A00095CECCDEE8F39923D9F3940F511DBBF3CA +:1057B0009150504094F059F0882332F0660F771FD3 +:1057C000881F91505040C1F79E3F510544F7880F04 +:1057D000911D9695879597F908955F3FACF0983E97 +:1057E0009CF0BB27869577956795B79508F4B160CF +:1057F0009395C1F7BB0F58F711F460FFE8CF6F5FC7 +:105800007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE65 +:10581000689456CE93DEC8F39923D1F3C6F3DF9391 +:10582000CF931F930F93FF92C92FDD2788232AF070 +:105830002197660F771F881FDAF720E030E040E8F5 +:105840005FEB9FE3883920F0803E30F021968F7720 +:1058500087DCE2E3F1E003C083DCEFE5F1E073DF36 +:105860008B01BE01EC01FB2E6F5771097595771FF7 +:10587000880B990B78DD28E132E741E35FE38FDEA7 +:10588000AF2D9801AE01FF900F911F91CF91DF9145 +:1058900078DC3BCEFA01DC01AA0FBB1F9B01AC01F7 +:1058A000BF5728F422273327442750781FC0B75109 +:1058B00088F4AB2F0024469537952795011CA395B6 +:1058C000D2F3002069F0220F331F441FB395DAF39F +:1058D0000DD045CC61307105A0E88A07B94630F497 +:1058E0009B01AC016627772788279078309621F0B6 +:1058F00020833183428353830895AA1BBB1B51E14C +:1059000007C0AA1FBB1FA617B70710F0A61BB70B2F +:10591000881F991F5A95A9F780959095BC01CD01D4 +:10592000089597FB072E16F4009407D077FD09D051 +:105930000E947D2C07FC05D03EF4909581959F4FE9 +:105940000895709561957F4F0895EE0FFF1F0590A4 +:10595000F491E02D0994F999FECF92BD81BDF89A9A +:10596000992780B50895A8E1B0E042E050E00C949A +:10597000D32C262FF999FECF92BD81BDF89A0197BD +:1059800000B4021639F01FBA20BD0FB6F894FA9A87 +:10599000F99A0FBE08950196272F0E94BA2C0C94F5 +:1059A000B92CDC01CB01FC01F999FECF06C0F2BD98 +:1059B000E1BDF89A319600B40D9241505040B8F7CD +:0659C0000895F894FFCFEA +:1059C600640007000CFF0000003F640E109C107975 +:1059D60010451011100101DF022808140A321E00BA +:1059E60002040507090B0C0E1011131517181A1CC3 +:1059F6001D1F2123242628292B2D2F3032343537FD +:105A0600393B1F0F03764F5F6F7F49694379095909 +:105A160053633149803F5D8B803FF8BF803FCAE1C9 +:105A2600803F73ED803FCAE1803FF8BF803F5D8BCA +:105A3600803F3149803F0000803FF16D7F3F75EA2E +:105A46007E3F4C827E3F833F7E3F84287E3F833F5E +:105A56007E3F4C827E3F75EA7E3FF16D7F3F0000C0 +:105A6600803F3F4D3639E304960460042704BA03A9 +:105A7600D303EC0305040102030405060708090025 +:00000001FF diff --git a/keyboard/planck/keymaps/jacob/compiled.hex b/keyboard/planck/keymaps/jacob/compiled.hex new file mode 100644 index 0000000000..b823d6da9e --- /dev/null +++ b/keyboard/planck/keymaps/jacob/compiled.hex @@ -0,0 +1,1444 @@ +:100000000C9461020C94A5020C94A5020C94A50218 +:100010000C94A5020C94A5020C94A5020C94A502C4 +:100020000C94A5020C94A5020C9452140C94241563 +:100030000C9486220C94A5020C94A5020C94A502A3 +:100040000C94A5020C9407030C94A5020C94A50231 +:100050000C94A5020C94EE220C94A5020C94A5021B +:100060000C94A5020C94A5020C94A5020C94A50274 +:100070000C94A5020C94A5020C94A5020C94A50264 +:100080000C94C70A0C94A5020C94A5020C94A5022A +:100090000C94A5020C94A5020C94A5020C94A50244 +:1000A0000C94A5020C94A5020C94A5029115B3150D +:1000B000A116B315A116F8151B16A11670168316F6 +:1000C0006D196D199C199C19DB19FB19511B511BDA +:1000D000061A511BB61AB61A1D1B261B511B4B1BA9 +:1000E000C31AC31AC31AC31AC31AC31AC31AC31A28 +:1000F000C31AC31AC31AC31AC31AC31AC31AC31A18 +:10010000D31AE11AE81AEF1AF91A07634236B79BB5 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000002B001400ED +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A00290004001600070009000A0075 +:1001F0000B000D000E000F0033003400E1001D0065 +:100200001B00060019000500110010003600370021 +:1002100038002872E000E300E200003001522C00B8 +:100220002C0002525000510052004F0035021E02B5 +:100230001F0220022102220223022402250226029A +:1002400027024C0001000100010001000100010033 +:1002500001002D022E022F023002310201000100A6 +:1002600001000100010001000100010001002F0058 +:100270003000010001000100010001000100010047 +:1002800001000100010001000100010035001E0015 +:100290001F0020002100220023002400250026004A +:1002A00027004C0001003A003B003C003D003E00AE +:1002B0003F002D002E002F003000310001004000D3 +:1002C00041004200430044004500010001000100DC +:1002D0000100010001000100010001000100010016 +:1002E0000100010001000100010001002803540089 +:1002F00068006500200050006C0061006E00630023 +:100300006B0020004B006500790062006F00610007 +:100310007200640000002C034F007200740068003B +:100320006F006C0069006E006500610072002000C3 +:100330004B006500790062006F006100720064008C +:10034000730000000403090409026D00040100A009 +:10035000FA09040000010301010009211101000153 +:10036000223F000705810308000A09040100010378 +:10037000010200092111010001224D00070582033D +:1003800008000A090402000103000000092111010C +:1003900000012236000705830308000A0904030050 +:1003A00001030000000921110100012239000705A5 +:1003B00084031000011201100100000008EDFE602E +:1003C0006001000102000105010906A101050719EC +:1003D000E029E71500250195087501810205081936 +:1003E0000129059505750191029501750391010596 +:1003F000071900297715002501957875018102C03C +:1004000005010980A101850216010026B7001A0125 +:10041000002AB700751095018100C0050C0901A1E3 +:10042000018503160100269C021A01002A9C027510 +:100430001095018100C005010902A1010901A10077 +:100440000509190129051500250195057501810288 +:100450009501750381010501093009311581257F59 +:1004600095027508810609381581257F9501750863 +:100470008106050C0A38021581257F9501750881D2 +:1004800006C0C005010906A101050719E029E71505 +:100490000025019508750181029501750881010506 +:1004A00008190129059505750191029501750391BA +:1004B000010507190029FF150025FF95067508811C +:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF +:1004D00003FE24C080911E0390911F03A09120036E +:1004E000B09121038730904BA740B04BB9F41092E4 +:1004F0001E0310921F03109220031092210314BEBA +:1005000084B7877F84BF88E10FB6F894809360003A +:10051000109260000FBEE0E0F8E3099511E0A0E062 +:10052000B1E0E6E6F9E502C005900D92A03CB10706 +:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 +:10054000E1F70E9498110C94B12C0C9400000895CE +:10055000089581E0089508950C94A8020C94A902CE +:100560000C94AB020E947B2823E030E0281B310969 +:10057000220F2093C4010895282F2F988091800086 +:10058000211108C0877F8093800010928D00109207 +:100590008C001BC0886080938000233019F48FEF9B +:1005A0009FEF0FC083E090E0821B9109880F991F95 +:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 +:1005C000CA0190938D0080938C000C94B2020E941B +:1005D000B20284E08093C3011092C0010895279A6B +:1005E0002F988FEF9FEF90938700809386008AE08B +:1005F0008093800089E1809381000E94E4270C941D +:10060000E7020E94EF026E9A769A0C94A7021F925C +:100610000F920FB60F9211242F933F938F939F93B6 +:10062000EF93FF93E091C101F091C201CF010196D8 +:100630009093C2018093C1010090C30102C0F6955E +:10064000E7950A94E2F7EF738091C001823019F4C4 +:10065000E03251F404C0813039F4EF3329F4809151 +:100660006F008D7F80936F00F0E0E457FE4FE491C0 +:1006700021E031E0E29FC001E39F900D1124009042 +:10068000C40102C0969587950A94E2F790938D0075 +:1006900080938C00FF91EF919F918F913F912F91CB +:1006A0000F900FBE0F901F90189561110DC0FC01A7 +:1006B0008281882331F085EE0E9411180E943B2828 +:1006C00003C085EE0E94D91880E090E0089581E093 +:1006D00008950C94670308950C940103809115020A +:1006E000882309F448C08091D1019091D2010097EC +:1006F00079F40E94B8229093D2018093D101809125 +:10070000D30190E0009771F48091D40190E00AC089 +:100710000E94C4222091000130910101281739075D +:1007200040F329C00197880F991F880F991FFC017A +:10073000EB52FE4F60817181828193810E942D0A6C +:10074000E091D30184E0E89FF0011124EB52FE4FC9 +:1007500060817181828193814FE050E00E94E50DBC +:100760008091D30190E001966091D40170E00E94E5 +:10077000612C8093D3010C94AC02109217020C945C +:10078000FA090895089581E0809317020C94C2033A +:10079000089508958F929F92AF92BF92EF92FF9229 +:1007A0000F931F93CF93DF93CDB7DEB7A3970FB609 +:1007B000F894DEBF0FBECDBF7C01FC01008111812A +:1007C000C8010E94B520B8010E94CC058C01B70178 +:1007D0000E946903882309F4CCC10032F0E51F07A9 +:1007E00041F4F7018281882309F458C00E94490E20 +:1007F000C0C10132F0E51F0741F4F701828188236F +:1008000009F44CC00E94520EB4C10232F0E51F0739 +:1008100051F4F7018281882309F440C00E94450EFB +:100820008111F0CFE3CF0332F0E51F0739F4F70170 +:100830008281882399F10E94C3039BC10432F0E5B1 +:100840001F0739F4F7018281882341F10E94BD031B +:1008500090C10532F0E51F0749F4F7018281882332 +:10086000E9F0809117028111F1CFE5CF0632F0E572 +:100870001F0739F4F7018281882381F00E94590E05 +:100880000AC00732F0E51F0749F4F7018281882387 +:1008900029F00E94640E0E94C9036BC18091170267 +:1008A000811105C0F70182818111CFC018C1003EBE +:1008B000110579F4F7018281882309F44DC00E9463 +:1008C000FA0981E080931602109215021092D40169 +:1008D00050C1023E110559F4F70182818823E1F1EC +:1008E0000E94FA09109216021092150242C1033EAC +:1008F000110591F4F7018281882371F10E94FA09B0 +:100900001092160281E0809315021092D30110928A +:10091000D2011092D1012DC10235110559F4F70110 +:100920008281882309F425C1809100019091010101 +:100930000A970DC00135110579F4F70182818823EA +:1009400009F417C180910001909101010A969093DA +:100950000101809300010DC14091040183E2EFE1A8 +:10096000F1E0DE01119601900D928A95E1F7F70111 +:10097000808121E030E02C0F3D1F280F311DC9017F +:100980002091020130910301FC01E20FF31F60810D +:10099000772767FD7095640F711D882777FD809517 +:1009A000982F0E94832920E030E040E451E40E9427 +:1009B000E8284B015C01F701218184E090E0821B73 +:1009C0009109BC01882777FD8095982F0E94832983 +:1009D0009B01AC01C501B4010E9480289B01AC01C0 +:1009E00060E070E080E090E40E94F62A20E030E0D1 +:1009F0004CED50E40E94932A4B015C01F701828187 +:100A00008823D1F04FE050E0C501B4010E94E50D0C +:100A1000809116028823A1F08091D40124E0829F66 +:100A2000F0011124EB52FE4F80829182A282B382A8 +:100A30008F5F8093D40104C0C501B4010E942D0AC8 +:100A40000F3F110508F02ECF94C08091D001811185 +:100A50001FC0043130E5130709F051C00E946B0339 +:100A600081E08093D0010E94B8229093CF018093BF +:100A7000CE011092C7011092C9011092C8011092C4 +:100A8000CB011092CA011092CD011092CC0171C01D +:100A90008091CE019091CF010E94C422883C9105A3 +:100AA00070F48091C701E82FF0E0EE0FFF1FE853CC +:100AB000FE4F118300838F5F8093C7015AC00438B3 +:100AC00080E5180721F00538104501F13AC0F7011B +:100AD0008281882341F01092C50182E01EC0043853 +:100AE00030E5130759F58091C501811106C086E2F2 +:100AF0000E94111886E20E94D91882E01CC00438B6 +:100B0000F0E51F0741F305381045D9F4F70182815C +:100B1000882331F01092C60180E20E94281929C072 +:100B20008091C601811106C087E20E94111887E2F8 +:100B30000E94D91880E20E942F191BC00538104569 +:100B400029F381E08093C5018093C601C701A39674 +:100B50000FB6F894DEBF0FBECDBFDF91CF911F91CE +:100B60000F91FF90EF90BF90AF909F908F900C945B +:100B7000AE0280E0A3960FB6F894DEBF0FBECDBFE5 +:100B8000DF91CF911F910F91FF90EF90BF90AF90A9 +:100B90009F908F90089508959CE0799FF001112413 +:100BA00090E3899FE00DF11D1124E60FF11DEE0F7A +:100BB000FF1FE453FE4F859194910895880F991F6C +:100BC000FC01E45BFF4F859194910895880F991F74 +:100BD000FC01E453FE4F8591949108950F931F9368 +:100BE000CF93DF93EC01811521E39207A0F5C115A6 +:100BF00080E3D80708F0D7C0C83ED105D8F4C03E7E +:100C0000D10508F007C2C83AD10578F4C53AD10534 +:100C100008F06AC0C130D10509F463C008F4F7C117 +:100C2000C430D10508F0F6C1F2C1CB3BD10508F4C0 +:100C300066C0EDC1C11590E2D90708F0AFC0C1157B +:100C400021E0D20708F0E6C1C03FD10508F4DFC1BA +:100C50008E0110651FC2C03880E5D80700F5C03787 +:100C600090E5D90708F0A3C0C11520E5D20709F423 +:100C7000ACC050F4CE01905480319F4008F0C7C101 +:100C8000DF708E01106A06C2C13080E5D80709F412 +:100C9000AEC0C43190E5D90708F4AFC0B8C1C338BD +:100CA00020E5D20709F48EC050F4C13890E5D90789 +:100CB00009F482C008F083C000E011EDEBC1C0313F +:100CC00081E5D80708F4A3C1C11597E5D90708F451 +:100CD00036C1CE0190578115904108F098C1DF7060 +:100CE00093C101E010E0D6C1C53AD10509F494C121 +:100CF000C63AD10509F093C102E810E4CBC1C83A65 +:100D0000D10509F48FC1C93AD10509F48EC1CA3A97 +:100D1000D10509F48DC1CB3AD10509F48CC1CC3A87 +:100D2000D10509F48BC1CD3AD10509F48AC1C03B84 +:100D3000D10509F489C1CE3AD10509F488C1CF3A69 +:100D4000D10509F487C1C13BD10509F486C1C23B75 +:100D5000D10509F485C1C33BD10509F484C1C43B65 +:100D6000D10509F483C1C53BD10509F482C1C63B55 +:100D7000D10509F481C1C73BD10509F480C1C83B45 +:100D8000D10509F47FC1C93BD10509F47EC1CA3B35 +:100D9000D10509F47DC100E014E47CC1CE019F704F +:100DA0000E94E60578C1DD278E01106C73C1CF70FB +:100DB000DD278E01146D6EC100E010ED6BC100E007 +:100DC00012ED68C100E013ED65C10E94BC1B0E94DA +:100DD000FA090E94C1038FEF94E32CE08150904008 +:100DE0002040E1F700C000000E94132353C180910E +:100DF000F20281608093F2024DC10E94742381113E +:100E000002C00E9450230E94872390E090931D030C +:100E100080931C03C23080E5D80721F480911C0325 +:100E2000816086C0C43090E5D90721F480911C030D +:100E300082607EC0C63020E5D20721F480911C0379 +:100E4000846076C0C83080E5D80719F480911C030F +:100E500027C0CA3090E5D90721F480911C03806136 +:100E600067C0CC3020E5D20721F480911C0380625A +:100E70005FC0CE3080E5D80721F480911C038064E8 +:100E800057C0C03190E5D90721F480911C038068D8 +:100E90004FC0C23120E5D20729F480911C03846041 +:100EA000886046C0C33080E5D80721F480911C03D8 +:100EB0008E7F3EC0C53090E5D90721F480911C0398 +:100EC0008D7F36C0C73020E5D20721F480911C0306 +:100ED0008B7F2EC0C93080E5D80719F480911C03A0 +:100EE00026C0CB3090E5D90721F480911C038F7E7A +:100EF0001FC0CD3020E5D20721F480911C038F7DE7 +:100F000017C0CF3080E5D80721F480911C038F7B78 +:100F10000FC0C13190E5D90721F480911C038F7770 +:100F200007C0C331D04531F480911C038B7F877F8C +:100F300080931C0380911C030E948B23ABC08D2FD8 +:100F400099278F70992781309105D9F49E012370DC +:100F5000332702C0880F991F2A95E2F79C688E01FB +:100F600044E0000F111F4A95E1F700271370802B12 +:100F7000912B53E0CC0FDD1F5A95E1F7C076DD27AA +:100F80002FC08230910531F4DC2FCC278E01016F08 +:100F9000106A80C08330910569F4CE01837099276F +:100FA00001E010E002C0000F111F8A95E2F7C801AE +:100FB0009C680FC084309105B9F4CE0183709927E5 +:100FC00001E010E002C0000F111F8A95E2F7C8018E +:100FD0009A6823E0CC0FDD1F2A95E1F7C07ED77019 +:100FE0008C010C2B1D2B56C08530910531F4DC2F64 +:100FF000CC278E01046F106A4DC0069709F04AC0D5 +:10100000CF71DD27DC2FCC278E01106243C000E0BA +:1010100010E040C08E013EC001E810E43BC003E890 +:1010200010E438C002EE14E435C009EE14E432C016 +:101030000AEE14E42FC005EB14E42CC006EB14E414 +:1010400029C007EB14E426C00CEC14E423C00DEC1B +:1010500014E420C003E815E41DC00AE815E41AC032 +:1010600002E915E417C004E915E414C001E216E42E +:1010700011C003E216E40EC004E216E40BC005E260 +:1010800016E408C006E216E405C007E216E402C052 +:101090000AE216E4C801DF91CF911F910F910895E4 +:1010A0009CE0799FF001112490E3899FE00DF11DF0 +:1010B0001124E60FF11DEE0FFF1FE453FE4F859143 +:1010C0009491803E9105E0F4803C910558F5813380 +:1010D000910509F46FC048F48932910509F463C0A1 +:1010E0008A32910509F46DC072C089339105E9F027 +:1010F00082389105D1F08533910509F44DC067C060 +:10110000833E910581F138F4803E9105B9F0823E2D +:101110009105D9F05CC0863E910561F1873E91054D +:10112000A1F155C00E94DE05089520911C0320FD09 +:1011300002C021FF4CC080EE90E049C080911C03AA +:1011400080FFF9CF89E390E042C080911C0382FFC9 +:101150000EC080911C0384FF03C080E090E037C084 +:1011600083EE90E034C080911C0382FFF2CF82EEC8 +:1011700090E02DC080911C0383FF0BC080911C0365 +:1011800084FDEBCF87EE90E022C080911C0383FFAB +:10119000F5CF86EE90E01BC080911C0385FF07C051 +:1011A00089E290E014C080911C0385FFF9CF85E3AC +:1011B00090E00DC080911C0386FF07C08AE290E09A +:1011C00006C080911C0386FFF9CF81E390E00E9466 +:1011D000EE0508950C94B002E82FF0E0E25BFE4FBC +:1011E0008081E82FEF70F0E082958F7021E030E091 +:1011F000A90102C0440F551F8A95E2F740A3089544 +:101200000F931F93CF93DF9385B7806885BF85B712 +:10121000806885BFC3E0D0E001E010E0FE01E25B42 +:10122000FE4F8081E82FEF70F0E021A182958F7052 +:10123000A80102C0440F551F8A95E2F7CA01822B0C +:1012400081A38C2F0E94EC08219740F78BE090E05F +:1012500061E070E0FC01EE5BFE4F2081E22FEF7059 +:10126000F0E042A122952F70DB0102C0AA0FBB1F44 +:101270002A95E2F79D01242B22A3019758F7DF91CD +:10128000CF911F910F910C946C03EF92FF920F93EB +:101290001F93CF93DF9300E212E0C3E0EE24E394C8 +:1012A000F12CD5E08C2F0E94EC088BE090E040E020 +:1012B00050E0FC01EE5BFE4F6081E62FEF70F0E046 +:1012C00020A130E062956F7002C0359527956A9530 +:1012D000E2F720FD09C09701082E02C0220F331F3C +:1012E0000A94E2F7422B532B019718F7F8019291D9 +:1012F00082918F018417950721F051834083D09309 +:1013000005018C2F0E94EC08C15060F68091050108 +:1013100087FD2CC08150809305018F3F39F08FE904 +:101320009FE00197F1F700C0000020C080911E02ED +:1013300090911F02909327028093260280911C02B5 +:1013400090911D02909325028093240280911A02AD +:1013500090911B02909323028093220280911802A5 +:101360009091190290932102809320020E946E03B3 +:1013700081E0DF91CF911F910F91FF90EF90089541 +:10138000E82FF0E0EE0FFF1FE05EFD4F80819181BE +:10139000089508950F931F93CF9308E212E0C0E0E1 +:1013A000F801929182918F010E943022C80FF2E0E1 +:1013B00000321F07A9F78C2FCF911F910F9108952D +:1013C0000E947423811102C00E9450230E9499231D +:1013D000809307033E9A809171008D7F8093710006 +:1013E00082E0809390008AE18093910081E0809375 +:1013F0002A02089580912A02811102C00E94E00908 +:1014000010927A0210927902809171008D7F809300 +:101410007100809190008F738093900010923C0235 +:1014200010923B0210927302109274021092750295 +:10143000109276021092720210927102E1E5F2E0CF +:10144000A1E4B2E011921192119211921D921D929B +:1014500082E0E137F807B1F70895CF92DF92EF927B +:10146000FF920F931F93CF93DF9320913B02222390 +:1014700009F484C06B017C0180912A02811102C0B1 +:101480000E94E00901E712E0C7E0D0E0A701960161 +:10149000F80192918291729162918F010E94E428E9 +:1014A000811131C0FE01EE0FFF1FEE0FFF1FEF5A3B +:1014B000FD4F1082118212821382DE01AA0FBB1F20 +:1014C000AF5BBD4F11961C921E92C730D105E9F05B +:1014D000219644815581668177814083518362835F +:1014E0007383148215821682178212968D919C91B5 +:1014F000139711969C938E9313961C921E9212979B +:1015000034961296E2CF219708F680917902909155 +:101510007A02019797FD05C090937A028093790231 +:1015200004C010927A02109279028091790290910F +:101530007A0220917702309178022817390724F037 +:101540001092780210927702892BC1F48091710079 +:101550008D7F80937100809190008F7380939000B5 +:101560001092730210927402109275021092760219 +:10157000109272021092710210923B02DF91CF9191 +:101580001F910F91FF90EF90DF90CF9008951F92E1 +:101590000F920FB60F9211244F925F926F927F922B +:1015A0008F929F92AF92BF92CF92DF92EF92FF9273 +:1015B0002F933F934F935F936F937F938F939F935B +:1015C000AF93BF93CF93DF93EF93FF9380913B0251 +:1015D000882309F49BC1C0917902D0917A021C162C +:1015E0001D060CF093C140902B0250902C0260908D +:1015F0002D0270902E0220E030E0A901C301B2015B +:101600000E948F2A18160CF065C0C130D10509F46C +:1016100052C08091770290917802BE010E94612CA5 +:101620007C01909378028093770280903D029090A5 +:101630003E02A0903F02B090400220E030E040E83F +:101640005FE3C501B4010E94802860933D0270935E +:101650003E0280933F0290934002F701EE0FFF1F7E +:10166000EE0FFF1FEF5AFD4FA301920160817181C0 +:10167000828193810E94E82820E030E040E05EE330 +:101680000E94932A9B01AC01C501B4010E948F2ADC +:1016900018168CF4C7010196BE010E94612C90932C +:1016A00078028093770210923D0210923E021092CF +:1016B0003F0210924002E0917702F0917802EE0F23 +:1016C000FF1FEE0FFF1FEF5AFD4F60817181828176 +:1016D0009381D0C0C0907302D0907402E0907502E4 +:1016E000F090760220E030E0A901C701B6010E9427 +:1016F000E4282197882309F4A2C0FE01EE0FFF1F02 +:10170000EE0FFF1FEF5AFD4F80809180A280B380C3 +:10171000A5019401C701B6010E94E42887FF31C0EA +:10172000A501940160E070E08CED93EC0E94E82844 +:1017300020E030E040E451E40E94E82820E030E07E +:1017400040E05FE30E94932A9B01AC0160E070E0FF +:1017500080E090E40E94F62A9B01AC01C501B4012F +:101760000E94932A9B01AC01C701B6010E94E428A4 +:1017700087FF07C0A701960160E070E08CED93E45D +:1017800039C0A5019401C701B6010E948F2A18161D +:101790000CF055C0A501940160E070E08CED93E47D +:1017A0000E94E82820E030E040E451E40E94E8286C +:1017B00020E030E040E05FE30E94932A9B01AC010F +:1017C00060E070E080E090E40E94F62A9B01AC01AA +:1017D000C501B4010E94932A9B01AC01C701B60167 +:1017E0000E948F2A18165CF5A701960160E070E050 +:1017F0008CED93EC0E94E82820E030E040E451E4D6 +:101800000E94E82820E030E040E05FE30E94932A55 +:101810009B01AC0160E070E080E090E40E94F62A59 +:101820009B01AC01C701B6010E94932A6093730229 +:1018300070937402809375029093760213C0FE0138 +:10184000EE0FFF1FEE0FFF1FEF5AFD4F80819181BA +:10185000A281B3818093730290937402A093750266 +:10186000B093760260917302709174028091750258 +:101870009091760220912802309129022F3F4FEF5C +:10188000340731F02F5F3F4F309329022093280215 +:101890000E946F0E6B017C0120E034E244EF51E4C2 +:1018A0000E94E42887FF08C086EFC82E88E2D82E61 +:1018B00084EFE82E81E4F82E20E030E040E051E4AF +:1018C000C701B6010E94932A9B01AC0160E074E25B +:1018D00084E79BE40E94E8286B017C010E94552963 +:1018E0007093970060939600209106013091070154 +:1018F0004091080150910901C701B6010E94932A45 +:101900000E945529709399006093980080913C0241 +:10191000882309F433C1C0903702D0903802E09098 +:101920003902F0903A0220E030E0A901C701B60187 +:101930000E948F2A1816D4F58091280290912902CE +:101940008F3F2FEF920729F0019690932902809301 +:101950002802C701B6010E946F0E20E030E040E08F +:1019600051E40E94932A9B01AC0160E074E284E799 +:101970009BE40E94E8286B017C010E94552970932A +:1019800097006093960020910601309107014091E5 +:10199000080150910901C701B6010E94932A0E94D3 +:1019A0005529709399006093980008C01092970091 +:1019B0001092960010929900109298006091310256 +:1019C000709132026F5F7F4F7093320260933102E9 +:1019D000209196003091970080E090E0232BF1F069 +:1019E000C0919600D09197000E9481296B017C01E3 +:1019F000BE0180E090E00E9481299B01AC016091D2 +:101A000033027091340280913502909136020E9427 +:101A1000E82820E03FEF4FE757E410C00E948129FB +:101A20006B017C0120E030EE4FEF54E46091330213 +:101A30007091340280913502909136020E94932A6F +:101A40009B01AC01C701B6010E948F2A87FD96C099 +:101A500080912F028F5F80932F0290E020910303EB +:101A60003091040382179307A0F080910E0388231E +:101A700019F010922F020DC0809171008D7F80931C +:101A80007100809190008F738093900010923C02BF +:101A90007DC080913002C0912F02811128C0C0907A +:101AA0000803D0900903E0900A03F0900B0320E0B4 +:101AB00030E0A901C701B6010E948F2A1816BCF4B4 +:101AC00081E0809330021092370210923802109217 +:101AD000390210923A02C0923302D0923402E0925C +:101AE0003502F0923602C150C0932F0243C01092CB +:101AF00030021092290210922802E0910503F09121 +:101B0000060348E0C49FE00DF11D112480819181FE +:101B1000A281B3818093370290933802A093390257 +:101B2000B0933A0220E030E040E85EE364817581E2 +:101B3000868197810E94932A6B017C0180910A0122 +:101B4000682F70E080E090E00E94812920E030E082 +:101B500048EC52E40E94E8289B01AC01C701B601A1 +:101B60000E94932A6093330270933402809335026B +:101B70009093360210923202109231028091070344 +:101B800080FD04C010923C0210923B02FF91EF9145 +:101B9000DF91CF91BF91AF919F918F917F916F9185 +:101BA0005F914F913F912F91FF90EF90DF90CF90F9 +:101BB000BF90AF909F908F907F906F905F904F906D +:101BC0000F900FBE0F901F901895CF92DF92EF925B +:101BD000FF92CF93DF936B017C01EA0180912A028F +:101BE000811102C00E94E0098091070380FF46C076 +:101BF0008091790290917A0208970CF03FC0809111 +:101C000071008D7F8093710080913C0281110E9450 +:101C1000FA0981E080933B02109229021092280277 +:101C200020E030E0A901C701B6010E948F2A1816F2 +:101C3000DCF48091790290917A02FC01EE0FFF1F93 +:101C4000EE0FFF1FEF5AFD4FC082D182E282F38276 +:101C5000FC01EE0FFF1FEF5BFD4FD183C0830196A8 +:101C600090937A02809379028091710082608093D0 +:101C7000710080919000806880939000DF91CF91F7 +:101C8000FF90EF90DF90CF900895809107038170CF +:101C90000895809107038160809307030E949D232C +:101CA0000C94C803809107038E7F809307030C94E4 +:101CB0009D2380917B0290E0019666E070E00E9497 +:101CC000612C80937B02089580917B0290E00197C4 +:101CD00066E070E00E94612C80937B0208958F92F1 +:101CE0009F92AF92BF92CF92DF92EF92FF920F93AB +:101CF0001F93CF93DF936B017C01C0912802D09199 +:101D00002902BE0180E090E00E9481294B015C0124 +:101D1000A701960160E070E08CE594E40E94E82859 +:101D20009B01AC01C501B4010E94932A0E94552970 +:101D300020917B02233009F473C028F4222351F050 +:101D40002130E9F02CC1243009F4A0C0253009F479 +:101D5000E0C025C180E090E0A0E0BFE380930601F1 +:101D600090930701A0930801B093090110922B02F0 +:101D700010922C0210922D0210922E0210C110927D +:101D80002B0210922C0210922D0210922E0264311E +:101D9000710540F46A30710560F520E030E040E8FC +:101DA0005EE32BC0693C710508F0AAC080E090E0BA +:101DB0000E94812920E030E040EA51E40E947F281F +:101DC00020E030E044E353E40E94E8289B01AC01AA +:101DD0000E94932A20E030E040E05EE30E94932AD4 +:101DE0009B01AC0160E070E080E09EE30E947F28F0 +:101DF00044C020E030E040E05FE3C701B6010E944C +:101E0000932A6B017C0180E090E0A0E0BEE3809328 +:101E1000060190930701A0930801B0930901BFC088 +:101E200010922B0210922C0210922D0210922E0270 +:101E30004AE0469F9001479F300D1124C90168EB8D +:101E40007BE00E944D2CBC016C5D754077FF03C0A8 +:101E5000719561957109882777FD8095982F0E946B +:101E600083292EE333EC4EE259E30E94932A20E0CB +:101E700030E040EC5EE30E9480286093060170939E +:101E80000701809308019093090189C010922B02E9 +:101E900010922C0210922D0210922E02CE0183700D +:101EA0009927892BE1F0BE016170772780E090E0EF +:101EB0000E94812920E030E040E05EE30E94932A06 +:101EC00020E030E040E45FE30E9480286093060158 +:101ED0007093070180930801909309010CC080E082 +:101EE00090E0A0E0BFE38093060190930701A093E8 +:101EF0000801B0930901C770DD27CD2B09F04FC051 +:101F00001092060110920701109208011092090127 +:101F100046C010922B0210922C0210922D021092A9 +:101F20002E0200E010E020E03FE300930601109352 +:101F3000070120930801309309016739710578F191 +:101F400080E090E00E94812920E030E047E153E406 +:101F50000E947F2820E030E04AE754E40E94E8280D +:101F600020E030E048E452E40E94932A20E030E090 +:101F700040EA51E40E94C5290E945029660F771F4C +:101F8000660F771FFB01EE5AFE4F2081318142819F +:101F90005381C701B6010E94932A6B017C01C701DE +:101FA000B601DF91CF911F910F91FF90EF90DF90DD +:101FB000CF90BF90AF909F908F90089580918C02AA +:101FC0000895CF93DF9300D01F92CDB7DEB79C0169 +:101FD00080911303843019F593E099833B832A831E +:101FE0009093E9008FEF9091E800815095FD06C035 +:101FF00095ED9A95F1F700008111F5CF8091E800F9 +:1020000085FF0DC040E050E063E070E0CE01019636 +:102010000E9442128091E8008E778093E8000F9032 +:102020000F900F90DF91CF910895CF93DF9300D061 +:102030001F92CDB7DEB720911303243021F522E0A3 +:1020400029839B838A8383E08093E9008FEF9091BB +:10205000E800815095FD06C095ED9A95F1F70000D6 +:102060008111F5CF8091E80085FF0DC040E050E080 +:1020700063E070E0CE0101960E9442128091E80078 +:102080008E778093E8000F900F900F90DF91CF91A3 +:102090000895209113032430F1F422E02093E90005 +:1020A0002FEF3091E800215035FD06C035ED3A950F +:1020B000F1F700002111F5CF2091E80025FF0BC0BA +:1020C00040E050E065E070E00E9442128091E8003C +:1020D0008E778093E8000895CF93DF93EC01909181 +:1020E0001303943009F046C0809115018823D9F07C +:1020F000809116018823B9F09093E9008FEF9091B9 +:10210000E800815095FD06C095E19A95F1F7000031 +:102110008111F5CF8091E80085FF2CC040E050E0B0 +:1021200060E170E017C081E08093E9008FEF90914B +:10213000E800815095FD06C095ED9A95F1F70000F5 +:102140008111F5CF8091E80085FF14C040E050E098 +:1021500068E070E0CE010E9442128091E8008E7724 +:102160008093E80080E1FE01ACE7B2E001900D92BF +:102170008A95E1F7DF91CF91089580911203811143 +:1021800009C00E94D7130E9434148091E200846039 +:102190008093E2000895109212030895089508951F +:1021A0000C947B2242E061EC81E00E94511342E0FA +:1021B00061EC82E00E94511342E061EC83E00E94F6 +:1021C000511342E161EC84E00C94511380911503AA +:1021D000833009F455C030F4813071F0823009F455 +:1021E0008EC008958A3009F47AC08B3009F460C03B +:1021F000893009F09CC020C080911403813A09F015 +:1022000096C08091E800877F8093E8008091180352 +:1022100090911903892B21F460E18CE792E003C0CF +:1022200060E080E090E070E00E948D128091E80014 +:102230008B778093E800089580911403813209F030 +:1022400076C08091180390911903009719F00397B5 +:1022500009F06DC08091E800877F8093E80080914D +:10226000E80082FD05C0809113038111F8CF5FC0A3 +:102270008091F10080938C028091E8008B7753C0AD +:1022800080911403813A09F052C080911803909113 +:102290001903892B09F04BC08091E800877F809358 +:1022A000E8008091E80080FFFCCF8091150136C0E6 +:1022B000809114038132D9F580911803909119030C +:1022C000892BA9F58091E800877F8093E8000E9420 +:1022D000861380911603809315010C94BC1B80918A +:1022E0001403813221F58091E800877F8093E80014 +:1022F0000E9486138091170380938D020895809128 +:102300001403813AA1F48091E800877F8093E8006C +:102310008091E80080FFFCCF80918D028093F100D6 +:102320008091E8008E778093E8000C9486130895DE +:1023300084B7877F84BF88E10FB6F89480936000EC +:10234000109260000FBE90E080E80FB6F894809382 +:102350006100909361000FBE0E9429170E94D7135D +:102360000E9434148091E20084608093E2007894AB +:102370000E94BA160E942B178BE091E00E94D5169E +:1023800080911303853069F40E943C2280911103EF +:102390008823B1F30E946A22882391F30E942C12B1 +:1023A000EFCF0E943317ECCF292F3327233031058D +:1023B000C9F064F42130310581F02230310509F093 +:1023C00043C08DE690E028E433E042C0213231057D +:1023D000F1F02232310541F137C082E190E025EB86 +:1023E00033E036C099278130910541F08230910564 +:1023F00041F0892B49F5E4E4F3E005C0E6E1F3E0C0 +:1024000002C0ECEEF2E0849190E09F0121C06430C4 +:10241000D8F4E62FF0E0EE0FFF1FE255FE4F2081CB +:10242000318189E090E014C0643070F470E0FB0109 +:10243000EE0FFF1FEA55FE4F20813181FB01EE5563 +:10244000FE4F808190E004C080E090E020E030E02A +:10245000FA0131832083089580E189BD82E189BD3D +:1024600009B400FEFDCF8091D8008F7D8093D80005 +:102470008091E00082608093E0008091E00081FD27 +:10248000FCCF0895CF92DF92EF92FF920F931F93AC +:10249000CF93DF93EC018B016A010E94A513811198 +:1024A00033C0C114D10439F0F60180819181081B39 +:1024B000190BC80FD91FE12CF12C0115110519F1C9 +:1024C0008091E80085FD16C08091E8008E778093AA +:1024D000E800C114D10449F0F60180819181E80E31 +:1024E000F91EF182E08285E00FC00E94A5138823C7 +:1024F00021F30AC089918093F10001501109FFEF87 +:10250000EF1AFF0ADACF80E0DF91CF911F910F9190 +:10251000FF90EF90DF90CF90089520911A033091B3 +:102520001B032617370748F06115710539F4209110 +:10253000E8002E772093E80001C0B90140E0611562 +:102540007105A9F120911303222309F443C025301A +:1025500009F442C02091E80023FD40C02091E8002A +:1025600022FD32C02091E80020FFE9CF4091F30026 +:102570002091F20030E0342BFC01CF016115710590 +:1025800059F02830310540F481918093F100615079 +:1025900071092F5F3F4FF1CF41E02830310509F03D +:1025A00040E02091E8002E772093E800C8CF411149 +:1025B000C9CF0AC080911303882361F0853061F090 +:1025C0008091E80083FD0AC08091E80082FFF2CF8D +:1025D00080E0089582E0089583E0089581E0089501 +:1025E00020911A0330911B032617370748F0611515 +:1025F000710539F42091E8002E772093E80001C09E +:10260000B901FC0120E06115710591F1809113037E +:10261000882309F440C0853009F43FC08091E80068 +:1026200083FD3DC08091E80082FD2FC08091E800CD +:1026300080FFE9CF2091F3008091F20090E0922B8F +:102640006115710559F08830910540F4249120936B +:10265000F1003196615071090196F2CF21E008979F +:1026600009F020E08091E8008E778093E800CBCFDE +:102670002111CCCF0AC080911303882361F08530EB +:1026800061F08091E80083FD0AC08091E80082FF3C +:10269000F2CF80E0089582E0089583E0089581E01C +:1026A0000895982F973058F59093E900981739F0CE +:1026B0007091EC002091ED005091F00003C0242FA8 +:1026C000762F50E021FF19C03091EB003E7F309310 +:1026D000EB003091ED003D7F3093ED003091EB0049 +:1026E00031603093EB007093EC002093ED00509339 +:1026F000F0002091EE0027FF07C09F5FD3CF8F70BF +:102700008093E90081E0089580E0089580911403AA +:1027100087FF11C08091E80082FD05C080911303FE +:102720008111F8CF11C08091E8008B770BC08091A8 +:102730001303882349F08091E80080FFF8CF80914F +:10274000E8008E778093E80008952091E4003091AE +:10275000E50095E64091EC00842F817040FF22C097 +:102760008091E80080FD1CC080911303882391F0C4 +:10277000853091F08091EB0085FD10C04091E40020 +:102780005091E5004217530729F39A01915011F730 +:1027900084E0089582E0089583E0089581E008953B +:1027A00080E008954091E80042FFDECF08950E9446 +:1027B00045140E944D14E0EEF0E08081816080833A +:1027C000E8EDF0E080818F77808319BCA7EDB0E061 +:1027D0008C918E7F8C9380818F7E808310921203E8 +:1027E00008950F931F93CF93DF930E9445140E9487 +:1027F0004D14C8EDD0E088818F7788838881806808 +:10280000888388818F7D888319BC1092130310926E +:102810000F03109211031092100300EE10E0F80164 +:1028200080818B7F808388818160888342E060E043 +:1028300080E00E945113E1EEF0E080818E7F808382 +:10284000E2EEF0E080818160808380818860808317 +:10285000F80180818E7F8083888180618883DF9109 +:10286000CF911F910F910895E8EDF0E080818F7E68 +:102870008083E7EDF0E080818160808384E082BF27 +:1028800081E0809312030C94F113E8EDF0E0808175 +:102890008E7F80831092E20008951092DA001092E9 +:1028A000E10008951F920F920FB60F9211242F93FB +:1028B0003F934F935F936F937F938F939F93AF93C8 +:1028C000BF93EF93FF938091E10082FF0BC0809153 +:1028D000E20082FF07C08091E1008B7F8093E100DE +:1028E0000E94B9168091DA0080FF1FC08091D80045 +:1028F00080FF1BC08091DA008E7F8093DA00809188 +:10290000D90080FF0DC080E189BD82E189BD09B495 +:1029100000FEFDCF81E0809313030E94BD1005C02F +:1029200019BC109213030E94CB108091E10080FF2C +:1029300019C08091E20080FF15C08091E2008E7F77 +:102940008093E2008091E20080618093E2008091B8 +:10295000D80080628093D80019BC85E0809313036F +:102960000E94CF108091E10084FF30C08091E2008E +:1029700084FF2CC080E189BD82E189BD09B400FEDD +:10298000FDCF8091D8008F7D8093D8008091E100A9 +:102990008F7E8093E1008091E2008F7E8093E20041 +:1029A0008091E20081608093E20080910F03882390 +:1029B00011F084E007C08091E30087FD02C081E050 +:1029C00001C083E0809313030E94D0108091E10046 +:1029D00083FF29C08091E20083FF25C08091E10040 +:1029E000877F8093E10082E08093130310920F03AE +:1029F0008091E1008E7F8093E1008091E2008E7FE4 +:102A00008093E2008091E20080618093E20042E0E6 +:102A100060E080E00E9451138091F0008860809314 +:102A2000F0000E94CE10FF91EF91BF91AF919F9166 +:102A30008F917F916F915F914F913F912F910F9067 +:102A40000FBE0F901F9018951F920F920FB60F9206 +:102A500011242F933F934F935F936F937F938F93A3 +:102A60009F93AF93BF93CF93DF93EF93FF93C09167 +:102A7000E900CF708091EC00D82FD17080FDD0E8B4 +:102A80001092E9008091F000877F8093F0007894A5 +:102A90000E9468151092E9008091F0008860809390 +:102AA000F000CD2BCF70C093E900FF91EF91DF9143 +:102AB000CF91BF91AF919F918F917F916F915F91D6 +:102AC0004F913F912F910F900FBE0F901F9018952F +:102AD0001F93CF93DF93CDB7DEB7AA970FB6F894C5 +:102AE000DEBF0FBECDBFE4E1F3E088E08E0F909132 +:102AF000F10091938E13FBCF0E94E6108091E800C5 +:102B000083FF1FC18091140390911503492F50E05A +:102B10004A30510508F015C1FA01EA5AFF4F0C94EA +:102B2000752C803881F0823809F00BC18091180330 +:102B30008F708093E9008091EB0085FB882780F9F6 +:102B40001092E90006C08091100390911103911139 +:102B500082609091E800977F9093E8008093F10065 +:102B60001092F100C8C0282F2D7F09F0EAC08823F9 +:102B700019F0823061F0E5C080911603813009F0D0 +:102B8000E0C0933009F080E0809311032BC0809166 +:102B90001603811127C0809118038F7009F4D1C0EA +:102BA0008093E9002091EB0020FF1CC0933021F4BA +:102BB0008091EB00806214C09091EB009061909343 +:102BC000EB0021E030E0A90102C0440F551F8A95B7 +:102BD000E2F74093EA001092EA008091EB008860EF +:102BE0008093EB001092E9008091E800877F86C017 +:102BF0008111A7C0109116031F778091E3008078A0 +:102C0000812B8093E3008091E800877F8093E80028 +:102C10000E9486138091E80080FFFCCF8091E30042 +:102C200080688093E300111102C082E001C083E05C +:102C30008093130386C08058823008F082C0809150 +:102C40001603909117038C3D53E0950779F583E0C7 +:102C50008A838AE289834FB7F894DE01139620E0D5 +:102C60003EE051E2E32FF0E050935700E49120FF63 +:102C700003C0E295EF703F5FEF708E2F90E0EA3077 +:102C800010F0C79601C0C0968D939D932F5F24319D +:102C900049F74FBF8091E800877F8093E8006AE2A0 +:102CA00070E0CE0101960E948D1214C0AE014F5FFC +:102CB0005F4F609118030E94D411BC01009709F482 +:102CC00040C09091E800977F9093E80089819A81B5 +:102CD0000E94F0128091E8008B778093E80031C069 +:102CE000803879F58091E800877F8093E8008091B3 +:102CF0000F038093F1008091E8008E778093E800C5 +:102D00000E9486131EC081111CC090911603923040 +:102D1000C0F48091E800877F8093E80090930F03D0 +:102D20000E94861380910F03811106C08091E300F9 +:102D300087FD02C081E001C084E0809313030E94FC +:102D4000D2108091E80083FF0AC08091E800877F5D +:102D50008093E8008091EB0080628093EB00AA965C +:102D60000FB6F894DEBF0FBECDBFDF91CF911F919C +:102D700008950895CF93809113038823A1F0C09103 +:102D8000E900CF709091EC00892F817090FD80E870 +:102D9000C82B1092E9008091E80083FD0E9468151D +:102DA000CF70C093E900CF910895909393028093E0 +:102DB00092020895E0919202F0919302309721F0EF +:102DC0000190F081E02D099480E00895E091920255 +:102DD000F0919302309721F00280F381E02D099465 +:102DE0000895E0919202F0919302309721F00480CF +:102DF000F581E02D0994089520919002309191027F +:102E00008217930771F09093910280939002E09162 +:102E10009202F0919302309721F00680F781E02D25 +:102E20000994089520918E0230918F0282179307A2 +:102E300071F090938F0280938E02E0919202F09154 +:102E40009302309721F00084F185E02D09940895D4 +:102E500008950C9428170E94AF220E9400090E9436 +:102E600035230C94E4275F926F927F928F929F920A +:102E7000AF92BF92CF92DF92EF92FF920F931F9388 +:102E8000CF93DF9300D000D01F92CDB7DEB70E9462 +:102E900045099DE9C92E92E0D92E03E010E0AA244D +:102EA000A394B12C502E802F0E94C0094C01F60132 +:102EB000729062906F016826792661147104A1F402 +:102EC0000150110978F78FEF89838A831B820E9452 +:102ED000B8228160782F9D838C8349815A816B81D0 +:102EE0008D810E94E31738C08091F20281FD0E941B +:102EF000C9092BE030E07501022E02C0EE0CFF1C68 +:102F00000A94E2F7C70186219721892B09F12983C9 +:102F10005A828E209F2091E0892809F490E09B83BB +:102F20000E94B8228160782F9D838C8349815A81C9 +:102F30006B818D810E94E317000F111FF801EB5682 +:102F4000FD4F80819181E826F926F182E08204C05C +:102F50002150310980F6B4CF0E941C2510919402B3 +:102F60000E94DA161817D1F00E94DA1680939402A4 +:102F70000F900F900F900F900F90DF91CF911F91B6 +:102F80000F91FF90EF90DF90CF90BF90AF909F9008 +:102F90008F907F906F905F900C94EA080F900F9045 +:102FA0000F900F900F90DF91CF911F910F91FF9095 +:102FB000EF90DF90CF90BF90AF909F908F907F90D9 +:102FC0006F905F900895CF93DF93CDB7DEB72B97C7 +:102FD0000FB6F894DEBF0FBECDBF4F835887698709 +:102FE0007A878B87DE01119686E0FD0111928A9522 +:102FF000E9F785E0FE01379601900D928A95E1F799 +:1030000049815A816B817C818D819E810E945A1EEB +:103010002B960FB6F894DEBF0FBECDBFDF91CF91D8 +:103020000895CF93882309F4C2C0C82F823859F479 +:103030000E94DA1681FDBBC089E30E9434210E9400 +:10304000012289E30CC0833879F40E94DA1680FDEE +:10305000AEC083E50E9434210E94012283E50E94D4 +:103060007621CF910C940122843859F40E94DA160B +:1030700082FD9DC087E40E9434210E94012287E4E2 +:10308000EECF8CEF8C0F813A48F48C2F0E944C27A6 +:1030900081118DC08C2F0E943421E3CF80E28C0FF0 +:1030A000883048F4C77081E001C0880FCA95EAF7FC +:1030B0000E94BA21D6CF8BE58C0F833078F4C53AC5 +:1030C00029F0C63A31F083E890E005C081E890E04D +:1030D00002C082E890E0CF910C94FC1688E58C0F3A +:1030E000833108F064C0C83A39F1C93A41F1CA3AAB +:1030F00049F1CB3A51F1CC3A59F1CD3A61F1C03BAB +:1031000069F1CE3A71F1CF3A79F1C13B81F1C23B1D +:1031100089F1C33B91F1C43B99F1C53BA1F1C63B99 +:10312000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF9 +:10313000C9F180E090E038C082EE90E035C089EEC1 +:1031400090E032C08AEE90E02FC085EB90E02CC07A +:1031500086EB90E029C087EB90E026C08CEC90E0F5 +:1031600023C08DEC90E020C083E891E01DC08AE888 +:1031700091E01AC082E991E017C084E991E014C09F +:1031800081E292E011C083E292E00EC084E292E01C +:103190000BC085E292E008C086E292E005C087E2BB +:1031A00092E002C08AE292E0CF910C941217CF9184 +:1031B0000895882309F44BC0823859F40E94DA1626 +:1031C00081FF45C089E30E9434210E94012289E3E6 +:1031D0000CC0833871F40E94DA1680FF38C083E592 +:1031E0000E9434210E94012283E50E9476210C94E2 +:1031F0000122843859F40E94DA1682FF28C087E43D +:103200000E9434210E94012287E4EFCF9CEF980FA7 +:10321000913A58F390E2980F983050F4877091E00B +:1032200001C0990F8A95EAF7892F0E94C021DFCF4C +:103230009BE5980F933020F480E090E00C94FC160E +:10324000885A833120F480E090E00C94121708959E +:10325000882321F00E94BA210C940122089588232A +:1032600021F00E94C0210C94012208957F928F9238 +:103270009F92AF92BF92CF92DF92EF92FF920F9305 +:103280001F93CF93DF931F92CDB7DEB77C01C62E7D +:10329000772EFC01058102950F70128111110E9499 +:1032A000D7210E942D21882379F0112369F080E233 +:1032B0008C0D883048F082E00E9416210E942D215A +:1032C00091E0D82ED92601C0D12CE72DE295EF70E0 +:1032D000F0E0E05AFF4F0C94752C872D807F072D6E +:1032E0000F70882311F00295007F112389F00023CD +:1032F00009F499C180E28C0D883020F4802F0E945F +:10330000BA2103C0802F0E94CA210E9401228BC1D2 +:103310008C2D0E94D918002309F4C3C180E28C0DC2 +:10332000883020F4802F0E94C02103C0802F0E948B +:10333000D0210E940122B5C1872D807F972D9F70DB +:10334000803211F4892F03C0892F8295807FCC2091 +:1033500021F0F1E0CF16A1F01DC0112339F00023B8 +:1033600019F1013009F50E94EA219BC1002319F0EF +:10337000013009F496C189830E94ED21898110C131 +:10338000112321F0063008F08CC10EC0053008F082 +:1033900088C106C1112359F0002331F0F70195814E +:1033A00090FF41C19F7095830E9428197AC1002324 +:1033B00009F4F6C03EC1872D86958695837090E00E +:1033C000009719F0019761F06CC1112321F08C2D49 +:1033D000972D937002C080E090E00E94FC1661C1BE +:1033E000112321F08C2D972D937002C080E090E086 +:1033F0000E94121756C18C2D112319F00E9424240B +:1034000002C00E948C240E9411254BC1872D83701D +:1034100009F052C0111145C18C2D82958695877097 +:10342000880F880F9C2D9F70892E912CA12CB12C78 +:10343000082E04C0880C991CAA1CBB1C0A94D2F745 +:10344000C4FE14C00FE010E020E030E0B901A80194 +:1034500004C0440F551F661F771F8A95D2F7CB0112 +:10346000BA01609570958095909503C060E070E01A +:10347000CB01272D26952695237030E0223031058B +:1034800069F02330310589F0682979298A299B2937 +:103490002130310571F00E94A21F03C168297929EA +:1034A0008A299B290E94BE1FFCC00E94A21FC50141 +:1034B000B4010E94861FF5C0112319F0872D817079 +:1034C00001C08695882309F4ECC08C2D82958695E1 +:1034D0008770880F880F9C2D9F70892E912CA12CAE +:1034E000B12C082E04C0880C991CAA1CBB1C0A9481 +:1034F000D2F7C4FE14C00FE010E020E030E0B901C4 +:10350000A80104C0440F551F661F771F8A95D2F784 +:10351000CB01BA01609570958095909503C060E0ED +:1035200070E0CB01272D269526952370422F50E081 +:103530004230510569F04330510589F068297929F5 +:103540008A299B294130510571F00E947C20A9C035 +:10355000682979298A299B290E949820A2C00E9463 +:103560007C20C501B4010E9460209BC08C2D90E09E +:10357000FC01E05EF109E531F10508F050C0E059C9 +:10358000FF4F0C94752C0C2D0F70872D8F7111230C +:1035900021F00E94F91F802F07CF0E941A20802F50 +:1035A0000E942F197EC0112341F0053008F079C028 +:1035B000872D8F710E943F2074C0063008F071C0C3 +:1035C000F7CF112339F0872D8F710E94F91F69C041 +:1035D0001123C9F3872D8F710E941A2062C0112315 +:1035E00029F0872D8F710E94E41F5BC00E94DA1FB3 +:1035F00058C0112351F0172D1F71812F0E94F91F00 +:1036000063E0812F0E940D214CC081E00E941621B1 +:10361000023008F446C082E00E94162142C0112305 +:1036200031F0002381F28C2D0E9411183AC0002342 +:1036300089F28C2D0E94D91834C0472D4F706C2D03 +:10364000C7010E9455030E94FE1E2BC0111129C004 +:10365000472D4F7050E042305105B9F04CF4411500 +:10366000510581F041305105E1F40E940C2819C048 +:103670004330510569F04430510599F48C2D0E9476 +:103680005E280FC00E94F5270CC00E94282809C0A0 +:103690000E943B2806C0472D4F706C2DC7010E9429 +:1036A000CB05DD20F9F00E94092180FD1BC0F70148 +:1036B00012820E9403210E94F91FC7010E94811BF0 +:1036C0000E9403210F90DF91CF911F910F91FF90E6 +:1036D000EF90DF90CF90BF90AF909F908F907F90B2 +:1036E0000C941A200F90DF91CF911F910F91FF90B2 +:1036F000EF90DF90CF90BF90AF909F908F907F9092 +:1037000008950F931F93CF93DF93EC0188819981E4 +:103710002B813C81232BB9F09F3F11F48F3F99F00F +:10372000CE010E94CA03882371F0688179818A8161 +:103730000E94FF208C010E94B4200E947B1FB801D0 +:10374000CE010E943619DF91CF911F910F910895FC +:103750000E94D7210E94E7210E94AC210E940122F1 +:103760000E94C2250E94112580E090E00E94FC1674 +:1037700080E090E00C9412170E94C7210C94A81BC3 +:103780000E94F420292F22952F7030E02C30310533 +:103790004CF42A3031056CF42250310922303105C5 +:1037A000A8F407C02C30310569F02F30310551F0F5 +:1037B0000DC0803F69F018F4803E40F409C0843F9A +:1037C00029F406C093FB882780F9089580E00895C6 +:1037D00081E00895CF93DF9300D000D01F92CDB742 +:1037E000DEB70F900F900F900F900F90DF91CF9159 +:1037F0000895CF93DF9300D000D000D0CDB7DEB7CF +:1038000026960FB6F894DEBF0FBECDBFDF91CF91E5 +:1038100008951F93CF93DF93C0919D0216E080918E +:103820009E02C81799F0D0E01C9FF0011D9FF00D7B +:103830001124E156FD4F4081518162817381848161 +:1038400095810E94F91B2196C770E9CFDF91CF9136 +:103850001F9108954091CF025091D0026091D10202 +:103860007091D2028091D3029091D4020C94F91BF2 +:103870008091D40282958F7009F054C08091D1025A +:10388000882309F44FC080919D02A0919E0260910F +:10389000CF027091D0024091D2025091D302B6E093 +:1038A0008A1709F43FC090E041155105C1F17F3FEF +:1038B00011F46F3FA1F1B89FF001B99FF00D1124F1 +:1038C000E156FD4F218172132AC02081621327C067 +:1038D0002281211124C0238134812417350710F45B +:1038E00021503109241B350B283C3105C0F42091AF +:1038F000D4022F7020612093D40226E0289FF0018B +:10390000299FF00D1124EC55FD4F80818F7080614F +:1039100080838FEC92E00E94811B0C94091C01961D +:103920008770BECF0895CF92DF92EF92FF920F93F0 +:103930001F93CF93DF93CDB7DEB762970FB6F8949E +:10394000DEBF0FBECDBF8C0185E0F801DE011D9604 +:1039500001900D928A95E1F7D8014C9111965C91F6 +:10396000119712966C9112971396CD90DC90149744 +:103970003091CF027091D0028091D2029091D30207 +:10398000009709F46BC17F3F19F43F3F09F466C10A +:10399000E090D102EE2009F4C0C02091D402C816F4 +:1039A000D90628F0F601E81BF90BCF0104C0809579 +:1039B00090958C0D9D1DFF24F394883C910578F023 +:1039C000F12C207F09F0C6C07C2DD98AC88A89894C +:1039D0000E94EA1B8FEC92E00E94811BB1C0822FF3 +:1039E000807F09F046C0751314C0341312C06111F2 +:1039F00010C02F7020612093D4020E942A1C8FECEB +:103A000092E00E94811B8091D402D80115968C937C +:103A10002EC0CD2819F15F3F11F44F3FF9F0F62E7B +:103A200061111CC080919D0220919E0236E0821798 +:103A300009F45AC090E0389FF001399FF00D11242D +:103A4000E156FD4F7181571306C07081471303C0C3 +:103A50007281711103C001968770E9CFF62E66233B +:103A600009F418C18091D40281608093D402F12CB2 +:103A700011C1751308C0341306C0611104C08091D0 +:103A8000D402D801C3C04D875E878D859E856A8B21 +:103A90000E94C01B6A898823E1F16623D1F120913D +:103AA000D402822F82958F7090E0029774F08091FB +:103AB000CF029091D00298878F831986DB86CA86C1 +:103AC0002C87CE0107960E94811B86E0F801AFEC9F +:103AD000B2E001900D928A95E1F70E94381C0E9495 +:103AE0002A1CFF24F394D6C04D875E878D859E8562 +:103AF0000E94F420292F22952F7030E022303105CA +:103B00000CF0BCC09F7009F0B6C0805E883008F42D +:103B1000C1C0C8010E94811BE4CFC816D90608F4B1 +:103B200053C0F601E81BF90BCF01883C910508F45E +:103B300050C0F12C7C2DD98AC88A89890E94EA1B41 +:103B4000EFECF2E086E0DF011D928A95E9F70E9432 +:103B50002A1CA0C0751314C0341312C0611110C008 +:103B60008091D402F8018583C8010E94811B86E000 +:103B7000EFECF2E0DF011D928A95E9F7FE2C8AC096 +:103B80004D875E878D859E856A8B0E94C01B6A89E2 +:103B9000882309F4BECF662309F4BBCF2091D40259 +:103BA000822F82958F7090E002970CF48ECF8091D7 +:103BB000CF029091D0029A8389831B82DD82CC82CE +:103BC0002E83CE0101967FCF809590958C0D9D1D03 +:103BD000ACCFF62E662309F49CCF75132EC0341398 +:103BE0002CC02091D40220FD1FC0822F82958F709F +:103BF000D9F0D80115962C9315978F3049F08F5F27 +:103C0000982F9295907F822F8F70892B15968C9389 +:103C1000C8010E94811B86E0F801AFECB2E0019080 +:103C20000D928A95E1F793CF86E0F801AFECB2E010 +:103C300001900D928A95E1F72DC04D875E878D85A5 +:103C40009E850E94C01B811140CF8091D40281606B +:103C50008093D402C8010E94811B1CC0662309F412 +:103C600058CF4D875E878D859E850E94C01B882317 +:103C700009F44FCF2ACF811148CF0CC02430310531 +:103C80000CF047CF9F7009F440CFF8019581907FE9 +:103C900009F03BCF8F2D62960FB6F894DEBF0FBEB2 +:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB +:103CB000CF9008951F93CF93DF93CDB7DEB72C97A6 +:103CC0000FB6F894DEBF0FBECDBF4F83588769870C +:103CD0007A878B879C87CE0107960E94931C882346 +:103CE00069F08F8198852A853B85232BF1F19F3FD1 +:103CF00009F063C08F3F09F060C037C086E0FE0165 +:103D00003796DE01119601900D928A95E1F76F8149 +:103D10007885EA85FB85309741F17F3F11F46F3F4D +:103D200021F120919E0230E0C90101968770992708 +:103D300040919D0250E08417950709F447C06983BC +:103D40007A83FD83EC8396E0929FD001939FB00D20 +:103D50001124A156BD4FFE01319601900D929A9506 +:103D6000E1F780939E020E94091C16E080919D025B +:103D700090919E028917C1F1189FC00111248156AC +:103D80009D4F0E94931C882379F1E0919D021E9F14 +:103D9000F0011124E156FD4F408151816281738110 +:103DA000848195810E94F91B80919D0290E001968B +:103DB0008770992780939D02D9CF4F815885698557 +:103DC0007A858B859C850E94F91BCFCF0E94BC1BF6 +:103DD00010929E0210929D02EFECF2E086E0DF016D +:103DE0001D928A95E9F7C1CF2C960FB6F894DEBFE5 +:103DF0000FBECDBFDF91CF911F910895EF92FF923B +:103E00000F931F93CF93DF938C01009709F46CC03D +:103E1000F12CEE24E394E8012196F8018491843793 +:103E200040F4843008F051C0813081F0823019F1C3 +:103E30005BC0853709F444C0A8F19CE7980F903720 +:103E400008F052C08F770E94D91841C00E5F1F4FF3 +:103E5000FE01C49180E28C0F883048F4C7708E2D2B +:103E600001C0880FCA95EAF70E94DA2114C08C2F8E +:103E70000E9411182DC00E5F1F4FFE01C49180E2F9 +:103E80008C0F883058F4C7708E2D01C0880FCA95EA +:103E9000EAF70E94E0210E9401221AC08C2F0E94A2 +:103EA000D91816C00E5F1F4FFE01C491CC2381F0BC +:103EB0008FE99FE00197F1F700C00000C150F6CFF5 +:103EC0000E5F1F4FFE01F49003C00E9411188E0177 +:103ED0008F2D882309F49FCFEFE9FFE03197F1F7A9 +:103EE00000C000008150F5CFDF91CF911F910F915D +:103EF000FF90EF90089508956093D9027093DA02CD +:103F00008093DB029093DC020C94A81B0F931F9309 +:103F10000091D9021091DA022091DB023091DC028B +:103F2000DC01CB01802B912BA22BB32B8093D902E8 +:103F30009093DA02A093DB02B093DC021F910F9101 +:103F40000C94A81B0F931F930091D9021091DA02D1 +:103F50002091DB023091DC02DC01CB018023912334 +:103F6000A223B3238093D9029093DA02A093DB02B9 +:103F7000B093DC021F910F910C94A81B0F931F9319 +:103F80000091D9021091DA022091DB023091DC021B +:103F9000DC01CB0180279127A227B3278093D90288 +:103FA0009093DA02A093DB02B093DC021F910F9191 +:103FB0000C94A81B1092D5021092D6021092D70230 +:103FC0001092D8020C94A81B41E050E060E070E031 +:103FD00004C0440F551F661F771F8A95D2F7409380 +:103FE000D5025093D6026093D7027093D8020C94F6 +:103FF000A81B41E050E060E070E004C0440F551F92 +:10400000661F771F8A95D2F78091D5029091D602CC +:10401000A091D702B091D802482B592B6A2B7B2B49 +:104020004093D5025093D6026093D7027093D80282 +:104030000C94A81B41E050E060E070E004C0440F25 +:10404000551F661F771F8A95D2F74095509560954A +:1040500070958091D5029091D602A091D702B0912F +:10406000D802482359236A237B234093D5025093D7 +:10407000D6026093D7027093D8020C94A81B41E03B +:1040800050E060E070E004C0440F551F661F771FCA +:104090008A95D2F78091D5029091D602A091D7024D +:1040A000B091D802482759276A277B274093D50229 +:1040B0005093D6026093D7027093D8020C94A81B39 +:1040C0000F931F930091D5021091D6022091D70231 +:1040D0003091D802DC01CB01802B912BA22BB32B8A +:1040E0008093D5029093D602A093D702B093D802C2 +:1040F0001F910F910C94A81B0F931F930091D50251 +:104100001091D6022091D7023091D802DC01CB0168 +:1041100080239123A223B3238093D5029093D602C8 +:10412000A093D702B093D8021F910F910C94A81BB3 +:104130000F931F930091D5021091D6022091D702C0 +:104140003091D802DC01CB0180279127A227B32729 +:104150008093D5029093D602A093D702B093D80251 +:104160001F910F910C94A81B0895CF92DF92EF92AC +:10417000FF920F931F93CF93DF938C01C090D902CE +:10418000D090DA02E090DB02F090DC028091D50260 +:104190009091D602A091D702B091D802C82AD92A0C +:1041A000EA2AFB2ACFE1D0E0D701C6010C2E04C0D9 +:1041B000B695A795979587950A94D2F780FF06C084 +:1041C000B8018C2F0E945008019721F4219760F7C5 +:1041D00080E001C08C2FDF91CF911F910F91FF9054 +:1041E000EF90DF90CF900895CF93DF93EC010E9482 +:1041F000B520BE010E945008DF91CF910895CB01F8 +:104200000E94F42008958091DD028595859585951D +:1042100008958091DD028770089598E0899F90014C +:104220001124262B2093DD020C94F91F2091DD022E +:10423000809582238093DD02982F977069F430E097 +:10424000482F552747FD50952417350729F08595A8 +:10425000859585950C941A2008959091DD029770AC +:1042600081E009F480E0089590911501992321F0EF +:1042700090911601911109C02091170130911801F8 +:10428000F90132969FEF40E01FC0982F96959695C2 +:1042900096959F3050F5E0911701F0911801E90FC4 +:1042A000F11D877021E030E0A90102C0440F551FC5 +:1042B0008A95E2F7CA019181892B818308959F3FF6 +:1042C00039F04F5F4E3041F051915813F8CF0DC087 +:1042D0005111F7CF942FF5CF9F3F39F0F901E90F36 +:1042E000F11D97FDFA958283089508959091150127 +:1042F000992321F090911601911109C02091170185 +:1043000030911801F9013296205F3F4F1FC0982F5E +:104310009695969596959F30F0F4E0911701F0915F +:104320001801E90FF11D877021E030E0A90102C0FA +:10433000440F551F8A95E2F7CA0180959181892320 +:10434000818308953196E217F30729F0908198133D +:10435000F9CF1082F7CF089581E090E0E091170146 +:10436000F0911801E80FF91F108201968031910534 +:10437000A9F708959091F102892B8093F102089595 +:1043800080959091F10289238093F1020895109213 +:10439000F10208959091F002892B8093F002089524 +:1043A00080959091F00289238093F00208951092F5 +:1043B000F00208959091EF02892B8093EF02089507 +:1043C00080959091EF0289238093EF0208951092D7 +:1043D000EF0208958093DE0208951092DE020895A0 +:1043E0008091170190911801FC0131969C01205F8A +:1043F0003F4F80E0919191118F5FE217F307D1F762 +:104400000895E0911701F09118018091F1028083E5 +:10441000E0911701F091180190818091F002892BB1 +:104420008083E0911701F091180190818091EF0253 +:10443000892B80838091DE02882361F0E09117014F +:10444000F09118019081892B80830E94F0218111C5 +:104450001092DE0280911701909118010C94E616DB +:1044600020E0009739F0AC01415051098423952395 +:104470002F5FF7CF822F089580911303843039F195 +:104480001092F30220E488E190E00FB6F894A8952A +:10449000809360000FBE2093600080E00E94BC0209 +:1044A00080E00E94EA0883B7817F846083BF83B77E +:1044B000816083BF7894889583B78E7F83BF88E1BE +:1044C0000FB6F89480936000109260000FBE0895BC +:1044D0000895089580E00E94BC020E9468220E9414 +:1044E00045090E9469220E94CA0991E0811101C018 +:1044F00090E0892F08950E94BC1B80E00E94BC02BE +:104500000E94E4270E94DA160C94EA081F920F9288 +:104510000FB60F9211248F939F93AF93BF93809107 +:10452000F302811113C08091F4029091F502A091E1 +:10453000F602B091F7024196A11DB11D8093F402DD +:104540009093F502A093F602B093F702BF91AF915A +:104550009F918F910F900FBE0F901F90189582E042 +:1045600084BD93E095BD9AEF97BD80936E0008954A +:104570002FB7F8948091F4029091F502A091F60281 +:10458000B091F7022FBF0895CF92DF92EF92FF9282 +:104590000F931F932FB7F8944091F4025091F502B6 +:1045A0006091F6027091F7022FBF6A017B01EE2441 +:1045B000FF248C0120E030E0C016D106E206F306AD +:1045C00010F4415051099A01281B390BC9011F9160 +:1045D0000F91FF90EF90DF90CF9008951F920F9270 +:1045E0000FB60F9211248F939F93AF93BF93809137 +:1045F000F4029091F502A091F602B091F7020196B3 +:10460000A11DB11D8093F4029093F502A093F602D0 +:10461000B093F702BF91AF919F918F910F900FBE12 +:104620000F901F9018950E94D713F8942FEF87EAE8 +:1046300091E6215080409040E1F700C0000087E003 +:1046400090EBDC0180931E0390931F03A093200343 +:10465000B09321039CE088E10FB6F894A89580936D +:1046600060000FBE90936000FFCF0E947423811101 +:1046700002C00E9450230E947F238093F2020E9476 +:10468000872380931C0387FB882780F9809316017A +:104690000E948323682F70E080E090E00C947C1FE0 +:1046A0006DEE7EEF80E090E00E949B2C60E082E067 +:1046B00090E00E94892C60E083E090E00E94892CC9 +:1046C00060E084E090E00E94892C60E085E090E06A +:1046D0000E94892C60E086E090E00E94892C6FEFB8 +:1046E00087E090E00C94892C80E090E00E94832C7D +:1046F00021E08D3E9E4F09F020E0822F089582E058 +:1047000090E00C947B2C83E090E00C947B2C84E074 +:1047100090E00C947B2C682F84E090E00C94892C22 +:1047200086E090E00C947B2C682F86E090E00C945F +:10473000892C87E090E00C947B2C682F87E090E038 +:104740000C94892C8091FA0280FF0BC060911C01AF +:1047500085E0689FB00111247595679575956795FB +:104760002BC081FF09C060911C0185E0689FB001EA +:1047700011247595679520C082FF07C060911C01C8 +:1047800085E0689FB001112417C09091FB02992326 +:10479000D1F060911B01961788F720911C0185E0EC +:1047A000289F90011124929FA001939F500D1124E6 +:1047B00070E0CA010E94612C6038710540F46115F7 +:1047C000710539F002C065E070E0862F08958FE72B +:1047D000089581E008958091FA0280FF08C06091F9 +:1047E0001A0170E0759567957595679521C081FFF1 +:1047F00006C060911A0170E07595679519C082FF37 +:1048000004C060911A0170E010C09091FB029923DE +:10481000C1F0609119019617A0F780911A01899F44 +:10482000C001112470E00E94612C6038710528F4E9 +:104830006115710521F0862F08958FE7089581E0B5 +:10484000089561E070E0F4CF803F21F40E94A2233C +:10485000819504C0813F29F40E94A2238093FE0227 +:104860000895823F21F40E94A223819504C0833FD2 +:1048700029F40E94A2238093FD020895893F19F430 +:104880000E94EB2305C08A3F31F40E94EB238195FF +:104890008093FF0208958B3F21F40E94EB238195C2 +:1048A00004C08C3F29F40E94EB23809300030895F9 +:1048B000843F21F48091FC02816017C0853F21F480 +:1048C0008091FC02826011C0863F21F48091FC023D +:1048D00084600BC0873F21F48091FC02886005C092 +:1048E000883F31F48091FC0280618093FC0208953E +:1048F0008D3F21F48091FA0281600BC08E3F21F43C +:104900008091FA02826005C08F3F29F48091FA02FB +:1049100084608093FA020895803F39F48091FE020A +:1049200087FF6CC01092FE0269C0813F29F480911C +:10493000FE021816BCF362C09091FD02823F29F47A +:1049400097FF5CC01092FD0259C0833F19F41916FD +:10495000CCF354C0893F41F48091FF0218160CF04B +:104960004DC01092FF024AC08A3F29F48091FF0295 +:1049700087FF44C0F6CF8B3F39F48091000387FF57 +:104980003DC0109200033AC08C3F29F4809100038F +:104990001816BCF333C0843F21F48091FC028E7F53 +:1049A00017C0853F21F48091FC028D7F11C0863FA6 +:1049B00021F48091FC028B7F0BC0873F21F4809112 +:1049C000FC02877F05C0883F31F48091FC028F7E16 +:1049D0008093FC0213C08D3F21F48091FA028E7FF8 +:1049E0000BC08E3F21F48091FA028D7F05C08F3F6E +:1049F00029F48091FA028B7F8093FA028091FD0264 +:104A000081110EC08091FE0281110AC08091FF02C7 +:104A1000811106C080910003811102C01092FB0237 +:104A200008958CEF92E00E94F1160E94B8229093B4 +:104A3000F9028093F80208951F93CF93DF9380913A +:104A4000F8029091F9020E94C422AC019091FB02FD +:104A5000992321F020911D0130E006C020911E0114 +:104A60008AE0289F900111244217530708F486C05A +:104A70008091FD02C091FE02D091FF0210910003CF +:104A8000811107C0C11176C0D11174C0111172C05B +:104A900075C09F3F19F09F5F9093FB02181624F496 +:104AA0000E94A2238093FD028091FD0287FF05C032 +:104AB0000E94A22381958093FD021C1624F40E947B +:104AC000A2238093FE028091FE0287FF05C00E9410 +:104AD000A22381958093FE026091FD02662339F145 +:104AE000C091FE02CC2319F1772767FD7095872FBF +:104AF000972F0E94832923E333E343E35FE30E947C +:104B0000932A0E9450296093FD026C2F772767FD3E +:104B10007095872F972F0E94832923E333E343E384 +:104B20005FE30E94932A0E9450296093FE021D16A3 +:104B300024F40E94EB238093FF028091FF0287FF01 +:104B400005C00E94EB2381958093FF02111624F487 +:104B50000E94EB23809300038091000387FF05C030 +:104B60000E94EB23819580930003DF91CF911F91E9 +:104B70000C9411259F3F09F08ECF96CFDF91CF91F6 +:104B80001F910895ECEFF2E085E0DF011D928A9518 +:104B9000E9F71092FB021092FA020895833081F136 +:104BA00028F4813059F08230D1F00895853009F42D +:104BB00049C0B8F1863009F456C0089580911E01AD +:104BC000262F30E0280F311D2F3F310524F4680FC8 +:104BD00060931E0108958FEF80931E0108958091C8 +:104BE0001D01262F30E0280F311D2F3F310524F401 +:104BF000680F60931D0108958FEF80931D01089544 +:104C000080911C01262F30E0280F311D2F3F3105E8 +:104C100024F4680F60931C0108958FEF80931C01AA +:104C2000089580911B01262F30E0280F311D2F3F62 +:104C3000310524F4680F60931B0108958FEF809372 +:104C40001B01089580911A01262F30E0280F311D95 +:104C50002F3F310524F4680F60931A0108958FEFF8 +:104C600080931A01089580911901262F30E0280FB2 +:104C7000311D2F3F310524F4680F60931901089509 +:104C80008FEF809319010895833011F128F481305A +:104C900049F0823091F00895853081F120F186301D +:104CA000C1F1089580911E01681720F4861B80933E +:104CB0001E01089510921E01089580911D0168172C +:104CC00020F4861B80931D01089510921D01089504 +:104CD00080911C01681720F4861B80931C010895A5 +:104CE00010921C01089580911B01681720F4861B07 +:104CF00080931B01089510921B01089580911A0161 +:104D0000681720F4861B80931A01089510921A01E7 +:104D1000089580911901681720F4861B809319016A +:104D200008951092190108950F931F93873208F088 +:104D300048C08E3108F08DC0803109F477C008F585 +:104D4000873009F461C068F4863009F09DC0809115 +:104D5000F202817F8E7F8093F20281E080930203D2 +:104D600094C08B3009F489C08E3009F08DC08091D9 +:104D7000F20282FB222720F991E0922790FB82F930 +:104D80005EC0863109F479C060F4813109F07CC0DD +:104D90000E94BC1B9091160181E089278093160127 +:104DA0006CC0893109F469C08B3109F06DC0809104 +:104DB000F20281FB222720F991E0922790FB81F9F2 +:104DC0003EC0883309F459C050F4893209F457C001 +:104DD000853309F454C0873209F451C055C0833477 +:104DE00009F44DC028F48A3308F44EC0895332C008 +:104DF000883409F049C00E94BC1B0E94FA090E9435 +:104E0000C1030E94132339C09091F202892F80952B +:104E1000817080FB90F929F0966098609093F2027F +:104E200034C0997F977F9093F20227C08091F2025D +:104E300083FB222720F991E0922790FB83F980934E +:104E4000F2029923D1F08091F20281608093F20204 +:104E500014C08D5141E050E060E070E08A019B0198 +:104E600004C0000F111F221F331F8A95D2F7C901FA +:104E7000B8010E947C1F0E94BC1B81E006C061E05B +:104E800070E080E090E0F5CF80E01F910F910895F1 +:104E900080E0089580E00895CF93C82F80910203A9 +:104EA000813069F018F08230C9F184C0E0911701B7 +:104EB000F09118018081823209F07EC007C0E09134 +:104EC0001701F09118018081823261F48C2F0E94C9 +:104ED0004827811104C08C2F0E9494261DC081E0B8 +:104EE00090E01AC08C2F0E944A27811114C0C4314F +:104EF00079F048F4CB3079F0C03109F061C082E03C +:104F00008093020308C0C93219F0C83321F058C099 +:104F10001092020355C081E0817054C0C93291F1F2 +:104F200020F5C43179F1B0F4C73009F047C08EE103 +:104F300080931E0182E380931D018AE080931C010F +:104F400084E180931B0188E080931A0188E28093BA +:104F5000190134C0CE51C63088F5EC2FF0E0EA5488 +:104F6000FE4F80818093010329C0CE34E9F020F404 +:104F7000CB3421F56AE013C0C13579F0C235F1F4C4 +:104F800061E00DC080910103882319F010920103A4 +:104F900015C081E08093020315C061E006C08091D6 +:104FA00001030E94CE250AC06AE0809101030E949D +:104FB000442604C01092020380E004C081E002C0D5 +:104FC00080E0AACFCF9108950E947423811102C07E +:104FD0000E9450230E94902380931D0380FF02C0F3 +:104FE000869501C080E00C94BC0280911D03982F2F +:104FF0009695292F30E0233031054CF49F5F990FAF +:105000008170892B816080931D030E94942380917D +:105010001D0386950C94BC0280911D03982F9695D4 +:1050200091F09158990F8170892B80931D038E7F89 +:1050300091E009F490E080911D0390FB80F980934A +:105040001D030E94942380911D0386950C94BC023D +:1050500080911D03982F909590FB80F980931D03FC +:105060000E94942380911D0380FF02C0869501C099 +:1050700080E00C94BC0290911D03892F86958F5F70 +:105080008F779170843028F4880F892B80931D03CB +:1050900002C090931D0380911D038E7F91E009F45F +:1050A00090E080911D0390FB80F980931D030E9486 +:1050B000942380911D0386950C94BC0220911D03BE +:1050C000922F96958927982F990F822F8170892B7F +:1050D00080931D038E7F91E009F490E080911D0381 +:1050E00090FB80F980931D030E94942380911D03FF +:1050F00086950C94BC0280911D03869508955058A6 +:10510000BB27AA270ED0D1C1C2D130F0C7D120F021 +:1051100031F49F3F11F41EF4B7C10EF4E095E7FBA4 +:105120009FC1E92FD3D180F3BA17620773078407B1 +:10513000950718F071F49EF5EBC10EF4E0950B2E77 +:10514000BA2FA02D0B01B90190010C01CA01A001D9 +:105150001124FF27591B99F0593F50F4503E68F134 +:105160001A16F040A22F232F342F4427585FF3CF75 +:10517000469537952795A795F0405395C9F77EF446 +:105180001F16BA0B620B730B840BBAF09150A1F08F +:10519000FF0FBB1F661F771F881FC2F70EC0BA0F15 +:1051A000621F731F841F48F4879577956795B7959D +:1051B000F7959E3F08F0B3CF9395880F08F0992795 +:1051C000EE0F97958795089527D108F481E008950B +:1051D0000CD06BC163D140F05AD130F021F45F3F65 +:1051E00019F03EC1511195C14FC170D198F3992367 +:1051F000C9F35523B1F3951B550BBB27AA2762179B +:105200007307840738F09F5F5F4F220F331F441FDF +:10521000AA1FA9F333D00E2E3AF0E0E830D0915017 +:105220005040E695001CCAF729D0FE2F27D0660F04 +:10523000771F881FBB1F261737074807AB07B0E843 +:1052400009F0BB0B802DBF01FF2793585F4F2AF059 +:105250009E3F510568F004C15CC15F3FECF3983E8E +:10526000DCF3869577956795B795F7959F5FC9F7B6 +:10527000880F911D9695879597F90895E1E0660F3F +:10528000771F881FBB1F621773078407BA0720F0B8 +:10529000621B730B840BBA0BEE1F88F7E095089521 +:1052A00004D06894B11135C1089518D188F09F5782 +:1052B00090F0B92F9927B751A0F0D1F0660F771F62 +:1052C000881F991F1AF0BA95C9F712C0B13081F042 +:1052D0001FD1B1E008951CC1672F782F8827B85FD0 +:1052E00039F0B93FCCF3869577956795B395D9F7A3 +:1052F0003EF490958095709561957F4F8F4F9F4FAD +:105300000895E89409C097FB3EF4909580957095B8 +:1053100061957F4F8F4F9F4F9923A9F0F92F96E901 +:10532000BB279395F695879577956795B795F11176 +:10533000F8CFFAF4BB0F11F460FF1BC06F5F7F4F13 +:105340008F4F9F4F16C0882311F096E911C0772325 +:1053500021F09EE8872F762F05C0662371F096E82E +:10536000862F70E060E02AF09A95660F771F881FFD +:10537000DAF7880F9695879597F9089588D018F0F1 +:1053800011F08CD038F480C0C4C0E92F9FD0B0F3A6 +:105390005523C9F3E7FB6217730784079507A8F144 +:1053A00099F3E92FFF2788232AF03197660F771F9B +:1053B000881FDAF7952F5527442332F0915050403B +:1053C000220F331F441FD2F7BB27E91BF50B621BCB +:1053D000730B840BB109C1F222F4620F731F841F97 +:1053E000B11D31972AF0660F771F881FBB1FEFCFC3 +:1053F000915050405AF041F0882332F0660F771FE9 +:10540000881F91505040C1F7939530C0869577958D +:1054100067959F5FD9F7F8CF990F0008550FAA0B32 +:10542000E0E8FEEF16161706E807F907C0F01216B7 +:105430001306E407F50798F0621B730B840B950BBA +:1054400039F40A2661F0232B242B252B21F408950F +:105450000A2609F4A140A6958FEF811D811D0895AC +:1054600097F99F6780E870E060E008959F3F31F012 +:10547000915020F4879577956795B795880F911D82 +:105480009695879597F908959FEF80EC08950024ED +:105490000A941616170618060906089500240A9499 +:1054A00012161306140605060895092E0394000C1F +:1054B00011F4882352F0BB0F40F4BF2B11F460FFAE +:1054C00004C06F5F7F4F8F4F9F4F089557FD9058D7 +:1054D000440F551F59F05F3F71F04795880F97FBB8 +:1054E000991F61F09F3F79F0879508951216130672 +:1054F0001406551FF2CF4695F1DF08C016161706A1 +:105500001806991FF1CF86957105610508940895D5 +:10551000E894BB2766277727CB0197F908957CDFAE +:1055200008F48FEF08950BD0C0CFB1DF28F0B6DFBD +:1055300018F0952309F094CFA7CF1124EACFC6DF46 +:10554000A0F3959FD1F3950F50E0551F629FF00196 +:10555000729FBB27F00DB11D639FAA27F00DB11DEF +:10556000AA1F649F6627B00DA11D661F829F222778 +:10557000B00DA11D621F739FB00DA11D621F839FFF +:10558000A00D611D221F749F3327A00D611D231FD5 +:10559000849F600D211D822F762F6A2F11249F5723 +:1055A00050408AF0E1F088234AF0EE0FFF1FBB1F46 +:1055B000661F771F881F91505040A9F79E3F5105E5 +:1055C00070F04ECFA6CF5F3FECF3983EDCF38695AC +:1055D00077956795B795F795E7959F5FC1F7FE2B90 +:1055E000880F911D9695879597F90895FA01EE0F0A +:1055F000FF1F30962105310599F16115710561F4A0 +:105600008038BFE39B0749F168949038810561F0C9 +:105610008038BFEF9B0741F0992342F5FF3FE1053A +:105620003105210511F1E8940894E795D901AA23E1 +:1056300029F4AB2FBE2FF85FD0F310C0FF5F70F4DA +:10564000A695E0F7F73950F019F0FF3A38F49F7754 +:105650009F930CD00F9007FC905808953EF014CF04 +:1056600060E070E080E89FE308954FE79F775F93E5 +:105670004F933F932F939ED02F913F914F915F91E6 +:1056800052DF05C019F40EF0EBCE42CFFDCE26DF7F +:10569000C8F39638C0F707F80F92E8942BE33AEA7C +:1056A00048EB5FE74EDF0F920F920F924DB75EB758 +:1056B0000F92C0D0EAE0F1E016D04F915F91EF91E8 +:1056C000FF91E595EE1FFF1F49F0FE57E068442764 +:1056D000EE0F441FFA95E1F74195550B32D00F902C +:1056E00007FE26C00895DF93CF931F930F93FF9279 +:1056F000EF92DF927B018C01689405C0DA2EEF01F6 +:105700001EDFFE01E894A5912591359145915591B3 +:10571000AEF3EF0106DDFE019701A801DA9479F7F7 +:10572000DF90EF90FF900F911F91CF91DF9108953F +:105730009B01AC0160E070E080E89FE349CD90CE32 +:1057400095CECCDEE8F39923D9F3940F511DBBF32A +:105750009150504094F059F0882332F0660F771F33 +:10576000881F91505040C1F79E3F510544F7880F64 +:10577000911D9695879597F908955F3FACF0983EF7 +:105780009CF0BB27869577956795B79508F4B1602F +:105790009395C1F7BB0F58F711F460FFE8CF6F5F27 +:1057A0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCEC6 +:1057B000689456CE93DEC8F39923D1F3C6F3DF93F2 +:1057C000CF931F930F93FF92C92FDD2788232AF0D1 +:1057D0002197660F771F881FDAF720E030E040E856 +:1057E0005FEB9FE3883920F0803E30F021968F7781 +:1057F00087DCE2E3F1E003C083DCEFE5F1E073DF97 +:105800008B01BE01EC01FB2E6F5771097595771F57 +:10581000880B990B78DD28E132E741E35FE38FDE07 +:10582000AF2D9801AE01FF900F911F91CF91DF91A5 +:1058300078DC3BCEFA01DC01AA0FBB1F9B01AC0157 +:10584000BF5728F422273327442750781FC0B75169 +:1058500088F4AB2F0024469537952795011CA39516 +:10586000D2F3002069F0220F331F441FB395DAF3FF +:105870000DD045CC61307105A0E88A07B94630F4F7 +:105880009B01AC016627772788279078309621F016 +:1058900020833183428353830895AA1BBB1B51E1AC +:1058A00007C0AA1FBB1FA617B70710F0A61BB70B90 +:1058B000881F991F5A95A9F780959095BC01CD0135 +:1058C000089597FB072E16F4009407D077FD09D0B2 +:1058D0000E944D2C07FC05D03EF4909581959F4F7A +:1058E0000895709561957F4F0895EE0FFF1F059005 +:1058F000F491E02D0994F999FECF92BD81BDF89AFB +:10590000992780B50895A8E1B0E042E050E00C94FA +:10591000A32C262FF999FECF92BD81BDF89A01974D +:1059200000B4021639F01FBA20BD0FB6F894FA9AE7 +:10593000F99A0FBE08950196272F0E948A2C0C9485 +:10594000892CDC01CB01FC01F999FECF06C0F2BD28 +:10595000E1BDF89A319600B40D9241505040B8F72D +:065960000895F894FFCF4A +:10596600640007000CFF0000003F64DE0F6C104966 +:10597600101510E10F0101DF022808140A321E007B +:1059860002040507090B0C0E1011131517181A1C23 +:105996001D1F2123242628292B2D2F30323435375D +:1059A600393B1F0F03764F5F6F7F4969437909596A +:1059B60053633149803F5D8B803FF8BF803FCAE12A +:1059C600803F73ED803FCAE1803FF8BF803F5D8B2B +:1059D600803F3149803F0000803FF16D7F3F75EA8F +:1059E6007E3F4C827E3F833F7E3F84287E3F833FBF +:1059F6007E3F4C827E3F75EA7E3FF16D7F3F000021 +:105A0600803F3F4D3639830436040004C7035A03EA +:105A160073038C03A50301020304050607080900A6 +:00000001FF diff --git a/keyboard/planck/keymaps/joe/compiled.hex b/keyboard/planck/keymaps/joe/compiled.hex new file mode 100644 index 0000000000..865ed2ce99 --- /dev/null +++ b/keyboard/planck/keymaps/joe/compiled.hex @@ -0,0 +1,1479 @@ +:100000000C9467030C94AB030C94AB030C94AB03FC +:100010000C94AB030C94AB030C94AB030C94AB03A8 +:100020000C94AB030C94AB030C946A150C943C1623 +:100030000C949E230C94AB030C94AB030C94AB0375 +:100040000C94AB030C940D040C94AB030C94AB0315 +:100050000C94AB030C9406240C94AB030C94AB03EC +:100060000C94AB030C94AB030C94AB030C94AB0358 +:100070000C94AB030C94AB030C94AB030C94AB0348 +:100080000C94DF0B0C94AB030C94AB030C94AB03FC +:100090000C94AB030C94AB030C94AB030C94AB0328 +:1000A0000C94AB030C94AB030C94AB03A916CB16C6 +:1000B000B917CB16B91710173317B91788179B172D +:1000C000851A851AB41AB41AF31A131B691C691C11 +:1000D0001E1B691CCE1BCE1B351C3E1C691C631CE1 +:1000E000DB1BDB1BDB1BDB1BDB1BDB1BDB1BDB1B60 +:1000F000DB1BDB1BDB1BDB1BDB1BDB1BDB1BDB1B50 +:10010000EB1BF91B001C071C111C07634236B79B35 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C00002010000000000000000000001E1013316 +:1001D000023301260226012C022C012C022C0127BD +:1001E00002270133023302E1015002500150025054 +:1001F000015002500001E1012602260133023301C1 +:100200002C022C012C022C0133023301270227027D +:10021000E10150025001500250015002500001E132 +:10022000013302330126022602E10001E10133021B +:10023000330127022702E1000000F1A4F1A529A65D +:1002400000000000018C028C048C088C000000006F +:100250000000000000002B22032014001A000900F7 +:1002600013000A000D000F0018001C0033002D00C1 +:100270002A00040015001600170007000B001100EB +:1002800008000C00120028000F201D001B000600B3 +:10029000190005000E00100036003700520034002F +:1002A000E000E300E200E10001202C002C0002202D +:1002B0003800500051004F00032014001A000800BD +:1002C000150017001C0018000C00120013002D0070 +:1002D0002A0004001600070009000A000B000D00A8 +:1002E0000E000F00330028000F201D001B00060029 +:1002F00019000500110010003600370052003400CC +:10030000E000E300E200E10001202C002C000220CC +:100310003800500051004F00032000005200000040 +:10032000000000002602270254005F006000610008 +:100330002A00500051004F00000000002202670018 +:1003400055005C005D005E000F2000000000000012 +:100350000000000000008500560059005A005B00B4 +:10036000E000E300E200E1000120010001000220C2 +:100370005700620063005800032014001A000900AF +:10038000130023000D000F0018001C0033002D0087 +:100390002A00210015002200240007000B00110094 +:1003A00020001E00270028000F201D001B00060053 +:1003B000190005000E00100036003700520034000E +:1003C000E000E300E200E10001202C002C0002200C +:1003D0003800500051004F003500000000000000C0 +:1003E0000000000000000000033002300130003047 +:1003F0002A001E001F0020002100220023002400EC +:100400002500260027000100310000000000000048 +:1004100000000000000000002F0030004B002E0004 +:100420000100010001000100012001000100022083 +:1004300000004A004E004D003A003B003C003D00E9 +:100440003E003F00400041004200430044004500A0 +:100450004C00F400F000F500F600F900F700500041 +:10046000510052004F0000000100F200F100F300C3 +:10047000FB00FA00FC00000000004B0152054E0199 +:100480000100010001000100012000000000022025 +:100490000000500551054F050100A800AA00A90061 +:1004A000000000000000000000000000000000004C +:1004B0000000AE00AC00AB00000000000000000037 +:1004C00000000000000000500000000000000000DC +:1004D000000000000000000000000000000000001C +:1004E0000620072008200920012001000100022029 +:1004F0006600A700A6000F052803540068006500E9 +:10050000200050006C0061006E0063006B00200052 +:100510004B006500790062006F00610072006400AA +:1005200000002C034F007200740068006F006C0024 +:1005300069006E0065006100720020004B006500DC +:10054000790062006F0061007200640073000000B7 +:100550000403090409026D00040100A0FA09040063 +:10056000000103010100092111010001223F0007E0 +:1005700005810308000A09040100010301020009C2 +:100580002111010001224D000705820308000A091C +:1005900004020001030000000921110100012236BC +:1005A000000705830308000A090403000103000093 +:1005B0000009211101000122390007058403100000 +:1005C000011201100100000008EDFE606001000151 +:1005D00002000105010906A101050719E029E71537 +:1005E0000025019508750181020508190129059565 +:1005F00005750191029501750391010507190029FF +:100600007715002501957875018102C005010980E3 +:10061000A101850216010026B7001A01002AB700C1 +:10062000751095018100C0050C0901A10185031613 +:100630000100269C021A01002A9C02751095018176 +:1006400000C005010902A1010901A1000509190164 +:100650002905150025019505750181029501750390 +:1006600081010501093009311581257F9502750841 +:10067000810609381581257F950175088106050CCD +:100680000A38021581257F950175088106C0C005CD +:10069000010906A101050719E029E71500250195C3 +:1006A0000875018102950175088101050819012964 +:1006B00005950575019102950175039101050719CD +:1006C0000029FF150025FF950675088100C011243B +:1006D0001FBECFEFDAE0DEBFCDBF04B603FE24C0FD +:1006E00080911E0390911F03A0912003B0912103DC +:1006F0008730904BA740B04BB9F410921E03109274 +:100700001F03109220031092210314BE84B7877F29 +:1007100084BF88E10FB6F894809360001092600067 +:100720000FBEE0E0F8E3099511E0A0E0B1E0E6E9F2 +:10073000FBE502C005900D92A03CB107D9F713E08C +:10074000A0ECB1E001C01D92AE31B107E1F70E940B +:10075000B0120C94C92D0C9400000895089581E006 +:10076000089508950C94AE030C94AF030C94B10358 +:100770000E94932923E030E0281B3109220F2093A7 +:10078000C4010895282F2F9880918000211108C05E +:10079000877F8093800010928D0010928C001BC088 +:1007A000886080938000233019F48FEF9FEF0FC093 +:1007B00083E090E0821B9109880F991F2FEF3FEF94 +:1007C000A90102C0569547958A95E2F7CA01909310 +:1007D0008D0080938C000C94B8030E94B80384E0D1 +:1007E0008093C3011092C0010895279A2F988FEF2C +:1007F0009FEF90938700809386008AE0809380002B +:1008000089E1809381000E94FC280C94ED030E94F2 +:10081000F5036E9A769A0C94AD031F920F920FB661 +:100820000F9211242F933F938F939F93EF93FF93F6 +:10083000E091C101F091C201CF0101969093C201F4 +:100840008093C1010090C30102C0F695E7950A9418 +:10085000E2F7EF738091C001823019F4E03251F475 +:1008600004C0813039F4EF3329F480916F008D7F1B +:1008700080936F00F0E0E457FE4FE49121E031E017 +:10088000E29FC001E39F900D11240090C40102C0BB +:10089000969587950A94E2F790938D0080938C004B +:1008A000FF91EF919F918F913F912F910F900FBEEC +:1008B0000F901F901895FC01613061F028F06230B4 +:1008C00079F0633099F018C082818823A9F08BE217 +:1008D00092E008958281882379F08EE192E0089574 +:1008E0008281882349F085EF91E0089582818823F1 +:1008F00019F08CEC91E0089580E090E0089581E09B +:1009000008950C947F0408950C94070480911502B7 +:10091000882309F448C08091D1019091D2010097B9 +:1009200079F40E94D0239093D2018093D1018091D9 +:10093000D30190E0009771F48091D40190E00AC057 +:100940000E94DC2320910001309101012817390712 +:1009500040F329C00197880F991F880F991FFC0148 +:10096000EB52FE4F60817181828193810E94450B21 +:10097000E091D30184E0E89FF0011124EB52FE4F97 +:1009800060817181828193814FE050E00E94FD0E71 +:100990008091D30190E001966091D40170E00E94B3 +:1009A000792D8093D3010C94B203109217020C940A +:1009B000120B0895089581E0809317020C94DA04D5 +:1009C000089508958F929F92AF92BF92EF92FF92F7 +:1009D0000F931F93CF93DF93CDB7DEB7A3970FB6D7 +:1009E000F894DEBF0FBECDBF7C01FC0100811181F8 +:1009F000C8010E94CD21B8010E94E4068C01B70114 +:100A00000E948104882309F4CCC10032F0E51F075D +:100A100041F4F7018281882309F458C00E94610FD4 +:100A2000C0C10132F0E51F0741F4F701828188233C +:100A300009F44CC00E946A0FB4C10232F0E51F07EE +:100A400051F4F7018281882309F440C00E945D0FB0 +:100A50008111F0CFE3CF0332F0E51F0739F4F7013E +:100A60008281882399F10E94DB049BC10432F0E566 +:100A70001F0739F4F7018281882341F10E94D504D0 +:100A800090C10532F0E51F0749F4F7018281882300 +:100A9000E9F0809117028111F1CFE5CF0632F0E540 +:100AA0001F0739F4F7018281882381F00E94710FBA +:100AB0000AC00732F0E51F0749F4F7018281882355 +:100AC00029F00E947C0F0E94E1046BC18091170203 +:100AD000811105C0F70182818111CFC018C1003E8C +:100AE000110579F4F7018281882309F44DC00E9431 +:100AF000120B81E080931602109215021092D4011D +:100B000050C1023E110559F4F70182818823E1F1B9 +:100B10000E94120B109216021092150242C1033E5F +:100B2000110591F4F7018281882371F10E94120B63 +:100B30001092160281E0809315021092D301109258 +:100B4000D2011092D1012DC10235110559F4F701DE +:100B50008281882309F425C18091000190910101CF +:100B60000A970DC00135110579F4F70182818823B8 +:100B700009F417C180910001909101010A969093A8 +:100B80000101809300010DC14091040183E2EFE176 +:100B9000F1E0DE01119601900D928A95E1F7F701DF +:100BA000808121E030E02C0F3D1F280F311DC9014D +:100BB0002091020130910301FC01E20FF31F6081DB +:100BC000772767FD7095640F711D882777FD8095E5 +:100BD000982F0E949B2A20E030E040E451E40E94DC +:100BE000002A4B015C01F701218184E090E0821B27 +:100BF0009109BC01882777FD8095982F0E949B2A38 +:100C00009B01AC01C501B4010E9498299B01AC0174 +:100C100060E070E080E090E40E940E2C20E030E084 +:100C20004CED50E40E94AB2B4B015C01F70182813B +:100C30008823D1F04FE050E0C501B4010E94FD0EC1 +:100C4000809116028823A1F08091D40124E0829F34 +:100C5000F0011124EB52FE4F80829182A282B38276 +:100C60008F5F8093D40104C0C501B4010E94450B7D +:100C70000F3F110508F02ECF94C08091D001811153 +:100C80001FC0043130E5130709F051C00E948304EE +:100C900081E08093D0010E94D0239093CF01809374 +:100CA000CE011092C7011092C9011092C801109292 +:100CB000CB011092CA011092CD011092CC0171C0EB +:100CC0008091CE019091CF010E94DC23883C910558 +:100CD00070F48091C701E82FF0E0EE0FFF1FE8539A +:100CE000FE4F118300838F5F8093C7015AC0043881 +:100CF00080E5180721F00538104501F13AC0F701E9 +:100D00008281882341F01092C50182E01EC0043820 +:100D100030E5130759F58091C501811106C086E2BF +:100D20000E94291986E20E94F11982E01CC0043851 +:100D3000F0E51F0741F305381045D9F4F70182812A +:100D4000882331F01092C60180E20E94401A29C027 +:100D50008091C601811106C087E20E94291987E2AD +:100D60000E94F11980E20E94471A1BC00538104505 +:100D700029F381E08093C5018093C601C701A39642 +:100D80000FB6F894DEBF0FBECDBFDF91CF911F919C +:100D90000F91FF90EF90BF90AF909F908F900C9429 +:100DA000B40380E0A3960FB6F894DEBF0FBECDBFAC +:100DB000DF91CF911F910F91FF90EF90BF90AF9077 +:100DC0009F908F90089508959CE0799FF0011124E1 +:100DD00090E3899FE00DF11D1124E60FF11DEE0F48 +:100DE000FF1FE85AFD4F859194910895880F991F30 +:100DF000FC01E854FF4F859194910895880F991F45 +:100E0000FC01E85CFD4F8591949108950F931F9329 +:100E1000CF93DF93EC01811521E39207A0F5C11573 +:100E200080E3D80708F0D7C0C83ED105D8F4C03E4B +:100E3000D10508F007C2C83AD10578F4C53AD10502 +:100E400008F06AC0C130D10509F463C008F4F7C1E5 +:100E5000C430D10508F0F6C1F2C1CB3BD10508F48E +:100E600066C0EDC1C11590E2D90708F0AFC0C11549 +:100E700021E0D20708F0E6C1C03FD10508F4DFC188 +:100E80008E0110651FC2C03880E5D80700F5C03755 +:100E900090E5D90708F0A3C0C11520E5D20709F4F1 +:100EA000ACC050F4CE01905480319F4008F0C7C1CF +:100EB000DF708E01106A06C2C13080E5D80709F4E0 +:100EC000AEC0C43190E5D90708F4AFC0B8C1C3388B +:100ED00020E5D20709F48EC050F4C13890E5D90757 +:100EE00009F482C008F083C000E011EDEBC1C0310D +:100EF00081E5D80708F4A3C1C11597E5D90708F41F +:100F000036C1CE0190578115904108F098C1DF702D +:100F100093C101E010E0D6C1C53AD10509F494C1EE +:100F2000C63AD10509F093C102E810E4CBC1C83A32 +:100F3000D10509F48FC1C93AD10509F48EC1CA3A65 +:100F4000D10509F48DC1CB3AD10509F48CC1CC3A55 +:100F5000D10509F48BC1CD3AD10509F48AC1C03B52 +:100F6000D10509F489C1CE3AD10509F488C1CF3A37 +:100F7000D10509F487C1C13BD10509F486C1C23B43 +:100F8000D10509F485C1C33BD10509F484C1C43B33 +:100F9000D10509F483C1C53BD10509F482C1C63B23 +:100FA000D10509F481C1C73BD10509F480C1C83B13 +:100FB000D10509F47FC1C93BD10509F47EC1CA3B03 +:100FC000D10509F47DC100E014E47CC1CE019F701D +:100FD0000E94FE0678C1DD278E01106C73C1CF70B0 +:100FE000DD278E01146D6EC100E010ED6BC100E0D5 +:100FF00012ED68C100E013ED65C10E94D41C0E948F +:10100000120B0E94D9048FEF94E32CE081509040A2 +:101010002040E1F700C000000E942B2453C18091C2 +:10102000F20281608093F2024DC10E948C248111F2 +:1010300002C00E9468240E949F2490E090931D03A8 +:1010400080931C03C23080E5D80721F480911C03F3 +:10105000816086C0C43090E5D90721F480911C03DB +:1010600082607EC0C63020E5D20721F480911C0347 +:10107000846076C0C83080E5D80719F480911C03DD +:1010800027C0CA3090E5D90721F480911C03806104 +:1010900067C0CC3020E5D20721F480911C03806228 +:1010A0005FC0CE3080E5D80721F480911C038064B6 +:1010B00057C0C03190E5D90721F480911C038068A6 +:1010C0004FC0C23120E5D20729F480911C0384600F +:1010D000886046C0C33080E5D80721F480911C03A6 +:1010E0008E7F3EC0C53090E5D90721F480911C0366 +:1010F0008D7F36C0C73020E5D20721F480911C03D4 +:101100008B7F2EC0C93080E5D80719F480911C036D +:1011100026C0CB3090E5D90721F480911C038F7E47 +:101120001FC0CD3020E5D20721F480911C038F7DB4 +:1011300017C0CF3080E5D80721F480911C038F7B46 +:101140000FC0C13190E5D90721F480911C038F773E +:1011500007C0C331D04531F480911C038B7F877F5A +:1011600080931C0380911C030E94A324ABC08D2F8D +:1011700099278F70992781309105D9F49E012370AA +:10118000332702C0880F991F2A95E2F79C688E01C9 +:1011900044E0000F111F4A95E1F700271370802BE0 +:1011A000912B53E0CC0FDD1F5A95E1F7C076DD2778 +:1011B0002FC08230910531F4DC2FCC278E01016FD6 +:1011C000106A80C08330910569F4CE01837099273D +:1011D00001E010E002C0000F111F8A95E2F7C8017C +:1011E0009C680FC084309105B9F4CE0183709927B3 +:1011F00001E010E002C0000F111F8A95E2F7C8015C +:101200009A6823E0CC0FDD1F2A95E1F7C07ED770E6 +:101210008C010C2B1D2B56C08530910531F4DC2F31 +:10122000CC278E01046F106A4DC0069709F04AC0A2 +:10123000CF71DD27DC2FCC278E01106243C000E088 +:1012400010E040C08E013EC001E810E43BC003E85E +:1012500010E438C002EE14E435C009EE14E432C0E4 +:101260000AEE14E42FC005EB14E42CC006EB14E4E2 +:1012700029C007EB14E426C00CEC14E423C00DECE9 +:1012800014E420C003E815E41DC00AE815E41AC000 +:1012900002E915E417C004E915E414C001E216E4FC +:1012A00011C003E216E40EC004E216E40BC005E22E +:1012B00016E408C006E216E405C007E216E402C020 +:1012C0000AE216E4C801DF91CF911F910F910895B2 +:1012D0009CE0799FF001112490E3899FE00DF11DBE +:1012E0001124E60FF11DEE0FFF1FE85AFD4F859107 +:1012F0009491803E9105E0F4803C910558F581334E +:10130000910509F46FC048F48932910509F463C06E +:101310008A32910509F46DC072C089339105E9F0F4 +:1013200082389105D1F08533910509F44DC067C02D +:10133000833E910581F138F4803E9105B9F0823EFB +:101340009105D9F05CC0863E910561F1873E91051B +:10135000A1F155C00E94F606089520911C0320FDBE +:1013600002C021FF4CC080EE90E049C080911C0378 +:1013700080FFF9CF89E390E042C080911C0382FF97 +:101380000EC080911C0384FF03C080E090E037C052 +:1013900083EE90E034C080911C0382FFF2CF82EE96 +:1013A00090E02DC080911C0383FF0BC080911C0333 +:1013B00084FDEBCF87EE90E022C080911C0383FF79 +:1013C000F5CF86EE90E01BC080911C0385FF07C01F +:1013D00089E290E014C080911C0385FFF9CF85E37A +:1013E00090E00DC080911C0386FF07C08AE290E068 +:1013F00006C080911C0386FFF9CF81E390E00E9434 +:10140000060708950C94B603E82FF0E0E25BFE4F68 +:101410008081E82FEF70F0E082958F7021E030E05E +:10142000A90102C0440F551F8A95E2F740A3089511 +:101430000F931F93CF93DF9385B7806885BF85B7E0 +:10144000806885BFC3E0D0E001E010E0FE01E25B10 +:10145000FE4F8081E82FEF70F0E021A182958F7020 +:10146000A80102C0440F551F8A95E2F7CA01822BDA +:1014700081A38C2F0E94040A219740F78BE090E013 +:1014800061E070E0FC01EE5BFE4F2081E22FEF7027 +:10149000F0E042A122952F70DB0102C0AA0FBB1F12 +:1014A0002A95E2F79D01242B22A3019758F7DF919B +:1014B000CF911F910F910C948404EF92FF920F93A0 +:1014C0001F93CF93DF9300E212E0C3E0EE24E39496 +:1014D000F12CD5E08C2F0E94040A8BE090E040E0D4 +:1014E00050E0FC01EE5BFE4F6081E62FEF70F0E014 +:1014F00020A130E062956F7002C0359527956A95FE +:10150000E2F720FD09C09701082E02C0220F331F09 +:101510000A94E2F7422B532B019718F7F8019291A6 +:1015200082918F018417950721F051834083D093D6 +:1015300005018C2F0E94040AC15060F680910501BC +:1015400087FD2CC08150809305018F3F39F08FE9D2 +:101550009FE00197F1F700C0000020C080911E02BB +:1015600090911F02909327028093260280911C0283 +:1015700090911D02909325028093240280911A027B +:1015800090911B0290932302809322028091180273 +:101590009091190290932102809320020E94860468 +:1015A00081E0DF91CF911F910F91FF90EF9008950F +:1015B000E82FF0E0EE0FFF1FE05EFD4F808191818C +:1015C000089508950F931F93CF9308E212E0C0E0AF +:1015D000F801929182918F010E944823C80FF2E096 +:1015E00000321F07A9F78C2FCF911F910F910895FB +:1015F0000E948C24811102C00E9468240E94B124A0 +:10160000809307033E9A809171008D7F80937100D3 +:1016100082E0809390008AE18093910081E0809342 +:101620002A02089580912A02811102C00E94F80ABC +:1016300010927A0210927902809171008D7F8093CE +:101640007100809190008F738093900010923C0203 +:1016500010923B0210927302109274021092750263 +:10166000109276021092720210927102E1E5F2E09D +:10167000A1E4B2E011921192119211921D921D9269 +:1016800082E0E137F807B1F70895CF92DF92EF9249 +:10169000FF920F931F93CF93DF9320913B0222235E +:1016A00009F484C06B017C0180912A02811102C07F +:1016B0000E94F80A01E712E0C7E0D0E0A701960116 +:1016C000F80192918291729162918F010E94FC299E +:1016D000811131C0FE01EE0FFF1FEE0FFF1FEF5A09 +:1016E000FD4F1082118212821382DE01AA0FBB1FEE +:1016F000AF5BBD4F11961C921E92C730D105E9F029 +:10170000219644815581668177814083518362832C +:101710007383148215821682178212968D919C9182 +:10172000139711969C938E9313961C921E92129768 +:1017300034961296E2CF219708F680917902909123 +:101740007A02019797FD05C090937A0280937902FF +:1017500004C010927A0210927902809179029091DD +:101760007A0220917702309178022817390724F005 +:101770001092780210927702892BC1F48091710047 +:101780008D7F80937100809190008F738093900083 +:1017900010927302109274021092750210927602E7 +:1017A000109272021092710210923B02DF91CF915F +:1017B0001F910F91FF90EF90DF90CF9008951F92AF +:1017C0000F920FB60F9211244F925F926F927F92F9 +:1017D0008F929F92AF92BF92CF92DF92EF92FF9241 +:1017E0002F933F934F935F936F937F938F939F9329 +:1017F000AF93BF93CF93DF93EF93FF9380913B021F +:10180000882309F49BC1C0917902D0917A021C16F9 +:101810001D060CF093C140902B0250902C0260905A +:101820002D0270902E0220E030E0A901C301B20128 +:101830000E94A72B18160CF065C0C130D10509F421 +:1018400052C08091770290917802BE010E94792D5A +:101850007C01909378028093770280903D02909073 +:101860003E02A0903F02B090400220E030E040E80D +:101870005FE3C501B4010E94982960933D02709313 +:101880003E0280933F0290934002F701EE0FFF1F4C +:10189000EE0FFF1FEF5AFD4FA3019201608171818E +:1018A000828193810E94002A20E030E040E05EE3E4 +:1018B0000E94AB2B9B01AC01C501B4010E94A72B78 +:1018C00018168CF4C7010196BE010E94792D9093E1 +:1018D00078028093770210923D0210923E0210929D +:1018E0003F0210924002E0917702F0917802EE0FF1 +:1018F000FF1FEE0FFF1FEF5AFD4F60817181828144 +:101900009381D0C0C0907302D0907402E0907502B1 +:10191000F090760220E030E0A901C701B6010E94F4 +:10192000FC292197882309F4A2C0FE01EE0FFF1FB6 +:10193000EE0FFF1FEF5AFD4F80809180A280B38091 +:10194000A5019401C701B6010E94FC2987FF31C09F +:10195000A501940160E070E08CED93EC0E94002AF8 +:1019600020E030E040E451E40E94002A20E030E032 +:1019700040E05FE30E94AB2B9B01AC0160E070E0B4 +:1019800080E090E40E940E2C9B01AC01C501B401E3 +:101990000E94AB2B9B01AC01C701B6010E94FC2940 +:1019A00087FF07C0A701960160E070E08CED93E42B +:1019B00039C0A5019401C701B6010E94A72B1816D2 +:1019C0000CF055C0A501940160E070E08CED93E44B +:1019D0000E94002A20E030E040E451E40E94002A06 +:1019E00020E030E040E05FE30E94AB2B9B01AC01C4 +:1019F00060E070E080E090E40E940E2C9B01AC015E +:101A0000C501B4010E94AB2B9B01AC01C701B6011B +:101A10000E94A72B18165CF5A701960160E070E004 +:101A20008CED93EC0E94002A20E030E040E451E489 +:101A30000E94002A20E030E040E05FE30E94AB2BF0 +:101A40009B01AC0160E070E080E090E40E940E2C0D +:101A50009B01AC01C701B6010E94AB2B60937302DE +:101A600070937402809375029093760213C0FE0106 +:101A7000EE0FFF1FEE0FFF1FEF5AFD4F8081918188 +:101A8000A281B3818093730290937402A093750234 +:101A9000B093760260917302709174028091750226 +:101AA0009091760220912802309129022F3F4FEF2A +:101AB000340731F02F5F3F4F3093290220932802E3 +:101AC0000E94870F6B017C0120E034E244EF51E477 +:101AD0000E94FC2987FF08C086EFC82E88E2D82E16 +:101AE00084EFE82E81E4F82E20E030E040E051E47D +:101AF000C701B6010E94AB2B9B01AC0160E074E210 +:101B000084E79BE40E94002A6B017C010E946D2AFD +:101B10007093970060939600209106013091070121 +:101B20004091080150910901C701B6010E94AB2BF9 +:101B30000E946D2A709399006093980080913C02F6 +:101B4000882309F433C1C0903702D0903802E09066 +:101B50003902F0903A0220E030E0A901C701B60155 +:101B60000E94A72B1816D4F5809128029091290283 +:101B70008F3F2FEF920729F00196909329028093CF +:101B80002802C701B6010E94870F20E030E040E044 +:101B900051E40E94AB2B9B01AC0160E074E284E74E +:101BA0009BE40E94002A6B017C010E946D2A7093C5 +:101BB00097006093960020910601309107014091B3 +:101BC000080150910901C701B6010E94AB2B0E9488 +:101BD0006D2A709399006093980008C01092970046 +:101BE0001092960010929900109298006091310224 +:101BF000709132026F5F7F4F7093320260933102B7 +:101C0000209196003091970080E090E0232BF1F036 +:101C1000C0919600D09197000E94992A6B017C0197 +:101C2000BE0180E090E00E94992A9B01AC01609186 +:101C300033027091340280913502909136020E94F5 +:101C4000002A20E03FEF4FE757E410C00E94992A96 +:101C50006B017C0120E030EE4FEF54E460913302E1 +:101C60007091340280913502909136020E94AB2B24 +:101C70009B01AC01C701B6010E94A72B87FD96C04E +:101C800080912F028F5F80932F0290E020910303B9 +:101C90003091040382179307A0F080910E038823EC +:101CA00019F010922F020DC0809171008D7F8093EA +:101CB0007100809190008F738093900010923C028D +:101CC0007DC080913002C0912F02811128C0C09048 +:101CD0000803D0900903E0900A03F0900B0320E082 +:101CE00030E0A901C701B6010E94A72B1816BCF469 +:101CF00081E08093300210923702109238021092E5 +:101D0000390210923A02C0923302D0923402E09229 +:101D10003502F0923602C150C0932F0243C0109298 +:101D200030021092290210922802E0910503F091EE +:101D3000060348E0C49FE00DF11D112480819181CC +:101D4000A281B3818093370290933802A093390225 +:101D5000B0933A0220E030E040E85EE364817581B0 +:101D6000868197810E94AB2B6B017C0180910A01D7 +:101D7000682F70E080E090E00E94992A20E030E037 +:101D800048EC52E40E94002A9B01AC01C701B60155 +:101D90000E94AB2B60933302709334028093350220 +:101DA0009093360210923202109231028091070312 +:101DB00080FD04C010923C0210923B02FF91EF9113 +:101DC000DF91CF91BF91AF919F918F917F916F9153 +:101DD0005F914F913F912F91FF90EF90DF90CF90C7 +:101DE000BF90AF909F908F907F906F905F904F903B +:101DF0000F900FBE0F901F901895CF92DF92EF9229 +:101E0000FF92CF93DF936B017C01EA0180912A025C +:101E1000811102C00E94F80A8091070380FF46C02A +:101E20008091790290917A0208970CF03FC08091DE +:101E300071008D7F8093710080913C0281110E941E +:101E4000120B81E080933B0210922902109228022B +:101E500020E030E0A901C701B6010E94A72B1816A7 +:101E6000DCF48091790290917A02FC01EE0FFF1F61 +:101E7000EE0FFF1FEF5AFD4FC082D182E282F38244 +:101E8000FC01EE0FFF1FEF5BFD4FD183C083019676 +:101E900090937A028093790280917100826080939E +:101EA000710080919000806880939000DF91CF91C5 +:101EB000FF90EF90DF90CF9008958091070381709D +:101EC0000895809107038160809307030E94B524E1 +:101ED0000C94E004809107038E7F809307030C9499 +:101EE000B52480917B0290E0019666E070E00E944C +:101EF000792D80937B02089580917B0290E0019779 +:101F000066E070E00E94792D80937B0208958F92A5 +:101F10009F92AF92BF92CF92DF92EF92FF920F9378 +:101F20001F93CF93DF936B017C01C0912802D09166 +:101F30002902BE0180E090E00E94992A4B015C01D9 +:101F4000A701960160E070E08CE594E40E94002A0D +:101F50009B01AC01C501B4010E94AB2B0E946D2A0C +:101F600020917B02233009F473C028F4222351F01E +:101F70002130E9F02CC1243009F4A0C0253009F447 +:101F8000E0C025C180E090E0A0E0BFE380930601BF +:101F900090930701A0930801B093090110922B02BE +:101FA00010922C0210922D0210922E0210C110924B +:101FB0002B0210922C0210922D0210922E026431EC +:101FC000710540F46A30710560F520E030E040E8CA +:101FD0005EE32BC0693C710508F0AAC080E090E088 +:101FE0000E94992A20E030E040EA51E40E949729BB +:101FF00020E030E044E353E40E94002A9B01AC015E +:102000000E94AB2B20E030E040E05EE30E94AB2B6F +:102010009B01AC0160E070E080E09EE30E949729A4 +:1020200044C020E030E040E05FE3C701B6010E9419 +:10203000AB2B6B017C0180E090E0A0E0BEE38093DD +:10204000060190930701A0930801B0930901BFC056 +:1020500010922B0210922C0210922D0210922E023E +:102060004AE0469F9001479F300D1124C90168EB5B +:102070007BE00E94652DBC016C5D754077FF03C05D +:10208000719561957109882777FD8095982F0E9439 +:102090009B2A2EE333EC4EE259E30E94AB2B20E067 +:1020A00030E040EC5EE30E94982960930601709353 +:1020B0000701809308019093090189C010922B02B7 +:1020C00010922C0210922D0210922E02CE018370DB +:1020D0009927892BE1F0BE016170772780E090E0BD +:1020E0000E94992A20E030E040E05EE30E94AB2BA2 +:1020F00020E030E040E45FE30E949829609306010D +:102100007093070180930801909309010CC080E04F +:1021100090E0A0E0BFE38093060190930701A093B5 +:102120000801B0930901C770DD27CD2B09F04FC01E +:1021300010920601109207011092080110920901F5 +:1021400046C010922B0210922C0210922D02109277 +:102150002E0200E010E020E03FE300930601109320 +:10216000070120930801309309016739710578F15F +:1021700080E090E00E94992A20E030E047E153E4BB +:102180000E94972920E030E04AE754E40E94002AA8 +:1021900020E030E048E452E40E94AB2B20E030E045 +:1021A00040EA51E40E94DD2A0E94682A660F771FE8 +:1021B000660F771FFB01EE5AFE4F2081318142816D +:1021C0005381C701B6010E94AB2B6B017C01C70193 +:1021D000B601DF91CF911F910F91FF90EF90DF90AB +:1021E000CF90BF90AF909F908F90089580918C0278 +:1021F0000895CF93DF9300D01F92CDB7DEB79C0137 +:1022000080911303843019F593E099833B832A83EB +:102210009093E9008FEF9091E800815095FD06C002 +:1022200095ED9A95F1F700008111F5CF8091E800C6 +:1022300085FF0DC040E050E063E070E0CE01019604 +:102240000E945A138091E8008E778093E8000F90E7 +:102250000F900F90DF91CF910895CF93DF9300D02F +:102260001F92CDB7DEB720911303243021F522E071 +:1022700029839B838A8383E08093E9008FEF909189 +:10228000E800815095FD06C095ED9A95F1F70000A4 +:102290008111F5CF8091E80085FF0DC040E050E04E +:1022A00063E070E0CE0101960E945A138091E8002D +:1022B0008E778093E8000F900F900F90DF91CF9171 +:1022C0000895209113032430F1F422E02093E900D3 +:1022D0002FEF3091E800215035FD06C035ED3A95DD +:1022E000F1F700002111F5CF2091E80025FF0BC088 +:1022F00040E050E065E070E00E945A138091E800F1 +:102300008E778093E8000895CF93DF93EC0190914E +:102310001303943009F046C0809115018823D9F049 +:10232000809116018823B9F09093E9008FEF909186 +:10233000E800815095FD06C095E19A95F1F70000FF +:102340008111F5CF8091E80085FF2CC040E050E07E +:1023500060E170E017C081E08093E9008FEF909119 +:10236000E800815095FD06C095ED9A95F1F70000C3 +:102370008111F5CF8091E80085FF14C040E050E066 +:1023800068E070E0CE010E945A138091E8008E77D9 +:102390008093E80080E1FE01ACE7B2E001900D928D +:1023A0008A95E1F7DF91CF91089580911203811111 +:1023B00009C00E94EF140E944C158091E2008460D5 +:1023C0008093E200089510921203089508950895ED +:1023D0000C94932342E061EC81E00E94691442E096 +:1023E00061EC82E00E94691442E061EC83E00E94AB +:1023F000691442E161EC84E00C9469148091150346 +:10240000833009F455C030F4813071F0823009F422 +:102410008EC008958A3009F47AC08B3009F460C008 +:10242000893009F09CC020C080911403813A09F0E2 +:1024300096C08091E800877F8093E8008091180320 +:1024400090911903892B21F460E18CE792E003C09D +:1024500060E080E090E070E00E94A5138091E800C9 +:102460008B778093E800089580911403813209F0FE +:1024700076C08091180390911903009719F0039783 +:1024800009F06DC08091E800877F8093E80080911B +:10249000E80082FD05C0809113038111F8CF5FC071 +:1024A0008091F10080938C028091E8008B7753C07B +:1024B00080911403813A09F052C0809118039091E1 +:1024C0001903892B09F04BC08091E800877F809326 +:1024D000E8008091E80080FFFCCF8091150136C0B4 +:1024E000809114038132D9F58091180390911903DA +:1024F000892BA9F58091E800877F8093E8000E94EE +:102500009E1480911603809315010C94D41C809125 +:102510001403813221F58091E800877F8093E800E1 +:102520000E949E148091170380938D0208958091DC +:102530001403813AA1F48091E800877F8093E8003A +:102540008091E80080FFFCCF80918D028093F100A4 +:102550008091E8008E778093E8000C949E14089593 +:1025600084B7877F84BF88E10FB6F89480936000BA +:10257000109260000FBE90E080E80FB6F894809350 +:102580006100909361000FBE0E9441180E94EF14F9 +:102590000E944C158091E20084608093E200789460 +:1025A0000E94D2170E9443188BE091E00E94ED1721 +:1025B00080911303853069F40E94542380911103A4 +:1025C0008823B1F30E948223882391F30E9444134D +:1025D000EFCF0E944B18ECCF292F33272330310542 +:1025E000C9F064F42130310581F02230310509F061 +:1025F00043C08DE690E024E535E042C0213231054C +:10260000F1F02232310541F137C082E190E021EC56 +:1026100035E036C099278130910541F0823091052F +:1026200041F0892B49F5E0E5F5E005C0E2E2F5E08F +:1026300002C0E8EFF4E0849190E09F0121C0643093 +:10264000D8F4E62FF0E0EE0FFF1FE255FE4F208199 +:10265000318189E090E014C0643070F470E0FB01D7 +:10266000EE0FFF1FEA55FE4F20813181FB01EE5531 +:10267000FE4F808190E004C080E090E020E030E0F8 +:10268000FA0131832083089580E189BD82E189BD0B +:1026900009B400FEFDCF8091D8008F7D8093D800D3 +:1026A0008091E00082608093E0008091E00081FDF5 +:1026B000FCCF0895CF92DF92EF92FF920F931F937A +:1026C000CF93DF93EC018B016A010E94BD1481114D +:1026D00033C0C114D10439F0F60180819181081B07 +:1026E000190BC80FD91FE12CF12C0115110519F197 +:1026F0008091E80085FD16C08091E8008E77809378 +:10270000E800C114D10449F0F60180819181E80EFE +:10271000F91EF182E08285E00FC00E94BD1488237B +:1027200021F30AC089918093F10001501109FFEF54 +:10273000EF1AFF0ADACF80E0DF91CF911F910F915E +:10274000FF90EF90DF90CF90089520911A03309181 +:102750001B032617370748F06115710539F42091DE +:10276000E8002E772093E80001C0B90140E0611530 +:102770007105A9F120911303222309F443C02530E8 +:1027800009F442C02091E80023FD40C02091E800F8 +:1027900022FD32C02091E80020FFE9CF4091F300F4 +:1027A0002091F20030E0342BFC01CF01611571055E +:1027B00059F02830310540F481918093F100615047 +:1027C00071092F5F3F4FF1CF41E02830310509F00B +:1027D00040E02091E8002E772093E800C8CF411117 +:1027E000C9CF0AC080911303882361F0853061F05E +:1027F0008091E80083FD0AC08091E80082FFF2CF5B +:1028000080E0089582E0089583E0089581E00895CE +:1028100020911A0330911B032617370748F06115E2 +:10282000710539F42091E8002E772093E80001C06B +:10283000B901FC0120E06115710591F1809113034C +:10284000882309F440C0853009F43FC08091E80036 +:1028500083FD3DC08091E80082FD2FC08091E8009B +:1028600080FFE9CF2091F3008091F20090E0922B5D +:102870006115710559F08830910540F42491209339 +:10288000F1003196615071090196F2CF21E008976D +:1028900009F020E08091E8008E778093E800CBCFAC +:1028A0002111CCCF0AC080911303882361F08530B9 +:1028B00061F08091E80083FD0AC08091E80082FF0A +:1028C000F2CF80E0089582E0089583E0089581E0EA +:1028D0000895982F973058F59093E900981739F09C +:1028E0007091EC002091ED005091F00003C0242F76 +:1028F000762F50E021FF19C03091EB003E7F3093DE +:10290000EB003091ED003D7F3093ED003091EB0016 +:1029100031603093EB007093EC002093ED00509306 +:10292000F0002091EE0027FF07C09F5FD3CF8F708C +:102930008093E90081E0089580E008958091140378 +:1029400087FF11C08091E80082FD05C080911303CC +:102950008111F8CF11C08091E8008B770BC0809176 +:102960001303882349F08091E80080FFF8CF80911D +:10297000E8008E778093E80008952091E40030917C +:10298000E50095E64091EC00842F817040FF22C065 +:102990008091E80080FD1CC080911303882391F092 +:1029A000853091F08091EB0085FD10C04091E400EE +:1029B0005091E5004217530729F39A01915011F7FE +:1029C00084E0089582E0089583E0089581E0089509 +:1029D00080E008954091E80042FFDECF08950E9414 +:1029E0005D150E946515E0EEF0E0808181608083D6 +:1029F000E8EDF0E080818F77808319BCA7EDB0E02F +:102A00008C918E7F8C9380818F7E808310921203B5 +:102A100008950F931F93CF93DF930E945D150E943B +:102A20006515C8EDD0E088818F77888388818068BC +:102A3000888388818F7D888319BC1092130310923C +:102A40000F03109211031092100300EE10E0F80132 +:102A500080818B7F808388818160888342E060E011 +:102A600080E00E946914E1EEF0E080818E7F808337 +:102A7000E2EEF0E0808181608083808188608083E5 +:102A8000F80180818E7F8083888180618883DF91D7 +:102A9000CF911F910F910895E8EDF0E080818F7E36 +:102AA0008083E7EDF0E080818160808384E082BFF5 +:102AB00081E0809312030C940915E8EDF0E0808129 +:102AC0008E7F80831092E20008951092DA001092B7 +:102AD000E10008951F920F920FB60F9211242F93C9 +:102AE0003F934F935F936F937F938F939F93AF9396 +:102AF000BF93EF93FF938091E10082FF0BC0809121 +:102B0000E20082FF07C08091E1008B7F8093E100AB +:102B10000E94D1178091DA0080FF1FC08091D800F9 +:102B200080FF1BC08091DA008E7F8093DA00809155 +:102B3000D90080FF0DC080E189BD82E189BD09B463 +:102B400000FEFDCF81E0809313030E94D51105C0E4 +:102B500019BC109213030E94E3118091E10080FFE1 +:102B600019C08091E20080FF15C08091E2008E7F45 +:102B70008093E2008091E20080618093E200809186 +:102B8000D80080628093D80019BC85E0809313033D +:102B90000E94E7118091E10084FF30C08091E20043 +:102BA00084FF2CC080E189BD82E189BD09B400FEAB +:102BB000FDCF8091D8008F7D8093D8008091E10077 +:102BC0008F7E8093E1008091E2008F7E8093E2000F +:102BD0008091E20081608093E20080910F0388235E +:102BE00011F084E007C08091E30087FD02C081E01E +:102BF00001C083E0809313030E94E8118091E100FB +:102C000083FF29C08091E20083FF25C08091E1000D +:102C1000877F8093E10082E08093130310920F037B +:102C20008091E1008E7F8093E1008091E2008E7FB1 +:102C30008093E2008091E20080618093E20042E0B4 +:102C400060E080E00E9469148091F00088608093C9 +:102C5000F0000E94E611FF91EF91BF91AF919F911B +:102C60008F917F916F915F914F913F912F910F9035 +:102C70000FBE0F901F9018951F920F920FB60F92D4 +:102C800011242F933F934F935F936F937F938F9371 +:102C90009F93AF93BF93CF93DF93EF93FF93C09135 +:102CA000E900CF708091EC00D82FD17080FDD0E882 +:102CB0001092E9008091F000877F8093F000789473 +:102CC0000E9480161092E9008091F0008860809345 +:102CD000F000CD2BCF70C093E900FF91EF91DF9111 +:102CE000CF91BF91AF919F918F917F916F915F91A4 +:102CF0004F913F912F910F900FBE0F901F901895FD +:102D00001F93CF93DF93CDB7DEB7AA970FB6F89492 +:102D1000DEBF0FBECDBFE4E1F3E088E08E0F9091FF +:102D2000F10091938E13FBCF0E94FE118091E80079 +:102D300083FF1FC18091140390911503492F50E028 +:102D40004A30510508F015C1FA01EA5AFF4F0C94B8 +:102D50008D2D803881F0823809F00BC180911803E5 +:102D60008F708093E9008091EB0085FB882780F9C4 +:102D70001092E90006C08091100390911103911107 +:102D800082609091E800977F9093E8008093F10033 +:102D90001092F100C8C0282F2D7F09F0EAC08823C7 +:102DA00019F0823061F0E5C080911603813009F09E +:102DB000E0C0933009F080E0809311032BC0809134 +:102DC0001603811127C0809118038F7009F4D1C0B8 +:102DD0008093E9002091EB0020FF1CC0933021F488 +:102DE0008091EB00806214C09091EB009061909311 +:102DF000EB0021E030E0A90102C0440F551F8A9585 +:102E0000E2F74093EA001092EA008091EB008860BC +:102E10008093EB001092E9008091E800877F86C0E4 +:102E20008111A7C0109116031F778091E30080786D +:102E3000812B8093E3008091E800877F8093E800F6 +:102E40000E949E148091E80080FFFCCF8091E300F7 +:102E500080688093E300111102C082E001C083E02A +:102E60008093130386C08058823008F082C080911E +:102E70001603909117038C3D53E0950779F583E095 +:102E80008A838AE289834FB7F894DE01139620E0A3 +:102E90003EE051E2E32FF0E050935700E49120FF31 +:102EA00003C0E295EF703F5FEF708E2F90E0EA3045 +:102EB00010F0C79601C0C0968D939D932F5F24316B +:102EC00049F74FBF8091E800877F8093E8006AE26E +:102ED00070E0CE0101960E94A51314C0AE014F5FB1 +:102EE0005F4F609118030E94EC12BC01009709F437 +:102EF00040C09091E800977F9093E80089819A8183 +:102F00000E9408148091E8008B778093E80031C01C +:102F1000803879F58091E800877F8093E800809180 +:102F20000F038093F1008091E8008E778093E80092 +:102F30000E949E141EC081111CC0909116039230F5 +:102F4000C0F48091E800877F8093E80090930F039E +:102F50000E949E1480910F03811106C08091E300AE +:102F600087FD02C081E001C084E0809313030E94CA +:102F7000EA118091E80083FF0AC08091E800877F12 +:102F80008093E8008091EB0080628093EB00AA962A +:102F90000FB6F894DEBF0FBECDBFDF91CF911F916A +:102FA00008950895CF93809113038823A1F0C091D1 +:102FB000E900CF709091EC00892F817090FD80E83E +:102FC000C82B1092E9008091E80083FD0E948016D2 +:102FD000CF70C093E900CF910895909393028093AE +:102FE00092020895E0919202F0919302309721F0BD +:102FF0000190F081E02D099480E00895E091920223 +:10300000F0919302309721F00280F381E02D099432 +:103010000895E0919202F0919302309721F004809C +:10302000F581E02D0994089520919002309191024C +:103030008217930771F09093910280939002E09130 +:103040009202F0919302309721F00680F781E02DF3 +:103050000994089520918E0230918F028217930770 +:1030600071F090938F0280938E02E0919202F09122 +:103070009302309721F00084F185E02D09940895A2 +:1030800008950C9440180E94C7230E94180A0E94B9 +:103090004D240C94FC285F926F927F928F929F92A6 +:1030A000AF92BF92CF92DF92EF92FF920F931F9356 +:1030B000CF93DF9300D000D01F92CDB7DEB70E9430 +:1030C0005D0A9DE9C92E92E0D92E03E010E0AA2402 +:1030D000A394B12C502E802F0E94D80A4C01F601E7 +:1030E000729062906F016826792661147104A1F4D0 +:1030F0000150110978F78FEF89838A831B820E9420 +:10310000D0238160782F9D838C8349815A816B8184 +:103110008D810E94FB1838C08091F20281FD0E94CF +:10312000E10A2BE030E07501022E02C0EE0CFF1C1C +:103130000A94E2F7C70186219721892B09F1298397 +:103140005A828E209F2091E0892809F490E09B8389 +:103150000E94D0238160782F9D838C8349815A817E +:103160006B818D810E94FB18000F111FF801EB5637 +:10317000FD4F80819181E826F926F182E08204C02A +:103180002150310980F6B4CF0E9434261091940268 +:103190000E94F2171817D1F00E94F2178093940240 +:1031A0000F900F900F900F900F90DF91CF911F9184 +:1031B0000F91FF90EF90DF90CF90BF90AF909F90D6 +:1031C0008F907F906F905F900C94020A0F900F90F9 +:1031D0000F900F900F90DF91CF911F910F91FF9063 +:1031E000EF90DF90CF90BF90AF909F908F907F90A7 +:1031F0006F905F900895CF93DF93CDB7DEB72B9795 +:103200000FB6F894DEBF0FBECDBF4F8358876987D6 +:103210007A878B87DE01119686E0FD0111928A95EF +:10322000E9F785E0FE01379601900D928A95E1F766 +:1032300049815A816B817C818D819E810E94721FA0 +:103240002B960FB6F894DEBF0FBECDBFDF91CF91A6 +:103250000895CF93882309F4C2C0C82F823859F447 +:103260000E94F21781FDBBC089E30E944C220E949C +:10327000192389E30CC0833879F40E94F21780FD8A +:10328000AEC083E50E944C220E94192383E50E9470 +:103290008E22CF910C941923843859F40E94F2178E +:1032A00082FD9DC087E40E944C220E94192387E47E +:1032B000EECF8CEF8C0F813A48F48C2F0E9464285B +:1032C00081118DC08C2F0E944C22E3CF80E28C0FA5 +:1032D000883048F4C77081E001C0880FCA95EAF7CA +:1032E0000E94D222D6CF8BE58C0F833078F4C53A7A +:1032F00029F0C63A31F083E890E005C081E890E01B +:1033000002C082E890E0CF910C94141888E58C0FED +:10331000833108F064C0C83A39F1C93A41F1CA3A78 +:1033200049F1CB3A51F1CC3A59F1CD3A61F1C03B78 +:1033300069F1CE3A71F1CF3A79F1C13B81F1C23BEB +:1033400089F1C33B91F1C43B99F1C53BA1F1C63B67 +:10335000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BC7 +:10336000C9F180E090E038C082EE90E035C089EE8F +:1033700090E032C08AEE90E02FC085EB90E02CC048 +:1033800086EB90E029C087EB90E026C08CEC90E0C3 +:1033900023C08DEC90E020C083E891E01DC08AE856 +:1033A00091E01AC082E991E017C084E991E014C06D +:1033B00081E292E011C083E292E00EC084E292E0EA +:1033C0000BC085E292E008C086E292E005C087E289 +:1033D00092E002C08AE292E0CF910C942A18CF9139 +:1033E0000895882309F44BC0823859F40E94F217DB +:1033F00081FF45C089E30E944C220E94192389E382 +:103400000CC0833871F40E94F21780FF38C083E546 +:103410000E944C220E94192383E50E948E220C9464 +:103420001923843859F40E94F21782FF28C087E4D8 +:103430000E944C220E94192387E4EFCF9CEF980F43 +:10344000913A58F390E2980F983050F4877091E0D9 +:1034500001C0990F8A95EAF7892F0E94D822DFCF01 +:103460009BE5980F933020F480E090E00C941418C2 +:10347000885A833120F480E090E00C942A18089553 +:10348000882321F00E94D2220C94192308958823C6 +:1034900021F00E94D8220C94192308957F928F92D4 +:1034A0009F92AF92BF92CF92DF92EF92FF920F93D3 +:1034B0001F93CF93DF931F92CDB7DEB77C01C62E4B +:1034C000772EFC01058102950F70128111110E9467 +:1034D000EF220E944522882379F0112369F080E2CF +:1034E0008C0D883048F082E00E942E220E944522F6 +:1034F00091E0D82ED92601C0D12CE72DE295EF70AE +:10350000F0E0E05AFF4F0C948D2D872D807F072D22 +:103510000F70882311F00295007F112389F000239A +:1035200009F499C180E28C0D883020F4802F0E942C +:10353000D22203C0802F0E94E2220E9419238BC155 +:103540008C2D0E94F119002309F4C3C180E28C0D77 +:10355000883020F4802F0E94D82203C0802F0E9440 +:10356000E8220E941923B5C1872D807F972D9F7077 +:10357000803211F4892F03C0892F8295807FCC205F +:1035800021F0F1E0CF16A1F01DC0112339F0002386 +:1035900019F1013009F50E9402239BC1002319F0A3 +:1035A000013009F496C189830E940523898110C1E5 +:1035B000112321F0063008F08CC10EC0053008F050 +:1035C00088C106C1112359F0002331F0F70195811C +:1035D00090FF41C19F7095830E94401A7AC10023D9 +:1035E00009F4F6C03EC1872D86958695837090E0DC +:1035F000009719F0019761F06CC1112321F08C2D17 +:10360000972D937002C080E090E00E94141861C171 +:10361000112321F08C2D972D937002C080E090E053 +:103620000E942A1856C18C2D112319F00E943C25A6 +:1036300002C00E94A4250E9429264BC1872D8370B9 +:1036400009F052C0111145C18C2D82958695877065 +:10365000880F880F9C2D9F70892E912CA12CB12C46 +:10366000082E04C0880C991CAA1CBB1C0A94D2F713 +:10367000C4FE14C00FE010E020E030E0B901A80162 +:1036800004C0440F551F661F771F8A95D2F7CB01E0 +:10369000BA01609570958095909503C060E070E0E8 +:1036A000CB01272D26952695237030E02230310559 +:1036B00069F02330310589F0682979298A299B2905 +:1036C0002130310571F00E94BA2003C1682979299F +:1036D0008A299B290E94D620FCC00E94BA20C501DD +:1036E000B4010E949E20F5C0112319F0872D81702E +:1036F00001C08695882309F4ECC08C2D82958695AF +:103700008770880F880F9C2D9F70892E912CA12C7B +:10371000B12C082E04C0880C991CAA1CBB1C0A944E +:10372000D2F7C4FE14C00FE010E020E030E0B90191 +:10373000A80104C0440F551F661F771F8A95D2F752 +:10374000CB01BA01609570958095909503C060E0BB +:1037500070E0CB01272D269526952370422F50E04F +:103760004230510569F04330510589F068297929C3 +:103770008A299B294130510571F00E949421A9C0EA +:10378000682979298A299B290E94B021A2C00E9418 +:103790009421C501B4010E9478219BC08C2D90E03A +:1037A000FC01E05EF109E531F10508F050C0E05997 +:1037B000FF4F0C948D2D0C2D0F70872D8F711123C1 +:1037C00021F00E941121802F07CF0E943221802FEB +:1037D0000E94471A7EC0112341F0053008F079C0DD +:1037E000872D8F710E94572174C0063008F071C078 +:1037F000F7CF112339F0872D8F710E94112169C0F5 +:103800001123C9F3872D8F710E94322162C01123C9 +:1038100029F0872D8F710E94FC205BC00E94F2204E +:1038200058C0112351F0172D1F71812F0E941121B3 +:1038300063E0812F0E9425224CC081E00E942E224D +:10384000023008F446C082E00E942E2242C01123BA +:1038500031F0002381F28C2D0E9429193AC00023F7 +:1038600089F28C2D0E94F11934C0472D4F706C2DB8 +:10387000C7010E945B040E9416202BC0111129C0B1 +:10388000472D4F7050E042305105B9F04CF44115CE +:10389000510581F041305105E1F40E94242919C0FD +:1038A0004330510569F04430510599F48C2D0E9444 +:1038B00076290FC00E940D290CC00E94402909C022 +:1038C0000E94532906C0472D4F706C2DC7010E94DE +:1038D000E306DD20F9F00E94212280FD1BC0F701E4 +:1038E00012820E941B220E941121C7010E94991C72 +:1038F0000E941B220F90DF91CF911F910F91FF909B +:10390000EF90DF90CF90BF90AF909F908F907F907F +:103910000C9432210F90DF91CF911F910F91FF9066 +:10392000EF90DF90CF90BF90AF909F908F907F905F +:1039300008950F931F93CF93DF93EC0188819981B2 +:103940002B813C81232BB9F09F3F11F48F3F99F0DD +:10395000CE010E94E204882371F0688179818A8116 +:103960000E9417228C010E94CC210E949320B80152 +:10397000CE010E944E1ADF91CF911F910F910895B1 +:103980000E94EF220E94FF220E94C4220E9419235B +:103990000E94DA260E94292680E090E00E941418F6 +:1039A00080E090E00C942A180E94DF220C94C01C46 +:1039B0000E940C22292F22952F7030E02C303105E7 +:1039C0004CF42A3031056CF4225031092230310593 +:1039D000A8F407C02C30310569F02F30310551F0C3 +:1039E0000DC0803F69F018F4803E40F409C0843F68 +:1039F00029F406C093FB882780F9089580E0089594 +:103A000081E00895CF93DF9300D000D01F92CDB70F +:103A1000DEB70F900F900F900F900F90DF91CF9126 +:103A20000895CF93DF9300D000D000D0CDB7DEB79C +:103A300026960FB6F894DEBF0FBECDBFDF91CF91B3 +:103A400008951F93CF93DF93C0919D0216E080915C +:103A50009E02C81799F0D0E01C9FF0011D9FF00D49 +:103A60001124E156FD4F408151816281738184812F +:103A700095810E94111D2196C770E9CFDF91CF91EA +:103A80001F9108954091CF025091D0026091D102D0 +:103A90007091D2028091D3029091D4020C94111DA6 +:103AA0008091D40282958F7009F054C08091D10228 +:103AB000882309F44FC080919D02A0919E026091DD +:103AC000CF027091D0024091D2025091D302B6E061 +:103AD0008A1709F43FC090E041155105C1F17F3FBD +:103AE00011F46F3FA1F1B89FF001B99FF00D1124BF +:103AF000E156FD4F218172132AC02081621327C035 +:103B00002281211124C0238134812417350710F428 +:103B100021503109241B350B283C3105C0F420917C +:103B2000D4022F7020612093D40226E0289FF00158 +:103B3000299FF00D1124EC55FD4F80818F7080611D +:103B400080838FEC92E00E94991C0C94211D0196B9 +:103B50008770BECF0895CF92DF92EF92FF920F93BE +:103B60001F93CF93DF93CDB7DEB762970FB6F8946C +:103B7000DEBF0FBECDBF8C0185E0F801DE011D96D2 +:103B800001900D928A95E1F7D8014C9111965C91C4 +:103B9000119712966C9112971396CD90DC90149712 +:103BA0003091CF027091D0028091D2029091D302D5 +:103BB000009709F46BC17F3F19F43F3F09F466C1D8 +:103BC000E090D102EE2009F4C0C02091D402C816C2 +:103BD000D90628F0F601E81BF90BCF0104C0809547 +:103BE00090958C0D9D1DFF24F394883C910578F0F1 +:103BF000F12C207F09F0C6C07C2DD98AC88A89891A +:103C00000E94021D8FEC92E00E94991CB1C0822F8D +:103C1000807F09F046C0751314C0341312C06111BF +:103C200010C02F7020612093D4020E94421D8FEC9F +:103C300092E00E94991C8091D402D80115968C9331 +:103C40002EC0CD2819F15F3F11F44F3FF9F0F62E49 +:103C500061111CC080919D0220919E0236E0821766 +:103C600009F45AC090E0389FF001399FF00D1124FB +:103C7000E156FD4F7181571306C07081471303C091 +:103C80007281711103C001968770E9CFF62E662309 +:103C900009F418C18091D40281608093D402F12C80 +:103CA00011C1751308C0341306C0611104C080919E +:103CB000D402D801C3C04D875E878D859E856A8BEF +:103CC0000E94D81C6A898823E1F16623D1F12091F2 +:103CD000D402822F82958F7090E0029774F08091C9 +:103CE000CF029091D00298878F831986DB86CA868F +:103CF0002C87CE0107960E94991C86E0F801AFEC54 +:103D0000B2E001900D928A95E1F70E94501D0E9449 +:103D1000421DFF24F394D6C04D875E878D859E8516 +:103D20000E940C22292F22952F7030E0223031057D +:103D30000CF0BCC09F7009F0B6C0805E883008F4FB +:103D4000C1C0C8010E94991CE4CFC816D90608F466 +:103D500053C0F601E81BF90BCF01883C910508F42C +:103D600050C0F12C7C2DD98AC88A89890E94021DF5 +:103D7000EFECF2E086E0DF011D928A95E9F70E9400 +:103D8000421DA0C0751314C0341312C0611110C0BD +:103D90008091D402F8018583C8010E94991C86E0B5 +:103DA000EFECF2E0DF011D928A95E9F7FE2C8AC064 +:103DB0004D875E878D859E856A8B0E94D81C6A8997 +:103DC000882309F4BECF662309F4BBCF2091D40227 +:103DD000822F82958F7090E002970CF48ECF8091A5 +:103DE000CF029091D0029A8389831B82DD82CC829C +:103DF0002E83CE0101967FCF809590958C0D9D1DD1 +:103E0000ACCFF62E662309F49CCF75132EC0341365 +:103E10002CC02091D40220FD1FC0822F82958F706C +:103E2000D9F0D80115962C9315978F3049F08F5FF4 +:103E3000982F9295907F822F8F70892B15968C9357 +:103E4000C8010E94991C86E0F801AFECB2E0019035 +:103E50000D928A95E1F793CF86E0F801AFECB2E0DE +:103E600001900D928A95E1F72DC04D875E878D8573 +:103E70009E850E94D81C811140CF8091D402816020 +:103E80008093D402C8010E94991C1CC0662309F4C7 +:103E900058CF4D875E878D859E850E94D81C8823CC +:103EA00009F44FCF2ACF811148CF0CC024303105FF +:103EB0000CF047CF9F7009F440CFF8019581907FB7 +:103EC00009F03BCF8F2D62960FB6F894DEBF0FBE80 +:103ED000CDBFDF91CF911F910F91FF90EF90DF90B9 +:103EE000CF9008951F93CF93DF93CDB7DEB72C9774 +:103EF0000FB6F894DEBF0FBECDBF4F8358876987DA +:103F00007A878B879C87CE0107960E94AB1D8823FA +:103F100069F08F8198852A853B85232BF1F19F3F9E +:103F200009F063C08F3F09F060C037C086E0FE0132 +:103F30003796DE01119601900D928A95E1F76F8117 +:103F40007885EA85FB85309741F17F3F11F46F3F1B +:103F500021F120919E0230E0C901019687709927D6 +:103F600040919D0250E08417950709F447C069838A +:103F70007A83FD83EC8396E0929FD001939FB00DEE +:103F80001124A156BD4FFE01319601900D929A95D4 +:103F9000E1F780939E020E94211D16E080919D0210 +:103FA00090919E028917C1F1189FC001112481567A +:103FB0009D4F0E94AB1D882379F1E0919D021E9FC9 +:103FC000F0011124E156FD4F4081518162817381DE +:103FD000848195810E94111D80919D0290E001963F +:103FE0008770992780939D02D9CF4F815885698525 +:103FF0007A858B859C850E94111DCFCF0E94D41C91 +:1040000010929E0210929D02EFECF2E086E0DF013A +:104010001D928A95E9F7C1CF2C960FB6F894DEBFB2 +:104020000FBECDBFDF91CF911F910895EF92FF9208 +:104030000F931F93CF93DF938C01009709F46CC00B +:10404000F12CEE24E394E8012196F8018491843761 +:1040500040F4843008F051C0813081F0823019F191 +:104060005BC0853709F444C0A8F19CE7980F9037EE +:1040700008F052C08F770E94F11941C00E5F1F4FA8 +:10408000FE01C49180E28C0F883048F4C7708E2DF9 +:1040900001C0880FCA95EAF70E94F22214C08C2F43 +:1040A0000E9429192DC00E5F1F4FFE01C49180E2AE +:1040B0008C0F883058F4C7708E2D01C0880FCA95B8 +:1040C000EAF70E94F8220E9419231AC08C2F0E943E +:1040D000F11916C00E5F1F4FFE01C491CC2381F071 +:1040E0008FE99FE00197F1F700C00000C150F6CFC3 +:1040F0000E5F1F4FFE01F49003C00E9429198E012C +:104100008F2D882309F49FCFEFE9FFE03197F1F776 +:1041100000C000008150F5CFDF91CF911F910F912A +:10412000FF90EF90089508956093D9027093DA029A +:104130008093DB029093DC020C94C01C0F931F93BE +:104140000091D9021091DA022091DB023091DC0259 +:10415000DC01CB01802B912BA22BB32B8093D902B6 +:104160009093DA02A093DB02B093DC021F910F91CF +:104170000C94C01C0F931F930091D9021091DA0286 +:104180002091DB023091DC02DC01CB018023912302 +:10419000A223B3238093D9029093DA02A093DB0287 +:1041A000B093DC021F910F910C94C01C0F931F93CE +:1041B0000091D9021091DA022091DB023091DC02E9 +:1041C000DC01CB0180279127A227B3278093D90256 +:1041D0009093DA02A093DB02B093DC021F910F915F +:1041E0000C94C01C1092D5021092D6021092D702E5 +:1041F0001092D8020C94C01C41E050E060E070E0E6 +:1042000004C0440F551F661F771F8A95D2F740934D +:10421000D5025093D6026093D7027093D8020C94C3 +:10422000C01C41E050E060E070E004C0440F551F46 +:10423000661F771F8A95D2F78091D5029091D6029A +:10424000A091D702B091D802482B592B6A2B7B2B17 +:104250004093D5025093D6026093D7027093D80250 +:104260000C94C01C41E050E060E070E004C0440FDA +:10427000551F661F771F8A95D2F740955095609518 +:1042800070958091D5029091D602A091D702B091FD +:10429000D802482359236A237B234093D5025093A5 +:1042A000D6026093D7027093D8020C94C01C41E0F0 +:1042B00050E060E070E004C0440F551F661F771F98 +:1042C0008A95D2F78091D5029091D602A091D7021B +:1042D000B091D802482759276A277B274093D502F7 +:1042E0005093D6026093D7027093D8020C94C01CEE +:1042F0000F931F930091D5021091D6022091D702FF +:104300003091D802DC01CB01802B912BA22BB32B57 +:104310008093D5029093D602A093D702B093D8028F +:104320001F910F910C94C01C0F931F930091D50205 +:104330001091D6022091D7023091D802DC01CB0136 +:1043400080239123A223B3238093D5029093D60296 +:10435000A093D702B093D8021F910F910C94C01C68 +:104360000F931F930091D5021091D6022091D7028E +:104370003091D802DC01CB0180279127A227B327F7 +:104380008093D5029093D602A093D702B093D8021F +:104390001F910F910C94C01C0895CF92DF92EF9261 +:1043A000FF920F931F93CF93DF938C01C090D9029C +:1043B000D090DA02E090DB02F090DC028091D5022E +:1043C0009091D602A091D702B091D802C82AD92ADA +:1043D000EA2AFB2ACFE1D0E0D701C6010C2E04C0A7 +:1043E000B695A795979587950A94D2F780FF06C052 +:1043F000B8018C2F0E946809019721F4219760F77A +:1044000080E001C08C2FDF91CF911F910F91FF9021 +:10441000EF90DF90CF900895CF93DF93EC010E944F +:10442000CD21BE010E946809DF91CF910895CB0193 +:104430000E940C2208958091DD02859585958595D1 +:1044400008958091DD028770089598E0899F90011A +:104450001124262B2093DD020C9411212091DD02E2 +:10446000809582238093DD02982F977069F430E065 +:10447000482F552747FD50952417350729F0859576 +:10448000859585950C94322108959091DD02977061 +:1044900081E009F480E0089590911501992321F0BD +:1044A00090911601911109C02091170130911801C6 +:1044B000F90132969FEF40E01FC0982F9695969590 +:1044C00096959F3050F5E0911701F0911801E90F92 +:1044D000F11D877021E030E0A90102C0440F551F93 +:1044E0008A95E2F7CA019181892B818308959F3FC4 +:1044F00039F04F5F4E3041F051915813F8CF0DC055 +:104500005111F7CF942FF5CF9F3F39F0F901E90F03 +:10451000F11D97FDFA9582830895089590911501F4 +:10452000992321F090911601911109C02091170152 +:1045300030911801F9013296205F3F4F1FC0982F2C +:104540009695969596959F30F0F4E0911701F0912D +:104550001801E90FF11D877021E030E0A90102C0C8 +:10456000440F551F8A95E2F7CA01809591818923EE +:10457000818308953196E217F30729F0908198130B +:10458000F9CF1082F7CF089581E090E0E091170114 +:10459000F0911801E80FF91F108201968031910502 +:1045A000A9F708959091F102892B8093F102089563 +:1045B00080959091F10289238093F10208951092E1 +:1045C000F10208959091F002892B8093F0020895F2 +:1045D00080959091F00289238093F00208951092C3 +:1045E000F00208959091EF02892B8093EF020895D5 +:1045F00080959091EF0289238093EF0208951092A5 +:10460000EF0208958093DE0208951092DE0208956D +:104610008091170190911801FC0131969C01205F57 +:104620003F4F80E0919191118F5FE217F307D1F72F +:104630000895E0911701F09118018091F1028083B3 +:10464000E0911701F091180190818091F002892B7F +:104650008083E0911701F091180190818091EF0221 +:10466000892B80838091DE02882361F0E09117011D +:10467000F09118019081892B80830E940823811179 +:104680001092DE0280911701909118010C94FE1790 +:1046900020E0009739F0AC01415051098423952363 +:1046A0002F5FF7CF822F089580911303843039F163 +:1046B0001092F30220E488E190E00FB6F894A895F8 +:1046C000809360000FBE2093600080E00E94C203D0 +:1046D00080E00E94020A83B7817F846083BF83B732 +:1046E000816083BF7894889583B78E7F83BF88E18C +:1046F0000FB6F89480936000109260000FBE08958A +:104700000895089580E00E94C2030E9480230E94C1 +:104710005D0A0E9481230E94E20A91E0811101C09A +:1047200090E0892F08950E94D41C80E00E94C2036B +:104730000E94FC280E94F2170C94020A1F920F920A +:104740000FB60F9211248F939F93AF93BF938091D5 +:10475000F302811113C08091F4029091F502A091AF +:10476000F602B091F7024196A11DB11D8093F402AB +:104770009093F502A093F602B093F702BF91AF9128 +:104780009F918F910F900FBE0F901F90189582E010 +:1047900084BD93E095BD9AEF97BD80936E00089518 +:1047A0002FB7F8948091F4029091F502A091F6024F +:1047B000B091F7022FBF0895CF92DF92EF92FF9250 +:1047C0000F931F932FB7F8944091F4025091F50284 +:1047D0006091F6027091F7022FBF6A017B01EE240F +:1047E000FF248C0120E030E0C016D106E206F3067B +:1047F00010F4415051099A01281B390BC9011F912E +:104800000F91FF90EF90DF90CF9008951F920F923D +:104810000FB60F9211248F939F93AF93BF93809104 +:10482000F4029091F502A091F602B091F702019680 +:10483000A11DB11D8093F4029093F502A093F6029E +:10484000B093F702BF91AF919F918F910F900FBEE0 +:104850000F901F9018950E94EF14F8942FEF87EA9D +:1048600091E6215080409040E1F700C0000087E0D1 +:1048700090EBDC0180931E0390931F03A093200311 +:10488000B09321039CE088E10FB6F894A89580933B +:1048900060000FBE90936000FFCF0E948C248111B6 +:1048A00002C00E9468240E9497248093F2020E9412 +:1048B0009F2480931C0387FB882780F9809316012F +:1048C0000E949B24682F70E080E090E00C9494207C +:1048D0006DEE7EEF80E090E00E94B32D60E082E01C +:1048E00090E00E94A12D60E083E090E00E94A12D65 +:1048F00060E084E090E00E94A12D60E085E090E01F +:104900000E94A12D60E086E090E00E94A12D6FEF53 +:1049100087E090E00C94A12D80E090E00E949B2D18 +:1049200021E08D3E9E4F09F020E0822F089582E025 +:1049300090E00C94932D83E090E00C94932D84E010 +:1049400090E00C94932D682F84E090E00C94A12DBE +:1049500086E090E00C94932D682F86E090E00C9414 +:10496000A12D87E090E00C94932D682F87E090E0D4 +:104970000C94A12D8091FA0280FF0BC060911C0164 +:1049800085E0689FB00111247595679575956795C9 +:104990002BC081FF09C060911C0185E0689FB001B8 +:1049A00011247595679520C082FF07C060911C0196 +:1049B00085E0689FB001112417C09091FB029923F4 +:1049C000D1F060911B01961788F720911C0185E0BA +:1049D000289F90011124929FA001939F500D1124B4 +:1049E00070E0CA010E94792D6038710540F46115AC +:1049F000710539F002C065E070E0862F08958FE7F9 +:104A0000089581E008958091FA0280FF08C06091C6 +:104A10001A0170E0759567957595679521C081FFBE +:104A200006C060911A0170E07595679519C082FF04 +:104A300004C060911A0170E010C09091FB029923AC +:104A4000C1F0609119019617A0F780911A01899F12 +:104A5000C001112470E00E94792D6038710528F49E +:104A60006115710521F0862F08958FE7089581E083 +:104A7000089561E070E0F4CF803F21F40E94BA24F1 +:104A8000819504C0813F29F40E94BA248093FE02DC +:104A90000895823F21F40E94BA24819504C0833F87 +:104AA00029F40E94BA248093FD020895893F19F4E5 +:104AB0000E94032505C08A3F31F40E940325819599 +:104AC0008093FF0208958B3F21F40E940325819576 +:104AD00004C08C3F29F40E940325809300030895AD +:104AE000843F21F48091FC02816017C0853F21F44E +:104AF0008091FC02826011C0863F21F48091FC020B +:104B000084600BC0873F21F48091FC02886005C05F +:104B1000883F31F48091FC0280618093FC0208950B +:104B20008D3F21F48091FA0281600BC08E3F21F409 +:104B30008091FA02826005C08F3F29F48091FA02C9 +:104B400084608093FA020895803F39F48091FE02D8 +:104B500087FF6CC01092FE0269C0813F29F48091EA +:104B6000FE021816BCF362C09091FD02823F29F448 +:104B700097FF5CC01092FD0259C0833F19F41916CB +:104B8000CCF354C0893F41F48091FF0218160CF019 +:104B90004DC01092FF024AC08A3F29F48091FF0263 +:104BA00087FF44C0F6CF8B3F39F48091000387FF25 +:104BB0003DC0109200033AC08C3F29F4809100035D +:104BC0001816BCF333C0843F21F48091FC028E7F21 +:104BD00017C0853F21F48091FC028D7F11C0863F74 +:104BE00021F48091FC028B7F0BC0873F21F48091E0 +:104BF000FC02877F05C0883F31F48091FC028F7EE4 +:104C00008093FC0213C08D3F21F48091FA028E7FC5 +:104C10000BC08E3F21F48091FA028D7F05C08F3F3B +:104C200029F48091FA028B7F8093FA028091FD0231 +:104C300081110EC08091FE0281110AC08091FF0295 +:104C4000811106C080910003811102C01092FB0205 +:104C500008958CEF92E00E9409180E94D02390934F +:104C6000F9028093F80208951F93CF93DF93809108 +:104C7000F8029091F9020E94DC23AC019091FB02B2 +:104C8000992321F020911D0130E006C020911E01E2 +:104C90008AE0289F900111244217530708F486C028 +:104CA0008091FD02C091FE02D091FF02109100039D +:104CB000811107C0C11176C0D11174C0111172C029 +:104CC00075C09F3F19F09F5F9093FB02181624F464 +:104CD0000E94BA248093FD028091FD0287FF05C0E7 +:104CE0000E94BA2481958093FD021C1624F40E9430 +:104CF000BA248093FE028091FE0287FF05C00E94C5 +:104D0000BA2481958093FE026091FD02662339F1F9 +:104D1000C091FE02CC2319F1772767FD7095872F8C +:104D2000972F0E949B2A23E333E343E35FE30E9430 +:104D3000AB2B0E94682A6093FD026C2F772767FDDA +:104D40007095872F972F0E949B2A23E333E343E339 +:104D50005FE30E94AB2B0E94682A6093FE021D163F +:104D600024F40E9403258093FF028091FF0287FFB5 +:104D700005C00E94032581958093FF02111624F43B +:104D80000E940325809300038091000387FF05C0E4 +:104D90000E940325819580930003DF91CF911F919D +:104DA0000C9429269F3F09F08ECF96CFDF91CF91AB +:104DB0001F910895ECEFF2E085E0DF011D928A95E6 +:104DC000E9F71092FB021092FA020895833081F104 +:104DD00028F4813059F08230D1F00895853009F4FB +:104DE00049C0B8F1863009F456C0089580911E017B +:104DF000262F30E0280F311D2F3F310524F4680F96 +:104E000060931E0108958FEF80931E010895809195 +:104E10001D01262F30E0280F311D2F3F310524F4CE +:104E2000680F60931D0108958FEF80931D01089511 +:104E300080911C01262F30E0280F311D2F3F3105B6 +:104E400024F4680F60931C0108958FEF80931C0178 +:104E5000089580911B01262F30E0280F311D2F3F30 +:104E6000310524F4680F60931B0108958FEF809340 +:104E70001B01089580911A01262F30E0280F311D63 +:104E80002F3F310524F4680F60931A0108958FEFC6 +:104E900080931A01089580911901262F30E0280F80 +:104EA000311D2F3F310524F4680F609319010895D7 +:104EB0008FEF809319010895833011F128F4813028 +:104EC00049F0823091F00895853081F120F18630EB +:104ED000C1F1089580911E01681720F4861B80930C +:104EE0001E01089510921E01089580911D016817FA +:104EF00020F4861B80931D01089510921D010895D2 +:104F000080911C01681720F4861B80931C01089572 +:104F100010921C01089580911B01681720F4861BD4 +:104F200080931B01089510921B01089580911A012E +:104F3000681720F4861B80931A01089510921A01B5 +:104F4000089580911901681720F4861B8093190138 +:104F500008951092190108950F931F93873208F056 +:104F600048C08E3108F08DC0803109F477C008F553 +:104F7000873009F461C068F4863009F09DC08091E3 +:104F8000F202817F8E7F8093F20281E080930203A0 +:104F900094C08B3009F489C08E3009F08DC08091A7 +:104FA000F20282FB222720F991E0922790FB82F9FE +:104FB0005EC0863109F479C060F4813109F07CC0AB +:104FC0000E94D41C9091160181E0892780931601DC +:104FD0006CC0893109F469C08B3109F06DC08091D2 +:104FE000F20281FB222720F991E0922790FB81F9C0 +:104FF0003EC0883309F459C050F4893209F457C0CF +:10500000853309F454C0873209F451C055C0833444 +:1050100009F44DC028F48A3308F44EC0895332C0D5 +:10502000883409F049C00E94D41C0E94120B0E94CF +:10503000D9040E942B2439C09091F202892F8095C7 +:10504000817080FB90F929F0966098609093F2024D +:1050500034C0997F977F9093F20227C08091F2022B +:1050600083FB222720F991E0922790FB83F980931C +:10507000F2029923D1F08091F20281608093F202D2 +:1050800014C08D5141E050E060E070E08A019B0166 +:1050900004C0000F111F221F331F8A95D2F7C901C8 +:1050A000B8010E9494200E94D41C81E006C061E0F7 +:1050B00070E080E090E0F5CF80E01F910F910895BF +:1050C00080E0089580E00895CF93C82F8091020377 +:1050D000813069F018F08230C9F184C0E091170185 +:1050E000F09118018081823209F07EC007C0E09102 +:1050F0001701F09118018081823261F48C2F0E9497 +:105100006028811104C08C2F0E94AC271DC081E053 +:1051100090E01AC08C2F0E946228811114C0C43103 +:1051200079F048F4CB3079F0C03109F061C082E009 +:105130008093020308C0C93219F0C83321F058C067 +:105140001092020355C081E0817054C0C93291F1C0 +:1051500020F5C43179F1B0F4C73009F047C08EE1D1 +:1051600080931E0182E380931D018AE080931C01DD +:1051700084E180931B0188E080931A0188E2809388 +:10518000190134C0CE51C63088F5EC2FF0E0EA5456 +:10519000FE4F80818093010329C0CE34E9F020F4D2 +:1051A000CB3421F56AE013C0C13579F0C235F1F492 +:1051B00061E00DC080910103882319F01092010372 +:1051C00015C081E08093020315C061E006C08091A4 +:1051D00001030E94E6260AC06AE0809101030E9452 +:1051E0005C2704C01092020380E004C081E002C08A +:1051F00080E0AACFCF9108950E948C24811102C033 +:105200000E9468240E94A82480931D0380FF02C08E +:10521000869501C080E00C94C20380911D03982FF5 +:105220009695292F30E0233031054CF49F5F990F7C +:105230008170892B816080931D030E94AC24809132 +:105240001D0386950C94C20380911D03982F96959B +:1052500091F09158990F8170892B80931D038E7F57 +:1052600091E009F490E080911D0390FB80F9809318 +:105270001D030E94AC2480911D0386950C94C203EB +:1052800080911D03982F909590FB80F980931D03CA +:105290000E94AC2480911D0380FF02C0869501C04E +:1052A00080E00C94C20390911D03892F86958F5F37 +:1052B0008F779170843028F4880F892B80931D0399 +:1052C00002C090931D0380911D038E7F91E009F42D +:1052D00090E080911D0390FB80F980931D030E9454 +:1052E000AC2480911D0386950C94C20320911D036C +:1052F000922F96958927982F990F822F8170892B4D +:1053000080931D038E7F91E009F490E080911D034E +:1053100090FB80F980931D030E94AC2480911D03B3 +:1053200086950C94C20380911D038695089550586C +:10533000BB27AA270ED0D1C1C2D130F0C7D120F0EF +:1053400031F49F3F11F41EF4B7C10EF4E095E7FB72 +:105350009FC1E92FD3D180F3BA176207730784077F +:10536000950718F071F49EF5EBC10EF4E0950B2E45 +:10537000BA2FA02D0B01B90190010C01CA01A001A7 +:105380001124FF27591B99F0593F50F4503E68F102 +:105390001A16F040A22F232F342F4427585FF3CF43 +:1053A000469537952795A795F0405395C9F77EF414 +:1053B0001F16BA0B620B730B840BBAF09150A1F05D +:1053C000FF0FBB1F661F771F881FC2F70EC0BA0FE3 +:1053D000621F731F841F48F4879577956795B7956B +:1053E000F7959E3F08F0B3CF9395880F08F0992763 +:1053F000EE0F97958795089527D108F481E00895D9 +:105400000CD06BC163D140F05AD130F021F45F3F32 +:1054100019F03EC1511195C14FC170D198F3992334 +:10542000C9F35523B1F3951B550BBB27AA27621768 +:105430007307840738F09F5F5F4F220F331F441FAD +:10544000AA1FA9F333D00E2E3AF0E0E830D09150E5 +:105450005040E695001CCAF729D0FE2F27D0660FD2 +:10546000771F881FBB1F261737074807AB07B0E811 +:1054700009F0BB0B802DBF01FF2793585F4F2AF027 +:105480009E3F510568F004C15CC15F3FECF3983E5C +:10549000DCF3869577956795B795F7959F5FC9F784 +:1054A000880F911D9695879597F90895E1E0660F0D +:1054B000771F881FBB1F621773078407BA0720F086 +:1054C000621B730B840BBA0BEE1F88F7E0950895EF +:1054D00004D06894B11135C1089518D188F09F5750 +:1054E00090F0B92F9927B751A0F0D1F0660F771F30 +:1054F000881F991F1AF0BA95C9F712C0B13081F010 +:105500001FD1B1E008951CC1672F782F8827B85F9D +:1055100039F0B93FCCF3869577956795B395D9F770 +:105520003EF490958095709561957F4F8F4F9F4F7A +:105530000895E89409C097FB3EF490958095709586 +:1055400061957F4F8F4F9F4F9923A9F0F92F96E9CF +:10555000BB279395F695879577956795B795F11144 +:10556000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE1 +:105570008F4F9F4F16C0882311F096E911C07723F3 +:1055800021F09EE8872F762F05C0662371F096E8FC +:10559000862F70E060E02AF09A95660F771F881FCB +:1055A000DAF7880F9695879597F9089588D018F0BF +:1055B00011F08CD038F480C0C4C0E92F9FD0B0F374 +:1055C0005523C9F3E7FB6217730784079507A8F112 +:1055D00099F3E92FFF2788232AF03197660F771F69 +:1055E000881FDAF7952F5527442332F09150504009 +:1055F000220F331F441FD2F7BB27E91BF50B621B99 +:10560000730B840BB109C1F222F4620F731F841F64 +:10561000B11D31972AF0660F771F881FBB1FEFCF90 +:10562000915050405AF041F0882332F0660F771FB6 +:10563000881F91505040C1F7939530C0869577955B +:1056400067959F5FD9F7F8CF990F0008550FAA0B00 +:10565000E0E8FEEF16161706E807F907C0F0121685 +:105660001306E407F50798F0621B730B840B950B88 +:1056700039F40A2661F0232B242B252B21F40895DD +:105680000A2609F4A140A6958FEF811D811D08957A +:1056900097F99F6780E870E060E008959F3F31F0E0 +:1056A000915020F4879577956795B795880F911D50 +:1056B0009695879597F908959FEF80EC08950024BB +:1056C0000A941616170618060906089500240A9467 +:1056D00012161306140605060895092E0394000CED +:1056E00011F4882352F0BB0F40F4BF2B11F460FF7C +:1056F00004C06F5F7F4F8F4F9F4F089557FD9058A5 +:10570000440F551F59F05F3F71F04795880F97FB85 +:10571000991F61F09F3F79F087950895121613063F +:105720001406551FF2CF4695F1DF08C0161617066E +:105730001806991FF1CF86957105610508940895A3 +:10574000E894BB2766277727CB0197F908957CDF7C +:1057500008F48FEF08950BD0C0CFB1DF28F0B6DF8B +:1057600018F0952309F094CFA7CF1124EACFC6DF14 +:10577000A0F3959FD1F3950F50E0551F629FF00164 +:10578000729FBB27F00DB11D639FAA27F00DB11DBD +:10579000AA1F649F6627B00DA11D661F829F222746 +:1057A000B00DA11D621F739FB00DA11D621F839FCD +:1057B000A00D611D221F749F3327A00D611D231FA3 +:1057C000849F600D211D822F762F6A2F11249F57F1 +:1057D00050408AF0E1F088234AF0EE0FFF1FBB1F14 +:1057E000661F771F881F91505040A9F79E3F5105B3 +:1057F00070F04ECFA6CF5F3FECF3983EDCF386957A +:1058000077956795B795F795E7959F5FC1F7FE2B5D +:10581000880F911D9695879597F90895FA01EE0FD7 +:10582000FF1F30962105310599F16115710561F46D +:105830008038BFE39B0749F168949038810561F097 +:105840008038BFEF9B0741F0992342F5FF3FE10508 +:105850003105210511F1E8940894E795D901AA23AF +:1058600029F4AB2FBE2FF85FD0F310C0FF5F70F4A8 +:10587000A695E0F7F73950F019F0FF3A38F49F7722 +:105880009F930CD00F9007FC905808953EF014CFD2 +:1058900060E070E080E89FE308954FE79F775F93B3 +:1058A0004F933F932F939ED02F913F914F915F91B4 +:1058B00052DF05C019F40EF0EBCE42CFFDCE26DF4D +:1058C000C8F39638C0F707F80F92E8942BE33AEA4A +:1058D00048EB5FE74EDF0F920F920F924DB75EB726 +:1058E0000F92C0D0EAE0F1E016D04F915F91EF91B6 +:1058F000FF91E595EE1FFF1F49F0FE57E068442732 +:10590000EE0F441FFA95E1F74195550B32D00F90F9 +:1059100007FE26C00895DF93CF931F930F93FF9246 +:10592000EF92DF927B018C01689405C0DA2EEF01C3 +:105930001EDFFE01E894A591259135914591559181 +:10594000AEF3EF0106DDFE019701A801DA9479F7C5 +:10595000DF90EF90FF900F911F91CF91DF9108950D +:105960009B01AC0160E070E080E89FE349CD90CE00 +:1059700095CECCDEE8F39923D9F3940F511DBBF3F8 +:105980009150504094F059F0882332F0660F771F01 +:10599000881F91505040C1F79E3F510544F7880F32 +:1059A000911D9695879597F908955F3FACF0983EC5 +:1059B0009CF0BB27869577956795B79508F4B160FD +:1059C0009395C1F7BB0F58F711F460FFE8CF6F5FF5 +:1059D0007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE94 +:1059E000689456CE93DEC8F39923D1F3C6F3DF93C0 +:1059F000CF931F930F93FF92C92FDD2788232AF09F +:105A00002197660F771F881FDAF720E030E040E823 +:105A10005FEB9FE3883920F0803E30F021968F774E +:105A200087DCE2E3F1E003C083DCEFE5F1E073DF64 +:105A30008B01BE01EC01FB2E6F5771097595771F25 +:105A4000880B990B78DD28E132E741E35FE38FDED5 +:105A5000AF2D9801AE01FF900F911F91CF91DF9173 +:105A600078DC3BCEFA01DC01AA0FBB1F9B01AC0125 +:105A7000BF5728F422273327442750781FC0B75137 +:105A800088F4AB2F0024469537952795011CA395E4 +:105A9000D2F3002069F0220F331F441FB395DAF3CD +:105AA0000DD045CC61307105A0E88A07B94630F4C5 +:105AB0009B01AC016627772788279078309621F0E4 +:105AC00020833183428353830895AA1BBB1B51E17A +:105AD00007C0AA1FBB1FA617B70710F0A61BB70B5E +:105AE000881F991F5A95A9F780959095BC01CD0103 +:105AF000089597FB072E16F4009407D077FD09D080 +:105B00000E94652D07FC05D03EF4909581959F4F2E +:105B10000895709561957F4F0895EE0FFF1F0590D2 +:105B2000F491E02D0994F999FECF92BD81BDF89AC8 +:105B3000992780B50895A8E1B0E042E050E00C94C8 +:105B4000BB2D262FF999FECF92BD81BDF89A019702 +:105B500000B4021639F01FBA20BD0FB6F894FA9AB5 +:105B6000F99A0FBE08950196272F0E94A22D0C943A +:105B7000A12DDC01CB01FC01F999FECF06C0F2BDDD +:105B8000E1BDF89A319600B40D9241505040B8F7FB +:065B90000895F894FFCF18 +:105B9600640007000CFF0000003F64F610841161EA +:105BA600112D11F9100101DF022808140A321E0016 +:105BB60002040507090B0C0E1011131517181A1CF1 +:105BC6001D1F2123242628292B2D2F30323435372B +:105BD600393B1F0F03764F5F6F7F49694379095938 +:105BE60053633149803F5D8B803FF8BF803FCAE1F8 +:105BF600803F73ED803FCAE1803FF8BF803F5D8BF9 +:105C0600803F3149803F0000803FF16D7F3F75EA5C +:105C16007E3F4C827E3F833F7E3F84287E3F833F8C +:105C26007E3F4C827E3F75EA7E3FF16D7F3F0000EE +:105C3600803F3F4D36398F0642060C06D305660572 +:105C46007F059805B105010203040506070809004A +:00000001FF diff --git a/keyboard/planck/keymaps/kyle/compiled.hex b/keyboard/planck/keymaps/kyle/compiled.hex new file mode 100644 index 0000000000..9226d4c19b --- /dev/null +++ b/keyboard/planck/keymaps/kyle/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C290014001A0008001500FC +:1001E00017001C0018000C00120013002A002B003E +:1001F00004001600070009000A000B000D000E00A5 +:100200000F0033003400E1001D001B000600190040 +:100210000500110010003600370038002800E40007 +:10022000E000E200E30002202C002C00012050003E +:10023000510052004F00290014001A000900130059 +:100240000A000D000F0018001C0033002A002B00CC +:10025000040015001600170007000B00110008002D +:100260000C0012003400E1001D001B000600190004 +:1002700005000E0010003600370038002800C300CB +:10028000E000E200E30002202C002C0001205000DE +:10029000510052004F0035001E001F0020002100B9 +:1002A0002200230024002500260027002A00010048 +:1002B0000320042048120100010001002D002E003F +:1002C0002F00300031000100440045006800690043 +:1002D0006A006B006C006D006E006F000100010091 +:1002E0000100010001000100010001000120AB003C +:1002F000AA00A900AE0035021E021F022002210240 +:100300002202230224022502260227022A000100DB +:100310000320042048120712010001002D022E02C2 +:100320002F023002310201003A003B003C003D0048 +:100330003E003F0040004100420043000100835066 +:100340000100010001000220010001000100AB00DA +:10035000AA00A900AE002803540068006500200030 +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/leo/compiled.hex b/keyboard/planck/keymaps/leo/compiled.hex new file mode 100644 index 0000000000..4bfe15bd09 --- /dev/null +++ b/keyboard/planck/keymaps/leo/compiled.hex @@ -0,0 +1,1454 @@ +:100000000C94C5020C9409030C9409030C94090385 +:100010000C9409030C9409030C9409030C94090330 +:100020000C9409030C9409030C94A7140C947915EF +:100030000C94DB220C9409030C9409030C9409031F +:100040000C9409030C946B030C9409030C9409039E +:100050000C9409030C9443230C9409030C94090396 +:100060000C9409030C9409030C9409030C940903E0 +:100070000C9409030C9409030C9409030C940903D0 +:100080000C941C0B0C9409030C9409030C940903A5 +:100090000C9409030C9409030C9409030C940903B0 +:1000A0000C9409030C9409030C940903E615081633 +:1000B000F6160816F6164D167016F616C516D8164C +:1000C000C219C219F119F119301A501AA61BA61B30 +:1000D0005B1AA61B0B1B0B1B721B7B1BA61BA01BFF +:1000E000181B181B181B181B181B181B181B181B78 +:1000F000181B181B181B181B181B181B181B181B68 +:10010000281B361B3D1B441B4E1B07634236B79B07 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3F1A429002F003400330013001C0008 +:1001E00009000A00060015000F002A002B00040079 +:1001F0001200080018000C0007000B001700110087 +:1002000016002800E100370014000D000E001B004E +:10021000050010001A0019001D003600E000E20081 +:10022000E300032002202C002C0001200320E70023 +:10023000E600E400000000000000000000000000F4 +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:100290000000000030141E001F002000210022007A +:1002A0002300240025002600270030023A003B00EE +:1002B0003C003D003E003F00400041004200430042 +:1002C000440045000100010001000100010001009F +:1002D0000100010001000100010001000100010016 +:1002E0000100010001000100010001000100010006 +:1002F000010001002E021E021F022002221422020F +:10030000230224022414271427022D0001001F14A5 +:100310003802640064022D1464143200250226029F +:100320002D02380001000100010001000100010060 +:100330000100010025142614010001000100010044 +:1003400001000100010001000100010001000100A5 +:100350000100010001004A0052004D0001000100AF +:1003600001004A0052004D0001004C0001004F0006 +:10037000510050004B0001004B00500051004F0055 +:100380000100010001000100010001004E00010018 +:100390004E000100AA00A9000100010001000100B7 +:1003A0000100010001000100010001000100010045 +:1003B000010001002803540068006500200050007F +:1003C0006C0061006E0063006B0020004B00650054 +:1003D000790062006F0061007200640000002C036D +:1003E0004F007200740068006F006C0069006E00BE +:1003F00065006100720020004B006500790062001A +:100400006F006100720064007300000004030904BF +:1004100009026D00040100A0FA09040000010301B3 +:100420000100092111010001223F00070581030895 +:10043000000A090401000103010200092111010061 +:1004400001224D000705820308000A090402000189 +:100450000300000009211101000122360007058375 +:100460000308000A09040300010300000009211128 +:100470000100012239000705840310000112011058 +:100480000100000008EDFE606001000102000105AE +:10049000010906A101050719E029E71500250195C5 +:1004A0000875018102050819012905950575019155 +:1004B000029501750391010507190029771500259B +:1004C00001957875018102C005010980A1018502AD +:1004D00016010026B7001A01002AB7007510950111 +:1004E0008100C0050C0901A1018503160100269CAD +:1004F000021A01002A9C02751095018100C00501B5 +:100500000902A1010901A100050919012905150028 +:10051000250195057501810295017503810105018C +:10052000093009311581257F950275088106093842 +:100530001581257F950175088106050C0A3802157D +:1005400081257F950175088106C0C005010906A1B6 +:1005500001050719E029E7150025019508750181B6 +:100560000295017508810105081901290595057590 +:100570000191029501750391010507190029FF15E5 +:100580000025FF950675088100C011241FBECFEF1E +:10059000DAE0DEBFCDBF04B603FE24C080911E03A7 +:1005A00090911F03A0912003B09121038730904BBD +:1005B000A740B04BB9F410921E0310921F03109283 +:1005C00020031092210314BE84B7877F84BF88E183 +:1005D0000FB6F89480936000109260000FBEE0E0C8 +:1005E000F8E3099511E0A0E0B1E0E0E1FAE502C02E +:1005F00005900D92A03CB107D9F713E0A0ECB1E053 +:1006000001C01D92AE31B107E1F70E94ED110C94CB +:10061000062D0C9400000895089581E00895089532 +:100620000C940C030C940D030C940F030E94D0281F +:1006300023E030E0281B3109220F2093C4010895E4 +:10064000282F2F9880918000211108C0877F8093E8 +:10065000800010928D0010928C001BC088608093E7 +:100660008000233019F48FEF9FEF0FC083E090E0FC +:10067000821B9109880F991F2FEF3FEFA90102C03C +:10068000569547958A95E2F7CA0190938D0080931D +:100690008C000C9416030E94160384E08093C3011F +:1006A0001092C0010895279A2F988FEF9FEF909393 +:1006B0008700809386008AE08093800089E18093A0 +:1006C00081000E9439280C944B030E9453036E9AB8 +:1006D000769A0C940B031F920F920FB60F9211246F +:1006E0002F933F938F939F93EF93FF93E091C101DB +:1006F000F091C201CF0101969093C2018093C10194 +:100700000090C30102C0F695E7950A94E2F7EF73F3 +:100710008091C001823019F4E03251F404C081307C +:1007200039F4EF3329F480916F008D7F80936F004F +:10073000F0E0E457FE4FE49121E031E0E29FC00198 +:10074000E39F900D11240090C40102C096958795F7 +:100750000A94E2F790938D0080938C00FF91EF91C3 +:100760009F918F913F912F910F900FBE0F901F90EF +:10077000189581E008950C94B90308950C946503CD +:1007800080911502882309F448C08091D10190918D +:10079000D201009779F40E940D239093D2018093A7 +:1007A000D1018091D30190E0009771F48091D40140 +:1007B00090E00AC00E9419232091000130910101AC +:1007C0002817390740F329C00197880F991F880F10 +:1007D000991FFC01EB52FE4F6081718182819381F0 +:1007E0000E94820AE091D30184E0E89FF001112485 +:1007F000EB52FE4F60817181828193814FE050E026 +:100800000E943A0E8091D30190E001966091D4014C +:1008100070E00E94B62C8093D3010C9410031092C8 +:1008200017020C944F0A0895089581E080931702EF +:100830000C941404089508958F929F92AF92BF92E2 +:10084000EF92FF920F931F93CF93DF93CDB7DEB755 +:10085000A3970FB6F894DEBF0FBECDBF7C01FC019D +:1008600000811181C8010E940A21B8010E9421065D +:100870008C01B7010E94BB03882309F4CCC100326C +:10088000F0E51F0741F4F7018281882309F458C07D +:100890000E949E0EC0C10132F0E51F0741F4F7012E +:1008A0008281882309F44CC00E94A70EB4C1023291 +:1008B000F0E51F0751F4F7018281882309F440C055 +:1008C0000E949A0E8111F0CFE3CF0332F0E51F07AB +:1008D00039F4F7018281882399F10E9415049BC1A4 +:1008E0000432F0E51F0739F4F7018281882341F1D2 +:1008F0000E940F0490C10532F0E51F0749F4F7018B +:1009000082818823E9F0809117028111F1CFE5CF30 +:100910000632F0E51F0739F4F7018281882381F060 +:100920000E94AE0E0AC00732F0E51F0749F4F70136 +:100930008281882329F00E94B90E0E941B046BC19A +:1009400080911702811105C0F70182818111CFC00A +:1009500018C1003E110579F4F7018281882309F45A +:100960004DC00E944F0A81E080931602109215023A +:100970001092D40150C1023E110559F4F701828151 +:100980008823E1F10E944F0A10921602109215027C +:1009900042C1033E110591F4F7018281882371F170 +:1009A0000E944F0A1092160281E080931502109265 +:1009B000D3011092D2011092D1012DC1023511053F +:1009C00059F4F7018281882309F425C1809100013F +:1009D000909101010A970DC00135110579F4F701D5 +:1009E0008281882309F417C180910001909101014F +:1009F0000A9690930101809300010DC1409104017A +:100A000083E2EFE1F1E0DE01119601900D928A950B +:100A1000E1F7F701808121E030E02C0F3D1F280F26 +:100A2000311DC9012091020130910301FC01E20F47 +:100A3000F31F6081772767FD7095640F711D88270C +:100A400077FD8095982F0E94D82920E030E040E47F +:100A500051E40E943D294B015C01F701218184E0B2 +:100A600090E0821B9109BC01882777FD8095982F23 +:100A70000E94D8299B01AC01C501B4010E94D52870 +:100A80009B01AC0160E070E080E090E40E944B2BA1 +:100A900020E030E04CED50E40E94E82A4B015C017C +:100AA000F70182818823D1F04FE050E0C501B40105 +:100AB0000E943A0E809116028823A1F08091D40101 +:100AC00024E0829FF0011124EB52FE4F808291823C +:100AD000A282B3828F5F8093D40104C0C501B401A8 +:100AE0000E94820A0F3F110508F02ECF94C080911A +:100AF000D00181111FC0043130E5130709F051C046 +:100B00000E94BD0381E08093D0010E940D23909349 +:100B1000CF018093CE011092C7011092C9011092AB +:100B2000C8011092CB011092CA011092CD0110920F +:100B3000CC0171C08091CE019091CF010E94192308 +:100B4000883C910570F48091C701E82FF0E0EE0F2A +:100B5000FF1FE853FE4F118300838F5F8093C7010F +:100B60005AC0043880E5180721F00538104501F116 +:100B70003AC0F7018281882341F01092C50182E0DA +:100B80001EC0043830E5130759F58091C501811165 +:100B900006C086E20E94661886E20E942E1982E054 +:100BA0001CC00438F0E51F0741F305381045D9F49F +:100BB000F7018281882331F01092C60180E20E9401 +:100BC0007D1929C08091C601811106C087E20E946B +:100BD000661887E20E942E1980E20E9484191BC0C9 +:100BE0000538104529F381E08093C5018093C60143 +:100BF000C701A3960FB6F894DEBF0FBECDBFDF913D +:100C0000CF911F910F91FF90EF90BF90AF909F9069 +:100C10008F900C94120380E0A3960FB6F894DEBF79 +:100C20000FBECDBFDF91CF911F910F91FF90EF903D +:100C3000BF90AF909F908F90089580E090E00895CE +:100C400008959CE0799FF001112490E3899FE00DC5 +:100C5000F11D1124E60FF11DEE0FFF1FEC52FE4FA8 +:100C6000859194910895880F991FFC01E45BFF4FD3 +:100C7000859194910895880F991FFC01E453FE4FCC +:100C80008591949108950F931F93CF93DF93EC0177 +:100C9000811521E39207A0F5C11580E3D80708F07C +:100CA000D7C0C83ED105D8F4C03ED10508F007C270 +:100CB000C83AD10578F4C53AD10508F06AC0C13008 +:100CC000D10509F463C008F4F7C1C430D10508F0B8 +:100CD000F6C1F2C1CB3BD10508F466C0EDC1C11528 +:100CE00090E2D90708F0AFC0C11521E0D20708F0A3 +:100CF000E6C1C03FD10508F4DFC18E0110651FC2F7 +:100D0000C03880E5D80700F5C03790E5D90708F06E +:100D1000A3C0C11520E5D20709F4ACC050F4CE0140 +:100D2000905480319F4008F0C7C1DF708E01106A77 +:100D300006C2C13080E5D80709F4AEC0C43190E5E1 +:100D4000D90708F4AFC0B8C1C33820E5D20709F409 +:100D50008EC050F4C13890E5D90709F482C008F07C +:100D600083C000E011EDEBC1C03181E5D80708F484 +:100D7000A3C1C11597E5D90708F436C1CE01905734 +:100D80008115904108F098C1DF7093C101E010E037 +:100D9000D6C1C53AD10509F494C1C63AD10509F0C6 +:100DA00093C102E810E4CBC1C83AD10509F48FC160 +:100DB000C93AD10509F48EC1CA3AD10509F48DC1E9 +:100DC000CB3AD10509F48CC1CC3AD10509F48BC1D9 +:100DD000CD3AD10509F48AC1C03BD10509F489C1D6 +:100DE000CE3AD10509F488C1CF3AD10509F487C1BB +:100DF000C13BD10509F486C1C23BD10509F485C1C7 +:100E0000C33BD10509F484C1C43BD10509F483C1B6 +:100E1000C53BD10509F482C1C63BD10509F481C1A6 +:100E2000C73BD10509F480C1C83BD10509F47FC196 +:100E3000C93BD10509F47EC1CA3BD10509F47DC186 +:100E400000E014E47CC1CE019F700E943B0678C193 +:100E5000DD278E01106C73C1CF70DD278E01146DFC +:100E60006EC100E010ED6BC100E012ED68C100E062 +:100E700013ED65C10E94111C0E944F0A0E941304C9 +:100E80008FEF94E32CE0815090402040E1F700C0C8 +:100E900000000E94682353C18091F2028160809318 +:100EA000F2024DC10E94C923811102C00E94A523F4 +:100EB0000E94DC2390E090931D0380931C03C230BA +:100EC00080E5D80721F480911C03816086C0C4307E +:100ED00090E5D90721F480911C0382607EC0C63062 +:100EE00020E5D20721F480911C03846076C0C830CD +:100EF00080E5D80719F480911C0327C0CA3090E51B +:100F0000D90721F480911C03806167C0CC3020E5B3 +:100F1000D20721F480911C0380625FC0CE3080E54F +:100F2000D80721F480911C03806457C0C03190E53C +:100F3000D90721F480911C0380684FC0C23120E59D +:100F4000D20729F480911C038460886046C0C330B6 +:100F500080E5D80721F480911C038E7F3EC0C53008 +:100F600090E5D90721F480911C038D7F36C0C730EE +:100F700020E5D20721F480911C038B7F2EC0C9305D +:100F800080E5D80719F480911C0326C0CB3090E58A +:100F9000D90721F480911C038F7E1FC0CD3020E53E +:100FA000D20721F480911C038F7D17C0CF3080E5DC +:100FB000D80721F480911C038F7B0FC0C13190E5CD +:100FC000D90721F480911C038F7707C0C331D04526 +:100FD00031F480911C038B7F877F80931C03809169 +:100FE0001C030E94E023ABC08D2F99278F70992797 +:100FF00081309105D9F49E012370332702C0880FF8 +:10100000991F2A95E2F79C688E0144E0000F111F9A +:101010004A95E1F700271370802B912B53E0CC0FFA +:10102000DD1F5A95E1F7C076DD272FC0823091058C +:1010300031F4DC2FCC278E01016F106A80C0833021 +:10104000910569F4CE018370992701E010E002C098 +:10105000000F111F8A95E2F7C8019C680FC0843009 +:101060009105B9F4CE018370992701E010E002C028 +:10107000000F111F8A95E2F7C8019A6823E0CC0F90 +:10108000DD1F2A95E1F7C07ED7708C010C2B1D2B3C +:1010900056C08530910531F4DC2FCC278E01046FCA +:1010A000106A4DC0069709F04AC0CF71DD27DC2FCA +:1010B000CC278E01106243C000E010E040C08E01DA +:1010C0003EC001E810E43BC003E810E438C002EE83 +:1010D00014E435C009EE14E432C00AEE14E42FC063 +:1010E00005EB14E42CC006EB14E429C007EB14E470 +:1010F00026C00CEC14E423C00DEC14E420C003E87B +:1011000015E41DC00AE815E41AC002E915E417C089 +:1011100004E915E414C001E216E411C003E216E488 +:101120000EC004E216E40BC005E216E408C006E2B5 +:1011300016E405C007E216E402C00AE216E4C8019C +:10114000DF91CF911F910F9108959CE0799FF0015D +:10115000112490E3899FE00DF11D1124E60FF11D8C +:10116000EE0FFF1FEC52FE4F85919491803E91054A +:10117000E0F4803C910558F58133910509F46FC086 +:1011800048F48932910509F463C08A32910509F463 +:101190006DC072C089339105E9F082389105D1F0B4 +:1011A0008533910509F44DC067C0833E910581F1F7 +:1011B00038F4803E9105B9F0823E9105D9F05CC0CB +:1011C000863E910561F1873E9105A1F155C00E94CF +:1011D0003306089520911C0320FD02C021FF4CC05E +:1011E00080EE90E049C080911C0380FFF9CF89E335 +:1011F00090E042C080911C0382FF0EC080911C03CE +:1012000084FF03C080E090E037C083EE90E034C0FC +:1012100080911C0382FFF2CF82EE90E02DC080917E +:101220001C0383FF0BC080911C0384FDEBCF87EE72 +:1012300090E022C080911C0383FFF5CF86EE90E002 +:101240001BC080911C0385FF07C089E290E014C099 +:1012500080911C0385FFF9CF85E390E00DC080915C +:101260001C0386FF07C08AE290E006C080911C0341 +:1012700086FFF9CF81E390E00E94430608950C9425 +:101280001403E82FF0E0E25BFE4F8081E82FEF705F +:10129000F0E082958F7021E030E0A90102C0440F98 +:1012A000551F8A95E2F740A308950F931F93CF939C +:1012B000DF9385B7806885BF85B7806885BFC3E049 +:1012C000D0E001E010E0FE01E25BFE4F8081E82FFC +:1012D000EF70F0E021A182958F70A80102C0440F49 +:1012E000551F8A95E2F7CA01822B81A38C2F0E9499 +:1012F0004109219740F78BE090E061E070E0FC014C +:10130000EE5BFE4F2081E22FEF70F0E042A12295CC +:101310002F70DB0102C0AA0FBB1F2A95E2F79D01C7 +:10132000242B22A3019758F7DF91CF911F910F91A2 +:101330000C94BE03EF92FF920F931F93CF93DF9312 +:1013400000E212E0C3E0EE24E394F12CD5E08C2F10 +:101350000E9441098BE090E040E050E0FC01EE5B30 +:10136000FE4F6081E62FEF70F0E020A130E0629543 +:101370006F7002C0359527956A95E2F720FD09C088 +:101380009701082E02C0220F331F0A94E2F7422B66 +:10139000532B019718F7F801929182918F018417CE +:1013A000950721F051834083D09305018C2F0E9433 +:1013B0004109C15060F68091050187FD2CC0815024 +:1013C000809305018F3F39F08FE99FE00197F1F796 +:1013D00000C0000020C080911E0290911F029093D7 +:1013E00027028093260280911C0290911D02909307 +:1013F00025028093240280911A0290911B029093FF +:1014000023028093220280911802909119029093F6 +:101410002102809320020E94C00381E0DF91CF91DE +:101420001F910F91FF90EF900895E82FF0E0EE0FDD +:10143000FF1FE05EFD4F80819181089508950F9315 +:101440001F93CF9308E212E0C0E0F80192918291DD +:101450008F010E948522C80FF2E000321F07A9F712 +:101460008C2FCF911F910F9108950E94C923811154 +:1014700002C00E94A5230E94EE23809307033E9A98 +:10148000809171008D7F8093710082E08093900045 +:101490008AE18093910081E080932A0208958091EF +:1014A0002A02811102C00E94350A10927A0210921B +:1014B0007902809171008D7F8093710080919000FE +:1014C0008F738093900010923C0210923B02109216 +:1014D00073021092740210927502109276021092AA +:1014E000720210927102E1E5F2E0A1E4B2E0119221 +:1014F0001192119211921D921D9282E0E137F8072C +:10150000B1F70895CF92DF92EF92FF920F931F935E +:10151000CF93DF9320913B02222309F484C06B0117 +:101520007C0180912A02811102C00E94350A01E7E4 +:1015300012E0C7E0D0E0A7019601F80192918291F4 +:10154000729162918F010E943929811131C0FE018F +:10155000EE0FFF1FEE0FFF1FEF5AFD4F108211829B +:1015600012821382DE01AA0FBB1FAF5BBD4F119623 +:101570001C921E92C730D105E9F021964481558115 +:1015800066817781408351836283738314821582DD +:101590001682178212968D919C91139711969C93A7 +:1015A0008E9313961C921E92129734961296E2CF47 +:1015B000219708F68091790290917A02019797FD20 +:1015C00005C090937A028093790204C010927A0247 +:1015D000109279028091790290917A02209177029B +:1015E000309178022817390724F01092780210926F +:1015F0007702892BC1F4809171008D7F80937100F7 +:10160000809190008F7380939000109273021092DB +:101610007402109275021092760210927202109269 +:10162000710210923B02DF91CF911F910F91FF90B9 +:10163000EF90DF90CF9008951F920F920FB60F9208 +:1016400011244F925F926F927F928F929F92AF92EE +:10165000BF92CF92DF92EF92FF922F933F934F93DF +:101660005F936F937F938F939F93AF93BF93CF932A +:10167000DF93EF93FF9380913B02882309F49BC192 +:10168000C0917902D0917A021C161D060CF093C10C +:1016900040902B0250902C0260902D0270902E02F0 +:1016A00020E030E0A901C301B2010E94E42A18162B +:1016B0000CF065C0C130D10509F452C080917702A9 +:1016C00090917802BE010E94B62C7C019093780222 +:1016D0008093770280903D0290903E02A0903F025E +:1016E000B090400220E030E040E85FE3C501B40183 +:1016F0000E94D52860933D0270933E0280933F0282 +:1017000090934002F701EE0FFF1FEE0FFF1FEF5AFD +:10171000FD4FA301920160817181828193810E94BA +:101720003D2920E030E040E05EE30E94E82A9B0192 +:10173000AC01C501B4010E94E42A18168CF4C7015B +:101740000196BE010E94B62C909378028093770296 +:1017500010923D0210923E0210923F0210924002FF +:10176000E0917702F0917802EE0FFF1FEE0FFF1F5E +:10177000EF5AFD4F6081718182819381D0C0C0900A +:101780007302D0907402E0907502F090760220E02F +:1017900030E0A901C701B6010E94392921978823A9 +:1017A00009F4A2C0FE01EE0FFF1FEE0FFF1FEF5A5C +:1017B000FD4F80809180A280B380A5019401C70174 +:1017C000B6010E94392987FF31C0A501940160E06C +:1017D00070E08CED93EC0E943D2920E030E040E485 +:1017E00051E40E943D2920E030E040E05FE30E94A8 +:1017F000E82A9B01AC0160E070E080E090E40E9488 +:101800004B2B9B01AC01C501B4010E94E82A9B014E +:10181000AC01C701B6010E94392987FF07C0A701A3 +:10182000960160E070E08CED93E439C0A50194016D +:10183000C701B6010E94E42A18160CF055C0A50194 +:10184000940160E070E08CED93E40E943D2920E07B +:1018500030E040E451E40E943D2920E030E040E0E7 +:101860005FE30E94E82A9B01AC0160E070E080E049 +:1018700090E40E944B2B9B01AC01C501B4010E9476 +:10188000E82A9B01AC01C701B6010E94E42A1816A0 +:101890005CF5A701960160E070E08CED93EC0E948E +:1018A0003D2920E030E040E451E40E943D2920E061 +:1018B00030E040E05FE30E94E82A9B01AC0160E079 +:1018C00070E080E090E40E944B2B9B01AC01C701CB +:1018D000B6010E94E82A60937302709374028093A9 +:1018E00075029093760213C0FE01EE0FFF1FEE0FFC +:1018F000FF1FEF5AFD4F80819181A281B3818093B8 +:10190000730290937402A0937502B0937602609173 +:101910007302709174028091750290917602209109 +:101920002802309129022F3F4FEF340731F02F5F0B +:101930003F4F30932902209328020E94C40E6B016E +:101940007C0120E034E244EF51E40E94392987FF12 +:1019500008C086EFC82E88E2D82E84EFE82E81E4F6 +:10196000F82E20E030E040E051E4C701B6010E94CB +:10197000E82A9B01AC0160E074E284E79BE40E94EA +:101980003D296B017C010E94AA2970939700609306 +:101990009600209106013091070140910801509175 +:1019A0000901C701B6010E94E82A0E94AA29709382 +:1019B00099006093980080913C02882309F433C118 +:1019C000C0903702D0903802E0903902F0903A028D +:1019D00020E030E0A901C701B6010E94E42A1816F0 +:1019E000D4F580912802909129028F3F2FEF920722 +:1019F00029F001969093290280932802C701B6012D +:101A00000E94C40E20E030E040E051E40E94E82A49 +:101A10009B01AC0160E074E284E79BE40E943D29F5 +:101A20006B017C010E94AA29709397006093960035 +:101A30002091060130910701409108015091090160 +:101A4000C701B6010E94E82A0E94AA297093990052 +:101A50006093980008C01092970010929600109220 +:101A600099001092980060913102709132026F5F7C +:101A70007F4F709332026093310220919600309133 +:101A8000970080E090E0232BF1F0C0919600D09178 +:101A900097000E94D6296B017C01BE0180E090E096 +:101AA0000E94D6299B01AC016091330270913402EF +:101AB00080913502909136020E943D2920E03FEF4F +:101AC0004FE757E410C00E94D6296B017C0120E04B +:101AD00030EE4FEF54E46091330270913402809104 +:101AE0003502909136020E94E82A9B01AC01C701A1 +:101AF000B6010E94E42A87FD96C080912F028F5F75 +:101B000080932F0290E02091030330910403821709 +:101B10009307A0F080910E03882319F010922F02F2 +:101B20000DC0809171008D7F809371008091900035 +:101B30008F738093900010923C027DC080913002A0 +:101B4000C0912F02811128C0C0900803D0900903D2 +:101B5000E0900A03F0900B0320E030E0A901C701F8 +:101B6000B6010E94E42A1816BCF481E0809330028A +:101B700010923702109238021092390210923A02F3 +:101B8000C0923302D0923402E0923502F0923602D3 +:101B9000C150C0932F0243C010923002109229020C +:101BA00010922802E0910503F091060348E0C49FDB +:101BB000E00DF11D112480819181A281B381809378 +:101BC000370290933802A0933902B0933A0220E092 +:101BD00030E040E85EE364817581868197810E94F0 +:101BE000E82A6B017C0180910A01682F70E080E097 +:101BF00090E00E94D62920E030E048EC52E40E94B8 +:101C00003D299B01AC01C701B6010E94E82A6093FF +:101C1000330270933402809335029093360210920F +:101C20003202109231028091070380FD04C01092AD +:101C30003C0210923B02FF91EF91DF91CF91BF9157 +:101C4000AF919F918F917F916F915F914F913F9154 +:101C50002F91FF90EF90DF90CF90BF90AF909F902B +:101C60008F907F906F905F904F900F900FBE0F906E +:101C70001F901895CF92DF92EF92FF92CF93DF9350 +:101C80006B017C01EA0180912A02811102C00E944D +:101C9000350A8091070380FF46C0809179029091B8 +:101CA0007A0208970CF03FC0809171008D7F80937D +:101CB000710080913C0281110E944F0A81E0809363 +:101CC0003B02109229021092280220E030E0A90184 +:101CD000C701B6010E94E42A1816DCF4809179024B +:101CE00090917A02FC01EE0FFF1FEE0FFF1FEF5ADB +:101CF000FD4FC082D182E282F382FC01EE0FFF1F12 +:101D0000EF5BFD4FD183C083019690937A0280935D +:101D100079028091710082608093710080919000BF +:101D2000806880939000DF91CF91FF90EF90DF90DB +:101D3000CF900895809107038170089580910703E3 +:101D40008160809307030E94F2230C941A0480910F +:101D500007038E7F809307030C94F22380917B020C +:101D600090E0019666E070E00E94B62C80937B02C2 +:101D7000089580917B0290E0019766E070E00E94F8 +:101D8000B62C80937B0208958F929F92AF92BF9260 +:101D9000CF92DF92EF92FF920F931F93CF93DF9337 +:101DA0006B017C01C0912802D0912902BE0180E024 +:101DB00090E00E94D6294B015C01A701960160E0EA +:101DC00070E08CE594E40E943D299B01AC01C501C3 +:101DD000B4010E94E82A0E94AA2920917B022330A4 +:101DE00009F473C028F4222351F02130E9F02CC10A +:101DF000243009F4A0C0253009F4E0C025C180E0FA +:101E000090E0A0E0BFE38093060190930701A093C8 +:101E10000801B093090110922B0210922C0210922B +:101E20002D0210922E0210C110922B0210922C0241 +:101E300010922D0210922E026431710540F46A3026 +:101E4000710560F520E030E040E85EE32BC0693CBE +:101E5000710508F0AAC080E090E00E94D62920E039 +:101E600030E040EA51E40E94D42820E030E044E32E +:101E700053E40E943D299B01AC010E94E82A20E026 +:101E800030E040E05EE30E94E82A9B01AC0160E0A4 +:101E900070E080E09EE30E94D42844C020E030E05F +:101EA00040E05FE3C701B6010E94E82A6B017C01B4 +:101EB00080E090E0A0E0BEE38093060190930701EC +:101EC000A0930801B0930901BFC010922B02109299 +:101ED0002C0210922D0210922E024AE0469F900191 +:101EE000479F300D1124C90168EB7BE00E94A22CB2 +:101EF000BC016C5D754077FF03C0719561957109F8 +:101F0000882777FD8095982F0E94D8292EE333ECFF +:101F10004EE259E30E94E82A20E030E040EC5EE324 +:101F20000E94D528609306017093070180930801F1 +:101F30009093090189C010922B0210922C021092EA +:101F40002D0210922E02CE0183709927892BE1F089 +:101F5000BE016170772780E090E00E94D62920E0E2 +:101F600030E040E05EE30E94E82A20E030E040E418 +:101F70005FE30E94D5286093060170930701809368 +:101F80000801909309010CC080E090E0A0E0BFE35D +:101F90008093060190930701A0930801B093090173 +:101FA000C770DD27CD2B09F04FC0109206011092AB +:101FB0000701109208011092090146C010922B02ED +:101FC00010922C0210922D0210922E0200E010E0CE +:101FD00020E03FE3009306011093070120930801DE +:101FE000309309016739710578F180E090E00E9433 +:101FF000D62920E030E047E153E40E94D42820E0D5 +:1020000030E04AE754E40E943D2920E030E048E413 +:1020100052E40E94E82A20E030E040EA51E40E94C5 +:102020001A2A0E94A529660F771F660F771FFB01EA +:10203000EE5AFE4F2081318142815381C701B601A2 +:102040000E94E82A6B017C01C701B601DF91CF91A4 +:102050001F910F91FF90EF90DF90CF90BF90AF90C6 +:102060009F908F90089580918C020895CF93DF9375 +:1020700000D01F92CDB7DEB79C018091130384304E +:1020800019F593E099833B832A839093E9008FEFBE +:102090009091E800815095FD06C095ED9A95F1F775 +:1020A00000008111F5CF8091E80085FF0DC040E070 +:1020B00050E063E070E0CE0101960E94971280919B +:1020C000E8008E778093E8000F900F900F90DF91DB +:1020D000CF910895CF93DF9300D01F92CDB7DEB795 +:1020E00020911303243021F522E029839B838A83E6 +:1020F00083E08093E9008FEF9091E800815095FD97 +:1021000006C095ED9A95F1F700008111F5CF809109 +:10211000E80085FF0DC040E050E063E070E0CE01D4 +:1021200001960E9497128091E8008E778093E800D4 +:102130000F900F900F90DF91CF910895209113038E +:102140002430F1F422E02093E9002FEF3091E800F1 +:10215000215035FD06C035ED3A95F1F7000021110B +:10216000F5CF2091E80025FF0BC040E050E065E08E +:1021700070E00E9497128091E8008E778093E800CB +:102180000895CF93DF93EC0190911303943009F0FD +:1021900046C0809115018823D9F0809116018823CB +:1021A000B9F09093E9008FEF9091E800815095FD90 +:1021B00006C095E19A95F1F700008111F5CF809165 +:1021C000E80085FF2CC040E050E060E170E017C0FF +:1021D00081E08093E9008FEF9091E800815095FDB8 +:1021E00006C095ED9A95F1F700008111F5CF809129 +:1021F000E80085FF14C040E050E068E070E0CE01E8 +:102200000E9497128091E8008E778093E80080E129 +:10221000FE01ACE7B2E001900D928A95E1F7DF9103 +:10222000CF91089580911203811109C00E942C144E +:102230000E9489148091E20084608093E2000895F6 +:10224000109212030895089508950C94D02242E04C +:1022500061EC81E00E94A61342E061EC82E00E9402 +:10226000A61342E061EC83E00E94A61342E161EC18 +:1022700084E00C94A61380911503833009F455C0B3 +:1022800030F4813071F0823009F48EC008958A30C4 +:1022900009F47AC08B3009F460C0893009F09CC021 +:1022A00020C080911403813A09F096C08091E80023 +:1022B000877F8093E8008091180390911903892B00 +:1022C00021F460E18CE792E003C060E080E090E000 +:1022D00070E00E94E2128091E8008B778093E80022 +:1022E000089580911403813209F076C0809118031B +:1022F00090911903009719F0039709F06DC0809130 +:10230000E800877F8093E8008091E80082FD05C0A7 +:10231000809113038111F8CF5FC08091F100809309 +:102320008C028091E8008B7753C080911403813A2E +:1023300009F052C08091180390911903892B09F07C +:102340004BC08091E800877F8093E8008091E8008F +:1023500080FFFCCF8091150136C08091140381323B +:10236000D9F58091180390911903892BA9F58091D3 +:10237000E800877F8093E8000E94DB1380911603BA +:10238000809315010C94111C80911403813221F566 +:102390008091E800877F8093E8000E94DB138091A2 +:1023A000170380938D02089580911403813AA1F45C +:1023B0008091E800877F8093E8008091E80080FFAB +:1023C000FCCF80918D028093F1008091E8008E77A0 +:1023D0008093E8000C94DB13089584B7877F84BF53 +:1023E00088E10FB6F89480936000109260000FBEF1 +:1023F00090E080E80FB6F8948093610090936100BC +:102400000FBE0E947E170E942C140E948914809196 +:10241000E20084608093E20078940E940F170E948B +:1024200080178BE091E00E942A178091130385307A +:1024300069F40E949122809111038823B1F30E94D4 +:10244000BF22882391F30E948112EFCF0E94881748 +:10245000ECCF292F332723303105C9F064F4213024 +:10246000310581F02230310509F043C08DE690E05E +:1024700020E134E042C021323105F1F02232310551 +:1024800041F137C082E190E02DE734E036C0992772 +:102490008130910541F08230910541F0892B49F559 +:1024A000ECE0F4E005C0EEEDF3E002C0E4EBF3E0B5 +:1024B000849190E09F0121C06430D8F4E62FF0E0D1 +:1024C000EE0FFF1FE255FE4F2081318189E090E041 +:1024D00014C0643070F470E0FB01EE0FFF1FEA558A +:1024E000FE4F20813181FB01EE55FE4F808190E04F +:1024F00004C080E090E020E030E0FA0131832083E6 +:10250000089580E189BD82E189BD09B400FEFDCF57 +:102510008091D8008F7D8093D8008091E000826008 +:102520008093E0008091E00081FDFCCF0895CF9280 +:10253000DF92EF92FF920F931F93CF93DF93EC0103 +:102540008B016A010E94FA13811133C0C114D104B6 +:1025500039F0F60180819181081B190BC80FD91F32 +:10256000E12CF12C0115110519F18091E80085FD90 +:1025700016C08091E8008E778093E800C114D104E2 +:1025800049F0F60180819181E80EF91EF182E08226 +:1025900085E00FC00E94FA13882321F30AC08991B5 +:1025A0008093F10001501109FFEFEF1AFF0ADACF13 +:1025B00080E0DF91CF911F910F91FF90EF90DF901E +:1025C000CF90089520911A0330911B0326173707E7 +:1025D00048F06115710539F42091E8002E772093B9 +:1025E000E80001C0B90140E061157105A9F1209131 +:1025F0001303222309F443C0253009F442C020917B +:10260000E80023FD40C02091E80022FD32C0209167 +:10261000E80020FFE9CF4091F3002091F20030E084 +:10262000342BFC01CF016115710559F028303105BB +:1026300040F481918093F100615071092F5F3F4F09 +:10264000F1CF41E02830310509F040E02091E80069 +:102650002E772093E800C8CF4111C9CF0AC08091DE +:102660001303882361F0853061F08091E80083FDD9 +:102670000AC08091E80082FFF2CF80E0089582E0F6 +:10268000089583E0089581E0089520911A03309120 +:102690001B032617370748F06115710539F420919F +:1026A000E8002E772093E80001C0B901FC0120E08A +:1026B0006115710591F180911303882309F440C0DD +:1026C000853009F43FC08091E80083FD3DC08091D2 +:1026D000E80082FD2FC08091E80080FFE9CF2091C3 +:1026E000F3008091F20090E0922B6115710559F092 +:1026F0008830910540F424912093F1003196615087 +:1027000071090196F2CF21E0089709F020E080914D +:10271000E8008E778093E800CBCF2111CCCF0AC0A0 +:1027200080911303882361F0853061F08091E80087 +:1027300083FD0AC08091E80082FFF2CF80E0089517 +:1027400082E0089583E0089581E00895982F9730FE +:1027500058F59093E900981739F07091EC002091AA +:10276000ED005091F00003C0242F762F50E021FFA0 +:1027700019C03091EB003E7F3093EB003091ED00BB +:102780003D7F3093ED003091EB0031603093EB00F2 +:102790007093EC002093ED005093F0002091EE0038 +:1027A00027FF07C09F5FD3CF8F708093E90081E040 +:1027B000089580E008958091140387FF11C08091EF +:1027C000E80082FD05C0809113038111F8CF11C08C +:1027D0008091E8008B770BC080911303882349F028 +:1027E0008091E80080FFF8CF8091E8008E77809399 +:1027F000E80008952091E4003091E50095E64091CD +:10280000EC00842F817040FF22C08091E80080FDA1 +:102810001CC080911303882391F0853091F0809142 +:10282000EB0085FD10C04091E4005091E500421797 +:10283000530729F39A01915011F784E0089582E03B +:10284000089583E0089581E0089580E0089540911F +:10285000E80042FFDECF08950E949A140E94A2145D +:10286000E0EEF0E0808181608083E8EDF0E080813F +:102870008F77808319BCA7EDB0E08C918E7F8C930D +:1028800080818F7E80831092120308950F931F938F +:10289000CF93DF930E949A140E94A214C8EDD0E057 +:1028A00088818F77888388818068888388818F7DFD +:1028B000888319BC1092130310920F031092110316 +:1028C0001092100300EE10E0F80180818B7F80836E +:1028D00088818160888342E060E080E00E94A613E6 +:1028E000E1EEF0E080818E7F8083E2EEF0E0808197 +:1028F00081608083808188608083F80180818E7F01 +:102900008083888180618883DF91CF911F910F91AF +:102910000895E8EDF0E080818F7E8083E7EDF0E0C0 +:1029200080818160808384E082BF81E08093120394 +:102930000C944614E8EDF0E080818E7F8083109245 +:10294000E20008951092DA001092E10008951F92BB +:102950000F920FB60F9211242F933F934F935F93D3 +:102960006F937F938F939F93AF93BF93EF93FF9357 +:102970008091E10082FF0BC08091E20082FF07C0DE +:102980008091E1008B7F8093E1000E940E1780917F +:10299000DA0080FF1FC08091D80080FF1BC08091AB +:1029A000DA008E7F8093DA008091D90080FF0DC01D +:1029B00080E189BD82E189BD09B400FEFDCF81E0DF +:1029C000809313030E94121105C019BC10921303C7 +:1029D0000E9420118091E10080FF19C08091E200E7 +:1029E00080FF15C08091E2008E7F8093E20080918D +:1029F000E20080618093E2008091D8008062809341 +:102A0000D80019BC85E0809313030E9424118091A3 +:102A1000E10084FF30C08091E20084FF2CC080E19F +:102A200089BD82E189BD09B400FEFDCF8091D80047 +:102A30008F7D8093D8008091E1008F7E8093E100AC +:102A40008091E2008F7E8093E2008091E2008160BD +:102A50008093E20080910F03882311F084E007C087 +:102A60008091E30087FD02C081E001C083E0809394 +:102A700013030E9425118091E10083FF29C08091FA +:102A8000E20083FF25C08091E100877F8093E10011 +:102A900082E08093130310920F038091E1008E7FF8 +:102AA0008093E1008091E2008E7F8093E20080912C +:102AB000E20080618093E20042E060E080E00E94FA +:102AC000A6138091F00088608093F0000E9423118B +:102AD000FF91EF91BF91AF919F918F917F916F91F6 +:102AE0005F914F913F912F910F900FBE0F901F90CC +:102AF00018951F920F920FB60F9211242F933F93A8 +:102B00004F935F936F937F938F939F93AF93BF93F5 +:102B1000CF93DF93EF93FF93C091E900CF70809143 +:102B2000EC00D82FD17080FDD0E81092E9008091A0 +:102B3000F000877F8093F00078940E94BD1510927A +:102B4000E9008091F00088608093F000CD2BCF7079 +:102B5000C093E900FF91EF91DF91CF91BF91AF91C9 +:102B60009F918F917F916F915F914F913F912F91A5 +:102B70000F900FBE0F901F9018951F93CF93DF9368 +:102B8000CDB7DEB7AA970FB6F894DEBF0FBECDBFA4 +:102B9000E4E1F3E088E08E0F9091F10091938E13C1 +:102BA000FBCF0E943B118091E80083FF1FC1809101 +:102BB000140390911503492F50E04A30510508F055 +:102BC00015C1FA01EA5AFF4F0C94CA2C803881F0E3 +:102BD000823809F00BC1809118038F708093E9004F +:102BE0008091EB0085FB882780F91092E90006C0F0 +:102BF0008091100390911103911182609091E800EF +:102C0000977F9093E8008093F1001092F100C8C084 +:102C1000282F2D7F09F0EAC0882319F0823061F057 +:102C2000E5C080911603813009F0E0C0933009F0CF +:102C300080E0809311032BC080911603811127C07F +:102C4000809118038F7009F4D1C08093E90020911E +:102C5000EB0020FF1CC0933021F48091EB008062D8 +:102C600014C09091EB0090619093EB0021E030E074 +:102C7000A90102C0440F551F8A95E2F74093EA006C +:102C80001092EA008091EB0088608093EB00109234 +:102C9000E9008091E800877F86C08111A7C010916C +:102CA00016031F778091E3008078812B8093E300E7 +:102CB0008091E800877F8093E8000E94DB13809179 +:102CC000E80080FFFCCF8091E30080688093E30000 +:102CD000111102C082E001C083E08093130386C01B +:102CE0008058823008F082C08091160390911703BB +:102CF0008C3D53E0950779F583E08A838AE28983E6 +:102D00004FB7F894DE01139620E03EE051E2E32F46 +:102D1000F0E050935700E49120FF03C0E295EF707C +:102D20003F5FEF708E2F90E0EA3010F0C79601C041 +:102D3000C0968D939D932F5F243149F74FBF8091AB +:102D4000E800877F8093E8006AE270E0CE01019698 +:102D50000E94E21214C0AE014F5F5F4F60911803F2 +:102D60000E942912BC01009709F440C09091E8002C +:102D7000977F9093E80089819A810E944513809102 +:102D8000E8008B778093E80031C0803879F5809136 +:102D9000E800877F8093E80080910F038093F10023 +:102DA0008091E8008E778093E8000E94DB131EC0BC +:102DB00081111CC0909116039230C0F48091E800FC +:102DC000877F8093E80090930F030E94DB1380912C +:102DD0000F03811106C08091E30087FD02C081E0EE +:102DE00001C084E0809313030E9427118091E800C2 +:102DF00083FF0AC08091E800877F8093E80080917C +:102E0000EB0080628093EB00AA960FB6F894DEBFC9 +:102E10000FBECDBFDF91CF911F9108950895CF933D +:102E2000809113038823A1F0C091E900CF709091A5 +:102E3000EC00892F817090FD80E8C82B1092E9008A +:102E40008091E80083FD0E94BD15CF70C093E9001A +:102E5000CF91089590939302809392020895E09108 +:102E60009202F0919302309721F00190F081E02DD1 +:102E7000099480E00895E0919202F09193023097D6 +:102E800021F00280F381E02D09940895E0919202EF +:102E9000F0919302309721F00480F581E02D0994A0 +:102EA000089520919002309191028217930771F05A +:102EB0009093910280939002E0919202F09193029C +:102EC000309721F00680F781E02D09940895209134 +:102ED0008E0230918F028217930771F090938F02C8 +:102EE00080938E02E0919202F0919302309721F04C +:102EF0000084F185E02D0994089508950C947D17C0 +:102F00000E9404230E9455090E948A230C943928A8 +:102F10005F926F927F928F929F92AF92BF92CF9269 +:102F2000DF92EF92FF920F931F93CF93DF9300D026 +:102F300000D01F92CDB7DEB70E949A099DE9C92E35 +:102F400092E0D92E03E010E0AA24A394B12C502ED5 +:102F5000802F0E94150A4C01F601729062906F0159 +:102F60006826792661147104A1F40150110978F7DB +:102F70008FEF89838A831B820E940D238160782FC3 +:102F80009D838C8349815A816B818D810E94381881 +:102F900038C08091F20281FD0E941E0A2BE030E0D1 +:102FA0007501022E02C0EE0CFF1C0A94E2F7C70165 +:102FB00086219721892B09F129835A828E209F200F +:102FC00091E0892809F490E09B830E940D238160A1 +:102FD000782F9D838C8349815A816B818D810E94DA +:102FE0003818000F111FF801EB56FD4F80819181B9 +:102FF000E826F926F182E08204C02150310980F6EA +:10300000B4CF0E947125109194020E942F171817B7 +:10301000D1F00E942F17809394020F900F900F9081 +:103020000F900F90DF91CF911F910F91FF90EF9034 +:10303000DF90CF90BF90AF909F908F907F906F90D8 +:103040005F900C943F090F900F900F900F900F908E +:10305000DF91CF911F910F91FF90EF90DF90CF9074 +:10306000BF90AF909F908F907F906F905F900895EA +:10307000CF93DF93CDB7DEB72B970FB6F894DEBFB3 +:103080000FBECDBF4F83588769877A878B87DE0154 +:10309000119686E0FD0111928A95E9F785E0FE011F +:1030A000379601900D928A95E1F749815A816B819B +:1030B0007C818D819E810E94AF1E2B960FB6F89465 +:1030C000DEBF0FBECDBFDF91CF910895CF93882390 +:1030D00009F4C2C0C82F823859F40E942F1781FD0D +:1030E000BBC089E30E9489210E94562289E30CC05B +:1030F000833879F40E942F1780FDAEC083E50E94CB +:1031000089210E94562283E50E94CB21CF910C9405 +:103110005622843859F40E942F1782FD9DC087E4FF +:103120000E9489210E94562287E4EECF8CEF8C0FFB +:10313000813A48F48C2F0E94A12781118DC08C2FD9 +:103140000E948921E3CF80E28C0F883048F4C77059 +:1031500081E001C0880FCA95EAF70E940F22D6CFFE +:103160008BE58C0F833078F4C53A29F0C63A31F0FC +:1031700083E890E005C081E890E002C082E890E03A +:10318000CF910C94511788E58C0F833108F064C0FF +:10319000C83A39F1C93A41F1CA3A49F1CB3A51F149 +:1031A000CC3A59F1CD3A61F1C03B69F1CE3A71F1B7 +:1031B000CF3A79F1C13B81F1C23B89F1C33B91F137 +:1031C000C43B99F1C53BA1F1C63BA9F1C73BB1F1A5 +:1031D000C83BB9F1C93BC1F1CA3BC9F180E090E0FD +:1031E00038C082EE90E035C089EE90E032C08AEEC1 +:1031F00090E02FC085EB90E02CC086EB90E029C0DA +:1032000087EB90E026C08CEC90E023C08DEC90E042 +:1032100020C083E891E01DC08AE891E01AC082E9ED +:1032200091E017C084E991E014C081E292E011C0FE +:1032300083E292E00EC084E292E00BC085E292E06D +:1032400008C086E292E005C087E292E002C08AE20E +:1032500092E0CF910C946717CF910895882309F4D9 +:103260004BC0823859F40E942F1781FF45C089E373 +:103270000E9489210E94562289E30CC0833871F490 +:103280000E942F1780FF38C083E50E9489210E9489 +:10329000562283E50E94CB210C945622843859F49F +:1032A0000E942F1782FF28C087E40E9489210E9474 +:1032B000562287E4EFCF9CEF980F913A58F390E2B3 +:1032C000980F983050F4877091E001C0990F8A955B +:1032D000EAF7892F0E941522DFCF9BE5980F9330E4 +:1032E00020F480E090E00C945117885A833120F448 +:1032F00080E090E00C9467170895882321F00E94E5 +:103300000F220C9456220895882321F00E94152242 +:103310000C94562208957F928F929F92AF92BF9203 +:10332000CF92DF92EF92FF920F931F93CF93DF9391 +:103330001F92CDB7DEB77C01C62E772EFC0105812A +:1033400002950F70128111110E942C220E9482217D +:10335000882379F0112369F080E28C0D883048F0E1 +:1033600082E00E946B210E94822191E0D82ED92612 +:1033700001C0D12CE72DE295EF70F0E0E05AFF4F4D +:103380000C94CA2C872D807F072D0F70882311F095 +:103390000295007F112389F0002309F499C180E28E +:1033A0008C0D883020F4802F0E940F2203C0802FC4 +:1033B0000E941F220E9456228BC18C2D0E942E1922 +:1033C000002309F4C3C180E28C0D883020F4802FE3 +:1033D0000E94152203C0802F0E9425220E9456229F +:1033E000B5C1872D807F972D9F70803211F4892F72 +:1033F00003C0892F8295807FCC2021F0F1E0CF1689 +:10340000A1F01DC0112339F0002319F1013009F595 +:103410000E943F229BC1002319F0013009F496C19C +:1034200089830E944222898110C1112321F0063034 +:1034300008F08CC10EC0053008F088C106C1112308 +:1034400059F0002331F0F701958190FF41C19F7041 +:1034500095830E947D197AC1002309F4F6C03EC10C +:10346000872D86958695837090E0009719F00197D7 +:1034700061F06CC1112321F08C2D972D937002C047 +:1034800080E090E00E94511761C1112321F08C2D42 +:10349000972D937002C080E090E00E94671756C19C +:1034A0008C2D112319F00E94792402C00E94E1247E +:1034B0000E9466254BC1872D837009F052C01111FF +:1034C00045C18C2D829586958770880F880F9C2D1D +:1034D0009F70892E912CA12CB12C082E04C0880C31 +:1034E000991CAA1CBB1C0A94D2F7C4FE14C00FE09E +:1034F00010E020E030E0B901A80104C0440F551FDE +:10350000661F771F8A95D2F7CB01BA016095709537 +:103510008095909503C060E070E0CB01272D269543 +:103520002695237030E02230310569F023303105D3 +:1035300089F0682979298A299B292130310571F080 +:103540000E94F71F03C1682979298A299B290E94B3 +:103550001320FCC00E94F71FC501B4010E94DB1FAD +:10356000F5C0112319F0872D817001C0869588233D +:1035700009F4ECC08C2D829586958770880F880F92 +:103580009C2D9F70892E912CA12CB12C082E04C04B +:10359000880C991CAA1CBB1C0A94D2F7C4FE14C048 +:1035A0000FE010E020E030E0B901A80104C0440FB2 +:1035B000551F661F771F8A95D2F7CB01BA01609518 +:1035C00070958095909503C060E070E0CB01272D49 +:1035D000269526952370422F50E04230510569F020 +:1035E0004330510589F0682979298A299B2941307E +:1035F000510571F00E94D120A9C0682979298A2932 +:103600009B290E94ED20A2C00E94D120C501B401D7 +:103610000E94B5209BC08C2D90E0FC01E05EF1097A +:10362000E531F10508F050C0E059FF4F0C94CA2C69 +:103630000C2D0F70872D8F71112321F00E944E20C9 +:10364000802F07CF0E946F20802F0E9484197EC098 +:10365000112341F0053008F079C0872D8F710E9449 +:10366000942074C0063008F071C0F7CF112339F0F0 +:10367000872D8F710E944E2069C01123C9F3872DB9 +:103680008F710E946F2062C0112329F0872D8F71E6 +:103690000E9439205BC00E942F2058C0112351F096 +:1036A000172D1F71812F0E944E2063E0812F0E94F1 +:1036B00062214CC081E00E946B21023008F446C0B8 +:1036C00082E00E946B2142C0112331F0002381F27D +:1036D0008C2D0E9466183AC0002389F28C2D0E941E +:1036E0002E1934C0472D4F706C2DC7010E941D0646 +:1036F0000E94531F2BC0111129C0472D4F7050E05D +:1037000042305105B9F04CF44115510581F041307A +:103710005105E1F40E94612819C04330510569F058 +:103720004430510599F48C2D0E94B3280FC00E949B +:103730004A280CC00E947D2809C00E94902806C01B +:10374000472D4F706C2DC7010E942006DD20F9F037 +:103750000E945E2180FD1BC0F70112820E94582149 +:103760000E944E20C7010E94D61B0E9458210F9034 +:10377000DF91CF911F910F91FF90EF90DF90CF904D +:10378000BF90AF909F908F907F900C946F200F9080 +:10379000DF91CF911F910F91FF90EF90DF90CF902D +:1037A000BF90AF909F908F907F9008950F931F933D +:1037B000CF93DF93EC01888199812B813C81232B6E +:1037C000B9F09F3F11F48F3F99F0CE010E941C0485 +:1037D000882371F0688179818A810E9454218C014B +:1037E0000E9409210E94D01FB801CE010E948B19AE +:1037F000DF91CF911F910F9108950E942C220E947A +:103800003C220E9401220E9456220E9417260E94FA +:10381000662580E090E00E94511780E090E00C94D3 +:1038200067170E941C220C94FD1B0E944921292F1E +:1038300022952F7030E02C3031054CF42A303105C0 +:103840006CF42250310922303105A8F407C02C3025 +:10385000310569F02F30310551F00DC0803F69F01E +:1038600018F4803E40F409C0843F29F406C093FB5D +:10387000882780F9089580E0089581E00895CF9326 +:10388000DF9300D000D01F92CDB7DEB70F900F901E +:103890000F900F900F90DF91CF910895CF93DF930A +:1038A00000D000D000D0CDB7DEB726960FB6F89482 +:1038B000DEBF0FBECDBFDF91CF9108951F93CF9391 +:1038C000DF93C0919D0216E080919E02C81799F087 +:1038D000D0E01C9FF0011D9FF00D1124E156FD4F1B +:1038E0004081518162817381848195810E944E1C47 +:1038F0002196C770E9CFDF91CF911F910895409134 +:10390000CF025091D0026091D1027091D202809189 +:10391000D3029091D4020C944E1C8091D4028295D3 +:103920008F7009F054C08091D102882309F44FC0F0 +:1039300080919D02A0919E026091CF027091D00271 +:103940004091D2025091D302B6E08A1709F43FC0E9 +:1039500090E041155105C1F17F3F11F46F3FA1F196 +:10396000B89FF001B99FF00D1124E156FD4F218160 +:1039700072132AC02081621327C02281211124C022 +:10398000238134812417350710F421503109241B79 +:10399000350B283C3105C0F42091D4022F702061F2 +:1039A0002093D40226E0289FF001299FF00D1124D6 +:1039B000EC55FD4F80818F70806180838FEC92E0A9 +:1039C0000E94D61B0C945E1C01968770BECF089592 +:1039D000CF92DF92EF92FF920F931F93CF93DF93DB +:1039E000CDB7DEB762970FB6F894DEBF0FBECDBF7E +:1039F0008C0185E0F801DE011D9601900D928A95FB +:103A0000E1F7D8014C9111965C91119712966C9147 +:103A100012971396CD90DC9014973091CF0270914D +:103A2000D0028091D2029091D302009709F46BC129 +:103A30007F3F19F43F3F09F466C1E090D102EE20C8 +:103A400009F4C0C02091D402C816D90628F0F601A6 +:103A5000E81BF90BCF0104C0809590958C0D9D1D3E +:103A6000FF24F394883C910578F0F12C207F09F035 +:103A7000C6C07C2DD98AC88A89890E943F1C8FECD8 +:103A800092E00E94D61BB1C0822F807F09F046C011 +:103A9000751314C0341312C0611110C02F7020614F +:103AA0002093D4020E947F1C8FEC92E00E94D61BD0 +:103AB0008091D402D80115968C932EC0CD2819F18F +:103AC0005F3F11F44F3FF9F0F62E61111CC0809159 +:103AD0009D0220919E0236E0821709F45AC090E0C0 +:103AE000389FF001399FF00D1124E156FD4F71818F +:103AF000571306C07081471303C07281711103C050 +:103B000001968770E9CFF62E662309F418C18091DB +:103B1000D40281608093D402F12C11C1751308C0C6 +:103B2000341306C0611104C08091D402D801C3C00F +:103B30004D875E878D859E856A8B0E94151C6A89DC +:103B40008823E1F16623D1F12091D402822F82955E +:103B50008F7090E0029774F08091CF029091D00224 +:103B600098878F831986DB86CA862C87CE010796B5 +:103B70000E94D61B86E0F801AFECB2E001900D92F6 +:103B80008A95E1F70E948D1C0E947F1CFF24F3940C +:103B9000D6C04D875E878D859E850E944921292F3D +:103BA00022952F7030E0223031050CF0BCC09F70A0 +:103BB00009F0B6C0805E883008F4C1C0C8010E9418 +:103BC000D61BE4CFC816D90608F453C0F601E81B8B +:103BD000F90BCF01883C910508F450C0F12C7C2DE5 +:103BE000D98AC88A89890E943F1CEFECF2E086E0FE +:103BF000DF011D928A95E9F70E947F1CA0C0751312 +:103C000014C0341312C0611110C08091D402F801A5 +:103C10008583C8010E94D61B86E0EFECF2E0DF014D +:103C20001D928A95E9F7FE2C8AC04D875E878D85A7 +:103C30009E856A8B0E94151C6A89882309F4BECF71 +:103C4000662309F4BBCF2091D402822F82958F7016 +:103C500090E002970CF48ECF8091CF029091D00229 +:103C60009A8389831B82DD82CC822E83CE010196CA +:103C70007FCF809590958C0D9D1DACCFF62E662341 +:103C800009F49CCF75132EC034132CC02091D4029C +:103C900020FD1FC0822F82958F70D9F0D801159614 +:103CA0002C9315978F3049F08F5F982F9295907FC6 +:103CB000822F8F70892B15968C93C8010E94D61B7A +:103CC00086E0F801AFECB2E001900D928A95E1F741 +:103CD00093CF86E0F801AFECB2E001900D928A95A7 +:103CE000E1F72DC04D875E878D859E850E94151C4E +:103CF000811140CF8091D40281608093D402C801A9 +:103D00000E94D61B1CC0662309F458CF4D875E87DE +:103D10008D859E850E94151C882309F44FCF2ACFDC +:103D2000811148CF0CC0243031050CF047CF9F7073 +:103D300009F440CFF8019581907F09F03BCF8F2D9A +:103D400062960FB6F894DEBF0FBECDBFDF91CF9164 +:103D50001F910F91FF90EF90DF90CF9008951F93E8 +:103D6000CF93DF93CDB7DEB72C970FB6F894DEBFB5 +:103D70000FBECDBF4F83588769877A878B879C8713 +:103D8000CE0107960E94E81C882369F08F819885F0 +:103D90002A853B85232BF1F19F3F09F063C08F3FBC +:103DA00009F060C037C086E0FE013796DE0111964B +:103DB00001900D928A95E1F76F817885EA85FB8500 +:103DC000309741F17F3F11F46F3F21F120919E0226 +:103DD00030E0C90101968770992740919D0250E01B +:103DE0008417950709F447C069837A83FD83EC83C0 +:103DF00096E0929FD001939FB00D1124A156BD4F24 +:103E0000FE01319601900D929A95E1F780939E0202 +:103E10000E945E1C16E080919D0290919E0289177F +:103E2000C1F1189FC001112481569D4F0E94E81CCA +:103E3000882379F1E0919D021E9FF0011124E15643 +:103E4000FD4F4081518162817381848195810E94FF +:103E50004E1C80919D0290E0019687709927809377 +:103E60009D02D9CF4F81588569857A858B859C8540 +:103E70000E944E1CCFCF0E94111C10929E021092E5 +:103E80009D02EFECF2E086E0DF011D928A95E9F7F2 +:103E9000C1CF2C960FB6F894DEBF0FBECDBFDF9119 +:103EA000CF911F910895EF92FF920F931F93CF939D +:103EB000DF938C01009709F46CC0F12CEE24E3949D +:103EC000E8012196F8018491843740F4843008F0A9 +:103ED00051C0813081F0823019F15BC0853709F41F +:103EE00044C0A8F19CE7980F903708F052C08F7734 +:103EF0000E942E1941C00E5F1F4FFE01C49180E247 +:103F00008C0F883048F4C7708E2D01C0880FCA9579 +:103F1000EAF70E942F2214C08C2F0E9466182DC031 +:103F20000E5F1F4FFE01C49180E28C0F883058F461 +:103F3000C7708E2D01C0880FCA95EAF70E943522FE +:103F40000E9456221AC08C2F0E942E1916C00E5F96 +:103F50001F4FFE01C491CC2381F08FE99FE00197B0 +:103F6000F1F700C00000C150F6CF0E5F1F4FFE01F9 +:103F7000F49003C00E9466188E018F2D882309F4E7 +:103F80009FCFEFE9FFE03197F1F700C000008150CB +:103F9000F5CFDF91CF911F910F91FF90EF90089592 +:103FA00008956093D9027093DA028093DB029093B4 +:103FB000DC020C94FD1B0F931F930091D90210910A +:103FC000DA022091DB023091DC02DC01CB01802B94 +:103FD000912BA22BB32B8093D9029093DA02A0935A +:103FE000DB02B093DC021F910F910C94FD1B0F9329 +:103FF0001F930091D9021091DA022091DB023091D7 +:10400000DC02DC01CB0180239123A223B323809324 +:10401000D9029093DA02A093DB02B093DC021F91E5 +:104020000F910C94FD1B0F931F930091D9021091D7 +:10403000DA022091DB023091DC02DC01CB01802727 +:104040009127A227B3278093D9029093DA02A093F5 +:10405000DB02B093DC021F910F910C94FD1B1092B8 +:10406000D5021092D6021092D7021092D8020C9468 +:10407000FD1B41E050E060E070E004C0440F551FBC +:10408000661F771F8A95D2F74093D5025093D602C8 +:104090006093D7027093D8020C94FD1B41E050E06E +:1040A00060E070E004C0440F551F661F771F8A95BB +:1040B000D2F78091D5029091D602A091D702B0910B +:1040C000D802482B592B6A2B7B2B4093D502509357 +:1040D000D6026093D7027093D8020C94FD1B41E086 +:1040E00050E060E070E004C0440F551F661F771F6A +:1040F0008A95D2F740955095609570958091D5023C +:104100009091D602A091D702B091D80248235923AA +:104110006A237B234093D5025093D6026093D70243 +:104120007093D8020C94FD1B41E050E060E070E019 +:1041300004C0440F551F661F771F8A95D2F78091E0 +:10414000D5029091D602A091D702B091D80248270B +:1041500059276A277B274093D5025093D602609354 +:10416000D7027093D8020C94FD1B0F931F930091FC +:10417000D5021091D6022091D7023091D802DC01ED +:10418000CB01802B912BA22BB32B8093D502909344 +:10419000D602A093D702B093D8021F910F910C942E +:1041A000FD1B0F931F930091D5021091D602209111 +:1041B000D7023091D802DC01CB0180239123A223C6 +:1041C000B3238093D5029093D602A093D702B093E5 +:1041D000D8021F910F910C94FD1B0F931F93009118 +:1041E000D5021091D6022091D7023091D802DC017D +:1041F000CB0180279127A227B3278093D5029093E4 +:10420000D602A093D702B093D8021F910F910C94BD +:10421000FD1B0895CF92DF92EF92FF920F931F93B1 +:10422000CF93DF938C01C090D902D090DA02E09056 +:10423000DB02F090DC028091D5029091D602A09131 +:10424000D702B091D802C82AD92AEA2AFB2ACFE19C +:10425000D0E0D701C6010C2E04C0B695A79597955E +:1042600087950A94D2F780FF06C0B8018C2F0E9470 +:10427000A508019721F4219760F780E001C08C2FF9 +:10428000DF91CF911F910F91FF90EF90DF90CF9032 +:104290000895CF93DF93EC010E940A21BE010E9492 +:1042A000A508DF91CF910895CB010E94492108957F +:1042B0008091DD0285958595859508958091DD0233 +:1042C0008770089598E0899F90011124262B2093F0 +:1042D000DD020C944E202091DD0280958223809394 +:1042E000DD02982F977069F430E0482F552747FD7D +:1042F00050952417350729F08595859585950C945B +:104300006F2008959091DD02977081E009F480E0BC +:10431000089590911501992321F090911601911122 +:1043200009C02091170130911801F90132969FEFD1 +:1043300040E01FC0982F9695969596959F3050F522 +:10434000E0911701F0911801E90FF11D877021E04C +:1043500030E0A90102C0440F551F8A95E2F7CA0157 +:104360009181892B818308959F3F39F04F5F4E30B3 +:1043700041F051915813F8CF0DC05111F7CF942F40 +:10438000F5CF9F3F39F0F901E90FF11D97FDFA953F +:1043900082830895089590911501992321F09091B9 +:1043A0001601911109C02091170130911801F901EE +:1043B0003296205F3F4F1FC0982F96959695969501 +:1043C0009F30F0F4E0911701F0911801E90FF11D11 +:1043D000877021E030E0A90102C0440F551F8A9583 +:1043E000E2F7CA01809591818923818308953196EE +:1043F000E217F30729F090819813F9CF1082F7CFD5 +:10440000089581E090E0E0911701F0911801E80F24 +:10441000F91F1082019680319105A9F708959091B6 +:10442000F102892B8093F102089580959091F10219 +:1044300089238093F10208951092F10208959091DA +:10444000F002892B8093F002089580959091F002FC +:1044500089238093F00208951092F00208959091BC +:10446000EF02892B8093EF02089580959091EF02DF +:1044700089238093EF0208951092EF0208958093AC +:10448000DE0208951092DE02089580911701909146 +:104490001801FC0131969C01205F3F4F80E0919113 +:1044A00091118F5FE217F307D1F70895E09117019B +:1044B000F09118018091F1028083E0911701F09151 +:1044C000180190818091F002892B8083E09117017F +:1044D000F091180190818091EF02892B8083809167 +:1044E000DE02882361F0E0911701F09118019081BC +:1044F000892B80830E94452281111092DE028091D7 +:104500001701909118010C943B1720E0009739F0A7 +:10451000AC0141505109842395232F5FF7CF822F9F +:10452000089580911303843039F11092F30220E44E +:1045300088E190E00FB6F894A895809360000FBED4 +:104540002093600080E00E94200380E00E943F09E9 +:1045500083B7817F846083BF83B7816083BF789492 +:10456000889583B78E7F83BF88E10FB6F8948093D8 +:104570006000109260000FBE08950895089580E0D5 +:104580000E9420030E94BD220E949A090E94BE221E +:104590000E941F0A91E0811101C090E0892F0895C7 +:1045A0000E94111C80E00E9420030E9439280E9472 +:1045B0002F170C943F091F920F920FB60F921124E0 +:1045C0008F939F93AF93BF938091F302811113C098 +:1045D0008091F4029091F502A091F602B091F70259 +:1045E0004196A11DB11D8093F4029093F502A09312 +:1045F000F602B093F702BF91AF919F918F910F9008 +:104600000FBE0F901F90189582E084BD93E095BD7A +:104610009AEF97BD80936E0008952FB7F89480911C +:10462000F4029091F502A091F602B091F7022FBF2B +:104630000895CF92DF92EF92FF920F931F932FB7BF +:10464000F8944091F4025091F5026091F602709155 +:10465000F7022FBF6A017B01EE24FF248C0120E0CA +:1046600030E0C016D106E206F30610F441505109BD +:104670009A01281B390BC9011F910F91FF90EF90F0 +:10468000DF90CF9008951F920F920FB60F921124D2 +:104690008F939F93AF93BF938091F4029091F50213 +:1046A000A091F602B091F7020196A11DB11D809371 +:1046B000F4029093F502A093F602B093F702BF9133 +:1046C000AF919F918F910F900FBE0F901F901895F3 +:1046D0000E942C14F8942FEF87EA91E62150804035 +:1046E0009040E1F700C0000087E090EBDC01809390 +:1046F0001E0390931F03A0932003B09321039CE01B +:1047000088E10FB6F894A895809360000FBE90934F +:104710006000FFCF0E94C923811102C00E94A5231F +:104720000E94D4238093F2020E94DC2380931C0316 +:1047300087FB882780F9809316010E94D823682F71 +:1047400070E080E090E00C94D11F6DEE7EEF80E091 +:1047500090E00E94F02C60E082E090E00E94DE2C6D +:1047600060E083E090E00E94DE2C60E084E090E076 +:104770000E94DE2C60E085E090E00E94DE2C60E08C +:1047800086E090E00E94DE2C6FEF87E090E00C94D2 +:10479000DE2C80E090E00E94D82C21E08D3E9E4FE0 +:1047A00009F020E0822F089582E090E00C94D02C54 +:1047B00083E090E00C94D02C84E090E00C94D02C1A +:1047C000682F84E090E00C94DE2C86E090E00C945E +:1047D000D02C682F86E090E00C94DE2C87E090E0EF +:1047E0000C94D02C682F87E090E00C94DE2C809104 +:1047F000FA0280FF0BC060911C0185E0689FB00148 +:10480000112475956795759567952BC081FF09C033 +:1048100060911C0185E0689FB00111247595679532 +:1048200020C082FF07C060911C0185E0689FB00135 +:10483000112417C09091FB029923D1F060911B01C4 +:10484000961788F720911C0185E0289F900111247C +:10485000929FA001939F500D112470E0CA010E9405 +:10486000B62C6038710540F46115710539F002C04D +:1048700065E070E0862F08958FE7089581E0089540 +:104880008091FA0280FF08C060911A0170E075956E +:1048900067957595679521C081FF06C060911A01E3 +:1048A00070E07595679519C082FF04C060911A0188 +:1048B00070E010C09091FB029923C1F06091190142 +:1048C0009617A0F780911A01899FC001112470E00A +:1048D0000E94B62C6038710528F46115710521F02D +:1048E000862F08958FE7089581E0089561E070E0D4 +:1048F000F4CF803F21F40E94F723819504C0813FCB +:1049000029F40E94F7238093FE020895823F21F448 +:104910000E94F723819504C0833F29F40E94F72366 +:104920008093FD020895893F19F40E94402405C038 +:104930008A3F31F40E94402481958093FF020895BC +:104940008B3F21F40E944024819504C08C3F29F4C0 +:104950000E944024809300030895843F21F48091B5 +:10496000FC02816017C0853F21F48091FC028260C7 +:1049700011C0863F21F48091FC0284600BC0873F08 +:1049800021F48091FC02886005C0883F31F4809159 +:10499000FC0280618093FC0208958D3F21F4809198 +:1049A000FA0281600BC08E3F21F48091FA0282608E +:1049B00005C08F3F29F48091FA0284608093FA0247 +:1049C0000895803F39F48091FE0287FF6CC01092F9 +:1049D000FE0269C0813F29F48091FE021816BCF3E3 +:1049E00062C09091FD02823F29F497FF5CC0109253 +:1049F000FD0259C0833F19F41916CCF354C0893F06 +:104A000041F48091FF0218160CF04DC01092FF0285 +:104A10004AC08A3F29F48091FF0287FF44C0F6CF45 +:104A20008B3F39F48091000387FF3DC01092000353 +:104A30003AC08C3F29F4809100031816BCF333C0B0 +:104A4000843F21F48091FC028E7F17C0853F21F4C2 +:104A50008091FC028D7F11C0863F21F48091FC0281 +:104A60008B7F0BC0873F21F48091FC02877F05C0BC +:104A7000883F31F48091FC028F7E8093FC0213C04A +:104A80008D3F21F48091FA028E7F0BC08E3F21F47E +:104A90008091FA028D7F05C08F3F29F48091FA0240 +:104AA0008B7F8093FA028091FD0281110EC080916C +:104AB000FE0281110AC08091FF02811106C080911F +:104AC0000003811102C01092FB0208958CEF92E066 +:104AD0000E9446170E940D239093F9028093F802DA +:104AE00008951F93CF93DF938091F8029091F9027C +:104AF0000E941923AC019091FB02992321F020918F +:104B00001D0130E006C020911E018AE0289F90011F +:104B100011244217530708F486C08091FD02C0910A +:104B2000FE02D091FF0210910003811107C0C11154 +:104B300076C0D11174C0111172C075C09F3F19F0B9 +:104B40009F5F9093FB02181624F40E94F723809332 +:104B5000FD028091FD0287FF05C00E94F723819529 +:104B60008093FD021C1624F40E94F7238093FE021A +:104B70008091FE0287FF05C00E94F72381958093F4 +:104B8000FE026091FD02662339F1C091FE02CC2342 +:104B900019F1772767FD7095872F972F0E94D829E5 +:104BA00023E333E343E35FE30E94E82A0E94A5295D +:104BB0006093FD026C2F772767FD7095872F972FE5 +:104BC0000E94D82923E333E343E35FE30E94E82A0A +:104BD0000E94A5296093FE021D1624F40E94402421 +:104BE0008093FF028091FF0287FF05C00E9440244E +:104BF00081958093FF02111624F40E944024809333 +:104C000000038091000387FF05C00E944024819526 +:104C100080930003DF91CF911F910C9466259F3FF5 +:104C200009F08ECF96CFDF91CF911F910895ECEFD1 +:104C3000F2E085E0DF011D928A95E9F71092FB0210 +:104C40001092FA020895833081F128F4813059F0EE +:104C50008230D1F00895853009F449C0B8F186302A +:104C600009F456C0089580911E01262F30E0280FC8 +:104C7000311D2F3F310524F4680F60931E01089504 +:104C80008FEF80931E01089580911D01262F30E043 +:104C9000280F311D2F3F310524F4680F60931D014B +:104CA00008958FEF80931D01089580911C01262F98 +:104CB00030E0280F311D2F3F310524F4680F609339 +:104CC0001C0108958FEF80931C01089580911B01B2 +:104CD000262F30E0280F311D2F3F310524F4680FB7 +:104CE00060931B0108958FEF80931B0108958091BD +:104CF0001A01262F30E0280F311D2F3F310524F4F3 +:104D0000680F60931A0108958FEF80931A01089538 +:104D100080911901262F30E0280F311D2F3F3105DA +:104D200024F4680F6093190108958FEF809319019F +:104D30000895833011F128F4813049F0823091F0E8 +:104D40000895853081F120F18630C1F10895809178 +:104D50001E01681720F4861B80931E01089510928F +:104D60001E01089580911D01681720F4861B809311 +:104D70001D01089510921D01089580911C0168176E +:104D800020F4861B80931C01089510921C01089545 +:104D900080911B01681720F4861B80931B010895E6 +:104DA00010921B01089580911A01681720F4861B48 +:104DB00080931A01089510921A01089580911901A3 +:104DC000681720F4861B8093190108951092190129 +:104DD00008950F931F93873208F048C08E3108F072 +:104DE0008DC0803109F477C008F5873009F461C0BF +:104DF00068F4863009F09DC08091F202817F8E7F39 +:104E00008093F20281E08093020394C08B3009F416 +:104E100089C08E3009F08DC08091F20282FB22277A +:104E200020F991E0922790FB82F95EC0863109F467 +:104E300079C060F4813109F07CC00E94111C90910E +:104E4000160181E08927809316016CC0893109F42D +:104E500069C08B3109F06DC08091F20281FB22277D +:104E600020F991E0922790FB81F93EC0883309F444 +:104E700059C050F4893209F457C0853309F454C03D +:104E8000873209F451C055C0833409F44DC028F469 +:104E90008A3308F44EC0895332C0883409F049C0BF +:104EA0000E94111C0E944F0A0E9413040E94682352 +:104EB00039C09091F202892F8095817080FB90F922 +:104EC00029F0966098609093F20234C0997F977FA2 +:104ED0009093F20227C08091F20283FB222720F9EF +:104EE00091E0922790FB83F98093F2029923D1F00D +:104EF0008091F20281608093F20214C08D5141E0F2 +:104F000050E060E070E08A019B0104C0000F111FB7 +:104F1000221F331F8A95D2F7C901B8010E94D11F01 +:104F20000E94111C81E006C061E070E080E090E02A +:104F3000F5CF80E01F910F91089580E0089580E003 +:104F40000895CF93C82F80910203813069F018F043 +:104F50008230C9F184C0E0911701F091180180817D +:104F6000823209F07EC007C0E0911701F09118016C +:104F70008081823261F48C2F0E949D27811104C0B0 +:104F80008C2F0E94E9261DC081E090E01AC08C2F72 +:104F90000E949F27811114C0C43179F048F4CB30AE +:104FA00079F0C03109F061C082E08093020308C04B +:104FB000C93219F0C83321F058C01092020355C00D +:104FC00081E0817054C0C93291F120F5C43179F18A +:104FD000B0F4C73009F047C08EE180931E0182E330 +:104FE00080931D018AE080931C0184E180931B0162 +:104FF00088E080931A0188E28093190134C0CE5171 +:10500000C63088F5EC2FF0E0EA54FE4F80818093A3 +:10501000010329C0CE34E9F020F4CB3421F56AE055 +:1050200013C0C13579F0C235F1F461E00DC0809153 +:105030000103882319F01092010315C081E08093C9 +:10504000020315C061E006C0809101030E9423267F +:105050000AC06AE0809101030E94992604C0109260 +:10506000020380E004C081E002C080E0AACFCF91BB +:1050700008950E94C923811102C00E94A5230E94A5 +:10508000E52380931D0380FF02C0869501C080E068 +:105090000C94200380911D03982F9695292F30E0C2 +:1050A000233031054CF49F5F990F8170892B81600B +:1050B00080931D030E94E92380911D0386950C9423 +:1050C000200380911D03982F969591F09158990F88 +:1050D0008170892B80931D038E7F91E009F490E00D +:1050E00080911D0390FB80F980931D030E94E923AA +:1050F00080911D0386950C94200380911D03982FA9 +:10510000909590FB80F980931D030E94E923809184 +:105110001D0380FF02C0869501C080E00C9420032F +:1051200090911D03892F86958F5F8F7791708430C2 +:1051300028F4880F892B80931D0302C090931D03D0 +:1051400080911D038E7F91E009F490E080911D0312 +:1051500090FB80F980931D030E94E92380911D0339 +:1051600086950C94200320911D03922F96958927F4 +:10517000982F990F822F8170892B80931D038E7F2A +:1051800091E009F490E080911D0390FB80F98093F9 +:105190001D030E94E92380911D0386950C94200332 +:1051A00080911D03869508955058BB27AA270ED0DD +:1051B000D1C1C2D130F0C7D120F031F49F3F11F4FA +:1051C0001EF4B7C10EF4E095E7FB9FC1E92FD3D1E0 +:1051D00080F3BA17620773078407950718F071F414 +:1051E0009EF5EBC10EF4E0950B2EBA2FA02D0B010E +:1051F000B90190010C01CA01A0011124FF27591B1C +:1052000099F0593F50F4503E68F11A16F040A22F21 +:10521000232F342F4427585FF3CF46953795279592 +:10522000A795F0405395C9F77EF41F16BA0B620B91 +:10523000730B840BBAF09150A1F0FF0FBB1F661FD8 +:10524000771F881FC2F70EC0BA0F621F731F841F1B +:1052500048F4879577956795B795F7959E3F08F041 +:10526000B3CF9395880F08F09927EE0F9795879500 +:10527000089527D108F481E008950CD06BC163D163 +:1052800040F05AD130F021F45F3F19F03EC1511186 +:1052900095C14FC170D198F39923C9F35523B1F348 +:1052A000951B550BBB27AA2762177307840738F095 +:1052B0009F5F5F4F220F331F441FAA1FA9F333D0F4 +:1052C0000E2E3AF0E0E830D091505040E695001CA8 +:1052D000CAF729D0FE2F27D0660F771F881FBB1F64 +:1052E000261737074807AB07B0E809F0BB0B802D3E +:1052F000BF01FF2793585F4F2AF09E3F510568F08A +:1053000004C15CC15F3FECF3983EDCF38695779572 +:105310006795B795F7959F5FC9F7880F911D96958B +:10532000879597F90895E1E0660F771F881FBB1FE7 +:10533000621773078407BA0720F0621B730B840B94 +:10534000BA0BEE1F88F7E095089504D06894B11168 +:1053500035C1089518D188F09F5790F0B92F99273B +:10536000B751A0F0D1F0660F771F881F991F1AF070 +:10537000BA95C9F712C0B13081F01FD1B1E00895DC +:105380001CC1672F782F8827B85F39F0B93FCCF35D +:10539000869577956795B395D9F73EF49095809566 +:1053A000709561957F4F8F4F9F4F0895E89409C086 +:1053B00097FB3EF490958095709561957F4F8F4F48 +:1053C0009F4F9923A9F0F92F96E9BB279395F6955E +:1053D000879577956795B795F111F8CFFAF4BB0FDC +:1053E00011F460FF1BC06F5F7F4F8F4F9F4F16C040 +:1053F000882311F096E911C0772321F09EE8872FCA +:10540000762F05C0662371F096E8862F70E060E085 +:105410002AF09A95660F771F881FDAF7880F9695FE +:10542000879597F9089588D018F011F08CD038F44A +:1054300080C0C4C0E92F9FD0B0F35523C9F3E7FB68 +:105440006217730784079507A8F199F3E92FFF27DF +:1054500088232AF03197660F771F881FDAF7952F78 +:105460005527442332F091505040220F331F441FE0 +:10547000D2F7BB27E91BF50B621B730B840BB10939 +:10548000C1F222F4620F731F841FB11D31972AF0FD +:10549000660F771F881FBB1FEFCF915050405AF007 +:1054A00041F0882332F0660F771F881F91505040DB +:1054B000C1F7939530C08695779567959F5FD9F72B +:1054C000F8CF990F0008550FAA0BE0E8FEEF16166B +:1054D0001706E807F907C0F012161306E407F507E8 +:1054E00098F0621B730B840B950B39F40A2661F05C +:1054F000232B242B252B21F408950A2609F4A140FF +:10550000A6958FEF811D811D089597F99F6780E80B +:1055100070E060E008959F3F31F0915020F487954E +:1055200077956795B795880F911D9695879597F90B +:1055300008959FEF80EC089500240A94161617062C +:1055400018060906089500240A9412161306140674 +:1055500005060895092E0394000C11F4882352F0D7 +:10556000BB0F40F4BF2B11F460FF04C06F5F7F4F8F +:105570008F4F9F4F089557FD9058440F551F59F076 +:105580005F3F71F04795880F97FB991F61F09F3F30 +:1055900079F087950895121613061406551FF2CF59 +:1055A0004695F1DF08C0161617061806991FF1CFA9 +:1055B00086957105610508940895E894BB276627D0 +:1055C0007727CB0197F908957CDF08F48FEF0895D2 +:1055D0000BD0C0CFB1DF28F0B6DF18F0952309F06B +:1055E00094CFA7CF1124EACFC6DFA0F3959FD1F3C4 +:1055F000950F50E0551F629FF001729FBB27F00D81 +:10560000B11D639FAA27F00DB11DAA1F649F6627D5 +:10561000B00DA11D661F829F2227B00DA11D621F24 +:10562000739FB00DA11D621F839FA00D611D221FDE +:10563000749F3327A00D611D231F849F600D211DC2 +:10564000822F762F6A2F11249F5750408AF0E1F065 +:1056500088234AF0EE0FFF1FBB1F661F771F881FAE +:1056600091505040A9F79E3F510570F04ECFA6CF04 +:105670005F3FECF3983EDCF3869577956795B79599 +:10568000F795E7959F5FC1F7FE2B880F911D9695C3 +:10569000879597F90895FA01EE0FFF1F30962105BF +:1056A000310599F16115710561F48038BFE39B07FD +:1056B00049F168949038810561F08038BFEF9B070D +:1056C00041F0992342F5FF3FE1053105210511F134 +:1056D000E8940894E795D901AA2329F4AB2FBE2FAB +:1056E000F85FD0F310C0FF5F70F4A695E0F7F739CC +:1056F00050F019F0FF3A38F49F779F930CD00F9039 +:1057000007FC905808953EF014CF60E070E080E808 +:105710009FE308954FE79F775F934F933F932F93B6 +:105720009ED02F913F914F915F9152DF05C019F4A8 +:105730000EF0EBCE42CFFDCE26DFC8F39638C0F791 +:1057400007F80F92E8942BE33AEA48EB5FE74EDF65 +:105750000F920F920F924DB75EB70F92C0D0EAE052 +:10576000F1E016D04F915F91EF91FF91E595EE1F1B +:10577000FF1F49F0FE57E0684427EE0F441FFA95DB +:10578000E1F74195550B32D00F9007FE26C00895E2 +:10579000DF93CF931F930F93FF92EF92DF927B01E2 +:1057A0008C01689405C0DA2EEF011EDFFE01E8943B +:1057B000A5912591359145915591AEF3EF0106DD07 +:1057C000FE019701A801DA9479F7DF90EF90FF903E +:1057D0000F911F91CF91DF9108959B01AC0160E083 +:1057E00070E080E89FE349CD90CE95CECCDEE8F323 +:1057F0009923D9F3940F511DBBF39150504094F06D +:1058000059F0882332F0660F771F881F915050405F +:10581000C1F79E3F510544F7880F911D96958795D6 +:1058200097F908955F3FACF0983E9CF0BB278695B2 +:1058300077956795B79508F4B1609395C1F7BB0F5D +:1058400058F711F460FFE8CF6F5F7F4F8F4F9F4F86 +:10585000E3CFB4CE0EF05FCE6CCE689456CE93DE1E +:10586000C8F39923D1F3C6F3DF93CF931F930F931C +:10587000FF92C92FDD2788232AF02197660F771F13 +:10588000881FDAF720E030E040E85FEB9FE38839DB +:1058900020F0803E30F021968F7787DCE2E3F1E064 +:1058A00003C083DCEFE5F1E073DF8B01BE01EC01A7 +:1058B000FB2E6F5771097595771F880B990B78DD53 +:1058C00028E132E741E35FE38FDEAF2D9801AE01BF +:1058D000FF900F911F91CF91DF9178DC3BCEFA01C1 +:1058E000DC01AA0FBB1F9B01AC01BF5728F4222784 +:1058F0003327442750781FC0B75188F4AB2F0024BA +:10590000469537952795011CA395D2F3002069F0A1 +:10591000220F331F441FB395DAF30DD045CC61300D +:105920007105A0E88A07B94630F49B01AC016627EF +:10593000772788279078309621F02083318342831F +:1059400053830895AA1BBB1B51E107C0AA1FBB1FAD +:10595000A617B70710F0A61BB70B881F991F5A95FB +:10596000A9F780959095BC01CD01089597FB072E6E +:1059700016F4009407D077FD09D00E94A22C07FCF2 +:1059800005D03EF4909581959F4F0895709561954F +:105990007F4F0895EE0FFF1F0590F491E02D0994BD +:1059A000F999FECF92BD81BDF89A992780B50895E7 +:1059B000A8E1B0E042E050E00C94F82C262FF999D1 +:1059C000FECF92BD81BDF89A019700B4021639F05E +:1059D0001FBA20BD0FB6F894FA9AF99A0FBE08952F +:1059E0000196272F0E94DF2C0C94DE2CDC01CB01CA +:1059F000FC01F999FECF06C0F2BDE1BDF89A3196DF +:105A000000B40D9241505040B8F70895F894FFCF7C +:105A1000640007000CFF0000003F643310C1109EBB +:105A2000106A1036100101DF022808140A321E0025 +:105A300002040507090B0C0E1011131517181A1C78 +:105A40001D1F2123242628292B2D2F3032343537B2 +:105A5000393B1F0F03764F5F6F7F496943790959BF +:105A600053633149803F5D8B803FF8BF803FCAE17F +:105A7000803F73ED803FCAE1803FF8BF803F5D8B80 +:105A8000803F3149803F0000803FF16D7F3F75EAE4 +:105A90007E3F4C827E3F833F7E3F84287E3F833F14 +:105AA0007E3F4C827E3F75EA7E3FF16D7F3F000076 +:105AB000803F3F4D36394B05FE04C8048F04220455 +:105AC0003B0454046D0401020304050607080900A1 +:00000001FF diff --git a/keyboard/planck/keymaps/lucas/compiled.hex b/keyboard/planck/keymaps/lucas/compiled.hex new file mode 100644 index 0000000000..26fc8ee0cd --- /dev/null +++ b/keyboard/planck/keymaps/lucas/compiled.hex @@ -0,0 +1,1471 @@ +:100000000C9427030C946B030C946B030C946B03FC +:100010000C946B030C946B030C946B030C946B03A8 +:100020000C946B030C946B030C942E150C9400161B +:100030000C9462230C946B030C946B030C946B0371 +:100040000C946B030C94CD030C946B030C946B0316 +:100050000C946B030C94CA230C946B030C946B03E9 +:100060000C946B030C946B030C946B030C946B0358 +:100070000C946B030C946B030C946B030C946B0348 +:100080000C94A30B0C946B030C946B030C946B03F8 +:100090000C946B030C946B030C946B030C946B0328 +:1000A0000C946B030C946B030C946B036D168F16FE +:1000B0007D178F167D17D416F7167D174C175F170F +:1000C000491A491A781A781AB71AD71A2D1C2D1CF2 +:1000D000E21A2D1C921B921BF91B021C2D1C271CC3 +:1000E0009F1B9F1B9F1B9F1B9F1B9F1B9F1B9F1B40 +:1000F0009F1B9F1B9F1B9F1B9F1B9F1B9F1B9F1B30 +:10010000AF1BBD1BC41BCB1BD51B07634236B79B64 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A32CA4228A3921290014001A00090055 +:1001E00013000A000D000F0018001D003602380031 +:1001F0002A00040015001600170007000B0011006C +:1002000008000C001200310200301C001B00060028 +:10021000190005000E0010003600370024022800E7 +:10022000E000E3002B00E200022003200320012075 +:100230005000510052004F00010001000100010078 +:100240000100010001000100010001003700010070 +:100250000100010001000100010001000100010096 +:100260000100010001001F02010001000100010066 +:100270000100010001000100013064022D020100B3 +:100280000100010001000100010001000100010066 +:100290000100010001000100000034020000000024 +:1002A00000000000000000002F02330200000420C4 +:1002B0004C00340000002D00000000000000000091 +:1002C0002F00330000004514000000000000000073 +:1002D0000000000000000000AD00AC00AB004414C2 +:1002E0000100010001000100010001000100010006 +:1002F000A800AA00A900AE0030141E021414310098 +:10030000210222023500230230022502260230009B +:100310002E021E001F0020002100220023002400C6 +:1003200025002600270027020000000000006414BA +:100330002514261424142714081400002D14280052 +:1003400001000100010001000100010001000100A5 +:100350004A004E004B004D00680069006A006B00C7 +:100360006C006D006E006F00700071007200730011 +:100370003A003B003C003D003E003F004000410091 +:10038000420043004400450000000000000000005F +:100390000000560057000000000000000050000060 +:1003A00000008250805081500220010001000100B5 +:1003B000A800AA00A900AE000652290014001A00E5 +:1003C0000800150017001D0018000C001200042082 +:1003D00028002A0004001600070009000A000B008C +:1003E0000D000E000F003602E000E1001C001B00B3 +:1003F0000600190005001100100037005200240209 +:10040000000000002B00E20000002C002C002C015A +:10041000E300500051004F000100000014001A00DA +:10042000090013000A000D005F0060006100000079 +:100430002A000000040015001600170007000B003A +:100440005C005D005E004D00E000E1001C001B0050 +:100450000600190005000E0059005A005B004E000E +:10046000000000002B00E20000002C002C002C01FA +:100470000000620063005800280354006800650013 +:10048000200050006C0061006E0063006B002000D3 +:100490004B006500790062006F006100720064002B +:1004A00000002C034F007200740068006F006C00A5 +:1004B00069006E0065006100720020004B0065005D +:1004C000790062006F006100720064007300000038 +:1004D0000403090409026D00040100A0FA090400E4 +:1004E000000103010100092111010001223F000761 +:1004F00005810308000A0904010001030102000943 +:100500002111010001224D000705820308000A099C +:10051000040200010300000009211101000122363C +:10052000000705830308000A090403000103000013 +:100530000009211101000122390007058403100080 +:10054000011201100100000008EDFE6060010001D1 +:1005500002000105010906A101050719E029E715B7 +:1005600000250195087501810205081901290595E5 +:10057000057501910295017503910105071900297F +:100580007715002501957875018102C00501098064 +:10059000A101850216010026B7001A01002AB70042 +:1005A000751095018100C0050C0901A10185031694 +:1005B0000100269C021A01002A9C027510950181F7 +:1005C00000C005010902A1010901A10005091901E5 +:1005D0002905150025019505750181029501750311 +:1005E00081010501093009311581257F95027508C2 +:1005F000810609381581257F950175088106050C4E +:100600000A38021581257F950175088106C0C0054D +:10061000010906A101050719E029E7150025019543 +:1006200008750181029501750881010508190129E4 +:10063000059505750191029501750391010507194D +:100640000029FF150025FF950675088100C01124BB +:100650001FBECFEFDAE0DEBFCDBF04B603FE24C07D +:1006600080911E0390911F03A0912003B09121035C +:100670008730904BA740B04BB9F410921E031092F4 +:100680001F03109220031092210314BE84B7877FAA +:1006900084BF88E10FB6F8948093600010926000E8 +:1006A0000FBEE0E0F8E3099511E0A0E0B1E0EEE173 +:1006B000FBE502C005900D92A03CB107D9F713E00D +:1006C000A0ECB1E001C01D92AE31B107E1F70E948C +:1006D00074120C948D2D0C9400000895089581E0FF +:1006E000089508950C946E030C946F030C94710399 +:1006F0000E94572923E030E0281B3109220F209364 +:10070000C4010895282F2F9880918000211108C0DE +:10071000877F8093800010928D0010928C001BC008 +:10072000886080938000233019F48FEF9FEF0FC013 +:1007300083E090E0821B9109880F991F2FEF3FEF14 +:10074000A90102C0569547958A95E2F7CA01909390 +:100750008D0080938C000C9478030E94780384E0D1 +:100760008093C3011092C0010895279A2F988FEFAC +:100770009FEF90938700809386008AE080938000AB +:1007800089E1809381000E94C0280C94AD030E94EF +:10079000B5036E9A769A0C946D031F920F920FB662 +:1007A0000F9211242F933F938F939F93EF93FF9377 +:1007B000E091C101F091C201CF0101969093C20175 +:1007C0008093C1010090C30102C0F695E7950A9499 +:1007D000E2F7EF738091C001823019F4E03251F4F6 +:1007E00004C0813039F4EF3329F480916F008D7F9C +:1007F00080936F00F0E0E457FE4FE49121E031E098 +:10080000E29FC001E39F900D11240090C40102C03B +:10081000969587950A94E2F790938D0080938C00CB +:10082000FF91EF919F918F913F912F910F900FBE6C +:100830000F901F901895662319F0613099F020C031 +:10084000FC018281882341F081EE0E94ED1881E055 +:1008500090E00E94D52014C081E090E00E94F62034 +:1008600081EE0CC0FC018281882339F081EE0E9468 +:10087000B51984E60E94ED1803C084E60E94B519FC +:1008800080E090E0089581E008950C944304089579 +:100890000C94C70380911502882309F448C0809105 +:1008A000D1019091D201009779F40E949423909302 +:1008B000D2018093D1018091D30190E0009771F42F +:1008C0008091D40190E00AC00E94A02320910001F1 +:1008D000309101012817390740F329C00197880F8B +:1008E000991F880F991FFC01EB52FE4F60817181A7 +:1008F000828193810E94090BE091D30184E0E89FFB +:10090000F0011124EB52FE4F60817181828193814D +:100910004FE050E00E94C10E8091D30190E001961B +:100920006091D40170E00E943D2D8093D3010C941E +:100930007203109217020C94D60A0895089581E06C +:10094000809317020C949E04089508958F929F92AD +:10095000AF92BF92EF92FF920F931F93CF93DF93CB +:10096000CDB7DEB7A3970FB6F894DEBF0FBECDBFED +:100970007C01FC0100811181C8010E949121B80114 +:100980000E94A8068C01B7010E944504882309F43F +:10099000CCC10032F0E51F0741F4F70182818823C2 +:1009A00009F458C00E94250FC0C10132F0E51F07AD +:1009B00041F4F7018281882309F44CC00E942E0F74 +:1009C000B4C10232F0E51F0751F4F7018281882398 +:1009D00009F440C00E94210F8111F0CFE3CF033210 +:1009E000F0E51F0739F4F7018281882399F10E940D +:1009F0009F049BC10432F0E51F0739F4F70182819F +:100A0000882341F10E94990490C10532F0E51F0747 +:100A100049F4F70182818823E9F08091170281115E +:100A2000F1CFE5CF0632F0E51F0739F4F7018281F7 +:100A3000882381F00E94350F0AC00732F0E51F07B6 +:100A400049F4F7018281882329F00E94400F0E9417 +:100A5000A5046BC180911702811105C0F701828145 +:100A60008111CFC018C1003E110579F4F7018281D0 +:100A7000882309F44DC00E94D60A81E080931602B3 +:100A8000109215021092D40150C1023E110559F482 +:100A9000F70182818823E1F10E94D60A10921602A2 +:100AA0001092150242C1033E110591F4F7018281B3 +:100AB000882371F10E94D60A1092160281E0809379 +:100AC00015021092D3011092D2011092D1012DC1C2 +:100AD0000235110559F4F7018281882309F425C1F3 +:100AE00080910001909101010A970DC00135110517 +:100AF00079F4F7018281882309F417C180910001FC +:100B0000909101010A9690930101809300010DC11B +:100B10004091040183E2EFE1F1E0DE0111960190E2 +:100B20000D928A95E1F7F701808121E030E02C0FEA +:100B30003D1F280F311DC901209102013091030191 +:100B4000FC01E20FF31F6081772767FD7095640F4A +:100B5000711D882777FD8095982F0E945F2A20E0DD +:100B600030E040E451E40E94C4294B015C01F701EC +:100B7000218184E090E0821B9109BC01882777FDE8 +:100B80008095982F0E945F2A9B01AC01C501B4019A +:100B90000E945C299B01AC0160E070E080E090E481 +:100BA0000E94D22B20E030E04CED50E40E946F2BED +:100BB0004B015C01F70182818823D1F04FE050E0C6 +:100BC000C501B4010E94C10E809116028823A1F0D4 +:100BD0008091D40124E0829FF0011124EB52FE4F5A +:100BE00080829182A282B3828F5F8093D40104C0FD +:100BF000C501B4010E94090B0F3F110508F02ECF6B +:100C000094C08091D00181111FC0043130E51307D9 +:100C100009F051C00E94470481E08093D0010E94F6 +:100C200094239093CF018093CE011092C70110922C +:100C3000C9011092C8011092CB011092CA01109202 +:100C4000CD011092CC0171C08091CE019091CF0165 +:100C50000E94A023883C910570F48091C701E82F81 +:100C6000F0E0EE0FFF1FE853FE4F118300838F5F0C +:100C70008093C7015AC0043880E5180721F0053871 +:100C8000104501F13AC0F7018281882341F01092AA +:100C9000C50182E01EC0043830E5130759F5809184 +:100CA000C501811106C086E20E94ED1886E20E940D +:100CB000B51982E01CC00438F0E51F0741F3053880 +:100CC0001045D9F4F7018281882331F01092C601D2 +:100CD00080E20E94041A29C08091C601811106C0D9 +:100CE00087E20E94ED1887E20E94B51980E20E9417 +:100CF0000B1A1BC00538104529F381E08093C5010C +:100D00008093C601C701A3960FB6F894DEBF0FBE4D +:100D1000CDBFDF91CF911F910F91FF90EF90BF90CA +:100D2000AF909F908F900C94740380E0A3960FB6C1 +:100D3000F894DEBF0FBECDBFDF91CF911F910F9111 +:100D4000FF90EF90BF90AF909F908F90089508957F +:100D50009CE0799FF001112490E3899FE00DF11D43 +:100D60001124E60FF11DEE0FFF1FE852FE4F859193 +:100D700094910895880F991FFC01E45BFF4F8591C2 +:100D800094910895880F991FFC01E453FE4F8591BB +:100D9000949108950F931F93CF93DF93EC018115E6 +:100DA00021E39207A0F5C11580E3D80708F0D7C06A +:100DB000C83ED105D8F4C03ED10508F007C2C83AF4 +:100DC000D10578F4C53AD10508F06AC0C130D10523 +:100DD00009F463C008F4F7C1C430D10508F0F6C1C6 +:100DE000F2C1CB3BD10508F466C0EDC1C11590E25C +:100DF000D90708F0AFC0C11521E0D20708F0E6C15D +:100E0000C03FD10508F4DFC18E0110651FC2C03894 +:100E100080E5D80700F5C03790E5D90708F0A3C0F2 +:100E2000C11520E5D20709F4ACC050F4CE019054AE +:100E300080319F4008F0C7C1DF708E01106A06C282 +:100E4000C13080E5D80709F4AEC0C43190E5D907B8 +:100E500008F4AFC0B8C1C33820E5D20709F48EC08A +:100E600050F4C13890E5D90709F482C008F083C076 +:100E700000E011EDEBC1C03181E5D80708F4A3C152 +:100E8000C11597E5D90708F436C1CE0190578115F1 +:100E9000904108F098C1DF7093C101E010E0D6C125 +:100EA000C53AD10509F494C1C63AD10509F093C1F8 +:100EB00002E810E4CBC1C83AD10509F48FC1C93AA0 +:100EC000D10509F48EC1CA3AD10509F48DC1CB3AD6 +:100ED000D10509F48CC1CC3AD10509F48BC1CD3AC6 +:100EE000D10509F48AC1C03BD10509F489C1CE3AC4 +:100EF000D10509F488C1CF3AD10509F487C1C13BB6 +:100F0000D10509F486C1C23BD10509F485C1C33BB3 +:100F1000D10509F484C1C43BD10509F483C1C53BA3 +:100F2000D10509F482C1C63BD10509F481C1C73B93 +:100F3000D10509F480C1C83BD10509F47FC1C93B83 +:100F4000D10509F47EC1CA3BD10509F47DC100E099 +:100F500014E47CC1CE019F700E94C20678C1DD27D7 +:100F60008E01106C73C1CF70DD278E01146D6EC1C0 +:100F700000E010ED6BC100E012ED68C100E013ED80 +:100F800065C10E94981C0E94D60A0E949D048FEFA2 +:100F900094E32CE0815090402040E1F700C0000035 +:100FA0000E94EF2353C18091F20281608093F2028C +:100FB0004DC10E945024811102C00E942C240E9425 +:100FC000632490E090931D0380931C03C23080E55E +:100FD000D80721F480911C03816086C0C43090E55D +:100FE000D90721F480911C0382607EC0C63020E5C1 +:100FF000D20721F480911C03846076C0C83080E55C +:10100000D80719F480911C0327C0CA3090E5D9078E +:1010100021F480911C03806167C0CC3020E5D207A9 +:1010200021F480911C0380625FC0CE3080E5D80738 +:1010300021F480911C03806457C0C03190E5D9072A +:1010400021F480911C0380684FC0C23120E5D20793 +:1010500029F480911C038460886046C0C33080E519 +:10106000D80721F480911C038E7F3EC0C53090E5E7 +:10107000D90721F480911C038D7F36C0C73020E54D +:10108000D20721F480911C038B7F2EC0C93080E5EC +:10109000D80719F480911C0326C0CB3090E5D907FE +:1010A00021F480911C038F7E1FC0CD3020E5D20734 +:1010B00021F480911C038F7D17C0CF3080E5D807C5 +:1010C00021F480911C038F7B0FC0C13190E5D907BB +:1010D00021F480911C038F7707C0C331D04531F4D0 +:1010E00080911C038B7F877F80931C0380911C035E +:1010F0000E946724ABC08D2F99278F70992781306C +:101100009105D9F49E012370332702C0880F991FDF +:101110002A95E2F79C688E0144E0000F111F4A9562 +:10112000E1F700271370802B912B53E0CC0FDD1FCC +:101130005A95E1F7C076DD272FC08230910531F452 +:10114000DC2FCC278E01016F106A80C0833091059F +:1011500069F4CE018370992701E010E002C0000F0E +:10116000111F8A95E2F7C8019C680FC08430910571 +:10117000B9F4CE018370992701E010E002C0000F9E +:10118000111F8A95E2F7C8019A6823E0CC0FDD1F92 +:101190002A95E1F7C07ED7708C010C2B1D2B56C011 +:1011A0008530910531F4DC2FCC278E01046F106A55 +:1011B0004DC0069709F04AC0CF71DD27DC2FCC2740 +:1011C0008E01106243C000E010E040C08E013EC0BE +:1011D00001E810E43BC003E810E438C002EE14E478 +:1011E00035C009EE14E432C00AEE14E42FC005EB5A +:1011F00014E42CC006EB14E429C007EB14E426C069 +:101200000CEC14E423C00DEC14E420C003E815E456 +:101210001DC00AE815E41AC002E915E417C004E984 +:1012200015E414C001E216E411C003E216E40EC096 +:1012300004E216E40BC005E216E408C006E216E478 +:1012400005C007E216E402C00AE216E4C801DF9115 +:10125000CF911F910F9108959CE0799FF001112487 +:1012600090E3899FE00DF11D1124E60FF11DEE0FB3 +:10127000FF1FE852FE4F85919491803E9105E0F466 +:10128000803C910558F58133910509F46FC048F40D +:101290008932910509F463C08A32910509F46DC061 +:1012A00072C089339105E9F082389105D1F0853318 +:1012B000910509F44DC067C0833E910581F138F472 +:1012C000803E9105B9F0823E9105D9F05CC0863E22 +:1012D000910561F1873E9105A1F155C00E94BA06C2 +:1012E000089520911C0320FD02C021FF4CC080EE18 +:1012F00090E049C080911C0380FFF9CF89E390E022 +:1013000042C080911C0382FF0EC080911C0384FFA9 +:1013100003C080E090E037C083EE90E034C080915D +:101320001C0382FFF2CF82EE90E02DC080911C035F +:1013300083FF0BC080911C0384FDEBCF87EE90E010 +:1013400022C080911C0383FFF5CF86EE90E01BC086 +:1013500080911C0385FF07C089E290E014C0809152 +:101360001C0385FFF9CF85E390E00DC080911C033D +:1013700086FF07C08AE290E006C080911C0386FFCA +:10138000F9CF81E390E00E94CA0608950C94760399 +:10139000E82FF0E0E25BFE4F8081E82FEF70F0E095 +:1013A00082958F7021E030E0A90102C0440F551FE3 +:1013B0008A95E2F740A308950F931F93CF93DF938D +:1013C00085B7806885BF85B7806885BFC3E0D0E0FA +:1013D00001E010E0FE01E25BFE4F8081E82FEF703C +:1013E000F0E021A182958F70A80102C0440F551F23 +:1013F0008A95E2F7CA01822B81A38C2F0E94C8092B +:10140000219740F78BE090E061E070E0FC01EE5B3B +:10141000FE4F2081E22FEF70F0E042A122952F7065 +:10142000DB0102C0AA0FBB1F2A95E2F79D01242B06 +:1014300022A3019758F7DF91CF911F910F910C9440 +:101440004804EF92FF920F931F93CF93DF9300E234 +:1014500012E0C3E0EE24E394F12CD5E08C2F0E943F +:10146000C8098BE090E040E050E0FC01EE5BFE4FED +:101470006081E62FEF70F0E020A130E062956F70A0 +:1014800002C0359527956A95E2F720FD09C09701BE +:10149000082E02C0220F331F0A94E2F7422B532B6F +:1014A000019718F7F801929182918F01841795079F +:1014B00021F051834083D09305018C2F0E94C809ED +:1014C000C15060F68091050187FD2CC0815080934A +:1014D00005018F3F39F08FE99FE00197F1F700C0D8 +:1014E000000020C080911E0290911F02909327025D +:1014F0008093260280911C0290911D0290932502F8 +:101500008093240280911A0290911B0290932302EF +:1015100080932202809118029091190290932102E7 +:10152000809320020E944A0481E0DF91CF911F91B5 +:101530000F91FF90EF900895E82FF0E0EE0FFF1F5E +:10154000E05EFD4F80819181089508950F931F9370 +:10155000CF9308E212E0C0E0F801929182918F01EE +:101560000E940C23C80FF2E000321F07A9F78C2F4E +:10157000CF911F910F9108950E945024811102C0B4 +:101580000E942C240E947524809307033E9A809128 +:1015900071008D7F8093710082E0809390008AE1DA +:1015A0008093910081E080932A02089580912A021D +:1015B000811102C00E94BC0A10927A021092790234 +:1015C000809171008D7F80937100809190008F7366 +:1015D0008093900010923C0210923B021092730292 +:1015E000109274021092750210927602109272029A +:1015F00010927102E1E5F2E0A1E4B2E011921192E1 +:10160000119211921D921D9282E0E137F807B1F715 +:101610000895CF92DF92EF92FF920F931F93CF9393 +:10162000DF9320913B02222309F484C06B017C01EB +:1016300080912A02811102C00E94BC0A01E712E0D7 +:10164000C7E0D0E0A7019601F801929182917291D2 +:1016500062918F010E94C029811131C0FE01EE0FFD +:10166000FF1FEE0FFF1FEF5AFD4F108211821282F3 +:101670001382DE01AA0FBB1FAF5BBD4F11961C92F8 +:101680001E92C730D105E9F02196448155816681CB +:10169000778140835183628373831482158216821B +:1016A000178212968D919C91139711969C938E930D +:1016B00013961C921E92129734961296E2CF21979F +:1016C00008F68091790290917A02019797FD05C002 +:1016D00090937A028093790204C010927A02109259 +:1016E00079028091790290917A022091770230916B +:1016F00078022817390724F01092780210927702A6 +:10170000892BC1F4809171008D7F8093710080914D +:1017100090008F7380939000109273021092740265 +:10172000109275021092760210927202109271025B +:1017300010923B02DF91CF911F910F91FF90EF909C +:10174000DF90CF9008951F920F920FB60F92112441 +:101750004F925F926F927F928F929F92AF92BF92C1 +:10176000CF92DF92EF92FF922F933F934F935F932D +:101770006F937F938F939F93AF93BF93CF93DF9399 +:10178000EF93FF9380913B02882309F49BC1C091A2 +:101790007902D0917A021C161D060CF093C140907C +:1017A0002B0250902C0260902D0270902E0220E0AF +:1017B00030E0A901C301B2010E946B2B18160CF096 +:1017C00065C0C130D10509F452C080917702909173 +:1017D0007802BE010E943D2D7C0190937802809397 +:1017E000770280903D0290903E02A0903F02B09020 +:1017F000400220E030E040E85FE3C501B4010E9410 +:101800005C2960933D0270933E0280933F02909367 +:101810004002F701EE0FFF1FEE0FFF1FEF5AFD4FC3 +:10182000A301920160817181828193810E94C42908 +:1018300020E030E040E05EE30E946F2B9B01AC01B2 +:10184000C501B4010E946B2B18168CF4C7010196D8 +:10185000BE010E943D2D90937802809377021092F2 +:101860003D0210923E0210923F0210924002E0911F +:101870007702F0917802EE0FFF1FEE0FFF1FEF5A75 +:10188000FD4F6081718182819381D0C0C0907302CD +:10189000D0907402E0907502F090760220E030E083 +:1018A000A901C701B6010E94C0292197882309F424 +:1018B000A2C0FE01EE0FFF1FEE0FFF1FEF5AFD4FFC +:1018C00080809180A280B380A5019401C701B601F8 +:1018D0000E94C02987FF31C0A501940160E070E03B +:1018E0008CED93EC0E94C42920E030E040E451E408 +:1018F0000E94C42920E030E040E05FE30E946F2BAB +:101900009B01AC0160E070E080E090E40E94D22B8B +:101910009B01AC01C501B4010E946F2B9B01AC017E +:10192000C701B6010E94C02987FF07C0A701960121 +:1019300060E070E08CED93E439C0A5019401C7012B +:10194000B6010E946B2B18160CF055C0A50194012E +:1019500060E070E08CED93E40E94C42920E030E068 +:1019600040E451E40E94C42920E030E040E05FE31D +:101970000E946F2B9B01AC0160E070E080E090E47E +:101980000E94D22B9B01AC01C501B4010E946F2BB8 +:101990009B01AC01C701B6010E946B2B18165CF5C8 +:1019A000A701960160E070E08CED93EC0E94C429E1 +:1019B00020E030E040E451E40E94C42920E030E01F +:1019C00040E05FE30E946F2B9B01AC0160E070E0A0 +:1019D00080E090E40E94D22B9B01AC01C701B601CC +:1019E0000E946F2B60937302709374028093750250 +:1019F0009093760213C0FE01EE0FFF1FEE0FFF1F44 +:101A0000EF5AFD4F80819181A281B381809373024F +:101A100090937402A0937502B09376026091730262 +:101A20007091740280917502909176022091280243 +:101A3000309129022F3F4FEF340731F02F5F3F4F96 +:101A400030932902209328020E944B0F6B017C01E6 +:101A500020E034E244EF51E40E94C02987FF08C02F +:101A600086EFC82E88E2D82E84EFE82E81E4F82E87 +:101A700020E030E040E051E4C701B6010E946F2B46 +:101A80009B01AC0160E074E284E79BE40E94C429FE +:101A90006B017C010E94312A70939700609396003D +:101AA00020910601309107014091080150910901F0 +:101AB000C701B6010E946F2B0E94312A70939900D2 +:101AC0006093980080913C02882309F433C1C09050 +:101AD0003702D0903802E0903902F0903A0220E0CC +:101AE00030E0A901C701B6010E946B2B1816D4F58E +:101AF00080912802909129028F3F2FEF920729F0C1 +:101B000001969093290280932802C701B6010E9492 +:101B10004B0F20E030E040E051E40E946F2B9B012E +:101B2000AC0160E074E284E79BE40E94C4296B018D +:101B30007C010E94312A7093970060939600209157 +:101B40000601309107014091080150910901C70138 +:101B5000B6010E946F2B0E94312A70939900609306 +:101B6000980008C010929700109296001092990069 +:101B70001092980060913102709132026F5F7F4F36 +:101B80007093320260933102209196003091970059 +:101B900080E090E0232BF1F0C0919600D091970067 +:101BA0000E945D2A6B017C01BE0180E090E00E94F2 +:101BB0005D2A9B01AC0160913302709134028091E7 +:101BC0003502909136020E94C42920E03FEF4FE792 +:101BD00057E410C00E945D2A6B017C0120E030EECA +:101BE0004FEF54E4609133027091340280913502DA +:101BF000909136020E946F2B9B01AC01C701B60188 +:101C00000E946B2B87FD96C080912F028F5F80937F +:101C10002F0290E020910303309104038217930771 +:101C2000A0F080910E03882319F010922F020DC0AE +:101C3000809171008D7F80937100809190008F73EF +:101C40008093900010923C027DC080913002C09140 +:101C50002F02811128C0C0900803D0900903E090A2 +:101C60000A03F0900B0320E030E0A901C701B601A0 +:101C70000E946B2B1816BCF481E080933002109206 +:101C80003702109238021092390210923A02C09232 +:101C90003302D0923402E0923502F0923602C15003 +:101CA000C0932F0243C0109230021092290210926A +:101CB0002802E0910503F091060348E0C49FE00D7F +:101CC000F11D112480819181A281B381809337021B +:101CD00090933802A0933902B0933A0220E030E0AA +:101CE00040E85EE364817581868197810E946F2B55 +:101CF0006B017C0180910A01682F70E080E090E028 +:101D00000E945D2A20E030E048EC52E40E94C429A1 +:101D10009B01AC01C701B6010E946F2B6093330297 +:101D200070933402809335029093360210923202FF +:101D3000109231028091070380FD04C010923C0292 +:101D400010923B02FF91EF91DF91CF91BF91AF9144 +:101D50009F918F917F916F915F914F913F912F91C3 +:101D6000FF90EF90DF90CF90BF90AF909F908F90BB +:101D70007F906F905F904F900F900FBE0F901F90CD +:101D80001895CF92DF92EF92FF92CF93DF936B0182 +:101D90007C01EA0180912A02811102C00E94BC0AE2 +:101DA0008091070380FF46C08091790290917A026A +:101DB00008970CF03FC0809171008D7F8093710077 +:101DC00080913C0281110E94D60A81E080933B02FF +:101DD000109229021092280220E030E0A901C701E8 +:101DE000B6010E946B2B1816DCF480917902909159 +:101DF0007A02FC01EE0FFF1FEE0FFF1FEF5AFD4F9F +:101E0000C082D182E282F382FC01EE0FFF1FEF5B02 +:101E1000FD4FD183C083019690937A02809379021B +:101E20008091710082608093710080919000806841 +:101E300080939000DF91CF91FF90EF90DF90CF9053 +:101E40000895809107038170089580910703816050 +:101E5000809307030E9479240C94A40480910703C3 +:101E60008E7F809307030C94792480917B0290E00D +:101E7000019666E070E00E943D2D80937B020895FC +:101E800080917B0290E0019766E070E00E943D2D1A +:101E900080937B0208958F929F92AF92BF92CF92D0 +:101EA000DF92EF92FF920F931F93CF93DF936B011B +:101EB0007C01C0912802D0912902BE0180E090E00F +:101EC0000E945D2A4B015C01A701960160E070E071 +:101ED0008CE594E40E94C4299B01AC01C501B401C6 +:101EE0000E946F2B0E94312A20917B02233009F43B +:101EF00073C028F4222351F02130E9F02CC12430A2 +:101F000009F4A0C0253009F4E0C025C180E090E0CC +:101F1000A0E0BFE38093060190930701A09308011E +:101F2000B093090110922B0210922C0210922D02F4 +:101F300010922E0210C110922B0210922C021092BD +:101F40002D0210922E026431710540F46A30710541 +:101F500060F520E030E040E85EE32BC0693C7105AD +:101F600008F0AAC080E090E00E945D2A20E030E006 +:101F700040EA51E40E945B2920E030E044E353E46E +:101F80000E94C4299B01AC010E946F2B20E030E02D +:101F900040E05EE30E946F2B9B01AC0160E070E0CB +:101FA00080E09EE30E945B2944C020E030E040E0F6 +:101FB0005FE3C701B6010E946F2B6B017C0180E0DB +:101FC00090E0A0E0BEE38093060190930701A09308 +:101FD0000801B0930901BFC010922B0210922C028D +:101FE00010922D0210922E024AE0469F9001479FC8 +:101FF000300D1124C90168EB7BE00E94292DBC0142 +:102000006C5D754077FF03C07195619571098827F4 +:1020100077FD8095982F0E945F2A2EE333EC4EE2E5 +:1020200059E30E946F2B20E030E040EC5EE30E9419 +:102030005C296093060170930701809308019093D7 +:10204000090189C010922B0210922C0210922D02CD +:1020500010922E02CE0183709927892BE1F0BE01E8 +:102060006170772780E090E00E945D2A20E030E0F8 +:1020700040E05EE30E946F2B20E030E040E45FE34D +:102080000E945C2960930601709307018093080108 +:10209000909309010CC080E090E0A0E0BFE3809342 +:1020A000060190930701A0930801B0930901C7703E +:1020B000DD27CD2B09F04FC01092060110920701C9 +:1020C000109208011092090146C010922B02109242 +:1020D0002C0210922D0210922E0200E010E020E05F +:1020E0003FE300930601109307012093080130930A +:1020F00009016739710578F180E090E00E945D2A5E +:1021000020E030E047E153E40E945B2920E030E02A +:102110004AE754E40E94C42920E030E048E452E455 +:102120000E946F2B20E030E040EA51E40E94A12A97 +:102130000E942C2A660F771F660F771FFB01EE5A4D +:10214000FE4F2081318142815381C701B6010E9437 +:102150006F2B6B017C01C701B601DF91CF911F91FD +:102160000F91FF90EF90DF90CF90BF90AF909F9036 +:102170008F90089580918C020895CF93DF9300D0C3 +:102180001F92CDB7DEB79C0180911303843019F5FF +:1021900093E099833B832A839093E9008FEF90919A +:1021A000E800815095FD06C095ED9A95F1F7000085 +:1021B0008111F5CF8091E80085FF0DC040E050E02F +:1021C00063E070E0CE0101960E941E138091E8004A +:1021D0008E778093E8000F900F900F90DF91CF9152 +:1021E0000895CF93DF9300D01F92CDB7DEB7209133 +:1021F0001303243021F522E029839B838A8383E023 +:102200008093E9008FEF9091E800815095FD06C022 +:1022100095ED9A95F1F700008111F5CF8091E800D6 +:1022200085FF0DC040E050E063E070E0CE01019614 +:102230000E941E138091E8008E778093E8000F9033 +:102240000F900F90DF91CF910895209113032430C8 +:10225000F1F422E02093E9002FEF3091E8002150C3 +:1022600035FD06C035ED3A95F1F700002111F5CFA7 +:102270002091E80025FF0BC040E050E065E070E0F1 +:102280000E941E138091E8008E778093E8000895E5 +:10229000CF93DF93EC0190911303943009F046C083 +:1022A000809115018823D9F0809116018823B9F017 +:1022B0009093E9008FEF9091E800815095FD06C062 +:1022C00095E19A95F1F700008111F5CF8091E80032 +:1022D00085FF2CC040E050E060E170E017C081E075 +:1022E0008093E9008FEF9091E800815095FD06C042 +:1022F00095ED9A95F1F700008111F5CF8091E800F6 +:1023000085FF14C040E050E068E070E0CE010E941C +:102310001E138091E8008E778093E80080E1FE0133 +:10232000ACE7B2E001900D928A95E1F7DF91CF9191 +:10233000089580911203811109C00E94B3140E9474 +:1023400010158091E20084608093E200089510925D +:1023500012030895089508950C94572342E061EC08 +:1023600081E00E942D1442E061EC82E00E942D1475 +:1023700042E061EC83E00E942D1442E161EC84E0D4 +:102380000C942D1480911503833009F455C030F45A +:10239000813071F0823009F48EC008958A3009F4DA +:1023A0007AC08B3009F460C0893009F09CC020C02D +:1023B00080911403813A09F096C08091E800877FEC +:1023C0008093E8008091180390911903892B21F4E0 +:1023D00060E18CE792E003C060E080E090E070E0B4 +:1023E0000E9469138091E8008B778093E80008953C +:1023F00080911403813209F076C080911803909186 +:102400001903009719F0039709F06DC08091E80057 +:10241000877F8093E8008091E80082FD05C080916D +:1024200013038111F8CF5FC08091F10080938C027B +:102430008091E8008B7753C080911403813A09F0B2 +:1024400052C08091180390911903892B09F04BC059 +:102450008091E800877F8093E8008091E80080FF0A +:10246000FCCF8091150136C0809114038132D9F5DB +:102470008091180390911903892BA9F58091E800A8 +:10248000877F8093E8000E946214809116038093F6 +:1024900015010C94981C80911403813221F58091D0 +:1024A000E800877F8093E8000E9462148091170300 +:1024B00080938D02089580911403813AA1F4809154 +:1024C000E800877F8093E8008091E80080FFFCCFE0 +:1024D00080918D028093F1008091E8008E77809347 +:1024E000E8000C946214089584B7877F84BF88E164 +:1024F0000FB6F89480936000109260000FBE90E0D9 +:1025000080E80FB6F89480936100909361000FBE4D +:102510000E9405180E94B3140E9410158091E200D9 +:1025200084608093E20078940E9496170E940718B6 +:102530008BE091E00E94B11780911303853069F41C +:102540000E941823809111038823B1F30E9446232F +:10255000882391F30E940813EFCF0E940F18ECCF4D +:10256000292F332723303105C9F064F42130310598 +:1025700081F02230310509F043C08DE690E024ED72 +:1025800034E042C021323105F1F02232310541F10F +:1025900037C082E190E021E435E036C099278130F0 +:1025A000910541F08230910541F0892B49F5E0ED2C +:1025B000F4E005C0E2EAF4E002C0E8E7F4E0849168 +:1025C00090E09F0121C06430D8F4E62FF0E0EE0FD8 +:1025D000FF1FE255FE4F2081318189E090E014C059 +:1025E000643070F470E0FB01EE0FFF1FEA55FE4F00 +:1025F00020813181FB01EE55FE4F808190E004C0C7 +:1026000080E090E020E030E0FA01318320830895FB +:1026100080E189BD82E189BD09B400FEFDCF8091D2 +:10262000D8008F7D8093D8008091E00082608093F5 +:10263000E0008091E00081FDFCCF0895CF92DF9211 +:10264000EF92FF920F931F93CF93DF93EC018B01D7 +:102650006A010E948114811133C0C114D10439F080 +:10266000F60180819181081B190BC80FD91FE12C3D +:10267000F12C0115110519F18091E80085FD16C0B6 +:102680008091E8008E778093E800C114D10449F06E +:10269000F60180819181E80EF91EF182E08285E0E9 +:1026A0000FC00E948114882321F30AC0899180936E +:1026B000F10001501109FFEFEF1AFF0ADACF80E0B5 +:1026C000DF91CF911F910F91FF90EF90DF90CF900E +:1026D000089520911A0330911B032617370748F0FD +:1026E0006115710539F42091E8002E772093E800F8 +:1026F00001C0B90140E061157105A9F120911303F2 +:10270000222309F443C0253009F442C02091E80097 +:1027100023FD40C02091E80022FD32C02091E80056 +:1027200020FFE9CF4091F3002091F20030E0342BFC +:10273000FC01CF016115710559F02830310540F4D5 +:1027400081918093F100615071092F5F3F4FF1CF6C +:1027500041E02830310509F040E02091E8002E7773 +:102760002093E800C8CF4111C9CF0AC0809113035C +:10277000882361F0853061F08091E80083FD0AC014 +:102780008091E80082FFF2CF80E0089582E0089512 +:1027900083E0089581E0089520911A0330911B038E +:1027A0002617370748F06115710539F42091E800C4 +:1027B0002E772093E80001C0B901FC0120E06115EB +:1027C000710591F180911303882309F440C085308D +:1027D00009F43FC08091E80083FD3DC08091E8008E +:1027E00082FD2FC08091E80080FFE9CF2091F300A7 +:1027F0008091F20090E0922B6115710559F08830BC +:10280000910540F424912093F100319661507109B3 +:102810000196F2CF21E0089709F020E08091E800CE +:102820008E778093E800CBCF2111CCCF0AC0809166 +:102830001303882361F0853061F08091E80083FD07 +:102840000AC08091E80082FFF2CF80E0089582E024 +:10285000089583E0089581E00895982F973058F502 +:102860009093E900981739F07091EC002091ED00F9 +:102870005091F00003C0242F762F50E021FF19C0A3 +:102880003091EB003E7F3093EB003091ED003D7FC7 +:102890003093ED003091EB0031603093EB0070939A +:1028A000EC002093ED005093F0002091EE0027FF04 +:1028B00007C09F5FD3CF8F708093E90081E00895B8 +:1028C00080E008958091140387FF11C08091E80093 +:1028D00082FD05C0809113038111F8CF11C0809152 +:1028E000E8008B770BC080911303882349F0809117 +:1028F000E80080FFF8CF8091E8008E778093E800B1 +:1029000008952091E4003091E50095E64091EC00B7 +:10291000842F817040FF22C08091E80080FD1CC0A0 +:1029200080911303882391F0853091F08091EB0022 +:1029300085FD10C04091E4005091E5004217530717 +:1029400029F39A01915011F784E0089582E00895E7 +:1029500083E0089581E0089580E008954091E800C3 +:1029600042FFDECF08950E9421150E942915E0EE56 +:10297000F0E0808181608083E8EDF0E080818F77F6 +:10298000808319BCA7EDB0E08C918E7F8C93808101 +:102990008F7E80831092120308950F931F93CF931D +:1029A000DF930E9421150E942915C8EDD0E088818F +:1029B0008F77888388818068888388818F7D8883EA +:1029C00019BC1092130310920F031092110310926E +:1029D000100300EE10E0F80180818B7F80838881F6 +:1029E0008160888342E060E080E00E942D14E1EE87 +:1029F000F0E080818E7F8083E2EEF0E08081816074 +:102A00008083808188608083F80180818E7F8083CD +:102A1000888180618883DF91CF911F910F91089504 +:102A2000E8EDF0E080818F7E8083E7EDF0E080814B +:102A30008160808384E082BF81E0809312030C94E4 +:102A4000CD14E8EDF0E080818E7F80831092E2006B +:102A500008951092DA001092E10008951F920F92EB +:102A60000FB60F9211242F933F934F935F936F9361 +:102A70007F938F939F93AF93BF93EF93FF93809137 +:102A8000E10082FF0BC08091E20082FF07C08091CD +:102A9000E1008B7F8093E1000E9495178091DA001E +:102AA00080FF1FC08091D80080FF1BC08091DA009A +:102AB0008E7F8093DA008091D90080FF0DC080E185 +:102AC00089BD82E189BD09B400FEFDCF81E080931C +:102AD00013030E94991105C019BC109213030E94A0 +:102AE000A7118091E10080FF19C08091E20080FF72 +:102AF00015C08091E2008E7F8093E2008091E20019 +:102B000080618093E2008091D80080628093D80039 +:102B100019BC85E0809313030E94AB118091E10002 +:102B200084FF30C08091E20084FF2CC080E189BD29 +:102B300082E189BD09B400FEFDCF8091D8008F7D70 +:102B40008093D8008091E1008F7E8093E100809196 +:102B5000E2008F7E8093E2008091E20081608093AA +:102B6000E20080910F03882311F084E007C0809178 +:102B7000E30087FD02C081E001C083E0809313037E +:102B80000E94AC118091E10083FF29C08091E20096 +:102B900083FF25C08091E100877F8093E10082E080 +:102BA0008093130310920F038091E1008E7F809336 +:102BB000E1008091E2008E7F8093E2008091E2004C +:102BC00080618093E20042E060E080E00E942D148A +:102BD0008091F00088608093F0000E94AA11FF911C +:102BE000EF91BF91AF919F918F917F916F915F9185 +:102BF0004F913F912F910F900FBE0F901F901895FE +:102C00001F920F920FB60F9211242F933F934F9361 +:102C10005F936F937F938F939F93AF93BF93CF9364 +:102C2000DF93EF93FF93C091E900CF708091EC00A8 +:102C3000D82FD17080FDD0E81092E9008091F0008B +:102C4000877F8093F00078940E9444161092E900E8 +:102C50008091F00088608093F000CD2BCF70C093FE +:102C6000E900FF91EF91DF91CF91BF91AF919F91DB +:102C70008F917F916F915F914F913F912F910F9025 +:102C80000FBE0F901F9018951F93CF93DF93CDB772 +:102C9000DEB7AA970FB6F894DEBF0FBECDBFE4E152 +:102CA000F3E088E08E0F9091F10091938E13FBCFAB +:102CB0000E94C2118091E80083FF1FC1809114031C +:102CC00090911503492F50E04A30510508F015C185 +:102CD000FA01EA5AFF4F0C94512D803881F0823866 +:102CE00009F00BC1809118038F708093E9008091E7 +:102CF000EB0085FB882780F91092E90006C08091DF +:102D0000100390911103911182609091E800977FD8 +:102D10009093E8008093F1001092F100C8C0282F32 +:102D20002D7F09F0EAC0882319F0823061F0E5C0F8 +:102D300080911603813009F0E0C0933009F080E003 +:102D4000809311032BC080911603811127C08091BD +:102D500018038F7009F4D1C08093E9002091EB0033 +:102D600020FF1CC0933021F48091EB00806214C0DE +:102D70009091EB0090619093EB0021E030E0A9018D +:102D800002C0440F551F8A95E2F74093EA00109263 +:102D9000EA008091EB0088608093EB001092E900DC +:102DA0008091E800877F86C08111A7C0109116032B +:102DB0001F778091E3008078812B8093E3008091DE +:102DC000E800877F8093E8000E9462148091E80009 +:102DD00080FFFCCF8091E30080688093E3001111B5 +:102DE00002C082E001C083E08093130386C0805854 +:102DF000823008F082C080911603909117038C3DB9 +:102E000053E0950779F583E08A838AE289834FB797 +:102E1000F894DE01139620E03EE051E2E32FF0E06B +:102E200050935700E49120FF03C0E295EF703F5F9D +:102E3000EF708E2F90E0EA3010F0C79601C0C09678 +:102E40008D939D932F5F243149F74FBF8091E80008 +:102E5000877F8093E8006AE270E0CE0101960E94CD +:102E6000691314C0AE014F5F5F4F609118030E9459 +:102E7000B012BC01009709F440C09091E800977F20 +:102E80009093E80089819A810E94CC138091E80098 +:102E90008B778093E80031C0803879F58091E80025 +:102EA000877F8093E80080910F038093F1008091E9 +:102EB000E8008E778093E8000E9462141EC08111A2 +:102EC0001CC0909116039230C0F48091E800877F77 +:102ED0008093E80090930F030E94621480910F0387 +:102EE000811106C08091E30087FD02C081E001C02E +:102EF00084E0809313030E94AE118091E80083FF69 +:102F00000AC08091E800877F8093E8008091EB0001 +:102F100080628093EB00AA960FB6F894DEBF0FBED6 +:102F2000CDBFDF91CF911F9108950895CF938091E8 +:102F300013038823A1F0C091E900CF709091EC00B9 +:102F4000892F817090FD80E8C82B1092E900809154 +:102F5000E80083FD0E944416CF70C093E900CF9132 +:102F6000089590939302809392020895E0919202C3 +:102F7000F0919302309721F00190F081E02D0994B7 +:102F800080E00895E0919202F0919302309721F051 +:102F90000280F381E02D09940895E0919202F0916E +:102FA0009302309721F00480F581E02D0994089573 +:102FB00020919002309191028217930771F09093C3 +:102FC000910280939002E0919202F09193023097E7 +:102FD00021F00680F781E02D0994089520918E025A +:102FE00030918F028217930771F090938F02809334 +:102FF0008E02E0919202F0919302309721F00084CA +:10300000F185E02D0994089508950C9404180E9408 +:103010008B230E94DC090E9411240C94C0285F922B +:103020006F927F928F929F92AF92BF92CF92DF92D8 +:10303000EF92FF920F931F93CF93DF9300D000D0B6 +:103040001F92CDB7DEB70E94210A9DE9C92E92E0FA +:10305000D92E03E010E0AA24A394B12C502E802F87 +:103060000E949C0A4C01F601729062906F016826E2 +:10307000792661147104A1F40150110978F78FEFDA +:1030800089838A831B820E9494238160782F9D8389 +:103090008C8349815A816B818D810E94BF1838C011 +:1030A0008091F20281FD0E94A50A2BE030E07501BB +:1030B000022E02C0EE0CFF1C0A94E2F7C701862123 +:1030C0009721892B09F129835A828E209F2091E034 +:1030D000892809F490E09B830E9494238160782FD3 +:1030E0009D838C8349815A816B818D810E94BF1899 +:1030F000000F111FF801EB56FD4F80819181E826EA +:10310000F926F182E08204C02150310980F6B4CF63 +:103110000E94F825109194020E94B6171817D1F05A +:103120000E94B617809394020F900F900F900F900B +:103130000F90DF91CF911F910F91FF90EF90DF9053 +:10314000CF90BF90AF909F908F907F906F905F9047 +:103150000C94C6090F900F900F900F900F90DF9175 +:10316000CF911F910F91FF90EF90DF90CF90BF9084 +:10317000AF909F908F907F906F905F900895CF93C6 +:10318000DF93CDB7DEB72B970FB6F894DEBF0FBE37 +:10319000CDBF4F83588769877A878B87DE01119669 +:1031A00086E0FD0111928A95E9F785E0FE013796E8 +:1031B00001900D928A95E1F749815A816B817C815A +:1031C0008D819E810E94361F2B960FB6F894DEBF2C +:1031D0000FBECDBFDF91CF910895CF93882309F41F +:1031E000C2C0C82F823859F40E94B61781FDBBC0F7 +:1031F00089E30E9410220E94DD2289E30CC08338FB +:1032000079F40E94B61780FDAEC083E50E941022BB +:103210000E94DD2283E50E945222CF910C94DD2290 +:10322000843859F40E94B61782FD9DC087E40E943D +:1032300010220E94DD2287E4EECF8CEF8C0F813AC2 +:1032400048F48C2F0E94282881118DC08C2F0E9459 +:103250001022E3CF80E28C0F883048F4C77081E001 +:1032600001C0880FCA95EAF70E949622D6CF8BE557 +:103270008C0F833078F4C53A29F0C63A31F083E8F0 +:1032800090E005C081E890E002C082E890E0CF9134 +:103290000C94D81788E58C0F833108F064C0C83AC5 +:1032A00039F1C93A41F1CA3A49F1CB3A51F1CC3A34 +:1032B00059F1CD3A61F1C03B69F1CE3A71F1CF3AA3 +:1032C00079F1C13B81F1C23B89F1C33B91F1C43B30 +:1032D00099F1C53BA1F1C63BA9F1C73BB1F1C83B90 +:1032E000B9F1C93BC1F1CA3BC9F180E090E038C0F7 +:1032F00082EE90E035C089EE90E032C08AEE90E038 +:103300002FC085EB90E02CC086EB90E029C087EBC6 +:1033100090E026C08CEC90E023C08DEC90E020C0C3 +:1033200083E891E01DC08AE891E01AC082E991E04B +:1033300017C084E991E014C081E292E011C083E2F9 +:1033400092E00EC084E292E00BC085E292E008C0F9 +:1033500086E292E005C087E292E002C08AE292E053 +:10336000CF910C94EE17CF910895882309F44BC0A8 +:10337000823859F40E94B61781FF45C089E30E9444 +:1033800010220E94DD2289E30CC0833871F40E9470 +:10339000B61780FF38C083E50E9410220E94DD220C +:1033A00083E50E9452220C94DD22843859F40E9455 +:1033B000B61782FF28C087E40E9410220E94DD22F7 +:1033C00087E4EFCF9CEF980F913A58F390E2980F73 +:1033D000983050F4877091E001C0990F8A95EAF710 +:1033E000892F0E949C22DFCF9BE5980F933020F419 +:1033F00080E090E00C94D817885A833120F480E064 +:1034000090E00C94EE170895882321F00E949622F4 +:103410000C94DD220895882321F00E949C220C94B4 +:10342000DD2208957F928F929F92AF92BF92CF92AA +:10343000DF92EF92FF920F931F93CF93DF931F9230 +:10344000CDB7DEB77C01C62E772EFC010581029533 +:103450000F70128111110E94B3220E940922882349 +:1034600079F0112369F080E28C0D883048F082E019 +:103470000E94F2210E94092291E0D82ED92601C093 +:10348000D12CE72DE295EF70F0E0E05AFF4F0C945D +:10349000512D872D807F072D0F70882311F0029505 +:1034A000007F112389F0002309F499C180E28C0D7B +:1034B000883020F4802F0E94962203C0802F0E9423 +:1034C000A6220E94DD228BC18C2D0E94B5190023FB +:1034D00009F4C3C180E28C0D883020F4802F0E9453 +:1034E0009C2203C0802F0E94AC220E94DD22B5C125 +:1034F000872D807F972D9F70803211F4892F03C014 +:10350000892F8295807FCC2021F0F1E0CF16A1F0A9 +:103510001DC0112339F0002319F1013009F50E9473 +:10352000C6229BC1002319F0013009F496C189839A +:103530000E94C922898110C1112321F0063008F0B0 +:103540008CC10EC0053008F088C106C1112359F0A6 +:10355000002331F0F701958190FF41C19F70958361 +:103560000E94041A7AC1002309F4F6C03EC1872DD7 +:1035700086958695837090E0009719F0019761F029 +:103580006CC1112321F08C2D972D937002C080E027 +:1035900090E00E94D81761C1112321F08C2D972D46 +:1035A000937002C080E090E00E94EE1756C18C2D0F +:1035B000112319F00E94002502C00E9468250E9474 +:1035C000ED254BC1872D837009F052C0111145C103 +:1035D0008C2D829586958770880F880F9C2D9F7003 +:1035E000892E912CA12CB12C082E04C0880C991C7A +:1035F000AA1CBB1C0A94D2F7C4FE14C00FE010E052 +:1036000020E030E0B901A80104C0440F551F661F37 +:10361000771F8A95D2F7CB01BA0160957095809596 +:10362000909503C060E070E0CB01272D269526958C +:10363000237030E02230310569F02330310589F004 +:10364000682979298A299B292130310571F00E9446 +:103650007E2003C1682979298A299B290E949A2002 +:10366000FCC00E947E20C501B4010E946220F5C00A +:10367000112319F0872D817001C08695882309F4E4 +:10368000ECC08C2D829586958770880F880F9C2DB5 +:103690009F70892E912CA12CB12C082E04C0880C6F +:1036A000991CAA1CBB1C0A94D2F7C4FE14C00FE0DC +:1036B00010E020E030E0B901A80104C0440F551F1C +:1036C000661F771F8A95D2F7CB01BA016095709576 +:1036D0008095909503C060E070E0CB01272D269582 +:1036E00026952370422F50E04230510569F0433057 +:1036F000510589F0682979298A299B29413051058A +:1037000071F00E945821A9C0682979298A299B292A +:103710000E947421A2C00E945821C501B4010E94D8 +:103720003C219BC08C2D90E0FC01E05EF109E5316D +:10373000F10508F050C0E059FF4F0C94512D0C2DAD +:103740000F70872D8F71112321F00E94D520802FBB +:1037500007CF0E94F620802F0E940B1A7EC01123F3 +:1037600041F0053008F079C0872D8F710E941B2130 +:1037700074C0063008F071C0F7CF112339F0872DDF +:103780008F710E94D52069C01123C9F3872D8F71D5 +:103790000E94F62062C0112329F0872D8F710E94AC +:1037A000C0205BC00E94B62058C0112351F0172DD5 +:1037B0001F71812F0E94D52063E0812F0E94E92193 +:1037C0004CC081E00E94F221023008F446C082E041 +:1037D0000E94F22142C0112331F0002381F28C2D8E +:1037E0000E94ED183AC0002389F28C2D0E94B51971 +:1037F00034C0472D4F706C2DC7010E941B040E94DE +:10380000DA1F2BC0111129C0472D4F7050E04230F4 +:103810005105B9F04CF44115510581F04130510585 +:10382000E1F40E94E82819C04330510569F04430A2 +:10383000510599F48C2D0E943A290FC00E94D1287D +:103840000CC00E94042909C00E94172906C0472DF8 +:103850004F706C2DC7010E94A706DD20F9F00E9471 +:10386000E52180FD1BC0F70112820E94DF210E942A +:10387000D520C7010E945D1C0E94DF210F90DF91BF +:10388000CF911F910F91FF90EF90DF90CF90BF905D +:10389000AF909F908F907F900C94F6200F90DF91C7 +:1038A000CF911F910F91FF90EF90DF90CF90BF903D +:1038B000AF909F908F907F9008950F931F93CF9319 +:1038C000DF93EC01888199812B813C81232BB9F016 +:1038D0009F3F11F48F3F99F0CE010E94A6048823E8 +:1038E00071F0688179818A810E94DB218C010E94BC +:1038F00090210E945720B801CE010E94121ADF9138 +:10390000CF911F910F9108950E94B3220E94C3226C +:103910000E9488220E94DD220E949E260E94ED25A0 +:1039200080E090E00E94D81780E090E00C94EE17C1 +:103930000E94A3220C94841C0E94D021292F22953E +:103940002F7030E02C3031054CF42A3031056CF406 +:103950002250310922303105A8F407C02C3031053E +:1039600069F02F30310551F00DC0803F69F018F437 +:10397000803E40F409C0843F29F406C093FB8827A9 +:1039800080F9089580E0089581E00895CF93DF9352 +:1039900000D000D01F92CDB7DEB70F900F900F90E0 +:1039A0000F900F90DF91CF910895CF93DF9300D0C8 +:1039B00000D000D0CDB7DEB726960FB6F894DEBFA4 +:1039C0000FBECDBFDF91CF9108951F93CF93DF93AB +:1039D000C0919D0216E080919E02C81799F0D0E038 +:1039E0001C9FF0011D9FF00D1124E156FD4F4081F9 +:1039F000518162817381848195810E94D51C2196B9 +:103A0000C770E9CFDF91CF911F9108954091CF0208 +:103A10005091D0026091D1027091D2028091D30274 +:103A20009091D4020C94D51C8091D40282958F7011 +:103A300009F054C08091D102882309F44FC08091CD +:103A40009D02A0919E026091CF027091D0024091A0 +:103A5000D2025091D302B6E08A1709F43FC090E039 +:103A600041155105C1F17F3F11F46F3FA1F1B89F9E +:103A7000F001B99FF00D1124E156FD4F2181721321 +:103A80002AC02081621327C02281211124C02381F2 +:103A900034812417350710F421503109241B350BCC +:103AA000283C3105C0F42091D4022F70206120936E +:103AB000D40226E0289FF001299FF00D1124EC5537 +:103AC000FD4F80818F70806180838FEC92E00E9437 +:103AD0005D1C0C94E51C01968770BECF0895CF92B3 +:103AE000DF92EF92FF920F931F93CF93DF93CDB7A7 +:103AF000DEB762970FB6F894DEBF0FBECDBF8C0164 +:103B000085E0F801DE011D9601900D928A95E1F79E +:103B1000D8014C9111965C91119712966C91129765 +:103B20001396CD90DC9014973091CF027091D00213 +:103B30008091D2029091D302009709F46BC17F3F2C +:103B400019F43F3F09F466C1E090D102EE2009F478 +:103B5000C0C02091D402C816D90628F0F601E81B8F +:103B6000F90BCF0104C0809590958C0D9D1DFF240D +:103B7000F394883C910578F0F12C207F09F0C6C0C1 +:103B80007C2DD98AC88A89890E94C61C8FEC92E054 +:103B90000E945D1CB1C0822F807F09F046C0751362 +:103BA00014C0341312C0611110C02F702061209313 +:103BB000D4020E94061D8FEC92E00E945D1C809151 +:103BC000D402D80115968C932EC0CD2819F15F3FF1 +:103BD00011F44F3FF9F0F62E61111CC080919D0247 +:103BE00020919E0236E0821709F45AC090E0389F77 +:103BF000F001399FF00D1124E156FD4F71815713EB +:103C000006C07081471303C07281711103C0019611 +:103C10008770E9CFF62E662309F418C18091D4028B +:103C200081608093D402F12C11C1751308C0341344 +:103C300006C0611104C08091D402D801C3C04D8771 +:103C40005E878D859E856A8B0E949C1C6A8988236D +:103C5000E1F16623D1F12091D402822F82958F70F9 +:103C600090E0029774F08091CF029091D0029887F3 +:103C70008F831986DB86CA862C87CE0107960E9421 +:103C80005D1C86E0F801AFECB2E001900D928A95E0 +:103C9000E1F70E94141D0E94061DFF24F394D6C074 +:103CA0004D875E878D859E850E94D021292F229584 +:103CB0002F7030E0223031050CF0BCC09F7009F04D +:103CC000B6C0805E883008F4C1C0C8010E945D1C87 +:103CD000E4CFC816D90608F453C0F601E81BF90B67 +:103CE000CF01883C910508F450C0F12C7C2DD98A75 +:103CF000C88A89890E94C61CEFECF2E086E0DF01E9 +:103D00001D928A95E9F70E94061DA0C0751314C084 +:103D1000341312C0611110C08091D402F801858360 +:103D2000C8010E945D1C86E0EFECF2E0DF011D920D +:103D30008A95E9F7FE2C8AC04D875E878D859E8522 +:103D40006A8B0E949C1C6A89882309F4BECF662373 +:103D500009F4BBCF2091D402822F82958F7090E01E +:103D600002970CF48ECF8091CF029091D0029A836B +:103D700089831B82DD82CC822E83CE0101967FCF88 +:103D8000809590958C0D9D1DACCFF62E662309F481 +:103D90009CCF75132EC034132CC02091D40220FD6B +:103DA0001FC0822F82958F70D9F0D80115962C9361 +:103DB00015978F3049F08F5F982F9295907F822FC3 +:103DC0008F70892B15968C93C8010E945D1C86E02C +:103DD000F801AFECB2E001900D928A95E1F793CF34 +:103DE00086E0F801AFECB2E001900D928A95E1F720 +:103DF0002DC04D875E878D859E850E949C1C8111FC +:103E000040CF8091D40281608093D402C8010E9487 +:103E10005D1C1CC0662309F458CF4D875E878D85D5 +:103E20009E850E949C1C882309F44FCF2ACF8111C4 +:103E300048CF0CC0243031050CF047CF9F7009F4F7 +:103E400040CFF8019581907F09F03BCF8F2D62968E +:103E50000FB6F894DEBF0FBECDBFDF91CF911F919B +:103E60000F91FF90EF90DF90CF9008951F93CF9325 +:103E7000DF93CDB7DEB72C970FB6F894DEBF0FBE39 +:103E8000CDBF4F83588769877A878B879C87CE0100 +:103E900007960E946F1D882369F08F8198852A8577 +:103EA0003B85232BF1F19F3F09F063C08F3F09F061 +:103EB00060C037C086E0FE013796DE0111960190A2 +:103EC0000D928A95E1F76F817885EA85FB853097B9 +:103ED00041F17F3F11F46F3F21F120919E0230E0CC +:103EE000C90101968770992740919D0250E084177F +:103EF000950709F447C069837A83FD83EC8396E0D4 +:103F0000929FD001939FB00D1124A156BD4FFE0189 +:103F1000319601900D929A95E1F780939E020E944E +:103F2000E51C16E080919D0290919E028917C1F1D7 +:103F3000189FC001112481569D4F0E946F1D882338 +:103F400079F1E0919D021E9FF0011124E156FD4F91 +:103F50004081518162817381848195810E94D51C49 +:103F600080919D0290E001968770992780939D0231 +:103F7000D9CF4F81588569857A858B859C850E942C +:103F8000D51CCFCF0E94981C10929E0210929D02C9 +:103F9000EFECF2E086E0DF011D928A95E9F7C1CFF0 +:103FA0002C960FB6F894DEBF0FBECDBFDF91CF9138 +:103FB0001F910895EF92FF920F931F93CF93DF937A +:103FC0008C01009709F46CC0F12CEE24E394E80115 +:103FD0002196F8018491843740F4843008F051C070 +:103FE000813081F0823019F15BC0853709F444C01B +:103FF000A8F19CE7980F903708F052C08F770E9485 +:10400000B51941C00E5F1F4FFE01C49180E28C0FB5 +:10401000883048F4C7708E2D01C0880FCA95EAF722 +:104020000E94B62214C08C2F0E94ED182DC00E5F86 +:104030001F4FFE01C49180E28C0F883058F4C77086 +:104040008E2D01C0880FCA95EAF70E94BC220E94FB +:10405000DD221AC08C2F0E94B51916C00E5F1F4FAB +:10406000FE01C491CC2381F08FE99FE00197F1F725 +:1040700000C00000C150F6CF0E5F1F4FFE01F4904C +:1040800003C00E94ED188E018F2D882309F49FCF65 +:10409000EFE9FFE03197F1F700C000008150F5CF64 +:1040A000DF91CF911F910F91FF90EF9008950895A8 +:1040B0006093D9027093DA028093DB029093DC0262 +:1040C0000C94841C0F931F930091D9021091DA0273 +:1040D0002091DB023091DC02DC01CB01802B912BA3 +:1040E000A22BB32B8093D9029093DA02A093DB0228 +:1040F000B093DC021F910F910C94841C0F931F93BB +:104100000091D9021091DA022091DB023091DC0299 +:10411000DC01CB0180239123A223B3238093D90216 +:104120009093DA02A093DB02B093DC021F910F910F +:104130000C94841C0F931F930091D9021091DA0202 +:104140002091DB023091DC02DC01CB01802791273A +:10415000A227B3278093D9029093DA02A093DB02BF +:10416000B093DC021F910F910C94841C1092D50225 +:104170001092D6021092D7021092D8020C94841C8E +:1041800041E050E060E070E004C0440F551F661F3E +:10419000771F8A95D2F74093D5025093D602609349 +:1041A000D7027093D8020C94841C41E050E060E088 +:1041B00070E004C0440F551F661F771F8A95D2F721 +:1041C0008091D5029091D602A091D702B091D802E9 +:1041D000482B592B6A2B7B2B4093D5025093D60248 +:1041E0006093D7027093D8020C94841C41E050E095 +:1041F00060E070E004C0440F551F661F771F8A956A +:10420000D2F740955095609570958091D502909128 +:10421000D602A091D702B091D802482359236A232D +:104220007B234093D5025093D6026093D7027093BC +:10423000D8020C94841C41E050E060E070E004C0BF +:10424000440F551F661F771F8A95D2F78091D502BC +:104250009091D602A091D702B091D8024827592751 +:104260006A277B274093D5025093D6026093D702EA +:104270007093D8020C94841C0F931F930091D50265 +:104280001091D6022091D7023091D802DC01CB01E7 +:10429000802B912BA22BB32B8093D5029093D60227 +:1042A000A093D702B093D8021F910F910C94841C55 +:1042B0000F931F930091D5021091D6022091D7023F +:1042C0003091D802DC01CB0180239123A223B323B8 +:1042D0008093D5029093D602A093D702B093D802D0 +:1042E0001F910F910C94841C0F931F930091D50282 +:1042F0001091D6022091D7023091D802DC01CB0177 +:1043000080279127A227B3278093D5029093D602C6 +:10431000A093D702B093D8021F910F910C94841CE4 +:104320000895CF92DF92EF92FF920F931F93CF9356 +:10433000DF938C01C090D902D090DA02E090DB02CA +:10434000F090DC028091D5029091D602A091D70224 +:10435000B091D802C82AD92AEA2AFB2ACFE1D0E0B4 +:10436000D701C6010C2E04C0B695A79597958795E1 +:104370000A94D2F780FF06C0B8018C2F0E942C0946 +:10438000019721F4219760F780E001C08C2FDF9125 +:10439000CF911F910F91FF90EF90DF90CF900895F4 +:1043A000CF93DF93EC010E949121BE010E942C0962 +:1043B000DF91CF910895CB010E94D0210895809183 +:1043C000DD0285958595859508958091DD0287703C +:1043D000089598E0899F90011124262B2093DD02F7 +:1043E0000C94D5202091DD02809582238093DD02FC +:1043F000982F977069F430E0482F552747FD509566 +:104400002417350729F08595859585950C94F62018 +:1044100008959091DD02977081E009F480E008959D +:1044200090911501992321F090911601911109C0E5 +:104430002091170130911801F90132969FEF40E069 +:104440001FC0982F9695969596959F3050F5E091C0 +:104450001701F0911801E90FF11D877021E030E09C +:10446000A90102C0440F551F8A95E2F7CA01918144 +:10447000892B818308959F3F39F04F5F4E3041F083 +:1044800051915813F8CF0DC05111F7CF942FF5CF9C +:104490009F3F39F0F901E90FF11D97FDFA958283ED +:1044A0000895089590911501992321F09091160196 +:1044B000911109C02091170130911801F90132962C +:1044C000205F3F4F1FC0982F9695969596959F30E9 +:1044D000F0F4E0911701F0911801E90FF11D8770D8 +:1044E00021E030E0A90102C0440F551F8A95E2F790 +:1044F000CA01809591818923818308953196E217BD +:10450000F30729F090819813F9CF1082F7CF08951F +:1045100081E090E0E0911701F0911801E80FF91F98 +:104520001082019680319105A9F708959091F102CA +:10453000892B8093F102089580959091F10289234F +:104540008093F10208951092F10208959091F00283 +:10455000892B8093F002089580959091F002892331 +:104560008093F00208951092F00208959091EF0266 +:10457000892B8093EF02089580959091EF02892313 +:104580008093EF0208951092EF0208958093DE0267 +:1045900008951092DE0208958091170190911801FC +:1045A000FC0131969C01205F3F4F80E09191911179 +:1045B0008F5FE217F307D1F70895E0911701F091AB +:1045C00018018091F1028083E0911701F0911801A8 +:1045D00090818091F002892B8083E0911701F09106 +:1045E000180190818091EF02892B80838091DE02F7 +:1045F000882361F0E0911701F09118019081892BD7 +:1046000080830E94CC2281111092DE0280911701DA +:10461000909118010C94C21720E0009739F0AC017A +:1046200041505109842395232F5FF7CF822F08959E +:1046300080911303843039F11092F30220E488E171 +:1046400090E00FB6F894A895809360000FBE209379 +:10465000600080E00E94820380E00E94C60983B768 +:10466000817F846083BF83B7816083BF789488959E +:1046700083B78E7F83BF88E10FB6F8948093600084 +:10468000109260000FBE08950895089580E00E9482 +:1046900082030E9444230E94210A0E9445230E9413 +:1046A000A60A91E0811101C090E0892F08950E942F +:1046B000981C80E00E9482030E94C0280E94B617C6 +:1046C0000C94C6091F920F920FB60F9211248F936C +:1046D0009F93AF93BF938091F302811113C0809198 +:1046E000F4029091F502A091F602B091F702419682 +:1046F000A11DB11D8093F4029093F502A093F602E0 +:10470000B093F702BF91AF919F918F910F900FBE21 +:104710000F901F90189582E084BD93E095BD9AEFAD +:1047200097BD80936E0008952FB7F8948091F4029E +:104730009091F502A091F602B091F7022FBF089573 +:10474000CF92DF92EF92FF920F931F932FB7F894BF +:104750004091F4025091F5026091F6027091F702D7 +:104760002FBF6A017B01EE24FF248C0120E030E0A2 +:10477000C016D106E206F30610F4415051099A0121 +:10478000281B390BC9011F910F91FF90EF90DF900B +:10479000CF9008951F920F920FB60F9211248F930E +:1047A0009F93AF93BF938091F4029091F502A091F3 +:1047B000F602B091F7020196A11DB11D8093F4029B +:1047C0009093F502A093F602B093F702BF91AF91D8 +:1047D0009F918F910F900FBE0F901F9018950E9480 +:1047E000B314F8942FEF87EA91E62150804090406F +:1047F000E1F700C0000087E090EBDC0180931E032E +:1048000090931F03A0932003B09321039CE088E1C1 +:104810000FB6F894A895809360000FBE9093600047 +:10482000FFCF0E945024811102C00E942C240E94BC +:104830005B248093F2020E94632480931C0387FB15 +:10484000882780F9809316010E945F24682F70E00A +:1048500080E090E00C9458206DEE7EEF80E090E0D8 +:104860000E94772D60E082E090E00E94652D60E07C +:1048700083E090E00E94652D60E084E090E00E947B +:10488000652D60E085E090E00E94652D60E086E0A7 +:1048900090E00E94652D6FEF87E090E00C94652D0D +:1048A00080E090E00E945F2D21E08D3E9E4F09F058 +:1048B00020E0822F089582E090E00C94572D83E051 +:1048C00090E00C94572D84E090E00C94572D682FC5 +:1048D00084E090E00C94652D86E090E00C94572DD8 +:1048E000682F86E090E00C94652D87E090E00C94B2 +:1048F000572D682F87E090E00C94652D8091FA0287 +:1049000080FF0BC060911C0185E0689FB0011124FD +:1049100075956795759567952BC081FF09C0609166 +:104920001C0185E0689FB00111247595679520C032 +:1049300082FF07C060911C0185E0689FB0011124CF +:1049400017C09091FB029923D1F060911B0196173B +:1049500088F720911C0185E0289F90011124929FE7 +:10496000A001939F500D112470E0CA010E943D2DBB +:104970006038710540F46115710539F002C065E0D9 +:1049800070E0862F08958FE7089581E00895809163 +:10499000FA0280FF08C060911A0170E07595679572 +:1049A0007595679521C081FF06C060911A0170E07E +:1049B0007595679519C082FF04C060911A0170E077 +:1049C00010C09091FB029923C1F0609119019617D4 +:1049D000A0F780911A01899FC001112470E00E9404 +:1049E0003D2D6038710528F46115710521F0862F81 +:1049F00008958FE7089581E0089561E070E0F4CFB5 +:104A0000803F21F40E947E24819504C0813F29F4D7 +:104A10000E947E248093FE020895823F21F40E942A +:104A20007E24819504C0833F29F40E947E248093D4 +:104A3000FD020895893F19F40E94C72405C08A3FEA +:104A400031F40E94C72481958093FF0208958B3F23 +:104A500021F40E94C724819504C08C3F29F40E9450 +:104A6000C724809300030895843F21F48091FC02C1 +:104A7000816017C0853F21F48091FC02826011C0E3 +:104A8000863F21F48091FC0284600BC0873F21F4B3 +:104A90008091FC02886005C0883F31F48091FC025F +:104AA00080618093FC0208958D3F21F48091FA0289 +:104AB00081600BC08E3F21F48091FA02826005C0B4 +:104AC0008F3F29F48091FA0284608093FA0208955E +:104AD000803F39F48091FE0287FF6CC01092FE0285 +:104AE00069C0813F29F48091FE021816BCF362C0B0 +:104AF0009091FD02823F29F497FF5CC01092FD0265 +:104B000059C0833F19F41916CCF354C0893F41F4BE +:104B10008091FF0218160CF04DC01092FF024AC09F +:104B20008A3F29F48091FF0287FF44C0F6CF8B3F74 +:104B300039F48091000387FF3DC0109200033AC012 +:104B40008C3F29F4809100031816BCF333C0843FD6 +:104B500021F48091FC028E7F17C0853F21F4809163 +:104B6000FC028D7F11C0863F21F48091FC028B7F77 +:104B70000BC0873F21F48091FC02877F05C0883FEE +:104B800031F48091FC028F7E8093FC0213C08D3F34 +:104B900021F48091FA028E7F0BC08E3F21F4809128 +:104BA000FA028D7F05C08F3F29F48091FA028B7F36 +:104BB0008093FA028091FD0281110EC08091FE0265 +:104BC00081110AC08091FF02811106C0809100030B +:104BD000811102C01092FB0208958CEF92E00E94B6 +:104BE000CD170E9494239093F9028093F8020895C0 +:104BF0001F93CF93DF938091F8029091F9020E9466 +:104C0000A023AC019091FB02992321F020911D017A +:104C100030E006C020911E018AE0289F90011124F7 +:104C20004217530708F486C08091FD02C091FE022E +:104C3000D091FF0210910003811107C0C11176C00D +:104C4000D11174C0111172C075C09F3F19F09F5FE0 +:104C50009093FB02181624F40E947E248093FD0298 +:104C60008091FD0287FF05C00E947E24819580937C +:104C7000FD021C1624F40E947E248093FE02809183 +:104C8000FE0287FF05C00E947E2481958093FE026C +:104C90006091FD02662339F1C091FE02CC2319F127 +:104CA000772767FD7095872F972F0E945F2A23E350 +:104CB00033E343E35FE30E946F2B0E942C2A60934F +:104CC000FD026C2F772767FD7095872F972F0E9425 +:104CD0005F2A23E333E343E35FE30E946F2B0E94E9 +:104CE0002C2A6093FE021D1624F40E94C724809390 +:104CF000FF028091FF0287FF05C00E94C7248195B3 +:104D00008093FF02111624F40E94C72480930003AD +:104D10008091000387FF05C00E94C724819580937E +:104D20000003DF91CF911F910C94ED259F3F09F077 +:104D30008ECF96CFDF91CF911F910895ECEFF2E0E7 +:104D400085E0DF011D928A95E9F71092FB0210922F +:104D5000FA020895833081F128F4813059F08230CD +:104D6000D1F00895853009F449C0B8F1863009F4CE +:104D700056C0089580911E01262F30E0280F311D66 +:104D80002F3F310524F4680F60931E0108958FEFC3 +:104D900080931E01089580911D01262F30E0280F79 +:104DA000311D2F3F310524F4680F60931D010895D4 +:104DB0008FEF80931D01089580911C01262F30E014 +:104DC000280F311D2F3F310524F4680F60931C011B +:104DD00008958FEF80931C01089580911B01262F69 +:104DE00030E0280F311D2F3F310524F4680F609308 +:104DF0001B0108958FEF80931B01089580911A0184 +:104E0000262F30E0280F311D2F3F310524F4680F85 +:104E100060931A0108958FEF80931A01089580918D +:104E20001901262F30E0280F311D2F3F310524F4C2 +:104E3000680F6093190108958FEF80931901089509 +:104E4000833011F128F4813049F0823091F00895D7 +:104E5000853081F120F18630C1F1089580911E01E5 +:104E6000681720F4861B80931E01089510921E017E +:104E7000089580911D01681720F4861B80931D0101 +:104E8000089510921D01089580911C01681720F467 +:104E9000861B80931C01089510921C010895809137 +:104EA0001B01681720F4861B80931B010895109244 +:104EB0001B01089580911A01681720F4861B8093C6 +:104EC0001A01089510921A01089580911901681726 +:104ED00020F4861B809319010895109219010895FA +:104EE0000F931F93873208F048C08E3108F08DC0B1 +:104EF000803109F477C008F5873009F461C068F49F +:104F0000863009F09DC08091F202817F8E7F809370 +:104F1000F20281E08093020394C08B3009F489C0CF +:104F20008E3009F08DC08091F20282FB222720F999 +:104F300091E0922790FB82F95EC0863109F479C036 +:104F400060F4813109F07CC00E94981C9091160198 +:104F500081E08927809316016CC0893109F469C00A +:104F60008B3109F06DC08091F20281FB222720F97C +:104F700091E0922790FB81F93EC0883309F459C033 +:104F800050F4893209F457C0853309F454C087328C +:104F900009F451C055C0833409F44DC028F48A3354 +:104FA00008F44EC0895332C0883409F049C00E94C9 +:104FB000981C0E94D60A0E949D040E94EF2339C0CB +:104FC0009091F202892F8095817080FB90F929F0F1 +:104FD000966098609093F20234C0997F977F909387 +:104FE000F20227C08091F20283FB222720F991E090 +:104FF000922790FB83F98093F2029923D1F080915C +:10500000F20281608093F20214C08D5141E050E0C1 +:1050100060E070E08A019B0104C0000F111F221F95 +:10502000331F8A95D2F7C901B8010E9458200E9407 +:10503000981C81E006C061E070E080E090E0F5CF70 +:1050400080E01F910F91089580E0089580E0089519 +:10505000CF93C82F80910203813069F018F082301D +:10506000C9F184C0E0911701F0911801808182326A +:1050700009F07EC007C0E0911701F091180180810E +:10508000823261F48C2F0E942428811104C08C2F5D +:105090000E9470271DC081E090E01AC08C2F0E94F2 +:1050A0002628811114C0C43179F048F4CB3079F04E +:1050B000C03109F061C082E08093020308C0C932A8 +:1050C00019F0C83321F058C01092020355C081E096 +:1050D000817054C0C93291F120F5C43179F1B0F436 +:1050E000C73009F047C08EE180931E0182E38093B0 +:1050F0001D018AE080931C0184E180931B0188E0FC +:1051000080931A0188E28093190134C0CE51C630D1 +:1051100088F5EC2FF0E0EA54FE4F80818093010384 +:1051200029C0CE34E9F020F4CB3421F56AE013C075 +:10513000C13579F0C235F1F461E00DC08091010311 +:10514000882319F01092010315C081E080930203B7 +:1051500015C061E006C0809101030E94AA260AC022 +:105160006AE0809101030E94202704C0109202038C +:1051700080E004C081E002C080E0AACFCF91089512 +:105180000E945024811102C00E942C240E946C2491 +:1051900080931D0380FF02C0869501C080E00C94BF +:1051A000820380911D03982F9695292F30E023309C +:1051B00031054CF49F5F990F8170892B816080933A +:1051C0001D030E94702480911D0386950C94820318 +:1051D00080911D03982F969591F09158990F8170A9 +:1051E000892B80931D038E7F91E009F490E08091DC +:1051F0001D0390FB80F980931D030E947024809111 +:105200001D0386950C94820380911D03982F909521 +:1052100090FB80F980931D030E94702480911D03F0 +:1052200080FF02C0869501C080E00C9482039091BB +:105230001D03892F86958F5F8F779170843028F4B6 +:10524000880F892B80931D0302C090931D038091CA +:105250001D038E7F91E009F490E080911D0390FB87 +:1052600080F980931D030E94702480911D03869510 +:105270000C94820320911D03922F96958927982FD5 +:10528000990F822F8170892B80931D038E7F91E06F +:1052900009F490E080911D0390FB80F980931D0339 +:1052A0000E94702480911D0386950C948203809146 +:1052B0001D03869508955058BB27AA270ED0D1C14B +:1052C000C2D130F0C7D120F031F49F3F11F41EF469 +:1052D000B7C10EF4E095E7FB9FC1E92FD3D180F36E +:1052E000BA17620773078407950718F071F49EF5E3 +:1052F000EBC10EF4E0950B2EBA2FA02D0B01B901D6 +:1053000090010C01CA01A0011124FF27591B99F03B +:10531000593F50F4503E68F11A16F040A22F232F47 +:10532000342F4427585FF3CF469537952795A79597 +:10533000F0405395C9F77EF41F16BA0B620B730B3E +:10534000840BBAF09150A1F0FF0FBB1F661F771FAF +:10535000881FC2F70EC0BA0F621F731F841F48F464 +:10536000879577956795B795F7959E3F08F0B3CFEA +:105370009395880F08F09927EE0F979587950895D4 +:1053800027D108F481E008950CD06BC163D140F0BF +:105390005AD130F021F45F3F19F03EC1511195C14F +:1053A0004FC170D198F39923C9F35523B1F3951BDD +:1053B000550BBB27AA2762177307840738F09F5F36 +:1053C0005F4F220F331F441FAA1FA9F333D00E2EA5 +:1053D0003AF0E0E830D091505040E695001CCAF712 +:1053E00029D0FE2F27D0660F771F881FBB1F2617D7 +:1053F00037074807AB07B0E809F0BB0B802DBF01AA +:10540000FF2793585F4F2AF09E3F510568F004C173 +:105410005CC15F3FECF3983EDCF38695779567952A +:10542000B795F7959F5FC9F7880F911D969587955A +:1054300097F90895E1E0660F771F881FBB1F621779 +:1054400073078407BA0720F0621B730B840BBA0B37 +:10545000EE1F88F7E095089504D06894B11135C126 +:10546000089518D188F09F5790F0B92F9927B75118 +:10547000A0F0D1F0660F771F881F991F1AF0BA9518 +:10548000C9F712C0B13081F01FD1B1E008951CC13D +:10549000672F782F8827B85F39F0B93FCCF386950E +:1054A00077956795B395D9F73EF49095809570956B +:1054B00061957F4F8F4F9F4F0895E89409C097FBE8 +:1054C0003EF490958095709561957F4F8F4F9F4FDB +:1054D0009923A9F0F92F96E9BB279395F69587951F +:1054E00077956795B795F111F8CFFAF4BB0F11F4E2 +:1054F00060FF1BC06F5F7F4F8F4F9F4F16C0882389 +:1055000011F096E911C0772321F09EE8872F762FBE +:1055100005C0662371F096E8862F70E060E02AF0FF +:105520009A95660F771F881FDAF7880F96958795EB +:1055300097F9089588D018F011F08CD038F480C015 +:10554000C4C0E92F9FD0B0F35523C9F3E7FB62171E +:10555000730784079507A8F199F3E92FFF2788239C +:105560002AF03197660F771F881FDAF7952F552796 +:10557000442332F091505040220F331F441FD2F782 +:10558000BB27E91BF50B621B730B840BB109C1F23E +:1055900022F4620F731F841FB11D31972AF0660F2A +:1055A000771F881FBB1FEFCF915050405AF041F03A +:1055B000882332F0660F771F881F91505040C1F743 +:1055C000939530C08695779567959F5FD9F7F8CF0B +:1055D000990F0008550FAA0BE0E8FEEF1616170604 +:1055E000E807F907C0F012161306E407F50798F06C +:1055F000621B730B840B950B39F40A2661F0232B85 +:10560000242B252B21F408950A2609F4A140A69500 +:105610008FEF811D811D089597F99F6780E870E0E5 +:1056200060E008959F3F31F0915020F48795779581 +:105630006795B795880F911D9695879597F9089569 +:105640009FEF80EC089500240A941616170618069A +:105650000906089500240A94121613061406050676 +:105660000895092E0394000C11F4882352F0BB0F07 +:1056700040F4BF2B11F460FF04C06F5F7F4F8F4F6A +:105680009F4F089557FD9058440F551F59F05F3FA5 +:1056900071F04795880F97FB991F61F09F3F79F054 +:1056A00087950895121613061406551FF2CF4695D6 +:1056B000F1DF08C0161617061806991FF1CF869558 +:1056C0007105610508940895E894BB27662777273C +:1056D000CB0197F908957CDF08F48FEF08950BD084 +:1056E000C0CFB1DF28F0B6DF18F0952309F094CFD2 +:1056F000A7CF1124EACFC6DFA0F3959FD1F3950F72 +:1057000050E0551F629FF001729FBB27F00DB11D45 +:10571000639FAA27F00DB11DAA1F649F6627B00DD5 +:10572000A11D661F829F2227B00DA11D621F739FBE +:10573000B00DA11D621F839FA00D611D221F749FCC +:105740003327A00D611D231F849F600D211D822F13 +:10575000762F6A2F11249F5750408AF0E1F088235A +:105760004AF0EE0FFF1FBB1F661F771F881F915067 +:105770005040A9F79E3F510570F04ECFA6CF5F3F36 +:10578000ECF3983EDCF3869577956795B795F7959A +:10579000E7959F5FC1F7FE2B880F911D9695879522 +:1057A00097F90895FA01EE0FFF1F30962105310594 +:1057B00099F16115710561F48038BFE39B0749F1E8 +:1057C00068949038810561F08038BFEF9B0741F005 +:1057D000992342F5FF3FE1053105210511F1E894D8 +:1057E0000894E795D901AA2329F4AB2FBE2FF85FBF +:1057F000D0F310C0FF5F70F4A695E0F7F73950F0D2 +:1058000019F0FF3A38F49F779F930CD00F9007FC64 +:10581000905808953EF014CF60E070E080E89FE378 +:1058200008954FE79F775F934F933F932F939ED0B9 +:105830002F913F914F915F9152DF05C019F40EF007 +:10584000EBCE42CFFDCE26DFC8F39638C0F707F87F +:105850000F92E8942BE33AEA48EB5FE74EDF0F92B2 +:105860000F920F924DB75EB70F92C0D0EAE0F1E011 +:1058700016D04F915F91EF91FF91E595EE1FFF1FBD +:1058800049F0FE57E0684427EE0F441FFA95E1F710 +:105890004195550B32D00F9007FE26C00895DF9337 +:1058A000CF931F930F93FF92EF92DF927B018C01B6 +:1058B000689405C0DA2EEF011EDFFE01E894A59181 +:1058C0002591359145915591AEF3EF0106DDFE012D +:1058D0009701A801DA9479F7DF90EF90FF900F918C +:1058E0001F91CF91DF9108959B01AC0160E070E0C2 +:1058F00080E89FE349CD90CE95CECCDEE8F39923A6 +:10590000D9F3940F511DBBF39150504094F059F0CE +:10591000882332F0660F771F881F91505040C1F7DF +:105920009E3F510544F7880F911D9695879597F9ED +:1059300008955F3FACF0983E9CF0BB278695779525 +:105940006795B79508F4B1609395C1F7BB0F58F709 +:1059500011F460FFE8CF6F5F7F4F8F4F9F4FE3CF12 +:10596000B4CE0EF05FCE6CCE689456CE93DEC8F304 +:105970009923D1F3C6F3DF93CF931F930F93FF9235 +:10598000C92FDD2788232AF02197660F771F881FEC +:10599000DAF720E030E040E85FEB9FE3883920F061 +:1059A000803E30F021968F7787DCE2E3F1E003C0A0 +:1059B00083DCEFE5F1E073DF8B01BE01EC01FB2E30 +:1059C0006F5771097595771F880B990B78DD28E162 +:1059D00032E741E35FE38FDEAF2D9801AE01FF9028 +:1059E0000F911F91CF91DF9178DC3BCEFA01DC0162 +:1059F000AA0FBB1F9B01AC01BF5728F422273327F6 +:105A0000442750781FC0B75188F4AB2F0024469527 +:105A100037952795011CA395D2F3002069F0220F3A +:105A2000331F441FB395DAF30DD045CC61307105B7 +:105A3000A0E88A07B94630F49B01AC0166277727B6 +:105A400088279078309621F02083318342835383D6 +:105A50000895AA1BBB1B51E107C0AA1FBB1FA617B5 +:105A6000B70710F0A61BB70B881F991F5A95A9F707 +:105A700080959095BC01CD01089597FB072E16F4F3 +:105A8000009407D077FD09D00E94292D07FC05D08E +:105A90003EF4909581959F4F0895709561957F4F45 +:105AA0000895EE0FFF1F0590F491E02D0994F999E8 +:105AB000FECF92BD81BDF89A992780B50895A8E1DF +:105AC000B0E042E050E00C947F2D262FF999FECFF4 +:105AD00092BD81BDF89A019700B4021639F01FBA41 +:105AE00020BD0FB6F894FA9AF99A0FBE0895019660 +:105AF000272F0E94662D0C94652DDC01CB01FC0143 +:105B0000F999FECF06C0F2BDE1BDF89A319600B416 +:0E5B10000D9241505040B8F70895F894FFCF21 +:105B1E00640007000CFF0000003F64BA1048112516 +:105B2E0011F110BD100101DF022808140A321E0007 +:105B3E0002040507090B0C0E1011131517181A1C69 +:105B4E001D1F2123242628292B2D2F3032343537A3 +:105B5E00393B1F0F03764F5F6F7F496943790959B0 +:105B6E0053633149803F5D8B803FF8BF803FCAE170 +:105B7E00803F73ED803FCAE1803FF8BF803F5D8B71 +:105B8E00803F3149803F0000803FF16D7F3F75EAD5 +:105B9E007E3F4C827E3F833F7E3F84287E3F833F05 +:105BAE007E3F4C827E3F75EA7E3FF16D7F3F000067 +:105BBE00803F3F4D36390F06C2058C055305E6046E +:105BCE00FF04180531050102030405060708090044 +:00000001FF diff --git a/keyboard/planck/keymaps/lukas/compiled.hex b/keyboard/planck/keymaps/lukas/compiled.hex new file mode 100644 index 0000000000..2cd3bc5228 --- /dev/null +++ b/keyboard/planck/keymaps/lukas/compiled.hex @@ -0,0 +1,1446 @@ +:100000000C9461020C94A5020C94A5020C94A50218 +:100010000C94A5020C94A5020C94A5020C94A502C4 +:100020000C94A5020C94A5020C9467140C94391539 +:100030000C949B220C94A5020C94A5020C94A5028E +:100040000C94A5020C9407030C94A5020C94A50231 +:100050000C94A5020C9403230C94A5020C94A50205 +:100060000C94A5020C94A5020C94A5020C94A50274 +:100070000C94A5020C94A5020C94A5020C94A50264 +:100080000C94DC0A0C94A5020C94A5020C94A50215 +:100090000C94A5020C94A5020C94A5020C94A50244 +:1000A0000C94A5020C94A5020C94A502A615C815E3 +:1000B000B616C815B6160D163016B616851698164D +:1000C00082198219B119B119F019101A661B661B31 +:1000D0001B1A661BCB1ACB1A321B3B1B661B601B01 +:1000E000D81AD81AD81AD81AD81AD81AD81AD81A80 +:1000F000D81AD81AD81AD81AD81AD81AD81AD81A70 +:10010000E81AF61AFD1A041B0E1B07634236B79B4A +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000002B001400ED +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A00290004001600070009000A0075 +:1001F0000B000D000E000F0033003400E1001D0065 +:100200001B00060019000500110010003600370021 +:1002100038002800E000E200E300013001522C0029 +:100220002C0002525000510052004F0035021E02B5 +:100230001F0220022102220223022402250226029A +:1002400027022A0001000100010001000100010055 +:1002500001002D022E022F023002310201000100A6 +:1002600001000100010001000100010001002F0058 +:100270003000010001000100010001000100010047 +:1002800001000100010001000100010035001E0015 +:100290001F0020002100220023002400250026004A +:1002A00027004C00010001000100010001000100D5 +:1002B00001002D002E002F00300031000100010050 +:1002C0000100010001000100010001000100010026 +:1002D0000100010001000100010001000100010016 +:1002E0000100010001000100010001002803540089 +:1002F00068006500200050006C0061006E00630023 +:100300006B0020004B006500790062006F00610007 +:100310007200640000002C034F007200740068003B +:100320006F006C0069006E006500610072002000C3 +:100330004B006500790062006F006100720064008C +:10034000730000000403090409026D00040100A009 +:10035000FA09040000010301010009211101000153 +:10036000223F000705810308000A09040100010378 +:10037000010200092111010001224D00070582033D +:1003800008000A090402000103000000092111010C +:1003900000012236000705830308000A0904030050 +:1003A00001030000000921110100012239000705A5 +:1003B00084031000011201100100000008EDFE602E +:1003C0006001000102000105010906A101050719EC +:1003D000E029E71500250195087501810205081936 +:1003E0000129059505750191029501750391010596 +:1003F000071900297715002501957875018102C03C +:1004000005010980A101850216010026B7001A0125 +:10041000002AB700751095018100C0050C0901A1E3 +:10042000018503160100269C021A01002A9C027510 +:100430001095018100C005010902A1010901A10077 +:100440000509190129051500250195057501810288 +:100450009501750381010501093009311581257F59 +:1004600095027508810609381581257F9501750863 +:100470008106050C0A38021581257F9501750881D2 +:1004800006C0C005010906A101050719E029E71505 +:100490000025019508750181029501750881010506 +:1004A00008190129059505750191029501750391BA +:1004B000010507190029FF150025FF95067508811C +:1004C00000C011241FBECFEFDAE0DEBFCDBF04B6FF +:1004D00003FE24C080911E0390911F03A09120036E +:1004E000B09121038730904BA740B04BB9F41092E4 +:1004F0001E0310921F03109220031092210314BEBA +:1005000084B7877F84BF88E10FB6F894809360003A +:10051000109260000FBEE0E0F8E3099511E0A0E062 +:10052000B1E0E0E9F9E502C005900D92A03CB10709 +:10053000D9F713E0A0ECB1E001C01D92AE31B107D4 +:10054000E1F70E94AD110C94C62C0C9400000895A4 +:10055000089581E0089508950C94A8020C94A902CE +:100560000C94AB020E94902823E030E0281B310954 +:10057000220F2093C4010895282F2F988091800086 +:10058000211108C0877F8093800010928D00109207 +:100590008C001BC0886080938000233019F48FEF9B +:1005A0009FEF0FC083E090E0821B9109880F991F95 +:1005B0002FEF3FEFA90102C0569547958A95E2F7C4 +:1005C000CA0190938D0080938C000C94B2020E941B +:1005D000B20284E08093C3011092C0010895279A6B +:1005E0002F988FEF9FEF90938700809386008AE08B +:1005F0008093800089E1809381000E94F9270C9408 +:10060000E7020E94EF026E9A769A0C94A7021F925C +:100610000F920FB60F9211242F933F938F939F93B6 +:10062000EF93FF93E091C101F091C201CF010196D8 +:100630009093C2018093C1010090C30102C0F6955E +:10064000E7950A94E2F7EF738091C001823019F4C4 +:10065000E03251F404C0813039F4EF3329F4809151 +:100660006F008D7F80936F00F0E0E457FE4FE491C0 +:1006700021E031E0E29FC001E39F900D1124009042 +:10068000C40102C0969587950A94E2F790938D0075 +:1006900080938C00FF91EF919F918F913F912F91CB +:1006A0000F900FBE0F901F901895662319F06130C0 +:1006B00079F01FC0FC018281882331F085EE0E9411 +:1006C00026180E94502815C085EE0E94EE1811C011 +:1006D000FC018281882339F083EE0E94261882E093 +:1006E0000E940E2006C083EE0E94EE1882E00E9457 +:1006F0002F2080E090E0089581E008950C947C0321 +:1007000008950C94010380911502882309F448C0D0 +:100710008091D1019091D201009779F40E94CD226D +:100720009093D2018093D1018091D30190E0009702 +:1007300071F48091D40190E00AC00E94D9222091E6 +:100740000001309101012817390740F329C00197B2 +:10075000880F991F880F991FFC01EB52FE4F608193 +:100760007181828193810E94420AE091D30184E0E9 +:10077000E89FF0011124EB52FE4F6081718182816C +:1007800093814FE050E00E94FA0D8091D30190E0F8 +:1007900001966091D40170E00E94762C8093D30181 +:1007A0000C94AC02109217020C940F0A089508954D +:1007B00081E0809317020C94D703089508958F92D7 +:1007C0009F92AF92BF92EF92FF920F931F93CF939E +:1007D000DF93CDB7DEB7A3970FB6F894DEBF0FBE99 +:1007E000CDBF7C01FC0100811181C8010E94CA209B +:1007F000B8010E94E1058C01B7010E947E038823A5 +:1008000009F4CCC10032F0E51F0741F4F701828101 +:10081000882309F458C00E945E0EC0C10132F0E581 +:100820001F0741F4F7018281882309F44CC00E941C +:10083000670EB4C10232F0E51F0751F4F70182815F +:10084000882309F440C00E945A0E8111F0CFE3CFF3 +:100850000332F0E51F0739F4F7018281882399F10B +:100860000E94D8039BC10432F0E51F0739F4F70159 +:100870008281882341F10E94D20390C10532F0E5C4 +:100880001F0749F4F70182818823E9F0809117025C +:100890008111F1CFE5CF0632F0E51F0739F4F701FA +:1008A0008281882381F00E946E0E0AC00732F0E533 +:1008B0001F0749F4F7018281882329F00E94790EED +:1008C0000E94DE036BC180911702811105C0F70100 +:1008D00082818111CFC018C1003E110579F4F70162 +:1008E0008281882309F44DC00E940F0A81E0809321 +:1008F0001602109215021092D40150C1023E110549 +:1009000059F4F70182818823E1F10E940F0A1092C5 +:1009100016021092150242C1033E110591F4F7012F +:100920008281882371F10E940F0A1092160281E0E1 +:10093000809315021092D3011092D2011092D1012E +:100940002DC10235110559F4F7018281882309F47C +:1009500025C180910001909101010A970DC00135D8 +:10096000110579F4F7018281882309F417C1809178 +:100970000001909101010A9690930101809300017A +:100980000DC14091040183E2EFE1F1E0DE01119637 +:1009900001900D928A95E1F7F701808121E030E026 +:1009A0002C0F3D1F280F311DC901209102013091EC +:1009B0000301FC01E20FF31F6081772767FD70954B +:1009C000640F711D882777FD8095982F0E949829C4 +:1009D00020E030E040E451E40E94FD284B015C013E +:1009E000F701218184E090E0821B9109BC018827F6 +:1009F00077FD8095982F0E9498299B01AC01C50135 +:100A0000B4010E9495289B01AC0160E070E080E099 +:100A100090E40E940B2B20E030E04CED50E40E946B +:100A2000A82A4B015C01F70182818823D1F04FE0B5 +:100A300050E0C501B4010E94FA0D8091160288238E +:100A4000A1F08091D40124E0829FF0011124EB52A7 +:100A5000FE4F80829182A282B3828F5F8093D40105 +:100A600004C0C501B4010E94420A0F3F110508F0FD +:100A70002ECF94C08091D00181111FC0043130E588 +:100A8000130709F051C00E94800381E08093D001D8 +:100A90000E94CD229093CF018093CE011092C70186 +:100AA0001092C9011092C8011092CB011092CA0194 +:100AB0001092CD011092CC0171C08091CE01909125 +:100AC000CF010E94D922883C910570F48091C70122 +:100AD000E82FF0E0EE0FFF1FE853FE4F1183008375 +:100AE0008F5F8093C7015AC0043880E5180721F052 +:100AF0000538104501F13AC0F7018281882341F0A1 +:100B00001092C50182E01EC0043830E5130759F584 +:100B10008091C501811106C086E20E94261886E2F6 +:100B20000E94EE1882E01CC00438F0E51F0741F374 +:100B300005381045D9F4F7018281882331F01092ED +:100B4000C60180E20E943D1929C08091C601811131 +:100B500006C087E20E94261887E20E94EE1880E213 +:100B60000E9444191BC00538104529F381E0809389 +:100B7000C5018093C601C701A3960FB6F894DEBFE6 +:100B80000FBECDBFDF91CF911F910F91FF90EF90DE +:100B9000BF90AF909F908F900C94AE0280E0A39690 +:100BA0000FB6F894DEBF0FBECDBFDF91CF911F917E +:100BB0000F91FF90EF90BF90AF909F908F9008950E +:100BC00008959CE0799FF001112490E3899FE00D46 +:100BD000F11D1124E60FF11DEE0FFF1FE453FE4F30 +:100BE000859194910895880F991FFC01E45BFF4F54 +:100BF000859194910895880F991FFC01E453FE4F4D +:100C00008591949108950F931F93CF93DF93EC01F7 +:100C1000811521E39207A0F5C11580E3D80708F0FC +:100C2000D7C0C83ED105D8F4C03ED10508F007C2F0 +:100C3000C83AD10578F4C53AD10508F06AC0C13088 +:100C4000D10509F463C008F4F7C1C430D10508F038 +:100C5000F6C1F2C1CB3BD10508F466C0EDC1C115A8 +:100C600090E2D90708F0AFC0C11521E0D20708F023 +:100C7000E6C1C03FD10508F4DFC18E0110651FC277 +:100C8000C03880E5D80700F5C03790E5D90708F0EF +:100C9000A3C0C11520E5D20709F4ACC050F4CE01C1 +:100CA000905480319F4008F0C7C1DF708E01106AF8 +:100CB00006C2C13080E5D80709F4AEC0C43190E562 +:100CC000D90708F4AFC0B8C1C33820E5D20709F48A +:100CD0008EC050F4C13890E5D90709F482C008F0FD +:100CE00083C000E011EDEBC1C03181E5D80708F405 +:100CF000A3C1C11597E5D90708F436C1CE019057B5 +:100D00008115904108F098C1DF7093C101E010E0B7 +:100D1000D6C1C53AD10509F494C1C63AD10509F046 +:100D200093C102E810E4CBC1C83AD10509F48FC1E0 +:100D3000C93AD10509F48EC1CA3AD10509F48DC169 +:100D4000CB3AD10509F48CC1CC3AD10509F48BC159 +:100D5000CD3AD10509F48AC1C03BD10509F489C156 +:100D6000CE3AD10509F488C1CF3AD10509F487C13B +:100D7000C13BD10509F486C1C23BD10509F485C147 +:100D8000C33BD10509F484C1C43BD10509F483C137 +:100D9000C53BD10509F482C1C63BD10509F481C127 +:100DA000C73BD10509F480C1C83BD10509F47FC117 +:100DB000C93BD10509F47EC1CA3BD10509F47DC107 +:100DC00000E014E47CC1CE019F700E94FB0578C155 +:100DD000DD278E01106C73C1CF70DD278E01146D7D +:100DE0006EC100E010ED6BC100E012ED68C100E0E3 +:100DF00013ED65C10E94D11B0E940F0A0E94D60309 +:100E00008FEF94E32CE0815090402040E1F700C048 +:100E100000000E94282353C18091F20281608093D8 +:100E2000F2024DC10E948923811102C00E946523F4 +:100E30000E949C2390E090931D0380931C03C2307A +:100E400080E5D80721F480911C03816086C0C430FE +:100E500090E5D90721F480911C0382607EC0C630E2 +:100E600020E5D20721F480911C03846076C0C8304D +:100E700080E5D80719F480911C0327C0CA3090E59B +:100E8000D90721F480911C03806167C0CC3020E534 +:100E9000D20721F480911C0380625FC0CE3080E5D0 +:100EA000D80721F480911C03806457C0C03190E5BD +:100EB000D90721F480911C0380684FC0C23120E51E +:100EC000D20729F480911C038460886046C0C33037 +:100ED00080E5D80721F480911C038E7F3EC0C53089 +:100EE00090E5D90721F480911C038D7F36C0C7306F +:100EF00020E5D20721F480911C038B7F2EC0C930DE +:100F000080E5D80719F480911C0326C0CB3090E50A +:100F1000D90721F480911C038F7E1FC0CD3020E5BE +:100F2000D20721F480911C038F7D17C0CF3080E55C +:100F3000D80721F480911C038F7B0FC0C13190E54D +:100F4000D90721F480911C038F7707C0C331D045A6 +:100F500031F480911C038B7F877F80931C038091E9 +:100F60001C030E94A023ABC08D2F99278F70992757 +:100F700081309105D9F49E012370332702C0880F78 +:100F8000991F2A95E2F79C688E0144E0000F111F1B +:100F90004A95E1F700271370802B912B53E0CC0F7B +:100FA000DD1F5A95E1F7C076DD272FC0823091050D +:100FB00031F4DC2FCC278E01016F106A80C08330A2 +:100FC000910569F4CE018370992701E010E002C019 +:100FD000000F111F8A95E2F7C8019C680FC084308A +:100FE0009105B9F4CE018370992701E010E002C0A9 +:100FF000000F111F8A95E2F7C8019A6823E0CC0F11 +:10100000DD1F2A95E1F7C07ED7708C010C2B1D2BBC +:1010100056C08530910531F4DC2FCC278E01046F4A +:10102000106A4DC0069709F04AC0CF71DD27DC2F4A +:10103000CC278E01106243C000E010E040C08E015A +:101040003EC001E810E43BC003E810E438C002EE03 +:1010500014E435C009EE14E432C00AEE14E42FC0E3 +:1010600005EB14E42CC006EB14E429C007EB14E4F0 +:1010700026C00CEC14E423C00DEC14E420C003E8FB +:1010800015E41DC00AE815E41AC002E915E417C00A +:1010900004E915E414C001E216E411C003E216E409 +:1010A0000EC004E216E40BC005E216E408C006E236 +:1010B00016E405C007E216E402C00AE216E4C8011D +:1010C000DF91CF911F910F9108959CE0799FF001DE +:1010D000112490E3899FE00DF11D1124E60FF11D0D +:1010E000EE0FFF1FE453FE4F85919491803E9105D2 +:1010F000E0F4803C910558F58133910509F46FC007 +:1011000048F48932910509F463C08A32910509F4E3 +:101110006DC072C089339105E9F082389105D1F034 +:101120008533910509F44DC067C0833E910581F177 +:1011300038F4803E9105B9F0823E9105D9F05CC04B +:10114000863E910561F1873E9105A1F155C00E944F +:10115000F305089520911C0320FD02C021FF4CC01F +:1011600080EE90E049C080911C0380FFF9CF89E3B5 +:1011700090E042C080911C0382FF0EC080911C034E +:1011800084FF03C080E090E037C083EE90E034C07D +:1011900080911C0382FFF2CF82EE90E02DC08091FF +:1011A0001C0383FF0BC080911C0384FDEBCF87EEF3 +:1011B00090E022C080911C0383FFF5CF86EE90E083 +:1011C0001BC080911C0385FF07C089E290E014C01A +:1011D00080911C0385FFF9CF85E390E00DC08091DD +:1011E0001C0386FF07C08AE290E006C080911C03C2 +:1011F00086FFF9CF81E390E00E94030608950C94E6 +:10120000B002E82FF0E0E25BFE4F8081E82FEF7044 +:10121000F0E082958F7021E030E0A90102C0440F18 +:10122000551F8A95E2F740A308950F931F93CF931C +:10123000DF9385B7806885BF85B7806885BFC3E0C9 +:10124000D0E001E010E0FE01E25BFE4F8081E82F7C +:10125000EF70F0E021A182958F70A80102C0440FC9 +:10126000551F8A95E2F7CA01822B81A38C2F0E9419 +:101270000109219740F78BE090E061E070E0FC010C +:10128000EE5BFE4F2081E22FEF70F0E042A122954D +:101290002F70DB0102C0AA0FBB1F2A95E2F79D0148 +:1012A000242B22A3019758F7DF91CF911F910F9123 +:1012B0000C948103EF92FF920F931F93CF93DF93D0 +:1012C00000E212E0C3E0EE24E394F12CD5E08C2F91 +:1012D0000E9401098BE090E040E050E0FC01EE5BF1 +:1012E000FE4F6081E62FEF70F0E020A130E06295C4 +:1012F0006F7002C0359527956A95E2F720FD09C009 +:101300009701082E02C0220F331F0A94E2F7422BE6 +:10131000532B019718F7F801929182918F0184174E +:10132000950721F051834083D09305018C2F0E94B3 +:101330000109C15060F68091050187FD2CC08150E4 +:10134000809305018F3F39F08FE99FE00197F1F716 +:1013500000C0000020C080911E0290911F02909357 +:1013600027028093260280911C0290911D02909387 +:1013700025028093240280911A0290911B0290937F +:101380002302809322028091180290911902909377 +:101390002102809320020E94830381E0DF91CF919C +:1013A0001F910F91FF90EF900895E82FF0E0EE0F5E +:1013B000FF1FE05EFD4F80819181089508950F9396 +:1013C0001F93CF9308E212E0C0E0F801929182915E +:1013D0008F010E944522C80FF2E000321F07A9F7D3 +:1013E0008C2FCF911F910F9108950E948923811115 +:1013F00002C00E9465230E94AE23809307033E9A99 +:10140000809171008D7F8093710082E080939000C5 +:101410008AE18093910081E080932A02089580916F +:101420002A02811102C00E94F50910927A021092DC +:101430007902809171008D7F80937100809190007E +:101440008F738093900010923C0210923B02109296 +:10145000730210927402109275021092760210922A +:10146000720210927102E1E5F2E0A1E4B2E01192A1 +:101470001192119211921D921D9282E0E137F807AC +:10148000B1F70895CF92DF92EF92FF920F931F93DF +:10149000CF93DF9320913B02222309F484C06B0198 +:1014A0007C0180912A02811102C00E94F50901E7A6 +:1014B00012E0C7E0D0E0A7019601F8019291829175 +:1014C000729162918F010E94F928811131C0FE0151 +:1014D000EE0FFF1FEE0FFF1FEF5AFD4F108211821C +:1014E00012821382DE01AA0FBB1FAF5BBD4F1196A4 +:1014F0001C921E92C730D105E9F021964481558196 +:10150000668177814083518362837383148215825D +:101510001682178212968D919C91139711969C9327 +:101520008E9313961C921E92129734961296E2CFC7 +:10153000219708F68091790290917A02019797FDA0 +:1015400005C090937A028093790204C010927A02C7 +:10155000109279028091790290917A02209177021B +:10156000309178022817390724F0109278021092EF +:101570007702892BC1F4809171008D7F8093710077 +:10158000809190008F73809390001092730210925C +:1015900074021092750210927602109272021092EA +:1015A000710210923B02DF91CF911F910F91FF903A +:1015B000EF90DF90CF9008951F920F920FB60F9289 +:1015C00011244F925F926F927F928F929F92AF926F +:1015D000BF92CF92DF92EF92FF922F933F934F9360 +:1015E0005F936F937F938F939F93AF93BF93CF93AB +:1015F000DF93EF93FF9380913B02882309F49BC113 +:10160000C0917902D0917A021C161D060CF093C18C +:1016100040902B0250902C0260902D0270902E0270 +:1016200020E030E0A901C301B2010E94A42A1816EB +:101630000CF065C0C130D10509F452C08091770229 +:1016400090917802BE010E94762C7C0190937802E2 +:101650008093770280903D0290903E02A0903F02DE +:10166000B090400220E030E040E85FE3C501B40103 +:101670000E94952860933D0270933E0280933F0242 +:1016800090934002F701EE0FFF1FEE0FFF1FEF5A7E +:10169000FD4FA301920160817181828193810E943B +:1016A000FD2820E030E040E05EE30E94A82A9B0194 +:1016B000AC01C501B4010E94A42A18168CF4C7011C +:1016C0000196BE010E94762C909378028093770257 +:1016D00010923D0210923E0210923F021092400280 +:1016E000E0917702F0917802EE0FFF1FEE0FFF1FDF +:1016F000EF5AFD4F6081718182819381D0C0C0908B +:101700007302D0907402E0907502F090760220E0AF +:1017100030E0A901C701B6010E94F928219788236A +:1017200009F4A2C0FE01EE0FFF1FEE0FFF1FEF5ADC +:10173000FD4F80809180A280B380A5019401C701F4 +:10174000B6010E94F92887FF31C0A501940160E02D +:1017500070E08CED93EC0E94FD2820E030E040E446 +:1017600051E40E94FD2820E030E040E05FE30E9469 +:10177000A82A9B01AC0160E070E080E090E40E9448 +:101780000B2B9B01AC01C501B4010E94A82A9B014F +:10179000AC01C701B6010E94F92887FF07C0A70165 +:1017A000960160E070E08CED93E439C0A5019401EE +:1017B000C701B6010E94A42A18160CF055C0A50155 +:1017C000940160E070E08CED93E40E94FD2820E03D +:1017D00030E040E451E40E94FD2820E030E040E0A9 +:1017E0005FE30E94A82A9B01AC0160E070E080E00A +:1017F00090E40E940B2B9B01AC01C501B4010E9437 +:10180000A82A9B01AC01C701B6010E94A42A1816A0 +:101810005CF5A701960160E070E08CED93EC0E940E +:10182000FD2820E030E040E451E40E94FD2820E063 +:1018300030E040E05FE30E94A82A9B01AC0160E039 +:1018400070E080E090E40E940B2B9B01AC01C7018B +:10185000B6010E94A82A6093730270937402809369 +:1018600075029093760213C0FE01EE0FFF1FEE0F7C +:10187000FF1FEF5AFD4F80819181A281B381809338 +:10188000730290937402A0937502B09376026091F4 +:10189000730270917402809175029091760220918A +:1018A0002802309129022F3F4FEF340731F02F5F8C +:1018B0003F4F30932902209328020E94840E6B012F +:1018C0007C0120E034E244EF51E40E94F92887FFD4 +:1018D00008C086EFC82E88E2D82E84EFE82E81E477 +:1018E000F82E20E030E040E051E4C701B6010E944C +:1018F000A82A9B01AC0160E074E284E79BE40E94AB +:10190000FD286B017C010E946A2970939700609307 +:1019100096002091060130910701409108015091F5 +:101920000901C701B6010E94A82A0E946A29709382 +:1019300099006093980080913C02882309F433C198 +:10194000C0903702D0903802E0903902F0903A020D +:1019500020E030E0A901C701B6010E94A42A1816B0 +:10196000D4F580912802909129028F3F2FEF9207A2 +:1019700029F001969093290280932802C701B601AD +:101980000E94840E20E030E040E051E40E94A82A4A +:101990009B01AC0160E074E284E79BE40E94FD28B7 +:1019A0006B017C010E946A297093970060939600F6 +:1019B00020910601309107014091080150910901E1 +:1019C000C701B6010E94A82A0E946A297093990053 +:1019D0006093980008C010929700109296001092A1 +:1019E00099001092980060913102709132026F5FFD +:1019F0007F4F7093320260933102209196003091B4 +:101A0000970080E090E0232BF1F0C0919600D091F8 +:101A100097000E9496296B017C01BE0180E090E056 +:101A20000E9496299B01AC016091330270913402AF +:101A300080913502909136020E94FD2820E03FEF10 +:101A40004FE757E410C00E9496296B017C0120E00B +:101A500030EE4FEF54E46091330270913402809184 +:101A60003502909136020E94A82A9B01AC01C70161 +:101A7000B6010E94A42A87FD96C080912F028F5F35 +:101A800080932F0290E0209103033091040382178A +:101A90009307A0F080910E03882319F010922F0273 +:101AA0000DC0809171008D7F8093710080919000B6 +:101AB0008F738093900010923C027DC08091300221 +:101AC000C0912F02811128C0C0900803D090090353 +:101AD000E0900A03F0900B0320E030E0A901C70179 +:101AE000B6010E94A42A1816BCF481E0809330024B +:101AF00010923702109238021092390210923A0274 +:101B0000C0923302D0923402E0923502F092360253 +:101B1000C150C0932F0243C010923002109229028C +:101B200010922802E0910503F091060348E0C49F5B +:101B3000E00DF11D112480819181A281B3818093F8 +:101B4000370290933802A0933902B0933A0220E012 +:101B500030E040E85EE364817581868197810E9470 +:101B6000A82A6B017C0180910A01682F70E080E057 +:101B700090E00E94962920E030E048EC52E40E9478 +:101B8000FD289B01AC01C701B6010E94A82A609301 +:101B90003302709334028093350290933602109290 +:101BA0003202109231028091070380FD04C010922E +:101BB0003C0210923B02FF91EF91DF91CF91BF91D8 +:101BC000AF919F918F917F916F915F914F913F91D5 +:101BD0002F91FF90EF90DF90CF90BF90AF909F90AC +:101BE0008F907F906F905F904F900F900FBE0F90EF +:101BF0001F901895CF92DF92EF92FF92CF93DF93D1 +:101C00006B017C01EA0180912A02811102C00E94CD +:101C1000F5098091070380FF46C080917902909179 +:101C20007A0208970CF03FC0809171008D7F8093FD +:101C3000710080913C0281110E940F0A81E0809323 +:101C40003B02109229021092280220E030E0A90104 +:101C5000C701B6010E94A42A1816DCF4809179020B +:101C600090917A02FC01EE0FFF1FEE0FFF1FEF5A5B +:101C7000FD4FC082D182E282F382FC01EE0FFF1F92 +:101C8000EF5BFD4FD183C083019690937A028093DE +:101C90007902809171008260809371008091900040 +:101CA000806880939000DF91CF91FF90EF90DF905C +:101CB000CF90089580910703817008958091070364 +:101CC0008160809307030E94B2230C94DD0380910E +:101CD00007038E7F809307030C94B22380917B02CD +:101CE00090E0019666E070E00E94762C80937B0283 +:101CF000089580917B0290E0019766E070E00E9479 +:101D0000762C80937B0208958F929F92AF92BF9220 +:101D1000CF92DF92EF92FF920F931F93CF93DF93B7 +:101D20006B017C01C0912802D0912902BE0180E0A4 +:101D300090E00E9496294B015C01A701960160E0AA +:101D400070E08CE594E40E94FD289B01AC01C50184 +:101D5000B4010E94A82A0E946A2920917B022330A4 +:101D600009F473C028F4222351F02130E9F02CC18A +:101D7000243009F4A0C0253009F4E0C025C180E07A +:101D800090E0A0E0BFE38093060190930701A09349 +:101D90000801B093090110922B0210922C021092AC +:101DA0002D0210922E0210C110922B0210922C02C2 +:101DB00010922D0210922E026431710540F46A30A7 +:101DC000710560F520E030E040E85EE32BC0693C3F +:101DD000710508F0AAC080E090E00E94962920E0FA +:101DE00030E040EA51E40E94942820E030E044E3EF +:101DF00053E40E94FD289B01AC010E94A82A20E028 +:101E000030E040E05EE30E94A82A9B01AC0160E064 +:101E100070E080E09EE30E94942844C020E030E01F +:101E200040E05FE3C701B6010E94A82A6B017C0174 +:101E300080E090E0A0E0BEE380930601909307016C +:101E4000A0930801B0930901BFC010922B02109219 +:101E50002C0210922D0210922E024AE0469F900111 +:101E6000479F300D1124C90168EB7BE00E94622C72 +:101E7000BC016C5D754077FF03C071956195710978 +:101E8000882777FD8095982F0E9498292EE333ECC0 +:101E90004EE259E30E94A82A20E030E040EC5EE3E5 +:101EA0000E949528609306017093070180930801B2 +:101EB0009093090189C010922B0210922C0210926B +:101EC0002D0210922E02CE0183709927892BE1F00A +:101ED000BE016170772780E090E00E94962920E0A3 +:101EE00030E040E05EE30E94A82A20E030E040E4D9 +:101EF0005FE30E9495286093060170930701809329 +:101F00000801909309010CC080E090E0A0E0BFE3DD +:101F10008093060190930701A0930801B0930901F3 +:101F2000C770DD27CD2B09F04FC01092060110922B +:101F30000701109208011092090146C010922B026D +:101F400010922C0210922D0210922E0200E010E04E +:101F500020E03FE30093060110930701209308015E +:101F6000309309016739710578F180E090E00E94B3 +:101F7000962920E030E047E153E40E94942820E0D5 +:101F800030E04AE754E40E94FD2820E030E048E4D5 +:101F900052E40E94A82A20E030E040EA51E40E9486 +:101FA000DA290E946529660F771F660F771FFB01EC +:101FB000EE5AFE4F2081318142815381C701B60123 +:101FC0000E94A82A6B017C01C701B601DF91CF9165 +:101FD0001F910F91FF90EF90DF90CF90BF90AF9047 +:101FE0009F908F90089580918C020895CF93DF93F6 +:101FF00000D01F92CDB7DEB79C01809113038430CF +:1020000019F593E099833B832A839093E9008FEF3E +:102010009091E800815095FD06C095ED9A95F1F7F5 +:1020200000008111F5CF8091E80085FF0DC040E0F0 +:1020300050E063E070E0CE0101960E94571280915B +:10204000E8008E778093E8000F900F900F90DF915B +:10205000CF910895CF93DF9300D01F92CDB7DEB715 +:1020600020911303243021F522E029839B838A8366 +:1020700083E08093E9008FEF9091E800815095FD17 +:1020800006C095ED9A95F1F700008111F5CF80918A +:10209000E80085FF0DC040E050E063E070E0CE0155 +:1020A00001960E9457128091E8008E778093E80095 +:1020B0000F900F900F90DF91CF910895209113030F +:1020C0002430F1F422E02093E9002FEF3091E80072 +:1020D000215035FD06C035ED3A95F1F7000021118C +:1020E000F5CF2091E80025FF0BC040E050E065E00F +:1020F00070E00E9457128091E8008E778093E8008C +:102100000895CF93DF93EC0190911303943009F07D +:1021100046C0809115018823D9F08091160188234B +:10212000B9F09093E9008FEF9091E800815095FD10 +:1021300006C095E19A95F1F700008111F5CF8091E5 +:10214000E80085FF2CC040E050E060E170E017C07F +:1021500081E08093E9008FEF9091E800815095FD38 +:1021600006C095ED9A95F1F700008111F5CF8091A9 +:10217000E80085FF14C040E050E068E070E0CE0168 +:102180000E9457128091E8008E778093E80080E1EA +:10219000FE01ACE7B2E001900D928A95E1F7DF9184 +:1021A000CF91089580911203811109C00E94EC1310 +:1021B0000E9449148091E20084608093E2000895B7 +:1021C000109212030895089508950C94902242E00D +:1021D00061EC81E00E94661342E061EC82E00E94C3 +:1021E000661342E061EC83E00E94661342E161EC19 +:1021F00084E00C94661380911503833009F455C074 +:1022000030F4813071F0823009F48EC008958A3044 +:1022100009F47AC08B3009F460C0893009F09CC0A1 +:1022200020C080911403813A09F096C08091E800A3 +:10223000877F8093E8008091180390911903892B80 +:1022400021F460E18CE792E003C060E080E090E080 +:1022500070E00E94A2128091E8008B778093E800E2 +:10226000089580911403813209F076C0809118039B +:1022700090911903009719F0039709F06DC08091B0 +:10228000E800877F8093E8008091E80082FD05C028 +:10229000809113038111F8CF5FC08091F10080938A +:1022A0008C028091E8008B7753C080911403813AAF +:1022B00009F052C08091180390911903892B09F0FD +:1022C0004BC08091E800877F8093E8008091E80010 +:1022D00080FFFCCF8091150136C0809114038132BC +:1022E000D9F58091180390911903892BA9F5809154 +:1022F000E800877F8093E8000E949B13809116037B +:10230000809315010C94D11B80911403813221F527 +:102310008091E800877F8093E8000E949B13809162 +:10232000170380938D02089580911403813AA1F4DC +:102330008091E800877F8093E8008091E80080FF2B +:10234000FCCF80918D028093F1008091E8008E7720 +:102350008093E8000C949B13089584B7877F84BF13 +:1023600088E10FB6F89480936000109260000FBE71 +:1023700090E080E80FB6F89480936100909361003C +:102380000FBE0E943E170E94EC130E9449148091D8 +:10239000E20084608093E20078940E94CF160E944D +:1023A00040178BE091E00E94EA168091130385307C +:1023B00069F40E945122809111038823B1F30E9495 +:1023C0007F22882391F30E944112EFCF0E94481789 +:1023D000ECCF292F332723303105C9F064F42130A5 +:1023E000310581F02230310509F043C08DE690E0DF +:1023F00028E433E042C021323105F1F022323105C8 +:1024000041F137C082E190E025EB33E036C09927F7 +:102410008130910541F08230910541F0892B49F5D9 +:10242000E4E4F3E005C0E6E1F3E002C0ECEEF2E044 +:10243000849190E09F0121C06430D8F4E62FF0E051 +:10244000EE0FFF1FE255FE4F2081318189E090E0C1 +:1024500014C0643070F470E0FB01EE0FFF1FEA550A +:10246000FE4F20813181FB01EE55FE4F808190E0CF +:1024700004C080E090E020E030E0FA013183208366 +:10248000089580E189BD82E189BD09B400FEFDCFD8 +:102490008091D8008F7D8093D8008091E000826089 +:1024A0008093E0008091E00081FDFCCF0895CF9201 +:1024B000DF92EF92FF920F931F93CF93DF93EC0184 +:1024C0008B016A010E94BA13811133C0C114D10477 +:1024D00039F0F60180819181081B190BC80FD91FB3 +:1024E000E12CF12C0115110519F18091E80085FD11 +:1024F00016C08091E8008E778093E800C114D10463 +:1025000049F0F60180819181E80EF91EF182E082A6 +:1025100085E00FC00E94BA13882321F30AC0899175 +:102520008093F10001501109FFEFEF1AFF0ADACF93 +:1025300080E0DF91CF911F910F91FF90EF90DF909E +:10254000CF90089520911A0330911B032617370767 +:1025500048F06115710539F42091E8002E77209339 +:10256000E80001C0B90140E061157105A9F12091B1 +:102570001303222309F443C0253009F442C02091FB +:10258000E80023FD40C02091E80022FD32C02091E8 +:10259000E80020FFE9CF4091F3002091F20030E005 +:1025A000342BFC01CF016115710559F0283031053C +:1025B00040F481918093F100615071092F5F3F4F8A +:1025C000F1CF41E02830310509F040E02091E800EA +:1025D0002E772093E800C8CF4111C9CF0AC080915F +:1025E0001303882361F0853061F08091E80083FD5A +:1025F0000AC08091E80082FFF2CF80E0089582E077 +:10260000089583E0089581E0089520911A033091A0 +:102610001B032617370748F06115710539F420911F +:10262000E8002E772093E80001C0B901FC0120E00A +:102630006115710591F180911303882309F440C05D +:10264000853009F43FC08091E80083FD3DC0809152 +:10265000E80082FD2FC08091E80080FFE9CF209143 +:10266000F3008091F20090E0922B6115710559F012 +:102670008830910540F424912093F1003196615007 +:1026800071090196F2CF21E0089709F020E08091CE +:10269000E8008E778093E800CBCF2111CCCF0AC021 +:1026A00080911303882361F0853061F08091E80008 +:1026B00083FD0AC08091E80082FFF2CF80E0089598 +:1026C00082E0089583E0089581E00895982F97307F +:1026D00058F59093E900981739F07091EC0020912B +:1026E000ED005091F00003C0242F762F50E021FF21 +:1026F00019C03091EB003E7F3093EB003091ED003C +:102700003D7F3093ED003091EB0031603093EB0072 +:102710007093EC002093ED005093F0002091EE00B8 +:1027200027FF07C09F5FD3CF8F708093E90081E0C0 +:10273000089580E008958091140387FF11C080916F +:10274000E80082FD05C0809113038111F8CF11C00C +:102750008091E8008B770BC080911303882349F0A8 +:102760008091E80080FFF8CF8091E8008E77809319 +:10277000E80008952091E4003091E50095E640914D +:10278000EC00842F817040FF22C08091E80080FD22 +:102790001CC080911303882391F0853091F08091C3 +:1027A000EB0085FD10C04091E4005091E500421718 +:1027B000530729F39A01915011F784E0089582E0BC +:1027C000089583E0089581E0089580E008954091A0 +:1027D000E80042FFDECF08950E945A140E9462145E +:1027E000E0EEF0E0808181608083E8EDF0E08081C0 +:1027F0008F77808319BCA7EDB0E08C918E7F8C938E +:1028000080818F7E80831092120308950F931F930F +:10281000CF93DF930E945A140E946214C8EDD0E057 +:1028200088818F77888388818068888388818F7D7D +:10283000888319BC1092130310920F031092110396 +:102840001092100300EE10E0F80180818B7F8083EE +:1028500088818160888342E060E080E00E946613A6 +:10286000E1EEF0E080818E7F8083E2EEF0E0808117 +:1028700081608083808188608083F80180818E7F81 +:102880008083888180618883DF91CF911F910F9130 +:102890000895E8EDF0E080818F7E8083E7EDF0E041 +:1028A00080818160808384E082BF81E08093120315 +:1028B0000C940614E8EDF0E080818E7F8083109206 +:1028C000E20008951092DA001092E10008951F923C +:1028D0000F920FB60F9211242F933F934F935F9354 +:1028E0006F937F938F939F93AF93BF93EF93FF93D8 +:1028F0008091E10082FF0BC08091E20082FF07C05F +:102900008091E1008B7F8093E1000E94CE16809140 +:10291000DA0080FF1FC08091D80080FF1BC080912B +:10292000DA008E7F8093DA008091D90080FF0DC09D +:1029300080E189BD82E189BD09B400FEFDCF81E05F +:10294000809313030E94D21005C019BC1092130388 +:102950000E94E0108091E10080FF19C08091E200A8 +:1029600080FF15C08091E2008E7F8093E20080910D +:10297000E20080618093E2008091D80080628093C1 +:10298000D80019BC85E0809313030E94E410809165 +:10299000E10084FF30C08091E20084FF2CC080E120 +:1029A00089BD82E189BD09B400FEFDCF8091D800C8 +:1029B0008F7D8093D8008091E1008F7E8093E1002D +:1029C0008091E2008F7E8093E2008091E20081603E +:1029D0008093E20080910F03882311F084E007C008 +:1029E0008091E30087FD02C081E001C083E0809315 +:1029F00013030E94E5108091E10083FF29C08091BC +:102A0000E20083FF25C08091E100877F8093E10091 +:102A100082E08093130310920F038091E1008E7F78 +:102A20008093E1008091E2008E7F8093E2008091AC +:102A3000E20080618093E20042E060E080E00E947A +:102A400066138091F00088608093F0000E94E3108C +:102A5000FF91EF91BF91AF919F918F917F916F9176 +:102A60005F914F913F912F910F900FBE0F901F904C +:102A700018951F920F920FB60F9211242F933F9328 +:102A80004F935F936F937F938F939F93AF93BF9376 +:102A9000CF93DF93EF93FF93C091E900CF708091C4 +:102AA000EC00D82FD17080FDD0E81092E900809121 +:102AB000F000877F8093F00078940E947D1510923B +:102AC000E9008091F00088608093F000CD2BCF70FA +:102AD000C093E900FF91EF91DF91CF91BF91AF914A +:102AE0009F918F917F916F915F914F913F912F9126 +:102AF0000F900FBE0F901F9018951F93CF93DF93E9 +:102B0000CDB7DEB7AA970FB6F894DEBF0FBECDBF24 +:102B1000E4E1F3E088E08E0F9091F10091938E1341 +:102B2000FBCF0E94FB108091E80083FF1FC18091C2 +:102B3000140390911503492F50E04A30510508F0D5 +:102B400015C1FA01EA5AFF4F0C948A2C803881F0A3 +:102B5000823809F00BC1809118038F708093E900CF +:102B60008091EB0085FB882780F91092E90006C070 +:102B70008091100390911103911182609091E8006F +:102B8000977F9093E8008093F1001092F100C8C005 +:102B9000282F2D7F09F0EAC0882319F0823061F0D8 +:102BA000E5C080911603813009F0E0C0933009F050 +:102BB00080E0809311032BC080911603811127C000 +:102BC000809118038F7009F4D1C08093E90020919F +:102BD000EB0020FF1CC0933021F48091EB00806259 +:102BE00014C09091EB0090619093EB0021E030E0F5 +:102BF000A90102C0440F551F8A95E2F74093EA00ED +:102C00001092EA008091EB0088608093EB001092B4 +:102C1000E9008091E800877F86C08111A7C01091EC +:102C200016031F778091E3008078812B8093E30067 +:102C30008091E800877F8093E8000E949B13809139 +:102C4000E80080FFFCCF8091E30080688093E30080 +:102C5000111102C082E001C083E08093130386C09B +:102C60008058823008F082C080911603909117033B +:102C70008C3D53E0950779F583E08A838AE2898366 +:102C80004FB7F894DE01139620E03EE051E2E32FC7 +:102C9000F0E050935700E49120FF03C0E295EF70FD +:102CA0003F5FEF708E2F90E0EA3010F0C79601C0C2 +:102CB000C0968D939D932F5F243149F74FBF80912C +:102CC000E800877F8093E8006AE270E0CE01019619 +:102CD0000E94A21214C0AE014F5F5F4F60911803B3 +:102CE0000E94E911BC01009709F440C09091E800EE +:102CF000977F9093E80089819A810E9405138091C3 +:102D0000E8008B778093E80031C0803879F58091B6 +:102D1000E800877F8093E80080910F038093F100A3 +:102D20008091E8008E778093E8000E949B131EC07C +:102D300081111CC0909116039230C0F48091E8007C +:102D4000877F8093E80090930F030E949B138091EC +:102D50000F03811106C08091E30087FD02C081E06E +:102D600001C084E0809313030E94E7108091E80083 +:102D700083FF0AC08091E800877F8093E8008091FC +:102D8000EB0080628093EB00AA960FB6F894DEBF4A +:102D90000FBECDBFDF91CF911F9108950895CF93BE +:102DA000809113038823A1F0C091E900CF70909126 +:102DB000EC00892F817090FD80E8C82B1092E9000B +:102DC0008091E80083FD0E947D15CF70C093E900DB +:102DD000CF91089590939302809392020895E09189 +:102DE0009202F0919302309721F00190F081E02D52 +:102DF000099480E00895E0919202F0919302309757 +:102E000021F00280F381E02D09940895E09192026F +:102E1000F0919302309721F00480F581E02D099420 +:102E2000089520919002309191028217930771F0DA +:102E30009093910280939002E0919202F09193021C +:102E4000309721F00680F781E02D099408952091B4 +:102E50008E0230918F028217930771F090938F0248 +:102E600080938E02E0919202F0919302309721F0CC +:102E70000084F185E02D0994089508950C943D1780 +:102E80000E94C4220E9415090E944A230C94F9272B +:102E90005F926F927F928F929F92AF92BF92CF92EA +:102EA000DF92EF92FF920F931F93CF93DF9300D0A7 +:102EB00000D01F92CDB7DEB70E945A099DE9C92EF6 +:102EC00092E0D92E03E010E0AA24A394B12C502E56 +:102ED000802F0E94D5094C01F601729062906F011B +:102EE0006826792661147104A1F40150110978F75C +:102EF0008FEF89838A831B820E94CD228160782F85 +:102F00009D838C8349815A816B818D810E94F81742 +:102F100038C08091F20281FD0E94DE092BE030E092 +:102F20007501022E02C0EE0CFF1C0A94E2F7C701E5 +:102F300086219721892B09F129835A828E209F208F +:102F400091E0892809F490E09B830E94CD22816062 +:102F5000782F9D838C8349815A816B818D810E945A +:102F6000F817000F111FF801EB56FD4F808191817A +:102F7000E826F926F182E08204C02150310980F66A +:102F8000B4CF0E943125109194020E94EF161817B9 +:102F9000D1F00E94EF16809394020F900F900F9043 +:102FA0000F900F90DF91CF911F910F91FF90EF90B5 +:102FB000DF90CF90BF90AF909F908F907F906F9059 +:102FC0005F900C94FF080F900F900F900F900F9050 +:102FD000DF91CF911F910F91FF90EF90DF90CF90F5 +:102FE000BF90AF909F908F907F906F905F9008956B +:102FF000CF93DF93CDB7DEB72B970FB6F894DEBF34 +:103000000FBECDBF4F83588769877A878B87DE01D4 +:10301000119686E0FD0111928A95E9F785E0FE019F +:10302000379601900D928A95E1F749815A816B811B +:103030007C818D819E810E946F1E2B960FB6F89425 +:10304000DEBF0FBECDBFDF91CF910895CF93882310 +:1030500009F4C2C0C82F823859F40E94EF1681FDCE +:10306000BBC089E30E9449210E94162289E30CC05B +:10307000833879F40E94EF1680FDAEC083E50E948C +:1030800049210E94162283E50E948B21CF910C9446 +:103090001622843859F40E94EF1682FD9DC087E401 +:1030A0000E9449210E94162287E4EECF8CEF8C0FFC +:1030B000813A48F48C2F0E94612781118DC08C2F9A +:1030C0000E944921E3CF80E28C0F883048F4C7701A +:1030D00081E001C0880FCA95EAF70E94CF21D6CFC0 +:1030E0008BE58C0F833078F4C53A29F0C63A31F07D +:1030F00083E890E005C081E890E002C082E890E0BB +:10310000CF910C94111788E58C0F833108F064C0BF +:10311000C83A39F1C93A41F1CA3A49F1CB3A51F1C9 +:10312000CC3A59F1CD3A61F1C03B69F1CE3A71F137 +:10313000CF3A79F1C13B81F1C23B89F1C33B91F1B7 +:10314000C43B99F1C53BA1F1C63BA9F1C73BB1F125 +:10315000C83BB9F1C93BC1F1CA3BC9F180E090E07D +:1031600038C082EE90E035C089EE90E032C08AEE41 +:1031700090E02FC085EB90E02CC086EB90E029C05A +:1031800087EB90E026C08CEC90E023C08DEC90E0C3 +:1031900020C083E891E01DC08AE891E01AC082E96E +:1031A00091E017C084E991E014C081E292E011C07F +:1031B00083E292E00EC084E292E00BC085E292E0EE +:1031C00008C086E292E005C087E292E002C08AE28F +:1031D00092E0CF910C942717CF910895882309F49A +:1031E0004BC0823859F40E94EF1681FF45C089E335 +:1031F0000E9449210E94162289E30CC0833871F491 +:103200000E94EF1680FF38C083E50E9449210E948A +:10321000162283E50E948B210C941622843859F4DF +:103220000E94EF1682FF28C087E40E9449210E9475 +:10323000162287E4EFCF9CEF980F913A58F390E273 +:10324000980F983050F4877091E001C0990F8A95DB +:10325000EAF7892F0E94D521DFCF9BE5980F9330A5 +:1032600020F480E090E00C941117885A833120F408 +:1032700080E090E00C9427170895882321F00E94A5 +:10328000CF210C9416220895882321F00E94D52185 +:103290000C94162208957F928F929F92AF92BF92C4 +:1032A000CF92DF92EF92FF920F931F93CF93DF9312 +:1032B0001F92CDB7DEB77C01C62E772EFC010581AB +:1032C00002950F70128111110E94EC210E9442217F +:1032D000882379F0112369F080E28C0D883048F062 +:1032E00082E00E942B210E94422191E0D82ED92613 +:1032F00001C0D12CE72DE295EF70F0E0E05AFF4FCE +:103300000C948A2C872D807F072D0F70882311F055 +:103310000295007F112389F0002309F499C180E20E +:103320008C0D883020F4802F0E94CF2103C0802F85 +:103330000E94DF210E9416228BC18C2D0E94EE1864 +:10334000002309F4C3C180E28C0D883020F4802F63 +:103350000E94D52103C0802F0E94E5210E941622E1 +:10336000B5C1872D807F972D9F70803211F4892FF2 +:1033700003C0892F8295807FCC2021F0F1E0CF1609 +:10338000A1F01DC0112339F0002319F1013009F516 +:103390000E94FF219BC1002319F0013009F496C15E +:1033A00089830E940222898110C1112321F00630F5 +:1033B00008F08CC10EC0053008F088C106C1112389 +:1033C00059F0002331F0F701958190FF41C19F70C2 +:1033D00095830E943D197AC1002309F4F6C03EC1CD +:1033E000872D86958695837090E0009719F0019758 +:1033F00061F06CC1112321F08C2D972D937002C0C8 +:1034000080E090E00E94111761C1112321F08C2D02 +:10341000972D937002C080E090E00E94271756C15C +:103420008C2D112319F00E94392402C00E94A1247E +:103430000E9426254BC1872D837009F052C01111BF +:1034400045C18C2D829586958770880F880F9C2D9D +:103450009F70892E912CA12CB12C082E04C0880CB1 +:10346000991CAA1CBB1C0A94D2F7C4FE14C00FE01E +:1034700010E020E030E0B901A80104C0440F551F5E +:10348000661F771F8A95D2F7CB01BA0160957095B8 +:103490008095909503C060E070E0CB01272D2695C4 +:1034A0002695237030E02230310569F02330310554 +:1034B00089F0682979298A299B292130310571F001 +:1034C0000E94B71F03C1682979298A299B290E9474 +:1034D000D31FFCC00E94B71FC501B4010E949B1FEF +:1034E000F5C0112319F0872D817001C086958823BE +:1034F00009F4ECC08C2D829586958770880F880F13 +:103500009C2D9F70892E912CA12CB12C082E04C0CB +:10351000880C991CAA1CBB1C0A94D2F7C4FE14C0C8 +:103520000FE010E020E030E0B901A80104C0440F32 +:10353000551F661F771F8A95D2F7CB01BA01609598 +:1035400070958095909503C060E070E0CB01272DC9 +:10355000269526952370422F50E04230510569F0A0 +:103560004330510589F0682979298A299B294130FE +:10357000510571F00E949120A9C0682979298A29F2 +:103580009B290E94AD20A2C00E949120C501B401D8 +:103590000E9475209BC08C2D90E0FC01E05EF1093B +:1035A000E531F10508F050C0E059FF4F0C948A2C2A +:1035B0000C2D0F70872D8F71112321F00E940E208A +:1035C000802F07CF0E942F20802F0E9444197EC099 +:1035D000112341F0053008F079C0872D8F710E94CA +:1035E000542074C0063008F071C0F7CF112339F0B1 +:1035F000872D8F710E940E2069C01123C9F3872D7A +:103600008F710E942F2062C0112329F0872D8F71A6 +:103610000E94F91F5BC00E94EF1F58C0112351F098 +:10362000172D1F71812F0E940E2063E0812F0E94B1 +:1036300022214CC081E00E942B21023008F446C0B8 +:1036400082E00E942B2142C0112331F0002381F23D +:103650008C2D0E9426183AC0002389F28C2D0E94DE +:10366000EE1834C0472D4F706C2DC7010E945503D2 +:103670000E94131F2BC0111129C0472D4F7050E01D +:1036800042305105B9F04CF44115510581F04130FB +:103690005105E1F40E94212819C04330510569F019 +:1036A0004430510599F48C2D0E9473280FC00E945C +:1036B0000A280CC00E943D2809C00E94502806C05C +:1036C000472D4F706C2DC7010E94E005DD20F9F0F9 +:1036D0000E941E2180FD1BC0F70112820E9418214A +:1036E0000E940E20C7010E94961B0E9418210F9075 +:1036F000DF91CF911F910F91FF90EF90DF90CF90CE +:10370000BF90AF909F908F907F900C942F200F9040 +:10371000DF91CF911F910F91FF90EF90DF90CF90AD +:10372000BF90AF909F908F907F9008950F931F93BD +:10373000CF93DF93EC01888199812B813C81232BEE +:10374000B9F09F3F11F48F3F99F0CE010E94DF0343 +:10375000882371F0688179818A810E9414218C010B +:103760000E94C9200E94901FB801CE010E944B19EF +:10377000DF91CF911F910F9108950E94EC210E943B +:10378000FC210E94C1210E9416220E94D7250E947E +:10379000262580E090E00E94111780E090E00C94D4 +:1037A00027170E94DC210C94BD1B0E940921292FA0 +:1037B00022952F7030E02C3031054CF42A30310541 +:1037C0006CF42250310922303105A8F407C02C30A6 +:1037D000310569F02F30310551F00DC0803F69F09F +:1037E00018F4803E40F409C0843F29F406C093FBDE +:1037F000882780F9089580E0089581E00895CF93A7 +:10380000DF9300D000D01F92CDB7DEB70F900F909E +:103810000F900F900F90DF91CF910895CF93DF938A +:1038200000D000D000D0CDB7DEB726960FB6F89402 +:10383000DEBF0FBECDBFDF91CF9108951F93CF9311 +:10384000DF93C0919D0216E080919E02C81799F007 +:10385000D0E01C9FF0011D9FF00D1124E156FD4F9B +:103860004081518162817381848195810E940E1C07 +:103870002196C770E9CFDF91CF911F9108954091B4 +:10388000CF025091D0026091D1027091D20280910A +:10389000D3029091D4020C940E1C8091D402829594 +:1038A0008F7009F054C08091D102882309F44FC071 +:1038B00080919D02A0919E026091CF027091D002F2 +:1038C0004091D2025091D302B6E08A1709F43FC06A +:1038D00090E041155105C1F17F3F11F46F3FA1F117 +:1038E000B89FF001B99FF00D1124E156FD4F2181E1 +:1038F00072132AC02081621327C02281211124C0A3 +:10390000238134812417350710F421503109241BF9 +:10391000350B283C3105C0F42091D4022F70206172 +:103920002093D40226E0289FF001299FF00D112456 +:10393000EC55FD4F80818F70806180838FEC92E029 +:103940000E94961B0C941E1C01968770BECF089592 +:10395000CF92DF92EF92FF920F931F93CF93DF935B +:10396000CDB7DEB762970FB6F894DEBF0FBECDBFFE +:103970008C0185E0F801DE011D9601900D928A957B +:10398000E1F7D8014C9111965C91119712966C91C8 +:1039900012971396CD90DC9014973091CF027091CE +:1039A000D0028091D2029091D302009709F46BC1AA +:1039B0007F3F19F43F3F09F466C1E090D102EE2049 +:1039C00009F4C0C02091D402C816D90628F0F60127 +:1039D000E81BF90BCF0104C0809590958C0D9D1DBF +:1039E000FF24F394883C910578F0F12C207F09F0B6 +:1039F000C6C07C2DD98AC88A89890E94FF1B8FEC9A +:103A000092E00E94961BB1C0822F807F09F046C0D1 +:103A1000751314C0341312C0611110C02F702061CF +:103A20002093D4020E943F1C8FEC92E00E94961BD0 +:103A30008091D402D80115968C932EC0CD2819F10F +:103A40005F3F11F44F3FF9F0F62E61111CC08091D9 +:103A50009D0220919E0236E0821709F45AC090E040 +:103A6000389FF001399FF00D1124E156FD4F71810F +:103A7000571306C07081471303C07281711103C0D0 +:103A800001968770E9CFF62E662309F418C180915C +:103A9000D40281608093D402F12C11C1751308C047 +:103AA000341306C0611104C08091D402D801C3C090 +:103AB0004D875E878D859E856A8B0E94D51B6A899E +:103AC0008823E1F16623D1F12091D402822F8295DF +:103AD0008F7090E0029774F08091CF029091D002A5 +:103AE00098878F831986DB86CA862C87CE01079636 +:103AF0000E94961B86E0F801AFECB2E001900D92B7 +:103B00008A95E1F70E944D1C0E943F1CFF24F3940C +:103B1000D6C04D875E878D859E850E940921292FFD +:103B200022952F7030E0223031050CF0BCC09F7020 +:103B300009F0B6C0805E883008F4C1C0C8010E9498 +:103B4000961BE4CFC816D90608F453C0F601E81B4B +:103B5000F90BCF01883C910508F450C0F12C7C2D65 +:103B6000D98AC88A89890E94FF1BEFECF2E086E0BF +:103B7000DF011D928A95E9F70E943F1CA0C07513D2 +:103B800014C0341312C0611110C08091D402F80126 +:103B90008583C8010E94961B86E0EFECF2E0DF010E +:103BA0001D928A95E9F7FE2C8AC04D875E878D8528 +:103BB0009E856A8B0E94D51B6A89882309F4BECF33 +:103BC000662309F4BBCF2091D402822F82958F7097 +:103BD00090E002970CF48ECF8091CF029091D002AA +:103BE0009A8389831B82DD82CC822E83CE0101964B +:103BF0007FCF809590958C0D9D1DACCFF62E6623C2 +:103C000009F49CCF75132EC034132CC02091D4021C +:103C100020FD1FC0822F82958F70D9F0D801159694 +:103C20002C9315978F3049F08F5F982F9295907F46 +:103C3000822F8F70892B15968C93C8010E94961B3A +:103C400086E0F801AFECB2E001900D928A95E1F7C1 +:103C500093CF86E0F801AFECB2E001900D928A9527 +:103C6000E1F72DC04D875E878D859E850E94D51B0F +:103C7000811140CF8091D40281608093D402C80129 +:103C80000E94961B1CC0662309F458CF4D875E879F +:103C90008D859E850E94D51B882309F44FCF2ACF9E +:103CA000811148CF0CC0243031050CF047CF9F70F4 +:103CB00009F440CFF8019581907F09F03BCF8F2D1B +:103CC00062960FB6F894DEBF0FBECDBFDF91CF91E5 +:103CD0001F910F91FF90EF90DF90CF9008951F9369 +:103CE000CF93DF93CDB7DEB72C970FB6F894DEBF36 +:103CF0000FBECDBF4F83588769877A878B879C8794 +:103D0000CE0107960E94A81C882369F08F819885B0 +:103D10002A853B85232BF1F19F3F09F063C08F3F3C +:103D200009F060C037C086E0FE013796DE011196CB +:103D300001900D928A95E1F76F817885EA85FB8580 +:103D4000309741F17F3F11F46F3F21F120919E02A6 +:103D500030E0C90101968770992740919D0250E09B +:103D60008417950709F447C069837A83FD83EC8340 +:103D700096E0929FD001939FB00D1124A156BD4FA4 +:103D8000FE01319601900D929A95E1F780939E0283 +:103D90000E941E1C16E080919D0290919E02891740 +:103DA000C1F1189FC001112481569D4F0E94A81C8B +:103DB000882379F1E0919D021E9FF0011124E156C4 +:103DC000FD4F4081518162817381848195810E9480 +:103DD0000E1C80919D0290E0019687709927809338 +:103DE0009D02D9CF4F81588569857A858B859C85C1 +:103DF0000E940E1CCFCF0E94D11B10929E021092E7 +:103E00009D02EFECF2E086E0DF011D928A95E9F772 +:103E1000C1CF2C960FB6F894DEBF0FBECDBFDF9199 +:103E2000CF911F910895EF92FF920F931F93CF931D +:103E3000DF938C01009709F46CC0F12CEE24E3941D +:103E4000E8012196F8018491843740F4843008F029 +:103E500051C0813081F0823019F15BC0853709F49F +:103E600044C0A8F19CE7980F903708F052C08F77B4 +:103E70000E94EE1841C00E5F1F4FFE01C49180E208 +:103E80008C0F883048F4C7708E2D01C0880FCA95FA +:103E9000EAF70E94EF2114C08C2F0E9426182DC033 +:103EA0000E5F1F4FFE01C49180E28C0F883058F4E2 +:103EB000C7708E2D01C0880FCA95EAF70E94F521C0 +:103EC0000E9416221AC08C2F0E94EE1816C00E5F98 +:103ED0001F4FFE01C491CC2381F08FE99FE0019731 +:103EE000F1F700C00000C150F6CF0E5F1F4FFE017A +:103EF000F49003C00E9426188E018F2D882309F4A8 +:103F00009FCFEFE9FFE03197F1F700C0000081504B +:103F1000F5CFDF91CF911F910F91FF90EF90089512 +:103F200008956093D9027093DA028093DB02909334 +:103F3000DC020C94BD1B0F931F930091D9021091CA +:103F4000DA022091DB023091DC02DC01CB01802B14 +:103F5000912BA22BB32B8093D9029093DA02A093DA +:103F6000DB02B093DC021F910F910C94BD1B0F93E9 +:103F70001F930091D9021091DA022091DB02309157 +:103F8000DC02DC01CB0180239123A223B3238093A5 +:103F9000D9029093DA02A093DB02B093DC021F9166 +:103FA0000F910C94BD1B0F931F930091D902109198 +:103FB000DA022091DB023091DC02DC01CB018027A8 +:103FC0009127A227B3278093D9029093DA02A09376 +:103FD000DB02B093DC021F910F910C94BD1B109279 +:103FE000D5021092D6021092D7021092D8020C94E9 +:103FF000BD1B41E050E060E070E004C0440F551F7D +:10400000661F771F8A95D2F74093D5025093D60248 +:104010006093D7027093D8020C94BD1B41E050E02E +:1040200060E070E004C0440F551F661F771F8A953B +:10403000D2F78091D5029091D602A091D702B0918B +:10404000D802482B592B6A2B7B2B4093D5025093D7 +:10405000D6026093D7027093D8020C94BD1B41E046 +:1040600050E060E070E004C0440F551F661F771FEA +:104070008A95D2F740955095609570958091D502BC +:104080009091D602A091D702B091D802482359232B +:104090006A237B234093D5025093D6026093D702C4 +:1040A0007093D8020C94BD1B41E050E060E070E0DA +:1040B00004C0440F551F661F771F8A95D2F7809161 +:1040C000D5029091D602A091D702B091D80248278C +:1040D00059276A277B274093D5025093D6026093D5 +:1040E000D7027093D8020C94BD1B0F931F930091BD +:1040F000D5021091D6022091D7023091D802DC016E +:10410000CB01802B912BA22BB32B8093D5029093C4 +:10411000D602A093D702B093D8021F910F910C94AE +:10412000BD1B0F931F930091D5021091D6022091D1 +:10413000D7023091D802DC01CB0180239123A22346 +:10414000B3238093D5029093D602A093D702B09365 +:10415000D8021F910F910C94BD1B0F931F930091D8 +:10416000D5021091D6022091D7023091D802DC01FD +:10417000CB0180279127A227B3278093D502909364 +:10418000D602A093D702B093D8021F910F910C943E +:10419000BD1B0895CF92DF92EF92FF920F931F9372 +:1041A000CF93DF938C01C090D902D090DA02E090D7 +:1041B000DB02F090DC028091D5029091D602A091B2 +:1041C000D702B091D802C82AD92AEA2AFB2ACFE11D +:1041D000D0E0D701C6010C2E04C0B695A7959795DF +:1041E00087950A94D2F780FF06C0B8018C2F0E94F1 +:1041F0006508019721F4219760F780E001C08C2FBA +:10420000DF91CF911F910F91FF90EF90DF90CF90B2 +:104210000895CF93DF93EC010E94CA20BE010E9453 +:104220006508DF91CF910895CB010E94092108957F +:104230008091DD0285958595859508958091DD02B3 +:104240008770089598E0899F90011124262B209370 +:10425000DD020C940E202091DD0280958223809354 +:10426000DD02982F977069F430E0482F552747FDFD +:1042700050952417350729F08595859585950C94DB +:104280002F2008959091DD02977081E009F480E07D +:10429000089590911501992321F0909116019111A3 +:1042A00009C02091170130911801F90132969FEF52 +:1042B00040E01FC0982F9695969596959F3050F5A3 +:1042C000E0911701F0911801E90FF11D877021E0CD +:1042D00030E0A90102C0440F551F8A95E2F7CA01D8 +:1042E0009181892B818308959F3F39F04F5F4E3034 +:1042F00041F051915813F8CF0DC05111F7CF942FC1 +:10430000F5CF9F3F39F0F901E90FF11D97FDFA95BF +:1043100082830895089590911501992321F0909139 +:104320001601911109C02091170130911801F9016E +:104330003296205F3F4F1FC0982F96959695969581 +:104340009F30F0F4E0911701F0911801E90FF11D91 +:10435000877021E030E0A90102C0440F551F8A9503 +:10436000E2F7CA018095918189238183089531966E +:10437000E217F30729F090819813F9CF1082F7CF55 +:10438000089581E090E0E0911701F0911801E80FA5 +:10439000F91F1082019680319105A9F70895909137 +:1043A000F102892B8093F102089580959091F1029A +:1043B00089238093F10208951092F102089590915B +:1043C000F002892B8093F002089580959091F0027D +:1043D00089238093F00208951092F002089590913D +:1043E000EF02892B8093EF02089580959091EF0260 +:1043F00089238093EF0208951092EF02089580932D +:10440000DE0208951092DE020895809117019091C6 +:104410001801FC0131969C01205F3F4F80E0919193 +:1044200091118F5FE217F307D1F70895E09117011B +:10443000F09118018091F1028083E0911701F091D1 +:10444000180190818091F002892B8083E0911701FF +:10445000F091180190818091EF02892B80838091E7 +:10446000DE02882361F0E0911701F091180190813C +:10447000892B80830E94052281111092DE02809197 +:104480001701909118010C94FB1620E0009739F069 +:10449000AC0141505109842395232F5FF7CF822F20 +:1044A000089580911303843039F11092F30220E4CF +:1044B00088E190E00FB6F894A895809360000FBE55 +:1044C0002093600080E00E94BC0280E00E94FF0810 +:1044D00083B7817F846083BF83B7816083BF789413 +:1044E000889583B78E7F83BF88E10FB6F894809359 +:1044F0006000109260000FBE08950895089580E056 +:104500000E94BC020E947D220E945A090E947E22C3 +:104510000E94DF0991E0811101C090E0892F089588 +:104520000E94D11B80E00E94BC020E94F9270E94D9 +:10453000EF160C94FF081F920F920FB60F921124E2 +:104540008F939F93AF93BF938091F302811113C018 +:104550008091F4029091F502A091F602B091F702D9 +:104560004196A11DB11D8093F4029093F502A09392 +:10457000F602B093F702BF91AF919F918F910F9088 +:104580000FBE0F901F90189582E084BD93E095BDFB +:104590009AEF97BD80936E0008952FB7F89480919D +:1045A000F4029091F502A091F602B091F7022FBFAC +:1045B0000895CF92DF92EF92FF920F931F932FB740 +:1045C000F8944091F4025091F5026091F6027091D6 +:1045D000F7022FBF6A017B01EE24FF248C0120E04B +:1045E00030E0C016D106E206F30610F4415051093E +:1045F0009A01281B390BC9011F910F91FF90EF9071 +:10460000DF90CF9008951F920F920FB60F92112452 +:104610008F939F93AF93BF938091F4029091F50293 +:10462000A091F602B091F7020196A11DB11D8093F1 +:10463000F4029093F502A093F602B093F702BF91B3 +:10464000AF919F918F910F900FBE0F901F90189573 +:104650000E94EC13F8942FEF87EA91E621508040F6 +:104660009040E1F700C0000087E090EBDC01809310 +:104670001E0390931F03A0932003B09321039CE09B +:1046800088E10FB6F894A895809360000FBE9093D0 +:104690006000FFCF0E948923811102C00E94652320 +:1046A0000E9494238093F2020E949C2380931C0317 +:1046B00087FB882780F9809316010E949823682F32 +:1046C00070E080E090E00C94911F6DEE7EEF80E052 +:1046D00090E00E94B02C60E082E090E00E949E2C6E +:1046E00060E083E090E00E949E2C60E084E090E037 +:1046F0000E949E2C60E085E090E00E949E2C60E08D +:1047000086E090E00E949E2C6FEF87E090E00C9492 +:104710009E2C80E090E00E94982C21E08D3E9E4FE0 +:1047200009F020E0822F089582E090E00C94902C14 +:1047300083E090E00C94902C84E090E00C94902C1A +:10474000682F84E090E00C949E2C86E090E00C941E +:10475000902C682F86E090E00C949E2C87E090E0EF +:104760000C94902C682F87E090E00C949E2C809104 +:10477000FA0280FF0BC060911C0185E0689FB001C8 +:10478000112475956795759567952BC081FF09C0B4 +:1047900060911C0185E0689FB001112475956795B3 +:1047A00020C082FF07C060911C0185E0689FB001B6 +:1047B000112417C09091FB029923D1F060911B0145 +:1047C000961788F720911C0185E0289F90011124FD +:1047D000929FA001939F500D112470E0CA010E9486 +:1047E000762C6038710540F46115710539F002C00E +:1047F00065E070E0862F08958FE7089581E00895C1 +:104800008091FA0280FF08C060911A0170E07595EE +:1048100067957595679521C081FF06C060911A0163 +:1048200070E07595679519C082FF04C060911A0108 +:1048300070E010C09091FB029923C1F060911901C2 +:104840009617A0F780911A01899FC001112470E08A +:104850000E94762C6038710528F46115710521F0ED +:10486000862F08958FE7089581E0089561E070E054 +:10487000F4CF803F21F40E94B723819504C0813F8B +:1048800029F40E94B7238093FE020895823F21F409 +:104890000E94B723819504C0833F29F40E94B72367 +:1048A0008093FD020895893F19F40E94002405C0F9 +:1048B0008A3F31F40E94002481958093FF0208957D +:1048C0008B3F21F40E940024819504C08C3F29F481 +:1048D0000E940024809300030895843F21F4809176 +:1048E000FC02816017C0853F21F48091FC02826048 +:1048F00011C0863F21F48091FC0284600BC0873F89 +:1049000021F48091FC02886005C0883F31F48091D9 +:10491000FC0280618093FC0208958D3F21F4809118 +:10492000FA0281600BC08E3F21F48091FA0282600E +:1049300005C08F3F29F48091FA0284608093FA02C7 +:104940000895803F39F48091FE0287FF6CC0109279 +:10495000FE0269C0813F29F48091FE021816BCF363 +:1049600062C09091FD02823F29F497FF5CC01092D3 +:10497000FD0259C0833F19F41916CCF354C0893F86 +:1049800041F48091FF0218160CF04DC01092FF0206 +:104990004AC08A3F29F48091FF0287FF44C0F6CFC6 +:1049A0008B3F39F48091000387FF3DC010920003D4 +:1049B0003AC08C3F29F4809100031816BCF333C031 +:1049C000843F21F48091FC028E7F17C0853F21F443 +:1049D0008091FC028D7F11C0863F21F48091FC0202 +:1049E0008B7F0BC0873F21F48091FC02877F05C03D +:1049F000883F31F48091FC028F7E8093FC0213C0CB +:104A00008D3F21F48091FA028E7F0BC08E3F21F4FE +:104A10008091FA028D7F05C08F3F29F48091FA02C0 +:104A20008B7F8093FA028091FD0281110EC08091EC +:104A3000FE0281110AC08091FF02811106C080919F +:104A40000003811102C01092FB0208958CEF92E0E6 +:104A50000E9406170E94CD229093F9028093F802DB +:104A600008951F93CF93DF938091F8029091F902FC +:104A70000E94D922AC019091FB02992321F0209150 +:104A80001D0130E006C020911E018AE0289F9001A0 +:104A900011244217530708F486C08091FD02C0918B +:104AA000FE02D091FF0210910003811107C0C111D5 +:104AB00076C0D11174C0111172C075C09F3F19F03A +:104AC0009F5F9093FB02181624F40E94B7238093F3 +:104AD000FD028091FD0287FF05C00E94B7238195EA +:104AE0008093FD021C1624F40E94B7238093FE02DB +:104AF0008091FE0287FF05C00E94B72381958093B5 +:104B0000FE026091FD02662339F1C091FE02CC23C2 +:104B100019F1772767FD7095872F972F0E949829A5 +:104B200023E333E343E35FE30E94A82A0E9465295D +:104B30006093FD026C2F772767FD7095872F972F65 +:104B40000E94982923E333E343E35FE30E94A82A0A +:104B50000E9465296093FE021D1624F40E94002421 +:104B60008093FF028091FF0287FF05C00E9400240E +:104B700081958093FF02111624F40E9400248093F3 +:104B800000038091000387FF05C00E9400248195E7 +:104B900080930003DF91CF911F910C9426259F3FB6 +:104BA00009F08ECF96CFDF91CF911F910895ECEF52 +:104BB000F2E085E0DF011D928A95E9F71092FB0291 +:104BC0001092FA020895833081F128F4813059F06F +:104BD0008230D1F00895853009F449C0B8F18630AB +:104BE00009F456C0089580911E01262F30E0280F49 +:104BF000311D2F3F310524F4680F60931E01089585 +:104C00008FEF80931E01089580911D01262F30E0C3 +:104C1000280F311D2F3F310524F4680F60931D01CB +:104C200008958FEF80931D01089580911C01262F18 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001C0108958FEF80931C01089580911B0132 +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931B0108958FEF80931B01089580913D +:104C70001A01262F30E0280F311D2F3F310524F473 +:104C8000680F60931A0108958FEF80931A010895B9 +:104C900080911901262F30E0280F311D2F3F31055B +:104CA00024F4680F6093190108958FEF8093190120 +:104CB0000895833011F128F4813049F0823091F069 +:104CC0000895853081F120F18630C1F108958091F9 +:104CD0001E01681720F4861B80931E010895109210 +:104CE0001E01089580911D01681720F4861B809392 +:104CF0001D01089510921D01089580911C016817EF +:104D000020F4861B80931C01089510921C010895C5 +:104D100080911B01681720F4861B80931B01089566 +:104D200010921B01089580911A01681720F4861BC8 +:104D300080931A01089510921A0108958091190123 +:104D4000681720F4861B80931901089510921901A9 +:104D500008950F931F93873208F048C08E3108F0F2 +:104D60008DC0803109F477C008F5873009F461C03F +:104D700068F4863009F09DC08091F202817F8E7FB9 +:104D80008093F20281E08093020394C08B3009F497 +:104D900089C08E3009F08DC08091F20282FB2227FB +:104DA00020F991E0922790FB82F95EC0863109F4E8 +:104DB00079C060F4813109F07CC00E94D11B9091D0 +:104DC000160181E08927809316016CC0893109F4AE +:104DD00069C08B3109F06DC08091F20281FB2227FE +:104DE00020F991E0922790FB81F93EC0883309F4C5 +:104DF00059C050F4893209F457C0853309F454C0BE +:104E0000873209F451C055C0833409F44DC028F4E9 +:104E10008A3308F44EC0895332C0883409F049C03F +:104E20000E94D11B0E940F0A0E94D6030E942823D1 +:104E300039C09091F202892F8095817080FB90F9A2 +:104E400029F0966098609093F20234C0997F977F22 +:104E50009093F20227C08091F20283FB222720F96F +:104E600091E0922790FB83F98093F2029923D1F08D +:104E70008091F20281608093F20214C08D5141E072 +:104E800050E060E070E08A019B0104C0000F111F38 +:104E9000221F331F8A95D2F7C901B8010E94911FC2 +:104EA0000E94D11B81E006C061E070E080E090E0EC +:104EB000F5CF80E01F910F91089580E0089580E084 +:104EC0000895CF93C82F80910203813069F018F0C4 +:104ED0008230C9F184C0E0911701F09118018081FE +:104EE000823209F07EC007C0E0911701F0911801ED +:104EF0008081823261F48C2F0E945D27811104C071 +:104F00008C2F0E94A9261DC081E090E01AC08C2F32 +:104F10000E945F27811114C0C43179F048F4CB306E +:104F200079F0C03109F061C082E08093020308C0CB +:104F3000C93219F0C83321F058C01092020355C08D +:104F400081E0817054C0C93291F120F5C43179F10A +:104F5000B0F4C73009F047C08EE180931E0182E3B0 +:104F600080931D018AE080931C0184E180931B01E2 +:104F700088E080931A0188E28093190134C0CE51F1 +:104F8000C63088F5EC2FF0E0EA54FE4F8081809324 +:104F9000010329C0CE34E9F020F4CB3421F56AE0D6 +:104FA00013C0C13579F0C235F1F461E00DC08091D4 +:104FB0000103882319F01092010315C081E080934A +:104FC000020315C061E006C0809101030E94E32541 +:104FD0000AC06AE0809101030E94592604C0109221 +:104FE000020380E004C081E002C080E0AACFCF913C +:104FF00008950E948923811102C00E9465230E94A6 +:10500000A52380931D0380FF02C0869501C080E028 +:105010000C94BC0280911D03982F9695292F30E0A7 +:10502000233031054CF49F5F990F8170892B81608B +:1050300080931D030E94A92380911D0386950C94E3 +:10504000BC0280911D03982F969591F09158990F6D +:105050008170892B80931D038E7F91E009F490E08D +:1050600080911D0390FB80F980931D030E94A9236A +:1050700080911D0386950C94BC0280911D03982F8E +:10508000909590FB80F980931D030E94A923809145 +:105090001D0380FF02C0869501C080E00C94BC0215 +:1050A00090911D03892F86958F5F8F779170843043 +:1050B00028F4880F892B80931D0302C090931D0351 +:1050C00080911D038E7F91E009F490E080911D0393 +:1050D00090FB80F980931D030E94A92380911D03FA +:1050E00086950C94BC0220911D03922F96958927DA +:1050F000982F990F822F8170892B80931D038E7FAB +:1051000091E009F490E080911D0390FB80F9809379 +:105110001D030E94A92380911D0386950C94BC0257 +:1051200080911D03869508955058BB27AA270ED05D +:10513000D1C1C2D130F0C7D120F031F49F3F11F47A +:105140001EF4B7C10EF4E095E7FB9FC1E92FD3D160 +:1051500080F3BA17620773078407950718F071F494 +:105160009EF5EBC10EF4E0950B2EBA2FA02D0B018E +:10517000B90190010C01CA01A0011124FF27591B9C +:1051800099F0593F50F4503E68F11A16F040A22FA2 +:10519000232F342F4427585FF3CF46953795279513 +:1051A000A795F0405395C9F77EF41F16BA0B620B12 +:1051B000730B840BBAF09150A1F0FF0FBB1F661F59 +:1051C000771F881FC2F70EC0BA0F621F731F841F9C +:1051D00048F4879577956795B795F7959E3F08F0C2 +:1051E000B3CF9395880F08F09927EE0F9795879581 +:1051F000089527D108F481E008950CD06BC163D1E4 +:1052000040F05AD130F021F45F3F19F03EC1511106 +:1052100095C14FC170D198F39923C9F35523B1F3C8 +:10522000951B550BBB27AA2762177307840738F015 +:105230009F5F5F4F220F331F441FAA1FA9F333D074 +:105240000E2E3AF0E0E830D091505040E695001C28 +:10525000CAF729D0FE2F27D0660F771F881FBB1FE4 +:10526000261737074807AB07B0E809F0BB0B802DBE +:10527000BF01FF2793585F4F2AF09E3F510568F00A +:1052800004C15CC15F3FECF3983EDCF386957795F3 +:105290006795B795F7959F5FC9F7880F911D96950C +:1052A000879597F90895E1E0660F771F881FBB1F68 +:1052B000621773078407BA0720F0621B730B840B15 +:1052C000BA0BEE1F88F7E095089504D06894B111E9 +:1052D00035C1089518D188F09F5790F0B92F9927BC +:1052E000B751A0F0D1F0660F771F881F991F1AF0F1 +:1052F000BA95C9F712C0B13081F01FD1B1E008955D +:105300001CC1672F782F8827B85F39F0B93FCCF3DD +:10531000869577956795B395D9F73EF490958095E6 +:10532000709561957F4F8F4F9F4F0895E89409C006 +:1053300097FB3EF490958095709561957F4F8F4FC8 +:105340009F4F9923A9F0F92F96E9BB279395F695DE +:10535000879577956795B795F111F8CFFAF4BB0F5C +:1053600011F460FF1BC06F5F7F4F8F4F9F4F16C0C0 +:10537000882311F096E911C0772321F09EE8872F4A +:10538000762F05C0662371F096E8862F70E060E006 +:105390002AF09A95660F771F881FDAF7880F96957F +:1053A000879597F9089588D018F011F08CD038F4CB +:1053B00080C0C4C0E92F9FD0B0F35523C9F3E7FBE9 +:1053C0006217730784079507A8F199F3E92FFF2760 +:1053D00088232AF03197660F771F881FDAF7952FF9 +:1053E0005527442332F091505040220F331F441F61 +:1053F000D2F7BB27E91BF50B621B730B840BB109BA +:10540000C1F222F4620F731F841FB11D31972AF07D +:10541000660F771F881FBB1FEFCF915050405AF087 +:1054200041F0882332F0660F771F881F915050405B +:10543000C1F7939530C08695779567959F5FD9F7AB +:10544000F8CF990F0008550FAA0BE0E8FEEF1616EB +:105450001706E807F907C0F012161306E407F50768 +:1054600098F0621B730B840B950B39F40A2661F0DC +:10547000232B242B252B21F408950A2609F4A1407F +:10548000A6958FEF811D811D089597F99F6780E88C +:1054900070E060E008959F3F31F0915020F48795CF +:1054A00077956795B795880F911D9695879597F98C +:1054B00008959FEF80EC089500240A9416161706AD +:1054C00018060906089500240A94121613061406F5 +:1054D00005060895092E0394000C11F4882352F058 +:1054E000BB0F40F4BF2B11F460FF04C06F5F7F4F10 +:1054F0008F4F9F4F089557FD9058440F551F59F0F7 +:105500005F3F71F04795880F97FB991F61F09F3FB0 +:1055100079F087950895121613061406551FF2CFD9 +:105520004695F1DF08C0161617061806991FF1CF29 +:1055300086957105610508940895E894BB27662750 +:105540007727CB0197F908957CDF08F48FEF089552 +:105550000BD0C0CFB1DF28F0B6DF18F0952309F0EB +:1055600094CFA7CF1124EACFC6DFA0F3959FD1F344 +:10557000950F50E0551F629FF001729FBB27F00D01 +:10558000B11D639FAA27F00DB11DAA1F649F662756 +:10559000B00DA11D661F829F2227B00DA11D621FA5 +:1055A000739FB00DA11D621F839FA00D611D221F5F +:1055B000749F3327A00D611D231F849F600D211D43 +:1055C000822F762F6A2F11249F5750408AF0E1F0E6 +:1055D00088234AF0EE0FFF1FBB1F661F771F881F2F +:1055E00091505040A9F79E3F510570F04ECFA6CF85 +:1055F0005F3FECF3983EDCF3869577956795B7951A +:10560000F795E7959F5FC1F7FE2B880F911D969543 +:10561000879597F90895FA01EE0FFF1F309621053F +:10562000310599F16115710561F48038BFE39B077D +:1056300049F168949038810561F08038BFEF9B078D +:1056400041F0992342F5FF3FE1053105210511F1B4 +:10565000E8940894E795D901AA2329F4AB2FBE2F2B +:10566000F85FD0F310C0FF5F70F4A695E0F7F7394C +:1056700050F019F0FF3A38F49F779F930CD00F90B9 +:1056800007FC905808953EF014CF60E070E080E889 +:105690009FE308954FE79F775F934F933F932F9337 +:1056A0009ED02F913F914F915F9152DF05C019F429 +:1056B0000EF0EBCE42CFFDCE26DFC8F39638C0F712 +:1056C00007F80F92E8942BE33AEA48EB5FE74EDFE6 +:1056D0000F920F920F924DB75EB70F92C0D0EAE0D3 +:1056E000F1E016D04F915F91EF91FF91E595EE1F9C +:1056F000FF1F49F0FE57E0684427EE0F441FFA955C +:10570000E1F74195550B32D00F9007FE26C0089562 +:10571000DF93CF931F930F93FF92EF92DF927B0162 +:105720008C01689405C0DA2EEF011EDFFE01E894BB +:10573000A5912591359145915591AEF3EF0106DD87 +:10574000FE019701A801DA9479F7DF90EF90FF90BE +:105750000F911F91CF91DF9108959B01AC0160E003 +:1057600070E080E89FE349CD90CE95CECCDEE8F3A3 +:105770009923D9F3940F511DBBF39150504094F0ED +:1057800059F0882332F0660F771F881F91505040E0 +:10579000C1F79E3F510544F7880F911D9695879557 +:1057A00097F908955F3FACF0983E9CF0BB27869533 +:1057B00077956795B79508F4B1609395C1F7BB0FDE +:1057C00058F711F460FFE8CF6F5F7F4F8F4F9F4F07 +:1057D000E3CFB4CE0EF05FCE6CCE689456CE93DE9F +:1057E000C8F39923D1F3C6F3DF93CF931F930F939D +:1057F000FF92C92FDD2788232AF02197660F771F94 +:10580000881FDAF720E030E040E85FEB9FE388395B +:1058100020F0803E30F021968F7787DCE2E3F1E0E4 +:1058200003C083DCEFE5F1E073DF8B01BE01EC0127 +:10583000FB2E6F5771097595771F880B990B78DDD3 +:1058400028E132E741E35FE38FDEAF2D9801AE013F +:10585000FF900F911F91CF91DF9178DC3BCEFA0141 +:10586000DC01AA0FBB1F9B01AC01BF5728F4222704 +:105870003327442750781FC0B75188F4AB2F00243A +:10588000469537952795011CA395D2F3002069F022 +:10589000220F331F441FB395DAF30DD045CC61308E +:1058A0007105A0E88A07B94630F49B01AC01662770 +:1058B000772788279078309621F0208331834283A0 +:1058C00053830895AA1BBB1B51E107C0AA1FBB1F2E +:1058D000A617B70710F0A61BB70B881F991F5A957C +:1058E000A9F780959095BC01CD01089597FB072EEF +:1058F00016F4009407D077FD09D00E94622C07FCB3 +:1059000005D03EF4909581959F4F089570956195CF +:105910007F4F0895EE0FFF1F0590F491E02D09943D +:10592000F999FECF92BD81BDF89A992780B5089567 +:10593000A8E1B0E042E050E00C94B82C262FF99991 +:10594000FECF92BD81BDF89A019700B4021639F0DE +:105950001FBA20BD0FB6F894FA9AF99A0FBE0895AF +:105960000196272F0E949F2C0C949E2CDC01CB01CA +:10597000FC01F999FECF06C0F2BDE1BDF89A31965F +:1059800000B40D9241505040B8F70895F894FFCFFD +:10599000640007000CFF0000003F64F30F81105EFD +:1059A000102A10F60F0101DF022808140A321E0027 +:1059B00002040507090B0C0E1011131517181A1CF9 +:1059C0001D1F2123242628292B2D2F303234353733 +:1059D000393B1F0F03764F5F6F7F49694379095940 +:1059E00053633149803F5D8B803FF8BF803FCAE100 +:1059F000803F73ED803FCAE1803FF8BF803F5D8B01 +:105A0000803F3149803F0000803FF16D7F3F75EA64 +:105A10007E3F4C827E3F833F7E3F84287E3F833F94 +:105A20007E3F4C827E3F75EA7E3FF16D7F3F0000F6 +:105A3000803F3F4D3639830436040004C7035A03C0 +:105A400073038C03A503010203040506070809007C +:00000001FF diff --git a/keyboard/planck/keymaps/max/compiled.hex b/keyboard/planck/keymaps/max/compiled.hex new file mode 100644 index 0000000000..d9594415fb --- /dev/null +++ b/keyboard/planck/keymaps/max/compiled.hex @@ -0,0 +1,1449 @@ +:100000000C9496020C94DA020C94DA020C94DA0244 +:100010000C94DA020C94DA020C94DA020C94DA02F0 +:100020000C94DA020C94DA020C9478140C944A15AD +:100030000C94AC220C94DA020C94DA020C94DA02DE +:100040000C94DA020C943C030C94DA020C94DA025D +:100050000C94DA020C9414230C94DA020C94DA0255 +:100060000C94DA020C94DA020C94DA020C94DA02A0 +:100070000C94DA020C94DA020C94DA020C94DA0290 +:100080000C94ED0A0C94DA020C94DA020C94DA0265 +:100090000C94DA020C94DA020C94DA020C94DA0270 +:1000A0000C94DA020C94DA020C94DA02B715D91522 +:1000B000C716D915C7161E164116C7169616A916C5 +:1000C00093199319C219C219011A211A771B771BA8 +:1000D0002C1A771BDC1ADC1A431B4C1B771B711B79 +:1000E000E91AE91AE91AE91AE91AE91AE91AE91AF8 +:1000F000E91AE91AE91AE91AE91AE91AE91AE91AE8 +:10010000F91A071B0E1B151B1F1B07634236B79BF3 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000000000F1A299 +:1001D000F1A3018C028C290014001A0008001500FC +:1001E00017001C0018000C00120013002A002B003E +:1001F00004001600070009000A000B000D000E00A5 +:100200000F0033002800E1001D001B00060019004C +:100210000500110010003600370038003400E000FF +:100220008350E200E30002202C002C00012050004B +:10023000510052004F00290014001A000900130059 +:100240000A000D000F0018001C0033002A002B00CC +:10025000040015001600170007000B00110008002D +:100260000C0012002800E1001D001B000600190010 +:1002700005000E0010003600370038003400E000A2 +:100280008350E200E30002202C002C0001205000EB +:10029000510052004F0035001E001F0020002100B9 +:1002A0002200230024002500260027002A00010048 +:1002B0000320042000500100010001002D002E0049 +:1002C0002F00300001000100440045006800690073 +:1002D0006A006B006C006D006E006F003100010061 +:1002E0000100010001000100010001000120AB003C +:1002F000AA00A900AE0035021E021F022002210240 +:100300002202230224022502260227022A000100DB +:100310000320042000500100010001002D022E02E4 +:100320002F023002010001003A003B003C003D007A +:100330003E003F0040004100420043003102010006 +:100340000100010001000220010001000100AB00DA +:10035000AA00A900AE002803540068006500200030 +:1003600050006C0061006E0063006B0020004B00C9 +:100370006500790062006F00610072006400000097 +:100380002C034F007200740068006F006C0069005D +:100390006E0065006100720020004B00650079006E +:1003A00062006F00610072006400730000000403CB +:1003B000090409026D00040100A0FA09040000010B +:1003C00003010100092111010001223F00070581FD +:1003D0000308000A090401000103010200092111B8 +:1003E000010001224D000705820308000A090402EA +:1003F000000103000000092111010001223600075D +:1004000005830308000A0904030001030000000932 +:100410002111010001223900070584031000011297 +:1004200001100100000008EDFE6060010001020003 +:100430000105010906A101050719E029E7150025B5 +:1004400001950875018102050819012905950575B1 +:10045000019102950175039101050719002977158E +:10046000002501957875018102C005010980A1016F +:10047000850216010026B7001A01002AB700751080 +:1004800095018100C0050C0901A101850316010039 +:10049000269C021A01002A9C02751095018100C059 +:1004A00005010902A1010901A10005091901290598 +:1004B00015002501950575018102950175038101DE +:1004C0000501093009311581257F950275088106DE +:1004D00009381581257F950175088106050C0A38B4 +:1004E000021581257F950175088106C0C0050109A7 +:1004F00006A101050719E029E715002501950875F2 +:1005000001810295017508810105081901290595E8 +:1005100005750191029501750391010507190029DF +:10052000FF150025FF950675088100C011241FBE28 +:10053000CFEFDAE0DEBFCDBF04B603FE24C080916A +:100540001E0390911F03A0912003B09121038730D7 +:10055000904BA740B04BB9F410921E0310921F03AA +:10056000109220031092210314BE84B7877F84BFAA +:1005700088E10FB6F89480936000109260000FBE7F +:10058000E0E0F8E3099511E0A0E0B1E0E2EBF9E585 +:1005900002C005900D92A03CB107D9F713E0A0EC82 +:1005A000B1E001C01D92AE31B107E1F70E94BE116A +:1005B0000C94D72C0C9400000895089581E00895C0 +:1005C00008950C94DD020C94DE020C94E0020E946B +:1005D000A12823E030E0281B3109220F2093C40119 +:1005E0000895282F2F9880918000211108C0877FBF +:1005F0008093800010928D0010928C001BC0886048 +:1006000080938000233019F48FEF9FEF0FC083E0B9 +:1006100090E0821B9109880F991F2FEF3FEFA901EE +:1006200002C0569547958A95E2F7CA0190938D00CE +:1006300080938C000C94E7020E94E70284E0809390 +:10064000C3011092C0010895279A2F988FEF9FEF52 +:1006500090938700809386008AE08093800089E1F0 +:10066000809381000E940A280C941C030E9424039A +:100670006E9A769A0C94DC021F920F920FB60F922C +:1006800011242F933F938F939F93EF93FF93E091C8 +:10069000C101F091C201CF0101969093C2018093F4 +:1006A000C1010090C30102C0F695E7950A94E2F7F4 +:1006B000EF738091C001823019F4E03251F404C02C +:1006C000813039F4EF3329F480916F008D7F80936E +:1006D0006F00F0E0E457FE4FE49121E031E0E29F4B +:1006E000C001E39F900D11240090C40102C09695B3 +:1006F00087950A94E2F790938D0080938C00FF9188 +:10070000EF919F918F913F912F910F900FBE0F907E +:100710001F90189581E008950C948A0308950C9415 +:10072000360380911502882309F448C08091D101D5 +:100730009091D201009779F40E94DE229093D20129 +:100740008093D1018091D30190E0009771F4809162 +:10075000D40190E00AC00E94EA2220910001309169 +:1007600001012817390740F329C00197880F991F05 +:10077000880F991FFC01EB52FE4F608171818281CD +:1007800093810E94530AE091D30184E0E89FF00135 +:100790001124EB52FE4F60817181828193814FE081 +:1007A00050E00E940B0E8091D30190E00196609181 +:1007B000D40170E00E94872C8093D3010C94E10255 +:1007C000109217020C94200A0895089581E08093F6 +:1007D00017020C94E503089508958F929F92AF92AB +:1007E000BF92EF92FF920F931F93CF93DF93CDB7FA +:1007F000DEB7A3970FB6F894DEBF0FBECDBF7C0166 +:10080000FC0100811181C8010E94DB20B8010E9417 +:10081000F2058C01B7010E948C03882309F4CCC136 +:100820000032F0E51F0741F4F7018281882309F4C3 +:1008300058C00E946F0EC0C10132F0E51F0741F49D +:10084000F7018281882309F44CC00E94780EB4C15C +:100850000232F0E51F0751F4F7018281882309F481 +:1008600040C00E946B0E8111F0CFE3CF0332F0E560 +:100870001F0739F4F7018281882399F10E94E6036A +:100880009BC10432F0E51F0739F4F7018281882308 +:1008900041F10E94E00390C10532F0E51F0749F4E1 +:1008A000F70182818823E9F0809117028111F1CF4D +:1008B000E5CF0632F0E51F0739F4F701828188237E +:1008C00081F00E947F0E0AC00732F0E51F0749F44D +:1008D000F7018281882329F00E948A0E0E94EC038E +:1008E0006BC180911702811105C0F70182818111CE +:1008F000CFC018C1003E110579F4F7018281882329 +:1009000009F44DC00E94200A81E0809316021092E3 +:1009100015021092D40150C1023E110559F4F7019D +:1009200082818823E1F10E94200A1092160210921F +:10093000150242C1033E110591F4F701828188231B +:1009400071F10E94200A1092160281E08093150234 +:100950001092D3011092D2011092D1012DC1023513 +:10096000110559F4F7018281882309F425C180918A +:100970000001909101010A970DC00135110579F42C +:10098000F7018281882309F417C1809100019091B9 +:1009900001010A9690930101809300010DC14091DD +:1009A000040183E2EFE1F1E0DE01119601900D9286 +:1009B0008A95E1F7F701808121E030E02C0F3D1F9F +:1009C000280F311DC9012091020130910301FC0162 +:1009D000E20FF31F6081772767FD7095640F711D2B +:1009E000882777FD8095982F0E94A92920E030E084 +:1009F00040E451E40E940E294B015C01F701218182 +:100A000084E090E0821B9109BC01882777FD8095E6 +:100A1000982F0E94A9299B01AC01C501B4010E9435 +:100A2000A6289B01AC0160E070E080E090E40E94A9 +:100A30001C2B20E030E04CED50E40E94B92A4B0121 +:100A40005C01F70182818823D1F04FE050E0C501BD +:100A5000B4010E940B0E809116028823A1F08091B0 +:100A6000D40124E0829FF0011124EB52FE4F8082DA +:100A70009182A282B3828F5F8093D40104C0C501AA +:100A8000B4010E94530A0F3F110508F02ECF94C005 +:100A90008091D00181111FC0043130E5130709F0A6 +:100AA00051C00E948E0381E08093D0010E94DE221B +:100AB0009093CF018093CE011092C7011092C9018B +:100AC0001092C8011092CB011092CA011092CD0170 +:100AD0001092CC0171C08091CE019091CF010E9403 +:100AE000EA22883C910570F48091C701E82FF0E07C +:100AF000EE0FFF1FE853FE4F118300838F5F80933B +:100B0000C7015AC0043880E5180721F005381045A0 +:100B100001F13AC0F7018281882341F01092C501AA +:100B200082E01EC0043830E5130759F58091C501F5 +:100B3000811106C086E20E94371886E20E94FF18E3 +:100B400082E01CC00438F0E51F0741F3053810456A +:100B5000D9F4F7018281882331F01092C60180E236 +:100B60000E944E1929C08091C601811106C087E2FA +:100B70000E94371887E20E94FF1880E20E945519F0 +:100B80001BC00538104529F381E08093C50180938F +:100B9000C601C701A3960FB6F894DEBF0FBECDBF46 +:100BA000DF91CF911F910F91FF90EF90BF90AF9089 +:100BB0009F908F900C94E30280E0A3960FB6F89478 +:100BC000DEBF0FBECDBFDF91CF911F910F91FF9080 +:100BD000EF90BF90AF909F908F90089580E090E04D +:100BE000089508959CE0799FF001112490E3899F76 +:100BF000E00DF11D1124E60FF11DEE0FFF1FEA526B +:100C0000FE4F859194910895880F991FFC01E45B34 +:100C1000FF4F859194910895880F991FFC01E4532B +:100C2000FE4F8591949108950F931F93CF93DF9377 +:100C3000EC01811521E39207A0F5C11580E3D807E7 +:100C400008F0D7C0C83ED105D8F4C03ED10508F0A1 +:100C500007C2C83AD10578F4C53AD10508F06AC090 +:100C6000C130D10509F463C008F4F7C1C430D1051F +:100C700008F0F6C1F2C1CB3BD10508F466C0EDC166 +:100C8000C11590E2D90708F0AFC0C11521E0D20725 +:100C900008F0E6C1C03FD10508F4DFC18E01106540 +:100CA0001FC2C03880E5D80700F5C03790E5D907E6 +:100CB00008F0A3C0C11520E5D20709F4ACC050F478 +:100CC000CE01905480319F4008F0C7C1DF708E0183 +:100CD000106A06C2C13080E5D80709F4AEC0C4313D +:100CE00090E5D90708F4AFC0B8C1C33820E5D207F2 +:100CF00009F48EC050F4C13890E5D90709F482C0D8 +:100D000008F083C000E011EDEBC1C03181E5D807E8 +:100D100008F4A3C1C11597E5D90708F436C1CE017F +:100D200090578115904108F098C1DF7093C101E0A0 +:100D300010E0D6C1C53AD10509F494C1C63AD1052F +:100D400009F093C102E810E4CBC1C83AD10509F417 +:100D50008FC1C93AD10509F48EC1CA3AD10509F447 +:100D60008DC1CB3AD10509F48CC1CC3AD10509F437 +:100D70008BC1CD3AD10509F48AC1C03BD10509F434 +:100D800089C1CE3AD10509F488C1CF3AD10509F419 +:100D900087C1C13BD10509F486C1C23BD10509F425 +:100DA00085C1C33BD10509F484C1C43BD10509F415 +:100DB00083C1C53BD10509F482C1C63BD10509F405 +:100DC00081C1C73BD10509F480C1C83BD10509F4F5 +:100DD0007FC1C93BD10509F47EC1CA3BD10509F4E5 +:100DE0007DC100E014E47CC1CE019F700E940C061E +:100DF00078C1DD278E01106C73C1CF70DD278E01A5 +:100E0000146D6EC100E010ED6BC100E012ED68C121 +:100E100000E013ED65C10E94E21B0E94200A0E94BF +:100E2000E4038FEF94E32CE0815090402040E1F701 +:100E300000C000000E94392353C18091F2028160FA +:100E40008093F2024DC10E949A23811102C00E9438 +:100E500076230E94AD2390E090931D0380931C03A2 +:100E6000C23080E5D80721F480911C03816086C0E0 +:100E7000C43090E5D90721F480911C0382607EC0C4 +:100E8000C63020E5D20721F480911C03846076C02F +:100E9000C83080E5D80719F480911C0327C0CA30F8 +:100EA00090E5D90721F480911C03806167C0CC30A4 +:100EB00020E5D20721F480911C0380625FC0CE3010 +:100EC00080E5D80721F480911C03806457C0C031AD +:100ED00090E5D90721F480911C0380684FC0C2318E +:100EE00020E5D20729F480911C038460886046C005 +:100EF000C33080E5D80721F480911C038E7F3EC06B +:100F0000C53090E5D90721F480911C038D7F36C050 +:100F1000C73020E5D20721F480911C038B7F2EC0BF +:100F2000C93080E5D80719F480911C0326C0CB3066 +:100F300090E5D90721F480911C038F7E1FC0CD302E +:100F400020E5D20721F480911C038F7D17C0CF309C +:100F500080E5D80721F480911C038F7B0FC0C1313D +:100F600090E5D90721F480911C038F7707C0C33126 +:100F7000D04531F480911C038B7F877F80931C03C5 +:100F800080911C030E94B123ABC08D2F99278F70D5 +:100F9000992781309105D9F49E012370332702C02F +:100FA000880F991F2A95E2F79C688E0144E0000F94 +:100FB000111F4A95E1F700271370802B912B53E006 +:100FC000CC0FDD1F5A95E1F7C076DD272FC08230A8 +:100FD000910531F4DC2FCC278E01016F106A80C09F +:100FE0008330910569F4CE018370992701E010E008 +:100FF00002C0000F111F8A95E2F7C8019C680FC05C +:1010000084309105B9F4CE018370992701E010E096 +:1010100002C0000F111F8A95E2F7C8019A6823E009 +:10102000CC0FDD1F2A95E1F7C07ED7708C010C2B09 +:101030001D2B56C08530910531F4DC2FCC278E0155 +:10104000046F106A4DC0069709F04AC0CF71DD27C2 +:10105000DC2FCC278E01106243C000E010E040C0BE +:101060008E013EC001E810E43BC003E810E438C044 +:1010700002EE14E435C009EE14E432C00AEE14E4C2 +:101080002FC005EB14E42CC006EB14E429C007EBD9 +:1010900014E426C00CEC14E423C00DEC14E420C0CE +:1010A00003E815E41DC00AE815E41AC002E915E4D6 +:1010B00017C004E915E414C001E216E411C003E20C +:1010C00016E40EC004E216E40BC005E216E408C004 +:1010D00006E216E405C007E216E402C00AE216E4DE +:1010E000C801DF91CF911F910F9108959CE0799FE6 +:1010F000F001112490E3899FE00DF11D1124E60F0A +:10110000F11DEE0FFF1FEA52FE4F85919491803E34 +:101110009105E0F4803C910558F58133910509F47F +:101120006FC048F48932910509F463C08A32910591 +:1011300009F46DC072C089339105E9F082389105D8 +:10114000D1F08533910509F44DC067C0833E910508 +:1011500081F138F4803E9105B9F0823E9105D9F0D5 +:101160005CC0863E910561F1873E9105A1F155C0B5 +:101170000E940406089520911C0320FD02C021FF57 +:101180004CC080EE90E049C080911C0380FFF9CFF5 +:1011900089E390E042C080911C0382FF0EC08091E1 +:1011A0001C0384FF03C080E090E037C083EE90E032 +:1011B00034C080911C0382FFF2CF82EE90E02DC0FC +:1011C00080911C0383FF0BC080911C0384FDEBCF37 +:1011D00087EE90E022C080911C0383FFF5CF86EE5E +:1011E00090E01BC080911C0385FF07C089E290E05E +:1011F00014C080911C0385FFF9CF85E390E00DC0FA +:1012000080911C0386FF07C08AE290E006C08091AF +:101210001C0386FFF9CF81E390E00E941406089535 +:101220000C94E502E82FF0E0E25BFE4F8081E82FAE +:10123000EF70F0E082958F7021E030E0A90102C0EC +:10124000440F551F8A95E2F740A308950F931F930B +:10125000CF93DF9385B7806885BF85B7806885BFEA +:10126000C3E0D0E001E010E0FE01E25BFE4F8081D0 +:10127000E82FEF70F0E021A182958F70A80102C0E5 +:10128000440F551F8A95E2F7CA01822B81A38C2F48 +:101290000E941209219740F78BE090E061E070E036 +:1012A000FC01EE5BFE4F2081E22FEF70F0E042A1E7 +:1012B00022952F70DB0102C0AA0FBB1F2A95E2F70F +:1012C0009D01242B22A3019758F7DF91CF911F9105 +:1012D0000F910C948F03EF92FF920F931F93CF9374 +:1012E000DF9300E212E0C3E0EE24E394F12CD5E0BA +:1012F0008C2F0E9412098BE090E040E050E0FC014E +:10130000EE5BFE4F6081E62FEF70F0E020A130E051 +:1013100062956F7002C0359527956A95E2F720FDBA +:1013200009C09701082E02C0220F331F0A94E2F76A +:10133000422B532B019718F7F801929182918F015C +:101340008417950721F051834083D09305018C2F9A +:101350000E941209C15060F68091050187FD2CC0E2 +:101360008150809305018F3F39F08FE99FE001970D +:10137000F1F700C0000020C080911E0290911F0272 +:10138000909327028093260280911C0290911D0267 +:10139000909325028093240280911A0290911B025F +:1013A0009093230280932202809118029091190257 +:1013B00090932102809320020E94910381E0DF91AB +:1013C000CF911F910F91FF90EF900895E82FF0E0DB +:1013D000EE0FFF1FE05EFD4F80819181089508951B +:1013E0000F931F93CF9308E212E0C0E0F8019291AF +:1013F00082918F010E945622C80FF2E000321F072F +:10140000A9F78C2FCF911F910F9108950E949A23D5 +:10141000811102C00E9476230E94BF23809307039C +:101420003E9A809171008D7F8093710082E080935D +:1014300090008AE18093910081E080932A020895D0 +:1014400080912A02811102C00E94060A10927A023B +:1014500010927902809171008D7F8093710080914C +:1014600090008F738093900010923C0210923B0288 +:10147000109273021092740210927502109276020A +:101480001092720210927102E1E5F2E0A1E4B2E082 +:1014900011921192119211921D921D9282E0E137E8 +:1014A000F807B1F70895CF92DF92EF92FF920F9372 +:1014B0001F93CF93DF9320913B02222309F484C032 +:1014C0006B017C0180912A02811102C00E94060AF0 +:1014D00001E712E0C7E0D0E0A7019601F801929180 +:1014E0008291729162918F010E940A29811131C00B +:1014F000FE01EE0FFF1FEE0FFF1FEF5AFD4F108290 +:10150000118212821382DE01AA0FBB1FAF5BBD4F97 +:1015100011961C921E92C730D105E9F021964481A4 +:1015200055816681778140835183628373831482FE +:1015300015821682178212968D919C91139711969F +:101540009C938E9313961C921E9212973496129629 +:10155000E2CF219708F68091790290917A02019763 +:1015600097FD05C090937A028093790204C010928F +:101570007A02109279028091790290917A022091F8 +:101580007702309178022817390724F010927802F8 +:1015900010927702892BC1F4809171008D7F809326 +:1015A0007100809190008F7380939000109273026D +:1015B00010927402109275021092760210927202CA +:1015C0001092710210923B02DF91CF911F910F9107 +:1015D000FF90EF90DF90CF9008951F920F920FB67B +:1015E0000F9211244F925F926F927F928F929F92EF +:1015F000AF92BF92CF92DF92EF92FF922F933F93E1 +:101600004F935F936F937F938F939F93AF93BF930A +:10161000CF93DF93EF93FF9380913B02882309F4EC +:101620009BC1C0917902D0917A021C161D060CF064 +:1016300093C140902B0250902C0260902D0270902C +:101640002E0220E030E0A901C301B2010E94B52AB8 +:1016500018160CF065C0C130D10509F452C0809154 +:10166000770290917802BE010E94872C7C019093B2 +:1016700078028093770280903D0290903E02A09085 +:101680003F02B090400220E030E040E85FE3C50157 +:10169000B4010E94A62860933D0270933E0280939D +:1016A0003F0290934002F701EE0FFF1FEE0FFF1F66 +:1016B000EF5AFD4FA3019201608171818281938174 +:1016C0000E940E2920E030E040E05EE30E94B92A4B +:1016D0009B01AC01C501B4010E94B52A18168CF417 +:1016E000C7010196BE010E94872C909378028093D7 +:1016F000770210923D0210923E0210923F02109229 +:101700004002E0917702F0917802EE0FFF1FEE0F9A +:10171000FF1FEF5AFD4F6081718182819381D0C09C +:10172000C0907302D0907402E0907502F09076023F +:1017300020E030E0A901C701B6010E940A292197E3 +:10174000882309F4A2C0FE01EE0FFF1FEE0FFF1F5A +:10175000EF5AFD4F80809180A280B380A501940153 +:10176000C701B6010E940A2987FF31C0A501940173 +:1017700060E070E08CED93EC0E940E2920E030E0F8 +:1017800040E451E40E940E2920E030E040E05FE3B5 +:101790000E94B92A9B01AC0160E070E080E090E417 +:1017A0000E941C2B9B01AC01C501B4010E94B92A07 +:1017B0009B01AC01C701B6010E940A2987FF07C03F +:1017C000A701960160E070E08CED93E439C0A501BB +:1017D0009401C701B6010E94B52A18160CF055C035 +:1017E000A501940160E070E08CED93E40E940E2965 +:1017F00020E030E040E451E40E940E2920E030E097 +:1018000040E05FE30E94B92A9B01AC0160E070E018 +:1018100080E090E40E941C2B9B01AC01C501B40147 +:101820000E94B92A9B01AC01C701B6010E94B52AEA +:1018300018165CF5A701960160E070E08CED93EC62 +:101840000E940E2920E030E040E451E40E940E297D +:1018500020E030E040E05FE30E94B92A9B01AC0148 +:1018600060E070E080E090E40E941C2B9B01AC01E2 +:10187000C701B6010E94B92A609373027093740283 +:10188000809375029093760213C0FE01EE0FFF1F46 +:10189000EE0FFF1FEF5AFD4F80819181A281B3812E +:1018A0008093730290937402A0937502B0937602B2 +:1018B000609173027091740280917502909176022A +:1018C00020912802309129022F3F4FEF340731F049 +:1018D0002F5F3F4F30932902209328020E94950EDC +:1018E0006B017C0120E034E244EF51E40E940A29BC +:1018F00087FF08C086EFC82E88E2D82E84EFE82E36 +:1019000081E4F82E20E030E040E051E4C701B60168 +:101910000E94B92A9B01AC0160E074E284E79BE479 +:101920000E940E296B017C010E947B297093970015 +:1019300060939600209106013091070140910801C3 +:1019400050910901C701B6010E94B92A0E947B2962 +:10195000709399006093980080913C02882309F469 +:1019600033C1C0903702D0903802E0903902F09035 +:101970003A0220E030E0A901C701B6010E94B52A71 +:101980001816D4F580912802909129028F3F2FEFED +:10199000920729F001969093290280932802C701AB +:1019A000B6010E94950E20E030E040E051E40E9434 +:1019B000B92A9B01AC0160E074E284E79BE40E94D9 +:1019C0000E296B017C010E947B2970939700609324 +:1019D0009600209106013091070140910801509135 +:1019E0000901C701B6010E94B92A0E947B297093A0 +:1019F00099006093980008C010929700109296008A +:101A00001092990010929800609131027091320208 +:101A10006F5F7F4F70933202609331022091960086 +:101A20003091970080E090E0232BF1F0C091960078 +:101A3000D09197000E94A7296B017C01BE0180E034 +:101A400090E00E94A7299B01AC0160913302709144 +:101A5000340280913502909136020E940E2920E0D6 +:101A60003FEF4FE757E410C00E94A7296B017C01AC +:101A700020E030EE4FEF54E4609133027091340275 +:101A800080913502909136020E94B92A9B01AC01E7 +:101A9000C701B6010E94B52A87FD96C080912F022A +:101AA0008F5F80932F0290E0209103033091040315 +:101AB00082179307A0F080910E03882319F01092EB +:101AC0002F020DC0809171008D7F809371008091F5 +:101AD00090008F738093900010923C027DC08091A3 +:101AE0003002C0912F02811128C0C0900803D0900D +:101AF0000903E0900A03F0900B0320E030E0A90115 +:101B0000C701B6010E94B52A1816BCF481E0809383 +:101B1000300210923702109238021092390210925D +:101B20003A02C0923302D0923402E0923502F0922F +:101B30003602C150C0932F0243C01092300210925F +:101B4000290210922802E0910503F091060348E073 +:101B5000C49FE00DF11D112480819181A281B38188 +:101B60008093370290933802A0933902B0933A02DF +:101B700020E030E040E85EE36481758186819781F2 +:101B80000E94B92A6B017C0180910A01682F70E0E4 +:101B900080E090E00E94A72920E030E048EC52E489 +:101BA0000E940E299B01AC01C701B6010E94B92A0F +:101BB000609333027093340280933502909336021F +:101BC00010923202109231028091070380FD04C00E +:101BD00010923C0210923B02FF91EF91DF91CF9166 +:101BE000BF91AF919F918F917F916F915F914F9135 +:101BF0003F912F91FF90EF90DF90CF90BF90AF90EB +:101C00009F908F907F906F905F904F900F900FBE3E +:101C10000F901F901895CF92DF92EF92FF92CF9383 +:101C2000DF936B017C01EA0180912A02811102C0DD +:101C30000E94060A8091070380FF46C080917902C6 +:101C400090917A0208970CF03FC0809171008D7FCF +:101C50008093710080913C0281110E94200A81E0F2 +:101C600080933B02109229021092280220E030E07B +:101C7000A901C701B6010E94B52A1816DCF48091AB +:101C8000790290917A02FC01EE0FFF1FEE0FFF1F09 +:101C9000EF5AFD4FC082D182E282F382FC01EE0F47 +:101CA000FF1FEF5BFD4FD183C083019690937A02B3 +:101CB000809379028091710082608093710080919D +:101CC0009000806880939000DF91CF91FF90EF901B +:101CD000DF90CF90089580910703817008958091DF +:101CE00007038160809307030E94C3230C94EB03D6 +:101CF000809107038E7F809307030C94C323809108 +:101D00007B0290E0019666E070E00E94872C809351 +:101D10007B02089580917B0290E0019766E070E07D +:101D20000E94872C80937B0208958F929F92AF929E +:101D3000BF92CF92DF92EF92FF920F931F93CF93B8 +:101D4000DF936B017C01C0912802D0912902BE0172 +:101D500080E090E00E94A7294B015C01A701960159 +:101D600060E070E08CE594E40E940E299B01AC01D8 +:101D7000C501B4010E94B92A0E947B2920917B02EF +:101D8000233009F473C028F4222351F02130E9F004 +:101D90002CC1243009F4A0C0253009F4E0C025C1CD +:101DA00080E090E0A0E0BFE38093060190930701FC +:101DB000A0930801B093090110922B0210922C02FB +:101DC00010922D0210922E0210C110922B0210922E +:101DD0002C0210922D0210922E026431710540F4F3 +:101DE0006A30710560F520E030E040E85EE32BC02A +:101DF000693C710508F0AAC080E090E00E94A72924 +:101E000020E030E040EA51E40E94A52820E030E0E4 +:101E100044E353E40E940E299B01AC010E94B92ABD +:101E200020E030E040E05EE30E94B92A9B01AC0173 +:101E300060E070E080E09EE30E94A52844C020E0BE +:101E400030E040E05FE3C701B6010E94B92A6B01B0 +:101E50007C0180E090E0A0E0BEE3809306019093D7 +:101E60000701A0930801B0930901BFC010922B0293 +:101E700010922C0210922D0210922E024AE0469FE0 +:101E80009001479F300D1124C90168EB7BE00E944F +:101E9000732CBC016C5D754077FF03C07195619533 +:101EA0007109882777FD8095982F0E94A9292EE334 +:101EB00033EC4EE259E30E94B92A20E030E040ECD6 +:101EC0005EE30E94A6286093060170930701809349 +:101ED00008019093090189C010922B0210922C02E4 +:101EE00010922D0210922E02CE0183709927892B19 +:101EF000E1F0BE016170772780E090E00E94A729A1 +:101F000020E030E040E05EE30E94B92A20E030E0CB +:101F100040E45FE30E94A6286093060170930701E6 +:101F200080930801909309010CC080E090E0A0E04C +:101F3000BFE38093060190930701A0930801B0933B +:101F40000901C770DD27CD2B09F04FC010920601A3 +:101F500010920701109208011092090146C01092D8 +:101F60002B0210922C0210922D0210922E0200E0F1 +:101F700010E020E03FE30093060110930701209357 +:101F80000801309309016739710578F180E090E02C +:101F90000E94A72920E030E047E153E40E94A528F1 +:101FA00020E030E04AE754E40E940E2920E030E0CF +:101FB00048E452E40E94B92A20E030E040EA51E4CB +:101FC0000E94EB290E947629660F771F660F771F04 +:101FD000FB01EE5AFE4F2081318142815381C701BE +:101FE000B6010E94B92A6B017C01C701B601DF91DD +:101FF000CF911F910F91FF90EF90DF90CF90BF9006 +:10200000AF909F908F90089580918C020895CF9308 +:10201000DF9300D01F92CDB7DEB79C0180911303F0 +:10202000843019F593E099833B832A839093E900E8 +:102030008FEF9091E800815095FD06C095ED9A953F +:10204000F1F700008111F5CF8091E80085FF0DC008 +:1020500040E050E063E070E0CE0101960E9468121B +:102060008091E8008E778093E8000F900F900F909A +:10207000DF91CF910895CF93DF9300D01F92CDB71A +:10208000DEB720911303243021F522E029839B83BE +:102090008A8383E08093E9008FEF9091E80081507C +:1020A00095FD06C095ED9A95F1F700008111F5CFE9 +:1020B0008091E80085FF0DC040E050E063E070E0F3 +:1020C000CE0101960E9468128091E8008E7780937D +:1020D000E8000F900F900F90DF91CF91089520911D +:1020E00013032430F1F422E02093E9002FEF309124 +:1020F000E800215035FD06C035ED3A95F1F70000B6 +:102100002111F5CF2091E80025FF0BC040E050E001 +:1021100065E070E00E9468128091E8008E778093FD +:10212000E8000895CF93DF93EC019091130394306E +:1021300009F046C0809115018823D9F080911601DD +:102140008823B9F09093E9008FEF9091E8008150D7 +:1021500095FD06C095E19A95F1F700008111F5CF44 +:102160008091E80085FF2CC040E050E060E170E025 +:1021700017C081E08093E9008FEF9091E8008150D3 +:1021800095FD06C095ED9A95F1F700008111F5CF08 +:102190008091E80085FF14C040E050E068E070E006 +:1021A000CE010E9468128091E8008E778093E8004B +:1021B00080E1FE01ACE7B2E001900D928A95E1F773 +:1021C000DF91CF91089580911203811109C00E947F +:1021D000FD130E945A148091E20084608093E20013 +:1021E0000895109212030895089508950C94A12261 +:1021F00042E061EC81E00E94771342E061EC82E012 +:102200000E94771342E061EC83E00E94771342E181 +:1022100061EC84E00C94771380911503833009F40A +:1022200055C030F4813071F0823009F48EC00895C9 +:102230008A3009F47AC08B3009F460C0893009F023 +:102240009CC020C080911403813A09F096C080910F +:10225000E800877F8093E80080911803909119032C +:10226000892B21F460E18CE792E003C060E080E01C +:1022700090E070E00E94B3128091E8008B77809329 +:10228000E800089580911403813209F076C08091AE +:10229000180390911903009719F0039709F06DC086 +:1022A0008091E800877F8093E8008091E80082FDBC +:1022B00005C0809113038111F8CF5FC08091F100B8 +:1022C00080938C028091E8008B7753C08091140337 +:1022D000813A09F052C08091180390911903892B1B +:1022E00009F04BC08091E800877F8093E8008091DF +:1022F000E80080FFFCCF8091150136C08091140367 +:102300008132D9F58091180390911903892BA9F591 +:102310008091E800877F8093E8000E94AC13809151 +:102320001603809315010C94E21B809114038132F3 +:1023300021F58091E800877F8093E8000E94AC132C +:102340008091170380938D02089580911403813A40 +:10235000A1F48091E800877F8093E8008091E800F5 +:1023600080FFFCCF80918D028093F1008091E80086 +:102370008E778093E8000C94AC13089584B7877F20 +:1023800084BF88E10FB6F8948093600010926000DB +:102390000FBE90E080E80FB6F894809361009093B0 +:1023A00061000FBE0E944F170E94FD130E945A1435 +:1023B0008091E20084608093E20078940E94E016AD +:1023C0000E9451178BE091E00E94FB16809113034D +:1023D000853069F40E946222809111038823B1F351 +:1023E0000E949022882391F30E945212EFCF0E9404 +:1023F0005917ECCF292F332723303105C9F064F466 +:102400002130310581F02230310509F043C08DE6DD +:1024100090E022EB33E042C021323105F1F022326C +:10242000310541F137C082E190E02FE134E036C060 +:1024300099278130910541F08230910541F0892B37 +:1024400049F5EEEAF3E005C0E0E8F3E002C0E6E5B6 +:10245000F3E0849190E09F0121C06430D8F4E62F2E +:10246000F0E0EE0FFF1FE255FE4F2081318189E041 +:1024700090E014C0643070F470E0FB01EE0FFF1FB9 +:10248000EA55FE4F20813181FB01EE55FE4F8081E0 +:1024900090E004C080E090E020E030E0FA01318379 +:1024A0002083089580E189BD82E189BD09B400FEE1 +:1024B000FDCF8091D8008F7D8093D8008091E0007F +:1024C00082608093E0008091E00081FDFCCF089560 +:1024D000CF92DF92EF92FF920F931F93CF93DF93F0 +:1024E000EC018B016A010E94CB13811133C0C1142E +:1024F000D10439F0F60180819181081B190BC80FB6 +:10250000D91FE12CF12C0115110519F18091E8007A +:1025100085FD16C08091E8008E778093E800C11495 +:10252000D10449F0F60180819181E80EF91EF18213 +:10253000E08285E00FC00E94CB13882321F30AC0FC +:1025400089918093F10001501109FFEFEF1AFF0A02 +:10255000DACF80E0DF91CF911F910F91FF90EF9044 +:10256000DF90CF90089520911A0330911B03261716 +:10257000370748F06115710539F42091E8002E778E +:102580002093E80001C0B90140E061157105A9F18F +:1025900020911303222309F443C0253009F442C0DB +:1025A0002091E80023FD40C02091E80022FD32C0C8 +:1025B0002091E80020FFE9CF4091F3002091F20044 +:1025C00030E0342BFC01CF016115710559F0283042 +:1025D000310540F481918093F100615071092F5FC2 +:1025E0003F4FF1CF41E02830310509F040E0209124 +:1025F000E8002E772093E800C8CF4111C9CF0AC068 +:1026000080911303882361F0853061F08091E800A8 +:1026100083FD0AC08091E80082FFF2CF80E0089538 +:1026200082E0089583E0089581E0089520911A03DF +:1026300030911B032617370748F06115710539F4EF +:102640002091E8002E772093E80001C0B901FC0139 +:1026500020E06115710591F180911303882309F43D +:1026600040C0853009F43FC08091E80083FD3DC043 +:102670008091E80082FD2FC08091E80080FFE9CFC3 +:102680002091F3008091F20090E0922B611571058A +:1026900059F08830910540F424912093F10031964F +:1026A000615071090196F2CF21E0089709F020E00E +:1026B0008091E8008E778093E800CBCF2111CCCFBA +:1026C0000AC080911303882361F0853061F0809106 +:1026D000E80083FD0AC08091E80082FFF2CF80E02D +:1026E000089582E0089583E0089581E00895982F89 +:1026F000973058F59093E900981739F07091EC00F5 +:102700002091ED005091F00003C0242F762F50E06F +:1027100021FF19C03091EB003E7F3093EB003091E8 +:10272000ED003D7F3093ED003091EB003160309350 +:10273000EB007093EC002093ED005093F00020919B +:10274000EE0027FF07C09F5FD3CF8F708093E90013 +:1027500081E0089580E008958091140387FF11C0FF +:102760008091E80082FD05C0809113038111F8CFAC +:1027700011C08091E8008B770BC0809113038823F0 +:1027800049F08091E80080FFF8CF8091E8008E77D3 +:102790008093E80008952091E4003091E50095E6EB +:1027A0004091EC00842F817040FF22C08091E800AE +:1027B00080FD1CC080911303882391F0853091F037 +:1027C0008091EB0085FD10C04091E4005091E50040 +:1027D0004217530729F39A01915011F784E00895A5 +:1027E00082E0089583E0089581E0089580E00895EF +:1027F0004091E80042FFDECF08950E946B140E94D2 +:102800007314E0EEF0E0808181608083E8EDF0E019 +:1028100080818F77808319BCA7EDB0E08C918E7F8B +:102820008C9380818F7E80831092120308950F9382 +:102830001F93CF93DF930E946B140E947314C8ED13 +:10284000D0E088818F7788838881806888838881B9 +:102850008F7D888319BC1092130310920F0310927E +:1028600011031092100300EE10E0F80180818B7FBD +:10287000808388818160888342E060E080E00E94FC +:102880007713E1EEF0E080818E7F8083E2EEF0E06E +:10289000808181608083808188608083F80180816D +:1028A0008E7F8083888180618883DF91CF911F91A3 +:1028B0000F910895E8EDF0E080818F7E8083E7ED51 +:1028C000F0E080818160808384E082BF81E080933A +:1028D00012030C941714E8EDF0E080818E7F808362 +:1028E0001092E20008951092DA001092E10008952B +:1028F0001F920F920FB60F9211242F933F934F9375 +:102900005F936F937F938F939F93AF93BF93EF9357 +:10291000FF938091E10082FF0BC08091E20082FF73 +:1029200007C08091E1008B7F8093E1000E94DF1659 +:102930008091DA0080FF1FC08091D80080FF1BC00B +:102940008091DA008E7F8093DA008091D90080FF39 +:102950000DC080E189BD82E189BD09B400FEFDCFD3 +:1029600081E0809313030E94E31005C019BC10920C +:1029700013030E94F1108091E10080FF19C0809143 +:10298000E20080FF15C08091E2008E7F8093E2001C +:102990008091E20080618093E2008091D8008062A3 +:1029A0008093D80019BC85E0809313030E94F51032 +:1029B0008091E10084FF30C08091E20084FF2CC050 +:1029C00080E189BD82E189BD09B400FEFDCF80911F +:1029D000D8008F7D8093D8008091E1008F7E809316 +:1029E000E1008091E2008F7E8093E2008091E2001E +:1029F00081608093E20080910F03882311F084E0CE +:102A000007C08091E30087FD02C081E001C083E040 +:102A1000809313030E94F6108091E10083FF29C088 +:102A20008091E20083FF25C08091E100877F809341 +:102A3000E10082E08093130310920F038091E10084 +:102A40008E7F8093E1008091E2008E7F8093E20090 +:102A50008091E20080618093E20042E060E080E0EB +:102A60000E9477138091F00088608093F0000E94AC +:102A7000F410FF91EF91BF91AF919F918F917F9152 +:102A80006F915F914F913F912F910F900FBE0F90DB +:102A90001F9018951F920F920FB60F9211242F932B +:102AA0003F934F935F936F937F938F939F93AF93D6 +:102AB000BF93CF93DF93EF93FF93C091E900CF7063 +:102AC0008091EC00D82FD17080FDD0E81092E90001 +:102AD0008091F000877F8093F00078940E948E159B +:102AE0001092E9008091F00088608093F000CD2B77 +:102AF000CF70C093E900FF91EF91DF91CF91BF912B +:102B0000AF919F918F917F916F915F914F913F9185 +:102B10002F910F900FBE0F901F9018951F93CF937A +:102B2000DF93CDB7DEB7AA970FB6F894DEBF0FBE1E +:102B3000CDBFE4E1F3E088E08E0F9091F100919336 +:102B40008E13FBCF0E940C118091E80083FF1FC100 +:102B50008091140390911503492F50E04A3051059C +:102B600008F015C1FA01EA5AFF4F0C949B2C8038EB +:102B700081F0823809F00BC1809118038F70809327 +:102B8000E9008091EB0085FB882780F91092E9002D +:102B900006C0809110039091110391118260909171 +:102BA000E800977F9093E8008093F1001092F10085 +:102BB000C8C0282F2D7F09F0EAC0882319F0823081 +:102BC00061F0E5C080911603813009F0E0C09330D8 +:102BD00009F080E0809311032BC0809116038111CE +:102BE00027C0809118038F7009F4D1C08093E90049 +:102BF0002091EB0020FF1CC0933021F48091EB006A +:102C0000806214C09091EB0090619093EB0021E002 +:102C100030E0A90102C0440F551F8A95E2F74093A6 +:102C2000EA001092EA008091EB0088608093EB004C +:102C30001092E9008091E800877F86C08111A7C0CB +:102C4000109116031F778091E3008078812B809389 +:102C5000E3008091E800877F8093E8000E94AC1336 +:102C60008091E80080FFFCCF8091E3008068809332 +:102C7000E300111102C082E001C083E080931303DE +:102C800086C08058823008F082C0809116039091EF +:102C900017038C3D53E0950779F583E08A838AE238 +:102CA00089834FB7F894DE01139620E03EE051E2AD +:102CB000E32FF0E050935700E49120FF03C0E2952A +:102CC000EF703F5FEF708E2F90E0EA3010F0C79604 +:102CD00001C0C0968D939D932F5F243149F74FBF5C +:102CE0008091E800877F8093E8006AE270E0CE017F +:102CF00001960E94B31214C0AE014F5F5F4F609106 +:102D000018030E94FA11BC01009709F440C0909189 +:102D1000E800977F9093E80089819A810E941613BA +:102D20008091E8008B778093E80031C0803879F596 +:102D30008091E800877F8093E80080910F03809363 +:102D4000F1008091E8008E778093E8000E94AC1338 +:102D50001EC081111CC0909116039230C0F4809166 +:102D6000E800877F8093E80090930F030E94AC13E4 +:102D700080910F03811106C08091E30087FD02C09E +:102D800081E001C084E0809313030E94F8108091D9 +:102D9000E80083FF0AC08091E800877F8093E80005 +:102DA0008091EB0080628093EB00AA960FB6F894B6 +:102DB000DEBF0FBECDBFDF91CF911F910895089563 +:102DC000CF93809113038823A1F0C091E900CF70C5 +:102DD0009091EC00892F817090FD80E8C82B1092B3 +:102DE000E9008091E80083FD0E948E15CF70C093AA +:102DF000E900CF91089590939302809392020895F1 +:102E0000E0919202F0919302309721F00190F081CD +:102E1000E02D099480E00895E0919202F0919302F0 +:102E2000309721F00280F381E02D09940895E0911C +:102E30009202F0919302309721F00480F581E02D09 +:102E4000099408952091900230919102821793077E +:102E500071F09093910280939002E0919202F09130 +:102E60009302309721F00680F781E02D09940895B0 +:102E700020918E0230918F028217930771F0909308 +:102E80008F0280938E02E0919202F091930230972C +:102E900021F00084F185E02D0994089508950C94A3 +:102EA0004E170E94D5220E9426090E945B230C9493 +:102EB0000A285F926F927F928F929F92AF92BF92F9 +:102EC000CF92DF92EF92FF920F931F93CF93DF93F6 +:102ED00000D000D01F92CDB7DEB70E946B099DE9EC +:102EE000C92E92E0D92E03E010E0AA24A394B12CBD +:102EF000502E802F0E94E6094C01F60172906290DC +:102F00006F016826792661147104A1F4015011093A +:102F100078F78FEF89838A831B820E94DE2281608B +:102F2000782F9D838C8349815A816B818D810E948A +:102F3000091838C08091F20281FD0E94EF092BE050 +:102F400030E07501022E02C0EE0CFF1C0A94E2F77D +:102F5000C70186219721892B09F129835A828E2066 +:102F60009F2091E0892809F490E09B830E94DE2253 +:102F70008160782F9D838C8349815A816B818D81FB +:102F80000E940918000F111FF801EB56FD4F8081B8 +:102F90009181E826F926F182E08204C021503109AE +:102FA00080F6B4CF0E944225109194020E9400172F +:102FB0001817D1F00E940017809394020F900F9081 +:102FC0000F900F900F90DF91CF911F910F91FF9075 +:102FD000EF90DF90CF90BF90AF909F908F907F90B9 +:102FE0006F905F900C9410090F900F900F900F90BE +:102FF0000F90DF91CF911F910F91FF90EF90DF9095 +:10300000CF90BF90AF909F908F907F906F905F9088 +:103010000895CF93DF93CDB7DEB72B970FB6F89413 +:10302000DEBF0FBECDBF4F83588769877A878B87F6 +:10303000DE01119686E0FD0111928A95E9F785E09F +:10304000FE01379601900D928A95E1F749815A81E8 +:103050006B817C818D819E810E94801E2B960FB694 +:10306000F894DEBF0FBECDBFDF91CF910895CF930F +:10307000882309F4C2C0C82F823859F40E9400176F +:1030800081FDBBC089E30E945A210E94272289E367 +:103090000CC0833879F40E94001780FDAEC083E530 +:1030A0000E945A210E94272283E50E949C21CF91F1 +:1030B0000C942722843859F40E94001782FD9DC089 +:1030C00087E40E945A210E94272287E4EECF8CEFEA +:1030D0008C0F813A48F48C2F0E94722781118DC089 +:1030E0008C2F0E945A21E3CF80E28C0F883048F465 +:1030F000C77081E001C0880FCA95EAF70E94E021FD +:10310000D6CF8BE58C0F833078F4C53A29F0C63AD8 +:1031100031F083E890E005C081E890E002C082E8E9 +:1031200090E0CF910C94221788E58C0F833108F042 +:1031300064C0C83A39F1C93A41F1CA3A49F1CB3AC7 +:1031400051F1CC3A59F1CD3A61F1C03B69F1CE3A37 +:1031500071F1CF3A79F1C13B81F1C23B89F1C33BB7 +:1031600091F1C43B99F1C53BA1F1C63BA9F1C73B25 +:10317000B1F1C83BB9F1C93BC1F1CA3BC9F180E02B +:1031800090E038C082EE90E035C089EE90E032C029 +:103190008AEE90E02FC085EB90E02CC086EB90E0AB +:1031A00029C087EB90E026C08CEC90E023C08DEC2A +:1031B00090E020C083E891E01DC08AE891E01AC049 +:1031C00082E991E017C084E991E014C081E292E0C5 +:1031D00011C083E292E00EC084E292E00BC085E26F +:1031E00092E008C086E292E005C087E292E002C069 +:1031F0008AE292E0CF910C943817CF9108958823FA +:1032000009F44BC0823859F40E94001781FF45C071 +:1032100089E30E945A210E94272289E30CC0833847 +:1032200071F40E94001780FF38C083E50E945A2184 +:103230000E94272283E50E949C210C942722843837 +:1032400059F40E94001782FF28C087E40E945A2187 +:103250000E94272287E4EFCF9CEF980F913A58F312 +:1032600090E2980F983050F4877091E001C0990F68 +:103270008A95EAF7892F0E94E621DFCF9BE5980F18 +:10328000933020F480E090E00C942217885A833128 +:1032900020F480E090E00C9438170895882321F002 +:1032A0000E94E0210C9427220895882321F00E9497 +:1032B000E6210C94272208957F928F929F92AF92DD +:1032C000BF92CF92DF92EF92FF920F931F93CF9313 +:1032D000DF931F92CDB7DEB77C01C62E772EFC019F +:1032E000058102950F70128111110E94FD210E942B +:1032F0005321882379F0112369F080E28C0D883006 +:1033000048F082E00E943C210E94532191E0D82E97 +:10331000D92601C0D12CE72DE295EF70F0E0E05AFC +:10332000FF4F0C949B2C872D807F072D0F708823D7 +:1033300011F00295007F112389F0002309F499C14F +:1033400080E28C0D883020F4802F0E94E02103C0A1 +:10335000802F0E94F0210E9427228BC18C2D0E9479 +:10336000FF18002309F4C3C180E28C0D883020F4DB +:10337000802F0E94E62103C0802F0E94F6210E9428 +:103380002722B5C1872D807F972D9F70803211F441 +:10339000892F03C0892F8295807FCC2021F0F1E016 +:1033A000CF16A1F01DC0112339F0002319F101300F +:1033B00009F50E9410229BC1002319F0013009F485 +:1033C00096C189830E941322898110C1112321F0A3 +:1033D000063008F08CC10EC0053008F088C106C167 +:1033E000112359F0002331F0F701958190FF41C17D +:1033F0009F7095830E944E197AC1002309F4F6C08C +:103400003EC1872D86958695837090E0009719F0D0 +:10341000019761F06CC1112321F08C2D972D9370D1 +:1034200002C080E090E00E94221761C1112321F0C8 +:103430008C2D972D937002C080E090E00E94381789 +:1034400056C18C2D112319F00E944A2402C00E94FB +:10345000B2240E9437254BC1872D837009F052C0DA +:10346000111145C18C2D829586958770880F880F24 +:103470009C2D9F70892E912CA12CB12C082E04C05C +:10348000880C991CAA1CBB1C0A94D2F7C4FE14C059 +:103490000FE010E020E030E0B901A80104C0440FC3 +:1034A000551F661F771F8A95D2F7CB01BA01609529 +:1034B00070958095909503C060E070E0CB01272D5A +:1034C00026952695237030E02230310569F02330AF +:1034D000310589F0682979298A299B29213031050C +:1034E00071F00E94C81F03C1682979298A299B2984 +:1034F0000E94E41FFCC00E94C81FC501B4010E94C5 +:10350000AC1FF5C0112319F0872D817001C086957D +:10351000882309F4ECC08C2D829586958770880FDE +:10352000880F9C2D9F70892E912CA12CB12C082ED8 +:1035300004C0880C991CAA1CBB1C0A94D2F7C4FEB8 +:1035400014C00FE010E020E030E0B901A80104C091 +:10355000440F551F661F771F8A95D2F7CB01BA011A +:10356000609570958095909503C060E070E0CB0108 +:10357000272D269526952370422F50E04230510585 +:1035800069F04330510589F0682979298A299B29F6 +:103590004130510571F00E94A220A9C06829792903 +:1035A0008A299B290E94BE20A2C00E94A220C50198 +:1035B000B4010E9486209BC08C2D90E0FC01E05E4F +:1035C000F109E531F10508F050C0E059FF4F0C94C6 +:1035D0009B2C0C2D0F70872D8F71112321F00E94D1 +:1035E0001F20802F07CF0E944020802F0E94551956 +:1035F0007EC0112341F0053008F079C0872D8F710E +:103600000E94652074C0063008F071C0F7CF112306 +:1036100039F0872D8F710E941F2069C01123C9F3D3 +:10362000872D8F710E94402062C0112329F0872DC1 +:103630008F710E940A205BC00E94002058C0112395 +:1036400051F0172D1F71812F0E941F2063E0812FE1 +:103650000E9433214CC081E00E943C21023008F4DA +:1036600046C082E00E943C2142C0112331F0002379 +:1036700081F28C2D0E9437183AC0002389F28C2DDC +:103680000E94FF1834C0472D4F706C2DC7010E9457 +:10369000EE050E94241F2BC0111129C0472D4F7029 +:1036A00050E042305105B9F04CF44115510581F01C +:1036B00041305105E1F40E94322819C043305105D0 +:1036C00069F04430510599F48C2D0E9484280FC074 +:1036D0000E941B280CC00E944E2809C00E9461282D +:1036E00006C0472D4F706C2DC7010E94F105DD20EB +:1036F000F9F00E942F2180FD1BC0F70112820E9469 +:1037000029210E941F20C7010E94A71B0E94292176 +:103710000F90DF91CF911F910F91FF90EF90DF906D +:10372000CF90BF90AF909F908F907F900C9440204F +:103730000F90DF91CF911F910F91FF90EF90DF904D +:10374000CF90BF90AF909F908F907F9008950F93F0 +:103750001F93CF93DF93EC01888199812B813C816A +:10376000232BB9F09F3F11F48F3F99F0CE010E94B7 +:10377000ED03882371F0688179818A810E94252177 +:103780008C010E94DA200E94A11FB801CE010E9484 +:103790005C19DF91CF911F910F9108950E94FD2137 +:1037A0000E940D220E94D2210E9427220E94E82519 +:1037B0000E94372580E090E00E94221780E090E090 +:1037C0000C9438170E94ED210C94CE1B0E941A21F4 +:1037D000292F22952F7030E02C3031054CF42A30FF +:1037E00031056CF42250310922303105A8F407C0AC +:1037F0002C30310569F02F30310551F00DC0803F7C +:1038000069F018F4803E40F409C0843F29F406C0F2 +:1038100093FB882780F9089580E0089581E008955A +:10382000CF93DF9300D000D01F92CDB7DEB70F90BB +:103830000F900F900F900F90DF91CF910895CF933D +:10384000DF9300D000D000D0CDB7DEB726960FB6FC +:10385000F894DEBF0FBECDBFDF91CF9108951F93C7 +:10386000CF93DF93C0919D0216E080919E02C8170E +:1038700099F0D0E01C9FF0011D9FF00D1124E1563E +:10388000FD4F4081518162817381848195810E94C5 +:103890001F1C2196C770E9CFDF91CF911F9108952A +:1038A0004091CF025091D0026091D1027091D2022A +:1038B0008091D3029091D4020C941F1C8091D40269 +:1038C00082958F7009F054C08091D102882309F449 +:1038D0004FC080919D02A0919E026091CF02709195 +:1038E000D0024091D2025091D302B6E08A1709F477 +:1038F0003FC090E041155105C1F17F3F11F46F3F8A +:10390000A1F1B89FF001B99FF00D1124E156FD4FD0 +:10391000218172132AC02081621327C022812111C4 +:1039200024C0238134812417350710F42150310934 +:10393000241B350B283C3105C0F42091D4022F7094 +:1039400020612093D40226E0289FF001299FF00DEA +:103950001124EC55FD4F80818F70806180838FEC46 +:1039600092E00E94A71B0C942F1C01968770BECF7B +:103970000895CF92DF92EF92FF920F931F93CF9310 +:10398000DF93CDB7DEB762970FB6F894DEBF0FBEF8 +:10399000CDBF8C0185E0F801DE011D9601900D92EE +:1039A0008A95E1F7D8014C9111965C911197129686 +:1039B0006C9112971396CD90DC9014973091CF02B2 +:1039C0007091D0028091D2029091D302009709F4B5 +:1039D0006BC17F3F19F43F3F09F466C1E090D1020B +:1039E000EE2009F4C0C02091D402C816D90628F0F0 +:1039F000F601E81BF90BCF0104C0809590958C0D62 +:103A00009D1DFF24F394883C910578F0F12C207FD4 +:103A100009F0C6C07C2DD98AC88A89890E94101CE9 +:103A20008FEC92E00E94A71BB1C0822F807F09F02B +:103A300046C0751314C0341312C0611110C02F702A +:103A400020612093D4020E94501C8FEC92E00E94CF +:103A5000A71B8091D402D80115968C932EC0CD2837 +:103A600019F15F3F11F44F3FF9F0F62E61111CC0C0 +:103A700080919D0220919E0236E0821709F45AC07F +:103A800090E0389FF001399FF00D1124E156FD4F71 +:103A90007181571306C07081471303C07281711181 +:103AA00003C001968770E9CFF62E662309F418C18A +:103AB0008091D40281608093D402F12C11C17513DE +:103AC00008C0341306C0611104C08091D402D8012B +:103AD000C3C04D875E878D859E856A8B0E94E61BDD +:103AE0006A898823E1F16623D1F12091D402822FE3 +:103AF00082958F7090E0029774F08091CF02909140 +:103B0000D00298878F831986DB86CA862C87CE01E0 +:103B100007960E94A71B86E0F801AFECB2E0019087 +:103B20000D928A95E1F70E945E1C0E94501CFF24B2 +:103B3000F394D6C04D875E878D859E850E941A219D +:103B4000292F22952F7030E0223031050CF0BCC0B7 +:103B50009F7009F0B6C0805E883008F4C1C0C8010B +:103B60000E94A71BE4CFC816D90608F453C0F6017B +:103B7000E81BF90BCF01883C910508F450C0F12CEB +:103B80007C2DD98AC88A89890E94101CEFECF2E04A +:103B900086E0DF011D928A95E9F70E94501CA0C0C3 +:103BA000751314C0341312C0611110C08091D40277 +:103BB000F8018583C8010E94A71B86E0EFECF2E0C4 +:103BC000DF011D928A95E9F7FE2C8AC04D875E873A +:103BD0008D859E856A8B0E94E61B6A89882309F47D +:103BE000BECF662309F4BBCF2091D402822F8295E9 +:103BF0008F7090E002970CF48ECF8091CF0290915D +:103C0000D0029A8389831B82DD82CC822E83CE01EF +:103C100001967FCF809590958C0D9D1DACCFF62E93 +:103C2000662309F49CCF75132EC034132CC0209149 +:103C3000D40220FD1FC0822F82958F70D9F0D80149 +:103C400015962C9315978F3049F08F5F982F92958A +:103C5000907F822F8F70892B15968C93C8010E94BC +:103C6000A71B86E0F801AFECB2E001900D928A95B7 +:103C7000E1F793CF86E0F801AFECB2E001900D924E +:103C80008A95E1F72DC04D875E878D859E850E94C0 +:103C9000E61B811140CF8091D40281608093D402D1 +:103CA000C8010E94A71B1CC0662309F458CF4D878A +:103CB0005E878D859E850E94E61B882309F44FCF81 +:103CC0002ACF811148CF0CC0243031050CF047CFEA +:103CD0009F7009F440CFF8019581907F09F03BCFA8 +:103CE0008F2D62960FB6F894DEBF0FBECDBFDF9169 +:103CF000CF911F910F91FF90EF90DF90CF9008959B +:103D00001F93CF93DF93CDB7DEB72C970FB6F89400 +:103D1000DEBF0FBECDBF4F83588769877A878B87F9 +:103D20009C87CE0107960E94B91C882369F08F8179 +:103D300098852A853B85232BF1F19F3F09F063C0CD +:103D40008F3F09F060C037C086E0FE013796DE0184 +:103D5000119601900D928A95E1F76F817885EA8539 +:103D6000FB85309741F17F3F11F46F3F21F12091A6 +:103D70009E0230E0C90101968770992740919D020B +:103D800050E08417950709F447C069837A83FD835F +:103D9000EC8396E0929FD001939FB00D1124A15621 +:103DA000BD4FFE01319601900D929A95E1F78093F7 +:103DB0009E020E942F1C16E080919D0290919E020F +:103DC0008917C1F1189FC001112481569D4F0E948F +:103DD000B91C882379F1E0919D021E9FF001112406 +:103DE000E156FD4F408151816281738184819581CB +:103DF0000E941F1C80919D0290E001968770992778 +:103E000080939D02D9CF4F81588569857A858B85AE +:103E10009C850E941F1CCFCF0E94E21B10929E0225 +:103E200010929D02EFECF2E086E0DF011D928A9590 +:103E3000E9F7C1CF2C960FB6F894DEBF0FBECDBF09 +:103E4000DF91CF911F910895EF92FF920F931F93EF +:103E5000CF93DF938C01009709F46CC0F12CEE2412 +:103E6000E394E8012196F8018491843740F484308A +:103E700008F051C0813081F0823019F15BC0853784 +:103E800009F444C0A8F19CE7980F903708F052C09D +:103E90008F770E94FF1841C00E5F1F4FFE01C49133 +:103EA00080E28C0F883048F4C7708E2D01C0880FD7 +:103EB000CA95EAF70E94002214C08C2F0E9437187E +:103EC0002DC00E5F1F4FFE01C49180E28C0F883021 +:103ED00058F4C7708E2D01C0880FCA95EAF70E946A +:103EE00006220E9427221AC08C2F0E94FF1816C09B +:103EF0000E5F1F4FFE01C491CC2381F08FE99FE03C +:103F00000197F1F700C00000C150F6CF0E5F1F4FC0 +:103F1000FE01F49003C00E9437188E018F2D882374 +:103F200009F49FCFEFE9FFE03197F1F700C00000FF +:103F30008150F5CFDF91CF911F910F91FF90EF90BE +:103F4000089508956093D9027093DA028093DB029A +:103F50009093DC020C94CE1B0F931F930091D90217 +:103F60001091DA022091DB023091DC02DC01CB01FE +:103F7000802B912BA22BB32B8093D9029093DA0242 +:103F8000A093DB02B093DC021F910F910C94CE1B27 +:103F90000F931F930091D9021091DA022091DB0256 +:103FA0003091DC02DC01CB0180239123A223B323D7 +:103FB0008093D9029093DA02A093DB02B093DC02E3 +:103FC0001F910F910C94CE1B0F931F930091D90258 +:103FD0001091DA022091DB023091DC02DC01CB018E +:103FE00080279127A227B3278093D9029093DA02E2 +:103FF000A093DB02B093DC021F910F910C94CE1BB7 +:104000001092D5021092D6021092D7021092D802C6 +:104010000C94CE1B41E050E060E070E004C0440F1F +:10402000551F661F771F8A95D2F74093D50250938C +:10403000D6026093D7027093D8020C94CE1B41E055 +:1040400050E060E070E004C0440F551F661F771F0A +:104050008A95D2F78091D5029091D602A091D7028D +:10406000B091D802482B592B6A2B7B2B4093D50259 +:104070005093D6026093D7027093D8020C94CE1B53 +:1040800041E050E060E070E004C0440F551F661F3F +:10409000771F8A95D2F740955095609570958091DD +:1040A000D5029091D602A091D702B091D8024823B0 +:1040B00059236A237B234093D5025093D602609301 +:1040C000D7027093D8020C94CE1B41E050E060E020 +:1040D00070E004C0440F551F661F771F8A95D2F702 +:1040E0008091D5029091D602A091D702B091D802CA +:1040F000482759276A277B274093D5025093D60239 +:104100006093D7027093D8020C94CE1B0F931F9329 +:104110000091D5021091D6022091D7023091D80299 +:10412000DC01CB01802B912BA22BB32B8093D502EA +:104130009093D602A093D702B093D8021F910F910B +:104140000C94CE1B0F931F930091D5021091D602B1 +:104150002091D7023091D802DC01CB01802391233A +:10416000A223B3238093D5029093D602A093D702C3 +:10417000B093D8021F910F910C94CE1B0F931F93F5 +:104180000091D5021091D6022091D7023091D80229 +:10419000DC01CB0180279127A227B3278093D5028A +:1041A0009093D602A093D702B093D8021F910F919B +:1041B0000C94CE1B0895CF92DF92EF92FF920F9353 +:1041C0001F93CF93DF938C01C090D902D090DA0275 +:1041D000E090DB02F090DC028091D5029091D60253 +:1041E000A091D702B091D802C82AD92AEA2AFB2A7C +:1041F000CFE1D0E0D701C6010C2E04C0B695A7953B +:10420000979587950A94D2F780FF06C0B8018C2F46 +:104210000E947608019721F4219760F780E001C0A1 +:104220008C2FDF91CF911F910F91FF90EF90DF9036 +:10423000CF900895CF93DF93EC010E94DB20BE0165 +:104240000E947608DF91CF910895CB010E941A2138 +:1042500008958091DD0285958595859508958091D5 +:10426000DD028770089598E0899F90011124262B24 +:104270002093DD020C941F202091DD028095822383 +:104280008093DD02982F977069F430E0482F55270E +:1042900047FD50952417350729F085958595859517 +:1042A0000C94402008959091DD02977081E009F40C +:1042B00080E0089590911501992321F090911601C5 +:1042C000911109C02091170130911801F90132961E +:1042D0009FEF40E01FC0982F9695969596959F303A +:1042E00050F5E0911701F0911801E90FF11D877069 +:1042F00021E030E0A90102C0440F551F8A95E2F782 +:10430000CA019181892B818308959F3F39F04F5FC6 +:104310004E3041F051915813F8CF0DC05111F7CFE5 +:10432000942FF5CF9F3F39F0F901E90FF11D97FD6B +:10433000FA9582830895089590911501992321F0AB +:1043400090911601911109C0209117013091180127 +:10435000F9013296205F3F4F1FC0982F9695969592 +:1043600096959F30F0F4E0911701F0911801E90F54 +:10437000F11D877021E030E0A90102C0440F551FF4 +:104380008A95E2F7CA0180959181892381830895F6 +:104390003196E217F30729F090819813F9CF108234 +:1043A000F7CF089581E090E0E0911701F0911801B6 +:1043B000E80FF91F1082019680319105A9F7089541 +:1043C0009091F102892B8093F1020895809590914C +:1043D000F10289238093F10208951092F102089569 +:1043E0009091F002892B8093F0020895809590912E +:1043F000F00289238093F00208951092F00208954C +:104400009091EF02892B8093EF020895809590910F +:10441000EF0289238093EF0208951092EF0208952E +:104420008093DE0208951092DE02089580911701B4 +:1044300090911801FC0131969C01205F3F4F80E074 +:10444000919191118F5FE217F307D1F70895E091F1 +:104450001701F09118018091F1028083E09117011A +:10446000F091180190818091F002892B8083E09176 +:104470001701F091180190818091EF02892B8083C0 +:104480008091DE02882361F0E0911701F09118011C +:104490009081892B80830E94162281111092DE0266 +:1044A00080911701909118010C940C1720E000974F +:1044B00039F0AC0141505109842395232F5FF7CF88 +:1044C000822F089580911303843039F11092F30202 +:1044D00020E488E190E00FB6F894A89580936000FE +:1044E0000FBE2093600080E00E94F10280E00E94F5 +:1044F000100983B7817F846083BF83B7816083BFE6 +:104500007894889583B78E7F83BF88E10FB6F8943F +:1045100080936000109260000FBE08950895089582 +:1045200080E00E94F1020E948E220E946B090E948C +:104530008F220E94F00991E0811101C090E0892F43 +:1045400008950E94E21B80E00E94F1020E940A2866 +:104550000E9400170C9410091F920F920FB60F9231 +:1045600011248F939F93AF93BF938091F302811196 +:1045700013C08091F4029091F502A091F602B091DF +:10458000F7024196A11DB11D8093F4029093F502AC +:10459000A093F602B093F702BF91AF919F918F91D4 +:1045A0000F900FBE0F901F90189582E084BD93E08E +:1045B00095BD9AEF97BD80936E0008952FB7F8943C +:1045C0008091F4029091F502A091F602B091F70269 +:1045D0002FBF0895CF92DF92EF92FF920F931F9318 +:1045E0002FB7F8944091F4025091F5026091F602D1 +:1045F0007091F7022FBF6A017B01EE24FF248C012A +:1046000020E030E0C016D106E206F30610F4415077 +:1046100051099A01281B390BC9011F910F91FF9075 +:10462000EF90DF90CF9008951F920F920FB60F92E8 +:1046300011248F939F93AF93BF938091F402909135 +:10464000F502A091F602B091F7020196A11DB11DED +:104650008093F4029093F502A093F602B093F702D0 +:10466000BF91AF919F918F910F900FBE0F901F90B0 +:1046700018950E94FD13F8942FEF87EA91E62150D8 +:1046800080409040E1F700C0000087E090EBDC0143 +:1046900080931E0390931F03A0932003B0932103E4 +:1046A0009CE088E10FB6F894A895809360000FBE57 +:1046B00090936000FFCF0E949A23811102C00E9454 +:1046C00076230E94A5238093F2020E94AD2380935B +:1046D0001C0387FB882780F9809316010E94A92379 +:1046E000682F70E080E090E00C94A21F6DEE7EEFEA +:1046F00080E090E00E94C12C60E082E090E00E94A7 +:10470000AF2C60E083E090E00E94AF2C60E084E09A +:1047100090E00E94AF2C60E085E090E00E94AF2C1A +:1047200060E086E090E00E94AF2C6FEF87E090E0C1 +:104730000C94AF2C80E090E00E94A92C21E08D3EEB +:104740009E4F09F020E0822F089582E090E00C94C3 +:10475000A12C83E090E00C94A12C84E090E00C94D8 +:10476000A12C682F84E090E00C94AF2C86E090E0C0 +:104770000C94A12C682F86E090E00C94AF2C87E07D +:1047800090E00C94A12C682F87E090E00C94AF2C63 +:104790008091FA0280FF0BC060911C0185E0689F48 +:1047A000B001112475956795759567952BC081FFAC +:1047B00009C060911C0185E0689FB00111247595C6 +:1047C000679520C082FF07C060911C0185E0689F4B +:1047D000B001112417C09091FB029923D1F0609190 +:1047E0001B01961788F720911C0185E0289F9001F6 +:1047F0001124929FA001939F500D112470E0CA01D3 +:104800000E94872C6038710540F46115710539F0FC +:1048100002C065E070E0862F08958FE7089581E07B +:1048200008958091FA0280FF08C060911A0170E03B +:10483000759567957595679521C081FF06C0609154 +:104840001A0170E07595679519C082FF04C06091E8 +:104850001A0170E010C09091FB029923C1F06091A1 +:1048600019019617A0F780911A01899FC0011124A0 +:1048700070E00E94872C6038710528F4611571057D +:1048800021F0862F08958FE7089581E0089561E073 +:1048900070E0F4CF803F21F40E94C823819504C0CA +:1048A000813F29F40E94C8238093FE020895823F2D +:1048B00021F40E94C823819504C0833F29F40E94FB +:1048C000C8238093FD020895893F19F40E941124A2 +:1048D00005C08A3F31F40E94112481958093FF0224 +:1048E00008958B3F21F40E941124819504C08C3FD0 +:1048F00029F40E941124809300030895843F21F439 +:104900008091FC02816017C0853F21F48091FC02F8 +:10491000826011C0863F21F48091FC0284600BC04C +:10492000873F21F48091FC02886005C0883F31F404 +:104930008091FC0280618093FC0208958D3F21F4F8 +:104940008091FA0281600BC08E3F21F48091FA02BF +:10495000826005C08F3F29F48091FA0284608093C1 +:10496000FA020895803F39F48091FE0287FF6CC0FF +:104970001092FE0269C0813F29F48091FE02181650 +:10498000BCF362C09091FD02823F29F497FF5CC0A6 +:104990001092FD0259C0833F19F41916CCF354C08C +:1049A000893F41F48091FF0218160CF04DC010921F +:1049B000FF024AC08A3F29F48091FF0287FF44C06A +:1049C000F6CF8B3F39F48091000387FF3DC01092F2 +:1049D00000033AC08C3F29F4809100031816BCF301 +:1049E00033C0843F21F48091FC028E7F17C0853F45 +:1049F00021F48091FC028D7F11C0863F21F48091CB +:104A0000FC028B7F0BC0873F21F48091FC02877FE3 +:104A100005C0883F31F48091FC028F7E8093FC02B8 +:104A200013C08D3F21F48091FA028E7F0BC08E3F20 +:104A300021F48091FA028D7F05C08F3F29F4809187 +:104A4000FA028B7F8093FA028091FD0281110EC0E1 +:104A50008091FE0281110AC08091FF02811106C07F +:104A600080910003811102C01092FB0208958CEF27 +:104A700092E00E9417170E94DE229093F902809321 +:104A8000F80208951F93CF93DF938091F8029091DD +:104A9000F9020E94EA22AC019091FB02992321F0D5 +:104AA00020911D0130E006C020911E018AE0289F60 +:104AB000900111244217530708F486C08091FD022B +:104AC000C091FE02D091FF0210910003811107C036 +:104AD000C11176C0D11174C0111172C075C09F3F51 +:104AE00019F09F5F9093FB02181624F40E94C823CC +:104AF0008093FD028091FD0287FF05C00E94C823BC +:104B000081958093FD021C1624F40E94C823809393 +:104B1000FE028091FE0287FF05C00E94C823819596 +:104B20008093FE026091FD02662339F1C091FE027E +:104B3000CC2319F1772767FD7095872F972F0E9457 +:104B4000A92923E333E343E35FE30E94B92A0E94E8 +:104B500076296093FD026C2F772767FD7095872F6C +:104B6000972F0E94A92923E333E343E35FE30E94E5 +:104B7000B92A0E9476296093FE021D1624F40E9431 +:104B800011248093FF028091FF0287FF05C00E94DD +:104B9000112481958093FF02111624F40E941124A0 +:104BA000809300038091000387FF05C00E941124B9 +:104BB000819580930003DF91CF911F910C9437254D +:104BC0009F3F09F08ECF96CFDF91CF911F9108952F +:104BD000ECEFF2E085E0DF011D928A95E9F7109293 +:104BE000FB021092FA020895833081F128F481309B +:104BF00059F08230D1F00895853009F449C0B8F1F8 +:104C0000863009F456C0089580911E01262F30E0A9 +:104C1000280F311D2F3F310524F4680F60931E01CA +:104C200008958FEF80931E01089580911D01262F16 +:104C300030E0280F311D2F3F310524F4680F6093B9 +:104C40001D0108958FEF80931D01089580911C012F +:104C5000262F30E0280F311D2F3F310524F4680F37 +:104C600060931C0108958FEF80931C01089580913B +:104C70001B01262F30E0280F311D2F3F310524F472 +:104C8000680F60931B0108958FEF80931B010895B7 +:104C900080911A01262F30E0280F311D2F3F31055A +:104CA00024F4680F60931A0108958FEF80931A011E +:104CB000089580911901262F30E0280F311D2F3FD4 +:104CC000310524F4680F6093190108958FEF8093E4 +:104CD00019010895833011F128F4813049F08230B0 +:104CE00091F00895853081F120F18630C1F1089569 +:104CF00080911E01681720F4861B80931E01089581 +:104D000010921E01089580911D01681720F4861BE2 +:104D100080931D01089510921D01089580911C013A +:104D2000681720F4861B80931C01089510921C01C3 +:104D3000089580911B01681720F4861B80931B0146 +:104D4000089510921B01089580911A01681720F4AC +:104D5000861B80931A01089510921A01089580917C +:104D60001901681720F4861B809319010895109289 +:104D7000190108950F931F93873208F048C08E31B0 +:104D800008F08DC0803109F477C008F5873009F448 +:104D900061C068F4863009F09DC08091F202817F85 +:104DA0008E7F8093F20281E08093020394C08B3067 +:104DB00009F489C08E3009F08DC08091F20282FB27 +:104DC000222720F991E0922790FB82F95EC086317C +:104DD00009F479C060F4813109F07CC00E94E21BC3 +:104DE0009091160181E08927809316016CC089316A +:104DF00009F469C08B3109F06DC08091F20281FB2A +:104E0000222720F991E0922790FB81F93EC0883358 +:104E100009F459C050F4893209F457C0853309F4B4 +:104E200054C0873209F451C055C0833409F44DC0D1 +:104E300028F48A3308F44EC0895332C0883409F00C +:104E400049C00E94E21B0E94200A0E94E4030E94C3 +:104E5000392339C09091F202892F8095817080FBAF +:104E600090F929F0966098609093F20234C0997F8F +:104E7000977F9093F20227C08091F20283FB222752 +:104E800020F991E0922790FB83F98093F202992315 +:104E9000D1F08091F20281608093F20214C08D51B2 +:104EA00041E050E060E070E08A019B0104C0000F27 +:104EB000111F221F331F8A95D2F7C901B8010E9422 +:104EC000A21F0E94E21B81E006C061E070E080E06A +:104ED00090E0F5CF80E01F910F91089580E0089554 +:104EE00080E00895CF93C82F80910203813069F04C +:104EF00018F08230C9F184C0E0911701F0911801D7 +:104F00008081823209F07EC007C0E0911701F091E4 +:104F100018018081823261F48C2F0E946E278111EA +:104F200004C08C2F0E94BA261DC081E090E01AC0F8 +:104F30008C2F0E947027811114C0C43179F048F47D +:104F4000CB3079F0C03109F061C082E08093020378 +:104F500008C0C93219F0C83321F058C010920203BA +:104F600055C081E0817054C0C93291F120F5C4313F +:104F700079F1B0F4C73009F047C08EE180931E018B +:104F800082E380931D018AE080931C0184E1809379 +:104F90001B0188E080931A0188E28093190134C0D4 +:104FA000CE51C63088F5EC2FF0E0EA54FE4F8081F8 +:104FB0008093010329C0CE34E9F020F4CB3421F5ED +:104FC0006AE013C0C13579F0C235F1F461E00DC07B +:104FD00080910103882319F01092010315C081E02C +:104FE0008093020315C061E006C0809101030E9416 +:104FF000F4250AC06AE0809101030E946A2604C079 +:105000001092020380E004C081E002C080E0AACFD9 +:10501000CF9108950E949A23811102C00E947623A5 +:105020000E94B62380931D0380FF02C0869501C0B5 +:1050300080E00C94F10280911D03982F9695292F02 +:1050400030E0233031054CF49F5F990F8170892B3C +:10505000816080931D030E94BA2380911D03869571 +:105060000C94F10280911D03982F969591F0915820 +:10507000990F8170892B80931D038E7F91E009F435 +:1050800090E080911D0390FB80F980931D030E94A6 +:10509000BA2380911D0386950C94F10280911D0323 +:1050A000982F909590FB80F980931D030E94BA235E +:1050B00080911D0380FF02C0869501C080E00C94A2 +:1050C000F10290911D03892F86958F5F8F779170E4 +:1050D000843028F4880F892B80931D0302C090939D +:1050E0001D0380911D038E7F91E009F490E0809173 +:1050F0001D0390FB80F980931D030E94BA238091C9 +:105100001D0386950C94F10220911D03922F969514 +:105110008927982F990F822F8170892B80931D03E7 +:105120008E7F91E009F490E080911D0390FB80F95F +:1051300080931D030E94BA2380911D0386950C94D1 +:10514000F10280911D03869508955058BB27AA2728 +:105150000ED0D1C1C2D130F0C7D120F031F49F3F81 +:1051600011F41EF4B7C10EF4E095E7FB9FC1E92FDF +:10517000D3D180F3BA17620773078407950718F035 +:1051800071F49EF5EBC10EF4E0950B2EBA2FA02D15 +:105190000B01B90190010C01CA01A0011124FF27E4 +:1051A000591B99F0593F50F4503E68F11A16F040DF +:1051B000A22F232F342F4427585FF3CF46953795DE +:1051C0002795A795F0405395C9F77EF41F16BA0BA3 +:1051D000620B730B840BBAF09150A1F0FF0FBB1F51 +:1051E000661F771F881FC2F70EC0BA0F621F731F9A +:1051F000841F48F4879577956795B795F7959E3FF7 +:1052000008F0B3CF9395880F08F09927EE0F979584 +:105210008795089527D108F481E008950CD06BC1DB +:1052200063D140F05AD130F021F45F3F19F03EC114 +:10523000511195C14FC170D198F39923C9F35523EA +:10524000B1F3951B550BBB27AA2762177307840779 +:1052500038F09F5F5F4F220F331F441FAA1FA9F32F +:1052600033D00E2E3AF0E0E830D091505040E69521 +:10527000001CCAF729D0FE2F27D0660F771F881F82 +:10528000BB1F261737074807AB07B0E809F0BB0B71 +:10529000802DBF01FF2793585F4F2AF09E3F510595 +:1052A00068F004C15CC15F3FECF3983EDCF3869587 +:1052B00077956795B795F7959F5FC9F7880F911D0B +:1052C0009695879597F90895E1E0660F771F881FF7 +:1052D000BB1F621773078407BA0720F0621B730BAA +:1052E000840BBA0BEE1F88F7E095089504D06894FC +:1052F000B11135C1089518D188F09F5790F0B92F9A +:105300009927B751A0F0D1F0660F771F881F991F1A +:105310001AF0BA95C9F712C0B13081F01FD1B1E0CF +:1053200008951CC1672F782F8827B85F39F0B93FDF +:10533000CCF3869577956795B395D9F73EF490951C +:105340008095709561957F4F8F4F9F4F0895E8949A +:1053500009C097FB3EF490958095709561957F4FBD +:105360008F4F9F4F9923A9F0F92F96E9BB2793956B +:10537000F695879577956795B795F111F8CFFAF47B +:10538000BB0F11F460FF1BC06F5F7F4F8F4F9F4FAC +:1053900016C0882311F096E911C0772321F09EE80A +:1053A000872F762F05C0662371F096E8862F70E070 +:1053B00060E02AF09A95660F771F881FDAF7880F4A +:1053C0009695879597F9089588D018F011F08CD0AC +:1053D00038F480C0C4C0E92F9FD0B0F35523C9F37F +:1053E000E7FB6217730784079507A8F199F3E92F84 +:1053F000FF2788232AF03197660F771F881FDAF777 +:10540000952F5527442332F091505040220F331FDF +:10541000441FD2F7BB27E91BF50B621B730B840BF0 +:10542000B109C1F222F4620F731F841FB11D3197BD +:105430002AF0660F771F881FBB1FEFCF9150504097 +:105440005AF041F0882332F0660F771F881F915081 +:105450005040C1F7939530C08695779567959F5FCB +:10546000D9F7F8CF990F0008550FAA0BE0E8FEEF27 +:1054700016161706E807F907C0F012161306E40718 +:10548000F50798F0621B730B840B950B39F40A2611 +:1054900061F0232B242B252B21F408950A2609F4EF +:1054A000A140A6958FEF811D811D089597F99F67F3 +:1054B00080E870E060E008959F3F31F0915020F463 +:1054C000879577956795B795880F911D96958795E0 +:1054D00097F908959FEF80EC089500240A9416161A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F089557FD9058440F551F51 +:1055200059F05F3F71F04795880F97FB991F61F025 +:105530009F3F79F087950895121613061406551F9C +:10554000F2CF4695F1DF08C0161617061806991F08 +:10555000F1CF86957105610508940895E894BB27FD +:1055600066277727CB0197F908957CDF08F48FEF42 +:1055700008950BD0C0CFB1DF28F0B6DF18F0952327 +:1055800009F094CFA7CF1124EACFC6DFA0F3959FEF +:10559000D1F3950F50E0551F629FF001729FBB271A +:1055A000F00DB11D639FAA27F00DB11DAA1F649FC6 +:1055B0006627B00DA11D661F829F2227B00DA11D79 +:1055C000621F739FB00DA11D621F839FA00D611DFF +:1055D000221F749F3327A00D611D231F849F600D20 +:1055E000211D822F762F6A2F11249F5750408AF059 +:1055F000E1F088234AF0EE0FFF1FBB1F661F771FE5 +:10560000881F91505040A9F79E3F510570F04ECF32 +:10561000A6CF5F3FECF3983EDCF3869577956795D0 +:10562000B795F795E7959F5FC1F7FE2B880F911D02 +:105630009695879597F90895FA01EE0FFF1F30961A +:105640002105310599F16115710561F48038BFE3D9 +:105650009B0749F168949038810561F08038BFEF6D +:105660009B0741F0992342F5FF3FE10531052105F4 +:1056700011F1E8940894E795D901AA2329F4AB2FF6 +:10568000BE2FF85FD0F310C0FF5F70F4A695E0F76F +:10569000F73950F019F0FF3A38F49F779F930CD008 +:1056A0000F9007FC905808953EF014CF60E070E032 +:1056B00080E89FE308954FE79F775F934F933F9371 +:1056C0002F939ED02F913F914F915F9152DF05C054 +:1056D00019F40EF0EBCE42CFFDCE26DFC8F396389C +:1056E000C0F707F80F92E8942BE33AEA48EB5FE73C +:1056F0004EDF0F920F920F924DB75EB70F92C0D050 +:10570000EAE0F1E016D04F915F91EF91FF91E595BE +:10571000EE1FFF1F49F0FE57E0684427EE0F441FBD +:10572000FA95E1F74195550B32D00F9007FE26C050 +:105730000895DF93CF931F930F93FF92EF92DF9221 +:105740007B018C01689405C0DA2EEF011EDFFE019B +:10575000E894A5912591359145915591AEF3EF01CE +:1057600006DDFE019701A801DA9479F7DF90EF904A +:10577000FF900F911F91CF91DF9108959B01AC0194 +:1057800060E070E080E89FE349CD90CE95CECCDE1E +:10579000E8F39923D9F3940F511DBBF39150504076 +:1057A00094F059F0882332F0660F771F881F9150CC +:1057B0005040C1F79E3F510544F7880F911D9695C3 +:1057C000879597F908955F3FACF0983E9CF0BB2712 +:1057D000869577956795B79508F4B1609395C1F76D +:1057E000BB0F58F711F460FFE8CF6F5F7F4F8F4F0B +:1057F0009F4FE3CFB4CE0EF05FCE6CCE689456CE02 +:1058000093DEC8F39923D1F3C6F3DF93CF931F93AD +:105810000F93FF92C92FDD2788232AF02197660F67 +:10582000771F881FDAF720E030E040E85FEB9FE366 +:10583000883920F0803E30F021968F7787DCE2E3D4 +:10584000F1E003C083DCEFE5F1E073DF8B01BE0123 +:10585000EC01FB2E6F5771097595771F880B990B1B +:1058600078DD28E132E741E35FE38FDEAF2D980179 +:10587000AE01FF900F911F91CF91DF9178DC3BCE6D +:10588000FA01DC01AA0FBB1F9B01AC01BF5728F432 +:1058900022273327442750781FC0B75188F4AB2FF5 +:1058A0000024469537952795011CA395D2F3002037 +:1058B00069F0220F331F441FB395DAF30DD045CCA6 +:1058C00061307105A0E88A07B94630F49B01AC014C +:1058D0006627772788279078309621F020833183B8 +:1058E000428353830895AA1BBB1B51E107C0AA1F23 +:1058F000BB1FA617B70710F0A61BB70B881F991F71 +:105900005A95A9F780959095BC01CD01089597FB14 +:10591000072E16F4009407D077FD09D00E94732C4F +:1059200007FC05D03EF4909581959F4F08957095A2 +:1059300061957F4F0895EE0FFF1F0590F491E02DC4 +:105940000994F999FECF92BD81BDF89A992780B547 +:105950000895A8E1B0E042E050E00C94C92C262F55 +:10596000F999FECF92BD81BDF89A019700B4021655 +:1059700039F01FBA20BD0FB6F894FA9AF99A0FBE03 +:1059800008950196272F0E94B02C0C94AF2CDC01B7 +:10599000CB01FC01F999FECF06C0F2BDE1BDF89A3A +:1059A000319600B40D9241505040B8F70895F894E4 +:0259B000FFCF27 +:1059B200640007000CFF0000003F64041092106FA7 +:1059C200103B1007100101DF022808140A321E00E2 +:1059D20002040507090B0C0E1011131517181A1CD7 +:1059E2001D1F2123242628292B2D2F303234353711 +:1059F200393B1F0F03764F5F6F7F4969437909591E +:105A020053633149803F5D8B803FF8BF803FCAE1DD +:105A1200803F73ED803FCAE1803FF8BF803F5D8BDE +:105A2200803F3149803F0000803FF16D7F3F75EA42 +:105A32007E3F4C827E3F833F7E3F84287E3F833F72 +:105A42007E3F4C827E3F75EA7E3FF16D7F3F0000D4 +:105A5200803F3F4D3639ED04A0046A043104C4038B +:105A6200DD03F6030F04010203040506070809001B +:00000001FF diff --git a/keyboard/planck/keymaps/mollat/compiled.hex b/keyboard/planck/keymaps/mollat/compiled.hex new file mode 100644 index 0000000000..549b7a8dfa --- /dev/null +++ b/keyboard/planck/keymaps/mollat/compiled.hex @@ -0,0 +1,1495 @@ +:100000000C94A5030C94E9030C94E9030C94E90304 +:100010000C94E9030C94E9030C94E9030C94E903B0 +:100020000C94E9030C94E9030C94E9150C94BB16A9 +:100030000C941D240C94E9030C94E9030C94E9033B +:100040000C94E9030C944B040C94E9030C94E9031D +:100050000C94E9030C9485240C94E9030C94E903B3 +:100060000C94E9030C94E9030C94E9030C94E90360 +:100070000C94E9030C94E9030C94E9030C94E90350 +:100080000C945E0C0C94E9030C94E9030C94E903C2 +:100090000C94E9030C94E9030C94E9030C94E90330 +:1000A0000C94E9030C94E9030C94E903A704AD0450 +:1000B000B304B904BF04C404C904CE04D304D804EF +:1000C000DD04E204E704EC04F104F60428174A17FF +:1000D00038184A1738188F17B217381807181A180F +:1000E000041B041B331B331B721B921BE81CE81CF4 +:1000F0009D1BE81C4D1C4D1CB41CBD1CE81CE21CC7 +:100100005A1C5A1C5A1C5A1C5A1C5A1C5A1C5A1C3F +:100110005A1C5A1C5A1C5A1C5A1C5A1C5A1C5A1C2F +:100120006A1C781C7F1C861C901C07634236B79B98 +:10013000D8A71A39685618AEBAAB558C1D3CB7CC47 +:100140005763BD6DEDFD753EF6177231BF000000BF +:10015000803F08000000BE922449123EABAAAA2AA2 +:10016000BECDCCCC4C3E00000080BEABAAAAAA3EBD +:1001700000000000BF000000803F000000000008F9 +:100180004178D3BB4387D1133D190E3CC3BD428296 +:10019000AD2B3E68EC8276BED98FE1A93E4C80EF54 +:1001A000FFBE01C4FF7F3F00000000000000000010 +:1001B00000000000000000010204060A0F17202CB6 +:1001C0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9B2 +:1001D000DAC7B39D87715D4A3A2C20170F0A0604CF +:1001E00002010000000000000000000001E0010525 +:1001F000020502E0000129022901E1013302330274 +:10020000E10114021401280228000129022901E158 +:100210000133023302E1011A021A01280228000107 +:10022000E00105020502E0010602060001E0010509 +:10023000020502E0011302130001E00105020502BC +:10024000E0011102110001E00105020502E0010FC9 +:10025000020F0001E00105020502E0012502250070 +:1002600001E00105020502E0012402240001E00191 +:1002700005020502E0012302230001E00105020559 +:1002800002E0012202220001E00105020502E00174 +:100290002102210001E00105020502E00120022007 +:1002A0000001E00105020502E0011F021F0001E05C +:1002B0000105020502E0011E021E0001E001050227 +:1002C0000502E001270227000000000000000000F6 +:1002D00000000C30294614001A0008001500170011 +:1002E0001C0018000C00120013002A002B4304000D +:1002F0001600070009000A000B000D000E000F0099 +:1003000033003400E1001D001B0006001900050049 +:10031000110010003600370038002872000000007D +:10032000E300E200E0002C442C410252E600E7002A +:100330000000000035001E021F02200221022202DE +:10034000230224022502260227022D0000001E009F +:100350001F00200021002200230024002500260089 +:1003600027002E0000000000000000000000000038 +:1003700000000000360037003100310200000000AC +:10038000000000000000000001000000000000006C +:100390000000000035020000000000000000000026 +:1003A0000000000000002F0230022D0200003A0081 +:1003B0003B003C003D003E003F00400041002F005C +:1003C00030002E020000000000000000000042008B +:1003D0004300440045000000000000000000000051 +:1003E000000000000000000000000100000000000C +:1003F000000000000000000000004D0000000000B0 +:1004000000000000490000004C001C140100000026 +:10041000161400004E0022145000510052004F00EC +:100420001314141400004A000000000000004B00E8 +:100430000000000000000000000028000050000044 +:100440000000000000002C002C0000000000000054 +:100450000000000000000E300D3000000000000021 +:1004600000000000000000000B30000000300130F0 +:1004700002300330043005300630073008300930D0 +:10048000000000000000000000000C300000000030 +:100490000A30000000000000000000000000000022 +:1004A000000000000000010000000000000000004B +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000010000000000000000000000DA +:1005200000000000000000000000000000000000CB +:1005300000000000FA000000F200F100F000F300FB +:100540000000000000000000000000000000F900B2 +:10055000000000000000000000000000000000009B +:100560000000FF00FE00FD00F400F600F5000000B2 +:1005700000000000280354006800650020005000BF +:100580006C0061006E0063006B0020004B00650092 +:10059000790062006F0061007200640000002C03AB +:1005A0004F007200740068006F006C0069006E00FC +:1005B00065006100720020004B0065007900620058 +:1005C0006F006100720064007300000004030904FE +:1005D00009026D00040100A0FA09040000010301F2 +:1005E0000100092111010001223F000705810308D4 +:1005F000000A0904010001030102000921110100A0 +:1006000001224D000705820308000A0904020001C7 +:1006100003000000092111010001223600070583B3 +:100620000308000A09040300010300000009211166 +:100630000100012239000705840310000112011096 +:100640000100000008EDFE606001000102000105EC +:10065000010906A101050719E029E7150025019503 +:100660000875018102050819012905950575019193 +:1006700002950175039101050719002977150025D9 +:1006800001957875018102C005010980A1018502EB +:1006900016010026B7001A01002AB700751095014F +:1006A0008100C0050C0901A1018503160100269CEB +:1006B000021A01002A9C02751095018100C00501F3 +:1006C0000902A1010901A100050919012905150067 +:1006D00025019505750181029501750381010501CB +:1006E000093009311581257F950275088106093881 +:1006F0001581257F950175088106050C0A380215BC +:1007000081257F950175088106C0C005010906A1F4 +:1007100001050719E029E7150025019508750181F4 +:1007200002950175088101050819012905950575CE +:100730000191029501750391010507190029FF1523 +:100740000025FF950675088100C011241FBECFEF5C +:10075000DAE0DEBFCDBF04B603FE24C080911E03E5 +:1007600090911F03A0912003B09121038730904BFB +:10077000A740B04BB9F410921E0310921F031092C1 +:1007800020031092210314BE84B7877F84BF88E1C1 +:100790000FB6F89480936000109260000FBEE0E006 +:1007A000F8E3099511E0A0E0B1E0E4E9FCE502C05E +:1007B00005900D92A03CB107D9F713E0A0ECB1E091 +:1007C00001C01D92AE31B107E1F70E942F130C94C6 +:1007D000482E0C9400000895089581E0089508952E +:1007E0000C94EC030C94ED030C94EF030E94122A7A +:1007F00023E030E0281B3109220F2093C401089523 +:10080000282F2F9880918000211108C0877F809326 +:10081000800010928D0010928C001BC08860809325 +:100820008000233019F48FEF9FEF0FC083E090E03A +:10083000821B9109880F991F2FEF3FEFA90102C07A +:10084000569547958A95E2F7CA0190938D0080935B +:100850008C000C94F6030E94F60384E08093C3019D +:100860001092C0010895279A2F988FEF9FEF9093D1 +:100870008700809386008AE08093800089E18093DE +:1008800081000E947B290C942B040E9433046E9AF1 +:10089000769A0C94EB031F920F920FB60F921124CD +:1008A0002F933F938F939F93EF93FF93E091C10119 +:1008B000F091C201CF0101969093C2018093C101D2 +:1008C0000090C30102C0F695E7950A94E2F7EF7332 +:1008D0008091C001823019F4E03251F404C08130BB +:1008E00039F4EF3329F480916F008D7F80936F008E +:1008F000F0E0E455FE4FE49121E031E0E29FC001D9 +:10090000E39F900D11240090C40102C09695879535 +:100910000A94E2F790938D0080938C00FF91EF9101 +:100920009F918F913F912F910F900FBE0F901F902D +:100930001895462F50E04031510508F05CC0FA018F +:10094000EA5AFF4FDC0112968C910C940C2E8823EE +:1009500009F451C08BEB92E00895882309F44BC051 +:100960008EEA92E00895882309F445C081EA92E076 +:100970000895882309F43FC084E992E0089588230C +:10098000D1F187E892E008958823A9F18AE792E0FF +:100990000895882381F18DE692E00895882359F126 +:1009A00080E692E00895882331F183E592E008958E +:1009B000882309F186E492E008958823E1F089E331 +:1009C00092E008958823B9F08CE292E0089588239C +:1009D00091F08FE192E00895882369F08AE092E037 +:1009E0000895882341F085EF91E00895882319F058 +:1009F0008CEE91E0089580E090E0089581E0089504 +:100A00000C94FE0408950C944504809115028823EB +:100A100009F448C08091D1019091D201009779F4F6 +:100A20000E944F249093D2018093D1018091D301F1 +:100A300090E0009771F48091D40190E00AC00E9488 +:100A40005B2420910001309101012817390740F300 +:100A500029C00197880F991F880F991FFC01EB523D +:100A6000FE4F60817181828193810E94C40BE0916D +:100A7000D30184E0E89FF0011124EB52FE4F608126 +:100A80007181828193814FE050E00E947C0F8091C0 +:100A9000D30190E001966091D40170E00E94F82D9E +:100AA0008093D3010C94F003109217020C94910BD5 +:100AB0000895089581E0809317020C9459050895D4 +:100AC00008958F929F92AF92BF92EF92FF920F93F1 +:100AD0001F93CF93DF93CDB7DEB7A3970FB6F894EC +:100AE000DEBF0FBECDBF7C01FC0100811181C801BA +:100AF0000E944C22B8010E9463078C01B7010E943A +:100B00000005882309F4CCC10032F0E51F0741F449 +:100B1000F7018281882309F458C00E94E00FC0C108 +:100B20000132F0E51F0741F4F7018281882309F4BF +:100B30004CC00E94E90FB4C10232F0E51F0751F426 +:100B4000F7018281882309F440C00E94DC0F8111E3 +:100B5000F0CFE3CF0332F0E51F0739F4F7018281CC +:100B6000882399F10E945A059BC10432F0E51F07C2 +:100B700039F4F7018281882341F10E94540590C124 +:100B80000532F0E51F0749F4F70182818823E9F077 +:100B9000809117028111F1CFE5CF0632F0E51F07F2 +:100BA00039F4F7018281882381F00E94F00F0AC096 +:100BB0000732F0E51F0749F4F7018281882329F005 +:100BC0000E94FB0F0E9460056BC18091170281118A +:100BD00005C0F70182818111CFC018C1003E110507 +:100BE00079F4F7018281882309F44DC00E94910BAA +:100BF00081E080931602109215021092D40150C128 +:100C0000023E110559F4F70182818823E1F10E9427 +:100C1000910B109216021092150242C1033E11056B +:100C200091F4F7018281882371F10E94910B109257 +:100C3000160281E0809315021092D3011092D20126 +:100C40001092D1012DC10235110559F4F7018281AD +:100C5000882309F425C180910001909101010A9730 +:100C60000DC00135110579F4F7018281882309F45B +:100C700017C180910001909101010A9690930101A2 +:100C8000809300010DC14091040183E2EFE1F1E0A6 +:100C9000DE01119601900D928A95E1F7F7018081AE +:100CA00021E030E02C0F3D1F280F311DC90120919C +:100CB000020130910301FC01E20FF31F60817727ED +:100CC00067FD7095640F711D882777FD8095982FBB +:100CD0000E941A2B20E030E040E451E40E947F2A79 +:100CE0004B015C01F701218184E090E0821B9109B6 +:100CF000BC01882777FD8095982F0E941A2B9B01B5 +:100D0000AC01C501B4010E94172A9B01AC0160E04F +:100D100070E080E090E40E948D2C20E030E04CED0B +:100D200050E40E942A2C4B015C01F7018281882348 +:100D3000D1F04FE050E0C501B4010E947C0F8091DA +:100D400016028823A1F08091D40124E0829FF00153 +:100D50001124EB52FE4F80829182A282B3828F5F78 +:100D60008093D40104C0C501B4010E94C40B0F3F9D +:100D7000110508F02ECF94C08091D00181111FC0C1 +:100D8000043130E5130709F051C00E94020581E0EB +:100D90008093D0010E944F249093CF018093CE0185 +:100DA0001092C7011092C9011092C8011092CB0194 +:100DB0001092CA011092CD011092CC0171C08091A5 +:100DC000CE019091CF010E945B24883C910570F484 +:100DD0008091C701E82FF0E0EE0FFF1FE853FE4FB0 +:100DE000118300838F5F8093C7015AC0043880E568 +:100DF000180721F00538104501F13AC0F70182814A +:100E0000882341F01092C50182E01EC0043830E50D +:100E1000130759F58091C501811106C086E20E9431 +:100E2000A81986E20E94701A82E01CC00438F0E51E +:100E30001F0741F305381045D9F4F7018281882353 +:100E400031F01092C60180E20E94BF1A29C0809141 +:100E5000C601811106C087E20E94A81987E20E949C +:100E6000701A80E20E94C61A1BC00538104529F38B +:100E700081E08093C5018093C601C701A3960FB698 +:100E8000F894DEBF0FBECDBFDF91CF911F910F91C0 +:100E9000FF90EF90BF90AF909F908F900C94F203D3 +:100EA00080E0A3960FB6F894DEBF0FBECDBFDF91F2 +:100EB000CF911F910F91FF90EF90BF90AF909F90B7 +:100EC0008F90089508959CE0799FF001112490E39C +:100ED000899FE00DF11D1124E60FF11DEE0FFF1F9C +:100EE000EC52FD4F859194910895880F991FFC0154 +:100EF000E85BFE4F859194910895880F991FFC013E +:100F0000E853FD4F8591949108950F931F93CF93CC +:100F1000DF93EC01811521E39207A0F5C11580E371 +:100F2000D80708F0D7C0C83ED105D8F4C03ED105D7 +:100F300008F007C2C83AD10578F4C53AD10508F0DF +:100F40006AC0C130D10509F463C008F4F7C1C430E8 +:100F5000D10508F0F6C1F2C1CB3BD10508F466C05B +:100F6000EDC1C11590E2D90708F0AFC0C11521E06D +:100F7000D20708F0E6C1C03FD10508F4DFC18E01F9 +:100F800010651FC2C03880E5D80700F5C03790E56E +:100F9000D90708F0A3C0C11520E5D20709F4ACC0F9 +:100FA00050F4CE01905480319F4008F0C7C1DF70EB +:100FB0008E01106A06C2C13080E5D80709F4AEC0C0 +:100FC000C43190E5D90708F4AFC0B8C1C33820E5F3 +:100FD000D20709F48EC050F4C13890E5D90709F45E +:100FE00082C008F083C000E011EDEBC1C03181E5A3 +:100FF000D80708F4A3C1C11597E5D90708F436C18D +:10100000CE0190578115904108F098C1DF7093C1CF +:1010100001E010E0D6C1C53AD10509F494C1C63A41 +:10102000D10509F093C102E810E4CBC1C83AD1055B +:1010300009F48FC1C93AD10509F48EC1CA3AD10564 +:1010400009F48DC1CB3AD10509F48CC1CC3AD10554 +:1010500009F48BC1CD3AD10509F48AC1C03BD10551 +:1010600009F489C1CE3AD10509F488C1CF3AD10536 +:1010700009F487C1C13BD10509F486C1C23BD10542 +:1010800009F485C1C33BD10509F484C1C43BD10532 +:1010900009F483C1C53BD10509F482C1C63BD10522 +:1010A00009F481C1C73BD10509F480C1C83BD10512 +:1010B00009F47FC1C93BD10509F47EC1CA3BD10502 +:1010C00009F47DC100E014E47CC1CE019F700E9450 +:1010D0007D0778C1DD278E01106C73C1CF70DD27CD +:1010E0008E01146D6EC100E010ED6BC100E012EDD9 +:1010F00068C100E013ED65C10E94531D0E94910B71 +:101100000E9458058FEF94E32CE0815090402040DE +:10111000E1F700C000000E94AA2453C18091F202AE +:1011200081608093F2024DC10E940B25811102C0A3 +:101130000E94E7240E941E2590E090931D03809357 +:101140001C03C23080E5D80721F480911C03816024 +:1011500086C0C43090E5D90721F480911C038260D9 +:101160007EC0C63020E5D20721F480911C03846044 +:1011700076C0C83080E5D80719F480911C0327C0D9 +:10118000CA3090E5D90721F480911C03806167C0C3 +:10119000CC3020E5D20721F480911C0380625FC02F +:1011A000CE3080E5D80721F480911C03806457C0BD +:1011B000C03190E5D90721F480911C0380684FC0AD +:1011C000C23120E5D20729F480911C038460886035 +:1011D00046C0C33080E5D80721F480911C038E7F80 +:1011E0003EC0C53090E5D90721F480911C038D7F66 +:1011F00036C0C73020E5D20721F480911C038B7FD5 +:101200002EC0C93080E5D80719F480911C0326C090 +:10121000CB3090E5D90721F480911C038F7E1FC04D +:10122000CD3020E5D20721F480911C038F7D17C0BB +:10123000CF3080E5D80721F480911C038F7B0FC04D +:10124000C13190E5D90721F480911C038F7707C045 +:10125000C331D04531F480911C038B7F877F80930D +:101260001C0380911C030E942225ABC08D2F99275F +:101270008F70992781309105D9F49E01237033270F +:1012800002C0880F991F2A95E2F79C688E0144E0FE +:10129000000F111F4A95E1F700271370802B912B47 +:1012A00053E0CC0FDD1F5A95E1F7C076DD272FC044 +:1012B0008230910531F4DC2FCC278E01016F106A4A +:1012C00080C08330910569F4CE018370992701E0D5 +:1012D00010E002C0000F111F8A95E2F7C8019C6858 +:1012E0000FC084309105B9F4CE018370992701E0D5 +:1012F00010E002C0000F111F8A95E2F7C8019A683A +:1013000023E0CC0FDD1F2A95E1F7C07ED7708C015A +:101310000C2B1D2B56C08530910531F4DC2FCC27CA +:101320008E01046F106A4DC0069709F04AC0CF7154 +:10133000DD27DC2FCC278E01106243C000E010E0D7 +:1013400040C08E013EC001E810E43BC003E810E459 +:1013500038C002EE14E435C009EE14E432C00AEEDF +:1013600014E42FC005EB14E42CC006EB14E429C0F0 +:1013700007EB14E426C00CEC14E423C00DEC14E4D9 +:1013800020C003E815E41DC00AE815E41AC002E90C +:1013900015E417C004E915E414C001E216E411C015 +:1013A00003E216E40EC004E216E40BC005E216E404 +:1013B00008C006E216E405C007E216E402C00AE22D +:1013C00016E4C801DF91CF911F910F9108959CE021 +:1013D000799FF001112490E3899FE00DF11D112404 +:1013E000E60FF11DEE0FFF1FEC52FD4F859194911A +:1013F000803E9105E0F4803C910558F581339105DC +:1014000009F46FC048F48932910509F463C08A3247 +:10141000910509F46DC072C089339105E9F08238F5 +:101420009105D1F08533910509F44DC067C0833E25 +:10143000910581F138F4803E9105B9F0823E910525 +:10144000D9F05CC0863E910561F1873E9105A1F11E +:1014500055C00E947507089520911C0320FD02C00D +:1014600021FF4CC080EE90E049C080911C0380FFBA +:10147000F9CF89E390E042C080911C0382FF0EC047 +:1014800080911C0384FF03C080E090E037C083EEAE +:1014900090E034C080911C0382FFF2CF82EE90E096 +:1014A0002DC080911C0383FF0BC080911C0384FD21 +:1014B000EBCF87EE90E022C080911C0383FFF5CF35 +:1014C00086EE90E01BC080911C0385FF07C089E277 +:1014D00090E014C080911C0385FFF9CF85E390E074 +:1014E0000DC080911C0386FF07C08AE290E006C011 +:1014F00080911C0386FFF9CF81E390E00E9485076D +:1015000008950C94F403E82FF0E0E25BFE4F808135 +:10151000E82FEF70F0E082958F7021E030E0A901B4 +:1015200002C0440F551F8A95E2F740A308950F9318 +:101530001F93CF93DF9385B7806885BF85B7806899 +:1015400085BFC3E0D0E001E010E0FE01E25BFE4FAA +:101550008081E82FEF70F0E021A182958F70A801C3 +:1015600002C0440F551F8A95E2F7CA01822B81A35E +:101570008C2F0E94830A219740F78BE090E061E076 +:1015800070E0FC01EE5BFE4F2081E22FEF70F0E097 +:1015900042A122952F70DB0102C0AA0FBB1F2A9522 +:1015A000E2F79D01242B22A3019758F7DF91CF91F9 +:1015B0001F910F910C940305EF92FF920F931F93CD +:1015C000CF93DF9300E212E0C3E0EE24E394F12C2A +:1015D000D5E08C2F0E94830A8BE090E040E050E041 +:1015E000FC01EE5BFE4F6081E62FEF70F0E020A182 +:1015F00030E062956F7002C0359527956A95E2F7E5 +:1016000020FD09C09701082E02C0220F331F0A9443 +:10161000E2F7422B532B019718F7F8019291829130 +:101620008F018417950721F051834083D0930501E2 +:101630008C2F0E94830AC15060F68091050187FDBE +:101640002CC08150809305018F3F39F08FE99FE0D6 +:101650000197F1F700C0000020C080911E02909118 +:101660001F02909327028093260280911C02909182 +:101670001D02909325028093240280911A0290917A +:101680001B02909323028093220280911802909172 +:10169000190290932102809320020E94050581E0A7 +:1016A000DF91CF911F910F91FF90EF900895E82F58 +:1016B000F0E0EE0FFF1FE05EFD4F80819181089505 +:1016C00008950F931F93CF9308E212E0C0E0F80152 +:1016D000929182918F010E94C723C80FF2E00032DD +:1016E0001F07A9F78C2FCF911F910F9108950E948A +:1016F0000B25811102C00E94E7240E9430258093AF +:1017000007033E9A809171008D7F8093710082E083 +:10171000809390008AE18093910081E080932A0277 +:10172000089580912A02811102C00E94770B1092C5 +:101730007A0210927902809171008D7F80937100FE +:10174000809190008F738093900010923C021092D1 +:101750003B02109273021092740210927502109262 +:1017600076021092720210927102E1E5F2E0A1E4B9 +:10177000B2E011921192119211921D921D9282E08B +:10178000E137F807B1F70895CF92DF92EF92FF9219 +:101790000F931F93CF93DF9320913B02222309F4F1 +:1017A00084C06B017C0180912A02811102C00E94D9 +:1017B000770B01E712E0C7E0D0E0A7019601F8013E +:1017C00092918291729162918F010E947B2A811184 +:1017D00031C0FE01EE0FFF1FEE0FFF1FEF5AFD4F4E +:1017E0001082118212821382DE01AA0FBB1FAF5B2F +:1017F000BD4F11961C921E92C730D105E9F021967B +:1018000044815581668177814083518362837383EC +:10181000148215821682178212968D919C911397CD +:1018200011969C938E9313961C921E921297349647 +:101830001296E2CF219708F68091790290917A0270 +:10184000019797FD05C090937A028093790204C0B6 +:1018500010927A02109279028091790290917A0224 +:1018600020917702309178022817390724F01092DE +:10187000780210927702892BC1F4809171008D7FDC +:1018800080937100809190008F73809390001092EC +:1018900073021092740210927502109276021092E6 +:1018A00072021092710210923B02DF91CF911F9150 +:1018B0000F91FF90EF90DF90CF9008951F920F92BD +:1018C0000FB60F9211244F925F926F927F928F9278 +:1018D0009F92AF92BF92CF92DF92EF92FF922F939F +:1018E0003F934F935F936F937F938F939F93AF93A8 +:1018F000BF93CF93DF93EF93FF9380913B028823B5 +:1019000009F49BC1C0917902D0917A021C161D0680 +:101910000CF093C140902B0250902C0260902D024D +:1019200070902E0220E030E0A901C301B2010E94B4 +:10193000262C18160CF065C0C130D10509F452C030 +:101940008091770290917802BE010E94F82D7C016F +:10195000909378028093770280903D0290903E02AF +:10196000A0903F02B090400220E030E040E85FE30A +:10197000C501B4010E94172A60933D0270933E0294 +:1019800080933F0290934002F701EE0FFF1FEE0F8E +:10199000FF1FEF5AFD4FA301920160817181828187 +:1019A00093810E947F2A20E030E040E05EE30E94C5 +:1019B0002A2C9B01AC01C501B4010E94262C1816EB +:1019C0008CF4C7010196BE010E94F82D9093780215 +:1019D0008093770210923D0210923E0210923F02D5 +:1019E00010924002E0917702F0917802EE0FFF1F13 +:1019F000EE0FFF1FEF5AFD4F60817181828193814D +:101A0000D0C0C0907302D0907402E0907502F09044 +:101A1000760220E030E0A901C701B6010E947B2ACE +:101A20002197882309F4A2C0FE01EE0FFF1FEE0FDD +:101A3000FF1FEF5AFD4F80809180A280B380A501E7 +:101A40009401C701B6010E947B2A87FF31C0A5011E +:101A5000940160E070E08CED93EC0E947F2A20E01E +:101A600030E040E451E40E947F2A20E030E040E092 +:101A70005FE30E942A2C9B01AC0160E070E080E0F3 +:101A800090E40E948D2C9B01AC01C501B4010E9421 +:101A90002A2C9B01AC01C701B6010E947B2A87FF5B +:101AA00007C0A701960160E070E08CED93E439C0B7 +:101AB000A5019401C701B6010E94262C18160CF04E +:101AC00055C0A501940160E070E08CED93E40E94A4 +:101AD0007F2A20E030E040E451E40E947F2A20E0A9 +:101AE00030E040E05FE30E942A2C9B01AC0160E003 +:101AF00070E080E090E40E948D2C9B01AC01C50158 +:101B0000B4010E942A2C9B01AC01C701B6010E94BE +:101B1000262C18165CF5A701960160E070E08CEDAC +:101B200093EC0E947F2A20E030E040E451E40E94E0 +:101B30007F2A20E030E040E05FE30E942A2C9B01F6 +:101B4000AC0160E070E080E090E40E948D2C9B018D +:101B5000AC01C701B6010E942A2C609373027093F6 +:101B60007402809375029093760213C0FE01EE0F0B +:101B7000FF1FEE0FFF1FEF5AFD4F80819181A28161 +:101B8000B3818093730290937402A0937502B09313 +:101B90007602609173027091740280917502909147 +:101BA000760220912802309129022F3F4FEF34070F +:101BB00031F02F5F3F4F30932902209328020E947B +:101BC00006106B017C0120E034E244EF51E40E94F6 +:101BD0007B2A87FF08C086EFC82E88E2D82E84EFC4 +:101BE000E82E81E4F82E20E030E040E051E4C70127 +:101BF000B6010E942A2C9B01AC0160E074E284E7EC +:101C00009BE40E947F2A6B017C010E94EC2A709366 +:101C10009700609396002091060130910701409152 +:101C2000080150910901C701B6010E942A2C0E94A7 +:101C3000EC2A709399006093980080913C0288236D +:101C400009F433C1C0903702D0903802E0903902D5 +:101C5000F0903A0220E030E0A901C701B6010E94ED +:101C6000262C1816D4F580912802909129028F3FD6 +:101C70002FEF920729F00196909329028093280272 +:101C8000C701B6010E94061020E030E040E051E4B8 +:101C90000E942A2C9B01AC0160E074E284E79BE483 +:101CA0000E947F2A6B017C010E94EC2A70939700AE +:101CB0006093960020910601309107014091080140 +:101CC00050910901C701B6010E942A2C0E94EC2AFA +:101CD000709399006093980008C01092970010923A +:101CE00096001092990010929800609131027091C4 +:101CF00032026F5F7F4F7093320260933102209106 +:101D000096003091970080E090E0232BF1F0C09195 +:101D10009600D09197000E94182B6B017C01BE01A8 +:101D200080E090E00E94182B9B01AC01609133028F +:101D30007091340280913502909136020E947F2A80 +:101D400020E03FEF4FE757E410C00E94182B6B01D3 +:101D50007C0120E030EE4FEF54E46091330270914B +:101D6000340280913502909136020E942A2C9B0108 +:101D7000AC01C701B6010E94262C87FD96C0809158 +:101D80002F028F5F80932F0290E020910303309108 +:101D9000040382179307A0F080910E03882319F0A3 +:101DA00010922F020DC0809171008D7F8093710081 +:101DB000809190008F738093900010923C027DC0C0 +:101DC00080913002C0912F02811128C0C090080379 +:101DD000D0900903E0900A03F0900B0320E030E07C +:101DE000A901C701B6010E94262C1816BCF481E097 +:101DF000809330021092370210923802109239020A +:101E000010923A02C0923302D0923402E09235022C +:101E1000F0923602C150C0932F0243C0109230029C +:101E20001092290210922802E0910503F091060316 +:101E300048E0C49FE00DF11D112480819181A281B1 +:101E4000B3818093370290933802A0933902B09304 +:101E50003A0220E030E040E85EE3648175818681EB +:101E600097810E942A2C6B017C0180910A01682FC6 +:101E700070E080E090E00E94182B20E030E048EC19 +:101E800052E40E947F2A9B01AC01C701B6010E9467 +:101E90002A2C60933302709334028093350290931E +:101EA000360210923202109231028091070380FDB7 +:101EB00004C010923C0210923B02FF91EF91DF911F +:101EC000CF91BF91AF919F918F917F916F915F91D2 +:101ED0004F913F912F91FF90EF90DF90CF90BF9067 +:101EE000AF909F908F907F906F905F904F900F90EA +:101EF0000FBE0F901F901895CF92DF92EF92FF9236 +:101F0000CF93DF936B017C01EA0180912A0281115A +:101F100002C00E94770B8091070380FF46C080912A +:101F2000790290917A0208970CF03FC0809171007D +:101F30008D7F8093710080913C0281110E94910BF2 +:101F400081E080933B02109229021092280220E047 +:101F500030E0A901C701B6010E94262C1816DCF456 +:101F60008091790290917A02FC01EE0FFF1FEE0F33 +:101F7000FF1FEF5AFD4FC082D182E282F382FC0143 +:101F8000EE0FFF1FEF5BFD4FD183C083019690934F +:101F90007A0280937902809171008260809371004F +:101FA00080919000806880939000DF91CF91FF90A6 +:101FB000EF90DF90CF90089580910703817008958E +:101FC000809107038160809307030E9434250C945D +:101FD0005F05809107038E7F809307030C9434255F +:101FE00080917B0290E0019666E070E00E94F82DFF +:101FF00080937B02089580917B0290E0019766E0D8 +:1020000070E00E94F82D80937B0208958F929F923A +:10201000AF92BF92CF92DF92EF92FF920F931F93F6 +:10202000CF93DF936B017C01C0912802D0912902EC +:10203000BE0180E090E00E94182B4B015C01A701DB +:10204000960160E070E08CE594E40E947F2A9B0199 +:10205000AC01C501B4010E942A2C0E94EC2A2091F7 +:102060007B02233009F473C028F4222351F021307D +:10207000E9F02CC1243009F4A0C0253009F4E0C0F7 +:1020800025C180E090E0A0E0BFE38093060190933B +:102090000701A0930801B093090110922B0210923E +:1020A0002C0210922D0210922E0210C110922B02BF +:1020B00010922C0210922D0210922E0264317105A2 +:1020C00040F46A30710560F520E030E040E85EE3FE +:1020D0002BC0693C710508F0AAC080E090E00E9426 +:1020E000182B20E030E040EA51E40E94162A20E05C +:1020F00030E044E353E40E947F2A9B01AC010E943C +:102100002A2C20E030E040E05EE30E942A2C9B0174 +:10211000AC0160E070E080E09EE30E94162A44C0BB +:1021200020E030E040E05FE3C701B6010E942A2CC6 +:102130006B017C0180E090E0A0E0BEE380930601AB +:1021400090930701A0930801B0930901BFC01092BA +:102150002B0210922C0210922D0210922E024AE0B5 +:10216000469F9001479F300D1124C90168EB7BE029 +:102170000E94E42DBC016C5D754077FF03C0719532 +:1021800061957109882777FD8095982F0E941A2BF9 +:102190002EE333EC4EE259E30E942A2C20E030E09B +:1021A00040EC5EE30E94172A6093060170930701DA +:1021B000809308019093090189C010922B0210921C +:1021C0002C0210922D0210922E02CE0183709927BC +:1021D000892BE1F0BE016170772780E090E00E94DA +:1021E000182B20E030E040E05EE30E942A2C20E043 +:1021F00030E040E45FE30E94172A60930601709389 +:10220000070180930801909309010CC080E090E0E1 +:10221000A0E0BFE38093060190930701A09308011B +:10222000B0930901C770DD27CD2B09F04FC0109284 +:10223000060110920701109208011092090146C090 +:1022400010922B0210922C0210922D0210922E024C +:1022500000E010E020E03FE3009306011093070147 +:1022600020930801309309016739710578F180E006 +:1022700090E00E94182B20E030E047E153E40E94F8 +:10228000162A20E030E04AE754E40E947F2A20E04A +:1022900030E048E452E40E942A2C20E030E040EA9A +:1022A00051E40E945C2B0E94E72A660F771F660F9D +:1022B000771FFB01EE5AFE4F20813181428153810D +:1022C000C701B6010E942A2C6B017C01C701B6012F +:1022D000DF91CF911F910F91FF90EF90DF90CF9002 +:1022E000BF90AF909F908F90089580918C02089539 +:1022F000CF93DF9300D01F92CDB7DEB79C018091C2 +:102300001303843019F593E099833B832A839093D8 +:10231000E9008FEF9091E800815095FD06C095EDA2 +:102320009A95F1F700008111F5CF8091E80085FFC3 +:102330000DC040E050E063E070E0CE0101960E94E5 +:10234000D9138091E8008E778093E8000F900F906A +:102350000F90DF91CF910895CF93DF9300D01F921C +:10236000CDB7DEB720911303243021F522E0298375 +:102370009B838A8383E08093E9008FEF9091E8004C +:10238000815095FD06C095ED9A95F1F700008111F9 +:10239000F5CF8091E80085FF0DC040E050E063E09C +:1023A00070E0CE0101960E94D9138091E8008E77EB +:1023B0008093E8000F900F900F90DF91CF910895D8 +:1023C000209113032430F1F422E02093E9002FEF51 +:1023D0003091E800215035FD06C035ED3A95F1F712 +:1023E00000002111F5CF2091E80025FF0BC040E04F +:1023F00050E065E070E00E94D9138091E8008E778C +:102400008093E8000895CF93DF93EC01909113033C +:10241000943009F046C0809115018823D9F080914D +:1024200016018823B9F09093E9008FEF9091E800AE +:10243000815095FD06C095E19A95F1F70000811154 +:10244000F5CF8091E80085FF2CC040E050E060E1CE +:1024500070E017C081E08093E9008FEF9091E80071 +:10246000815095FD06C095ED9A95F1F70000811118 +:10247000F5CF8091E80085FF14C040E050E068E0AF +:1024800070E0CE010E94D9138091E8008E7780938E +:10249000E80080E1FE01ACE7B2E001900D928A9580 +:1024A000E1F7DF91CF91089580911203811109C066 +:1024B0000E946E150E94CB158091E200846080938B +:1024C000E2000895109212030895089508950C945F +:1024D000122442E061EC81E00E94E81442E061ECE9 +:1024E00082E00E94E81442E061EC83E00E94E8147C +:1024F00042E161EC84E00C94E81480911503833090 +:1025000009F455C030F4813071F0823009F48EC086 +:1025100008958A3009F47AC08B3009F460C089309C +:1025200009F09CC020C080911403813A09F096C044 +:102530008091E800877F8093E80080911803909154 +:102540001903892B21F460E18CE792E003C060E07D +:1025500080E090E070E00E9424148091E8008B7786 +:102560008093E800089580911403813209F076C0C9 +:102570008091180390911903009719F0039709F0BF +:102580006DC08091E800877F8093E8008091E8002B +:1025900082FD05C0809113038111F8CF5FC0809147 +:1025A000F10080938C028091E8008B7753C080917A +:1025B0001403813A09F052C08091180390911903D5 +:1025C000892B09F04BC08091E800877F8093E80059 +:1025D0008091E80080FFFCCF8091150136C080918A +:1025E00014038132D9F58091180390911903892B36 +:1025F000A9F58091E800877F8093E8000E941D156F +:1026000080911603809315010C94531D809114033F +:10261000813221F58091E800877F8093E8000E9455 +:102620001D158091170380938D02089580911403E6 +:10263000813AA1F48091E800877F8093E80080913F +:10264000E80080FFFCCF80918D028093F1008091A3 +:10265000E8008E778093E8000C941D15089584B7E8 +:10266000877F84BF88E10FB6F89480936000109252 +:1026700060000FBE90E080E80FB6F8948093610090 +:10268000909361000FBE0E94C0180E946E150E94B8 +:10269000CB158091E20084608093E20078940E94E0 +:1026A00051180E94C2188BE091E00E946C18809132 +:1026B0001303853069F40E94D3238091110388238A +:1026C000B1F30E940124882391F30E94C313EFCF3A +:1026D0000E94CA18ECCF292F332723303105C9F0C7 +:1026E00064F42130310581F02230310509F043C016 +:1026F0008DE690E020ED35E042C021323105F1F069 +:102700002232310541F137C082E190E02DE336E01D +:1027100036C099278130910541F08230910541F012 +:10272000892B49F5ECECF5E005C0EEE9F5E002C0D7 +:10273000E4E7F5E0849190E09F0121C06430D8F493 +:10274000E62FF0E0EE0FFF1FE255FE4F20813181B2 +:1027500089E090E014C0643070F470E0FB01EE0F8B +:10276000FF1FEA55FE4F20813181FB01EE55FE4FE0 +:10277000808190E004C080E090E020E030E0FA0149 +:1027800031832083089580E189BD82E189BD09B448 +:1027900000FEFDCF8091D8008F7D8093D80080917E +:1027A000E00082608093E0008091E00081FDFCCF3A +:1027B0000895CF92DF92EF92FF920F931F93CF93E2 +:1027C000DF93EC018B016A010E943C15811133C03B +:1027D000C114D10439F0F60180819181081B190BD5 +:1027E000C80FD91FE12CF12C0115110519F18091A9 +:1027F000E80085FD16C08091E8008E778093E800A0 +:10280000C114D10449F0F60180819181E80EF91ECE +:10281000F182E08285E00FC00E943C15882321F3FD +:102820000AC089918093F10001501109FFEFEF1A5E +:10283000FF0ADACF80E0DF91CF911F910F91FF90D7 +:10284000EF90DF90CF90089520911A0330911B03F1 +:102850002617370748F06115710539F42091E80013 +:102860002E772093E80001C0B90140E061157105A1 +:10287000A9F120911303222309F443C0253009F460 +:1028800042C02091E80023FD40C02091E80022FDD5 +:1028900032C02091E80020FFE9CF4091F300209161 +:1028A000F20030E0342BFC01CF016115710559F0C5 +:1028B0002830310540F481918093F1006150710915 +:1028C0002F5F3F4FF1CF41E02830310509F040E064 +:1028D0002091E8002E772093E800C8CF4111C9CF9E +:1028E0000AC080911303882361F0853061F08091E4 +:1028F000E80083FD0AC08091E80082FFF2CF80E00B +:10290000089582E0089583E0089581E0089520917C +:102910001A0330911B032617370748F0611571051C +:1029200039F42091E8002E772093E80001C0B90126 +:10293000FC0120E06115710591F18091130388235A +:1029400009F440C0853009F43FC08091E80083FD60 +:102950003DC08091E80082FD2FC08091E80080FF9B +:10296000E9CF2091F3008091F20090E0922B611565 +:10297000710559F08830910540F424912093F100BD +:102980003196615071090196F2CF21E0089709F064 +:1029900020E08091E8008E778093E800CBCF211172 +:1029A000CCCF0AC080911303882361F0853061F099 +:1029B0008091E80083FD0AC08091E80082FFF2CF99 +:1029C00080E0089582E0089583E0089581E008950D +:1029D000982F973058F59093E900981739F0709137 +:1029E000EC002091ED005091F00003C0242F762FD1 +:1029F00050E021FF19C03091EB003E7F3093EB0097 +:102A00003091ED003D7F3093ED003091EB0031606F +:102A10003093EB007093EC002093ED005093F000A6 +:102A20002091EE0027FF07C09F5FD3CF8F70809368 +:102A3000E90081E0089580E008958091140387FF04 +:102A400011C08091E80082FD05C0809113038111BF +:102A5000F8CF11C08091E8008B770BC080911303F1 +:102A6000882349F08091E80080FFF8CF8091E8004A +:102A70008E778093E80008952091E4003091E5007E +:102A800095E64091EC00842F817040FF22C0809138 +:102A9000E80080FD1CC080911303882391F08530ED +:102AA00091F08091EB0085FD10C04091E4005091C1 +:102AB000E5004217530729F39A01915011F784E07A +:102AC000089582E0089583E0089581E0089580E00C +:102AD00008954091E80042FFDECF08950E94DC1582 +:102AE0000E94E415E0EEF0E0808181608083E8EDF3 +:102AF000F0E080818F77808319BCA7EDB0E08C91E6 +:102B00008E7F8C9380818F7E808310921203089534 +:102B10000F931F93CF93DF930E94DC150E94E4155F +:102B2000C8EDD0E088818F7788838881806888832A +:102B300088818F7D888319BC1092130310920F0334 +:102B4000109211031092100300EE10E0F801808142 +:102B50008B7F808388818160888342E060E080E0B1 +:102B60000E94E814E1EEF0E080818E7F8083E2EE47 +:102B7000F0E0808181608083808188608083F801BB +:102B800080818E7F8083888180618883DF91CF916F +:102B90001F910F910895E8EDF0E080818F7E808392 +:102BA000E7EDF0E080818160808384E082BF81E096 +:102BB000809312030C948815E8EDF0E080818E7FFD +:102BC00080831092E20008951092DA001092E100E2 +:102BD00008951F920F920FB60F9211242F933F93D7 +:102BE0004F935F936F937F938F939F93AF93BF9315 +:102BF000EF93FF938091E10082FF0BC08091E20090 +:102C000082FF07C08091E1008B7F8093E1000E94EA +:102C100050188091DA0080FF1FC08091D80080FF9B +:102C20001BC08091DA008E7F8093DA008091D900FA +:102C300080FF0DC080E189BD82E189BD09B400FE3D +:102C4000FDCF81E0809313030E94541205C019BC8C +:102C5000109213030E9462128091E10080FF19C05C +:102C60008091E20080FF15C08091E2008E7F80930A +:102C7000E2008091E20080618093E2008091D800C0 +:102C800080628093D80019BC85E0809313030E9472 +:102C900066128091E10084FF30C08091E20084FFE1 +:102CA0002CC080E189BD82E189BD09B400FEFDCF61 +:102CB0008091D8008F7D8093D8008091E1008F7E35 +:102CC0008093E1008091E2008F7E8093E20080910A +:102CD000E20081608093E20080910F03882311F06D +:102CE00084E007C08091E30087FD02C081E001C05D +:102CF00083E0809313030E9467128091E10083FFB9 +:102D000029C08091E20083FF25C08091E100877F88 +:102D10008093E10082E08093130310920F0380916F +:102D2000E1008E7F8093E1008091E2008E7F8093AE +:102D3000E2008091E20080618093E20042E060E086 +:102D400080E00E94E8148091F00088608093F00099 +:102D50000E946512FF91EF91BF91AF919F918F916A +:102D60007F916F915F914F913F912F910F900FBE87 +:102D70000F901F9018951F920F920FB60F9211246B +:102D80002F933F934F935F936F937F938F939F9373 +:102D9000AF93BF93CF93DF93EF93FF93C091E9007D +:102DA000CF708091EC00D82FD17080FDD0E81092C8 +:102DB000E9008091F000877F8093F00078940E9472 +:102DC000FF161092E9008091F00088608093F00077 +:102DD000CD2BCF70C093E900FF91EF91DF91CF91A0 +:102DE000BF91AF919F918F917F916F915F914F9123 +:102DF0003F912F910F900FBE0F901F9018951F932A +:102E0000CF93DF93CDB7DEB7AA970FB6F894DEBFA6 +:102E10000FBECDBFE4E1F3E088E08E0F9091F100AA +:102E200091938E13FBCF0E947D128091E80083FF67 +:102E30001FC18091140390911503492F50E04A302F +:102E4000510508F015C1FA01EA59FF4F0C940C2EF8 +:102E5000803881F0823809F00BC1809118038F709F +:102E60008093E9008091EB0085FB882780F9109220 +:102E7000E90006C0809110039091110391118260C6 +:102E80009091E800977F9093E8008093F100109272 +:102E9000F100C8C0282F2D7F09F0EAC0882319F05F +:102EA000823061F0E5C080911603813009F0E0C006 +:102EB000933009F080E0809311032BC080911603BA +:102EC000811127C0809118038F7009F4D1C08093BD +:102ED000E9002091EB0020FF1CC0933021F4809189 +:102EE000EB00806214C09091EB0090619093EB0036 +:102EF00021E030E0A90102C0440F551F8A95E2F796 +:102F00004093EA001092EA008091EB008860809381 +:102F1000EB001092E9008091E800877F86C0811164 +:102F2000A7C0109116031F778091E3008078812B52 +:102F30008093E3008091E800877F8093E8000E94FF +:102F40001D158091E80080FFFCCF8091E300806830 +:102F50008093E300111102C082E001C083E08093FE +:102F6000130386C08058823008F082C08091160317 +:102F7000909117038C3D53E0950779F583E08A83A0 +:102F80008AE289834FB7F894DE01139620E03EE091 +:102F900051E2E32FF0E050935700E49120FF03C08B +:102FA000E295EF703F5FEF708E2F90E0EA3010F007 +:102FB000C79601C0C0968D939D932F5F243149F72A +:102FC0004FBF8091E800877F8093E8006AE270E05D +:102FD000CE0101960E94241414C0AE014F5F5F4FD2 +:102FE000609118030E946B13BC01009709F440C064 +:102FF0009091E800977F9093E80089819A810E94E0 +:1030000087148091E8008B778093E80031C0803886 +:1030100079F58091E800877F8093E80080910F0325 +:103020008093F1008091E8008E778093E8000E9401 +:103030001D151EC081111CC0909116039230C0F462 +:103040008091E800877F8093E80090930F030E94AF +:103050001D1580910F03811106C08091E30087FD4B +:1030600002C081E001C084E0809313030E946912D2 +:103070008091E80083FF0AC08091E800877F8093F9 +:10308000E8008091EB0080628093EB00AA960FB677 +:10309000F894DEBF0FBECDBFDF91CF911F91089591 +:1030A0000895CF93809113038823A1F0C091E90084 +:1030B000CF709091EC00892F817090FD80E8C82B33 +:1030C0001092E9008091E80083FD0E94FF16CF7006 +:1030D000C093E900CF910895909393028093920258 +:1030E0000895E0919202F0919302309721F00190BF +:1030F000F081E02D099480E00895E0919202F09132 +:103100009302309721F00280F381E02D0994089515 +:10311000E0919202F0919302309721F00480F581C2 +:10312000E02D099408952091900230919102821728 +:10313000930771F09093910280939002E091920234 +:10314000F0919302309721F00680F781E02D0994E9 +:10315000089520918E0230918F028217930771F0AB +:1031600090938F0280938E02E0919202F0919302ED +:10317000309721F00084F185E02D09940895089599 +:103180000C94BF180E9446240E94970A0E94CC24E7 +:103190000C947B295F926F927F928F929F92AF9255 +:1031A000BF92CF92DF92EF92FF920F931F93CF9334 +:1031B000DF9300D000D01F92CDB7DEB70E94DC0AAB +:1031C0009DE9C92E92E0D92E03E010E0AA24A39431 +:1031D000B12C502E802F0E94570B4C01F60172909B +:1031E00062906F016826792661147104A1F4015080 +:1031F000110978F78FEF89838A831B820E944F24FD +:103200008160782F9D838C8349815A816B818D8168 +:103210000E947A1938C08091F20281FD0E94600BF1 +:103220002BE030E07501022E02C0EE0CFF1C0A9468 +:10323000E2F7C70186219721892B09F129835A8258 +:103240008E209F2091E0892809F490E09B830E94C2 +:103250004F248160782F9D838C8349815A816B81B3 +:103260008D810E947A19000F111FF801EB56FD4F56 +:1032700080819181E826F926F182E08204C0215004 +:10328000310980F6B4CF0E94B326109194020E94B7 +:1032900071181817D1F00E947118809394020F9042 +:1032A0000F900F900F900F90DF91CF911F910F9182 +:1032B000FF90EF90DF90CF90BF90AF909F908F9056 +:1032C0007F906F905F900C94810A0F900F900F90F9 +:1032D0000F900F90DF91CF911F910F91FF90EF9082 +:1032E000DF90CF90BF90AF909F908F907F906F9026 +:1032F0005F900895CF93DF93CDB7DEB72B970FB6CE +:10330000F894DEBF0FBECDBF4F83588769877A8799 +:103310008B87DE01119686E0FD0111928A95E9F70F +:1033200085E0FE01379601900D928A95E1F749817B +:103330005A816B817C818D819E810E94F11F2B9629 +:103340000FB6F894DEBF0FBECDBFDF91CF910895C9 +:10335000CF93882309F4C2C0C82F823859F40E9441 +:10336000711881FDBBC089E30E94CB220E94982383 +:1033700089E30CC0833879F40E94711880FDAEC0D7 +:1033800083E50E94CB220E94982383E50E940D23AF +:10339000CF910C949823843859F40E94711882FDBF +:1033A0009DC087E40E94CB220E94982387E4EECF41 +:1033B0008CEF8C0F813A48F48C2F0E94E328811106 +:1033C0008DC08C2F0E94CB22E3CF80E28C0F8830FF +:1033D00048F4C77081E001C0880FCA95EAF70E94DF +:1033E0005123D6CF8BE58C0F833078F4C53A29F082 +:1033F000C63A31F083E890E005C081E890E002C071 +:1034000082E890E0CF910C94931888E58C0F83317B +:1034100008F064C0C83A39F1C93A41F1CA3A49F1F1 +:10342000CB3A51F1CC3A59F1CD3A61F1C03B69F157 +:10343000CE3A71F1CF3A79F1C13B81F1C23B89F1CA +:10344000C33B91F1C43B99F1C53BA1F1C63BA9F146 +:10345000C73BB1F1C83BB9F1C93BC1F1CA3BC9F1A6 +:1034600080E090E038C082EE90E035C089EE90E0D8 +:1034700032C08AEE90E02FC085EB90E02CC086EB46 +:1034800090E029C087EB90E026C08CEC90E023C050 +:103490008DEC90E020C083E891E01DC08AE891E0C7 +:1034A0001AC082E991E017C084E991E014C081E27A +:1034B00092E011C083E292E00EC084E292E00BC081 +:1034C00085E292E008C086E292E005C087E292E0E1 +:1034D00002C08AE292E0CF910C94A918CF9108958E +:1034E000882309F44BC0823859F40E94711881FF77 +:1034F00045C089E30E94CB220E94982389E30CC037 +:10350000833871F40E94711880FF38C083E50E94EF +:10351000CB220E94982383E50E940D230C949823CC +:10352000843859F40E94711882FF28C087E40E94F1 +:10353000CB220E94982387E4EFCF9CEF980F913A1B +:1035400058F390E2980F983050F4877091E001C0E2 +:10355000990F8A95EAF7892F0E945723DFCF9BE5C1 +:10356000980F933020F480E090E00C949318885AE0 +:10357000833120F480E090E00C94A918089588230A +:1035800021F00E9451230C9498230895882321F060 +:103590000E9457230C94982308957F928F929F92B4 +:1035A000AF92BF92CF92DF92EF92FF920F931F9351 +:1035B000CF93DF931F92CDB7DEB77C01C62E772E57 +:1035C000FC01058102950F70128111110E946E237A +:1035D0000E94C422882379F0112369F080E28C0DC7 +:1035E000883048F082E00E94AD220E94C42291E01F +:1035F000D82ED92601C0D12CE72DE295EF70F0E04E +:10360000E059FF4F0C940C2E872D807F072D0F70F3 +:10361000882311F00295007F112389F0002309F41B +:1036200099C180E28C0D883020F4802F0E945123B4 +:1036300003C0802F0E9461230E9498238BC18C2D90 +:103640000E94701A002309F4C3C180E28C0D8830F7 +:1036500020F4802F0E94572303C0802F0E946723ED +:103660000E949823B5C1872D807F972D9F7080324F +:1036700011F4892F03C0892F8295807FCC2021F0FF +:10368000F1E0CF16A1F01DC0112339F0002319F18C +:10369000013009F50E9481239BC1002319F00130FC +:1036A00009F496C189830E948423898110C1112362 +:1036B00021F0063008F08CC10EC0053008F088C13A +:1036C00006C1112359F0002331F0F701958190FFD5 +:1036D00041C19F7095830E94BF1A7AC1002309F4EB +:1036E000F6C03EC1872D86958695837090E0009741 +:1036F00019F0019761F06CC1112321F08C2D972DE9 +:10370000937002C080E090E00E94931861C1112381 +:1037100021F08C2D972D937002C080E090E00E94E4 +:10372000A91856C18C2D112319F00E94BB2502C087 +:103730000E9423260E94A8264BC1872D837009F082 +:1037400052C0111145C18C2D829586958770880FC6 +:10375000880F9C2D9F70892E912CA12CB12C082EA6 +:1037600004C0880C991CAA1CBB1C0A94D2F7C4FE86 +:1037700014C00FE010E020E030E0B901A80104C05F +:10378000440F551F661F771F8A95D2F7CB01BA01E8 +:10379000609570958095909503C060E070E0CB01D6 +:1037A000272D26952695237030E02230310569F0CB +:1037B0002330310589F0682979298A299B2921300C +:1037C000310571F00E94392103C1682979298A29BC +:1037D0009B290E945521FCC00E943921C501B401DA +:1037E0000E941D21F5C0112319F0872D817001C0A1 +:1037F0008695882309F4ECC08C2D82958695877078 +:10380000880F880F9C2D9F70892E912CA12CB12C94 +:10381000082E04C0880C991CAA1CBB1C0A94D2F761 +:10382000C4FE14C00FE010E020E030E0B901A801B0 +:1038300004C0440F551F661F771F8A95D2F7CB012E +:10384000BA01609570958095909503C060E070E036 +:10385000CB01272D269526952370422F50E042302C +:10386000510569F04330510589F0682979298A2981 +:103870009B294130510571F00E941322A9C068298B +:1038800079298A299B290E942F22A2C00E941322F3 +:10389000C501B4010E94F7219BC08C2D90E0FC0172 +:1038A000E05EF109E531F10508F050C0E058FF4F46 +:1038B0000C940C2E0C2D0F70872D8F71112321F07D +:1038C0000E949021802F07CF0E94B121802F0E945B +:1038D000C61A7EC0112341F0053008F079C0872D4B +:1038E0008F710E94D62174C0063008F071C0F7CFE6 +:1038F000112339F0872D8F710E94902169C0112307 +:10390000C9F3872D8F710E94B12162C0112329F064 +:10391000872D8F710E947B215BC00E94712158C04E +:10392000112351F0172D1F71812F0E94902163E008 +:10393000812F0E94A4224CC081E00E94AD2202305F +:1039400008F446C082E00E94AD2242C0112331F04B +:10395000002381F28C2D0E94A8193AC0002389F21D +:103960008C2D0E94701A34C0472D4F706C2DC701EA +:103970000E9499040E9495202BC0111129C0472D47 +:103980004F7050E042305105B9F04CF441155105EB +:1039900081F041305105E1F40E94A32919C0433060 +:1039A000510569F04430510599F48C2D0E94F52998 +:1039B0000FC00E948C290CC00E94BF2909C00E9420 +:1039C000D22906C0472D4F706C2DC7010E94620797 +:1039D000DD20F9F00E94A02280FD1BC0F7011282B9 +:1039E0000E949A220E949021C7010E94181D0E94E5 +:1039F0009A220F90DF91CF911F910F91FF90EF903E +:103A0000DF90CF90BF90AF909F908F907F900C945D +:103A1000B1210F90DF91CF911F910F91FF90EF9007 +:103A2000DF90CF90BF90AF909F908F907F90089540 +:103A30000F931F93CF93DF93EC01888199812B81A2 +:103A40003C81232BB9F09F3F11F48F3F99F0CE01B9 +:103A50000E946105882371F0688179818A810E94C2 +:103A600096228C010E944B220E941221B801CE01A5 +:103A70000E94CD1ADF91CF911F910F9108950E945E +:103A80006E230E947E230E9443230E9498230E945B +:103A900059270E94A82680E090E00E94931880E0B9 +:103AA00090E00C94A9180E945E230C943F1D0E9484 +:103AB0008B22292F22952F7030E02C3031054CF4C9 +:103AC0002A3031056CF42250310922303105A8F436 +:103AD00007C02C30310569F02F30310551F00DC091 +:103AE000803F69F018F4803E40F409C0843F29F417 +:103AF00006C093FB882780F9089580E0089581E04F +:103B00000895CF93DF9300D000D01F92CDB7DEB7DA +:103B10000F900F900F900F900F90DF91CF9108951D +:103B2000CF93DF9300D000D000D0CDB7DEB726967C +:103B30000FB6F894DEBF0FBECDBFDF91CF910895D1 +:103B40001F93CF93DF93C0919D0216E080919E0258 +:103B5000C81799F0D0E01C9FF0011D9FF00D1124B3 +:103B6000E156FD4F4081518162817381848195814D +:103B70000E94901D2196C770E9CFDF91CF911F91D0 +:103B800008954091CF025091D0026091D10270917E +:103B9000D2028091D3029091D4020C94901D809116 +:103BA000D40282958F7009F054C08091D10288238D +:103BB00009F44FC080919D02A0919E026091CF02B6 +:103BC0007091D0024091D2025091D302B6E08A1790 +:103BD00009F43FC090E041155105C1F17F3F11F458 +:103BE0006F3FA1F1B89FF001B99FF00D1124E1568C +:103BF000FD4F218172132AC02081621327C02281C8 +:103C0000211124C0238134812417350710F4215059 +:103C10003109241B350B283C3105C0F42091D40216 +:103C20002F7020612093D40226E0289FF001299F65 +:103C3000F00D1124EC55FD4F80818F7080618083E1 +:103C40008FEC92E00E94181D0C94A01D01968770C5 +:103C5000BECF0895CF92DF92EF92FF920F931F9302 +:103C6000CF93DF93CDB7DEB762970FB6F894DEBF80 +:103C70000FBECDBF8C0185E0F801DE011D960190DD +:103C80000D928A95E1F7D8014C9111965C911197AC +:103C900012966C9112971396CD90DC9014973091F8 +:103CA000CF027091D0028091D2029091D3020097FE +:103CB00009F46BC17F3F19F43F3F09F466C1E090FE +:103CC000D102EE2009F4C0C02091D402C816D90652 +:103CD00028F0F601E81BF90BCF0104C08095909500 +:103CE0008C0D9D1DFF24F394883C910578F0F12CF8 +:103CF000207F09F0C6C07C2DD98AC88A89890E9494 +:103D0000811D8FEC92E00E94181DB1C0822F807F30 +:103D100009F046C0751314C0341312C0611110C0ED +:103D20002F7020612093D4020E94C11D8FEC92E07D +:103D30000E94181D8091D402D80115968C932EC034 +:103D4000CD2819F15F3F11F44F3FF9F0F62E6111C4 +:103D50001CC080919D0220919E0236E0821709F4DA +:103D60005AC090E0389FF001399FF00D1124E156C0 +:103D7000FD4F7181571306C07081471303C07281D4 +:103D8000711103C001968770E9CFF62E662309F4FE +:103D900018C18091D40281608093D402F12C11C1AA +:103DA000751308C0341306C0611104C08091D40299 +:103DB000D801C3C04D875E878D859E856A8B0E9422 +:103DC000571D6A898823E1F16623D1F12091D4023D +:103DD000822F82958F7090E0029774F08091CF02CD +:103DE0009091D00298878F831986DB86CA862C87AC +:103DF000CE0107960E94181D86E0F801AFECB2E0F4 +:103E000001900D928A95E1F70E94CF1D0E94C11D7D +:103E1000FF24F394D6C04D875E878D859E850E94D2 +:103E20008B22292F22952F7030E0223031050CF0A3 +:103E3000BCC09F7009F0B6C0805E883008F4C1C075 +:103E4000C8010E94181DE4CFC816D90608F453C053 +:103E5000F601E81BF90BCF01883C910508F450C02E +:103E6000F12C7C2DD98AC88A89890E94811DEFECAA +:103E7000F2E086E0DF011D928A95E9F70E94C11DFC +:103E8000A0C0751314C0341312C0611110C080910A +:103E9000D402F8018583C8010E94181D86E0EFEC6A +:103EA000F2E0DF011D928A95E9F7FE2C8AC04D876A +:103EB0005E878D859E856A8B0E94571D6A8988233F +:103EC00009F4BECF662309F4BBCF2091D402822F20 +:103ED00082958F7090E002970CF48ECF8091CF0284 +:103EE0009091D0029A8389831B82DD82CC822E83BB +:103EF000CE0101967FCF809590958C0D9D1DACCF06 +:103F0000F62E662309F49CCF75132EC034132CC0F3 +:103F10002091D40220FD1FC0822F82958F70D9F08E +:103F2000D80115962C9315978F3049F08F5F982FF5 +:103F30009295907F822F8F70892B15968C93C80154 +:103F40000E94181D86E0F801AFECB2E001900D92DE +:103F50008A95E1F793CF86E0F801AFECB2E00190EB +:103F60000D928A95E1F72DC04D875E878D859E85E0 +:103F70000E94571D811140CF8091D40281608093AF +:103F8000D402C8010E94181D1CC0662309F458CF32 +:103F90004D875E878D859E850E94571D882309F475 +:103FA0004FCF2ACF811148CF0CC0243031050CF0FF +:103FB00047CF9F7009F440CFF8019581907F09F0B9 +:103FC0003BCF8F2D62960FB6F894DEBF0FBECDBFEC +:103FD000DF91CF911F910F91FF90EF90DF90CF90E5 +:103FE00008951F93CF93DF93CDB7DEB72C970FB60D +:103FF000F894DEBF0FBECDBF4F83588769877A879D +:104000008B879C87CE0107960E942A1E882369F021 +:104010008F8198852A853B85232BF1F19F3F09F0FD +:1040200063C08F3F09F060C037C086E0FE0137965D +:10403000DE01119601900D928A95E1F76F817885E6 +:10404000EA85FB85309741F17F3F11F46F3F21F105 +:1040500020919E0230E0C901019687709927409116 +:104060009D0250E08417950709F447C069837A835D +:10407000FD83EC8396E0929FD001939FB00D1124B5 +:10408000A156BD4FFE01319601900D929A95E1F730 +:1040900080939E020E94A01D16E080919D02909147 +:1040A0009E028917C1F1189FC001112481569D4FAE +:1040B0000E942A1E882379F1E0919D021E9FF00143 +:1040C0001124E156FD4F40815181628173818481C9 +:1040D00095810E94901D80919D0290E001968770CD +:1040E000992780939D02D9CF4F81588569857A851C +:1040F0008B859C850E94901DCFCF0E94531D1092EE +:104100009E0210929D02EFECF2E086E0DF011D922C +:104110008A95E9F7C1CF2C960FB6F894DEBF0FBE93 +:10412000CDBFDF91CF911F910895EF92FF920F9332 +:104130001F93CF93DF938C01009709F46CC0F12C8F +:10414000EE24E394E8012196F8018491843740F449 +:10415000843008F051C0813081F0823019F15BC0A9 +:10416000853709F444C0A8F19CE7980F903708F010 +:1041700052C08F770E94701A41C00E5F1F4FFE0120 +:10418000C49180E28C0F883048F4C7708E2D01C036 +:10419000880FCA95EAF70E94712314C08C2F0E94E1 +:1041A000A8192DC00E5F1F4FFE01C49180E28C0F35 +:1041B000883058F4C7708E2D01C0880FCA95EAF771 +:1041C0000E9477230E9498231AC08C2F0E94701A95 +:1041D00016C00E5F1F4FFE01C491CC2381F08FE902 +:1041E0009FE00197F1F700C00000C150F6CF0E5FCD +:1041F0001F4FFE01F49003C00E94A8198E018F2D5D +:10420000882309F49FCFEFE9FFE03197F1F700C071 +:1042100000008150F5CFDF91CF911F910F91FF905A +:10422000EF90089508956093D9027093DA02809315 +:10423000DB029093DC020C943F1D0F931F930091BF +:10424000D9021091DA022091DB023091DC02DC010C +:10425000CB01802B912BA22BB32B8093D90290936F +:10426000DA02A093DB02B093DC021F910F910C9451 +:104270003F1D0F931F930091D9021091DA022091F4 +:10428000DB023091DC02DC01CB0180239123A223ED +:10429000B3238093D9029093DA02A093DB02B09308 +:1042A000DC021F910F910C943F1D0F931F930091FF +:1042B000D9021091DA022091DB023091DC02DC019C +:1042C000CB0180279127A227B3278093D90290930F +:1042D000DA02A093DB02B093DC021F910F910C94E1 +:1042E0003F1D1092D5021092D6021092D702109262 +:1042F000D8020C943F1D41E050E060E070E004C043 +:10430000440F551F661F771F8A95D2F74093D50239 +:104310005093D6026093D7027093D8020C943F1D3D +:1043200041E050E060E070E004C0440F551F661F9C +:10433000771F8A95D2F78091D5029091D602A091ED +:10434000D702B091D802482B592B6A2B7B2B409374 +:10435000D5025093D6026093D7027093D8020C9482 +:104360003F1D41E050E060E070E004C0440F551F85 +:10437000661F771F8A95D2F7409550956095709586 +:104380008091D5029091D602A091D702B091D80227 +:10439000482359236A237B234093D5025093D602A6 +:1043A0006093D7027093D8020C943F1D41E050E017 +:1043B00060E070E004C0440F551F661F771F8A95A8 +:1043C000D2F78091D5029091D602A091D702B091F8 +:1043D000D802482759276A277B274093D502509354 +:1043E000D6026093D7027093D8020C943F1D0F93AE +:1043F0001F930091D5021091D6022091D7023091DF +:10440000D802DC01CB01802B912BA22BB32B809304 +:10441000D5029093D602A093D702B093D8021F91F1 +:104420000F910C943F1D0F931F930091D502109193 +:10443000D6022091D7023091D802DC01CB01802333 +:104440009123A223B3238093D5029093D602A09305 +:10445000D702B093D8021F910F910C943F1D0F9378 +:104460001F930091D5021091D6022091D70230916E +:10447000D802DC01CB0180279127A227B3278093A4 +:10448000D5029093D602A093D702B093D8021F9181 +:104490000F910C943F1D0895CF92DF92EF92FF92FF +:1044A0000F931F93CF93DF938C01C090D902D090CC +:1044B000DA02E090DB02F090DC028091D50290916C +:1044C000D602A091D702B091D802C82AD92AEA2AE6 +:1044D000FB2ACFE1D0E0D701C6010C2E04C0B6956F +:1044E000A795979587950A94D2F780FF06C0B801E3 +:1044F0008C2F0E94E709019721F4219760F780E053 +:1045000001C08C2FDF91CF911F910F91FF90EF9001 +:10451000DF90CF900895CF93DF93EC010E944C225F +:10452000BE010E94E709DF91CF910895CB010E945F +:104530008B2208958091DD02859585958595089556 +:104540008091DD028770089598E0899F9001112481 +:10455000262B2093DD020C9490212091DD02809582 +:1045600082238093DD02982F977069F430E0482F02 +:10457000552747FD50952417350729F085958595D2 +:1045800085950C94B12108959091DD02977081E09A +:1045900009F480E0089590911501992321F09091FC +:1045A0001601911109C02091170130911801F901EC +:1045B00032969FEF40E01FC0982F9695969596955E +:1045C0009F3050F5E0911701F0911801E90FF11DAE +:1045D000877021E030E0A90102C0440F551F8A9581 +:1045E000E2F7CA019181892B818308959F3F39F0B9 +:1045F0004F5F4E3041F051915813F8CF0DC051111B +:10460000F7CF942FF5CF9F3F39F0F901E90FF11D56 +:1046100097FDFA9582830895089590911501992345 +:1046200021F090911601911109C02091170130914C +:104630001801F9013296205F3F4F1FC0982F9695C1 +:10464000969596959F30F0F4E0911701F09118013E +:10465000E90FF11D877021E030E0A90102C0440F8D +:10466000551F8A95E2F7CA0180959181892381833C +:1046700008953196E217F30729F090819813F9CF46 +:104680001082F7CF089581E090E0E0911701F0915A +:104690001801E80FF91F1082019680319105A9F7E2 +:1046A00008959091F102892B8093F10208958095ED +:1046B0009091F10289238093F10208951092F10202 +:1046C00008959091F002892B8093F00208958095CF +:1046D0009091F00289238093F00208951092F002E5 +:1046E00008959091EF02892B8093EF0208958095B1 +:1046F0009091EF0289238093EF0208951092EF02C8 +:1047000008958093DE0208951092DE02089580914C +:10471000170190911801FC0131969C01205F3F4FD9 +:1047200080E0919191118F5FE217F307D1F708951F +:10473000E0911701F09118018091F1028083E091DE +:104740001701F091180190818091F002892B8083EC +:10475000E0911701F091180190818091EF02892B6F +:1047600080838091DE02882361F0E0911701F0914F +:1047700018019081892B80830E94872381111092D8 +:10478000DE0280911701909118010C947D1820E0B1 +:10479000009739F0AC0141505109842395232F5FD4 +:1047A000F7CF822F089580911303843039F110924E +:1047B000F30220E488E190E00FB6F894A895809386 +:1047C00060000FBE2093600080E00E94000480E043 +:1047D0000E94810A83B7817F846083BF83B7816031 +:1047E00083BF7894889583B78E7F83BF88E10FB6A7 +:1047F000F89480936000109260000FBE08950895B1 +:10480000089580E00E9400040E94FF230E94DC0AB9 +:104810000E9400240E94610B91E0811101C090E090 +:10482000892F08950E94531D80E00E9400040E9479 +:104830007B290E9471180C94810A1F920F920FB667 +:104840000F9211248F939F93AF93BF938091F302A4 +:10485000811113C08091F4029091F502A091F602AB +:10486000B091F7024196A11DB11D8093F40290937F +:10487000F502A093F602B093F702BF91AF919F911A +:104880008F910F900FBE0F901F90189582E084BDFE +:1048900093E095BD9AEF97BD80936E0008952FB772 +:1048A000F8948091F4029091F502A091F602B091F3 +:1048B000F7022FBF0895CF92DF92EF92FF920F93EE +:1048C0001F932FB7F8944091F4025091F502609134 +:1048D000F6027091F7022FBF6A017B01EE24FF24DC +:1048E0008C0120E030E0C016D106E206F30610F499 +:1048F000415051099A01281B390BC9011F910F9191 +:10490000FF90EF90DF90CF9008951F920F920FB617 +:104910000F9211248F939F93AF93BF938091F402D2 +:104920009091F502A091F602B091F7020196A11DB7 +:10493000B11D8093F4029093F502A093F602B09318 +:10494000F702BF91AF919F918F910F900FBE0F9083 +:104950001F9018950E946E15F8942FEF87EA91E644 +:10496000215080409040E1F700C0000087E090EBCC +:10497000DC0180931E0390931F03A0932003B09348 +:1049800021039CE088E10FB6F894A895809360001D +:104990000FBE90936000FFCF0E940B25811102C0D3 +:1049A0000E94E7240E9416258093F2020E941E2591 +:1049B00080931C0387FB882780F9809316010E944F +:1049C0001A25682F70E080E090E00C9413216DEEC2 +:1049D0007EEF80E090E00E94322E60E082E090E086 +:1049E0000E94202E60E083E090E00E94202E60E094 +:1049F00084E090E00E94202E60E085E090E00E943C +:104A0000202E60E086E090E00E94202E6FEF87E08D +:104A100090E00C94202E80E090E00E941A2E21E07D +:104A20008D3E9E4F09F020E0822F089582E090E0B5 +:104A30000C94122E83E090E00C94122E84E090E00F +:104A40000C94122E682F84E090E00C94202E86E0C7 +:104A500090E00C94122E682F86E090E00C94202EAB +:104A600087E090E00C94122E682F87E090E00C9481 +:104A7000202E8091FA0280FF0BC060911C0185E01E +:104A8000689FB001112475956795759567952BC042 +:104A900081FF09C060911C0185E0689FB00111246D +:104AA0007595679520C082FF07C060911C0185E065 +:104AB000689FB001112417C09091FB029923D1F097 +:104AC00060911B01961788F720911C0185E0289FB3 +:104AD00090011124929FA001939F500D112470E02A +:104AE000CA010E94F82D6038710540F46115710506 +:104AF00039F002C065E070E0862F08958FE70895D1 +:104B000081E008958091FA0280FF08C060911A0147 +:104B100070E0759567957595679521C081FF06C012 +:104B200060911A0170E07595679519C082FF04C005 +:104B300060911A0170E010C09091FB029923C1F0BE +:104B4000609119019617A0F780911A01899FC00101 +:104B5000112470E00E94F82D6038710528F4611569 +:104B6000710521F0862F08958FE7089581E008955B +:104B700061E070E0F4CF803F21F40E9439258195F7 +:104B800004C0813F29F40E9439258093FE020895D4 +:104B9000823F21F40E943925819504C0833F29F486 +:104BA0000E9439258093FD020895893F19F40E94DF +:104BB000822505C08A3F31F40E9482258195809329 +:104BC000FF0208958B3F21F40E948225819504C045 +:104BD0008C3F29F40E948225809300030895843F2E +:104BE00021F48091FC02816017C0853F21F48091FF +:104BF000FC02826011C0863F21F48091FC02846037 +:104C00000BC0873F21F48091FC02886005C0883F7B +:104C100031F48091FC0280618093FC0208958D3F05 +:104C200021F48091FA0281600BC08E3F21F48091C3 +:104C3000FA02826005C08F3F29F48091FA028460F5 +:104C40008093FA020895803F39F48091FE0287FF35 +:104C50006CC01092FE0269C0813F29F48091FE026F +:104C60001816BCF362C09091FD02823F29F497FFB1 +:104C70005CC01092FD0259C0833F19F41916CCF3A1 +:104C800054C0893F41F48091FF0218160CF04DC0CA +:104C90001092FF024AC08A3F29F48091FF0287FFE9 +:104CA00044C0F6CF8B3F39F48091000387FF3DC0AD +:104CB000109200033AC08C3F29F48091000318162B +:104CC000BCF333C0843F21F48091FC028E7F17C077 +:104CD000853F21F48091FC028D7F11C0863F21F435 +:104CE0008091FC028B7F0BC0873F21F48091FC02F6 +:104CF000877F05C0883F31F48091FC028F7E8093CE +:104D0000FC0213C08D3F21F48091FA028E7F0BC00C +:104D10008E3F21F48091FA028D7F05C08F3F29F4E8 +:104D20008091FA028B7F8093FA028091FD028111BB +:104D30000EC08091FE0281110AC08091FF02811194 +:104D400006C080910003811102C01092FB020895F9 +:104D50008CEF92E00E9488180E944F249093F902F1 +:104D60008093F80208951F93CF93DF938091F80208 +:104D70009091F9020E945B24AC019091FB0299236F +:104D800021F020911D0130E006C020911E018AE033 +:104D9000289F900111244217530708F486C0809180 +:104DA000FD02C091FE02D091FF021091000381111B +:104DB00007C0C11176C0D11174C0111172C075C085 +:104DC0009F3F19F09F5F9093FB02181624F40E94F6 +:104DD00039258093FD028091FD0287FF05C00E9466 +:104DE000392581958093FD021C1624F40E943925F3 +:104DF0008093FE028091FE0287FF05C00E94392544 +:104E000081958093FE026091FD02662339F1C09185 +:104E1000FE02CC2319F1772767FD7095872F972F16 +:104E20000E941A2B23E333E343E35FE30E942A2C1F +:104E30000E94E72A6093FD026C2F772767FD70952B +:104E4000872F972F0E941A2B23E333E343E35FE37B +:104E50000E942A2C0E94E72A6093FE021D1624F469 +:104E60000E9482258093FF028091FF0287FF05C088 +:104E70000E94822581958093FF02111624F40E94DE +:104E80008225809300038091000387FF05C00E9464 +:104E90008225819580930003DF91CF911F910C941F +:104EA000A8269F3F09F08ECF96CFDF91CF911F911B +:104EB0000895ECEFF2E085E0DF011D928A95E9F7B5 +:104EC0001092FB021092FA020895833081F128F4C7 +:104ED000813059F08230D1F00895853009F449C00D +:104EE000B8F1863009F456C0089580911E01262F2E +:104EF00030E0280F311D2F3F310524F4680F6093F7 +:104F00001E0108958FEF80931E01089580911D0169 +:104F1000262F30E0280F311D2F3F310524F4680F74 +:104F200060931D0108958FEF80931D010895809176 +:104F30001C01262F30E0280F311D2F3F310524F4AE +:104F4000680F60931C0108958FEF80931C010895F2 +:104F500080911B01262F30E0280F311D2F3F310596 +:104F600024F4680F60931B0108958FEF80931B0159 +:104F7000089580911A01262F30E0280F311D2F3F10 +:104F8000310524F4680F60931A0108958FEF809320 +:104F90001A01089580911901262F30E0280F311D44 +:104FA0002F3F310524F4680F6093190108958FEFA6 +:104FB000809319010895833011F128F4813049F06C +:104FC000823091F00895853081F120F18630C1F171 +:104FD000089580911E01681720F4861B80931E019E +:104FE000089510921E01089580911D01681720F404 +:104FF000861B80931D01089510921D0108958091D4 +:105000001C01681720F4861B80931C0108951092E0 +:105010001C01089580911B01681720F4861B809362 +:105020001B01089510921B01089580911A016817C1 +:1050300020F4861B80931A01089510921A01089596 +:1050400080911901681720F4861B80931901089537 +:105050001092190108950F931F93873208F048C0EA +:105060008E3108F08DC0803109F477C008F58730A3 +:1050700009F461C068F4863009F09DC08091F202A5 +:10508000817F8E7F8093F20281E08093020394C03F +:105090008B3009F489C08E3009F08DC08091F20206 +:1050A00082FB222720F991E0922790FB82F95EC0D3 +:1050B000863109F479C060F4813109F07CC00E9426 +:1050C000531D9091160181E08927809316016CC0D1 +:1050D000893109F469C08B3109F06DC08091F20209 +:1050E00081FB222720F991E0922790FB81F93EC0B5 +:1050F000883309F459C050F4893209F457C0853314 +:1051000009F454C0873209F451C055C0833409F4FE +:105110004DC028F48A3308F44EC0895332C0883415 +:1051200009F049C00E94531D0E94910B0E9458052E +:105130000E94AA2439C09091F202892F8095817033 +:1051400080FB90F929F0966098609093F20234C049 +:10515000997F977F9093F20227C08091F20283FBA0 +:10516000222720F991E0922790FB83F98093F202A5 +:105170009923D1F08091F20281608093F20214C0F1 +:105180008D5141E050E060E070E08A019B0104C075 +:10519000000F111F221F331F8A95D2F7C901B801D2 +:1051A0000E9413210E94531D81E006C061E070E05F +:1051B00080E090E0F5CF80E01F910F91089580E0AE +:1051C000089580E00895CF93C82F80910203813025 +:1051D00069F018F08230C9F184C0E0911701F091B4 +:1051E00018018081823209F07EC007C0E09117016A +:1051F000F09118018081823261F48C2F0E94DF28A7 +:10520000811104C08C2F0E942B281DC081E090E0EA +:105210001AC08C2F0E94E128811114C0C43179F08A +:1052200048F4CB3079F0C03109F061C082E080935E +:10523000020308C0C93219F0C83321F058C01092D7 +:10524000020355C081E0817054C0C93291F120F54C +:10525000C43179F1B0F4C73009F047C08EE18093D2 +:105260001E0182E380931D018AE080931C0184E18A +:1052700080931B0188E080931A0188E280931901D2 +:1052800034C0CE51C63088F5EC2FF0E0EA54FE4F22 +:1052900080818093010329C0CE34E9F020F4CB341F +:1052A00021F56AE013C0C13579F0C235F1F461E04F +:1052B0000DC080910103882319F01092010315C0DD +:1052C00081E08093020315C061E006C08091010374 +:1052D0000E9465270AC06AE0809101030E94DB27D3 +:1052E00004C01092020380E004C081E002C080E0AC +:1052F000AACFCF9108950E940B25811102C00E9470 +:10530000E7240E94272580931D0380FF02C0869515 +:1053100001C080E00C94000480911D03982F9695A5 +:10532000292F30E0233031054CF49F5F990F8170B5 +:10533000892B816080931D030E942B2580911D0382 +:1053400086950C94000480911D03982F969591F0FA +:105350009158990F8170892B80931D038E7F91E066 +:1053600009F490E080911D0390FB80F980931D0368 +:105370000E942B2580911D0386950C94000480913A +:105380001D03982F909590FB80F980931D030E9438 +:105390002B2580911D0380FF02C0869501C080E00F +:1053A0000C94000490911D03892F86958F5F8F7751 +:1053B0009170843028F4880F892B80931D0302C0DC +:1053C00090931D0380911D038E7F91E009F490E07E +:1053D00080911D0390FB80F980931D030E942B2573 +:1053E00080911D0386950C94000420911D03922F3B +:1053F00096958927982F990F822F8170892B8093FA +:105400001D038E7F91E009F490E080911D0390FBD5 +:1054100080F980931D030E942B2580911D038695A2 +:105420000C94000480911D03869508955058BB2765 +:10543000AA270ED0D1C1C2D130F0C7D120F031F4AB +:105440009F3F11F41EF4B7C10EF4E095E7FB9FC136 +:10545000E92FD3D180F3BA17620773078407950742 +:1054600018F071F49EF5EBC10EF4E0950B2EBA2FF7 +:10547000A02D0B01B90190010C01CA01A00111245A +:10548000FF27591B99F0593F50F4503E68F11A1606 +:10549000F040A22F232F342F4427585FF3CF469597 +:1054A00037952795A795F0405395C9F77EF41F16B9 +:1054B000BA0B620B730B840BBAF09150A1F0FF0F83 +:1054C000BB1F661F771F881FC2F70EC0BA0F621F6F +:1054D000731F841F48F4879577956795B795F7955F +:1054E0009E3F08F0B3CF9395880F08F09927EE0FF1 +:1054F00097958795089527D108F481E008950CD0F9 +:105500006BC163D140F05AD130F021F45F3F19F004 +:105510003EC1511195C14FC170D198F39923C9F380 +:105520005523B1F3951B550BBB27AA2762177307A9 +:10553000840738F09F5F5F4F220F331F441FAA1F5D +:10554000A9F333D00E2E3AF0E0E830D0915050401D +:10555000E695001CCAF729D0FE2F27D0660F771FCB +:10556000881FBB1F261737074807AB07B0E809F0AD +:10557000BB0B802DBF01FF2793585F4F2AF09E3F42 +:10558000510568F004C15CC15F3FECF3983EDCF369 +:10559000869577956795B795F7959F5FC9F7880FBB +:1055A000911D9695879597F90895E1E0660F771F0D +:1055B000881FBB1F621773078407BA0720F0621B9E +:1055C000730B840BBA0BEE1F88F7E095089504D097 +:1055D0006894B11135C1089518D188F09F5790F0A3 +:1055E000B92F9927B751A0F0D1F0660F771F881F08 +:1055F000991F1AF0BA95C9F712C0B13081F01FD1C6 +:10560000B1E008951CC1672F782F8827B85F39F063 +:10561000B93FCCF3869577956795B395D9F73EF466 +:1056200090958095709561957F4F8F4F9F4F08950E +:10563000E89409C097FB3EF490958095709561952C +:105640007F4F8F4F9F4F9923A9F0F92F96E9BB27E2 +:105650009395F695879577956795B795F111F8CF5E +:10566000FAF4BB0F11F460FF1BC06F5F7F4F8F4FC9 +:105670009F4F16C0882311F096E911C0772321F0BF +:105680009EE8872F762F05C0662371F096E8862F57 +:1056900070E060E02AF09A95660F771F881FDAF7AE +:1056A000880F9695879597F9089588D018F011F08E +:1056B0008CD038F480C0C4C0E92F9FD0B0F35523FC +:1056C000C9F3E7FB6217730784079507A8F199F3FD +:1056D000E92FFF2788232AF03197660F771F881F4D +:1056E000DAF7952F5527442332F091505040220F7E +:1056F000331F441FD2F7BB27E91BF50B621B730B4B +:10570000840BB109C1F222F4620F731F841FB11D13 +:1057100031972AF0660F771F881FBB1FEFCF91507C +:1057200050405AF041F0882332F0660F771F881FEF +:1057300091505040C1F7939530C086957795679505 +:105740009F5FD9F7F8CF990F0008550FAA0BE0E833 +:10575000FEEF16161706E807F907C0F01216130633 +:10576000E407F50798F0621B730B840B950B39F473 +:105770000A2661F0232B242B252B21F408950A26D9 +:1057800009F4A140A6958FEF811D811D089597F919 +:105790009F6780E870E060E008959F3F31F091508E +:1057A00020F4879577956795B795880F911D969505 +:1057B000879597F908959FEF80EC089500240A9447 +:1057C0001616170618060906089500240A941216DC +:1057D0001306140605060895092E0394000C11F40F +:1057E000882352F0BB0F40F4BF2B11F460FF04C0BC +:1057F0006F5F7F4F8F4F9F4F089557FD9058440F15 +:10580000551F59F05F3F71F04795880F97FB991F1F +:1058100061F09F3F79F087950895121613061406DC +:10582000551FF2CF4695F1DF08C016161706180669 +:10583000991FF1CF86957105610508940895E89444 +:10584000BB2766277727CB0197F908957CDF08F4FB +:105850008FEF08950BD0C0CFB1DF28F0B6DF18F07E +:10586000952309F094CFA7CF1124EACFC6DFA0F388 +:10587000959FD1F3950F50E0551F629FF001729FE5 +:10588000BB27F00DB11D639FAA27F00DB11DAA1F04 +:10589000649F6627B00DA11D661F829F2227B00D51 +:1058A000A11D621F739FB00DA11D621F839FA00DDC +:1058B000611D221F749F3327A00D611D231F849F2C +:1058C000600D211D822F762F6A2F11249F57504083 +:1058D0008AF0E1F088234AF0EE0FFF1FBB1F661F1E +:1058E000771F881F91505040A9F79E3F510570F0D7 +:1058F0004ECFA6CF5F3FECF3983EDCF386957795CD +:105900006795B795F795E7959F5FC1F7FE2B880FD1 +:10591000911D9695879597F90895FA01EE0FFF1F4F +:1059200030962105310599F16115710561F48038D2 +:10593000BFE39B0749F168949038810561F0803896 +:10594000BFEF9B0741F0992342F5FF3FE105310589 +:10595000210511F1E8940894E795D901AA2329F4C7 +:10596000AB2FBE2FF85FD0F310C0FF5F70F4A69589 +:10597000E0F7F73950F019F0FF3A38F49F779F932A +:105980000CD00F9007FC905808953EF014CF60E0C3 +:1059900070E080E89FE308954FE79F775F934F9310 +:1059A0003F932F939ED02F913F914F915F9152DF64 +:1059B00005C019F40EF0EBCE42CFFDCE26DFC8F3C2 +:1059C0009638C0F707F80F92E8942BE33AEA48EBD1 +:1059D0005FE74EDF0F920F920F924DB75EB70F92B7 +:1059E000C0D0EAE2F1E016D04F915F91EF91FF91C4 +:1059F000E595EE1FFF1F49F0FE57E0684427EE0FC4 +:105A0000441FFA95E1F74195550B32D00F9007FEF0 +:105A100026C00895DF93CF931F930F93FF92EF92C9 +:105A2000DF927B018C01689405C0DA2EEF011EDF46 +:105A3000FE01E894A5912591359145915591AEF3DC +:105A4000EF0106DDFE019701A801DA9479F7DF90F6 +:105A5000EF90FF900F911F91CF91DF9108959B01DF +:105A6000AC0160E070E080E89FE349CD90CE95CE38 +:105A7000CCDEE8F39923D9F3940F511DBBF3915079 +:105A8000504094F059F0882332F0660F771F881F3A +:105A900091505040C1F79E3F510544F7880F911D2A +:105AA0009695879597F908955F3FACF0983E9CF0E6 +:105AB000BB27869577956795B79508F4B160939560 +:105AC000C1F7BB0F58F711F460FFE8CF6F5F7F4F4E +:105AD0008F4F9F4FE3CFB4CE0EF05FCE6CCE689465 +:105AE00056CE93DEC8F39923D1F3C6F3DF93CF9359 +:105AF0001F930F93FF92C92FDD2788232AF0219748 +:105B0000660F771F881FDAF720E030E040E85FEB90 +:105B10009FE3883920F0803E30F021968F7787DC34 +:105B2000E2E5F1E003C083DCEFE7F1E073DF8B0136 +:105B3000BE01EC01FB2E6F5771097595771F880B1D +:105B4000990B78DD28E132E741E35FE38FDEAF2D8B +:105B50009801AE01FF900F911F91CF91DF9178DCFA +:105B60003BCEFA01DC01AA0FBB1F9B01AC01BF5762 +:105B700028F422273327442750781FC0B75188F4D0 +:105B8000AB2F0024469537952795011CA395D2F39A +:105B9000002069F0220F331F441FB395DAF30DD0B4 +:105BA00045CC61307105A0E88A07B94630F49B0105 +:105BB000AC016627772788279078309621F02083DC +:105BC0003183428353830895AA1BBB1B51E107C055 +:105BD000AA1FBB1FA617B70710F0A61BB70B881F7D +:105BE000991F5A95A9F780959095BC01CD0108950C +:105BF00097FB072E16F4009407D077FD09D00E947A +:105C0000E42D07FC05D03EF4909581959F4F0895B3 +:105C1000709561957F4F0895EE0FFF1F0590F491E9 +:105C2000E02D0994F999FECF92BD81BDF89A99278C +:105C300080B50895A8E1B0E042E050E00C943A2E1F +:105C4000262FF999FECF92BD81BDF89A019700B435 +:105C5000021639F01FBA20BD0FB6F894FA9AF99AD5 +:105C60000FBE08950196272F0E94212E0C94202EFE +:105C7000DC01CB01FC01F999FECF06C0F2BDE1BD0C +:105C8000F89A319600B40D9241505040B8F70895FB +:045C9000F894FFCFB6 +:105C9400640007000CFF0000003F6475110312E06C +:105CA40011AC1178110101DF022808140A321E0018 +:105CB40002040507090B0C0E1011131517181A1CF2 +:105CC4001D1F2123242628292B2D2F30323435372C +:105CD400393B1F0F03764F5F6F7F49694379095939 +:105CE40053633149803F5D8B803FF8BF803FCAE1F9 +:105CF400803F73ED803FCAE1803FF8BF803F5D8BFA +:105D0400803F3149803F0000803FF16D7F3F75EA5D +:105D14007E3F4C827E3F833F7E3F84287E3F833F8D +:105D24007E3F4C827E3F75EA7E3FF16D7F3F0000EF +:105D3400803F3F4D36390B07BE0688064F06E20505 +:105D4400FB0514062D0601020304050607080900D5 +:00000001FF diff --git a/keyboard/planck/keymaps/nico/compiled.hex b/keyboard/planck/keymaps/nico/compiled.hex new file mode 100644 index 0000000000..61527c5307 --- /dev/null +++ b/keyboard/planck/keymaps/nico/compiled.hex @@ -0,0 +1,1456 @@ +:100000000C94C4020C9408030C9408030C94080389 +:100010000C9408030C9408030C9408030C94080334 +:100020000C9408030C9408030C94B5140C948715D5 +:100030000C94E9220C9408030C9408030C94080314 +:100040000C9408030C946A030C9408030C940803A2 +:100050000C9408030C9451230C9408030C9408038B +:100060000C9408030C9408030C9408030C940803E4 +:100070000C9408030C9408030C9408030C940803D4 +:100080000C942A0B0C9408030C9408030C9408039A +:100090000C9408030C9408030C9408030C940803B4 +:1000A0000C9408030C9408030C940803F41516161A +:1000B0000417161604175B167E160417D316E616D9 +:1000C000D019D019FF19FF193E1A5E1AB41BB41BC0 +:1000D000691AB41B191B191B801B891BB41BAE1B8F +:1000E000261B261B261B261B261B261B261B261B08 +:1000F000261B261B261B261B261B261B261B261BF8 +:10010000361B441B4B1B521B5C1B07634236B79BC1 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C00002010000000000000000000000002AA35F +:1001D00028A42B0014001A000800150017001C00AA +:1001E00018000C00120013002A00E00004001600A2 +:1001F000070009000A000B000D000E000F0033007D +:100200003400E1001D001B0006001900050011006C +:100210001000360037003800280000302900E200C6 +:10022000E30001202C002C0002205000510052005D +:100230004F002B0014001A00090013000A000D00E3 +:100240000F0018001C0033002A00E0000400150015 +:100250001600170007000B00110008000C00120028 +:100260003400E1001D001B000600190005000E000F +:100270001000360037003800280000302900E20066 +:10028000E30001202C002C000220500051005200FD +:100290004F002B0034003600370013001C0009000B +:1002A0000A00060015000F002A00E00004001200FA +:1002B000080018000C0007000B00170011001600C2 +:1002C0003800E100330014000D000E001B00050093 +:1002D00010001A0019001D00280000302900E2005B +:1002E000E30001202C002C0002205000510052009D +:1002F0004F0035021E021F022002210222022302A9 +:1003000024022502260227022A0001003A003B00AF +:100310003C003D003E003F002D022E022F02300225 +:10032000310201004000410042004300440045000A +:10033000005301530253005001000030010001003E +:100340000100010069006A000100BB00AA00A900C9 +:10035000AE0035001E001F002000210022002300F7 +:1003600024002500260027002A0001003A003B0057 +:100370003C003D003E003F002D002E002F003000CD +:1003800031000100400041004200430044004500AC +:1003900000530153025300500100003001000100DE +:1003A0000100010069006A000100BB00AA00A90069 +:1003B000AE002803540068006500200050006C0067 +:1003C00061006E0063006B0020004B006500790047 +:1003D00062006F0061007200640000002C034F0097 +:1003E0007200740068006F006C0069006E006500A8 +:1003F0006100720020004B006500790062006F0010 +:100400006100720064007300000004030904090223 +:100410006D00040100A0FA090400000103010100BD +:10042000092111010001223F000705810308000A8C +:100430000904010001030102000921110100012248 +:100440004D000705820308000A09040200010300A9 +:10045000000009211101000122360007058303086D +:10046000000A090403000103000000092111010032 +:100470000122390007058403100001120110010058 +:10048000000008EDFE6060010001020001050109A5 +:1004900006A101050719E029E71500250195087552 +:1004A000018102050819012905950575019102953B +:1004B000017503910105071900297715002501959C +:1004C0007875018102C005010980A101850216012C +:1004D0000026B7001A01002AB700751095018100A7 +:1004E000C0050C0901A1018503160100269C021A12 +:1004F00001002A9C02751095018100C005010902C6 +:10050000A1010901A100050919012905150025010D +:100510009505750181029501750381010501093079 +:1005200009311581257F95027508810609381581E5 +:10053000257F950175088106050C0A38021581256D +:100540007F950175088106C0C005010906A1010556 +:100550000719E029E7150025019508750181029525 +:100560000175088101050819012905950575019195 +:10057000029501750391010507190029FF15002552 +:10058000FF950675088100C011241FBECFEFDAE089 +:10059000DEBFCDBF04B603FE24C080911E03909140 +:1005A0001F03A0912003B09121038730904BA740F7 +:1005B000B04BB9F410921E0310921F031092200347 +:1005C0001092210314BE84B7877F84BF88E10FB6E1 +:1005D000F89480936000109260000FBEE0E0F8E3B2 +:1005E000099511E0A0E0B1E0ECE2FAE502C0059067 +:1005F0000D92A03CB107D9F713E0A0ECB1E001C027 +:100600001D92AE31B107E1F70E94FB110C94142D3D +:100610000C9400000895089581E0089508950C94C5 +:100620000B030C940C030C940E030E94DE2823E0B1 +:1006300030E0281B3109220F2093C4010895282F90 +:100640002F9880918000211108C0877F80938000BF +:1006500010928D0010928C001BC0886080938000E7 +:10066000233019F48FEF9FEF0FC083E090E0821BDF +:100670009109880F991F2FEF3FEFA90102C05695EE +:1006800047958A95E2F7CA0190938D0080938C007C +:100690000C9415030E94150384E08093C30110920B +:1006A000C0010895279A2F988FEF9FEF90938700AE +:1006B000809386008AE08093800089E180938100A6 +:1006C0000E9447280C944A030E9452036E9A769A1D +:1006D0000C940A031F920F920FB60F9211242F93BE +:1006E0003F938F939F93EF93FF93E091C101F0911C +:1006F000C201CF0101969093C2018093C101009085 +:10070000C30102C0F695E7950A94E2F7EF73809172 +:10071000C001823019F4E03251F404C0813039F460 +:10072000EF3329F480916F008D7F80936F00F0E0AC +:10073000E457FE4FE49121E031E0E29FC001E39FE6 +:10074000900D11240090C40102C0969587950A94DB +:10075000E2F790938D0080938C00FF91EF919F9131 +:100760008F913F912F910F900FBE0F901F90189572 +:1007700061110DC0FC018281882331F085EE0E9459 +:1007800074180E949E2803C085EE0E943C1980E0E8 +:1007900090E0089581E008950C94CA0308950C94A4 +:1007A000640380911502882309F448C08091D10127 +:1007B0009091D201009779F40E941B239093D2016B +:1007C0008093D1018091D30190E0009771F48091E2 +:1007D000D40190E00AC00E942723209100013091AB +:1007E00001012817390740F329C00197880F991F85 +:1007F000880F991FFC01EB52FE4F6081718182814D +:1008000093810E94900AE091D30184E0E89FF00177 +:100810001124EB52FE4F60817181828193814FE000 +:1008200050E00E94480E8091D30190E001966091C3 +:10083000D40170E00E94C42C8093D3010C940F0368 +:10084000109217020C945D0A0895089581E0809338 +:1008500017020C942504089508958F929F92AF92E9 +:10086000BF92EF92FF920F931F93CF93DF93CDB779 +:10087000DEB7A3970FB6F894DEBF0FBECDBF7C01E5 +:10088000FC0100811181C8010E941821B8010E9459 +:100890002F068C01B7010E94CC03882309F4CCC138 +:1008A0000032F0E51F0741F4F7018281882309F443 +:1008B00058C00E94AC0EC0C10132F0E51F0741F4E0 +:1008C000F7018281882309F44CC00E94B50EB4C19F +:1008D0000232F0E51F0751F4F7018281882309F401 +:1008E00040C00E94A80E8111F0CFE3CF0332F0E5A3 +:1008F0001F0739F4F7018281882399F10E942604A9 +:100900009BC10432F0E51F0739F4F7018281882387 +:1009100041F10E94200490C10532F0E51F0749F41F +:10092000F70182818823E9F0809117028111F1CFCC +:10093000E5CF0632F0E51F0739F4F70182818823FD +:1009400081F00E94BC0E0AC00732F0E51F0749F48F +:10095000F7018281882329F00E94C70E0E942C048F +:100960006BC180911702811105C0F701828181114D +:10097000CFC018C1003E110579F4F70182818823A8 +:1009800009F44DC00E945D0A81E080931602109226 +:1009900015021092D40150C1023E110559F4F7011D +:1009A00082818823E1F10E945D0A10921602109262 +:1009B000150242C1033E110591F4F701828188239B +:1009C00071F10E945D0A1092160281E08093150277 +:1009D0001092D3011092D2011092D1012DC1023593 +:1009E000110559F4F7018281882309F425C180910A +:1009F0000001909101010A970DC00135110579F4AC +:100A0000F7018281882309F417C180910001909138 +:100A100001010A9690930101809300010DC140915C +:100A2000040183E2EFE1F1E0DE01119601900D9205 +:100A30008A95E1F7F701808121E030E02C0F3D1F1E +:100A4000280F311DC9012091020130910301FC01E1 +:100A5000E20FF31F6081772767FD7095640F711DAA +:100A6000882777FD8095982F0E94E62920E030E0C6 +:100A700040E451E40E944B294B015C01F7012181C4 +:100A800084E090E0821B9109BC01882777FD809566 +:100A9000982F0E94E6299B01AC01C501B4010E9478 +:100AA000E3289B01AC0160E070E080E090E40E94EC +:100AB000592B20E030E04CED50E40E94F62A4B0127 +:100AC0005C01F70182818823D1F04FE050E0C5013D +:100AD000B4010E94480E809116028823A1F08091F3 +:100AE000D40124E0829FF0011124EB52FE4F80825A +:100AF0009182A282B3828F5F8093D40104C0C5012A +:100B0000B4010E94900A0F3F110508F02ECF94C047 +:100B10008091D00181111FC0043130E5130709F025 +:100B200051C00E94CE0381E08093D0010E941B231C +:100B30009093CF018093CE011092C7011092C9010A +:100B40001092C8011092CB011092CA011092CD01EF +:100B50001092CC0171C08091CE019091CF010E9482 +:100B60002723883C910570F48091C701E82FF0E0BD +:100B7000EE0FFF1FE853FE4F118300838F5F8093BA +:100B8000C7015AC0043880E5180721F00538104520 +:100B900001F13AC0F7018281882341F01092C5012A +:100BA00082E01EC0043830E5130759F58091C50175 +:100BB000811106C086E20E94741886E20E943C19E8 +:100BC00082E01CC00438F0E51F0741F305381045EA +:100BD000D9F4F7018281882331F01092C60180E2B6 +:100BE0000E948B1929C08091C601811106C087E23D +:100BF0000E94741887E20E943C1980E20E949219B8 +:100C00001BC00538104529F381E08093C50180930E +:100C1000C601C701A3960FB6F894DEBF0FBECDBFC5 +:100C2000DF91CF911F910F91FF90EF90BF90AF9008 +:100C30009F908F900C94110380E0A3960FB6F894C8 +:100C4000DEBF0FBECDBFDF91CF911F910F91FF90FF +:100C5000EF90BF90AF909F908F90089508959CE083 +:100C6000799FF001112490E3899FE00DF11D11247B +:100C7000E60FF11DEE0FFF1FEE52FE4F859194918E +:100C80000895880F991FFC01E45BFF4F85919491B3 +:100C90000895880F991FFC01E453FE4F85919491AC +:100CA00008950F931F93CF93DF93EC01811521E3F8 +:100CB0009207A0F5C11580E3D80708F0D7C0C83E59 +:100CC000D105D8F4C03ED10508F007C2C83AD10515 +:100CD00078F4C53AD10508F06AC0C130D10509F4ED +:100CE00063C008F4F7C1C430D10508F0F6C1F2C101 +:100CF000CB3BD10508F466C0EDC1C11590E2D90720 +:100D000008F0AFC0C11521E0D20708F0E6C1C03F2E +:100D1000D10508F4DFC18E0110651FC2C03880E51F +:100D2000D80700F5C03790E5D90708F0A3C0C11572 +:100D300020E5D20709F4ACC050F4CE0190548031C4 +:100D40009F4008F0C7C1DF708E01106A06C2C13033 +:100D500080E5D80709F4AEC0C43190E5D90708F49E +:100D6000AFC0B8C1C33820E5D20709F48EC050F433 +:100D7000C13890E5D90709F482C008F083C000E0CB +:100D800011EDEBC1C03181E5D80708F4A3C1C1154D +:100D900097E5D90708F436C1CE01905781159041E7 +:100DA00008F098C1DF7093C101E010E0D6C1C53AE8 +:100DB000D10509F494C1C63AD10509F093C102E8FE +:100DC00010E4CBC1C83AD10509F48FC1C93AD105A5 +:100DD00009F48EC1CA3AD10509F48DC1CB3AD105C7 +:100DE00009F48CC1CC3AD10509F48BC1CD3AD105B7 +:100DF00009F48AC1C03BD10509F489C1CE3AD105B5 +:100E000009F488C1CF3AD10509F487C1C13BD105A6 +:100E100009F486C1C23BD10509F485C1C33BD105A4 +:100E200009F484C1C43BD10509F483C1C53BD10594 +:100E300009F482C1C63BD10509F481C1C73BD10584 +:100E400009F480C1C83BD10509F47FC1C93BD10574 +:100E500009F47EC1CA3BD10509F47DC100E014E468 +:100E60007CC1CE019F700E94490678C1DD278E01AA +:100E7000106C73C1CF70DD278E01146D6EC100E060 +:100E800010ED6BC100E012ED68C100E013ED65C12B +:100E90000E941F1C0E945D0A0E9424048FEF94E3AD +:100EA0002CE0815090402040E1F700C000000E94FB +:100EB000762353C18091F20281608093F2024DC18A +:100EC0000E94D723811102C00E94B3230E94EA230B +:100ED00090E090931D0380931C03C23080E5D807F7 +:100EE00021F480911C03816086C0C43090E5D9074D +:100EF00021F480911C0382607EC0C63020E5D207B9 +:100F000021F480911C03846076C0C83080E5D80746 +:100F100019F480911C0327C0CA3090E5D90721F449 +:100F200080911C03806167C0CC3020E5D20721F49A +:100F300080911C0380625FC0CE3080E5D80721F429 +:100F400080911C03806457C0C03190E5D90721F41B +:100F500080911C0380684FC0C23120E5D20729F47C +:100F600080911C038460886046C0C33080E5D80748 +:100F700021F480911C038E7F3EC0C53090E5D907D7 +:100F800021F480911C038D7F36C0C73020E5D20745 +:100F900021F480911C038B7F2EC0C93080E5D807D7 +:100FA00019F480911C0326C0CB3090E5D90721F4B9 +:100FB00080911C038F7E1FC0CD3020E5D20721F425 +:100FC00080911C038F7D17C0CF3080E5D80721F4B6 +:100FD00080911C038F7B0FC0C13190E5D90721F4AC +:100FE00080911C038F7707C0C331D04531F48091C5 +:100FF0001C038B7F877F80931C0380911C030E94BE +:10100000EE23ABC08D2F99278F70992781309105E2 +:10101000D9F49E012370332702C0880F991F2A95A7 +:10102000E2F79C688E0144E0000F111F4A95E1F73A +:1010300000271370802B912B53E0CC0FDD1F5A95A6 +:10104000E1F7C076DD272FC08230910531F4DC2F27 +:10105000CC278E01016F106A80C08330910569F43E +:10106000CE018370992701E010E002C0000F111F2C +:101070008A95E2F7C8019C680FC084309105B9F4E5 +:10108000CE018370992701E010E002C0000F111F0C +:101090008A95E2F7C8019A6823E0CC0FDD1F2A95F4 +:1010A000E1F7C07ED7708C010C2B1D2B56C085300C +:1010B000910531F4DC2FCC278E01046F106A4DC0EE +:1010C000069709F04AC0CF71DD27DC2FCC278E01AF +:1010D000106243C000E010E040C08E013EC001E855 +:1010E00010E43BC003E810E438C002EE14E435C05D +:1010F00009EE14E432C00AEE14E42FC005EB14E448 +:101100002CC006EB14E429C007EB14E426C00CEC59 +:1011100014E423C00DEC14E420C003E815E41DC062 +:101120000AE815E41AC002E915E417C004E915E459 +:1011300014C001E216E411C003E216E40EC004E29A +:1011400016E40BC005E216E408C006E216E405C08A +:1011500007E216E402C00AE216E4C801DF91CF916B +:101160001F910F9108959CE0799FF001112490E365 +:10117000899FE00DF11D1124E60FF11DEE0FFF1FF9 +:10118000EE52FE4F85919491803E9105E0F4803CB3 +:10119000910558F58133910509F46FC048F48932FF +:1011A000910509F463C08A32910509F46DC072C0DB +:1011B00089339105E9F082389105D1F085339105A5 +:1011C00009F44DC067C0833E910581F138F4803E3B +:1011D0009105B9F0823E9105D9F05CC0863E91053B +:1011E00061F1873E9105A1F155C00E944106089525 +:1011F00020911C0320FD02C021FF4CC080EE90E036 +:1012000049C080911C0380FFF9CF89E390E042C080 +:1012100080911C0382FF0EC080911C0384FF03C0D9 +:1012200080E090E037C083EE90E034C080911C03F2 +:1012300082FFF2CF82EE90E02DC080911C0383FFED +:101240000BC080911C0384FDEBCF87EE90E022C0A1 +:1012500080911C0383FFF5CF86EE90E01BC0809148 +:101260001C0385FF07C089E290E014C080911C0335 +:1012700085FFF9CF85E390E00DC080911C0386FFC8 +:1012800007C08AE290E006C080911C0386FFF9CF78 +:1012900081E390E00E94510608950C941303E82F17 +:1012A000F0E0E25BFE4F8081E82FEF70F0E0829586 +:1012B0008F7021E030E0A90102C0440F551F8A95CC +:1012C000E2F740A308950F931F93CF93DF9385B761 +:1012D000806885BF85B7806885BFC3E0D0E001E046 +:1012E00010E0FE01E25BFE4F8081E82FEF70F0E03E +:1012F00021A182958F70A80102C0440F551F8A95C5 +:10130000E2F7CA01822B81A38C2F0E944F092197FB +:1013100040F78BE090E061E070E0FC01EE5BFE4F97 +:101320002081E22FEF70F0E042A122952F70DB01C7 +:1013300002C0AA0FBB1F2A95E2F79D01242B22A30E +:10134000019758F7DF91CF911F910F910C94CF0324 +:10135000EF92FF920F931F93CF93DF9300E212E07F +:10136000C3E0EE24E394F12CD5E08C2F0E944F09CA +:101370008BE090E040E050E0FC01EE5BFE4F6081CE +:10138000E62FEF70F0E020A130E062956F7002C0B0 +:10139000359527956A95E2F720FD09C09701082E3B +:1013A00002C0220F331F0A94E2F7422B532B0197FE +:1013B00018F7F801929182918F018417950721F017 +:1013C00051834083D09305018C2F0E944F09C15057 +:1013D00060F68091050187FD2CC081508093050146 +:1013E0008F3F39F08FE99FE00197F1F700C00000CF +:1013F00020C080911E0290911F029093270280933B +:10140000260280911C0290911D02909325028093E8 +:10141000240280911A0290911B02909323028093E0 +:1014200022028091180290911902909321028093D8 +:1014300020020E94D10381E0DF91CF911F910F9193 +:10144000FF90EF900895E82FF0E0EE0FFF1FE05EB1 +:10145000FD4F80819181089508950F931F93CF933D +:1014600008E212E0C0E0F801929182918F010E949F +:101470009322C80FF2E000321F07A9F78C2FCF91FB +:101480001F910F9108950E94D723811102C00E94DD +:10149000B3230E94FC23809307033E9A809171003E +:1014A0008D7F8093710082E0809390008AE1809329 +:1014B000910081E080932A02089580912A0281118F +:1014C00002C00E94430A10927A021092790280911F +:1014D00071008D7F80937100809190008F73809355 +:1014E000900010923C0210923B02109273021092F4 +:1014F000740210927502109276021092720210928B +:101500007102E1E5F2E0A1E4B2E0119211921192D0 +:1015100011921D921D9282E0E137F807B1F708950C +:10152000CF92DF92EF92FF920F931F93CF93DF93AF +:1015300020913B02222309F484C06B017C0180913D +:101540002A02811102C00E94430A01E712E0C7E0AB +:10155000D0E0A7019601F801929182917291629177 +:101560008F010E944729811131C0FE01EE0FFF1F3C +:10157000EE0FFF1FEF5AFD4F10821182128213826D +:10158000DE01AA0FBB1FAF5BBD4F11961C921E92CE +:10159000C730D105E9F02196448155816681778174 +:1015A000408351836283738314821582168217826B +:1015B00012968D919C91139711969C938E931396EE +:1015C0001C921E92129734961296E2CF219708F63B +:1015D0008091790290917A02019797FD05C09093CE +:1015E0007A028093790204C010927A0210927902F2 +:1015F0008091790290917A0220917702309178025D +:101600002817390724F01092780210927702892B5C +:10161000C1F4809171008D7F809371008091900062 +:101620008F73809390001092730210927402109244 +:10163000750210927602109272021092710210924C +:101640003B02DF91CF911F910F91FF90EF90DF90C0 +:10165000CF9008951F920F920FB60F9211244F92C0 +:101660005F926F927F928F929F92AF92BF92CF9232 +:10167000DF92EF92FF922F933F934F935F936F937D +:101680007F938F939F93AF93BF93CF93DF93EF930A +:10169000FF9380913B02882309F49BC1C09179029A +:1016A000D0917A021C161D060CF093C140902B02BB +:1016B00050902C0260902D0270902E0220E030E0BD +:1016C000A901C301B2010E94F22A18160CF065C0EC +:1016D000C130D10509F452C080917702909178020F +:1016E000BE010E94C42C7C01909378028093770203 +:1016F00080903D0290903E02A0903F02B090400248 +:1017000020E030E040E85FE3C501B4010E94E32837 +:1017100060933D0270933E0280933F02909340029B +:10172000F701EE0FFF1FEE0FFF1FEF5AFD4FA30152 +:10173000920160817181828193810E944B2920E016 +:1017400030E040E05EE30E94F62A9B01AC01C50157 +:10175000B4010E94F22A18168CF4C7010196BE014A +:101760000E94C42C909378028093770210923D02DD +:1017700010923E0210923F0210924002E0917702D6 +:10178000F0917802EE0FFF1FEE0FFF1FEF5AFD4F93 +:101790006081718182819381D0C0C0907302D090AA +:1017A0007402E0907502F090760220E030E0A9012A +:1017B000C701B6010E9447292197882309F4A2C0D6 +:1017C000FE01EE0FFF1FEE0FFF1FEF5AFD4F80804F +:1017D0009180A280B380A5019401C701B6010E9447 +:1017E000472987FF31C0A501940160E070E08CEDCE +:1017F00093EC0E944B2920E030E040E451E40E9449 +:101800004B2920E030E040E05FE30E94F62A9B0194 +:10181000AC0160E070E080E090E40E94592B9B01F5 +:10182000AC01C501B4010E94F62A9B01AC01C701BD +:10183000B6010E94472987FF07C0A701960160E013 +:1018400070E08CED93E439C0A5019401C701B601A5 +:101850000E94F22A18160CF055C0A501940160E010 +:1018600070E08CED93E40E944B2920E030E040E4EE +:1018700051E40E944B2920E030E040E05FE30E9409 +:10188000F62A9B01AC0160E070E080E090E40E94E9 +:10189000592B9B01AC01C501B4010E94F62A9B01A2 +:1018A000AC01C701B6010E94F22A18165CF5A70127 +:1018B000960160E070E08CED93EC0E944B2920E0F3 +:1018C00030E040E451E40E944B2920E030E040E069 +:1018D0005FE30E94F62A9B01AC0160E070E080E0CB +:1018E00090E40E94592B9B01AC01C701B6010E94F4 +:1018F000F62A60937302709374028093750290933A +:10190000760213C0FE01EE0FFF1FEE0FFF1FEF5A0E +:10191000FD4F80819181A281B38180937302909366 +:101920007402A0937502B093760260917302709175 +:101930007402809175029091760220912802309174 +:1019400029022F3F4FEF340731F02F5F3F4F309385 +:101950002902209328020E94D20E6B017C0120E014 +:1019600034E244EF51E40E94472987FF08C086EF24 +:10197000C82E88E2D82E84EFE82E81E4F82E20E0ED +:1019800030E040E051E4C701B6010E94F62A9B0115 +:10199000AC0160E074E284E79BE40E944B296B0198 +:1019A0007C010E94B8297093970060939600209163 +:1019B0000601309107014091080150910901C701CA +:1019C000B6010E94F62A0E94B8297093990060938C +:1019D000980080913C02882309F433C1C0903702FB +:1019E000D0903802E0903902F0903A0220E030E0E6 +:1019F000A901C701B6010E94F22A1816D4F58091F8 +:101A00002802909129028F3F2FEF920729F001962B +:101A10009093290280932802C701B6010E94D20E3A +:101A200020E030E040E051E40E94F62A9B01AC0146 +:101A300060E074E284E79BE40E944B296B017C0127 +:101A40000E94B82970939700609396002091060138 +:101A5000309107014091080150910901C701B60179 +:101A60000E94F62A0E94B82970939900609398000A +:101A700008C0109297001092960010929900109250 +:101A8000980060913102709132026F5F7F4F7093C6 +:101A9000320260933102209196003091970080E0ED +:101AA00090E0232BF1F0C0919600D09197000E9416 +:101AB000E4296B017C01BE0180E090E00E94E429F2 +:101AC0009B01AC0160913302709134028091350228 +:101AD000909136020E944B2920E03FEF4FE757E4F8 +:101AE00010C00E94E4296B017C0120E030EE4FEF32 +:101AF00054E46091330270913402809135029091E8 +:101B000036020E94F62A9B01AC01C701B6010E9471 +:101B1000F22A87FD96C080912F028F5F80932F025B +:101B200090E0209103033091040382179307A0F003 +:101B300080910E03882319F010922F020DC080911E +:101B400071008D7F80937100809190008F738093DE +:101B5000900010923C027DC080913002C0912F0213 +:101B6000811128C0C0900803D0900903E0900A03B7 +:101B7000F0900B0320E030E0A901C701B6010E94FC +:101B8000F22A1816BCF481E08093300210923702DA +:101B9000109238021092390210923A02C092330227 +:101BA000D0923402E0923502F0923602C150C093D6 +:101BB0002F0243C010923002109229021092280284 +:101BC000E0910503F091060348E0C49FE00DF11D8C +:101BD000112480819181A281B381809337029093F7 +:101BE0003802A0933902B0933A0220E030E040E896 +:101BF0005EE364817581868197810E94F62A6B017C +:101C00007C0180910A01682F70E080E090E00E94E2 +:101C1000E42920E030E048EC52E40E944B299B018B +:101C2000AC01C701B6010E94F62A6093330270939B +:101C30003402809335029093360210923202109251 +:101C400031028091070380FD04C010923C02109283 +:101C50003B02FF91EF91DF91CF91BF91AF919F91A7 +:101C60008F917F916F915F914F913F912F91FF9055 +:101C7000EF90DF90CF90BF90AF909F908F907F902C +:101C80006F905F904F900F900FBE0F901F90189520 +:101C9000CF92DF92EF92FF92CF93DF936B017C01A3 +:101CA000EA0180912A02811102C00E94430A8091B8 +:101CB000070380FF46C08091790290917A020897CD +:101CC0000CF03FC0809171008D7F809371008091F6 +:101CD0003C0281110E945D0A81E080933B021092D8 +:101CE00029021092280220E030E0A901C701B601C4 +:101CF0000E94F22A1816DCF48091790290917A02FF +:101D0000FC01EE0FFF1FEE0FFF1FEF5AFD4FC082C9 +:101D1000D182E282F382FC01EE0FFF1FEF5BFD4FE9 +:101D2000D183C083019690937A0280937902809147 +:101D30007100826080937100809190008068809330 +:101D40009000DF91CF91FF90EF90DF90CF900895BA +:101D500080910703817008958091070381608093CB +:101D600007030E9400240C942B04809107038E7FAC +:101D7000809307030C94002480917B0290E00196ED +:101D800066E070E00E94C42C80937B0208958091ED +:101D90007B0290E0019766E070E00E94C42C809383 +:101DA0007B0208958F929F92AF92BF92CF92DF9263 +:101DB000EF92FF920F931F93CF93DF936B017C0100 +:101DC000C0912802D0912902BE0180E090E00E94DB +:101DD000E4294B015C01A701960160E070E08CE50D +:101DE00094E40E944B299B01AC01C501B4010E94FF +:101DF000F62A0E94B82920917B02233009F473C08F +:101E000028F4222351F02130E9F02CC1243009F4C8 +:101E1000A0C0253009F4E0C025C180E090E0A0E03A +:101E2000BFE38093060190930701A0930801B0934C +:101E3000090110922B0210922C0210922D02109286 +:101E40002E0210C110922B0210922C0210922D0221 +:101E500010922E026431710540F46A30710560F50C +:101E600020E030E040E85EE32BC0693C710508F0FB +:101E7000AAC080E090E00E94E42920E030E040EA3F +:101E800051E40E94E22820E030E044E353E40E9461 +:101E90004B299B01AC010E94F62A20E030E040E093 +:101EA0005EE30E94F62A9B01AC0160E070E080E0F6 +:101EB0009EE30E94E22844C020E030E040E05FE37F +:101EC000C701B6010E94F62A6B017C0180E090E018 +:101ED000A0E0BEE38093060190930701A093080160 +:101EE000B0930901BFC010922B0210922C021092E5 +:101EF0002D0210922E024AE0469F9001479F300D1E +:101F00001124C90168EB7BE00E94B02CBC016C5D20 +:101F1000754077FF03C0719561957109882777FD3A +:101F20008095982F0E94E6292EE333EC4EE259E388 +:101F30000E94F62A20E030E040EC5EE30E94E328B5 +:101F40006093060170930701809308019093090143 +:101F500089C010922B0210922C0210922D02109226 +:101F60002E02CE0183709927892BE1F0BE016170AA +:101F7000772780E090E00E94E42920E030E040E014 +:101F80005EE30E94F62A20E030E040E45FE30E9436 +:101F9000E3286093060170930701809308019093F2 +:101FA00009010CC080E090E0A0E0BFE3809306014F +:101FB00090930701A0930801B0930901C770DD2732 +:101FC000CD2B09F04FC0109206011092070110921C +:101FD00008011092090146C010922B0210922C02A7 +:101FE00010922D0210922E0200E010E020E03FE35C +:101FF0000093060110930701209308013093090113 +:102000006739710578F180E090E00E94E42920E0D2 +:1020100030E047E153E40E94E22820E030E04AE764 +:1020200054E40E944B2920E030E048E452E40E944E +:10203000F62A20E030E040EA51E40E94282A0E947B +:10204000B329660F771F660F771FFB01EE5AFE4F0D +:102050002081318142815381C701B6010E94F62A55 +:102060006B017C01C701B601DF91CF911F910F91E8 +:10207000FF90EF90DF90CF90BF90AF909F908F90A8 +:10208000089580918C020895CF93DF9300D01F9222 +:10209000CDB7DEB79C0180911303843019F593E02E +:1020A00099833B832A839093E9008FEF9091E80016 +:1020B000815095FD06C095ED9A95F1F700008111CC +:1020C000F5CF8091E80085FF0DC040E050E063E06F +:1020D00070E0CE0101960E94A5128091E8008E77F3 +:1020E0008093E8000F900F900F90DF91CF910895AB +:1020F000CF93DF9300D01F92CDB7DEB720911303AB +:10210000243021F522E029839B838A8383E0809316 +:10211000E9008FEF9091E800815095FD06C095EDA4 +:102120009A95F1F700008111F5CF8091E80085FFC5 +:102130000DC040E050E063E070E0CE0101960E94E7 +:10214000A5128091E8008E778093E8000F900F90A1 +:102150000F90DF91CF910895209113032430F1F473 +:1021600022E02093E9002FEF3091E800215035FD67 +:1021700006C035ED3A95F1F700002111F5CF209119 +:10218000E80025FF0BC040E050E065E070E00E94F1 +:10219000A5128091E8008E778093E8000895CF9390 +:1021A000DF93EC0190911303943009F046C08091C5 +:1021B00015018823D9F0809116018823B9F09093F6 +:1021C000E9008FEF9091E800815095FD06C095E100 +:1021D0009A95F1F700008111F5CF8091E80085FF15 +:1021E0002CC040E050E060E170E017C081E08093D7 +:1021F000E9008FEF9091E800815095FD06C095EDC4 +:102200009A95F1F700008111F5CF8091E80085FFE4 +:1022100014C040E050E068E070E0CE010E94A512DA +:102220008091E8008E778093E80080E1FE01ACE7C2 +:10223000B2E001900D928A95E1F7DF91CF91089578 +:1022400080911203811109C00E943A140E949714D0 +:102250008091E20084608093E2000895109212035E +:102260000895089508950C94DE2242E061EC81E027 +:102270000E94B41342E061EC82E00E94B41342E099 +:1022800061EC83E00E94B41342E161EC84E00C94C1 +:10229000B41380911503833009F455C030F48130B4 +:1022A00071F0823009F48EC008958A3009F47AC042 +:1022B0008B3009F460C0893009F09CC020C0809147 +:1022C0001403813A09F096C08091E800877F8093DB +:1022D000E8008091180390911903892B21F460E1A3 +:1022E0008CE792E003C060E080E090E070E00E9444 +:1022F000F0128091E8008B778093E8000895809138 +:102300001403813209F076C080911803909119036B +:10231000009719F0039709F06DC08091E800877F5E +:102320008093E8008091E80082FD05C0809113034E +:102330008111F8CF5FC08091F10080938C02809171 +:10234000E8008B7753C080911403813A09F052C0A2 +:102350008091180390911903892B09F04BC080914B +:10236000E800877F8093E8008091E80080FFFCCF41 +:102370008091150136C0809114038132D9F5809186 +:10238000180390911903892BA9F58091E800877FA4 +:102390008093E8000E94E913809116038093150151 +:1023A0000C941F1C80911403813221F58091E80068 +:1023B000877F8093E8000E94E91380911703809340 +:1023C0008D02089580911403813AA1F48091E80070 +:1023D000877F8093E8008091E80080FFFCCF8091A8 +:1023E0008D028093F1008091E8008E778093E80061 +:1023F0000C94E913089584B7877F84BF88E10FB6F2 +:10240000F89480936000109260000FBE90E080E826 +:102410000FB6F89480936100909361000FBE0E9404 +:102420008C170E943A140E9497148091E2008460F5 +:102430008093E20078940E941D170E948E178BE013 +:1024400091E00E94381780911303853069F40E944F +:102450009F22809111038823B1F30E94CD2288230B +:1024600091F30E948F12EFCF0E949617ECCF292F85 +:10247000332723303105C9F064F42130310581F070 +:102480002230310509F043C08DE690E02EE034E0C3 +:1024900042C021323105F1F02232310541F137C01D +:1024A00082E190E02BE734E036C099278130910536 +:1024B00041F08230910541F0892B49F5EAE0F4E0E2 +:1024C00005C0ECEDF3E002C0E2EBF3E0849190E0B4 +:1024D0009F0121C06430D8F4E62FF0E0EE0FFF1F1B +:1024E000E255FE4F2081318189E090E014C06430D4 +:1024F00070F470E0FB01EE0FFF1FEA55FE4F2081E4 +:102500003181FB01EE55FE4F808190E004C080E0F8 +:1025100090E020E030E0FA0131832083089580E1EB +:1025200089BD82E189BD09B400FEFDCF8091D8004C +:102530008F7D8093D8008091E00082608093E000DE +:102540008091E00081FDFCCF0895CF92DF92EF9261 +:10255000FF920F931F93CF93DF93EC018B016A01DE +:102560000E940814811133C0C114D10439F0F6015E +:1025700080819181081B190BC80FD91FE12CF12C08 +:102580000115110519F18091E80085FD16C08091B3 +:10259000E8008E778093E800C114D10449F0F60179 +:1025A00080819181E80EF91EF182E08285E00FC002 +:1025B0000E940814882321F30AC089918093F100B6 +:1025C00001501109FFEFEF1AFF0ADACF80E0DF9127 +:1025D000CF911F910F91FF90EF90DF90CF900895D2 +:1025E00020911A0330911B032617370748F0611515 +:1025F000710539F42091E8002E772093E80001C09E +:10260000B90140E061157105A9F12091130322235E +:1026100009F443C0253009F442C02091E80023FDAD +:1026200040C02091E80022FD32C02091E80020FF48 +:10263000E9CF4091F3002091F20030E0342BFC010F +:10264000CF016115710559F02830310540F48191B1 +:102650008093F100615071092F5F3F4FF1CF41E04E +:102660002830310509F040E02091E8002E772093D2 +:10267000E800C8CF4111C9CF0AC080911303882355 +:1026800061F0853061F08091E80083FD0AC080919F +:10269000E80082FFF2CF80E0089582E0089583E0B1 +:1026A000089581E0089520911A0330911B032617A5 +:1026B000370748F06115710539F42091E8002E774D +:1026C0002093E80001C0B901FC0120E0611571050B +:1026D00091F180911303882309F440C0853009F4F7 +:1026E0003FC08091E80083FD3DC08091E80082FDFD +:1026F0002FC08091E80080FFE9CF2091F300809106 +:10270000F20090E0922B6115710559F08830910527 +:1027100040F424912093F1003196615071090196A3 +:10272000F2CF21E0089709F020E08091E8008E7751 +:102730008093E800CBCF2111CCCF0AC08091130346 +:10274000882361F0853061F08091E80083FD0AC044 +:102750008091E80082FFF2CF80E0089582E0089542 +:1027600083E0089581E00895982F973058F590936D +:10277000E900981739F07091EC002091ED0050912C +:10278000F00003C0242F762F50E021FF19C03091B4 +:10279000EB003E7F3093EB003091ED003D7F3093B6 +:1027A000ED003091EB0031603093EB007093EC0062 +:1027B0002093ED005093F0002091EE0027FF07C01A +:1027C0009F5FD3CF8F708093E90081E0089580E010 +:1027D00008958091140387FF11C08091E80082FD65 +:1027E00005C0809113038111F8CF11C08091E800DA +:1027F0008B770BC080911303882349F08091E80008 +:1028000080FFF8CF8091E8008E778093E8000895EC +:102810002091E4003091E50095E64091EC00842F92 +:10282000817040FF22C08091E80080FD1CC0809133 +:102830001303882391F0853091F08091EB0085FDA2 +:1028400010C04091E4005091E5004217530729F36E +:102850009A01915011F784E0089582E0089583E091 +:10286000089581E0089580E008954091E80042FFD6 +:10287000DECF08950E94A8140E94B014E0EEF0E0AC +:10288000808181608083E8EDF0E080818F778083B4 +:1028900019BCA7EDB0E08C918E7F8C9380818F7EE8 +:1028A00080831092120308950F931F93CF93DF93A9 +:1028B0000E94A8140E94B014C8EDD0E088818F77E0 +:1028C000888388818068888388818F7D888319BC0C +:1028D0001092130310920F03109211031092100321 +:1028E00000EE10E0F80180818B7F80838881816019 +:1028F000888342E060E080E00E94B413E1EEF0E003 +:1029000080818E7F8083E2EEF0E080818160808331 +:10291000808188608083F80180818E7F80838881B8 +:1029200080618883DF91CF911F910F910895E8ED29 +:10293000F0E080818F7E8083E7EDF0E08081816030 +:10294000808384E082BF81E0809312030C9454144E +:10295000E8EDF0E080818E7F80831092E2000895A0 +:102960001092DA001092E10008951F920F920FB6B4 +:102970000F9211242F933F934F935F936F937F9305 +:102980008F939F93AF93BF93EF93FF938091E10059 +:1029900082FF0BC08091E20082FF07C08091E100BE +:1029A0008B7F8093E1000E941C178091DA0080FFEA +:1029B0001FC08091D80080FF1BC08091DA008E7FFD +:1029C0008093DA008091D90080FF0DC080E189BD3D +:1029D00082E189BD09B400FEFDCF81E0809313033D +:1029E0000E94201105C019BC109213030E942E11E1 +:1029F0008091E10080FF19C08091E20080FF15C046 +:102A00008091E2008E7F8093E2008091E2008061FD +:102A10008093E2008091D80080628093D80019BC36 +:102A200085E0809313030E9432118091E10084FFBE +:102A300030C08091E20084FF2CC080E189BD82E13A +:102A400089BD09B400FEFDCF8091D8008F7D8093B1 +:102A5000D8008091E1008F7E8093E1008091E200B8 +:102A60008F7E8093E2008091E20081608093E2009B +:102A700080910F03882311F084E007C08091E30068 +:102A800087FD02C081E001C083E0809313030E94B0 +:102A900033118091E10083FF29C08091E20083FF20 +:102AA00025C08091E100877F8093E10082E08093E0 +:102AB000130310920F038091E1008E7F8093E10059 +:102AC0008091E2008E7F8093E2008091E20080613D +:102AD0008093E20042E060E080E00E94B4138091C5 +:102AE000F00088608093F0000E943111FF91EF9117 +:102AF000BF91AF919F918F917F916F915F914F9116 +:102B00003F912F910F900FBE0F901F9018951F921D +:102B10000F920FB60F9211242F933F934F935F9311 +:102B20006F937F938F939F93AF93BF93CF93DF93D5 +:102B3000EF93FF93C091E900CF708091EC00D82F04 +:102B4000D17080FDD0E81092E9008091F000877F7D +:102B50008093F00078940E94CB151092E900809148 +:102B6000F00088608093F000CD2BCF70C093E90017 +:102B7000FF91EF91DF91CF91BF91AF919F918F9195 +:102B80007F916F915F914F913F912F910F900FBE69 +:102B90000F901F9018951F93CF93DF93CDB7DEB79B +:102BA000AA970FB6F894DEBF0FBECDBFE4E1F3E005 +:102BB00088E08E0F9091F10091938E13FBCF0E94CD +:102BC00049118091E80083FF1FC180911403909107 +:102BD0001503492F50E04A30510508F015C1FA019C +:102BE000EA5AFF4F0C94D82C803881F0823809F0D3 +:102BF0000BC1809118038F708093E9008091EB00E6 +:102C000085FB882780F91092E90006C080911003A7 +:102C100090911103911182609091E800977F9093B9 +:102C2000E8008093F1001092F100C8C0282F2D7F9A +:102C300009F0EAC0882319F0823061F0E5C0809184 +:102C40001603813009F0E0C0933009F080E08093F2 +:102C500011032BC080911603811127C080911803A6 +:102C60008F7009F4D1C08093E9002091EB0020FF20 +:102C70001CC0933021F48091EB00806214C09091CD +:102C8000EB0090619093EB0021E030E0A90102C0DD +:102C9000440F551F8A95E2F74093EA001092EA002C +:102CA0008091EB0088608093EB001092E9008091A6 +:102CB000E800877F86C08111A7C0109116031F7797 +:102CC0008091E3008078812B8093E3008091E8007D +:102CD000877F8093E8000E94E9138091E80080FFDD +:102CE000FCCF8091E30080688093E300111102C063 +:102CF00082E001C083E08093130386C08058823055 +:102D000008F082C080911603909117038C3D53E028 +:102D1000950779F583E08A838AE289834FB7F8942F +:102D2000DE01139620E03EE051E2E32FF0E0509305 +:102D30005700E49120FF03C0E295EF703F5FEF7012 +:102D40008E2F90E0EA3010F0C79601C0C0968D93A8 +:102D50009D932F5F243149F74FBF8091E800877F13 +:102D60008093E8006AE270E0CE0101960E94F012C2 +:102D700014C0AE014F5F5F4F609118030E9437127D +:102D8000BC01009709F440C09091E800977F9093B0 +:102D9000E80089819A810E9453138091E8008B7723 +:102DA0008093E80031C0803879F58091E800877F12 +:102DB0008093E80080910F038093F1008091E800F8 +:102DC0008E778093E8000E94E9131EC081111CC019 +:102DD000909116039230C0F48091E800877F809331 +:102DE000E80090930F030E94E91380910F03811173 +:102DF00006C08091E30087FD02C081E001C084E04D +:102E0000809313030E9435118091E80083FF0AC06C +:102E10008091E800877F8093E8008091EB008062DA +:102E20008093EB00AA960FB6F894DEBF0FBECDBF1D +:102E3000DF91CF911F9108950895CF93809113034F +:102E40008823A1F0C091E900CF709091EC00892F08 +:102E5000817090FD80E8C82B1092E9008091E80015 +:102E600083FD0E94CB15CF70C093E900CF910895E8 +:102E700090939302809392020895E0919202F091D0 +:102E80009302309721F00190F081E02D099480E0C9 +:102E90000895E0919202F0919302309721F0028020 +:102EA000F381E02D09940895E0919202F09193024C +:102EB000309721F00480F581E02D09940895209148 +:102EC0009002309191028217930771F090939102D2 +:102ED00080939002E0919202F0919302309721F05A +:102EE0000680F781E02D0994089520918E0230919B +:102EF0008F028217930771F090938F0280938E0256 +:102F0000E0919202F0919302309721F00084F185D4 +:102F1000E02D0994089508950C948B170E941223B4 +:102F20000E9463090E9498230C9447285F926F9235 +:102F30007F928F929F92AF92BF92CF92DF92EF9249 +:102F4000FF920F931F93CF93DF9300D000D01F9277 +:102F5000CDB7DEB70E94A8099DE9C92E92E0D92E0F +:102F600003E010E0AA24A394B12C502E802F0E94DD +:102F7000230A4C01F601729062906F01682679264F +:102F800061147104A1F40150110978F78FEF89835E +:102F90008A831B820E941B238160782F9D838C83F0 +:102FA00049815A816B818D810E94461838C0809179 +:102FB000F20281FD0E942C0A2BE030E07501022E06 +:102FC00002C0EE0CFF1C0A94E2F7C701862197218C +:102FD000892B09F129835A828E209F2091E089282C +:102FE00009F490E09B830E941B238160782F9D83CE +:102FF0008C8349815A816B818D810E944618000F14 +:10300000111FF801EB56FD4F80819181E826F926CA +:10301000F182E08204C02150310980F6B4CF0E94D1 +:103020007F25109194020E943D171817D1F00E943D +:103030003D17809394020F900F900F900F900F9078 +:10304000DF91CF911F910F91FF90EF90DF90CF9084 +:10305000BF90AF909F908F907F906F905F900C94F7 +:103060004D090F900F900F900F900F90DF91CF911F +:103070001F910F91FF90EF90DF90CF90BF90AF9096 +:103080009F908F907F906F905F900895CF93DF9384 +:10309000CDB7DEB72B970FB6F894DEBF0FBECDBF0E +:1030A0004F83588769877A878B87DE01119686E080 +:1030B000FD0111928A95E9F785E0FE0137960190AE +:1030C0000D928A95E1F749815A816B817C818D81CE +:1030D0009E810E94BD1E2B960FB6F894DEBF0FBED8 +:1030E000CDBFDF91CF910895CF93882309F4C2C05B +:1030F000C82F823859F40E943D1781FDBBC089E377 +:103100000E9497210E94642289E30CC0833879F4DD +:103110000E943D1780FDAEC083E50E9497210E946A +:10312000642283E50E94D921CF910C9464228438D3 +:1031300059F40E943D1782FD9DC087E40E949721AB +:103140000E94642287E4EECF8CEF8C0F813A48F422 +:103150008C2F0E94AF2781118DC08C2F0E94972148 +:10316000E3CF80E28C0F883048F4C77081E001C063 +:10317000880FCA95EAF70E941D22D6CF8BE58C0FE7 +:10318000833078F4C53A29F0C63A31F083E890E00C +:1031900005C081E890E002C082E890E0CF910C94F5 +:1031A0005F1788E58C0F833108F064C0C83A39F1A5 +:1031B000C93A41F1CA3A49F1CB3A51F1CC3A59F105 +:1031C000CD3A61F1C03B69F1CE3A71F1CF3A79F174 +:1031D000C13B81F1C23B89F1C33B91F1C43B99F101 +:1031E000C53BA1F1C63BA9F1C73BB1F1C83BB9F161 +:1031F000C93BC1F1CA3BC9F180E090E038C082EE22 +:1032000090E035C089EE90E032C08AEE90E02FC0A9 +:1032100085EB90E02CC086EB90E029C087EB90E036 +:1032200026C08CEC90E023C08DEC90E020C083E8B9 +:1032300091E01DC08AE891E01AC082E991E017C0D0 +:1032400084E991E014C081E292E011C083E292E04F +:103250000EC084E292E00BC085E292E008C086E2F4 +:1032600092E005C087E292E002C08AE292E0CF914C +:103270000C947517CF910895882309F44BC08238B8 +:1032800059F40E943D1781FF45C089E30E949721B0 +:103290000E94642289E30CC0833871F40E943D17B8 +:1032A00080FF38C083E50E9497210E94642283E555 +:1032B0000E94D9210C946422843859F40E943D174D +:1032C00082FF28C087E40E9497210E94642287E43D +:1032D000EFCF9CEF980F913A58F390E2980F983007 +:1032E00050F4877091E001C0990F8A95EAF7892F11 +:1032F0000E942322DFCF9BE5980F933020F480E0DB +:1033000090E00C945F17885A833120F480E090E0BD +:103310000C9475170895882321F00E941D220C94A7 +:1033200064220895882321F00E9423220C946422B1 +:1033300008957F928F929F92AF92BF92CF92DF9229 +:10334000EF92FF920F931F93CF93DF931F92CDB70E +:10335000DEB77C01C62E772EFC01058102950F7029 +:10336000128111110E943A220E949021882379F043 +:10337000112369F080E28C0D883048F082E00E94D1 +:1033800079210E94902191E0D82ED92601C0D12C1C +:10339000E72DE295EF70F0E0E05AFF4F0C94D82C47 +:1033A000872D807F072D0F70882311F00295007FF5 +:1033B000112389F0002309F499C180E28C0D883033 +:1033C00020F4802F0E941D2203C0802F0E942D22F6 +:1033D0000E9464228BC18C2D0E943C19002309F4A9 +:1033E000C3C180E28C0D883020F4802F0E942322FC +:1033F00003C0802F0E9433220E946422B5C1872D12 +:10340000807F972D9F70803211F4892F03C0892F00 +:103410008295807FCC2021F0F1E0CF16A1F01DC075 +:10342000112339F0002319F1013009F50E944D22D2 +:103430009BC1002319F0013009F496C189830E94D1 +:103440005022898110C1112321F0063008F08CC16F +:103450000EC0053008F088C106C1112359F00023C1 +:1034600031F0F701958190FF41C19F7095830E94D3 +:103470008B197AC1002309F4F6C03EC1872D8695C9 +:103480008695837090E0009719F0019761F06CC108 +:10349000112321F08C2D972D937002C080E090E0D5 +:1034A0000E945F1761C1112321F08C2D972D93701D +:1034B00002C080E090E00E94751756C18C2D112348 +:1034C00019F00E94872402C00E94EF240E947425F4 +:1034D0004BC1872D837009F052C0111145C18C2D4D +:1034E000829586958770880F880F9C2D9F70892EF6 +:1034F000912CA12CB12C082E04C0880C991CAA1C5C +:10350000BB1C0A94D2F7C4FE14C00FE010E020E008 +:1035100030E0B901A80104C0440F551F661F771F92 +:103520008A95D2F7CB01BA016095709580959095F8 +:1035300003C060E070E0CB01272D2695269523700F +:1035400030E02230310569F02330310589F06829F7 +:1035500079298A299B292130310571F00E940520A3 +:1035600003C1682979298A299B290E942120FCC04E +:103570000E940520C501B4010E94E91FF5C0112376 +:1035800019F0872D817001C08695882309F4ECC05D +:103590008C2D829586958770880F880F9C2D9F7043 +:1035A000892E912CA12CB12C082E04C0880C991CBA +:1035B000AA1CBB1C0A94D2F7C4FE14C00FE010E092 +:1035C00020E030E0B901A80104C0440F551F661F78 +:1035D000771F8A95D2F7CB01BA01609570958095D7 +:1035E000909503C060E070E0CB01272D26952695CD +:1035F0002370422F50E04230510569F043305105AD +:1036000089F0682979298A299B294130510571F06F +:103610000E94DF20A9C0682979298A299B290E9454 +:10362000FB20A2C00E94DF20C501B4010E94C3207C +:103630009BC08C2D90E0FC01E05EF109E531F105C5 +:1036400008F050C0E059FF4F0C94D82C0C2D0F708F +:10365000872D8F71112321F00E945C20802F07CFCE +:103660000E947D20802F0E9492197EC0112341F07C +:10367000053008F079C0872D8F710E94A22074C098 +:10368000063008F071C0F7CF112339F0872D8F7104 +:103690000E945C2069C01123C9F3872D8F710E949D +:1036A0007D2062C0112329F0872D8F710E94472051 +:1036B0005BC00E943D2058C0112351F0172D1F718F +:1036C000812F0E945C2063E0812F0E9470214CC0FA +:1036D00081E00E947921023008F446C082E00E9415 +:1036E000792142C0112331F0002381F28C2D0E94F8 +:1036F00074183AC0002389F28C2D0E943C1934C002 +:10370000472D4F706C2DC7010E94B8030E94611FA6 +:103710002BC0111129C0472D4F7050E04230510588 +:10372000B9F04CF44115510581F041305105E1F4F7 +:103730000E946F2819C04330510569F0443051058B +:1037400099F48C2D0E94C1280FC00E9458280CC0EB +:103750000E948B2809C00E949E2806C0472D4F70EA +:103760006C2DC7010E942E06DD20F9F00E946C210D +:1037700080FD1BC0F70112820E9466210E945C201E +:10378000C7010E94E41B0E9466210F90DF91CF9138 +:103790001F910F91FF90EF90DF90CF90BF90AF906F +:1037A0009F908F907F900C947D200F90DF91CF9110 +:1037B0001F910F91FF90EF90DF90CF90BF90AF904F +:1037C0009F908F907F9008950F931F93CF93DF93D7 +:1037D000EC01888199812B813C81232BB9F09F3F9B +:1037E00011F48F3F99F0CE010E942D04882371F0CF +:1037F000688179818A810E9462218C010E9417214F +:103800000E94DE1FB801CE010E949919DF91CF916D +:103810001F910F9108950E943A220E944A220E940D +:103820000F220E9464220E9425260E94742580E0B7 +:1038300090E00E945F1780E090E00C9475170E9462 +:103840002A220C940B1C0E945721292F22952F709D +:1038500030E02C3031054CF42A3031056CF4225024 +:10386000310922303105A8F407C02C30310569F048 +:103870002F30310551F00DC0803F69F018F4803EC3 +:1038800040F409C0843F29F406C093FB882780F9DF +:10389000089580E0089581E00895CF93DF9300D0EC +:1038A00000D01F92CDB7DEB70F900F900F900F9002 +:1038B0000F90DF91CF910895CF93DF9300D000D088 +:1038C00000D0CDB7DEB726960FB6F894DEBF0FBE98 +:1038D000CDBFDF91CF9108951F93CF93DF93C09118 +:1038E0009D0216E080919E02C81799F0D0E01C9FBF +:1038F000F0011D9FF00D1124E156FD4F40815181D3 +:1039000062817381848195810E945C1C2196C770BD +:10391000E9CFDF91CF911F9108954091CF0250914F +:10392000D0026091D1027091D2028091D302909125 +:10393000D4020C945C1C8091D40282958F7009F0A3 +:1039400054C08091D102882309F44FC080919D0218 +:10395000A0919E026091CF027091D0024091D2025C +:103960005091D302B6E08A1709F43FC090E04115A8 +:103970005105C1F17F3F11F46F3FA1F1B89FF001F4 +:10398000B99FF00D1124E156FD4F218172132AC019 +:103990002081621327C02281211124C02381348118 +:1039A0002417350710F421503109241B350B283C0E +:1039B0003105C0F42091D4022F7020612093D402ED +:1039C00026E0289FF001299FF00D1124EC55FD4FB2 +:1039D00080818F70806180838FEC92E00E94E41B75 +:1039E0000C946C1C01968770BECF0895CF92DF9225 +:1039F000EF92FF920F931F93CF93DF93CDB7DEB774 +:103A000062970FB6F894DEBF0FBECDBF8C0185E084 +:103A1000F801DE011D9601900D928A95E1F7D8011B +:103A20004C9111965C91119712966C911297139686 +:103A3000CD90DC9014973091CF027091D00280919C +:103A4000D2029091D302009709F46BC17F3F19F421 +:103A50003F3F09F466C1E090D102EE2009F4C0C0F6 +:103A60002091D402C816D90628F0F601E81BF90BFC +:103A7000CF0104C0809590958C0D9D1DFF24F3947B +:103A8000883C910578F0F12C207F09F0C6C07C2D90 +:103A9000D98AC88A89890E944D1C8FEC92E00E94C5 +:103AA000E41BB1C0822F807F09F046C0751314C09B +:103AB000341312C0611110C02F7020612093D40202 +:103AC0000E948D1C8FEC92E00E94E41B8091D40236 +:103AD000D80115968C932EC0CD2819F15F3F11F4B3 +:103AE0004F3FF9F0F62E61111CC080919D0220918C +:103AF0009E0236E0821709F45AC090E0389FF00128 +:103B0000399FF00D1124E156FD4F7181571306C006 +:103B10007081471303C07281711103C001968770D1 +:103B2000E9CFF62E662309F418C18091D402816092 +:103B30008093D402F12C11C1751308C0341306C050 +:103B4000611104C08091D402D801C3C04D875E8743 +:103B50008D859E856A8B0E94231C6A898823E1F1EA +:103B60006623D1F12091D402822F82958F7090E04C +:103B7000029774F08091CF029091D00298878F8342 +:103B80001986DB86CA862C87CE0107960E94E41B25 +:103B900086E0F801AFECB2E001900D928A95E1F772 +:103BA0000E949B1C0E948D1CFF24F394D6C04D875D +:103BB0005E878D859E850E945721292F22952F7023 +:103BC00030E0223031050CF0BCC09F7009F0B6C067 +:103BD000805E883008F4C1C0C8010E94E41BE4CFB5 +:103BE000C816D90608F453C0F601E81BF90BCF013B +:103BF000883C910508F450C0F12C7C2DD98AC88AE4 +:103C000089890E944D1CEFECF2E086E0DF011D92F5 +:103C10008A95E9F70E948D1CA0C0751314C0341357 +:103C200012C0611110C08091D402F8018583C801CF +:103C30000E94E41B86E0EFECF2E0DF011D928A9522 +:103C4000E9F7FE2C8AC04D875E878D859E856A8B3D +:103C50000E94231C6A89882309F4BECF662309F4D5 +:103C6000BBCF2091D402822F82958F7090E0029773 +:103C70000CF48ECF8091CF029091D0029A838983E9 +:103C80001B82DD82CC822E83CE0101967FCF809570 +:103C900090958C0D9D1DACCFF62E662309F49CCF1C +:103CA00075132EC034132CC02091D40220FD1FC0E8 +:103CB000822F82958F70D9F0D80115962C93159785 +:103CC0008F3049F08F5F982F9295907F822F8F7061 +:103CD000892B15968C93C8010E94E41B86E0F8019D +:103CE000AFECB2E001900D928A95E1F793CF86E0B8 +:103CF000F801AFECB2E001900D928A95E1F72DC08A +:103D00004D875E878D859E850E94231C811140CF43 +:103D10008091D40281608093D402C8010E94E41B88 +:103D20001CC0662309F458CF4D875E878D859E851C +:103D30000E94231C882309F44FCF2ACF811148CF3A +:103D40000CC0243031050CF047CF9F7009F440CFF0 +:103D5000F8019581907F09F03BCF8F2D62960FB6C9 +:103D6000F894DEBF0FBECDBFDF91CF911F910F91B1 +:103D7000FF90EF90DF90CF9008951F93CF93DF9344 +:103D8000CDB7DEB72C970FB6F894DEBF0FBECDBF10 +:103D90004F83588769877A878B879C87CE010796E0 +:103DA0000E94F61C882369F08F8198852A853B85BF +:103DB000232BF1F19F3F09F063C08F3F09F060C0F2 +:103DC00037C086E0FE013796DE01119601900D9214 +:103DD0008A95E1F76F817885EA85FB85309741F117 +:103DE0007F3F11F46F3F21F120919E0230E0C90125 +:103DF00001968770992740919D0250E0841795079E +:103E000009F447C069837A83FD83EC8396E0929F2F +:103E1000D001939FB00D1124A156BD4FFE013196E4 +:103E200001900D929A95E1F780939E020E946C1C7E +:103E300016E080919D0290919E028917C1F1189F12 +:103E4000C001112481569D4F0E94F61C882379F1F0 +:103E5000E0919D021E9FF0011124E156FD4F40812B +:103E6000518162817381848195810E945C1C809163 +:103E70009D0290E001968770992780939D02D9CF8B +:103E80004F81588569857A858B859C850E945C1C4D +:103E9000CFCF0E941F1C10929E0210929D02EFEC49 +:103EA000F2E086E0DF011D928A95E9F7C1CF2C96FA +:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B +:103EC0000895EF92FF920F931F93CF93DF938C018E +:103ED000009709F46CC0F12CEE24E394E8012196DC +:103EE000F8018491843740F4843008F051C0813067 +:103EF00081F0823019F15BC0853709F444C0A8F124 +:103F00009CE7980F903708F052C08F770E943C19B9 +:103F100041C00E5F1F4FFE01C49180E28C0F8830BC +:103F200048F4C7708E2D01C0880FCA95EAF70E9429 +:103F30003D2214C08C2F0E9474182DC00E5F1F4F9D +:103F4000FE01C49180E28C0F883058F4C7708E2D2A +:103F500001C0880FCA95EAF70E9443220E9464229A +:103F60001AC08C2F0E943C1916C00E5F1F4FFE0115 +:103F7000C491CC2381F08FE99FE00197F1F700C055 +:103F80000000C150F6CF0E5F1F4FFE01F49003C03A +:103F90000E9474188E018F2D882309F49FCFEFE9BA +:103FA000FFE03197F1F700C000008150F5CFDF91BD +:103FB000CF911F910F91FF90EF9008950895609316 +:103FC000D9027093DA028093DB029093DC020C94A6 +:103FD0000B1C0F931F930091D9021091DA022091CC +:103FE000DB023091DC02DC01CB01802B912BA22B78 +:103FF000B32B8093D9029093DA02A093DB02B093A3 +:10400000DC021F910F910C940B1C0F931F930091D6 +:10401000D9021091DA022091DB023091DC02DC013E +:10402000CB0180239123A223B3238093D9029093C1 +:10403000DA02A093DB02B093DC021F910F910C9483 +:104040000B1C0F931F930091D9021091DA0220915B +:10405000DB023091DC02DC01CB0180279127A22713 +:10406000B3278093D9029093DA02A093DB02B09336 +:10407000DC021F910F910C940B1C1092D502109230 +:10408000D6021092D7021092D8020C940B1C41E079 +:1040900050E060E070E004C0440F551F661F771FBA +:1040A0008A95D2F74093D5025093D6026093D702F7 +:1040B0007093D8020C940B1C41E050E060E070E07B +:1040C00004C0440F551F661F771F8A95D2F7809151 +:1040D000D5029091D602A091D702B091D802482B78 +:1040E000592B6A2B7B2B4093D5025093D6026093B9 +:1040F000D7027093D8020C940B1C41E050E060E0B2 +:1041000070E004C0440F551F661F771F8A95D2F7D1 +:1041100040955095609570958091D5029091D6020A +:10412000A091D702B091D802482359236A237B2358 +:104130004093D5025093D6026093D7027093D80271 +:104140000C940B1C41E050E060E070E004C0440FB0 +:10415000551F661F771F8A95D2F78091D5029091DF +:10416000D602A091D702B091D802482759276A27D2 +:104170007B274093D5025093D6026093D702709369 +:10418000D8020C940B1C0F931F930091D502109131 +:10419000D6022091D7023091D802DC01CB01802BCE +:1041A000912BA22BB32B8093D5029093D602A09390 +:1041B000D702B093D8021F910F910C940B1C0F9350 +:1041C0001F930091D5021091D6022091D702309111 +:1041D000D802DC01CB0180239123A223B323809357 +:1041E000D5029093D602A093D702B093D8021F9124 +:1041F0000F910C940B1C0F931F930091D5021091FB +:10420000D6022091D7023091D802DC01CB01802761 +:104210009127A227B3278093D5029093D602A0932B +:10422000D702B093D8021F910F910C940B1C0895E4 +:10423000CF92DF92EF92FF920F931F93CF93DF9372 +:104240008C01C090D902D090DA02E090DB02F090AD +:10425000DC028091D5029091D602A091D702B09154 +:10426000D802C82AD92AEA2AFB2ACFE1D0E0D7010E +:10427000C6010C2E04C0B695A795979587950A940C +:10428000D2F780FF06C0B8018C2F0E94B3080197B7 +:1042900021F4219760F780E001C08C2FDF91CF914E +:1042A0001F910F91FF90EF90DF90CF900895CF93E3 +:1042B000DF93EC010E941821BE010E94B308DF9138 +:1042C000CF910895CB010E94572108958091DD027E +:1042D00085958595859508958091DD02877008956F +:1042E00098E0899F90011124262B2093DD020C94E5 +:1042F0005C202091DD02809582238093DD02982F3F +:10430000977069F430E0482F552747FD50952417E2 +:10431000350729F08595859585950C947D20089520 +:104320009091DD02977081E009F480E0089590910A +:104330001501992321F090911601911109C0209146 +:10434000170130911801F90132969FEF40E01FC02C +:10435000982F9695969596959F3050F5E091170178 +:10436000F0911801E90FF11D877021E030E0A901FB +:1043700002C0440F551F8A95E2F7CA019181892B2B +:10438000818308959F3F39F04F5F4E3041F0519146 +:104390005813F8CF0DC05111F7CF942FF5CF9F3F91 +:1043A00039F0F901E90FF11D97FDFA95828308951F +:1043B000089590911501992321F090911601911182 +:1043C00009C02091170130911801F9013296205F40 +:1043D0003F4F1FC0982F9695969596959F30F0F475 +:1043E000E0911701F0911801E90FF11D877021E0AC +:1043F00030E0A90102C0440F551F8A95E2F7CA01B7 +:10440000809591818923818308953196E217F3077E +:1044100029F090819813F9CF1082F7CF089581E0A9 +:1044200090E0E0911701F0911801E80FF91F108258 +:10443000019680319105A9F708959091F102892B99 +:104440008093F102089580959091F10289238093E1 +:10445000F10208951092F10208959091F002892BD3 +:104460008093F002089580959091F00289238093C3 +:10447000F00208951092F00208959091EF02892BB6 +:104480008093EF02089580959091EF0289238093A5 +:10449000EF0208951092EF0208958093DE020895CE +:1044A0001092DE0208958091170190911801FC018D +:1044B00031969C01205F3F4F80E0919191118F5F79 +:1044C000E217F307D1F70895E0911701F091180171 +:1044D0008091F1028083E0911701F09118019081A1 +:1044E0008091F002892B8083E0911701F0911801EF +:1044F00090818091EF02892B80838091DE02882356 +:1045000061F0E0911701F09118019081892B80836F +:104510000E94532281111092DE0280911701909126 +:1045200018010C94491720E0009739F0AC01415074 +:104530005109842395232F5FF7CF822F089580910F +:104540001303843039F11092F30220E488E190E003 +:104550000FB6F894A895809360000FBE209360007A +:1045600080E00E941F0380E00E944D0983B7817F95 +:10457000846083BF83B7816083BF7894889583B755 +:104580008E7F83BF88E10FB6F8948093600010920D +:1045900060000FBE08950895089580E00E941F03F3 +:1045A0000E94CB220E94A8090E94CC220E942D0AC0 +:1045B00091E0811101C090E0892F08950E941F1C95 +:1045C00080E00E941F030E9447280E943D170C9420 +:1045D0004D091F920F920FB60F9211248F939F9344 +:1045E000AF93BF938091F302811113C08091F402C5 +:1045F0009091F502A091F602B091F7024196A11DAB +:10460000B11D8093F4029093F502A093F602B0934B +:10461000F702BF91AF919F918F910F900FBE0F90B6 +:104620001F90189582E084BD93E095BD9AEF97BDE9 +:1046300080936E0008952FB7F8948091F4029091C2 +:10464000F502A091F602B091F7022FBF0895CF9224 +:10465000DF92EF92FF920F931F932FB7F894409140 +:10466000F4025091F5026091F6027091F7022FBFAB +:104670006A017B01EE24FF248C0120E030E0C016AB +:10468000D106E206F30610F4415051099A01281BA5 +:10469000390BC9011F910F91FF90EF90DF90CF90E0 +:1046A00008951F920F920FB60F9211248F939F932C +:1046B000AF93BF938091F4029091F502A091F6021E +:1046C000B091F7020196A11DB11D8093F402909361 +:1046D000F502A093F602B093F702BF91AF919F91BC +:1046E0008F910F900FBE0F901F9018950E943A1453 +:1046F000F8942FEF87EA91E6215080409040E1F74F +:1047000000C0000087E090EBDC0180931E039093D3 +:104710001F03A0932003B09321039CE088E10FB610 +:10472000F894A895809360000FBE90936000FFCF2F +:104730000E94D723811102C00E94B3230E94E2236A +:104740008093F2020E94EA2380931C0387FB882750 +:1047500080F9809316010E94E623682F70E080E0C4 +:1047600090E00C94DF1F6DEE7EEF80E090E00E9401 +:10477000FE2C60E082E090E00E94EC2C60E083E0A0 +:1047800090E00E94EC2C60E084E090E00E94EC2C31 +:1047900060E085E090E00E94EC2C60E086E090E034 +:1047A0000E94EC2C6FEF87E090E00C94EC2C80E002 +:1047B00090E00E94E62C21E08D3E9E4F09F020E023 +:1047C000822F089582E090E00C94DE2C83E090E04C +:1047D0000C94DE2C84E090E00C94DE2C682F84E0B6 +:1047E00090E00C94EC2C86E090E00C94DE2C682F8A +:1047F00086E090E00C94EC2C87E090E00C94DE2CAA +:10480000682F87E090E00C94EC2C8091FA0280FFF6 +:104810000BC060911C0185E0689FB0011124759563 +:104820006795759567952BC081FF09C060911C0144 +:1048300085E0689FB00111247595679520C082FFBF +:1048400007C060911C0185E0689FB001112417C06A +:104850009091FB029923D1F060911B01961788F784 +:1048600020911C0185E0289F90011124929FA001B6 +:10487000939F500D112470E0CA010E94C42C60382F +:10488000710540F46115710539F002C065E070E012 +:10489000862F08958FE7089581E008958091FA02A8 +:1048A00080FF08C060911A0170E075956795759555 +:1048B000679521C081FF06C060911A0170E075956F +:1048C000679519C082FF04C060911A0170E010C0A2 +:1048D0009091FB029923C1F0609119019617A0F7FE +:1048E00080911A01899FC001112470E00E94C42C9C +:1048F0006038710528F46115710521F0862F08953F +:104900008FE7089581E0089561E070E0F4CF803F83 +:1049100021F40E940524819504C0813F29F40E945E +:1049200005248093FE020895823F21F40E9405240D +:10493000819504C0833F29F40E9405248093FD02E1 +:104940000895893F19F40E944E2405C08A3F31F42E +:104950000E944E2481958093FF0208958B3F21F49D +:104960000E944E24819504C08C3F29F40E944E245D +:10497000809300030895843F21F48091FC028160BC +:1049800017C0853F21F48091FC02826011C0863FF0 +:1049900021F48091FC0284600BC0873F21F4809158 +:1049A000FC02886005C0883F31F48091FC02806180 +:1049B0008093FC0208958D3F21F48091FA0281607A +:1049C0000BC08E3F21F48091FA02826005C08F3FB8 +:1049D00029F48091FA0284608093FA020895803F5E +:1049E00039F48091FE0287FF6CC01092FE0269C00C +:1049F000813F29F48091FE021816BCF362C09091A9 +:104A0000FD02823F29F497FF5CC01092FD0259C05D +:104A1000833F19F41916CCF354C0893F41F48091B7 +:104A2000FF0218160CF04DC01092FF024AC08A3FD8 +:104A300029F48091FF0287FF44C0F6CF8B3F39F401 +:104A40008091000387FF3DC0109200033AC08C3F65 +:104A500029F4809100031816BCF333C0843F21F47D +:104A60008091FC028E7F17C0853F21F48091FC026B +:104A70008D7F11C0863F21F48091FC028B7F0BC09B +:104A8000873F21F48091FC02877F05C0883F31F485 +:104A90008091FC028F7E8093FC0213C08D3F21F435 +:104AA0008091FA028E7F0BC08E3F21F48091FA0232 +:104AB0008D7F05C08F3F29F48091FA028B7F809310 +:104AC000FA028091FD0281110EC08091FE028111D7 +:104AD0000AC08091FF02811106C0809100038111FC +:104AE00002C01092FB0208958CEF92E00E945417CE +:104AF0000E941B239093F9028093F80208951F935C +:104B0000CF93DF938091F8029091F9020E942723BE +:104B1000AC019091FB02992321F020911D0130E01E +:104B200006C020911E018AE0289F9001112442179F +:104B3000530708F486C08091FD02C091FE02D09117 +:104B4000FF0210910003811107C0C11176C0D1117D +:104B500074C0111172C075C09F3F19F09F5F909390 +:104B6000FB02181624F40E9405248093FD02809114 +:104B7000FD0287FF05C00E94052481958093FD02F8 +:104B80001C1624F40E9405248093FE028091FE02EC +:104B900087FF05C00E94052481958093FE026091E5 +:104BA000FD02662339F1C091FE02CC2319F177276B +:104BB00067FD7095872F972F0E94E62923E333E343 +:104BC00043E35FE30E94F62A0E94B3296093FD024B +:104BD0006C2F772767FD7095872F972F0E94E62906 +:104BE00023E333E343E35FE30E94F62A0E94B32901 +:104BF0006093FE021D1624F40E944E248093FF024F +:104C00008091FF0287FF05C00E944E24819580930A +:104C1000FF02111624F40E944E2480930003809119 +:104C2000000387FF05C00E944E24819580930003F6 +:104C3000DF91CF911F910C9474259F3F09F08ECF87 +:104C400096CFDF91CF911F910895ECEFF2E085E0D0 +:104C5000DF011D928A95E9F71092FB021092FA0289 +:104C60000895833081F128F4813059F08230D1F0F9 +:104C70000895853009F449C0B8F1863009F456C06A +:104C8000089580911E01262F30E0280F311D2F3FFF +:104C9000310524F4680F60931E0108958FEF80930F +:104CA0001E01089580911D01262F30E0280F311D2F +:104CB0002F3F310524F4680F60931D0108958FEF95 +:104CC00080931D01089580911C01262F30E0280F4C +:104CD000311D2F3F310524F4680F60931C010895A6 +:104CE0008FEF80931C01089580911B01262F30E0E7 +:104CF000280F311D2F3F310524F4680F60931B01ED +:104D000008958FEF80931B01089580911A01262F3B +:104D100030E0280F311D2F3F310524F4680F6093D8 +:104D20001A0108958FEF80931A0108958091190157 +:104D3000262F30E0280F311D2F3F310524F4680F56 +:104D40006093190108958FEF8093190108958330BE +:104D500011F128F4813049F0823091F008958530C6 +:104D600081F120F18630C1F1089580911E0168170C +:104D700020F4861B80931E01089510921E01089551 +:104D800080911D01681720F4861B80931D010895F2 +:104D900010921D01089580911C01681720F4861B54 +:104DA00080931C01089510921C01089580911B01AD +:104DB000681720F4861B80931B01089510921B0135 +:104DC000089580911A01681720F4861B80931A01B8 +:104DD000089510921A01089580911901681720F41E +:104DE000861B8093190108951092190108950F935D +:104DF0001F93873208F048C08E3108F08DC0803193 +:104E000009F477C008F5873009F461C068F486308A +:104E100009F09DC08091F202817F8E7F8093F20223 +:104E200081E08093020394C08B3009F489C08E30F6 +:104E300009F08DC08091F20282FB222720F991E0D7 +:104E4000922790FB82F95EC0863109F479C060F444 +:104E5000813109F07CC00E941F1C9091160181E0F5 +:104E60008927809316016CC0893109F469C08B31A0 +:104E700009F06DC08091F20281FB222720F991E0B8 +:104E8000922790FB81F93EC0883309F459C050F451 +:104E9000893209F457C0853309F454C0873209F4C4 +:104EA00051C055C0833409F44DC028F48A3308F446 +:104EB0004EC0895332C0883409F049C00E941F1C7B +:104EC0000E945D0A0E9424040E94762339C09091BA +:104ED000F202892F8095817080FB90F929F096600D +:104EE00098609093F20234C0997F977F9093F2027A +:104EF00027C08091F20283FB222720F991E09227BC +:104F000090FB83F98093F2029923D1F08091F20211 +:104F100081608093F20214C08D5141E050E060E066 +:104F200070E08A019B0104C0000F111F221F331F74 +:104F30008A95D2F7C901B8010E94DF1F0E941F1C89 +:104F400081E006C061E070E080E090E0F5CF80E0B5 +:104F50001F910F91089580E0089580E00895CF9308 +:104F6000C82F80910203813069F018F08230C9F1B6 +:104F700084C0E0911701F09118018081823209F01C +:104F80007EC007C0E0911701F09118018081823244 +:104F900061F48C2F0E94AB27811104C08C2F0E94DA +:104FA000F7261DC081E090E01AC08C2F0E94AD272B +:104FB000811114C0C43179F048F4CB3079F0C0319C +:104FC00009F061C082E08093020308C0C93219F081 +:104FD000C83321F058C01092020355C081E081709F +:104FE00054C0C93291F120F5C43179F1B0F4C73021 +:104FF00009F047C08EE180931E0182E380931D017A +:105000008AE080931C0184E180931B0188E08093F7 +:105010001A0188E28093190134C0CE51C63088F558 +:10502000EC2FF0E0EA54FE4F80818093010329C009 +:10503000CE34E9F020F4CB3421F56AE013C0C13559 +:1050400079F0C235F1F461E00DC08091010388234D +:1050500019F01092010315C081E08093020315C07E +:1050600061E006C0809101030E9431260AC06AE017 +:10507000809101030E94A72604C01092020380E0E1 +:1050800004C081E002C080E0AACFCF9108950E94C1 +:10509000D723811102C00E94B3230E94F32380937F +:1050A0001D0380FF02C0869501C080E00C941F03A1 +:1050B00080911D03982F9695292F30E023303105DC +:1050C0004CF49F5F990F8170892B816080931D0341 +:1050D0000E94F72380911D0386950C941F038091F5 +:1050E0001D03982F969591F09158990F8170892BF7 +:1050F00080931D038E7F91E009F490E080911D0361 +:1051000090FB80F980931D030E94F72380911D037B +:1051100086950C941F0380911D03982F909590FB0A +:1051200080F980931D030E94F72380911D0380FF67 +:1051300002C0869501C080E00C941F0390911D036E +:10514000892F86958F5F8F779170843028F4880F30 +:10515000892B80931D0302C090931D0380911D0332 +:105160008E7F91E009F490E080911D0390FB80F91F +:1051700080931D030E94F72380911D0386950C9454 +:105180001F0320911D03922F96958927982F990F21 +:10519000822F8170892B80931D038E7F91E009F40B +:1051A00090E080911D0390FB80F980931D030E9485 +:1051B000F72380911D0386950C941F0380911D0396 +:1051C000869508955058BB27AA270ED0D1C1C2D1C9 +:1051D00030F0C7D120F031F49F3F11F41EF4B7C175 +:1051E0000EF4E095E7FB9FC1E92FD3D180F3BA1706 +:1051F000620773078407950718F071F49EF5EBC1F9 +:105200000EF4E0950B2EBA2FA02D0B01B9019001E1 +:105210000C01CA01A0011124FF27591B99F0593F25 +:1052200050F4503E68F11A16F040A22F232F342F6D +:105230004427585FF3CF469537952795A795F040BB +:105240005395C9F77EF41F16BA0B620B730B840BD0 +:10525000BAF09150A1F0FF0FBB1F661F771F881F88 +:10526000C2F70EC0BA0F621F731F841F48F48795E0 +:1052700077956795B795F7959E3F08F0B3CF9395CF +:10528000880F08F09927EE0F97958795089527D1F5 +:1052900008F481E008950CD06BC163D140F05AD17D +:1052A00030F021F45F3F19F03EC1511195C14FC15B +:1052B00070D198F39923C9F35523B1F3951B550B7E +:1052C000BB27AA2762177307840738F09F5F5F4FD9 +:1052D000220F331F441FAA1FA9F333D00E2E3AF01A +:1052E000E0E830D091505040E695001CCAF729D034 +:1052F000FE2F27D0660F771F881FBB1F2617370783 +:105300004807AB07B0E809F0BB0B802DBF01FF27B2 +:1053100093585F4F2AF09E3F510568F004C15CC16D +:105320005F3FECF3983EDCF3869577956795B795EC +:10533000F7959F5FC9F7880F911D9695879597F907 +:105340000895E1E0660F771F881FBB1F6217730780 +:105350008407BA0720F0621B730B840BBA0BEE1F95 +:1053600088F7E095089504D06894B11135C1089587 +:1053700018D188F09F5790F0B92F9927B751A0F016 +:10538000D1F0660F771F881F991F1AF0BA95C9F7D9 +:1053900012C0B13081F01FD1B1E008951CC1672F58 +:1053A000782F8827B85F39F0B93FCCF38695779589 +:1053B0006795B395D9F73EF4909580957095619572 +:1053C0007F4F8F4F9F4F0895E89409C097FB3EF49D +:1053D00090958095709561957F4F8F4F9F4F992342 +:1053E000A9F0F92F96E9BB279395F69587957795C0 +:1053F0006795B795F111F8CFFAF4BB0F11F460FF80 +:105400001BC06F5F7F4F8F4F9F4F16C0882311F0D7 +:1054100096E911C0772321F09EE8872F762F05C0EB +:10542000662371F096E8862F70E060E02AF09A9586 +:10543000660F771F881FDAF7880F9695879597F97B +:10544000089588D018F011F08CD038F480C0C4C012 +:10545000E92F9FD0B0F35523C9F3E7FB6217730719 +:1054600084079507A8F199F3E92FFF2788232AF0ED +:105470003197660F771F881FDAF7952F552744233A +:1054800032F091505040220F331F441FD2F7BB27F8 +:10549000E91BF50B621B730B840BB109C1F222F4FB +:1054A000620F731F841FB11D31972AF0660F771F9B +:1054B000881FBB1FEFCF915050405AF041F0882316 +:1054C00032F0660F771F881F91505040C1F79395B7 +:1054D00030C08695779567959F5FD9F7F8CF990F7C +:1054E0000008550FAA0BE0E8FEEF16161706E807AE +:1054F000F907C0F012161306E407F50798F0621BCF +:10550000730B840B950B39F40A2661F0232B242BA3 +:10551000252B21F408950A2609F4A140A6958FEFC2 +:10552000811D811D089597F99F6780E870E060E014 +:1055300008959F3F31F0915020F4879577956795B6 +:10554000B795880F911D9695879597F908959FEFC8 +:1055500080EC089500240A9416161706180609060A +:10556000089500240A9412161306140605060895D9 +:10557000092E0394000C11F4882352F0BB0F40F461 +:10558000BF2B11F460FF04C06F5F7F4F8F4F9F4FA1 +:10559000089557FD9058440F551F59F05F3F71F023 +:1055A0004795880F97FB991F61F09F3F79F087958A +:1055B0000895121613061406551FF2CF4695F1DF13 +:1055C00008C0161617061806991FF1CF86957105A3 +:1055D000610508940895E894BB2766277727CB01D7 +:1055E00097F908957CDF08F48FEF08950BD0C0CFB2 +:1055F000B1DF28F0B6DF18F0952309F094CFA7CFDC +:105600001124EACFC6DFA0F3959FD1F3950F50E0A8 +:10561000551F629FF001729FBB27F00DB11D639F64 +:10562000AA27F00DB11DAA1F649F6627B00DA11D0A +:10563000661F829F2227B00DA11D621F739FB00DB0 +:10564000A11D621F839FA00D611D221F749F332720 +:10565000A00D611D231F849F600D211D822F762FB9 +:105660006A2F11249F5750408AF0E1F088234AF0B6 +:10567000EE0FFF1FBB1F661F771F881F9150504002 +:10568000A9F79E3F510570F04ECFA6CF5F3FECF3D8 +:10569000983EDCF3869577956795B795F795E795EE +:1056A0009F5FC1F7FE2B880F911D9695879597F9FF +:1056B0000895FA01EE0FFF1F30962105310599F18B +:1056C0006115710561F48038BFE39B0749F1689467 +:1056D0009038810561F08038BFEF9B0741F0992336 +:1056E00042F5FF3FE1053105210511F1E8940894E9 +:1056F000E795D901AA2329F4AB2FBE2FF85FD0F389 +:1057000010C0FF5F70F4A695E0F7F73950F019F07C +:10571000FF3A38F49F779F930CD00F9007FC905876 +:1057200008953EF014CF60E070E080E89FE30895B4 +:105730004FE79F775F934F933F932F939ED02F9187 +:105740003F914F915F9152DF05C019F40EF0EBCEFF +:1057500042CFFDCE26DFC8F39638C0F707F80F9288 +:10576000E8942BE33AEA48EB5FE74EDF0F920F92A3 +:105770000F924DB75EB70F92C0D0EAE0F1E016D0BD +:105780004F915F91EF91FF91E595EE1FFF1F49F05B +:10579000FE57E0684427EE0F441FFA95E1F7419564 +:1057A000550B32D00F9007FE26C00895DF93CF939C +:1057B0001F930F93FF92EF92DF927B018C0168940D +:1057C00005C0DA2EEF011EDFFE01E894A5912591B8 +:1057D000359145915591AEF3EF0106DDFE0197013C +:1057E000A801DA9479F7DF90EF90FF900F911F9165 +:1057F000CF91DF9108959B01AC0160E070E080E8FB +:105800009FE349CD90CE95CECCDEE8F39923D9F332 +:10581000940F511DBBF39150504094F059F08823E0 +:1058200032F0660F771F881F91505040C1F79E3F9E +:10583000510544F7880F911D9695879597F908951E +:105840005F3FACF0983E9CF0BB27869577956795B7 +:10585000B79508F4B1609395C1F7BB0F58F711F4F1 +:1058600060FFE8CF6F5F7F4F8F4F9F4FE3CFB4CE86 +:105870000EF05FCE6CCE689456CE93DEC8F39923BB +:10588000D1F3C6F3DF93CF931F930F93FF92C92FEA +:10589000DD2788232AF02197660F771F881FDAF704 +:1058A00020E030E040E85FEB9FE3883920F0803E65 +:1058B00030F021968F7787DCE2E3F1E003C083DCF0 +:1058C000EFE5F1E073DF8B01BE01EC01FB2E6F57BA +:1058D00071097595771F880B990B78DD28E132E700 +:1058E00041E35FE38FDEAF2D9801AE01FF900F9192 +:1058F0001F91CF91DF9178DC3BCEFA01DC01AA0F3A +:10590000BB1F9B01AC01BF5728F422273327442734 +:1059100050781FC0B75188F4AB2F002446953795B7 +:105920002795011CA395D2F3002069F0220F331FA5 +:10593000441FB395DAF30DD045CC61307105A0E872 +:105940008A07B94630F49B01AC0166277727882780 +:105950009078309621F020833183428353830895D9 +:10596000AA1BBB1B51E107C0AA1FBB1FA617B70785 +:1059700010F0A61BB70B881F991F5A95A9F78095A1 +:105980009095BC01CD01089597FB072E16F4009465 +:1059900007D077FD09D00E94B02C07FC05D03EF45B +:1059A000909581959F4F0895709561957F4F0895CB +:1059B000EE0FFF1F0590F491E02D0994F999FECFA9 +:1059C00092BD81BDF89A992780B50895A8E1B0E00D +:1059D00042E050E00C94062D262FF999FECF92BD9F +:1059E00081BDF89A019700B4021639F01FBA20BDA4 +:1059F0000FB6F894FA9AF99A0FBE08950196272FD8 +:105A00000E94ED2C0C94EC2CDC01CB01FC01F999EB +:105A1000FECF06C0F2BDE1BDF89A319600B40D92FA +:0C5A200041505040B8F70895F894FFCFB3 +:105A2C00640007000CFF0000003F644110CF10AC75 +:105A3C0010781044100101DF022808140A321E00ED +:105A4C0002040507090B0C0E1011131517181A1C5C +:105A5C001D1F2123242628292B2D2F303234353796 +:105A6C00393B1F0F03764F5F6F7F496943790959A3 +:105A7C0053633149803F5D8B803FF8BF803FCAE163 +:105A8C00803F73ED803FCAE1803FF8BF803F5D8B64 +:105A9C00803F3149803F0000803FF16D7F3F75EAC8 +:105AAC007E3F4C827E3F833F7E3F84287E3F833FF8 +:105ABC007E3F4C827E3F75EA7E3FF16D7F3F00005A +:105ACC00803F3F4D36394905FC04C6048D04200443 +:105ADC00390452046B04010203040506070809008B +:00000001FF diff --git a/keyboard/planck/keymaps/pete/compiled.hex b/keyboard/planck/keymaps/pete/compiled.hex new file mode 100644 index 0000000000..ddf70df507 --- /dev/null +++ b/keyboard/planck/keymaps/pete/compiled.hex @@ -0,0 +1,1143 @@ +:100000000C94F1020C9435030C9435030C943503D5 +:100010000C9435030C9435030C9435030C94350380 +:100020000C9435030C9435030C94D20D0C94A40E4F +:100030000C94061C0C9435030C9435030C94350376 +:100040000C9435030C9496030C9435030C943503EF +:100050000C9435030C946E1C0C9435030C943503EE +:100060000C9435030C9435030C9435030C94350330 +:100070000C9435030C9435030C9435030C94350320 +:100080000C9435030C9435030C9435030C94350310 +:100090000C9435030C9435030C9435030C94350300 +:1000A0000C9435030C9435030C943503FC030404C1 +:1000B0000E0416041E042F0458045804580458044F +:1000C0005804580458045804580458043B04110FA9 +:1000D000330F2110330F2110780F9B0F2110F00FD9 +:1000E0000310ED12ED121C131C135B137B13D114C0 +:1000F000D1148613D114361436149D14A614D114B9 +:10010000CB144314431443144314431443144314AF +:100110004314431443144314431443144314431427 +:1001200043145314611468146F1479140000000010 +:1001300000000000000000010204060A0F17202C36 +:100140003A4A5D71879DB3C7DAE9F5FCFFFCF5E932 +:10015000DAC7B39D87715D4A3A2C20170F0A06044F +:100160000201000000000000000000002B0014004D +:100170001A000800150017001C0018000C001200DF +:1001800013002A00290004001600070009000A00D5 +:100190000B000D000E000F0033003400E1001D00C5 +:1001A0001B00060019000500110010003600370082 +:1001B000380028000530E000E200E30003302C00A6 +:1001C0002C0004305000510052004F002B0014004E +:1001D0001A00090013000A000D000F0018001C008F +:1001E00033002A002900040015001600170007003C +:1001F0000B00110008000C0012003400E1001D008B +:100200001B000600190005000E0010003600370024 +:10021000380028000530E000E200E30003302C0045 +:100220002C0004305000510052004F002B003400CD +:100230003600370013001C0009000A0006001500F4 +:100240000F002A00290004001200080018000C000A +:1002500007000B001700110016003800E100330002 +:1002600014000D000E001B00050010001A001900FC +:100270001D0028000530E000E200E30003302C0000 +:100280002C0004305000510052004F0035021E0275 +:100290001F0220022102220223022402250226023A +:1002A00027022A00010001000100010001000100F5 +:1002B00001002D022E022F02300231020100010046 +:1002C0000100010001000100010001000100010026 +:1002D0000100010001000100010001000100010016 +:1002E00001000100AB00AA00A900AE0035001E000D +:1002F0001F002000210022002300240025002600EA +:1003000027002A0001000100010001000100010096 +:1003100001002D002E002F003000310001000100EF +:1003200001000100010001000100010001000100C5 +:1003300001000100010001000100010001000100B5 +:1003400001000100AB00AA00A900AE0083506603C3 +:10035000000000000000000000003A003B003C00EC +:100360003D004C0001001030A800AA00A9000000C8 +:1003700000003E003F0040004100200A0100350817 +:10038000AC00AE00AB00000000004200430044009F +:100390004500210A053001000100010000000000B5 +:1003A000000000004A004E004B004D00010001001B +:1003B0000100010001000100010001000100010035 +:1003C0000100010001000100010001000100010025 +:1003D0000100003001300230010001000100010085 +:1003E0000100010001000100010001000100010005 +:1003F00001000100010001000100010001000050A6 +:100400000050010001000100010001002803540018 +:1004100068006500200050006C0061006E00630001 +:100420006B0020004B006500790062006F006100E6 +:100430007200640000002C034F007200740068001A +:100440006F006C0069006E006500610072002000A2 +:100450004B006500790062006F006100720064006B +:10046000730000000403090409026D00040100A0E8 +:10047000FA09040000010301010009211101000132 +:10048000223F000705810308000A09040100010357 +:10049000010200092111010001224D00070582031C +:1004A00008000A09040200010300000009211101EB +:1004B00000012236000705830308000A090403002F +:1004C0000103000000092111010001223900070584 +:1004D00084031000011201100100000008EDFE600D +:1004E0006001000102000105010906A101050719CB +:1004F000E029E71500250195087501810205081915 +:100500000129059505750191029501750391010574 +:10051000071900297715002501957875018102C01A +:1005200005010980A101850216010026B7001A0104 +:10053000002AB700751095018100C0050C0901A1C2 +:10054000018503160100269C021A01002A9C0275EF +:100550001095018100C005010902A1010901A10056 +:100560000509190129051500250195057501810267 +:100570009501750381010501093009311581257F38 +:1005800095027508810609381581257F9501750842 +:100590008106050C0A38021581257F9501750881B1 +:1005A00006C0C005010906A101050719E029E715E4 +:1005B00000250195087501810295017508810105E5 +:1005C0000819012905950575019102950175039199 +:1005D000010507190029FF150025FF9506750881FB +:1005E00000C011241FBECFEFDAE0DEBFCDBF04B6DE +:1005F00003FE24C08091FB019091FC01A091FD01BC +:10060000B091FE018730904BA740B04BB9F41092E7 +:10061000FB011092FC011092FD011092FE0114BE2C +:1006200084B7877F84BF88E10FB6F8948093600019 +:10063000109260000FBEE0E0F8E3099511E0A0E041 +:10064000B1E0E6E0F7E402C005900D92A434B107F2 +:10065000D9F711E0A4E4B1E001C01D92AB3FB107AE +:10066000E1F70E94180B0C9481230C94000008956C +:1006700081E0089508950C9437030C9438030C948A +:100680003A030E94F72123E030E0281B3109220FB2 +:10069000209348010895282F2F98809180002111E0 +:1006A00008C0877F8093800010928D0010928C008C +:1006B0001BC0886080938000233019F48FEF9FEF78 +:1006C0000FC083E090E0821B9109880F991F2FEFE4 +:1006D0003FEFA90102C0569547958A95E2F7CA01F6 +:1006E00090938D0080938C000C9441030E944103F1 +:1006F00084E080934701109244010895279A2F982F +:100700008FEF9FEF90938700809386008AE080931D +:10071000800089E1809381000E9460210C9476031F +:100720000E947E036E9A769A0C945B041F920F923D +:100730000FB60F9211242F933F938F939F93EF93B4 +:10074000FF93E0914501F0914601CF01019690930E +:100750004601809345010090470102C0F695E79558 +:100760000A94E2F7EF7380914401823019F4E03289 +:1007700051F404C0813039F4EF3329F480916F00D3 +:100780008D7F80936F00F0E0E45DFE4FE49121E007 +:1007900031E0E29FC001E39F900D112400904801D9 +:1007A00002C0969587950A94E2F790938D00809306 +:1007B0008C00FF91EF919F918F913F912F910F901E +:1007C0000FBE0F901F901895CF93DF93EC010E94FE +:1007D000021DBE0180E090E0DF91CF910C94FC18E7 +:1007E000462F50E04131510508F062C0DC01FA01AA +:1007F000EA5AFF4F0C94312312968C91882309F406 +:1008000057C081E090E007C012968C91882309F4CC +:100810004FC082E090E00E94E4034AC012968C919F +:10082000882309F445C084E090E0F5CF12968C91BE +:10083000882311F083E007C083E00EC012968C91EC +:10084000882349F084E00E94791946E064E083E05F +:100850000E9428082DC084E00E949A19F6CF1296B3 +:100860008C91882321F085E00E94791921C085E0D0 +:100870000E949A191DC012968C91882369F085EE0A +:100880000E94911184EE0E94911186EE0E949111B6 +:1008900087EE0E9491110CC085EE0E94591284EEE1 +:1008A0000E94591286EE0E94591287EE0E94591238 +:1008B00080E090E00895089581E008950C945C0430 +:1008C00008950F931F93CF93DF938C01FC01C08198 +:1008D000D181CE010E94351ABE010E940E05EC01A5 +:1008E000B8010E945E04882309F48DC0F80182815A +:1008F000882309F44AC08091540181111FC0C4317A +:10090000F0E5DF0709F051C00E94600481E08093A8 +:1009100054010E94381C909353018093520110920D +:100920004B0110924D0110924C0110924F01109208 +:100930004E01109251011092500165C080915201F8 +:10094000909153010E94441C883C910570F4809161 +:100950004B01E82FF0E0EE0FFF1FE45BFE4FD18369 +:10096000C0838F5F80934B014EC0C43880E5D807A9 +:1009700021F0C538D04501F13AC0F80182818823C1 +:1009800041F01092490182E01EC0C438E0E5DE0764 +:1009900059F580914901811106C086E20E949111AA +:1009A00086E20E94591282E01CC0C438F0E5DF07DD +:1009B00041F3C538D045D9F4F8018281882331F05C +:1009C00010924A0180E20E94A8121DC080914A0143 +:1009D000811106C087E20E94911187E20E9459129C +:1009E00080E20E94AF120FC0C538D04529F381E0E4 +:1009F0008093490180934A01C801DF91CF911F91F3 +:100A00000F910C943D0380E0DF91CF911F910F91E6 +:100A100008950C9490030C943B0308959CE0799FF7 +:100A2000F001112490E3899FE00DF11D1124E60FE0 +:100A3000F11DEE0FFF1FE459FE4F8591949108952B +:100A4000880F991FFC01E451F0408591949108951D +:100A5000880F991FFC01E459FE4F859194910895E8 +:100A60000F931F93CF93DF93EC01811521E392073E +:100A7000A0F5C11580E3D80708F0D7C0C83ED1055E +:100A8000D8F4C03ED10508F003C2C83AD10578F4C5 +:100A9000C53AD10508F06AC0C130D10509F463C078 +:100AA00008F4F3C1C430D10508F0F2C1EEC1CB3B6C +:100AB000D10508F466C0E9C1C11590E2D90708F074 +:100AC000AFC0C11521E0D20708F0E2C1C03FD10597 +:100AD00008F4DBC18E0110651BC2C03880E5D80761 +:100AE00000F5C03790E5D90708F0A3C0C11520E58F +:100AF000D20709F4ACC050F4CE01905480319F402D +:100B000008F0C3C1DF708E01106A02C2C13080E5F7 +:100B1000D80709F4AAC0C43190E5D90708F4ABC0DE +:100B2000B4C1C33820E5D20709F48EC050F4C138EF +:100B300090E5D90709F482C008F083C000E011ED08 +:100B4000E7C1C03181E5D80708F49FC1C11597E519 +:100B5000D90708F432C1CE0190578115904108F0B1 +:100B600094C1DF708FC101E010E0D2C1C53AD10558 +:100B700009F490C1C63AD10509F08FC102E810E42A +:100B8000C7C1C83AD10509F48BC1C93AD10509F4E6 +:100B90008AC1CA3AD10509F489C1CB3AD10509F411 +:100BA00088C1CC3AD10509F487C1CD3AD10509F401 +:100BB00086C1C03BD10509F485C1CE3AD10509F4FF +:100BC00084C1CF3AD10509F483C1C13BD10509F4F1 +:100BD00082C1C23BD10509F481C1C33BD10509F4EF +:100BE00080C1C43BD10509F47FC1C53BD10509F4DF +:100BF0007EC1C63BD10509F47DC1C73BD10509F4CF +:100C00007CC1C83BD10509F47BC1C93BD10509F4BE +:100C10007AC1CA3BD10509F479C100E014E478C176 +:100C2000CE019F700E94280574C1DD278E01106CD3 +:100C30006FC1CF70DD278E01146D6AC100E010ED29 +:100C400067C100E012ED64C100E013ED61C10E94D4 +:100C50003C158FEF94E32CE0815090402040E1F769 +:100C600000C000000E94931C53C18091DB01816091 +:100C70008093DB014DC10E94EF1C811102C00E94D4 +:100C8000D01C0E94071D90E09093FA018093F90117 +:100C9000C23080E5D80721F48091F901816086C0D7 +:100CA000C43090E5D90721F48091F90182607EC0BB +:100CB000C63020E5D20721F48091F901846076C026 +:100CC000C83080E5D80719F48091F90127C0CA30EF +:100CD00090E5D90721F48091F901806167C0CC309B +:100CE00020E5D20721F48091F90180625FC0CE3007 +:100CF00080E5D80721F48091F901806457C0C031A4 +:100D000090E5D90721F48091F90180684FC0C23184 +:100D100020E5D20729F48091F9018460886046C0FB +:100D2000C33080E5D80721F48091F9018E7F3EC061 +:100D3000C53090E5D90721F48091F9018D7F36C047 +:100D4000C73020E5D20721F48091F9018B7F2EC0B6 +:100D5000C93080E5D80719F48091F90126C0CB305D +:100D600090E5D90721F48091F9018F7E1FC0CD3025 +:100D700020E5D20721F48091F9018F7D17C0CF3093 +:100D800080E5D80721F48091F9018F7B0FC0C13134 +:100D900090E5D90721F48091F9018F7707C0C3311D +:100DA000D04531F48091F9018B7F877F8093F901E1 +:100DB0008091F9010E940B1DABC08D2F99278F7078 +:100DC000992781309105D9F49E012370332702C001 +:100DD000880F991F2A95E2F79C688E0144E0000F66 +:100DE000111F4A95E1F700271370802B912B53E0D8 +:100DF000CC0FDD1F5A95E1F7C076DD272FC082307A +:100E0000910531F4DC2FCC278E01016F106A80C070 +:100E10008330910569F4CE018370992701E010E0D9 +:100E200002C0000F111F8A95E2F7C8019C680FC02D +:100E300084309105B9F4CE018370992701E010E068 +:100E400002C0000F111F8A95E2F7C8019A6823E0DB +:100E5000CC0FDD1F2A95E1F7C07ED7708C010C2BDB +:100E60001D2B56C08530910531F4DC2FCC278E0127 +:100E7000046F106A4DC0069709F04AC0CF71DD2794 +:100E8000DC2FCC278E01106243C000E010E040C090 +:100E90008E013EC001E810E43BC003E810E438C016 +:100EA00002EE14E435C009EE14E432C00AEE14E494 +:100EB0002FC005EB14E42CC006EB14E429C007EBAB +:100EC00014E426C00CEC14E423C00DEC14E420C0A0 +:100ED00003E815E41DC00AE815E41AC002E915E4A8 +:100EE00017C004E915E414C001E216E411C003E2DE +:100EF00016E40EC004E216E40BC005E216E408C0D6 +:100F000006E216E405C007E216E402C00AE216E4AF +:100F1000C801DF91CF911F910F9108959CE0799FB7 +:100F2000F001112490E3899FE00DF11D1124E60FDB +:100F3000F11DEE0FFF1FE459FE4F85919491803E05 +:100F40009105E0F4803C910558F58133910509F451 +:100F50006FC048F48932910509F463C08A32910563 +:100F600009F46DC072C089339105E9F082389105AA +:100F7000D1F08533910509F44DC067C0833E9105DA +:100F800081F138F4803E9105B9F0823E9105D9F0A7 +:100F90005CC0863E910561F1873E9105A1F155C087 +:100FA0000E94200508952091F90120FD02C021FF33 +:100FB0004CC080EE90E049C08091F90180FFF9CFEC +:100FC00089E390E042C08091F90182FF0EC08091D8 +:100FD000F90184FF03C080E090E037C083EE90E029 +:100FE00034C08091F90182FFF2CF82EE90E02DC0F3 +:100FF0008091F90183FF0BC08091F90184FDEBCF53 +:1010000087EE90E022C08091F90183FFF5CF86EE54 +:1010100090E01BC08091F90185FF07C089E290E054 +:1010200014C08091F90185FFF9CF85E390E00DC0F0 +:101030008091F90186FF07C08AE290E006C08091A6 +:10104000F90186FFF9CF81E390E00E943005089511 +:10105000CF92DF92EF92FF920F931F9301E010E087 +:1010600020E030E06801790104C0CC0CDD1CEE1CEE +:10107000FF1C8A95D2F704C0000F111F221F331FD7 +:101080006A95D2F70C291D292E293F29C090BE014F +:10109000D090BF01E090C001F090C101C022D122E8 +:1010A000E222F322842FC016D106E206F30641F4B1 +:1010B0001F910F91FF90EF90DF90CF900C947919D2 +:1010C0001F910F91FF90EF90DF90CF900C949A19A1 +:1010D0000C943F03E82FF0E0EF5DFE4F8081E82F96 +:1010E000EF70F0E082958F7021E030E0A90102C03E +:1010F000440F551F8A95E2F740A308950F931F935D +:10110000CF93DF9385B7806885BF85B7806885BF3B +:10111000C3E0D0E001E010E0FE01EF5DFE4F808112 +:10112000E82FEF70F0E021A182958F70A80102C036 +:10113000440F551F8A95E2F7CA01822B81A38C2F99 +:101140000E946A08219740F78BE090E061E070E030 +:10115000FC01EB5EFE4F2081E22FEF70F0E042A138 +:1011600022952F70DB0102C0AA0FBB1F2A95E2F760 +:101170009D01242B22A3019758F7DF91CF911F9156 +:101180000F910C940905EF92FF920F931F93CF9349 +:10119000DF930DE511E0C3E0EE24E394F12CD5E0FC +:1011A0008C2F0E946A088BE090E040E050E0FC0148 +:1011B000EB5EFE4F6081E62FEF70F0E020A130E0A3 +:1011C00062956F7002C0359527956A95E2F720FD0C +:1011D00009C09701082E02C0220F331F0A94E2F7BC +:1011E000422B532B019718F7F801929182918F01AE +:1011F0008417950721F051834083D09300018C2FF1 +:101200000E946A08C15060F68091000187FD2CC0E1 +:101210008150809300018F3F39F08FE99FE0019763 +:10122000F1F700C0000020C080915B0190915C014B +:1012300090936401809363018091590190915A01C8 +:1012400090936201809361018091570190915801C0 +:101250009093600180935F018091550190915601B8 +:1012600090935E0180935D010E940B0581E0DF9108 +:10127000CF911F910F91FF90EF900895E82FF0E02C +:10128000EE0FFF1FE35AFE4F80819181089508956C +:101290000F931F93CF9305E611E0C0E0F801929100 +:1012A00082918F010E94B01BC80FF1E00D351F071E +:1012B000A9F78C2FCF911F910F91089580917501FF +:1012C0000895CF93DF9300D01F92CDB7DEB79C0176 +:1012D0008091F001843019F593E099833B832A8350 +:1012E0009093E9008FEF9091E800815095FD06C042 +:1012F00095ED9A95F1F700008111F5CF8091E80006 +:1013000085FF0DC040E050E063E070E0CE01019643 +:101310000E94C20B8091E8008E778093E8000F90C6 +:101320000F900F90DF91CF910895CF93DF9300D06E +:101330001F92CDB7DEB72091F001243021F522E0D5 +:1013400029839B838A8383E08093E9008FEF9091C8 +:10135000E800815095FD06C095ED9A95F1F70000E3 +:101360008111F5CF8091E80085FF0DC040E050E08D +:1013700063E070E0CE0101960E94C20B8091E8000C +:101380008E778093E8000F900F900F90DF91CF91B0 +:1013900008952091F0012430F1F422E02093E90037 +:1013A0002FEF3091E800215035FD06C035ED3A951C +:1013B000F1F700002111F5CF2091E80025FF0BC0C7 +:1013C00040E050E065E070E00E94C20B8091E800D0 +:1013D0008E778093E8000895CF93DF93EC0190918E +:1013E000F001943009F046C080910B018823D9F0B8 +:1013F00080910C018823B9F09093E9008FEF9091D0 +:10140000E800815095FD06C095E19A95F1F700003E +:101410008111F5CF8091E80085FF2CC040E050E0BD +:1014200060E170E017C081E08093E9008FEF909158 +:10143000E800815095FD06C095ED9A95F1F7000002 +:101440008111F5CF8091E80085FF14C040E050E0A5 +:1014500068E070E0CE010E94C20B8091E8008E77B8 +:101460008093E80080E1FE01A5E6B1E001900D92D5 +:101470008A95E1F7DF91CF9108958091EF01811175 +:1014800009C00E94570D0E94B40D8091E200846053 +:101490008093E20008951092EF0108950895089551 +:1014A0000C94FB1B42E061EC81E00E94D10C42E015 +:1014B00061EC82E00E94D10C42E061EC83E00E948A +:1014C000D10C42E161EC84E00C94D10C8091F201EA +:1014D000833009F455C030F4813071F0823009F462 +:1014E0008EC008958A3009F47AC08B3009F460C048 +:1014F000893009F09CC020C08091F101813A09F047 +:1015000096C08091E800877F8093E8008091F50184 +:101510009091F601892B21F460E185E691E003C00A +:1015200060E080E090E070E00E940D0C8091E800A7 +:101530008B778093E80008958091F101813209F062 +:1015400076C08091F5019091F601009719F003970C +:1015500009F06DC08091E800877F8093E80080915A +:10156000E80082FD05C08091F0018111F8CF5FC0D5 +:101570008091F100809375018091E8008B7753C0D2 +:101580008091F101813A09F052C08091F50190916A +:10159000F601892B09F04BC08091E800877F80938A +:1015A000E8008091E80080FFFCCF80910B0136C0FD +:1015B0008091F1018132D9F58091F5019091F60188 +:1015C000892BA9F58091E800877F8093E8000E942D +:1015D000060D8091F30180930B010C943C158091D2 +:1015E000F101813221F58091E800877F8093E80046 +:1015F0000E94060D8091F4018093760108958091F8 +:10160000F101813AA1F48091E800877F8093E8009E +:101610008091E80080FFFCCF809176018093F100FB +:101620008091E8008E778093E8000C94060D089571 +:1016300084B7877F84BF88E10FB6F89480936000F9 +:10164000109260000FBE90E080E80FB6F89480938F +:101650006100909361000FBE0E94A9100E94570D77 +:101660000E94B40D8091E20084608093E20078943F +:101670000E943A100E94AB1081E091E00E94551048 +:101680008091F001853069F40E94BC1B8091EE01CD +:101690008823B1F30E94EA1B882391F30E94AC0BCC +:1016A000EFCF0E94B310ECCF292F33272330310521 +:1016B000C9F064F42130310581F02230310509F0A0 +:1016C00043C08DE690E028E634E042C02132310587 +:1016D000F1F02232310541F137C082E190E025ED91 +:1016E00034E036C099278130910541F08230910570 +:1016F00041F0892B49F5E4E6F4E005C0E6E3F4E0C7 +:1017000002C0ECE0F4E0849190E09F0121C06430DD +:10171000D8F4E62FF0E0EE0FFF1FEF5CFE4F2081C4 +:10172000318189E090E014C0643070F470E0FB0116 +:10173000EE0FFF1FE75DFE4F20813181FB01EB5D66 +:10174000FE4F808190E004C080E090E020E030E037 +:10175000FA0131832083089580E189BD82E189BD4A +:1017600009B400FEFDCF8091D8008F7D8093D80012 +:101770008091E00082608093E0008091E00081FD34 +:10178000FCCF0895CF92DF92EF92FF920F931F93B9 +:10179000CF93DF93EC018B016A010E94250D81112B +:1017A00033C0C114D10439F0F60180819181081B46 +:1017B000190BC80FD91FE12CF12C0115110519F1D6 +:1017C0008091E80085FD16C08091E8008E778093B7 +:1017D000E800C114D10449F0F60180819181E80E3E +:1017E000F91EF182E08285E00FC00E94250D88235A +:1017F00021F30AC089918093F10001501109FFEF94 +:10180000EF1AFF0ADACF80E0DF91CF911F910F919D +:10181000FF90EF90DF90CF9008952091F7013091E5 +:10182000F8012617370748F06115710539F4209142 +:10183000E8002E772093E80001C0B90140E061156F +:101840007105A9F12091F001222309F443C025304C +:1018500009F442C02091E80023FD40C02091E80037 +:1018600022FD32C02091E80020FFE9CF4091F30033 +:101870002091F20030E0342BFC01CF01611571059D +:1018800059F02830310540F481918093F100615086 +:1018900071092F5F3F4FF1CF41E02830310509F04A +:1018A00040E02091E8002E772093E800C8CF411156 +:1018B000C9CF0AC08091F001882361F0853061F0C2 +:1018C0008091E80083FD0AC08091E80082FFF2CF9A +:1018D00080E0089582E0089583E0089581E008950E +:1018E0002091F7013091F8012617370748F061156C +:1018F000710539F42091E8002E772093E80001C0AB +:10190000B901FC0120E06115710591F18091F001B0 +:10191000882309F440C0853009F43FC08091E80075 +:1019200083FD3DC08091E80082FD2FC08091E800DA +:1019300080FFE9CF2091F3008091F20090E0922B9C +:101940006115710559F08830910540F42491209378 +:10195000F1003196615071090196F2CF21E00897AC +:1019600009F020E08091E8008E778093E800CBCFEB +:101970002111CCCF0AC08091F001882361F085301D +:1019800061F08091E80083FD0AC08091E80082FF49 +:10199000F2CF80E0089582E0089583E0089581E029 +:1019A0000895982F973058F59093E900981739F0DB +:1019B0007091EC002091ED005091F00003C0242FB5 +:1019C000762F50E021FF19C03091EB003E7F30931D +:1019D000EB003091ED003D7F3093ED003091EB0056 +:1019E00031603093EB007093EC002093ED00509346 +:1019F000F0002091EE0027FF07C09F5FD3CF8F70CC +:101A00008093E90081E0089580E008958091F101DC +:101A100087FF11C08091E80082FD05C08091F00130 +:101A20008111F8CF11C08091E8008B770BC08091B5 +:101A3000F001882349F08091E80080FFF8CF809181 +:101A4000E8008E778093E80008952091E4003091BB +:101A5000E50095E64091EC00842F817040FF22C0A4 +:101A60008091E80080FD1CC08091F001882391F0F6 +:101A7000853091F08091EB0085FD10C04091E4002D +:101A80005091E5004217530729F39A01915011F73D +:101A900084E0089582E0089583E0089581E0089548 +:101AA00080E008954091E80042FFDECF08950E9453 +:101AB000C50D0E94CD0DE0EEF0E080818160808355 +:101AC000E8EDF0E080818F77808319BCA7EDB0E06E +:101AD0008C918E7F8C9380818F7E80831092EF011A +:101AE00008950F931F93CF93DF930E94C50D0E941B +:101AF000CD0DC8EDD0E088818F778883888180689C +:101B0000888388818F7D888319BC1092F0011092A0 +:101B1000EC011092EE011092ED0100EE10E0F801E0 +:101B200080818B7F808388818160888342E060E050 +:101B300080E00E94D10CE1EEF0E080818E7F808316 +:101B4000E2EEF0E080818160808380818860808324 +:101B5000F80180818E7F8083888180618883DF9116 +:101B6000CF911F910F910895E8EDF0E080818F7E75 +:101B70008083E7EDF0E080818160808384E082BF34 +:101B800081E08093EF010C94710DE8EDF0E080812D +:101B90008E7F80831092E20008951092DA001092F6 +:101BA000E10008951F920F920FB60F9211242F9308 +:101BB0003F934F935F936F937F938F939F93AF93D5 +:101BC000BF93EF93FF938091E10082FF0BC0809160 +:101BD000E20082FF07C08091E1008B7F8093E100EB +:101BE0000E9439108091DA0080FF1FC08091D800D8 +:101BF00080FF1BC08091DA008E7F8093DA00809195 +:101C0000D90080FF0DC080E189BD82E189BD09B4A2 +:101C100000FEFDCF81E08093F0010E943D0A05C0E7 +:101C200019BC1092F0010E944B0A8091E10080FFE4 +:101C300019C08091E20080FF15C08091E2008E7F84 +:101C40008093E2008091E20080618093E2008091C5 +:101C5000D80080628093D80019BC85E08093F001A1 +:101C60000E944F0A8091E10084FF30C08091E20021 +:101C700084FF2CC080E189BD82E189BD09B400FEEA +:101C8000FDCF8091D8008F7D8093D8008091E100B6 +:101C90008F7E8093E1008091E2008F7E8093E2004E +:101CA0008091E20081608093E2008091EC018823C2 +:101CB00011F084E007C08091E30087FD02C081E05D +:101CC00001C083E08093F0010E94500A8091E100FE +:101CD00083FF29C08091E20083FF25C08091E1004D +:101CE000877F8093E10082E08093F0011092EC0105 +:101CF0008091E1008E7F8093E1008091E2008E7FF1 +:101D00008093E2008091E20080618093E20042E0F3 +:101D100060E080E00E94D10C8091F00088608093A8 +:101D2000F0000E944E0AFF91EF91BF91AF919F91F9 +:101D30008F917F916F915F914F913F912F910F9074 +:101D40000FBE0F901F9018951F920F920FB60F9213 +:101D500011242F933F934F935F936F937F938F93B0 +:101D60009F93AF93BF93CF93DF93EF93FF93C09174 +:101D7000E900CF708091EC00D82FD17080FDD0E8C1 +:101D80001092E9008091F000877F8093F0007894B2 +:101D90000E94E80E1092E9008091F0008860809324 +:101DA000F000CD2BCF70C093E900FF91EF91DF9150 +:101DB000CF91BF91AF919F918F917F916F915F91E3 +:101DC0004F913F912F910F900FBE0F901F9018953C +:101DD0001F93CF93DF93CDB7DEB7AA970FB6F894D2 +:101DE000DEBF0FBECDBFE1EFF1E088E08E0F909136 +:101DF000F10091938E13FBCF0E94660A8091E80058 +:101E000083FF1FC18091F1019091F201492F50E0B1 +:101E10004A30510508F015C1FA01E959FF4F0C94F9 +:101E20003123803881F0823809F00BC18091F501AF +:101E30008F708093E9008091EB0085FB882780F903 +:101E40001092E90006C08091ED019091EE01911190 +:101E500082609091E800977F9093E8008093F10072 +:101E60001092F100C8C0282F2D7F09F0EAC0882306 +:101E700019F0823061F0E5C08091F301813009F002 +:101E8000E0C0933009F080E08093EE012BC0809198 +:101E9000F301811127C08091F5018F7009F4D1C041 +:101EA0008093E9002091EB0020FF1CC0933021F4C7 +:101EB0008091EB00806214C09091EB009061909350 +:101EC000EB0021E030E0A90102C0440F551F8A95C4 +:101ED000E2F74093EA001092EA008091EB008860FC +:101EE0008093EB001092E9008091E800877F86C024 +:101EF0008111A7C01091F3011F778091E3008078D2 +:101F0000812B8093E3008091E800877F8093E80035 +:101F10000E94060D8091E80080FFFCCF8091E300D5 +:101F200080688093E300111102C082E001C083E069 +:101F30008093F00186C08058823008F082C0809182 +:101F4000F3019091F4018C3D53E0950779F583E01E +:101F50008A838AE289834FB7F894DE01139620E0E2 +:101F60003EE051E2E32FF0E050935700E49120FF70 +:101F700003C0E295EF703F5FEF708E2F90E0EA3084 +:101F800010F0C79601C0C0968D939D932F5F2431AA +:101F900049F74FBF8091E800877F8093E8006AE2AD +:101FA00070E0CE0101960E940D0C14C0AE014F5F8F +:101FB0005F4F6091F5010E94540BBC01009709F43A +:101FC00040C09091E800977F9093E80089819A81C2 +:101FD0000E94700C8091E8008B778093E80031C0FC +:101FE000803879F58091E800877F8093E8008091C0 +:101FF000EC018093F1008091E8008E778093E800F7 +:102000000E94060D1EC081111CC09091F3019230F8 +:10201000C0F48091E800877F8093E8009093EC0102 +:102020000E94060D8091EC01811106C08091E300B1 +:1020300087FD02C081E001C084E08093F0010E942E +:10204000520A8091E80083FF0AC08091E800877FF0 +:102050008093E8008091EB0080628093EB00AA9669 +:102060000FB6F894DEBF0FBECDBFDF91CF911F91A9 +:1020700008950895CF938091F0018823A1F0C09135 +:10208000E900CF709091EC00892F817090FD80E87D +:10209000C82B1092E9008091E80083FD0E94E80EB1 +:1020A000CF70C093E900CF91089590937C01809305 +:1020B0007B010895E0917B01F0917C01309721F044 +:1020C0000190F081E02D099480E00895E0917B017A +:1020D000F0917C01309721F00280F381E02D09948A +:1020E0000895E0917B01F0917C01309721F004800C +:1020F000F581E02D099408952091790130917A01BC +:102100008217930771F090937A0180937901E0919F +:102110007B01F0917C01309721F00680F781E02D62 +:1021200009940895209177013091780182179307DF +:1021300071F09093780180937701E0917B01F091A9 +:102140007C01309721F00084F185E02D09940895F9 +:1021500008950C94A8100E942F1C0E947E080E94D3 +:10216000B51C0C9460215F926F927F928F929F9228 +:10217000AF92BF92CF92DF92EF92FF920F931F9395 +:10218000CF93DF9300D000D01F92CDB7DEB70E946F +:10219000C30896E8C92E91E0D92E03E010E0AA24E6 +:1021A000A394B12C502E802F0E943E094C01F601C1 +:1021B000729062906F016826792661147104A1F40F +:1021C0000150110978F78FEF89838A831B820E945F +:1021D000381C8160782F9D838C8349815A816B8163 +:1021E0008D810E94631138C08091DB0181FD0E94C6 +:1021F00047092BE030E07501022E02C0EE0CFF1CF7 +:102200000A94E2F7C70186219721892B09F12983D6 +:102210005A828E209F2091E0892809F490E09B83C8 +:102220000E94381C8160782F9D838C8349815A815C +:102230006B818D810E946311000F111FF801E2581C +:10224000FE4F80819181E826F926F182E08204C068 +:102250002150310980F6B4CF0E94931E10917D0168 +:102260000E945A101817D1F00E945A1080937D01D5 +:102270000F900F900F900F900F90DF91CF911F91C3 +:102280000F91FF90EF90DF90CF90BF90AF909F9015 +:102290008F907F906F905F900C9468080F900F90D4 +:1022A0000F900F900F90DF91CF911F910F91FF90A2 +:1022B000EF90DF90CF90BF90AF909F908F907F90E6 +:1022C0006F905F900895CF93DF93CDB7DEB72B97D4 +:1022D0000FB6F894DEBF0FBECDBF4F835887698716 +:1022E0007A878B87DE01119686E0FD0111928A952F +:1022F000E9F785E0FE01379601900D928A95E1F7A6 +:1023000049815A816B817C818D819E810E94DA177F +:102310002B960FB6F894DEBF0FBECDBFDF91CF91E5 +:102320000895CF93882309F4C2C0C82F823859F486 +:102330000E945A1081FDBBC089E30E94B41A0E941A +:10234000811B89E30CC0833879F40E945A1080FD08 +:10235000AEC083E50E94B41A0E94811B83E50E94EF +:10236000F61ACF910C94811B843859F40E945A10AC +:1023700082FD9DC087E40E94B41A0E94811B87E4FD +:10238000EECF8CEF8C0F813A48F48C2F0E94C8203E +:1023900081118DC08C2F0E94B41AE3CF80E28C0F84 +:1023A000883048F4C77081E001C0880FCA95EAF709 +:1023B0000E943A1BD6CF8BE58C0F833078F4C53A58 +:1023C00029F0C63A31F083E890E005C081E890E05A +:1023D00002C082E890E0CF910C947C1088E58C0FCD +:1023E000833108F064C0C83A39F1C93A41F1CA3AB8 +:1023F00049F1CB3A51F1CC3A59F1CD3A61F1C03BB8 +:1024000069F1CE3A71F1CF3A79F1C13B81F1C23B2A +:1024100089F1C33B91F1C43B99F1C53BA1F1C63BA6 +:10242000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B06 +:10243000C9F180E090E038C082EE90E035C089EECE +:1024400090E032C08AEE90E02FC085EB90E02CC087 +:1024500086EB90E029C087EB90E026C08CEC90E002 +:1024600023C08DEC90E020C083E891E01DC08AE895 +:1024700091E01AC082E991E017C084E991E014C0AC +:1024800081E292E011C083E292E00EC084E292E029 +:102490000BC085E292E008C086E292E005C087E2C8 +:1024A00092E002C08AE292E0CF910C949210CF9118 +:1024B0000895882309F44BC0823859F40E945A10B9 +:1024C00081FF45C089E30E94B41A0E94811B89E301 +:1024D0000CC0833871F40E945A1080FF38C083E525 +:1024E0000E94B41A0E94811B83E50E94F61A0C9484 +:1024F000811B843859F40E945A1082FF28C087E457 +:102500000E94B41A0E94811B87E4EFCF9CEF980FC2 +:10251000913A58F390E2980F983050F4877091E018 +:1025200001C0990F8A95EAF7892F0E94401BDFCFDF +:102530009BE5980F933020F480E090E00C947C10A1 +:10254000885A833120F480E090E00C949210089532 +:10255000882321F00E943A1B0C94811B0895882344 +:1025600021F00E94401B0C94811B08957F928F9252 +:102570009F92AF92BF92CF92DF92EF92FF920F9312 +:102580001F93CF93DF931F92CDB7DEB77C01C62E8A +:10259000772EFC01058102950F70128111110E94A6 +:1025A000571B0E94AD1A882379F0112369F080E24D +:1025B0008C0D883048F082E00E94961A0E94AD1A75 +:1025C00091E0D82ED92601C0D12CE72DE295EF70ED +:1025D000F0E0EF58FF4F0C943123872D807F072DBB +:1025E0000F70882311F00295007F112389F00023DA +:1025F00009F499C180E28C0D883020F4802F0E946C +:102600003A1B03C0802F0E944A1B0E94811B8BC172 +:102610008C2D0E945912002309F4C3C180E28C0D55 +:10262000883020F4802F0E94401B03C0802F0E941E +:10263000501B0E94811BB5C1872D807F972D9F70F5 +:10264000803211F4892F03C0892F8295807FCC209E +:1026500021F0F1E0CF16A1F01DC0112339F00023C5 +:1026600019F1013009F50E946A1B9BC1002319F082 +:10267000013009F496C189830E946D1B898110C1C4 +:10268000112321F0063008F08CC10EC0053008F08F +:1026900088C106C1112359F0002331F0F70195815B +:1026A00090FF41C19F7095830E94A8127AC10023B8 +:1026B00009F4F6C03EC1872D86958695837090E01B +:1026C000009719F0019761F06CC1112321F08C2D56 +:1026D000972D937002C080E090E00E947C1061C151 +:1026E000112321F08C2D972D937002C080E090E093 +:1026F0000E94921056C18C2D112319F00E949B1D2F +:1027000002C00E94031E0E94881E4BC1872D837049 +:1027100009F052C0111145C18C2D829586958770A4 +:10272000880F880F9C2D9F70892E912CA12CB12C85 +:10273000082E04C0880C991CAA1CBB1C0A94D2F752 +:10274000C4FE14C00FE010E020E030E0B901A801A1 +:1027500004C0440F551F661F771F8A95D2F7CB011F +:10276000BA01609570958095909503C060E070E027 +:10277000CB01272D26952695237030E02230310598 +:1027800069F02330310589F0682979298A299B2944 +:102790002130310571F00E94221903C1682979297D +:1027A0008A299B290E943E19FCC00E942219C5015A +:1027B000B4010E940619F5C0112319F0872D81700C +:1027C00001C08695882309F4ECC08C2D82958695EE +:1027D0008770880F880F9C2D9F70892E912CA12CBB +:1027E000B12C082E04C0880C991CAA1CBB1C0A948E +:1027F000D2F7C4FE14C00FE010E020E030E0B901D1 +:10280000A80104C0440F551F661F771F8A95D2F791 +:10281000CB01BA01609570958095909503C060E0FA +:1028200070E0CB01272D269526952370422F50E08E +:102830004230510569F04330510589F06829792902 +:102840008A299B294130510571F00E94FC19A9C0C9 +:10285000682979298A299B290E94181AA2C00E94F6 +:10286000FC19C501B4010E94E0199BC08C2D90E0B9 +:10287000FC01E05EF109E531F10508F050C0EF57C9 +:10288000FF4F0C9431230C2D0F70872D8F71112366 +:1028900021F00E947919802F07CF0E949A19802F6A +:1028A0000E94AF127EC0112341F0053008F079C0BC +:1028B000872D8F710E94BF1974C0063008F071C057 +:1028C000F7CF112339F0872D8F710E94791969C0D4 +:1028D0001123C9F3872D8F710E949A1962C01123A9 +:1028E00029F0872D8F710E9464195BC00E945A19CC +:1028F00058C0112351F0172D1F71812F0E94791993 +:1029000063E0812F0E948D1A4CC081E00E94961ACC +:10291000023008F446C082E00E94961A42C0112399 +:1029200031F0002381F28C2D0E9491113AC00023D6 +:1029300089F28C2D0E94591234C0472D4F706C2D96 +:10294000C7010E94F0030E947E182BC0111129C0FC +:10295000472D4F7050E042305105B9F04CF441150D +:10296000510581F041305105E1F40E94882119C0E0 +:102970004330510569F04430510599F48C2D0E9483 +:10298000DA210FC00E9471210CC00E94A42109C04D +:102990000E94B72106C0472D4F706C2DC7010E94C1 +:1029A0000D05DD20F9F00E94891A80FD1BC0F7019A +:1029B00012820E94831A0E947919C7010E94011590 +:1029C0000E94831A0F90DF91CF911F910F91FF907A +:1029D000EF90DF90CF90BF90AF909F908F907F90BF +:1029E0000C949A190F90DF91CF911F910F91FF9046 +:1029F000EF90DF90CF90BF90AF909F908F907F909F +:102A000008950F931F93CF93DF93EC0188819981F1 +:102A10002B813C81232BB9F09F3F11F48F3F99F01C +:102A2000CE010E946104882371F0688179818A81D6 +:102A30000E947F1A8C010E94341A0E94FB18B80170 +:102A4000CE010E94B612DF91CF911F910F91089590 +:102A50000E94571B0E94671B0E942C1B0E94811B17 +:102A60000E94391F0E94881E80E090E00E947C1026 +:102A700080E090E00C9492100E94471B0C94281563 +:102A80000E94741A292F22952F7030E02C303105C6 +:102A90004CF42A3031056CF42250310922303105D2 +:102AA000A8F407C02C30310569F02F30310551F002 +:102AB0000DC0803F69F018F4803E40F409C0843FA7 +:102AC00029F406C093FB882780F9089580E00895D3 +:102AD00081E00895CF93DF9300D000D01F92CDB74F +:102AE000DEB70F900F900F900F900F90DF91CF9166 +:102AF0000895CF93DF9300D000D000D0CDB7DEB7DC +:102B000026960FB6F894DEBF0FBECDBFDF91CF91F2 +:102B100008951F93CF93DF93C091860116E08091B3 +:102B20008701C81799F0D0E01C9FF0011D9FF00DA0 +:102B30001124E857FE4F4081518162817381848165 +:102B400095810E9479152196C770E9CFDF91CF91C9 +:102B50001F9108954091B8015091B9016091BA0157 +:102B60007091BB018091BC019091BD010C947915CD +:102B70008091BD0182958F7009F054C08091BA0197 +:102B8000882309F44FC080918601A091870160914C +:102B9000B8017091B9014091BB015091BC01B6E000 +:102BA0008A1709F43FC090E041155105C1F17F3FFC +:102BB00011F46F3FA1F1B89FF001B99FF00D1124FE +:102BC000E857FE4F218172132AC02081621327C06B +:102BD0002281211124C0238134812417350710F468 +:102BE00021503109241B350B283C3105C0F42091BC +:102BF000BD012F7020612093BD0126E0289FF001C8 +:102C0000299FF00D1124E357FE4F80818F70806162 +:102C1000808388EB91E00E9401150C948915019640 +:102C20008770BECF0895CF92DF92EF92FF920F93FD +:102C30001F93CF93DF93CDB7DEB762970FB6F894AB +:102C4000DEBF0FBECDBF8C0185E0F801DE011D9611 +:102C500001900D928A95E1F7D8014C9111965C9103 +:102C6000119712966C9112971396CD90DC90149751 +:102C70003091B8017091B9018091BB019091BC0174 +:102C8000009709F46BC17F3F19F43F3F09F466C117 +:102C9000E090BA01EE2009F4C0C02091BD01C81631 +:102CA000D90628F0F601E81BF90BCF0104C0809586 +:102CB00090958C0D9D1DFF24F394883C910578F030 +:102CC000F12C207F09F0C6C07C2DD98AC88A898959 +:102CD0000E946A1588EB91E00E940115B1C0822F15 +:102CE000807F09F046C0751314C0341312C06111FF +:102CF00010C02F7020612093BD010E94AA1588EB9F +:102D000091E00E9401158091BD01D80115968C9328 +:102D10002EC0CD2819F15F3F11F44F3FF9F0F62E88 +:102D200061111CC0809186012091870136E08217D5 +:102D300009F45AC090E0389FF001399FF00D11243A +:102D4000E857FE4F7181571306C07081471303C0C7 +:102D50007281711103C001968770E9CFF62E662348 +:102D600009F418C18091BD0181608093BD01F12CEF +:102D700011C1751308C0341306C0611104C08091DD +:102D8000BD01D801C3C04D875E878D859E856A8B46 +:102D90000E9440156A898823E1F16623D1F12091D0 +:102DA000BD01822F82958F7090E0029774F0809120 +:102DB000B8019091B90198878F831986DB86CA86FE +:102DC0002C87CE0107960E94011586E0F801A8EB3A +:102DD000B1E001900D928A95E1F70E94B8150E942A +:102DE000AA15FF24F394D6C04D875E878D859E85F6 +:102DF0000E94741A292F22952F7030E0223031055D +:102E00000CF0BCC09F7009F0B6C0805E883008F43A +:102E1000C1C0C8010E940115E4CFC816D90608F444 +:102E200053C0F601E81BF90BCF01883C910508F46B +:102E300050C0F12C7C2DD98AC88A89890E946A15D4 +:102E4000E8EBF1E086E0DF011D928A95E9F70E9448 +:102E5000AA15A0C0751314C0341312C0611110C09C +:102E60008091BD01F8018583C8010E94011586E0AB +:102E7000E8EBF1E0DF011D928A95E9F7FE2C8AC0AC +:102E80004D875E878D859E856A8B0E9440156A8975 +:102E9000882309F4BECF662309F4BBCF2091BD017E +:102EA000822F82958F7090E002970CF48ECF8091E4 +:102EB000B8019091B9019A8389831B82DD82CC820B +:102EC0002E83CE0101967FCF809590958C0D9D1D10 +:102ED000ACCFF62E662309F49CCF75132EC03413A5 +:102EE0002CC02091BD0120FD1FC0822F82958F70C4 +:102EF000D9F0D80115962C9315978F3049F08F5F34 +:102F0000982F9295907F822F8F70892B15968C9396 +:102F1000C8010E94011586E0F801A8EBB1E001901C +:102F20000D928A95E1F793CF86E0F801A8EBB1E026 +:102F300001900D928A95E1F72DC04D875E878D85B2 +:102F40009E850E944015811140CF8091BD01816016 +:102F50008093BD01C8010E9401151CC0662309F4BD +:102F600058CF4D875E878D859E850E9440158823AA +:102F700009F44FCF2ACF811148CF0CC0243031053E +:102F80000CF047CF9F7009F440CFF8019581907FF6 +:102F900009F03BCF8F2D62960FB6F894DEBF0FBEBF +:102FA000CDBFDF91CF911F910F91FF90EF90DF90F8 +:102FB000CF9008951F93CF93DF93CDB7DEB72C97B3 +:102FC0000FB6F894DEBF0FBECDBF4F835887698719 +:102FD0007A878B879C87CE0107960E9413168823D9 +:102FE00069F08F8198852A853B85232BF1F19F3FDE +:102FF00009F063C08F3F09F060C037C086E0FE0172 +:103000003796DE01119601900D928A95E1F76F8156 +:103010007885EA85FB85309741F17F3F11F46F3F5A +:1030200021F12091870130E0C9010196877099272D +:103030004091860150E08417950709F447C06983E1 +:103040007A83FD83EC8396E0929FD001939FB00D2D +:103050001124A857BE4FFE01319601900D929A950A +:10306000E1F7809387010E94891516E0809186011F +:10307000909187018917C1F1189FC00111248857C9 +:103080009E4F0E941316882379F1E09186011E9FBE +:10309000F0011124E857FE4F408151816281738114 +:1030A000848195810E9479158091860190E0019636 +:1030B0008770992780938601D9CF4F81588569857C +:1030C0007A858B859C850E947915CFCF0E943C150F +:1030D0001092870110928601E8EBF1E086E0DF01B3 +:1030E0001D928A95E9F7C1CF2C960FB6F894DEBFF2 +:1030F0000FBECDBFDF91CF911F910895EF92FF9248 +:103100000F931F93CF93DF938C01009709F46CC04A +:10311000F12CEE24E394E8012196F80184918437A0 +:1031200040F4843008F051C0813081F0823019F1D0 +:103130005BC0853709F444C0A8F19CE7980F90372D +:1031400008F052C08F770E94591241C00E5F1F4F86 +:10315000FE01C49180E28C0F883048F4C7708E2D38 +:1031600001C0880FCA95EAF70E945A1B14C08C2F21 +:103170000E9491112DC00E5F1F4FFE01C49180E28D +:103180008C0F883058F4C7708E2D01C0880FCA95F7 +:10319000EAF70E94601B0E94811B1AC08C2F0E94BC +:1031A000591216C00E5F1F4FFE01C491CC2381F04F +:1031B0008FE99FE00197F1F700C00000C150F6CF02 +:1031C0000E5F1F4FFE01F49003C00E9491118E010B +:1031D0008F2D882309F49FCFEFE9FFE03197F1F7B6 +:1031E00000C000008150F5CFDF91CF911F910F916A +:1031F000FF90EF90089508956093C2017093C3010A +:103200008093C4019093C5010C9428150F931F93CC +:103210000091C2011091C3012091C4013091C501F8 +:10322000DC01CB01802B912BA22BB32B8093C2010D +:103230009093C301A093C401B093C5011F910F9156 +:103240000C9428150F931F930091C2011091C30194 +:103250002091C4013091C501DC01CB018023912371 +:10326000A223B3238093C2019093C301A093C4010E +:10327000B093C5011F910F910C9428150F931F93C4 +:103280000091C2011091C3012091C4013091C50188 +:10329000DC01CB0180279127A227B3278093C201AD +:1032A0009093C301A093C401B093C5011F910F91E6 +:1032B0000C9428151092BE011092BF011092C0010B +:1032C0001092C1010C94281541E050E060E070E0DC +:1032D00004C0440F551F661F771F8A95D2F740938D +:1032E000BE015093BF016093C0017093C1010C9463 +:1032F000281541E050E060E070E004C0440F551F25 +:10330000661F771F8A95D2F78091BE019091BF0109 +:10331000A091C001B091C101482B592B6A2B7B2B86 +:103320004093BE015093BF016093C0017093C101EF +:103330000C94281541E050E060E070E004C0440FB8 +:10334000551F661F771F8A95D2F740955095609557 +:1033500070958091BE019091BF01A091C001B09184 +:10336000C101482359236A237B234093BE01509314 +:10337000BF016093C0017093C1010C94281541E016 +:1033800050E060E070E004C0440F551F661F771FD7 +:103390008A95D2F78091BE019091BF01A091C001A2 +:1033A000B091C101482759276A277B274093BE0166 +:1033B0005093BF016093C0017093C1010C94281514 +:1033C0000F931F930091BE011091BF012091C00186 +:1033D0003091C101DC01CB01802B912BA22BB32BAF +:1033E0008093BE019093BF01A093C001B093C1012F +:1033F0001F910F910C9428150F931F930091BE01FC +:103400001091BF012091C0013091C101DC01CB01BD +:1034100080239123A223B3238093BE019093BF0105 +:10342000A093C001B093C1011F910F910C94281576 +:103430000F931F930091BE011091BF012091C00115 +:103440003091C101DC01CB0180279127A227B3274E +:103450008093BE019093BF01A093C001B093C101BE +:103460001F910F910C9428150895CF92DF92EF923F +:10347000FF920F931F93CF93DF938C01C090C201F3 +:10348000D090C301E090C401F090C5018091BE01CD +:103490009091BF01A091C001B091C101C82AD92A61 +:1034A000EA2AFB2ACFE1D0E0D701C6010C2E04C0E6 +:1034B000B695A795979587950A94D2F780FF06C091 +:1034C000B8018C2F0E948E07019721F4219760F795 +:1034D00080E001C08C2FDF91CF911F910F91FF9061 +:1034E000EF90DF90CF900895CF93DF93EC010E948F +:1034F000351ABE010E948E07DF91CF910895CB014E +:103500000E94741A08958091C601859585958595C8 +:1035100008958091C6018770089598E0899F900171 +:103520001124262B2093C6010C9479192091C601F1 +:10353000809582238093C601982F977069F430E0BC +:10354000482F552747FD50952417350729F08595B5 +:10355000859585950C949A1908959091C601977058 +:1035600081E009F480E0089590910B01992321F006 +:1035700090910C01911109C020910D0130910E0123 +:10358000F90132969FEF40E01FC0982F96959695CF +:1035900096959F3050F5E0910D01F0910E01E90FE5 +:1035A000F11D877021E030E0A90102C0440F551FD2 +:1035B0008A95E2F7CA019181892B818308959F3F03 +:1035C00039F04F5F4E3041F051915813F8CF0DC094 +:1035D0005111F7CF942FF5CF9F3F39F0F901E90F43 +:1035E000F11D97FDFA9582830895089590910B013E +:1035F000992321F090910C01911109C020910D01A6 +:1036000030910E01F9013296205F3F4F1FC0982F75 +:103610009695969596959F30F0F4E0910D01F09176 +:103620000E01E90FF11D877021E030E0A90102C011 +:10363000440F551F8A95E2F7CA018095918189232D +:10364000818308953196E217F30729F0908198134A +:10365000F9CF1082F7CF089581E090E0E0910D015D +:10366000F0910E01E80FF91F10820196803191054B +:10367000A9F708959091DA01892B8093DA010895D2 +:1036800080959091DA0189238093DA010895109250 +:10369000DA0108959091D901892B8093D901089579 +:1036A00080959091D90189238093D9010895109232 +:1036B000D90108959091D801892B8093D80108955C +:1036C00080959091D80189238093D8010895109214 +:1036D000D80108958093C70108951092C7010895F5 +:1036E00080910D0190910E01FC0131969C01205FAB +:1036F0003F4F80E0919191118F5FE217F307D1F76F +:103700000895E0910D01F0910E018091DA0180831E +:10371000E0910D01F0910E0190818091D901892BEA +:103720008083E0910D01F0910E0190818091D8018C +:10373000892B80838091C701882361F0E0910D017E +:10374000F0910E019081892B80830E94701B811162 +:103750001092C70180910D0190910E010C9466109A +:1037600020E0009739F0AC014150510984239523A2 +:103770002F5FF7CF822F08958091F001843039F1C7 +:103780001092DC0120E488E190E00FB6F894A8954F +:10379000809360000FBE2093600080E00E944B0386 +:1037A00080E00E94680883B7817F846083BF83B70D +:1037B000816083BF7894889583B78E7F83BF88E1CB +:1037C0000FB6F89480936000109260000FBE0895C9 +:1037D0000895089580E00E944B030E94E81B0E9418 +:1037E000C3080E94E91B0E94480991E0811101C0B1 +:1037F00090E0892F08950E943C1580E00E944B03C1 +:103800000E9460210E945A100C9468081F920F9227 +:103810000FB60F9211248F939F93AF93BF93809114 +:10382000DC01811113C08091DD019091DE01A09136 +:10383000DF01B091E0014196A11DB11D8093DD0132 +:103840009093DE01A093DF01B093E001BF91AF91AF +:103850009F918F910F900FBE0F901F90189582E04F +:1038600084BD93E095BD9AEF97BD80936E00089557 +:103870002FB7F8948091DD019091DE01A091DF01D6 +:10388000B091E0012FBF0895CF92DF92EF92FF92A7 +:103890000F931F932FB7F8944091DD015091DE01F3 +:1038A0006091DF017091E0012FBF6A017B01EE247E +:1038B000FF248C0120E030E0C016D106E206F306BA +:1038C00010F4415051099A01281B390BC9011F916D +:1038D0000F91FF90EF90DF90CF9008951F920F927D +:1038E0000FB60F9211248F939F93AF93BF93809144 +:1038F000DD019091DE01A091DF01B091E001019620 +:10390000A11DB11D8093DD019093DE01A093DF0125 +:10391000B093E001BF91AF919F918F910F900FBE37 +:103920000F901F9018950E94570DF8942FEF87EA7B +:1039300091E6215080409040E1F700C0000087E010 +:1039400090EBDC018093FB019093FC01A093FD01BF +:10395000B093FE019CE088E10FB6F894A89580939F +:1039600060000FBE90936000FFCF0E94EF1C81119A +:1039700002C00E94D01C0E94FA1C8093DB010E94AE +:10398000071D8093F90187FB882780F980930C013C +:103990000E94FE1C682F70E080E090E00C94FC1800 +:1039A0006DEE7EEF80E090E00E946B2360E082E0AD +:1039B00090E00E94592360E083E090E00E94592348 +:1039C00060E084E090E00E94592360E085E090E0B0 +:1039D0000E94592360E086E090E00C94592380E037 +:1039E00090E00E94532321E08D3E9E4F09F020E09D +:1039F000822F089582E090E00C944B2383E090E0C6 +:103A00000C944B23682F83E090E00C94592384E0BE +:103A100090E00C944B23682F84E090E00C945923A1 +:103A200086E090E00C944B23682F86E090E00C94A5 +:103A300059238091E30180FF0BC06091120185E062 +:103A4000689FB001112475956795759567952BC092 +:103A500081FF09C06091120185E0689FB0011124C7 +:103A60007595679520C082FF07C06091120185E0BF +:103A7000689FB001112417C09091E4019923D1F0FF +:103A800060911101961788F72091120185E0289F17 +:103A900090011124929FA001939F500D112470E07A +:103AA000CA010E941D236038710540F4611571053B +:103AB00039F002C065E070E0862F08958FE7089521 +:103AC00081E008958091E30180FF08C060911001BA +:103AD00070E0759567957595679521C081FF06C063 +:103AE0006091100170E07595679519C082FF04C060 +:103AF0006091100170E010C09091E4019923C1F031 +:103B000060910F019617A0F780911001899FC00165 +:103B1000112470E00E941D236038710528F461159E +:103B2000710521F0862F08958FE7089581E00895AB +:103B300061E070E0F4CF803F21F40E94191D81956F +:103B400004C0813F29F40E94191D8093E701089564 +:103B5000823F21F40E94191D819504C0833F29F4FE +:103B60000E94191D8093E6010895893F19F40E946F +:103B7000621D05C08A3F31F40E94621D81958093C9 +:103B8000E80108958B3F21F40E94621D819504C0D5 +:103B90008C3F29F40E94621D8093E9010895843FBF +:103BA00021F48091E501816017C0853F21F4809167 +:103BB000E501826011C0863F21F48091E5018460B7 +:103BC0000BC0873F21F48091E501886005C0883FE4 +:103BD00031F48091E50180618093E50108958D3F86 +:103BE00021F48091E30181600BC08E3F21F480912C +:103BF000E301826005C08F3F29F48091E301846076 +:103C00008093E3010895803F39F48091E70187FFB5 +:103C10006CC01092E70169C0813F29F48091E701EF +:103C20001816BCF362C09091E601823F29F497FF19 +:103C30005CC01092E60159C0833F19F41916CCF309 +:103C400054C0893F41F48091E80118160CF04DC032 +:103C50001092E8014AC08A3F29F48091E80187FF69 +:103C600044C0F6CF8B3F39F48091E90187FF3DC016 +:103C70001092E9013AC08C3F29F48091E9011816AD +:103C8000BCF333C0843F21F48091E5018E7F17C0DF +:103C9000853F21F48091E5018D7F11C0863F21F49D +:103CA0008091E5018B7F0BC0873F21F48091E50176 +:103CB000877F05C0883F31F48091E5018F7E809336 +:103CC000E50113C08D3F21F48091E3018E7F0BC08D +:103CD0008E3F21F48091E3018D7F05C08F3F29F451 +:103CE0008091E3018B7F8093E3018091E601811154 +:103CF0000EC08091E70181110AC08091E801811115 +:103D000006C08091E901811102C01092E40108957A +:103D100085EE91E00E9471100E94381C9093E201A0 +:103D20008093E10108951F93CF93DF938091E10188 +:103D30009091E2010E94441CAC019091E40199230E +:103D400021F02091130130E006C0209114018AE097 +:103D5000289F900111244217530708F486C08091D0 +:103D6000E601C091E701D091E8011091E9018111CC +:103D700007C0C11176C0D11174C0111172C075C0D5 +:103D80009F3F19F09F5F9093E401181624F40E945E +:103D9000191D8093E6018091E60187FF05C00E940E +:103DA000191D81958093E6011C1624F40E94191DAB +:103DB0008093E7018091E70187FF05C00E94191DEC +:103DC00081958093E7016091E601662339F1C09106 +:103DD000E701CC2319F1772767FD7095872F972F7F +:103DE0000E942E2223E333E343E35FE30E94922207 +:103DF0000E94FB216093E6016C2F772767FD709589 +:103E0000872F972F0E942E2223E333E343E35FE3C0 +:103E10000E9492220E94FB216093E7011D1624F468 +:103E20000E94621D8093E8018091E80187FF05C030 +:103E30000E94621D81958093E801111624F40E946E +:103E4000621D8093E9018091E90187FF05C00E940E +:103E5000621D81958093E901DF91CF911F910C94B0 +:103E6000881E9F3F09F08ECF96CFDF91CF911F9193 +:103E70000895E5EEF1E085E0DF011D928A95E9F70E +:103E80001092E4011092E3010895833081F128F447 +:103E9000813059F08230D1F00895853009F449C05D +:103EA000B8F1863009F456C0089580911401262F88 +:103EB00030E0280F311D2F3F310524F4680F609347 +:103EC000140108958FEF80931401089580911301D8 +:103ED000262F30E0280F311D2F3F310524F4680FC5 +:103EE0006093130108958FEF8093130108958091DB +:103EF0001201262F30E0280F311D2F3F310524F409 +:103F0000680F6093120108958FEF80931201089556 +:103F100080911101262F30E0280F311D2F3F3105F0 +:103F200024F4680F6093110108958FEF80931101BD +:103F3000089580911001262F30E0280F311D2F3F6A +:103F4000310524F4680F6093100108958FEF80937A +:103F50001001089580910F01262F30E0280F311DA8 +:103F60002F3F310524F4680F60930F0108958FEF00 +:103F700080930F010895833011F128F4813049F0C6 +:103F8000823091F00895853081F120F18630C1F1C1 +:103F9000089580911401681720F4861B8093140102 +:103FA000089510921401089580911301681720F468 +:103FB000861B809313010895109213010895809138 +:103FC0001201681720F4861B809312010895109245 +:103FD0001201089580911101681720F4861B8093C7 +:103FE0001101089510921101089580911001681730 +:103FF00020F4861B809310010895109210010895FB +:1040000080910F01681720F4861B80930F0108959B +:1040100010920F0108950F931F93873208F048C044 +:104020008E3108F092C0803109F47CC008F58730E9 +:1040300009F466C068F4863009F0A2C08091DB0103 +:10404000817F8E7F8093DB0181E08093EB0199C0BB +:104050008B3009F48EC08E3009F092C08091DB0164 +:1040600082FB222720F991E0922790FB82F963C01E +:10407000863109F47EC060F4813109F081C00E946C +:104080003C1590910C0181E0892780930C0171C04F +:10409000893109F46EC08B3109F072C08091DB0167 +:1040A00081FB222720F991E0922790FB81F943C000 +:1040B000883309F45EC050F4893209F45CC085335A +:1040C00009F459C0873209F456C05AC0833409F440 +:1040D00052C028F48A3308F453C0895337C0883457 +:1040E00009F04EC00E943C150FEF13ED20E3015084 +:1040F00010402040E1F700C000000E94931C39C02E +:104100009091DB01892F8095817080FB90F929F0D7 +:10411000966098609093DB0134C0997F977F90936D +:10412000DB0127C08091DB0183FB222720F991E08E +:10413000922790FB83F98093DB019923D1F0809142 +:10414000DB0181608093DB0114C08D5141E050E0C0 +:1041500060E070E08A019B0104C0000F111F221F64 +:10416000331F8A95D2F7C901B8010E94FC180E943A +:104170003C1581E006C061E070E080E090E0F5CFA2 +:1041800080E01F910F91089580E0089580E00895E8 +:10419000CF93C82F8091EB01813069F018F0823005 +:1041A000C9F184C0E0910D01F0910E01808182324D +:1041B00009F07EC007C0E0910D01F0910E018081F1 +:1041C000823261F48C2F0E94C420811104C08C2F94 +:1041D0000E940B201DC081E090E01AC08C2F0E942D +:1041E000C620811114C0C43179F048F4CB3079F085 +:1041F000C03109F061C082E08093EB0108C0C93290 +:1042000019F0C83321F058C01092EB0155C081E07D +:10421000817054C0C93291F120F5C43179F1B0F404 +:10422000C73009F047C08EE18093140182E3809388 +:1042300013018AE08093120184E18093110188E0E8 +:104240008093100188E280930F0134C0CE51C630B4 +:1042500088F5EC2FF0E0E75CFE4F80818093EA0167 +:1042600029C0CE34E9F020F4CB3421F56AE013C044 +:10427000C13579F0C235F1F461E00DC08091EA01F9 +:10428000882319F01092EA0115C081E08093EB01B8 +:1042900015C061E006C08091EA010E94451F0AC076 +:1042A0006AE08091EA010E94BB1F04C01092EB01FA +:1042B00080E004C081E002C080E0AACFCF910895E1 +:1042C0000E94EF1C811102C00E94D01C0E94101D90 +:1042D0008093FA0180FF02C0869501C080E00C94B3 +:1042E0004B038091FA01982F9695292F30E02330C7 +:1042F00031054CF49F5F990F8170892B8160809309 +:10430000FA010E94141D8091FA0186950C944B03CA +:104310008091FA01982F969591F09158990F81709C +:10432000892B8093FA018E7F91E009F490E08091CF +:10433000FA0190FB80F98093FA010E94141D80918C +:10434000FA0186950C944B038091FA01982F909571 +:1043500090FB80F98093FA010E94141D8091FA016C +:1043600080FF02C0869501C080E00C944B039091C1 +:10437000FA01892F86958F5F8F779170843028F4AA +:10438000880F892B8093FA0102C09093FA018091E3 +:10439000FA018E7F91E009F490E08091FA0190FBA0 +:1043A00080F98093FA010E94141D8091FA0186958C +:1043B0000C944B032091FA01922F96958927982F00 +:1043C000990F822F8170892B8093FA018E7F91E063 +:1043D00009F490E08091FA0190FB80F98093FA0152 +:1043E0000E94141D8091FA0186950C944B038091D4 +:1043F000FA018695089504D06894B1118DC008958E +:1044000070D088F09F5790F0B92F9927B751A0F03E +:10441000D1F0660F771F881F991F1AF0BA95C9F758 +:1044200012C0B13081F077D0B1E0089574C0672F29 +:10443000782F8827B85F39F0B93FCCF38695779508 +:104440006795B395D9F73EF49095809570956195F1 +:104450007F4F8F4F9F4F0895E89409C097FB3EF41C +:1044600090958095709561957F4F8F4F9F4F9923C1 +:10447000A9F0F92F96E9BB279395F695879577953F +:104480006795B795F111F8CFFAF4BB0F11F460FFFF +:104490001BC06F5F7F4F8F4F9F4F16C0882311F057 +:1044A00096E911C0772321F09EE8872F762F05C06B +:1044B000662371F096E8862F70E060E02AF09A9506 +:1044C000660F771F881FDAF7880F9695879597F9FB +:1044D000089557FD9058440F551F59F05F3F71F0F4 +:1044E0004795880F97FB991F61F09F3F79F087955B +:1044F0000895121613061406551FF2CF4695F1DFE4 +:1045000008C0161617061806991FF1CF8695710573 +:10451000610508940895E894BB2766277727CB01A7 +:1045200097F908950BD078C069D028F06ED018F0B4 +:10453000952309F05AC05FC01124EECFCADFA0F363 +:10454000959FD1F3950F50E0551F629FF001729F28 +:10455000BB27F00DB11D639FAA27F00DB11DAA1F47 +:10456000649F6627B00DA11D661F829F2227B00D94 +:10457000A11D621F739FB00DA11D621F839FA00D1F +:10458000611D221F749F3327A00D611D231F849F6F +:10459000600D211D822F762F6A2F11249F575040C6 +:1045A0008AF0E1F088234AF0EE0FFF1FBB1F661F61 +:1045B000771F881F91505040A9F79E3F510570F01A +:1045C00014C0AACF5F3FECF3983EDCF38695779555 +:1045D0006795B795F795E7959F5FC1F7FE2B880F15 +:1045E000911D9695879597F9089597F99F6780E8AB +:1045F00070E060E008959FEF80EC089500240A9435 +:104600001616170618060906089500240A941216AD +:104610001306140605060895092E0394000C11F4E0 +:10462000882352F0BB0F40F4BF2B11F460FF04C08D +:104630006F5F7F4F8F4F9F4F089597FB072E16F4A4 +:10464000009407D077FD09D00E94372307FC05D0DE +:104650003EF4909581959F4F0895709561957F4F99 +:104660000895EE0FFF1F0590F491E02D0994AA1B09 +:10467000BB1B51E107C0AA1FBB1FA617B70710F04D +:10468000A61BB70B881F991F5A95A9F7809590957F +:10469000BC01CD010895F999FECF92BD81BDF89A74 +:1046A000992780B50895A8E1B0E042E050E00C946D +:1046B0007323262FF999FECF92BD81BDF89A0197F9 +:1046C00000B4021639F01FBA20BD0FB6F894FA9A5A +:1046D000F99A0FBE08950196272F0E945A230C9431 +:1046E0005923DC01CB01FC01F999FECF06C0F2BDD4 +:1046F000E1BDF89A319600B40D9241505040B8F7A0 +:064700000895F894FFCFBC +:10470600FF5E09EC09C909950961090101C801287B +:1047160008140A321E1F0F03764F5F6F7F496943E5 +:1047260079095953633F4D3639A30556052005E7E8 +:10473600047A049304AC04C50401020304050607C5 +:04474600080900005E +:00000001FF diff --git a/keyboard/planck/keymaps/pvc/compiled.hex b/keyboard/planck/keymaps/pvc/compiled.hex new file mode 100644 index 0000000000..9e6f0ffe20 --- /dev/null +++ b/keyboard/planck/keymaps/pvc/compiled.hex @@ -0,0 +1,1635 @@ +:100000000C9467030C94AB030C94AB030C94AB03FC +:100010000C94AB030C94AB030C94AB030C94AB03A8 +:100020000C94AB030C94AB030C94BE170C94901877 +:100030000C94F2250C94AB030C94AB030C94AB031F +:100040000C94AB030C940B040C94AB030C94AB0317 +:100050000C94AB030C945A260C94AB030C94AB0396 +:100060000C94AB030C94AB030C94AB030C94AB0358 +:100070000C94AB030C94AB030C94AB030C94AB0348 +:100080000C947A0D0C94AB030C94AB030C94AB035F +:100090000C94AB030C94AB030C94AB030C94AB0328 +:1000A0000C94AB030C94AB030C94AB037504870462 +:1000B0009B04B404AD04C404D304DB04E304ED04E2 +:1000C000F504FD0404050B051705170517051705AD +:1000D00017051705CF04FD181F190D1A1F190D1A42 +:1000E000641987190D1ADC19EF19D91CD91C081DC0 +:1000F000081D471D671DBD1EBD1E721DBD1E221E93 +:10010000221E891E921EBD1EB71E2F1E2F1E2F1EC1 +:100110002F1E2F1E2F1E2F1E2F1E2F1E2F1E2F1E77 +:100120002F1E2F1E2F1E2F1E2F1E3F1E4D1E541E14 +:100130005B1E651E07634236B79BD8A71A396856FF +:1001400018AEBAAB558C1D3CB7CC5763BD6DEDFDF9 +:10015000753EF6177231BF000000803F08000000B6 +:10016000BE922449123EABAAAA2ABECDCCCC4C3EAC +:1001700000000080BEABAAAAAA3E00000000BF009B +:100180000000803F0000000000084178D3BB438797 +:10019000D1133D190E3CC3BD4282AD2B3E68EC82AB +:1001A00076BED98FE1A93E4C80EFFFBE01C4FF7F30 +:1001B0003F00000000000000000000000000000000 +:1001C00000010204060A0F17202C3A4A5D71879D30 +:1001D000B3C7DAE9F5FCFFFCF5E9DAC7B39D87712F +:1001E0005D4A3A2C20170F0A0604020100000000A5 +:1001F00000000000000000222B0014001A0008007C +:10020000150017001C0018000C00120013002A0033 +:10021000290004001600070009000A000B000D0069 +:100220000E000F0033003400E1001D001B0006002B +:100230001900050011001000360037005200280098 +:10024000E000E3000530E20003302C002C00043015 +:10025000C000500051004F002B0014001A0009008C +:1002600013000A000D000F0018001C0033002900C5 +:100270002A00040015001600170007000B001100EB +:1002800008000C0012003400E1001D001B000600F5 +:10029000190005000E00100036003700520028003B +:1002A000E000E3000530E20003302C002C000430B5 +:1002B000C000500051004F002B00340036003700C2 +:1002C00013001C0009000A00060015000F002A0098 +:1002D000290004001200080018000C0007000B00A1 +:1002E0001700110016003800E100330014000D0063 +:1002F0000E001B00050010001A0019001D00280048 +:10030000E000E3000530E20003302C002C00043054 +:100310005200510050004F0046003A003B003C00A4 +:100320003D00530054005F006000610056004C0027 +:1003300039003E003F0040004100470055005C008E +:100340005D005E0057004900010042004300440088 +:1003500045004800000059005A005B0058004A0060 +:1003600001000100010001000100620062000100C3 +:10037000E600630058004D00010021022F022F000B +:100380002602220220022702300030021F024B0008 +:1003900001002302250257005600330033022D02CC +:1003A0003400340235004E000100310224021E02E6 +:1003B0003502380031002E003602370238024A007A +:1003C0000100010001000100010001000100010025 +:1003D0000100010001004D0053003A003B003C00C9 +:1003E0003D003E003F004000410042004300480005 +:1003F000390044004500680069006A006B006C0029 +:100400006D006E006F004600470000000000000015 +:100410000000000000000000000000000000A80034 +:1004200001000100010001000100AE00AE0001006A +:10043000A900AA00AC00AB002900FD00FE00FF00EF +:100440000000000000000000000000000000290083 +:10045000000000000000000000000000000000009C +:1004600000000000000000000100F800F700F600A6 +:10047000F50000000000000000000000F900FA0094 +:1004800001000100010001000100F400F40001007E +:10049000F000F100F200F3000100073008300930ED +:1004A0000A300B300C300D30010001002550225075 +:1004B00001000030013002300100010001000100A4 +:1004C0000100010001000100010001000100010024 +:1004D00014300050010006300100010026500100D8 +:1004E0000100010001000100010001000100010004 +:1004F0000100010027500100280354006800650036 +:10050000200050006C0061006E0063006B00200052 +:100510004B006500790062006F00610072006400AA +:1005200000002C034F007200740068006F006C0024 +:1005300069006E0065006100720020004B006500DC +:10054000790062006F0061007200640073000000B7 +:100550000403090409026D00040100A0FA09040063 +:10056000000103010100092111010001223F0007E0 +:1005700005810308000A09040100010301020009C2 +:100580002111010001224D000705820308000A091C +:1005900004020001030000000921110100012236BC +:1005A000000705830308000A090403000103000093 +:1005B0000009211101000122390007058403100000 +:1005C000011201100100000008EDFE606001000151 +:1005D00002000105010906A101050719E029E71537 +:1005E0000025019508750181020508190129059565 +:1005F00005750191029501750391010507190029FF +:100600007715002501957875018102C005010980E3 +:10061000A101850216010026B7001A01002AB700C1 +:10062000751095018100C0050C0901A10185031613 +:100630000100269C021A01002A9C02751095018176 +:1006400000C005010902A1010901A1000509190164 +:100650002905150025019505750181029501750390 +:1006600081010501093009311581257F9502750841 +:10067000810609381581257F950175088106050CCD +:100680000A38021581257F950175088106C0C005CD +:10069000010906A101050719E029E71500250195C3 +:1006A0000875018102950175088101050819012964 +:1006B00005950575019102950175039101050719CD +:1006C0000029FF150025FF950675088100C011243B +:1006D0001FBECFEFDAE0DEBFCDBF04B603FE24C0FD +:1006E00080916F0590917005A0917105B091720590 +:1006F0008730904BA740B04BB9F410926F05109221 +:100700007005109271051092720514BE84B7877F30 +:1007100084BF88E10FB6F894809360001092600067 +:100720000FBEE0E0F8E3099514E0A0E0B1E0EAE0F4 +:10073000F3E602C005900D92A031B107D9F715E09C +:10074000A0E1B4E001C01D92AF36B107E1F70E940D +:1007500004150C9483310C940000089581E00895F1 +:100760000C94AD030C94AE030C941E050E944D2D09 +:1007700023E030E0281B3109220F20931404089550 +:10078000282F2F9880918000211108C0877F8093A7 +:10079000800010928D0010928C001BC088608093A6 +:1007A0008000233019F48FEF9FEF0FC083E090E0BB +:1007B000821B9109880F991F2FEF3FEFA90102C0FB +:1007C000569547958A95E2F7CA0190938D008093DC +:1007D0008C000C94B6030E94B60384E0809313044B +:1007E000109210040895279A2F988FEF9FEF9093FF +:1007F0008700809386008AE08093800089E180935F +:1008000081000E94B62C0C94EB030E94F3036E9AB5 +:10081000769A0C948F051F920F920FB60F921124A7 +:100820002F933F938F939F93EF93FF93E091110446 +:10083000F0911204CF010196909312048093110459 +:100840000090130402C0F695E7950A94E2F7EF735F +:1008500080911004823019F4E03251F404C08130E8 +:1008600039F4EF3329F480916F008D7F80936F000E +:10087000F0E0EA54FE4FE49121E031E0E29FC00154 +:10088000E39F900D11240090140402C09695879563 +:100890000A94E2F790938D0080938C00FF91EF9182 +:1008A0009F918F913F912F910F900FBE0F901F90AE +:1008B0001895CF93DF93EC010E944E28BE0180E093 +:1008C00090E0DF91CF910C94E8220F931F93CF9388 +:1008D000DF93462F50E04531510508F0A8C0EC01E8 +:1008E000FA01EA5AFF4F0C9447318A81882309F4B0 +:1008F0009EC081E090E00E9459040AE017ED23E2D7 +:100900003CE340E064E070E080E792E011C08A815F +:10091000882309F48CC082E090E00E9459040AE028 +:1009200017ED23E23CE340E066E070E080E092E017 +:100930000E94F8107CC08A81882309F478C084E082 +:1009400090E00E9459040AE017ED23E23CE340E006 +:1009500068E070E080E392E0EBCF8A81882311F0B9 +:1009600084E006C084E00DC08A81882349F083E0DA +:100970000E94652347E063E084E00E945D0B57C05E +:1009800083E00E948623F6CF8A81882321F085E0C8 +:100990000E9465234CC085E00E94862348C08A815E +:1009A00081110E940D2D8A81882309F440C086E0C0 +:1009B0000E94AB233CC08A818823C9F160E070E0CB +:1009C00080E09EE307C08A81882389F160E070E0BF +:1009D00080E89EE30E949F112AC08A81882339F112 +:1009E00060E070E080E09FE3F5CF8A818823F9F032 +:1009F00060E070E080E49FE3EDCF8A818823B9F066 +:100A00008AE00E94B11113C08A81882381F08AE0B4 +:100A10000E94AB110CC08A81882349F060E070E02D +:100A200080E09FE30E949F1184E60E94A81180E06D +:100A300090E0DF91CF911F910F9108950F931F9335 +:100A4000CF93C82F8FE39CE90197F1F700C0000016 +:100A500090911504C1FF0BC091FD14C000E010E09F +:100A6000980140E062E070E080E991E03AC091FFD7 +:100A700009C000E010E0980140E062E070E080E82A +:100A800091E02FC0C0FF0BC090FD14C000E010E04B +:100A9000980140E062E070E080E791E022C090FFC2 +:100AA00009C000E010E0980140E062E070E080E6FC +:100AB00091E017C0C2FF0BC092FD15C000E010E02E +:100AC000980140E062E070E080E591E00AC092FFAA +:100AD0000AC000E010E0980140E062E070E080E4CD +:100AE00091E00E94F810C0931504CF911F910F91CF +:100AF00008950F931F938FE39CE90197F1F700C0CE +:100B000000000AE017ED23E23CE340E06FE070E014 +:100B100088ED92E00E94F8101F910F91089580E0F7 +:100B20000E94C2110C9479050F931F930AE017EDF0 +:100B300023E23CE340E069E070E080E992E00E945B +:100B4000F8102FEF87EA91E6215080409040E1F7BE +:100B500000C000001F910F910C94AD0C0F931F93D8 +:100B60000AE017ED23E23CE340E065E070E088ED49 +:100B700091E00E94F8101F910F9108950F931F9319 +:100B80000AE017ED23E23CE340E067E070E080EA32 +:100B900091E00E94F8101F910F9108950F931F93F9 +:100BA0000AE017ED23E23CE340E068E070E080E01B +:100BB00091E00E94F8101F910F91089581E008952F +:100BC0000C94DE0508950C94050480916604882336 +:100BD00009F448C08091220490912304009779F48D +:100BE0000E9424269093230480932204809124045D +:100BF00090E0009771F48091250490E00AC00E9473 +:100C0000302620915003309151032817390740F3C3 +:100C100029C00197880F991F880F991FFC01EA5D71 +:100C2000FB4F60817181828193810E94E00CE09191 +:100C3000240484E0E89FF0011124EA5DFB4F608109 +:100C40007181828193814FE050E00E9498108091E1 +:100C5000240490E001966091250470E00E943331F5 +:100C6000809324040C94B003109268040C94AD0C8F +:100C700081E0809368040C94BE058F929F92AF929E +:100C8000BF92EF92FF920F931F93CF93DF93CDB755 +:100C9000DEB7A3970FB6F894DEBF0FBECDBF7C01C1 +:100CA000FC0100811181C8010E942124B8010E9429 +:100CB0003F088C01B7010E94E005882309F4CCC1EC +:100CC0000032F0E51F0741F4F7018281882309F41F +:100CD00058C00E948F11C0C10132F0E51F0741F4D6 +:100CE000F7018281882309F44CC00E949811B4C195 +:100CF0000232F0E51F0751F4F7018281882309F4DD +:100D000040C00E948B118111F0CFE3CF0332F0E598 +:100D10001F0739F4F7018281882399F10E94380670 +:100D20009BC10432F0E51F0739F4F7018281882363 +:100D300041F10E94340690C10532F0E51F0749F4E5 +:100D4000F70182818823E9F0809168048111F1CF55 +:100D5000E5CF0632F0E51F0739F4F70182818823D9 +:100D600081F00E94C5110AC00732F0E51F0749F45F +:100D7000F7018281882329F00E94D0110E94CE05BC +:100D80006BC180916804811105C0F70182818111D6 +:100D9000CFC018C1003E110579F4F7018281882384 +:100DA00009F44DC00E94AD0C81E08093670410925D +:100DB00066041092250450C1023E110559F4F70152 +:100DC00082818823E1F10E94AD0C10926704109299 +:100DD000660442C1033E110591F4F7018281882324 +:100DE00071F10E94AD0C1092670481E0809366045B +:100DF0001092240410922304109222042DC1023573 +:100E0000110559F4F7018281882309F425C18091E5 +:100E10005003909151030A970DC00135110579F4E3 +:100E2000F7018281882309F417C1809150039091C2 +:100E300051030A9690935103809350030DC1409142 +:100E4000540383E2EFE6F3E0DE01119601900D9288 +:100E50008A95E1F7F701808121E030E02C0F3D1FFA +:100E6000280F311DC9012091520330915303FC0119 +:100E7000E20FF31F6081772767FD7095640F711D86 +:100E8000882777FD8095982F0E94552E20E030E02E +:100E900040E451E40E94BA2D4B015C01F70121812D +:100EA00084E090E0821B9109BC01882777FD809542 +:100EB000982F0E94552E9B01AC01C501B4010E94E0 +:100EC000522D9B01AC0160E070E080E090E40E9454 +:100ED000C82F20E030E04CED50E40E94652F4B011C +:100EE0005C01F70182818823D1F04FE050E0C50119 +:100EF000B4010E949810809167048823A1F080912A +:100F0000250424E0829FF0011124EA5DFB4F8082DA +:100F10009182A282B3828F5F8093250404C0C501B1 +:100F2000B4010E94E00C0F3F110508F02ECF94C0D1 +:100F30008091210481111FC0043130E5130709F0AD +:100F400051C00E94E20581E0809321040E94242682 +:100F50009093200480931F041092180410921A0496 +:100F60001092190410921C0410921B0410921E047B +:100F700010921D0471C080911F04909120040E9462 +:100F80003026883C910570F480911804E82FF0E039 +:100F9000EE0FFF1FE75EFB4F118300838F5F80938F +:100FA00018045AC0043880E5180721F005381045A8 +:100FB00001F13AC0F7018281882341F010921604B2 +:100FC00082E01EC0043830E5130759F580911604FD +:100FD000811106C086E20E947D1B86E20E94451CAC +:100FE00082E01CC00438F0E51F0741F305381045C6 +:100FF000D9F4F7018281882331F01092170480E23E +:101000000E94941C29C080911704811106C087E2B8 +:101010000E947D1B87E20E94451C80E20E949B1C6F +:101020001BC00538104529F381E080931604809396 +:101030001704C701A3960FB6F894DEBF0FBECDBF4D +:10104000DF91CF911F910F91FF90EF90BF90AF90E4 +:101050009F908F900C94B20380E0A3960FB6F89403 +:10106000DEBF0FBECDBFDF91CF911F910F91FF90DB +:10107000EF90BF90AF909F908F90089508959CE05F +:10108000799FF001112490E3899FE00DF11D112457 +:10109000E60FF11DEE0FFF1FE850FE4F8591949172 +:1010A0000895880F991FFC01EA58FF4F859194918C +:1010B0000895880F991FFC01EA50FE4F8591949185 +:1010C00008950F931F93CF93DF93EC01811521E3D4 +:1010D0009207A0F5C11580E3D80708F0D7C0C83E35 +:1010E000D105D8F4C03ED10508F007C2C83AD105F1 +:1010F00078F4C53AD10508F06AC0C130D10509F4C9 +:1011000063C008F4F7C1C430D10508F0F6C1F2C1DC +:10111000CB3BD10508F466C0EDC1C11590E2D907FB +:1011200008F0AFC0C11521E0D20708F0E6C1C03F0A +:10113000D10508F4DFC18E0110651FC2C03880E5FB +:10114000D80700F5C03790E5D90708F0A3C0C1154E +:1011500020E5D20709F4ACC050F4CE0190548031A0 +:101160009F4008F0C7C1DF708E01106A06C2C1300F +:1011700080E5D80709F4AEC0C43190E5D90708F47A +:10118000AFC0B8C1C33820E5D20709F48EC050F40F +:10119000C13890E5D90709F482C008F083C000E0A7 +:1011A00011EDEBC1C03181E5D80708F4A3C1C11529 +:1011B00097E5D90708F436C1CE01905781159041C3 +:1011C00008F098C1DF7093C101E010E0D6C1C53AC4 +:1011D000D10509F494C1C63AD10509F093C102E8DA +:1011E00010E4CBC1C83AD10509F48FC1C93AD10581 +:1011F00009F48EC1CA3AD10509F48DC1CB3AD105A3 +:1012000009F48CC1CC3AD10509F48BC1CD3AD10592 +:1012100009F48AC1C03BD10509F489C1CE3AD10590 +:1012200009F488C1CF3AD10509F487C1C13BD10582 +:1012300009F486C1C23BD10509F485C1C33BD10580 +:1012400009F484C1C43BD10509F483C1C53BD10570 +:1012500009F482C1C63BD10509F481C1C73BD10560 +:1012600009F480C1C83BD10509F47FC1C93BD10550 +:1012700009F47EC1CA3BD10509F47DC100E014E444 +:101280007CC1CE019F700E94590878C1DD278E0174 +:10129000106C73C1CF70DD278E01146D6EC100E03C +:1012A00010ED6BC100E012ED68C100E013ED65C107 +:1012B0000E94281F0E94AD0C0E9494058FEF94E3BA +:1012C0002CE0815090402040E1F700C000000E94D7 +:1012D0007F2653C1809143058160809343054DC1B2 +:1012E0000E943628811102C00E9412280E945328B1 +:1012F00090E090936E0580936D05C23080E5D8072D +:1013000021F480916D05816086C0C43090E5D907D5 +:1013100021F480916D0582607EC0C63020E5D20741 +:1013200021F480916D05846076C0C83080E5D807CF +:1013300019F480916D0527C0CA3090E5D90721F4D2 +:1013400080916D05806167C0CC3020E5D20721F423 +:1013500080916D0580625FC0CE3080E5D80721F4B2 +:1013600080916D05806457C0C03190E5D90721F4A4 +:1013700080916D0580684FC0C23120E5D20729F405 +:1013800080916D058460886046C0C33080E5D807D1 +:1013900021F480916D058E7F3EC0C53090E5D90760 +:1013A00021F480916D058D7F36C0C73020E5D207CE +:1013B00021F480916D058B7F2EC0C93080E5D80760 +:1013C00019F480916D0526C0CB3090E5D90721F442 +:1013D00080916D058F7E1FC0CD3020E5D20721F4AE +:1013E00080916D058F7D17C0CF3080E5D80721F43F +:1013F00080916D058F7B0FC0C13190E5D90721F435 +:1014000080916D058F7707C0C331D04531F480914D +:101410006D058B7F877F80936D0580916D050E94A0 +:101420005728ABC08D2F99278F7099278130910550 +:10143000D9F49E012370332702C0880F991F2A9583 +:10144000E2F79C688E0144E0000F111F4A95E1F716 +:1014500000271370802B912B53E0CC0FDD1F5A9582 +:10146000E1F7C076DD272FC08230910531F4DC2F03 +:10147000CC278E01016F106A80C08330910569F41A +:10148000CE018370992701E010E002C0000F111F08 +:101490008A95E2F7C8019C680FC084309105B9F4C1 +:1014A000CE018370992701E010E002C0000F111FE8 +:1014B0008A95E2F7C8019A6823E0CC0FDD1F2A95D0 +:1014C000E1F7C07ED7708C010C2B1D2B56C08530E8 +:1014D000910531F4DC2FCC278E01046F106A4DC0CA +:1014E000069709F04AC0CF71DD27DC2FCC278E018B +:1014F000106243C000E010E040C08E013EC001E831 +:1015000010E43BC003E810E438C002EE14E435C038 +:1015100009EE14E432C00AEE14E42FC005EB14E423 +:101520002CC006EB14E429C007EB14E426C00CEC35 +:1015300014E423C00DEC14E420C003E815E41DC03E +:101540000AE815E41AC002E915E417C004E915E435 +:1015500014C001E216E411C003E216E40EC004E276 +:1015600016E40BC005E216E408C006E216E405C066 +:1015700007E216E402C00AE216E4C801DF91CF9147 +:101580001F910F9108959CE0799FF001112490E341 +:10159000899FE00DF11D1124E60FF11DEE0FFF1FD5 +:1015A000E850FE4F85919491803E9105E0F4803C97 +:1015B000910558F58133910509F46FC048F48932DB +:1015C000910509F463C08A32910509F46DC072C0B7 +:1015D00089339105E9F082389105D1F08533910581 +:1015E00009F44DC067C0833E910581F138F4803E17 +:1015F0009105B9F0823E9105D9F05CC0863E910517 +:1016000061F1873E9105A1F155C00E9451080895EE +:1016100020916D0520FD02C021FF4CC080EE90E0BE +:1016200049C080916D0580FFF9CF89E390E042C009 +:1016300080916D0582FF0EC080916D0584FF03C00F +:1016400080E090E037C083EE90E034C080916D057B +:1016500082FFF2CF82EE90E02DC080916D0583FF76 +:101660000BC080916D0584FDEBCF87EE90E022C02A +:1016700080916D0583FFF5CF86EE90E01BC08091D1 +:101680006D0585FF07C089E290E014C080916D056B +:1016900085FFF9CF85E390E00DC080916D0586FF51 +:1016A00007C08AE290E006C080916D0586FFF9CF01 +:1016B00081E390E00E9461080895CF92DF92EF925B +:1016C000FF920F931F9301E010E020E030E06801EB +:1016D000790104C0CC0CDD1CEE1CFF1C8A95D2F7EE +:1016E00004C0000F111F221F331F6A95D2F70C2967 +:1016F0001D292E293F29C0902605D0902705E0906E +:101700002805F0902905C022D122E222F322842F5D +:10171000C016D106E206F30641F41F910F91FF9027 +:10172000EF90DF90CF900C9465231F910F91FF9065 +:10173000EF90DF90CF900C9486230C94B403E82FA5 +:10174000F0E0E256FC4F8081E82FEF70F0E08295E8 +:101750008F7021E030E0A90102C0440F551F8A9527 +:10176000E2F740A308950F931F93CF93DF9385B7BC +:10177000806885BF85B7806885BFC3E0D0E001E0A1 +:1017800010E0FE01E256FC4F8081E82FEF70F0E0A0 +:1017900021A182958F70A80102C0440F551F8A9520 +:1017A000E2F7CA01822B81A38C2F0E949F0B219705 +:1017B00040F78BE090E061E070E0FC01EE56FC4FFA +:1017C0002081E22FEF70F0E042A122952F70DB0123 +:1017D00002C0AA0FBB1F2A95E2F79D01242B22A36A +:1017E000019758F7DF91CF911F910F910C94E3056A +:1017F000EF92FF920F931F93CF93DF9301E714E0D3 +:10180000C3E0EE24E394F12CD5E08C2F0E949F0BD3 +:101810008BE090E040E050E0FC01EE56FC4F608130 +:10182000E62FEF70F0E020A130E062956F7002C00B +:10183000359527956A95E2F720FD09C09701082E96 +:1018400002C0220F331F0A94E2F7422B532B019759 +:1018500018F7F801929182918F018417950721F072 +:1018600051834083D09355038C2F0E949F0BC1500E +:1018700060F68091550387FD2CC0815080935503FD +:101880008F3F39F08FE99FE00197F1F700C000002A +:1018900020C080916F04909170049093780480939D +:1018A000770480916D0490916E04909376048093F8 +:1018B000750480916B0490916C04909374048093F0 +:1018C00073048091690490916A04909372048093E8 +:1018D00071040E94E50581E0DF91CF911F910F9186 +:1018E000FF90EF900895E82FF0E0EE0FFF1FEF5804 +:1018F000FB4F80819181089508950F931F93CF939B +:1019000009E714E0C0E0F801929182918F010E94F2 +:101910009C25C80FF4E001371F07A9F78C2FCF9142 +:101920001F910F9108950E943628811102C00E94D4 +:1019300012280E946528809358053E9A8091710074 +:101940008D7F8093710082E0809390008AE1809384 +:10195000910081E080937B04089580917B04811144 +:1019600002C00E94930C1092CB041092CA04809182 +:1019700071008D7F80937100809190008F738093B0 +:10198000900010928D0410928C041092C404109256 +:10199000C5041092C6041092C7041092C30410929A +:1019A000C204E2EAF4E0A2E9B4E0119211921192C9 +:1019B00011921D921D9284E0E23CF807B1F7089560 +:1019C000CF92DF92EF92FF920F931F93CF93DF930B +:1019D00020918C04222309F484C06B017C01809146 +:1019E0007B04811102C00E94930C02EC14E0C7E05A +:1019F000D0E0A7019601F8019291829172916291D3 +:101A00008F010E94B62D811131C0FE01EE0FFF1F24 +:101A1000EE0FFF1FEE55FB4F1082118212821382D0 +:101A2000DE01AA0FBB1FAE56BB4F11961C921E9231 +:101A3000C730D105E9F021964481558166817781CF +:101A400040835183628373831482158216821782C6 +:101A500012968D919C91139711969C938E93139649 +:101A60001C921E92129734961296E2CF219708F696 +:101A70008091CA049091CB04019797FD05C0909383 +:101A8000CB048093CA0404C01092CB041092CA0401 +:101A90008091CA049091CB042091C8043091C9046C +:101AA0002817390724F01092C9041092C804892B12 +:101AB000C1F4809171008D7F8093710080919000BE +:101AC0008F73809390001092C4041092C5041092FA +:101AD000C6041092C7041092C3041092C20410925C +:101AE0008C04DF91CF911F910F91FF90EF90DF90C9 +:101AF000CF9008951F920F920FB60F9211244F921C +:101B00005F926F927F928F929F92AF92BF92CF928D +:101B1000DF92EF92FF922F933F934F935F936F93D8 +:101B20007F938F939F93AF93BF93CF93DF93EF9365 +:101B3000FF9380918C04882309F49BC1C091CA044F +:101B4000D091CB041C161D060CF093C140907C0470 +:101B500050907D0460907E0470907F0420E030E01F +:101B6000A901C301B2010E94612F18160CF065C0D3 +:101B7000C130D10509F452C08091C8049091C904C4 +:101B8000BE010E9433317C019093C9048093C80444 +:101B900080908E0490908F04A0909004B090910457 +:101BA00020E030E040E85FE3C501B4010E94522D1F +:101BB00060938E0470938F048093900490939104AB +:101BC000F701EE0FFF1FEE0FFF1FEE55FB4FA301B6 +:101BD000920160817181828193810E94BA2D20E0FF +:101BE00030E040E05EE30E94652F9B01AC01C5013F +:101BF000B4010E94612F18168CF4C7010196BE0132 +:101C00000E9433319093C9048093C80410928E04CB +:101C100010928F041092900410929104E091C804E5 +:101C2000F091C904EE0FFF1FEE0FFF1FEE55FB4FA3 +:101C30006081718182819381D0C0C090C404D090B2 +:101C4000C504E090C604F090C70420E030E0A9018C +:101C5000C701B6010E94B62D2197882309F4A2C0BE +:101C6000FE01EE0FFF1FEE0FFF1FEE55FB4F8080B2 +:101C70009180A280B380A5019401C701B6010E94A2 +:101C8000B62D87FF31C0A501940160E070E08CEDB6 +:101C900093EC0E94BA2D20E030E040E451E40E9431 +:101CA000BA2D20E030E040E05FE30E94652F9B0109 +:101CB000AC0160E070E080E090E40E94C82F9B01DE +:101CC000AC01C501B4010E94652F9B01AC01C701A5 +:101CD000B6010E94B62D87FF07C0A701960160E0FC +:101CE00070E08CED93E439C0A5019401C701B60101 +:101CF0000E94612F18160CF055C0A501940160E0F8 +:101D000070E08CED93E40E94BA2D20E030E040E4D6 +:101D100051E40E94BA2D20E030E040E05FE30E94F1 +:101D2000652F9B01AC0160E070E080E090E40E94D0 +:101D3000C82F9B01AC01C501B4010E94652F9B0116 +:101D4000AC01C701B6010E94612F18165CF5A7010E +:101D5000960160E070E08CED93EC0E94BA2D20E0DB +:101D600030E040E451E40E94BA2D20E030E040E051 +:101D70005FE30E94652F9B01AC0160E070E080E0B2 +:101D800090E40E94C82F9B01AC01C701B6010E94DC +:101D9000652F6093C4047093C5048093C604909328 +:101DA000C70413C0FE01EE0FFF1FEE0FFF1FEE551D +:101DB000FB4F80819181A281B3818093C404909371 +:101DC000C504A093C604B093C7046091C404709185 +:101DD000C5048091C6049091C70420917904309184 +:101DE0007A042F3F4FEF340731F02F5F3F4F30938E +:101DF0007A04209379040E94DB116B017C0120E0BE +:101E000034E244EF51E40E94B62D87FF08C086EF0C +:101E1000C82E88E2D82E84EFE82E81E4F82E20E048 +:101E200030E040E051E4C701B6010E94652F9B01FC +:101E3000AC0160E074E284E79BE40E94BA2D6B0180 +:101E40007C010E94272E709397006093960020914A +:101E50005603309157034091580350915903C701DD +:101E6000B6010E94652F0E94272E709399006093FF +:101E7000980080918D04882309F433C1C0908804B0 +:101E8000D0908904E0908A04F0908B0420E030E048 +:101E9000A901C701B6010E94612F1816D4F58091DF +:101EA000790490917A048F3F2FEF920729F00196E1 +:101EB00090937A0480937904C701B6010E94DB11E4 +:101EC00020E030E040E051E40E94652F9B01AC012E +:101ED00060E074E284E79BE40E94BA2D6B017C0110 +:101EE0000E94272E709397006093960020915603CE +:101EF000309157034091580350915903C701B601DF +:101F00000E94652F0E94272E70939900609398007D +:101F100008C01092970010929600109299001092AB +:101F2000980060918204709183046F5F7F4F70937B +:101F3000830460938204209196003091970080E0A2 +:101F400090E0232BF1F0C0919600D09197000E9471 +:101F5000532E6B017C01BE0180E090E00E94532E65 +:101F60009B01AC016091840470918504809186048A +:101F7000909187040E94BA2D20E03FEF4FE757E48D +:101F800010C00E94532E6B017C0120E030EE4FEF19 +:101F900054E460918404709185048091860490914A +:101FA00087040E94652F9B01AC01C701B6010E9406 +:101FB000612F87FD96C0809180048F5F809380049D +:101FC00090E0209154053091550582179307A0F0B9 +:101FD00080915F05882319F0109280040DC08091D4 +:101FE00071008D7F80937100809190008F7380933A +:101FF000900010928D047DC080918104C091800476 +:10200000811128C0C0905905D0905A05E0905B0519 +:10201000F0905C0520E030E0A901C701B6010E9404 +:10202000612F1816BCF481E080938104109288041B +:102030001092890410928A0410928B04C092840436 +:10204000D0928504E0928604F0928704C150C09338 +:10205000800443C01092810410927A041092790493 +:10206000E0915605F091570548E0C49FE00DF11D41 +:10207000112480819181A281B381809388049093FF +:102080008904A0938A04B0938B0420E030E040E8F8 +:102090005EE364817581868197810E94652F6B0163 +:1020A0007C0180915A03682F70E080E090E00E94EC +:1020B000532E20E030E048EC52E40E94BA2D9B0100 +:1020C000AC01C701B6010E94652F60938404709330 +:1020D0008504809386049093870410928304109261 +:1020E00082048091580580FD04C010928D041092E6 +:1020F0008C04FF91EF91DF91CF91BF91AF919F91B0 +:102100008F917F916F915F914F913F912F91FF90B0 +:10211000EF90DF90CF90BF90AF909F908F907F9087 +:102120006F905F904F900F900FBE0F901F9018957B +:10213000CF92DF92EF92FF92CF93DF936B017C01FE +:10214000EA0180917B04811102C00E94930C80916E +:10215000580580FF46C08091CA049091CB0408972F +:102160000CF03FC0809171008D7F80937100809151 +:102170008D0481110E94AD0C81E080938C0410923B +:102180007A041092790420E030E0A901C701B60179 +:102190000E94612F1816DCF48091CA049091CB0440 +:1021A000FC01EE0FFF1FEE0FFF1FEE55FB4FC0822D +:1021B000D182E282F382FC01EE0FFF1FEE56FB4F4D +:1021C000D183C08301969093CB048093CA048091FD +:1021D000710082608093710080919000806880938C +:1021E0009000DF91CF91FF90EF90DF90CF90089516 +:1021F0008F929F92AF92BF92CF92DF92EF92FF9217 +:102200000F931F93CF93DF93EC017B01D42E4801F2 +:10221000590180917B04811102C00E94930C80912E +:10222000580580FF6BC0809171008D7F8093710095 +:1022300080918C0481110E94AD0C81E080938D040B +:10224000D0935705C0935605F0925505E09254057A +:10225000D0925F058092590590925A05A0925B0535 +:10226000B0925C0510928E0410928F04109290042C +:10227000109291041092800488819981AA81BB8177 +:102280008093880490938904A0938A04B0938B046C +:1022900020E030E040E85EE36C817D818E819F81AB +:1022A0000E94652F6B017C0180915A03682F70E0BA +:1022B00080E090E00E94532E20E030E048EC52E4B1 +:1022C0000E94BA2D9B01AC01C701B6010E94652F87 +:1022D00060938404709385048093860490938704AC +:1022E0001092830410928204809171008260809326 +:1022F000710080919000806880939000DF91CF9171 +:102300001F910F91FF90EF90DF90CF90BF90AF9013 +:102310009F908F90089580915805817008958091C5 +:1023200058058160809358050E9469280C94AE0579 +:10233000809158058E7F809358050C94692860938E +:10234000560370935703809358039093590308954D +:1023500080935A03089590915A03890F80935A03EA +:10236000089590915A03292F30E0281B31092A3013 +:10237000310524F48AE080935A030895981B9093C2 +:102380005A0308958093CC0408958091CC0490E082 +:10239000019666E070E00E9433318093CC0408958A +:1023A0008091CC0490E0019766E070E00E943331A8 +:1023B0008093CC0408958F929F92AF92BF92CF9258 +:1023C000DF92EF92FF920F931F93CF93DF936B01F6 +:1023D0007C01C0917904D0917A04BE0180E090E044 +:1023E0000E94532E4B015C01A701960160E070E052 +:1023F0008CE594E40E94BA2D9B01AC01C501B401A7 +:102400000E94652F0E94272E2091CC04233009F4CE +:1024100073C028F4222351F02130E9F02CC124307C +:1024200009F4A0C0253009F4E0C025C180E090E0A7 +:10243000A0E0BFE38093560390935703A093580303 +:10244000B093590310927C0410927D0410927E0484 +:1024500010927F0410C110927C0410927D0410929F +:102460007E0410927F046431710540F46A30710576 +:1024700060F520E030E040E85EE32BC0693C710588 +:1024800008F0AAC080E090E00E94532E20E030E0E7 +:1024900040EA51E40E94512D20E030E044E353E44F +:1024A0000E94BA2D9B01AC010E94652F20E030E014 +:1024B00040E05EE30E94652F9B01AC0160E070E0AC +:1024C00080E09EE30E94512D44C020E030E040E0D7 +:1024D0005FE3C701B6010E94652F6B017C0180E0BC +:1024E00090E0A0E0BEE38093560390935703A0933F +:1024F0005803B0935903BFC010927C0410927D041E +:1025000010927E0410927F044AE0469F9001479FFC +:10251000300D1124C90168EB7BE00E941F31BC0122 +:102520006C5D754077FF03C07195619571098827CF +:1025300077FD8095982F0E94552E2EE333EC4EE2C6 +:1025400059E30E94652F20E030E040EC5EE30E94FA +:10255000522D6093560370935703809358039093C2 +:10256000590389C010927C0410927D0410927E045D +:1025700010927F04CE0183709927892BE1F0BE0170 +:102580006170772780E090E00E94532E20E030E0D9 +:1025900040E05EE30E94652F20E030E040E45FE32E +:1025A0000E94522D609356037093570380935803F3 +:1025B000909359030CC080E090E0A0E0BFE38093CB +:1025C000560390935703A0935803B0935903C770D1 +:1025D000DD27CD2B09F04FC0109256031092570300 +:1025E000109258031092590346C010927C04109226 +:1025F0007D0410927E0410927F0400E010E020E041 +:102600003FE30093560310935703209358033093EE +:1026100059036739710578F180E090E00E94532EEC +:1026200020E030E047E153E40E94512D20E030E00B +:102630004AE754E40E94BA2D20E030E048E452E436 +:102640000E94652F20E030E040EA51E40E94972E7E +:102650000E94222E660F771F660F771FFB01EE5533 +:10266000FC4F2081318142815381C701B6010E9414 +:10267000652F6B017C01C701B601DF91CF911F91DE +:102680000F91FF90EF90DF90CF90BF90AF909F9011 +:102690008F9008958091DD040895CF93DF9300D04B +:1026A0001F92CDB7DEB79C0180916405843019F587 +:1026B00093E099833B832A839093E9008FEF909175 +:1026C000E800815095FD06C095ED9A95F1F7000060 +:1026D0008111F5CF8091E80085FF0DC040E050E00A +:1026E00063E070E0CE0101960E94AE158091E80093 +:1026F0008E778093E8000F900F900F90DF91CF912D +:102700000895CF93DF9300D01F92CDB7DEB720910D +:102710006405243021F522E029839B838A8383E0AA +:102720008093E9008FEF9091E800815095FD06C0FD +:1027300095ED9A95F1F700008111F5CF8091E800B1 +:1027400085FF0DC040E050E063E070E0CE010196EF +:102750000E94AE158091E8008E778093E8000F907C +:102760000F900F90DF91CF91089520916405243050 +:10277000F1F422E02093E9002FEF3091E80021509E +:1027800035FD06C035ED3A95F1F700002111F5CF82 +:102790002091E80025FF0BC040E050E065E070E0CC +:1027A0000E94AE158091E8008E778093E80008952E +:1027B000CF93DF93EC0190916405943009F046C00B +:1027C000809165038823D9F0809166038823B9F04E +:1027D0009093E9008FEF9091E800815095FD06C03D +:1027E00095E19A95F1F700008111F5CF8091E8000D +:1027F00085FF2CC040E050E060E170E017C081E050 +:102800008093E9008FEF9091E800815095FD06C01C +:1028100095ED9A95F1F700008111F5CF8091E800D0 +:1028200085FF14C040E050E068E070E0CE010E94F7 +:10283000AE158091E8008E778093E80080E1FE017C +:10284000ADECB4E001900D928A95E1F7DF91CF9164 +:10285000089580916305811109C00E9443170E9469 +:10286000A0178091E20084608093E20008951092A6 +:1028700063050895089508950C94E72542E061ECFE +:1028800081E00E94BD1642E061EC82E00E94BD162C +:1028900042E061EC83E00E94BD1642E161EC84E01D +:1028A0000C94BD1680916605833009F455C030F450 +:1028B000813071F0823009F48EC008958A3009F4B5 +:1028C0007AC08B3009F460C0893009F09CC020C008 +:1028D00080916505813A09F096C08091E800877F74 +:1028E0008093E8008091690590916A05892B21F415 +:1028F00060E18DEC94E003C060E080E090E070E087 +:102900000E94F9158091E8008B778093E800089584 +:1029100080916505813209F076C0809169059091BA +:102920006A05009719F0039709F06DC08091E800DF +:10293000877F8093E8008091E80082FD05C0809148 +:1029400064058111F8CF5FC08091F1008093DD04B0 +:102950008091E8008B7753C080916505813A09F03A +:1029600052C08091690590916A05892B09F04BC08E +:102970008091E800877F8093E8008091E80080FFE5 +:10298000FCCF8091650336C0809165058132D9F511 +:102990008091690590916A05892BA9F58091E800DD +:1029A000877F8093E8000E94F216809167058093EC +:1029B00065030C94281F80916505813221F5809173 +:1029C000E800877F8093E8000E94F21680916805F6 +:1029D0008093DE04089580916505813AA1F4809189 +:1029E000E800877F8093E8008091E80080FFFCCFBB +:1029F0008091DE048093F1008091E8008E778093CF +:102A0000E8000C94F216089584B7877F84BF88E1AC +:102A10000FB6F89480936000109260000FBE90E0B3 +:102A200080E80FB6F89480936100909361000FBE28 +:102A30000E94951A0E9443170E94A0178091E200FD +:102A400084608093E20078940E94261A0E94971A6C +:102A50008BE593E00E94411A80916405853069F40A +:102A60000E94A825809162058823B1F30E94D62593 +:102A7000882391F30E949815EFCF0E949F1AECCF04 +:102A8000292F332723303105C9F064F42130310573 +:102A900081F02230310509F043C08DE690E024E555 +:102AA00035E042C021323105F1F02232310541F1E9 +:102AB00037C082E190E021EC35E036C099278130C3 +:102AC000910541F08230910541F0892B49F5E0E50F +:102AD000F5E005C0E2E2F5E002C0E8EFF4E0849141 +:102AE00090E09F0121C06430D8F4E62FF0E0EE0FB3 +:102AF000FF1FE250FC4F2081318189E090E014C03B +:102B0000643070F470E0FB01EE0FFF1FEA50FC4FE1 +:102B100020813181FB01EE50FC4F808190E004C0A8 +:102B200080E090E020E030E0FA01318320830895D6 +:102B300080E189BD82E189BD09B400FEFDCF8091AD +:102B4000D8008F7D8093D8008091E00082608093D0 +:102B5000E0008091E00081FDFCCF0895CF92DF92EC +:102B6000EF92FF920F931F93CF93DF93EC018B01B2 +:102B70006A010E941117811133C0C114D10439F0C8 +:102B8000F60180819181081B190BC80FD91FE12C18 +:102B9000F12C0115110519F18091E80085FD16C091 +:102BA0008091E8008E778093E800C114D10449F049 +:102BB000F60180819181E80EF91EF182E08285E0C4 +:102BC0000FC00E941117882321F30AC089918093B6 +:102BD000F10001501109FFEFEF1AFF0ADACF80E090 +:102BE000DF91CF911F910F91FF90EF90DF90CF90E9 +:102BF000089520916B0530916C052617370748F032 +:102C00006115710539F42091E8002E772093E800D2 +:102C100001C0B90140E061157105A9F12091640579 +:102C2000222309F443C0253009F442C02091E80072 +:102C300023FD40C02091E80022FD32C02091E80031 +:102C400020FFE9CF4091F3002091F20030E0342BD7 +:102C5000FC01CF016115710559F02830310540F4B0 +:102C600081918093F100615071092F5F3F4FF1CF47 +:102C700041E02830310509F040E02091E8002E774E +:102C80002093E800C8CF4111C9CF0AC080916405E4 +:102C9000882361F0853061F08091E80083FD0AC0EF +:102CA0008091E80082FFF2CF80E0089582E00895ED +:102CB00083E0089581E0089520916B0530916C05C3 +:102CC0002617370748F06115710539F42091E8009F +:102CD0002E772093E80001C0B901FC0120E06115C6 +:102CE000710591F180916405882309F440C0853015 +:102CF00009F43FC08091E80083FD3DC08091E80069 +:102D000082FD2FC08091E80080FFE9CF2091F30081 +:102D10008091F20090E0922B6115710559F0883096 +:102D2000910540F424912093F1003196615071098E +:102D30000196F2CF21E0089709F020E08091E800A9 +:102D40008E778093E800CBCF2111CCCF0AC0809141 +:102D50006405882361F0853061F08091E80083FD8F +:102D60000AC08091E80082FFF2CF80E0089582E0FF +:102D7000089583E0089581E00895982F973058F5DD +:102D80009093E900981739F07091EC002091ED00D4 +:102D90005091F00003C0242F762F50E021FF19C07E +:102DA0003091EB003E7F3093EB003091ED003D7FA2 +:102DB0003093ED003091EB0031603093EB00709375 +:102DC000EC002093ED005093F0002091EE0027FFDF +:102DD00007C09F5FD3CF8F708093E90081E0089593 +:102DE00080E008958091650587FF11C08091E8001B +:102DF00082FD05C0809164058111F8CF11C08091DA +:102E0000E8008B770BC080916405882349F080919E +:102E1000E80080FFF8CF8091E8008E778093E8008B +:102E200008952091E4003091E50095E64091EC0092 +:102E3000842F817040FF22C08091E80080FD1CC07B +:102E400080916405882391F0853091F08091EB00AA +:102E500085FD10C04091E4005091E50042175307F2 +:102E600029F39A01915011F784E0089582E00895C2 +:102E700083E0089581E0089580E008954091E8009E +:102E800042FFDECF08950E94B1170E94B917E0EE0D +:102E9000F0E0808181608083E8EDF0E080818F77D1 +:102EA000808319BCA7EDB0E08C918E7F8C938081DC +:102EB0008F7E80831092630508950F931F93CF93A5 +:102EC000DF930E94B1170E94B917C8EDD0E0888146 +:102ED0008F77888388818068888388818F7D8883C5 +:102EE00019BC109264051092600510926205109250 +:102EF000610500EE10E0F80180818B7F808388817E +:102F00008160888342E060E080E00E94BD16E1EECF +:102F1000F0E080818E7F8083E2EEF0E0808181604E +:102F20008083808188608083F80180818E7F8083A8 +:102F3000888180618883DF91CF911F910F910895DF +:102F4000E8EDF0E080818F7E8083E7EDF0E0808126 +:102F50008160808384E082BF81E0809363050C946C +:102F60005D17E8EDF0E080818E7F80831092E200B3 +:102F700008951092DA001092E10008951F920F92C6 +:102F80000FB60F9211242F933F934F935F936F933C +:102F90007F938F939F93AF93BF93EF93FF93809112 +:102FA000E10082FF0BC08091E20082FF07C08091A8 +:102FB000E1008B7F8093E1000E94251A8091DA0066 +:102FC00080FF1FC08091D80080FF1BC08091DA0075 +:102FD0008E7F8093DA008091D90080FF0DC080E160 +:102FE00089BD82E189BD09B400FEFDCF81E08093F7 +:102FF00064050E94291405C019BC109264050E9442 +:1030000037148091E10080FF19C08091E20080FFB9 +:1030100015C08091E2008E7F8093E2008091E200F3 +:1030200080618093E2008091D80080628093D80014 +:1030300019BC85E0809364050E943B148091E100F7 +:1030400084FF30C08091E20084FF2CC080E189BD04 +:1030500082E189BD09B400FEFDCF8091D8008F7D4B +:103060008093D8008091E1008F7E8093E100809171 +:10307000E2008F7E8093E2008091E2008160809385 +:10308000E20080916005882311F084E007C0809100 +:10309000E30087FD02C081E001C083E08093640506 +:1030A0000E943C148091E10083FF29C08091E200DE +:1030B00083FF25C08091E100877F8093E10082E05B +:1030C00080936405109260058091E1008E7F80936B +:1030D000E1008091E2008E7F8093E2008091E20027 +:1030E00080618093E20042E060E080E00E94BD16D3 +:1030F0008091F00088608093F0000E943A14FF9164 +:10310000EF91BF91AF919F918F917F916F915F915F +:103110004F913F912F910F900FBE0F901F901895D8 +:103120001F920F920FB60F9211242F933F934F933C +:103130005F936F937F938F939F93AF93BF93CF933F +:10314000DF93EF93FF93C091E900CF708091EC0083 +:10315000D82FD17080FDD0E81092E9008091F00066 +:10316000877F8093F00078940E94D4181092E90031 +:103170008091F00088608093F000CD2BCF70C093D9 +:10318000E900FF91EF91DF91CF91BF91AF919F91B6 +:103190008F917F916F915F914F913F912F910F9000 +:1031A0000FBE0F901F9018951F93CF93DF93CDB74D +:1031B000DEB7AA970FB6F894DEBF0FBECDBFE5E627 +:1031C000F5E088E08E0F9091F10091938E13FBCF84 +:1031D0000E9452148091E80083FF1FC18091650511 +:1031E00090916605492F50E04A30510508F015C10D +:1031F000FA01E559FF4F0C944731803881F082384D +:1032000009F00BC1809169058F708093E90080916E +:10321000EB0085FB882780F91092E90006C08091B9 +:10322000610590916205911182609091E800977F0D +:103230009093E8008093F1001092F100C8C0282F0D +:103240002D7F09F0EAC0882319F0823061F0E5C0D3 +:1032500080916705813009F0E0C0933009F080E08B +:10326000809362052BC080916705811127C08091F2 +:1032700069058F7009F4D1C08093E9002091EB00BB +:1032800020FF1CC0933021F48091EB00806214C0B9 +:103290009091EB0090619093EB0021E030E0A90168 +:1032A00002C0440F551F8A95E2F74093EA0010923E +:1032B000EA008091EB0088608093EB001092E900B7 +:1032C0008091E800877F86C08111A7C010916705B3 +:1032D0001F778091E3008078812B8093E3008091B9 +:1032E000E800877F8093E8000E94F2168091E80052 +:1032F00080FFFCCF8091E30080688093E300111190 +:1033000002C082E001C083E08093640586C08058DB +:10331000823008F082C080916705909168058C3DED +:1033200053E0950779F583E08A838AE289834FB772 +:10333000F894DE01139620E03EE051E2E32FF0E046 +:1033400050935700E49120FF03C0E295EF703F5F78 +:10335000EF708E2F90E0EA3010F0C79601C0C09653 +:103360008D939D932F5F243149F74FBF8091E800E3 +:10337000877F8093E8006AE270E0CE0101960E94A8 +:10338000F91514C0AE014F5F5F4F609169050E944F +:103390004015BC01009709F440C09091E800977F68 +:1033A0009093E80089819A810E945C168091E800E0 +:1033B0008B778093E80031C0803879F58091E80000 +:1033C000877F8093E800809160058093F100809171 +:1033D000E8008E778093E8000E94F2161EC08111EB +:1033E0001CC0909167059230C0F48091E800877FFF +:1033F0008093E800909360050E94F216809160052A +:10340000811106C08091E30087FD02C081E001C008 +:1034100084E0809364050E943E148091E80083FF5D +:103420000AC08091E800877F8093E8008091EB00DC +:1034300080628093EB00AA960FB6F894DEBF0FBEB1 +:10344000CDBFDF91CF911F9108950895CF938091C3 +:1034500064058823A1F0C091E900CF709091EC0041 +:10346000892F817090FD80E8C82B1092E90080912F +:10347000E80083FD0E94D418CF70C093E900CF917B +:1034800008959093E4048093E3040895E091E304A5 +:10349000F091E404309721F00190F081E02D09943F +:1034A00080E00895E091E304F091E404309721F086 +:1034B0000280F381E02D09940895E091E304F091F6 +:1034C000E404309721F00480F581E02D09940895FB +:1034D0002091E1043091E2048217930771F09093F8 +:1034E000E2048093E104E091E304F091E404309776 +:1034F00021F00680F781E02D099408952091DF04E2 +:103500003091E0048217930771F09093E004809368 +:10351000DF04E091E304F091E404309721F00084AB +:10352000F185E02D0994089508950C94941A0E9451 +:103530001B260E94B30B0E94E5260C94B62C5F92CA +:103540006F927F928F929F92AF92BF92CF92DF92B3 +:10355000EF92FF920F931F93CF93DF9300D000D091 +:103560001F92CDB7DEB70E94F80B9EEEC92E94E0F5 +:10357000D92E03E010E0AA24A394B12C502E802F62 +:103580000E94730C4C01F601729062906F016826E4 +:10359000792661147104A1F40150110978F78FEFB5 +:1035A00089838A831B820E9424268160782F9D83D1 +:1035B0008C8349815A816B818D810E944F1B38C059 +:1035C0008091430581FD0E947C0C2BE030E0750169 +:1035D000022E02C0EE0CFF1C0A94E2F7C7018621FE +:1035E0009721892B09F129835A828E209F2091E00F +:1035F000892809F490E09B830E9424268160782F1B +:103600009D838C8349815A816B818D810E944F1BE0 +:10361000000F111FF801EA51FB4F80819181E826CC +:10362000F926F182E08204C02150310980F6B4CF3E +:103630000E94E8291091E5040E94461A1817D1F05B +:103640000E94461A8093E5040F900F900F900F9000 +:103650000F90DF91CF911F910F91FF90EF90DF902E +:10366000CF90BF90AF909F908F907F906F905F9022 +:103670000C949D0B0F900F900F900F900F90DF9177 +:10368000CF911F910F91FF90EF90DF90CF90BF905F +:10369000AF909F908F907F906F905F900895CF93A1 +:1036A000DF93CDB7DEB72B970FB6F894DEBF0FBE12 +:1036B000CDBF4F83588769877A878B87DE01119644 +:1036C00086E0FD0111928A95E9F785E0FE013796C3 +:1036D00001900D928A95E1F749815A816B817C8135 +:1036E0008D819E810E94C6212B960FB6F894DEBF75 +:1036F0000FBECDBFDF91CF910895CF93882309F4FA +:10370000C2C0C82F823859F40E94461A81FDBBC03E +:1037100089E30E94A0240E946D2589E30CC08338B0 +:1037200079F40E94461A80FDAEC083E50E94A02471 +:103730000E946D2583E50E94E224CF910C946D25B3 +:10374000843859F40E94461A82FD9DC087E40E9485 +:10375000A0240E946D2587E4EECF8CEF8C0F813A78 +:1037600048F48C2F0E941E2C81118DC08C2F0E943A +:10377000A024E3CF80E28C0F883048F4C77081E04A +:1037800001C0880FCA95EAF70E942625D6CF8BE59F +:103790008C0F833078F4C53A29F0C63A31F083E8CB +:1037A00090E005C081E890E002C082E890E0CF910F +:1037B0000C94681A88E58C0F833108F064C0C83A0D +:1037C00039F1C93A41F1CA3A49F1CB3A51F1CC3A0F +:1037D00059F1CD3A61F1C03B69F1CE3A71F1CF3A7E +:1037E00079F1C13B81F1C23B89F1C33B91F1C43B0B +:1037F00099F1C53BA1F1C63BA9F1C73BB1F1C83B6B +:10380000B9F1C93BC1F1CA3BC9F180E090E038C0D1 +:1038100082EE90E035C089EE90E032C08AEE90E012 +:103820002FC085EB90E02CC086EB90E029C087EBA1 +:1038300090E026C08CEC90E023C08DEC90E020C09E +:1038400083E891E01DC08AE891E01AC082E991E026 +:1038500017C084E991E014C081E292E011C083E2D4 +:1038600092E00EC084E292E00BC085E292E008C0D4 +:1038700086E292E005C087E292E002C08AE292E02E +:10388000CF910C947E1ACF910895882309F44BC0F0 +:10389000823859F40E94461A81FF45C089E30E948C +:1038A000A0240E946D2589E30CC0833871F40E9426 +:1038B000461A80FF38C083E50E94A0240E946D252F +:1038C00083E50E94E2240C946D25843859F40E940B +:1038D000461A82FF28C087E40E94A0240E946D251A +:1038E00087E4EFCF9CEF980F913A58F390E2980F4E +:1038F000983050F4877091E001C0990F8A95EAF7EB +:10390000892F0E942C25DFCF9BE5980F933020F460 +:1039100080E090E00C94681A885A833120F480E0AB +:1039200090E00C947E1A0895882321F00E942625A9 +:103930000C946D250895882321F00E942C250C9469 +:103940006D2508957F928F929F92AF92BF92CF92F2 +:10395000DF92EF92FF920F931F93CF93DF931F920B +:10396000CDB7DEB77C01C62E772EFC01058102950E +:103970000F70128111110E9443250E9499248823FF +:1039800079F0112369F080E28C0D883048F082E0F4 +:103990000E9482240E94992491E0D82ED92601C049 +:1039A000D12CE72DE295EF70F0E0EB58FF4F0C942F +:1039B0004731872D807F072D0F70882311F00295E6 +:1039C000007F112389F0002309F499C180E28C0D56 +:1039D000883020F4802F0E94262503C0802F0E946B +:1039E00036250E946D258BC18C2D0E94451C00231D +:1039F00009F4C3C180E28C0D883020F4802F0E942E +:103A00002C2503C0802F0E943C250E946D25B5C146 +:103A1000872D807F972D9F70803211F4892F03C0EE +:103A2000892F8295807FCC2021F0F1E0CF16A1F084 +:103A30001DC0112339F0002319F1013009F50E944E +:103A400056259BC1002319F0013009F496C18983E2 +:103A50000E945925898110C1112321F0063008F0F8 +:103A60008CC10EC0053008F088C106C1112359F081 +:103A7000002331F0F701958190FF41C19F7095833C +:103A80000E94941C7AC1002309F4F6C03EC1872D20 +:103A900086958695837090E0009719F0019761F004 +:103AA0006CC1112321F08C2D972D937002C080E002 +:103AB00090E00E94681A61C1112321F08C2D972D8E +:103AC000937002C080E090E00E947E1A56C18C2D57 +:103AD000112319F00E94F02802C00E9458290E9468 +:103AE000DD294BC1872D837009F052C0111145C1EA +:103AF0008C2D829586958770880F880F9C2D9F70DE +:103B0000892E912CA12CB12C082E04C0880C991C54 +:103B1000AA1CBB1C0A94D2F7C4FE14C00FE010E02C +:103B200020E030E0B901A80104C0440F551F661F12 +:103B3000771F8A95D2F7CB01BA0160957095809571 +:103B4000909503C060E070E0CB01272D2695269567 +:103B5000237030E02230310569F02330310589F0DF +:103B6000682979298A299B292130310571F00E9421 +:103B70000E2303C1682979298A299B290E942A23B7 +:103B8000FCC00E940E23C501B4010E94F222F5C0C0 +:103B9000112319F0872D817001C08695882309F4BF +:103BA000ECC08C2D829586958770880F880F9C2D90 +:103BB0009F70892E912CA12CB12C082E04C0880C4A +:103BC000991CAA1CBB1C0A94D2F7C4FE14C00FE0B7 +:103BD00010E020E030E0B901A80104C0440F551FF7 +:103BE000661F771F8A95D2F7CB01BA016095709551 +:103BF0008095909503C060E070E0CB01272D26955D +:103C000026952370422F50E04230510569F0433031 +:103C1000510589F0682979298A299B294130510564 +:103C200071F00E94E823A9C0682979298A299B2973 +:103C30000E940424A2C00E94E823C501B4010E948E +:103C4000CC239BC08C2D90E0FC01E05EF109E531B6 +:103C5000F10508F050C0EB57FF4F0C9447310C2D85 +:103C60000F70872D8F71112321F00E946523802F03 +:103C700007CF0E948623802F0E949B1C7EC01123A9 +:103C800041F0053008F079C0872D8F710E94AB2379 +:103C900074C0063008F071C0F7CF112339F0872DBA +:103CA0008F710E94652369C01123C9F3872D8F711D +:103CB0000E94862362C0112329F0872D8F710E94F4 +:103CC00050235BC00E94462358C0112351F0172D8A +:103CD0001F71812F0E94652363E0812F0E94792448 +:103CE0004CC081E00E948224023008F446C082E089 +:103CF0000E94822442C0112331F0002381F28C2DD6 +:103D00000E947D1B3AC0002389F28C2D0E94451C25 +:103D100034C0472D4F706C2DC7010E9465040E946E +:103D20006A222BC0111129C0472D4F7050E042303C +:103D30005105B9F04CF44115510581F04130510560 +:103D4000E1F40E94DE2C19C04330510569F0443083 +:103D5000510599F48C2D0E94302D0FC00E94C72C64 +:103D60000CC00E94FA2C09C00E940D2D06C0472DE0 +:103D70004F706C2DC7010E943E08DD20F9F00E94B3 +:103D8000752480FD1BC0F70112820E946F240E94DF +:103D90006523C7010E94ED1E0E946F240F90DF91E2 +:103DA000CF911F910F91FF90EF90DF90CF90BF9038 +:103DB000AF909F908F907F900C9486230F90DF910F +:103DC000CF911F910F91FF90EF90DF90CF90BF9018 +:103DD000AF909F908F907F9008950F931F93CF93F4 +:103DE000DF93EC01888199812B813C81232BB9F0F1 +:103DF0009F3F11F48F3F99F0CE010E943D0688232A +:103E000071F0688179818A810E946B248C010E9403 +:103E100020240E94E722B801CE010E94A21CDF915B +:103E2000CF911F910F9108950E9443250E94532521 +:103E30000E9418250E946D250E948E2A0E94DD296D +:103E400080E090E00E94681A80E090E00C947E1A76 +:103E50000E9433250C94141F0E946024292F229560 +:103E60002F7030E02C3031054CF42A3031056CF4E1 +:103E70002250310922303105A8F407C02C30310519 +:103E800069F02F30310551F00DC0803F69F018F412 +:103E9000803E40F409C0843F29F406C093FB882784 +:103EA00080F9089580E0089581E00895CF93DF932D +:103EB00000D000D01F92CDB7DEB70F900F900F90BB +:103EC0000F900F90DF91CF910895CF93DF9300D0A3 +:103ED00000D000D0CDB7DEB726960FB6F894DEBF7F +:103EE0000FBECDBFDF91CF9108951F93CF93DF9386 +:103EF000C091EE0416E08091EF04C81799F0D0E06D +:103F00001C9FF0011D9FF00D1124E051FB4F4081DB +:103F1000518162817381848195810E94651F219600 +:103F2000C770E9CFDF91CF911F910895409120058F +:103F300050912105609122057091230580912405FF +:103F4000909125050C94651F8091250582958F70B1 +:103F500009F054C080912205882309F44FC0809154 +:103F6000EE04A091EF04609120057091210540912D +:103F7000230550912405B6E08A1709F43FC090E06C +:103F800041155105C1F17F3F11F46F3FA1F1B89F79 +:103F9000F001B99FF00D1124E051FB4F2181721304 +:103FA0002AC02081621327C02281211124C02381CD +:103FB00034812417350710F421503109241B350BA7 +:103FC000283C3105C0F4209125052F7020612093F5 +:103FD000250526E0289FF001299FF00D1124EB50C4 +:103FE000FB4F80818F708061808380E295E00E942A +:103FF000ED1E0C94751F01968770BECF0895CF9269 +:10400000DF92EF92FF920F931F93CF93DF93CDB781 +:10401000DEB762970FB6F894DEBF0FBECDBF8C013E +:1040200085E0F801DE011D9601900D928A95E1F779 +:10403000D8014C9111965C91119712966C91129740 +:104040001396CD90DC901497309120057091210546 +:104050008091230590912405009709F46BC17F3F5F +:1040600019F43F3F09F466C1E0902205EE2009F4FF +:10407000C0C020912505C816D90628F0F601E81B16 +:10408000F90BCF0104C0809590958C0D9D1DFF24E8 +:10409000F394883C910578F0F12C207F09F0C6C09C +:1040A0007C2DD98AC88A89890E94561F80E295E0B2 +:1040B0000E94ED1EB1C0822F807F09F046C07513AB +:1040C00014C0341312C0611110C02F7020612093EE +:1040D00025050E94961F80E295E00E94ED1E8091CA +:1040E0002505D80115968C932EC0CD2819F15F3F78 +:1040F00011F44F3FF9F0F62E61111CC08091EE04CF +:104100002091EF0436E0821709F45AC090E0389FFE +:10411000F001399FF00D1124E051FB4F71815713CD +:1041200006C07081471303C07281711103C00196EC +:104130008770E9CFF62E662309F418C18091250512 +:10414000816080932505F12C11C1751308C03413CB +:1041500006C0611104C080912505D801C3C04D87F8 +:104160005E878D859E856A8B0E942C1F6A898823B5 +:10417000E1F16623D1F120912505822F82958F7080 +:1041800090E0029774F08091200590912105988726 +:104190008F831986DB86CA862C87CE0107960E94FC +:1041A000ED1E86E0F801A0E2B5E001900D928A953F +:1041B000E1F70E94A41F0E94961FFF24F394D6C02B +:1041C0004D875E878D859E850E946024292F2295CC +:1041D0002F7030E0223031050CF0BCC09F7009F028 +:1041E000B6C0805E883008F4C1C0C8010E94ED1ED0 +:1041F000E4CFC816D90608F453C0F601E81BF90B42 +:10420000CF01883C910508F450C0F12C7C2DD98A4F +:10421000C88A89890E94561FE0E2F5E086E0DF0146 +:104220001D928A95E9F70E94961FA0C0751314C0CD +:10423000341312C0611110C080912505F8018583E7 +:10424000C8010E94ED1E86E0E0E2F5E0DF011D926C +:104250008A95E9F7FE2C8AC04D875E878D859E85FD +:104260006A8B0E942C1F6A89882309F4BECF6623BB +:1042700009F4BBCF20912505822F82958F7090E0A5 +:1042800002970CF48ECF80912005909121059A839E +:1042900089831B82DD82CC822E83CE0101967FCF63 +:1042A000809590958C0D9D1DACCFF62E662309F45C +:1042B0009CCF75132EC034132CC02091250520FDF2 +:1042C0001FC0822F82958F70D9F0D80115962C933C +:1042D00015978F3049F08F5F982F9295907F822F9E +:1042E0008F70892B15968C93C8010E94ED1E86E075 +:1042F000F801A0E2B5E001900D928A95E1F793CF25 +:1043000086E0F801A0E2B5E001900D928A95E1F710 +:104310002DC04D875E878D859E850E942C1F811143 +:1043200040CF80912505816080932505C8010E94BA +:10433000ED1E1CC0662309F458CF4D875E878D851E +:104340009E850E942C1F882309F44FCF2ACF81110C +:1043500048CF0CC0243031050CF047CF9F7009F4D2 +:1043600040CFF8019581907F09F03BCF8F2D629669 +:104370000FB6F894DEBF0FBECDBFDF91CF911F9176 +:104380000F91FF90EF90DF90CF9008951F93CF9300 +:10439000DF93CDB7DEB72C970FB6F894DEBF0FBE14 +:1043A000CDBF4F83588769877A878B879C87CE01DB +:1043B00007960E94FF1F882369F08F8198852A85C0 +:1043C0003B85232BF1F19F3F09F063C08F3F09F03C +:1043D00060C037C086E0FE013796DE01119601907D +:1043E0000D928A95E1F76F817885EA85FB85309794 +:1043F00041F17F3F11F46F3F21F12091EF0430E054 +:10440000C9010196877099274091EE0450E0841706 +:10441000950709F447C069837A83FD83EC8396E0AE +:10442000929FD001939FB00D1124A051BB4FFE016C +:10443000319601900D929A95E1F78093EF040E94D6 +:10444000751F16E08091EE049091EF048917C1F179 +:10445000189FC001112480519B4F0E94FF1F882389 +:1044600079F1E091EE041E9FF0011124E051FB4F21 +:104470004081518162817381848195810E94651F91 +:104480008091EE0490E00196877099278093EE0466 +:10449000D9CF4F81588569857A858B859C850E9407 +:1044A000651FCFCF0E94281F1092EF041092EE04D8 +:1044B000E0E2F5E086E0DF011D928A95E9F7C1CFE1 +:1044C0002C960FB6F894DEBF0FBECDBFDF91CF9113 +:1044D0001F910895EF92FF920F931F93CF93DF9355 +:1044E0008C01009709F46CC0F12CEE24E394E801F0 +:1044F0002196F8018491843740F4843008F051C04B +:10450000813081F0823019F15BC0853709F444C0F5 +:10451000A8F19CE7980F903708F052C08F770E945F +:10452000451C41C00E5F1F4FFE01C49180E28C0FFD +:10453000883048F4C7708E2D01C0880FCA95EAF7FD +:104540000E94462514C08C2F0E947D1B2DC00E5F3B +:104550001F4FFE01C49180E28C0F883058F4C77061 +:104560008E2D01C0880FCA95EAF70E944C250E9443 +:104570006D251AC08C2F0E94451C16C00E5F1F4F60 +:10458000FE01C491CC2381F08FE99FE00197F1F700 +:1045900000C00000C150F6CF0E5F1F4FFE01F49027 +:1045A00003C00E947D1B8E018F2D882309F49FCFAD +:1045B000EFE9FFE03197F1F700C000008150F5CF3F +:1045C000DF91CF911F910F91FF90EF900895089583 +:1045D00060932A0570932B0580932C0590932D05ED +:1045E0000C94141F0F931F9300912A0510912B0513 +:1045F00020912C0530912D05DC01CB01802B912BD6 +:10460000A22BB32B80932A0590932B05A0932C0506 +:10461000B0932D051F910F910C94141F0F931F93AE +:1046200000912A0510912B0520912C0530912D0524 +:10463000DC01CB0180239123A223B32380932A059D +:1046400090932B05A0932C05B0932D051F910F91EE +:104650000C94141F0F931F9300912A0510912B05A2 +:1046600020912C0530912D05DC01CB01802791276D +:10467000A227B32780932A0590932B05A0932C059E +:10468000B0932D051F910F910C94141F10922605C5 +:104690001092270510922805109229050C94141FDA +:1046A00041E050E060E070E004C0440F551F661F19 +:1046B000771F8A95D2F7409326055093270560937C +:1046C0002805709329050C94141F41E050E060E028 +:1046D00070E004C0440F551F661F771F8A95D2F7FC +:1046E0008091260590912705A0912805B091290574 +:1046F000482B592B6A2B7B2B40932605509327057B +:1047000060932805709329050C94141F41E050E034 +:1047100060E070E004C0440F551F661F771F8A9544 +:10472000D2F74095509560957095809126059091AF +:104730002705A0912805B0912905482359236A230C +:104740007B2340932605509327056093280570939B +:1047500029050C94141F41E050E060E070E004C0B3 +:10476000440F551F661F771F8A95D2F78091260543 +:1047700090912705A0912805B09129054827592730 +:104780006A277B27409326055093270560932805C9 +:10479000709329050C94141F0F931F930091260505 +:1047A000109127052091280530912905DC01CB01C6 +:1047B000802B912BA22BB32B80932605909327055A +:1047C000A0932805B09329051F910F910C94141FF5 +:1047D0000F931F930091260510912705209128051E +:1047E00030912905DC01CB0180239123A223B3233F +:1047F0008093260590932705A0932805B09329055B +:104800001F910F910C94141F0F931F930091260575 +:10481000109127052091280530912905DC01CB0155 +:1048200080279127A227B3278093260590932705F9 +:10483000A0932805B09329051F910F910C94141F84 +:104840000895CF92DF92EF92FF920F931F93CF9331 +:10485000DF938C01C0902A05D0902B05E0902C05A9 +:10486000F0902D058091260590912705A0912805AF +:10487000B0912905C82AD92AEA2AFB2ACFE1D0E03B +:10488000D701C6010C2E04C0B695A79597958795BC +:104890000A94D2F780FF06C0B8018C2F0E94C30A89 +:1048A000019721F4219760F780E001C08C2FDF9100 +:1048B000CF911F910F91FF90EF90DF90CF900895CF +:1048C000CF93DF93EC010E942124BE010E94C30A12 +:1048D000DF91CF910895CB010E94602408958091CB +:1048E0002E05859585958595089580912E0587706F +:1048F000089598E0899F90011124262B20932E057E +:104900000C94652320912E058095822380932E059B +:10491000982F977069F430E0482F552747FD509540 +:104920002417350729F08595859585950C94862360 +:10493000089590912E05977081E009F480E0089524 +:1049400090916503992321F090916603911109C01C +:104950002091670330916803F90132969FEF40E0A0 +:104960001FC0982F9695969596959F3050F5E0919B +:104970006703F0916803E90FF11D877021E030E0D3 +:10498000A90102C0440F551F8A95E2F7CA0191811F +:10499000892B818308959F3F39F04F5F4E3041F05E +:1049A00051915813F8CF0DC05111F7CF942FF5CF77 +:1049B0009F3F39F0F901E90FF11D97FDFA958283C8 +:1049C0000895089590916503992321F090916603CD +:1049D000911109C02091670330916803F901329663 +:1049E000205F3F4F1FC0982F9695969596959F30C4 +:1049F000F0F4E0916703F0916803E90FF11D87700F +:104A000021E030E0A90102C0440F551F8A95E2F76A +:104A1000CA01809591818923818308953196E21797 +:104A2000F30729F090819813F9CF1082F7CF0895FA +:104A300081E090E0E0916703F0916803E80FF91FCF +:104A40001082019680319105A9F708959091420551 +:104A5000892B809342050895809590914205892382 +:104A60008093420508951092420508959091410562 +:104A7000892B809341050895809590914105892364 +:104A80008093410508951092410508959091400545 +:104A9000892B809340050895809590914005892346 +:104AA00080934005089510924005089580932F0546 +:104AB000089510922F0508958091670390916803DF +:104AC000FC0131969C01205F3F4F80E09191911154 +:104AD0008F5FE217F307D1F70895E0916703F09134 +:104AE0006803809142058083E0916703F091680339 +:104AF000908180914105892B8083E0916703F0913B +:104B00006803908180914005892B808380912F05D7 +:104B1000882361F0E0916703F09168039081892B0D +:104B200080830E945C25811110922F05809167037C +:104B3000909168030C94521A20E0009739F0AC0170 +:104B400041505109842395232F5FF7CF822F089579 +:104B500080916405843039F11092440520E488E1A5 +:104B600090E00FB6F894A895809360000FBE209354 +:104B7000600080E00E94C00380E00E949D0B83B72C +:104B8000817F846083BF83B7816083BF7894889579 +:104B900083B78E7F83BF88E10FB6F894809360005F +:104BA000109260000FBE08950895089580E00E945D +:104BB000C0030E94D4250E94F80B0E94D5250E94B4 +:104BC0007D0C91E0811101C090E0892F08950E9431 +:104BD000281F80E00E94C0030E94B62C0E94461A43 +:104BE0000C949D0B1F920F920FB60F9211248F936E +:104BF0009F93AF93BF9380914405811113C080911F +:104C0000450590914605A0914705B091480541960C +:104C1000A11DB11D8093450590934605A0934705BE +:104C2000B0934805BF91AF919F918F910F900FBEA8 +:104C30000F901F90189582E084BD93E095BD9AEF88 +:104C400097BD80936E0008952FB7F8948091450525 +:104C500090914605A0914705B09148052FBF089552 +:104C6000CF92DF92EF92FF920F931F932FB7F8949A +:104C70004091450550914605609147057091480562 +:104C80002FBF6A017B01EE24FF248C0120E030E07D +:104C9000C016D106E206F30610F4415051099A01FC +:104CA000281B390BC9011F910F91FF90EF90DF90E6 +:104CB000CF9008951F920F920FB60F9211248F93E9 +:104CC0009F93AF93BF938091450590914605A09126 +:104CD0004705B09148050196A11DB11D809345057A +:104CE00090934605A0934705B0934805BF91AF91B7 +:104CF0009F918F910F900FBE0F901F9018950E945B +:104D00004317F8942FEF87EA91E6215080409040B6 +:104D1000E1F700C0000087E090EBDC0180936F05B5 +:104D200090937005A0937105B09372059CE088E1A3 +:104D30000FB6F894A895809360000FBE9093600022 +:104D4000FFCFCF92DF92EF92FF920F931F93CF93FB +:104D5000DF93D82FC3E0EE24E394F12C8C2F0E9434 +:104D6000730C6C010BE010E09701002E02C0220FC3 +:104D7000331F0A94E2F72C213D21232B49F0602FA9 +:104D80007C2F80E00E943F08D81302C081E006C05B +:104D90000150110948F7C15008F780E0DF91CF9129 +:104DA0001F910F91FF90EF90DF90CF900895CF93D8 +:104DB000C82F8CE20E94A126882321F08C2FCF914E +:104DC0000C94A12680E0CF910895CF930E943628BD +:104DD000811102C00E941228C5E6C15049F00E940C +:104DE000F80B8FE39CE90197F1F700C00000F5CFC5 +:104DF00089E20E94D726811113C18AE20E94D72638 +:104E000081110E94122885E00E94D72681110E94FC +:104E10007F260E9441288093430587E00E94D72681 +:104E20008823A9F18BE10E94D726882351F0809135 +:104E3000430581FB222720F991E0922790FB81F91D +:104E40000EC08EE00E94D726882361F08091430532 +:104E500082FB222720F991E0922790FB82F9809330 +:104E6000430515C080E10E94D72690914305882311 +:104E700041F093FB222720F981E0822780FB93F900 +:104E800004C0892F809580FB90F990934305809111 +:104E900043050E9445280E94532880936D0580EEAB +:104EA0000E94D726882341F080916D05982F909518 +:104EB00090FB80F980936D0589E30E94D7268823B3 +:104EC00059F080916D0581FB222720F991E092270E +:104ED00090FB81F980936D0582EE0E94D72688238E +:104EE00059F080916D0582FB222720F991E09227ED +:104EF00090FB82F980936D0586EE0E94D726882369 +:104F000059F080916D0583FB222720F991E09227CB +:104F100090FB83F980936D0583EE0E94D72688234A +:104F200059F080916D0584FB222720F991E09227AA +:104F300090FB84F980936D0585E30E94D726882332 +:104F400059F080916D0585FB222720F991E0922789 +:104F500090FB85F980936D0581E30E94D726882315 +:104F600059F080916D0586FB222720F991E0922768 +:104F700090FB86F980936D0581E10E94D7268823F6 +:104F800059F080916D0587FB222720F991E0922747 +:104F900090FB87F980936D0580916D050E945728DD +:104FA00080916D0587FB882780F98093660387E2EF +:104FB0000E94D726C82F8EE10E94D7268111C26099 +:104FC0008FE10E94D7268111C46080E20E94D7261B +:104FD0008111C86081E20E94D7268111C06182E2FE +:104FE0000E94D7268111C06283E20E94D7268111D8 +:104FF000C06484E20E94D726882311F0C06802C0F2 +:10500000CC2329F08C2F0E944E286C2F03C00E94C5 +:105010004A28682F70E080E090E0CF910C94E8225D +:10502000CF9108956DEE7EEF80E090E00E946D31AB +:1050300060E082E090E00E945B3160E083E090E01D +:105040000E945B3160E084E090E00E945B3160E0B0 +:1050500085E090E00E945B3160E086E090E00E9495 +:105060005B316FEF87E090E00C945B3180E090E083 +:105070000E94553121E08D3E9E4F09F020E0822FA5 +:10508000089582E090E00C944D31682F82E090E02A +:105090000C945B3183E090E00C944D31682F83E0F9 +:1050A00090E00C945B3184E090E00C944D31682FDB +:1050B00084E090E00C945B3186E090E00C944D31FC +:1050C000682F86E090E00C945B3187E090E00C94D0 +:1050D0004D31682F87E090E00C945B3180914B0557 +:1050E00080FF0BC060916C0385E0689FB0011124C4 +:1050F00075956795759567952BC081FF09C060917F +:105100006C0385E0689FB00111247595679520C0F8 +:1051100082FF07C060916C0385E0689FB001112495 +:1051200017C090914C059923D1F060916B039617AD +:1051300088F720916C0385E0289F90011124929FAD +:10514000A001939F500D112470E0CA010E943331D9 +:105150006038710540F46115710539F002C065E0F1 +:1051600070E0862F08958FE7089581E0089580917B +:105170004B0580FF08C060916A0370E075956795E4 +:105180007595679521C081FF06C060916A0370E044 +:105190007595679519C082FF04C060916A0370E03D +:1051A00010C090914C059923C1F060916903961746 +:1051B000A0F780916A03899FC001112470E00E94CA +:1051C00033316038710528F46115710521F0862F9F +:1051D00008958FE7089581E0089561E070E0F4CFCD +:1051E000803F21F40E946E28819504C0813F29F4FC +:1051F0000E946E2880934F050895823F21F40E94FB +:105200006E28819504C0833F29F40E946E28809304 +:105210004E050895893F19F40E94B72805C08A3FBA +:1052200031F40E94B72881958093500508958B3FF3 +:1052300021F40E94B728819504C08C3F29F40E9474 +:10524000B728809351050895843F21F480914D053E +:10525000816017C0853F21F480914D05826011C0A7 +:10526000863F21F480914D0584600BC0873F21F477 +:1052700080914D05886005C0883F31F480914D05CF +:10528000806180934D0508958D3F21F480914B05F9 +:1052900081600BC08E3F21F480914B05826005C078 +:1052A0008F3F29F480914B05846080934B050895CE +:1052B000803F39F480914F0587FF6CC010924F05F5 +:1052C00069C0813F29F480914F051816BCF362C074 +:1052D00090914E05823F29F497FF5CC010924E05D5 +:1052E00059C0833F19F41916CCF354C0893F41F4D7 +:1052F0008091500518160CF04DC0109250054AC010 +:105300008A3F29F48091500587FF44C0F6CF8B3F38 +:1053100039F48091510587FF3DC0109251053AC084 +:105320008C3F29F4809151051816BCF333C0843F9B +:1053300021F480914D058E7F17C0853F21F4809127 +:105340004D058D7F11C0863F21F480914D058B7FE7 +:105350000BC0873F21F480914D05877F05C0883FB2 +:1053600031F480914D058F7E80934D0513C08D3FA4 +:1053700021F480914B058E7F0BC08E3F21F48091EC +:105380004B058D7F05C08F3F29F480914B058B7FA6 +:1053900080934B0580914E0581110EC080914F0581 +:1053A00081110AC080915005811106C0809151057C +:1053B000811102C010924C0508958DE495E00E9481 +:1053C0005D1A0E94242690934A058093490508950A +:1053D0001F93CF93DF938091490590914A050E94D6 +:1053E0003026AC0190914C05992321F020916D035A +:1053F00030E006C020916E038AE0289F90011124BE +:105400004217530708F486C080914E05C0914F059E +:10541000D091500510915105811107C0C11176C07E +:10542000D11174C0111172C075C09F3F19F09F5FF8 +:1054300090934C05181624F40E946E2880934E0514 +:1054400080914E0587FF05C00E946E28819580934C +:105450004E051C1624F40E946E2880934F058091FF +:105460004F0587FF05C00E946E28819580934F05E8 +:1054700060914E05662339F1C0914F05CC2319F197 +:10548000772767FD7095872F972F0E94552E23E36E +:1054900033E343E35FE30E94652F0E94222E609373 +:1054A0004E056C2F772767FD7095872F972F0E94E9 +:1054B000552E23E333E343E35FE30E94652F0E940D +:1054C000222E60934F051D1624F40E94B728809366 +:1054D00050058091500587FF05C00E94B72881952F +:1054E00080935005111624F40E94B728809351052B +:1054F0008091510587FF05C00E94B7288195809350 +:105500005105DF91CF911F910C94DD299F3F09F048 +:105510008ECF96CFDF91CF911F910895EDE4F5E006 +:1055200085E0DF011D928A95E9F710924C051092F3 +:105530004B050895833081F128F4813059F0823091 +:10554000D1F00895853009F449C0B8F1863009F4E6 +:1055500056C0089580916E03262F30E0280F311D2C +:105560002F3F310524F4680F60936E0308958FEF89 +:1055700080936E03089580916D03262F30E0280FED +:10558000311D2F3F310524F4680F60936D0308959A +:105590008FEF80936D03089580916C03262F30E088 +:1055A000280F311D2F3F310524F4680F60936C03E1 +:1055B00008958FEF80936C03089580916B03262FDD +:1055C00030E0280F311D2F3F310524F4680F609320 +:1055D0006B0308958FEF80936B03089580916A03A6 +:1055E000262F30E0280F311D2F3F310524F4680F9E +:1055F00060936A0308958FEF80936A030895809102 +:105600006903262F30E0280F311D2F3F310524F488 +:10561000680F6093690308958FEF8093690308957D +:10562000833011F128F4813049F0823091F00895EF +:10563000853081F120F18630C1F1089580916E03AB +:10564000681720F4861B80936E03089510926E03F2 +:10565000089580916D03681720F4861B80936D0375 +:10566000089510926D03089580916C03681720F4DB +:10567000861B80936C03089510926C0308958091AB +:105680006B03681720F4861B80936B0308951092B8 +:105690006B03089580916A03681720F4861B80933A +:1056A0006A03089510926A03089580916903681748 +:1056B00020F4861B8093690308951092690308956E +:1056C0000F931F938B3109F470C0A0F58E3009F44D +:1056D0007FC0C0F4873009F456C068F4863009F002 +:1056E000A5C080914305817F8E7F8093430581E033 +:1056F000809353059CC0883009F491C08B3009F425 +:105700008EC094C0813109F46DC068F4803109F015 +:105710008DC08091430583FB222720F991E09227D9 +:1057200090FB83F94BC0863109F479C0893109F4C3 +:1057300076C07CC0853309F474C068F4873209F4FC +:1057400070C028F48E3108F471C08D5155C0893273 +:1057500009F467C06BC0833438F48A3308F04BC057 +:10576000883309F45CC062C0833409F45AC08834B9 +:1057700009F05CC00E94281F0E94AD0C0E94940595 +:105780000E947F264CC090914305892F809581709F +:1057900080FB90F929F0966098609093430547C08C +:1057A000997F977F909343053AC08091430581FB91 +:1057B000222720F991E0922790FB81F980934305FD +:1057C000992369F18091430581608093430527C047 +:1057D0008091430582FB222720F991E0922790FBDC +:1057E00082F9ECCF0E94281F9091660381E08927FF +:1057F0008093660314C0895341E050E060E070E09C +:105800008A019B0104C0000F111F221F331F8A95BC +:10581000D2F7C901B8010E94E8220E94281F81E046 +:1058200006C061E070E080E090E0F5CF80E01F917D +:105830000F91089580E0089580E00895CF93C82FD8 +:1058400080915305813069F018F08230C9F184C02D +:10585000E0916703F09168038081823209F07EC095 +:1058600007C0E0916703F09168038081823261F4A0 +:105870008C2F0E941A2C811104C08C2F0E94602B47 +:105880001DC081E090E01AC08C2F0E941C2C811159 +:1058900014C0C43179F048F4CB3079F0C03109F04C +:1058A00061C082E08093530508C0C93219F0C83343 +:1058B00021F058C01092530555C081E0817054C04A +:1058C000C93291F120F5C43179F1B0F4C73009F053 +:1058D00047C08EE180936E0382E380936D038AE07C +:1058E00080936C0384E180936B0388E080936A0368 +:1058F00088E28093690334C0CE51C63088F5EC2F1E +:10590000F0E0EA5FFB4F80818093520529C0CE34DE +:10591000E9F020F4CB3421F56AE013C0C13579F009 +:10592000C235F1F461E00DC080915205882319F071 +:105930001092520515C081E08093530515C061E0B7 +:1059400006C0809152050E949A2A0AC06AE080919E +:1059500052050E94102B04C01092530580E004C031 +:1059600081E002C080E0AACFCF9108950E9436283E +:10597000811102C00E9412280E945C2880936E054B +:1059800080FF02C0869501C080E00C94C003809126 +:105990006E05982F9695292F30E0233031054CF471 +:1059A0009F5F990F8170892B816080936E050E94A3 +:1059B000602880916E0586950C94C00380916E05D9 +:1059C000982F969591F09158990F8170892B80931B +:1059D0006E058E7F91E009F490E080916E0590FB5A +:1059E00080F980936E050E94602880916E058695EF +:1059F0000C94C00380916E05982F909590FB80F9D0 +:105A000080936E050E94602880916E0580FF02C021 +:105A1000869501C080E00C94C00390916E05892F9B +:105A200086958F5F8F779170843028F4880F892B4B +:105A300080936E0502C090936E0580916E058E7FF7 +:105A400091E009F490E080916E0590FB80F98093DD +:105A50006E050E94602880916E0586950C94C003A7 +:105A600020916E05922F96958927982F990F822F56 +:105A70008170892B80936E058E7F91E009F490E010 +:105A800080916E0590FB80F980936E050E946028DE +:105A900080916E0586950C94C00380916E05869565 +:105AA00008955058BB27AA270ED0D1C1C2D130F0DB +:105AB000C7D120F031F49F3F11F41EF4B7C10EF4AA +:105AC000E095E7FB9FC1E92FD3D180F3BA176207B6 +:105AD00073078407950718F071F49EF5EBC10EF477 +:105AE000E0950B2EBA2FA02D0B01B90190010C01EE +:105AF000CA01A0011124FF27591B99F0593F50F406 +:105B0000503E68F11A16F040A22F232F342F44275D +:105B1000585FF3CF469537952795A795F040539555 +:105B2000C9F77EF41F16BA0B620B730B840BBAF025 +:105B30009150A1F0FF0FBB1F661F771F881FC2F790 +:105B40000EC0BA0F621F731F841F48F487957795A4 +:105B50006795B795F7959E3F08F0B3CF9395880F5B +:105B600008F09927EE0F97958795089527D108F4A7 +:105B700081E008950CD06BC163D140F05AD130F070 +:105B800021F45F3F19F03EC1511195C14FC170D151 +:105B900098F39923C9F35523B1F3951B550BBB27F4 +:105BA000AA2762177307840738F09F5F5F4F220FA1 +:105BB000331F441FAA1FA9F333D00E2E3AF0E0E89A +:105BC00030D091505040E695001CCAF729D0FE2FE6 +:105BD00027D0660F771F881FBB1F26173707480778 +:105BE000AB07B0E809F0BB0B802DBF01FF2793582E +:105BF0005F4F2AF09E3F510568F004C15CC15F3FD2 +:105C0000ECF3983EDCF3869577956795B795F79515 +:105C10009F5FC9F7880F911D9695879597F908950D +:105C2000E1E0660F771F881FBB1F621773078407A9 +:105C3000BA0720F0621B730B840BBA0BEE1F88F7B8 +:105C4000E095089504D06894B11135C1089518D134 +:105C500088F09F5790F0B92F9927B751A0F0D1F055 +:105C6000660F771F881F991F1AF0BA95C9F712C0DF +:105C7000B13081F01FD1B1E008951CC1672F782F9A +:105C80008827B85F39F0B93FCCF38695779567954B +:105C9000B395D9F73EF490958095709561957F4FB7 +:105CA0008F4F9F4F0895E89409C097FB3EF490955D +:105CB0008095709561957F4F8F4F9F4F9923A9F0E5 +:105CC000F92F96E9BB279395F69587957795679574 +:105CD000B795F111F8CFFAF4BB0F11F460FF1BC0B8 +:105CE0006F5F7F4F8F4F9F4F16C0882311F096E94B +:105CF00011C0772321F09EE8872F762F05C06623F9 +:105D000071F096E8862F70E060E02AF09A95660FB1 +:105D1000771F881FDAF7880F9695879597F908956A +:105D200088D018F011F08CD038F480C0C4C0E92FAE +:105D30009FD0B0F35523C9F3E7FB621773078407BD +:105D40009507A8F199F3E92FFF2788232AF03197C7 +:105D5000660F771F881FDAF7952F5527442332F0F7 +:105D600091505040220F331F441FD2F7BB27E91B2D +:105D7000F50B621B730B840BB109C1F222F4620FA5 +:105D8000731F841FB11D31972AF0660F771F881F7C +:105D9000BB1FEFCF915050405AF041F0882332F0B2 +:105DA000660F771F881F91505040C1F7939530C000 +:105DB0008695779567959F5FD9F7F8CF990F00087B +:105DC000550FAA0BE0E8FEEF16161706E807F907CD +:105DD000C0F012161306E407F50798F0621B730B68 +:105DE000840B950B39F40A2661F0232B242B252BE9 +:105DF00021F408950A2609F4A140A6958FEF811D8C +:105E0000811D089597F99F6780E870E060E008952C +:105E10009F3F31F0915020F4879577956795B7951E +:105E2000880F911D9695879597F908959FEF80ECBF +:105E3000089500240A9416161706180609060895F0 +:105E400000240A9412161306140605060895092E56 +:105E50000394000C11F4882352F0BB0F40F4BF2BC5 +:105E600011F460FF04C06F5F7F4F8F4F9F4F089505 +:105E700057FD9058440F551F59F05F3F71F04795FB +:105E8000880F97FB991F61F09F3F79F087950895E0 +:105E9000121613061406551FF2CF4695F1DF08C0FF +:105EA000161617061806991FF1CF8695710561051C +:105EB00008940895E894BB2766277727CB0197F9C4 +:105EC00008957CDF08F48FEF08950BD0C0CFB1DFC9 +:105ED00028F0B6DF18F0952309F094CFA7CF11244E +:105EE000EACFC6DFA0F3959FD1F3950F50E0551F81 +:105EF000629FF001729FBB27F00DB11D639FAA271F +:105F0000F00DB11DAA1F649F6627B00DA11D661F6D +:105F1000829F2227B00DA11D621F739FB00DA11D8E +:105F2000621F839FA00D611D221F749F3327A00D48 +:105F3000611D231F849F600D211D822F762F6A2FE4 +:105F400011249F5750408AF0E1F088234AF0EE0F69 +:105F5000FF1FBB1F661F771F881F91505040A9F776 +:105F60009E3F510570F04ECFA6CF5F3FECF3983EB9 +:105F7000DCF3869577956795B795F795E7959F5FDD +:105F8000C1F7FE2B880F911D9695879597F9089577 +:105F9000FA01EE0FFF1F30962105310599F16115C9 +:105FA000710561F48038BFE39B0749F1689490382C +:105FB000810561F08038BFEF9B0741F0992342F5DE +:105FC000FF3FE1053105210511F1E8940894E795BB +:105FD000D901AA2329F4AB2FBE2FF85FD0F310C04C +:105FE000FF5F70F4A695E0F7F73950F019F0FF3A2B +:105FF00038F49F779F930CD00F9007FC905808952A +:106000003EF014CF60E070E080E89FE308954FE732 +:106010009F775F934F933F932F939ED02F913F9104 +:106020004F915F9152DF05C019F40EF0EBCE42CFD5 +:10603000FDCE26DFC8F39638C0F707F80F92E89434 +:106040002BE33AEA48EB5FE74EDF0F920F920F9295 +:106050004DB75EB70F92C0D0E4E3F1E016D04F9198 +:106060005F91EF91FF91E595EE1FFF1F49F0FE57FD +:10607000E0684427EE0F441FFA95E1F74195550B70 +:1060800032D00F9007FE26C00895DF93CF931F9361 +:106090000F93FF92EF92DF927B018C01689405C011 +:1060A000DA2EEF011EDFFE01E894A59125913591CE +:1060B00045915591AEF3EF0106DDFE019701A80170 +:1060C000DA9479F7DF90EF90FF900F911F91CF91C5 +:1060D000DF9108959B01AC0160E070E080E89FE3F0 +:1060E00049CD90CE95CECCDEE8F39923D9F3940F29 +:1060F000511DBBF39150504094F059F0882332F079 +:10610000660F771F881F91505040C1F79E3F510581 +:1061100044F7880F911D9695879597F908955F3FED +:10612000ACF0983E9CF0BB27869577956795B79520 +:1061300008F4B1609395C1F7BB0F58F711F460FFF5 +:10614000E8CF6F5F7F4F8F4F9F4FE3CFB4CE0EF0FE +:106150005FCE6CCE689456CE93DEC8F39923D1F30C +:10616000C6F3DF93CF931F930F93FF92C92FDD27C1 +:1061700088232AF02197660F771F881FDAF720E01F +:1061800030E040E85FEB9FE3883920F0803E30F05C +:1061900021968F7787DCECE5F1E003C083DCE9E84A +:1061A000F1E073DF8B01BE01EC01FB2E6F5771092B +:1061B0007595771F880B990B78DD28E132E741E36D +:1061C0005FE38FDEAF2D9801AE01FF900F911F911D +:1061D000CF91DF9178DC3BCEFA01DC01AA0FBB1F27 +:1061E0009B01AC01BF5728F422273327442750785E +:1061F0001FC0B75188F4AB2F0024469537952795DB +:10620000011CA395D2F3002069F0220F331F441F15 +:10621000B395DAF30DD045CC61307105A0E88A075B +:10622000B94630F49B01AC01662777278827907820 +:10623000309621F020833183428353830895AA1B33 +:10624000BB1B51E107C0AA1FBB1FA617B70710F061 +:10625000A61BB70B881F991F5A95A9F78095909593 +:10626000BC01CD01089597FB072E16F4009407D0CA +:1062700077FD09D00E941F3107FC05D03EF49095B0 +:1062800081959F4F0895709561957F4F0895EE0F0A +:10629000FF1F0590F491E02D0994F999FECF92BD6E +:1062A00081BDF89A992780B50895A8E1B0E042E051 +:1062B00050E00C947531262FF999FECF92BD81BD27 +:1062C000F89A019700B4021639F01FBA20BD0FB634 +:1062D000F894FA9AF99A0FBE08950196272F0E9412 +:1062E0005C310C945B31DC01CB01FC01F999FECFF0 +:1062F00006C0F2BDE1BDF89A319600B40D9241504E +:0A6300005040B8F70895F894FFCF5D +:10630A0000005C440000004148F17644000000416E +:10631A005C978A44000000411FD592440000004166 +:10632A0052D0A444000000415CFFB8440000004180 +:10633A000AA7CF44000000410000DC4400000041ED +:10634A00A4D0A443000000417BD492430000004142 +:10635A007BD4924300000041A4D0A4430000004132 +:10636A00A4D02444000000411FD51244000000417B +:10637A001FD5124400000041A4D02444000000416B +:10638A00A4F076430000004100005C430000004195 +:10639A0000005C4300000041A4F076430000004185 +:1063AA00A4D082430000C0417BD492430000004144 +:1063BA00A4D0A4430000C041A4D0824300000041FD +:1063CA00A4D0A44300008041A4D0824300008041AD +:1063DA00A4D0A443000080411FD51244000080418C +:1063EA00A4D024440000804100D00244000080412F +:1063FA00A4D08243000080410000C44300008041D1 +:10640A000AA7CF44000000410000DC44000000411C +:10641A00000000000000804052D0244500004041A6 +:10642A0000000000000080400AA74F4500004041DC +:10643A000AA7CF44000000410000DC4400000041EC +:10644A00000000000000804052D0244500000041B6 +:10645A0000000000000080405CFF38450000004159 +:10646A00000000000000804052D024450000004196 +:10647A000AA7CF44000000410000DC4400000041AC +:10648A00000000000000804052D0244500008041F6 +:10649A00A4F0F6430000C0417BD4924300000041BF +:1064AA0048F176440000804100005C44000000424C +:1064BA005CFF434400008041A4F0F6430000C04161 +:1064CA001FD51244000000415CFF43440000804194 +:1064DA005CFF384400000042A4D0A443000080417D +:1064EA00A4D0A44300008041719DAE4300008041C6 +:1064FA000000C443000080410000C4430000804102 +:10650A00719DAE4300008041A4D0A44300008041A5 +:10651A007BD4924300008041A4D082430000804192 +:10652A00A4D08243000080417BD492430000804182 +:10653A00A4D0A44300008041A4D0A4430000C041D9 +:10654A007BD49243000000417BD492430000004276 +:10655A00640007000CFF0000003F644A13D813B51B +:10656A001381134D13010130052808140A321E0045 +:10657A0002040507090B0C0E1011131517181A1C23 +:10658A001D1F2123242628292B2D2F30323435375D +:10659A00393B1F0F03764F5F6F7F4969437909596A +:1065AA0053633149803F5D8B803FF8BF803FCAE12A +:1065BA00803F73ED803FCAE1803FF8BF803F5D8B2B +:1065CA00803F3149803F0000803FF16D7F3F75EA8F +:1065DA007E3F4C827E3F833F7E3F84287E3F833FBF +:1065EA007E3F4C827E3F75EA7E3FF16D7F3F000021 +:1065FA00803F3F4D36398F0642060C06D3056605A5 +:10660A007F059805B105010203040506070809007C +:00000001FF diff --git a/keyboard/planck/keymaps/tak3over/compiled.hex b/keyboard/planck/keymaps/tak3over/compiled.hex new file mode 100644 index 0000000000..0eec0b65c7 --- /dev/null +++ b/keyboard/planck/keymaps/tak3over/compiled.hex @@ -0,0 +1,1456 @@ +:100000000C94C1020C9405030C9405030C94050395 +:100010000C9405030C9405030C9405030C94050340 +:100020000C9405030C9405030C94B2140C948415E1 +:100030000C94E6220C9405030C9405030C94050320 +:100040000C9405030C9467030C9405030C940503AE +:100050000C9405030C944E230C9405030C94050397 +:100060000C9405030C9405030C9405030C940503F0 +:100070000C9405030C9405030C9405030C940503E0 +:100080000C94270B0C9405030C9405030C940503A6 +:100090000C9405030C9405030C9405030C940503C0 +:1000A0000C9405030C9405030C940503F115131629 +:1000B00001171316011758167B160117D016E316F1 +:1000C000CD19CD19FC19FC193B1A5B1AB11BB11BD8 +:1000D000661AB11B161B161B7D1B861BB11BAB1BA7 +:1000E000231B231B231B231B231B231B231B231B20 +:1000F000231B231B231B231B231B231B231B231B10 +:10010000331B411B481B4F1B591B07634236B79BD0 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F00000000000000000030 +:1001900000000000000000010204060A0F17202CD6 +:1001A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9D2 +:1001B000DAC7B39D87715D4A3A2C20170F0A0604EF +:1001C0000201000000000000000000002B001400ED +:1001D0001A000800150017001C0018000C0012007F +:1001E00013002A00290004001600070009000A0075 +:1001F0000B000D000E000F0033003400E1001D0065 +:100200001B00060019000500110010003600370021 +:1002100038002800E000E200E300045202522C0003 +:100220002C0003525000510052004F002B001400CC +:100230001A00090013000A000D000F0018001C002E +:1002400033002A00290004001500160017000700DB +:100250000B00110008000C0012003400E1001D002A +:100260001B000600190005000E00100036003700C4 +:1002700038002800E000E200E300045202522C00A3 +:100280002C0003525000510052004F0035021E0254 +:100290001F0220022102220223022402250226023A +:1002A00027022A000100005049004A004B00015378 +:1002B00050002D002E002F003000310001000030D2 +:1002C0004C004D004E0000534C002D022E022F0218 +:1002D00030020100010001000100010001000100E5 +:1002E00001000100010001000100010035001E00B5 +:1002F0001F002000210022002300240025002600EA +:1003000027002A0001003A003B003C003D003E006F +:100310003F002D002E002F00300031020100400070 +:10032000410042004300440045002D022E022F02EE +:100330003002010001000100010001000100010084 +:1003400001000100010001000100010035001E0054 +:100350001F00200021002200230024002500260089 +:1003600027002A000100E7001B00060019001D00FD +:100370005000510052004F004C0031000100E400D9 +:100380001B00060019001D00AB00A800AA00A90070 +:10039000AE000100010001000100010001000100A8 +:1003A00001000100010001000100010028035400C8 +:1003B00068006500200050006C0061006E00630062 +:1003C0006B0020004B006500790062006F00610047 +:1003D0007200640000002C034F007200740068007B +:1003E0006F006C0069006E00650061007200200003 +:1003F0004B006500790062006F00610072006400CC +:10040000730000000403090409026D00040100A048 +:10041000FA09040000010301010009211101000192 +:10042000223F000705810308000A090401000103B7 +:10043000010200092111010001224D00070582037C +:1004400008000A090402000103000000092111014B +:1004500000012236000705830308000A090403008F +:1004600001030000000921110100012239000705E4 +:1004700084031000011201100100000008EDFE606D +:100480006001000102000105010906A1010507192B +:10049000E029E71500250195087501810205081975 +:1004A00001290595057501910295017503910105D5 +:1004B000071900297715002501957875018102C07B +:1004C00005010980A101850216010026B7001A0165 +:1004D000002AB700751095018100C0050C0901A123 +:1004E000018503160100269C021A01002A9C027550 +:1004F0001095018100C005010902A1010901A100B7 +:1005000005091901290515002501950575018102C7 +:100510009501750381010501093009311581257F98 +:1005200095027508810609381581257F95017508A2 +:100530008106050C0A38021581257F950175088111 +:1005400006C0C005010906A101050719E029E71544 +:100550000025019508750181029501750881010545 +:1005600008190129059505750191029501750391F9 +:10057000010507190029FF150025FF95067508815B +:1005800000C011241FBECFEFDAE0DEBFCDBF04B63E +:1005900003FE24C080911E0390911F03A0912003AD +:1005A000B09121038730904BA740B04BB9F4109223 +:1005B0001E0310921F03109220031092210314BEF9 +:1005C00084B7877F84BF88E10FB6F894809360007A +:1005D000109260000FBEE0E0F8E3099511E0A0E0A2 +:1005E000B1E0E6E2FAE502C005900D92A03CB10749 +:1005F000D9F713E0A0ECB1E001C01D92AE31B10714 +:10060000E1F70E94F8110C94112D0C94000008954C +:10061000089581E0089508950C9408030C9409034B +:100620000C940B030E94DB2823E030E0281B3109E7 +:10063000220F2093C4010895282F2F9880918000C5 +:10064000211108C0877F8093800010928D00109246 +:100650008C001BC0886080938000233019F48FEFDA +:100660009FEF0FC083E090E0821B9109880F991FD4 +:100670002FEF3FEFA90102C0569547958A95E2F703 +:10068000CA0190938D0080938C000C9412030E94F9 +:10069000120384E08093C3011092C0010895279A49 +:1006A0002F988FEF9FEF90938700809386008AE0CA +:1006B0008093800089E1809381000E9444280C94FB +:1006C00047030E944F036E9A769A0C9407031F9279 +:1006D0000F920FB60F9211242F933F938F939F93F6 +:1006E000EF93FF93E091C101F091C201CF01019618 +:1006F0009093C2018093C1010090C30102C0F6959E +:10070000E7950A94E2F7EF738091C001823019F403 +:10071000E03251F404C0813039F4EF3329F4809190 +:100720006F008D7F80936F00F0E0E457FE4FE491FF +:1007300021E031E0E29FC001E39F900D1124009081 +:10074000C40102C0969587950A94E2F790938D00B4 +:1007500080938C00FF91EF919F918F913F912F910A +:100760000F900FBE0F901F90189561110DC0FC01E6 +:100770008281882331F085EE0E9471180E949B28A7 +:1007800003C085EE0E94391980E090E0089581E071 +:1007900008950C94C70308950C9461038091150289 +:1007A000882309F448C08091D1019091D20100972B +:1007B00079F40E9418239093D2018093D101809103 +:1007C000D30190E0009771F48091D40190E00AC0C9 +:1007D0000E9424232091000130910101281739073C +:1007E00040F329C00197880F991F880F991FFC01BA +:1007F000EB52FE4F60817181828193810E948D0A4C +:10080000E091D30184E0E89FF0011124EB52FE4F08 +:1008100060817181828193814FE050E00E94450E9A +:100820008091D30190E001966091D40170E00E9424 +:10083000C12C8093D3010C940C03109217020C94DA +:100840005A0A0895089581E0809317020C942204B7 +:10085000089508958F929F92AF92BF92EF92FF9268 +:100860000F931F93CF93DF93CDB7DEB7A3970FB648 +:10087000F894DEBF0FBECDBF7C01FC010081118169 +:10088000C8010E941521B8010E942C068C01B701F5 +:100890000E94C903882309F4CCC10032F0E51F0788 +:1008A00041F4F7018281882309F458C00E94A90EFF +:1008B000C0C10132F0E51F0741F4F70182818823AE +:1008C00009F44CC00E94B20EB4C10232F0E51F0719 +:1008D00051F4F7018281882309F440C00E94A50EDB +:1008E0008111F0CFE3CF0332F0E51F0739F4F701B0 +:1008F0008281882399F10E9423049BC10432F0E590 +:100900001F0739F4F7018281882341F10E941D04F9 +:1009100090C10532F0E51F0749F4F7018281882371 +:10092000E9F0809117028111F1CFE5CF0632F0E5B1 +:100930001F0739F4F7018281882381F00E94B90EE4 +:100940000AC00732F0E51F0749F4F70182818823C6 +:1009500029F00E94C40E0E9429046BC180911702E5 +:10096000811105C0F70182818111CFC018C1003EFD +:10097000110579F4F7018281882309F44DC00E94A2 +:100980005A0A81E080931602109215021092D40147 +:1009900050C1023E110559F4F70182818823E1F12B +:1009A0000E945A0A109216021092150242C1033E8A +:1009B000110591F4F7018281882371F10E945A0A8E +:1009C0001092160281E0809315021092D3011092CA +:1009D000D2011092D1012DC10235110559F4F70150 +:1009E0008281882309F425C1809100019091010141 +:1009F0000A970DC00135110579F4F701828188232A +:100A000009F417C180910001909101010A96909319 +:100A10000101809300010DC14091040183E2EFE1E7 +:100A2000F1E0DE01119601900D928A95E1F7F70150 +:100A3000808121E030E02C0F3D1F280F311DC901BE +:100A40002091020130910301FC01E20FF31F60814C +:100A5000772767FD7095640F711D882777FD809556 +:100A6000982F0E94E32920E030E040E451E40E9406 +:100A700048294B015C01F701218184E090E0821B51 +:100A80009109BC01882777FD8095982F0E94E32962 +:100A90009B01AC01C501B4010E94E0289B01AC019F +:100AA00060E070E080E090E40E94562B20E030E0AF +:100AB0004CED50E40E94F32A4B015C01F701828166 +:100AC0008823D1F04FE050E0C501B4010E94450EEB +:100AD000809116028823A1F08091D40124E0829FA6 +:100AE000F0011124EB52FE4F80829182A282B382E8 +:100AF0008F5F8093D40104C0C501B4010E948D0AA8 +:100B00000F3F110508F02ECF94C08091D0018111C4 +:100B10001FC0043130E5130709F051C00E94CB0318 +:100B200081E08093D0010E9418239093CF0180939D +:100B3000CE011092C7011092C9011092C801109203 +:100B4000CB011092CA011092CD011092CC0171C05C +:100B50008091CE019091CF010E942423883C910581 +:100B600070F48091C701E82FF0E0EE0FFF1FE8530B +:100B7000FE4F118300838F5F8093C7015AC00438F2 +:100B800080E5180721F00538104501F13AC0F7015A +:100B90008281882341F01092C50182E01EC0043892 +:100BA00030E5130759F58091C501811106C086E231 +:100BB0000E94711886E20E94391982E01CC0043834 +:100BC000F0E51F0741F305381045D9F4F70182819C +:100BD000882331F01092C60180E20E94881929C052 +:100BE0008091C601811106C087E20E94711887E2D8 +:100BF0000E94391980E20E948F191BC005381045E8 +:100C000029F381E08093C5018093C601C701A396B3 +:100C10000FB6F894DEBF0FBECDBFDF91CF911F910D +:100C20000F91FF90EF90BF90AF909F908F900C949A +:100C30000E0380E0A3960FB6F894DEBF0FBECDBFC3 +:100C4000DF91CF911F910F91FF90EF90BF90AF90E8 +:100C50009F908F90089508959CE0799FF001112452 +:100C600090E3899FE00DF11D1124E60FF11DEE0FB9 +:100C7000FF1FE453FE4F859194910895880F991FAB +:100C8000FC01E45BFF4F859194910895880F991FB3 +:100C9000FC01E453FE4F8591949108950F931F93A7 +:100CA000CF93DF93EC01811521E39207A0F5C115E5 +:100CB00080E3D80708F0D7C0C83ED105D8F4C03EBD +:100CC000D10508F007C2C83AD10578F4C53AD10574 +:100CD00008F06AC0C130D10509F463C008F4F7C157 +:100CE000C430D10508F0F6C1F2C1CB3BD10508F400 +:100CF00066C0EDC1C11590E2D90708F0AFC0C115BB +:100D000021E0D20708F0E6C1C03FD10508F4DFC1F9 +:100D10008E0110651FC2C03880E5D80700F5C037C6 +:100D200090E5D90708F0A3C0C11520E5D20709F462 +:100D3000ACC050F4CE01905480319F4008F0C7C140 +:100D4000DF708E01106A06C2C13080E5D80709F451 +:100D5000AEC0C43190E5D90708F4AFC0B8C1C338FC +:100D600020E5D20709F48EC050F4C13890E5D907C8 +:100D700009F482C008F083C000E011EDEBC1C0317E +:100D800081E5D80708F4A3C1C11597E5D90708F490 +:100D900036C1CE0190578115904108F098C1DF709F +:100DA00093C101E010E0D6C1C53AD10509F494C160 +:100DB000C63AD10509F093C102E810E4CBC1C83AA4 +:100DC000D10509F48FC1C93AD10509F48EC1CA3AD7 +:100DD000D10509F48DC1CB3AD10509F48CC1CC3AC7 +:100DE000D10509F48BC1CD3AD10509F48AC1C03BC4 +:100DF000D10509F489C1CE3AD10509F488C1CF3AA9 +:100E0000D10509F487C1C13BD10509F486C1C23BB4 +:100E1000D10509F485C1C33BD10509F484C1C43BA4 +:100E2000D10509F483C1C53BD10509F482C1C63B94 +:100E3000D10509F481C1C73BD10509F480C1C83B84 +:100E4000D10509F47FC1C93BD10509F47EC1CA3B74 +:100E5000D10509F47DC100E014E47CC1CE019F708E +:100E60000E94460678C1DD278E01106C73C1CF70D9 +:100E7000DD278E01146D6EC100E010ED6BC100E046 +:100E800012ED68C100E013ED65C10E941C1C0E94B8 +:100E90005A0A0E9421048FEF94E32CE08150904085 +:100EA0002040E1F700C000000E94732353C18091ED +:100EB000F20281608093F2024DC10E94D42381111D +:100EC00002C00E94B0230E94E72390E090931D038C +:100ED00080931C03C23080E5D80721F480911C0365 +:100EE000816086C0C43090E5D90721F480911C034D +:100EF00082607EC0C63020E5D20721F480911C03B9 +:100F0000846076C0C83080E5D80719F480911C034E +:100F100027C0CA3090E5D90721F480911C03806175 +:100F200067C0CC3020E5D20721F480911C03806299 +:100F30005FC0CE3080E5D80721F480911C03806427 +:100F400057C0C03190E5D90721F480911C03806817 +:100F50004FC0C23120E5D20729F480911C03846080 +:100F6000886046C0C33080E5D80721F480911C0317 +:100F70008E7F3EC0C53090E5D90721F480911C03D7 +:100F80008D7F36C0C73020E5D20721F480911C0345 +:100F90008B7F2EC0C93080E5D80719F480911C03DF +:100FA00026C0CB3090E5D90721F480911C038F7EB9 +:100FB0001FC0CD3020E5D20721F480911C038F7D26 +:100FC00017C0CF3080E5D80721F480911C038F7BB8 +:100FD0000FC0C13190E5D90721F480911C038F77B0 +:100FE00007C0C331D04531F480911C038B7F877FCC +:100FF00080931C0380911C030E94EB23ABC08D2FB8 +:1010000099278F70992781309105D9F49E0123701B +:10101000332702C0880F991F2A95E2F79C688E013A +:1010200044E0000F111F4A95E1F700271370802B51 +:10103000912B53E0CC0FDD1F5A95E1F7C076DD27E9 +:101040002FC08230910531F4DC2FCC278E01016F47 +:10105000106A80C08330910569F4CE0183709927AE +:1010600001E010E002C0000F111F8A95E2F7C801ED +:101070009C680FC084309105B9F4CE018370992724 +:1010800001E010E002C0000F111F8A95E2F7C801CD +:101090009A6823E0CC0FDD1F2A95E1F7C07ED77058 +:1010A0008C010C2B1D2B56C08530910531F4DC2FA3 +:1010B000CC278E01046F106A4DC0069709F04AC014 +:1010C000CF71DD27DC2FCC278E01106243C000E0FA +:1010D00010E040C08E013EC001E810E43BC003E8D0 +:1010E00010E438C002EE14E435C009EE14E432C056 +:1010F0000AEE14E42FC005EB14E42CC006EB14E454 +:1011000029C007EB14E426C00CEC14E423C00DEC5A +:1011100014E420C003E815E41DC00AE815E41AC071 +:1011200002E915E417C004E915E414C001E216E46D +:1011300011C003E216E40EC004E216E40BC005E29F +:1011400016E408C006E216E405C007E216E402C091 +:101150000AE216E4C801DF91CF911F910F91089523 +:101160009CE0799FF001112490E3899FE00DF11D2F +:101170001124E60FF11DEE0FFF1FE453FE4F859182 +:101180009491803E9105E0F4803C910558F58133BF +:10119000910509F46FC048F48932910509F463C0E0 +:1011A0008A32910509F46DC072C089339105E9F066 +:1011B00082389105D1F08533910509F44DC067C09F +:1011C000833E910581F138F4803E9105B9F0823E6D +:1011D0009105D9F05CC0863E910561F1873E91058D +:1011E000A1F155C00E943E06089520911C0320FDE8 +:1011F00002C021FF4CC080EE90E049C080911C03EA +:1012000080FFF9CF89E390E042C080911C0382FF08 +:101210000EC080911C0384FF03C080E090E037C0C3 +:1012200083EE90E034C080911C0382FFF2CF82EE07 +:1012300090E02DC080911C0383FF0BC080911C03A4 +:1012400084FDEBCF87EE90E022C080911C0383FFEA +:10125000F5CF86EE90E01BC080911C0385FF07C090 +:1012600089E290E014C080911C0385FFF9CF85E3EB +:1012700090E00DC080911C0386FF07C08AE290E0D9 +:1012800006C080911C0386FFF9CF81E390E00E94A5 +:101290004E0608950C941003E82FF0E0E25BFE4F39 +:1012A0008081E82FEF70F0E082958F7021E030E0D0 +:1012B000A90102C0440F551F8A95E2F740A3089583 +:1012C0000F931F93CF93DF9385B7806885BF85B752 +:1012D000806885BFC3E0D0E001E010E0FE01E25B82 +:1012E000FE4F8081E82FEF70F0E021A182958F7092 +:1012F000A80102C0440F551F8A95E2F7CA01822B4C +:1013000081A38C2F0E944C09219740F78BE090E03D +:1013100061E070E0FC01EE5BFE4F2081E22FEF7098 +:10132000F0E042A122952F70DB0102C0AA0FBB1F83 +:101330002A95E2F79D01242B22A3019758F7DF910C +:10134000CF911F910F910C94CC03EF92FF920F93CA +:101350001F93CF93DF9300E212E0C3E0EE24E39407 +:10136000F12CD5E08C2F0E944C098BE090E040E0FE +:1013700050E0FC01EE5BFE4F6081E62FEF70F0E085 +:1013800020A130E062956F7002C0359527956A956F +:10139000E2F720FD09C09701082E02C0220F331F7B +:1013A0000A94E2F7422B532B019718F7F801929118 +:1013B00082918F018417950721F051834083D09348 +:1013C00005018C2F0E944C09C15060F680910501E7 +:1013D00087FD2CC08150809305018F3F39F08FE944 +:1013E0009FE00197F1F700C0000020C080911E022D +:1013F00090911F02909327028093260280911C02F5 +:1014000090911D02909325028093240280911A02EC +:1014100090911B02909323028093220280911802E4 +:101420009091190290932102809320020E94CE0392 +:1014300081E0DF91CF911F910F91FF90EF90089580 +:10144000E82FF0E0EE0FFF1FE05EFD4F80819181FD +:10145000089508950F931F93CF9308E212E0C0E020 +:10146000F801929182918F010E949022C80FF2E0C0 +:1014700000321F07A9F78C2FCF911F910F9108956C +:101480000E94D423811102C00E94B0230E94F9233C +:10149000809307033E9A809171008D7F8093710045 +:1014A00082E0809390008AE18093910081E08093B4 +:1014B0002A02089580912A02811102C00E94400AE6 +:1014C00010927A0210927902809171008D7F809340 +:1014D0007100809190008F738093900010923C0275 +:1014E00010923B02109273021092740210927502D5 +:1014F000109276021092720210927102E1E5F2E00F +:10150000A1E4B2E011921192119211921D921D92DA +:1015100082E0E137F807B1F70895CF92DF92EF92BA +:10152000FF920F931F93CF93DF9320913B022223CF +:1015300009F484C06B017C0180912A02811102C0F0 +:101540000E94400A01E712E0C7E0D0E0A70196013F +:10155000F80192918291729162918F010E944429C7 +:10156000811131C0FE01EE0FFF1FEE0FFF1FEF5A7A +:10157000FD4F1082118212821382DE01AA0FBB1F5F +:10158000AF5BBD4F11961C921E92C730D105E9F09A +:10159000219644815581668177814083518362839E +:1015A0007383148215821682178212968D919C91F4 +:1015B000139711969C938E9313961C921E921297DA +:1015C00034961296E2CF219708F680917902909195 +:1015D0007A02019797FD05C090937A028093790271 +:1015E00004C010927A02109279028091790290914F +:1015F0007A0220917702309178022817390724F077 +:101600001092780210927702892BC1F480917100B8 +:101610008D7F80937100809190008F7380939000F4 +:101620001092730210927402109275021092760258 +:10163000109272021092710210923B02DF91CF91D0 +:101640001F910F91FF90EF90DF90CF9008951F9220 +:101650000F920FB60F9211244F925F926F927F926A +:101660008F929F92AF92BF92CF92DF92EF92FF92B2 +:101670002F933F934F935F936F937F938F939F939A +:10168000AF93BF93CF93DF93EF93FF9380913B0290 +:10169000882309F49BC1C0917902D0917A021C166B +:1016A0001D060CF093C140902B0250902C026090CC +:1016B0002D0270902E0220E030E0A901C301B2019A +:1016C0000E94EF2A18160CF065C0C130D10509F44C +:1016D00052C08091770290917802BE010E94C12C85 +:1016E0007C01909378028093770280903D029090E5 +:1016F0003E02A0903F02B090400220E030E040E87F +:101700005FE3C501B4010E94E02860933D0270933D +:101710003E0280933F0290934002F701EE0FFF1FBD +:10172000EE0FFF1FEF5AFD4FA301920160817181FF +:10173000828193810E94482920E030E040E05EE30E +:101740000E94F32A9B01AC01C501B4010E94EF2A5B +:1017500018168CF4C7010196BE010E94C12C90930B +:1017600078028093770210923D0210923E0210920E +:101770003F0210924002E0917702F0917802EE0F62 +:10178000FF1FEE0FFF1FEF5AFD4F608171818281B5 +:101790009381D0C0C0907302D0907402E090750223 +:1017A000F090760220E030E0A901C701B6010E9466 +:1017B00044292197882309F4A2C0FE01EE0FFF1FE0 +:1017C000EE0FFF1FEF5AFD4F80809180A280B38003 +:1017D000A5019401C701B6010E94442987FF31C0C9 +:1017E000A501940160E070E08CED93EC0E94482923 +:1017F00020E030E040E451E40E94482920E030E05D +:1018000040E05FE30E94F32A9B01AC0160E070E0DE +:1018100080E090E40E94562B9B01AC01C501B4010D +:101820000E94F32A9B01AC01C701B6010E94442922 +:1018300087FF07C0A701960160E070E08CED93E49C +:1018400039C0A5019401C701B6010E94EF2A1816FC +:101850000CF055C0A501940160E070E08CED93E4BC +:101860000E94482920E030E040E451E40E944829E9 +:1018700020E030E040E05FE30E94F32A9B01AC01EE +:1018800060E070E080E090E40E94562B9B01AC0188 +:10189000C501B4010E94F32A9B01AC01C701B60146 +:1018A0000E94EF2A18165CF5A701960160E070E02F +:1018B0008CED93EC0E94482920E030E040E451E4B4 +:1018C0000E94482920E030E040E05FE30E94F32AD4 +:1018D0009B01AC0160E070E080E090E40E94562B38 +:1018E0009B01AC01C701B6010E94F32A6093730209 +:1018F00070937402809375029093760213C0FE0178 +:10190000EE0FFF1FEE0FFF1FEF5AFD4F80819181F9 +:10191000A281B3818093730290937402A0937502A5 +:10192000B093760260917302709174028091750297 +:101930009091760220912802309129022F3F4FEF9B +:10194000340731F02F5F3F4F309329022093280254 +:101950000E94CF0E6B017C0120E034E244EF51E4A1 +:101960000E94442987FF08C086EFC82E88E2D82E3F +:1019700084EFE82E81E4F82E20E030E040E051E4EE +:10198000C701B6010E94F32A9B01AC0160E074E23A +:1019900084E79BE40E9448296B017C010E94B529E1 +:1019A0007093970060939600209106013091070193 +:1019B0004091080150910901C701B6010E94F32A24 +:1019C0000E94B529709399006093980080913C0221 +:1019D000882309F433C1C0903702D0903802E090D8 +:1019E0003902F0903A0220E030E0A901C701B601C7 +:1019F0000E94EF2A1816D4F58091280290912902AE +:101A00008F3F2FEF920729F0019690932902809340 +:101A10002802C701B6010E94CF0E20E030E040E06E +:101A200051E40E94F32A9B01AC0160E074E284E778 +:101A30009BE40E9448296B017C010E94B5297093A8 +:101A40009700609396002091060130910701409124 +:101A5000080150910901C701B6010E94F32A0E94B2 +:101A6000B529709399006093980008C01092970070 +:101A70001092960010929900109298006091310295 +:101A8000709132026F5F7F4F709332026093310228 +:101A9000209196003091970080E090E0232BF1F0A8 +:101AA000C0919600D09197000E94E1296B017C01C2 +:101AB000BE0180E090E00E94E1299B01AC016091B1 +:101AC00033027091340280913502909136020E9467 +:101AD000482920E03FEF4FE757E410C00E94E1297A +:101AE0006B017C0120E030EE4FEF54E46091330253 +:101AF0007091340280913502909136020E94F32A4F +:101B00009B01AC01C701B6010E94EF2A87FD96C078 +:101B100080912F028F5F80932F0290E0209103032A +:101B20003091040382179307A0F080910E0388235D +:101B300019F010922F020DC0809171008D7F80935B +:101B40007100809190008F738093900010923C02FE +:101B50007DC080913002C0912F02811128C0C090B9 +:101B60000803D0900903E0900A03F0900B0320E0F3 +:101B700030E0A901C701B6010E94EF2A1816BCF493 +:101B800081E0809330021092370210923802109256 +:101B9000390210923A02C0923302D0923402E0929B +:101BA0003502F0923602C150C0932F0243C010920A +:101BB00030021092290210922802E0910503F09160 +:101BC000060348E0C49FE00DF11D1124808191813E +:101BD000A281B3818093370290933802A093390297 +:101BE000B0933A0220E030E040E85EE36481758122 +:101BF000868197810E94F32A6B017C0180910A0102 +:101C0000682F70E080E090E00E94E12920E030E061 +:101C100048EC52E40E9448299B01AC01C701B6017F +:101C20000E94F32A6093330270933402809335024A +:101C30009093360210923202109231028091070383 +:101C400080FD04C010923C0210923B02FF91EF9184 +:101C5000DF91CF91BF91AF919F918F917F916F91C4 +:101C60005F914F913F912F91FF90EF90DF90CF9038 +:101C7000BF90AF909F908F907F906F905F904F90AC +:101C80000F900FBE0F901F901895CF92DF92EF929A +:101C9000FF92CF93DF936B017C01EA0180912A02CE +:101CA000811102C00E94400A8091070380FF46C054 +:101CB0008091790290917A0208970CF03FC0809150 +:101CC00071008D7F8093710080913C0281110E9490 +:101CD0005A0A81E080933B02109229021092280256 +:101CE00020E030E0A901C701B6010E94EF2A1816D2 +:101CF000DCF48091790290917A02FC01EE0FFF1FD3 +:101D0000EE0FFF1FEF5AFD4FC082D182E282F382B5 +:101D1000FC01EE0FFF1FEF5BFD4FD183C0830196E7 +:101D200090937A028093790280917100826080930F +:101D3000710080919000806880939000DF91CF9136 +:101D4000FF90EF90DF90CF9008958091070381700E +:101D50000895809107038160809307030E94FD230B +:101D60000C942804809107038E7F809307030C94C2 +:101D7000FD2380917B0290E0019666E070E00E9476 +:101D8000C12C80937B02089580917B0290E00197A3 +:101D900066E070E00E94C12C80937B0208958F92D0 +:101DA0009F92AF92BF92CF92DF92EF92FF920F93EA +:101DB0001F93CF93DF936B017C01C0912802D091D8 +:101DC0002902BE0180E090E00E94E1294B015C0104 +:101DD000A701960160E070E08CE594E40E94482938 +:101DE0009B01AC01C501B4010E94F32A0E94B529F0 +:101DF00020917B02233009F473C028F4222351F090 +:101E00002130E9F02CC1243009F4A0C0253009F4B8 +:101E1000E0C025C180E090E0A0E0BFE38093060130 +:101E200090930701A0930801B093090110922B022F +:101E300010922C0210922D0210922E0210C11092BC +:101E40002B0210922C0210922D0210922E0264315D +:101E5000710540F46A30710560F520E030E040E83B +:101E60005EE32BC0693C710508F0AAC080E090E0F9 +:101E70000E94E12920E030E040EA51E40E94DF289E +:101E800020E030E044E353E40E9448299B01AC0188 +:101E90000E94F32A20E030E040E05EE30E94F32A53 +:101EA0009B01AC0160E070E080E09EE30E94DF28CF +:101EB00044C020E030E040E05FE3C701B6010E948B +:101EC000F32A6B017C0180E090E0A0E0BEE3809308 +:101ED000060190930701A0930801B0930901BFC0C8 +:101EE00010922B0210922C0210922D0210922E02B0 +:101EF0004AE0469F9001479F300D1124C90168EBCD +:101F00007BE00E94AD2CBC016C5D754077FF03C087 +:101F1000719561957109882777FD8095982F0E94AA +:101F2000E3292EE333EC4EE259E30E94F32A20E04A +:101F300030E040EC5EE30E94E0286093060170937D +:101F40000701809308019093090189C010922B0228 +:101F500010922C0210922D0210922E02CE0183704C +:101F60009927892BE1F0BE016170772780E090E02E +:101F70000E94E12920E030E040E05EE30E94F32A85 +:101F800020E030E040E45FE30E94E0286093060137 +:101F90007093070180930801909309010CC080E0C1 +:101FA00090E0A0E0BFE38093060190930701A09327 +:101FB0000801B0930901C770DD27CD2B09F04FC090 +:101FC0001092060110920701109208011092090167 +:101FD00046C010922B0210922C0210922D021092E9 +:101FE0002E0200E010E020E03FE300930601109392 +:101FF000070120930801309309016739710578F1D1 +:1020000080E090E00E94E12920E030E047E153E4E5 +:102010000E94DF2820E030E04AE754E40E9448298B +:1020200020E030E048E452E40E94F32A20E030E06F +:1020300040EA51E40E94252A0E94B029660F771FCA +:10204000660F771FFB01EE5AFE4F208131814281DE +:102050005381C701B6010E94F32A6B017C01C701BD +:10206000B601DF91CF911F910F91FF90EF90DF901C +:10207000CF90BF90AF909F908F90089580918C02E9 +:102080000895CF93DF9300D01F92CDB7DEB79C01A8 +:1020900080911303843019F593E099833B832A835D +:1020A0009093E9008FEF9091E800815095FD06C074 +:1020B00095ED9A95F1F700008111F5CF8091E80038 +:1020C00085FF0DC040E050E063E070E0CE01019676 +:1020D0000E94A2128091E8008E778093E8000F9012 +:1020E0000F900F90DF91CF910895CF93DF9300D0A1 +:1020F0001F92CDB7DEB720911303243021F522E0E3 +:1021000029839B838A8383E08093E9008FEF9091FA +:10211000E800815095FD06C095ED9A95F1F7000015 +:102120008111F5CF8091E80085FF0DC040E050E0BF +:1021300063E070E0CE0101960E94A2128091E80057 +:102140008E778093E8000F900F900F90DF91CF91E2 +:102150000895209113032430F1F422E02093E90044 +:102160002FEF3091E800215035FD06C035ED3A954E +:10217000F1F700002111F5CF2091E80025FF0BC0F9 +:1021800040E050E065E070E00E94A2128091E8001B +:102190008E778093E8000895CF93DF93EC019091C0 +:1021A0001303943009F046C0809115018823D9F0BB +:1021B000809116018823B9F09093E9008FEF9091F8 +:1021C000E800815095FD06C095E19A95F1F7000071 +:1021D0008111F5CF8091E80085FF2CC040E050E0F0 +:1021E00060E170E017C081E08093E9008FEF90918B +:1021F000E800815095FD06C095ED9A95F1F7000035 +:102200008111F5CF8091E80085FF14C040E050E0D7 +:1022100068E070E0CE010E94A2128091E8008E7703 +:102220008093E80080E1FE01ACE7B2E001900D92FE +:102230008A95E1F7DF91CF91089580911203811182 +:1022400009C00E9437140E9494148091E2008460B7 +:102250008093E2000895109212030895089508955E +:102260000C94DB2242E061EC81E00E94B11342E079 +:1022700061EC82E00E94B11342E061EC83E00E94D5 +:10228000B11342E161EC84E00C94B1138091150329 +:10229000833009F455C030F4813071F0823009F494 +:1022A0008EC008958A3009F47AC08B3009F460C07A +:1022B000893009F09CC020C080911403813A09F054 +:1022C00096C08091E800877F8093E8008091180392 +:1022D00090911903892B21F460E18CE792E003C00F +:1022E00060E080E090E070E00E94ED128091E800F4 +:1022F0008B778093E800089580911403813209F070 +:1023000076C08091180390911903009719F00397F4 +:1023100009F06DC08091E800877F8093E80080918C +:10232000E80082FD05C0809113038111F8CF5FC0E2 +:102330008091F10080938C028091E8008B7753C0EC +:1023400080911403813A09F052C080911803909152 +:102350001903892B09F04BC08091E800877F809397 +:10236000E8008091E80080FFFCCF8091150136C025 +:10237000809114038132D9F580911803909119034B +:10238000892BA9F58091E800877F8093E8000E945F +:10239000E61380911603809315010C941C1C809108 +:1023A0001403813221F58091E800877F8093E80053 +:1023B0000E94E6138091170380938D020895809107 +:1023C0001403813AA1F48091E800877F8093E800AC +:1023D0008091E80080FFFCCF80918D028093F10016 +:1023E0008091E8008E778093E8000C94E6130895BE +:1023F00084B7877F84BF88E10FB6F894809360002C +:10240000109260000FBE90E080E80FB6F8948093C1 +:102410006100909361000FBE0E9489170E943714DB +:102420000E9494148091E20084608093E20078948A +:102430000E941A170E948B178BE091E00E943517BB +:1024400080911303853069F40E949C2280911103CE +:102450008823B1F30E94CA22882391F30E948C1230 +:10246000EFCF0E949317ECCF292F3327233031056C +:10247000C9F064F42130310581F02230310509F0D2 +:1024800043C08DE690E028E034E042C021323105BF +:10249000F1F02232310541F137C082E190E025E7C9 +:1024A00034E036C099278130910541F082309105A2 +:1024B00041F0892B49F5E4E0F4E005C0E6EDF3E0F6 +:1024C00002C0ECEAF3E0849190E09F0121C0643007 +:1024D000D8F4E62FF0E0EE0FFF1FE255FE4F20810B +:1024E000318189E090E014C0643070F470E0FB0149 +:1024F000EE0FFF1FEA55FE4F20813181FB01EE55A3 +:10250000FE4F808190E004C080E090E020E030E069 +:10251000FA0131832083089580E189BD82E189BD7C +:1025200009B400FEFDCF8091D8008F7D8093D80044 +:102530008091E00082608093E0008091E00081FD66 +:10254000FCCF0895CF92DF92EF92FF920F931F93EB +:10255000CF93DF93EC018B016A010E940514811176 +:1025600033C0C114D10439F0F60180819181081B78 +:10257000190BC80FD91FE12CF12C0115110519F108 +:102580008091E80085FD16C08091E8008E778093E9 +:10259000E800C114D10449F0F60180819181E80E70 +:1025A000F91EF182E08285E00FC00E9405148823A5 +:1025B00021F30AC089918093F10001501109FFEFC6 +:1025C000EF1AFF0ADACF80E0DF91CF911F910F91D0 +:1025D000FF90EF90DF90CF90089520911A033091F3 +:1025E0001B032617370748F06115710539F4209150 +:1025F000E8002E772093E80001C0B90140E06115A2 +:102600007105A9F120911303222309F443C0253059 +:1026100009F442C02091E80023FD40C02091E80069 +:1026200022FD32C02091E80020FFE9CF4091F30065 +:102630002091F20030E0342BFC01CF0161157105CF +:1026400059F02830310540F481918093F1006150B8 +:1026500071092F5F3F4FF1CF41E02830310509F07C +:1026600040E02091E8002E772093E800C8CF411188 +:10267000C9CF0AC080911303882361F0853061F0CF +:102680008091E80083FD0AC08091E80082FFF2CFCC +:1026900080E0089582E0089583E0089581E0089540 +:1026A00020911A0330911B032617370748F0611554 +:1026B000710539F42091E8002E772093E80001C0DD +:1026C000B901FC0120E06115710591F180911303BE +:1026D000882309F440C0853009F43FC08091E800A8 +:1026E00083FD3DC08091E80082FD2FC08091E8000D +:1026F00080FFE9CF2091F3008091F20090E0922BCF +:102700006115710559F08830910540F424912093AA +:10271000F1003196615071090196F2CF21E00897DE +:1027200009F020E08091E8008E778093E800CBCF1D +:102730002111CCCF0AC080911303882361F085302A +:1027400061F08091E80083FD0AC08091E80082FF7B +:10275000F2CF80E0089582E0089583E0089581E05B +:102760000895982F973058F59093E900981739F00D +:102770007091EC002091ED005091F00003C0242FE7 +:10278000762F50E021FF19C03091EB003E7F30934F +:10279000EB003091ED003D7F3093ED003091EB0088 +:1027A00031603093EB007093EC002093ED00509378 +:1027B000F0002091EE0027FF07C09F5FD3CF8F70FE +:1027C0008093E90081E0089580E0089580911403EA +:1027D00087FF11C08091E80082FD05C0809113033E +:1027E0008111F8CF11C08091E8008B770BC08091E8 +:1027F0001303882349F08091E80080FFF8CF80918F +:10280000E8008E778093E80008952091E4003091ED +:10281000E50095E64091EC00842F817040FF22C0D6 +:102820008091E80080FD1CC080911303882391F003 +:10283000853091F08091EB0085FD10C04091E4005F +:102840005091E5004217530729F39A01915011F76F +:1028500084E0089582E0089583E0089581E008957A +:1028600080E008954091E80042FFDECF08950E9485 +:10287000A5140E94AD14E0EEF0E0808181608083B9 +:10288000E8EDF0E080818F77808319BCA7EDB0E0A0 +:102890008C918E7F8C9380818F7E80831092120327 +:1028A00008950F931F93CF93DF930E94A5140E9466 +:1028B000AD14C8EDD0E088818F77888388818068E7 +:1028C000888388818F7D888319BC109213031092AE +:1028D0000F03109211031092100300EE10E0F801A4 +:1028E00080818B7F808388818160888342E060E083 +:1028F00080E00E94B113E1EEF0E080818E7F808362 +:10290000E2EEF0E080818160808380818860808356 +:10291000F80180818E7F8083888180618883DF9148 +:10292000CF911F910F910895E8EDF0E080818F7EA7 +:102930008083E7EDF0E080818160808384E082BF66 +:1029400081E0809312030C945114E8EDF0E0808153 +:102950008E7F80831092E20008951092DA00109228 +:10296000E10008951F920F920FB60F9211242F933A +:102970003F934F935F936F937F938F939F93AF9307 +:10298000BF93EF93FF938091E10082FF0BC0809192 +:10299000E20082FF07C08091E1008B7F8093E1001D +:1029A0000E9419178091DA0080FF1FC08091D80023 +:1029B00080FF1BC08091DA008E7F8093DA008091C7 +:1029C000D90080FF0DC080E189BD82E189BD09B4D5 +:1029D00000FEFDCF81E0809313030E941D1105C00E +:1029E00019BC109213030E942B118091E10080FF0B +:1029F00019C08091E20080FF15C08091E2008E7FB7 +:102A00008093E2008091E20080618093E2008091F7 +:102A1000D80080628093D80019BC85E080931303AE +:102A20000E942F118091E10084FF30C08091E2006C +:102A300084FF2CC080E189BD82E189BD09B400FE1C +:102A4000FDCF8091D8008F7D8093D8008091E100E8 +:102A50008F7E8093E1008091E2008F7E8093E20080 +:102A60008091E20081608093E20080910F038823CF +:102A700011F084E007C08091E30087FD02C081E08F +:102A800001C083E0809313030E9430118091E10024 +:102A900083FF29C08091E20083FF25C08091E1007F +:102AA000877F8093E10082E08093130310920F03ED +:102AB0008091E1008E7F8093E1008091E2008E7F23 +:102AC0008093E2008091E20080618093E20042E026 +:102AD00060E080E00E94B1138091F00088608093F4 +:102AE000F0000E942E11FF91EF91BF91AF919F9145 +:102AF0008F917F916F915F914F913F912F910F90A7 +:102B00000FBE0F901F9018951F920F920FB60F9245 +:102B100011242F933F934F935F936F937F938F93E2 +:102B20009F93AF93BF93CF93DF93EF93FF93C091A6 +:102B3000E900CF708091EC00D82FD17080FDD0E8F3 +:102B40001092E9008091F000877F8093F0007894E4 +:102B50000E94C8151092E9008091F000886080936F +:102B6000F000CD2BCF70C093E900FF91EF91DF9182 +:102B7000CF91BF91AF919F918F917F916F915F9115 +:102B80004F913F912F910F900FBE0F901F9018956E +:102B90001F93CF93DF93CDB7DEB7AA970FB6F89404 +:102BA000DEBF0FBECDBFE4E1F3E088E08E0F909171 +:102BB000F10091938E13FBCF0E9446118091E800A3 +:102BC00083FF1FC18091140390911503492F50E09A +:102BD0004A30510508F015C1FA01EA5AFF4F0C942A +:102BE000D52C803881F0823809F00BC18091180310 +:102BF0008F708093E9008091EB0085FB882780F936 +:102C00001092E90006C08091100390911103911178 +:102C100082609091E800977F9093E8008093F100A4 +:102C20001092F100C8C0282F2D7F09F0EAC0882338 +:102C300019F0823061F0E5C080911603813009F00F +:102C4000E0C0933009F080E0809311032BC08091A5 +:102C50001603811127C0809118038F7009F4D1C029 +:102C60008093E9002091EB0020FF1CC0933021F4F9 +:102C70008091EB00806214C09091EB009061909382 +:102C8000EB0021E030E0A90102C0440F551F8A95F6 +:102C9000E2F74093EA001092EA008091EB0088602E +:102CA0008093EB001092E9008091E800877F86C056 +:102CB0008111A7C0109116031F778091E3008078DF +:102CC000812B8093E3008091E800877F8093E80068 +:102CD0000E94E6138091E80080FFFCCF8091E30022 +:102CE00080688093E300111102C082E001C083E09C +:102CF0008093130386C08058823008F082C0809190 +:102D00001603909117038C3D53E0950779F583E006 +:102D10008A838AE289834FB7F894DE01139620E014 +:102D20003EE051E2E32FF0E050935700E49120FFA2 +:102D300003C0E295EF703F5FEF708E2F90E0EA30B6 +:102D400010F0C79601C0C0968D939D932F5F2431DC +:102D500049F74FBF8091E800877F8093E8006AE2DF +:102D600070E0CE0101960E94ED1214C0AE014F5FDB +:102D70005F4F609118030E943412BC01009709F460 +:102D800040C09091E800977F9093E80089819A81F4 +:102D90000E9450138091E8008B778093E80031C047 +:102DA000803879F58091E800877F8093E8008091F2 +:102DB0000F038093F1008091E8008E778093E80004 +:102DC0000E94E6131EC081111CC090911603923020 +:102DD000C0F48091E800877F8093E80090930F0310 +:102DE0000E94E61380910F03811106C08091E300D9 +:102DF00087FD02C081E001C084E0809313030E943C +:102E000032118091E80083FF0AC08091E800877F3B +:102E10008093E8008091EB0080628093EB00AA969B +:102E20000FB6F894DEBF0FBECDBFDF91CF911F91DB +:102E300008950895CF93809113038823A1F0C09142 +:102E4000E900CF709091EC00892F817090FD80E8AF +:102E5000C82B1092E9008091E80083FD0E94C815FC +:102E6000CF70C093E900CF9108959093930280931F +:102E700092020895E0919202F0919302309721F02E +:102E80000190F081E02D099480E00895E091920294 +:102E9000F0919302309721F00280F381E02D0994A4 +:102EA0000895E0919202F0919302309721F004800E +:102EB000F581E02D099408952091900230919102BE +:102EC0008217930771F09093910280939002E091A2 +:102ED0009202F0919302309721F00680F781E02D65 +:102EE0000994089520918E0230918F0282179307E2 +:102EF00071F090938F0280938E02E0919202F09194 +:102F00009302309721F00084F185E02D0994089513 +:102F100008950C9488170E940F230E9460090E9454 +:102F200095230C9444285F926F927F928F929F9288 +:102F3000AF92BF92CF92DF92EF92FF920F931F93C7 +:102F4000CF93DF9300D000D01F92CDB7DEB70E94A1 +:102F5000A5099DE9C92E92E0D92E03E010E0AA242C +:102F6000A394B12C502E802F0E94200A4C01F60110 +:102F7000729062906F016826792661147104A1F441 +:102F80000150110978F78FEF89838A831B820E9491 +:102F900018238160782F9D838C8349815A816B81AE +:102FA0008D810E94431838C08091F20281FD0E94F9 +:102FB000290A2BE030E07501022E02C0EE0CFF1C46 +:102FC0000A94E2F7C70186219721892B09F1298309 +:102FD0005A828E209F2091E0892809F490E09B83FB +:102FE0000E9418238160782F9D838C8349815A81A8 +:102FF0006B818D810E944318000F111FF801EB5661 +:10300000FD4F80819181E826F926F182E08204C09B +:103010002150310980F6B4CF0E947C251091940292 +:103020000E943A171817D1F00E943A178093940221 +:103030000F900F900F900F900F90DF91CF911F91F5 +:103040000F91FF90EF90DF90CF90BF90AF909F9047 +:103050008F907F906F905F900C944A090F900F9023 +:103060000F900F900F90DF91CF911F910F91FF90D4 +:10307000EF90DF90CF90BF90AF909F908F907F9018 +:103080006F905F900895CF93DF93CDB7DEB72B9706 +:103090000FB6F894DEBF0FBECDBF4F835887698748 +:1030A0007A878B87DE01119686E0FD0111928A9561 +:1030B000E9F785E0FE01379601900D928A95E1F7D8 +:1030C00049815A816B817C818D819E810E94BA1ECB +:1030D0002B960FB6F894DEBF0FBECDBFDF91CF9118 +:1030E0000895CF93882309F4C2C0C82F823859F4B9 +:1030F0000E943A1781FDBBC089E30E9494210E947F +:10310000612289E30CC0833879F40E943A1780FD6C +:10311000AEC083E50E9494210E94612283E50E9453 +:10312000D621CF910C946122843859F40E943A1729 +:1031300082FD9DC087E40E9494210E94612287E461 +:10314000EECF8CEF8C0F813A48F48C2F0E94AC2785 +:1031500081118DC08C2F0E949421E3CF80E28C0FCF +:10316000883048F4C77081E001C0880FCA95EAF73B +:103170000E941A22D6CF8BE58C0F833078F4C53AA3 +:1031800029F0C63A31F083E890E005C081E890E08C +:1031900002C082E890E0CF910C945C1788E58C0F18 +:1031A000833108F064C0C83A39F1C93A41F1CA3AEA +:1031B00049F1CB3A51F1CC3A59F1CD3A61F1C03BEA +:1031C00069F1CE3A71F1CF3A79F1C13B81F1C23B5D +:1031D00089F1C33B91F1C43B99F1C53BA1F1C63BD9 +:1031E000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B39 +:1031F000C9F180E090E038C082EE90E035C089EE01 +:1032000090E032C08AEE90E02FC085EB90E02CC0B9 +:1032100086EB90E029C087EB90E026C08CEC90E034 +:1032200023C08DEC90E020C083E891E01DC08AE8C7 +:1032300091E01AC082E991E017C084E991E014C0DE +:1032400081E292E011C083E292E00EC084E292E05B +:103250000BC085E292E008C086E292E005C087E2FA +:1032600092E002C08AE292E0CF910C947217CF9163 +:103270000895882309F44BC0823859F40E943A1704 +:1032800081FF45C089E30E9494210E94612289E365 +:103290000CC0833871F40E943A1780FF38C083E570 +:1032A0000E9494210E94612283E50E94D6210C9401 +:1032B0006122843859F40E943A1782FF28C087E4BB +:1032C0000E9494210E94612287E4EFCF9CEF980F27 +:1032D000913A58F390E2980F983050F4877091E04B +:1032E00001C0990F8A95EAF7892F0E942022DFCF2B +:1032F0009BE5980F933020F480E090E00C945C17ED +:10330000885A833120F480E090E00C94721708957D +:10331000882321F00E941A220C94612208958823A8 +:1033200021F00E9420220C94612208957F928F92B6 +:103330009F92AF92BF92CF92DF92EF92FF920F9344 +:103340001F93CF93DF931F92CDB7DEB77C01C62EBC +:10335000772EFC01058102950F70128111110E94D8 +:1033600037220E948D21882379F0112369F080E2B1 +:103370008C0D883048F082E00E9476210E948D21D9 +:1033800091E0D82ED92601C0D12CE72DE295EF701F +:10339000F0E0E05AFF4F0C94D52C872D807F072D4D +:1033A0000F70882311F00295007F112389F000230C +:1033B00009F499C180E28C0D883020F4802F0E949E +:1033C0001A2203C0802F0E942A220E9461228BC1F0 +:1033D0008C2D0E943919002309F4C3C180E28C0DA1 +:1033E000883020F4802F0E94202203C0802F0E946A +:1033F00030220E946122B5C1872D807F972D9F705A +:10340000803211F4892F03C0892F8295807FCC20D0 +:1034100021F0F1E0CF16A1F01DC0112339F00023F7 +:1034200019F1013009F50E944A229BC1002319F0CD +:10343000013009F496C189830E944D22898110C10F +:10344000112321F0063008F08CC10EC0053008F0C1 +:1034500088C106C1112359F0002331F0F70195818D +:1034600090FF41C19F7095830E9488197AC1002303 +:1034700009F4F6C03EC1872D86958695837090E04D +:10348000009719F0019761F06CC1112321F08C2D88 +:10349000972D937002C080E090E00E945C1761C19C +:1034A000112321F08C2D972D937002C080E090E0C5 +:1034B0000E94721756C18C2D112319F00E9484248A +:1034C00002C00E94EC240E9471254BC1872D83709D +:1034D00009F052C0111145C18C2D829586958770D7 +:1034E000880F880F9C2D9F70892E912CA12CB12CB8 +:1034F000082E04C0880C991CAA1CBB1C0A94D2F785 +:10350000C4FE14C00FE010E020E030E0B901A801D3 +:1035100004C0440F551F661F771F8A95D2F7CB0151 +:10352000BA01609570958095909503C060E070E059 +:10353000CB01272D26952695237030E022303105CA +:1035400069F02330310589F0682979298A299B2976 +:103550002130310571F00E94022003C168297929C8 +:103560008A299B290E941E20FCC00E940220C501BE +:10357000B4010E94E61FF5C0112319F0872D817058 +:1035800001C08695882309F4ECC08C2D8295869520 +:103590008770880F880F9C2D9F70892E912CA12CED +:1035A000B12C082E04C0880C991CAA1CBB1C0A94C0 +:1035B000D2F7C4FE14C00FE010E020E030E0B90103 +:1035C000A80104C0440F551F661F771F8A95D2F7C4 +:1035D000CB01BA01609570958095909503C060E02D +:1035E00070E0CB01272D269526952370422F50E0C1 +:1035F0004230510569F04330510589F06829792935 +:103600008A299B294130510571F00E94DC20A9C014 +:10361000682979298A299B290E94F820A2C00E9442 +:10362000DC20C501B4010E94C0209BC08C2D90E01D +:10363000FC01E05EF109E531F10508F050C0E05908 +:10364000FF4F0C94D52C0C2D0F70872D8F711123EB +:1036500021F00E945920802F07CF0E947A20802FCE +:103660000E948F197EC0112341F0053008F079C007 +:10367000872D8F710E949F2074C0063008F071C0A2 +:10368000F7CF112339F0872D8F710E94592069C01F +:103690001123C9F3872D8F710E947A2062C01123F4 +:1036A00029F0872D8F710E9444205BC00E943A2030 +:1036B00058C0112351F0172D1F71812F0E945920DE +:1036C00063E0812F0E946D214CC081E00E94762131 +:1036D000023008F446C082E00E94762142C01123E5 +:1036E00031F0002381F28C2D0E9471183AC0002322 +:1036F00089F28C2D0E94391934C0472D4F706C2DE2 +:10370000C7010E94B5030E945E1F2BC0111129C082 +:10371000472D4F7050E042305105B9F04CF441153F +:10372000510581F041305105E1F40E946C2819C027 +:103730004330510569F04430510599F48C2D0E94B5 +:10374000BE280FC00E9455280CC00E94882809C0BE +:103750000E949B2806C0472D4F706C2DC7010E9408 +:103760002B06DD20F9F00E94692180FD1BC0F701C6 +:1037700012820E9463210E945920C7010E94E11B0E +:103780000E9463210F90DF91CF911F910F91FF90C5 +:10379000EF90DF90CF90BF90AF909F908F907F90F1 +:1037A0000C947A200F90DF91CF911F910F91FF9091 +:1037B000EF90DF90CF90BF90AF909F908F907F90D1 +:1037C00008950F931F93CF93DF93EC018881998124 +:1037D0002B813C81232BB9F09F3F11F48F3F99F04F +:1037E000CE010E942A04882371F0688179818A8140 +:1037F0000E945F218C010E9414210E94DB1FB801EE +:10380000CE010E949619DF91CF911F910F910895DB +:103810000E9437220E9447220E940C220E946122AD +:103820000E9422260E94712580E090E00E945C1791 +:1038300080E090E00C9472170E9427220C94081CE0 +:103840000E945421292F22952F7030E02C30310511 +:103850004CF42A3031056CF4225031092230310504 +:10386000A8F407C02C30310569F02F30310551F034 +:103870000DC0803F69F018F4803E40F409C0843FD9 +:1038800029F406C093FB882780F9089580E0089505 +:1038900081E00895CF93DF9300D000D01F92CDB781 +:1038A000DEB70F900F900F900F900F90DF91CF9198 +:1038B0000895CF93DF9300D000D000D0CDB7DEB70E +:1038C00026960FB6F894DEBF0FBECDBFDF91CF9125 +:1038D00008951F93CF93DF93C0919D0216E08091CE +:1038E0009E02C81799F0D0E01C9FF0011D9FF00DBB +:1038F0001124E156FD4F40815181628173818481A1 +:1039000095810E94591C2196C770E9CFDF91CF9114 +:103910001F9108954091CF025091D0026091D10241 +:103920007091D2028091D3029091D4020C94591CD0 +:103930008091D40282958F7009F054C08091D10299 +:10394000882309F44FC080919D02A0919E0260914E +:10395000CF027091D0024091D2025091D302B6E0D2 +:103960008A1709F43FC090E041155105C1F17F3F2E +:1039700011F46F3FA1F1B89FF001B99FF00D112430 +:10398000E156FD4F218172132AC02081621327C0A6 +:103990002281211124C0238134812417350710F49A +:1039A00021503109241B350B283C3105C0F42091EE +:1039B000D4022F7020612093D40226E0289FF001CA +:1039C000299FF00D1124EC55FD4F80818F7080618F +:1039D00080838FEC92E00E94E11B0C94691C01969D +:1039E0008770BECF0895CF92DF92EF92FF920F9330 +:1039F0001F93CF93DF93CDB7DEB762970FB6F894DE +:103A0000DEBF0FBECDBF8C0185E0F801DE011D9643 +:103A100001900D928A95E1F7D8014C9111965C9135 +:103A2000119712966C9112971396CD90DC90149783 +:103A30003091CF027091D0028091D2029091D30246 +:103A4000009709F46BC17F3F19F43F3F09F466C149 +:103A5000E090D102EE2009F4C0C02091D402C81633 +:103A6000D90628F0F601E81BF90BCF0104C08095B8 +:103A700090958C0D9D1DFF24F394883C910578F062 +:103A8000F12C207F09F0C6C07C2DD98AC88A89898B +:103A90000E944A1C8FEC92E00E94E11BB1C0822F71 +:103AA000807F09F046C0751314C0341312C0611131 +:103AB00010C02F7020612093D4020E948A1C8FECCA +:103AC00092E00E94E11B8091D402D80115968C935C +:103AD0002EC0CD2819F15F3F11F44F3FF9F0F62EBB +:103AE00061111CC080919D0220919E0236E08217D8 +:103AF00009F45AC090E0389FF001399FF00D11246D +:103B0000E156FD4F7181571306C07081471303C002 +:103B10007281711103C001968770E9CFF62E66237A +:103B200009F418C18091D40281608093D402F12CF1 +:103B300011C1751308C0341306C0611104C080910F +:103B4000D402D801C3C04D875E878D859E856A8B60 +:103B50000E94201C6A898823E1F16623D1F120911B +:103B6000D402822F82958F7090E0029774F080913A +:103B7000CF029091D00298878F831986DB86CA8600 +:103B80002C87CE0107960E94E11B86E0F801AFEC7E +:103B9000B2E001900D928A95E1F70E94981C0E9474 +:103BA0008A1CFF24F394D6C04D875E878D859E8541 +:103BB0000E945421292F22952F7030E022303105A8 +:103BC0000CF0BCC09F7009F0B6C0805E883008F46D +:103BD000C1C0C8010E94E11BE4CFC816D90608F491 +:103BE00053C0F601E81BF90BCF01883C910508F49E +:103BF00050C0F12C7C2DD98AC88A89890E944A1C20 +:103C0000EFECF2E086E0DF011D928A95E9F70E9471 +:103C10008A1CA0C0751314C0341312C0611110C0E7 +:103C20008091D402F8018583C8010E94E11B86E0DF +:103C3000EFECF2E0DF011D928A95E9F7FE2C8AC0D5 +:103C40004D875E878D859E856A8B0E94201C6A89C0 +:103C5000882309F4BECF662309F4BBCF2091D40298 +:103C6000822F82958F7090E002970CF48ECF809116 +:103C7000CF029091D0029A8389831B82DD82CC820D +:103C80002E83CE0101967FCF809590958C0D9D1D42 +:103C9000ACCFF62E662309F49CCF75132EC03413D7 +:103CA0002CC02091D40220FD1FC0822F82958F70DE +:103CB000D9F0D80115962C9315978F3049F08F5F66 +:103CC000982F9295907F822F8F70892B15968C93C9 +:103CD000C8010E94E11B86E0F801AFECB2E0019060 +:103CE0000D928A95E1F793CF86E0F801AFECB2E050 +:103CF00001900D928A95E1F72DC04D875E878D85E5 +:103D00009E850E94201C811140CF8091D402816049 +:103D10008093D402C8010E94E11B1CC0662309F4F1 +:103D200058CF4D875E878D859E850E94201C8823F5 +:103D300009F44FCF2ACF811148CF0CC02430310570 +:103D40000CF047CF9F7009F440CFF8019581907F28 +:103D500009F03BCF8F2D62960FB6F894DEBF0FBEF1 +:103D6000CDBFDF91CF911F910F91FF90EF90DF902A +:103D7000CF9008951F93CF93DF93CDB7DEB72C97E5 +:103D80000FB6F894DEBF0FBECDBF4F83588769874B +:103D90007A878B879C87CE0107960E94F31C882325 +:103DA00069F08F8198852A853B85232BF1F19F3F10 +:103DB00009F063C08F3F09F060C037C086E0FE01A4 +:103DC0003796DE01119601900D928A95E1F76F8189 +:103DD0007885EA85FB85309741F17F3F11F46F3F8D +:103DE00021F120919E0230E0C90101968770992748 +:103DF00040919D0250E08417950709F447C06983FC +:103E00007A83FD83EC8396E0929FD001939FB00D5F +:103E10001124A156BD4FFE01319601900D929A9545 +:103E2000E1F780939E020E94691C16E080919D023A +:103E300090919E028917C1F1189FC00111248156EB +:103E40009D4F0E94F31C882379F1E0919D021E9FF3 +:103E5000F0011124E156FD4F40815181628173814F +:103E6000848195810E94591C80919D0290E0019669 +:103E70008770992780939D02D9CF4F815885698596 +:103E80007A858B859C850E94591CCFCF0E941C1C73 +:103E900010929E0210929D02EFECF2E086E0DF01AC +:103EA0001D928A95E9F7C1CF2C960FB6F894DEBF24 +:103EB0000FBECDBFDF91CF911F910895EF92FF927A +:103EC0000F931F93CF93DF938C01009709F46CC07D +:103ED000F12CEE24E394E8012196F80184918437D3 +:103EE00040F4843008F051C0813081F0823019F103 +:103EF0005BC0853709F444C0A8F19CE7980F903760 +:103F000008F052C08F770E94391941C00E5F1F4FD1 +:103F1000FE01C49180E28C0F883048F4C7708E2D6A +:103F200001C0880FCA95EAF70E943A2214C08C2F6C +:103F30000E9471182DC00E5F1F4FFE01C49180E2D8 +:103F40008C0F883058F4C7708E2D01C0880FCA9529 +:103F5000EAF70E9440220E9461221AC08C2F0E9420 +:103F6000391916C00E5F1F4FFE01C491CC2381F09A +:103F70008FE99FE00197F1F700C00000C150F6CF34 +:103F80000E5F1F4FFE01F49003C00E9471188E0156 +:103F90008F2D882309F49FCFEFE9FFE03197F1F7E8 +:103FA00000C000008150F5CFDF91CF911F910F919C +:103FB000FF90EF90089508956093D9027093DA020C +:103FC0008093DB029093DC020C94081C0F931F93E8 +:103FD0000091D9021091DA022091DB023091DC02CB +:103FE000DC01CB01802B912BA22BB32B8093D90228 +:103FF0009093DA02A093DB02B093DC021F910F9141 +:104000000C94081C0F931F930091D9021091DA02AF +:104010002091DB023091DC02DC01CB018023912373 +:10402000A223B3238093D9029093DA02A093DB02F8 +:10403000B093DC021F910F910C94081C0F931F93F7 +:104040000091D9021091DA022091DB023091DC025A +:10405000DC01CB0180279127A227B3278093D902C7 +:104060009093DA02A093DB02B093DC021F910F91D0 +:104070000C94081C1092D5021092D6021092D7020E +:104080001092D8020C94081C41E050E060E070E00F +:1040900004C0440F551F661F771F8A95D2F74093BF +:1040A000D5025093D6026093D7027093D8020C9435 +:1040B000081C41E050E060E070E004C0440F551F70 +:1040C000661F771F8A95D2F78091D5029091D6020C +:1040D000A091D702B091D802482B592B6A2B7B2B89 +:1040E0004093D5025093D6026093D7027093D802C2 +:1040F0000C94081C41E050E060E070E004C0440F04 +:10410000551F661F771F8A95D2F740955095609589 +:1041100070958091D5029091D602A091D702B0916E +:10412000D802482359236A237B234093D502509316 +:10413000D6026093D7027093D8020C94081C41E019 +:1041400050E060E070E004C0440F551F661F771F09 +:104150008A95D2F78091D5029091D602A091D7028C +:10416000B091D802482759276A277B274093D50268 +:104170005093D6026093D7027093D8020C94081C17 +:104180000F931F930091D5021091D6022091D70270 +:104190003091D802DC01CB01802B912BA22BB32BC9 +:1041A0008093D5029093D602A093D702B093D80201 +:1041B0001F910F910C94081C0F931F930091D5022F +:1041C0001091D6022091D7023091D802DC01CB01A8 +:1041D00080239123A223B3238093D5029093D60208 +:1041E000A093D702B093D8021F910F910C94081C92 +:1041F0000F931F930091D5021091D6022091D70200 +:104200003091D802DC01CB0180279127A227B32768 +:104210008093D5029093D602A093D702B093D80290 +:104220001F910F910C94081C0895CF92DF92EF928A +:10423000FF920F931F93CF93DF938C01C090D9020D +:10424000D090DA02E090DB02F090DC028091D5029F +:104250009091D602A091D702B091D802C82AD92A4B +:10426000EA2AFB2ACFE1D0E0D701C6010C2E04C018 +:10427000B695A795979587950A94D2F780FF06C0C3 +:10428000B8018C2F0E94B008019721F4219760F7A4 +:1042900080E001C08C2FDF91CF911F910F91FF9093 +:1042A000EF90DF90CF900895CF93DF93EC010E94C1 +:1042B0001521BE010E94B008DF91CF910895CB0176 +:1042C0000E94542108958091DD02859585958595FC +:1042D00008958091DD028770089598E0899F90018C +:1042E0001124262B2093DD020C9459202091DD020D +:1042F000809582238093DD02982F977069F430E0D7 +:10430000482F552747FD50952417350729F08595E7 +:10431000859585950C947A2008959091DD0297708B +:1043200081E009F480E0089590911501992321F02E +:1043300090911601911109C0209117013091180137 +:10434000F90132969FEF40E01FC0982F9695969501 +:1043500096959F3050F5E0911701F0911801E90F03 +:10436000F11D877021E030E0A90102C0440F551F04 +:104370008A95E2F7CA019181892B818308959F3F35 +:1043800039F04F5F4E3041F051915813F8CF0DC0C6 +:104390005111F7CF942FF5CF9F3F39F0F901E90F75 +:1043A000F11D97FDFA958283089508959091150166 +:1043B000992321F090911601911109C020911701C4 +:1043C00030911801F9013296205F3F4F1FC0982F9E +:1043D0009695969596959F30F0F4E0911701F0919F +:1043E0001801E90FF11D877021E030E0A90102C03A +:1043F000440F551F8A95E2F7CA0180959181892360 +:10440000818308953196E217F30729F0908198137C +:10441000F9CF1082F7CF089581E090E0E091170185 +:10442000F0911801E80FF91F108201968031910573 +:10443000A9F708959091F102892B8093F1020895D4 +:1044400080959091F10289238093F1020895109252 +:10445000F10208959091F002892B8093F002089563 +:1044600080959091F00289238093F0020895109234 +:10447000F00208959091EF02892B8093EF02089546 +:1044800080959091EF0289238093EF020895109216 +:10449000EF0208958093DE0208951092DE020895DF +:1044A0008091170190911801FC0131969C01205FC9 +:1044B0003F4F80E0919191118F5FE217F307D1F7A1 +:1044C0000895E0911701F09118018091F102808325 +:1044D000E0911701F091180190818091F002892BF1 +:1044E0008083E0911701F091180190818091EF0293 +:1044F000892B80838091DE02882361F0E09117018F +:10450000F09118019081892B80830E9450228111A3 +:104510001092DE0280911701909118010C944617B9 +:1045200020E0009739F0AC014150510984239523D4 +:104530002F5FF7CF822F089580911303843039F1D4 +:104540001092F30220E488E190E00FB6F894A89569 +:10455000809360000FBE2093600080E00E941C03E7 +:1045600080E00E944A0983B7817F846083BF83B75C +:10457000816083BF7894889583B78E7F83BF88E1FD +:104580000FB6F89480936000109260000FBE0895FB +:104590000895089580E00E941C030E94C8220E9492 +:1045A000A5090E94C9220E942A0A91E0811101C036 +:1045B00090E0892F08950E941C1C80E00E941C033B +:1045C0000E9444280E943A170C944A091F920F92A5 +:1045D0000FB60F9211248F939F93AF93BF93809147 +:1045E000F302811113C08091F4029091F502A09121 +:1045F000F602B091F7024196A11DB11D8093F4021D +:104600009093F502A093F602B093F702BF91AF9199 +:104610009F918F910F900FBE0F901F90189582E081 +:1046200084BD93E095BD9AEF97BD80936E00089589 +:104630002FB7F8948091F4029091F502A091F602C0 +:10464000B091F7022FBF0895CF92DF92EF92FF92C1 +:104650000F931F932FB7F8944091F4025091F502F5 +:104660006091F6027091F7022FBF6A017B01EE2480 +:10467000FF248C0120E030E0C016D106E206F306EC +:1046800010F4415051099A01281B390BC9011F919F +:104690000F91FF90EF90DF90CF9008951F920F92AF +:1046A0000FB60F9211248F939F93AF93BF93809176 +:1046B000F4029091F502A091F602B091F7020196F2 +:1046C000A11DB11D8093F4029093F502A093F60210 +:1046D000B093F702BF91AF919F918F910F900FBE52 +:1046E0000F901F9018950E943714F8942FEF87EAC7 +:1046F00091E6215080409040E1F700C0000087E043 +:1047000090EBDC0180931E0390931F03A093200382 +:10471000B09321039CE088E10FB6F894A8958093AC +:1047200060000FBE90936000FFCF0E94D4238111E0 +:1047300002C00E94B0230E94DF238093F2020E94F5 +:10474000E72380931C0387FB882780F98093160159 +:104750000E94E323682F70E080E090E00C94DC1F5F +:104760006DEE7EEF80E090E00E94FB2C60E082E046 +:1047700090E00E94E92C60E083E090E00E94E92C48 +:1047800060E084E090E00E94E92C60E085E090E049 +:104790000E94E92C60E086E090E00E94E92C6FEF37 +:1047A00087E090E00C94E92C80E090E00E94E32CFC +:1047B00021E08D3E9E4F09F020E0822F089582E097 +:1047C00090E00C94DB2C83E090E00C94DB2C84E0F4 +:1047D00090E00C94DB2C682F84E090E00C94E92CA2 +:1047E00086E090E00C94DB2C682F86E090E00C943F +:1047F000E92C87E090E00C94DB2C682F87E090E0B8 +:104800000C94E92C8091FA0280FF0BC060911C018E +:1048100085E0689FB001112475956795759567953A +:104820002BC081FF09C060911C0185E0689FB00129 +:1048300011247595679520C082FF07C060911C0107 +:1048400085E0689FB001112417C09091FB02992365 +:10485000D1F060911B01961788F720911C0185E02B +:10486000289F90011124929FA001939F500D112425 +:1048700070E0CA010E94C12C6038710540F46115D6 +:10488000710539F002C065E070E0862F08958FE76A +:10489000089581E008958091FA0280FF08C0609138 +:1048A0001A0170E0759567957595679521C081FF30 +:1048B00006C060911A0170E07595679519C082FF76 +:1048C00004C060911A0170E010C09091FB0299231E +:1048D000C1F0609119019617A0F780911A01899F84 +:1048E000C001112470E00E94C12C6038710528F4C9 +:1048F0006115710521F0862F08958FE7089581E0F5 +:10490000089561E070E0F4CF803F21F40E9402241A +:10491000819504C0813F29F40E9402248093FE0205 +:104920000895823F21F40E940224819504C0833FB0 +:1049300029F40E9402248093FD020895893F19F40E +:104940000E944B2405C08A3F31F40E944B2481957C +:104950008093FF0208958B3F21F40E944B248195A0 +:1049600004C08C3F29F40E944B24809300030895D7 +:10497000843F21F48091FC02816017C0853F21F4BF +:104980008091FC02826011C0863F21F48091FC027C +:1049900084600BC0873F21F48091FC02886005C0D1 +:1049A000883F31F48091FC0280618093FC0208957D +:1049B0008D3F21F48091FA0281600BC08E3F21F47B +:1049C0008091FA02826005C08F3F29F48091FA023B +:1049D00084608093FA020895803F39F48091FE024A +:1049E00087FF6CC01092FE0269C0813F29F480915C +:1049F000FE021816BCF362C09091FD02823F29F4BA +:104A000097FF5CC01092FD0259C0833F19F419163C +:104A1000CCF354C0893F41F48091FF0218160CF08A +:104A20004DC01092FF024AC08A3F29F48091FF02D4 +:104A300087FF44C0F6CF8B3F39F48091000387FF96 +:104A40003DC0109200033AC08C3F29F480910003CE +:104A50001816BCF333C0843F21F48091FC028E7F92 +:104A600017C0853F21F48091FC028D7F11C0863FE5 +:104A700021F48091FC028B7F0BC0873F21F4809151 +:104A8000FC02877F05C0883F31F48091FC028F7E55 +:104A90008093FC0213C08D3F21F48091FA028E7F37 +:104AA0000BC08E3F21F48091FA028D7F05C08F3FAD +:104AB00029F48091FA028B7F8093FA028091FD02A3 +:104AC00081110EC08091FE0281110AC08091FF0207 +:104AD000811106C080910003811102C01092FB0277 +:104AE00008958CEF92E00E9451170E941823909332 +:104AF000F9028093F80208951F93CF93DF9380917A +:104B0000F8029091F9020E942423AC019091FB02DB +:104B1000992321F020911D0130E006C020911E0153 +:104B20008AE0289F900111244217530708F486C099 +:104B30008091FD02C091FE02D091FF02109100030E +:104B4000811107C0C11176C0D11174C0111172C09A +:104B500075C09F3F19F09F5F9093FB02181624F4D5 +:104B60000E9402248093FD028091FD0287FF05C010 +:104B70000E94022481958093FD021C1624F40E9459 +:104B800002248093FE028091FE0287FF05C00E94EE +:104B9000022481958093FE026091FD02662339F123 +:104BA000C091FE02CC2319F1772767FD7095872FFE +:104BB000972F0E94E32923E333E343E35FE30E945B +:104BC000F32A0E94B0296093FD026C2F772767FDBE +:104BD0007095872F972F0E94E32923E333E343E364 +:104BE0005FE30E94F32A0E94B0296093FE021D1623 +:104BF00024F40E944B248093FF028091FF0287FFE0 +:104C000005C00E944B2481958093FF02111624F465 +:104C10000E944B24809300038091000387FF05C00E +:104C20000E944B24819580930003DF91CF911F91C7 +:104C30000C9471259F3F09F08ECF96CFDF91CF91D5 +:104C40001F910895ECEFF2E085E0DF011D928A9557 +:104C5000E9F71092FB021092FA020895833081F175 +:104C600028F4813059F08230D1F00895853009F46C +:104C700049C0B8F1863009F456C0089580911E01EC +:104C8000262F30E0280F311D2F3F310524F4680F07 +:104C900060931E0108958FEF80931E010895809107 +:104CA0001D01262F30E0280F311D2F3F310524F440 +:104CB000680F60931D0108958FEF80931D01089583 +:104CC00080911C01262F30E0280F311D2F3F310528 +:104CD00024F4680F60931C0108958FEF80931C01EA +:104CE000089580911B01262F30E0280F311D2F3FA2 +:104CF000310524F4680F60931B0108958FEF8093B2 +:104D00001B01089580911A01262F30E0280F311DD4 +:104D10002F3F310524F4680F60931A0108958FEF37 +:104D200080931A01089580911901262F30E0280FF1 +:104D3000311D2F3F310524F4680F60931901089548 +:104D40008FEF809319010895833011F128F4813099 +:104D500049F0823091F00895853081F120F186305C +:104D6000C1F1089580911E01681720F4861B80937D +:104D70001E01089510921E01089580911D0168176B +:104D800020F4861B80931D01089510921D01089543 +:104D900080911C01681720F4861B80931C010895E4 +:104DA00010921C01089580911B01681720F4861B46 +:104DB00080931B01089510921B01089580911A01A0 +:104DC000681720F4861B80931A01089510921A0127 +:104DD000089580911901681720F4861B80931901AA +:104DE00008951092190108950F931F93873208F0C8 +:104DF00048C08E3108F08DC0803109F477C008F5C5 +:104E0000873009F461C068F4863009F09DC0809154 +:104E1000F202817F8E7F8093F20281E08093020311 +:104E200094C08B3009F489C08E3009F08DC0809118 +:104E3000F20282FB222720F991E0922790FB82F96F +:104E40005EC0863109F479C060F4813109F07CC01C +:104E50000E941C1C9091160181E089278093160105 +:104E60006CC0893109F469C08B3109F06DC0809143 +:104E7000F20281FB222720F991E0922790FB81F931 +:104E80003EC0883309F459C050F4893209F457C040 +:104E9000853309F454C0873209F451C055C08334B6 +:104EA00009F44DC028F48A3308F44EC0895332C047 +:104EB000883409F049C00E941C1C0E945A0A0E94B2 +:104EC00021040E94732339C09091F202892F8095AA +:104ED000817080FB90F929F0966098609093F202BF +:104EE00034C0997F977F9093F20227C08091F2029D +:104EF00083FB222720F991E0922790FB83F980938E +:104F0000F2029923D1F08091F20281608093F20243 +:104F100014C08D5141E050E060E070E08A019B01D7 +:104F200004C0000F111F221F331F8A95D2F7C90139 +:104F3000B8010E94DC1F0E941C1C81E006C061E0D9 +:104F400070E080E090E0F5CF80E01F910F91089530 +:104F500080E0089580E00895CF93C82F80910203E8 +:104F6000813069F018F08230C9F184C0E0911701F6 +:104F7000F09118018081823209F07EC007C0E09173 +:104F80001701F09118018081823261F48C2F0E9408 +:104F9000A827811104C08C2F0E94F4261DC081E037 +:104FA00090E01AC08C2F0E94AA27811114C0C4312E +:104FB00079F048F4CB3079F0C03109F061C082E07B +:104FC0008093020308C0C93219F0C83321F058C0D9 +:104FD0001092020355C081E0817054C0C93291F132 +:104FE00020F5C43179F1B0F4C73009F047C08EE143 +:104FF00080931E0182E380931D018AE080931C014F +:1050000084E180931B0188E080931A0188E28093F9 +:10501000190134C0CE51C63088F5EC2FF0E0EA54C7 +:10502000FE4F80818093010329C0CE34E9F020F443 +:10503000CB3421F56AE013C0C13579F0C235F1F403 +:1050400061E00DC080910103882319F010920103E3 +:1050500015C081E08093020315C061E006C0809115 +:1050600001030E942E260AC06AE0809101030E947B +:10507000A42604C01092020380E004C081E002C0B4 +:1050800080E0AACFCF9108950E94D423811102C05D +:105090000E94B0230E94F02380931D0380FF02C072 +:1050A000869501C080E00C941C0380911D03982F0D +:1050B0009695292F30E0233031054CF49F5F990FEE +:1050C0008170892B816080931D030E94F42380915D +:1050D0001D0386950C941C0380911D03982F9695B3 +:1050E00091F09158990F8170892B80931D038E7FC9 +:1050F00091E009F490E080911D0390FB80F980938A +:105100001D030E94F42380911D0386950C941C03BB +:1051100080911D03982F909590FB80F980931D033B +:105120000E94F42380911D0380FF02C0869501C078 +:1051300080E00C941C0390911D03892F86958F5F4E +:105140008F779170843028F4880F892B80931D030A +:1051500002C090931D0380911D038E7F91E009F49E +:1051600090E080911D0390FB80F980931D030E94C5 +:10517000F42380911D0386950C941C0320911D033C +:10518000922F96958927982F990F822F8170892BBE +:1051900080931D038E7F91E009F490E080911D03C0 +:1051A00090FB80F980931D030E94F42380911D03DE +:1051B00086950C941C0380911D0386950895505884 +:1051C000BB27AA270ED0D1C1C2D130F0C7D120F061 +:1051D00031F49F3F11F41EF4B7C10EF4E095E7FBE4 +:1051E0009FC1E92FD3D180F3BA17620773078407F1 +:1051F000950718F071F49EF5EBC10EF4E0950B2EB7 +:10520000BA2FA02D0B01B90190010C01CA01A00118 +:105210001124FF27591B99F0593F50F4503E68F173 +:105220001A16F040A22F232F342F4427585FF3CFB4 +:10523000469537952795A795F0405395C9F77EF485 +:105240001F16BA0B620B730B840BBAF09150A1F0CE +:10525000FF0FBB1F661F771F881FC2F70EC0BA0F54 +:10526000621F731F841F48F4879577956795B795DC +:10527000F7959E3F08F0B3CF9395880F08F09927D4 +:10528000EE0F97958795089527D108F481E008954A +:105290000CD06BC163D140F05AD130F021F45F3FA4 +:1052A00019F03EC1511195C14FC170D198F39923A6 +:1052B000C9F35523B1F3951B550BBB27AA276217DA +:1052C0007307840738F09F5F5F4F220F331F441F1F +:1052D000AA1FA9F333D00E2E3AF0E0E830D0915057 +:1052E0005040E695001CCAF729D0FE2F27D0660F44 +:1052F000771F881FBB1F261737074807AB07B0E883 +:1053000009F0BB0B802DBF01FF2793585F4F2AF098 +:105310009E3F510568F004C15CC15F3FECF3983ECD +:10532000DCF3869577956795B795F7959F5FC9F7F5 +:10533000880F911D9695879597F90895E1E0660F7E +:10534000771F881FBB1F621773078407BA0720F0F7 +:10535000621B730B840BBA0BEE1F88F7E095089560 +:1053600004D06894B11135C1089518D188F09F57C1 +:1053700090F0B92F9927B751A0F0D1F0660F771FA1 +:10538000881F991F1AF0BA95C9F712C0B13081F081 +:105390001FD1B1E008951CC1672F782F8827B85F0F +:1053A00039F0B93FCCF3869577956795B395D9F7E2 +:1053B0003EF490958095709561957F4F8F4F9F4FEC +:1053C0000895E89409C097FB3EF4909580957095F8 +:1053D00061957F4F8F4F9F4F9923A9F0F92F96E941 +:1053E000BB279395F695879577956795B795F111B6 +:1053F000F8CFFAF4BB0F11F460FF1BC06F5F7F4F53 +:105400008F4F9F4F16C0882311F096E911C0772364 +:1054100021F09EE8872F762F05C0662371F096E86D +:10542000862F70E060E02AF09A95660F771F881F3C +:10543000DAF7880F9695879597F9089588D018F030 +:1054400011F08CD038F480C0C4C0E92F9FD0B0F3E5 +:105450005523C9F3E7FB6217730784079507A8F183 +:1054600099F3E92FFF2788232AF03197660F771FDA +:10547000881FDAF7952F5527442332F0915050407A +:10548000220F331F441FD2F7BB27E91BF50B621B0A +:10549000730B840BB109C1F222F4620F731F841FD6 +:1054A000B11D31972AF0660F771F881FBB1FEFCF02 +:1054B000915050405AF041F0882332F0660F771F28 +:1054C000881F91505040C1F7939530C086957795CD +:1054D00067959F5FD9F7F8CF990F0008550FAA0B72 +:1054E000E0E8FEEF16161706E807F907C0F01216F7 +:1054F0001306E407F50798F0621B730B840B950BFA +:1055000039F40A2661F0232B242B252B21F408954E +:105510000A2609F4A140A6958FEF811D811D0895EB +:1055200097F99F6780E870E060E008959F3F31F051 +:10553000915020F4879577956795B795880F911DC1 +:105540009695879597F908959FEF80EC089500242C +:105550000A941616170618060906089500240A94D8 +:1055600012161306140605060895092E0394000C5E +:1055700011F4882352F0BB0F40F4BF2B11F460FFED +:1055800004C06F5F7F4F8F4F9F4F089557FD905816 +:10559000440F551F59F05F3F71F04795880F97FBF7 +:1055A000991F61F09F3F79F08795089512161306B1 +:1055B0001406551FF2CF4695F1DF08C016161706E0 +:1055C0001806991FF1CF8695710561050894089515 +:1055D000E894BB2766277727CB0197F908957CDFEE +:1055E00008F48FEF08950BD0C0CFB1DF28F0B6DFFD +:1055F00018F0952309F094CFA7CF1124EACFC6DF86 +:10560000A0F3959FD1F3950F50E0551F629FF001D5 +:10561000729FBB27F00DB11D639FAA27F00DB11D2E +:10562000AA1F649F6627B00DA11D661F829F2227B7 +:10563000B00DA11D621F739FB00DA11D621F839F3E +:10564000A00D611D221F749F3327A00D611D231F14 +:10565000849F600D211D822F762F6A2F11249F5762 +:1056600050408AF0E1F088234AF0EE0FFF1FBB1F85 +:10567000661F771F881F91505040A9F79E3F510524 +:1056800070F04ECFA6CF5F3FECF3983EDCF38695EB +:1056900077956795B795F795E7959F5FC1F7FE2BCF +:1056A000880F911D9695879597F90895FA01EE0F49 +:1056B000FF1F30962105310599F16115710561F4DF +:1056C0008038BFE39B0749F168949038810561F009 +:1056D0008038BFEF9B0741F0992342F5FF3FE1057A +:1056E0003105210511F1E8940894E795D901AA2321 +:1056F00029F4AB2FBE2FF85FD0F310C0FF5F70F41A +:10570000A695E0F7F73950F019F0FF3A38F49F7793 +:105710009F930CD00F9007FC905808953EF014CF43 +:1057200060E070E080E89FE308954FE79F775F9324 +:105730004F933F932F939ED02F913F914F915F9125 +:1057400052DF05C019F40EF0EBCE42CFFDCE26DFBE +:10575000C8F39638C0F707F80F92E8942BE33AEABB +:1057600048EB5FE74EDF0F920F920F924DB75EB797 +:105770000F92C0D0EAE0F1E016D04F915F91EF9127 +:10578000FF91E595EE1FFF1F49F0FE57E0684427A3 +:10579000EE0F441FFA95E1F74195550B32D00F906B +:1057A00007FE26C00895DF93CF931F930F93FF92B8 +:1057B000EF92DF927B018C01689405C0DA2EEF0135 +:1057C0001EDFFE01E894A5912591359145915591F3 +:1057D000AEF3EF0106DDFE019701A801DA9479F737 +:1057E000DF90EF90FF900F911F91CF91DF9108957F +:1057F0009B01AC0160E070E080E89FE349CD90CE72 +:1058000095CECCDEE8F39923D9F3940F511DBBF369 +:105810009150504094F059F0882332F0660F771F72 +:10582000881F91505040C1F79E3F510544F7880FA3 +:10583000911D9695879597F908955F3FACF0983E36 +:105840009CF0BB27869577956795B79508F4B1606E +:105850009395C1F7BB0F58F711F460FFE8CF6F5F66 +:105860007F4F8F4F9F4FE3CFB4CE0EF05FCE6CCE05 +:10587000689456CE93DEC8F39923D1F3C6F3DF9331 +:10588000CF931F930F93FF92C92FDD2788232AF010 +:105890002197660F771F881FDAF720E030E040E895 +:1058A0005FEB9FE3883920F0803E30F021968F77C0 +:1058B00087DCE2E3F1E003C083DCEFE5F1E073DFD6 +:1058C0008B01BE01EC01FB2E6F5771097595771F97 +:1058D000880B990B78DD28E132E741E35FE38FDE47 +:1058E000AF2D9801AE01FF900F911F91CF91DF91E5 +:1058F00078DC3BCEFA01DC01AA0FBB1F9B01AC0197 +:10590000BF5728F422273327442750781FC0B751A8 +:1059100088F4AB2F0024469537952795011CA39555 +:10592000D2F3002069F0220F331F441FB395DAF33E +:105930000DD045CC61307105A0E88A07B94630F436 +:105940009B01AC016627772788279078309621F055 +:1059500020833183428353830895AA1BBB1B51E1EB +:1059600007C0AA1FBB1FA617B70710F0A61BB70BCF +:10597000881F991F5A95A9F780959095BC01CD0174 +:10598000089597FB072E16F4009407D077FD09D0F1 +:105990000E94AD2C07FC05D03EF4909581959F4F59 +:1059A0000895709561957F4F0895EE0FFF1F059044 +:1059B000F491E02D0994F999FECF92BD81BDF89A3A +:1059C000992780B50895A8E1B0E042E050E00C943A +:1059D000032D262FF999FECF92BD81BDF89A01972C +:1059E00000B4021639F01FBA20BD0FB6F894FA9A27 +:1059F000F99A0FBE08950196272F0E94EA2C0C9465 +:105A0000E92CDC01CB01FC01F999FECF06C0F2BD07 +:105A1000E1BDF89A319600B40D9241505040B8F76C +:065A20000895F894FFCF89 +:105A2600640007000CFF0000003F643E10CC10A984 +:105A360010751041100101DF022808140A321E00F9 +:105A460002040507090B0C0E1011131517181A1C62 +:105A56001D1F2123242628292B2D2F30323435379C +:105A6600393B1F0F03764F5F6F7F496943790959A9 +:105A760053633149803F5D8B803FF8BF803FCAE169 +:105A8600803F73ED803FCAE1803FF8BF803F5D8B6A +:105A9600803F3149803F0000803FF16D7F3F75EACE +:105AA6007E3F4C827E3F833F7E3F84287E3F833FFE +:105AB6007E3F4C827E3F75EA7E3FF16D7F3F000060 +:105AC600803F3F4D36394305F604C00487041A0467 +:105AD60033044C04650401020304050607080900A3 +:00000001FF diff --git a/keyboard/planck/keymaps/unicode/compiled.hex b/keyboard/planck/keymaps/unicode/compiled.hex new file mode 100644 index 0000000000..a32eb3a4a9 --- /dev/null +++ b/keyboard/planck/keymaps/unicode/compiled.hex @@ -0,0 +1,1185 @@ +:100000000C9493040C94D7040C94D7040C94D70448 +:100010000C94D7040C94D7040C94D7040C94D704F4 +:100020000C94D7040C94D7040C948A0F0C945C1095 +:100030000C94741D0C94D7040C94D7040C94D7041E +:100040000C94D7040C94D7040C94D7040C94D704C4 +:100050000C94D7040C94DC1D0C94D7040C94D70496 +:100060000C94D7040C94D7040C94D7040C94D704A4 +:100070000C94D7040C94D7040C94D7040C94D70494 +:100080000C94D7040C94D7040C94D7040C94D70484 +:100090000C94D7040C94D7040C94D7040C94D70474 +:1000A0000C94D7040C94D7040C94D704500558052D +:1000B00062056A0579058305C005C005C005C00550 +:1000C000C005C0059105B405BC05C910EB10D911D8 +:1000D000EB10D91130115311D911A811BB11A5146E +:1000E000A514D414D41413153315891689163E1586 +:1000F0008916EE15EE1555165E1689168316FB1534 +:10010000FB15FB15FB15FB15FB15FB15FB15FB156F +:10011000FB15FB15FB15FB15FB15FB15FB150B164E +:1001200019162016271631160108011501090119A3 +:100130000112010F02080215020902190212020F30 +:10014000002B0014001A000800150017001C0018EE +:10015000000C00120013002A0029000400160007FA +:100160000009000A000B000D000E000F00330034E0 +:1001700000E1001D001B0006001900050011001021 +:100180000036003700380028000530E000E200E3C8 +:100190000003302C002C0004305000510052004F5E +:1001A000002B00718077806680708067806A806C29 +:1001B00080758079803B800880290061807280731F +:1001C000807480648068806E80658069806F80271D +:1001D00080E1007A8078806380768062806B806DB9 +:1001E000802C802E802F8028000100E000E200E3B8 +:1001F0000003302C002C0004305000510052004FFE +:10020000002B0034003600370013001C0009000AE0 +:1002100000060015000F002A002900040012000843 +:100220000018000C0007000B001700110016003822 +:1002300000E100330014000D000E001B000500104B +:10024000001A0019001D0028000530E000E200E35C +:100250000003302C002C0004305000510052004F9D +:100260000035021E021F0220022102220223022464 +:10027000022502260227022A004C003A003B003CDD +:10028000003D003E003F002D022E022F02300231C1 +:1002900002010040004100420043004400450001CB +:1002A0000001000100010001000100010001000146 +:1002B000000100010001000100AB00AA00A900AE8E +:1002C0000035001E001F0020002100220023002412 +:1002D000002500260027002A004C003A003B003C85 +:1002E000003D003E003F002D002E002F0030003169 +:1002F000000100400041004200430044004500016D +:1003000000010001000100010001000100010001E5 +:10031000000100010001000100AB00AA00A900AE2D +:10032000001E001E001E001E001E001E001E001EDD +:10033000001E001E001E001E00000014001A00080F +:1003400000150017001C0018000C00120013002FED +:10035000000E3004001600070009000A000B000D13 +:10036000000E000F00330034000D300000000006C6 +:100370000019000000000011001000000000000043 +: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 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:100740000001000050010001000100010001000152 +:10075000000100010001004C000100010001002027 +:10076000502150135012500030013002300C300133 +:1007700000010027502650235024502850295001B2 +:100780000001000100010001000100010001000161 +:100790000001000100010001000100010001000151 +:1007A000002803540068006500200050006C0061C0 +:1007B000006E0063006B0020004B00650079006252 +:1007C000006F0061007200640000002C034F007293 +:1007D00000740068006F006C0069006E00650061C5 +:1007E00000720020004B006500790062006F00611C +:1007F000007200640073000000040309040902543D +:1008000000030100A0FA090400000103010100092E +:100810002111010001223F000705810308000A0998 +:100820000401000103010200092111010001224D10 +:10083000000705820308000A090402000103000002 +:100840000009211101000122360007058303080079 +:100850000A1201100100000008EDFE6060010001B5 +:1008600002000105010980A101850216010026B7D9 +:10087000001A01002AB700751095018100C0050C0F +:100880000901A1018503160100269C021A01002A14 +:100890009C02751095018100C005010902A10109A2 +:1008A00001A1000509190129051500250195057506 +:1008B0000181029501750381010501093009311596 +:1008C00081257F95027508810609381581257F9558 +:1008D0000175088106050C0A38021581257F9501EE +:1008E00075088106C0C005010906A101050719E0C8 +:1008F00029E7150025019508750181029501750804 +:1009000081010508190129059505750191029501D7 +:10091000750391010507190029FF150025FF9506AC +:1009200075088100C00011241FBECFEFDAE0DEBFE2 +:10093000CDBF04B603FE24C08091E4019091E5018F +:10094000A091E601B091E7018730904BA740B04BF2 +:10095000B9F41092E4011092E5011092E6011092B0 +:10096000E70114BE84B7877F84BF88E10FB6F8948F +:1009700080936000109260000FBEE0E0F8E30995FC +:1009800011E0A0E0B1E0ECEBF9E402C005900D92BB +:10099000AE33B107D9F711E0AEE3B1E001C01D926B +:1009A000A43EB107E1F70E94D00C0C94DC240C9417 +:1009B0000000089581E0089508950C94D9040C94E2 +:1009C000DA040C94DC040E94522323E030E0281B5C +:1009D0003109220F209340010895282F2F988091EC +:1009E0008000211108C0877F8093800010928D00C5 +:1009F00010928C001BC0886080938000233019F413 +:100A00008FEF9FEF0FC083E090E0821B9109880F6A +:100A1000991F2FEF3FEFA90102C0569547958A9580 +:100A2000E2F7CA0190938D0080938C000C94E3044C +:100A30000E94E30484E080933F0110923E010895F8 +:100A4000279A2F988FEF9FEF9093870080938600CF +:100A50008AE08093800089E1809381000E94BB221C +:100A60000C9418050E9420056E9A769A0C94C6057F +:100A7000CF93DF93EC010E946B1EBE0180E090E0FB +:100A8000DF91CF910C94B41A462F50E04F305105AE +:100A900008F076C0DC01FA01EA5AFF4F0C948C246E +:100AA00012968C91882309F46BC081E090E007C016 +:100AB00012968C91882309F463C082E090E00E9432 +:100AC00038055EC012968C91882309F459C084E0E1 +:100AD00090E0F5CF12968C91882311F083E00EC040 +:100AE00083E00E94521B40E164E083E00E94080A18 +:100AF00047C012968C91882321F084E00E94311B1C +:100B0000F2CF84E0EECF12968C91882331F085EEFF +:100B10000E9449130E94122333C085EE0E941114D3 +:100B20002FC012968C91882359F184E00E94521BA9 +:100B300083E00E94521B80E10E94521B85E00E94CC +:100B4000311B0E94581E811102C00E94391E0E9452 +:100B5000701E90E09093E3018093E201806880939F +:100B6000E2010E94741E0CC012968C91882341F001 +:100B700085E00E94521B04C012968C91811103C023 +:100B800080E090E0089588E291E00895089581E082 +:100B900008950C94C7050895282F882339F090E014 +:100BA0002A3010F44D9608950697089587E290E054 +:100BB0000895AF92BF92DF92EF92FF920F931F932F +:100BC000CF93DF938C01FC01C081D181CE010E94C3 +:100BD000ED1BBE010E94EE06EC01B8010E94C905A2 +:100BE000882309F4EBC0F8018281882309F4A0C0AE +:100BF00080914D0181111FC0C431F0E5DF0709F07C +:100C0000D7C00E94CB0581E080934D010E94A61DB4 +:100C100090934C0180934B01109244011092460135 +:100C200010924501109248011092470110924A011A +:100C300010924901C3C080914B0190914C010E94D8 +:100C4000B21D883C910570F480914401E82FF0E0DA +:100C5000EE0FFF1FEB5BFE4FD183C0838F5F80934E +:100C60004401ACC0C13080E8D80708F451C0F80195 +:100C70008281882309F460C05E01E894B7F880910E +:100C80004301813079F050F08230C1F482EE0E944D +:100C9000491387E50E94491387E50EC082EE0E9442 +:100CA00049130CC080EE0E94491381EE0E94491343 +:100CB00088E10E94491388E10E9411148CE0E82E1B +:100CC000F12CC5010E2C02C0969587950A94E2F787 +:100CD0008F700E94CC05D82E0E9449138D2D0E9442 +:100CE0001114F4E0EF1AF1088CEFE8168FEFF80614 +:100CF00041F780914301813029F010F0823041F4B6 +:100D000082EE04C080EE0E94111481EE0E94111444 +:100D1000C438E0E5DE0721F0C538D04501F137C021 +:100D2000F8018281882361F01092410182E01EC0A7 +:100D3000C130F0E8DF0760F3C43880E5D80761F41C +:100D400080914101811106C086E20E94491386E22A +:100D50000E94111482E018C0C538D045C1F4F801D2 +:100D60008281882331F01092420180E20E94601457 +:100D700025C080914201811106C087E20E9449137B +:100D800087E20E94111480E20E94671417C081E07C +:100D90008093410180934201C801DF91CF911F915F +:100DA0000F91FF90EF90DF90BF90AF900C94DF0415 +:100DB000C130F0E8DF0708F05FCFAACF80E0DF9115 +:100DC000CF911F910F91FF90EF90DF90BF90AF9068 +:100DD00008950C9432050C94DD0408959CE0799FED +:100DE000F001112490E3899FE00DF11D1124E60F1D +:100DF000F11DEE0FFF1FEF5BFE4F8591949108955B +:100E0000880F991FFC01EF53F0408591949108954C +:100E1000880F991FFC01EF5BFE4F85919491089517 +:100E20000F931F93CF93DF93EC01811521E392077A +:100E3000A0F5C11580E3D80708F0D7C0C83ED1059A +:100E4000D8F4C03ED10508F003C2C83AD10578F401 +:100E5000C53AD10508F06AC0C130D10509F463C0B4 +:100E600008F4F3C1C430D10508F0F2C1EEC1CB3BA8 +:100E7000D10508F466C0E9C1C11590E2D90708F0B0 +:100E8000AFC0C11521E0D20708F0E2C1C03FD105D3 +:100E900008F4DBC18E0110651BC2C03880E5D8079D +:100EA00000F5C03790E5D90708F0A3C0C11520E5CB +:100EB000D20709F4ACC050F4CE01905480319F4069 +:100EC00008F0C3C1DF708E01106A02C2C13080E534 +:100ED000D80709F4AAC0C43190E5D90708F4ABC01B +:100EE000B4C1C33820E5D20709F48EC050F4C1382C +:100EF00090E5D90709F482C008F083C000E011ED45 +:100F0000E7C1C03181E5D80708F49FC1C11597E555 +:100F1000D90708F432C1CE0190578115904108F0ED +:100F200094C1DF708FC101E010E0D2C1C53AD10594 +:100F300009F490C1C63AD10509F08FC102E810E466 +:100F4000C7C1C83AD10509F48BC1C93AD10509F422 +:100F50008AC1CA3AD10509F489C1CB3AD10509F44D +:100F600088C1CC3AD10509F487C1CD3AD10509F43D +:100F700086C1C03BD10509F485C1CE3AD10509F43B +:100F800084C1CF3AD10509F483C1C13BD10509F42D +:100F900082C1C23BD10509F481C1C33BD10509F42B +:100FA00080C1C43BD10509F47FC1C53BD10509F41B +:100FB0007EC1C63BD10509F47DC1C73BD10509F40B +:100FC0007CC1C83BD10509F47BC1C93BD10509F4FB +:100FD0007AC1CA3BD10509F479C100E014E478C1B3 +:100FE000CE019F700E94080774C1DD278E01106C2E +:100FF0006FC1CF70DD278E01146D6AC100E010ED66 +:1010000067C100E012ED64C100E013ED61C10E9410 +:10101000F4168FEF94E32CE0815090402040E1F7EC +:1010200000C000000E94011E53C18091C401816074 +:101030008093C4014DC10E94581E811102C00E94BC +:10104000391E0E94701E90E09093E3018093E201AC +:10105000C23080E5D80721F48091E201816086C02A +:10106000C43090E5D90721F48091E20182607EC00E +:10107000C63020E5D20721F48091E201846076C079 +:10108000C83080E5D80719F48091E20127C0CA3042 +:1010900090E5D90721F48091E201806167C0CC30EE +:1010A00020E5D20721F48091E20180625FC0CE305A +:1010B00080E5D80721F48091E201806457C0C031F7 +:1010C00090E5D90721F48091E20180684FC0C231D8 +:1010D00020E5D20729F48091E2018460886046C04F +:1010E000C33080E5D80721F48091E2018E7F3EC0B5 +:1010F000C53090E5D90721F48091E2018D7F36C09B +:10110000C73020E5D20721F48091E2018B7F2EC009 +:10111000C93080E5D80719F48091E20126C0CB30B0 +:1011200090E5D90721F48091E2018F7E1FC0CD3078 +:1011300020E5D20721F48091E2018F7D17C0CF30E6 +:1011400080E5D80721F48091E2018F7B0FC0C13187 +:1011500090E5D90721F48091E2018F7707C0C33170 +:10116000D04531F48091E2018B7F877F8093E2014B +:101170008091E2010E94741EABC08D2F99278F7061 +:10118000992781309105D9F49E012370332702C03D +:10119000880F991F2A95E2F79C688E0144E0000FA2 +:1011A000111F4A95E1F700271370802B912B53E014 +:1011B000CC0FDD1F5A95E1F7C076DD272FC08230B6 +:1011C000910531F4DC2FCC278E01016F106A80C0AD +:1011D0008330910569F4CE018370992701E010E016 +:1011E00002C0000F111F8A95E2F7C8019C680FC06A +:1011F00084309105B9F4CE018370992701E010E0A5 +:1012000002C0000F111F8A95E2F7C8019A6823E017 +:10121000CC0FDD1F2A95E1F7C07ED7708C010C2B17 +:101220001D2B56C08530910531F4DC2FCC278E0163 +:10123000046F106A4DC0069709F04AC0CF71DD27D0 +:10124000DC2FCC278E01106243C000E010E040C0CC +:101250008E013EC001E810E43BC003E810E438C052 +:1012600002EE14E435C009EE14E432C00AEE14E4D0 +:101270002FC005EB14E42CC006EB14E429C007EBE7 +:1012800014E426C00CEC14E423C00DEC14E420C0DC +:1012900003E815E41DC00AE815E41AC002E915E4E4 +:1012A00017C004E915E414C001E216E411C003E21A +:1012B00016E40EC004E216E40BC005E216E408C012 +:1012C00006E216E405C007E216E402C00AE216E4EC +:1012D000C801DF91CF911F910F9108959CE0799FF4 +:1012E000F001112490E3899FE00DF11D1124E60F18 +:1012F000F11DEE0FFF1FEF5BFE4F85919491803E35 +:101300009105E0F4803C910558F58133910509F48D +:101310006FC048F48932910509F463C08A3291059F +:1013200009F46DC072C089339105E9F082389105E6 +:10133000D1F08533910509F44DC067C0833E910516 +:1013400081F138F4803E9105B9F0823E9105D9F0E3 +:101350005CC0863E910561F1873E9105A1F155C0C3 +:101360000E94000708952091E20120FD02C021FFA4 +:101370004CC080EE90E049C08091E20180FFF9CF3F +:1013800089E390E042C08091E20182FF0EC080912B +:10139000E20184FF03C080E090E037C083EE90E07C +:1013A00034C08091E20182FFF2CF82EE90E02DC046 +:1013B0008091E20183FF0BC08091E20184FDEBCFBD +:1013C00087EE90E022C08091E20183FFF5CF86EEA8 +:1013D00090E01BC08091E20185FF07C089E290E0A8 +:1013E00014C08091E20185FFF9CF85E390E00DC044 +:1013F0008091E20186FF07C08AE290E006C08091FA +:10140000E20186FFF9CF81E390E00E941007089582 +:10141000CF92DF92EF92FF920F931F9301E010E0C3 +:1014200020E030E06801790104C0CC0CDD1CEE1C2A +:10143000FF1C8A95D2F704C0000F111F221F331F13 +:101440006A95D2F70C291D292E293F29C090AF019A +:10145000D090B001E090B101F090B201C022D12251 +:10146000E222F322842FC016D106E206F30641F4ED +:101470001F910F91FF90EF90DF90CF900C94311B54 +:101480001F910F91FF90EF90DF90CF900C94521B23 +:101490000C94E104E82FF0E0E05EFE4F8081E82F3D +:1014A000EF70F0E082958F7021E030E0A90102C07A +:1014B000440F551F8A95E2F740A308950F931F9399 +:1014C000CF93DF9385B7806885BF85B7806885BF78 +:1014D000C3E0D0E001E010E0FE01E05EFE4F80815D +:1014E000E82FEF70F0E021A182958F70A80102C073 +:1014F000440F551F8A95E2F7CA01822B81A38C2FD6 +:101500000E944A0A219740F78BE090E061E070E08A +:10151000FC01EC5EFE4F2081E22FEF70F0E042A173 +:1015200022952F70DB0102C0AA0FBB1F2A95E2F79C +:101530009D01242B22A3019758F7DF91CF911F9192 +:101540000F910C94E906EF92FF920F931F93CF93A4 +:10155000DF9306E511E0C3E0EE24E394F12CD5E03F +:101560008C2F0E944A0A8BE090E040E050E0FC01A2 +:10157000EC5EFE4F6081E62FEF70F0E020A130E0DE +:1015800062956F7002C0359527956A95E2F720FD48 +:1015900009C09701082E02C0220F331F0A94E2F7F8 +:1015A000422B532B019718F7F801929182918F01EA +:1015B0008417950721F051834083D09300018C2F2D +:1015C0000E944A0AC15060F68091000187FD2CC03C +:1015D0008150809300018F3F39F08FE99FE00197A0 +:1015E000F1F700C0000020C0809154019091550196 +:1015F00090935D0180935C01809152019091530121 +:1016000090935B0180935A01809150019091510118 +:10161000909359018093580180914E0190914F0110 +:1016200090935701809356010E94EB0681E0DF9171 +:10163000CF911F910F91FF90EF900895E82FF0E068 +:10164000EE0FFF1FEA5AFE4F8081918108950895A1 +:101650000F931F93CF930EE511E0C0E0F801929134 +:1016600082918F010E941E1DC80FF1E006351F07F1 +:10167000A9F78C2FCF911F910F910895809166014A +:101680000895CF93DF9300D01F92CDB7DEB79C01B2 +:101690008091D901843019F593E099833B832A83A3 +:1016A0009093E9008FEF9091E800815095FD06C07E +:1016B00095ED9A95F1F700008111F5CF8091E80042 +:1016C00085FF0DC040E050E063E070E0CE01019680 +:1016D0000E947A0D8091E8008E778093E8000F9049 +:1016E0000F900F90DF91CF910895CF93DF9300D0AB +:1016F0001F92CDB7DEB72091D901243021F522E029 +:1017000029839B838A8383E08093E9008FEF909104 +:10171000E800815095FD06C095ED9A95F1F700001F +:101720008111F5CF8091E80085FF0DC040E050E0C9 +:1017300063E070E0CE0101960E947A0D8091E8008E +:101740008E778093E8000F900F900F90DF91CF91EC +:1017500008952091D9012430F1F422E02093E9008A +:101760002FEF3091E800215035FD06C035ED3A9558 +:10177000F1F700002111F5CF2091E80025FF0BC003 +:1017800040E050E065E070E00E947A0D8091E80052 +:101790008E778093E8000895CF93DF932091D9014D +:1017A000243039F521E02093E9002FEF3091E80053 +:1017B000215035FD06C035ED3A95F1F700002111B5 +:1017C000F5CF2091E80025FF14C0EC0140E050E087 +:1017D00068E070E00E947A0D8091E8008E77809337 +:1017E000E80088E0FE01AEE5B1E001900D928A9537 +:1017F000E1F7DF91CF9108958091D801811109C05F +:101800000E940F0F0E946C0F8091E2008460809311 +:10181000E20008951092D8010895089508950C9457 +:10182000691D42E061EC81E00E94890E42E061ECBA +:1018300082E00E94890E42E061EC83E00C94890E04 +:101840008091DB01833009F453C030F4813071F0B2 +:10185000823009F48CC008958A3009F478C08B3046 +:1018600009F45EC0893009F09AC020C08091DA0185 +:10187000813A09F094C08091E800877F8093E80066 +:101880008091DE019091DF01892B21F468E08EE5E3 +:1018900091E003C060E080E090E070E00E94C50D40 +:1018A0008091E8008B778093E80008958091DA01B9 +:1018B000813209F074C08091DE019091DF01892BA3 +:1018C00009F06DC08091E800877F8093E8008091E7 +:1018D000E80082FD05C08091D9018111F8CF5FC079 +:1018E0008091F100809366018091E8008B7753C06E +:1018F0008091DA01813A09F052C08091DE01909125 +:10190000DF01892B09F04BC08091E800877F80932D +:10191000E8008091E80080FFFCCF80910B0136C089 +:101920008091DA018132D9F58091DE019091DF0159 +:10193000892BA9F58091E800877F8093E8000E94B9 +:10194000BE0E8091DC0180930B010C94F416809103 +:10195000DA01813221F58091E800877F8093E800E9 +:101960000E94BE0E8091DD018093670108958091F1 +:10197000DA01813AA1F48091E800877F8093E80042 +:101980008091E80080FFFCCF809167018093F10097 +:101990008091E8008E778093E8000C94BE0E089545 +:1019A00084B7877F84BF88E10FB6F8948093600086 +:1019B000109260000FBE90E080E80FB6F89480931C +:1019C0006100909361000FBE0E9461120E940F0F90 +:1019D0000E946C0F8091E20084608093E200789412 +:1019E0000E94F2110E94631281E091E00E940D12A8 +:1019F0008091D901853069F40E942A1D8091D70118 +:101A00008823B1F30E94581D882391F30E94640D2E +:101A1000EFCF0E946B12ECCF292F332723303105F3 +:101A2000C9F064F42130310581F02230310509F02C +:101A300043C084E590E02DEF37E042C0213231050C +:101A4000F1F02232310541F137C082E190E021E529 +:101A500038E036C099278130910541F082309105F8 +:101A600041F0892B49F5E9EFF7E005C0EBECF7E031 +:101A700002C0E1EAF7E0849190E09F0121C0633069 +:101A8000D8F4E62FF0E0EE0FFF1FE35DFE4F20815C +:101A9000318189E090E014C0633070F470E0FB01A4 +:101AA000EE0FFF1FE95DFE4F20813181FB01EC5DF0 +:101AB000FE4F808190E004C080E090E020E030E0C4 +:101AC000FA0131832083089580E189BD82E189BDD7 +:101AD00009B400FEFDCF8091D8008F7D8093D8009F +:101AE0008091E00082608093E0008091E00081FDC1 +:101AF000FCCF0895CF92DF92EF92FF920F931F9346 +:101B0000CF93DF93EC018B016A010E94DD0E8111FE +:101B100033C0C114D10439F0F60180819181081BD2 +:101B2000190BC80FD91FE12CF12C0115110519F162 +:101B30008091E80085FD16C08091E8008E77809343 +:101B4000E800C114D10449F0F60180819181E80ECA +:101B5000F91EF182E08285E00FC00E94DD0E88232D +:101B600021F30AC089918093F10001501109FFEF20 +:101B7000EF1AFF0ADACF80E0DF91CF911F910F912A +:101B8000FF90EF90DF90CF9008952091E001309189 +:101B9000E1012617370748F06115710539F42091E6 +:101BA000E8002E772093E80001C0B90140E06115FC +:101BB0007105A9F12091D901222309F443C02530F0 +:101BC00009F442C02091E80023FD40C02091E800C4 +:101BD00022FD32C02091E80020FFE9CF4091F300C0 +:101BE0002091F20030E0342BFC01CF01611571052A +:101BF00059F02830310540F481918093F100615013 +:101C000071092F5F3F4FF1CF41E02830310509F0D6 +:101C100040E02091E8002E772093E800C8CF4111E2 +:101C2000C9CF0AC08091D901882361F0853061F065 +:101C30008091E80083FD0AC08091E80082FFF2CF26 +:101C400080E0089582E0089583E0089581E008959A +:101C50002091E0013091E1012617370748F0611526 +:101C6000710539F42091E8002E772093E80001C037 +:101C7000B901FC0120E06115710591F18091D90154 +:101C8000882309F440C0853009F43FC08091E80002 +:101C900083FD3DC08091E80082FD2FC08091E80067 +:101CA00080FFE9CF2091F3008091F20090E0922B29 +:101CB0006115710559F08830910540F42491209305 +:101CC000F1003196615071090196F2CF21E0089739 +:101CD00009F020E08091E8008E778093E800CBCF78 +:101CE0002111CCCF0AC08091D901882361F08530C1 +:101CF00061F08091E80083FD0AC08091E80082FFD6 +:101D0000F2CF80E0089582E0089583E0089581E0B5 +:101D10000895982F973058F59093E900981739F067 +:101D20007091EC002091ED005091F00003C0242F41 +:101D3000762F50E021FF19C03091EB003E7F3093A9 +:101D4000EB003091ED003D7F3093ED003091EB00E2 +:101D500031603093EB007093EC002093ED005093D2 +:101D6000F0002091EE0027FF07C09F5FD3CF8F7058 +:101D70008093E90081E0089580E008958091DA0180 +:101D800087FF11C08091E80082FD05C08091D901D4 +:101D90008111F8CF11C08091E8008B770BC0809142 +:101DA000D901882349F08091E80080FFF8CF809125 +:101DB000E8008E778093E80008952091E400309148 +:101DC000E50095E64091EC00842F817040FF22C031 +:101DD0008091E80080FD1CC08091D901882391F09A +:101DE000853091F08091EB0085FD10C04091E400BA +:101DF0005091E5004217530729F39A01915011F7CA +:101E000084E0089582E0089583E0089581E00895D4 +:101E100080E008954091E80042FFDECF08950E94DF +:101E20007D0F0E94850FE0EEF0E08081816080836D +:101E3000E8EDF0E080818F77808319BCA7EDB0E0FA +:101E40008C918E7F8C9380818F7E80831092D801BD +:101E500008950F931F93CF93DF930E947D0F0E94ED +:101E6000850FC8EDD0E088818F778883888180686E +:101E7000888388818F7D888319BC1092D901109244 +:101E8000D5011092D7011092D60100EE10E0F801B2 +:101E900080818B7F808388818160888342E060E0DD +:101EA00080E00E94890EE1EEF0E080818E7F8083E9 +:101EB000E2EEF0E0808181608083808188608083B1 +:101EC000F80180818E7F8083888180618883DF91A3 +:101ED000CF911F910F910895E8EDF0E080818F7E02 +:101EE0008083E7EDF0E080818160808384E082BFC1 +:101EF00081E08093D8010C94290FE8EDF0E0808117 +:101F00008E7F80831092E20008951092DA00109282 +:101F1000E10008951F920F920FB60F9211242F9394 +:101F20003F934F935F936F937F938F939F93AF9361 +:101F3000BF93EF93FF938091E10082FF0BC08091EC +:101F4000E20082FF07C08091E1008B7F8093E10077 +:101F50000E94F1118091DA0080FF1FC08091D800AB +:101F600080FF1BC08091DA008E7F8093DA00809121 +:101F7000D90080FF0DC080E189BD82E189BD09B42F +:101F800000FEFDCF81E08093D9010E94FC0B05C0CB +:101F900019BC1092D9010E940A0C8091E10080FFC7 +:101FA00019C08091E20080FF15C08091E2008E7F11 +:101FB0008093E2008091E20080618093E200809152 +:101FC000D80080628093D80019BC85E08093D90145 +:101FD0000E940E0C8091E10084FF30C08091E200ED +:101FE00084FF2CC080E189BD82E189BD09B400FE77 +:101FF000FDCF8091D8008F7D8093D8008091E10043 +:102000008F7E8093E1008091E2008F7E8093E200DA +:102010008091E20081608093E2008091D501882365 +:1020200011F084E007C08091E30087FD02C081E0E9 +:1020300001C083E08093D9010E940F0C8091E100E0 +:1020400083FF29C08091E20083FF25C08091E100D9 +:10205000877F8093E10082E08093D9011092D501BF +:102060008091E1008E7F8093E1008091E2008E7F7D +:102070008093E2008091E20080618093E20042E080 +:1020800060E080E00E94890E8091F000886080937B +:10209000F0000E940D0CFF91EF91BF91AF919F91C5 +:1020A0008F917F916F915F914F913F912F910F9001 +:1020B0000FBE0F901F9018951F920F920FB60F92A0 +:1020C00011242F933F934F935F936F937F938F933D +:1020D0009F93AF93BF93CF93DF93EF93FF93C09101 +:1020E000E900CF708091EC00D82FD17080FDD0E84E +:1020F0001092E9008091F000877F8093F00078943F +:102100000E94A0101092E9008091F00088608093F6 +:10211000F000CD2BCF70C093E900FF91EF91DF91DC +:10212000CF91BF91AF919F918F917F916F915F916F +:102130004F913F912F910F900FBE0F901F901895C8 +:102140001F93CF93DF93CDB7DEB7AA970FB6F8945E +:10215000DEBF0FBECDBFEAEDF1E088E08E0F9091BB +:10216000F10091938E13FBCF0E94200C8091E80028 +:1021700083FF1FC18091DA019091DB01492F50E06C +:102180004A30510508F015C1FA01EB59FF4F0C9484 +:102190008C24803881F0823809F00BC18091DE01F7 +:1021A0008F708093E9008091EB0085FB882780F990 +:1021B0001092E90006C08091D6019091D70191114B +:1021C00082609091E800977F9093E8008093F100FF +:1021D0001092F100C8C0282F2D7F09F0EAC0882393 +:1021E00019F0823061F0E5C08091DC01813009F0A6 +:1021F000E0C0933009F080E08093D7012BC080913C +:10220000DC01811127C08091DE018F7009F4D1C0FB +:102210008093E9002091EB0020FF1CC0933021F453 +:102220008091EB00806214C09091EB0090619093DC +:10223000EB0021E030E0A90102C0440F551F8A9550 +:10224000E2F74093EA001092EA008091EB00886088 +:102250008093EB001092E9008091E800877F86C0B0 +:102260008111A7C01091DC011F778091E300807875 +:10227000812B8093E3008091E800877F8093E800C2 +:102280000E94BE0E8091E80080FFFCCF8091E300A9 +:1022900080688093E300111102C082E001C083E0F6 +:1022A0008093D90186C08058823008F082C0809126 +:1022B000DC019091DD018C3D53E0950779F583E0D9 +:1022C0008A838AE289834FB7F894DE01139620E06F +:1022D0003EE051E2E32FF0E050935700E49120FFFD +:1022E00003C0E295EF703F5FEF708E2F90E0EA3011 +:1022F00010F0C79601C0C0968D939D932F5F243137 +:1023000049F74FBF8091E800877F8093E8006AE239 +:1023100070E0CE0101960E94C50D14C0AE014F5F62 +:102320005F4F6091DE010E940C0DBC01009709F423 +:1023300040C09091E800977F9093E80089819A814E +:102340000E94280E8091E8008B778093E80031C0CE +:10235000803879F58091E800877F8093E80080914C +:10236000D5018093F1008091E8008E778093E8009A +:102370000E94BE0E1EC081111CC09091DC019230E3 +:10238000C0F48091E800877F8093E8009093D501A6 +:102390000E94BE0E8091D501811106C08091E3009C +:1023A00087FD02C081E001C084E08093D9010E94D2 +:1023B000110C8091E80083FF0AC08091E800877FBC +:1023C0008093E8008091EB0080628093EB00AA96F6 +:1023D0000FB6F894DEBF0FBECDBFDF91CF911F9136 +:1023E00008950895CF938091D9018823A1F0C091D9 +:1023F000E900CF709091EC00892F817090FD80E80A +:10240000C82B1092E9008091E80083FD0E94A01083 +:10241000CF70C093E900CF91089590936D018093A0 +:102420006C010895E0916C01F0916D01309721F0FD +:102430000190F081E02D099480E00895E0916C0115 +:10244000F0916D01309721F00280F381E02D099425 +:102450000895E0916C01F0916D01309721F00480B6 +:10246000F581E02D0994089520916A0130916B0166 +:102470008217930771F090936B0180936A01E0914A +:102480006C01F0916D01309721F00680F781E02D0D +:10249000099408952091680130916901821793078A +:1024A00071F09093690180936801E0916C01F09163 +:1024B0006D01309721F00084F185E02D0994089595 +:1024C00008950C9460120E949D1D0E945E0A0E9455 +:1024D000231E0C94BB225F926F927F928F929F92E9 +:1024E000AF92BF92CF92DF92EF92FF920F931F9322 +:1024F000CF93DF9300D000D01F92CDB7DEB70E94FC +:10250000A30A97E7C92E91E0D92E03E010E0AA2490 +:10251000A394B12C502E802F0E941E0B4C01F6016B +:10252000729062906F016826792661147104A1F49B +:102530000150110978F78FEF89838A831B820E94EB +:10254000A61D8160782F9D838C8349815A816B8180 +:102550008D810E941B1338C08091C40181FD0E94AF +:10256000270B2BE030E07501022E02C0EE0CFF1CA1 +:102570000A94E2F7C70186219721892B09F1298363 +:102580005A828E209F2091E0892809F490E09B8355 +:102590000E94A61D8160782F9D838C8349815A817A +:1025A0006B818D810E941B13000F111FF801E159EF +:1025B000FE4F80819181E826F926F182E08204C0F5 +:1025C0002150310980F6B4CF0E94FC1F10916E019A +:1025D0000E9412121817D1F00E94121280936E01FD +:1025E0000F900F900F900F900F90DF91CF911F9150 +:1025F0000F91FF90EF90DF90CF90BF90AF909F90A2 +:102600008F907F906F905F900C94480A0F900F907E +:102610000F900F900F90DF91CF911F910F91FF902E +:10262000EF90DF90CF90BF90AF909F908F907F9072 +:102630006F905F900895CF93DF93CDB7DEB72B9760 +:102640000FB6F894DEBF0FBECDBF4F8358876987A2 +:102650007A878B87DE01119686E0FD0111928A95BB +:10266000E9F785E0FE01379601900D928A95E1F732 +:1026700049815A816B817C818D819E810E94921952 +:102680002B960FB6F894DEBF0FBECDBFDF91CF9172 +:102690000895CF93882309F4C2C0C82F823859F413 +:1026A0000E94121281FDBBC089E30E946C1C0E9433 +:1026B000EF1C89E30CC0833879F40E94121280FD6C +:1026C000AEC083E50E946C1C0E94EF1C83E50E9453 +:1026D000891CCF910C94EF1C843859F40E9412127B +:1026E00082FD9DC087E40E946C1C0E94EF1C87E461 +:1026F000EECF8CEF8C0F813A48F48C2F0E9423226E +:1027000081118DC08C2F0E946C1CE3CF80E28C0F56 +:10271000883048F4C77081E001C0880FCA95EAF795 +:102720000E94A81CD6CF8BE58C0F833078F4C53A75 +:1027300029F0C63A31F083E890E005C081E890E0E6 +:1027400002C082E890E0CF910C94341288E58C0F9F +:10275000833108F064C0C83A39F1C93A41F1CA3A44 +:1027600049F1CB3A51F1CC3A59F1CD3A61F1C03B44 +:1027700069F1CE3A71F1CF3A79F1C13B81F1C23BB7 +:1027800089F1C33B91F1C43B99F1C53BA1F1C63B33 +:10279000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B93 +:1027A000C9F180E090E038C082EE90E035C089EE5B +:1027B00090E032C08AEE90E02FC085EB90E02CC014 +:1027C00086EB90E029C087EB90E026C08CEC90E08F +:1027D00023C08DEC90E020C083E891E01DC08AE822 +:1027E00091E01AC082E991E017C084E991E014C039 +:1027F00081E292E011C083E292E00EC084E292E0B6 +:102800000BC085E292E008C086E292E005C087E254 +:1028100092E002C08AE292E0CF910C944A12CF91EA +:102820000895882309F44BC0823859F40E9412128B +:1028300081FF45C089E30E946C1C0E94EF1C89E364 +:102840000CC0833871F40E94121280FF38C083E5F7 +:102850000E946C1C0E94EF1C83E50E94891C0C9452 +:10286000EF1C843859F40E94121282FF28C087E4BA +:102870000E946C1C0E94EF1C87E4EFCF9CEF980F26 +:10288000913A58F390E2980F983050F4877091E0A5 +:1028900001C0990F8A95EAF7892F0E94AE1CDFCFFD +:1028A0009BE5980F933020F480E090E00C94341274 +:1028B000885A833120F480E090E00C944A12089505 +:1028C000882321F00E94A81C0C94EF1C08958823F3 +:1028D00021F00E94AE1C0C94EF1C08957F928F9201 +:1028E0009F92AF92BF92CF92DF92EF92FF920F939F +:1028F0001F93CF93DF931F92CDB7DEB77C01C62E17 +:10290000772EFC01058102950F70128111110E9432 +:10291000C51C0E94651C882379F0112369F080E2B0 +:102920008C0D883048F082E00E944E1C0E94651C8D +:1029300091E0D82ED92601C0D12CE72DE295EF7079 +:10294000F0E0E159FF4F0C948C24872D807F072DF8 +:102950000F70882311F00295007F112389F0002366 +:1029600009F499C180E28C0D883020F4802F0E94F8 +:10297000A81C03C0802F0E94B81C0E94EF1C8BC1B2 +:102980008C2D0E941114002309F4C3C180E28C0D28 +:10299000883020F4802F0E94AE1C03C0802F0E943C +:1029A000BE1C0E94EF1CB5C1872D807F972D9F70A4 +:1029B000803211F4892F03C0892F8295807FCC202B +:1029C00021F0F1E0CF16A1F01DC0112339F0002352 +:1029D00019F1013009F50E94D81C9BC1002319F0A0 +:1029E000013009F496C189830E94DB1C898110C1E2 +:1029F000112321F0063008F08CC10EC0053008F01C +:102A000088C106C1112359F0002331F0F7019581E7 +:102A100090FF41C19F7095830E9460147AC100238A +:102A200009F4F6C03EC1872D86958695837090E0A7 +:102A3000009719F0019761F06CC1112321F08C2DE2 +:102A4000972D937002C080E090E00E94341261C123 +:102A5000112321F08C2D972D937002C080E090E01F +:102A60000E944A1256C18C2D112319F00E94041F96 +:102A700002C00E946C1F0E94F11F4BC1872D837002 +:102A800009F052C0111145C18C2D82958695877031 +:102A9000880F880F9C2D9F70892E912CA12CB12C12 +:102AA000082E04C0880C991CAA1CBB1C0A94D2F7DF +:102AB000C4FE14C00FE010E020E030E0B901A8012E +:102AC00004C0440F551F661F771F8A95D2F7CB01AC +:102AD000BA01609570958095909503C060E070E0B4 +:102AE000CB01272D26952695237030E02230310525 +:102AF00069F02330310589F0682979298A299B29D1 +:102B00002130310571F00E94DA1A03C16829792950 +:102B10008A299B290E94F61AFCC00E94DA1AC50174 +:102B2000B4010E94BE1AF5C0112319F0872D8170DF +:102B300001C08695882309F4ECC08C2D829586957A +:102B40008770880F880F9C2D9F70892E912CA12C47 +:102B5000B12C082E04C0880C991CAA1CBB1C0A941A +:102B6000D2F7C4FE14C00FE010E020E030E0B9015D +:102B7000A80104C0440F551F661F771F8A95D2F71E +:102B8000CB01BA01609570958095909503C060E087 +:102B900070E0CB01272D269526952370422F50E01B +:102BA0004230510569F04330510589F0682979298F +:102BB0008A299B294130510571F00E94B41BA9C09C +:102BC000682979298A299B290E94D01BA2C00E94CA +:102BD000B41BC501B4010E94981B9BC08C2D90E0D2 +:102BE000FC01E05EF109E531F10508F050C0E15863 +:102BF000FF4F0C948C240C2D0F70872D8F71112397 +:102C000021F00E94311B802F07CF0E94521B802F82 +:102C10000E9467147EC0112341F0053008F079C08E +:102C2000872D8F710E94771B74C0063008F071C029 +:102C3000F7CF112339F0872D8F710E94311B69C0A6 +:102C40001123C9F3872D8F710E94521B62C011237B +:102C500029F0872D8F710E941C1B5BC00E94121BE4 +:102C600058C0112351F0172D1F71812F0E94311B65 +:102C700063E0812F0E94451C4CC081E00E944E1CE5 +:102C8000023008F446C082E00E944E1C42C011236C +:102C900031F0002381F28C2D0E9449133AC00023A9 +:102CA00089F28C2D0E94111434C0472D4F706C2D69 +:102CB000C7010E9444050E94361A2BC0111129C079 +:102CC000472D4F7050E042305105B9F04CF441159A +:102CD000510581F041305105E1F40E94E32219C011 +:102CE0004330510569F04430510599F48C2D0E9410 +:102CF00035230FC00E94CC220CC00E94FF2209C0C5 +:102D00000E94122306C0472D4F706C2DC7010E94F0 +:102D1000ED06DD20F9F00E94411C80FD1BC0F7018B +:102D200012820E943B1C0E94311BC7010E94B916EF +:102D30000E943B1C0F90DF91CF911F910F91FF904C +:102D4000EF90DF90CF90BF90AF909F908F907F904B +:102D50000C94521B0F90DF91CF911F910F91FF9018 +:102D6000EF90DF90CF90BF90AF909F908F907F902B +:102D700008950F931F93CF93DF93EC01888199817E +:102D80002B813C81232BB9F09F3F11F48F3F99F0A9 +:102D9000CE010E94D905882371F0688179818A81EA +:102DA0000E94371C8C010E94EC1B0E94B31AB801D0 +:102DB000CE010E946E14DF91CF911F910F91089563 +:102DC0000E94C51C0E94D51C0E949A1C0E94EF1CE8 +:102DD0000E94A2200E94F11F80E090E00E94341225 +:102DE00080E090E00C944A120E94B51C0C94E0160E +:102DF0000E942C1C292F22952F7030E02C30310599 +:102E00004CF42A3031056CF422503109223031055E +:102E1000A8F407C02C30310569F02F30310551F08E +:102E20000DC0803F69F018F4803E40F409C0843F33 +:102E300029F406C093FB882780F9089580E008955F +:102E400081E00895CF93DF9300D000D01F92CDB7DB +:102E5000DEB70F900F900F900F900F90DF91CF91F2 +:102E60000895CF93DF9300D000D000D0CDB7DEB768 +:102E700026960FB6F894DEBF0FBECDBFDF91CF917F +:102E800008951F93CF93DF93C091770116E080914F +:102E90007801C81799F0D0E01C9FF0011D9FF00D3C +:102EA0001124E758FE4F40815181628173818481F2 +:102EB00095810E9431172196C770E9CFDF91CF919C +:102EC0001F9108954091A9015091AA016091AB0111 +:102ED0007091AC018091AD019091AE010C943117CD +:102EE0008091AE0182958F7009F054C08091AB0142 +:102EF000882309F44FC080917701A09178016091F7 +:102F0000A9017091AA014091AC015091AD01B6E0C8 +:102F10008A1709F43FC090E041155105C1F17F3F88 +:102F200011F46F3FA1F1B89FF001B99FF00D11248A +:102F3000E758FE4F218172132AC02081621327C0F7 +:102F40002281211124C0238134812417350710F4F4 +:102F500021503109241B350B283C3105C0F4209148 +:102F6000AE012F7020612093AE0126E0289FF00172 +:102F7000299FF00D1124E258FE4F80818F708061EF +:102F8000808389EA91E00E94B9160C94411701965A +:102F90008770BECF0895CF92DF92EF92FF920F938A +:102FA0001F93CF93DF93CDB7DEB762970FB6F89438 +:102FB000DEBF0FBECDBF8C0185E0F801DE011D969E +:102FC00001900D928A95E1F7D8014C9111965C9190 +:102FD000119712966C9112971396CD90DC901497DE +:102FE0003091A9017091AA018091AC019091AD013D +:102FF000009709F46BC17F3F19F43F3F09F466C1A4 +:10300000E090AB01EE2009F4C0C02091AE01C816DB +:10301000D90628F0F601E81BF90BCF0104C0809512 +:1030200090958C0D9D1DFF24F394883C910578F0BC +:10303000F12C207F09F0C6C07C2DD98AC88A8989E5 +:103040000E94221789EA91E00E94B916B1C0822F2E +:10305000807F09F046C0751314C0341312C061118B +:1030600010C02F7020612093AE010E94621789EA80 +:1030700091E00E94B9168091AE01D80115968C930B +:103080002EC0CD2819F15F3F11F44F3FF9F0F62E15 +:1030900061111CC0809177012091780136E0821780 +:1030A00009F45AC090E0389FF001399FF00D1124C7 +:1030B000E758FE4F7181571306C07081471303C054 +:1030C0007281711103C001968770E9CFF62E6623D5 +:1030D00009F418C18091AE0181608093AE01F12C9A +:1030E00011C1751308C0341306C0611104C080916A +:1030F000AE01D801C3C04D875E878D859E856A8BE2 +:103100000E94F8166A898823E1F16623D1F12091A3 +:10311000AE01822F82958F7090E0029774F08091BB +:10312000A9019091AA0198878F831986DB86CA86A8 +:103130002C87CE0107960E94B91686E0F801A9EA0D +:10314000B1E001900D928A95E1F70E9470170E94FC +:103150006217FF24F394D6C04D875E878D859E85C8 +:103160000E942C1C292F22952F7030E0223031052F +:103170000CF0BCC09F7009F0B6C0805E883008F4C7 +:10318000C1C0C8010E94B916E4CFC816D90608F418 +:1031900053C0F601E81BF90BCF01883C910508F4F8 +:1031A00050C0F12C7C2DD98AC88A89890E942217A7 +:1031B000E9EAF1E086E0DF011D928A95E9F70E94D5 +:1031C0006217A0C0751314C0341312C0611110C06F +:1031D0008091AE01F8018583C8010E94B91686E08E +:1031E000E9EAF1E0DF011D928A95E9F7FE2C8AC039 +:1031F0004D875E878D859E856A8B0E94F8166A8949 +:10320000882309F4BECF662309F4BBCF2091AE0119 +:10321000822F82958F7090E002970CF48ECF809170 +:10322000A9019091AA019A8389831B82DD82CC82B5 +:103230002E83CE0101967FCF809590958C0D9D1D9C +:10324000ACCFF62E662309F49CCF75132EC0341331 +:103250002CC02091AE0120FD1FC0822F82958F705F +:10326000D9F0D80115962C9315978F3049F08F5FC0 +:10327000982F9295907F822F8F70892B15968C9323 +:10328000C8010E94B91686E0F801A9EAB1E00190F0 +:103290000D928A95E1F793CF86E0F801A9EAB1E0B3 +:1032A00001900D928A95E1F72DC04D875E878D853F +:1032B0009E850E94F816811140CF8091AE018160F9 +:1032C0008093AE01C8010E94B9161CC0662309F4A0 +:1032D00058CF4D875E878D859E850E94F81688237E +:1032E00009F44FCF2ACF811148CF0CC024303105CB +:1032F0000CF047CF9F7009F440CFF8019581907F83 +:1033000009F03BCF8F2D62960FB6F894DEBF0FBE4B +:10331000CDBFDF91CF911F910F91FF90EF90DF9084 +:10332000CF9008951F93CF93DF93CDB7DEB72C973F +:103330000FB6F894DEBF0FBECDBF4F8358876987A5 +:103340007A878B879C87CE0107960E94CB178823AC +:1033500069F08F8198852A853B85232BF1F19F3F6A +:1033600009F063C08F3F09F060C037C086E0FE01FE +:103370003796DE01119601900D928A95E1F76F81E3 +:103380007885EA85FB85309741F17F3F11F46F3FE7 +:1033900021F12091780130E0C901019687709927C9 +:1033A0004091770150E08417950709F447C069837D +:1033B0007A83FD83EC8396E0929FD001939FB00DBA +:1033C0001124A758BE4FFE01319601900D929A9597 +:1033D000E1F7809378010E94411716E08091770110 +:1033E000909178018917C1F1189FC0011124875865 +:1033F0009E4F0E94CB17882379F1E09177011E9FA1 +:10340000F0011124E758FE4F4081518162817381A0 +:10341000848195810E9431178091770190E0019617 +:103420008770992780937701D9CF4F815885698517 +:103430007A858B859C850E943117CFCF0E94F41628 +:103440001092780110927701E9EAF1E086E0DF015D +:103450001D928A95E9F7C1CF2C960FB6F894DEBF7E +:103460000FBECDBFDF91CF911F910895EF92FF92D4 +:103470000F931F93CF93DF938C01009709F46CC0D7 +:10348000F12CEE24E394E8012196F801849184372D +:1034900040F4843008F051C0813081F0823019F15D +:1034A0005BC0853709F444C0A8F19CE7980F9037BA +:1034B00008F052C08F770E94111441C00E5F1F4F59 +:1034C000FE01C49180E28C0F883048F4C7708E2DC5 +:1034D00001C0880FCA95EAF70E94C81C14C08C2F3F +:1034E0000E9449132DC00E5F1F4FFE01C49180E260 +:1034F0008C0F883058F4C7708E2D01C0880FCA9584 +:10350000EAF70E94CE1C0E94EF1C1AC08C2F0E946A +:10351000111416C00E5F1F4FFE01C491CC2381F021 +:103520008FE99FE00197F1F700C00000C150F6CF8E +:103530000E5F1F4FFE01F49003C00E9449138E01DD +:103540008F2D882309F49FCFEFE9FFE03197F1F742 +:1035500000C000008150F5CFDF91CF911F910F91F6 +:10356000FF90EF90089508956093B3017093B401B4 +:103570008093B5019093B6010C94E0160F931F93BE +:103580000091B3011091B4012091B5013091B601C1 +:10359000DC01CB01802B912BA22BB32B8093B301A9 +:1035A0009093B401A093B501B093B6011F910F9110 +:1035B0000C94E0160F931F930091B3011091B40186 +:1035C0002091B5013091B601DC01CB01802391231C +:1035D000A223B3238093B3019093B401A093B501C8 +:1035E000B093B6011F910F910C94E0160F931F93A7 +:1035F0000091B3011091B4012091B5013091B60151 +:10360000DC01CB0180279127A227B3278093B30148 +:103610009093B401A093B501B093B6011F910F919F +:103620000C94E0161092AF011092B0011092B1010B +:103630001092B2010C94E01641E050E060E070E0BE +:1036400004C0440F551F661F771F8A95D2F7409319 +:10365000AF015093B0016093B1017093B2010C942B +:10366000E01641E050E060E070E004C0440F551FF8 +:10367000661F771F8A95D2F78091AF019091B001B4 +:10368000A091B101B091B201482B592B6A2B7B2B31 +:103690004093AF015093B0016093B1017093B201B8 +:1036A0000C94E01641E050E060E070E004C0440F8C +:1036B000551F661F771F8A95D2F7409550956095E4 +:1036C00070958091AF019091B001A091B101B0913E +:1036D000B201482359236A237B234093AF015093BF +:1036E000B0016093B1017093B2010C94E01641E017 +:1036F00050E060E070E004C0440F551F661F771F64 +:103700008A95D2F78091AF019091B001A091B1015B +:10371000B091B201482759276A277B274093AF0110 +:103720005093B0016093B1017093B2010C94E01614 +:103730000F931F930091AF011091B0012091B1013F +:103740003091B201DC01CB01802B912BA22BB32B4A +:103750008093AF019093B001A093B101B093B201F7 +:103760001F910F910C94E0160F931F930091AF01DE +:103770001091B0012091B1013091B201DC01CB0177 +:1037800080239123A223B3238093AF019093B001B0 +:10379000A093B101B093B2011F910F910C94E01668 +:1037A0000F931F930091AF011091B0012091B101CF +:1037B0003091B201DC01CB0180279127A227B327EA +:1037C0008093AF019093B001A093B101B093B20187 +:1037D0001F910F910C94E0160895CF92DF92EF9213 +:1037E000FF920F931F93CF93DF938C01C090B3018F +:1037F000D090B401E090B501F090B6018091AF0196 +:103800009091B001A091B101B091B201C82AD92A1A +:10381000EA2AFB2ACFE1D0E0D701C6010C2E04C072 +:10382000B695A795979587950A94D2F780FF06C01D +:10383000B8018C2F0E946E09019721F4219760F73F +:1038400080E001C08C2FDF91CF911F910F91FF90ED +:10385000EF90DF90CF900895CF93DF93EC010E941B +:10386000ED1BBE010E946E09DF91CF910895CB013F +:103870000E942C1C08958091B701859585958595AA +:1038800008958091B7018770089598E0899F90010D +:103890001124262B2093B7010C94311B2091B701E2 +:1038A000809582238093B701982F977069F430E058 +:1038B000482F552747FD50952417350729F0859542 +:1038C000859585950C94521B08959091B70197703A +:1038D00081E009F480E0089520910C0130910D0100 +:1038E000F90132969FEF40E05191581789F09F3FC0 +:1038F00019F4511101C0942F4F5F4630A9F79F3F33 +:1039000039F0F901E90FF11D97FDFA9582830895C9 +:10391000089520910C0130910D01F9013296285F34 +:103920003F4F9081981301C010823196E217F30740 +:10393000C1F7089581E090E0E0910C01F0910D0154 +:10394000E80FF91F1082019688309105A9F70895B4 +:103950009091C301892B8093C30108958095909124 +:10396000C30189238093C30108951092C301089570 +:103970009091C201892B8093C20108958095909106 +:10398000C20189238093C20108951092C201089553 +:103990009091C101892B8093C101089580959091E8 +:1039A000C10189238093C10108951092C101089536 +:1039B0008093B80108951092B801089580910C0188 +:1039C00090910D01FC0131969C01285F3F4F80E0F2 +:1039D000919191118F5FE217F307D1F70895E0916C +:1039E0000C01F0910D018091C3018083E0910C01E5 +:1039F000F0910D0190818091C201892B8083E0912B +:103A00000C01F0910D0190818091C101892B80837F +:103A10008091B801882361F0E0910C01F0910D01D3 +:103A20009081892B80830E94DE1C81111092B80145 +:103A300080910C0190910D010C941E1220E00097D2 +:103A400039F0AC0141505109842395232F5FF7CF02 +:103A5000822F08958091D901843039F11092C501E7 +:103A600020E488E190E00FB6F894A8958093600078 +:103A70000FBE2093600080E00E94ED0480E00E9471 +:103A8000480A83B7817F846083BF83B7816083BF27 +:103A90007894889583B78E7F83BF88E10FB6F894BA +:103AA00080936000109260000FBE089508950895FD +:103AB00080E00E94ED040E94561D0E94A30A0E940D +:103AC000571D0E94280B91E0811101C090E0892FC1 +:103AD00008950E94F41680E00E94ED040E94BB222B +:103AE0000E9412120C94480A1F920F920FB60F9266 +:103AF00011248F939F93AF93BF938091C501811140 +:103B000013C08091C6019091C701A091C801B091E6 +:103B1000C9014196A11DB11D8093C6019093C701B3 +:103B2000A093C801B093C901BF91AF919F918F91AC +:103B30000F900FBE0F901F90189582E084BD93E008 +:103B400095BD9AEF97BD80936E0008952FB7F894B6 +:103B50008091C6019091C701A091C801B091C9019F +:103B60002FBF0895CF92DF92EF92FF920F931F9392 +:103B70002FB7F8944091C6015091C7016091C801D8 +:103B80007091C9012FBF6A017B01EE24FF248C01D3 +:103B900020E030E0C016D106E206F30610F44150F2 +:103BA00051099A01281B390BC9011F910F91FF90F0 +:103BB000EF90DF90CF9008951F920F920FB60F9263 +:103BC00011248F939F93AF93BF938091C6019091DF +:103BD000C701A091C801B091C9010196A11DB11DF5 +:103BE0008093C6019093C701A093C801B093C90107 +:103BF000BF91AF919F918F910F900FBE0F901F902B +:103C000018950E940F0FF8942FEF87EA91E6215044 +:103C100080409040E1F700C0000087E090EBDC01BD +:103C20008093E4019093E501A093E601B093E7014E +:103C30009CE088E10FB6F894A895809360000FBED1 +:103C400090936000FFCF0E94581E811102C00E9415 +:103C5000391E0E94631E8093C4010E94701E8093CF +:103C6000E2010E94671E682F70E080E090E00C94F3 +:103C7000B41A6DEE7EEF80E090E00E94C62460E012 +:103C800082E090E00E94B42460E083E090E00E9433 +:103C9000B42460E084E090E00E94B42460E085E019 +:103CA00090E00E94B42460E086E090E00C94B4249C +:103CB00080E090E00E94AE2421E08D3E9E4F09F00E +:103CC00020E0822F089582E090E00C94A62483E007 +:103CD00090E00C94A624682F83E090E00C94B42428 +:103CE00084E090E00C94A624682F84E090E00C948B +:103CF000B42486E090E00C94A624682F86E090E03F +:103D00000C94B4248091CC0180FF0BC06091110110 +:103D100085E0689FB0011124759567957595679545 +:103D20002BC081FF09C06091110185E0689FB0013F +:103D300011247595679520C082FF07C0609111011D +:103D400085E0689FB001112417C09091CD0199239F +:103D5000D1F060911001961788F72091110185E04C +:103D6000289F90011124929FA001939F500D112430 +:103D700070E0CA010E9478246038710540F4611532 +:103D8000710539F002C065E070E0862F08958FE775 +:103D9000089581E008958091CC0180FF08C0609172 +:103DA0000F0170E0759567957595679521C081FF46 +:103DB00006C060910F0170E07595679519C082FF8C +:103DC00004C060910F0170E010C09091CD01992363 +:103DD000C1F060910E019617A0F780910F01899FA5 +:103DE000C001112470E00E9478246038710528F425 +:103DF0006115710521F0862F08958FE7089581E000 +:103E0000089561E070E0F4CF803F21F40E94821EAB +:103E1000819504C0813F29F40E94821E8093D001C5 +:103E20000895823F21F40E94821E819504C0833F41 +:103E300029F40E94821E8093CF010895893F19F4CE +:103E40000E94CB1E05C08A3F31F40E94CB1E819593 +:103E50008093D10108958B3F21F40E94CB1E819560 +:103E600004C08C3F29F40E94CB1E8093D201089598 +:103E7000843F21F48091CE01816017C0853F21F4F9 +:103E80008091CE01826011C0863F21F48091CE01E5 +:103E900084600BC0873F21F48091CE01886005C00B +:103EA000883F31F48091CE0180618093CE010895E6 +:103EB0008D3F21F48091CC0181600BC08E3F21F4B5 +:103EC0008091CC01826005C08F3F29F48091CC01A4 +:103ED00084608093CC010895803F39F48091D001B3 +:103EE00087FF6CC01092D00169C0813F29F4809196 +:103EF000D0011816BCF362C09091CF01823F29F423 +:103F000097FF5CC01092CF0159C0833F19F4191676 +:103F1000CCF354C0893F41F48091D10118160CF0C4 +:103F20004DC01092D1014AC08A3F29F48091D1013D +:103F300087FF44C0F6CF8B3F39F48091D20187FFD1 +:103F40003DC01092D2013AC08C3F29F48091D20139 +:103F50001816BCF333C0843F21F48091CE018E7FCC +:103F600017C0853F21F48091CE018D7F11C0863F1F +:103F700021F48091CE018B7F0BC0873F21F480918B +:103F8000CE01877F05C0883F31F48091CE018F7EBE +:103F90008093CE0113C08D3F21F48091CC018E7FA0 +:103FA0000BC08E3F21F48091CC018D7F05C08F3FE7 +:103FB00029F48091CC018B7F8093CC018091CF013B +:103FC00081110EC08091D00181110AC08091D10170 +:103FD000811106C08091D201811102C01092CD01E1 +:103FE00008958EEC91E00E9429120E94A61D9093E4 +:103FF000CB018093CA0108951F93CF93DF938091E3 +:10400000CA019091CB010E94B21DAC019091CD01EB +:10401000992321F02091120130E006C02091130174 +:104020008AE0289F900111244217530708F486C0A4 +:104030008091CF01C091D001D091D1011091D201D6 +:10404000811107C0C11176C0D11174C0111172C0A5 +:1040500075C09F3F19F09F5F9093CD01181624F40F +:104060000E94821E8093CF018091CF0187FF05C0FF +:104070000E94821E81958093CF011C1624F40E9419 +:10408000821E8093D0018091D00187FF05C00E94DD +:10409000821E81958093D0016091CF01662339F112 +:1040A000C091D001CC2319F1772767FD7095872F38 +:1040B000972F0E94892323E333E343E35FE30E94C6 +:1040C000ED230E9456236093CF016C2F772767FD65 +:1040D0007095872F972F0E94892323E333E343E3CF +:1040E0005FE30E94ED230E9456236093D0011D16CA +:1040F00024F40E94CB1E8093D1018091D10187FFCF +:1041000005C00E94CB1E81958093D101111624F425 +:104110000E94CB1E8093D2018091D20187FF05C0FF +:104120000E94CB1E81958093D201DF91CF911F9188 +:104130000C94F11F9F3F09F08ECF96CFDF91CF9166 +:104140001F910895EEECF1E085E0DF011D928A9564 +:10415000E9F71092CD011092CC010895833081F1DE +:1041600028F4813059F08230D1F00895853009F477 +:1041700049C0B8F1863009F456C008958091130102 +:10418000262F30E0280F311D2F3F310524F4680F12 +:104190006093130108958FEF809313010895809128 +:1041A0001201262F30E0280F311D2F3F310524F456 +:1041B000680F6093120108958FEF809312010895A4 +:1041C00080911101262F30E0280F311D2F3F31053E +:1041D00024F4680F6093110108958FEF809311010B +:1041E000089580911001262F30E0280F311D2F3FB8 +:1041F000310524F4680F6093100108958FEF8093C8 +:104200001001089580910F01262F30E0280F311DF5 +:104210002F3F310524F4680F60930F0108958FEF4D +:1042200080930F01089580910E01262F30E0280F12 +:10423000311D2F3F310524F4680F60930E0108955E +:104240008FEF80930E010895833011F128F48130AF +:1042500049F0823091F00895853081F120F1863067 +:10426000C1F1089580911301681720F4861B809393 +:104270001301089510921301089580911201681797 +:1042800020F4861B80931201089510921201089564 +:1042900080911101681720F4861B80931101089505 +:1042A00010921101089580911001681720F4861B67 +:1042B00080931001089510921001089580910F01CC +:1042C000681720F4861B80930F01089510920F0148 +:1042D000089580910E01681720F4861B80930E01CB +:1042E000089510920E0108950F931F938732D8F509 +:1042F0008E3108F085C08E3009F46FC098F4873095 +:1043000009F459C08B3009F48FC0863009F093C08E +:104310008091C401817F8E7F8093C40181E080936E +:10432000D4018AC0863109F47FC068F4803109F075 +:1043300082C08091C40183FB222720F991E092275B +:1043400090FB83F953C0893109F46EC08B3109F0B9 +:1043500072C08091C40181FB222720F991E092274D +:1043600090FB81F943C0883309F45EC050F4893270 +:1043700009F45CC0853309F459C0873209F456C08A +:104380005AC0833409F452C028F48A3308F453C065 +:10439000895337C0883409F04EC00E94F4160FEFDD +:1043A00013ED20E3015010402040E1F700C0000071 +:1043B0000E94011E39C09091C401892F809581709F +:1043C00080FB90F929F0966098609093C40134C006 +:1043D000997F977F9093C40127C08091C40182FB8D +:1043E000222720F991E0922790FB82F98093C40163 +:1043F0009923D1F08091C40181608093C40114C0DD +:104400008D5141E050E060E070E08A019B0104C002 +:10441000000F111F221F331F8A95D2F7C901B8015F +:104420000E94B41A0E94F41681E006C061E070E0B8 +:1044300080E090E0F5CF80E01F910F91089580E03B +:10444000089580E00895CF93C82F8091D4018130E2 +:1044500069F018F08230C9F184C0E0910C01F0914C +:104460000D018081823209F07EC007C0E0910C010D +:10447000F0910D018081823261F48C2F0E941F2205 +:10448000811104C08C2F0E9474211DC081E090E036 +:104490001AC08C2F0E942122811114C0C43179F0DE +:1044A00048F4CB3079F0C03109F061C082E08093EC +:1044B000D40108C0C93219F0C83321F058C0109295 +:1044C000D40155C081E0817054C0C93291F120F50A +:1044D000C43179F1B0F4C73009F047C08EE1809360 +:1044E000130182E3809312018AE08093110184E139 +:1044F0008093100188E080930F0188E280930E0181 +:1045000034C0CE51C63088F5EC2FF0E0ED5CFE4FA4 +:1045100080818093D30129C0CE34E9F020F4CB34DC +:1045200021F56AE013C0C13579F0C235F1F461E0DC +:104530000DC08091D301882319F01092D30115C0CA +:1045400081E08093D40115C061E006C08091D30161 +:104550000E94AE200AC06AE08091D3010E9424210B +:1045600004C01092D40180E004C081E002C080E069 +:10457000AACFCF9108950E94581E811102C00E94B7 +:10458000391E0E94791E8093E30180FF02C0869548 +:1045900001C080E00C94ED048091E301982F969582 +:1045A000292F30E0233031054CF49F5F990F817043 +:1045B000892B81608093E3010E947D1E8091E3013D +:1045C00086950C94ED048091E301982F969591F0D7 +:1045D0009158990F8170892B8093E3018E7F91E030 +:1045E00009F490E08091E30190FB80F98093E3016E +:1045F0000E947D1E8091E30186950C94ED048091CC +:10460000E301982F909590FB80F98093E3010E943D +:104610007D1E8091E30180FF02C0869501C080E08D +:104620000C94ED049091E301892F86958F5F8F772D +:104630009170843028F4880F892B8093E30102C0A5 +:104640009093E3018091E3018E7F91E009F490E083 +:104650008091E30190FB80F98093E3010E947D1E2D +:104660008091E30186950C94ED042091E301922F53 +:1046700096958927982F990F822F8170892B809387 +:10468000E3018E7F91E009F490E08091E30190FBDB +:1046900080F98093E3010E947D1E8091E30186955D +:1046A0000C94ED048091E3018695089504D06894FC +:1046B000B1118DC0089570D088F09F5790F0B92F38 +:1046C0009927B751A0F0D1F0660F771F881F991F67 +:1046D0001AF0BA95C9F712C0B13081F077D0B1E0C5 +:1046E000089574C0672F782F8827B85F39F0B93FD5 +:1046F000CCF3869577956795B395D9F73EF4909569 +:104700008095709561957F4F8F4F9F4F0895E894E6 +:1047100009C097FB3EF490958095709561957F4F09 +:104720008F4F9F4F9923A9F0F92F96E9BB279395B7 +:10473000F695879577956795B795F111F8CFFAF4C7 +:10474000BB0F11F460FF1BC06F5F7F4F8F4F9F4FF8 +:1047500016C0882311F096E911C0772321F09EE856 +:10476000872F762F05C0662371F096E8862F70E0BC +:1047700060E02AF09A95660F771F881FDAF7880F96 +:104780009695879597F9089557FD9058440F551FB2 +:1047900059F05F3F71F04795880F97FB991F61F0C3 +:1047A0009F3F79F087950895121613061406551F3A +:1047B000F2CF4695F1DF08C0161617061806991FA6 +:1047C000F1CF86957105610508940895E894BB279B +:1047D00066277727CB0197F908950BD078C069D069 +:1047E00028F06ED018F0952309F05AC05FC011244C +:1047F000EECFCADFA0F3959FD1F3950F50E0551F80 +:10480000629FF001729FBB27F00DB11D639FAA2725 +:10481000F00DB11DAA1F649F6627B00DA11D661F74 +:10482000829F2227B00DA11D621F739FB00DA11D95 +:10483000621F839FA00D611D221F749F3327A00D4F +:10484000611D231F849F600D211D822F762F6A2FEB +:1048500011249F5750408AF0E1F088234AF0EE0F70 +:10486000FF1FBB1F661F771F881F91505040A9F77D +:104870009E3F510570F014C0AACF5F3FECF3983E05 +:10488000DCF3869577956795B795F795E7959F5FE4 +:10489000C1F7FE2B880F911D9695879597F908957E +:1048A00097F99F6780E870E060E008959FEF80ECE3 +:1048B000089500240A941616170618060906089586 +:1048C00000240A9412161306140605060895092EEC +:1048D0000394000C11F4882352F0BB0F40F4BF2B5B +:1048E00011F460FF04C06F5F7F4F8F4F9F4F08959B +:1048F00097FB072E16F4009407D077FD09D00E948D +:10490000922407FC05D03EF4909581959F4F089521 +:10491000709561957F4F0895EE0FFF1F0590F491FC +:10492000E02D0994AA1BBB1B51E107C0AA1FBB1FA6 +:10493000A617B70710F0A61BB70B881F991F5A952B +:10494000A9F780959095BC01CD010895F999FECF06 +:1049500092BD81BDF89A992780B50895A8E1B0E08D +:1049600042E050E00C94CE24262FF999FECF92BD60 +:1049700081BDF89A019700B4021639F01FBA20BD24 +:104980000FB6F894FA9AF99A0FBE08950196272F58 +:104990000E94B5240C94B424DC01CB01FC01F999EC +:1049A000FECF06C0F2BDE1BDF89A319600B40D927B +:0C49B00041505040B8F70895F894FFCF34 +:1049BC00FF3E0BCC0BA90B750B410B01B901280861 +:1049CC00140A321E1F0F03764F5F6F7F49694379BC +:1049DC00095953633F4D36E608990863080F0828B8 +:0E49EC0008410801020304050607080900003F +:00000001FF diff --git a/keyboard/planck/keymaps/yang/compiled.hex b/keyboard/planck/keymaps/yang/compiled.hex new file mode 100644 index 0000000000..da6b0017a1 --- /dev/null +++ b/keyboard/planck/keymaps/yang/compiled.hex @@ -0,0 +1,1318 @@ +:100000000C949F030C94E3030C94E3030C94E3031C +:100010000C94E3030C94E3030C94E3030C94E303C8 +:100020000C94E3030C94E3030C94A4130C94761443 +:100030000C948E210C94E3030C94E3030C94E303DF +:100040000C94E3030C9447040C94E3030C94E30333 +:100050000C94E3030C94F6210C94E3030C94E30357 +:100060000C94E3030C94E3030C94E3030C94E30378 +:100070000C94E3030C94E3030C94E3030C94E30368 +:100080000C94060F0C94E3030C94E3030C94E30329 +:100090000C94E3030C94E3030C94E3030C94E30348 +:1000A0000C94E3030C94E3030C94E303B404D00432 +:1000B000B804BC04C004C404C804CC04E31405158B +:1000C000F3150515F3154A156D15F315C215D5155C +:1000D000BF18BF18EE18EE182D194D19A31AA31A40 +:1000E0005819A31A081A081A6F1A781AA31A9D1A0F +:1000F000151A151A151A151A151A151A151A151A88 +:10010000151A151A151A151A151A151A151A151A77 +:10011000251A331A3A1A411A4B1A0000000000003F +:100120000000000000010204060A0F17202C3A4AC2 +:100130005D71879DB3C7DAE9F5FCFFFCF5E9DAC725 +:10014000B39D87715D4A3A2C20170F0A06040201FD +:10015000000000000000000000002CA500F001F0ED +:1001600002F003F004F005F006F007F02B00140095 +:100170001A000800150017001C0018000C001200DF +:1001800013002A00290004001600070009000A00D5 +:100190000B000D000E000F0033003400E1001D00C5 +:1001A0001B00060019000500110010003600370082 +:1001B000380028000030E000E200E3000352002095 +:1001C000002004525000510052004F002B00140038 +:1001D0001A00090013000A000D000F0018001C008F +:1001E00033002A002900040015001600170007003C +:1001F0000B00110008000C0012003400E1001D008B +:100200001B000600190005000E0010003600370024 +:10021000380028000030E000E200E3000352002034 +:10022000002004525000510052004F002B003400B7 +:100230003600370013001C0009000A0006001500F4 +:100240000F002A00290004001200080018000C000A +:1002500007000B001700110016003800E100330002 +:1002600014000D000E001B00050010001A001900FC +:100270001D0028000030E000E200E30003520020EF +:10028000002004525000510052004F0035021E025F +:100290001F0220022102220223022402250226023A +:1002A00027022A0001003A003B003C003D003E00CE +:1002B0003F002D022E022F023002310201004000C9 +:1002C00041004200430044004500005301530253E3 +:1002D00000500100010001000100010001000100C7 +:1002E00001000100AB00AA00A900AE0035001E000D +:1002F0001F002000210022002300240025002600EA +:1003000027002A0001003A003B003C003D003E006F +:100310003F002D002E002F00300031000100400072 +:100320004100420043004400450000530153025382 +:100330000050010001000100010001000100010066 +:1003400001000100AB00AA00A900AE0001004B00B3 +:1003500052004E00010001000100010001000100F7 +:1003600001004C000100500051004F0001004A0004 +:100370005000510052004F004D00010001000120CB +:100380000220032004200520062007200820010069 +:100390000100010001000100010001000100010055 +:1003A0000100010001000100010001006432146439 +:1003B0003214783C1E1E140A0500000000010101E1 +:1003C0000202030405050607090A0B0C0E0F1112A1 +:1003D000141517191B1D1F212325282A2C2F3134F2 +:1003E00036393B3E414346494C4F5255585A5D6160 +:1003F00064676A6D707376797C7F8386898C8F924F +:1004000095989B9EA2A5A7AAADB0B3B6B9BCBEC134 +:10041000C4C6C9CBCED0D3D5D7DADCDEE0E2E4E681 +:10042000E8EAEBEDEEF0F1F3F4F5F6F8F9FAFAFBA1 +:10043000FCFDFDFEFEFEFFFFFFFFFFFFFFFEFEFED9 +:10044000FDFDFCFBFAFAF9F8F6F5F4F3F1F0EEED48 +:10045000EBEAE8E6E4E2E0DEDCDAD7D5D3D0CECBD7 +:10046000C9C6C4C1BEBCB9B6B3B0ADAAA7A5A29E49 +:100470009B9895928F8C898683807C797673706D3A +:100480006A6764615D5A5855524F4C494643413E34 +:100490003B393634312F2C2A282523211F1D1B19C7 +:1004A00017151412110F0E0C0B0A09070605050487 +:1004B0000302020101010000000001010202020228 +:1004C00002020303030303030303030303030303FE +:1004D00004040404040404040404040405050505D8 +:1004E00005050505050506060606060606060707B0 +:1004F000070707070708080808080809090909097C +:10050000090A0A0A0A0A0B0B0B0B0B0C0C0C0C0C3D +:100510000D0D0D0D0E0E0E0E0F0F0F1010101011F1 +:100520001111121212131313141414151516161692 +:10053000171718181919191A1A1B1B1C1C1D1D1E18 +:100540001E1F20202121222323242425262627287C +:1005500028292A2B2B2C2D2E2F30303132333435B5 +:10056000363738393A3B3C3D3E3F404142444546B0 +:1005700047494A4B4C4E4F5152535556585A5B5D62 +:100580005E6062636567696B6D6E70727476797BAD +:100590007D7F818486888B8D909295979A9D9FA26E +:1005A000A5A8ABAEB1B4B7BABEC1C4C8CBCFD3D681 +:1005B000DADEE2E6EAEEF2F8FF28035400680065AE +:1005C00000200050006C0061006E0063006B002092 +:1005D000004B006500790062006F006100720064EA +:1005E0000000002C034F007200740068006F006C64 +:1005F0000069006E0065006100720020004B00651C +:1006000000790062006F00610072006400730000F6 +:10061000000403090409025400030100A0FA0904BC +:1006200000000103010100092111010001223F0026 +:100630000705810308000A09040100010301020003 +:10064000092111010001224D000705820308000A5B +:100650000904020001030000000921110100012228 +:1006600036000705830308000A120110010000008C +:1006700008EDFE606001000102000105010980A192 +:1006800001850216010026B7001A01002AB700757D +:100690001095018100C0050C0901A1018503160117 +:1006A00000269C021A01002A9C0275109501810007 +:1006B000C005010902A1010901A1000509190129CB +:1006C00005150025019505750181029501750381C8 +:1006D000010501093009311581257F9502750881D1 +:1006E0000609381581257F950175088106050C0AD4 +:1006F00038021581257F950175088106C0C0050166 +:100700000906A101050719E029E71500250195084B +:1007100075018102950175088101050819012905F6 +:100720009505750191029501750391010507190061 +:1007300029FF150025FF950675088100C0001124CA +:100740001FBECFEFDAE0DEBFCDBF04B603FE24C08C +:100750008091540290915502A0915602B091570297 +:100760008730904BA740B04BB9F4109254021092CE +:100770005502109256021092570214BE84B7877F1A +:1007800084BF88E10FB6F8948093600010926000F7 +:100790000FBEE0E0F8E3099511E0A0E0B1E0EAE087 +:1007A000F2E502C005900D92AE33B107D9F712E021 +:1007B000AEE3B1E001C01D92A435B107E1F70E949C +:1007C000EA100C9403290C9400000895089581E028 +:1007D000089508950C94E6030C94E7030C94E90340 +:1007E0000E94672723E030E0281B3109220F209365 +:1007F00042010895282F2F9880918000211108C070 +:10080000877F8093800010928D0010928C001BC017 +:10081000886080938000233019F48FEF9FEF0FC022 +:1008200083E090E0821B9109880F991F2FEF3FEF23 +:10083000A90102C0569547958A95E2F7CA0190939F +:100840008D0080938C000C94F0030E94F00384E0F0 +:100850008093410110923E010895279A2F988FEFBF +:100860009FEF90938700809386008AE080938000BA +:1008700089E1809381000E94D0260C9425040E9477 +:100880002D040E94780C6E9A769A0C94E5031F92C0 +:100890000F920FB60F9211242F933F938F939F9334 +:1008A000EF93FF93E0913F01F0914001CF0101965A +:1008B0009093400180933F010090410102C0F69562 +:1008C000E7950A94E2F7EF7380913E01823019F4C4 +:1008D000E03251F404C0813039F4EF3329F48091CF +:1008E0006F008D7F80936F00F0E0E65EFE4FE49135 +:1008F00021E031E0E29FC001E39F900D11240090C0 +:10090000420102C0969587950A94E2F790938D0074 +:1009100080938C00FF91EF919F918F913F912F9148 +:100920000F900FBE0F901F90189561110DC0FC0124 +:100930008281882331F085EE0E9463170E94272769 +:1009400003C085EE0E942B1880E090E00895462FAA +:1009500050E04830510538F5FA01EA5AFF4FDC0102 +:1009600012968C910C94B5288823E9F00C94B50C60 +:100970008823C9F00C94770B8823A9F00C948F0B73 +:10098000882389F00C94AE0B882369F00C94C90B72 +:10099000882349F00C94E30B882329F00C94FE0B78 +:1009A00081110C94AB0C089581E008950C94D4044B +:1009B00008950F931F93CF93DF938C01FC01C081A7 +:1009C000D181CE010E940720BE010E948505EC0165 +:1009D000B8010E94D604882309F48DC0F8018281F1 +:1009E000882309F44AC080914E0181111FC0C4318F +:1009F000F0E5DF0709F051C00E94D80481E0809340 +:100A00004E010E94C02190934D0180934C011092A1 +:100A1000450110924701109246011092490110922F +:100A2000480110924B0110924A0165C080914C011F +:100A300090914D010E94CC21883C910570F48091E9 +:100A40004501E82FF0E0EE0FFF1FEA5BFE4FD18378 +:100A5000C0838F5F809345014EC0C43880E5D807BE +:100A600021F0C538D04501F13AC0F80182818823D0 +:100A700041F01092430182E01EC0C438E0E5DE0779 +:100A800059F580914301811106C086E20E946317E7 +:100A900086E20E942B1882E01CC0C438F0E5DF0714 +:100AA00041F3C538D045D9F4F8018281882331F06B +:100AB0001092440180E20E947A181DC08091440186 +:100AC000811106C087E20E94631787E20E942B18FB +:100AD00080E20E9481180FC0C538D04529F381E01B +:100AE0008093430180934401C801DF91CF911F910E +:100AF0000F910C94EC0380E0DF91CF911F910F9147 +:100B000008950C943F040C94EA039CE0799FF00153 +:100B1000112490E3899FE00DF11D1124E60FF11DD2 +:100B2000EE0FFF1FE459FE4F859194910895880FB1 +:100B3000991FFC01E652F040859194910895880F29 +:100B4000991FFC01E65AFE4F8591949108950F93E9 +:100B50001F93CF93DF93EC01811521E39207A0F55A +:100B6000C11580E3D80708F0D7C0C83ED105D8F436 +:100B7000C03ED10508F003C2C83AD10578F4C53AA1 +:100B8000D10508F06AC0C130D10509F463C008F48A +:100B9000F3C1C430D10508F0F2C1EEC1CB3BD105A1 +:100BA00008F466C0E9C1C11590E2D90708F0AFC0EA +:100BB000C11521E0D20708F0E2C1C03FD10508F419 +:100BC000DBC18E0110651BC2C03880E5D80700F577 +:100BD000C03790E5D90708F0A3C0C11520E5D207BA +:100BE00009F4ACC050F4CE01905480319F4008F01D +:100BF000C3C1DF708E01106A02C2C13080E5D80720 +:100C000009F4AAC0C43190E5D90708F4ABC0B4C157 +:100C1000C33820E5D20709F48EC050F4C13890E5FE +:100C2000D90709F482C008F083C000E011EDE7C1E4 +:100C3000C03181E5D80708F49FC1C11597E5D907F0 +:100C400008F432C1CE0190578115904108F094C14B +:100C5000DF708FC101E010E0D2C1C53AD10509F4BF +:100C600090C1C63AD10509F08FC102E810E4C7C1AE +:100C7000C83AD10509F48BC1C93AD10509F48AC132 +:100C8000CA3AD10509F489C1CB3AD10509F488C122 +:100C9000CC3AD10509F487C1CD3AD10509F486C112 +:100CA000C03BD10509F485C1CE3AD10509F484C110 +:100CB000CF3AD10509F483C1C13BD10509F482C102 +:100CC000C23BD10509F481C1C33BD10509F480C100 +:100CD000C43BD10509F47FC1C53BD10509F47EC1F0 +:100CE000C63BD10509F47DC1C73BD10509F47CC1E0 +:100CF000C83BD10509F47BC1C93BD10509F47AC1D0 +:100D0000CA3BD10509F479C100E014E478C1CE01F1 +:100D10009F700E949F0574C1DD278E01106C6FC10A +:100D2000CF70DD278E01146D6AC100E010ED67C140 +:100D300000E012ED64C100E013ED61C10E940E1BE2 +:100D40008FEF94E32CE0815090402040E1F700C009 +:100D500000000E941B2253C18091D80181608093C2 +:100D6000D8014DC10E947222811102C00E945322FB +:100D70000E94852290E09093530280935202C230E9 +:100D800080E5D80721F480915202816086C0C4308A +:100D900090E5D90721F48091520282607EC0C6306E +:100DA00020E5D20721F480915202846076C0C830D9 +:100DB00080E5D80719F48091520227C0CA3090E527 +:100DC000D90721F480915202806167C0CC3020E5C0 +:100DD000D20721F48091520280625FC0CE3080E55C +:100DE000D80721F480915202806457C0C03190E549 +:100DF000D90721F48091520280684FC0C23120E5AA +:100E0000D20729F4809152028460886046C0C330C2 +:100E100080E5D80721F4809152028E7F3EC0C53014 +:100E200090E5D90721F4809152028D7F36C0C730FA +:100E300020E5D20721F4809152028B7F2EC0C93069 +:100E400080E5D80719F48091520226C0CB3090E596 +:100E5000D90721F4809152028F7E1FC0CD3020E54A +:100E6000D20721F4809152028F7D17C0CF3080E5E8 +:100E7000D80721F4809152028F7B0FC0C13190E5D9 +:100E8000D90721F4809152028F7707C0C331D04532 +:100E900031F4809152028B7F877F80935202809140 +:100EA00052020E948922ABC08D2F99278F709927FB +:100EB00081309105D9F49E012370332702C0880F39 +:100EC000991F2A95E2F79C688E0144E0000F111FDC +:100ED0004A95E1F700271370802B912B53E0CC0F3C +:100EE000DD1F5A95E1F7C076DD272FC082309105CE +:100EF00031F4DC2FCC278E01016F106A80C0833063 +:100F0000910569F4CE018370992701E010E002C0D9 +:100F1000000F111F8A95E2F7C8019C680FC084304A +:100F20009105B9F4CE018370992701E010E002C069 +:100F3000000F111F8A95E2F7C8019A6823E0CC0FD1 +:100F4000DD1F2A95E1F7C07ED7708C010C2B1D2B7D +:100F500056C08530910531F4DC2FCC278E01046F0B +:100F6000106A4DC0069709F04AC0CF71DD27DC2F0B +:100F7000CC278E01106243C000E010E040C08E011B +:100F80003EC001E810E43BC003E810E438C002EEC4 +:100F900014E435C009EE14E432C00AEE14E42FC0A4 +:100FA00005EB14E42CC006EB14E429C007EB14E4B1 +:100FB00026C00CEC14E423C00DEC14E420C003E8BC +:100FC00015E41DC00AE815E41AC002E915E417C0CB +:100FD00004E915E414C001E216E411C003E216E4CA +:100FE0000EC004E216E40BC005E216E408C006E2F7 +:100FF00016E405C007E216E402C00AE216E4C801DE +:10100000DF91CF911F910F9108959CE0799FF0019E +:10101000112490E3899FE00DF11D1124E60FF11DCD +:10102000EE0FFF1FE459FE4F85919491803E91058C +:10103000E0F4803C910558F58133910509F46FC0C7 +:1010400048F48932910509F463C08A32910509F4A4 +:101050006DC072C089339105E9F082389105D1F0F5 +:101060008533910509F44DC067C0833E910581F138 +:1010700038F4803E9105B9F0823E9105D9F05CC00C +:10108000863E910561F1873E9105A1F155C00E9410 +:10109000970508952091520220FD02C021FF4CC007 +:1010A00080EE90E049C08091520280FFF9CF89E341 +:1010B00090E042C08091520282FF0EC080915202A5 +:1010C00084FF03C080E090E037C083EE90E034C03E +:1010D0008091520282FFF2CF82EE90E02DC080918B +:1010E000520283FF0BC08091520284FDEBCF87EE4A +:1010F00090E022C08091520283FFF5CF86EE90E00F +:101100001BC08091520285FF07C089E290E014C0A5 +:101110008091520285FFF9CF85E390E00DC0809168 +:10112000520286FF07C08AE290E006C08091520218 +:1011300086FFF9CF81E390E00E94A70508950C9403 +:10114000EE03E82FF0E0EF5DFE4F8081E82FEF70B7 +:10115000F0E082958F7021E030E0A90102C0440FD9 +:10116000551F8A95E2F740A308950F931F93CF93DD +:10117000DF9385B7806885BF85B7806885BFC3E08A +:10118000D0E001E010E0FE01EF5DFE4F8081E82F2E +:10119000EF70F0E021A182958F70A80102C0440F8A +:1011A000551F8A95E2F7CA01822B81A38C2F0E94DA +:1011B000A108219740F78BE090E061E070E0FC012E +:1011C000EB5EFE4F2081E22FEF70F0E042A122950E +:1011D0002F70DB0102C0AA0FBB1F2A95E2F79D0109 +:1011E000242B22A3019758F7DF91CF911F910F91E4 +:1011F0000C948105EF92FF920F931F93CF93DF938F +:1012000007E511E0C3E0EE24E394F12CD5E08C2F48 +:101210000E94A1088BE090E040E050E0FC01EB5E12 +:10122000FE4F6081E62FEF70F0E020A130E0629584 +:101230006F7002C0359527956A95E2F720FD09C0C9 +:101240009701082E02C0220F331F0A94E2F7422BA7 +:10125000532B019718F7F801929182918F0184170F +:10126000950721F051834083D09300018C2F0E9479 +:10127000A108C15060F68091000187FD2CC081500B +:10128000809300018F3F39F08FE99FE00197F1F7DC +:1012900000C0000020C080915501909156019093AC +:1012A0005E0180935D018091530190915401909370 +:1012B0005C0180935B018091510190915201909368 +:1012C0005A018093590180914F0190915001909360 +:1012D0005801809357010E94830581E0DF91CF91EF +:1012E0001F910F91FF90EF900895E82FF0E0EE0F1F +:1012F000FF1FE95AFE4F80819181089508950F9351 +:101300001F93CF930FE511E0C0E0F8019291829115 +:101310008F010E943821C80FF1E007351F07A9F798 +:101320008C2FCF911F910F9108952BB1342F3095B1 +:1013300023233BB1432B3FB7F894FC01680F791F7F +:10134000E617F70789F0819198E04BB9000000C0DB +:1013500087FF2BB9880F000000C000C000C02BB968 +:1013600000C09A9591F7ECCF3FBF08952AB1242B86 +:101370002AB99B01220F331F620F731F0E94950928 +:1013800087EC90E00197F1F700C00000089542E07B +:101390000C94B609AF92BF92CF92DF92EF92FF9278 +:1013A0000F931F93CF93DF936C01790150E0FA0103 +:1013B000E754FB4F44918FEF90E0FC01E61BF109ED +:1013C000E754FB4FE491E09509F495C0C42FD0E0B9 +:1013D0008E1B91098C9F90018D9F300D9C9F300D2D +:1013E0001124E32F8CE3A82EB12CC601B5010E9475 +:1013F0008D28DC016230710509F446C0D0F4611516 +:10140000710599F16130710509F079C0C31BD109EB +:10141000B501681B790BC69FC001C79F900DD69F71 +:10142000900D1124B5010E948D28032F060F142F53 +:1014300067C06430710509F44BC0B8F165307105BF +:1014400009F05DC0C31BD109B501681B790BC69FAC +:10145000C001C79F900DD69F900D1124B5010E9429 +:101460008D28132FE32FE60F44C0C31BD109CC9D59 +:10147000C001CD9D900DDC9D900D1124B5010E9401 +:101480008D28132F160F35C0C31BD109CA9FC00169 +:10149000CB9F900DDA9F900D1124B5010E948D28ED +:1014A000142F032FE32FE60F2BC0C31BD109B50167 +:1014B000681B790BC69FC001C79F900DD69F900DEA +:1014C0001124B5010E948D28132F160F032F0FC072 +:1014D000C31BD109CA9FC001CB9F900DDA9F900D0D +:1014E0001124B5010E948D28032F060F132FE42F1E +:1014F00007C0042F05C0E42F142F042F01C0E0E023 +:10150000D70111960C9311971C931296EC93DF91CF +:10151000CF911F910F91FF90EF90DF90CF90BF90F0 +:10152000AF90089587E090E00C94C328AB01BC0114 +:1015300087E090E00C94E128E9EEF1E083E080831D +:10154000AAEEB1E08C91807884668F778C938CECD6 +:10155000828383836091E9017091EA018091EB01BC +:101560009091EC010C94960A8091E90180FF06C0ED +:101570006CE170E081EF91E00C94C70980E090E0AD +:10158000FC01EF50FE4F11821082128203968435C7 +:101590009105B1F7EDCF20E030E0F901EF50FE4FBB +:1015A0008183608342832D5F3F4F24353105A9F746 +:1015B0000C94B40AEF92FF920F931F93CF93DF9393 +:1015C00000D01F92CDB7DEB70091E9011091EA017A +:1015D0002091EB013091EC010093ED011093EE01AD +:1015E0002093EF013093F0012091E90120FF21C009 +:1015F000042FF62EE92E182F9E012F5F3F4F0E94D9 +:10160000CA098091ED0110FB87F98093ED011695D1 +:101610008091EE018078182BE0FA17F91093EE0113 +:10162000F092EF010093F0014B8169818A810E9461 +:10163000CB0A0F900F900F90DF91CF911F910F91D8 +:10164000FF90EF9008950F931F93CF93DF93EC01DA +:10165000062F142F9091E90190FF44C0892F8E77B7 +:10166000823021F4CE010E94DA0A1BC0892F8695B0 +:101670008F732EE3280F2F73243018F41091EC0190 +:1016800010C0865C8F73893060F4C92FCC1FCC27C3 +:10169000CC1FD091EA018D2F880FC82BD7FBDD27F7 +:1016A000D0F98091E901C0FB87F98093E901C695E3 +:1016B0008091EA018078C82BD0FBC7F9C093EA017A +:1016C0000093EB011093EC016091E9017091EA0144 +:1016D0008091EB019091EC01DF91CF911F910F91DF +:1016E0000C94960ADF91CF911F910F910895E9EE26 +:1016F000F1E02081221F2227221F3091EA01432F8F +:10170000440F842F822B37FB992790F90A9668E6BD +:1017100071E00E94A128438162810C94230B2091E7 +:10172000E901221F2227221F3091EA01432F440F93 +:10173000842F822B37FB992790F98A3091051CF46E +:10174000825A9E4F01C00A9768E671E00E94A12864 +:101750004091EC016091EB010C94230B6091EB0143 +:10176000862F90E08F3E910514F46F5E01C06FEFFD +:101770008091E901881F8827881F9091EA01292F0D +:10178000220F97FB992790F94091EC01822B0C9442 +:10179000230B6091EB01862F90E0419714F061518B +:1017A00001C060E08091E901881F8827881F90911F +:1017B000EA01292F220F97FB992790F94091EC011C +:1017C000822B0C94230B4091EC01842F90E08F3EF0 +:1017D000910514F44F5E01C04FEF8091E901881F1D +:1017E0008827881F9091EA01292F220F97FB9927BC +:1017F00090F96091EB01822B0C94230B4091EC014A +:10180000842F90E0419714F0415101C040E0809155 +:10181000E901881F8827881F9091EA01292F220F4C +:1018200097FB992790F96091EB01822B0C94230B85 +:101830008091700181110FC081E08093700189E077 +:10184000809391008FB7F89493E09093990090ED76 +:10185000909398008FBF0895E1E7F0E08081826067 +:1018600080830895E1E7F0E080818D7F8083089593 +:101870009091E90190FF3BC09178811102C0926084 +:1018800007C0883110F09E6203C08F73880F982BB9 +:101890009093E9016091E9017091EA018091EB0177 +:1018A0009091EC010E94960A8091E901982F9E7711 +:1018B000923019F40E94320C07C08695825C8F73B7 +:1018C000863110F40E942C0C8091E901881F882732 +:1018D000881F9091EA01292F220F97FB992790F9F1 +:1018E0004091EC016091EB01822B0C94230B089545 +:1018F0008091D80181608093D80181E0809371014B +:101900000E947222811104C00E9453220E949C0AEC +:101910000E94920A6093E9017093EA018093EB01BF +:101920009093EC016E7761F40E949C0A0E94920AE7 +:101930006093E9017093EA018093EB019093EC01CD +:101940000E94180C8091E90180FF04C086958F7376 +:101950000C94380C08958091E90186958F738F5F00 +:10196000883108F081E00C94380C8091E901982FBF +:10197000909590FB80F98093E9016091E901709165 +:10198000EA018091EB019091EC010E94960A80910E +:10199000E90180FF04C086958F730C94380C0E9477 +:1019A000320C2FEF80E792E0215080409040E1F729 +:1019B00000C000000C94B40ACF93C82F80916E0130 +:1019C00090916F010E94CC21EC2FF0E0EB54FC4F82 +:1019D000E491F0E08E179F0718F10E94C0219093C8 +:1019E0006F0180936E01E0916D01F0E0E754FC4FD0 +:1019F00044918091E901881F8827881F9091EA010E +:101A0000292F220F97FB992790F96091EB01822BE8 +:101A10000E94DA0A80916D0190E0019680936D0139 +:101A2000CF910895CF93C82F80916B0190916C0155 +:101A30000E94CC21EC2FF0E0EE54FC4FE491F0E05A +:101A40008E179F07E8F00E94C02190936C0180934D +:101A50006B014091EC016091EB01809169019091E3 +:101A60006A010E94DA0A8091690190916A010196E7 +:101A700068E671E00E948D2890936A018093690165 +:101A8000CF910895CF92DF92FF920F931F93CF9340 +:101A9000DF93F82E80916701909168010E94CC211C +:101AA000EF2DE695F0E0EE54FC4FE491F0E08E1758 +:101AB0009F07F0F10E94C021909368018093670115 +:101AC00001EF11E0C0E0D0E088E6C82EDD24D39419 +:101AD00080916501909166018C0F9D1FB6010E9457 +:101AE0008D2898014091EC016091EB010E94CA0998 +:101AF0002C960D5F1F4FC03581E0D80749F70E9433 +:101B0000B40A2091650130916601F0FE0BC0C90155 +:101B1000019668E671E00E948D289093660180939B +:101B2000650106C02150310930936601209365019B +:101B3000DF91CF911F910F91FF90DF90CF9008958B +:101B40008F929F92AF92BF92CF92DF92EF92FF92CD +:101B50000F931F93CF93DF93C82F80FF03C0DD2423 +:101B6000DA9402C0DD24D3948091630190916401E2 +:101B70000E94CC21C695EC2FF0E0E155FC4FE4919A +:101B8000F0E08E179F0708F467C00E94C021909371 +:101B900064018093630191EFE92E91E0F92E03EF48 +:101BA00011E0C0E0D0E027E0822E912CF8013197BF +:101BB0001082F7011082F801108287E0A82EB12C64 +:101BC000C12C809162018C0D87FD845E992787FD71 +:101BD0009095C817D907E9F42091EC012A9DC0011E +:101BE0002B9D900D1124B4010E94A128462F8091B5 +:101BF000E901881F8827881F9091EA01592F550F06 +:101C000097FB992790F997016091EB01852B0E9432 +:101C1000CA09CD0CF1E0AF1AB10899F6219683E01C +:101C2000E80EF11C0D5F1F4FCC31D10509F0BECF7E +:101C30000E94B40A8091620191E0D91206C081111C +:101C400002C08BE107C0815005C090E00196BE0143 +:101C50000E94A12880936201DF91CF911F910F9183 +:101C6000FF90EF90DF90CF90BF90AF909F908F90BC +:101C700008959F92AF92BF92CF92DF92EF92FF9220 +:101C80000F931F93CF93DF93CDB7DEB7C455D10920 +:101C90000FB6F894DEBF0FBECDBF182F8091600144 +:101CA000909161010E94CC21E12FF0E0E455FC4FBE +:101CB000E491F0E08E179F0708F495C00E94C021C0 +:101CC0009093610180936001CE0101967C015E01D9 +:101CD00093E0A90EB11CC12CD12C8701F5013197DD +:101CE0001082F7011082F5011082912C9091010170 +:101CF00080915F01999E800D112487FD04C08C3175 +:101D00001CF08BE101C080E0992787FD9095C816F3 +:101D1000D906A1F48091E901881F8827881F909136 +:101D2000EA01592F550F97FB992790F99701409198 +:101D3000EC016091EB01852B0E94CA099394F7E0B6 +:101D40009F12D4CF8FEFC81AD80A93E0E90EF11C86 +:101D5000E3E0AE0EB11CFCE1CF16D10409F0BECF1A +:101D600023EF31E059E0E52EF12C6CE1C62ED12CA9 +:101D7000C701B6010E94A128D9011197FC01EE0FFD +:101D8000FF1FE80FF91FE00FF11F81818C9311975E +:101D900080818C938281F9018083FFEFEF1AFF0A23 +:101DA0002D5F3F4F85E2E816F10411F70E94B40A57 +:101DB0009091010180915F01913049F48A3F2CF4A8 +:101DC00089EF80935F018FEF08C081500AC0833292 +:101DD0003CF082E280935F0181E08093010103C0C7 +:101DE0008F5F80935F01CC5ADF4F0FB6F894DEBF50 +:101DF0000FBECDBFDF91CF911F910F91FF90EF905C +:101E0000DF90CF90BF90AF909F9008951F920F9258 +:101E10000FB60F9211242F933F934F935F936F93BD +:101E20007F938F939F93AF93BF93EF93FF93809193 +:101E3000E90186958F739EE3980F9F73943020F489 +:101E400082500E94DC0C23C09AE3980F9F7393305A +:101E500020F486500E94120D1AC097E3980F9F73CA +:101E6000963020F489500E94420D11C091E3980FE2 +:101E70009F73963020F48F500E94A00D08C09BE203 +:101E8000980F9F73933018F485510E94390EFF917B +:101E9000EF91BF91AF919F918F917F916F915F91E2 +:101EA0004F913F912F910F900FBE0F901F9018955B +:101EB00080917A010895CF93DF9300D01F92CDB720 +:101EC000DEB79C0180914902843019F593E0998333 +:101ED0003B832A839093E9008FEF9091E800815033 +:101EE00095FD06C095ED9A95F1F700008111F5CFAB +:101EF0008091E80085FF0DC040E050E063E070E0B5 +:101F0000CE0101960E9494118091E8008E77809313 +:101F1000E8000F900F900F90DF91CF910895CF932D +:101F2000DF9300D01F92CDB7DEB720914902243055 +:101F300021F522E029839B838A8383E08093E90053 +:101F40008FEF9091E800815095FD06C095ED9A9530 +:101F5000F1F700008111F5CF8091E80085FF0DC0F9 +:101F600040E050E063E070E0CE0101960E949411E1 +:101F70008091E8008E778093E8000F900F900F908B +:101F8000DF91CF910895209149022430F1F422E0AD +:101F90002093E9002FEF3091E800215035FD06C075 +:101FA00035ED3A95F1F700002111F5CF2091E800C9 +:101FB00025FF0BC040E050E065E070E00E94941106 +:101FC0008091E8008E778093E8000895CF93DF93A7 +:101FD00020914902243039F521E02093E9002FEFC8 +:101FE0003091E800215035FD06C035ED3A95F1F706 +:101FF00000002111F5CF2091E80025FF14C0EC016D +:1020000040E050E068E070E00E9494118091E800A8 +:102010008E778093E80088E0FE01A2E7B1E00190AE +:102020000D928A95E1F7DF91CF9108958091480252 +:10203000811109C00E9429130E9486138091E20039 +:1020400084608093E20008951092480208950895F4 +:1020500008950C94832142E061EC81E00E94A31278 +:1020600042E061EC82E00E94A31242E061EC83E076 +:102070000C94A31280914B02833009F453C030F4C6 +:10208000813071F0823009F48CC008958A3009F4EF +:1020900078C08B3009F45EC0893009F09AC020C046 +:1020A00080914A02813A09F094C08091E800877FCC +:1020B0008093E80080914E0290914F02892B21F489 +:1020C00068E082E791E003C060E080E090E070E0CB +:1020D0000E94DF118091E8008B778093E8000895DB +:1020E00080914A02813209F074C080914E02909131 +:1020F0004F02892B09F06DC08091E800877F8093A3 +:10210000E8008091E80082FD05C0809149028111BC +:10211000F8CF5FC08091F10080937A018091E80050 +:102120008B7753C080914A02813A09F052C0809166 +:102130004E0290914F02892B09F04BC08091E8002C +:10214000877F8093E8008091E80080FFFCCF80913A +:102150000C0136C080914A028132D9F580914E023D +:1021600090914F02892BA9F58091E800877F809399 +:10217000E8000E94D81280914C0280930C010C94CC +:102180000E1B80914A02813221F58091E800877F01 +:102190008093E8000E94D81280914D0280937B01C9 +:1021A000089580914A02813AA1F48091E800877FE6 +:1021B0008093E8008091E80080FFFCCF80917B0154 +:1021C0008093F1008091E8008E778093E8000C9472 +:1021D000D812089584B7877F84BF88E10FB6F8943A +:1021E00080936000109260000FBE90E080E80FB610 +:1021F000F89480936100909361000FBE0E947B165B +:102200000E9429130E9486138091E20084608093CB +:10221000E20078940E940C160E947D1682E091E004 +:102220000E94271680914902853069F40E9444215A +:10223000809147028823B1F30E947221882391F391 +:102240000E947E11EFCF0E948516ECCF292F3327F5 +:1022500023303105C9F064F42130310581F022309A +:10226000310509F043C084E590E025E136E042C045 +:1022700021323105F1F02232310541F137C082E1DE +:1022800090E029E636E036C099278130910541F08B +:102290008230910541F0892B49F5E1E1F6E005C076 +:1022A000E3EEF5E002C0E9EBF5E0849190E09F01F8 +:1022B00021C06330D8F4E62FF0E0EE0FFF1FE25D9F +:1022C000FE4F2081318189E090E014C0633070F4CA +:1022D00070E0FB01EE0FFF1FE85DFE4F20813181B2 +:1022E000FB01EB5DFE4F808190E004C080E090E058 +:1022F00020E030E0FA0131832083089580E189BD38 +:1023000082E189BD09B400FEFDCF8091D8008F7DA8 +:102310008093D8008091E00082608093E0008091FB +:10232000E00081FDFCCF0895CF92DF92EF92FF9203 +:102330000F931F93CF93DF93EC018B016A010E94EF +:10234000F712811133C0C114D10439F0F601808134 +:102350009181081B190BC80FD91FE12CF12C011515 +:10236000110519F18091E80085FD16C08091E80003 +:102370008E778093E800C114D10449F0F601808182 +:102380009181E80EF91EF182E08285E00FC00E9483 +:10239000F712882321F30AC089918093F10001503C +:1023A0001109FFEFEF1AFF0ADACF80E0DF91CF913A +:1023B0001F910F91FF90EF90DF90CF9008952091A3 +:1023C0005002309151022617370748F06115710508 +:1023D00039F42091E8002E772093E80001C0B9017C +:1023E00040E061157105A9F120914902222309F409 +:1023F00043C0253009F442C02091E80023FD40C0CD +:102400002091E80022FD32C02091E80020FFE9CFB2 +:102410004091F3002091F20030E0342BFC01CF0119 +:102420006115710559F02830310540F48191809390 +:10243000F100615071092F5F3F4FF1CF41E028302B +:10244000310509F040E02091E8002E772093E80064 +:10245000C8CF4111C9CF0AC080914902882361F0D9 +:10246000853061F08091E80083FD0AC08091E8002A +:1024700082FFF2CF80E0089582E0089583E008951E +:1024800081E00895209150023091510226173707BC +:1024900048F06115710539F42091E8002E772093FA +:1024A000E80001C0B901FC0120E06115710591F15E +:1024B00080914902882309F440C0853009F43FC067 +:1024C0008091E80083FD3DC08091E80082FD2FC02F +:1024D0008091E80080FFE9CF2091F3008091F20025 +:1024E00090E0922B6115710559F08830910540F408 +:1024F00024912093F1003196615071090196F2CF39 +:1025000021E0089709F020E08091E8008E77809321 +:10251000E800CBCF2111CCCF0AC08091490288239B +:1025200061F0853061F08091E80083FD0AC0809100 +:10253000E80082FFF2CF80E0089582E0089583E012 +:10254000089581E00895982F973058F59093E90009 +:10255000981739F07091EC002091ED005091F00047 +:1025600003C0242F762F50E021FF19C03091EB00DB +:102570003E7F3093EB003091ED003D7F3093ED00D6 +:102580003091EB0031603093EB007093EC002093BE +:10259000ED005093F0002091EE0027FF07C09F5FF1 +:1025A000D3CF8F708093E90081E0089580E0089593 +:1025B00080914A0287FF11C08091E80082FD05C02A +:1025C000809149028111F8CF11C08091E8008B778A +:1025D0000BC080914902882349F08091E80080FF78 +:1025E000F8CF8091E8008E778093E80008952091DD +:1025F000E4003091E50095E64091EC00842F817075 +:1026000040FF22C08091E80080FD1CC080914902FB +:10261000882391F0853091F08091EB0085FD10C00A +:102620004091E4005091E5004217530729F39A01C5 +:10263000915011F784E0089582E0089583E00895B1 +:1026400081E0089580E008954091E80042FFDECFE8 +:1026500008950E9497130E949F13E0EEF0E080819E +:1026600081608083E8EDF0E080818F77808319BC02 +:10267000A7EDB0E08C918E7F8C9380818F7E8083DC +:102680001092480208950F931F93CF93DF930E94F7 +:1026900097130E949F13C8EDD0E088818F778883BD +:1026A00088818068888388818F7D888319BC109297 +:1026B000490210924502109247021092460200EE23 +:1026C00010E0F80180818B7F80838881816088831E +:1026D00042E060E080E00E94A312E1EEF0E0808141 +:1026E0008E7F8083E2EEF0E0808181608083808154 +:1026F00088608083F80180818E7F808388818061FB +:102700008883DF91CF911F910F910895E8EDF0E05C +:1027100080818F7E8083E7EDF0E08081816080831F +:1027200084E082BF81E0809348020C944313E8ED7B +:10273000F0E080818E7F80831092E20008951092F5 +:10274000DA001092E10008951F920F920FB60F92D7 +:1027500011242F933F934F935F936F937F938F93A6 +:102760009F93AF93BF93EF93FF938091E10082FF1C +:102770000BC08091E20082FF07C08091E1008B7F57 +:102780008093E1000E940B168091DA0080FF1FC049 +:102790008091D80080FF1BC08091DA008E7F8093EB +:1027A000DA008091D90080FF0DC080E189BD82E10F +:1027B00089BD09B400FEFDCF81E0809349020E94EB +:1027C000161005C019BC109249020E942410809175 +:1027D000E10080FF19C08091E20080FF15C0809168 +:1027E000E2008E7F8093E2008091E200806180931E +:1027F000E2008091D80080628093D80019BC85E007 +:10280000809349020E9428108091E10084FF30C02B +:102810008091E20084FF2CC080E189BD82E189BD06 +:1028200009B400FEFDCF8091D8008F7D8093D80041 +:102830008091E1008F7E8093E1008091E2008F7EA5 +:102840008093E2008091E20081608093E2008091B9 +:102850004502882311F084E007C08091E30087FDE2 +:1028600002C081E001C083E0809349020E942910E8 +:102870008091E10083FF29C08091E20083FF25C0A1 +:102880008091E100877F8093E10082E0809349029C +:10289000109245028091E1008E7F8093E10080914B +:1028A000E2008E7F8093E2008091E200806180935D +:1028B000E20042E060E080E00E94A3128091F0001C +:1028C00088608093F0000E942710FF91EF91BF91E4 +:1028D000AF919F918F917F916F915F914F913F91B8 +:1028E0002F910F900FBE0F901F9018951F920F926F +:1028F0000FB60F9211242F933F934F935F936F93D3 +:102900007F938F939F93AF93BF93CF93DF93EF9377 +:10291000FF93C091E900CF708091EC00D82FD17067 +:1029200080FDD0E81092E9008091F000877F8093CD +:10293000F00078940E94BA141092E9008091F0009F +:1029400088608093F000CD2BCF70C093E900FF9199 +:10295000EF91DF91CF91BF91AF919F918F917F9137 +:102960006F915F914F913F912F910F900FBE0F90FC +:102970001F9018951F93CF93DF93CDB7DEB7AA971B +:102980000FB6F894DEBF0FBECDBFEAE4F2E088E0F8 +:102990008E0F9091F10091938E13FBCF0E943A100D +:1029A0008091E80083FF1FC180914A0290914B0201 +:1029B000492F50E04A30510508F015C1FA01E25A9A +:1029C000FF4F0C94B528803881F0823809F00BC194 +:1029D00080914E028F708093E9008091EB0085FB1F +:1029E000882780F91092E90006C0809146029091F4 +:1029F0004702911182609091E800977F9093E800E0 +:102A00008093F1001092F100C8C0282F2D7F09F0AB +:102A1000EAC0882319F0823061F0E5C080914C0251 +:102A2000813009F0E0C0933009F080E080934702E4 +:102A30002BC080914C02811127C080914E028F7073 +:102A400009F4D1C08093E9002091EB0020FF1CC065 +:102A5000933021F48091EB00806214C09091EB00E0 +:102A600090619093EB0021E030E0A90102C0440F97 +:102A7000551F8A95E2F74093EA001092EA00809190 +:102A8000EB0088608093EB001092E9008091E800F1 +:102A9000877F86C08111A7C010914C021F7780915B +:102AA000E3008078812B8093E3008091E800877FAA +:102AB0008093E8000E94D8128091E80080FFFCCF4C +:102AC0008091E30080688093E300111102C082E0EE +:102AD00001C083E08093490286C08058823008F0AC +:102AE00082C080914C0290914D028C3D53E095073D +:102AF00079F583E08A838AE289834FB7F894DE010F +:102B0000139620E03EE051E2E32FF0E050935700AF +:102B1000E49120FF03C0E295EF703F5FEF708E2FCE +:102B200090E0EA3010F0C79601C0C0968D939D9357 +:102B30002F5F243149F74FBF8091E800877F809352 +:102B4000E8006AE270E0CE0101960E94DF1114C035 +:102B5000AE014F5F5F4F60914E020E942611BC0193 +:102B6000009709F440C09091E800977F9093E800A7 +:102B700089819A810E9442128091E8008B7780932C +:102B8000E80031C0803879F58091E800877F809334 +:102B9000E800809145028093F1008091E8008E77F3 +:102BA0008093E8000E94D8121EC081111CC0909131 +:102BB0004C029230C0F48091E800877F8093E80057 +:102BC000909345020E94D81280914502811106C05F +:102BD0008091E30087FD02C081E001C084E0809322 +:102BE00049020E942B108091E80083FF0AC0809167 +:102BF000E800877F8093E8008091EB0080628093FB +:102C0000EB00AA960FB6F894DEBF0FBECDBFDF91E2 +:102C1000CF911F9108950895CF9380914902882301 +:102C2000A1F0C091E900CF709091EC00892F8170E4 +:102C300090FD80E8C82B1092E9008091E80083FDA8 +:102C40000E94BA14CF70C093E900CF910895909379 +:102C50008101809380010895E0918001F0918101CC +:102C6000309721F00190F081E02D099480E00895E3 +:102C7000E0918001F0918101309721F00280F38191 +:102C8000E02D09940895E0918001F0918101309741 +:102C900021F00480F581E02D0994089520917E01B2 +:102CA00030917F018217930771F090937F01809399 +:102CB0007E01E0918001F0918101309721F0068042 +:102CC000F781E02D0994089520917C0130917D01D8 +:102CD0008217930771F090937D0180937C01E091BE +:102CE0008001F0918101309721F00084F185E02D81 +:102CF0000994089508950C947A160E94B7210E94B1 +:102D0000B5080E943D220C94D0265F926F927F926C +:102D10008F929F92AF92BF92CF92DF92EF92FF92EB +:102D20000F931F93CF93DF9300D000D01F92CDB7A6 +:102D3000DEB70E94FA089BE8C92E91E0D92E03E085 +:102D400010E0AA24A394B12C502E802F0E94750964 +:102D50004C01F601729062906F0168267926611429 +:102D60007104A1F40150110978F78FEF89838A83E8 +:102D70001B820E94C0218160782F9D838C834981B2 +:102D80005A816B818D810E94351738C08091D8019E +:102D900081FD0E947E092BE030E07501022E02C009 +:102DA000EE0CFF1C0A94E2F7C70186219721892BBC +:102DB00009F129835A828E209F2091E0892809F405 +:102DC00090E09B830E94C0218160782F9D838C833B +:102DD00049815A816B818D810E943517000F111F27 +:102DE000F801ED57FE4F80819181E826F926F182A6 +:102DF000E08204C02150310980F6B4CF0E94112432 +:102E0000109182010E942C161817D1F00E942C16E6 +:102E1000809382010F900F900F900F900F90DF9191 +:102E2000CF911F910F91FF90EF90DF90CF90BF90C7 +:102E3000AF909F908F907F906F905F900C949F08C1 +:102E40000F900F900F900F900F90DF91CF911F91E7 +:102E50000F91FF90EF90DF90CF90BF90AF909F9039 +:102E60008F907F906F905F900895CF93DF93CDB751 +:102E7000DEB72B970FB6F894DEBF0FBECDBF4F83E2 +:102E8000588769877A878B87DE01119686E0FD0176 +:102E900011928A95E9F785E0FE01379601900D922F +:102EA0008A95E1F749815A816B817C818D819E8170 +:102EB0000E94AC1D2B960FB6F894DEBF0FBECDBF9F +:102EC000DF91CF910895CF93882309F4C2C0C82F12 +:102ED000823859F40E942C1681FDBBC089E30E9400 +:102EE00086200E94092189E30CC0833879F40E946E +:102EF0002C1680FDAEC083E50E9486200E94092129 +:102F000083E50E94A320CF910C940921843859F4C1 +:102F10000E942C1682FD9DC087E40E9486200E949C +:102F2000092187E4EECF8CEF8C0F813A48F48C2F87 +:102F30000E94382681118DC08C2F0E948620E3CFFD +:102F400080E28C0F883048F4C77081E001C0880FA0 +:102F5000CA95EAF70E94C220D6CF8BE58C0F83304A +:102F600078F4C53A29F0C63A31F083E890E005C01C +:102F700081E890E002C082E890E0CF910C944E1678 +:102F800088E58C0F833108F064C0C83A39F1C93A3A +:102F900041F1CA3A49F1CB3A51F1CC3A59F1CD3A23 +:102FA00061F1C03B69F1CE3A71F1CF3A79F1C13BA1 +:102FB00081F1C23B89F1C33B91F1C43B99F1C53B1F +:102FC000A1F1C63BA9F1C73BB1F1C83BB9F1C93B7F +:102FD000C1F1CA3BC9F180E090E038C082EE90E0D8 +:102FE00035C089EE90E032C08AEE90E02FC085EBCC +:102FF00090E02CC086EB90E029C087EB90E026C0E3 +:103000008CEC90E023C08DEC90E020C083E891E050 +:103010001DC08AE891E01AC082E991E017C084E9F6 +:1030200091E014C081E292E011C083E292E00EC010 +:1030300084E292E00BC085E292E008C086E292E072 +:1030400005C087E292E002C08AE292E0CF910C9440 +:103050006416CF910895882309F44BC0823859F43F +:103060000E942C1681FF45C089E30E9486200E94A1 +:10307000092189E30CC0833871F40E942C1680FF6B +:1030800038C083E50E9486200E94092183E50E94C2 +:10309000A3200C940921843859F40E942C1682FF35 +:1030A00028C087E40E9486200E94092187E4EFCF90 +:1030B0009CEF980F913A58F390E2980F983050F4A3 +:1030C000877091E001C0990F8A95EAF7892F0E94D5 +:1030D000C820DFCF9BE5980F933020F480E090E08C +:1030E0000C944E16885A833120F480E090E00C94C2 +:1030F00064160895882321F00E94C2200C940921AF +:103100000895882321F00E94C8200C940921089575 +:103110007F928F929F92AF92BF92CF92DF92EF9267 +:10312000FF920F931F93CF93DF931F92CDB7DEB71C +:103130007C01C62E772EFC01058102950F7012814D +:1031400011110E94DF200E947F20882379F0112333 +:1031500069F080E28C0D883048F082E00E9468209F +:103160000E947F2091E0D82ED92601C0D12CE72DD6 +:10317000E295EF70F0E0E859FF4F0C94B528872DE9 +:10318000807F072D0F70882311F00295007F112397 +:1031900089F0002309F499C180E28C0D883020F475 +:1031A000802F0E94C22003C0802F0E94D2200E9444 +:1031B00009218BC18C2D0E942B18002309F4C3C157 +:1031C00080E28C0D883020F4802F0E94C82003C03C +:1031D000802F0E94D8200E940921B5C1872D807FB1 +:1031E000972D9F70803211F4892F03C0892F82950B +:1031F000807FCC2021F0F1E0CF16A1F01DC011237B +:1032000039F0002319F1013009F50E94F2209BC129 +:10321000002319F0013009F496C189830E94F5203A +:10322000898110C1112321F0063008F08CC10EC035 +:10323000053008F088C106C1112359F0002331F090 +:10324000F701958190FF41C19F7095830E947A1884 +:103250007AC1002309F4F6C03EC1872D8695869574 +:10326000837090E0009719F0019761F06CC1112311 +:1032700021F08C2D972D937002C080E090E00E9489 +:103280004E1661C1112321F08C2D972D937002C031 +:1032900080E090E00E94641656C18C2D112319F035 +:1032A0000E94192302C00E9481230E9406244BC160 +:1032B000872D837009F052C0111145C18C2D829564 +:1032C00086958770880F880F9C2D9F70892E912C72 +:1032D000A12CB12C082E04C0880C991CAA1CBB1C64 +:1032E0000A94D2F7C4FE14C00FE010E020E030E0F2 +:1032F000B901A80104C0440F551F661F771F8A95A6 +:10330000D2F7CB01BA01609570958095909503C076 +:1033100060E070E0CB01272D26952695237030E0E4 +:103320002230310569F02330310589F06829792987 +:103330008A299B292130310571F00E94F41E03C1B6 +:10334000682979298A299B290E94101FFCC00E94A4 +:10335000F41EC501B4010E94D81EF5C0112319F056 +:10336000872D817001C08695882309F4ECC08C2DCF +:10337000829586958770880F880F9C2D9F70892E67 +:10338000912CA12CB12C082E04C0880C991CAA1CCD +:10339000BB1C0A94D2F7C4FE14C00FE010E020E07A +:1033A00030E0B901A80104C0440F551F661F771F04 +:1033B0008A95D2F7CB01BA0160957095809590956A +:1033C00003C060E070E0CB01272D26952695237081 +:1033D000422F50E04230510569F04330510589F0E9 +:1033E000682979298A299B294130510571F00E9469 +:1033F000CE1FA9C0682979298A299B290E94EA1F22 +:10340000A2C00E94CE1FC501B4010E94B21F9BC082 +:103410008C2D90E0FC01E05EF109E531F10508F04A +:1034200050C0E858FF4F0C94B5280C2D0F70872D15 +:103430008F71112321F00E944B1F802F07CF0E9414 +:103440006C1F802F0E9481187EC0112341F005302F +:1034500008F079C0872D8F710E94911F74C00630CB +:1034600008F071C0F7CF112339F0872D8F710E94BA +:103470004B1F69C01123C9F3872D8F710E946C1FE8 +:1034800062C0112329F0872D8F710E94361F5BC007 +:103490000E942C1F58C0112351F0172D1F71812F2E +:1034A0000E944B1F63E0812F0E945F204CC081E08F +:1034B0000E946820023008F446C082E00E94682022 +:1034C00042C0112331F0002381F28C2D0E9463173A +:1034D0003AC0002389F28C2D0E942B1834C0472D4E +:1034E0004F706C2DC7010E9495040E94501E2BC086 +:1034F000111129C0472D4F7050E042305105B9F0ED +:103500004CF44115510581F041305105E1F40E9420 +:10351000F82619C04330510569F04430510599F43B +:103520008C2D0E944A270FC00E94E1260CC00E94E9 +:10353000142709C00E94272706C0472D4F706C2D05 +:10354000C7010E94A704DD20F9F00E945B2080FDE6 +:103550001BC0F70112820E9455200E944B1FC70119 +:103560000E94D31A0E9455200F90DF91CF911F9196 +:103570000F91FF90EF90DF90CF90BF90AF909F9012 +:103580008F907F900C946C1F0F90DF91CF911F91C3 +:103590000F91FF90EF90DF90CF90BF90AF909F90F2 +:1035A0008F907F9008950F931F93CF93DF93EC013B +:1035B000888199812B813C81232BB9F09F3F11F4A5 +:1035C0008F3F99F0CE010E94D904882371F0688161 +:1035D00079818A810E9451208C010E9406200E94DC +:1035E000CD1EB801CE010E948818DF91CF911F91A6 +:1035F0000F9108950E94DF200E94EF200E94B420C6 +:103600000E9409210E94B7240E94062480E090E0D5 +:103610000E944E1680E090E00C9464160E94CF2029 +:103620000C94FA1A0E944620292F22952F7030E020 +:103630002C3031054CF42A3031056CF4225031091C +:1036400022303105A8F407C02C30310569F02F3045 +:10365000310551F00DC0803F69F018F4803E40F410 +:1036600009C0843F29F406C093FB882780F9089598 +:1036700080E0089581E00895CF93DF9300D000D0DB +:103680001F92CDB7DEB70F900F900F900F900F9055 +:10369000DF91CF910895CF93DF9300D000D000D079 +:1036A000CDB7DEB726960FB6F894DEBF0FBECDBFFE +:1036B000DF91CF9108951F93CF93DF93C0918B013A +:1036C00016E080918C01C81799F0D0E01C9FF001A2 +:1036D0001D9FF00D1124E357FE4F408151816281FF +:1036E0007381848195810E944B1B2196C770E9CF1D +:1036F000DF91CF911F9108954091BD015091BE017E +:103700006091BF017091C0018091C1019091C2018F +:103710000C944B1B8091C20182958F7009F054C0AC +:103720008091BF01882309F44FC080918B01A09143 +:103730008C016091BD017091BE014091C00150911A +:10374000C101B6E08A1709F43FC090E04115510568 +:10375000C1F17F3F11F46F3FA1F1B89FF001B99F14 +:10376000F00D1124E357FE4F218172132AC02081EE +:10377000621327C02281211124C0238134812417A0 +:10378000350710F421503109241B350B283C310535 +:10379000C0F42091C2012F7020612093C20126E065 +:1037A000289FF001299FF00D1124EE56FE4F8081D5 +:1037B0008F70806180838DEB91E00E94D31A0C940E +:1037C0005B1B01968770BECF0895CF92DF92EF9278 +:1037D000FF920F931F93CF93DF93CDB7DEB762971E +:1037E0000FB6F894DEBF0FBECDBF8C0185E0F801A7 +:1037F000DE011D9601900D928A95E1F7D8014C915A +:1038000011965C91119712966C9112971396CD9028 +:10381000DC9014973091BD017091BE018091C00180 +:103820009091C101009709F46BC17F3F19F43F3FAC +:1038300009F466C1E090BF01EE2009F4C0C02091F8 +:10384000C201C816D90628F0F601E81BF90BCF0112 +:1038500004C0809590958C0D9D1DFF24F394883CA9 +:10386000910578F0F12C207F09F0C6C07C2DD98A13 +:10387000C88A89890E943C1B8DEB91E00E94D31A73 +:10388000B1C0822F807F09F046C0751314C0341375 +:1038900012C0611110C02F7020612093C2010E94DC +:1038A0007C1B8DEB91E00E94D31A8091C201D8015C +:1038B00015968C932EC0CD2819F15F3F11F44F3F20 +:1038C000F9F0F62E61111CC080918B0120918C01C2 +:1038D00036E0821709F45AC090E0389FF001399F12 +:1038E000F00D1124E357FE4F7181571306C070810C +:1038F000471303C07281711103C001968770E9CF2D +:10390000F62E662309F418C18091C201816080936C +:10391000C201F12C11C1751308C0341306C0611126 +:1039200004C08091C201D801C3C04D875E878D85D8 +:103930009E856A8B0E94121B6A898823E1F16623A7 +:10394000D1F12091C201822F82958F7090E0029771 +:1039500074F08091BD019091BE0198878F83198684 +:10396000DB86CA862C87CE0107960E94D31A86E092 +:10397000F801ADEBB1E001900D928A95E1F70E945C +:103980008A1B0E947C1BFF24F394D6C04D875E8760 +:103990008D859E850E944620292F22952F7030E02C +:1039A000223031050CF0BCC09F7009F0B6C0805EBB +:1039B000883008F4C1C0C8010E94D31AE4CFC816E9 +:1039C000D90608F453C0F601E81BF90BCF01883C77 +:1039D000910508F450C0F12C7C2DD98AC88A8989B8 +:1039E0000E943C1BEDEBF1E086E0DF011D928A9521 +:1039F000E9F70E947C1BA0C0751314C0341312C0D9 +:103A0000611110C08091C201F8018583C8010E9434 +:103A1000D31A86E0EDEBF1E0DF011D928A95E9F71C +:103A2000FE2C8AC04D875E878D859E856A8B0E949D +:103A3000121B6A89882309F4BECF662309F4BBCF21 +:103A40002091C201822F82958F7090E002970CF432 +:103A50008ECF8091BD019091BE019A8389831B8294 +:103A6000DD82CC822E83CE0101967FCF809590950A +:103A70008C0D9D1DACCFF62E662309F49CCF7513DB +:103A80002EC034132CC02091C20120FD1FC0822FF4 +:103A900082958F70D9F0D80115962C9315978F3099 +:103AA00049F08F5F982F9295907F822F8F70892B8E +:103AB00015968C93C8010E94D31A86E0F801ADEBED +:103AC000B1E001900D928A95E1F793CF86E0F8017D +:103AD000ADEBB1E001900D928A95E1F72DC04D87D5 +:103AE0005E878D859E850E94121B811140CF80913B +:103AF000C20181608093C201C8010E94D31A1CC018 +:103B0000662309F458CF4D875E878D859E850E9478 +:103B1000121B882309F44FCF2ACF811148CF0CC044 +:103B2000243031050CF047CF9F7009F440CFF801E5 +:103B30009581907F09F03BCF8F2D62960FB6F89458 +:103B4000DEBF0FBECDBFDF91CF911F910F91FF90D0 +:103B5000EF90DF90CF9008951F93CF93DF93CDB771 +:103B6000DEB72C970FB6F894DEBF0FBECDBF4F83E4 +:103B7000588769877A878B879C87CE0107960E9432 +:103B8000E51B882369F08F8198852A853B85232B47 +:103B9000F1F19F3F09F063C08F3F09F060C037C06B +:103BA00086E0FE013796DE01119601900D928A950E +:103BB000E1F76F817885EA85FB85309741F17F3F9A +:103BC00011F46F3F21F120918C0130E0C901019681 +:103BD0008770992740918B0150E08417950709F46D +:103BE00047C069837A83FD83EC8396E0929FD0017E +:103BF000939FB00D1124A357BE4FFE013196019043 +:103C00000D929A95E1F780938C010E945B1B16E060 +:103C100080918B0190918C018917C1F1189FC0018F +:103C2000112483579E4F0E94E51B882379F1E09170 +:103C30008B011E9FF0011124E357FE4F40815181FB +:103C400062817381848195810E944B1B80918B01DD +:103C500090E001968770992780938B01D9CF4F818F +:103C6000588569857A858B859C850E944B1BCFCFB3 +:103C70000E940E1B10928C0110928B01EDEBF1E073 +:103C800086E0DF011D928A95E9F7C1CF2C960FB629 +:103C9000F894DEBF0FBECDBFDF91CF911F91089585 +:103CA000EF92FF920F931F93CF93DF938C010097B6 +:103CB00009F46CC0F12CEE24E394E8012196F8019C +:103CC0008491843740F4843008F051C0813081F011 +:103CD000823019F15BC0853709F444C0A8F19CE734 +:103CE000980F903708F052C08F770E942B1841C070 +:103CF0000E5F1F4FFE01C49180E28C0F883048F4A4 +:103D0000C7708E2D01C0880FCA95EAF70E94E22085 +:103D100014C08C2F0E9463172DC00E5F1F4FFE0131 +:103D2000C49180E28C0F883058F4C7708E2D01C08A +:103D3000880FCA95EAF70E94E8200E9409211AC05C +:103D40008C2F0E942B1816C00E5F1F4FFE01C491CE +:103D5000CC2381F08FE99FE00197F1F700C00000CC +:103D6000C150F6CF0E5F1F4FFE01F49003C00E94BA +:103D700063178E018F2D882309F49FCFEFE9FFE0B1 +:103D80003197F1F700C000008150F5CFDF91CF915E +:103D90001F910F91FF90EF90089508956093C701D0 +:103DA0007093C8018093C9019093CA010C94FA1AC8 +:103DB0000F931F930091C7011091C8012091C90171 +:103DC0003091CA01DC01CB01802B912BA22BB32BAC +:103DD0008093C7019093C801A093C901B093CA0111 +:103DE0001F910F910C94FA1A0F931F930091C70122 +:103DF0001091C8012091C9013091CA01DC01CB01A9 +:103E000080239123A223B3238093C7019093C801F9 +:103E1000A093C901B093CA011F910F910C94FA1A93 +:103E20000F931F930091C7011091C8012091C90100 +:103E30003091CA01DC01CB0180279127A227B3274B +:103E40008093C7019093C801A093C901B093CA01A0 +:103E50001F910F910C94FA1A1092C3011092C40191 +:103E60001092C5011092C6010C94FA1A41E050E07C +:103E700060E070E004C0440F551F661F771F8A95ED +:103E8000D2F74093C3015093C4016093C50170936E +:103E9000C6010C94FA1A41E050E060E070E004C002 +:103EA000440F551F661F771F8A95D2F78091C30173 +:103EB0009091C401A091C501B091C601482B592B26 +:103EC0006A2B7B2B4093C3015093C4016093C501BF +:103ED0007093C6010C94FA1A41E050E060E070E083 +:103EE00004C0440F551F661F771F8A95D2F740956F +:103EF0005095609570958091C3019091C401A091F7 +:103F0000C501B091C601482359236A237B234093FE +:103F1000C3015093C4016093C5017093C6010C9412 +:103F2000FA1A41E050E060E070E004C0440F551F11 +:103F3000661F771F8A95D2F78091C3019091C401C3 +:103F4000A091C501B091C601482759276A277B2750 +:103F50004093C3015093C4016093C5017093C6019F +:103F60000C94FA1A0F931F930091C3011091C4018E +:103F70002091C5013091C601DC01CB01802B912B32 +:103F8000A22BB32B8093C3019093C401A093C501CE +:103F9000B093C6011F910F910C94FA1A0F931F93BF +:103FA0000091C3011091C4012091C5013091C60157 +:103FB000DC01CB0180239123A223B3238093C3018F +:103FC0009093C401A093C501B093C6011F910F91B6 +:103FD0000C94FA1A0F931F930091C3011091C4011E +:103FE0002091C5013091C601DC01CB0180279127CA +:103FF000A227B3278093C3019093C401A093C50166 +:10400000B093C6011F910F910C94FA1A0895CF92A4 +:10401000DF92EF92FF920F931F93CF93DF938C0168 +:10402000C090C701D090C801E090C901F090CA01CA +:104030008091C3019091C401A091C501B091C601C6 +:10404000C82AD92AEA2AFB2ACFE1D0E0D701C60143 +:104050000C2E04C0B695A795979587950A94D2F72C +:1040600080FF06C0B8018C2F0E940508019721F43B +:10407000219760F780E001C08C2FDF91CF911F91D5 +:104080000F91FF90EF90DF90CF900895CF93DF9343 +:10409000EC010E940720BE010E940508DF91CF912C +:1040A0000895CB010E94462008958091CB0185950B +:1040B0008595859508958091CB018770089598E046 +:1040C000899F90011124262B2093CB010C944B1F28 +:1040D0002091CB01809582238093CB01982F9770FC +:1040E00069F430E0482F552747FD509524173507D0 +:1040F00029F08595859585950C946C1F0895909170 +:10410000CB01977081E009F480E0089520910D01C2 +:1041100030910E01F90132969FEF40E0519158170E +:1041200089F09F3F19F4511101C0942F4F5F463021 +:10413000A9F79F3F39F0F901E90FF11D97FDFA95B5 +:1041400082830895089520910D0130910E01F901A7 +:104150003296285F3F4F9081981301C010823196AC +:10416000E217F307C1F7089581E090E0E0910D01B7 +:10417000F0910E01E80FF91F108201968830910529 +:10418000A9F708959091D701892B8093D7010895BD +:1041900080959091D70189238093D701089510923B +:1041A000D70108959091D601892B8093D601089567 +:1041B00080959091D60189238093D601089510921D +:1041C000D60108959091D501892B8093D50108954A +:1041D00080959091D50189238093D50108951092FF +:1041E000D50108958093CC0108951092CC010895D3 +:1041F00080910D0190910E01FC0131969C01285F88 +:104200003F4F80E0919191118F5FE217F307D1F753 +:104210000895E0910D01F0910E018091D701808306 +:10422000E0910D01F0910E0190818091D601892BD2 +:104230008083E0910D01F0910E0190818091D50174 +:10424000892B80838091CC01882361F0E0910D015E +:10425000F0910E019081892B80830E94F8208111BA +:104260001092CC0180910D0190910E010C943816A2 +:1042700020E0009739F0AC01415051098423952387 +:104280002F5FF7CF822F089580914902843039F152 +:104290001092D90120E488E190E00FB6F894A89537 +:1042A000809360000FBE2093600080E00E94FA03BC +:1042B00080E00E949F0883B7817F846083BF83B7BB +:1042C000816083BF7894889583B78E7F83BF88E1B0 +:1042D0000FB6F89480936000109260000FBE0895AE +:1042E0000895089580E00E94FA030E9470210E94C0 +:1042F000FA080E9471210E947F0991E0811101C09A +:1043000090E0892F08950E940E1B80E00E94FA031E +:104310000E94D0260E942C160C949F081F920F9288 +:104320000FB60F9211248F939F93AF93BF938091F9 +:10433000D901811113C08091DA019091DB01A09124 +:10434000DC01B091DD014196A11DB11D8093DA0120 +:104350009093DB01A093DC01B093DD01BF91AF919D +:104360009F918F910F900FBE0F901F90189582E034 +:1043700084BD93E095BD9AEF97BD80936E0008953C +:104380002FB7F8948091DA019091DB01A091DC01C4 +:10439000B091DD012FBF0895CF92DF92EF92FF928F +:1043A0000F931F932FB7F8944091DA015091DB01DE +:1043B0006091DC017091DD012FBF6A017B01EE2469 +:1043C000FF248C0120E030E0C016D106E206F3069F +:1043D00010F4415051099A01281B390BC9011F9152 +:1043E0000F91FF90EF90DF90CF9008951F920F9262 +:1043F0000FB60F9211248F939F93AF93BF93809129 +:10440000DA019091DB01A091DC01B091DD01019610 +:10441000A11DB11D8093DA019093DB01A093DC0113 +:10442000B093DD01BF91AF919F918F910F900FBE1F +:104430000F901F9018950E942913F8942FEF87EA88 +:1044400091E6215080409040E1F700C0000087E0F5 +:1044500090EBDC018093540290935502A093560296 +:10446000B09357029CE088E10FB6F894A89580932A +:1044700060000FBE90936000FFCF0E9472228111F6 +:1044800002C00E9453220E947D228093D8010E9484 +:104490008522809352020E948122682F70E080E082 +:1044A00090E00C94CE1E6DEE7EEF80E090E00E94D6 +:1044B000ED2860E082E090E00E94CF2860E083E099 +:1044C00090E00E94CF2860E084E090E00E94CF2836 +:1044D00060E085E090E00E94CF2860E086E090E018 +:1044E0000C94CF2880E090E00E94C92821E08D3E06 +:1044F0009E4F09F020E0822F089582E090E00C9416 +:10450000BB2883E090E00C94BB2884E090E00C94FE +:10451000BB28682F84E090E00C94CF2886E090E0E0 +:104520000C94BB28682F86E090E00C94CF288091F3 +:10453000E00180FF0BC06091120185E0689FB0012F +:10454000112475956795759567952BC081FF09C0F6 +:104550006091120185E0689FB001112475956795FF +:1045600020C082FF07C06091120185E0689FB00102 +:10457000112417C09091E1019923D1F060911101AC +:10458000961788F72091120185E0289F9001112449 +:10459000929FA001939F500D112470E0CA010E94C8 +:1045A000A1286038710540F46115710539F002C029 +:1045B00065E070E0862F08958FE7089581E0089503 +:1045C0008091E00180FF08C06091100170E0759556 +:1045D00067957595679521C081FF06C060911001B0 +:1045E00070E07595679519C082FF04C06091100155 +:1045F00070E010C09091E1019923C1F060910F012A +:104600009617A0F780911001899FC001112470E0D6 +:104610000E94A1286038710528F46115710521F008 +:10462000862F08958FE7089581E0089561E070E096 +:10463000F4CF803F21F40E949722819504C0813FEE +:1046400029F40E9497228093E4010895823F21F487 +:104650000E949722819504C0833F29F40E949722EB +:104660008093E3010895893F19F40E94E02205C078 +:104670008A3F31F40E94E02281958093E5010895FC +:104680008B3F21F40E94E022819504C08C3F29F4E5 +:104690000E94E0228093E6010895843F21F48091F6 +:1046A000E201816017C0853F21F48091E2018260C0 +:1046B00011C0863F21F48091E20184600BC0873FE6 +:1046C00021F48091E201886005C0883F31F4809137 +:1046D000E20180618093E20108958D3F21F4809191 +:1046E000E00181600BC08E3F21F48091E001826087 +:1046F00005C08F3F29F48091E00184608093E00140 +:104700000895803F39F48091E40187FF6CC01092D6 +:10471000E40169C0813F29F48091E4011816BCF3DB +:1047200062C09091E301823F29F497FF5CC0109230 +:10473000E30159C0833F19F41916CCF354C0893FE3 +:1047400041F48091E50118160CF04DC01092E5017E +:104750004AC08A3F29F48091E50187FF44C0F6CF23 +:104760008B3F39F48091E60187FF3DC01092E6014E +:104770003AC08C3F29F48091E6011816BCF333C08F +:10478000843F21F48091E2018E7F17C0853F21F4A0 +:104790008091E2018D7F11C0863F21F48091E2017A +:1047A0008B7F0BC0873F21F48091E201877F05C09A +:1047B000883F31F48091E2018F7E8093E20113C043 +:1047C0008D3F21F48091E0018E7F0BC08E3F21F45C +:1047D0008091E0018D7F05C08F3F29F48091E00139 +:1047E0008B7F8093E0018091E30181110EC0809165 +:1047F000E40181110AC08091E501811106C0809118 +:10480000E601811102C01092E101089582EE91E06B +:104810000E9443160E94C0219093DF018093DE0125 +:1048200008951F93CF93DF938091DE019091DF0174 +:104830000E94CC21AC019091E101992321F02091BB +:10484000130130E006C0209114018AE0289F9001F6 +:1048500011244217530708F486C08091E301C091E8 +:10486000E401D091E5011091E601811107C0C11169 +:1048700076C0D11174C0111172C075C09F3F19F07C +:104880009F5F9093E101181624F40E949722809371 +:10489000E3018091E30187FF05C00E949722819583 +:1048A0008093E3011C1624F40E9497228093E40174 +:1048B0008091E40187FF05C00E9497228195809333 +:1048C000E4016091E301662339F1C091E401CC2356 +:1048D00019F1772767FD7095872F972F0E949E27E4 +:1048E00023E333E343E35FE30E9402280E946B2744 +:1048F0006093E3016C2F772767FD7095872F972FC3 +:104900000E949E2723E333E343E35FE30E940228F0 +:104910000E946B276093E4011D1624F40E94E0229C +:104920008093E5018091E50187FF05C00E94E022A8 +:1049300081958093E501111624F40E94E022809372 +:10494000E6018091E60187FF05C00E94E022819583 +:104950008093E601DF91CF911F910C9406249F3F35 +:1049600009F08ECF96CFDF91CF911F910895E2EE9F +:10497000F1E085E0DF011D928A95E9F71092E101EF +:104980001092E0010895833081F128F4813059F0CC +:104990008230D1F00895853009F449C0B8F18630ED +:1049A00009F456C0089580911401262F30E0280F95 +:1049B000311D2F3F310524F4680F609314010895D1 +:1049C0008FEF80931401089580911301262F30E01A +:1049D000280F311D2F3F310524F4680F6093130118 +:1049E00008958FEF80931301089580911201262F6F +:1049F00030E0280F311D2F3F310524F4680F6093FC +:104A0000120108958FEF8093120108958091110192 +:104A1000262F30E0280F311D2F3F310524F4680F79 +:104A20006093110108958FEF809311010895809193 +:104A30001001262F30E0280F311D2F3F310524F4BF +:104A4000680F6093100108958FEF8093100108950F +:104A500080910F01262F30E0280F311D2F3F3105A7 +:104A600024F4680F60930F0108958FEF80930F0176 +:104A70000895833011F128F4813049F0823091F0AB +:104A80000895853081F120F18630C1F1089580913B +:104A90001401681720F4861B809314010895109266 +:104AA0001401089580911301681720F4861B8093E8 +:104AB000130108951092130108958091120168174F +:104AC00020F4861B8093120108951092120108951C +:104AD00080911101681720F4861B809311010895BD +:104AE00010921101089580911001681720F4861B1F +:104AF00080931001089510921001089580910F0184 +:104B0000681720F4861B80930F01089510920F01FF +:104B100008950F931F938732D8F58E3108F085C022 +:104B20008E3009F46FC098F4873009F459C08B3087 +:104B300009F48FC0863009F093C08091D801817F3D +:104B40008E7F8093D80181E08093E8018AC086310E +:104B500009F47FC068F4803109F082C08091D801E7 +:104B600083FB222720F991E0922790FB83F953C021 +:104B7000893109F46EC08B3109F072C08091D8017F +:104B800081FB222720F991E0922790FB81F943C015 +:104B9000883309F45EC050F4893209F45CC085336F +:104BA00009F459C0873209F456C05AC0833409F455 +:104BB00052C028F48A3308F453C0895337C088346C +:104BC00009F04EC00E940E1B0FEF13ED20E30150C1 +:104BD00010402040E1F700C000000E941B2239C0B5 +:104BE0009091D801892F8095817080FB90F929F0F0 +:104BF000966098609093D80134C0997F977F909386 +:104C0000D80127C08091D80182FB222720F991E0AA +:104C1000922790FB82F98093D8019923D1F080915B +:104C2000D80181608093D80114C08D5141E050E0DB +:104C300060E070E08A019B0104C0000F111F221F79 +:104C4000331F8A95D2F7C901B8010E94CE1E0E9477 +:104C50000E1B81E006C061E070E080E090E0F5CFDF +:104C600080E01F910F91089580E0089580E00895FD +:104C7000CF93C82F8091E801813069F018F082301D +:104C8000C9F184C0E0910D01F0910E018081823262 +:104C900009F07EC007C0E0910D01F0910E01808106 +:104CA000823261F48C2F0E943426811104C08C2F33 +:104CB0000E9489251DC081E090E01AC08C2F0E94BF +:104CC0003626811114C0C43179F048F4CB3079F024 +:104CD000C03109F061C082E08093E80108C0C932A8 +:104CE00019F0C83321F058C01092E80155C081E096 +:104CF000817054C0C93291F120F5C43179F1B0F41A +:104D0000C73009F047C08EE18093140182E380939D +:104D100013018AE08093120184E18093110188E0FD +:104D20008093100188E280930F0134C0CE51C630C9 +:104D300088F5EC2FF0E0EC5CFE4F80818093E7017A +:104D400029C0CE34E9F020F4CB3421F56AE013C059 +:104D5000C13579F0C235F1F461E00DC08091E70111 +:104D6000882319F01092E70115C081E08093E801D3 +:104D700015C061E006C08091E7010E94C3240AC00B +:104D80006AE08091E7010E94392504C01092E80191 +:104D900080E004C081E002C080E0AACFCF910895F6 +:104DA0000E947222811102C00E9453220E948E2210 +:104DB0008093530280FF02C0869501C080E00C946E +:104DC000FA0380915302982F9695292F30E02330D3 +:104DD00031054CF49F5F990F8170892B816080931E +:104DE00053020E9492228091530286950C94FA03FA +:104DF00080915302982F969591F09158990F817058 +:104E0000892B809353028E7F91E009F490E080918A +:104E1000530290FB80F9809353020E94922280916A +:104E2000530286950C94FA0380915302982F909523 +:104E300090FB80F9809353020E949222809153024A +:104E400080FF02C0869501C080E00C94FA03909127 +:104E50005302892F86958F5F8F779170843028F465 +:104E6000880F892B8093530202C090935302809144 +:104E700053028E7F91E009F490E08091530290FB01 +:104E800080F9809353020E9492228091530286956A +:104E90000C94FA0320915302922F96958927982F0C +:104EA000990F822F8170892B809353028E7F91E01E +:104EB00009F490E08091530290FB80F980935302B3 +:104EC0000E9492228091530286950C94FA0380915D +:104ED00053028695089504D06894B1118DC0089549 +:104EE00070D088F09F5790F0B92F9927B751A0F054 +:104EF000D1F0660F771F881F991F1AF0BA95C9F76E +:104F000012C0B13081F077D0B1E0089574C0672F3E +:104F1000782F8827B85F39F0B93FCCF3869577951D +:104F20006795B395D9F73EF4909580957095619506 +:104F30007F4F8F4F9F4F0895E89409C097FB3EF431 +:104F400090958095709561957F4F8F4F9F4F9923D6 +:104F5000A9F0F92F96E9BB279395F6958795779554 +:104F60006795B795F111F8CFFAF4BB0F11F460FF14 +:104F70001BC06F5F7F4F8F4F9F4F16C0882311F06C +:104F800096E911C0772321F09EE8872F762F05C080 +:104F9000662371F096E8862F70E060E02AF09A951B +:104FA000660F771F881FDAF7880F9695879597F910 +:104FB000089557FD9058440F551F59F05F3F71F009 +:104FC0004795880F97FB991F61F09F3F79F0879570 +:104FD0000895121613061406551FF2CF4695F1DFF9 +:104FE00008C0161617061806991FF1CF8695710589 +:104FF000610508940895E894BB2766277727CB01BD +:1050000097F908950BD078C069D028F06ED018F0C9 +:10501000952309F05AC05FC01124EECFCADFA0F378 +:10502000959FD1F3950F50E0551F629FF001729F3D +:10503000BB27F00DB11D639FAA27F00DB11DAA1F5C +:10504000649F6627B00DA11D661F829F2227B00DA9 +:10505000A11D621F739FB00DA11D621F839FA00D34 +:10506000611D221F749F3327A00D611D231F849F84 +:10507000600D211D822F762F6A2F11249F575040DB +:105080008AF0E1F088234AF0EE0FFF1FBB1F661F76 +:10509000771F881F91505040A9F79E3F510570F02F +:1050A00014C0AACF5F3FECF3983EDCF3869577956A +:1050B0006795B795F795E7959F5FC1F7FE2B880F2A +:1050C000911D9695879597F9089597F99F6780E8C0 +:1050D00070E060E008959FEF80EC089500240A944A +:1050E0001616170618060906089500240A941216C3 +:1050F0001306140605060895092E0394000C11F4F6 +:10510000882352F0BB0F40F4BF2B11F460FF04C0A2 +:105110006F5F7F4F8F4F9F4F0895AA1BBB1B51E1BD +:1051200007C0AA1FBB1FA617B70710F0A61BB70B17 +:10513000881F991F5A95A9F780959095BC01CD01BC +:10514000089597FB072E16F4009407D077FD09D039 +:105150000E948D2807FC05D03EF4909581959F4FC5 +:105160000895709561957F4F0895EE0FFF1F05908C +:10517000F491E02D0994F999FECF92BD81BDF89A82 +:10518000992780B50895A6E1B0E044E050E00C9482 +:10519000F528A8E1B0E042E050E00C94F528262F75 +:1051A000F999FECF92BD81BDF89A019700B402161D +:1051B00039F01FBA20BD0FB6F894FA9AF99A0FBECB +:1051C00008950396272F0E94D0280E94CF28252FCC +:1051D0000E94D028242F0C94D0280196272F0E94BB +:1051E000D0280C94CF28DC01CB01FC01F999FECF2B +:1051F00006C0F2BDE1BDF89A319600B40D9241505F +:0A5200005040B8F70895F894FFCF6E +:10520A00FFFF580FE60FC30F8F0F5B0F01CD012869 +:10521A0008140A321E1F0F03764F5F6F7F496943D6 +:10522A0079095953633F4D36FE06B1067B062706B8 +:0E523A00400659060102030405060708090094 +:00000001FF -- cgit v1.2.3 From f404124c2664bdcdd64c92926add5beac7826b48 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Tue, 21 Jun 2016 12:36:26 -0400 Subject: Add filler to make layering clearer; KC_TRNS gets used a lot; have the blank _______ mnemonic for it --- keyboard/planck/keymaps/cbbrowne/config.h | 3 +++ keyboard/planck/keymaps/cbbrowne/keymap.c | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/keyboard/planck/keymaps/cbbrowne/config.h b/keyboard/planck/keymaps/cbbrowne/config.h index 2d3df59bd2..d84cd1f95d 100644 --- a/keyboard/planck/keymaps/cbbrowne/config.h +++ b/keyboard/planck/keymaps/cbbrowne/config.h @@ -9,6 +9,9 @@ #define randmul 181 #define randmod 167 +/* Filler to make layering a bit clearer */ +#define _______ KC_TRNS + #endif diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 14a5be1708..172e68efbc 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -1,6 +1,6 @@ #include "planck.h" #ifdef BACKLIGHT_ENABLE - #include "backlight.h" +#include "backlight.h" #endif #include "config.h" #include "quantum.h" @@ -89,15 +89,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, [_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(_KP), DF(_KP), 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} + {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, 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(_KP), DF(_KP), RESET, KC_TRNS}, - {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, + {_______, DF(_KP), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KP] = { /* Key Pad */ {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, -- cgit v1.2.3 From 28942b3ba7868e3b99ea02c81076fdead1ea52fe Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Tue, 21 Jun 2016 12:45:38 -0400 Subject: Improve docs a bit --- keyboard/planck/keymaps/cbbrowne/config.h | 4 +++- keyboard/planck/keymaps/cbbrowne/keymap.c | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboard/planck/keymaps/cbbrowne/config.h b/keyboard/planck/keymaps/cbbrowne/config.h index d84cd1f95d..58cd2cc5bc 100644 --- a/keyboard/planck/keymaps/cbbrowne/config.h +++ b/keyboard/planck/keymaps/cbbrowne/config.h @@ -9,7 +9,9 @@ #define randmul 181 #define randmod 167 -/* Filler to make layering a bit clearer */ +/* Filler to make layering a bit clearer * + * borrowed from basic keymap */ + #define _______ KC_TRNS #endif diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 172e68efbc..b6a98aa8c7 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -86,6 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_LCTL, 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_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_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}, -- cgit v1.2.3 From 2d314810086684883329af730d8f5e8ecd0506b0 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Tue, 21 Jun 2016 12:55:24 -0400 Subject: More notes --- keyboard/planck/keymaps/cbbrowne/keymap.c | 1 + keyboard/planck/keymaps/cbbrowne/readme.md | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index b6a98aa8c7..55385acd6b 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -108,6 +108,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; +/* What is fn_actions actually used for??? */ const uint16_t PROGMEM fn_actions[] = { }; diff --git a/keyboard/planck/keymaps/cbbrowne/readme.md b/keyboard/planck/keymaps/cbbrowne/readme.md index c676dd2c1c..5f08530f46 100644 --- a/keyboard/planck/keymaps/cbbrowne/readme.md +++ b/keyboard/planck/keymaps/cbbrowne/readme.md @@ -62,3 +62,17 @@ doing sundry experimentation: and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. * I needed to swap ' and ENTER + +4. TODO +--------------------------------------------------------- + + * I use tmux quite a lot; the mollat keymap seems to have some + interesting helpers. It might be interesting to add a "tmux + layer" + * The mollat tmux layer also suggests some thoughts about Emacs + helpers. + * I do not presently have anything that handles X11 screen + switching, as with Control-Alt-various + + + -- cgit v1.2.3 From 0cd017d485f19a2c9ce5e8df3535d44958664ea7 Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Wed, 22 Jun 2016 16:51:25 -0400 Subject: Use Space Cadet parens on LSFT --- keyboards/planck/keymaps/cbbrowne/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 55385acd6b..6ce4fd0e7a 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -84,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_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_LCTL, 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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT }, {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, -- cgit v1.2.3 From 5988820c99e18e705ddc38dfa3e3487cf0645c26 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:03:01 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 70 +++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index 8f6dba45e9..c556d35990 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,3 +1,73 @@ + +* Keymap + +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | + * |--------+------+------+------+------+------| 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| Bksp |------| |------| Tab |Enter | + * |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| + * `--------------------' `----------------------' + */ + +/* 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 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ + + # ErgoDox EZ Default Configuration ## Changelog -- cgit v1.2.3 From 521a56f5eb0985debc4729a44006a35f868a6014 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:05:59 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index c556d35990..da50731aee 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,28 +1,28 @@ -* Keymap +# Keymap -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | - * |--------+------+------+------+------+------| 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| Bksp |------| |------| Tab |Enter | - * |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| - * `--------------------' `----------------------' - */ +## Keymap 0: Basic layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | + |--------+------+------+------+------+------| 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| Bksp |------| |------| Tab |Enter | + |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| + `--------------------' `----------------------' +``` /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. -- cgit v1.2.3 From b43b8bdd17af88231793460006a14f6312635af3 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:20:19 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index da50731aee..b382e89167 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,6 +1,19 @@ +# Introduction -# Keymap +## Motivation +I created this keymap in an attempt to optimize my typing experience in text editors and the command-line. + +More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. + +## Changes +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. +## Caveats +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard][https://github.com/adereth/dactyl-keyboard], which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are +* I have relatively large hands (I guarantee you there's no problem; I guarantee you) + +# Keymap ## Keymap 0: Basic layer ``` ,--------------------------------------------------. ,--------------------------------------------------. -- cgit v1.2.3 From c72c9a7375a96e767071209c5bece652afd3788c Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:21:27 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index b382e89167..fb7aeb64a2 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -9,7 +9,7 @@ More specifically, I wanted to have each modifier key controlled by the thumbs, The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. ## Caveats -I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard][https://github.com/adereth/dactyl-keyboard], which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: * I use DCS keycaps with SA Row 3 keycaps where the Alt keys are * I have relatively large hands (I guarantee you there's no problem; I guarantee you) -- cgit v1.2.3 From ce5e41d362a0f55b0206d505f752aff782cb1c21 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:31:37 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 99 +++++++++++++++---------------- 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index fb7aeb64a2..e23c67df1a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -6,12 +6,16 @@ I created this keymap in an attempt to optimize my typing experience in text edi More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. ## Changes -The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. ## Caveats +### Thumb Cluster Range I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: * I use DCS keycaps with SA Row 3 keycaps where the Alt keys are -* I have relatively large hands (I guarantee you there's no problem; I guarantee you) +* I have relatively large hands (I guarantee you there's no problem - I guarantee you) + +### Dangerous positioning +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtation in which disaster could occur with one fell swoop of a keypress. # Keymap ## Keymap 0: Basic layer @@ -36,58 +40,53 @@ I've heard many complaints about the thumb clusters. I agree that the three outt `--------------------' `----------------------' ``` -/* 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 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ +## 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 | = | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` +## Keymap 2: Media and mouse keys +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | MsUp | | | | | | | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | | Prev | Next | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | |VolUp |VolDn | Mute | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | |Brwser| + | | |------| |------| |Back | + | | | | | | | | + `--------------------' `--------------------' +``` # ErgoDox EZ Default Configuration -## Changelog - -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: +As of Feb 2, 2016, the default ErgoDox EZ keymap is: ![Default](default_highres.png) -- cgit v1.2.3 From aea8d4371605600c9cbb224e7aac8a3f2bc7622c Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:32:51 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index e23c67df1a..0de7d3646a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -15,7 +15,7 @@ I've heard many complaints about the thumb clusters. I agree that the three outt * I have relatively large hands (I guarantee you there's no problem - I guarantee you) ### Dangerous positioning -I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtation in which disaster could occur with one fell swoop of a keypress. +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. # Keymap ## Keymap 0: Basic layer -- cgit v1.2.3 From 17a3dbc1591b6cdd96076b94a9d3648c19f7e2ab Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 3 Jul 2016 14:38:03 +0200 Subject: Integrate mouse keys into function layer, delete mouse layer. --- keyboards/ergodox_ez/keymaps/bepo/keymap.c | 64 ++++++------------------------ 1 file changed, 13 insertions(+), 51 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox_ez/keymaps/bepo/keymap.c index 921a94d63a..5c127ab78e 100644 --- a/keyboards/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboards/ergodox_ez/keymaps/bepo/keymap.c @@ -9,7 +9,6 @@ #define AQWER 3 // alted qwerty compat layer #define FNAV 4 // function / navigation keys #define NUM 5 // numeric keypad keys -#define MSE 6 // mouse keys #define KP_00 0 #define CA_Fx 1 @@ -26,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL| * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | CA_Fx| | | * | Space|LShift|------| |------|RShift|Enter | @@ -40,7 +39,7 @@ BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), + KC_ESC, KC_NO, MO(NUM), KC_SPC, KC_LSHIFT, MO(FNAV), // Right hand @@ -63,7 +62,7 @@ MO(FNAV), KC_RSHIFT, KC_ENTER), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | e | a | y | x | . | k | | | | ' | q | g | h | f | c | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | | | | * | Space|LShift|------| |------|RShift|Enter | @@ -77,7 +76,7 @@ KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), + KC_ESC, KC_NO, MO(NUM), KC_SPC, MO(SQWER), MO(FNAV), // Right hand @@ -100,7 +99,7 @@ MO(FNAV), MO(SQWER), KC_ENTER), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | | | | * | Space|LShift|------| |------|RShift|Enter | @@ -114,7 +113,7 @@ KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON, S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB), KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT), - KC_TRNS, KC_TRNS, + KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // Right hand @@ -137,7 +136,7 @@ KC_TRNS, KC_TRNS, KC_TRNS), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | | | | * | _ |LShift|------| |------|RShift|Enter | @@ -151,7 +150,7 @@ KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), + KC_ESC, KC_NO, MO(NUM), KC_UNDS, MO(SQWER), MO(FNAV), // Right hand @@ -168,9 +167,9 @@ MO(FNAV), MO(SQWER), KC_ENTER), * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | | + * | | Next |LClick| Up |RClick| WhUp |VolDwn| | | PgUp | Home | Up | End | F11 | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | | + * | | Prev | Left | Down | Right|WhDown|------| |------| PgDn | Left | Down | Right| F12 | | * |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------| * | | Undo | Cut | Copy | Paste| | | | | | | | | | | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' @@ -184,8 +183,8 @@ MO(FNAV), MO(SQWER), KC_ENTER), [FNAV] = KEYMAP( // Left hand KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, KC_MS_BTN5, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_VOLU, +KC_NO, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, @@ -236,44 +235,7 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, KC_TRNS, KC_KP_ENTER), -/* Keymap 6: mouse layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | |LClick| Up |RClick| WhUp | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | Left | Down | Right|WhDown| | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | | | | | | | | | | | | | | | | | | - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[MSE] = KEYMAP( -// Left hand -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, 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_TRNS, KC_TRNS, - KC_NO, KC_TRNS, - KC_NO, - KC_NO, KC_TRNS, KC_NO, -// Right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_NO, - KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, -KC_NO, KC_NO, -KC_NO, -KC_NO, KC_TRNS, KC_NO) +KC_NO, KC_TRNS, KC_KP_ENTER) }; const uint16_t PROGMEM fn_actions[] = { -- cgit v1.2.3 From 9aceaaed4cbdf49c12db85cf3ff40a9e762558a6 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 3 Jul 2016 15:51:55 +0200 Subject: Replace the "Ctrl+Alt+Fx" macro I was using to switch terminals without moving hands by a numeric layer switch key like on the left half, for consistency. --- keyboards/ergodox_ez/keymaps/bepo/keymap.c | 54 ++++++++++++------------------ 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox_ez/keymaps/bepo/keymap.c index 5c127ab78e..dd47357998 100644 --- a/keyboards/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboards/ergodox_ez/keymaps/bepo/keymap.c @@ -11,7 +11,6 @@ #define NUM 5 // numeric keypad keys #define KP_00 0 -#define CA_Fx 1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base layer @@ -27,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | CA_Fx| | | + * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' @@ -39,7 +38,7 @@ BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_NO, + KC_ESC, KC_TRNS, MO(NUM), KC_SPC, KC_LSHIFT, MO(FNAV), // Right hand @@ -48,8 +47,8 @@ TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -M(CA_Fx), +KC_TRNS, KC_INS, +MO(NUM), MO(FNAV), KC_RSHIFT, KC_ENTER), /* Keymap 1: QWERTY system compatibility layer * @@ -64,7 +63,7 @@ MO(FNAV), KC_RSHIFT, KC_ENTER), * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | + * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' @@ -76,7 +75,7 @@ KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_NO, + KC_ESC, KC_TRNS, MO(NUM), KC_SPC, MO(SQWER), MO(FNAV), // Right hand @@ -85,8 +84,8 @@ KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -KC_TRNS, +KC_TRNS, KC_INS, +MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), /* Keymap 2: QWERTY shifted system compatibility layer * @@ -101,7 +100,7 @@ MO(FNAV), MO(SQWER), KC_ENTER), * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | + * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' @@ -113,7 +112,7 @@ KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON, S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB), KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT), - KC_TRNS, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // Right hand @@ -138,7 +137,7 @@ KC_TRNS, KC_TRNS, KC_TRNS), * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | + * | | | L_Num| | L_Num| | | * | _ |LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' @@ -150,7 +149,7 @@ KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_NO, + KC_ESC, KC_TRNS, MO(NUM), KC_UNDS, MO(SQWER), MO(FNAV), // Right hand @@ -159,8 +158,8 @@ KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -KC_TRNS, +KC_TRNS, KC_INS, +MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), /* Keymap 4: function / navigation layer * @@ -187,8 +186,8 @@ KC_NO, KC_MS_BTN5, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_VOLU, KC_NO, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, - KC_NO, KC_NO, - KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, // Right hand KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, @@ -196,7 +195,7 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, -KC_NO, KC_NO, +KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO), /* Keymap 5: numeric layer, sends keypad codes @@ -224,18 +223,18 @@ 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, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, - KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, - KC_NO, KC_TRNS, KC_NO, + KC_NO, KC_TRNS, KC_TRNS, // Right hand KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO, KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO, -KC_NO, KC_NO, -KC_NO, -KC_NO, KC_TRNS, KC_KP_ENTER) +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, KC_TRNS, KC_KP_ENTER) }; const uint16_t PROGMEM fn_actions[] = { @@ -251,15 +250,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO( U(KP_0), END ); } break; - case CA_Fx: - if (record->event.pressed) { - layer_on(FNAV); - return MACRO( D(LALT), D(LCTL), END ); - } else { - layer_off(FNAV); - return MACRO( U(LCTL), U(LALT), END ); - } - break; } return MACRO_NONE; }; -- cgit v1.2.3 From 6d195dc60c696d2e07bfe7d098b00598f36fe5a6 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 3 Jul 2016 16:27:08 +0200 Subject: Add a Makefile for the keymap to disable command mode (to keep the keyboard from going into command mode when both Shift keys are hold at the same time) and to allow issuing a simple "make" in the keymap folder to compile it. --- keyboards/ergodox_ez/keymaps/bepo/Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 keyboards/ergodox_ez/keymaps/bepo/Makefile diff --git a/keyboards/ergodox_ez/keymaps/bepo/Makefile b/keyboards/ergodox_ez/keymaps/bepo/Makefile new file mode 100644 index 0000000000..b673c5ce52 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/bepo/Makefile @@ -0,0 +1,9 @@ +# Having a file like this allows you to override Makefile definitions +# for your own particular keymap + +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +COMMAND_ENABLE = no # Commands for debug and configuration + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif -- cgit v1.2.3 From 82edc37238a0f4239da0a6eee74d62773362a2d2 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 3 Jul 2016 16:44:57 +0200 Subject: Move Escape and Insert keys, Escape is now easier to reach (useful for vi). Change the layer switching used to keep a bepo layout on US keyboards. --- keyboards/ergodox_ez/keymaps/bepo/bepo.png | Bin 79747 -> 80838 bytes keyboards/ergodox_ez/keymaps/bepo/keymap.c | 28 ++++++++++++++-------------- keyboards/ergodox_ez/keymaps/bepo/readme.md | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/bepo/bepo.png b/keyboards/ergodox_ez/keymaps/bepo/bepo.png index 3df7aa609f..bde2e2cfac 100644 Binary files a/keyboards/ergodox_ez/keymaps/bepo/bepo.png and b/keyboards/ergodox_ez/keymaps/bepo/bepo.png differ diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox_ez/keymaps/bepo/keymap.c index dd47357998..7c30d58788 100644 --- a/keyboards/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboards/ergodox_ez/keymaps/bepo/keymap.c @@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL| * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | @@ -37,8 +37,8 @@ BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, -TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_TRNS, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + DF(BASE), DF(QWER), MO(NUM), KC_SPC, KC_LSHIFT, MO(FNAV), // Right hand @@ -47,7 +47,7 @@ TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_TRNS, KC_INS, +DF(QWER), DF(BASE), MO(NUM), MO(FNAV), KC_RSHIFT, KC_ENTER), /* Keymap 1: QWERTY system compatibility layer @@ -61,7 +61,7 @@ MO(FNAV), KC_RSHIFT, KC_ENTER), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | e | a | y | x | . | k | | | | ' | q | g | h | f | c | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | @@ -74,8 +74,8 @@ KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL, KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, -KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_TRNS, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + DF(BASE), DF(QWER), MO(NUM), KC_SPC, MO(SQWER), MO(FNAV), // Right hand @@ -84,7 +84,7 @@ KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_TRNS, KC_INS, +DF(QWER), DF(BASE), MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), /* Keymap 2: QWERTY shifted system compatibility layer @@ -98,7 +98,7 @@ MO(FNAV), MO(SQWER), KC_ENTER), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | L_Num| | | * | Space|LShift|------| |------|RShift|Enter | @@ -111,7 +111,7 @@ KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON, S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB), -KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT), +S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -135,7 +135,7 @@ KC_TRNS, KC_TRNS, KC_TRNS), * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| | | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | L_Num| | L_Num| | | * | _ |LShift|------| |------|RShift|Enter | @@ -148,8 +148,8 @@ KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL, KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, -KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, KC_TRNS, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + KC_TRNS, KC_TRNS, MO(NUM), KC_UNDS, MO(SQWER), MO(FNAV), // Right hand @@ -158,7 +158,7 @@ KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_TRNS, KC_INS, +KC_TRNS, KC_TRNS, MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), /* Keymap 4: function / navigation layer diff --git a/keyboards/ergodox_ez/keymaps/bepo/readme.md b/keyboards/ergodox_ez/keymaps/bepo/readme.md index 4a18cd80ff..207b675715 100644 --- a/keyboards/ergodox_ez/keymaps/bepo/readme.md +++ b/keyboards/ergodox_ez/keymaps/bepo/readme.md @@ -27,7 +27,7 @@ Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0". -L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle. +Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle. TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY. -- cgit v1.2.3 From 4cfb262faab653247f4d66d44bf5f3339d82bd36 Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 4 Jul 2016 01:10:40 +0200 Subject: Spellchecking. --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c24d951d8d..02207702c4 100644 --- a/readme.md +++ b/readme.md @@ -570,7 +570,7 @@ Enable the backlight from the Makefile. All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `/.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly. -## `void martix_init_*(void)` +## `void matrix_init_*(void)` This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap. -- cgit v1.2.3 From 477ed703c88822aea62152d62fb2310267edc48f Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Tue, 12 Jul 2016 11:57:05 -0400 Subject: I did not like Space Cadet paren; it jumps in in way too many extra cases --- keyboards/planck/keymaps/cbbrowne/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 6ce4fd0e7a..55385acd6b 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -84,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT}, - {KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, 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_QUOT }, {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, -- cgit v1.2.3 From 8f3cdea35706d03c1049c2d510340360930d70ba Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Wed, 13 Jul 2016 13:17:55 -0700 Subject: Created "teckinesis" keymap folder (Based on "ordinary" keymap by Nicholas Keene) --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 454 +++++++++++++++++++++ .../keymaps/teckinesis/ordinary-base.png | Bin 0 -> 99605 bytes .../keymaps/teckinesis/ordinary-base.txt | 27 ++ .../keymaps/teckinesis/ordinary-media.png | Bin 0 -> 124144 bytes .../keymaps/teckinesis/ordinary-media.txt | 27 ++ .../keymaps/teckinesis/ordinary-special.png | Bin 0 -> 63065 bytes .../keymaps/teckinesis/ordinary-special.txt | 27 ++ .../keymaps/teckinesis/ordinary-symbol.png | Bin 0 -> 103735 bytes .../keymaps/teckinesis/ordinary-symbol.txt | 27 ++ keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 103 +++++ 10 files changed, 665 insertions(+) create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/keymap.c create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.png create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.png create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/readme.md diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c new file mode 100644 index 0000000000..778cbc63cf --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -0,0 +1,454 @@ +#include "ergodox_ez.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols layer +#define MDIA 2 // media layer +#define SPEC 3 // special layer + +#define LCaps 10 // left caps-shift key +#define LSymb 11 // left symbol-shift key +#define LMdia 12 // left media-shift key +#define LSpec 13 // left special-shift key +#define RCaps 14 // right caps-shift key +#define RSymb 15 // right symbol-shift key +#define RMdia 16 // right media-shift key +#define RSpec 17 // right special-shift key + +#define MUL 20 // mouse up left +#define MUR 21 // mouse up right +#define MDL 22 // mouse down left +#define MDR 23 // mouse down right + +/* + * The Ordinary Layout for the Ergodox EZ keyboard, v4 + * + * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com + * + * No rights reserved. This software is in the public domain. + * Credit me if you are friendly but if you're a jerk don't bother. + * + * Details: readme.md + * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/******* Base Layer ******************************************************************************************************** + * + * ,------------------------------------------------------. ,------------------------------------------------------. + * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | + * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| + * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | + * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| + * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | + * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Home | End | | Left | Right| + * ,------|------|------| |------+------+------. + * | | | PgUp | | Up | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | PgDn | | Down | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC +,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC +,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) +,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI + ,KC_HOME,KC_END + ,KC_PGUP + ,KC_BSPC,KC_DEL ,KC_PGDN + // right hand + ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) + ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) + ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_DOWN ,KC_ENT ,KC_SPC + ), + +/******* Symbols Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | + * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| + * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| + * `-----------------------------------' `-------------------------------------' + * ,-------------. ,-------------. + * | Left | Right| | Home | End | + * ,------|------|------| |------+------+------. + * | | | Up | | PgUp | | | + * |Space |Enter |------| |------|BackSp| Del | + * | | | Down | | PgDn | | | + * `--------------------' `--------------------' + */ +[SYMB] = KEYMAP( +// left hand + KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC +,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) +,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_TAB +,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_SPC ,KC_ENT ,KC_DOWN + // right hand + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS + ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS + ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS + ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) + ,KC_HOME ,KC_END + ,KC_PGUP + ,KC_PGDN ,KC_BSPC ,KC_DEL +), + +/******* Media Layer ******************************************************************************************************* + * + * ,---------------------------------------------------------------. ,---------------------------------------------------------------. + * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | + * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| + * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | + * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| + * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | + * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| + * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | + * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' + * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| + * `---------------------------------------------' `---------------------------------------------' + * ,-------------. ,-------------. + * | Stop |Refrsh| | Prev | Next | + * ,------|------|------| |------+------+------. + * |Brwser|Brwser|Search| |VolUp | | | + * |Back | Fwd |------| |------| Stop | Play-| + * | | | Home | |VolDn | | Pause| + * `--------------------' `--------------------' + */ +[MDIA] = KEYMAP( +// left hand + KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC +,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U +,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D +,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 + ,KC_WSTP ,KC_WREF + ,KC_WSCH + ,KC_WBAK ,KC_NO ,KC_WHOM + // right hand + ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS + ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS + ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS + ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS + ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_MPRV ,KC_MNXT + ,KC_VOLU + ,KC_VOLD ,KC_MSTP ,KC_MPLY +), + +/******* Special Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | Esc | | | | | | | | | | | | Bspc | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | RShift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[SPEC] = KEYMAP( +// left hand + KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT + ,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[] = { + // the faux shift keys are implemented as macro taps + [LCaps] = ACTION_MACRO_TAP(LCaps) + ,[LSymb] = ACTION_MACRO_TAP(LSymb) + ,[LMdia] = ACTION_MACRO_TAP(LMdia) + ,[LSpec] = ACTION_MACRO_TAP(LSpec) + ,[RCaps] = ACTION_MACRO_TAP(RCaps) + ,[RSymb] = ACTION_MACRO_TAP(RSymb) + ,[RMdia] = ACTION_MACRO_TAP(RMdia) + ,[RSpec] = ACTION_MACRO_TAP(RSpec) +}; + +uint16_t caps_shift = 0; +uint16_t symb_shift = 0; +uint16_t mdia_shift = 0; + +bool symb_lock = false; +bool mdia_lock = false; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + // There are two shift keys for each layer so we increment a layer_shift var when one + // is pressed and decrement when one is released. If both are pressed at the same time + // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 + // only because sometimes rapid pressing led to irregular events; this way the states + // are self healing during use. + + case LCaps: // both caps-shift keys trigger Left Shift + case RCaps: // so they don't interfere with the magic combo + if (record->event.pressed && !record->tap.count) { + if(++caps_shift > 2) caps_shift = 2; + if(caps_shift == 2) { + register_code(KC_CAPS); + unregister_code(KC_CAPS); + } else if(caps_shift == 1) { + register_code(KC_LSFT); + } + } else { + if(--caps_shift < 0) caps_shift = 0; + if(caps_shift == 0) unregister_code(KC_LSFT); + } + break; + + case LSymb: + if (record->event.pressed) { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } else { + if(--symb_shift < 0) symb_shift = 0; + if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); + } + break; + + case LMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_TAB); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_TAB); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case LSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_GRV); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_GRV); + } else { + layer_off(SPEC); + } + } + break; + + case RSymb: + if (record->event.pressed) { + if (record->tap.count && (!symb_shift) && (!symb_lock)) { + register_code(KC_QUOT); + } else { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } + } else { + if(record->tap.count && symb_shift == 0) { + unregister_code(KC_QUOT); + } else { + if(--symb_shift < 0) symb_shift = 0; + if((!symb_shift) && (!symb_lock)) layer_off(SYMB); + } + } + break; + + case RMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_BSLS); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_BSLS); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case RSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_EQL); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_EQL); + } else { + layer_off(SPEC); + } + } + break; + + // mouse diagonals + + case MUL: // mouse up left + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MUR: // mouse up right + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + case MDL: // mouse down left + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MDR: // mouse down right + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + default: + // none + 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) { + // shift or caps lock turns on red light + if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<\n\n\nTab"], +[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], +[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], +[{y:-0.875,x:5.5},"B",{x:6.5},"N"], +[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], +[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], +[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], +[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], +[{x:2},"Page\n\n\n\n\n\nDown"], +[{r:-30,rx:13,y:-1,x:-3},"Left","Right"], +[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"], +[{x:-3},"Down"] + diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png new file mode 100644 index 0000000000..99e5ed80b1 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt new file mode 100644 index 0000000000..4eccc9f350 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt @@ -0,0 +1,27 @@ +[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], +[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], +[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], +[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], +[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], +[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], +[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], +[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], +[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], +[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], +[{x:2},"Home\n\n\nBrowser"], +[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], +[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], +[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] + diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.png new file mode 100644 index 0000000000..6eecf447ee Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.png differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.txt new file mode 100644 index 0000000000..a08827c6de --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.txt @@ -0,0 +1,27 @@ +[{x:3.5,a:7},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], +[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], +[{y:-0.375,x:3.5},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{x:6.5},""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], +[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], +[{y:-0.75,x:3.5},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{x:6.5},""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], +[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.75,x:0.5},"","",{x:14.5},"",""], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], +[{h:2},"",{h:2},"",""], +[{x:2},""], +[{r:-30,rx:13,y:-1,x:-3},"",""], +[{x:-3},"",{h:2},"",{h:2},""], +[{x:-3},""] + diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png new file mode 100644 index 0000000000..e4de64a96f Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt new file mode 100644 index 0000000000..e199f5c59f --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt @@ -0,0 +1,27 @@ +[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], +[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], +[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], +[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], +[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], +[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], +[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], +[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], +[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], +[{h:2},"Space",{h:2},"Enter","Up"], +[{x:2},"Down"], +[{r:-30,rx:13,y:-1,x:-3},"Home","End"], +[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], +[{x:-3},"Page\n\n\n\n\n\nDown"] + diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md new file mode 100644 index 0000000000..6465cd79e0 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -0,0 +1,103 @@ +# The Ordinary Layout, a familiar and powerful layout # + +The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout. + +The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards. + +Nicholas Keene +ordinarylayout@nicholaskeene.com +no rights reserved, use for any purposes, credit me if you are a nice person + +## The Base Layout ## + +* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh +* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key +* Several dark blue keys double for entry of characters which would typically be in those locations +* The turquoise keys are text navigation and manipulation +* The red keys is Escape and it is always found in that location no matter what + +![Ordinary base layout](ordinary-base.png) + +This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. + +Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. + +The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. + +The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. + +## The Symbols Layer ## + +* The light green keys are the eponymous symbols +* The bright green keys are F-Keys +* The dark green keys constitute a number pad +* The turquoise keys are the *reverse* of the turquoise keys on the base layer + +![Ordinary symbol layout](ordinary-symbol.png) + +The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. + +The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements: + +* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers. +* The slash, backslash, and pipe characters are grouped together as a memory aid. +* The & and | symbols are juxtaposed as a memory aid + +The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. + +Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. + +## The Media Layer ## + +* The dark orange keys on the left move the mouse cursor +* The dark orange keys on the right move the text cursor +* The light orange keys are for scrolling and paging +* The bright green keys are more F-keys +* The dark yellow keys signal Web and Audio applications +* The light yellow keys signal the operating system +* The dark gray keys do nothing in case you bump them by accident + +![Ordinary media layout](ordinary-media.png) + +This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. + +Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. + +Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. + +## Switching Between Layers ## + +In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. + +Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. + +Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. + +## Special Sequences ## + +![Ordinary special layout](ordinary-special.png) + +### Escape ### + +The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. + +The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. + +### Backspace ### + +At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. + +### RShift ### + +The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. + +**** + +The Ordinary Layout for the Ergodox EZ keyboard, v4 + +Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com + +No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. + +Details: readme.md + https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary -- cgit v1.2.3 From 825aead3bdb74effee17d9436d79f2952550b5cf Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Thu, 14 Jul 2016 00:38:00 -0700 Subject: Replaced readme.md with stub (incl. reference to original layout) --- keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 97 ++--------------------- 1 file changed, 5 insertions(+), 92 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md index 6465cd79e0..5d2f1d07d1 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -1,103 +1,16 @@ -# The Ordinary Layout, a familiar and powerful layout # +# teckinesis Layout # -The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout. - -The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards. - -Nicholas Keene -ordinarylayout@nicholaskeene.com -no rights reserved, use for any purposes, credit me if you are a nice person +*A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)* ## The Base Layout ## -* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh -* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key -* Several dark blue keys double for entry of characters which would typically be in those locations -* The turquoise keys are text navigation and manipulation -* The red keys is Escape and it is always found in that location no matter what - -![Ordinary base layout](ordinary-base.png) - -This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. - -Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. - -The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. - -The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. +(placeholder) ## The Symbols Layer ## -* The light green keys are the eponymous symbols -* The bright green keys are F-Keys -* The dark green keys constitute a number pad -* The turquoise keys are the *reverse* of the turquoise keys on the base layer - -![Ordinary symbol layout](ordinary-symbol.png) - -The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. - -The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements: - -* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers. -* The slash, backslash, and pipe characters are grouped together as a memory aid. -* The & and | symbols are juxtaposed as a memory aid - -The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. - -Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. +(placeholder) ## The Media Layer ## -* The dark orange keys on the left move the mouse cursor -* The dark orange keys on the right move the text cursor -* The light orange keys are for scrolling and paging -* The bright green keys are more F-keys -* The dark yellow keys signal Web and Audio applications -* The light yellow keys signal the operating system -* The dark gray keys do nothing in case you bump them by accident - -![Ordinary media layout](ordinary-media.png) - -This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. - -Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. - -Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. - -## Switching Between Layers ## - -In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. - -Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. - -Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. - -## Special Sequences ## - -![Ordinary special layout](ordinary-special.png) - -### Escape ### - -The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. - -The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. - -### Backspace ### - -At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. - -### RShift ### - -The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. - -**** - -The Ordinary Layout for the Ergodox EZ keyboard, v4 - -Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com - -No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. +(placeholder) -Details: readme.md - https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary -- cgit v1.2.3 From b58724543086dc04603d7289c038267779357629 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Thu, 14 Jul 2016 00:39:01 -0700 Subject: Replaced ordinary-base.{png|json} with new base layout. --- .../keymaps/teckinesis/ordinary-base.png | Bin 99605 -> 0 bytes .../keymaps/teckinesis/ordinary-base.txt | 27 -- .../keymaps/teckinesis/teckinesis-base.json | 452 +++++++++++++++++++++ .../keymaps/teckinesis/teckinesis-base.png | Bin 0 -> 94828 bytes 4 files changed, 452 insertions(+), 27 deletions(-) delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.png deleted file mode 100644 index 9c561a10aa..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.txt deleted file mode 100644 index 25731ea2e6..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-base.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5},"#\n3",{x:10.5},"*\n8"], -[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"], -[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"], -[{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"], -[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"], -[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"], -[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"], -[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"], -[{y:-0.875,x:5.5},"G",{x:6.5},"H"], -[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#54d6de",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"], -[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], -[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], -[{y:-0.875,x:5.5},"B",{x:6.5},"N"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], -[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], -[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], -[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], -[{x:2},"Page\n\n\n\n\n\nDown"], -[{r:-30,rx:13,y:-1,x:-3},"Left","Right"], -[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"], -[{x:-3},"Down"] - diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json new file mode 100644 index 0000000000..f1efab2721 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json @@ -0,0 +1,452 @@ +[ + { + "name": "teckinesis", + "author": "Will Wolff-Myren", + "notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n(placeholder)\r\n\r\n## The Symbols Layer ##\r\n\r\n(placeholder)\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea" + }, + [ + { + "x": 3.5 + }, + "#\n3", + { + "x": 10.5 + }, + ")\n0" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "@\n2", + { + "x": 1 + }, + "$\n4" + ], + [ + { + "y": -0.995, + "x": 14 + }, + "(\n9", + { + "x": 1 + }, + "_\n-" + ], + [ + { + "y": -0.8799999999999999, + "x": 5.5 + }, + "%\n5", + "^\n6", + { + "x": 4.5 + }, + "&\n7", + "*\n8" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "!\n1", + { + "x": 14.5 + }, + "+\n=" + ], + [ + { + "y": -0.995, + "c": "#2277ff", + "w": 1.5 + }, + "Media\n\nEsc\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "~\n`\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#cccccc" + }, + "E", + { + "x": 10.5 + }, + "I" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "W", + { + "x": 1 + }, + "R", + { + "x": 8.5 + }, + "U", + { + "x": 1 + }, + "O" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "T", + { + "h": 1.5 + }, + "{\n\n\n\n\n\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n\n\n\n\n\n]", + "Y" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "Q", + { + "x": 14.5 + }, + "P" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "w": 1.5 + }, + "Symbols\n\n?\n/\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "|\n\\\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#cccccc" + }, + "D", + { + "x": 10.5 + }, + "K" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "S", + { + "x": 1 + }, + "F", + { + "x": 8.5 + }, + "J", + { + "x": 1 + }, + "L" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "G", + { + "x": 6.5 + }, + "H" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "A", + { + "x": 14.5 + }, + ":\n;" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.6299999999999999, + "x": 6.5, + "c": "#54d6de", + "fa": [ + 0, + 0, + 0, + 1 + ], + "h": 1.5 + }, + "< Tab\n\n\nShift Tab", + { + "x": 4.5, + "h": 1.5 + }, + "Tab >\n\n\nTab" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#cccccc" + }, + "C", + { + "x": 10.5 + }, + "<\n," + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "X", + { + "x": 1 + }, + "V", + { + "x": 8.5 + }, + "M", + { + "x": 1 + }, + ">\n." + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "B", + { + "x": 6.5 + }, + "N" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "Z", + { + "x": 14.5 + }, + "?\n/" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "w": 1.5 + }, + "Ctrl", + { + "x": 16.5, + "w": 1.5 + }, + "Ctrl" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#77aaff" + }, + "Option\n\n\nLAlt", + { + "x": 10.5 + }, + "Option\n\n\nRAlt" + ], + [ + { + "y": -0.875, + "x": 2.5, + "f": 3 + }, + "Hyper\n\n}\n]", + { + "x": 1 + }, + "Cmd\n\n\nSuper", + { + "x": 8.5, + "fa": [ + 5, + 0, + 0, + 1, + 0, + 0, + 0 + ] + }, + "\n\n\nSuper", + { + "x": 1, + "fa": [ + 5, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + "\n\n~\n`\n\n\nHyper" + ], + [ + { + "y": -0.75, + "x": 0.5, + "f": 2 + }, + "Print\n\n\n\n\n\nScreen", + { + "f": 3 + }, + "Meh\n\n{\n[", + { + "x": 14.5, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + }, + "\n\n\"\n'\n\n\nMeh" + ], + [ + { + "y": -0.9950000000000001, + "x": 18, + "f": 2 + }, + "Special\n\n\n\n\n\nShift" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#54d6de", + "f": 3 + }, + "Home", + "End" + ], + [ + { + "fa": [ + 0, + 0, + 0, + 1 + ], + "h": 2 + }, + "< Del\n\n\nBackspace", + { + "h": 2 + }, + "Del >\n\n\nDelete", + "Page\n\n\n\n\n\nUp" + ], + [ + { + "x": 2 + }, + "Page\n\n\n\n\n\nDown" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Left", + "Right" + ], + [ + { + "x": -3 + }, + "Up", + { + "h": 2 + }, + "Enter", + { + "h": 2 + }, + "Space" + ], + [ + { + "x": -3 + }, + "Down" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png new file mode 100644 index 0000000000..f1a5eda0d1 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png differ -- cgit v1.2.3 From 1b776f0f339032bc6990269e24f35dc2153adae6 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Thu, 14 Jul 2016 01:03:45 -0700 Subject: Replaced ordinary-symbol.{png|json} with new base layout. --- .../keymaps/teckinesis/ordinary-symbol.png | Bin 103735 -> 0 bytes .../keymaps/teckinesis/ordinary-symbol.txt | 27 -- keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 4 +- .../keymaps/teckinesis/teckinesis-symbol.json | 428 +++++++++++++++++++++ .../keymaps/teckinesis/teckinesis-symbol.png | Bin 0 -> 97055 bytes 5 files changed, 430 insertions(+), 29 deletions(-) delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png deleted file mode 100644 index e4de64a96f..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt deleted file mode 100644 index e199f5c59f..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-symbol.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], -[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], -[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], -[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], -[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], -[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], -[{h:2},"Space",{h:2},"Enter","Up"], -[{x:2},"Down"], -[{r:-30,rx:13,y:-1,x:-3},"Home","End"], -[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], -[{x:-3},"Page\n\n\n\n\n\nDown"] - diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md index 5d2f1d07d1..e4881dbbfd 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -4,11 +4,11 @@ ## The Base Layout ## -(placeholder) +![teckinesis base layout](teckinesis-base.png) ## The Symbols Layer ## -(placeholder) +![teckinesis symbols layout](teckinesis-symbol.png) ## The Media Layer ## diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json new file mode 100644 index 0000000000..052c23da5a --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json @@ -0,0 +1,428 @@ +[ + { + "name": "teckinesis (Symbols Layer)", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea" + }, + [ + { + "x": 3.5, + "c": "#99de2a" + }, + "F3", + { + "x": 10.5 + }, + "F10" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "F2", + { + "x": 1 + }, + "F4" + ], + [ + { + "y": -0.995, + "x": 14 + }, + "F9", + { + "x": 1 + }, + "F11" + ], + [ + { + "y": -0.8799999999999999, + "x": 5.5 + }, + "F5", + "F6", + { + "x": 4.5 + }, + "F7", + "F8" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "F1" + ], + [ + { + "y": -0.995, + "c": "#2277ff", + "w": 1.5 + }, + "Media\n\nEsc\n\n\n\nShift", + { + "x": 15.5, + "c": "#99de2a" + }, + "F12", + { + "c": "#2277ff", + "w": 1.5 + }, + "\n\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#bbddbb" + }, + "{", + { + "x": 10.5, + "c": "#89b087" + }, + "8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "@", + { + "x": 1 + }, + "}", + { + "x": 8.5, + "c": "#89b087" + }, + "7", + { + "x": 1 + }, + "9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "&", + { + "h": 1.5 + }, + "<", + { + "x": 4.5, + "h": 1.5 + }, + ">", + "|" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "!", + { + "x": 14.5, + "c": "#89b087" + }, + "/" + ], + [ + { + "y": -0.9950000000000001, + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#bbddbb", + "t": "#000000" + }, + "(", + { + "x": 10.5, + "c": "#89b087" + }, + "5" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "$", + { + "x": 1 + }, + ")", + { + "x": 8.5, + "c": "#89b087" + }, + "4", + { + "x": 1 + }, + "6" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "`", + { + "x": 6.5 + }, + "/" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "#", + { + "x": 14.5, + "c": "#89b087" + }, + "*" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.6299999999999999, + "x": 6.5, + "c": "#54d6de", + "fa": [ + 0, + 0, + 0, + 1 + ], + "h": 1.5 + }, + "Tab >\n\n\nTab", + { + "x": 4.5, + "h": 1.5 + }, + "< Tab\n\n\nShift Tab" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#bbddbb" + }, + "[", + { + "x": 10.5, + "c": "#89b087" + }, + "2" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "^", + { + "x": 1 + }, + "]", + { + "x": 8.5, + "c": "#89b087" + }, + "1", + { + "x": 1 + }, + "3" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "~", + { + "x": 6.5 + }, + "\\" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "%", + { + "x": 14.5, + "c": "#89b087" + }, + "-" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "w": 1.5 + }, + "Ctrl", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nCtrl" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#77aaff" + }, + "Option\n\n\nLAlt", + { + "x": 10.5, + "c": "#89b087" + }, + ".\n\n\nOption" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#77aaff" + }, + "Hyper", + { + "x": 1 + }, + "Cmd\n\n\nSuper", + { + "x": 8.5, + "c": "#89b087" + }, + "0\n\n\nCmd", + { + "x": 1 + }, + "=\n\n\nHyper" + ], + [ + { + "y": -0.75, + "x": 0.5, + "c": "#77aaff" + }, + "Ctrl\n\n\nLCtrl", + "Meh", + { + "x": 14.5, + "c": "#89b087" + }, + "+\n\n\nMeh", + "Enter\n\n\nCtrl" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#54d6de" + }, + "Left", + "Right" + ], + [ + { + "h": 2 + }, + "Space", + { + "h": 2 + }, + "Enter", + "Up" + ], + [ + { + "x": 2 + }, + "Down" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Home", + "End" + ], + [ + { + "x": -3 + }, + "Page\n\n\n\n\n\nUp", + { + "h": 2 + }, + "< Del\n\n\nBackspace", + { + "h": 2 + }, + "Del >\n\n\nDelete" + ], + [ + { + "x": -3 + }, + "Page\n\n\n\n\n\nDown" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png new file mode 100644 index 0000000000..4750dbf1f4 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png differ -- cgit v1.2.3 From 76469ebbcfd5b2582a45eb0dd0966bad724e4cdd Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Thu, 14 Jul 2016 01:22:15 -0700 Subject: Replaced ordinary-media.{png|json} with new media layout --- .../keymaps/teckinesis/ordinary-media.png | Bin 124144 -> 0 bytes .../keymaps/teckinesis/ordinary-media.txt | 27 -- .../keymaps/teckinesis/teckinesis-media.json | 436 +++++++++++++++++++++ .../keymaps/teckinesis/teckinesis-media.png | Bin 0 -> 112216 bytes 4 files changed, 436 insertions(+), 27 deletions(-) delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png deleted file mode 100644 index 99e5ed80b1..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt b/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt deleted file mode 100644 index 4eccc9f350..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/ordinary-media.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], -[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], -[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], -[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], -[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], -[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], -[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], -[{x:2},"Home\n\n\nBrowser"], -[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] - diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json new file mode 100644 index 0000000000..65fe394e8a --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json @@ -0,0 +1,436 @@ +[ + { + "name": "teckinesis (MediaLayer)", + "author": "Will Wolff-Myren", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea" + }, + [ + { + "x": 3.5, + "c": "#99de2a" + }, + "F13", + { + "x": 10.5 + }, + "F18" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "F12", + { + "x": 1 + }, + "F14", + { + "x": 8.5 + }, + "F17", + { + "x": 1 + }, + "F19" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "F15", + { + "c": "#ff4444" + }, + "Esc", + { + "x": 4.5 + }, + "Esc", + { + "c": "#99de2a" + }, + "F16" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "F11", + { + "x": 14.5 + }, + "F20" + ], + [ + { + "y": -0.995, + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "Media\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500", + "t": "#000000" + }, + "Mouse\n\n\n\n\n\nUp", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nUp" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nUpLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nUpRgt", + { + "x": 8.5, + "c": "#ffb063" + }, + "Home", + { + "x": 1 + }, + "Page\n\n\n\n\n\nUp" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nUp", + { + "c": "#ffb063", + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nUp", + { + "x": 4.5, + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nUp", + { + "c": "#e6e067" + }, + "Print\n\n\n\n\n\nScreen" + ], + [ + { + "y": -0.875, + "x": 1.5, + "c": "#737373", + "a": 7 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500" + }, + "Mouse\n\n\n\n\n\nDown", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nRight", + { + "x": 8.5 + }, + "Cursor\n\n\n\n\n\nLeft", + { + "x": 1 + }, + "Cursor\n\n\n\n\n\nRight" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nDown", + { + "x": 6.5 + }, + "Num\n\n\n\n\n\nLock" + ], + [ + { + "y": -0.875, + "x": 1.5, + "c": "#737373", + "a": 7 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.6299999999999999, + "x": 6.5, + "c": "#ffb063", + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nDown", + { + "x": 4.5, + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#ff8500" + }, + "Mouse\n\n\n\n\n\nDown", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nDnLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nDnRgt", + { + "x": 8.5, + "c": "#ffb063" + }, + "End", + { + "x": 1 + }, + "Page\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Mute", + { + "x": 6.5, + "c": "#737373", + "a": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Ctrl", + { + "x": 16.5, + "w": 1.5 + }, + "Ctrl" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500" + }, + "Middle\n\n\n\n\n\nClick", + { + "x": 10.5, + "c": "#ffb063", + "fa": [ + 0, + 0, + 0, + 1 + ] + }, + "Delete\n\n\nOption" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#ff8500" + }, + "Left\n\n\n\n\n\nClick", + { + "x": 1 + }, + "Right\n\n\n\n\n\nClick", + { + "x": 8.5, + "c": "#ffb063" + }, + "Insert\n\n\nCmd", + { + "x": 1, + "c": "#77aaff" + }, + "Hyper" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "Alt\n\n\nLAlt", + "Meh", + { + "x": 14.5 + }, + "Meh", + "Alt\n\n\nRAlt" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#ccbb00" + }, + "Stop\n\n\nBrowser", + "Reload\n\n\nBrowser" + ], + [ + { + "h": 2 + }, + "< Web\n\n\nBrowser", + { + "h": 2 + }, + "Web >\n\n\nBrowser", + "Search\n\n\nBrowser" + ], + [ + { + "x": 2 + }, + "Home\n\n\nBrowser" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Prev\n\n\nAudio\n\n\nTrack", + "Next\n\n\nAudio\n\n\nTrack" + ], + [ + { + "x": -3, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nUp", + { + "c": "#ccbb00", + "h": 2 + }, + "Stop\n\n\nAudio", + { + "h": 2 + }, + "Play\n\n\nAudio\n\n\nPause" + ], + [ + { + "x": -3, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nDown" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png new file mode 100644 index 0000000000..cc51605f92 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png differ -- cgit v1.2.3 From 010dd1308420e25b327fa4d5d6b13f67a849408b Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Thu, 14 Jul 2016 11:04:25 -0500 Subject: keymap_extras: add newline at end of files --- quantum/keymap_extras/keymap_french.h | 2 +- quantum/keymap_extras/keymap_uk.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h index 2a44c80b14..4fd1f61ae0 100644 --- a/quantum/keymap_extras/keymap_french.h +++ b/quantum/keymap_extras/keymap_french.h @@ -80,4 +80,4 @@ #define FR_EURO ALGR(KC_E) #define FR_BULT ALGR(FR_DLR) -#endif \ No newline at end of file +#endif diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h index 5c5d951791..1458d64a9a 100644 --- a/quantum/keymap_extras/keymap_uk.h +++ b/quantum/keymap_extras/keymap_uk.h @@ -33,4 +33,4 @@ #define UK_AACT ALGR(KC_A) -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 25938a09a6bfb2624bc96841b53897eda532e293 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Thu, 14 Jul 2016 11:13:35 -0500 Subject: extra_keymaps: use RALT() instead of 0x1400 for AltGr --- quantum/keymap_extras/keymap_fr_ch.h | 2 +- quantum/keymap_extras/keymap_french.h | 2 +- quantum/keymap_extras/keymap_german.h | 2 +- quantum/keymap_extras/keymap_german_ch.h | 2 +- quantum/keymap_extras/keymap_nordic.h | 2 +- quantum/keymap_extras/keymap_spanish.h | 2 +- quantum/keymap_extras/keymap_uk.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h index 3fd9713575..87d4bb24cf 100644 --- a/quantum/keymap_extras/keymap_fr_ch.h +++ b/quantum/keymap_extras/keymap_fr_ch.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define FR_CH_ALGR KC_RALT // normal characters diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h index 4fd1f61ae0..834c69650e 100644 --- a/quantum/keymap_extras/keymap_french.h +++ b/quantum/keymap_extras/keymap_french.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define NO_ALGR KC_RALT // Normal characters diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h index 3f9ae8bade..7e2e0ed44e 100644 --- a/quantum/keymap_extras/keymap_german.h +++ b/quantum/keymap_extras/keymap_german.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define DE_ALGR KC_RALT // normal characters diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h index 6a782bcd7b..b66d582a44 100644 --- a/quantum/keymap_extras/keymap_german_ch.h +++ b/quantum/keymap_extras/keymap_german_ch.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define CH_ALGR KC_RALT // normal characters diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index 3acb8b6983..f8cf4e2e43 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define NO_ALGR KC_RALT // Normal characters diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h index af76e39fcb..4ba568af23 100644 --- a/quantum/keymap_extras/keymap_spanish.h +++ b/quantum/keymap_extras/keymap_spanish.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define NO_ALGR KC_RALT // Normal characters diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h index 1458d64a9a..00c87afc3e 100644 --- a/quantum/keymap_extras/keymap_uk.h +++ b/quantum/keymap_extras/keymap_uk.h @@ -4,7 +4,7 @@ #include "keymap.h" // Alt gr -#define ALGR(kc) kc | 0x1400 +#define ALGR(kc) RALT(kc) #define NO_ALGR KC_RALT // Normal characters -- cgit v1.2.3 From 4278d8861526ed285d9d00badcdc8c121454be60 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Thu, 14 Jul 2016 11:32:43 -0500 Subject: keymap_dvorak.h: add missing shifted keys, fix whitespace --- quantum/keymap_extras/keymap_dvorak.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index e855056e83..17f2059774 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -18,18 +18,19 @@ #define DV_LBRC KC_MINS #define DV_RBRC KC_EQL -#define DV_QUOT KC_Q +#define DV_QUOT KC_Q #define DV_COMM KC_W #define DV_DOT KC_E #define DV_P KC_R #define DV_Y KC_T #define DV_F KC_Y #define DV_G KC_U -#define DV_C KC_I +#define DV_C KC_I #define DV_R KC_O #define DV_L KC_P #define DV_SLSH KC_LBRC #define DV_EQL KC_RBRC +#define DV_BSLS KC_BSLS #define DV_A KC_A #define DV_O KC_S @@ -68,7 +69,13 @@ #define DV_RPRN LSFT(DV_0) #define DV_LCBR LSFT(DV_LBRC) #define DV_RCBR LSFT(DV_RBRC) -#define DV_UNDS LSFT(DV_MINS) -#define DV_PLUS LSFT(DV_EQL) + +#define DV_QUES LSFT(DV_SLSH) +#define DV_PLUS LSFT(DV_EQL) +#define DV_PIPE LSFT(DV_BSLS) + +#define DV_UNDS LSFT(DV_MINS) + +#define DV_COLN LSFT(DV_SCLN) #endif -- cgit v1.2.3 From 0b8c448b300da233de8b8d4fcdb359ec0679a513 Mon Sep 17 00:00:00 2001 From: Travis La Marr Date: Fri, 15 Jul 2016 10:28:23 -0400 Subject: Make DFU wait for bootloader Added a loop for waiting for the keyboard to be put in bootloader mode, rather than failing out. Makes building keymaps easier. --- tmk_core/avr.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 3bf2b34f88..6c03e1650e 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex batchisp -hardware usb -device $(MCU) -operation start reset 0 dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter + until dfu-programmer $(MCU) get bootloader-version; do\ + echo "Error: Bootloader not found. Trying again in 5s." ;\ + sleep 5 ;\ + done ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) dfu-programmer $(MCU) erase --force else -- cgit v1.2.3 From d48a4cf1eb80600fb3e8eb859e5b77c954a18137 Mon Sep 17 00:00:00 2001 From: Travis La Marr Date: Fri, 15 Jul 2016 10:41:32 -0400 Subject: Fix OS X Recognizing keyboard as Mouse/Tablet Modified the LUFA USB HID Descriptor to change the logical/usage minimums for System Control from 0x01 (Mouse) to 0x81 (System Power Down), this fixes OS X recognizing the Planck as having a mouse and tablet, even with mousekeys off. --- tmk_core/protocol/lufa/descriptor.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 850a20fdb3..539a58d66b 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -140,9 +140,9 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] = HID_RI_USAGE(8, 0x80), /* System Control */ HID_RI_COLLECTION(8, 0x01), /* Application */ HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM), - HID_RI_LOGICAL_MINIMUM(16, 0x0001), + HID_RI_LOGICAL_MINIMUM(16, 0x0081), HID_RI_LOGICAL_MAXIMUM(16, 0x00B7), - HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */ + HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */ HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */ HID_RI_REPORT_SIZE(8, 16), HID_RI_REPORT_COUNT(8, 1), -- cgit v1.2.3 From 0446263935e418537966bc64bfd1c1cdb5206583 Mon Sep 17 00:00:00 2001 From: Erik Dasque Date: Fri, 15 Jul 2016 12:55:40 -0400 Subject: Adding Docker build system & documentation --- Dockerfile | 28 ++++++++++++++++++++++++++++ readme.md | 19 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..96ace4ec6b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM debian:jessie +MAINTAINER Erik Dasque + +RUN apt-get update +RUN apt-get install --no-install-recommends -y build-essential \ + gcc \ + unzip \ + wget \ + zip \ + gcc-avr \ + binutils-avr \ + avr-libc \ + dfu-programmer \ + dfu-util \ + gcc-arm-none-eabi \ + binutils-arm-none-eabi \ + libnewlib-arm-none-eabi \ + git + +RUN apt-get clean +RUN rm -rf /var/lib/apt/lists/* + +ENV keyboard=ergodox_ez +ENV keymap=default + +VOLUME /qmk +WORKDIR /qmk +CMD make clean ; make keyboard=${keyboard} keymap=${keymap} \ No newline at end of file diff --git a/readme.md b/readme.md index e0dcd56088..7a970eea02 100644 --- a/readme.md +++ b/readme.md @@ -75,6 +75,25 @@ Debian/Ubuntu example: sudo apt-get update sudo apt-get install gcc-avr avr-libc dfu-programmer +### Docker + +If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following commands at the root of the QMK folder: + +```bash +# You only need to run this once, it'll take a little while + +docker build -t qmk . + +# and you'll run this every time you want to build a keymap +# modify the keymap and keyboard assigment to compile what you want +# defaults are ergodox_ez/default + +docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw qmk + +``` + +This will compile the targetted keyboard/keymap and leave it in your QMK directory for you to flash. + ### Vagrant If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md). -- cgit v1.2.3 From aa2a79bbfa5e5134fc83daf5732ca4774edf2dc2 Mon Sep 17 00:00:00 2001 From: Erik Dasque Date: Fri, 15 Jul 2016 13:26:34 -0400 Subject: Further simplyfying the docker usage We'll be able to change the image user name if we set up the initial repo to trigger Docker images rebuilds on hub.docker.com --- readme.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 7a970eea02..ecad173fa0 100644 --- a/readme.md +++ b/readme.md @@ -77,18 +77,14 @@ Debian/Ubuntu example: ### Docker -If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following commands at the root of the QMK folder: +If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap: ```bash -# You only need to run this once, it'll take a little while - -docker build -t qmk . - -# and you'll run this every time you want to build a keymap +# You'll run this every time you want to build a keymap # modify the keymap and keyboard assigment to compile what you want # defaults are ergodox_ez/default -docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw qmk +docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware ``` -- cgit v1.2.3 From 1a7e954f9fc4d250ba1ae46e3bfc168aca2b5cce Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 13 Jul 2016 00:20:28 +0200 Subject: in case its NULL --- quantum/process_keycode/process_tap_dance.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 9b172e1b6c..186889bc29 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -22,7 +22,9 @@ static void _process_tap_dance_action_pair (qk_tap_dance_state_t *state, static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, qk_tap_dance_user_fn_t fn) { - fn(state); + if (fn) { + fn(state); + } } void process_tap_dance_action (uint16_t keycode) -- cgit v1.2.3 From f3b56701ed7e6c622dc48e429780124ba5fde172 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 13 Jul 2016 16:47:45 +0200 Subject: add an `anyway` and a `reset` callback when using tap dance, we have the `regular` callback that is called on the last tap. this commit adds an `anyway` callback that is called on every tap, and a `reset` callback that is called on reset of the tap dance taps. --- quantum/process_keycode/process_tap_dance.c | 36 ++++++++++++++++++++++++++++- quantum/process_keycode/process_tap_dance.h | 28 ++++++++++++++++++---- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 186889bc29..40fba2a6a6 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -40,7 +40,24 @@ void process_tap_dance_action (uint16_t keycode) action.pair.kc1, action.pair.kc2); break; case QK_TAP_DANCE_TYPE_FN: - _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn); + _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.regular); + break; + + default: + break; + } +} + +void process_tap_dance_action_anyway (uint16_t keycode) +{ + uint16_t idx = keycode - QK_TAP_DANCE; + qk_tap_dance_action_t action; + + action = tap_dance_actions[idx]; + + switch (action.type) { + case QK_TAP_DANCE_TYPE_FN: + _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.anyway); break; default: @@ -53,6 +70,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: + process_tap_dance_action_anyway (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { process_tap_dance_action (qk_tap_dance_state.keycode); } else { @@ -68,6 +86,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { default: if (qk_tap_dance_state.keycode) { + //process_tap_dance_action_anyway (qk_tap_dance_state.keycode); process_tap_dance_action (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); @@ -87,6 +106,21 @@ void matrix_scan_tap_dance () { } void reset_tap_dance (qk_tap_dance_state_t *state) { + uint16_t idx = state->keycode - QK_TAP_DANCE; + qk_tap_dance_action_t action; + + action = tap_dance_actions[idx]; + switch (action.type) { + case QK_TAP_DANCE_TYPE_FN: + if (action.fn.reset) { + action.fn.reset(); + } + break; + + default: + break; + } + state->keycode = 0; state->count = 0; } diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index b9d7c7fcf4..bf925df0f6 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -22,6 +22,7 @@ typedef enum } qk_tap_dance_type_t; typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state); +typedef void (*qk_tap_dance_user_fn_reset_t) (void); typedef struct { @@ -31,18 +32,37 @@ typedef struct uint16_t kc1; uint16_t kc2; } pair; - qk_tap_dance_user_fn_t fn; + struct { + qk_tap_dance_user_fn_t regular; + qk_tap_dance_user_fn_t anyway; + qk_tap_dance_user_fn_reset_t reset; + } fn; }; } qk_tap_dance_action_t; #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ - .type = QK_TAP_DANCE_TYPE_PAIR, \ - .pair = { kc1, kc2 } \ + .type = QK_TAP_DANCE_TYPE_PAIR, \ + .pair = { kc1, kc2 } \ } #define ACTION_TAP_DANCE_FN(user_fn) { \ .type = QK_TAP_DANCE_TYPE_FN, \ - .fn = user_fn \ + .fn = { user_fn, NULL, NULL } \ + } + +#define ACTION_TAP_DANCE_FN_ANYWAY(user_fn, user_fn_anyway) { \ + .type = QK_TAP_DANCE_TYPE_FN, \ + .fn = { user_fn, user_fn_anyway, NULL } \ + } + +#define ACTION_TAP_DANCE_FN_RESET(user_fn, user_fn_reset) { \ + .type = QK_TAP_DANCE_TYPE_FN, \ + .fn = { user_fn, NULL, user_fn_reset } \ + } + +#define ACTION_TAP_DANCE_FN_ANYWAY_RESET(user_fn, user_fn_anyway, user_fn_reset) { \ + .type = QK_TAP_DANCE_TYPE_FN, \ + .fn = { user_fn, user_fn_anyway, user_fn_reset } \ } extern const qk_tap_dance_action_t tap_dance_actions[]; -- cgit v1.2.3 From f13f48a35e1a2b0851bb9967976f39f2e233f838 Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 16 Jul 2016 20:24:14 -0700 Subject: Added CMD60 keymap --- keyboards/handwired/CMD60/CMD60.c | 8 + keyboards/handwired/CMD60/CMD60.h | 20 +++ keyboards/handwired/CMD60/Makefile | 73 ++++++++++ keyboards/handwired/CMD60/README.md | 35 +++++ keyboards/handwired/CMD60/config.h | 162 +++++++++++++++++++++ keyboards/handwired/CMD60/keymaps/default/keymap.c | 66 +++++++++ 6 files changed, 364 insertions(+) create mode 100644 keyboards/handwired/CMD60/CMD60.c create mode 100644 keyboards/handwired/CMD60/CMD60.h create mode 100644 keyboards/handwired/CMD60/Makefile create mode 100644 keyboards/handwired/CMD60/README.md create mode 100644 keyboards/handwired/CMD60/config.h create mode 100644 keyboards/handwired/CMD60/keymaps/default/keymap.c diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c new file mode 100644 index 0000000000..799848e34e --- /dev/null +++ b/keyboards/handwired/CMD60/CMD60.c @@ -0,0 +1,8 @@ +#include "CMD60.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h new file mode 100644 index 0000000000..f90871fc71 --- /dev/null +++ b/keyboards/handwired/CMD60/CMD60.h @@ -0,0 +1,20 @@ +#ifndef CMD60_H +#define CMD60_H + +#include "quantum.h" + +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ + ) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ + { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \ +} + +#endif \ No newline at end of file diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile new file mode 100644 index 0000000000..7117599173 --- /dev/null +++ b/keyboards/handwired/CMD60/Makefile @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + + diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md new file mode 100644 index 0000000000..83e371543e --- /dev/null +++ b/keyboards/handwired/CMD60/README.md @@ -0,0 +1,35 @@ +CMD60 keyboard firmware +====================== + +##CMD60 + +This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work +with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2 +and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to +achieve a higher level of productivity if you take the time to learn its function layers. + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder. +Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use +the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/handwired/CMD60/config.h b/keyboards/handwired/CMD60/config.h new file mode 100644 index 0000000000..5e28dc17b2 --- /dev/null +++ b/keyboards/handwired/CMD60/config.h @@ -0,0 +1,162 @@ +7/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER cmd +#define PRODUCT CMD60 +#define DESCRIPTION Advanced Programming Keeb Layout + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F0, F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c new file mode 100644 index 0000000000..9f9cbcd661 --- /dev/null +++ b/keyboards/handwired/CMD60/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +#include "CMD60.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = KEYMAP( /* CMD60 - QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + LT(3, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_NO, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \ + ), + [1] = KEYMAP( /* CMD60 - GameMode */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \ + KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_RSFT, \ + KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + ), + [2] = KEYMAP( /* CMD60 - Arrows */ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + ), + [3] = KEYMAP( /* CMD60 - Functions */ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \ + KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + ), + [4] = KEYMAP( /* CMD60 - Mouse */ + KC_SYSTEM_SLEEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + ), + [5] = KEYMAP( /* CMD60 - Media */ + KC_SYSTEM_WAKE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; -- cgit v1.2.3 From 2877b858d398b64787f679e7826cecce26dbb33f Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 16 Jul 2016 20:38:55 -0700 Subject: Fix erroneous character Must have been keeb testing :) --- keyboards/handwired/CMD60/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/handwired/CMD60/config.h b/keyboards/handwired/CMD60/config.h index 5e28dc17b2..27eb400b87 100644 --- a/keyboards/handwired/CMD60/config.h +++ b/keyboards/handwired/CMD60/config.h @@ -1,4 +1,4 @@ -7/* +/* Copyright 2012 Jun Wako This program is free software: you can redistribute it and/or modify -- cgit v1.2.3 From dddaebfa9829ef48f93f2be7119b9790271f8892 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 16 Jul 2016 23:41:20 -0400 Subject: update readme images --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index e0dcd56088..07280c2b40 100644 --- a/readme.md +++ b/readme.md @@ -774,7 +774,7 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed. ## RGB Under Glow Mod -![Planck with RGB Underglow](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg) +![Planck with RGB Underglow](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg) Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY). @@ -799,7 +799,7 @@ The firmware supports 5 different light effects, and the color (hue, saturation, ### WS2812 Wiring -![WS2812 Wiring](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/WS2812-wiring.jpg) +![WS2812 Wiring](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/WS2812-wiring.jpg) Please note the USB port can only supply a limited amount of power to the keyboard (500mA by standard, however, modern computer and most usb hubs can provide 700+mA.). According to the data of NeoPixel from Adafruit, 30 WS2812 LEDs require a 5V 1A power supply, LEDs used in this mod should not more than 20. -- cgit v1.2.3 From f9542237499c7f4f211ef88114d6a469ef69a38e Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 16 Jul 2016 23:51:27 -0400 Subject: update makefile to default to no virtual dip switches --- keyboards/satan/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile index 184b5ac372..a0879fc9c9 100644 --- a/keyboards/satan/Makefile +++ b/keyboards/satan/Makefile @@ -52,7 +52,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. # -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) -- cgit v1.2.3 From 6289332759938781ba1043168df894f844aa55e2 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 16 Jul 2016 23:52:02 -0400 Subject: add custom makefile for sethbc keymap --- keyboards/satan/keymaps/sethbc/Makefile | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 keyboards/satan/keymaps/sethbc/Makefile diff --git a/keyboards/satan/keymaps/sethbc/Makefile b/keyboards/satan/keymaps/sethbc/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/satan/keymaps/sethbc/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif -- cgit v1.2.3 From d3091faf363afc8fef73ddf4948f872439b0e827 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Fri, 15 Jul 2016 23:54:08 +0200 Subject: change naming, and remove extraneous definition --- quantum/process_keycode/process_tap_dance.c | 32 ++++++++++++++--------------- quantum/process_keycode/process_tap_dance.h | 27 ++++++++---------------- 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 40fba2a6a6..93b326b5fc 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -27,7 +27,7 @@ static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, } } -void process_tap_dance_action (uint16_t keycode) +void process_tap_dance_action_on_each_tap (uint16_t keycode) { uint16_t idx = keycode - QK_TAP_DANCE; qk_tap_dance_action_t action; @@ -35,12 +35,8 @@ void process_tap_dance_action (uint16_t keycode) action = tap_dance_actions[idx]; switch (action.type) { - case QK_TAP_DANCE_TYPE_PAIR: - _process_tap_dance_action_pair (&qk_tap_dance_state, - action.pair.kc1, action.pair.kc2); - break; case QK_TAP_DANCE_TYPE_FN: - _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.regular); + _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_each_tap); break; default: @@ -48,7 +44,7 @@ void process_tap_dance_action (uint16_t keycode) } } -void process_tap_dance_action_anyway (uint16_t keycode) +void process_tap_dance_action_on_dance_finished (uint16_t keycode) { uint16_t idx = keycode - QK_TAP_DANCE; qk_tap_dance_action_t action; @@ -56,8 +52,12 @@ void process_tap_dance_action_anyway (uint16_t keycode) action = tap_dance_actions[idx]; switch (action.type) { + case QK_TAP_DANCE_TYPE_PAIR: + _process_tap_dance_action_pair (&qk_tap_dance_state, + action.pair.kc1, action.pair.kc2); + break; case QK_TAP_DANCE_TYPE_FN: - _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.anyway); + _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_dance_finished); break; default: @@ -70,9 +70,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - process_tap_dance_action_anyway (qk_tap_dance_state.keycode); + process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { - process_tap_dance_action (qk_tap_dance_state.keycode); + process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); } else { r = false; } @@ -85,10 +85,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { break; default: + process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode) { - //process_tap_dance_action_anyway (qk_tap_dance_state.keycode); - process_tap_dance_action (qk_tap_dance_state.keycode); - + process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); } break; @@ -99,8 +98,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { void matrix_scan_tap_dance () { if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { - process_tap_dance_action (qk_tap_dance_state.keycode); - + process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); } } @@ -112,8 +110,8 @@ void reset_tap_dance (qk_tap_dance_state_t *state) { action = tap_dance_actions[idx]; switch (action.type) { case QK_TAP_DANCE_TYPE_FN: - if (action.fn.reset) { - action.fn.reset(); + if (action.fn.on_reset) { + action.fn.on_reset(state); } break; diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index bf925df0f6..7b820584a8 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -22,7 +22,6 @@ typedef enum } qk_tap_dance_type_t; typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state); -typedef void (*qk_tap_dance_user_fn_reset_t) (void); typedef struct { @@ -33,9 +32,9 @@ typedef struct uint16_t kc2; } pair; struct { - qk_tap_dance_user_fn_t regular; - qk_tap_dance_user_fn_t anyway; - qk_tap_dance_user_fn_reset_t reset; + qk_tap_dance_user_fn_t on_each_tap; + qk_tap_dance_user_fn_t on_dance_finished; + qk_tap_dance_user_fn_t on_reset; } fn; }; } qk_tap_dance_action_t; @@ -45,24 +44,14 @@ typedef struct .pair = { kc1, kc2 } \ } -#define ACTION_TAP_DANCE_FN(user_fn) { \ +#define ACTION_TAP_DANCE_FN(user_fn) { \ .type = QK_TAP_DANCE_TYPE_FN, \ - .fn = { user_fn, NULL, NULL } \ + .fn = { NULL, user_fn, NULL } \ } -#define ACTION_TAP_DANCE_FN_ANYWAY(user_fn, user_fn_anyway) { \ - .type = QK_TAP_DANCE_TYPE_FN, \ - .fn = { user_fn, user_fn_anyway, NULL } \ - } - -#define ACTION_TAP_DANCE_FN_RESET(user_fn, user_fn_reset) { \ - .type = QK_TAP_DANCE_TYPE_FN, \ - .fn = { user_fn, NULL, user_fn_reset } \ - } - -#define ACTION_TAP_DANCE_FN_ANYWAY_RESET(user_fn, user_fn_anyway, user_fn_reset) { \ - .type = QK_TAP_DANCE_TYPE_FN, \ - .fn = { user_fn, user_fn_anyway, user_fn_reset } \ +#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \ + .type = QK_TAP_DANCE_TYPE_FN, \ + .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ } extern const qk_tap_dance_action_t tap_dance_actions[]; -- cgit v1.2.3 From 38508180c755158a1933bc74b1b294bab3dd4c57 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:24:00 -0400 Subject: update readmes in certain directories to work with qmk.fm --- keyboards/clueboard/readme.md | 4 ++++ keyboards/cluepad/readme.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 keyboards/clueboard/readme.md create mode 100644 keyboards/cluepad/readme.md diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md new file mode 100644 index 0000000000..aa301f020c --- /dev/null +++ b/keyboards/clueboard/readme.md @@ -0,0 +1,4 @@ +Clueboard keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/cluepad/readme.md b/keyboards/cluepad/readme.md new file mode 100644 index 0000000000..8450340f27 --- /dev/null +++ b/keyboards/cluepad/readme.md @@ -0,0 +1,4 @@ +Cluepad number pad firmware +====================== + +TODO: to be updated. -- cgit v1.2.3 From a95ab371627073a85ae420118ac7d1d55a096583 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:24:36 -0400 Subject: update link to Vagrant docfile --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 07280c2b40..a8ed51b818 100644 --- a/readme.md +++ b/readme.md @@ -76,7 +76,7 @@ Debian/Ubuntu example: sudo apt-get install gcc-avr avr-libc dfu-programmer ### Vagrant -If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md). +If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](doc/VAGRANT_GUIDE.md). ## Verify Your Installation 1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application. -- cgit v1.2.3 From 45414fed7b4a61453aad6bbfd1d761177c16bf65 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:28:48 -0400 Subject: update tmk link --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a8ed51b818..a179d7aa21 100644 --- a/readme.md +++ b/readme.md @@ -35,7 +35,7 @@ This is not a tiny project. While this is the main readme, there are many other * The list of possible keycodes you can use in your keymap is actually spread out in a few different places: * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined. -* The [TMK documentation](doc/TMK_readme.md). QMK is based on TMK, and this explains how it works internally. +* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. # Getting started -- cgit v1.2.3 From 68b1affbbd9be209c5b7dcbd39f222492be3314d Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:32:02 -0400 Subject: update audio links --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a179d7aa21..4ccf51f985 100644 --- a/readme.md +++ b/readme.md @@ -732,7 +732,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); ``` -Wherein we bind predefined songs (from [audio/song_list.h](/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives. +Wherein we bind predefined songs (from [quantum/audio/song_list.h](/quantum/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives. So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this: -- cgit v1.2.3 From 0a2653bac8950fed180cd2cf9e7a5caab8755cd2 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:38:53 -0400 Subject: update broken link --- .../ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md index 4188d2b50c..16cebd0912 100644 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md +++ b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md @@ -10,7 +10,7 @@ There are four layers: Looking for IJKL arrows? [Here we go](../romanzolotarev-norman-plover-osx/). -[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](rttp://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0) +[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0) ## Switching -- cgit v1.2.3 From f6aeaac5b549ff111f24b6d07c33a3f29b785823 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 03:53:34 -0400 Subject: update more non-existent readmes for QMK.fm --- keyboards/alps64/readme.md | 4 ++++ keyboards/jd45/readme.md | 4 ++++ keyboards/phantom/readme.md | 4 ++++ keyboards/satan/readme.md | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 keyboards/alps64/readme.md create mode 100644 keyboards/jd45/readme.md create mode 100644 keyboards/phantom/readme.md create mode 100644 keyboards/satan/readme.md diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md new file mode 100644 index 0000000000..1798b193a5 --- /dev/null +++ b/keyboards/alps64/readme.md @@ -0,0 +1,4 @@ +Alps64 keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md new file mode 100644 index 0000000000..2822666e89 --- /dev/null +++ b/keyboards/jd45/readme.md @@ -0,0 +1,4 @@ +JD45 keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md new file mode 100644 index 0000000000..190f738faf --- /dev/null +++ b/keyboards/phantom/readme.md @@ -0,0 +1,4 @@ +Phantom keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md new file mode 100644 index 0000000000..aa301f020c --- /dev/null +++ b/keyboards/satan/readme.md @@ -0,0 +1,4 @@ +Clueboard keyboard firmware +====================== + +TODO: to be updated. -- cgit v1.2.3 From de96513ff2f12e56a572b6f54db548725194c10b Mon Sep 17 00:00:00 2001 From: Toni Date: Sun, 17 Jul 2016 14:57:56 +0200 Subject: changes needed for a ISO satan PCB including a split right-shift key --- keyboards/satan/keymaps/iso_split_rshift/Makefile | 70 ++++++++ keyboards/satan/keymaps/iso_split_rshift/build.sh | 17 ++ keyboards/satan/keymaps/iso_split_rshift/config.h | 31 ++++ keyboards/satan/keymaps/iso_split_rshift/keymap.c | 192 +++++++++++++++++++++ .../satan/keymaps/iso_split_rshift/resetboard.sh | 4 + keyboards/satan/keymaps/iso_split_rshift/satan.c | 30 ++++ keyboards/satan/keymaps/iso_split_rshift/satan.h | 96 +++++++++++ 7 files changed, 440 insertions(+) create mode 100644 keyboards/satan/keymaps/iso_split_rshift/Makefile create mode 100755 keyboards/satan/keymaps/iso_split_rshift/build.sh create mode 100644 keyboards/satan/keymaps/iso_split_rshift/config.h create mode 100644 keyboards/satan/keymaps/iso_split_rshift/keymap.c create mode 100755 keyboards/satan/keymaps/iso_split_rshift/resetboard.sh create mode 100644 keyboards/satan/keymaps/iso_split_rshift/satan.c create mode 100644 keyboards/satan/keymaps/iso_split_rshift/satan.h diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile new file mode 100644 index 0000000000..67eaa078f7 --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/Makefile @@ -0,0 +1,70 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE = no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh new file mode 100755 index 0000000000..2bfc3bb32d --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# adjust for cpu +# -j 16 gave best result on a hyperthreaded quad core core i7 +THREADS="-j 16" +echo "We need sudo later" +sudo ls 2>&1 /dev/null +make clean +make KEYMAP=toni77 ${THREADS} +if [[ $? -eq 0 ]] +then + echo "please trigger flashing! you have 5 seconds" + sleep 5 + sudo make KEYMAP=toni77 dfu ${THREADS} +else + echo "make failed" + exit 77 +fi diff --git a/keyboards/satan/keymaps/iso_split_rshift/config.h b/keyboards/satan/keymaps/iso_split_rshift/config.h new file mode 100644 index 0000000000..39eec4b597 --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/config.h @@ -0,0 +1,31 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + + +#define RGB_DI_PIN B2 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#endif diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c new file mode 100644 index 0000000000..fc07f6da8d --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -0,0 +1,192 @@ +// 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 "satan.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DEF 0 +#define _SPC 1 +#define _TAB 2 +#define _SFX 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _DEF: Default Layer + * ,-----------------------------------------------------------.------------------------------------- + * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 !! + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP + * |-----------------------------------------------------------| + * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is + * `-----------------------------------------------------------' LEFT DWN RIGHT + */ +[_DEF] = KEYMAP_ISO_SPLITRSHIFT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ + KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , + /* Keymap 1: F-and-vim Layer, modified with Space (Fn0) + * ,-----------------------------------------------------------.----------------------------------------- + * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| + * |-----------------------------------------------------------| + * | |Paus| Up| | | | | | | | | | | | + * |-----------------------------------------------------------| + * | |Lft|Dwn|Rgt| | | |Left|Down|Right|Up| | PLAY | + * |-----------------------------------------------------------| + * | | | | | | |M0 | | | | | Vol+ | | + * |-----------------------------------------------------------| + * | | | | |Alt |Prev|Vol-|Next| + * `-----------------------------------------------------------' + */ +[_SPC] = KEYMAP_ISO_SPLITRSHIFT( + KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT) , + + /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (Fn1) + * ,-----------------------------------------------------------.----------------------------------------- + * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | |Pos1|PgDn|PgUp|End| |Retrn | + * |-----------------------------------------------------------| + * | | | | | | |AF2| | | | | PgUp | | + * |-----------------------------------------------------------| + * | | | | |Alt |Pos1|PgDn|End | + * `-----------------------------------------------------------' + */ +[_TAB] = KEYMAP_ISO_SPLITRSHIFT( + KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END) , + + /* Keymap 3: Split right shift Numpad toggle Layer (Fn2) + * ,-----------------------------------------------------------.----------------------------------------- + * |RSET| | | | | | | 7| 8| 9| | | |Backsp | + * |-----------------------------------------------------------| + * | | | | | | | | 4 | 5 | 6 | | | | \ | + * |-----------------------------------------------------------| + * | | L | L | | | | | 1 | 2 | 3 | | | Return | + * |-----------------------------------------------------------| + * | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent + * |-----------------------------------------------------------| LED controlling + * |Ctrl|Win |Alt | |Alt |Left|Down|Right| + * `-----------------------------------------------------------' + */ +[_SFX] = KEYMAP_ISO_SPLITRSHIFT( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ + KC_TRNS, F(9), F(10), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ + KC_TRNS, F(11), F(12), F(13), F(14), F(15), F(16), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT) , + +}; + +enum function_id { + LAUNCH, + 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(_SPC, KC_SPACE), + [1] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC), + [2] = ACTION_LAYER_TAP_KEY(_TAB, KC_TAB), + [3] = ACTION_LAYER_TOGGLE(_SFX), + [4] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP), + [5] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT), + [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN), + [7] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT), + [8] = ACTION_FUNCTION(LAUNCH), + [9] = ACTION_FUNCTION(RGBLED_TOGGLE), + [10] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [11] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [12] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [13] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [14] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [15] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [16] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), +}; + +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 (record->event.pressed ? + MACRO( D(RALT), T(SPC), U(RALT), END ) + :MACRO( END )); + break; + case 1: + return (record->event.pressed ? + MACRO( D(LALT), T(F2), U(LALT), END ) + :MACRO( END )); + 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/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh b/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh new file mode 100755 index 0000000000..d955ccf545 --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh @@ -0,0 +1,4 @@ +#!/bin/bash +sudo dfu-programmer atmega32u4 erase --force +sudo dfu-programmer atmega32u4 flash clear_flash.hex +sudo dfu-programmer atmega32u4 reset diff --git a/keyboards/satan/keymaps/iso_split_rshift/satan.c b/keyboards/satan/keymaps/iso_split_rshift/satan.c new file mode 100644 index 0000000000..d2c5d5c205 --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/satan.c @@ -0,0 +1,30 @@ +#include "satan.h" +#include "led.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + matrix_init_user(); + led_init_ports(); +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + matrix_scan_user(); +}; + +void led_init_ports(void) { + // * Set our LED pins as output + DDRB |= (1<<2); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< Date: Sun, 17 Jul 2016 15:10:14 +0200 Subject: helper file for me to stay up-to-date with master --- keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh diff --git a/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh b/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh new file mode 100755 index 0000000000..d17ec76ecd --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh @@ -0,0 +1,4 @@ +#!/bin/bash +git checkout iso_split_rshift # gets you "on branch dmgr2" +git fetch origin # gets you up to date with origin +git merge origin/master -- cgit v1.2.3 From d40d18ab1ae8a1ef9feb408e43d4b840d37998a8 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 17 Jul 2016 10:37:45 -0400 Subject: don't believe the hex files are posted to qmk.fm --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4ccf51f985..b55659c7a7 100644 --- a/readme.md +++ b/readme.md @@ -97,7 +97,7 @@ In every keymap folder, the following files are recommended: The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards//`), or your keymap folder (`/keyboards//keymaps//`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)). -By default, this will generate a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Your .hex file will also be available on qmk.fm/keyboards//keymaps//. +By default, this will generate a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Below are some definitions that will be useful: -- cgit v1.2.3 From 8c8f2f898ba07e10091b4737d48c3a5e9ecdd95f Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:02:54 -0500 Subject: Add empty arrow layer, reorder some keys in media, map layer keys --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 65 ++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 54427a2f4c..4c2948b88c 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -4,7 +4,8 @@ #define BASE 0 // default layer #define SYMB 1 // symbols -#define MDIA 2 // media keys +#define ARRW 2 // media keys +#define MDIA 3 // media keys const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -42,19 +43,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, 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, + LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,LT(ARRW, KC_RGHT), ALT_T(KC_APP), KC_LGUI, KC_HOME, CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), - MEH_T(KC_NO),KC_N, 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_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + LT(MDIA, KC_UP), KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * @@ -120,6 +121,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' */ // MEDIA AND MOUSE +[ARRW] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |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, @@ -134,7 +177,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_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_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK -- cgit v1.2.3 From 6dc5aba315bea486e025fcc439a5f7b316968b10 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:09:54 -0500 Subject: Minor changes --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 4c2948b88c..f52e9f3975 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -4,8 +4,8 @@ #define BASE 0 // default layer #define SYMB 1 // symbols -#define ARRW 2 // media keys -#define MDIA 3 // media keys +#define ARRW 2 // arrow keys +#define MDIA 3 // media keys, including mouse const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -134,7 +134,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 f76f5af8539e048c4fdb91461e56269853346338 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:14:04 -0500 Subject: Add arrow keys to layer --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f52e9f3975..e67f8adb2a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -134,7 +134,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 d7b1cee2dfb06fc7262890a1dbe438ec18f869e0 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:19:11 -0500 Subject: Edit visual keymap --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index e67f8adb2a..9f387d7ab7 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -99,24 +99,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Media and mouse keys +/* Keymap 2: Arrow keys * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | + * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + * | | | | | | |------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | + * | | | | | | | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | + * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | + * | | | | | | | | + * | | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ @@ -141,7 +141,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Media and mouse keys +/* Keymap 3: Media and mouse keys * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | | | | | | @@ -152,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | + * | | | | | | | | |VolUp |VolDn | Mute | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | -- cgit v1.2.3 From ec505d07d20abadf6985ef0d817a49814446ad20 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:35:47 -0500 Subject: Remove unnecessary modifiers --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 9f387d7ab7..689378bf8c 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -41,19 +41,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_ESC, 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_NO), LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,LT(ARRW, KC_RGHT), ALT_T(KC_APP), KC_LGUI, KC_HOME, CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - LT(MDIA, KC_UP), KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - KC_LALT, CTL_T(KC_ESC), + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + 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, + MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + LT(MDIA, KC_UP), KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, + KC_LALT, KC_ESC, KC_PGUP, KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) ), -- cgit v1.2.3 From 742d6dbdc2e6985bff6280d608e7a91c00696a2c Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 13:55:10 -0500 Subject: Reorganize media keys --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 689378bf8c..b6e5f292ce 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_ESC, 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_NO), + KC_LSFT, 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,LT(ARRW, KC_RGHT), ALT_T(KC_APP), KC_LGUI, KC_HOME, @@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | | | | | | + * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -148,17 +148,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | MsUp | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | + * | | |Mute |VolDn | VolUp| | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | |VolUp |VolDn | Mute | + * | | | Prev | Play | Next | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | + * |Brwser| | | | | | | + * |Back | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ @@ -167,20 +167,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, + KC_WBAK, 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_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - 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_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK + KC_TRNS, KC_TRNS, KC_TRNS ), }; -- cgit v1.2.3 From f83591cff0910b24ed88961e564871ad32d1076b Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:02:46 -0500 Subject: Change visual --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index b6e5f292ce..bf4b258e79 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -15,9 +15,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | + * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' -- cgit v1.2.3 From 76b5dc84af9a60fb8bba88072f7f4711206b5ad0 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:11:08 -0500 Subject: Add page up/down and home/end to arrow --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index bf4b258e79..f391b80f45 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -104,11 +104,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | + * | | | | | | | | | | |PGDOWN| PGUP | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | + * | | | | | | | | | | | HOME | END | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' @@ -132,11 +132,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, 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 266eacc9ec94c5447af2923d62aac4e01bd7d290 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:29:37 -0500 Subject: Remove more unnecessary buttons --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f391b80f45..8bce4d2301 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * |Grv/L1| | | |*ARRW*| | | | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | App | LGui | | Alt |Ctrl/Esc| @@ -42,8 +42,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_ESC, 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_NO), - LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,LT(ARRW, KC_RGHT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,KC_GRV), KC_TRNS, KC_TRNS,KC_TRNS,MO(ARRW), ALT_T(KC_APP), KC_LGUI, KC_HOME, CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - LT(MDIA, KC_UP), KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, + MO(MDIA), KC_TRNS, KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, KC_ESC, KC_PGUP, KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) -- cgit v1.2.3 From 7a5b7233f235e5b50ae5cf0aa357bc7f26285e41 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:43:21 -0500 Subject: Move modifier kyes around --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 8bce4d2301..af390d2ed6 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| | | |*ARRW*| | | | [ | ] | ~L1 | + * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | App | LGui | | Alt |Ctrl/Esc| @@ -39,11 +39,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_ESC, 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_NO), - LT(SYMB,KC_GRV), KC_TRNS, KC_TRNS,KC_TRNS,MO(ARRW), + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_ESC, 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_NO), + KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), ALT_T(KC_APP), KC_LGUI, KC_HOME, CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(MDIA), KC_TRNS, KC_LBRC,KC_RBRC, KC_FN1, + MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, KC_LALT, KC_ESC, KC_PGUP, KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) -- cgit v1.2.3 From cfa5a475d02e1faddd44ff1cfbde62d1a1155c60 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:44:37 -0500 Subject: Move dot in symbol layer --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index af390d2ed6..95ab974bc3 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -64,11 +64,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | + * | | | | | | | | | 0 | = | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -92,9 +92,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_DOT, 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_0, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS -- cgit v1.2.3 From cb25f1ad931b031c5ddde79398b68a91ad9cb21d Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 14:56:32 -0500 Subject: Remove more keys --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 95ab974bc3..e9af3e91a3 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -11,7 +11,7 @@ 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 | - | + * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -22,9 +22,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| + * | | | | | | * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | + * | | | | | | | | * | Space| Bksp |------| |------| Tab |Enter | * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' @@ -39,22 +39,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_ESC, 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_NO), KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), - ALT_T(KC_APP), KC_LGUI, - KC_HOME, + KC_TRNS, KC_TRNS, + KC_TRNS, CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 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, MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, - KC_LALT, KC_ESC, - KC_PGUP, + KC_TRNS, KC_TRNS, + KC_TRNS, KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer -- cgit v1.2.3 From 1336b0198c2a41e6a1bc447e5dc42b04ff37bf70 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 15:32:53 -0500 Subject: Add caps lock; sucks that there is no light for it... --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index e9af3e91a3..7b8f0df74d 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| @@ -29,10 +29,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' */ - // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations - // TODO: maybe make almost identical layers but for wintdows and mac - // TODO: find a do nothing key, so you aren't tempted by useless keys - // TODO: add vi layer for arrow keys and shit on hjkl? // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing // If it accepts an argument (i.e, is a function), it doesn't need KC_. @@ -49,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, -- cgit v1.2.3 From abe8bfa3a6b4dfdf7f561c8028de807c0951d2f8 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 13:50:36 -0700 Subject: Update .gitignore to include VSCode setting. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7c1e434e31..8491433524 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ CMakeLists.txt .project .settings/ .idea +.browse.VC.db* \ No newline at end of file -- cgit v1.2.3 From 964c0641232643d66e3bf169feaadb2a86e8a59e Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 15:53:42 -0500 Subject: Update readme. My layout optimized for emacs & vim --- keyboard/ergodox_ez/keymaps/maz/readme.md | 88 +++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 27 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index 0de7d3646a..37dddab8a6 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,13 +1,24 @@ # Introduction ## Motivation -I created this keymap in an attempt to optimize my typing experience in text editors and the command-line. +I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line. More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. ## Changes +There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date. +### Modifier Keys The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. +### Layers +* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best. +* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse +* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer +* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries + +### Removal Of Keys +I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. + ## Caveats ### Thumb Cluster Range I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: @@ -20,39 +31,62 @@ I think it's quite dangerous to put something like control on the same key as en # Keymap ## Keymap 0: Basic layer ``` - ,--------------------------------------------------. ,--------------------------------------------------. - | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | - |--------+------+------+------+------+------| 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| Bksp |------| |------| Tab |Enter | - |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| - `--------------------' `----------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+--------+------. + | | | | | | | | + | Space| Bksp |------| |------| Tab |Enter | + | ctrl | gui | Alt | | Alt | gui | ctrl | + `--------------------' `----------------------' ``` ## Keymap 1: Symbol Layer +The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position ``` ,--------------------------------------------------. ,--------------------------------------------------. | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | . | 0 | = | | + | | | | | | | | | 0 | = | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Keymap 2: Arrow Layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | | | | | | | |PGDOWN| PGUP | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | HOME | END | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | `----------------------------------' `----------------------------------' ,-------------. ,-------------. | | | | | | @@ -63,24 +97,24 @@ I think it's quite dangerous to put something like control on the same key as en `--------------------' `--------------------' ``` -## Keymap 2: Media and mouse keys +## Keymap 3: Media and mouse keys ``` ,--------------------------------------------------. ,--------------------------------------------------. | | | | | | | | | | | | | | | | |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | | | | MsUp | | | | | | | | | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | | | | | | | Prev | Next | | | + | | |Mute |VolDn | VolUp| | | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | |VolUp |VolDn | Mute | | | + | | | Prev | Play | Next | | | | | | | `----------------------------------' `----------------------------------' ,-------------. ,-------------. | | | | | | ,------|------|------| |------+------+------. - | | | | | | |Brwser| - | | |------| |------| |Back | + |Brwser| | | | | | | + |Back | |------| |------| | | | | | | | | | | `--------------------' `--------------------' ``` -- cgit v1.2.3 From b9102b4bfa1040b34425af9d15ebd0d31caa0207 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Sun, 17 Jul 2016 15:57:23 -0500 Subject: Update readme. My layout optimized for emacs & vim --- keyboard/ergodox_ez/keymaps/maz/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index 37dddab8a6..dab06b8eb1 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -15,6 +15,7 @@ The biggest changes from the ergodox ez default keymap are the modifiers on the * the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse * the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer * caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries +** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus ### Removal Of Keys I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. -- cgit v1.2.3 From 973ea2f917001ed11238a3d2c747c602a2765298 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 13:58:43 -0700 Subject: LSpec: KC_GRV -> KC_EQL --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 778cbc63cf..3e3763e3f5 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -292,13 +292,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case LSpec: if (record->event.pressed) { if (record->tap.count && !record->tap.interrupted) { - register_code(KC_GRV); + register_code(KC_EQL); } else { layer_on(SPEC); } } else { if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_GRV); + unregister_code(KC_EQL); } else { layer_off(SPEC); } -- cgit v1.2.3 From e900c39669d457263d2ded393f512e928a64c6a2 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:01:41 -0700 Subject: RSpec: KC_EQL -> KC_MINS --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 3e3763e3f5..933d1d80cc 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -352,13 +352,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case RSpec: if (record->event.pressed) { if (record->tap.count && !record->tap.interrupted) { - register_code(KC_EQL); + register_code(KC_MINS); } else { layer_on(SPEC); } } else { if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_EQL); + unregister_code(KC_MINS); } else { layer_off(SPEC); } -- cgit v1.2.3 From 11f8d167eccf4b11f4405175c3a195717252c373 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:07:14 -0700 Subject: [BASE]: KC_MINS -> KC_GRV --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 933d1d80cc..9c0a96ebb6 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_PGUP ,KC_BSPC,KC_DEL ,KC_PGDN // right hand - ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) + ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) -- cgit v1.2.3 From e9453b3fdc73a4b79bbc43024e0eeba9469e6910 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:08:22 -0700 Subject: Update Base Layer comment to match new layout. --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 9c0a96ebb6..60b9afd3ef 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /******* Base Layer ******************************************************************************************************** * * ,------------------------------------------------------. ,------------------------------------------------------. - * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | + * | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special | * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| -- cgit v1.2.3 From 11bf8355cf90b64d749d39cd49ec597a48e8beb9 Mon Sep 17 00:00:00 2001 From: Toni Date: Sun, 17 Jul 2016 23:13:49 +0200 Subject: new modifier "J" is crtl --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index fc07f6da8d..a2623e0e09 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DEF] = KEYMAP_ISO_SPLITRSHIFT( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ + F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, F(17), KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , /* Keymap 1: F-and-vim Layer, modified with Space (Fn0) @@ -124,7 +124,7 @@ const uint16_t PROGMEM fn_actions[] = { [14] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), [15] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), [16] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), + [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_J), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -- cgit v1.2.3 From ecc0fce210e398566ed9cfbd69887d729ef0d8bd Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:16:31 -0700 Subject: [BASE]: Meh, Hyper now have symbols on both sides Left: MEH_T(KC_BSLS),ALL_T(KC_SLSH) Right: ALL_T(KC_LBRC),MEH_T(KC_RBRC) --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 60b9afd3ef..4654f1cb98 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' - * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | + * | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl | * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | Home | End | | Left | Right| @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC ,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) -,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI +,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI ,KC_HOME,KC_END ,KC_PGUP ,KC_BSPC,KC_DEL ,KC_PGDN @@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) - ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL ,KC_LEFT ,KC_RGHT ,KC_UP ,KC_DOWN ,KC_ENT ,KC_SPC @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) ,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_TAB -,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI +,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI ,KC_LEFT ,KC_RGHT ,KC_UP ,KC_SPC ,KC_ENT ,KC_DOWN -- cgit v1.2.3 From 5bf40bfb36fbd54dc154ef25c2dad41ddcb0b268 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:19:22 -0700 Subject: [MEDIA]: Remove Power, Sleep, Mail, MyComp I kept hitting these on accident while attempting to move the cursor or mouse. =P --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index 4654f1cb98..dc0f8aa6cf 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -127,9 +127,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,---------------------------------------------------------------. ,---------------------------------------------------------------. * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| - * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | + * | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | | * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| - * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | + * | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | | * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' @@ -146,8 +146,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MDIA] = KEYMAP( // left hand KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC -,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U -,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U +,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD ,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D ,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 ,KC_WSTP ,KC_WREF @@ -155,8 +155,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_WBAK ,KC_NO ,KC_WHOM // right hand ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS - ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS - ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS + ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS + ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL ,KC_MPRV ,KC_MNXT -- cgit v1.2.3 From ea2b1670f61d166463d9edcba637564fca5d9a7a Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 14:56:37 -0700 Subject: Update description comment. --- keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c index dc0f8aa6cf..ec6ceb96bc 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c @@ -25,15 +25,16 @@ #define MDR 23 // mouse down right /* - * The Ordinary Layout for the Ergodox EZ keyboard, v4 + * teckinesis layout for ErgoDox (EZ) * + * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com * * No rights reserved. This software is in the public domain. * Credit me if you are friendly but if you're a jerk don't bother. * * Details: readme.md - * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary + * https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -- cgit v1.2.3 From 8fb407457857c48e16f27d1a774a08f2214d50e6 Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 15:04:50 -0700 Subject: Update readme.md * Updated layout images, json from Keyboard Layout Designer * Added links to Keyboard Layout Designer templates. * Added images of TECK, Kinesis layouts. --- .../keymaps/teckinesis/advantage_layout_win.png | Bin 0 -> 93337 bytes keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 39 +++- .../keymaps/teckinesis/teck209layout.jpg | Bin 0 -> 89673 bytes .../keymaps/teckinesis/teckinesis-base.json | 200 ++++++++++----------- .../keymaps/teckinesis/teckinesis-base.png | Bin 94828 -> 93743 bytes .../keymaps/teckinesis/teckinesis-symbol.json | 130 +++++++------- .../keymaps/teckinesis/teckinesis-symbol.png | Bin 97055 -> 97350 bytes 7 files changed, 191 insertions(+), 178 deletions(-) create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png create mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png b/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png new file mode 100644 index 0000000000..0a1df68091 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md index e4881dbbfd..c6f2c666f7 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -2,15 +2,52 @@ *A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)* +I love "The Ordinary Layout", but I still use a [TECK](https://www.trulyergonomic.com/store/index.php) +at the office, and I found the transition back and forth to be a bit more difficult than I expected. + +This layout consists of only slight changes to "The Ordinary Layout" based on the layouts of the +[(original) TECK Model 209](https://www.trulyergonomic.com/store/layout-designer--configurator--reprogrammable--truly-ergonomic-mechanical-keyboard/#KTo7PD0+P0BBQkNERUw5394rNR4fICEi4yMkJSYnLS4xOBQaCBUXTBwYDBITLzDhBBYHCQorCw0ODzPl4B0bBhkFKhEQNjc05OPiSktOTSwoLFBSUU/mZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX2BhAFZXAAAAAAAAAAAAXF1eVAAAAAAAAAAAAABZWltVAAAAAAAAAAAAYgBjAAAAAAAAAAAAWFcAAAAAAACTAQAMAiMBAAwBigEADAIhAQAMAZQBAAwBkgEADAGDAQAMALYBAAwAzQEADAC1AQAMAOIBAAwA6gEADADpAQAMALhJAEYAAAAAAEitR64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk6Ozw9Pj9AQUJDREVMOd/eKzUeHyAhIuMjJCUmJy0uMTgUGggVF0wcGAwSEy8w4QQWBwkKKwsNDg8z5eMdGwYZBSoREDY3NOfg4kpLTk0sKCxQUlFP5uQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9gYQBWVwAAAAAAAAAAAFxdXlQAAAAAAAAAAAAAWVpbVQAAAAAAAAAAAGIAYwAAAAAAAAAAAFhXAAAAAAAAkwEADAIjAQAMAYoBAAwCIQEADAGUAQAMAZIBAAwBgwEADAC2AQAMAM0BAAwAtQEADADiAQAMAOoBAAwA6QEADAC4SQBGAAAAAABIrUeuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) and +the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf) + ## The Base Layout ## +[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0) \ ![teckinesis base layout](teckinesis-base.png) +### Changes from The Ordinary Layout ### + +* Moved KC_MINS from the key left of the 6 to the RSpec key. +* Moved KC_EQL from RSpec to LSpec. +* Moved KC_GRV from LSpec to the key left of the 6. +* Mdded KC_BSLS to the left Meh key. +* Added KC_SLSH to the left Hyper key. +* Added KC_LBRC to the right Hyper key. +* Added KC_RBRC to the right Meh key. + ## The Symbols Layer ## +[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61) \ ![teckinesis symbols layout](teckinesis-symbol.png) +### Changes from The Ordinary Layout ### + +* None. + ## The Media Layer ## -(placeholder) +[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908) \ +![teckinesis media layout](teckinesis-media.png) + +### Changes from The Ordinary Layout ### + +* Removed Power, Sleep, Mail, My Computer keys. +(I kept hitting these while using the mouse/cursor. =P) + +## TECK Layout ## + +![TECK 209 Layout](teck209layout.jpg) + +## Kinesis Advantage Layout ## + +![Kinesis Advantage Layout](advantage_layout_win.png) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg b/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg new file mode 100644 index 0000000000..a97844f4fc Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json index f1efab2721..69fe28cf7c 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json +++ b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json @@ -1,8 +1,8 @@ [ { - "name": "teckinesis", + "name": "teckinesis (Base Layer)", "author": "Will Wolff-Myren", - "notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n(placeholder)\r\n\r\n## The Symbols Layer ##\r\n\r\n(placeholder)\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)", + "notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n![teckinesis base layout](teckinesis-base.png)\r\n\r\n## The Symbols Layer ##\r\n\r\n![teckinesis symbols layout](teckinesis-symbol.png)\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)\r\n", "switchMount": "cherry", "switchBrand": "gateron", "switchType": "KS-3-Tea" @@ -15,7 +15,7 @@ { "x": 10.5 }, - ")\n0" + "*\n8" ], [ { @@ -26,59 +26,57 @@ { "x": 1 }, - "$\n4" - ], - [ + "$\n4", { - "y": -0.995, - "x": 14 + "x": 8.5 }, - "(\n9", + "&\n7", { "x": 1 }, - "_\n-" + "(\n9" ], [ { - "y": -0.8799999999999999, + "y": -0.875, "x": 5.5 }, "%\n5", - "^\n6", { - "x": 4.5 + "c": "#ff4444" }, - "&\n7", - "*\n8" + "Esc", + { + "x": 4.5, + "c": "#cccccc" + }, + "~\n`", + "^\n6" ], [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "w": 1.5 + }, + "Special\n\n+\n\n\n\nShift\n=", + { + "c": "#cccccc" }, "!\n1", { "x": 14.5 }, - "+\n=" - ], - [ + ")\n0", { - "y": -0.995, "c": "#2277ff", "w": 1.5 }, - "Media\n\nEsc\n\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "~\n`\nMedia\n\n\n\n\nShift" + "_\n\nSpecial\n\n\n\n-\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, "c": "#cccccc" }, @@ -127,30 +125,33 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "fa": [ + 0, + 0, + 4 + ], + "w": 1.5 + }, + "Media\n\n\n\n\n\nShift", + { + "c": "#cccccc" }, "Q", { "x": 14.5 }, - "P" - ], - [ + "P", { - "y": -0.9950000000000001, "c": "#2277ff", + "f": 3, "w": 1.5 }, - "Symbols\n\n?\n/\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "|\n\\\nSymbols\n\n\n\n\nShift" + "|\n\\\nMedia\n\n\n\n\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, "c": "#cccccc" }, @@ -193,36 +194,34 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "c": "#cccccc" }, "A", { "x": 14.5 }, - ":\n;" - ], - [ + ":\n;", { - "y": -0.9950000000000001, "c": "#2277ff", + "f": 3, "w": 1.5 }, - "Capitals\n\n\n\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "\n\nCapitals\n\n\n\n\nShift" + "\"\n'\nSymbols\n\n\n\n\nShift" ], [ { - "y": -0.6299999999999999, + "y": -0.625, "x": 6.5, "c": "#54d6de", "fa": [ 0, 0, - 0, + 4, 1 ], "h": 1.5 @@ -279,109 +278,99 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "c": "#cccccc" }, "Z", { "x": 14.5 }, - "?\n/" - ], - [ + "?\n/", { - "y": -0.9950000000000001, "c": "#2277ff", + "f": 3, "w": 1.5 }, - "Ctrl", - { - "x": 16.5, - "w": 1.5 - }, - "Ctrl" + "\n\nCapitals\n\n\n\n\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, - "c": "#77aaff" + "c": "#77aaff", + "fa": [ + 5, + 0, + 4, + 1 + ] }, - "Option\n\n\nLAlt", + "\n\n\nLAlt", { "x": 10.5 }, - "Option\n\n\nRAlt" + "\n\n\nRAlt" ], [ { "y": -0.875, "x": 2.5, - "f": 3 - }, - "Hyper\n\n}\n]", - { - "x": 1 + "fa": [ + 5, + 1 + ] }, - "Cmd\n\n\nSuper", + "\nHyper\n?\n/", { - "x": 8.5, + "x": 1, "fa": [ 5, - 0, - 0, 1, 0, - 0, - 0 + 1 ] }, "\n\n\nSuper", + { + "x": 8.5 + }, + "\n\n\nSuper", { "x": 1, "fa": [ - 5, - 0, - 0, 0, 0, 0, 1 ] }, - "\n\n~\n`\n\n\nHyper" + "{\n[\n\nHyper" ], [ { "y": -0.75, - "x": 0.5, - "f": 2 + "x": 0.5 }, - "Print\n\n\n\n\n\nScreen", + "Ctrl\n\n\nLCtrl", { - "f": 3 + "f2": 1 }, - "Meh\n\n{\n[", + "\nMeh\n|\n\\", { "x": 14.5, "fa": [ 0, 0, - 0, - 0, - 0, - 0, - 2 + 1, + 1 ] }, - "\n\n\"\n'\n\n\nMeh" - ], - [ - { - "y": -0.9950000000000001, - "x": 18, - "f": 2 - }, - "Special\n\n\n\n\n\nShift" + "}\n]\n\nMeh", + "Ctrl\n\n\nRCtrl" ], [ { @@ -390,20 +379,13 @@ "ry": 4.25, "y": -1, "x": 1, - "c": "#54d6de", - "f": 3 + "c": "#54d6de" }, "Home", "End" ], [ { - "fa": [ - 0, - 0, - 0, - 1 - ], "h": 2 }, "< Del\n\n\nBackspace", diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png index f1a5eda0d1..7c4584e9f3 100644 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png and b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json index 052c23da5a..439d0128ea 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json +++ b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json @@ -1,6 +1,7 @@ [ { - "name": "teckinesis (Symbols Layer)", + "name": "teckinesis (Symbol Layer)", + "author": "Will Wolff-Myren", "switchMount": "cherry", "switchBrand": "gateron", "switchType": "KS-3-Tea" @@ -14,7 +15,7 @@ { "x": 10.5 }, - "F10" + "F8" ], [ { @@ -25,60 +26,60 @@ { "x": 1 }, - "F4" - ], - [ + "F4", { - "y": -0.995, - "x": 14 + "x": 8.5 }, - "F9", + "F7", { "x": 1 }, - "F11" + "F9" ], [ { - "y": -0.8799999999999999, + "y": -0.875, "x": 5.5 }, "F5", - "F6", { - "x": 4.5 + "c": "#ff4444" }, - "F7", - "F8" - ], - [ + "Esc", { - "y": -0.875, - "x": 1.5 + "x": 4.5, + "c": "#bbddbb" }, - "F1" + "_\n\n\n\n\n\n-", + { + "c": "#99de2a" + }, + "F6" ], [ { - "y": -0.995, + "y": -0.875, "c": "#2277ff", "w": 1.5 }, - "Media\n\nEsc\n\n\n\nShift", + "Special\n\n\n\n\n\nShift", { - "x": 15.5, "c": "#99de2a" }, - "F12", + "F1", + { + "x": 14.5 + }, + "F10", { "c": "#2277ff", "w": 1.5 }, - "\n\nMedia\n\n\n\n\nShift" + "\n\nSpecial\n\n\n\n\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, "c": "#bbddbb" }, @@ -131,35 +132,30 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "w": 1.5 + }, + "Media\n\n\n\n\n\nShift", + { + "c": "#bbddbb" }, "!", { "x": 14.5, "c": "#89b087" }, - "/" - ], - [ + "/", { - "y": -0.9950000000000001, - "c": "#000000", - "t": "#ff0000", - "w": 1.5 - }, - "Symbols\n\n\n\n\n\nShift", - { - "x": 16.5, + "c": "#2277ff", "w": 1.5 }, - "\n\nSymbols\n\n\n\n\nShift" + "\n\nMedia\n\n\n\n\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, - "c": "#bbddbb", - "t": "#000000" + "c": "#bbddbb" }, "(", { @@ -204,33 +200,34 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "c": "#bbddbb", + "t": "#000000" }, "#", { "x": 14.5, "c": "#89b087" }, - "*" - ], - [ + "*", { - "y": -0.9950000000000001, - "c": "#2277ff", - "w": 1.5 - }, - "Capitals\n\n\n\n\n\nShift", - { - "x": 16.5, + "c": "#000000", + "t": "#ff0000", "w": 1.5 }, - "\n\nCapitals\n\n\n\n\nShift" + "\n\nSymbols\n\n\n\n\nShift" ], [ { - "y": -0.6299999999999999, + "y": -0.625, "x": 6.5, "c": "#54d6de", + "t": "#000000", "fa": [ 0, 0, @@ -295,35 +292,32 @@ [ { "y": -0.875, - "x": 1.5 + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "c": "#bbddbb" }, "%", { "x": 14.5, "c": "#89b087" }, - "-" - ], - [ + "-", { - "y": -0.9950000000000001, "c": "#2277ff", "w": 1.5 }, - "Ctrl", - { - "x": 16.5, - "w": 1.5 - }, - "\n\nCtrl" + "\n\nCapitals\n\n\n\n\nShift" ], [ { - "y": -0.3799999999999999, + "y": -0.375, "x": 3.5, "c": "#77aaff" }, - "Option\n\n\nLAlt", + "\n\n\nLAlt", { "x": 10.5, "c": "#89b087" @@ -340,7 +334,7 @@ { "x": 1 }, - "Cmd\n\n\nSuper", + "\n\n\nSuper", { "x": 8.5, "c": "#89b087" diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png index 4750dbf1f4..7ca86cf47d 100644 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png and b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png differ -- cgit v1.2.3 From 3c4620bf8192a38e0d5e83e4e65ffda4a33a882d Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 17 Jul 2016 15:08:04 -0700 Subject: Update readme.md * Markdown cleanup --- keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md index c6f2c666f7..84b7375056 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -1,4 +1,4 @@ -# teckinesis Layout # +# teckinesis Layout *A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)* @@ -11,7 +11,7 @@ the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/a ## The Base Layout ## -[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0) \ +[teckinesis (Base Layer)](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0) ![teckinesis base layout](teckinesis-base.png) ### Changes from The Ordinary Layout ### @@ -26,7 +26,7 @@ the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/a ## The Symbols Layer ## -[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61) \ +[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61) ![teckinesis symbols layout](teckinesis-symbol.png) ### Changes from The Ordinary Layout ### @@ -35,7 +35,7 @@ the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/a ## The Media Layer ## -[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908) \ +[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908) ![teckinesis media layout](teckinesis-media.png) ### Changes from The Ordinary Layout ### @@ -43,7 +43,9 @@ the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/a * Removed Power, Sleep, Mail, My Computer keys. (I kept hitting these while using the mouse/cursor. =P) -## TECK Layout ## +# Truly Ergonomic and Kinesis Advantage Layouts + +## TECK 209 Layout ## ![TECK 209 Layout](teck209layout.jpg) -- cgit v1.2.3 From 53eb36c085dafc1305de77de629eb157a0a8ef8f Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Mon, 18 Jul 2016 08:46:04 +0200 Subject: ergodox_ez: Update my keymap to v1.3 This updates my ErgoDox EZ layout to v1.3, which has the following noteworthy changes: * Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a **heatmap** out of the logs. * The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the **base layer** for an image that shows where arrows are. * The **experimental** layer has been redone, and is now called **ADORE**, and as such, can be enabled by `LEAD a` now. * Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. Signed-off-by: Gergely Nagy --- keyboards/ergodox_ez/keymaps/algernon/Makefile | 3 + .../keymaps/algernon/images/adore-layer.png | Bin 0 -> 95615 bytes .../keymaps/algernon/images/base-layer.png | Bin 105162 -> 95654 bytes .../keymaps/algernon/images/experimental-layer.png | Bin 105172 -> 0 bytes .../ergodox_ez/keymaps/algernon/images/heatmap.png | Bin 0 -> 137912 bytes keyboards/ergodox_ez/keymaps/algernon/keymap.c | 181 +++---- keyboards/ergodox_ez/keymaps/algernon/readme.md | 207 ++++---- .../algernon/tools/heatmap-base-layout.json | 533 +++++++++++++++++++++ .../keymaps/algernon/tools/log-to-heatmap.py | 145 ++++++ 9 files changed, 855 insertions(+), 214 deletions(-) create mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png create mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png create mode 100644 keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json create mode 100755 keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox_ez/keymaps/algernon/Makefile index cd7e9e9d2a..005f9750c3 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/Makefile +++ b/keyboards/ergodox_ez/keymaps/algernon/Makefile @@ -3,6 +3,9 @@ COMMAND_ENABLE=no SLEEP_LED_ENABLE=no UNICODE_ENABLE=no FORCE_NKRO ?= yes +DEBUG_ENABLE = no +CONSOLE_ENABLE = yes +TAP_DANCE_ENABLE = yes ifeq (${FORCE_NKRO},yes) OPT_DEFS += -DFORCE_NKRO diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png new file mode 100644 index 0000000000..3df68ea53d Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png index c4e298b6b7..7b25a05b3a 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png deleted file mode 100644 index 81155851b5..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png b/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png new file mode 100644 index 0000000000..356035e0a6 Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox_ez/keymaps/algernon/keymap.c index 2af3d5f8cd..09d8dffd59 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/keymap.c +++ b/keyboards/ergodox_ez/keymaps/algernon/keymap.c @@ -10,12 +10,13 @@ #include "mousekey.h" #include "timer.h" #include "keymap_plover.h" +#include "eeconfig.h" /* Layers */ enum { BASE = 0, - EXPRM, + ADORE, ARRW, APPSEL, HUN, @@ -94,7 +95,7 @@ enum { /* Custom keycodes */ enum { - CT_CLN = 0x7101 + CT_CLN = 0 }; /* States & timers */ @@ -114,8 +115,7 @@ uint16_t oh_left_blink_timer = 0; uint8_t oh_right_blink = 0; uint16_t oh_right_blink_timer = 0; -uint8_t ct_cln_count = 0; -uint16_t ct_cln_timer = 0; +bool log_enable = false; /* The Keymap */ @@ -124,18 +124,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | = | + * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | Left | Up | : | | - | Down | Rght | | | + * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | ARRW | + * | LAlt | GUI | | MDIA | 1HND | * ,------|------|------| |------+------+------. * | | | Ctrl | | LEAD | | | * |Backsp|LShift|------| |------| Enter| Space| @@ -146,67 +146,67 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO + ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL) + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,OSL(NMDIA),OSL(ARRW) + ,OSL(NMDIA),M(OH_LEFT) ,KC_LEAD ,F(F_HUN) ,KC_ENT ,KC_SPC ), -/* Keymap 1: Experimental layer +/* Keymap 1: Adore layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | L | F | C | R | J | = | + * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | + * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| Z | G | V | K | X | | | | Q | M | W | B | / | Stop | + * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | Left | Up | : | | - | Down | Rght | | | + * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | ARRW | + * | LAlt | GUI | | MDIA | 1HND | * ,------|------|------| |------+------+------. * | | | Ctrl | | LEAD | | | * |Backsp|LShift|------| |------| Enter| Space| * | | | ESC | | HUN | | | * `--------------------' `--------------------' */ -[EXPRM] = KEYMAP( +[ADORE] = KEYMAP( // left hand KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_Z ,KC_G ,KC_V ,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN +,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC +,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_L ,KC_F ,KC_C ,KC_R ,KC_J ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_Q ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP - ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO + ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL) + ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP + ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,OSL(NMDIA),OSL(ARRW) + ,OSL(NMDIA),M(OH_LEFT) ,KC_LEAD ,F(F_HUN) ,KC_ENT ,KC_SPC ), @@ -216,19 +216,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------. ,-----------------------------------------------------. * | | | | | | | | | | | | | | | | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | + * | | | | | | | | | | | Home | Up | End | | | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | + * | | | | | | |------| |------| | Left | Down | Rght | | | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| * | | | | | | | | | | | | | | | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | Home | PgUp | | | | PgDn | End | | | + * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. * | | | | | | | | - * | | |------| |------| | | + * | | |------| |------| PgUp | PgDn | * | | | | | | | | * `--------------------' `--------------------' */ @@ -239,7 +239,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_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_PGUP ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS @@ -247,14 +247,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // right hand ,KC_TRNS ,KC_TRNS ,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 ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_PGDN ,KC_END ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_PGUP ,KC_PGDN ), /* Keymap 3: Application select layer @@ -843,8 +843,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +uint8_t is_adore = 0; + // Runs just one time when the keyboard initializes. void matrix_init_user(void) { + uint8_t dl; + ergodox_led_all_on(); for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { ergodox_led_all_set (i); @@ -856,6 +860,12 @@ void matrix_init_user(void) { _delay_ms (10); } ergodox_led_all_off(); + + if (!eeconfig_is_enabled()) + eeconfig_init(); + dl = eeconfig_read_default_layer (); + if (dl == (1UL << ADORE)) + is_adore = 1; }; LEADER_EXTERNS(); @@ -882,29 +892,32 @@ void ang_tap (uint16_t codes[]) { register_code (code); \ unregister_code (code) -uint8_t is_exp = 0; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) - unregister_code (KC_LGUI); - - if (ct_cln_timer && timer_elapsed (ct_cln_timer) > TAPPING_TERM) { - if (ct_cln_count == 1) { +void ang_tap_dance (qk_tap_dance_state_t *state) { + switch (state->keycode) { + case TD(CT_CLN): + if (state->count == 1) { register_code (KC_RSFT); register_code (KC_SCLN); unregister_code (KC_SCLN); unregister_code (KC_RSFT); - } else if (ct_cln_count == 2) { + } else if (state->count == 2) { register_code (KC_SCLN); unregister_code (KC_SCLN); + reset_tap_dance (state); } - - ct_cln_count = 0; - ct_cln_timer = 0; } +} + +const qk_tap_dance_action_t tap_dance_actions[] = { + [CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance) +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) + unregister_code (KC_LGUI); if (layer != OHLFT) oh_left_blink = 0; @@ -921,7 +934,7 @@ void matrix_scan_user(void) { ergodox_right_led_1_on (); ergodox_right_led_2_on (); ergodox_right_led_3_on (); - } else if (layer == EXPRM) { + } else if (layer == ADORE) { ergodox_right_led_1_on (); ergodox_right_led_2_on (); ergodox_right_led_3_on (); @@ -961,7 +974,7 @@ void matrix_scan_user(void) { ergodox_right_led_1_on (); } else { ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM) + if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) ergodox_right_led_1_off (); } @@ -971,7 +984,7 @@ void matrix_scan_user(void) { ergodox_right_led_2_on (); } else { ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM) + if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) ergodox_right_led_2_off (); } @@ -981,7 +994,7 @@ void matrix_scan_user(void) { ergodox_right_led_3_on (); } else { ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != PLVR && layer != EXPRM) + if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) ergodox_right_led_3_off (); } @@ -989,6 +1002,10 @@ void matrix_scan_user(void) { leading = false; leader_end (); + SEQ_ONE_KEY (KC_D) { + log_enable = !log_enable; + } + SEQ_ONE_KEY (KC_U) { ang_do_unicode (); } @@ -1036,11 +1053,12 @@ void matrix_scan_user(void) { unregister_code (KC_LGUI); } - SEQ_ONE_KEY (KC_E) { - if (is_exp == 0) { + SEQ_ONE_KEY (KC_A) { + if (is_adore == 0) { default_layer_and (0); - default_layer_or ((1 << EXPRM)); - is_exp = 1; + default_layer_or ((1UL << ADORE)); + eeconfig_update_default_layer ((1UL << ADORE)); + is_adore = 1; ergodox_led_all_off (); ergodox_right_led_3_on (); @@ -1054,9 +1072,10 @@ void matrix_scan_user(void) { _delay_ms (100); ergodox_right_led_1_off (); } else { - is_exp = 0; + is_adore = 0; default_layer_and (0); - default_layer_or (1 << BASE); + default_layer_or (1UL << BASE); + eeconfig_update_default_layer ((1UL << BASE)); ergodox_led_all_off (); ergodox_right_led_1_on (); @@ -1075,29 +1094,11 @@ void matrix_scan_user(void) { } bool process_record_user (uint16_t keycode, keyrecord_t *record) { - switch(keycode) { - case CT_CLN: - if (record->event.pressed) { - ct_cln_count++; - ct_cln_timer = timer_read (); - } else { - } - return false; - break; + uint8_t layer = biton32(layer_state); - default: - if (ct_cln_count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (ct_cln_count == 2) { - register_code (KC_SCLN); - unregister_code (KC_SCLN); - } - ct_cln_count = 0; - ct_cln_timer = 0; - break; + if (log_enable && layer == BASE) { + xprintf ("KL: col=%d, row=%d\n", record->event.key.col, + record->event.key.row); } return true; diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md index 6b7e8fa2e1..2312dc59e2 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/readme.md +++ b/keyboards/ergodox_ez/keymaps/algernon/readme.md @@ -1,27 +1,28 @@ + + algernon's layout ======================= -This is an unconventional layout for the ErgoDox EZ. For more details about the -history of the layout, see my -[blog posts about my ErgoDox journey][blog-ergodox]. +This is an unconventional layout for the ErgoDox EZ. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox]. [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ -Some of the things in the layout only work when one uses Spacemacs and GNOME -under Linux. Your mileage may vary. +Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary. ## Table of Contents * [Layouts](#layouts) - - [Base layer](#base-layer) - - [Experimental layer](#experimental-layer) - - [Hungarian layer](#hungarian-layer) - - [Navigation and media layer](#navigation-and-media-layer) - - [One-handed layer](#one-handed-layer) - - [Steno layer](#steno-layer) - - [LED states](#led-states) + - [Base layer](#base-layer) + - [ADORE layer](#adore-layer) + - [Hungarian layer](#hungarian-layer) + - [Navigation and media layer](#navigation-and-media-layer) + - [One-handed layer](#one-handed-layer) + - [Steno layer](#steno-layer) + - [LED states](#led-states) +* [Tools](#tools) + - [Heatmap](#heatmap) * [Building](#building) - - [Using on Windows](#using-on-windows) + - [Using on Windows](#using-on-windows) * [Changelog](#changelog) * [License](#license) @@ -31,133 +32,98 @@ under Linux. Your mileage may vary. [![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) -At its core, this is a Dvorak layout, with some minor changes. The more -interesting parts are how certain keys behave: - -* The keys on the number row double as function keys, when held for a bit longer - than an usual tap. This allows me to use the function keys without having to - switch layers. -* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they - are considered active for the next key press only. When double tapped, they - toggle on, until a third, single tap sometime later. When held, they act as - expected. My usual pattern is that I use these for the next keypress only, so - this behaviour is perfect. If I need them held, I'll just double-tap. -* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, - which pops up an application selector. It also switches to a one-shot layer, - where the number row on the left half turns into app selector macros, for the - most common things I usually want to switch to. Otherwise it behaves as on a - normal layout. -* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of - the one-shot modifiers are in-flight (as in, single-tapped, and not expired - yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if - active. Otherwise it sends the usual keycode. -* The **Media**, **Arrow**, and **Hun** layer keys are one-shot, the **1Hand** - and **STENO** keys are toggles. -* Toggling the **Arrow** layer toggles between the cursor arrows and the paging - keys on the bottom row. +At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave: + +* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers. +* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. +* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. +* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. +* The **Media** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** keys are toggles. +* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. * Tapping the `:` key once yields `:`, tapping it twice yields `;`. -* The **Lead** key allows me to type in a sequence of keys, and trigger some - actions: - - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that - does this. +* The **Lead** key allows me to type in a sequence of keys, and trigger some actions: + - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that does this. - `LEAD l` uses the unicode input method to enter a `λ`. - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` - `LEAD y` types `\o/`. - `LEAD w m` maximises the currently focused window. - - `LEAD e` makes the [experimental layer](#experimental-layer) the default. + - `LEAD a` makes the [ADORE layer](#adore-layer) the default. - `LEAD v` prints the firmware version, the keyboard and the keymap. + - `LEAD d` toggles logging keypress positions to the HID console. -## Experimental layer +## ADORE layer -[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08) +[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a) -While using the standard Dvorak layout, I encountered a number of -inconveniences, and on this layer, I am playing with ideas to make the layout -feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, -had shortcomings I was not happy with. So now this is something inbetween, with -own observations thrown in. How it works out in the long run remains to be seen. +While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen. [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm + +Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name. ## Hungarian layer [![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) -On this layer, the accented characters are at the same position as their base -variant. For some, which can have other diatribes, the long one is on top, -short's on bottom. Tapping any of the accented characters takes us back to the -base layer. +On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. ## Navigation and media layer [![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) -This layer is primarily for navigating with the cursor or the mouse, and some -media things. +This layer is primarily for navigating with the cursor or the mouse, and some media things. ## One-handed layer [![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) -The one-handed layer is used in situations where the right hand is occupied, by -mousing around, for example. Tapping the `OTHER` key switches which side is -active. For the most part, keys remain in their usual position. When the right -half is active, keys are mirrored to the left half. +The one-handed layer is used in situations where the right hand is occupied, by mousing around, for example. Tapping the `OTHER` key switches which side is active. For the most part, keys remain in their usual position. When the right half is active, keys are mirrored to the left half. The differences are as follows: -* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier - to tap. -* Most keys on the thumb cluster now have dual uses, and these do not change - when switching sides: - - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held - for longer than a normal tap. +* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier to tap. +* Most keys on the thumb cluster now have dual uses, and these do not change when switching sides: + - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held for longer than a normal tap. - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. -* The `Apps`/`BASE` key can be used to go back to the base layer, by - long-tapping it. A short-tap will send the `App` key, as usual. +* The `Apps`/`BASE` key can be used to go back to the base layer, by long-tapping it. A short-tap will send the `App` key, as usual. ## Steno layer [![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) -This is to be used with [Plover](http://www.openstenoproject.org/plover/), -nothing really fancy here. The **STENO** key toggles the layer on and off, and -sends the toggle command to Plover too. +This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too. ## LED states -The primary purpose of the LEDs is to show the modifier status, a secondary, to -show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each -have their designated LEDs: the *red*, *green* and *blue*, respectively. When a -modifier is in a one-shot state, the respective LED will turn on with a dimmer -light. If the modifier is toggled on, the brightness of the LED turns full. +The primary purpose of the LEDs is to show the modifier status, a secondary, to show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each have their designated LEDs: the *red*, *green* and *blue*, respectively. When a modifier is in a one-shot state, the respective LED will turn on with a dimmer light. If the modifier is toggled on, the brightness of the LED turns full. For the layers, the following rules apply: -* When the [Experimental layer](#experimental-layer) is toggled on, LEDs will - light up from left to right in a sequence, then turn off. When the layer is - toggled off, the LEDs light up and turn off in the other direction. No LEDs - are on while the layer is active. -* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* - LEDs are on. -* When the [Navigation and media layer](#navigation-and-media-layer) is active, - the *red* and *green* ones are on. -* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is - on and bright, and either the *red* or the *blue* one is going to slowly - blink, depending on the currently active side. +* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. +* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. +* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. +* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is on and bright, and either the *red* or the *blue* one is going to slowly blink, depending on the currently active side. * For the [Steno layer](#steno-layer), all LEDs will be turned on. -Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers -use a stronger one, and modifiers override any layer preferences. For example, -when on the one-handed layer, with the left side active (*red* light blinking), -if `Shift` is on, the *red* light will be constantly on. +Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. + +# Tools + +## Heatmap + +When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too. + +Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, simply point `tools/log-to-heatmap.py` to a base layout file (one is included in the `tools/` directory), and the key position log. The latter one can create by running `hid-listen`, and redirecting its output to a file. + + [kle]: http://www.keyboard-layout-editor.com/ + +The generated heatmap looks somewhat like this: + + ![Heatmap](images/heatmap.png) # Building -To make my workflow easier, this layout is maintained in -[its own repository][algernon:ez-layout]. To build it, you will need the -[QMK][qmk] firmware checked out, and this repo either checked out to something -like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: +To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: [algernon:ez-layout]: https://github.com/algernon/ergodox-layout [qmk]: https://github.com/jackhumbert/qmk_firmware @@ -170,9 +136,7 @@ $ git clone https://github.com/algernon/ergodox-layout.git \ $ make KEYBOARD=ergodox_ez KEYMAP=algernon-master ``` -From time to time, updates may be submitted back to the QMK repository. If you -are reading it there, you can build the firmware like any other firmware -included with it (assuming you are in the root directory of the firmware): +From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): ``` $ make KEYBOARD=ergodox_ez KEYMAP=algernon @@ -180,43 +144,40 @@ $ make KEYBOARD=ergodox_ez KEYMAP=algernon ## Using on Windows -The keymap default to forcing NKRO, which seems to upset Windows, and except the -modifiers, none of them work. If you experience this problem, recompile the -firmware with `FORCE_NKRO=no` added to the `make` command line. +The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line. # Changelog +## v1.3 - 2016-07-06 + +* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. +* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. +* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. +* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. + ## v1.2 - 2016-06-22 -* The forced NKRO mode can be easily toggled off at compile-time, to make the - firmware compatible with [certain operating systems](#using-on-windows). -* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to - be double-tapped, instead of shifted. -* The `=` and `\` keys were swapped, `=` moved to the home row, on both the - [base](#base-layer) and the [experimental](#experimental-layer) layers. -* The arrow and navigation keys were redone, they are now more accessible, but - the navigation keys require an extra tap to access. -* The **Emacs** layer is gone, replaced by a simplified - [navigation and media](#navigation-and-media-layer) layer. +* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). +* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. +* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. +* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. +* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer. * `LEAD v` types the firmware version, and the keymap version. -* On the [experimental](#experimental-layer) layer, the `L` and `Q`, and the `K` - and `G` keys were swapped. -* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it - easier on my fingers. +* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. +* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. ## v1.1 - 2016-06-14 * The keyboard starts in NKRO mode, bootmagic and other things are disabled. * A [Steno](#steno-layer) layer was added, to be used with Plover. -* An [experimental](#experimental-layer) layer was added, something halfway - between Dvorak and Capewell-Dvorak. A work in progress. +* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. * `LEAD y` types `\o/`. * Some keys on the [Base](#base-layer) layer have been moved around: - - `?` moved to the left pinky, left of `Q`. - - `=` shifted one row down, but `F11` stayed where it was. - - `-` on the left half was replaced by `Tab`. - - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - - `:` now inputs `;` when shifted. + - `?` moved to the left pinky, left of `Q`. + - `=` shifted one row down, but `F11` stayed where it was. + - `-` on the left half was replaced by `Tab`. + - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. + - `:` now inputs `;` when shifted. * `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. ## v1.0 - 2016-05-26 @@ -225,6 +186,4 @@ Initial version. # License -The layout, being a derivative of the original TMK firmware which is under the -GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older -version. +The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version. diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json new file mode 100644 index 0000000000..148bb1f23b --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json @@ -0,0 +1,533 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 6 + }, + "", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 3, + "w": 1.5 + }, + "\n\n~\n`", + { + "t": "#0d0d0b" + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4 + }, + ">\n.", + { + "x": 10.5, + "a": 6 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 4 + }, + "<\n,", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "P", + { + "x": 8.5 + }, + "G", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "R" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "Y", + { + "c": "#93c9b7", + "a": 4, + "h": 1.5 + }, + "{\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 6, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 14.5, + "a": 6 + }, + "L", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "U", + { + "x": 8.5, + "n": true + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "I", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "a": 7, + "h": 1.5 + }, + "(", + { + "x": 4.5, + "h": 1.5 + }, + ")" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 6 + }, + "J", + { + "x": 10.5 + }, + "W" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "Q", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "K", + { + "x": 8.5 + }, + "M", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "V" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "X", + { + "x": 6.5 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 4, + "f": 3 + }, + "?\n/", + { + "x": 14.5, + "a": 6 + }, + "Z", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "w": 1.5 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": false, + "a": 5 + }, + ";\n:", + { + "x": 8.5 + }, + "_\n-", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "1HAND" + ], + [ + { + "x": -3 + }, + "LEAD", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "HUN" + ] +] diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py new file mode 100755 index 0000000000..a13d12e81a --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py @@ -0,0 +1,145 @@ +#! /usr/bin/env python +import json +import os +import sys +import re + +from math import floor + +cr_coord_map = [ + [ + # Row 0 + [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], + [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], + ], + [ + # Row 1 + [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], + [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], + ], + [ + # Row 2 + [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], + [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], + ], + [ + # Row 3 + [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], + [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], + ], + [ + # Row 4 + [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], + [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], + ], + [ + # Row 5 + [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], + [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], + ], +] + +def set_attr_at(j, b, n, attr, fn, val): + blk = j[b][n] + if attr in blk: + blk[attr] = fn(blk[attr], val) + else: + blk[attr] = fn(None, val) + +def coord(col, row): + return cr_coord_map[row][col] + +def set_attr(orig, new): + return new + +def set_bg(j, (b, n), color): + set_attr_at(j, b, n, "c", set_attr, color) + #set_attr_at(j, b, n, "g", set_attr, False) + +def _set_tap_info(o, count, cap): + ns = 4 - o.count ("\n") + return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100) + +def set_tap_info(j, (b, n), count, cap): + j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap) + +def heatmap_color (v): + colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] + fb = 0 + if v <= 0: + idx1, idx2 = 0, 0 + elif v >= 1: + idx1, idx2 = len(colors) - 1, len(colors) - 1 + else: + val = v * (len(colors) - 1) + idx1 = int(floor(val)) + idx2 = idx1 + 1 + fb = val - float(idx1) + + r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] + g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] + b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] + + r, g, b = [x * 255 for x in r, g, b] + return "#%02x%02x%02x" % (r, g, b) + +# Load the keylog +def load_keylog(fname, restrict_row): + keylog = {} + total = 0 + with open(fname, "r") as f: + lines = f.readlines() + for line in lines: + m = re.search ('KL: col=(\d+), row=(\d+)', line) + if not m: + continue + (c, r) = (int(m.group (2)), int(m.group (1))) + if restrict_row != None and r != int(restrict_row): + continue + if (c, r) in keylog: + keylog[(c, r)] = keylog[(c, r)] + 1 + else: + keylog[(c, r)] = 1 + total = total + 1 + return total / 2, keylog + +def l_flat(s): + f = s.split("\n") + return ", ".join (f) + +def main(base_fn, log_fn, restrict_row = None): + + with open(base_fn, "r") as f: + layout = json.load (f) + + ## Reset colors + for row in cr_coord_map: + for col in row: + if col != []: + set_bg (layout, col, "#d9dae0") + #set_attr_at (layout, col[0], col[1], "g", set_attr, True) + + total, log = load_keylog (log_fn, restrict_row) + max_cnt = 0 + for (c, r) in log: + max_cnt = max(max_cnt, log[(c, r)]) + + # Create the heatmap + for (c, r) in log: + coords = coord(c, r) + b, n = coords + cap = max_cnt + v = float(log[(c, r)]) / cap + print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v)) + set_bg (layout, coord(c, r), heatmap_color (v)) + set_tap_info (layout, coord (c, r), log[(c, r)], total) + + print json.dumps(layout) + +if __name__ == "__main__": + if len(sys.argv) < 3: + print """Log to Heatmap -- creates a heatmap out of keyboard logs + +Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json""" + sys.exit (1) + main(*sys.argv[1:]) -- cgit v1.2.3 From 36242d5ac5b42d828b51ff87a9317dc8420c1b6c Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 18 Jul 2016 10:50:19 +0200 Subject: reduced makefile size. not so much needed due to "inheritance" --- keyboards/satan/keymaps/iso_split_rshift/Makefile | 51 ----------------------- 1 file changed, 51 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile index 67eaa078f7..e25515b692 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/Makefile +++ b/keyboards/satan/keymaps/iso_split_rshift/Makefile @@ -1,54 +1,3 @@ - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - # Build Options # comment out to disable the options. # -- cgit v1.2.3 From 4b32a161d04c9efe650479b89d4c8f323dd41aa3 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 18 Jul 2016 10:50:45 +0200 Subject: renamed keymap --- keyboards/satan/keymaps/iso_split_rshift/build.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh index 2bfc3bb32d..c286f26f8e 100755 --- a/keyboards/satan/keymaps/iso_split_rshift/build.sh +++ b/keyboards/satan/keymaps/iso_split_rshift/build.sh @@ -2,15 +2,16 @@ # adjust for cpu # -j 16 gave best result on a hyperthreaded quad core core i7 THREADS="-j 16" +KMAP=iso_split_rschift echo "We need sudo later" sudo ls 2>&1 /dev/null make clean -make KEYMAP=toni77 ${THREADS} +make KEYMAP=iso_split_rschift ${THREADS} if [[ $? -eq 0 ]] then echo "please trigger flashing! you have 5 seconds" sleep 5 - sudo make KEYMAP=toni77 dfu ${THREADS} + sudo make KEYMAP=iso_split_rschift dfu ${THREADS} else echo "make failed" exit 77 -- cgit v1.2.3 From 82f768e6c04c57fa44d6020e3d57a6b3de211ddc Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 18 Jul 2016 16:07:00 -0400 Subject: Notes about changes --- keyboards/planck/keymaps/cbbrowne/readme.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 5f08530f46..fdb0997001 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -7,16 +7,10 @@ Christopher Browne This was originally based on the default keyboard map, but I have been doing sundry experimentation: -1. Experiments +1. Useful Experiments ---------------------------------------- - * To figure things out about the toolset - * I'm an Emacs guy, so will be needing a fair bit of tuning * It made sense to mess around some with keyboard maps. - - I tried added Workman alongside Dvorak and Colemak - - Boy, oh boy, these don't help!!! - - I have done 30 years of learning of Emacs key mappings, and - these alternative keyboards massively mess me up - I added a keypad, originally based on keymaps/numpad.c, but mighty substantially revised, as that one seems to be rotated 90 degrees from usual conventions for number pads @@ -30,6 +24,7 @@ doing sundry experimentation: - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random - Key [1][3] aka "e" spits out the keymap version number + * Minor use of Space Cadet Shift; my SHIFT key has switched to KC_LSP0, so that when I just hit SHIFT, I get a left parens: ( which is great for Lisping. I don't have a Right Shift, so I don't get an autoclose; I think I'll live with that until a Planck successor with more lines of keys :-) 2. Some code structure ideas --------------------------------------------------- @@ -62,6 +57,10 @@ doing sundry experimentation: and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. * I needed to swap ' and ENTER + * I tried added Workman alongside Dvorak and Colemak + - Boy, oh boy, these don't help!!! + - I have done 30 years of learning of Emacs key mappings, and + these alternative keyboards massively mess me up 4. TODO --------------------------------------------------------- @@ -73,6 +72,7 @@ doing sundry experimentation: helpers. * I do not presently have anything that handles X11 screen switching, as with Control-Alt-various - + * I ought to probably look into KC_LEAD, to have some key combos + that do not need to be concurrent -- cgit v1.2.3 From dda2fd6ff3984ed96f8275c661b47a0484f9ee18 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Mon, 18 Jul 2016 23:34:02 +0200 Subject: in the default case, it should be called if there is actually a tap dance happening, and in the normal case, it should be called when the tap down is happening. --- quantum/process_keycode/process_tap_dance.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 93b326b5fc..bab6bb81b3 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -70,7 +70,6 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); } else { @@ -81,12 +80,13 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { qk_tap_dance_state.keycode = keycode; qk_tap_dance_state.timer = timer_read (); qk_tap_dance_state.count++; + process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); } break; default: - process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode) { + process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); } -- cgit v1.2.3 From d8a979b6d50fb5a6735ceab02f5d93163609aa68 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 19 Jul 2016 00:01:11 +0200 Subject: add a bit of documentation --- readme.md | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index e0dcd56088..b5f7f6945d 100644 --- a/readme.md +++ b/readme.md @@ -372,10 +372,11 @@ But lets start with how to use it, first! First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array. -This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options: +This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options: * `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. -* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action. +* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. +* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. @@ -399,7 +400,8 @@ In the end, let's see a full example! enum { CT_SE = 0, CT_CLN, - CT_EGG + CT_EGG, + CT_FLSH, }; /* Have the above three on the keymap, TD(CT_SE), etc... */ @@ -424,10 +426,50 @@ void dance_egg (qk_tap_dance_state_t *state) { } } +// on each tap, light up one led, from right to left +// on the forth tap, turn them off from right to left +void dance_flsh_each(qk_tap_dance_state_t *state) { + switch (state->count) { + case 1: + ergodox_right_led_3_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_1_on(); + break; + case 4: + ergodox_right_led_3_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_1_off(); + } +} + +// on the fourth tap, set the keyboard on flash state +void dance_flsh_finished(qk_tap_dance_state_t *state) { + if (state->count >= 4) { + reset_keyboard(); + reset_tap_dance(state); + } +} + +// if the flash state didnt happen, then turn off leds, left to right +void dance_flsh_reset(qk_tap_dance_state_t *state) { + ergodox_right_led_1_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_3_off(); +} + const qk_tap_dance_action_t tap_dance_actions[] = { [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln) ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) + ,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset) }; ``` -- cgit v1.2.3 From 6eb21d2680dc6f8e2cb2e2b6fabf41d82e240256 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 19 Jul 2016 00:07:50 +0200 Subject: add some debugging doc, after i found out how to print debug messages --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e0dcd56088..2374bf5541 100644 --- a/readme.md +++ b/readme.md @@ -152,7 +152,7 @@ This allows you to use the system and audio control key codes. `CONSOLE_ENABLE` -TODO +This allows you to print messages that can be read using `hid_listen`. Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages. `COMMAND_ENABLE` -- cgit v1.2.3 From 1988c180e3cc971e83db0f9e862de4857ce6d766 Mon Sep 17 00:00:00 2001 From: Toni Date: Tue, 19 Jul 2016 09:16:55 +0200 Subject: small cosmetic change --- keyboards/satan/keymaps/iso_split_rshift/build.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh index c286f26f8e..9523f6716f 100755 --- a/keyboards/satan/keymaps/iso_split_rshift/build.sh +++ b/keyboards/satan/keymaps/iso_split_rshift/build.sh @@ -2,16 +2,16 @@ # adjust for cpu # -j 16 gave best result on a hyperthreaded quad core core i7 THREADS="-j 16" -KMAP=iso_split_rschift +KMAP=iso_split_rshift echo "We need sudo later" sudo ls 2>&1 /dev/null make clean -make KEYMAP=iso_split_rschift ${THREADS} +make KEYMAP=${KMAP} ${THREADS} if [[ $? -eq 0 ]] then echo "please trigger flashing! you have 5 seconds" sleep 5 - sudo make KEYMAP=iso_split_rschift dfu ${THREADS} + sudo make KEYMAP=${KMAP} dfu ${THREADS} else echo "make failed" exit 77 -- cgit v1.2.3 From 5cd6d607fc7362fdf72ecd76f802305bce68270c Mon Sep 17 00:00:00 2001 From: Toni Date: Tue, 19 Jul 2016 09:17:31 +0200 Subject: changed ctrl back to enter. "j" interfered with my vimming --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index a2623e0e09..fc07f6da8d 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DEF] = KEYMAP_ISO_SPLITRSHIFT( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, F(17), KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ + F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , /* Keymap 1: F-and-vim Layer, modified with Space (Fn0) @@ -124,7 +124,7 @@ const uint16_t PROGMEM fn_actions[] = { [14] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), [15] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), [16] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_J), + [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -- cgit v1.2.3 From 47223ebee4823e58e951d9fd89a66e16e29b6357 Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Tue, 19 Jul 2016 08:00:03 -0400 Subject: Corrected the ascii layout to match the coded layout --- keyboards/preonic/keymaps/default/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 9a957f7ee1..2c2299fd27 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Reset| | | | | | | | | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * | |Voice-|Voice+|Mus on|MusOff| | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -277,4 +277,4 @@ void music_scale_user(void) PLAY_NOTE_ARRAY(music_scale, false, 0); } -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 9c26498f4990ac15ff9acd46440db2ce11b8f80f Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Tue, 19 Jul 2016 08:43:41 -0400 Subject: added Midi On/Off; Enter is actually transparent --- keyboards/preonic/keymaps/default/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 2c2299fd27..78b4997a8f 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -144,7 +144,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|MusOff| | | | | | | | + * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From 2e815ad9a2f4e36d6c11dbe0475d1fb1e1fa9d18 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 19 Jul 2016 17:34:23 +0200 Subject: add link to hid_listen --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2374bf5541..8e005155b9 100644 --- a/readme.md +++ b/readme.md @@ -152,7 +152,7 @@ This allows you to use the system and audio control key codes. `CONSOLE_ENABLE` -This allows you to print messages that can be read using `hid_listen`. Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages. +This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages. `COMMAND_ENABLE` -- cgit v1.2.3 From d5daec2a58019ebdb9804787e0f786e4fc3c05b9 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 19 Jul 2016 18:00:59 +0200 Subject: on_each_tap_fn is called on tap down and tap up --- quantum/process_keycode/process_tap_dance.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index bab6bb81b3..58192413fb 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -70,6 +70,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: + process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); } else { @@ -80,7 +81,6 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { qk_tap_dance_state.keycode = keycode; qk_tap_dance_state.timer = timer_read (); qk_tap_dance_state.count++; - process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); } break; -- cgit v1.2.3 From 4e6a8627d8ebd7af942f68142d1a959d60361d90 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 19 Jul 2016 18:02:13 +0200 Subject: add a couple of comments --- quantum/process_keycode/process_tap_dance.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 58192413fb..b9b836df2e 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -86,6 +86,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { default: if (qk_tap_dance_state.keycode) { + // if we are here, the tap dance was interrupted by a different key process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); @@ -98,6 +99,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { void matrix_scan_tap_dance () { if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { + // if we are here, the tap dance was timed out process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); } -- cgit v1.2.3 From 8ee9c486fd092aa2c5457f7747385ff82b003c36 Mon Sep 17 00:00:00 2001 From: Joshua T Date: Tue, 19 Jul 2016 17:33:10 -0500 Subject: Adjusted Atreus KEYMAP() function. This change adjusts the KEYMAP() function to provide a more visual representation of the key positions on the keyboard. Previously, keymaps have been defined directly using arrays for the Atreus keyboard. While this works, it doesn't utilize the helpful KEYMAP() function at all to allow the user to visually position the key codes for ease of editing. See the Ergodox-EZ KEYMAP() function and layouts for a great example of how this can work. This change should not break any existing Atreus layouts. At the time of this commit, there are two existing layouts for the Atreus board, and neither use the KEYMAP() function. --- keyboards/atreus/atreus.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h index 2b3803bc21..f841c35199 100644 --- a/keyboards/atreus/atreus.h +++ b/keyboards/atreus/atreus.h @@ -10,16 +10,16 @@ // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array #define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ ) \ { \ { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \ { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \ { k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \ - { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \ + { k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a, k3b } \ } #endif -- cgit v1.2.3 From 19848613380153f6d420f7807b41c70ee2f5797f Mon Sep 17 00:00:00 2001 From: milestogo Date: Tue, 19 Jul 2016 22:35:38 -0700 Subject: initial kinisis advantage build --- keyboards/kinesis/Makefile | 79 +++ keyboards/kinesis/config.h | 174 +++++++ keyboards/kinesis/docs/kicad/kinesis-cache.lib | 232 +++++++++ keyboards/kinesis/docs/kicad/kinesis.pro | 83 ++++ keyboards/kinesis/docs/kicad/kinesis.sch | 634 +++++++++++++++++++++++++ keyboards/kinesis/docs/photos/P1050573.jpg | Bin 0 -> 177711 bytes keyboards/kinesis/docs/photos/P1050574.jpg | Bin 0 -> 343978 bytes keyboards/kinesis/docs/photos/P1050575.jpg | Bin 0 -> 266771 bytes keyboards/kinesis/docs/readme.txt | 52 ++ keyboards/kinesis/docs/schematic.png | Bin 0 -> 175014 bytes keyboards/kinesis/keymaps/default/Makefile | 21 + keyboards/kinesis/keymaps/default/config.h | 8 + keyboards/kinesis/keymaps/default/keymap.c | 116 +++++ keyboards/kinesis/keymaps/default/readme.md | 1 + keyboards/kinesis/keymaps/programmer/Makefile | 21 + keyboards/kinesis/keymaps/programmer/config.h | 8 + keyboards/kinesis/keymaps/programmer/keymap.c | 245 ++++++++++ keyboards/kinesis/keymaps/programmer/readme.md | 2 + keyboards/kinesis/kinesis.c | 106 +++++ keyboards/kinesis/kinesis.h | 67 +++ keyboards/kinesis/matrix.c | 228 +++++++++ keyboards/kinesis/readme.md | 42 ++ 22 files changed, 2119 insertions(+) create mode 100644 keyboards/kinesis/Makefile create mode 100644 keyboards/kinesis/config.h create mode 100644 keyboards/kinesis/docs/kicad/kinesis-cache.lib create mode 100644 keyboards/kinesis/docs/kicad/kinesis.pro create mode 100644 keyboards/kinesis/docs/kicad/kinesis.sch create mode 100644 keyboards/kinesis/docs/photos/P1050573.jpg create mode 100644 keyboards/kinesis/docs/photos/P1050574.jpg create mode 100644 keyboards/kinesis/docs/photos/P1050575.jpg create mode 100644 keyboards/kinesis/docs/readme.txt create mode 100644 keyboards/kinesis/docs/schematic.png create mode 100644 keyboards/kinesis/keymaps/default/Makefile create mode 100644 keyboards/kinesis/keymaps/default/config.h create mode 100644 keyboards/kinesis/keymaps/default/keymap.c create mode 100644 keyboards/kinesis/keymaps/default/readme.md create mode 100644 keyboards/kinesis/keymaps/programmer/Makefile create mode 100644 keyboards/kinesis/keymaps/programmer/config.h create mode 100644 keyboards/kinesis/keymaps/programmer/keymap.c create mode 100644 keyboards/kinesis/keymaps/programmer/readme.md create mode 100644 keyboards/kinesis/kinesis.c create mode 100644 keyboards/kinesis/kinesis.h create mode 100644 keyboards/kinesis/matrix.c create mode 100644 keyboards/kinesis/readme.md diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile new file mode 100644 index 0000000000..ca077e6366 --- /dev/null +++ b/keyboards/kinesis/Makefile @@ -0,0 +1,79 @@ + +## Project specific files + +SRC= matrix.c + +# MCU name +MCU = at90usb1286 +#MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=1024 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming +CUSTOM_MATRIX=yes # need to do our own thing with the matrix + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h new file mode 100644 index 0000000000..8f1fdbdb6c --- /dev/null +++ b/keyboards/kinesis/config.h @@ -0,0 +1,174 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT kinesis-advantage +#define DESCRIPTION A custom keyboard + +// Mouse +#define MOUSEKEY_DELAY 20 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 20 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_DELTA 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 1 + +/* key matrix size */ +#define MATRIX_ROWS 16 +#define MATRIX_COLS 8 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +//Passed through the port multipler, so 4 pins =16 +#define MATRIX_ROW_PINS { F0,F1, F2, F3 } + +// May be upside down. +#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/docs/kicad/kinesis-cache.lib new file mode 100644 index 0000000000..f798d39d6c --- /dev/null +++ b/keyboards/kinesis/docs/kicad/kinesis-cache.lib @@ -0,0 +1,232 @@ +EESchema-LIBRARY Version 2.3 Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm +#encoding utf-8 +# +# AT90S4414-P +# +DEF AT90S4414-P IC 0 40 Y Y 1 F N +F0 "IC" -850 1880 40 H V L BNN +F1 "AT90S4414-P" 450 -1950 40 H V L BNN +F2 "DIL40" 0 0 30 H V C CIN +F3 "~" 0 0 60 H V C CNN +ALIAS AT90S8515-P +$FPLIST + 40DIP-ELL600 + 40dip600 +$ENDFPLIST +DRAW +S -850 1850 850 -1850 0 1 10 f +X (T0)PB0 1 1000 700 150 L 40 40 1 1 B +X (T1)PB1 2 1000 600 150 L 40 40 1 1 B +X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B +X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B +X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B +X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B +X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B +X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B +X ~RESET 9 -1000 1700 150 R 40 40 1 1 I +X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B +X GND 20 0 -2000 150 U 40 40 1 1 W +X ALE 30 1000 850 150 L 40 40 1 1 O +X VCC 40 0 2000 150 D 40 40 1 1 W +X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B +X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B +X ICP 31 -1000 -1400 150 R 40 40 1 1 I +X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B +X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B +X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B +X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B +X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B +X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B +X PD4 14 1000 -1400 150 L 40 40 1 1 B +X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B +X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B +X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B +X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B +X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B +X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B +X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B +X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B +X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B +X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B +X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B +X XTAL2 18 -1000 1200 150 R 40 40 1 1 B +X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B +X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B +X XTAL1 19 -1000 800 150 R 40 40 1 1 B +X OC1B 29 -1000 -1500 150 R 40 40 1 1 W +X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B +ENDDRAW +ENDDEF +# +# ATMEGA16U4-A +# +DEF ATMEGA16U4-A U 0 40 Y Y 1 F N +F0 "U" -950 1700 40 H V C CNN +F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN +F2 "TQFP44" 0 0 35 H V C CIN +F3 "~" 1100 1100 60 H V C CNN +ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A +$FPLIST + TQFP44 +$ENDFPLIST +DRAW +S -1000 1650 950 -1450 0 1 10 f +X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B +X UVCC 2 -450 1800 150 D 40 40 1 1 W +X D- 3 -1150 100 150 R 40 40 1 1 B +X D+ 4 -1150 200 150 R 40 40 1 1 B +X UGND 5 -400 -1600 150 U 40 40 1 1 P +X UCAP 6 -1150 -50 150 R 40 40 1 1 P +X VBUS 7 -1150 350 150 R 40 40 1 1 P +X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B +X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B +X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B +X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B +X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B +X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B +X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B +X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B +X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B +X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B +X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B +X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B +X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B +X AREF 42 -1150 -850 150 R 40 40 1 1 P +X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I +X GND 23 -50 -1600 150 U 40 40 1 1 W +X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B +X GND 43 150 -1600 150 U 40 40 1 1 W +X VCC 14 -200 1800 150 D 40 40 1 1 W +X AVCC 24 150 1800 150 D 40 40 1 1 W +X VCC 34 -100 1800 150 D 40 40 1 1 W +X AVCC 44 250 1800 150 D 40 40 1 1 W +X GND 15 -150 -1600 150 U 40 40 1 1 W +X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B +X GND 35 50 -1600 150 U 40 40 1 1 W +X XTAL2 16 -1150 950 150 R 40 40 1 1 O +X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B +X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B +X XTAL1 17 -1150 1150 150 R 40 40 1 1 I +X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B +X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B +X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B +X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B +X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B +X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B +X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B +X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B +ENDDRAW +ENDDEF +# +# C +# +DEF C C 0 10 N Y 1 F N +F0 "C" 0 100 40 H V L CNN +F1 "C" 6 -85 40 H V L CNN +F2 "~" 38 -150 30 H V C CNN +F3 "~" 0 0 60 H V C CNN +$FPLIST + SM* + C? + C1-1 +$ENDFPLIST +DRAW +P 2 0 1 20 -80 -30 80 -30 N +P 2 0 1 20 -80 30 80 30 N +X ~ 1 0 200 170 D 40 40 1 1 P +X ~ 2 0 -200 170 U 40 40 1 1 P +ENDDRAW +ENDDEF +# +# CONN_7 +# +DEF CONN_7 P 0 40 Y N 1 F N +F0 "P" -30 0 60 V V C CNN +F1 "CONN_7" 70 0 60 V V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -100 350 150 -350 0 1 0 N +X P1 1 -350 300 250 R 50 50 1 1 P I +X P2 2 -350 200 250 R 50 50 1 1 P I +X P3 3 -350 100 250 R 50 50 1 1 P I +X P4 4 -350 0 250 R 50 50 1 1 P I +X P5 5 -350 -100 250 R 50 50 1 1 P I +X P6 6 -350 -200 250 R 50 50 1 1 P I +X P7 7 -350 -300 250 R 50 50 1 1 P I +ENDDRAW +ENDDEF +# +# GND +# +DEF ~GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 0 30 H I C CNN +F1 "GND" 0 -70 30 H I C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N +X GND 1 0 0 0 U 30 30 1 1 W N +ENDDRAW +ENDDEF +# +# R +# +DEF R R 0 0 N Y 1 F N +F0 "R" 80 0 40 V V C CNN +F1 "R" 7 1 40 V V C CNN +F2 "~" -70 0 30 V V C CNN +F3 "~" 0 0 30 H V C CNN +$FPLIST + R? + SM0603 + SM0805 + R?-* + SM1206 +$ENDFPLIST +DRAW +S -40 150 40 -150 0 1 12 N +X ~ 1 0 250 100 D 60 60 1 1 P +X ~ 2 0 -250 100 U 60 60 1 1 P +ENDDRAW +ENDDEF +# +# USB-MINI-B +# +DEF USB-MINI-B CON 0 40 Y Y 1 F N +F0 "CON" -250 450 60 H V C CNN +F1 "USB-MINI-B" -50 -500 60 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +$FPLIST + USB-Mini-B-Jack +$ENDFPLIST +DRAW +S -350 400 350 -400 0 1 0 N +X VBUS 1 -550 300 200 R 50 50 1 1 W +X D- 2 -550 150 200 R 50 50 1 1 B +X D+ 3 -550 0 200 R 50 50 1 1 B +X ID 4 -550 -150 200 R 50 50 1 1 B +X GND 5 -550 -300 200 R 50 50 1 1 W +X SHELL1 6 550 300 200 L 50 50 1 1 B +X SHELL2 7 550 150 200 L 50 50 1 1 B +X SHELL3 8 550 -150 200 L 50 50 1 1 B +X SHELL4 9 550 -300 200 L 50 50 1 1 B +ENDDRAW +ENDDEF +# +# VCC +# +DEF VCC #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 100 30 H I C CNN +F1 "VCC" 0 100 30 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +X VCC 1 0 0 0 U 20 20 0 0 W N +C 0 50 20 0 1 0 N +P 3 0 1 0 0 0 0 30 0 30 N +ENDDRAW +ENDDEF +# +#End Library diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/docs/kicad/kinesis.pro new file mode 100644 index 0000000000..9f130b5092 --- /dev/null +++ b/keyboards/kinesis/docs/kicad/kinesis.pro @@ -0,0 +1,83 @@ +update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm +version=1 +last_client=pcbnew +[cvpcb] +version=1 +NetIExt=net +[cvpcb/libraries] +EquName1=devcms +[general] +version=1 +[eeschema] +version=1 +PageLayoutDescrFile= +SubpartIdSeparator=0 +SubpartFirstId=65 +LibDir=../../../lib/kicad/library +NetFmtName= +RptD_X=0 +RptD_Y=100 +RptLab=1 +LabSize=60 +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=transistors +LibName4=conn +LibName5=linear +LibName6=regul +LibName7=74xx +LibName8=cmos4000 +LibName9=adc-dac +LibName10=memory +LibName11=xilinx +LibName12=special +LibName13=microcontrollers +LibName14=dsp +LibName15=microchip +LibName16=analog_switches +LibName17=motorola +LibName18=texas +LibName19=intel +LibName20=audio +LibName21=interface +LibName22=digital-audio +LibName23=philips +LibName24=display +LibName25=cypress +LibName26=siliconi +LibName27=opto +LibName28=atmel +LibName29=contrib +LibName30=valves +LibName31=custom +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=1.016000000000 +PadDrillOvalY=1.016000000000 +PadSizeH=1.524000000000 +PadSizeV=1.524000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[pcbnew/libraries] +LibDir=../../../lib/kicad/modules +LibName1=custom +LibName2=Sockets +LibName3=Connect +LibName4=Discret +LibName5=Divers +LibName6=Display +LibName7=LEDs +LibName8=SMD_Packages +LibName9=Sockets_DIP diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/docs/kicad/kinesis.sch new file mode 100644 index 0000000000..f75335aa08 --- /dev/null +++ b/keyboards/kinesis/docs/kicad/kinesis.sch @@ -0,0 +1,634 @@ +EESchema Schematic File Version 2 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:custom +LIBS:kinesis-cache +EELAYER 27 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "13 nov 2014" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L C C4 +U 1 1 545804FB +P 2850 4250 +F 0 "C4" H 2850 4350 40 0000 L CNN +F 1 "1uF" H 2856 4165 40 0000 L CNN +F 2 "~" H 2888 4100 30 0000 C CNN +F 3 "~" H 2850 4250 60 0000 C CNN + 1 2850 4250 + -1 0 0 1 +$EndComp +$Comp +L R R3 +U 1 1 545805E8 +P 2500 4000 +F 0 "R3" V 2580 4000 40 0000 C CNN +F 1 "22" V 2507 4001 40 0000 C CNN +F 2 "~" V 2430 4000 30 0000 C CNN +F 3 "~" H 2500 4000 30 0000 C CNN + 1 2500 4000 + 0 -1 -1 0 +$EndComp +$Comp +L R R2 +U 1 1 545805FA +P 2500 3800 +F 0 "R2" V 2580 3800 40 0000 C CNN +F 1 "22" V 2507 3801 40 0000 C CNN +F 2 "~" V 2430 3800 30 0000 C CNN +F 3 "~" H 2500 3800 30 0000 C CNN + 1 2500 3800 + 0 -1 -1 0 +$EndComp +Entry Wire Line + 6450 2450 6550 2550 +Entry Wire Line + 6450 2550 6550 2650 +Entry Wire Line + 6450 2650 6550 2750 +Entry Wire Line + 6450 2750 6550 2850 +Entry Wire Line + 6450 2950 6550 3050 +Entry Wire Line + 6450 3050 6550 3150 +Entry Wire Line + 6450 2850 6550 2950 +Entry Wire Line + 6450 3150 6550 3250 +Wire Wire Line + 10250 1800 10750 1800 +Entry Wire Line + 10750 1800 10850 1900 +Entry Wire Line + 10750 1900 10850 2000 +Entry Wire Line + 10750 2000 10850 2100 +Entry Wire Line + 10750 2800 10850 2900 +Entry Wire Line + 10750 2900 10850 3000 +Entry Wire Line + 10750 3000 10850 3100 +Entry Wire Line + 10750 3100 10850 3200 +Entry Wire Line + 10750 3200 10850 3300 +Entry Wire Line + 10750 3300 10850 3400 +$Comp +L AT90S8515-P IC2 +U 1 1 545A62EA +P 9250 3500 +F 0 "IC2" H 8400 5380 40 0000 L BNN +F 1 "AT90S8515-P" H 9700 1550 40 0000 L BNN +F 2 "DIL40" H 9250 3500 30 0000 C CIN +F 3 "" H 9250 3500 60 0000 C CNN + 1 9250 3500 + 1 0 0 -1 +$EndComp +NoConn ~ 10250 2650 +Entry Wire Line + 10750 3650 10850 3750 +Entry Wire Line + 10750 3750 10850 3850 +Entry Wire Line + 10750 3850 10850 3950 +Entry Wire Line + 10750 3950 10850 4050 +Entry Wire Line + 10750 4050 10850 4150 +Entry Wire Line + 10750 4150 10850 4250 +Entry Wire Line + 10750 4350 10850 4450 +Entry Wire Line + 10750 4250 10850 4350 +NoConn ~ 8250 4900 +NoConn ~ 8250 5000 +NoConn ~ 8250 1800 +Wire Wire Line + 10250 1900 10750 1900 +Wire Wire Line + 10250 2000 10750 2000 +Wire Wire Line + 10250 2100 10750 2100 +Wire Wire Line + 10250 2200 10750 2200 +Wire Wire Line + 10250 2300 10750 2300 +Wire Wire Line + 10250 2400 10750 2400 +Wire Wire Line + 10250 2500 10750 2500 +Text Label 10350 1800 0 60 ~ 0 +A +Text Label 10350 1900 0 60 ~ 0 +B +Text Label 10350 2000 0 60 ~ 0 +C +Text Label 10350 2100 0 60 ~ 0 +G +Wire Wire Line + 10250 2800 10750 2800 +Wire Wire Line + 10250 2900 10750 2900 +Wire Wire Line + 10250 3000 10750 3000 +Wire Wire Line + 10250 3100 10750 3100 +Wire Wire Line + 10250 3200 10750 3200 +Wire Wire Line + 10250 3300 10750 3300 +Wire Wire Line + 10250 3400 10750 3400 +Wire Wire Line + 10250 3500 10750 3500 +Text Label 10350 2800 0 60 ~ 0 +DL2 +Text Label 10350 2900 0 60 ~ 0 +DR1 +Text Label 10350 3000 0 60 ~ 0 +DR2 +Text Label 10350 3100 0 60 ~ 0 +DL1 +Text Label 10350 3400 0 60 ~ 0 +SCL +Text Label 10350 3500 0 60 ~ 0 +SDA +Wire Wire Line + 10250 3650 10750 3650 +Wire Wire Line + 10250 3750 10750 3750 +Wire Wire Line + 10250 3850 10750 3850 +Wire Wire Line + 10250 3950 10750 3950 +Wire Wire Line + 10250 4050 10750 4050 +Wire Wire Line + 10250 4150 10750 4150 +Wire Wire Line + 10250 4250 10750 4250 +Wire Wire Line + 10250 4350 10750 4350 +Text Label 10350 3650 0 60 ~ 0 +R1 +Text Label 10350 3750 0 60 ~ 0 +R2 +Text Label 10350 3850 0 60 ~ 0 +R3 +Text Label 10350 3950 0 60 ~ 0 +R4 +Text Label 10350 4050 0 60 ~ 0 +R5 +Text Label 10350 4150 0 60 ~ 0 +R6 +Text Label 10350 4250 0 60 ~ 0 +R7 +Text Label 10350 4350 0 60 ~ 0 +R8 +Wire Wire Line + 10250 4500 10750 4500 +Wire Wire Line + 10250 4600 10750 4600 +Wire Wire Line + 10250 4700 10750 4700 +Wire Wire Line + 10250 4800 10750 4800 +Wire Wire Line + 10250 4900 10750 4900 +Wire Wire Line + 10250 5000 10750 5000 +Wire Wire Line + 10250 5100 10750 5100 +Wire Wire Line + 10250 5200 10750 5200 +Text Label 10350 4600 0 60 ~ 0 +FS1 +Text Label 10350 5000 0 60 ~ 0 +FS3 +Text Label 10350 5200 0 60 ~ 0 +FS2 +$Comp +L GND #PWR01 +U 1 1 545A7377 +P 9250 5600 +F 0 "#PWR01" H 9250 5600 30 0001 C CNN +F 1 "GND" H 9250 5530 30 0001 C CNN +F 2 "" H 9250 5600 60 0000 C CNN +F 3 "" H 9250 5600 60 0000 C CNN + 1 9250 5600 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9250 5500 9250 5600 +Text Label 10350 4700 0 60 ~ 0 +CLOCK +Text Label 10350 4800 0 60 ~ 0 +DATA +NoConn ~ 10750 4700 +NoConn ~ 10750 4800 +Text Label 10350 3200 0 60 ~ 0 +KP +Text Label 10350 3300 0 60 ~ 0 +PGM +Text Label 10350 2500 0 60 ~ 0 +BUZZ +NoConn ~ 8250 2300 +NoConn ~ 8250 2700 +$Comp +L GND #PWR02 +U 1 1 545A7565 +P 4750 5700 +F 0 "#PWR02" H 4750 5700 30 0001 C CNN +F 1 "GND" H 4750 5630 30 0001 C CNN +F 2 "" H 4750 5700 60 0000 C CNN +F 3 "" H 4750 5700 60 0000 C CNN + 1 4750 5700 + 1 0 0 -1 +$EndComp +Entry Wire Line + 6450 3650 6550 3750 +Entry Wire Line + 6450 3750 6550 3850 +Entry Wire Line + 6450 4150 6550 4250 +Entry Wire Line + 6450 4250 6550 4350 +Entry Wire Line + 6450 4050 6550 4150 +Entry Wire Line + 6450 4350 6550 4450 +NoConn ~ 3750 2850 +Wire Wire Line + 1200 2000 6450 2000 +NoConn ~ 3750 3050 +Wire Wire Line + 2750 3800 3750 3800 +Wire Wire Line + 2750 3900 3750 3900 +Wire Wire Line + 2750 3900 2750 4000 +Wire Bus Line + 6550 2100 6550 6050 +Wire Bus Line + 10850 1600 10850 6050 +Text Label 6050 4350 0 60 ~ 0 +DL1 +Text Label 6050 4250 0 60 ~ 0 +DR2 +Text Label 6050 4150 0 60 ~ 0 +DR1 +Text Label 6050 4050 0 60 ~ 0 +DL2 +Text Label 6050 2450 0 60 ~ 0 +R1 +Text Label 6050 2550 0 60 ~ 0 +R2 +Text Label 6050 2650 0 60 ~ 0 +R3 +Text Label 6050 2750 0 60 ~ 0 +R4 +Text Label 6050 2850 0 60 ~ 0 +R5 +Text Label 6050 2950 0 60 ~ 0 +R6 +Text Label 6050 3050 0 60 ~ 0 +R7 +Text Label 6050 3150 0 60 ~ 0 +R8 +Text Label 6050 5050 0 60 ~ 0 +A +Text Label 6050 5150 0 60 ~ 0 +B +Text Label 6050 5250 0 60 ~ 0 +C +Text Label 6050 5350 0 60 ~ 0 +G +Text Label 1300 3800 0 60 ~ 0 +D+ +Text Label 1300 4000 0 60 ~ 0 +D- +NoConn ~ 10750 2200 +NoConn ~ 10750 2300 +NoConn ~ 10750 2400 +Text Label 10350 4500 0 60 ~ 0 +GND +NoConn ~ 10750 4900 +NoConn ~ 10750 5100 +Text Label 6050 3450 0 60 ~ 0 +KP +Text Label 6050 3350 0 60 ~ 0 +PGM +$Comp +L ATMEGA32U4-A U1 +U 1 1 5462E0B1 +P 4900 4000 +F 0 "U1" H 3950 5700 40 0000 C CNN +F 1 "ATMEGA32U4-A" H 5600 2500 40 0000 C CNN +F 2 "TQFP44" H 4900 4000 35 0000 C CIN +F 3 "" H 6000 5100 60 0000 C CNN + 1 4900 4000 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3750 4850 3750 5600 +Wire Wire Line + 4450 2200 5150 2200 +Connection ~ 4700 2200 +Connection ~ 4800 2200 +Connection ~ 5050 2200 +Connection ~ 4800 2000 +Wire Wire Line + 6000 2450 6450 2450 +Wire Wire Line + 6000 2550 6450 2550 +Wire Wire Line + 6000 2650 6450 2650 +Wire Wire Line + 6000 2750 6450 2750 +Wire Wire Line + 6000 2850 6450 2850 +Wire Wire Line + 6000 2950 6450 2950 +Wire Wire Line + 6000 3050 6450 3050 +Wire Wire Line + 6000 3150 6450 3150 +Wire Wire Line + 6000 5050 6450 5050 +Wire Wire Line + 6000 5150 6450 5150 +Wire Wire Line + 6000 5250 6450 5250 +Wire Wire Line + 6000 4050 6450 4050 +Wire Wire Line + 6000 4150 6450 4150 +Wire Wire Line + 6000 4250 6450 4250 +Wire Wire Line + 6000 4350 6450 4350 +Wire Wire Line + 6000 4550 6450 4550 +Entry Wire Line + 6450 3350 6550 3450 +Entry Wire Line + 6450 3450 6550 3550 +Entry Wire Line + 6450 5050 6550 5150 +Entry Wire Line + 6450 5150 6550 5250 +Entry Wire Line + 6450 5250 6550 5350 +Entry Wire Line + 6450 5350 6550 5450 +Entry Wire Line + 6450 4650 6550 4750 +Wire Wire Line + 6000 3350 6450 3350 +Wire Wire Line + 6000 3450 6450 3450 +Wire Wire Line + 1200 5600 6450 5600 +Connection ~ 4950 5600 +Connection ~ 4850 5600 +Wire Wire Line + 4750 5600 4750 5700 +Connection ~ 4750 5600 +Connection ~ 4500 5600 +Text Label 6050 4550 0 60 ~ 0 +HWB +Wire Wire Line + 6000 5350 6450 5350 +Wire Wire Line + 6000 3650 6450 3650 +Wire Wire Line + 6000 3750 6450 3750 +Text Label 6050 3650 0 60 ~ 0 +SCL +Text Label 6050 3750 0 60 ~ 0 +SDA +Wire Wire Line + 6000 3850 6450 3850 +Wire Wire Line + 6000 3950 6450 3950 +Wire Wire Line + 6000 4650 6450 4650 +Text Label 6050 4650 0 60 ~ 0 +BUZZ +NoConn ~ 10750 4600 +NoConn ~ 10750 5000 +NoConn ~ 10750 5200 +Entry Wire Line + 10750 3400 10850 3500 +Entry Wire Line + 10750 3500 10850 3600 +Entry Wire Line + 10750 4500 10850 4600 +Wire Wire Line + 2850 4050 3750 4050 +Text Label 2950 4050 0 60 ~ 0 +UCAP +Wire Wire Line + 6000 4850 6450 4850 +Wire Wire Line + 6000 4950 6450 4950 +NoConn ~ 6450 4850 +NoConn ~ 6450 4950 +NoConn ~ 6450 4550 +$Comp +L USB-MINI-B CON1 +U 1 1 546431C1 +P 2100 5050 +F 0 "CON1" H 1850 5500 60 0000 C CNN +F 1 "USB-MINI-B" H 2050 4550 60 0000 C CNN +F 2 "" H 2100 5050 60 0000 C CNN +F 3 "" H 2100 5050 60 0000 C CNN + 1 2100 5050 + 0 1 1 0 +$EndComp +$Comp +L VCC #PWR03 +U 1 1 54643698 +P 2400 4400 +F 0 "#PWR03" H 2400 4500 30 0001 C CNN +F 1 "VCC" H 2400 4500 30 0000 C CNN +F 2 "" H 2400 4400 60 0000 C CNN +F 3 "" H 2400 4400 60 0000 C CNN + 1 2400 4400 + 1 0 0 -1 +$EndComp +Text Notes 2600 2750 0 60 ~ 0 +Teensy 2.0\n(not fully drawn) +$Comp +L CONN_7 B7K-PH-K-S1 +U 1 1 54643939 +P 1950 6900 +F 0 "B7K-PH-K-S1" V 1920 6900 60 0000 C CNN +F 1 "CONN_7" V 2020 6900 60 0000 C CNN +F 2 "" H 1950 6900 60 0000 C CNN +F 3 "" H 1950 6900 60 0000 C CNN + 1 1950 6900 + 1 0 0 -1 +$EndComp +Connection ~ 3750 5600 +Connection ~ 2400 5600 +Connection ~ 2250 5600 +Connection ~ 1950 5600 +Wire Wire Line + 2400 4400 2400 4500 +Wire Wire Line + 2250 4000 2250 4500 +Wire Wire Line + 1200 3800 2250 3800 +Wire Wire Line + 2100 3800 2100 4500 +Wire Wire Line + 2850 4450 2850 5600 +Connection ~ 2850 5600 +Entry Wire Line + 1100 6800 1200 6900 +Entry Wire Line + 1100 6900 1200 7000 +Entry Wire Line + 1100 7000 1200 7100 +Entry Wire Line + 1100 6700 1200 6800 +Wire Wire Line + 1200 6600 1600 6600 +Wire Wire Line + 1200 6700 1600 6700 +Wire Wire Line + 1200 6800 1600 6800 +Wire Wire Line + 1200 6900 1600 6900 +Wire Wire Line + 1200 7000 1600 7000 +Wire Wire Line + 1200 7100 1600 7100 +Wire Wire Line + 1200 7200 1600 7200 +Text Label 1300 6600 0 60 ~ 0 +FS2 +Text Label 1300 6700 0 60 ~ 0 +FS1 +Text Label 1300 6800 0 60 ~ 0 +VCC +Text Label 1300 6900 0 60 ~ 0 +D- +Text Label 1300 7000 0 60 ~ 0 +D+ +Text Label 1300 7100 0 60 ~ 0 +GND +Text Label 1300 7200 0 60 ~ 0 +FS3 +NoConn ~ 3750 2450 +Wire Wire Line + 3600 2000 3600 3650 +Wire Wire Line + 3600 3650 3750 3650 +NoConn ~ 1950 4500 +Wire Bus Line + 1100 1900 1100 7100 +NoConn ~ 1200 6600 +NoConn ~ 1200 6700 +NoConn ~ 1200 7200 +Connection ~ 2100 3800 +Wire Wire Line + 1200 4000 2250 4000 +Entry Wire Line + 1100 3700 1200 3800 +Entry Wire Line + 1100 3900 1200 4000 +Text Label 10350 1500 0 60 ~ 0 +VCC +Entry Wire Line + 1100 1900 1200 2000 +Text Label 1250 2000 0 60 ~ 0 +VCC +Entry Wire Line + 1100 5500 1200 5600 +Connection ~ 1800 5600 +Text Label 1300 5600 0 60 ~ 0 +GND +Wire Wire Line + 9250 5500 10750 5500 +Entry Wire Line + 10750 5500 10850 5600 +Text Label 10350 5500 0 60 ~ 0 +GND +Wire Wire Line + 9250 1500 10750 1500 +Entry Wire Line + 10750 1500 10850 1600 +Connection ~ 3600 2000 +Wire Wire Line + 4800 2000 4800 2200 +Entry Wire Line + 6450 2000 6550 2100 +Text Label 6050 2000 0 60 ~ 0 +VCC +Connection ~ 5050 5600 +Entry Wire Line + 6450 5600 6550 5700 +Text Label 6050 5600 0 60 ~ 0 +GND +NoConn ~ 6450 3850 +NoConn ~ 6450 3950 +Wire Wire Line + 1800 4500 1500 4500 +Wire Wire Line + 1500 4500 1500 5600 +Connection ~ 1500 5600 +Entry Wire Line + 10750 2500 10850 2600 +Entry Wire Line + 10750 2100 10850 2200 +Text Notes 1000 5300 1 60 ~ 0 +Sacrificial USB cable from header to Teensy +Text Notes 7850 5950 0 60 ~ 0 +Ribbon cable between Teensy pins and socket +Wire Bus Line + 10850 6050 6550 6050 +$EndSCHEMATC diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/docs/photos/P1050573.jpg new file mode 100644 index 0000000000..027ab9efb2 Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050573.jpg differ diff --git a/keyboards/kinesis/docs/photos/P1050574.jpg b/keyboards/kinesis/docs/photos/P1050574.jpg new file mode 100644 index 0000000000..d49c492b8a Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050574.jpg differ diff --git a/keyboards/kinesis/docs/photos/P1050575.jpg b/keyboards/kinesis/docs/photos/P1050575.jpg new file mode 100644 index 0000000000..50cc9897c4 Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050575.jpg differ diff --git a/keyboards/kinesis/docs/readme.txt b/keyboards/kinesis/docs/readme.txt new file mode 100644 index 0000000000..af33ac4907 --- /dev/null +++ b/keyboards/kinesis/docs/readme.txt @@ -0,0 +1,52 @@ +This directory of documentation was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis +and is probably Copyright 2014 Warren Janssens +and probably released under GPL v2, which may be recovered at . + +Row configuration +PF0 A +PF1 B +PF2 C +PF3 G 0 = U4, 1 = U5 + +Column configuration + 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7 + r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 +PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+ +PB1 22 c2 f3 f5 f4 t r e w q TAB +PB2 23 c3 ESC f2 f1 g f d s a CL +PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]} +PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_ +PB5 26 c6 PB PGM KPD y u i o p \ +PB6 27 c7 LC DL BS RC EN SP h j k l ;: '" +PB7 28 c8 RA PU PD n m ,< .> /? RS + */ + + +40 pin connector + + DL2 1 40 VCC + DR1 2 39 A + DR2 3 38 B + DL1 4 37 C + KPD 5 36 G + PGM 6 35 + SCL 7 34 + SDA 8 33 + RST 9 32 BUZZ + WP 10 31 EA + FS1 11 30 ALE + CLOCK 12 29 PSEN + DATA 13 28 r8 + 14 27 r7 + FS3 15 26 r6 + 16 25 r5 + FS2 17 24 r4 + XTAL1 18 23 r3 + XTAL2 19 22 r2 + GND 20 21 r1 + + +references: +https://github.com/chrisandreae/keyboard-firmware + + diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/docs/schematic.png new file mode 100644 index 0000000000..fa9405a1fa Binary files /dev/null and b/keyboards/kinesis/docs/schematic.png differ diff --git a/keyboards/kinesis/keymaps/default/Makefile b/keyboards/kinesis/keymaps/default/Makefile new file mode 100644 index 0000000000..9d3df5964f --- /dev/null +++ b/keyboards/kinesis/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/kinesis/keymaps/default/config.h b/keyboards/kinesis/keymaps/default/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/kinesis/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c new file mode 100644 index 0000000000..3bf80699ce --- /dev/null +++ b/keyboards/kinesis/keymaps/default/keymap.c @@ -0,0 +1,116 @@ +#include "kinesis.h" +#include "action_layer.h" + +#define QWERTY 0 // Base qerty +#define SYMB 1// Symbol layer + +// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2. + + +/**************************************************************************************************** +* +* Keymap: Default Layer in Qwerty +* +* ,-------------------------------------------------------------------------------------------------------------------. +* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | PSCR | SLCK | PAUS | FN0 | BOOT | +* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| +* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ | +* |--------+------+------+------+------+------| +------+------+------+------+------+--------| +* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Caps | A | S | D | F | G | | H | J | K | L | ;: | '" | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift | +* `--------+------+------+------+------+------- `------+------+------+------+------+--------' +* | `~ | INS | Left | Right| | Up | Down | [{ | ]} | +* `---------------------------' `---------------------------' +* ,-------------. ,-------------. +* | Ctrl | Alt | | Gui | Ctrl | +* ,------|------|------| |------+------+------. +* | | | Home | | PgUp | | | +* | BkSp | Del |------| |------|Return| Space| +* | | | End | | PgDn | | | +* `--------------------' `--------------------' +*/ + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[QWERTY] = KEYMAP( + KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, + KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , + KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , + KC_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , + KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , + KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT, + KC_LCTL,KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL ,KC_END , + KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1, + KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS, + 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_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT, + KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC, + KC_RGUI,KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENTER ,KC_SPC + ), +[SYMB] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, RESET, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { + [0] = 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; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/kinesis/keymaps/default/readme.md b/keyboards/kinesis/keymaps/default/readme.md new file mode 100644 index 0000000000..da033be1e9 --- /dev/null +++ b/keyboards/kinesis/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for kinesis-advantage diff --git a/keyboards/kinesis/keymaps/programmer/Makefile b/keyboards/kinesis/keymaps/programmer/Makefile new file mode 100644 index 0000000000..9d3df5964f --- /dev/null +++ b/keyboards/kinesis/keymaps/programmer/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/programmer/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/kinesis/keymaps/programmer/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c new file mode 100644 index 0000000000..83fb7bd5f5 --- /dev/null +++ b/keyboards/kinesis/keymaps/programmer/keymap.c @@ -0,0 +1,245 @@ +#include "kinesis.h" +#include "action_layer.h" +#include "mousekey.h" + +#define QWERTY 0 // Base qerty +#define SYMB 1// Symbol layer +#define MOUSE 2// + + + + +/* Macros */ +enum { + NONE = 0, + // Diagonal mouse movement + A_MUL, + A_MUR, + A_MDL, + A_MDR, +}; + + +// Borrowing very heavily from +// https://github.com/alvicstep/tmk_keyboard +/**************************************************************************************************** +* +* Keymap: Default Layer in Qwerty +* +* ,-------------------------------------------------------------------------------------------------------------------. +* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT | +* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| +* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ | +* |--------+------+------+------+------+------| +------+------+------+------+------+--------| +* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift | +* `--------+------+------+------+------+------- `------+------+------+------+------+--------' +* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI | +* `---------------------------' `---------------------------' +* ,-------------. ,-------------. +* | Ctrl | Alt | | Gui | Ctrl | +* ,------|------|------| |------+------+------. +* | | | Home | | PgUp | | | +* | BkSp | Del |------| |------|Return| Space| +* | | | End | | PgDn | | | +* `--------------------' `--------------------' +*/ + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[QWERTY] = KEYMAP( + KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, + KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , + KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , + KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , + KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , + KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2, + KC_LCTL,KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL ,KC_FN0 , + KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET, + KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS, + 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_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT, + KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI, + KC_RGUI,KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENTER ,KC_SPC + ), +[SYMB] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), +/* Keymap: Movement and function layer +* +* ,-------------------------------------------------------------------------------------------------------------------. +* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT | +* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| +* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast | +* |--------+------+------+------+------+------| +------+------+------+------+------+--------| +* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm| +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | | +* `--------+------+------+------+------+------- `------+------+------+------+------+--------' +* | `~ | ESC | < | > | | { | } | ESC | | +* `---------------------------' `---------------------------' +* ,-------------. ,-------------. +* | Ctrl | Alt | | Gui | Ctrl | +* ,------|------|------| |------+------+------. +* | | | Home | | PgUp | | | +* | BkSp | Del |------| |------|Mouse1|Mouse2| +* | | | End | | PgDn |LClick|Rclick| +* `--------------------' `--------------------' +*/ + + +[MOUSE] = KEYMAP( + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC , + KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP, + KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), + KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN, + KC_TRNS, KC_TRNS, KC_LABK, KC_RABK, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0,RESET, + KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2, + KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1, + KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0, + KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS, + KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_BTN1, KC_BTN2 + ), + + +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols) + [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols) + [2] = 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; + + // from algernon's ErgoDox EZ layout, + case A_MUL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MUR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + case A_MDL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MDR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + + +} + +void matrix_scan_user(void) { + int8_t layer = biton32(layer_state); + + switch (layer) { + case 1: + all_led_off(); + break; + case 2: + if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) { + all_led_off(); + caps_lock_led_on(); + } + break; + case 0: + all_led_off(); + num_lock_led_on(); + break; + default: + break; + } + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/programmer/readme.md new file mode 100644 index 0000000000..76356a6871 --- /dev/null +++ b/keyboards/kinesis/keymaps/programmer/readme.md @@ -0,0 +1,2 @@ +# a programmer friendly keymap for the kinesis-advantage +# not really baked yet. diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c new file mode 100644 index 0000000000..1fee90e6f9 --- /dev/null +++ b/keyboards/kinesis/kinesis.c @@ -0,0 +1,106 @@ +#include "kinesis.h" + +// begin section origin https://github.com/alvicstep/tmk_keyboard + + +void all_led_off(void) +{ + PORTD = 0b11111111; +} + +void all_led_on(void) +{ + PORTD = 0b00000000; +} +void num_lock_led_on(void) +{ + PORTD = 0b11101111; +} + +void caps_lock_led_on(void) +{ + PORTD = 0b01111111; +} + +void scroll_lock_led_on(void) +{ + PORTD = 0b11011111; +} +void keypad_led_on(void) +{ + PORTD = 0b10111111; +} +void blink_all_leds(void) +{ + all_led_on(); + _delay_ms(500); + + all_led_off(); + _delay_ms(100); + + caps_lock_led_on(); + _delay_ms(100); + + num_lock_led_on(); + _delay_ms(100); + + scroll_lock_led_on(); + _delay_ms(100); + + keypad_led_on(); + _delay_ms(100); + + //back + + scroll_lock_led_on(); + _delay_ms(100); + + num_lock_led_on(); + _delay_ms(100); + + caps_lock_led_on(); + _delay_ms(100); + + all_led_off(); +} + +// End section origin https://github.com/alvicstep/tmk_keyboard + + void matrix_init_kb(void) { + blink_all_leds(); + matrix_init_user(); +} + + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + +//Copyright 2014 Warren Janssens + uint8_t leds = 0xF0; + if (usb_led & 1 << USB_LED_NUM_LOCK) + leds &= ~0x10; + if (usb_led & 1 << USB_LED_CAPS_LOCK) + leds &= ~0x80; + if (usb_led & 1 << USB_LED_SCROLL_LOCK) + leds &= ~0x20; + PORTD = (PORTD & 0x0F) | leds; + + led_set_user(usb_led); + +} + + diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h new file mode 100644 index 0000000000..c04fbda155 --- /dev/null +++ b/keyboards/kinesis/kinesis.h @@ -0,0 +1,67 @@ +#ifndef KINESIS_H +#define KINESIS_H + +#include "quantum.h" + + +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array + +#define KEYMAP( \ + k02,k22,k12,k01,k21,k11,k00,k20,k10, \ + k80,k70,k60,k50,k40,k30, \ + k81,k71,k61,k51,k41,k31, \ + k82,k72,k62,k52,k42,k32, \ + k83,k73,k63,k53,k43,k33, \ + k74,k64,k54,k34, \ + k36,k35, \ + k55, \ + k56,k46,k75, \ + k03,k23,k13,k04,k24,k14,k05,k85,k84, \ + k94,kA4,kB4,kD4,kE4,kF4, \ + k95,kA5,kB5,kD5,kE5,kF5, \ + k96,kA6,kB6,kD6,kE6,kF6, \ + k97,kA7,kB7,kD7,kE7,kF7, \ + k93,kB3,kD3,kE3, \ + k47,k66, \ + k67, \ + k87,k76,k86 \ +) { \ + { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \ + { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \ + { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \ + { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \ + { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \ + { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \ + { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \ + { k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \ + { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \ + { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \ + { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \ + { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \ + { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \ + { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \ + { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \ +} + + +/* 4y0 A 4y1 B 4y2 4y3 D 4y4 E 4y5 F 4y6 G 4y7 H 5y0 I 5y1 J 5y2 K 5y3 L 5y4 M 5y5 N 5y6 O 5y7 P */ + +/* + 0 1 2 3 4 5 6 7 8 9 A B C D E F + A B C D E F G H I J K L M N O P + 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7 + r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 +0 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+ +1 PB1 22 c1 f3 f5 f4 t r e w q TAB +2 PB2 23 c2 ESC f2 f1 g f d s a CL +3 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]} +4 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_ +5 PB5 26 c5 PB PGM KPD LA HM END y u i o p \ +6 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '" +7 PB7 28 c7 RA PU PD n m ,< .> /? RS +*/ + + +#endif diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/matrix.c new file mode 100644 index 0000000000..cb0d5ad7df --- /dev/null +++ b/keyboards/kinesis/matrix.c @@ -0,0 +1,228 @@ +/* +Copyright 2014 Warren Janssens + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include +#include "action_layer.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "led.h" +#include "config.h" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static uint8_t matrix[MATRIX_ROWS]; +static uint8_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_row(uint8_t row); +static void unselect_rows(void); +static void select_rows(uint8_t row); + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + //debug_enable = true; + + //dprint("matrix_init"); dprintln(); + // output high (leds) + DDRD = 0xFF; + PORTD = 0xFF; + + // output low (multiplexers) + DDRF = 0xFF; + PORTF = 0x00; + + // input with pullup (matrix) + DDRB = 0x00; + PORTB = 0xFF; + + // input with pullup (program and keypad buttons) + DDRC = 0x00; + PORTC = 0xFF; + + // initialize row and col + unselect_rows(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + +} + +uint8_t matrix_scan(void) +{ + + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_rows(i); + uint8_t row = read_row(i); + if (matrix_debouncing[i] != row) { + matrix_debouncing[i] = row; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + matrix_scan_quantum(); + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1< /? RS + */ + + diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md new file mode 100644 index 0000000000..a990f9cb99 --- /dev/null +++ b/keyboards/kinesis/readme.md @@ -0,0 +1,42 @@ +kinesis-advantage keyboard firmware +====================== + +## Kinesis specific information +This is a port of https://github.com/alvicstep/tmk_keyboard, +which is a fork of https://github.com/wjanssens/tmk_keyboard, +which is based on work from https://github.com/chrisandreae/keyboard-firmware + +If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK. +I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead. + +Not yet implemented: +- Kinesis EEProm reading or writing +- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7 + + + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` -- cgit v1.2.3 From 3d7244e604f47dfbc2b45b17616350b6432c4a52 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Wed, 20 Jul 2016 16:42:09 +0200 Subject: updated bone2planck --- keyboards/planck/keymaps/bone2planck/keymap.c | 176 ++++++++++++++++---------- 1 file changed, 111 insertions(+), 65 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index f40b08685b..765f0c770f 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -3,89 +3,135 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif -#include "keymap_german.h" +#include "..\..\..\quantum\keymap_extras\keymap_german.h" +#include "..\..\..\quantum\keymap_common.h" +#include "..\..\..\tmk_core\common\keycode.h" +#define _______ = KC_TRNS; /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. - It has Umlauts and "ß" as it is optimized for a mix of German & English. - My favourite features are the placement of the special characters often used for programming right on the home row - and the number & navigation block combo, so you never have to move your hands from their home position. - - Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone +It has "üäöß" as it is optimized for a mix of German & English. +My favourite features are the placement of the special characters often used for programming right on the home row +and the number & navigation block combo, so you never have to move your hands from their home position. + +Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Bone2 * ,-----------------------------------------------------------------------------------. - * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | + * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | M1 | C | T | I | E | O | B | N | R | S | G | M1 | + * |M1/Tab| C | T | I | E | O | B | N | R | S | G |M1/Ent| //hold for M1, tap for Tab/Enter * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [0] = { - { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, - { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) }, - { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S }, - { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT } - }, + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, + { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, + { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } +}, - /* M1 Special Characters - * ,-----------------------------------------------------------------------------------. - * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | # | $ | | | ~ | € | + | % | " | ' | ; | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [1] = { - { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO }, - { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS }, - { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } - }, +/* M1 Special Characters +very ergonomic placement for coding +* ,-----------------------------------------------------------------------------------. +* | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | ´ | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* |M1/Tab| \ | / | { | } | * | ? | ( | ) | - | : |M1/Ent| //hold for M1, tap for Tab/Enter +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| # | $ | | | ~ | € | + | % | " | ' | ; |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ +[1] = { + { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, DE_ACUT }, + { _______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, _______ }, + { _______, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } +}, - /* Navigation & Number Blocks - * ,-----------------------------------------------------------------------------------. - * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [2] = { - { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, - { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO }, - { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } - }, +/* Navigation & Number Blocks +very easy to get used to & intuituve placement +* ,-----------------------------------------------------------------------------------. +* | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* | Tab | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | Enter| +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | M3 | M2 | Space | M2 | M3 | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ +[2] = { + { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, + { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT }, + { _______, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ }, + { _______, _______, _______, MO(3), _______, _______, _______, _______, MO(3), _______, _______, _______ } +}, - /* Function & Media Keys - * ,-----------------------------------------------------------------------------------. - * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [3] = { - { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, - { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, - { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS}, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - } +/* Flipped Navigation & Number Blocks for one handed use +accessed by sliding from M2 to M3 with thumb +* ,-----------------------------------------------------------------------------------. +* | | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* | Tab | . | 4 | 5 | 6 | , | Home | Left | Down | Right| End | Enter| +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| 0 | 1 | 2 | 3 | ; | | Tab | Ins | Enter| |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | M3 | | Space | | M3 | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ + +[3] = { + { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, + { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, + { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } +}, + + +/* Function & Media Keys +slide from m4 to m5 to access flipped version +* ,-----------------------------------------------------------------------------------. +* | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | | +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | M4 | M5 | Space | M5 | M4 | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ +[4] = { + { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, + { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, + { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ }, + { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ } +} + + +/* flipped Function & Media Keys +* ,-----------------------------------------------------------------------------------. +* | | | F7 | F8 | F9 | | | Print|Scroll| Pause| | | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* | | | F4 | F5 | F6 | ³ | | Mute | Vol- | Vol+ | | | +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| | F1 | F2 | F3 | ² | | Prev | Play | Next | |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | | M5 | Space | M5 | | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ +[5] = { + { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, + { KC_NO, KC_NO, KC_F4, KC_F5, KC_F6, DE_SQ3, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, + { _______, KC_NO, KC_F1, KC_F2, KC_F3, DE_SQ2, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, + { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ } +} }; const uint16_t PROGMEM fn_actions[] = { -- cgit v1.2.3 From 32f5b34ad25e9c1a317109595a0db0e3e47f8f83 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Wed, 20 Jul 2016 16:58:10 +0200 Subject: reformat --- keyboards/planck/keymaps/bone2planck/keymap.c | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 765f0c770f..2e20a9f6ca 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -18,22 +18,22 @@ Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Bone2 - * ,-----------------------------------------------------------------------------------. - * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * |M1/Tab| C | T | I | E | O | B | N | R | S | G |M1/Ent| //hold for M1, tap for Tab/Enter - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | - * `-----------------------------------------------------------------------------------' - */ - [0] = { - { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, - { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, - { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, - { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } +/* Bone2 +* ,-----------------------------------------------------------------------------------. +* | Q | J | D | U | A | X | P | H | L | M | W | ẞ | +* |------+------+------+------+------+-------------+------+------+------+------+------| +* |M1/Tab| C | T | I | E | O | B | N | R | S | G |M1/Ent| //hold for M1, tap for Tab/Enter +* |------+------+------+------+------+------|------+------+------+------+------+------| +* | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | +* `-----------------------------------------------------------------------------------' +*/ +[0] = { + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, + { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, + { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } }, /* M1 Special Characters -- cgit v1.2.3 From b0e9dbecee209a40ff1fc93ce4415d96cb0cdaba Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Wed, 20 Jul 2016 17:05:23 +0200 Subject: fixed include paths --- keyboards/planck/keymaps/bone2planck/keymap.c | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 2e20a9f6ca..ceb5564251 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -3,9 +3,9 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif -#include "..\..\..\quantum\keymap_extras\keymap_german.h" -#include "..\..\..\quantum\keymap_common.h" -#include "..\..\..\tmk_core\common\keycode.h" +#include "..\..\..\..\quantum\keymap_extras\keymap_german.h" +#include "..\..\..\..\quantum\keymap_common.h" +#include "..\..\..\..\tmk_core\common\keycode.h" #define _______ = KC_TRNS; /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. @@ -30,10 +30,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [0] = { - { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, - { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, - { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } + { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, + { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } }, /* M1 Special Characters @@ -68,8 +68,8 @@ very easy to get used to & intuituve placement * `-----------------------------------------------------------------------------------' */ [2] = { - { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, - { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT }, + { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, + { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT }, { _______, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ }, { _______, _______, _______, MO(3), _______, _______, _______, _______, MO(3), _______, _______, _______ } }, @@ -88,7 +88,7 @@ accessed by sliding from M2 to M3 with thumb */ [3] = { - { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } @@ -108,8 +108,8 @@ slide from m4 to m5 to access flipped version * `-----------------------------------------------------------------------------------' */ [4] = { - { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, - { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, + { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, + { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ }, { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ } } @@ -119,17 +119,17 @@ slide from m4 to m5 to access flipped version * ,-----------------------------------------------------------------------------------. * | | | F7 | F8 | F9 | | | Print|Scroll| Pause| | | * |------+------+------+------+------+-------------+------+------+------+------+------| -* | | | F4 | F5 | F6 | ³ | | Mute | Vol- | Vol+ | | | +* | | ³ | F4 | F5 | F6 | | | Mute | Vol- | Vol+ | | | * |------+------+------+------+------+------|------+------+------+------+------+------| -* | Shift| | F1 | F2 | F3 | ² | | Prev | Play | Next | |Shift | +* | Shift| ² | F1 | F2 | F3 | | | Prev | Play | Next | |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| * | GUI | Ctrl | Alt | | M5 | Space | M5 | | | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [5] = { - { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, - { KC_NO, KC_NO, KC_F4, KC_F5, KC_F6, DE_SQ3, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, - { _______, KC_NO, KC_F1, KC_F2, KC_F3, DE_SQ2, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, + { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, + { KC_NO, KC_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, + { _______, KC_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ } } }; -- cgit v1.2.3 From 24e4e6dd18924295a0ce0cab653be2e63008f0af Mon Sep 17 00:00:00 2001 From: milestogo Date: Wed, 20 Jul 2016 21:12:00 -0700 Subject: adding traveller keyboard --- keyboards/handwired/traveller/Makefile | 89 ++++++ keyboards/handwired/traveller/config.h | 173 ++++++++++++ .../handwired/traveller/keymaps/default/keymap.c | 305 +++++++++++++++++++++ .../handwired/traveller/keymaps/default/readme.md | 2 + keyboards/handwired/traveller/readme.md | 35 +++ keyboards/handwired/traveller/traveller.c | 61 +++++ keyboards/handwired/traveller/traveller.h | 32 +++ 7 files changed, 697 insertions(+) create mode 100644 keyboards/handwired/traveller/Makefile create mode 100644 keyboards/handwired/traveller/config.h create mode 100644 keyboards/handwired/traveller/keymaps/default/keymap.c create mode 100644 keyboards/handwired/traveller/keymaps/default/readme.md create mode 100644 keyboards/handwired/traveller/readme.md create mode 100644 keyboards/handwired/traveller/traveller.c create mode 100644 keyboards/handwired/traveller/traveller.h diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile new file mode 100644 index 0000000000..12a4b71f4e --- /dev/null +++ b/keyboards/handwired/traveller/Makefile @@ -0,0 +1,89 @@ + +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# for avr upload +USB ?= /dev/cu.usbmodem1421 +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + + +ifdef TEENSY2 + OPT_DEFS += -DATREUS_TEENSY2 + ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +else + OPT_DEFS += -DATREUS_ASTAR + OPT_DEFS += -DCATERINA_BOOTLOADER + ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) +endif +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# MCU name + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + +upload: build + $(ATREUS_UPLOAD_COMMAND) + diff --git a/keyboards/handwired/traveller/config.h b/keyboards/handwired/traveller/config.h new file mode 100644 index 0000000000..2b82da447f --- /dev/null +++ b/keyboards/handwired/traveller/config.h @@ -0,0 +1,173 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT traveller +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 13 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D0, D1, D3, D2 } + // no I can't say why this order seemed like a good idea +#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 } +#define UNUSED_PINS + +// LED stuff +#define RGB_DI_PIN B2 +//#define RBLIGHT_TIMER +#define RGBLED_NUM 1 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c new file mode 100644 index 0000000000..13d889ab8b --- /dev/null +++ b/keyboards/handwired/traveller/keymaps/default/keymap.c @@ -0,0 +1,305 @@ +#include "traveller.h" +#include "mousekey.h" +#include "action_layer.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. +#define _QW 0 +#define _LW 1 +#define _HI 2 +#define _NAV 4 +#define _CUR 5 +#define _FKEYS 6 +#define _TRNS 8 + +// We do the same trick for functions +#define RGBLED_TOGGLE 10 +#define _HIOUT 15 +#define _LWOUT 16 +// Macros +#define MDL 4 +#define MDR 5 +#define MUR 6 +#define MUL 3 + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------. .-----------------------------------------. + * | NAV | ` ~ | W | E | R | T | | Y | U | I | O | - | = | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | S | D | F | G | | H | J | K | L | P | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------+------| + *|ctrl/esc| A | X | C | V | B |Ctrl /| N | M | , | . | ; | ' | + * |------+------+------+------+------+------+ // +------+------+------+------+------+------| + * | Shift| Z | Del | GUI | Low | Bspc |/Enter| Spc | Hi | GUI | Alt | / |Shift | + * `------------------------------------------------------------------------------------------' + * + */ +[_QW] = KEYMAP( + F(_NAV), KC_GRV, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_X, KC_C, KC_V, KC_B, KC_RCTL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_DEL, KC_LGUI, MO(_LW), KC_BSPC, KC_ENTER, KC_SPC, MO(_HI), KC_RGUI, KC_RALT, KC_SLSH, KC_RSFT + ), + +/* LOW - numbers, missing or awkward programming keys + Doubled 1 key allows lazy reach with ring finger. + * ,-----------------------------------------. .-----------------------------------------. + * | FKeys| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Ctrl-alt-del| + * |------+------+------+------+------+------| +------+------+------+------+------+------| + * | Tab | 1 | ] | ( | ) | | | * | ( | ) | [ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------+------| + * | Caps | [ | | { | } | ` | /| # | { | } | | ] | | + * |------+------+------+------+------+------+ // +------+------+------+------+------+------| + * | Shift| | | | Low | |/ | | Hi | | | |Shift | + * `------------------------------------------------------------------------------------------' + * + */ + +[_LW] = KEYMAP( + F(_FKEYS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LCTL(LALT(KC_DEL)) , + KC_TRNS, KC_1, KC_RBRC, KC_LPRN, KC_RPRN, KC_NO, KC_ASTR, KC_LPRN, KC_RPRN, KC_LBRC, KC_NO, KC_NO, + KC_CAPS, KC_LBRC, KC_NO, KC_LCBR, KC_RCBR, KC_TILD, KC_TRNS, KC_HASH, KC_LCBR, KC_RCBR, KC_NO, KC_RBRC, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +), + +/* HI - Punctuation, shell and +url ://@.com row on bottom, && is opposite || ^$ are in regex order: ^.*$ +Right hand nav keys work pretty well chorded with the Right hand Hi Key + * ,-----------------------------------------. .-----------------------------------------. + * |FKEYS | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | ! | & | "|" | $ | % | | Vol+| Mute| | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------+------| + * | CAPS | ^ | : | . | * | - | /| Vol-| Play | PgUp | Home | Up | End | + * |------+------+------+------+------+------+ // +------+------+------+------+------+------| + * | | / | | | Low | |/ | | Hi | PgDn | Left| Down | Right | + * `------------------------------------------------------------------------------------------' + * + */ + +[_HI] = KEYMAP( + F(_FKEYS), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, + KC_TRNS, KC_EXLM, KC_AMPR, KC_PIPE, KC_DLR, KC_PERC, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, + KC_CAPS, KC_CIRC, KC_COLN, KC_DOT, KC_ASTR, KC_MINS, KC_TRNS, KC_VOLD, KC_PPLS, KC_PGUP, KC_HOME, KC_UP, KC_END, + KC_TRNS, KC_SLSH, KC_TRNS, KC_TRNS, F(_LW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT +), + +/* NAV - mouse & navigation +//gui left and right are line home/end, or fore & back in browser +// Mouse buttons are reversed for comfort - bigger stretch is to the right button. + + * ,-----------------------------------------. .-----------------------------------------. +* | NAV | | | Up | |Gui-> | | MwU | MS_UL| MS_U |MS_UR | |Ms Norm| +* |------+------+------+------+------+------| |------+------+------+------+------+--------| +* | |Gui<- | Left | Down |Right | C^E | | BTN3 | MS_L |MS Up | MS_R | |Ms Fast | +* |------+------+------+------+------+------|------|------+------+------+------+------+--------| +* | | C^A | GUI X| GUI C| GUI_V| |Enter/| MWD | M_DL |MS Dwn|MS_DR | Up |Ms Slow | +* |------+------+------+------+------+------+ // +------+------+------+------+------+------| +* | | GuiZ | | | Low | |/ButnR|ButnL | Hi | | Left | Down | Right | +* `------------------------------------------------------------------------------------------' +*/ + +[_NAV] = KEYMAP( + F(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M(MUL), KC_MS_U, M(MUR), KC_NO, KC_ACL2, + KC_TRNS, RGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), KC_BTN3, KC_MS_L, KC_MS_U, KC_MS_R, KC_NO, KC_ACL1, + KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M(MDL), KC_MS_D, M(MDR), KC_UP, KC_ACL0, + KC_TRNS, RGUI(KC_Z), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT +), + +/* FKEYS - Funtion keys & mac stuff + * ,-----------------------------------------. .-----------------------------------------. + * | FKEYS| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Ctrl | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | F11 | F12 | F13 | F14 | F15 | Alt | + * |------+------+------+------+------+------|------+------+------+------+------+------+------| + * |Qwerty| | | | | | /| | | | | | Del | + * |------+------+------+------+------+------+ // +------+------+------+------+------+------| + * | . |RGBTog| . | | LO | Bspc |/ | | HI | | | | | + * `------------------------------------------------------------------------------------------' + * + */ + +[_FKEYS] = KEYMAP( + F(_FKEYS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RCTL, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LALT , + F(_QW), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, + KC_TRNS, F(RGBLED_TOGGLE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +), + + +/* TRNS - skeleton for laters + * ,-----------------------------------------. .-----------------------------------------. + * | . | . | . | . | . | . | | ^ | & | * | ( | ) | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | . | . | . | . | . | . | | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------|------+------+------+------+------+------+------| + * | . | . | . | . | . | . | /| | | | . | ; | " | + * |------+------+------+------+------+------+ // +------+------+------+------+------+------| + * | . | . | . | GUI | LO | . |/ | Spc | HI | GUI | M0 | / |LSFT | + * `------------------------------------------------------------------------------------------' + * + */ + +[_TRNS] = { + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, 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[] = { + [_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer + [_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch + [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch + [_NAV] = ACTION_LAYER_TOGGLE(_NAV), + [_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS), + [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE), + [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE), + + // Functions + [RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE), + +}; + +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; + + // from algernon's ErgoDox EZ layout, + case MUL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case MUR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + case MDL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case MDR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + 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; + } +} + + + +void LayerLEDSet(uint8_t layr) { + + switch (layr) { + case _QW: + rgblight_setrgb(0,20, 0); // dim green + break; + case _LW: + // deep purple + rgblight_setrgb(20,0,35); + break; + case _HI: + // light blue + rgblight_setrgb(0,20,20); + break; + case _NAV: + // Yellowy orange + rgblight_setrgb(25,20,0); // brighter + break; + case _FKEYS: + // RED + rgblight_setrgb(20,0,0); // brighter + break; + default: + rgblight_setrgb(20,2,20);//error + break; + } + + return; + +} + +void matrix_init_user(void) { +} + +// Bleah globals need to be initialized. +uint8_t old_layer=_QW; + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + if (old_layer != layer) { + LayerLEDSet(layer); + old_layer=layer; + } +} + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} + + diff --git a/keyboards/handwired/traveller/keymaps/default/readme.md b/keyboards/handwired/traveller/keymaps/default/readme.md new file mode 100644 index 0000000000..7ddc40b3c3 --- /dev/null +++ b/keyboards/handwired/traveller/keymaps/default/readme.md @@ -0,0 +1,2 @@ +# The default keymap for handwired/traveller +this is a kitchen sink build diff --git a/keyboards/handwired/traveller/readme.md b/keyboards/handwired/traveller/readme.md new file mode 100644 index 0000000000..646844b1d7 --- /dev/null +++ b/keyboards/handwired/traveller/readme.md @@ -0,0 +1,35 @@ +traveler keyboard firmware +====================== + +## Traveller Specific Info ## +The traveller is a varient on the atreus keyboard. +Like the Atreus, it is designed to be a good compromise between size and ergonomics. + +key differences are +- an additional column for each pinky +- an RGB LED in the center to show the current layer +- more finger stagger, splay angle and contoured keycaps (F2 profile for space key). + +You can make your own traveller keyboard by using the openscad tools from the atreus repository, and adding a hole for the LED to shine through. + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent README.md](/README.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboard/traveler folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### 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 `.c` and see keymap document (you can find in top README.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/handwired/traveller/traveller.c b/keyboards/handwired/traveller/traveller.c new file mode 100644 index 0000000000..9d25341300 --- /dev/null +++ b/keyboards/handwired/traveller/traveller.c @@ -0,0 +1,61 @@ +#include "traveller.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave this function blank - it can be defined in a keymap file +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void process_action_user(keyrecord_t *record) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + // leave this function blank - it can be defined in a keymap file +} + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + +#ifdef RGBLIGHT_ENABLE + rgblight_init(); + rgblight_mode(1); // solid, no timer + rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW +#endif + +// Turn status LED on + DDRC |= (1<<7); + PORTC |= (1<<7); + + matrix_init_user(); +} + + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} + + diff --git a/keyboards/handwired/traveller/traveller.h b/keyboards/handwired/traveller/traveller.h new file mode 100644 index 0000000000..972a1a94a6 --- /dev/null +++ b/keyboards/handwired/traveller/traveller.h @@ -0,0 +1,32 @@ +#ifndef TRAVELLER_H +#define TRAVELLER_H + +#include "quantum.h" +#include "led.h" + +#ifdef RGBLIGHT_ENABLE + #include "rgblight.h" +#endif +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + + + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k07, k08, k09, k0a, k0b, k0c, \ + k10, k11, k12, k13, k14, k15, k17, k18, k19, k1a, k1b, k1c, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \ + { k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c } \ +} + +#endif -- cgit v1.2.3 From eeb100f87d96680302024e816ad7460a6d9bf281 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 21 Jul 2016 18:19:08 -0400 Subject: First draft of the 'impossible' layout. --- keyboards/planck/keymaps/impossible/Makefile | 25 ++ keyboards/planck/keymaps/impossible/keymap.c | 332 ++++++++++++++++++++++++++ keyboards/planck/keymaps/impossible/readme.md | 2 + 3 files changed, 359 insertions(+) create mode 100644 keyboards/planck/keymaps/impossible/Makefile create mode 100644 keyboards/planck/keymaps/impossible/keymap.c create mode 100644 keyboards/planck/keymaps/impossible/readme.md diff --git a/keyboards/planck/keymaps/impossible/Makefile b/keyboards/planck/keymaps/impossible/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/planck/keymaps/impossible/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c new file mode 100644 index 0000000000..2489fc270a --- /dev/null +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -0,0 +1,332 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +#define _ALPHA 0 +#define _FN 1 +#define _QWERTY 3 +#define _COLEMAK 4 +#define _DVORAK 5 +#define _LOWER 6 +#define _RAISE 7 +#define _PLOVER 8 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_ALPHA] = { + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, GUI_T(KC_ENTER), KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), KC_SLASH, KC_COMM, SFT_T(KC_BSPC), LT(_FN, KC_ESC), CTL_T(KC_SPC), KC_DOT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_KP_0} +}, + +[_FN] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, KC_ENTER, _______, KC_FN1, KC_FN2, KC_FN3}, + {_______, KC_BSLASH, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_FN10} +}, + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + -- cgit v1.2.3 From c1f014b1dd24ba7e121ae3ca999d832b07ce50cf Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 22 Jul 2016 08:13:06 +0200 Subject: purely cosmetic changes --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 84 +++++++++++------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index fc07f6da8d..17d4b33456 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _DEF: Default Layer - * ,-----------------------------------------------------------.------------------------------------- + * ,-----------------------------------------------------------. * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | * |-----------------------------------------------------------| * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 !! @@ -26,14 +26,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is * `-----------------------------------------------------------' LEFT DWN RIGHT */ -[_DEF] = KEYMAP_ISO_SPLITRSHIFT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ - KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , + [_DEF] = KEYMAP_ISO_SPLITRSHIFT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ + KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , + /* Keymap 1: F-and-vim Layer, modified with Space (Fn0) - * ,-----------------------------------------------------------.----------------------------------------- + * ,-----------------------------------------------------------. * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| * |-----------------------------------------------------------| * | |Paus| Up| | | | | | | | | | | | @@ -45,15 +46,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | |Alt |Prev|Vol-|Next| * `-----------------------------------------------------------' */ -[_SPC] = KEYMAP_ISO_SPLITRSHIFT( - KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT) , - + [_SPC] = KEYMAP_ISO_SPLITRSHIFT( + KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), + /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (Fn1) - * ,-----------------------------------------------------------.----------------------------------------- + * ,-----------------------------------------------------------. * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE * |-----------------------------------------------------------| * | | | | | | | | | | | | | | | @@ -65,15 +66,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | |Alt |Pos1|PgDn|End | * `-----------------------------------------------------------' */ -[_TAB] = KEYMAP_ISO_SPLITRSHIFT( - KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END) , - + [_TAB] = KEYMAP_ISO_SPLITRSHIFT( + KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + /* Keymap 3: Split right shift Numpad toggle Layer (Fn2) - * ,-----------------------------------------------------------.----------------------------------------- + * ,-----------------------------------------------------------. * |RSET| | | | | | | 7| 8| 9| | | |Backsp | * |-----------------------------------------------------------| * | | | | | | | | 4 | 5 | 6 | | | | \ | @@ -85,13 +86,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Win |Alt | |Alt |Left|Down|Right| * `-----------------------------------------------------------' */ -[_SFX] = KEYMAP_ISO_SPLITRSHIFT( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ - KC_TRNS, F(9), F(10), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ - KC_TRNS, F(11), F(12), F(13), F(14), F(15), F(16), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT) , - + [_SFX] = KEYMAP_ISO_SPLITRSHIFT( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ + KC_TRNS, F(9), F(10), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ + KC_TRNS, F(11), F(12), F(13), F(14), F(15), F(16), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), }; enum function_id { @@ -129,19 +129,19 @@ 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) { + // MACRODOWN only works in this function + switch(id) { case 0: - return (record->event.pressed ? - MACRO( D(RALT), T(SPC), U(RALT), END ) - :MACRO( END )); - break; + return (record->event.pressed ? + MACRO( D(RALT), T(SPC), U(RALT), END ) + :MACRO( END )); + break; case 1: - return (record->event.pressed ? - MACRO( D(LALT), T(F2), U(LALT), END ) - :MACRO( END )); - break; - } + return (record->event.pressed ? + MACRO( D(LALT), T(F2), U(LALT), END ) + :MACRO( END )); + break; + } return MACRO_NONE; }; -- cgit v1.2.3 From 197244e47f619b0853e4fdb54bb821a32b584764 Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 22 Jul 2016 08:14:08 +0200 Subject: more cosmetic changes (whitespace) --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 17d4b33456..c7aad3fc00 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -116,7 +116,7 @@ const uint16_t PROGMEM fn_actions[] = { [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN), [7] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT), [8] = ACTION_FUNCTION(LAUNCH), - [9] = ACTION_FUNCTION(RGBLED_TOGGLE), + purely cosmetic changes [9] = ACTION_FUNCTION(RGBLED_TOGGLE), [10] = ACTION_FUNCTION(RGBLED_STEP_MODE), [11] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), [12] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), -- cgit v1.2.3 From 70e42489dec375e558d8e81ed5ebfb69b4f3dbd9 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2016 10:22:52 +0200 Subject: tap-dance: Support for holding keys With this change, tap dance will now store the pressed state of the tap-dance key, and allow one to make an action sooner, while the key is still held, and only unregister when the key is released. The registration must happen in the `on_dance_finished` callback, while unregistering goes to `on_reset`. The surrounding code makes sure not to call either multiple times. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 11 ++++++++++- quantum/process_keycode/process_tap_dance.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index b9b836df2e..097440405c 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -73,10 +73,14 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); + } else if (qk_tap_dance_state.active && qk_tap_dance_state.pressed) { + reset_tap_dance (&qk_tap_dance_state); } else { r = false; } + qk_tap_dance_state.active = true; + qk_tap_dance_state.pressed = record->event.pressed; if (record->event.pressed) { qk_tap_dance_state.keycode = keycode; qk_tap_dance_state.timer = timer_read (); @@ -90,6 +94,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); + qk_tap_dance_state.active = false; } break; } @@ -98,7 +103,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { } void matrix_scan_tap_dance () { - if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { + if (qk_tap_dance_state.active && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { // if we are here, the tap dance was timed out process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); reset_tap_dance (&qk_tap_dance_state); @@ -109,6 +114,9 @@ void reset_tap_dance (qk_tap_dance_state_t *state) { uint16_t idx = state->keycode - QK_TAP_DANCE; qk_tap_dance_action_t action; + if (state->pressed) + return; + action = tap_dance_actions[idx]; switch (action.type) { case QK_TAP_DANCE_TYPE_FN: @@ -123,4 +131,5 @@ void reset_tap_dance (qk_tap_dance_state_t *state) { state->keycode = 0; state->count = 0; + state->active = false; } diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 7b820584a8..d457db9b3c 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -11,6 +11,8 @@ typedef struct uint8_t count; uint16_t keycode; uint16_t timer; + bool active:1; + bool pressed:1; } qk_tap_dance_state_t; #define TD(n) (QK_TAP_DANCE + n) -- cgit v1.2.3 From ce8cc9219fca5dde077f1142d03d011b38d27479 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2016 11:34:45 +0200 Subject: tap-dance: Support user_data for the callbacks Refactored the code a little, so all callbacks now receive a `user_data` pointer, which can be anything. As an example, the key pairs from `ACTION_TAP_DANCE_DOUBLE` now use this, and custom, built-in functions. This makes it easier to extend the tap dance functionality, and also simplifies the code a little. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 61 ++++++++++------------------- quantum/process_keycode/process_tap_dance.h | 41 +++++++++---------- 2 files changed, 38 insertions(+), 64 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 097440405c..94b6af1305 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -2,28 +2,32 @@ static qk_tap_dance_state_t qk_tap_dance_state; -static void _process_tap_dance_action_pair (qk_tap_dance_state_t *state, - uint16_t kc1, uint16_t kc2) { - uint16_t kc; +void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; - if (state->count == 0) - return; - - kc = (state->count == 1) ? kc1 : kc2; + if (state->count == 1) { + register_code (pair->kc1); + } else if (state->count == 2) { + register_code (pair->kc2); + } +} - register_code (kc); - unregister_code (kc); +void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; - if (state->count >= 2) { - reset_tap_dance (state); + if (state->count == 1) { + unregister_code (pair->kc1); + } else if (state->count == 2) { + unregister_code (pair->kc2); } } static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, + void *user_data, qk_tap_dance_user_fn_t fn) { if (fn) { - fn(state); + fn(state, user_data); } } @@ -34,14 +38,7 @@ void process_tap_dance_action_on_each_tap (uint16_t keycode) action = tap_dance_actions[idx]; - switch (action.type) { - case QK_TAP_DANCE_TYPE_FN: - _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_each_tap); - break; - - default: - break; - } + _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_each_tap); } void process_tap_dance_action_on_dance_finished (uint16_t keycode) @@ -51,18 +48,7 @@ void process_tap_dance_action_on_dance_finished (uint16_t keycode) action = tap_dance_actions[idx]; - switch (action.type) { - case QK_TAP_DANCE_TYPE_PAIR: - _process_tap_dance_action_pair (&qk_tap_dance_state, - action.pair.kc1, action.pair.kc2); - break; - case QK_TAP_DANCE_TYPE_FN: - _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_dance_finished); - break; - - default: - break; - } + _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_dance_finished); } bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { @@ -118,15 +104,8 @@ void reset_tap_dance (qk_tap_dance_state_t *state) { return; action = tap_dance_actions[idx]; - switch (action.type) { - case QK_TAP_DANCE_TYPE_FN: - if (action.fn.on_reset) { - action.fn.on_reset(state); - } - break; - - default: - break; + if (action.fn.on_reset) { + action.fn.on_reset(state, action.user_data); } state->keycode = 0; diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index d457db9b3c..e2c74efe91 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -17,42 +17,34 @@ typedef struct #define TD(n) (QK_TAP_DANCE + n) -typedef enum -{ - QK_TAP_DANCE_TYPE_PAIR, - QK_TAP_DANCE_TYPE_FN, -} qk_tap_dance_type_t; - -typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state); +typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data); typedef struct { - qk_tap_dance_type_t type; - union { - struct { - uint16_t kc1; - uint16_t kc2; - } pair; - struct { - qk_tap_dance_user_fn_t on_each_tap; - qk_tap_dance_user_fn_t on_dance_finished; - qk_tap_dance_user_fn_t on_reset; - } fn; - }; + struct { + qk_tap_dance_user_fn_t on_each_tap; + qk_tap_dance_user_fn_t on_dance_finished; + qk_tap_dance_user_fn_t on_reset; + } fn; + void *user_data; } qk_tap_dance_action_t; +typedef struct +{ + uint16_t kc1; + uint16_t kc2; +} qk_tap_dance_pair_t; + #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ - .type = QK_TAP_DANCE_TYPE_PAIR, \ - .pair = { kc1, kc2 } \ + .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \ + .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }) \ } #define ACTION_TAP_DANCE_FN(user_fn) { \ - .type = QK_TAP_DANCE_TYPE_FN, \ .fn = { NULL, user_fn, NULL } \ } #define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \ - .type = QK_TAP_DANCE_TYPE_FN, \ .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ } @@ -64,6 +56,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record); void matrix_scan_tap_dance (void); void reset_tap_dance (qk_tap_dance_state_t *state); +void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data); +void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data); + #else #define TD(n) KC_NO -- cgit v1.2.3 From 44e16ffc80620b61eaa17aedcfdd8233d9c99bd9 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2016 11:49:59 +0200 Subject: tap-dance: Code cleanup Removes a number of duplicated code, by passing actions around instead of keycodes, so the various dance action functions do not have to look up the action, but the caller does that for them. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 45 +++++++++++++++-------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 94b6af1305..d240dc2e66 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -22,7 +22,7 @@ void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) { } } -static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, +static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, void *user_data, qk_tap_dance_user_fn_t fn) { @@ -31,34 +31,33 @@ static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, } } -void process_tap_dance_action_on_each_tap (uint16_t keycode) +static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t action) { - uint16_t idx = keycode - QK_TAP_DANCE; - qk_tap_dance_action_t action; - - action = tap_dance_actions[idx]; - _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_each_tap); } -void process_tap_dance_action_on_dance_finished (uint16_t keycode) +static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t action) { - uint16_t idx = keycode - QK_TAP_DANCE; - qk_tap_dance_action_t action; - - action = tap_dance_actions[idx]; - _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_dance_finished); } +static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t action) +{ + _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_reset); +} + bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { bool r = true; + uint16_t idx = keycode - QK_TAP_DANCE; + qk_tap_dance_action_t action; switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); + action = tap_dance_actions[idx]; + + process_tap_dance_action_on_each_tap (action); if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { - process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); + process_tap_dance_action_on_dance_finished (action); } else if (qk_tap_dance_state.active && qk_tap_dance_state.pressed) { reset_tap_dance (&qk_tap_dance_state); } else { @@ -77,8 +76,11 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { default: if (qk_tap_dance_state.keycode) { // if we are here, the tap dance was interrupted by a different key - process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode); - process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); + idx = qk_tap_dance_state.keycode - QK_TAP_DANCE; + action = tap_dance_actions[idx]; + + process_tap_dance_action_on_each_tap (action); + process_tap_dance_action_on_dance_finished (action); reset_tap_dance (&qk_tap_dance_state); qk_tap_dance_state.active = false; } @@ -91,7 +93,10 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { void matrix_scan_tap_dance () { if (qk_tap_dance_state.active && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { // if we are here, the tap dance was timed out - process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode); + uint16_t idx = qk_tap_dance_state.keycode - QK_TAP_DANCE; + qk_tap_dance_action_t action = tap_dance_actions[idx]; + + process_tap_dance_action_on_dance_finished (action); reset_tap_dance (&qk_tap_dance_state); } } @@ -104,9 +109,7 @@ void reset_tap_dance (qk_tap_dance_state_t *state) { return; action = tap_dance_actions[idx]; - if (action.fn.on_reset) { - action.fn.on_reset(state, action.user_data); - } + process_tap_dance_action_on_reset (action); state->keycode = 0; state->count = 0; -- cgit v1.2.3 From fca34e2ad602b943a50c279d3b6e3a30c24dbc25 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2016 11:54:25 +0200 Subject: readme.md: algernon is strictly lowercase Signed-off-by: Gergely Nagy --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ed3da43bd0..7347412308 100644 --- a/readme.md +++ b/readme.md @@ -373,7 +373,7 @@ As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single- ### Tap Dance: A single key can do 3, 5, or 100 different things -Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how Algernon describes the feature: +Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how algernon describes the feature: With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter. -- cgit v1.2.3 From 13385f5691f1a28b1349577ad58d0816f026ee05 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2016 12:04:14 +0200 Subject: readme.md: Update the tap dance docs Signed-off-by: Gergely Nagy --- readme.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index 7347412308..4d6250f8ea 100644 --- a/readme.md +++ b/readme.md @@ -389,7 +389,7 @@ First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feat This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options: -* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. +* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held. * `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. * `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. @@ -397,8 +397,6 @@ The first option is enough for a lot of cases, that just want dual roles. For ex And that's the bulk of it! -Do note, however, that this implementation does have some consequences: keys do not register until either they reach the tapping ceiling, or they time out. This means that if you hold the key, nothing happens, no repeat, no nothing. It is possible to detect held state, and register an action then too, but that's not implemented yet. Keys also unregister immediately after being registered, so you can't even hold the second tap. This is intentional, to be consistent. - And now, on to the explanation of how it works! The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer. @@ -421,20 +419,25 @@ enum { /* Have the above three on the keymap, TD(CT_SE), etc... */ -void dance_cln (qk_tap_dance_state_t *state) { +void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { if (state->count == 1) { register_code (KC_RSFT); register_code (KC_SCLN); - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); } else { register_code (KC_SCLN); + } +} + +void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_RSFT); + unregister_code (KC_SCLN); + } else { unregister_code (KC_SCLN); - reset_tap_dance (state); } } -void dance_egg (qk_tap_dance_state_t *state) { +void dance_egg (qk_tap_dance_state_t *state, void *user_data) { if (state->count >= 100) { SEND_STRING ("Safety dance!"); reset_tap_dance (state); @@ -443,7 +446,7 @@ void dance_egg (qk_tap_dance_state_t *state) { // on each tap, light up one led, from right to left // on the forth tap, turn them off from right to left -void dance_flsh_each(qk_tap_dance_state_t *state) { +void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) { switch (state->count) { case 1: ergodox_right_led_3_on(); @@ -464,7 +467,7 @@ void dance_flsh_each(qk_tap_dance_state_t *state) { } // on the fourth tap, set the keyboard on flash state -void dance_flsh_finished(qk_tap_dance_state_t *state) { +void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) { if (state->count >= 4) { reset_keyboard(); reset_tap_dance(state); @@ -472,7 +475,7 @@ void dance_flsh_finished(qk_tap_dance_state_t *state) { } // if the flash state didnt happen, then turn off leds, left to right -void dance_flsh_reset(qk_tap_dance_state_t *state) { +void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) { ergodox_right_led_1_off(); _delay_ms(50); ergodox_right_led_2_off(); @@ -482,7 +485,7 @@ void dance_flsh_reset(qk_tap_dance_state_t *state) { const qk_tap_dance_action_t tap_dance_actions[] = { [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) - ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln) + ,[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset) ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) ,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset) }; -- cgit v1.2.3 From 5631f1436c356fb9e09138f186981dc9b6cb43a2 Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 22 Jul 2016 11:17:57 +0200 Subject: converted funtions to QMK aliases --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 55 ++++++++++------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index c7aad3fc00..545cb1ab18 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -27,13 +27,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' LEFT DWN RIGHT */ [_DEF] = KEYMAP_ISO_SPLITRSHIFT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - F(2), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, F(17), \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX),F(4), \ - KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, F(5), F(6), F(7)) , - - /* Keymap 1: F-and-vim Layer, modified with Space (Fn0) + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + LT(_TAB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + CTL_T(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_NUHS, CTL_T(KC_ENT), \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), SFT_T(KC_UP), \ + KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, ALT_T(KC_LEFT), GUI_T(KC_DOWN), CTL_T(KC_RIGHT)), + /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) * ,-----------------------------------------------------------. * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| * |-----------------------------------------------------------| @@ -53,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), - /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (Fn1) + /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) * ,-----------------------------------------------------------. * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE * |-----------------------------------------------------------| @@ -73,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), - /* Keymap 3: Split right shift Numpad toggle Layer (Fn2) + /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) * ,-----------------------------------------------------------. * |RSET| | | | | | | 7| 8| 9| | | |Backsp | * |-----------------------------------------------------------| @@ -87,11 +86,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_SFX] = KEYMAP_ISO_SPLITRSHIFT( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ - KC_TRNS, F(9), F(10), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ - KC_TRNS, F(11), F(12), F(13), F(14), F(15), F(16), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ + KC_TRNS, F(2), F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ + KC_TRNS, F(4), F(5), F(6), F(7), F(8), F(9), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), }; enum function_id { @@ -107,24 +106,16 @@ enum function_id { }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(_SPC, KC_SPACE), - [1] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC), - [2] = ACTION_LAYER_TAP_KEY(_TAB, KC_TAB), - [3] = ACTION_LAYER_TOGGLE(_SFX), - [4] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP), - [5] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT), - [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN), - [7] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT), - [8] = ACTION_FUNCTION(LAUNCH), - purely cosmetic changes [9] = ACTION_FUNCTION(RGBLED_TOGGLE), - [10] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [11] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [12] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [13] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [14] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [15] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [16] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - [17] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), + [1] = ACTION_FUNCTION(LAUNCH), + [2] = ACTION_FUNCTION(RGBLED_TOGGLE), + [3] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [8] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [9] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -- cgit v1.2.3 From a39eaa7fb573026851fff35f379e8ed75df241c0 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 22 Jul 2016 17:46:23 -0400 Subject: Switched to natural arrows, put ENTER on middle Fn, swapped Shift and CTRL. --- keyboards/planck/keymaps/impossible/keymap.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 2489fc270a..037282ee20 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -42,19 +42,32 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Alpha-numeric + ,-----------------------------------------------------------------------------------------------. + | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | + |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + `-----------------------------------------------------------------------------------------------' +*/ + [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, GUI_T(KC_ENTER), KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), KC_SLASH, KC_COMM, SFT_T(KC_BSPC), LT(_FN, KC_ESC), CTL_T(KC_SPC), KC_DOT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_KP_0} + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, + KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, KC_ENTER, _______, KC_FN1, KC_FN2, KC_FN3}, - {_______, KC_BSLASH, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_FN10} + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} }, /* Qwerty @@ -67,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' - */ + */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, -- cgit v1.2.3 From 723857bf8a59a4d9a779bfb1a0acd049bb4702d0 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 22 Jul 2016 18:17:34 -0400 Subject: Table for Fn layer. --- keyboards/planck/keymaps/impossible/keymap.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 037282ee20..6c22423fff 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -63,6 +63,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, +/* Symbols (FN Held) + ,-----------------------------------------------------------------------------------------------. + | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + `-----------------------------------------------------------------------------------------------' +*/ + [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, -- cgit v1.2.3 From 81fe3d962c1a04d180df89c0e052cc487b1bbc8a Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 23 Jul 2016 20:37:41 -0400 Subject: update sethbc keymap --- keyboards/satan/keymaps/sethbc/keymap.c | 23 +++++++++++++---------- keyboards/satan/keymaps/sethbc/readme.md | 3 +++ 2 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 keyboards/satan/keymaps/sethbc/readme.md diff --git a/keyboards/satan/keymaps/sethbc/keymap.c b/keyboards/satan/keymaps/sethbc/keymap.c index f8991f9fd7..82c779081a 100644 --- a/keyboards/satan/keymaps/sethbc/keymap.c +++ b/keyboards/satan/keymaps/sethbc/keymap.c @@ -10,6 +10,9 @@ #define _BL 0 #define _FL 1 +// Fillers to make layering more clear +#define _______ KC_TRNS + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _BL: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -33,17 +36,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FL] = KEYMAP_HHKB( #ifdef RGBLIGHT_ENABLE - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, \ - KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \ + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \ + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______), #else - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, \ - KC_CAPS, KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - KC_TRNS, RGB_VAI,RGB_VAD,KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \ + KC_CAPS, _______, RGB_TOG,RGB_MOD,RGB_HUI, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \ + _______, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + _______, RGB_VAI,RGB_VAD,_______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______), #endif }; diff --git a/keyboards/satan/keymaps/sethbc/readme.md b/keyboards/satan/keymaps/sethbc/readme.md new file mode 100644 index 0000000000..ed0eb87016 --- /dev/null +++ b/keyboards/satan/keymaps/sethbc/readme.md @@ -0,0 +1,3 @@ +# sethbc's Satan GH60 layout + +HHKB style split right shift and split backspace. Largely based on the HHKB layout. -- cgit v1.2.3 From ef533be2d63602c85b58edf0376e142e74273e2e Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 23 Jul 2016 20:52:27 -0400 Subject: cleanup default layout --- keyboards/satan/keymaps/default/Makefile | 21 ++++++++++++++++++++ keyboards/satan/keymaps/default/keymap.c | 32 ++++++++++++++++--------------- keyboards/satan/keymaps/default/readme.md | 1 + 3 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 keyboards/satan/keymaps/default/Makefile create mode 100644 keyboards/satan/keymaps/default/readme.md diff --git a/keyboards/satan/keymaps/default/Makefile b/keyboards/satan/keymaps/default/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/satan/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/default/keymap.c b/keyboards/satan/keymaps/default/keymap.c index 35dbbb77b2..3806137e78 100644 --- a/keyboards/satan/keymaps/default/keymap.c +++ b/keyboards/satan/keymaps/default/keymap.c @@ -11,6 +11,8 @@ #define _BL 0 #define _FL 1 +#define _______ KC_TRNS + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _BL: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -26,11 +28,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_BL] = KEYMAP( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ - KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL), + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL), /* Keymap _FL: Function Layer * ,-----------------------------------------------------------. @@ -47,17 +49,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FL] = KEYMAP( #ifdef RGBLIGHT_ENABLE - KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______, _______), #else - KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC, BL_INC,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______), #endif }; diff --git a/keyboards/satan/keymaps/default/readme.md b/keyboards/satan/keymaps/default/readme.md new file mode 100644 index 0000000000..c366147df3 --- /dev/null +++ b/keyboards/satan/keymaps/default/readme.md @@ -0,0 +1 @@ +# default Satan GH60 layout -- cgit v1.2.3 From 75f092271135ac5603eff93cd60bcd95d675278d Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 23 Jul 2016 20:55:20 -0400 Subject: fix typo in readme and satan.h --- keyboards/satan/readme.md | 2 +- keyboards/satan/satan.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md index aa301f020c..aaf189746f 100644 --- a/keyboards/satan/readme.md +++ b/keyboards/satan/readme.md @@ -1,4 +1,4 @@ -Clueboard keyboard firmware +Satan GH60 keyboard firmware ====================== TODO: to be updated. diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index fa17119150..513446bf37 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -3,7 +3,7 @@ #include "quantum.h" -/* Clueboard matrix layout +/* Satan GH60 matrix layout * ,-----------------------------------------------------------. * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | * |-----------------------------------------------------------| -- cgit v1.2.3 From b5761df57b024c29c69b24552fe1d43c49ac049d Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:47:36 -0700 Subject: Create CMD-Preonic Keymap This is very Alpha-Mode, and has not been tested or even Made yet. --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 322 +++++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/keymap.c diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c new file mode 100644 index 0000000000..c7a5be121a --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -0,0 +1,322 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _GAME 3 +#define _NUMPAD 13 +#define _LOWER 14 +#define _RAISE 15 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define GAME M(_GAME) +#define NUMPAD M(_NUMPAD) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {LT(_RAISE, KC_ENT), 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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______}, + {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______}, + {_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______}, + {_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* GAME + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CAPS | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | XXX | Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {_______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* NUMPAD + * ,-----------------------------------------------------------------------------------. + * | Esc | / | * | - | 4 | 5 | 6 | 7 | 8 | 9 | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 7 | 8 | 9 | + | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 4 | 5 | 6 | + | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 1 | 2 | 3 | Enter| V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 0 | 0 | . | Enter| Lower| Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_NUMPAD] = { + {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, +}, +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Mute | BkSpc| Up | Del | Forwd| MBtn1| MUp| MBtn2| / | 7 | 8 | 9 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP4, KC_KP_5, KC_KP_6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, + {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Bksp | PgUp | Del | | | | PgUp | Up | PgDn | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | End | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______}, + {_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | |qwerty|ColMak|Dvorak| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |AGNorm|AGSwap| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Reset | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______}, + {_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, _______, _______, _______}, + {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _GAME: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_GAME); + } + break; + case _NUMPAD: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_NUMPAD); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif -- cgit v1.2.3 From 3c7075011b93875ad74b7cfdd66eb009b972e0ed Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:50:41 -0700 Subject: Create Makefile This is untested, use caution. --- keyboards/preonic/keymaps/CMD-Preonic/makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/makefile diff --git a/keyboards/preonic/keymaps/CMD-Preonic/makefile b/keyboards/preonic/keymaps/CMD-Preonic/makefile new file mode 100644 index 0000000000..2f7787e86b --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/makefile @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif -- cgit v1.2.3 From 9b3708f830ed06f74e555decebbcc0d5d152ffe3 Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:52:52 -0700 Subject: Init Readme This needs a better description. --- keyboards/preonic/keymaps/CMD-Preonic/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/README.md diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md new file mode 100644 index 0000000000..91fa4adeb9 --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/README.md @@ -0,0 +1 @@ +# CMD-Preonic - This keymapping aims to increase productivity, specifically for programmer's who use Text editors like SublimeText and Atom by maximizing usage of the left-hand and function layers. -- cgit v1.2.3 From 34bce6f206e30c06f4b6ccd22d461690732ea607 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Sun, 24 Jul 2016 04:08:40 +0200 Subject: fixed stupid errors --- keyboards/planck/keymaps/bone2planck/keymap.c | 29 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index ceb5564251..4cac60ff9f 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -3,10 +3,15 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif +#include "keymap_german.h" + +/* for intellisense, comment for building #include "..\..\..\..\quantum\keymap_extras\keymap_german.h" #include "..\..\..\..\quantum\keymap_common.h" #include "..\..\..\..\tmk_core\common\keycode.h" -#define _______ = KC_TRNS; +*/ + +#define _______ KC_TRNS /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. It has "üäöß" as it is optimized for a mix of German & English. @@ -26,14 +31,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | +* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [0] = { { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, - { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC } + { KC_RGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_RALT, KC_RCTL, KC_ESC } }, /* M1 Special Characters @@ -45,7 +50,7 @@ very ergonomic placement for coding * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| # | $ | | | ~ | € | + | % | " | ' | ; |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc | +* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [1] = { @@ -64,7 +69,7 @@ very easy to get used to & intuituve placement * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M3 | M2 | Space | M2 | M3 | | Ctrl | Esc | +* | GUI | Ctrl | Alt | M3 | M2 | Space | M2 | M3 | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [2] = { @@ -83,12 +88,12 @@ accessed by sliding from M2 to M3 with thumb * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| 0 | 1 | 2 | 3 | ; | | Tab | Ins | Enter| |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M3 | | Space | | M3 | | Ctrl | Esc | +* | GUI | Ctrl | Alt | M3 | | Space | | M3 | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [3] = { - { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { KC_NO, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } @@ -104,7 +109,7 @@ slide from m4 to m5 to access flipped version * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M5 | Space | M5 | M4 | | Ctrl | Esc | +* | GUI | Ctrl | Alt | M4 | M5 | Space | M5 | M4 | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [4] = { @@ -112,7 +117,7 @@ slide from m4 to m5 to access flipped version { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ }, { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ } -} +}, /* flipped Function & Media Keys @@ -123,13 +128,13 @@ slide from m4 to m5 to access flipped version * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| ² | F1 | F2 | F3 | | | Prev | Play | Next | |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | | M5 | Space | M5 | | | Ctrl | Esc | +* | GUI | Ctrl | Alt | | M5 | Space | M5 | | Alt | Ctrl | Esc | * `-----------------------------------------------------------------------------------' */ [5] = { { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, - { KC_NO, KC_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, - { _______, KC_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, + { KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, + { _______, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ } } }; -- cgit v1.2.3 From fbafb9449e381858d19d8a9a7436ee6b5a078cf3 Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 19:32:02 -0700 Subject: Resolved errors --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index c7a5be121a..f0bcacb411 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -13,6 +13,7 @@ #define _COLEMAK 1 #define _DVORAK 2 #define _GAME 3 +#define _ARROW 12 #define _NUMPAD 13 #define _LOWER 14 #define _RAISE 15 @@ -23,6 +24,7 @@ #define COLEMAK M(_COLEMAK) #define DVORAK M(_DVORAK) #define GAME M(_GAME) +#define ARROW M(_ARROW) #define NUMPAD M(_NUMPAD) #define LOWER M(_LOWER) #define RAISE M(_RAISE) @@ -47,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = { +[_QWERTY] = { {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -134,10 +136,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMPAD] = { {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, -}, +}, /* Lower * ,-----------------------------------------------------------------------------------. * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del | @@ -146,7 +148,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | + * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | * `-----------------------------------------------------------------------------------' @@ -154,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP4, KC_KP_5, KC_KP_6}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6}, {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} }, @@ -188,7 +190,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game | | | | + * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game |NUMPAD| | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | Reset | | | | | | * `-----------------------------------------------------------------------------------' @@ -197,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______}, {_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______}, - {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, NUMPAD, _______, _______}, {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} } @@ -271,6 +273,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) persistant_default_layer_set(1UL<<_NUMPAD); } break; + case _ARROW: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_LOWER); + } + break; case _LOWER: if (record->event.pressed) { layer_on(_LOWER); -- cgit v1.2.3 From 58f092cf872a8f3f584b98445672f3e6809672c2 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Sun, 24 Jul 2016 04:52:35 +0200 Subject: moved ctrl --- keyboards/planck/keymaps/bone2planck/keymap.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 4cac60ff9f..440de7f0da 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -5,7 +5,8 @@ #endif #include "keymap_german.h" -/* for intellisense, comment for building +// for intellisense, comment for building +/* #include "..\..\..\..\quantum\keymap_extras\keymap_german.h" #include "..\..\..\..\quantum\keymap_common.h" #include "..\..\..\..\tmk_core\common\keycode.h" @@ -31,14 +32,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [0] = { - { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, - { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, - { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, - { KC_RGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_RALT, KC_RCTL, KC_ESC } + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) }, + { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT }, + { KC_LCTL, KC_RGUI, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_RALT, KC_ESC, KC_RCTL } }, /* M1 Special Characters @@ -50,7 +51,7 @@ very ergonomic placement for coding * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| # | $ | | | ~ | € | + | % | " | ' | ; |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [1] = { @@ -69,7 +70,7 @@ very easy to get used to & intuituve placement * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M3 | M2 | Space | M2 | M3 | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [2] = { @@ -88,7 +89,7 @@ accessed by sliding from M2 to M3 with thumb * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| 0 | 1 | 2 | 3 | ; | | Tab | Ins | Enter| |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M3 | | Space | | M3 | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | M3 | | Space | | M3 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ @@ -109,7 +110,7 @@ slide from m4 to m5 to access flipped version * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | M4 | M5 | Space | M5 | M4 | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | M4 | M5 | Space | M5 | M4 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [4] = { @@ -128,7 +129,7 @@ slide from m4 to m5 to access flipped version * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| ² | F1 | F2 | F3 | | | Prev | Play | Next | |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| -* | GUI | Ctrl | Alt | | M5 | Space | M5 | | Alt | Ctrl | Esc | +* | Ctrl | GUI | Alt | | M5 | Space | M5 | | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [5] = { -- cgit v1.2.3 From 1bfd57e2345119d5c60e95cdf82e14eb81a3b027 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Sun, 24 Jul 2016 05:02:06 +0200 Subject: moved insert --- keyboards/planck/keymaps/bone2planck/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 440de7f0da..6390e12897 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -64,19 +64,19 @@ very ergonomic placement for coding /* Navigation & Number Blocks very easy to get used to & intuituve placement * ,-----------------------------------------------------------------------------------. -* | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | +* | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | Ins | * |------+------+------+------+------+-------------+------+------+------+------+------| * | Tab | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | Enter| * |------+------+------+------+------+------|------+------+------+------+------+------| -* | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | +* | Shift| | Tab | | Enter| | 0 | 1 | 2 | 3 | ; |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [2] = { - { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, + { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_INS }, { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT }, - { _______, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ }, + { _______, KC_NO, KC_TAB, KC_NO, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ }, { _______, _______, _______, MO(3), _______, _______, _______, _______, MO(3), _______, _______, _______ } }, @@ -94,7 +94,7 @@ accessed by sliding from M2 to M3 with thumb */ [3] = { - { KC_NO, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { KC_NO, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } -- cgit v1.2.3 From c1fb82623c8075bb375f31f4399c47e8e18c521b Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 20:02:45 -0700 Subject: Tested, resolved Mouse issue, resolved numpad issue --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index f0bcacb411..26384795fc 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -50,11 +50,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, - {LT(_RAISE, KC_ENT), 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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {LT(_RAISE, KC_ENT), 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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT(_LOWER, KC_SPC), KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} }, /* Colemak @@ -134,11 +134,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_NUMPAD] = { - {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_ESC, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P0, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, }, /* Lower * ,-----------------------------------------------------------------------------------. @@ -154,11 +154,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, - {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, - {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, + {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} }, /* Raise -- cgit v1.2.3 From 4e0bf283f695b4b584bb62d31bb4cd6d7d1f2203 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Sun, 24 Jul 2016 05:11:07 +0200 Subject: added readme --- keyboards/planck/keymaps/bone2planck/readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 keyboards/planck/keymaps/bone2planck/readme.md diff --git a/keyboards/planck/keymaps/bone2planck/readme.md b/keyboards/planck/keymaps/bone2planck/readme.md new file mode 100644 index 0000000000..3c425efddb --- /dev/null +++ b/keyboards/planck/keymaps/bone2planck/readme.md @@ -0,0 +1,8 @@ +check keymap.c to the layers + +This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. +It has "üäöß" as it is optimized for a mix of German & English. +My favourite features are the placement of the special characters often used for programming right on the home row +and the number & navigation block combo, so you never have to move your hands from their home position. + +Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone \ No newline at end of file -- cgit v1.2.3 From 4480a74a4b815d62de18e35016b0fbe5d59b9c75 Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 21:02:23 -0700 Subject: Arrow key fn layer shouldnt overwrite Ctrl key. Better Print Screen position --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index 26384795fc..287974dabf 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -150,7 +150,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | + * | Vol- | | | | | | | + | Enter| 0 | . | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { @@ -169,16 +169,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | End | | | |Enter | + * | | Pause| Ins | | | Print|Screen| End | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______}, {_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______}, + {_______, KC_PAUSE, KC_INS, _______, KC_PSCR, KC_PSCR, _______, KC_END, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From c826bcfc3969cba4a699da329dc146b9944fce6b Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 21:08:00 -0700 Subject: Did a derp and forgot to set Trans on Arrow layer --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index 287974dabf..5d217e2615 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -154,11 +154,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, - {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, - {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, - {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, + {KC_VOLD, _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} }, /* Raise -- cgit v1.2.3 From e6a41e43aa524ae78aecb2eeeeca55c850d05cdd Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 21:26:01 -0700 Subject: Updated Readme --- keyboards/preonic/keymaps/CMD-Preonic/README.md | 78 ++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md index 91fa4adeb9..2b80c2b3a6 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/README.md +++ b/keyboards/preonic/keymaps/CMD-Preonic/README.md @@ -1 +1,77 @@ -# CMD-Preonic - This keymapping aims to increase productivity, specifically for programmer's who use Text editors like SublimeText and Atom by maximizing usage of the left-hand and function layers. +CMD-Preonic +=================== +The CMD project seeks to improve productivity by optimizing usage of the left hand via clever use of the function layers. + +>Note: This project is currently optimized for grid layout, and has not been confirmed to work 100% on MIT layout, although it is expected to work correctly. + +---------- + +Modes +------------- + +#### QWERTY + +>CMD-Qwerty is very similar to the default Preonic with a few key differences: + + - Dual-role Raise/Enter Key at Caps Lock position. -Don't need to take your hand off the mouse to submit URLs + - Space_Function under left space (Grid layout) -Don't need to take your thumb off of the spacebar to use lower. + - Dedicated arrow keys replaced with ( - , = , [ , and ] ) - big improvement for programmers who are used to fn layer. + +---------- + +#### Game + +> Disables extra features to facilitate easier usage of the Preonic while gaming. this mode is toggled in the adjust layer. + + - Dual Role Function key becomes Caps Lock. + - Space_Function disabled and replaced with normal spacebar. + - Windows Key disabled. + +---------- + +#### Numpad + +> Enables left-hand numpad + + - Left-side numpad + - Can be toggled on in Adjust layer (under . key) + +---------- + +#### Arrow - (Lower) + +> Makes arrow keys easily accessible to Left Hand, and much more. + + - Arrow keys at WASD, Backspace at Q, Delete at E. + - Media Keys near arrow cluster, mute at A. + - Web Nav keys. + - Mouse cluster at YGHJ. + - Numpad in right side of board. + - Can be toggled on in Adjust layer (Under , key) + +---------- + +#### Function- (Raise) + +> Basic Functions. Open Keys for customization. + + - Turns WASD into Navigation cluster (Home, End, Page up and Page Down) + - Pok3r style right hand arrow cluster for accessibility (familiar for many users.) + - Doubles as shift key for top row numbers. + - Print Screen, Insert, etc. + +---------- + +#### Adjust- (Raise + Lower) + +> Switch Modes + + - Default modes moved to the left and new layer toggle modes located to the right. + - Sleep and Wake keys added. + - Reset button moved under Spacebar(s). + +Notes: +------------- + +Please feel free to reach out to Commandlinedesign@gmail.com with suggestions. +Special Thanks to Jack for QMK firmware and the Preonic! -- cgit v1.2.3 From a4034b75c0f8ae9fd2e1001888fe07983f329597 Mon Sep 17 00:00:00 2001 From: Don Smith Date: Sun, 24 Jul 2016 19:18:22 +1200 Subject: Added LEADER_EXTERNS() call. This seems to be needed in most cases. --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index ed3da43bd0..1a0e256b3d 100644 --- a/readme.md +++ b/readme.md @@ -346,6 +346,8 @@ That's what `KC_LEAD` does. Here's an example: 3. Within your `matrix_scan_user` function, do something like this: ``` +LEADER_EXTERNS(); + void matrix_scan_user(void) { LEADER_DICTIONARY() { leading = false; -- cgit v1.2.3 From 7b4d30ee50aa534a973473c715924964991739f0 Mon Sep 17 00:00:00 2001 From: Vivien Alger Date: Sun, 24 Jul 2016 10:57:49 +0200 Subject: Fix some errors in bepo mapping --- quantum/keymap_extras/keymap_bepo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h index 4c30960547..e5ef39552a 100644 --- a/quantum/keymap_extras/keymap_bepo.h +++ b/quantum/keymap_extras/keymap_bepo.h @@ -118,7 +118,7 @@ // Fourth row #define BP_COLON LSFT(BP_DOT) // : #define BP_COLN BP_COLON -#define BP_QUESTION LSFT(BP_QUOTE) // ? +#define BP_QUESTION LSFT(BP_APOS) // ? #define BP_QEST BP_QUESTION // Space bar @@ -183,7 +183,7 @@ // Third row #define BP_AE_LIGATURE ALTGR(BP_A) // æ #define BP_AE BP_AE_LIGATURE -#define BP_U_GRAVE AGR(BP_U) // ù +#define BP_U_GRAVE ALTGR(BP_U) // ù #define BP_UGRV BP_U_GRAVE #define BP_DEAD_TREMA ALTGR(BP_I) // dead ¨ (trema/umlaut/diaresis) #define BP_DTRM BP_DEAD_TREMA -- cgit v1.2.3 From 3ea738e450e9326b0d3ee4192da881cffb4c13c1 Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Sun, 24 Jul 2016 10:00:39 -0400 Subject: ensure there's a recording to play before playing; also enables the LGUI button to play a tone --- quantum/process_keycode/process_music.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index c8f3ddb900..2d52e47a72 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -6,6 +6,7 @@ int offset = 7; // music sequencer static bool music_sequence_recording = false; +static bool music_sequence_recorded = false; static bool music_sequence_playing = false; static float music_sequence[16] = {0}; static uint8_t music_sequence_count = 0; @@ -77,6 +78,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { if (keycode == KC_LCTL && record->event.pressed) { // Start recording stop_all_notes(); music_sequence_recording = true; + music_sequence_recorded = false; music_sequence_playing = false; music_sequence_count = 0; return false; @@ -84,12 +86,15 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing stop_all_notes(); + if (music_sequence_recording) { // was recording + music_sequence_recorded = true; + } music_sequence_recording = false; music_sequence_playing = false; return false; } - if (keycode == KC_LGUI && record->event.pressed) { // Start playing + if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing stop_all_notes(); music_sequence_recording = false; music_sequence_playing = true; -- cgit v1.2.3 From 812007a24168f895105330d3959909525c51636b Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Sun, 24 Jul 2016 10:19:40 -0400 Subject: added music recording/playing doc --- readme.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/readme.md b/readme.md index ed3da43bd0..9a4c314dca 100644 --- a/readme.md +++ b/readme.md @@ -801,6 +801,17 @@ This is inside one of the macros. So when that macro executes, your keyboard pla "Rest style" in the method signature above (the last parameter) specifies if there's a rest (a moment of silence) between the notes. + +## Recording And Playing back Music +* ```Music On``` - Turn music mode on. The default mapping is ```Lower+Upper+C``` +* ```LCTL``` - start a recording +* play some tones +* ```LALT``` - stop recording, stop playing +* ```LGUI``` - play recording +* ```LALT``` - stop playing +* ```Music Off``` - Turn music mode off. The default mapping is ```Lower+Upper+V``` + + ## MIDI functionalty This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. -- cgit v1.2.3 From f9956c2aac357645c4a77887a28c3ab58467893a Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Sun, 24 Jul 2016 12:56:28 -0700 Subject: Fix compiler warning when PREVENT_STUCK_MODIFIERS is enabled. --- tmk_core/common/action_layer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index 63fa2b5ae4..a3c7579642 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -111,7 +111,7 @@ void layer_debug(void) #endif #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) -uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0}; +uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}}; void update_source_layers_cache(keypos_t key, uint8_t layer) { -- cgit v1.2.3 From f4cb84c9402cd58628b6cf895fc24fc34fcffdbd Mon Sep 17 00:00:00 2001 From: Will Wolff-Myren Date: Sun, 24 Jul 2016 14:33:17 -0700 Subject: Remove images, per @ezuk request. =) --- .../keymaps/teckinesis/advantage_layout_win.png | Bin 93337 -> 0 bytes keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 10 ---------- .../ergodox_ez/keymaps/teckinesis/teck209layout.jpg | Bin 89673 -> 0 bytes 3 files changed, 10 deletions(-) delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png b/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png deleted file mode 100644 index 0a1df68091..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/advantage_layout_win.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md index 84b7375056..9494a4d4c2 100644 --- a/keyboards/ergodox_ez/keymaps/teckinesis/readme.md +++ b/keyboards/ergodox_ez/keymaps/teckinesis/readme.md @@ -43,13 +43,3 @@ the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/a * Removed Power, Sleep, Mail, My Computer keys. (I kept hitting these while using the mouse/cursor. =P) -# Truly Ergonomic and Kinesis Advantage Layouts - -## TECK 209 Layout ## - -![TECK 209 Layout](teck209layout.jpg) - -## Kinesis Advantage Layout ## - -![Kinesis Advantage Layout](advantage_layout_win.png) - diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg b/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg deleted file mode 100644 index a97844f4fc..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teck209layout.jpg and /dev/null differ -- cgit v1.2.3 From 8b94e26d7c3b30cc57d710a11e5651d15e8e3b20 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 24 Jul 2016 22:07:43 -0400 Subject: Fixes midi functionality --- Makefile | 2 +- keyboards/lets_split/config.h | 4 ++-- keyboards/planck/keymaps/default/Makefile | 2 +- quantum/keymap_common.c | 2 +- quantum/process_keycode/process_midi.c | 24 ++++++++++++------------ 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index a7a10bf326..980ab26b22 100644 --- a/Makefile +++ b/Makefile @@ -181,7 +181,7 @@ endif ifeq ($(strip $(MIDI_ENABLE)), yes) OPT_DEFS += -DMIDI_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c + SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c endif ifeq ($(strip $(AUDIO_ENABLE)), yes) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 833818ce60..ec99514aa3 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -69,9 +69,9 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -#define RGB_DI_PIN D2 +#define RGB_DI_PIN D4 #define RGBLIGHT_TIMER -#define RGBLED_NUM 28 // Number of LEDs +#define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 diff --git a/keyboards/planck/keymaps/default/Makefile b/keyboards/planck/keymaps/default/Makefile index 581e08cd02..38a504a272 100644 --- a/keyboards/planck/keymaps/default/Makefile +++ b/keyboards/planck/keymaps/default/Makefile @@ -11,7 +11,7 @@ CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls +MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index d0a8312c1e..833e5a8f8d 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -30,7 +30,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef MIDI_ENABLE - #include "keymap_midi.h" + #include "process_midi.h" #endif extern keymap_config_t keymap_config; diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index d6ab9c6264..8784e64f36 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,8 +1,8 @@ #include "process_midi.h" bool midi_activated = false; -uint8_t starting_note = 0x0C; -int offset = 7; +uint8_t midi_starting_note = 0x0C; +int midi_offset = 7; bool process_midi(uint16_t keycode, keyrecord_t *record) { if (keycode == MI_ON && record->event.pressed) { @@ -20,42 +20,42 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { if (midi_activated) { if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { if (record->event.pressed) { - starting_note++; // Change key + midi_starting_note++; // Change key midi_send_cc(&midi_device, 0, 0x7B, 0); } return false; } if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { if (record->event.pressed) { - starting_note--; // Change key + midi_starting_note--; // Change key midi_send_cc(&midi_device, 0, 0x7B, 0); } return false; } if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - offset++; // Change scale + midi_offset++; // Change scale midi_send_cc(&midi_device, 0, 0x7B, 0); return false; } if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - offset--; // Change scale + midi_offset--; // Change scale midi_send_cc(&midi_device, 0, 0x7B, 0); return false; } // basic - // uint8_t note = (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row); + // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row); // advanced - // uint8_t note = (starting_note + record->event.key.col + offset)+12*(MATRIX_ROWS - record->event.key.row); + // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row); // guitar - uint8_t note = (starting_note + record->event.key.col + offset)+5*(MATRIX_ROWS - record->event.key.row); + uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row); // violin - // uint8_t note = (starting_note + record->event.key.col + offset)+7*(MATRIX_ROWS - record->event.key.row); + // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row); if (record->event.pressed) { - // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); + // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); midi_send_noteon(&midi_device, 0, note, 127); } else { - // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); + // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); midi_send_noteoff(&midi_device, 0, note, 127); } -- cgit v1.2.3 From b6fa762234fb5a3590d0ff91ffdf5aa3ae322c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lindh=C3=A9?= Date: Mon, 25 Jul 2016 11:29:54 +0200 Subject: Fix misspelled command in Norwegian helper --- quantum/keymap_extras/keymap_norwegian.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h index 018bfeae59..5c4e8c4955 100644 --- a/quantum/keymap_extras/keymap_norwegian.h +++ b/quantum/keymap_extras/keymap_norwegian.h @@ -13,7 +13,7 @@ #undef NO_BSLS #define NO_BSLS KC_EQL // '\' #undef NO_CIRC -#define NO_CIRC LSFT(C_RBRC) // ^ +#define NO_CIRC LSFT(KC_RBRC) // ^ #undef NO_GRV #define NO_GRV LSFT(NO_BSLS) // #undef NO_OSLH -- cgit v1.2.3 From 283ebbe14298fe75128765fa42c46f02534fb761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lindh=C3=A9?= Date: Mon, 25 Jul 2016 12:50:27 +0200 Subject: Change Nordic ampersand code to match the English Changed from "NO_AMP" to "NO_AMPR" since the KC one is "KC_AMPR" --- quantum/keymap_extras/keymap_nordic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index f8cf4e2e43..da5c829757 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -25,7 +25,7 @@ #define NO_SECT LSFT(NO_HALF) #define NO_QUO2 LSFT(KC_2) #define NO_BULT LSFT(KC_4) -#define NO_AMP LSFT(KC_6) +#define NO_AMPR LSFT(KC_6) #define NO_SLSH LSFT(KC_7) #define NO_LPRN LSFT(KC_8) #define NO_RPRN LSFT(KC_9) -- cgit v1.2.3 From 3e462fac3101955ad3561a104c24ca6125e85acd Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Mon, 25 Jul 2016 20:21:32 +0200 Subject: added missing F keys in flipped layer --- keyboards/planck/keymaps/bone2planck/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 6390e12897..5abae692c6 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -123,19 +123,19 @@ slide from m4 to m5 to access flipped version /* flipped Function & Media Keys * ,-----------------------------------------------------------------------------------. -* | | | F7 | F8 | F9 | | | Print|Scroll| Pause| | | +* | | | F7 | F8 | F9 | F12 | | Print|Scroll| Pause| | | * |------+------+------+------+------+-------------+------+------+------+------+------| -* | | ³ | F4 | F5 | F6 | | | Mute | Vol- | Vol+ | | | +* | | ³ | F4 | F5 | F6 | F11 | | Mute | Vol- | Vol+ | | | * |------+------+------+------+------+------|------+------+------+------+------+------| -* | Shift| ² | F1 | F2 | F3 | | | Prev | Play | Next | |Shift | +* | Shift| ² | F1 | F2 | F3 | F10 | | Prev | Play | Next | |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | GUI | Alt | | M5 | Space | M5 | | Alt | Esc | Ctrl | * `-----------------------------------------------------------------------------------' */ [5] = { - { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, - { KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, - { _______, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, + { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, + { KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, + { _______, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ } } }; -- cgit v1.2.3 From 048e8b7849f94ebb486f941dd3f26f6c70ad42c9 Mon Sep 17 00:00:00 2001 From: erlo muvman Date: Mon, 25 Jul 2016 20:06:58 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index dab06b8eb1..bdb5f2158c 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -119,9 +119,3 @@ The only change here is the *dot* (`.`) character moving from next to `0` next t | | | | | | | | `--------------------' `--------------------' ``` - -# ErgoDox EZ Default Configuration - -As of Feb 2, 2016, the default ErgoDox EZ keymap is: - -![Default](default_highres.png) -- cgit v1.2.3 From 6e2d7ebd80365f96f8f589969b773e2f2efce5d5 Mon Sep 17 00:00:00 2001 From: erlo muvman Date: Mon, 25 Jul 2016 20:12:48 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index bdb5f2158c..c689813c4a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -32,24 +32,24 @@ I think it's quite dangerous to put something like control on the same key as en # Keymap ## Keymap 0: Basic layer ``` - ,--------------------------------------------------. ,--------------------------------------------------. - | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+--------+------. - | | | | | | | | - | Space| Bksp |------| |------| Tab |Enter | - | ctrl | gui | Alt | | Alt | gui | ctrl | - `--------------------' `----------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+--------+------. + | | | | | | | | + | Space| Bksp |------| |------| Tab |Enter | + | ctrl | gui | Alt | | Alt | gui | ctrl | + `--------------------' `----------------------' ``` -- cgit v1.2.3 From 97efac0f1c9642b3f3cd6a56a2094ed9173c818e Mon Sep 17 00:00:00 2001 From: erlo muvman Date: Mon, 25 Jul 2016 20:14:19 -0500 Subject: Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index c689813c4a..000a8d0000 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -32,24 +32,24 @@ I think it's quite dangerous to put something like control on the same key as en # Keymap ## Keymap 0: Basic layer ``` - ,--------------------------------------------------. ,--------------------------------------------------. - | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+--------+------. - | | | | | | | | - | Space| Bksp |------| |------| Tab |Enter | - | ctrl | gui | Alt | | Alt | gui | ctrl | - `--------------------' `----------------------' +,--------------------------------------------------. ,--------------------------------------------------. +| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | +|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+--------+------. + | | | | | | | | + | Space| Bksp |------| |------| Tab |Enter | + | ctrl | gui | Alt | | Alt | gui | ctrl | + `--------------------' `----------------------' ``` -- cgit v1.2.3 From 3779e1988e43e0f4c9ad02acfebf1223d55d477e Mon Sep 17 00:00:00 2001 From: erlo muvman Date: Mon, 25 Jul 2016 20:16:07 -0500 Subject: Delete default_highres.png --- keyboard/ergodox_ez/keymaps/maz/default_highres.png | Bin 1459389 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/maz/default_highres.png diff --git a/keyboard/ergodox_ez/keymaps/maz/default_highres.png b/keyboard/ergodox_ez/keymaps/maz/default_highres.png deleted file mode 100644 index 7d9f045f43..0000000000 Binary files a/keyboard/ergodox_ez/keymaps/maz/default_highres.png and /dev/null differ -- cgit v1.2.3 From 26510e6de8fcfa2c58b66da165beb234f7684973 Mon Sep 17 00:00:00 2001 From: erlo muvman Date: Mon, 25 Jul 2016 20:16:11 -0500 Subject: Delete default.png --- keyboard/ergodox_ez/keymaps/maz/default.png | Bin 193672 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/maz/default.png diff --git a/keyboard/ergodox_ez/keymaps/maz/default.png b/keyboard/ergodox_ez/keymaps/maz/default.png deleted file mode 100644 index 6575f7b5e3..0000000000 Binary files a/keyboard/ergodox_ez/keymaps/maz/default.png and /dev/null differ -- cgit v1.2.3 From 8244fa40ccd89ad16ddc00210d5b1b169fb655c2 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Tue, 26 Jul 2016 14:58:17 +0200 Subject: added config.h, and missing Ins of filpped navigation layer --- keyboards/planck/keymaps/bone2planck/config.h | 90 +++++++++++++++++++++++++++ keyboards/planck/keymaps/bone2planck/keymap.c | 6 +- 2 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 keyboards/planck/keymaps/bone2planck/config.h diff --git a/keyboards/planck/keymaps/bone2planck/config.h b/keyboards/planck/keymaps/bone2planck/config.h new file mode 100644 index 0000000000..ba157db92a --- /dev/null +++ b/keyboards/planck/keymaps/bone2planck/config.h @@ -0,0 +1,90 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#define PREVENT_STUCK_MODIFIERS + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Planck Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#ifdef SUBPROJECT_rev3 + #include "rev3/config.h" +#endif +#ifdef SUBPROJECT_rev4 + #include "rev4/config.h" +#endif + +#endif diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 5abae692c6..7db3197a72 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -5,7 +5,7 @@ #endif #include "keymap_german.h" -// for intellisense, comment for building +// for intellisense, has to be commented for building /* #include "..\..\..\..\quantum\keymap_extras\keymap_german.h" #include "..\..\..\..\quantum\keymap_common.h" @@ -83,7 +83,7 @@ very easy to get used to & intuituve placement /* Flipped Navigation & Number Blocks for one handed use accessed by sliding from M2 to M3 with thumb * ,-----------------------------------------------------------------------------------. -* | | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | | +* | Ins | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | | * |------+------+------+------+------+-------------+------+------+------+------+------| * | Tab | . | 4 | 5 | 6 | , | Home | Left | Down | Right| End | Enter| * |------+------+------+------+------+------|------+------+------+------+------+------| @@ -94,7 +94,7 @@ accessed by sliding from M2 to M3 with thumb */ [3] = { - { KC_NO, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { KC_INS, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } -- cgit v1.2.3 From a41a7a9100b9f4c6bfdf49b39b05e626ffd95397 Mon Sep 17 00:00:00 2001 From: Jason Janse van Rensburg Date: Tue, 26 Jul 2016 16:19:34 +0200 Subject: include base config.h instead of copying it --- keyboards/planck/keymaps/bone2planck/config.h | 93 ++------------------------- 1 file changed, 5 insertions(+), 88 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/config.h b/keyboards/planck/keymaps/bone2planck/config.h index ba157db92a..60aff6db0d 100644 --- a/keyboards/planck/keymaps/bone2planck/config.h +++ b/keyboards/planck/keymaps/bone2planck/config.h @@ -1,90 +1,7 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#define PREVENT_STUCK_MODIFIERS - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define MANUFACTURER Ortholinear Keyboards -#define PRODUCT The Planck Keyboard -#define DESCRIPTION A compact ortholinear keyboard - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 - -/* Planck PCB default pin-out */ -#define MATRIX_ROW_PINS { D0, D5, B5, B6 } -#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define UNUSED_PINS - -#define BACKLIGHT_PIN B7 - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#ifdef SUBPROJECT_rev3 - #include "rev3/config.h" -#endif -#ifdef SUBPROJECT_rev4 - #include "rev4/config.h" +#ifndef CONFIG_USER_H +#define CONFIG_USER_H #endif -#endif +#include "../../config.h" + +#define PREVENT_STUCK_MODIFIERS \ No newline at end of file -- cgit v1.2.3 From 3a860c4bc210857f03ef9fae5043d6d5736d140d Mon Sep 17 00:00:00 2001 From: Jordi Orlando <0xdec@users.noreply.github.com> Date: Tue, 26 Jul 2016 14:43:45 -0500 Subject: Clean up rgblight.c Fix formatting issues, clarify comments --- quantum/rgblight.c | 731 +++++++++++++++++++++++++++-------------------------- 1 file changed, 377 insertions(+), 354 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index b1b0f035d5..1b3c576d18 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -7,24 +7,41 @@ #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, + 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_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}; @@ -38,62 +55,56 @@ 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. - */ + /* 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 = 0, g = 0, b = 0; 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; - } - } + 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); } @@ -111,44 +122,44 @@ void eeconfig_update_rgblight(uint32_t val) { eeprom_update_dword(EECONFIG_RGBLIGHT, val); } void eeconfig_update_rgblight_default(void) { - dprintf("eeconfig_update_rgblight_default\n"); - rgblight_config.enable = 1; - rgblight_config.mode = 1; - rgblight_config.hue = 200; - rgblight_config.sat = 204; - rgblight_config.val = 204; - eeconfig_update_rgblight(rgblight_config.raw); + dprintf("eeconfig_update_rgblight_default\n"); + rgblight_config.enable = 1; + rgblight_config.mode = 1; + rgblight_config.hue = 200; + rgblight_config.sat = 204; + rgblight_config.val = 204; + eeconfig_update_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); + 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"); + dprintf("rgblight_init called.\n"); rgblight_inited = 1; - dprintf("rgblight_init start!\n"); + dprintf("rgblight_init start!\n"); if (!eeconfig_is_enabled()) { - dprintf("rgblight_init eeconfig is not enabled.\n"); + dprintf("rgblight_init eeconfig is not enabled.\n"); eeconfig_init(); - eeconfig_update_rgblight_default(); + eeconfig_update_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_update_rgblight_default(); - rgblight_config.raw = eeconfig_read_rgblight(); - } - eeconfig_debug_rgblight(); // display current eeprom values + if (!rgblight_config.mode) { + dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n"); + eeconfig_update_rgblight_default(); + rgblight_config.raw = eeconfig_read_rgblight(); + } + eeconfig_debug_rgblight(); // display current eeprom values - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) - rgblight_timer_init(); // setup the timer - #endif + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_init(); // setup the timer + #endif if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); @@ -156,58 +167,57 @@ void rgblight_init(void) { } void rgblight_increase(void) { - uint8_t mode = 0; + uint8_t mode = 0; if (rgblight_config.mode < RGBLIGHT_MODES) { mode = rgblight_config.mode + 1; } - rgblight_mode(mode); + rgblight_mode(mode); } - void rgblight_decrease(void) { - uint8_t mode = 0; - 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; + uint8_t mode = 0; + // Mode will never be < 1. If it ever is, eeprom needs to be initialized. + if (rgblight_config.mode > 1) { + mode = rgblight_config.mode - 1; } - rgblight_mode(mode); + rgblight_mode(mode); } - void rgblight_step(void) { - uint8_t mode = 0; + uint8_t mode = 0; mode = rgblight_config.mode + 1; if (mode > RGBLIGHT_MODES) { mode = 1; } - rgblight_mode(mode); + 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; - } + 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_update_rgblight(rgblight_config.raw); xprintf("rgblight mode: %u\n", rgblight_config.mode); - if (rgblight_config.mode == 1) { - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) - rgblight_timer_disable(); - #endif - } 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 - - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) - rgblight_timer_enable(); - #endif - } + if (rgblight_config.mode == 1) { + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_disable(); + #endif + } 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 + + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_enable(); + #endif + } rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); } @@ -215,127 +225,125 @@ void rgblight_toggle(void) { rgblight_config.enable ^= 1; eeconfig_update_rgblight(rgblight_config.raw); xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); - if (rgblight_config.enable) { - rgblight_mode(rgblight_config.mode); - } else { - - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) - rgblight_timer_disable(); - #endif - _delay_ms(50); - rgblight_set(); - } + if (rgblight_config.enable) { + rgblight_mode(rgblight_config.mode); + } else { + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_disable(); + #endif + _delay_ms(50); + rgblight_set(); + } } -void rgblight_increase_hue(void){ - uint16_t hue; +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; - } +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; + uint8_t sat; if (rgblight_config.sat + RGBLIGHT_SAT_STEP > 255) { sat = 255; } else { - sat = rgblight_config.sat+RGBLIGHT_SAT_STEP; + sat = rgblight_config.sat + RGBLIGHT_SAT_STEP; } rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); } -void rgblight_decrease_sat(void){ - uint8_t sat; +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; + sat = rgblight_config.sat - RGBLIGHT_SAT_STEP; } rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); } -void rgblight_increase_val(void){ - uint8_t 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; + val = rgblight_config.val + RGBLIGHT_VAL_STEP; } rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); } void rgblight_decrease_val(void) { - uint8_t val; + uint8_t val; if (rgblight_config.val - RGBLIGHT_VAL_STEP < 0) { val = 0; } else { - val = rgblight_config.val-RGBLIGHT_VAL_STEP; + 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; +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; + 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){ +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_update_rgblight(rgblight_config.raw); - xprintf("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){ + 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_update_rgblight(rgblight_config.raw); + xprintf("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; + static uint8_t rgblight_timer_is_init = 0; + if (rgblight_timer_is_init) { + return; + } + rgblight_timer_is_init = 1; + /* Timer 3 setup */ + TCCR3B = _BV(WGM32) //CTC mode OCR3A as TOP + | _BV(CS30); //Clock selelct: clk/1 + /* Set TOP value */ + uint8_t sreg = SREG; + cli(); + OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff; + OCR3AL = RGBLED_TIMER_TOP & 0xff; + SREG = sreg; } void rgblight_timer_enable(void) { - TIMSK3 |= _BV(OCIE3A); - dprintf("TIMER3 enabled.\n"); + TIMSK3 |= _BV(OCIE3A); + dprintf("TIMER3 enabled.\n"); } void rgblight_timer_disable(void) { - TIMSK3 &= ~_BV(OCIE3A); - dprintf("TIMER3 disabled.\n"); + TIMSK3 &= ~_BV(OCIE3A); + dprintf("TIMER3 disabled.\n"); } void rgblight_timer_toggle(void) { - TIMSK3 ^= _BV(OCIE3A); - dprintf("TIMER3 toggled.\n"); + 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 + // 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) { + // mode = 6 to 8, rainbow mood mod + rgblight_effect_rainbow_mood(rgblight_config.mode - 6); + } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) { + // mode = 9 to 14, rainbow swirl mode + rgblight_effect_rainbow_swirl(rgblight_config.mode - 9); + } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) { + // mode = 15 to 20, snake mode + rgblight_effect_snake(rgblight_config.mode - 15); + } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) { + // mode = 21 to 23, knight mode + 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; + 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; - } - } - -} - -#endif \ No newline at end of file + static int8_t pos = 0; + static uint16_t last_timer = 0; + uint8_t i, j, cur; + int8_t k; + struct cRGB preled[RGBLED_NUM]; + static int8_t increament = -1; + if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { + return; + } + last_timer = timer_read(); + for (i = 0; i < RGBLED_NUM; i++) { + preled[i].r = 0; + preled[i].g = 0; + preled[i].b = 0; + for (j = 0; j < RGBLIGHT_EFFECT_KNIGHT_LENGTH; j++) { + k = pos + j * increament; + if (k < 0) { + k = 0; + } + if (k >= 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; i < RGBLED_NUM; i++) { + cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM; + led[i].r = preled[cur].r; + led[i].g = preled[cur].g; + led[i].b = preled[cur].b; + } + } + rgblight_set(); + if (increament == 1) { + if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) { + pos = 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH; + increament = -1; + } else { + pos -= 1; + } + } else { + if (pos + 1 > RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH) { + pos = RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1; + increament = 1; + } else { + pos += 1; + } + } +} + +#endif -- cgit v1.2.3 From 899c88cd8bf024792760fcf3ee8be6fed13fb315 Mon Sep 17 00:00:00 2001 From: Jordi Orlando <0xdec@users.noreply.github.com> Date: Tue, 26 Jul 2016 14:46:30 -0500 Subject: Increament -> increment --- quantum/rgblight.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 1b3c576d18..c2841b8519 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -453,9 +453,9 @@ void rgblight_effect_snake(uint8_t interval) { static uint16_t last_timer = 0; uint8_t i, j; int8_t k; - int8_t increament = 1; + int8_t increment = 1; if (interval % 2) { - increament = -1; + increment = -1; } if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_SNAKE_INTERVALS[interval / 2])) { return; @@ -466,7 +466,7 @@ void rgblight_effect_snake(uint8_t interval) { led[i].g = 0; led[i].b = 0; for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) { - k = pos + j * increament; + k = pos + j * increment; if (k < 0) { k = k + RGBLED_NUM; } @@ -476,7 +476,7 @@ void rgblight_effect_snake(uint8_t interval) { } } rgblight_set(); - if (increament == 1) { + if (increment == 1) { if (pos - 1 < 0) { pos = RGBLED_NUM - 1; } else { @@ -492,7 +492,7 @@ void rgblight_effect_knight(uint8_t interval) { uint8_t i, j, cur; int8_t k; struct cRGB preled[RGBLED_NUM]; - static int8_t increament = -1; + static int8_t increment = -1; if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { return; } @@ -502,7 +502,7 @@ void rgblight_effect_knight(uint8_t interval) { preled[i].g = 0; preled[i].b = 0; for (j = 0; j < RGBLIGHT_EFFECT_KNIGHT_LENGTH; j++) { - k = pos + j * increament; + k = pos + j * increment; if (k < 0) { k = 0; } @@ -523,17 +523,17 @@ void rgblight_effect_knight(uint8_t interval) { } } rgblight_set(); - if (increament == 1) { + if (increment == 1) { if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) { pos = 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH; - increament = -1; + increment = -1; } else { pos -= 1; } } else { if (pos + 1 > RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH) { pos = RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1; - increament = 1; + increment = 1; } else { pos += 1; } -- cgit v1.2.3 From b66131eeb5774ab0406bfb332e784b5691233b97 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 26 Jul 2016 15:59:26 -0400 Subject: disable midi by default --- keyboards/planck/keymaps/default/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/default/Makefile b/keyboards/planck/keymaps/default/Makefile index 38a504a272..0f4953888d 100644 --- a/keyboards/planck/keymaps/default/Makefile +++ b/keyboards/planck/keymaps/default/Makefile @@ -11,7 +11,7 @@ CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = yes # MIDI controls +MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID @@ -22,4 +22,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif -- cgit v1.2.3 From ea2d2f5d5841791745c93ef27cd1528a7fd69c97 Mon Sep 17 00:00:00 2001 From: Jordi Orlando <0xdec@users.noreply.github.com> Date: Tue, 26 Jul 2016 15:31:22 -0500 Subject: Simplify HSV->RGB calculation De-dupe repeated code --- quantum/rgblight.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index c2841b8519..f82e3ec558 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -55,57 +55,56 @@ 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 = 0, g = 0, b = 0; + // Convert hue, saturation, and value (HSV/HSB) to RGB. DIM_CURVE is used only + // on value and saturation (inverted). This looks the most natural. + uint8_t r = 0, g = 0, b = 0, base, color; 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; + color = (val - base) * (hue % 60) / 60; switch (hue / 60) { case 0: r = val; - g = (((val - base) * hue) / 60) + base; + g = base + color; b = base; break; case 1: - r = (((val - base) * (60 - (hue % 60))) / 60) + base; + r = val - color; g = val; b = base; break; case 2: r = base; g = val; - b = (((val - base) * (hue % 60)) / 60) + base; + b = base + color; break; case 3: r = base; - g = (((val - base) * (60 - (hue % 60))) / 60) + base; + g = val - color; b = val; break; case 4: - r = (((val - base) * (hue % 60)) / 60) + base; + r = base + color; g = base; b = val; break; case 5: r = val; g = base; - b = (((val - base) * (60 - (hue % 60))) / 60) + base; + b = val - color; break; } } - setrgb(r,g,b, led1); + + setrgb(r, g, b, led1); } void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) { @@ -346,7 +345,6 @@ void rgblight_set(void) { } } - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) // Animation timer -- AVR Timer3 -- cgit v1.2.3 From fb2a7d787a6818ea9aefcff5ce36bac3fc48fa6c Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:29:19 -0400 Subject: Removed unused layers (left QWERTY for later use/reference) --- keyboards/planck/keymaps/impossible/keymap.c | 50 ++-------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 6c22423fff..ddf4e2feb7 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -17,18 +17,12 @@ extern keymap_config_t keymap_config; #define _ALPHA 0 #define _FN 1 -#define _QWERTY 3 -#define _COLEMAK 4 -#define _DVORAK 5 -#define _LOWER 6 -#define _RAISE 7 -#define _PLOVER 8 -#define _ADJUST 16 +#define _QWERTY 2 +#define _PLOVER 3 +#define _ADJUST 4 enum planck_keycodes { QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, PLOVER, LOWER, RAISE, @@ -242,44 +236,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistant_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistant_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); -- cgit v1.2.3 From 465cf08c6398da60ef8029aa2d813ed023fbc253 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:37:56 -0400 Subject: Removed unused layers (keeping QWERTY for later/reference) --- keyboards/planck/keymaps/impossible/keymap.c | 81 ++-------------------------- 1 file changed, 4 insertions(+), 77 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index ddf4e2feb7..4686776209 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | `-----------------------------------------------------------------------------------------------' */ - + [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, @@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, -/* Symbols (FN Held) +/* FN-key held ,-----------------------------------------------------------------------------------------------. | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| @@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' - */ + */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -94,78 +94,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = { - {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = { - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, - /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | @@ -209,9 +137,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -- cgit v1.2.3 From ff8136b8837615e342ee475a0968168a08a81ca9 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 17:39:21 -0400 Subject: Modified Plover layer for Impossible's home position. --- keyboards/planck/keymaps/impossible/keymap.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 4686776209..8f85e0fb40 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -96,21 +96,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | + * | S | T | P | H | * | F | P | L | T | D | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * | S | K | W | R | * | R | B | G | S | Z | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | + * | # | # | # | # | | # | # | # | # | # | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Exit | | A | O | | E | U | | | | | | * `-----------------------------------------------------------------------------------' */ [_PLOVER] = { - {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, - {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, - {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, XXXXXXX, XXXXXXX}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, XXXXXXX}, + {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, + {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} }, /* Adjust (Lower + Raise) @@ -124,6 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ + [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, -- cgit v1.2.3 From 7e69de061ae63e356b31b656f18a205199f556ed Mon Sep 17 00:00:00 2001 From: Michael Klos Date: Tue, 26 Jul 2016 18:41:35 -0400 Subject: Added Tap Dance Example Added (simple) Tap Dance example implementation steps. --- readme.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index affee1b62e..3854f4b8d8 100644 --- a/readme.md +++ b/readme.md @@ -409,7 +409,32 @@ Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-danc For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. -In the end, let's see a full example! +#### Examples + +Here's a simple example for a single definition: + +1. In your `makefile`, add `TAP_DANCE_ENABLE = yes` +2. In your `config.h` (which you can copy from `qmk_firmware/keyboards/planck/config.h` to your keymap directory), add `#define TAPPING_TERM 200` +3. In your `keymap.c` file, define the variables and definitions, then add to your keymap: + +```c +//Tap Dance Declarations +enum { + TD_ESC_CAPS = 0 +}; + +//Tap Dance Definitions +const qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) +// Other declarations would go here, separated by commas, if you have them +}; + +//In Layer declaration, add tap dance item in place of a key code +TD(TD_ESC_CAPS) +``` + +Here's a more complex example involving custom actions: ```c enum { -- cgit v1.2.3 From 57952949fe2fa119e986e96363565248a9461eb2 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 26 Jul 2016 23:33:21 -0400 Subject: General table cleanup. --- keyboards/planck/keymaps/impossible/keymap.c | 97 ++++++++++++++-------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 8f85e0fb40..2a9197aec2 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -38,16 +38,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Alpha-numeric - ,-----------------------------------------------------------------------------------------------. - | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | - |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | - `-----------------------------------------------------------------------------------------------' -*/ + * ,-----------------------------------------------------------------------------------------------. + * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + * `-----------------------------------------------------------------------------------------------' + */ [_ALPHA] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, @@ -58,16 +58,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* FN-key held - ,-----------------------------------------------------------------------------------------------. - | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | - |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | - |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | - `-----------------------------------------------------------------------------------------------' -*/ + * ,-----------------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + * `-----------------------------------------------------------------------------------------------' + */ [_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, @@ -77,16 +77,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Brite | Ctrl | Alt | GUI |Lower | Sp ace |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------------------' */ + [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -95,15 +96,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Plover layer (http://opensteno.org) - * ,-----------------------------------------------------------------------------------. - * | S | T | P | H | * | F | P | L | T | D | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | S | K | W | R | * | R | B | G | S | Z | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | # | # | # | # | | # | # | # | # | # | | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Exit | | A | O | | E | U | | | | | | - * `-----------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------------. + * | S | T | P | H | * | F | P | L | T | D | | | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | S | K | W | R | * | R | B | G | S | Z | | | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | # | # | # | # | | # | # | # | # | # | | | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Exit | | A | O | | E | U | | | | | | + * `-----------------------------------------------------------------------------------------------' */ [_PLOVER] = { @@ -113,16 +114,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} }, -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' +/* Adjust + * ,-----------------------------------------------------------------------------------------------. + * | | Reset | | | | | | | | | | Del | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | | | |Aud on |Audoff |AGnorm |AGswap |Qwerty | | |Plover | | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | |Voice- |Voice+ |Mus on |Musoff |MIDIon |MIDIof | | | | | | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { -- cgit v1.2.3 From 3fd1c9d72b71075504fab4b46dc295780d774258 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Tue, 26 Jul 2016 22:43:04 -0500 Subject: Move to keyboards --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 229 ----------------------------- keyboard/ergodox_ez/keymaps/maz/readme.md | 121 --------------- keyboards/ergodox_ez/keymaps/maz/keymap.c | 229 +++++++++++++++++++++++++++++ keyboards/ergodox_ez/keymaps/maz/readme.md | 121 +++++++++++++++ 4 files changed, 350 insertions(+), 350 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/maz/keymap.c delete mode 100644 keyboard/ergodox_ez/keymaps/maz/readme.md create mode 100644 keyboards/ergodox_ez/keymaps/maz/keymap.c create mode 100644 keyboards/ergodox_ez/keymaps/maz/readme.md diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c deleted file mode 100644 index 7b8f0df74d..0000000000 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ /dev/null @@ -1,229 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define ARRW 2 // arrow keys -#define MDIA 3 // media keys, including mouse - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+--------+------. - * | | | | | | | | - * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | Alt | | Alt | gui | ctrl | - * `--------------------' `----------------------' - */ - // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue - // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing -// 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_TRNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_ESC, 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_NO), - KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), - KC_TRNS, KC_TRNS, - KC_TRNS, - CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, - // right hand - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_RALT,GUI_T(KC_TAB), CTL_T(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_DOT, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, - KC_TRNS,KC_TRNS, KC_0, KC_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Arrow keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | |PGDOWN| PGUP | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | HOME | END | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[ARRW] = KEYMAP( - // left 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 3: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |Mute |VolDn | VolUp| | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | Prev | Play | Next | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * |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_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_WBAK, 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_BTN1, KC_BTN2, 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_TRNS, 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) { - 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/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md deleted file mode 100644 index 000a8d0000..0000000000 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ /dev/null @@ -1,121 +0,0 @@ -# Introduction - -## Motivation -I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line. - -More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. - -## Changes -There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date. -### Modifier Keys -The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. - -### Layers -* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best. -* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse -* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer -* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries -** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus - -### Removal Of Keys -I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. - -## Caveats -### Thumb Cluster Range -I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: -* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are -* I have relatively large hands (I guarantee you there's no problem - I guarantee you) - -### Dangerous positioning -I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. - -# Keymap -## Keymap 0: Basic layer -``` -,--------------------------------------------------. ,--------------------------------------------------. -| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | -|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| -| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+--------+------. - | | | | | | | | - | Space| Bksp |------| |------| Tab |Enter | - | ctrl | gui | Alt | | Alt | gui | ctrl | - `--------------------' `----------------------' - -``` - -## Keymap 1: Symbol Layer -The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | 0 | = | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` - -## Keymap 2: Arrow Layer -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | | | | | | | | | | | | | | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | | | | | | | | | |PGDOWN| PGUP | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | | | | | | HOME | END | | | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` - -## Keymap 3: Media and mouse keys -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | | | | | | | | | | | | | | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | | | MsUp | | | | | | | | | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |Mute |VolDn | VolUp| | | | | | | | | | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | Prev | Play | Next | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - |Brwser| | | | | | | - |Back | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` diff --git a/keyboards/ergodox_ez/keymaps/maz/keymap.c b/keyboards/ergodox_ez/keymaps/maz/keymap.c new file mode 100644 index 0000000000..7b8f0df74d --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/maz/keymap.c @@ -0,0 +1,229 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define ARRW 2 // arrow keys +#define MDIA 3 // media keys, including mouse + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | Space| Bksp |------| |------| Tab |Enter | + * | ctrl | gui | Alt | | Alt | gui | ctrl | + * `--------------------' `----------------------' + */ + // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue + // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing +// 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_TRNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_ESC, 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_NO), + KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), + KC_TRNS, KC_TRNS, + KC_TRNS, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, + // right hand + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_RALT,GUI_T(KC_TAB), CTL_T(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_DOT, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_TRNS, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Arrow keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | |PGDOWN| PGUP | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | HOME | END | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[ARRW] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |Mute |VolDn | VolUp| | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Prev | Play | Next | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * |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_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_WBAK, 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_BTN1, KC_BTN2, 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_TRNS, 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) { + 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/keyboards/ergodox_ez/keymaps/maz/readme.md b/keyboards/ergodox_ez/keymaps/maz/readme.md new file mode 100644 index 0000000000..000a8d0000 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/maz/readme.md @@ -0,0 +1,121 @@ +# Introduction + +## Motivation +I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line. + +More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. + +## Changes +There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date. +### Modifier Keys +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. + +### Layers +* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best. +* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse +* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer +* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries +** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus + +### Removal Of Keys +I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. + +## Caveats +### Thumb Cluster Range +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are +* I have relatively large hands (I guarantee you there's no problem - I guarantee you) + +### Dangerous positioning +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. + +# Keymap +## Keymap 0: Basic layer +``` +,--------------------------------------------------. ,--------------------------------------------------. +| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | +|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+--------+------. + | | | | | | | | + | Space| Bksp |------| |------| Tab |Enter | + | ctrl | gui | Alt | | Alt | gui | ctrl | + `--------------------' `----------------------' + +``` + +## Keymap 1: Symbol Layer +The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | 0 | = | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Keymap 2: Arrow Layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | | | | | | | |PGDOWN| PGUP | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | HOME | END | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Keymap 3: Media and mouse keys +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | MsUp | | | | | | | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |Mute |VolDn | VolUp| | | | | | | | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | Prev | Play | Next | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + |Brwser| | | | | | | + |Back | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` -- cgit v1.2.3 From fdd07991def0fc54a41ccc9085d11255d8b63fcb Mon Sep 17 00:00:00 2001 From: SmackleFunky Date: Wed, 27 Jul 2016 04:44:24 +0000 Subject: Allow toggling out of plover layer --- keyboards/ergodox_ez/keymaps/plover/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/plover/keymap.c b/keyboards/ergodox_ez/keymaps/plover/keymap.c index a991e6082d..8a58a37f68 100644 --- a/keyboards/ergodox_ez/keymaps/plover/keymap.c +++ b/keyboards/ergodox_ez/keymaps/plover/keymap.c @@ -160,7 +160,7 @@ KEYMAP( [PLVR] = KEYMAP( // layout: layer 4: Steno for Plover // left hand KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, @@ -169,7 +169,7 @@ KEYMAP( KC_C, KC_V, KC_NO, // right hand KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, -- cgit v1.2.3 From 13bb3a73798da4c0f4ddc9cb644c1cd82f7fc8c1 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 02:06:19 -0400 Subject: update NO_AMP to NO_AMPR --- keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c index 3b74d266f7..a909ed3a4f 100644 --- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c +++ b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c @@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { NO_COLN, KC_A, KC_R, KC_S, KC_T, KC_D, KC_EXLM, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN, MO(4), KC_BTN1, KC_BTN2, KC_TAB,GUI_T(KC_COMMA), - NO_AMP, NO_PIPE, + NO_AMPR, NO_PIPE, NO_PLUS, KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS), // right hand -- cgit v1.2.3 From 368d0bdf685b1b77f7dbcc8bb5769ccaed7f2d21 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 02:21:09 -0400 Subject: kill warnings filling up travis buildlog --- keyboards/satan/keymaps/stanleylai/config.h | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/keyboards/satan/keymaps/stanleylai/config.h b/keyboards/satan/keymaps/stanleylai/config.h index ae2bd36dbb..7f4bb441c4 100644 --- a/keyboards/satan/keymaps/stanleylai/config.h +++ b/keyboards/satan/keymaps/stanleylai/config.h @@ -1,20 +1,15 @@ #include "../../config.h" -// USB Device descriptor parameter -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0003 -#define MANUFACTURER Custom -#define PRODUCT GH60 rev.CHN -#define DESCRIPTION QMK keyboard firmware for GH60 with WS2812 support - // Backlight configuration +#undef BACKLIGHT_LEVELS #define BACKLIGHT_LEVELS 3 // Underlight configuration -#define RGB_DI_PIN E2 -#define RGBLIGHT_TIMER +#undef RGBLED_NUM #define RGBLED_NUM 6 // Number of LEDs +#undef RGBLIGHT_HUE_STEP #define RGBLIGHT_HUE_STEP 8 +#undef RGBLIGHT_SAT_STEP #define RGBLIGHT_SAT_STEP 8 +#undef RGBLIGHT_VAL_STEP #define RGBLIGHT_VAL_STEP 8 -- cgit v1.2.3 From 95ef3f864eb1cbffe8a9151d9d3a09522f12000a Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 02:30:17 -0400 Subject: fix numerous errors in bone2planck keymap --- keyboards/planck/keymaps/bone2planck/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index ceb5564251..8d5e6dcc5e 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -1,12 +1,12 @@ - -#include "planck.h" +#include "planck.h" #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif -#include "..\..\..\..\quantum\keymap_extras\keymap_german.h" -#include "..\..\..\..\quantum\keymap_common.h" -#include "..\..\..\..\tmk_core\common\keycode.h" -#define _______ = KC_TRNS; +#include "keymap_german.h" +//#include "..\..\..\..\quantum\keymap_common.h" +//#include "..\..\..\..\tmk_core\common\keycode.h" + +#define _______ KC_TRNS /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. It has "üäöß" as it is optimized for a mix of German & English. @@ -88,7 +88,7 @@ accessed by sliding from M2 to M3 with thumb */ [3] = { - { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, + { KC_NO, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO }, { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ }, { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ }, { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ } @@ -112,7 +112,7 @@ slide from m4 to m5 to access flipped version { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ }, { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ } -} +}, /* flipped Function & Media Keys @@ -128,8 +128,8 @@ slide from m4 to m5 to access flipped version */ [5] = { { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO }, - { KC_NO, KC_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, - { _______, KC_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, + { KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO }, + { _______, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ }, { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ } } }; -- cgit v1.2.3 From 180a3da44dda89ca6d6e11972d5e9afe21119ed4 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 02:32:15 -0400 Subject: remove unnecessary includes --- keyboards/planck/keymaps/bone2planck/keymap.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c index 8d5e6dcc5e..66cf9386df 100644 --- a/keyboards/planck/keymaps/bone2planck/keymap.c +++ b/keyboards/planck/keymaps/bone2planck/keymap.c @@ -3,8 +3,6 @@ #include "backlight.h" #endif #include "keymap_german.h" -//#include "..\..\..\..\quantum\keymap_common.h" -//#include "..\..\..\..\tmk_core\common\keycode.h" #define _______ KC_TRNS -- cgit v1.2.3 From dd770547909ff0bbc391fbf38493cbd08285fb4c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 27 Jul 2016 08:53:05 +0200 Subject: tmk_core/rules.mk: Make PRINT_ERROR* stop on error Instead of `&& false`, explicitly `exit 1` to make the rules using these macros fail. This fixes #571, and likely breaks Travis badly. Signed-off-by: Gergely Nagy --- tmk_core/rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f13351ea19..2bf2a109fb 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -60,9 +60,9 @@ TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; -- cgit v1.2.3 From b21e8b97acb722bfa7b85831cfd010716ed77962 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 27 Jul 2016 08:42:09 +0200 Subject: tap-dance: Add some debugging support Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 15 +++++++++++++++ quantum/process_keycode/process_tap_dance.h | 1 + 2 files changed, 16 insertions(+) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index d240dc2e66..5429e34383 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -1,6 +1,18 @@ #include "quantum.h" static qk_tap_dance_state_t qk_tap_dance_state; +bool td_debug_enable = false; + +#if CONSOLE_ENABLE +#define td_debug(s) if (td_debug_enable) \ + { \ + xprintf ("D:tap_dance:%s:%s = { keycode = %d, count = %d, active = %d, pressed = %d }\n", __FUNCTION__, s, \ + qk_tap_dance_state.keycode, qk_tap_dance_state.count, \ + qk_tap_dance_state.active, qk_tap_dance_state.pressed); \ + } +#else +#define td_debug(s) +#endif void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) { qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; @@ -33,16 +45,19 @@ static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t action) { + td_debug("trigger"); _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_each_tap); } static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t action) { + td_debug("trigger"); _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_dance_finished); } static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t action) { + td_debug("trigger") _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_reset); } diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index e2c74efe91..6a1258067e 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -49,6 +49,7 @@ typedef struct } extern const qk_tap_dance_action_t tap_dance_actions[]; +extern bool td_debug_enable; /* To be used internally */ -- cgit v1.2.3 From 6ff8a8152035a32f6521d09d91594eeba269486d Mon Sep 17 00:00:00 2001 From: Toni Date: Wed, 27 Jul 2016 21:11:55 +0200 Subject: first try ar adding the parenthesis mess for german iso --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 545cb1ab18..4bd990d375 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -32,25 +32,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { CTL_T(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_NUHS, CTL_T(KC_ENT), \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), SFT_T(KC_UP), \ KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, ALT_T(KC_LEFT), GUI_T(KC_DOWN), CTL_T(KC_RIGHT)), + /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) * ,-----------------------------------------------------------. * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| * |-----------------------------------------------------------| - * | |Paus| Up| | | | | | | | | | | | + * | |Paus| Up| [ | ] | | | | ( | ) | | | | | * |-----------------------------------------------------------| * | |Lft|Dwn|Rgt| | | |Left|Down|Right|Up| | PLAY | * |-----------------------------------------------------------| - * | | | | | | |M0 | | | | | Vol+ | | + * | | | | < | > | |M0 | | { | } | | Vol+ | | * |-----------------------------------------------------------| * | | | | |Alt |Prev|Vol-|Next| * `-----------------------------------------------------------' */ [_SPC] = KEYMAP_ISO_SPLITRSHIFT( - KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), + KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS, LSFT(KC_8), LSFT(KC_9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), RALT(KC_7), RALT(KC_0), KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) * ,-----------------------------------------------------------. -- cgit v1.2.3 From 9822b9f74348184706272fdc968f843bdab42cc2 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 27 Jul 2016 21:18:19 +0100 Subject: Added custom keymap. Added custom keymap. --- keyboards/planck/keymaps/callum/Makefile | 25 ++++++ keyboards/planck/keymaps/callum/keymap.c | 138 +++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 keyboards/planck/keymaps/callum/Makefile create mode 100644 keyboards/planck/keymaps/callum/keymap.c diff --git a/keyboards/planck/keymaps/callum/Makefile b/keyboards/planck/keymaps/callum/Makefile new file mode 100644 index 0000000000..1d76966a6c --- /dev/null +++ b/keyboards/planck/keymaps/callum/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c new file mode 100644 index 0000000000..a747dcb159 --- /dev/null +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -0,0 +1,138 @@ +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BASE 0 +#define _MOVE 1 +#define _SYMB 2 +#define _FUNC 3 + +enum planck_keycodes { + BASE = SAFE_RANGE, + MOVE, + SYMB, + FUNC +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* BASE + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * `-----------------------------------------------------------------------------------' + */ +[_BASE] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, 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_RSFT}, + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} +}, + +/* MOVE + * ,-----------------------------------------------------------------------------------. + * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | | Left | Down |Right | | | Left | Down |Right | | Del | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | |Pg Up |Pg Dn | | |Pg Dn |Pg Up | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_MOVE] = { + {KC_ESC, _______, KC_HOME, KC_UP, KC_END, _______, _______, KC_HOME, KC_UP, KC_END, _______, KC_ESC}, + {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL}, + {_______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* SYMB + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * |-----------------------------------------------------------------------------------. + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | ~ | | | + | [ | { | } | ] | = | \ | ` | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_SYMB] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {_______, KC_TILD, KC_PIPE, KC_PLUS, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_EQL, KC_BSLS, KC_GRV, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* FUNC + * ,-----------------------------------------------------------------------------------. + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-----------------------------------------------------------------------------------. + * | | Play | Prev | Next | BL+ | | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | |Reset | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC] = { + {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } +} + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case MOVE: + if (record->event.pressed) { + layer_on(_MOVE); + update_tri_layer(_MOVE, _SYMB, _FUNC); + } else { + layer_off(_MOVE); + update_tri_layer(_MOVE, _SYMB, _FUNC); + } + return false; + break; + case SYMB: + if (record->event.pressed) { + layer_on(_SYMB); + update_tri_layer(_MOVE, _SYMB, _FUNC); + } else { + layer_off(_SYMB); + update_tri_layer(_MOVE, _SYMB, _FUNC); + } + return false; + break; + case FUNC: + if (record->event.pressed) { + layer_on(_FUNC); + } else { + layer_off(_FUNC); + } + return false; + break; + } + return true; +} -- cgit v1.2.3 From 684d869fab8bf513b2939ea544068f115b9d7b85 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 28 Jul 2016 11:58:53 +0200 Subject: added homerow-ish brackets --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 4bd990d375..7af7c14bd8 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP + * |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP * |-----------------------------------------------------------| * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is * `-----------------------------------------------------------' LEFT DWN RIGHT @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | |Lft|Dwn|Rgt| | | |Left|Down|Right|Up| | PLAY | * |-----------------------------------------------------------| - * | | | | < | > | |M0 | | { | } | | Vol+ | | + * | | | | | < | > | |M0 | | { | } | | Vol+ | | * |-----------------------------------------------------------| * | | | | |Alt |Prev|Vol-|Next| * `-----------------------------------------------------------' @@ -61,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | | | | | | | |Pos1|PgDn|PgUp|End| |Retrn | * |-----------------------------------------------------------| - * | | | | | | |AF2| | | | | PgUp | | + * | | | | | | | |AF2| | | | | PgUp | | * |-----------------------------------------------------------| * | | | | |Alt |Pos1|PgDn|End | * `-----------------------------------------------------------' @@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | | L | L | | | | | 1 | 2 | 3 | | | Return | * |-----------------------------------------------------------| - * | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent + * | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent * |-----------------------------------------------------------| LED controlling * |Ctrl|Win |Alt | |Alt |Left|Down|Right| * `-----------------------------------------------------------' -- cgit v1.2.3 From 1eeceee355662305c5ceecb56a210628ddc723ec Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 28 Jul 2016 12:15:55 +0100 Subject: Added readme.md for custom layout. --- keyboards/planck/keymaps/callum/readme.md | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 keyboards/planck/keymaps/callum/readme.md diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md new file mode 100644 index 0000000000..d4f3449f15 --- /dev/null +++ b/keyboards/planck/keymaps/callum/readme.md @@ -0,0 +1,48 @@ +# callum’s planck layout + +This is a layout for the grid planck, built with a few ideals in mind. These ideals are just my opinion mind! The great thing about *qmk* is that we can all afford to have different opinions about what makes a good layout: + +- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided --- since they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. +- There should be two of every modifier (one on each side), since otherwise certain long key combinations become hard to make. +- Backspace should be in the “capslock position” as God intended. +- The keyboard should be usable without any firmware changes on any operating system. In my case that means it should work on *Windows* and *Linux* without any software modifications, while I can change the behaviour slightly on *macOS* in software since that’s my home OS. The images reflect the intended use on *macOS* **after** minor software tweaks; which will be noted. + +We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. + +## The `BASE` layer +![](http://i.imgur.com/aEXOlWl.png) + +This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. + +The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneosly, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. + +The `ctrl`, `alt`, `cmd` cluster is asymmetric around the centre so that at least one of each of the modifiers can be reached with the thumbs. The intended use is to always hit the left `cmd` and the right `ctrl`, unless an awkward key combination dictates otherwise. + +In firmware `ctrl` and `cmd`/`GUI` are swapped with respect to the image above --- I swap them to the illustrated location when using *macOS* and leave them be for *Windows* and *Linux*. (so that `cmd-z,x,c,v,...` becomes `ctrl-z,x,c,v,...` saving me some confusion) + +## The `MOVE` layer +![](http://i.imgur.com/KXRSuHT.png) + +This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. + +On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `home` and `end` jump you to the beginning and end of the line respectively and so that `pg up` and `pg dn` move the cursor instead of just scrolling. + +None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. + +## The `SYMB` layer +![](http://i.imgur.com/iuU144Y.png) + +The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, with brackets in the centre; then normally shifted symbols to the left, and non shifted to the right, in order of most to least used. + +`esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. + +Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. + +## The `FUNC` layer +![](http://i.imgur.com/skxRZiH.png) + +The only thing of note here is that `bl+` and `bl-` are short for *backlight up* and *backlight down* respectively, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. + +## Other changes from the default +I have LEDs and sound disabled, simply because I have no need of them. \ No newline at end of file -- cgit v1.2.3 From a4e5a4d566f79b2b1c7bb286d25f127d631230d9 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 28 Jul 2016 13:49:25 -0400 Subject: Modified Qwerty, created Qwerty with numbers --- keyboards/planck/keymaps/impossible/keymap.c | 64 +++++++++++++++++----------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 2a9197aec2..fe9c5dc28d 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -20,6 +20,7 @@ extern keymap_config_t keymap_config; #define _QWERTY 2 #define _PLOVER 3 #define _ADJUST 4 +#define _QWERTY2 5 enum planck_keycodes { QWERTY = SAFE_RANGE, @@ -36,7 +37,6 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Alpha-numeric * ,-----------------------------------------------------------------------------------------------. * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | @@ -50,51 +50,69 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ALPHA] = { - {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, - {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, - KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} }, /* FN-key held * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | DFU | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | DFU |Insert | PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| ` |CTL/Bsp| Fn/Ent|SFT/SPC| ; | Home | PgDn | End | F10 | / | + * |Alt/Tab|Gui/Esc| ` |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | / | * `-----------------------------------------------------------------------------------------------' */ [_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Esc | Q | W | E | R | T | Y | U | I | O | P | / | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | + * | Shift | Z | X | C | V | B | N | M | , | . | Up | Enter | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Brite | Ctrl | Alt | GUI |Lower | Sp ace |Raise | Left | Down | Up |Right | + * | Ctrl | Alt | GUI | | | Bksp | Space | | | Left | Down | Right | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, + {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_UP, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_BSPC, KC_SPC, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT} }, +/* Qwerty W/ Numbers + * ,-----------------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | / | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Shift | A | S | D | F | G | H | J | K | L | ; | " | + * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| + * | Ctrl | Z | X | C | V | SPC | B | N | M | , | . | Enter | + * `-----------------------------------------------------------------------------------------------' + */ + +[_QWERTY2] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC/3_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT}, +1}, + /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------------------. * | S | T | P | H | * | F | P | L | T | D | | | @@ -128,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______}, {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -182,8 +200,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { stop_all_notes(); PLAY_NOTE_ARRAY(tone_plover, false, 0); #endif - layer_off(_RAISE); - layer_off(_LOWER); layer_off(_ADJUST); layer_on(_PLOVER); if (!eeconfig_is_enabled()) { -- cgit v1.2.3 From 6567fa1ebeabe8fc25df91e8f75330488763b403 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Thu, 28 Jul 2016 14:56:26 -0400 Subject: Fixed Function keys (Impossible layout) --- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index fe9c5dc28d..edc2ed8739 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -69,10 +69,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_FN12, KC_FN7, KC_FN8, KC_FN9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_FN11, KC_FN4, KC_FN5, KC_FN6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_FN1, KC_FN2, KC_FN3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty -- cgit v1.2.3 From 3b39910cb9506b9deb93f6395792e806e429aa61 Mon Sep 17 00:00:00 2001 From: Jordi Orlando Date: Thu, 28 Jul 2016 14:36:20 -0500 Subject: Create 0xdec Preonic keymap An ergonomically optimized Colemak keymap for the grid-layout Preonic --- keyboards/preonic/keymaps/0xdec/Makefile | 21 ++++ keyboards/preonic/keymaps/0xdec/README.md | 30 ++++++ keyboards/preonic/keymaps/0xdec/config.h | 10 ++ keyboards/preonic/keymaps/0xdec/keymap.c | 173 ++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 keyboards/preonic/keymaps/0xdec/Makefile create mode 100644 keyboards/preonic/keymaps/0xdec/README.md create mode 100644 keyboards/preonic/keymaps/0xdec/config.h create mode 100644 keyboards/preonic/keymaps/0xdec/keymap.c diff --git a/keyboards/preonic/keymaps/0xdec/Makefile b/keyboards/preonic/keymaps/0xdec/Makefile new file mode 100644 index 0000000000..6600e36893 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/Makefile @@ -0,0 +1,21 @@ +# Build Options + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/0xdec/README.md b/keyboards/preonic/keymaps/0xdec/README.md new file mode 100644 index 0000000000..603d3d4552 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/README.md @@ -0,0 +1,30 @@ +Ergonomic Colemak Keymap +======================== +An ergonomically optimized Colemak keymap for the grid-layout Preonic + +Modes +---------- + +#### Colemak + +> Base layer + +- All alphanumerics and symbols available on the base layer + +---------- + +#### Game + +> QWERTY layout for use with games or number entry + +- Standard QWERTY layout +- Integrated right-hand numpad in phone layout + +---------- + +#### Function (Raise) + +> Functions and mode switching + +- Turns NEIO into arrow cluster, with nav cluster below (Home, Page Down, Page Up, End) +- Reset key at lower left (Esc) diff --git a/keyboards/preonic/keymaps/0xdec/config.h b/keyboards/preonic/keymaps/0xdec/config.h new file mode 100644 index 0000000000..5fc9b6f341 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/config.h @@ -0,0 +1,10 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// Number of backlight levels +#undef BACKLIGHT_LEVELS +#define BACKLIGHT_LEVELS 5 + +#endif diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c new file mode 100644 index 0000000000..6c4b8a6fab --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/keymap.c @@ -0,0 +1,173 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Layer names +#define _COLEMAK 0 +#define _GAME 1 +#define _RAISE 2 + +enum preonic_keycodes { + COLEMAK = SAFE_RANGE, + GAME, + RAISE +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | = | Q | W | F | P | G | J | L | U | Y | [ | ] | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | - | A | R | S | T | D | H | N | E | I | O | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ; | Z | X | C | V | B | K | M | , | . | / | ENTER| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ESC | ALT | GUI | SHIFT| CTRL | BKSP | SPACE| RAISE| SHIFT| | DEL | TAB | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSLS}, + {KC_EQL ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_G ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_LBRC,KC_RBRC}, + {KC_MINS,KC_A ,KC_R ,KC_S ,KC_T ,KC_D ,KC_H ,KC_N ,KC_E ,KC_I ,KC_O ,KC_QUOT}, + {KC_SCLN,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_K ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_ENT }, + {KC_ESC ,KC_LALT,KC_LGUI,KC_LSFT,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_RSFT,_______,KC_DEL ,KC_TAB } +}, + +/* Game + * ,-----------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 |NUM LK| ÷ | × | - | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | TAB | Q | W | E | R | T | Y | U | 1 | 2 | 3 | + | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | CTRL | A | S | D | F | G | H | J | 4 | 5 | 6 | = | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | SHIFT| Z | X | C | V | B | N | M | 7 | 8 | 9 | ENTER| + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | | ALT | GUI | SPACE| CTRL | BKSP | SPACE| RAISE| , | 0 | . | TAB | + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = { + {KC_ESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS}, + {KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PPLS}, + {KC_LCTL,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PEQL}, + {KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PENT}, + {XXXXXXX,KC_LALT,KC_LGUI,KC_SPC ,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_PCMM,KC_P0 ,KC_PDOT,KC_TAB } +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | SLEEP| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |PRTSCR| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | SYM | F11 | F12 | |AU TOG| VOL+ |BL INC|COLMAK| GAME | MUSIC| MENU |SCRLCK| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CAPS | PREV | STOP | PLAY | NEXT | VOL- |BL DEC| LEFT | DOWN | UP | RIGHT| PAUSE| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | BACK | STOP | RFRSH| FRWRD| MUTE |BL TOG| HOME | PGDN | PGUP | END |INSERT| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | RESET| | | | | DEL | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_SLEP,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_PSCR}, + {XXXXXXX,KC_F11 ,KC_F12 ,XXXXXXX,AU_TOG ,KC_VOLU,BL_INC ,COLEMAK,GAME ,MU_TOG ,KC_MENU,KC_SLCK}, + {KC_CAPS,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,KC_VOLD,BL_DEC ,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_PAUS}, + {XXXXXXX,KC_WBAK,KC_WSTP,KC_WREF,KC_WFWD,KC_MUTE,BL_TOGG,KC_HOME,KC_PGDN,KC_PGUP,KC_END ,KC_INS }, + {RESET ,_______,_______,_______,_______,KC_DEL ,_______,_______,_______,_______,_______,_______} +} + +}; + + + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_game[][2] = { + {NOTE_E6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} ,{NOTE_E6, 10} , + {NOTE_REST, 10} ,{NOTE_C6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} , + {NOTE_G6, 10} ,{NOTE_REST, 30}, + {NOTE_G5, 10} ,{NOTE_REST, 30} +}; +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +void startup_user() { + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} +void shutdown_user() { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) { + music_scale_user(); +} +void music_scale_user(void) { + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif + + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case GAME: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_game, false, STACCATO); + #endif + persistant_default_layer_set(1UL<<_GAME); + } + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + break; + default: + return true; + break; + } + + return false; +}; -- cgit v1.2.3 From e8f70389592421c7d7d4dbca2d5851e24a29bec9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 29 Jul 2016 10:02:59 +0900 Subject: Fixed a typo Fixed a typo in line 738 'void martix_init' to 'void matrix_init' --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 3854f4b8d8..f717f8e4c8 100644 --- a/readme.md +++ b/readme.md @@ -735,7 +735,7 @@ Enable the backlight from the Makefile. All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `/.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly. -## `void martix_init_*(void)` +## `void matrix_init_*(void)` This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap. -- cgit v1.2.3 From c018743729ce55effcec81efa8663dbc54626d15 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Fri, 29 Jul 2016 00:08:48 -0400 Subject: Connected all layers through Adjust layer --- keyboards/planck/keymaps/impossible/keymap.c | 154 ++++++++++++--------------- 1 file changed, 69 insertions(+), 85 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index edc2ed8739..4ef16aa3a6 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -15,20 +15,17 @@ extern keymap_config_t keymap_config; // 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 _ALPHA 0 -#define _FN 1 +#define _WORKMAN 0 +#define _WORKMAN_FN 1 #define _QWERTY 2 -#define _PLOVER 3 -#define _ADJUST 4 -#define _QWERTY2 5 +#define _QWERTY_FN 3 +#define _PLOVER 4 +#define _ADJUST 5 enum planck_keycodes { - QWERTY = SAFE_RANGE, - PLOVER, - LOWER, - RAISE, - BACKLIT, - EXT_PLV + WORKMAN = SAFE_RANGE, + QWERTY, + PLOVER }; // Fillers to make layering more clear @@ -37,7 +34,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Alpha-numeric +/* Workman Alpha-numeric * ,-----------------------------------------------------------------------------------------------. * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| @@ -45,73 +42,73 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 | / | + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/ / | * `-----------------------------------------------------------------------------------------------' */ -[_ALPHA] = { +[_WORKMAN] = { {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH} + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_WORKMAN_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJUST, KC_SLASH)} }, -/* FN-key held +/* FN-key held (Workman) * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | DFU |Insert | PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | Tab | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| ` |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | / | + * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ -[_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {RESET, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, _______, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} +[_WORKMAN_FN] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_Tab, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Y | U | I | O | P | / | + * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | " | + * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | Enter | + * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| + * | Shift | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | N | M | , | . | Up | Enter | - * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | Alt | GUI | | | Bksp | Space | | | Left | Down | Right | + * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/ / | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, - {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_UP, KC_ENT }, - {KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_BSPC, KC_SPC, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT} + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_QWERTY_FN, KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, }, -/* Qwerty W/ Numbers +/* FN-key held (Qwerty) * ,-----------------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | / | - * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Shift | A | S | D | F | G | H | J | K | L | ; | " | + * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | + * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| + * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Ctrl | Z | X | C | V | SPC | B | N | M | , | . | Enter | + * |Alt/Tab| | CapsLk| ScrLk | NumLk | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' */ -[_QWERTY2] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC/3_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT}, -1}, +[_QWERTY_FN] = { + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, KC_CAPSLOCK, KC_SLCK, KC_NLCK, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} +}, /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------------------. @@ -121,49 +118,49 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | # | # | # | # | | # | # | # | # | # | | | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Exit | | A | O | | E | U | | | | | | + * | | | A | O | | E | U | | | | | Adjust| * `-----------------------------------------------------------------------------------------------' */ [_PLOVER] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, XXXXXXX, XXXXXXX}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, XXXXXXX, XXXXXXX}, - {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, - {EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, KC_LBRC, XXXXXXX, XXXXXXX}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX}, + {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(_ADJUST)} }, /* Adjust * ,-----------------------------------------------------------------------------------------------. - * | | Reset | | | | | | | | | | Del | + * | | | | | | | | | | | | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | |Aud on |Audoff |AGnorm |AGswap |Qwerty | | |Plover | | + * | | | | | | | | |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | |Voice- |Voice+ |Mus on |Musoff |MIDIon |MIDIof | | | | | | + * | | | | | | | | |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | | | | | | + * | | | | | | | | |Workman| Qwerty| Plover| Adjust| * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { - {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______}, - {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, + {_______, _______, _______, _______, _______, _______, _______, _______, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, WORKMAN, QWERTY, PLOVER, _______} } - }; #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_workman[][2] = SONG(QWERTY_SOUND); +float tone_qwerty[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); -float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -174,49 +171,36 @@ void persistant_default_layer_set(uint16_t default_layer) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case QWERTY: + case WORKMAN: if (record->event.pressed) { #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistant_default_layer_set(1UL<<_WORKMAN); } return false; break; - case BACKLIT: + case QWERTY: if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - } else { - unregister_code(KC_RSFT); + persistant_default_layer_set(1UL<<_QWERTY); } return false; break; case PLOVER: if (record->event.pressed) { #ifdef AUDIO_ENABLE - stop_all_notes(); PLAY_NOTE_ARRAY(tone_plover, false, 0); #endif - layer_off(_ADJUST); - layer_on(_PLOVER); if (!eeconfig_is_enabled()) { - eeconfig_init(); + eeconfig_init(); } keymap_config.raw = eeconfig_read_keymap(); keymap_config.nkro = 1; eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; - case EXT_PLV: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); - #endif - layer_off(_PLOVER); + persistant_default_layer_set(1UL<<_PLOVER); } return false; break; -- cgit v1.2.3 From 61fbb47eb674ee1fab2f8415fe7f43311e51d260 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 22 May 2016 12:56:39 +0200 Subject: fix grave (GRV) and acute (ACUT) accents --- keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c index d25e2b9954..958523c8ba 100644 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [BASE] = KEYMAP( // left hand - KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, NEO_GRV, NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME, NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O, KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ), @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_MINS, KC_SPC, KC_ENT, ALL_T(KC_NO), // right hand - DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + NEO_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R, TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT, -- cgit v1.2.3 From 08239aadeacabc3c8f2e727aff055a6816bb416e Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 22 May 2016 12:58:54 +0200 Subject: =?UTF-8?q?use=20Ergodox=20EZ=E2=80=99s=20third=20LED=20for=20?= =?UTF-8?q?=E2=80=9Cscroll=20lock=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c index 958523c8ba..b71823e156 100644 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c @@ -1,7 +1,8 @@ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" -#include "keymap_neo2.h" +#include "led.h" +#include "keymap_extras/keymap_neo2.h" // Layer names #define BASE 0 // default layer @@ -267,7 +268,13 @@ void matrix_scan_user(void) ergodox_right_led_3_on(); break; default: - ergodox_board_led_off(); + if(host_keyboard_leds() & (1< Date: Sun, 22 May 2016 13:00:52 +0200 Subject: complete labels for modifiers in keymap schema --- keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c index b71823e156..8a2ba26d22 100644 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c @@ -141,10 +141,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ * │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤ │ │ ├─────╄─────╃─────┼─────┼─────┼───────┤ + * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ * │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ │ │(MO1)│ │ │ │ │ │(MO1)│ │ │ + * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ -- cgit v1.2.3 From 3ace37271baec300d7801b123376692a6b583312 Mon Sep 17 00:00:00 2001 From: coderkun Date: Fri, 29 Jul 2016 11:28:37 +0200 Subject: disable sleep LED --- keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile index e7b2d0a65e..6c0a79b110 100644 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile +++ b/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile @@ -1 +1,2 @@ -UNICODE_ENABLE = yes \ No newline at end of file +SLEEP_LED_ENABLE = no +UNICODE_ENABLE = yes -- cgit v1.2.3 From f82437f08eb24c549c8e2ec15d466d6d303f93d8 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Fri, 29 Jul 2016 12:24:33 +0200 Subject: ergodox_ez: Upgrade my keymap to v1.4 * When toggling the key logging on or off, the LEDs will do a little dance. * The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. * The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. * The `-`/`_` key was turned into a tap-dance key too. * There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. Signed-off-by: Gergely Nagy --- keyboards/ergodox_ez/keymaps/algernon/Makefile | 8 +- keyboards/ergodox_ez/keymaps/algernon/keymap.c | 165 +++++-- keyboards/ergodox_ez/keymaps/algernon/readme.md | 9 + .../algernon/tools/heatmap-adore-layout.json | 533 +++++++++++++++++++++ 4 files changed, 687 insertions(+), 28 deletions(-) create mode 100644 keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox_ez/keymaps/algernon/Makefile index 005f9750c3..6bf3976b9d 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/Makefile +++ b/keyboards/ergodox_ez/keymaps/algernon/Makefile @@ -4,13 +4,19 @@ SLEEP_LED_ENABLE=no UNICODE_ENABLE=no FORCE_NKRO ?= yes DEBUG_ENABLE = no -CONSOLE_ENABLE = yes +CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes +KEYLOGGER_ENABLE ?= yes ifeq (${FORCE_NKRO},yes) OPT_DEFS += -DFORCE_NKRO endif +ifeq (${KEYLOGGER_ENABLE},yes) +OPT_DEFS += -DKEYLOGGER_ENABLE +CONSOLE_ENABLE = yes +endif + KEYMAP_VERSION = $(shell \ if [ -d "${KEYMAP_PATH}/.git" ]; then \ cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox_ez/keymaps/algernon/keymap.c index 09d8dffd59..c120872929 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/keymap.c +++ b/keyboards/ergodox_ez/keymaps/algernon/keymap.c @@ -95,7 +95,9 @@ enum { /* Custom keycodes */ enum { - CT_CLN = 0 + CT_CLN = 0, + CT_MNS, + CT_TA, }; /* States & timers */ @@ -115,7 +117,11 @@ uint16_t oh_left_blink_timer = 0; uint8_t oh_right_blink = 0; uint16_t oh_right_blink_timer = 0; +#if KEYLOGGER_ENABLE bool log_enable = false; +#endif + +bool time_travel = false; /* The Keymap */ @@ -146,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) @@ -155,11 +161,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL) - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),M(OH_LEFT) ,KC_LEAD @@ -191,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) ,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC -,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U ,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) @@ -200,11 +206,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS - ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL) - ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP - ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),M(OH_LEFT) ,KC_LEAD @@ -892,24 +898,92 @@ void ang_tap (uint16_t codes[]) { register_code (code); \ unregister_code (code) -void ang_tap_dance (qk_tap_dance_state_t *state) { - switch (state->keycode) { - case TD(CT_CLN): - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (state->count == 2) { - register_code (KC_SCLN); - unregister_code (KC_SCLN); - reset_tap_dance (state); - } +void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + } else if (state->count == 2) { + register_code (KC_SCLN); + } +} + +void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (state->count == 2) { + unregister_code (KC_SCLN); } } +void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_MINS); + } else if (state->count == 2) { + register_code (KC_RSFT); + register_code (KC_MINS); + } +} + +void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_MINS); + } else if (state->count == 2) { + unregister_code (KC_RSFT); + unregister_code (KC_MINS); + } +} + +typedef struct { + bool layer_toggle; + bool sticky; + bool finished_once; +} td_ta_state_t; + +void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (td_ta->finished_once) { + return; + } + + if (td_ta->sticky) { + td_ta->sticky = false; + td_ta->layer_toggle = false; + layer_off (ARRW); + return; + } + + td_ta->finished_once = true; + if (state->count == 1 && !state->pressed) { + register_code (KC_TAB); + td_ta->sticky = false; + td_ta->layer_toggle = false; + } else { + td_ta->layer_toggle = true; + layer_on (ARRW); + td_ta->sticky = (state->count == 2); + } +} + +void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (!td_ta->layer_toggle) + unregister_code (KC_TAB); + if (!td_ta->sticky) + layer_off (ARRW); + + td_ta->finished_once = false; +} + const qk_tap_dance_action_t tap_dance_actions[] = { - [CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance) + [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) + ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) + ,[CT_TA] = { + .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, + .user_data = (void *)&((td_ta_state_t) { false, false, false }) + } }; // Runs constantly in the background, in a loop. @@ -1002,9 +1076,18 @@ void matrix_scan_user(void) { leading = false; leader_end (); +#if KEYLOGGER_ENABLE SEQ_ONE_KEY (KC_D) { + ergodox_led_all_on(); + _delay_ms(100); + ergodox_led_all_off(); log_enable = !log_enable; } +#endif + + SEQ_ONE_KEY (KC_T) { + time_travel = !time_travel; + } SEQ_ONE_KEY (KC_U) { ang_do_unicode (); @@ -1093,13 +1176,41 @@ void matrix_scan_user(void) { } } +static uint16_t last4[4]; + bool process_record_user (uint16_t keycode, keyrecord_t *record) { +#if KEYLOGGER_ENABLE uint8_t layer = biton32(layer_state); if (log_enable && layer == BASE) { xprintf ("KL: col=%d, row=%d\n", record->event.key.col, record->event.key.row); } +#endif + + if (time_travel && !record->event.pressed) { + uint8_t p; + + // shift cache one to the left + for (p = 0; p < 3; p++) { + last4[p] = last4[p + 1]; + } + last4[3] = keycode; + + if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { + uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; + ang_tap (codes); + register_code (KC_RSFT); + register_code (KC_EQL); + unregister_code (KC_EQL); + unregister_code (KC_RSFT); + + uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; + ang_tap (codes2); + + return false; + } + } return true; } diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md index 2312dc59e2..6fe1775111 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/readme.md +++ b/keyboards/ergodox_ez/keymaps/algernon/readme.md @@ -50,6 +50,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest - `LEAD a` makes the [ADORE layer](#adore-layer) the default. - `LEAD v` prints the firmware version, the keyboard and the keymap. - `LEAD d` toggles logging keypress positions to the HID console. + - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. ## ADORE layer @@ -148,6 +149,14 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the # Changelog +## v1.4 - 2016-07-29 + +* When toggling the key logging on or off, the LEDs will do a little dance. +* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. +* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. +* The `-`/`_` key was turned into a tap-dance key too. +* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. + ## v1.3 - 2016-07-06 * Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json new file mode 100644 index 0000000000..544f61ce87 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json @@ -0,0 +1,533 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 6 + }, + "", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 3, + "w": 1.5 + }, + "\n\n~\n`", + { + "t": "#0d0d0b" + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "L", + { + "x": 10.5 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 4 + }, + ">\n.", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "W", + { + "x": 8.5 + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "P" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "M", + { + "c": "#93c9b7", + "a": 4, + "h": 1.5 + }, + "{\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 6, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "a": 4, + "f": 3 + }, + "<\n,", + { + "x": 14.5, + "a": 6 + }, + "Y", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "I", + { + "x": 8.5, + "n": true + }, + "R", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "U", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "a": 7, + "h": 1.5 + }, + "(", + { + "x": 4.5, + "h": 1.5 + }, + ")" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 10.5 + }, + "V" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "Z", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "K", + { + "x": 8.5 + }, + "G", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "J" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "X", + { + "x": 6.5 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 4, + "f": 3 + }, + "?\n/", + { + "x": 14.5, + "a": 6 + }, + "Q", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "w": 1.5 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": false, + "a": 5 + }, + ";\n:", + { + "x": 8.5 + }, + "_\n-", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "1HAND" + ], + [ + { + "x": -3 + }, + "LEAD", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "HUN" + ] +] -- cgit v1.2.3 From 9af995c59b2655fa347e43b1eab2122e72ef7fe3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 22:28:28 +0300 Subject: Initial structure for Ergodox as subprojects Only the EZ default keymaps compiles at the moment though. --- keyboards/ergodox/Makefile | 34 + keyboards/ergodox/ergodox.c | 8 + keyboards/ergodox/ergodox.h | 11 + keyboards/ergodox/ez/190hotfix.sh | 19 + keyboards/ergodox/ez/Makefile | 76 ++ keyboards/ergodox/ez/config.h | 84 ++ keyboards/ergodox/ez/ez.c | 85 ++ keyboards/ergodox/ez/ez.h | 122 ++ keyboards/ergodox/ez/i2cmaster.h | 178 +++ keyboards/ergodox/ez/matrix.c | 382 ++++++ keyboards/ergodox/ez/readme.md | 44 + keyboards/ergodox/ez/twimaster.c | 208 ++++ keyboards/ergodox/ez/util/compile_keymap.py | 710 ++++++++++++ keyboards/ergodox/ez/util/readme.md | 3 + keyboards/ergodox/infinity/MEMO.txt | 385 +++++++ keyboards/ergodox/infinity/Makefile | 77 ++ keyboards/ergodox/infinity/bootloader_defs.h | 1 + keyboards/ergodox/infinity/chconf.h | 524 +++++++++ keyboards/ergodox/infinity/config.h | 80 ++ .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 ++ .../infinity/drivers/gdisp/IS31FL3731C/driver.mk | 2 + .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 ++++++ .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 + .../infinity/drivers/gdisp/emulator_lcd/driver.mk | 2 + .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 + .../infinity/drivers/gdisp/emulator_led/driver.mk | 2 + .../drivers/gdisp/emulator_led/emulator_led.c | 10 + .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 ++ .../infinity/drivers/gdisp/st7565ergodox/driver.mk | 2 + .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 +++++ .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 + .../infinity/drivers/gdisp/st7565ergodox/st7565.h | 37 + keyboards/ergodox/infinity/gfxconf.h | 331 ++++++ keyboards/ergodox/infinity/halconf.h | 353 ++++++ keyboards/ergodox/infinity/infinity.c | 76 ++ keyboards/ergodox/infinity/infinity.h | 44 + .../ergodox/infinity/keymaps/default/keymap.c | 114 ++ .../ergodox/infinity/keymaps/default/visualizer.c | 168 +++ keyboards/ergodox/infinity/led.c | 49 + keyboards/ergodox/infinity/matrix.c | 169 +++ keyboards/ergodox/infinity/mcuconf.h | 74 ++ keyboards/ergodox/keymaps/ab/Makefile | 9 + keyboards/ergodox/keymaps/ab/keyboard-layout.json | 387 +++++++ keyboards/ergodox/keymaps/ab/keyboard-layout.png | Bin 0 -> 80776 bytes keyboards/ergodox/keymaps/ab/keymap.c | 155 +++ keyboards/ergodox/keymaps/ab/readme.md | 21 + keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c | 185 +++ keyboards/ergodox/keymaps/adnw_k_o_y/readme.md | 7 + keyboards/ergodox/keymaps/alexjj/keymap.c | 238 ++++ keyboards/ergodox/keymaps/alexjj/readme.md | 179 +++ keyboards/ergodox/keymaps/alexjj/rl-layout.jpg | Bin 0 -> 833107 bytes keyboards/ergodox/keymaps/algernon/COPYING | 674 +++++++++++ keyboards/ergodox/keymaps/algernon/Makefile | 35 + keyboards/ergodox/keymaps/algernon/config.h | 27 + .../keymaps/algernon/images/adore-layer.png | Bin 0 -> 95615 bytes .../ergodox/keymaps/algernon/images/base-layer.png | Bin 0 -> 95654 bytes .../ergodox/keymaps/algernon/images/heatmap.png | Bin 0 -> 137912 bytes .../ergodox/keymaps/algernon/images/hun-layer.png | Bin 0 -> 67924 bytes .../keymaps/algernon/images/nav-n-media-layer.png | Bin 0 -> 94837 bytes .../keymaps/algernon/images/one-handed-layer.png | Bin 0 -> 91140 bytes .../keymaps/algernon/images/steno-layer.png | Bin 0 -> 69557 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 1216 ++++++++++++++++++++ keyboards/ergodox/keymaps/algernon/readme.md | 198 ++++ .../algernon/tools/heatmap-adore-layout.json | 533 +++++++++ .../algernon/tools/heatmap-base-layout.json | 533 +++++++++ .../keymaps/algernon/tools/log-to-heatmap.py | 145 +++ .../ergodox/keymaps/algernon/tools/max-focused | 5 + keyboards/ergodox/keymaps/andrew_osx/keymap.c | 187 +++ keyboards/ergodox/keymaps/bepo/bepo.png | Bin 0 -> 79747 bytes keyboards/ergodox/keymaps/bepo/keymap.c | 311 +++++ keyboards/ergodox/keymaps/bepo/readme.md | 34 + keyboards/ergodox/keymaps/coderkun_neo2/Makefile | 2 + keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 281 +++++ keyboards/ergodox/keymaps/coderkun_neo2/readme.md | 31 + keyboards/ergodox/keymaps/colemak/keymap.c | 184 +++ keyboards/ergodox/keymaps/colemak/readme.md | 4 + .../keymaps/colemak_osx_pc_no/keyboard-layout.png | Bin 0 -> 103158 bytes .../ergodox/keymaps/colemak_osx_pc_no/keymap.c | 264 +++++ .../ergodox/keymaps/colemak_osx_pc_no/readme.md | 23 + .../ergodox/keymaps/csharp_dev/csharp_dev.png | Bin 0 -> 97642 bytes .../keymaps/csharp_dev/csharp_dev_legend.png | Bin 0 -> 387797 bytes keyboards/ergodox/keymaps/csharp_dev/keymap.c | 239 ++++ keyboards/ergodox/keymaps/csharp_dev/readme.md | 47 + keyboards/ergodox/keymaps/dave/keymap.c | 199 ++++ keyboards/ergodox/keymaps/dave/readme.md | 38 + keyboards/ergodox/keymaps/default/default.png | Bin 0 -> 193672 bytes .../ergodox/keymaps/default/default_highres.png | Bin 0 -> 1459389 bytes keyboards/ergodox/keymaps/default/keymap.c | 182 +++ keyboards/ergodox/keymaps/default/readme.md | 10 + .../keymaps/default_osx/default_osx_highres.png | Bin 0 -> 772418 bytes keyboards/ergodox/keymaps/default_osx/keymap.c | 187 +++ keyboards/ergodox/keymaps/default_osx/readme.md | 8 + keyboards/ergodox/keymaps/dragon788/keymap.c | 229 ++++ keyboards/ergodox/keymaps/dvorak/dvorak.png | Bin 0 -> 87314 bytes keyboards/ergodox/keymaps/dvorak/keymap.c | 184 +++ .../dvorak_intl_squisher/keyboard-layout0.png | Bin 0 -> 73585 bytes .../dvorak_intl_squisher/keyboard-layout1.png | Bin 0 -> 59122 bytes .../dvorak_intl_squisher/keyboard-layout2.png | Bin 0 -> 53319 bytes .../ergodox/keymaps/dvorak_intl_squisher/keymap.c | 185 +++ .../ergodox/keymaps/dvorak_intl_squisher/readme.md | 29 + keyboards/ergodox/keymaps/dvorak_spanish/keymap.c | 284 +++++ keyboards/ergodox/keymaps/dvorak_spanish/readme.md | 99 ++ .../keymaps/emacs_osx_dk/default_highres.png | Bin 0 -> 142146 bytes keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c | 184 +++ keyboards/ergodox/keymaps/emacs_osx_dk/readme.md | 10 + .../ergodox/keymaps/erez_experimental/Makefile | 9 + .../ergodox/keymaps/erez_experimental/config.h | 12 + .../ergodox/keymaps/erez_experimental/keymap.c | 199 ++++ .../ergodox/keymaps/erez_experimental/readme.md | 51 + keyboards/ergodox/keymaps/german-kinergo/keymap.c | 210 ++++ .../ergodox/keymaps/german-kinergo/layout-code.png | Bin 0 -> 55386 bytes .../keymaps/german-kinergo/layout-media.png | Bin 0 -> 67634 bytes .../ergodox/keymaps/german-kinergo/layout.png | Bin 0 -> 71175 bytes keyboards/ergodox/keymaps/german-kinergo/readme.md | 35 + .../keymaps/german-manuneo/compile_keymap.py | 710 ++++++++++++ keyboards/ergodox/keymaps/german-manuneo/keymap.c | 783 +++++++++++++ keyboards/ergodox/keymaps/german-manuneo/keymap.md | 188 +++ keyboards/ergodox/keymaps/german/keymap.c | 185 +++ keyboards/ergodox/keymaps/j3rn/keymap.c | 187 +++ keyboards/ergodox/keymaps/j3rn/readme.md | 29 + keyboards/ergodox/keymaps/jack/keymap.c | 118 ++ .../keymaps/jacobono/img/colemak-default-layer.png | Bin 0 -> 70434 bytes .../keymaps/jacobono/img/number-dpad-layer.png | Bin 0 -> 46225 bytes .../ergodox/keymaps/jacobono/img/symbol-layer.png | Bin 0 -> 49615 bytes keyboards/ergodox/keymaps/jacobono/keymap.c | 273 +++++ keyboards/ergodox/keymaps/jacobono/readme.md | 34 + keyboards/ergodox/keymaps/jgarr/keymap.c | 184 +++ keyboards/ergodox/keymaps/josh/keymap.c | 205 ++++ keyboards/ergodox/keymaps/josh/readme.md | 8 + keyboards/ergodox/keymaps/kastyle/keymap.c | 184 +++ keyboards/ergodox/keymaps/kines-ish/keymap.c | 184 +++ keyboards/ergodox/keymaps/kines-ish/readme.md | 19 + keyboards/ergodox/keymaps/maz/keymap.c | 229 ++++ keyboards/ergodox/keymaps/maz/readme.md | 121 ++ keyboards/ergodox/keymaps/mpiechotka/keymap.c | 276 +++++ keyboards/ergodox/keymaps/mpiechotka/readme.md | 6 + keyboards/ergodox/keymaps/msc/img/code_layer.png | Bin 0 -> 71266 bytes keyboards/ergodox/keymaps/msc/img/main_layer.png | Bin 0 -> 90624 bytes keyboards/ergodox/keymaps/msc/img/media_layer.png | Bin 0 -> 75750 bytes keyboards/ergodox/keymaps/msc/keymap.c | 184 +++ keyboards/ergodox/keymaps/msc/readme.md | 32 + keyboards/ergodox/keymaps/naps62/keymap.c | 187 +++ keyboards/ergodox/keymaps/naps62/readme.md | 29 + keyboards/ergodox/keymaps/ordinary/keymap.c | 454 ++++++++ .../ergodox/keymaps/ordinary/ordinary-base.png | Bin 0 -> 99605 bytes .../ergodox/keymaps/ordinary/ordinary-base.txt | 27 + .../ergodox/keymaps/ordinary/ordinary-media.png | Bin 0 -> 124144 bytes .../ergodox/keymaps/ordinary/ordinary-media.txt | 27 + .../ergodox/keymaps/ordinary/ordinary-special.png | Bin 0 -> 63065 bytes .../ergodox/keymaps/ordinary/ordinary-special.txt | 27 + .../ergodox/keymaps/ordinary/ordinary-symbol.png | Bin 0 -> 103735 bytes .../ergodox/keymaps/ordinary/ordinary-symbol.txt | 27 + keyboards/ergodox/keymaps/ordinary/readme.md | 103 ++ keyboards/ergodox/keymaps/osx_de/keymap.c | 364 ++++++ .../ergodox/keymaps/osx_de/osx_de_highres.png | Bin 0 -> 298446 bytes keyboards/ergodox/keymaps/osx_de/readme.md | 41 + keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c | 174 +++ .../osx_de_adnw_koy/osx_de_adnw_koy_highres.png | Bin 0 -> 183892 bytes .../ergodox/keymaps/osx_de_experimental/keymap.c | 597 ++++++++++ .../osx_de_experimental_highres.png | Bin 0 -> 303904 bytes .../ergodox/keymaps/osx_de_experimental/readme.md | 22 + keyboards/ergodox/keymaps/osx_fr/keymap.c | 187 +++ .../ergodox/keymaps/osx_kinesis_pnut/keymap.c | 191 +++ keyboards/ergodox/keymaps/plover/keymap.c | 228 ++++ keyboards/ergodox/keymaps/plums/keymap.c | 229 ++++ keyboards/ergodox/keymaps/plums/plums.png | Bin 0 -> 223300 bytes keyboards/ergodox/keymaps/plums/readme.md | 11 + .../keymaps/romanzolotarev-norman-osx/keymap.c | 46 + .../keymaps/romanzolotarev-norman-osx/readme.md | 28 + .../romanzolotarev-norman-osx.png | Bin 0 -> 96954 bytes .../romanzolotarev-norman-plover-osx-hjkl/keymap.c | 134 +++ .../readme.md | 50 + .../romanzolotarev-norman-plover-osx-hjkl.png | Bin 0 -> 130692 bytes .../romanzolotarev-norman-plover-osx/keymap.c | 134 +++ .../romanzolotarev-norman-plover-osx/readme.md | 50 + .../romanzolotarev-norman-plover-osx.png | Bin 0 -> 130464 bytes .../romanzolotarev-norman-qwerty-osx/keymap.c | 74 ++ .../romanzolotarev-norman-qwerty-osx/readme.md | 34 + .../romanzolotarev-norman-qwerty-osx.png | Bin 0 -> 100627 bytes keyboards/ergodox/keymaps/sneako/keymap.c | 187 +++ keyboards/ergodox/keymaps/sneako/readme.md | 6 + keyboards/ergodox/keymaps/software_neo2/keymap.c | 139 +++ keyboards/ergodox/keymaps/supercoder/config_user.h | 9 + .../ergodox/keymaps/supercoder/images/layout.png | Bin 0 -> 65607 bytes .../keymaps/supercoder/images/supercoder_2000.jpg | Bin 0 -> 75444 bytes keyboards/ergodox/keymaps/supercoder/keymap.c | 75 ++ keyboards/ergodox/keymaps/supercoder/makefile.mk | 6 + keyboards/ergodox/keymaps/supercoder/readme.md | 29 + keyboards/ergodox/keymaps/techtomas/keymap.c | 231 ++++ keyboards/ergodox/keymaps/techtomas/readme.md | 57 + keyboards/ergodox/keymaps/teckinesis/keymap.c | 455 ++++++++ .../keymaps/teckinesis/ordinary-special.png | Bin 0 -> 63065 bytes .../keymaps/teckinesis/ordinary-special.txt | 27 + keyboards/ergodox/keymaps/teckinesis/readme.md | 45 + .../keymaps/teckinesis/teckinesis-base.json | 434 +++++++ .../ergodox/keymaps/teckinesis/teckinesis-base.png | Bin 0 -> 93743 bytes .../keymaps/teckinesis/teckinesis-media.json | 436 +++++++ .../keymaps/teckinesis/teckinesis-media.png | Bin 0 -> 112216 bytes .../keymaps/teckinesis/teckinesis-symbol.json | 422 +++++++ .../keymaps/teckinesis/teckinesis-symbol.png | Bin 0 -> 97350 bytes keyboards/ergodox/keymaps/tkuichooseyou/README.md | 13 + .../ergodox/keymaps/tkuichooseyou/compiled.hex | 1137 ++++++++++++++++++ keyboards/ergodox/keymaps/tkuichooseyou/keymap.c | 184 +++ keyboards/ergodox/keymaps/tm2030/keymap.c | 242 ++++ keyboards/ergodox/keymaps/tm2030/readme.md | 136 +++ keyboards/ergodox/keymaps/tonyabra_osx/keymap.c | 184 +++ keyboards/ergodox/keymaps/tonyabra_osx/readme.md | 5 + keyboards/ergodox/keymaps/townk_osx/config.h | 92 ++ keyboards/ergodox/keymaps/townk_osx/keymap.c | 285 +++++ keyboards/ergodox/keymaps/townk_osx/makefile.mk | 4 + keyboards/ergodox/keymaps/townk_osx/readme.md | 77 ++ .../ergodox/keymaps/townk_osx/townk_osx_base.png | Bin 0 -> 785859 bytes .../ergodox/keymaps/townk_osx/townk_osx_fn.png | Bin 0 -> 390041 bytes .../ergodox/keymaps/townk_osx/townk_osx_keypad.png | Bin 0 -> 424425 bytes keyboards/ergodox/keymaps/twey/keymap.c | 221 ++++ keyboards/ergodox/keymaps/twey/readme.md | 17 + keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c | 366 ++++++ keyboards/ergodox/keymaps/zweihander-osx/keymap.c | 233 ++++ .../ergodox/keymaps/zweihander-osx/readme.markdown | 45 + keyboards/ergodox_ez/190hotfix.sh | 19 - keyboards/ergodox_ez/Makefile | 86 -- keyboards/ergodox_ez/config.h | 84 -- keyboards/ergodox_ez/ergodox_ez.c | 85 -- keyboards/ergodox_ez/ergodox_ez.h | 122 -- keyboards/ergodox_ez/i2cmaster.h | 178 --- keyboards/ergodox_ez/keymaps/ab/Makefile | 9 - .../ergodox_ez/keymaps/ab/keyboard-layout.json | 387 ------- .../ergodox_ez/keymaps/ab/keyboard-layout.png | Bin 80776 -> 0 bytes keyboards/ergodox_ez/keymaps/ab/keymap.c | 155 --- keyboards/ergodox_ez/keymaps/ab/readme.md | 21 - keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c | 185 --- keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md | 7 - keyboards/ergodox_ez/keymaps/alexjj/keymap.c | 238 ---- keyboards/ergodox_ez/keymaps/alexjj/readme.md | 179 --- keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg | Bin 833107 -> 0 bytes keyboards/ergodox_ez/keymaps/algernon/COPYING | 674 ----------- keyboards/ergodox_ez/keymaps/algernon/Makefile | 35 - keyboards/ergodox_ez/keymaps/algernon/config.h | 27 - .../keymaps/algernon/images/adore-layer.png | Bin 95615 -> 0 bytes .../keymaps/algernon/images/base-layer.png | Bin 95654 -> 0 bytes .../ergodox_ez/keymaps/algernon/images/heatmap.png | Bin 137912 -> 0 bytes .../keymaps/algernon/images/hun-layer.png | Bin 67924 -> 0 bytes .../keymaps/algernon/images/nav-n-media-layer.png | Bin 94837 -> 0 bytes .../keymaps/algernon/images/one-handed-layer.png | Bin 91140 -> 0 bytes .../keymaps/algernon/images/steno-layer.png | Bin 69557 -> 0 bytes keyboards/ergodox_ez/keymaps/algernon/keymap.c | 1216 -------------------- keyboards/ergodox_ez/keymaps/algernon/readme.md | 198 ---- .../algernon/tools/heatmap-adore-layout.json | 533 --------- .../algernon/tools/heatmap-base-layout.json | 533 --------- .../keymaps/algernon/tools/log-to-heatmap.py | 145 --- .../ergodox_ez/keymaps/algernon/tools/max-focused | 5 - keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c | 187 --- keyboards/ergodox_ez/keymaps/bepo/bepo.png | Bin 79747 -> 0 bytes keyboards/ergodox_ez/keymaps/bepo/keymap.c | 311 ----- keyboards/ergodox_ez/keymaps/bepo/readme.md | 34 - .../ergodox_ez/keymaps/coderkun_neo2/Makefile | 2 - .../ergodox_ez/keymaps/coderkun_neo2/keymap.c | 281 ----- .../ergodox_ez/keymaps/coderkun_neo2/readme.md | 31 - keyboards/ergodox_ez/keymaps/colemak/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/colemak/readme.md | 4 - .../keymaps/colemak_osx_pc_no/keyboard-layout.png | Bin 103158 -> 0 bytes .../ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c | 264 ----- .../ergodox_ez/keymaps/colemak_osx_pc_no/readme.md | 23 - .../ergodox_ez/keymaps/csharp_dev/csharp_dev.png | Bin 97642 -> 0 bytes .../keymaps/csharp_dev/csharp_dev_legend.png | Bin 387797 -> 0 bytes keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c | 239 ---- keyboards/ergodox_ez/keymaps/csharp_dev/readme.md | 47 - keyboards/ergodox_ez/keymaps/dave/keymap.c | 199 ---- keyboards/ergodox_ez/keymaps/dave/readme.md | 38 - keyboards/ergodox_ez/keymaps/default/default.png | Bin 193672 -> 0 bytes .../ergodox_ez/keymaps/default/default_highres.png | Bin 1459389 -> 0 bytes keyboards/ergodox_ez/keymaps/default/keymap.c | 182 --- keyboards/ergodox_ez/keymaps/default/readme.md | 10 - .../keymaps/default_osx/default_osx_highres.png | Bin 772418 -> 0 bytes keyboards/ergodox_ez/keymaps/default_osx/keymap.c | 187 --- keyboards/ergodox_ez/keymaps/default_osx/readme.md | 8 - keyboards/ergodox_ez/keymaps/dragon788/keymap.c | 229 ---- keyboards/ergodox_ez/keymaps/dvorak/dvorak.png | Bin 87314 -> 0 bytes keyboards/ergodox_ez/keymaps/dvorak/keymap.c | 184 --- .../dvorak_intl_squisher/keyboard-layout0.png | Bin 73585 -> 0 bytes .../dvorak_intl_squisher/keyboard-layout1.png | Bin 59122 -> 0 bytes .../dvorak_intl_squisher/keyboard-layout2.png | Bin 53319 -> 0 bytes .../keymaps/dvorak_intl_squisher/keymap.c | 185 --- .../keymaps/dvorak_intl_squisher/readme.md | 29 - .../ergodox_ez/keymaps/dvorak_spanish/keymap.c | 284 ----- .../ergodox_ez/keymaps/dvorak_spanish/readme.md | 99 -- .../keymaps/emacs_osx_dk/default_highres.png | Bin 142146 -> 0 bytes keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c | 184 --- .../ergodox_ez/keymaps/emacs_osx_dk/readme.md | 10 - .../ergodox_ez/keymaps/erez_experimental/Makefile | 9 - .../ergodox_ez/keymaps/erez_experimental/config.h | 12 - .../ergodox_ez/keymaps/erez_experimental/keymap.c | 199 ---- .../ergodox_ez/keymaps/erez_experimental/readme.md | 51 - .../ergodox_ez/keymaps/german-kinergo/keymap.c | 210 ---- .../keymaps/german-kinergo/layout-code.png | Bin 55386 -> 0 bytes .../keymaps/german-kinergo/layout-media.png | Bin 67634 -> 0 bytes .../ergodox_ez/keymaps/german-kinergo/layout.png | Bin 71175 -> 0 bytes .../ergodox_ez/keymaps/german-kinergo/readme.md | 35 - .../keymaps/german-manuneo/compile_keymap.py | 710 ------------ .../ergodox_ez/keymaps/german-manuneo/keymap.c | 783 ------------- .../ergodox_ez/keymaps/german-manuneo/keymap.md | 188 --- keyboards/ergodox_ez/keymaps/german/keymap.c | 185 --- keyboards/ergodox_ez/keymaps/j3rn/keymap.c | 187 --- keyboards/ergodox_ez/keymaps/j3rn/readme.md | 29 - keyboards/ergodox_ez/keymaps/jack/keymap.c | 118 -- .../keymaps/jacobono/img/colemak-default-layer.png | Bin 70434 -> 0 bytes .../keymaps/jacobono/img/number-dpad-layer.png | Bin 46225 -> 0 bytes .../keymaps/jacobono/img/symbol-layer.png | Bin 49615 -> 0 bytes keyboards/ergodox_ez/keymaps/jacobono/keymap.c | 273 ----- keyboards/ergodox_ez/keymaps/jacobono/readme.md | 34 - keyboards/ergodox_ez/keymaps/jgarr/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/josh/keymap.c | 205 ---- keyboards/ergodox_ez/keymaps/josh/readme.md | 8 - keyboards/ergodox_ez/keymaps/kastyle/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/kines-ish/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/kines-ish/readme.md | 19 - keyboards/ergodox_ez/keymaps/maz/keymap.c | 229 ---- keyboards/ergodox_ez/keymaps/maz/readme.md | 121 -- keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c | 276 ----- keyboards/ergodox_ez/keymaps/mpiechotka/readme.md | 6 - .../ergodox_ez/keymaps/msc/img/code_layer.png | Bin 71266 -> 0 bytes .../ergodox_ez/keymaps/msc/img/main_layer.png | Bin 90624 -> 0 bytes .../ergodox_ez/keymaps/msc/img/media_layer.png | Bin 75750 -> 0 bytes keyboards/ergodox_ez/keymaps/msc/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/msc/readme.md | 32 - keyboards/ergodox_ez/keymaps/naps62/keymap.c | 187 --- keyboards/ergodox_ez/keymaps/naps62/readme.md | 29 - keyboards/ergodox_ez/keymaps/ordinary/keymap.c | 454 -------- .../ergodox_ez/keymaps/ordinary/ordinary-base.png | Bin 99605 -> 0 bytes .../ergodox_ez/keymaps/ordinary/ordinary-base.txt | 27 - .../ergodox_ez/keymaps/ordinary/ordinary-media.png | Bin 124144 -> 0 bytes .../ergodox_ez/keymaps/ordinary/ordinary-media.txt | 27 - .../keymaps/ordinary/ordinary-special.png | Bin 63065 -> 0 bytes .../keymaps/ordinary/ordinary-special.txt | 27 - .../keymaps/ordinary/ordinary-symbol.png | Bin 103735 -> 0 bytes .../keymaps/ordinary/ordinary-symbol.txt | 27 - keyboards/ergodox_ez/keymaps/ordinary/readme.md | 103 -- keyboards/ergodox_ez/keymaps/osx_de/keymap.c | 364 ------ .../ergodox_ez/keymaps/osx_de/osx_de_highres.png | Bin 298446 -> 0 bytes keyboards/ergodox_ez/keymaps/osx_de/readme.md | 41 - .../ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c | 174 --- .../osx_de_adnw_koy/osx_de_adnw_koy_highres.png | Bin 183892 -> 0 bytes .../keymaps/osx_de_experimental/keymap.c | 597 ---------- .../osx_de_experimental_highres.png | Bin 303904 -> 0 bytes .../keymaps/osx_de_experimental/readme.md | 22 - keyboards/ergodox_ez/keymaps/osx_fr/keymap.c | 187 --- .../ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c | 191 --- keyboards/ergodox_ez/keymaps/plover/keymap.c | 228 ---- keyboards/ergodox_ez/keymaps/plums/keymap.c | 229 ---- keyboards/ergodox_ez/keymaps/plums/plums.png | Bin 223300 -> 0 bytes keyboards/ergodox_ez/keymaps/plums/readme.md | 11 - .../keymaps/romanzolotarev-norman-osx/keymap.c | 46 - .../keymaps/romanzolotarev-norman-osx/readme.md | 28 - .../romanzolotarev-norman-osx.png | Bin 96954 -> 0 bytes .../romanzolotarev-norman-plover-osx-hjkl/keymap.c | 134 --- .../readme.md | 50 - .../romanzolotarev-norman-plover-osx-hjkl.png | Bin 130692 -> 0 bytes .../romanzolotarev-norman-plover-osx/keymap.c | 134 --- .../romanzolotarev-norman-plover-osx/readme.md | 50 - .../romanzolotarev-norman-plover-osx.png | Bin 130464 -> 0 bytes .../romanzolotarev-norman-qwerty-osx/keymap.c | 74 -- .../romanzolotarev-norman-qwerty-osx/readme.md | 34 - .../romanzolotarev-norman-qwerty-osx.png | Bin 100627 -> 0 bytes keyboards/ergodox_ez/keymaps/sneako/keymap.c | 187 --- keyboards/ergodox_ez/keymaps/sneako/readme.md | 6 - .../ergodox_ez/keymaps/software_neo2/keymap.c | 139 --- .../ergodox_ez/keymaps/supercoder/config_user.h | 9 - .../keymaps/supercoder/images/layout.png | Bin 65607 -> 0 bytes .../keymaps/supercoder/images/supercoder_2000.jpg | Bin 75444 -> 0 bytes keyboards/ergodox_ez/keymaps/supercoder/keymap.c | 75 -- .../ergodox_ez/keymaps/supercoder/makefile.mk | 6 - keyboards/ergodox_ez/keymaps/supercoder/readme.md | 29 - keyboards/ergodox_ez/keymaps/techtomas/keymap.c | 231 ---- keyboards/ergodox_ez/keymaps/techtomas/readme.md | 57 - keyboards/ergodox_ez/keymaps/teckinesis/keymap.c | 455 -------- .../keymaps/teckinesis/ordinary-special.png | Bin 63065 -> 0 bytes .../keymaps/teckinesis/ordinary-special.txt | 27 - keyboards/ergodox_ez/keymaps/teckinesis/readme.md | 45 - .../keymaps/teckinesis/teckinesis-base.json | 434 ------- .../keymaps/teckinesis/teckinesis-base.png | Bin 93743 -> 0 bytes .../keymaps/teckinesis/teckinesis-media.json | 436 ------- .../keymaps/teckinesis/teckinesis-media.png | Bin 112216 -> 0 bytes .../keymaps/teckinesis/teckinesis-symbol.json | 422 ------- .../keymaps/teckinesis/teckinesis-symbol.png | Bin 97350 -> 0 bytes .../ergodox_ez/keymaps/tkuichooseyou/README.md | 13 - .../ergodox_ez/keymaps/tkuichooseyou/compiled.hex | 1137 ------------------ .../ergodox_ez/keymaps/tkuichooseyou/keymap.c | 184 --- keyboards/ergodox_ez/keymaps/tm2030/keymap.c | 242 ---- keyboards/ergodox_ez/keymaps/tm2030/readme.md | 136 --- keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c | 184 --- .../ergodox_ez/keymaps/tonyabra_osx/readme.md | 5 - keyboards/ergodox_ez/keymaps/townk_osx/config.h | 92 -- keyboards/ergodox_ez/keymaps/townk_osx/keymap.c | 285 ----- keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk | 4 - keyboards/ergodox_ez/keymaps/townk_osx/readme.md | 77 -- .../keymaps/townk_osx/townk_osx_base.png | Bin 785859 -> 0 bytes .../ergodox_ez/keymaps/townk_osx/townk_osx_fn.png | Bin 390041 -> 0 bytes .../keymaps/townk_osx/townk_osx_keypad.png | Bin 424425 -> 0 bytes keyboards/ergodox_ez/keymaps/twey/keymap.c | 221 ---- keyboards/ergodox_ez/keymaps/twey/readme.md | 17 - .../ergodox_ez/keymaps/workman_osx_mdw/keymap.c | 366 ------ .../ergodox_ez/keymaps/zweihander-osx/keymap.c | 233 ---- .../keymaps/zweihander-osx/readme.markdown | 45 - keyboards/ergodox_ez/matrix.c | 382 ------ keyboards/ergodox_ez/readme.md | 44 - keyboards/ergodox_ez/twimaster.c | 208 ---- keyboards/ergodox_ez/util/compile_keymap.py | 710 ------------ keyboards/ergodox_ez/util/readme.md | 3 - keyboards/infinity_ergodox/MEMO.txt | 385 ------- keyboards/infinity_ergodox/Makefile | 85 -- keyboards/infinity_ergodox/bootloader_defs.h | 1 - keyboards/infinity_ergodox/chconf.h | 524 --------- keyboards/infinity_ergodox/config.h | 80 -- .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 -- .../drivers/gdisp/IS31FL3731C/driver.mk | 2 - .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 ------ .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 - .../drivers/gdisp/emulator_lcd/driver.mk | 2 - .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 - .../drivers/gdisp/emulator_led/driver.mk | 2 - .../drivers/gdisp/emulator_led/emulator_led.c | 10 - .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 -- .../drivers/gdisp/st7565ergodox/driver.mk | 2 - .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 ----- .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 - .../drivers/gdisp/st7565ergodox/st7565.h | 37 - keyboards/infinity_ergodox/gfxconf.h | 331 ------ keyboards/infinity_ergodox/halconf.h | 353 ------ keyboards/infinity_ergodox/infinity_ergodox.c | 76 -- keyboards/infinity_ergodox/infinity_ergodox.h | 44 - .../infinity_ergodox/keymaps/default/keymap.c | 114 -- .../infinity_ergodox/keymaps/default/visualizer.c | 168 --- keyboards/infinity_ergodox/led.c | 49 - keyboards/infinity_ergodox/matrix.c | 169 --- keyboards/infinity_ergodox/mcuconf.h | 74 -- 435 files changed, 27312 insertions(+), 27277 deletions(-) create mode 100644 keyboards/ergodox/Makefile create mode 100644 keyboards/ergodox/ergodox.c create mode 100644 keyboards/ergodox/ergodox.h create mode 100755 keyboards/ergodox/ez/190hotfix.sh create mode 100644 keyboards/ergodox/ez/Makefile create mode 100644 keyboards/ergodox/ez/config.h create mode 100644 keyboards/ergodox/ez/ez.c create mode 100644 keyboards/ergodox/ez/ez.h create mode 100644 keyboards/ergodox/ez/i2cmaster.h create mode 100644 keyboards/ergodox/ez/matrix.c create mode 100644 keyboards/ergodox/ez/readme.md create mode 100644 keyboards/ergodox/ez/twimaster.c create mode 100644 keyboards/ergodox/ez/util/compile_keymap.py create mode 100644 keyboards/ergodox/ez/util/readme.md create mode 100644 keyboards/ergodox/infinity/MEMO.txt create mode 100644 keyboards/ergodox/infinity/Makefile create mode 100644 keyboards/ergodox/infinity/bootloader_defs.h create mode 100644 keyboards/ergodox/infinity/chconf.h create mode 100644 keyboards/ergodox/infinity/config.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h create mode 100644 keyboards/ergodox/infinity/gfxconf.h create mode 100644 keyboards/ergodox/infinity/halconf.h create mode 100644 keyboards/ergodox/infinity/infinity.c create mode 100644 keyboards/ergodox/infinity/infinity.h create mode 100644 keyboards/ergodox/infinity/keymaps/default/keymap.c create mode 100644 keyboards/ergodox/infinity/keymaps/default/visualizer.c create mode 100644 keyboards/ergodox/infinity/led.c create mode 100644 keyboards/ergodox/infinity/matrix.c create mode 100644 keyboards/ergodox/infinity/mcuconf.h create mode 100644 keyboards/ergodox/keymaps/ab/Makefile create mode 100644 keyboards/ergodox/keymaps/ab/keyboard-layout.json create mode 100644 keyboards/ergodox/keymaps/ab/keyboard-layout.png create mode 100644 keyboards/ergodox/keymaps/ab/keymap.c create mode 100644 keyboards/ergodox/keymaps/ab/readme.md create mode 100644 keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c create mode 100644 keyboards/ergodox/keymaps/adnw_k_o_y/readme.md create mode 100644 keyboards/ergodox/keymaps/alexjj/keymap.c create mode 100644 keyboards/ergodox/keymaps/alexjj/readme.md create mode 100644 keyboards/ergodox/keymaps/alexjj/rl-layout.jpg create mode 100644 keyboards/ergodox/keymaps/algernon/COPYING create mode 100644 keyboards/ergodox/keymaps/algernon/Makefile create mode 100644 keyboards/ergodox/keymaps/algernon/config.h create mode 100644 keyboards/ergodox/keymaps/algernon/images/adore-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/base-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/heatmap.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/hun-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/images/steno-layer.png create mode 100644 keyboards/ergodox/keymaps/algernon/keymap.c create mode 100644 keyboards/ergodox/keymaps/algernon/readme.md create mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json create mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json create mode 100755 keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py create mode 100755 keyboards/ergodox/keymaps/algernon/tools/max-focused create mode 100644 keyboards/ergodox/keymaps/andrew_osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/bepo/bepo.png create mode 100644 keyboards/ergodox/keymaps/bepo/keymap.c create mode 100644 keyboards/ergodox/keymaps/bepo/readme.md create mode 100644 keyboards/ergodox/keymaps/coderkun_neo2/Makefile create mode 100644 keyboards/ergodox/keymaps/coderkun_neo2/keymap.c create mode 100644 keyboards/ergodox/keymaps/coderkun_neo2/readme.md create mode 100644 keyboards/ergodox/keymaps/colemak/keymap.c create mode 100644 keyboards/ergodox/keymaps/colemak/readme.md create mode 100644 keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png create mode 100644 keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c create mode 100644 keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md create mode 100644 keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png create mode 100644 keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png create mode 100644 keyboards/ergodox/keymaps/csharp_dev/keymap.c create mode 100644 keyboards/ergodox/keymaps/csharp_dev/readme.md create mode 100644 keyboards/ergodox/keymaps/dave/keymap.c create mode 100644 keyboards/ergodox/keymaps/dave/readme.md create mode 100644 keyboards/ergodox/keymaps/default/default.png create mode 100644 keyboards/ergodox/keymaps/default/default_highres.png create mode 100644 keyboards/ergodox/keymaps/default/keymap.c create mode 100644 keyboards/ergodox/keymaps/default/readme.md create mode 100644 keyboards/ergodox/keymaps/default_osx/default_osx_highres.png create mode 100644 keyboards/ergodox/keymaps/default_osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/default_osx/readme.md create mode 100644 keyboards/ergodox/keymaps/dragon788/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak/dvorak.png create mode 100644 keyboards/ergodox/keymaps/dvorak/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png create mode 100644 keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png create mode 100644 keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png create mode 100644 keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md create mode 100755 keyboards/ergodox/keymaps/dvorak_spanish/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak_spanish/readme.md create mode 100644 keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png create mode 100644 keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c create mode 100644 keyboards/ergodox/keymaps/emacs_osx_dk/readme.md create mode 100644 keyboards/ergodox/keymaps/erez_experimental/Makefile create mode 100644 keyboards/ergodox/keymaps/erez_experimental/config.h create mode 100644 keyboards/ergodox/keymaps/erez_experimental/keymap.c create mode 100644 keyboards/ergodox/keymaps/erez_experimental/readme.md create mode 100644 keyboards/ergodox/keymaps/german-kinergo/keymap.c create mode 100644 keyboards/ergodox/keymaps/german-kinergo/layout-code.png create mode 100644 keyboards/ergodox/keymaps/german-kinergo/layout-media.png create mode 100644 keyboards/ergodox/keymaps/german-kinergo/layout.png create mode 100644 keyboards/ergodox/keymaps/german-kinergo/readme.md create mode 100644 keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py create mode 100644 keyboards/ergodox/keymaps/german-manuneo/keymap.c create mode 100644 keyboards/ergodox/keymaps/german-manuneo/keymap.md create mode 100644 keyboards/ergodox/keymaps/german/keymap.c create mode 100644 keyboards/ergodox/keymaps/j3rn/keymap.c create mode 100644 keyboards/ergodox/keymaps/j3rn/readme.md create mode 100644 keyboards/ergodox/keymaps/jack/keymap.c create mode 100644 keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png create mode 100644 keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png create mode 100644 keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png create mode 100644 keyboards/ergodox/keymaps/jacobono/keymap.c create mode 100644 keyboards/ergodox/keymaps/jacobono/readme.md create mode 100644 keyboards/ergodox/keymaps/jgarr/keymap.c create mode 100644 keyboards/ergodox/keymaps/josh/keymap.c create mode 100644 keyboards/ergodox/keymaps/josh/readme.md create mode 100644 keyboards/ergodox/keymaps/kastyle/keymap.c create mode 100644 keyboards/ergodox/keymaps/kines-ish/keymap.c create mode 100644 keyboards/ergodox/keymaps/kines-ish/readme.md create mode 100644 keyboards/ergodox/keymaps/maz/keymap.c create mode 100644 keyboards/ergodox/keymaps/maz/readme.md create mode 100644 keyboards/ergodox/keymaps/mpiechotka/keymap.c create mode 100644 keyboards/ergodox/keymaps/mpiechotka/readme.md create mode 100644 keyboards/ergodox/keymaps/msc/img/code_layer.png create mode 100644 keyboards/ergodox/keymaps/msc/img/main_layer.png create mode 100644 keyboards/ergodox/keymaps/msc/img/media_layer.png create mode 100644 keyboards/ergodox/keymaps/msc/keymap.c create mode 100644 keyboards/ergodox/keymaps/msc/readme.md create mode 100644 keyboards/ergodox/keymaps/naps62/keymap.c create mode 100644 keyboards/ergodox/keymaps/naps62/readme.md create mode 100644 keyboards/ergodox/keymaps/ordinary/keymap.c create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-base.png create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-base.txt create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-media.png create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-media.txt create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-special.png create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-special.txt create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png create mode 100644 keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt create mode 100644 keyboards/ergodox/keymaps/ordinary/readme.md create mode 100644 keyboards/ergodox/keymaps/osx_de/keymap.c create mode 100644 keyboards/ergodox/keymaps/osx_de/osx_de_highres.png create mode 100644 keyboards/ergodox/keymaps/osx_de/readme.md create mode 100644 keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c create mode 100644 keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png create mode 100644 keyboards/ergodox/keymaps/osx_de_experimental/keymap.c create mode 100644 keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png create mode 100644 keyboards/ergodox/keymaps/osx_de_experimental/readme.md create mode 100644 keyboards/ergodox/keymaps/osx_fr/keymap.c create mode 100644 keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c create mode 100644 keyboards/ergodox/keymaps/plover/keymap.c create mode 100644 keyboards/ergodox/keymaps/plums/keymap.c create mode 100644 keyboards/ergodox/keymaps/plums/plums.png create mode 100644 keyboards/ergodox/keymaps/plums/readme.md create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md create mode 100644 keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png create mode 100644 keyboards/ergodox/keymaps/sneako/keymap.c create mode 100644 keyboards/ergodox/keymaps/sneako/readme.md create mode 100644 keyboards/ergodox/keymaps/software_neo2/keymap.c create mode 100644 keyboards/ergodox/keymaps/supercoder/config_user.h create mode 100644 keyboards/ergodox/keymaps/supercoder/images/layout.png create mode 100644 keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg create mode 100644 keyboards/ergodox/keymaps/supercoder/keymap.c create mode 100644 keyboards/ergodox/keymaps/supercoder/makefile.mk create mode 100644 keyboards/ergodox/keymaps/supercoder/readme.md create mode 100644 keyboards/ergodox/keymaps/techtomas/keymap.c create mode 100644 keyboards/ergodox/keymaps/techtomas/readme.md create mode 100644 keyboards/ergodox/keymaps/teckinesis/keymap.c create mode 100644 keyboards/ergodox/keymaps/teckinesis/ordinary-special.png create mode 100644 keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt create mode 100644 keyboards/ergodox/keymaps/teckinesis/readme.md create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json create mode 100644 keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png create mode 100644 keyboards/ergodox/keymaps/tkuichooseyou/README.md create mode 100644 keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex create mode 100644 keyboards/ergodox/keymaps/tkuichooseyou/keymap.c create mode 100644 keyboards/ergodox/keymaps/tm2030/keymap.c create mode 100644 keyboards/ergodox/keymaps/tm2030/readme.md create mode 100644 keyboards/ergodox/keymaps/tonyabra_osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/tonyabra_osx/readme.md create mode 100644 keyboards/ergodox/keymaps/townk_osx/config.h create mode 100644 keyboards/ergodox/keymaps/townk_osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/townk_osx/makefile.mk create mode 100644 keyboards/ergodox/keymaps/townk_osx/readme.md create mode 100644 keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png create mode 100644 keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png create mode 100644 keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png create mode 100644 keyboards/ergodox/keymaps/twey/keymap.c create mode 100644 keyboards/ergodox/keymaps/twey/readme.md create mode 100644 keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c create mode 100644 keyboards/ergodox/keymaps/zweihander-osx/keymap.c create mode 100644 keyboards/ergodox/keymaps/zweihander-osx/readme.markdown delete mode 100755 keyboards/ergodox_ez/190hotfix.sh delete mode 100644 keyboards/ergodox_ez/Makefile delete mode 100644 keyboards/ergodox_ez/config.h delete mode 100644 keyboards/ergodox_ez/ergodox_ez.c delete mode 100644 keyboards/ergodox_ez/ergodox_ez.h delete mode 100644 keyboards/ergodox_ez/i2cmaster.h delete mode 100644 keyboards/ergodox_ez/keymaps/ab/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json delete mode 100644 keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png delete mode 100644 keyboards/ergodox_ez/keymaps/ab/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/ab/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/alexjj/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/alexjj/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/COPYING delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/config.h delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json delete mode 100644 keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json delete mode 100755 keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py delete mode 100755 keyboards/ergodox_ez/keymaps/algernon/tools/max-focused delete mode 100644 keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/bepo/bepo.png delete mode 100644 keyboards/ergodox_ez/keymaps/bepo/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/bepo/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/colemak/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/colemak/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png delete mode 100644 keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png delete mode 100644 keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png delete mode 100644 keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/csharp_dev/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/dave/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/dave/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/default/default.png delete mode 100644 keyboards/ergodox_ez/keymaps/default/default_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/default/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/default/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/default_osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/default_osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/dragon788/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak/dvorak.png delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md delete mode 100755 keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/erez_experimental/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/erez_experimental/config.h delete mode 100644 keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/erez_experimental/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png delete mode 100644 keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png delete mode 100644 keyboards/ergodox_ez/keymaps/german-kinergo/layout.png delete mode 100644 keyboards/ergodox_ez/keymaps/german-kinergo/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py delete mode 100644 keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md delete mode 100644 keyboards/ergodox_ez/keymaps/german/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/j3rn/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/j3rn/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/jack/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/jacobono/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/jacobono/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/jgarr/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/josh/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/josh/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/kastyle/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/kines-ish/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/kines-ish/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/maz/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/maz/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/mpiechotka/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/msc/img/code_layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/msc/img/main_layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/msc/img/media_layer.png delete mode 100644 keyboards/ergodox_ez/keymaps/msc/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/msc/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/naps62/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/naps62/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt delete mode 100644 keyboards/ergodox_ez/keymaps/ordinary/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png delete mode 100644 keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/osx_fr/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/plover/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/plums/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/plums/plums.png delete mode 100644 keyboards/ergodox_ez/keymaps/plums/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png delete mode 100644 keyboards/ergodox_ez/keymaps/sneako/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/sneako/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/software_neo2/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/config_user.h delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/images/layout.png delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/makefile.mk delete mode 100644 keyboards/ergodox_ez/keymaps/supercoder/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/techtomas/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/techtomas/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/ordinary-special.txt delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.json delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json delete mode 100644 keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png delete mode 100644 keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md delete mode 100644 keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex delete mode 100644 keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/tm2030/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/tm2030/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/config.h delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png delete mode 100644 keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png delete mode 100644 keyboards/ergodox_ez/keymaps/twey/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/twey/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown delete mode 100644 keyboards/ergodox_ez/matrix.c delete mode 100644 keyboards/ergodox_ez/readme.md delete mode 100644 keyboards/ergodox_ez/twimaster.c delete mode 100644 keyboards/ergodox_ez/util/compile_keymap.py delete mode 100644 keyboards/ergodox_ez/util/readme.md delete mode 100644 keyboards/infinity_ergodox/MEMO.txt delete mode 100644 keyboards/infinity_ergodox/Makefile delete mode 100644 keyboards/infinity_ergodox/bootloader_defs.h delete mode 100644 keyboards/infinity_ergodox/chconf.h delete mode 100644 keyboards/infinity_ergodox/config.h delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h delete mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h delete mode 100644 keyboards/infinity_ergodox/gfxconf.h delete mode 100644 keyboards/infinity_ergodox/halconf.h delete mode 100644 keyboards/infinity_ergodox/infinity_ergodox.c delete mode 100644 keyboards/infinity_ergodox/infinity_ergodox.h delete mode 100644 keyboards/infinity_ergodox/keymaps/default/keymap.c delete mode 100644 keyboards/infinity_ergodox/keymaps/default/visualizer.c delete mode 100644 keyboards/infinity_ergodox/led.c delete mode 100644 keyboards/infinity_ergodox/matrix.c delete mode 100644 keyboards/infinity_ergodox/mcuconf.h diff --git a/keyboards/ergodox/Makefile b/keyboards/ergodox/Makefile new file mode 100644 index 0000000000..05fb588d11 --- /dev/null +++ b/keyboards/ergodox/Makefile @@ -0,0 +1,34 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make = Make software. +# +# make clean = Clean out built project files. +# +# That's pretty much all you need. To compile, always go make clean, +# followed by make. +# +# For advanced users only: +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +#---------------------------------------------------------------------------- +SUBPROJECT_DEFAULT = ez + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ +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 +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= yes # Unicode + +ifndef QUANTUM_DIR + include ../../Makefile +endif diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c new file mode 100644 index 0000000000..992e95d811 --- /dev/null +++ b/keyboards/ergodox/ergodox.c @@ -0,0 +1,8 @@ +/* + * ergodox.c + * + * Created on: 7 jul 2016 + * Author: Fred Wales + */ + + diff --git a/keyboards/ergodox/ergodox.h b/keyboards/ergodox/ergodox.h new file mode 100644 index 0000000000..fe54e3260f --- /dev/null +++ b/keyboards/ergodox/ergodox.h @@ -0,0 +1,11 @@ +#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ +#define KEYBOARDS_ERGODOX_ERGODOX_H_ + +#ifdef SUBPROJECT_ez + #include "ez.h" +#endif +#ifdef SUBPROJECT_infinity + #include "infinity.h" +#endif + +#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/ergodox/ez/190hotfix.sh b/keyboards/ergodox/ez/190hotfix.sh new file mode 100755 index 0000000000..bdc3adce22 --- /dev/null +++ b/keyboards/ergodox/ez/190hotfix.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#a tool to fix broken keymaps as a result of pull request #190 +#changing the declaration of matrix_scan_user() and matrix_init_user() +# +#This script will save a copy of the specified keymap as keymap.c.bak +#and then create a new keymap.c with the definion corrected. +#this script must be run from the ergodox_ez directory +if [ $# -ne 1 ]; then + echo $0: usage: ./190hotfix keymap_name + exit 1 +fi + +echo Saving backup as ./keymaps/$1/keymap.c.bak ... +mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak + +echo Modifying ./keymaps/$1/keymap.c ... +cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c + +echo Complete! diff --git a/keyboards/ergodox/ez/Makefile b/keyboards/ergodox/ez/Makefile new file mode 100644 index 0000000000..37e554b304 --- /dev/null +++ b/keyboards/ergodox/ez/Makefile @@ -0,0 +1,76 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make = Make software. +# +# make clean = Clean out built project files. +# +# That's pretty much all you need. To compile, always go make clean, +# followed by make. +# +# For advanced users only: +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +#---------------------------------------------------------------------------- + +# # project specific files +SRC = twimaster.c \ + matrix.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# comment out to disable the options. +# + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h new file mode 100644 index 0000000000..2bb56731b2 --- /dev/null +++ b/keyboards/ergodox/ez/config.h @@ -0,0 +1,84 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ErgoDox EZ +#define PRODUCT ErgoDox EZ +#define DESCRIPTION QMK keyboard firmware for Ergodox EZ + +/* key matrix size */ +#define MATRIX_ROWS 14 +#define MATRIX_COLS 6 + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION +//#define DEBUG_MATRIX_SCAN_RATE + +#endif diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c new file mode 100644 index 0000000000..e7afc98590 --- /dev/null +++ b/keyboards/ergodox/ez/ez.c @@ -0,0 +1,85 @@ +#include "ez.h" +#include "i2cmaster.h" + +bool i2c_initialized = 0; +uint8_t mcp23018_status = 0x20; + +void matrix_init_kb(void) { + // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") + TCCR1A = 0b10101001; // set and configure fast PWM + TCCR1B = 0b00001001; // set and configure fast PWM + + // (tied to Vcc for hardware convenience) + DDRB &= ~(1<<4); // set B(4) as input + PORTB &= ~(1<<4); // set B(4) internal pull-up disabled + + // unused pins - C7, D4, D5, D7, E6 + // set as input with internal pull-ip enabled + DDRC &= ~(1<<7); + DDRD &= ~(1<<7 | 1<<5 | 1<<4); + DDRE &= ~(1<<6); + PORTC |= (1<<7); + PORTD |= (1<<7 | 1<<5 | 1<<4); + PORTE |= (1<<6); + + ergodox_blink_all_leds(); + + matrix_init_user(); +} + +void ergodox_blink_all_leds(void) +{ + ergodox_led_all_off(); + ergodox_led_all_set(LED_BRIGHTNESS_HI); + ergodox_right_led_1_on(); + _delay_ms(50); + ergodox_right_led_2_on(); + _delay_ms(50); + ergodox_right_led_3_on(); + _delay_ms(50); + ergodox_right_led_1_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_3_off(); + //ergodox_led_all_on(); + //_delay_ms(333); + ergodox_led_all_off(); +} + +uint8_t init_mcp23018(void) { + mcp23018_status = 0x20; + + // I2C subsystem + if (i2c_initialized == 0) { + i2c_init(); // on pins D(1,0) + i2c_initialized++; + _delay_ms(1000); + } + + // set pin direction + // - unused : input : 1 + // - input : input : 1 + // - driving : output : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + i2c_stop(); + + // set pull-up + // - unused : on : 1 + // - input : on : 1 + // - driving : off : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + +out: + i2c_stop(); + + return mcp23018_status; +} + + diff --git a/keyboards/ergodox/ez/ez.h b/keyboards/ergodox/ez/ez.h new file mode 100644 index 0000000000..db4ec867bc --- /dev/null +++ b/keyboards/ergodox/ez/ez.h @@ -0,0 +1,122 @@ +#ifndef ERGODOX_EZ_H +#define ERGODOX_EZ_H + +#include "quantum.h" +#include +#include +#include "i2cmaster.h" +#include + +#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) +#define CPU_16MHz 0x00 + +// I2C aliases and register addresses (see "mcp23018.md") +#define I2C_ADDR 0b0100000 +#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) +#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) +#define IODIRA 0x00 // i/o direction register +#define IODIRB 0x01 +#define GPPUA 0x0C // GPIO pull-up resistor register +#define GPPUB 0x0D +#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) +#define GPIOB 0x13 +#define OLATA 0x14 // output latch register +#define OLATB 0x15 + +extern uint8_t mcp23018_status; + +void init_ergodox(void); +void ergodox_blink_all_leds(void); +uint8_t init_mcp23018(void); +uint8_t ergodox_left_leds_update(void); + +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + + +inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } +inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } +inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } +inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } +inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } + +inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } +inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } +inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } +inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } +inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } + +inline void ergodox_led_all_on(void) +{ + ergodox_board_led_on(); + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); +} + +inline void ergodox_led_all_off(void) +{ + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +} + +inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } +inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } +inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } +inline void ergodox_right_led_set(uint8_t led, uint8_t n) { + (led == 1) ? (OCR1A = n) : + (led == 2) ? (OCR1B = n) : + (OCR1C = n); +} + +inline void ergodox_led_all_set(uint8_t n) +{ + ergodox_right_led_1_set(n); + ergodox_right_led_2_set(n); + ergodox_right_led_3_set(n); +} + +#define KEYMAP( \ + \ + /* left hand, spatial positions */ \ + k00,k01,k02,k03,k04,k05,k06, \ + k10,k11,k12,k13,k14,k15,k16, \ + k20,k21,k22,k23,k24,k25, \ + k30,k31,k32,k33,k34,k35,k36, \ + k40,k41,k42,k43,k44, \ + k55,k56, \ + k54, \ + k53,k52,k51, \ + \ + /* right hand, spatial positions */ \ + k07,k08,k09,k0A,k0B,k0C,k0D, \ + k17,k18,k19,k1A,k1B,k1C,k1D, \ + k28,k29,k2A,k2B,k2C,k2D, \ + k37,k38,k39,k3A,k3B,k3C,k3D, \ + k49,k4A,k4B,k4C,k4D, \ + k57,k58, \ + k59, \ + k5C,k5B,k5A ) \ + \ + /* matrix positions */ \ + { \ + { k00, k10, k20, k30, k40, KC_NO }, \ + { k01, k11, k21, k31, k41, k51 }, \ + { k02, k12, k22, k32, k42, k52 }, \ + { k03, k13, k23, k33, k43, k53 }, \ + { k04, k14, k24, k34, k44, k54 }, \ + { k05, k15, k25, k35, KC_NO, k55 }, \ + { k06, k16, KC_NO, k36, KC_NO, k56 }, \ + \ + { k07, k17, KC_NO, k37,KC_NO, k57 }, \ + { k08, k18, k28, k38,KC_NO, k58 }, \ + { k09, k19, k29, k39, k49, k59 }, \ + { k0A, k1A, k2A, k3A, k4A, k5A }, \ + { k0B, k1B, k2B, k3B, k4B, k5B }, \ + { k0C, k1C, k2C, k3C, k4C, k5C }, \ + { k0D, k1D, k2D, k3D, k4D, KC_NO } \ + } + +#endif diff --git a/keyboards/ergodox/ez/i2cmaster.h b/keyboards/ergodox/ez/i2cmaster.h new file mode 100644 index 0000000000..3917b9e6c0 --- /dev/null +++ b/keyboards/ergodox/ez/i2cmaster.h @@ -0,0 +1,178 @@ +#ifndef _I2CMASTER_H +#define _I2CMASTER_H 1 +/************************************************************************* +* Title: C include file for the I2C master interface +* (i2cmaster.S or twimaster.c) +* Author: Peter Fleury http://jump.to/fleury +* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device +* Usage: see Doxygen manual +**************************************************************************/ + +#ifdef DOXYGEN +/** + @defgroup pfleury_ic2master I2C Master library + @code #include @endcode + + @brief I2C (TWI) Master Software Library + + Basic routines for communicating with I2C slave devices. This single master + implementation is limited to one bus master on the I2C bus. + + This I2c library is implemented as a compact assembler software implementation of the I2C protocol + which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). + Since the API for these two implementations is exactly the same, an application can be linked either against the + software I2C implementation or the hardware I2C implementation. + + Use 4.7k pull-up resistor on the SDA and SCL pin. + + Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module + i2cmaster.S to your target when using the software I2C implementation ! + + Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. + + @note + The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted + to GNU assembler and AVR-GCC C call interface. + Replaced the incorrect quarter period delays found in AVR300 with + half period delays. + + @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury + + @par API Usage Example + The following code shows typical usage of this library, see example test_i2cmaster.c + + @code + + #include + + + #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet + + int main(void) + { + unsigned char ret; + + i2c_init(); // initialize I2C library + + // write 0x75 to EEPROM address 5 (Byte Write) + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + i2c_write(0x05); // write address = 5 + i2c_write(0x75); // write value 0x75 to EEPROM + i2c_stop(); // set stop conditon = release bus + + + // read previously written value back from EEPROM address 5 + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + + i2c_write(0x05); // write address = 5 + i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode + + ret = i2c_readNak(); // read one byte from EEPROM + i2c_stop(); + + for(;;); + } + @endcode + +*/ +#endif /* DOXYGEN */ + +/**@{*/ + +#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 +#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" +#endif + +#include + +/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_READ 1 + +/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_WRITE 0 + + +/** + @brief initialize the I2C master interace. Need to be called only once + @param void + @return none + */ +extern void i2c_init(void); + + +/** + @brief Terminates the data transfer and releases the I2C bus + @param void + @return none + */ +extern void i2c_stop(void); + + +/** + @brief Issues a start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_start(unsigned char addr); + + +/** + @brief Issues a repeated start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_rep_start(unsigned char addr); + + +/** + @brief Issues a start condition and sends address and transfer direction + + If device is busy, use ack polling to wait until device ready + @param addr address and transfer direction of I2C device + @return none + */ +extern void i2c_start_wait(unsigned char addr); + + +/** + @brief Send one byte to I2C device + @param data byte to be transfered + @retval 0 write successful + @retval 1 write failed + */ +extern unsigned char i2c_write(unsigned char data); + + +/** + @brief read one byte from the I2C device, request more data from device + @return byte read from I2C device + */ +extern unsigned char i2c_readAck(void); + +/** + @brief read one byte from the I2C device, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_readNak(void); + +/** + @brief read one byte from the I2C device + + Implemented as a macro, which calls either i2c_readAck or i2c_readNak + + @param ack 1 send ack, request more data from device
+ 0 send nak, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_read(unsigned char ack); +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + + +/**@}*/ +#endif diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c new file mode 100644 index 0000000000..a19bab90b2 --- /dev/null +++ b/keyboards/ergodox/ez/matrix.c @@ -0,0 +1,382 @@ +/* + +Note for ErgoDox EZ customizers: Here be dragons! +This is not a file you want to be messing with. +All of the interesting stuff for you is under keymaps/ :) +Love, Erez + +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "wait.h" +#include "action_layer.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "ez.h" +#include "i2cmaster.h" +#ifdef DEBUG_MATRIX_SCAN_RATE +#include "timer.h" +#endif + +/* + * This constant define not debouncing time in msecs, but amount of matrix + * scan loops which should be made to get stable debounced results. + * + * On Ergodox matrix scan rate is relatively low, because of slow I2C. + * Now it's only 317 scans/second, or about 3.15 msec/scan. + * According to Cherry specs, debouncing time is 5 msec. + * + * And so, there is no sense to have DEBOUNCE higher than 2. + */ + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(uint8_t row); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +static uint8_t mcp23018_reset_loop; + +#ifdef DEBUG_MATRIX_SCAN_RATE +uint32_t matrix_timer; +uint32_t matrix_scan_count; +#endif + + +__attribute__ ((weak)) +void matrix_init_user(void) {} + +__attribute__ ((weak)) +void matrix_scan_user(void) {} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + // initialize row and col + + mcp23018_status = init_mcp23018(); + + + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_timer = timer_read32(); + matrix_scan_count = 0; +#endif + + matrix_init_kb(); + +} + +void matrix_power_up(void) { + mcp23018_status = init_mcp23018(); + + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_timer = timer_read32(); + matrix_scan_count = 0; +#endif + +} + +uint8_t matrix_scan(void) +{ + if (mcp23018_status) { // if there was an error + if (++mcp23018_reset_loop == 0) { + // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans + // this will be approx bit more frequent than once per second + print("trying to reset mcp23018\n"); + mcp23018_status = init_mcp23018(); + if (mcp23018_status) { + print("left side not responding\n"); + } else { + print("left side attached\n"); + ergodox_blink_all_leds(); + } + } + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_scan_count++; + + uint32_t timer_now = timer_read32(); + if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) { + print("matrix scan frequency: "); + pdec(matrix_scan_count); + print("\n"); + + matrix_timer = timer_now; + matrix_scan_count = 0; + } +#endif + + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + wait_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(i); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + wait_us(1); + // this should be wait_ms(1) but has been left as-is at EZ's request + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + matrix_scan_quantum(); + + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1< http://jump.to/fleury +* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device with hardware TWI +* Usage: API compatible with I2C Software Library i2cmaster.h +**************************************************************************/ +#include +#include + +#include + + +/* define CPU frequency in Mhz here if not defined in Makefile */ +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +/* I2C clock in Hz */ +#define SCL_CLOCK 400000L + + +/************************************************************************* + Initialization of the I2C bus interface. Need to be called only once +*************************************************************************/ +void i2c_init(void) +{ + /* initialize TWI clock + * minimal values in Bit Rate Register (TWBR) and minimal Prescaler + * bits in the TWI Status Register should give us maximal possible + * I2C bus speed - about 444 kHz + * + * for more details, see 20.5.2 in ATmega16/32 secification + */ + + TWSR = 0; /* no prescaler */ + TWBR = 10; /* must be >= 10 for stable operation */ + +}/* i2c_init */ + + +/************************************************************************* + Issues a start condition and sends address and transfer direction. + return 0 = device accessible, 1= failed to access device +*************************************************************************/ +unsigned char i2c_start(unsigned char address) +{ + uint8_t twst; + + // send START condition + TWCR = (1<= 0: + if section['name'] == 'layout_config': + config.update(loads("\n".join( + section['code_lines'] + ))) + elif section['sub_name'].startswith('layer'): + layer_name = section['sub_name'] + config['layer_lines'][layer_name] = section['code_lines'] + + reset_section() + + def amend_section(line_index, line): + section['end_line'] = line_index + section['code_lines'].append(line) + + config = DEFAULT_CONFIG.copy() + config.update({ + 'layer_lines': collections.OrderedDict(), + 'macro_ids': {'UM'}, + 'unicode_macros': {}, + }) + + section = {} + reset_section() + + with io.open(path, encoding="utf-8") as fh: + for i, line in enumerate(fh): + if line.startswith("#"): + start_section(i, line) + elif line.startswith(" "): + amend_section(i, line[4:]) + else: + # TODO: maybe parse description + pass + + end_section() + assert 'layout' in config + return config + +# header file parsing + +IF0_RE = re.compile(r""" + ^ + #if 0 + $.*? + #endif +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +COMMENT_RE = re.compile(r""" + /\* + .*? + \*/" +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def read_header_file(path): + with io.open(path, encoding="utf-8") as fh: + data = fh.read() + data, _ = COMMENT_RE.subn("", data) + data, _ = IF0_RE.subn("", data) + return data + + +def regex_partial(re_str_fmt, flags): + def partial(*args, **kwargs): + re_str = re_str_fmt.format(*args, **kwargs) + return re.compile(re_str, flags) + return partial + + +KEYDEF_REP = regex_partial(r""" + #define + \s + ( + (?:{}) # the prefixes + (?:\w+) # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_RE = re.compile(r""" + ( + enum + \s\w+\s + \{ + .*? # the enum content + \} + ; + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_KEY_REP = regex_partial(r""" + ( + {} # the prefixes + \w+ # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def parse_keydefs(config, data): + prefix_options = "|".join(config['key_prefixes']) + keydef_re = KEYDEF_REP(prefix_options) + enum_key_re = ENUM_KEY_REP(prefix_options) + for match in keydef_re.finditer(data): + yield match.groups()[0] + + for enum_match in ENUM_RE.finditer(data): + enum = enum_match.groups()[0] + for key_match in enum_key_re.finditer(enum): + yield key_match.groups()[0] + + +def parse_valid_keys(config, out_path): + basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) + dirpaths = [] + subpaths = [] + while len(subpaths) < 6: + path = os.path.join(basepath, *subpaths) + dirpaths.append(path) + dirpaths.append(os.path.join(path, "tmk_core", "common")) + dirpaths.append(os.path.join(path, "quantum")) + subpaths.append('..') + + includes = set(config['keymaps_includes']) + includes.add("keycode.h") + + valid_keycodes = set() + for dirpath, include in it.product(dirpaths, includes): + include_path = os.path.join(dirpath, include) + if os.path.exists(include_path): + header_data = read_header_file(include_path) + valid_keycodes.update( + parse_keydefs(config, header_data) + ) + return valid_keycodes + + +# Keymap Parsing + +def iter_raw_codes(layer_lines, filler, separator): + filler_re = re.compile("[" + filler + " ]") + for line in layer_lines: + line, _ = filler_re.subn("", line.strip()) + if not line: + continue + codes = line.split(separator) + for code in codes[1:-1]: + yield code + + +def iter_indexed_codes(raw_codes, key_indexes): + key_rows = {} + key_indexes_flat = [] + + for row_index, key_indexes in enumerate(key_indexes): + for key_index in key_indexes: + key_rows[key_index] = row_index + key_indexes_flat.extend(key_indexes) + assert len(raw_codes) == len(key_indexes_flat) + for raw_code, key_index in zip(raw_codes, key_indexes_flat): + # we keep track of the row mostly for layout purposes + yield raw_code, key_index, key_rows[key_index] + + +LAYER_CHANGE_RE = re.compile(r""" + (DF|TG|MO)\(\d+\) +""", re.VERBOSE) + + +MACRO_RE = re.compile(r""" + M\(\w+\) +""", re.VERBOSE) + + +UNICODE_RE = re.compile(r""" + U[0-9A-F]{4} +""", re.VERBOSE) + + +NON_CODE = re.compile(r""" + ^[^A-Z0-9_]$ +""", re.VERBOSE) + + +def parse_uni_code(raw_code): + macro_id = "UC_" + ( + unicodedata.name(raw_code) + .replace(" ", "_") + .replace("-", "_") + ) + code = "M({})".format(macro_id) + uc_hex = "{:04X}".format(ord(raw_code)) + return code, macro_id, uc_hex + + +def parse_key_code(raw_code, key_prefixes, valid_keycodes): + if raw_code in valid_keycodes: + return raw_code + + for prefix in key_prefixes: + code = prefix + raw_code + if code in valid_keycodes: + return code + + +def parse_code(raw_code, key_prefixes, valid_keycodes): + if not raw_code: + return 'KC_TRNS', None, None + + if LAYER_CHANGE_RE.match(raw_code): + return raw_code, None, None + + if MACRO_RE.match(raw_code): + macro_id = raw_code[2:-1] + return raw_code, macro_id, None + + if UNICODE_RE.match(raw_code): + hex_code = raw_code[1:] + return parse_uni_code(chr(int(hex_code, 16))) + + if NON_CODE.match(raw_code): + return parse_uni_code(raw_code) + + code = parse_key_code(raw_code, key_prefixes, valid_keycodes) + return code, None, None + + +def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): + keymap = {} + raw_codes = list(iter_raw_codes( + layer_lines, config['filler'], config['separator'] + )) + indexed_codes = iter_indexed_codes(raw_codes, key_indexes) + key_prefixes = config['key_prefixes'] + for raw_code, key_index, row_index in indexed_codes: + code, macro_id, uc_hex = parse_code( + raw_code, key_prefixes, valid_keycodes + ) + # TODO: line numbers for invalid codes + err_msg = "Could not parse key '{}' on row {}".format( + raw_code, row_index + ) + assert code is not None, err_msg + # print(repr(raw_code), repr(code), macro_id, uc_hex) + if macro_id: + config['macro_ids'].add(macro_id) + if uc_hex: + config['unicode_macros'][macro_id] = uc_hex + keymap[key_index] = (code, row_index) + return keymap + + +def parse_keymaps(config, valid_keycodes): + keymaps = collections.OrderedDict() + key_indexes = config.get( + 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] + ) + # TODO: maybe validate key_indexes + + for layer_name, layer_lines, in config['layer_lines'].items(): + keymaps[layer_name] = parse_keymap( + config, key_indexes, layer_lines, valid_keycodes + ) + return keymaps + +# keymap.c output + +USERCODE = """ +// 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) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; +""" + +MACROCODE = """ +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 + +// TODO: allow default mode to be configured +static uint16_t unicode_mode = UC_MODE_WIN; + +uint16_t hextokeycode(uint8_t hex) {{ + if (hex == 0x0) {{ + return KC_P0; + }} + if (hex < 0xA) {{ + return KC_P1 + (hex - 0x1); + }} + return KC_A + (hex - 0xA); +}} + +void unicode_action_function(uint16_t hi, uint16_t lo) {{ + switch (unicode_mode) {{ + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + }} +}} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ + if (!record->event.pressed) {{ + return MACRO_NONE; + }} + // MACRODOWN only works in this function + switch(id) {{ + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; +{macro_cases} +{unicode_macro_cases} + default: + break; + }} + return MACRO_NONE; +}}; +""" + + +UNICODE_MACRO_TEMPLATE = """ +case {macro_id}: + unicode_action_function(0x{hi:02x}, 0x{lo:02x}); + break; +""".strip() + + +def unicode_macro_cases(config): + for macro_id, uc_hex in config['unicode_macros'].items(): + hi = int(uc_hex, 16) >> 8 + lo = int(uc_hex, 16) & 0xFF + unimacro_keys = ", ".join( + "T({})".format( + "KP_" + digit if digit.isdigit() else digit + ) for digit in uc_hex + ) + yield UNICODE_MACRO_TEMPLATE.format( + macro_id=macro_id, hi=hi, lo=lo + ) + + +def iter_keymap_lines(keymap, row_indents=None): + col_widths = {} + col = 0 + # first pass, figure out the column widths + prev_row_index = None + for code, row_index in keymap.values(): + if row_index != prev_row_index: + col = 0 + if row_indents: + col = row_indents[row_index] + col_widths[col] = max(len(code), col_widths.get(col, 0)) + prev_row_index = row_index + col += 1 + + # second pass, yield the cell values + col = 0 + prev_row_index = None + for key_index in sorted(keymap): + code, row_index = keymap[key_index] + if row_index != prev_row_index: + col = 0 + yield "\n" + if row_indents: + for indent_col in range(row_indents[row_index]): + pad = " " * (col_widths[indent_col] - 4) + yield (" /*-*/" + pad) + col = row_indents[row_index] + else: + yield pad + yield " {}".format(code) + if key_index < len(keymap) - 1: + yield "," + # This will be yielded on the next iteration when + # we know that we're not at the end of a line. + pad = " " * (col_widths[col] - len(code)) + prev_row_index = row_index + col += 1 + + +def iter_keymap_parts(config, keymaps): + # includes + for include_path in config['keymaps_includes']: + yield '#include "{}"\n'.format(include_path) + + yield "\n" + + # definitions + for i, macro_id in enumerate(sorted(config['macro_ids'])): + yield "#define {} {}\n".format(macro_id, i) + + yield "\n" + + for i, layer_name in enumerate(config['layer_lines']): + yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) + + yield "\n" + + # keymaps + yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" + + for i, layer_name in enumerate(config['layer_lines']): + # comment + layer_lines = config['layer_lines'][layer_name] + prefixed_lines = " * " + " * ".join(layer_lines) + yield "/*\n{} */\n".format(prefixed_lines) + + # keymap codes + keymap = keymaps[layer_name] + row_indents = ROW_INDENTS.get(config['layout']) + keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) + yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) + + yield "};\n\n" + + # no idea what this is for + yield "const uint16_t PROGMEM fn_actions[] = {};\n" + + # macros + yield MACROCODE.format( + macro_cases="", + unicode_macro_cases="\n".join(unicode_macro_cases(config)), + ) + + # TODO: dynamically create blinking lights + yield USERCODE + + +def main(argv=sys.argv[1:]): + if not argv or '-h' in argv or '--help' in argv: + print(__doc__) + return 0 + + in_path = os.path.abspath(argv[0]) + if not os.path.exists(in_path): + print("No such file '{}'".format(in_path)) + return 1 + + if len(argv) > 1: + out_path = os.path.abspath(argv[1]) + else: + dirname = os.path.dirname(in_path) + out_path = os.path.join(dirname, "keymap.c") + + config = parse_config(in_path) + valid_keys = parse_valid_keys(config, out_path) + keymaps = parse_keymaps(config, valid_keys) + + with io.open(out_path, mode="w", encoding="utf-8") as fh: + for part in iter_keymap_parts(config, keymaps): + fh.write(part) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/keyboards/ergodox/ez/util/readme.md b/keyboards/ergodox/ez/util/readme.md new file mode 100644 index 0000000000..26c5e5d99c --- /dev/null +++ b/keyboards/ergodox/ez/util/readme.md @@ -0,0 +1,3 @@ +# ErgoDox EZ Utilities + +The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option. diff --git a/keyboards/ergodox/infinity/MEMO.txt b/keyboards/ergodox/infinity/MEMO.txt new file mode 100644 index 0000000000..e2886aa002 --- /dev/null +++ b/keyboards/ergodox/infinity/MEMO.txt @@ -0,0 +1,385 @@ +flabbergast's TMK/ChibiOS port +============================== +2015/10/16 + + +Build +----- +$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git + +$ cd tmk_keyboard +$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios +or +$ cd tmk_keyboard/tmk_core/tool/chibios +$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios + +$ cd tmk_keyboard/keyboard/infinity_chibios +$ make + + + + +Chibios Configuration +--------------------- +halconf.h: for HAL configuration + placed in project directory + read in chibios/os/hal/hal.mk + included in chibios/os/hal/include/hal.h +mcuconf.h: for MCU configuration + placed in project directory + included in halconf.h + + +Chibios Term +------------ +PAL = Port Abstraction Layer + palWritePad + palReadPad + palSetPad + chibios/os/hal/include/pal.h + +LLD = Low Level Driver + + +Makefile +-------- + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = KINETIS + MCU_SERIES = KL2x + + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT = MKL26Z64 + + # - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP = kl2x + + # Board: it should exist either in /os/hal/boards/ + # or /boards + BOARD = PJRC_TEENSY_LC + + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + +halconf.h +--------- + + +mcuconf.h +--------- + + +chconf.h +-------- + + +ld script +--------- +--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900 ++++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900 +@@ -27,7 +27,8 @@ + { + flash0 : org = 0x00000000, len = 0xc0 + flashcfg : org = 0x00000400, len = 0x10 +- flash : org = 0x00000410, len = 64k - 0x410 ++ flash : org = 0x00000410, len = 62k - 0x410 ++ eeprom_emu : org = 0x0000F800, len = 2k + ram : org = 0x1FFFF800, len = 8k + } + +@@ -35,6 +36,10 @@ + __ram_size__ = LENGTH(ram); + __ram_end__ = __ram_start__ + __ram_size__; + ++__eeprom_workarea_start__ = ORIGIN(eeprom_emu); ++__eeprom_workarea_size__ = LENGTH(eeprom_emu); ++__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; ++ + SECTIONS + { + . = 0; + + + +Configuration/Startup for Infinity 60% +-------------------------------------- +Configuration: + + +Clock: +Inifinity + FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz + Clock dividor: + SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock + SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock + SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock + Internal reference clock: + MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL + MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable + FLL multipilication: + MCG_C4[DMX32] = 1 + MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz + +chibios/os/hal/ports/KINETIS/K20x/hal_lld.c + k20x_clock_init(): called in __early_init() defined in board.c + disable watchdog and configure clock + + configurable macros: + KINETIS_NO_INIT: whether init or not + KINETIS_MCG_MODE: clock mode + KINETIS_MCG_MODE_FEI + KINETIS_MCG_MODE_PEE + hal/ports/KINETIS/K20x/hal_lld.h + + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h + PALConfig pal_default_config + boardInit() + __early_init() + macro definitions for board infos, freq and mcu type + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c + +USB + + +Startup +------- + common/ports/ARMCMx/GCC/crt0_v[67]m.s + Reset_Handler: startup code + common/ports/ARMCMx/GCC/crt1.c + __core_init(): weak + __early_init(): weak + __late_init(): weak + __default_exit(): weak + called from Reset_Handler of crt0 + common/ports/ARMCMx/GCC/vector.c + common/ports/ARMCMx/GCC/ld/*.ld + +chibios/os/common/ports/ARMCMx/compilers/GCC/ +├── crt0_v6m.s +├── crt0_v7m.s +├── crt1.c +├── ld +│   ├── MK20DX128BLDR3.ld +│   ├── MK20DX128BLDR4.ld +│   ├── MK20DX128.ld +│   ├── MK20DX256.ld +│   ├── MKL25Z128.ld +│   ├── MKL26Z128.ld +│   ├── MKL26Z64.ld +│   └── STM32L476xG.ld +├── mk +│   ├── startup_k20x5.mk +│   ├── startup_k20x7.mk +│   ├── startup_k20x.mk +│   ├── startup_kl2x.mk +│   └── startup_stm32l4xx.mk +├── rules.ld +├── rules.mk +└── vectors.c + +chibios/os/hal/ +├── boards +│   ├── FREESCALE_FREEDOM_K20D50M +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── MCHCK_K20 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3_1 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_LC +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── readme.txt +│   ├── simulator +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── ST_NUCLEO_F030R8 +│   │   ├── board.c +│   │   ├── board.h +│   │   ├── board.mk +│   │   └── cfg +│   │   └── board.chcfg +├── hal.mk +├── include +│   ├── adc.h +│   ├── can.h +│   ├── dac.h +│   ├── ext.h +│   ├── gpt.h +│   ├── hal_channels.h +│   ├── hal_files.h +│   ├── hal.h +│   ├── hal_ioblock.h +│   ├── hal_mmcsd.h +│   ├── hal_queues.h +│   ├── hal_streams.h +│   ├── i2c.h +│   ├── i2s.h +│   ├── icu.h +│   ├── mac.h +│   ├── mii.h +│   ├── mmc_spi.h +│   ├── pal.h +│   ├── pwm.h +│   ├── rtc.h +│   ├── sdc.h +│   ├── serial.h +│   ├── serial_usb.h +│   ├── spi.h +│   ├── st.h +│   ├── uart.h +│   └── usb.h +├── lib +│   └── streams +│   ├── chprintf.c +│   ├── chprintf.h +│   ├── memstreams.c +│   ├── memstreams.h +│   ├── nullstreams.c +│   └── nullstreams.h +├── osal +│   ├── nil +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   ├── os-less +│   │   └── ARMCMx +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   └── rt +│   ├── osal.c +│   ├── osal.h +│   └── osal.mk +├── ports +│   ├── AVR +│   ├── common +│   │   └── ARMCMx +│   │   ├── mpu.h +│   │   ├── nvic.c +│   │   └── nvic.h +│   ├── KINETIS +│   │   ├── K20x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.dox +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   ├── pwm_lld.h +│   │   │   ├── spi_lld.c +│   │   │   └── spi_lld.h +│   │   ├── KL2x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   └── pwm_lld.h +│   │   ├── LLD +│   │   │   ├── adc_lld.c +│   │   │   ├── adc_lld.h +│   │   │   ├── ext_lld.c +│   │   │   ├── ext_lld.h +│   │   │   ├── gpt_lld.c +│   │   │   ├── gpt_lld.h +│   │   │   ├── i2c_lld.c +│   │   │   ├── i2c_lld.h +│   │   │   ├── pal_lld.c +│   │   │   ├── pal_lld.h +│   │   │   ├── serial_lld.c +│   │   │   ├── serial_lld.h +│   │   │   ├── st_lld.c +│   │   │   ├── st_lld.h +│   │   │   ├── usb_lld.c +│   │   │   └── usb_lld.h +│   │   └── README.md +│   ├── LPC +│   ├── simulator +│   └── STM32 +├── src +│   ├── adc.c +│   ├── can.c +│   ├── dac.c +│   ├── ext.c +│   ├── gpt.c +│   ├── hal.c +│   ├── hal_mmcsd.c +│   ├── hal_queues.c +│   ├── i2c.c +│   ├── i2s.c +│   ├── icu.c +│   ├── mac.c +│   ├── mmc_spi.c +│   ├── pal.c +│   ├── pwm.c +│   ├── rtc.c +│   ├── sdc.c +│   ├── serial.c +│   ├── serial_usb.c +│   ├── spi.c +│   ├── st.c +│   ├── uart.c +│   └── usb.c +└── templates + ├── adc_lld.c + ├── adc_lld.h + ├── can_lld.c + ├── can_lld.h + ├── dac_lld.c + ├── dac_lld.h + ├── ext_lld.c + ├── ext_lld.h + ├── gpt_lld.c + ├── gpt_lld.h + ├── halconf.h + ├── hal_lld.c + ├── hal_lld.h + ├── i2c_lld.c + ├── i2c_lld.h + ├── i2s_lld.c + ├── i2s_lld.h + ├── icu_lld.c + ├── icu_lld.h + ├── mac_lld.c + ├── mac_lld.h + ├── mcuconf.h + ├── osal + │   ├── osal.c + │   ├── osal.h + │   └── osal.mk + ├── pal_lld.c + ├── pal_lld.h + ├── platform.mk + ├── pwm_lld.c + ├── pwm_lld.h + ├── rtc_lld.c + ├── rtc_lld.h + ├── sdc_lld.c + ├── sdc_lld.h + ├── serial_lld.c + ├── serial_lld.h + ├── spi_lld.c + ├── spi_lld.h + ├── st_lld.c + ├── st_lld.h + ├── uart_lld.c + ├── uart_lld.h + ├── usb_lld.c + └── usb_lld.h diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile new file mode 100644 index 0000000000..942032f83c --- /dev/null +++ b/keyboards/ergodox/infinity/Makefile @@ -0,0 +1,77 @@ +# project specific files +SRC = matrix.c \ + led.c + +## chip/board settings +# - the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +# - For Infinity KB, SERIES = K20x +MCU_FAMILY = KINETIS +MCU_SERIES = K20x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader +# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader +MCU_LDSCRIPT = MK20DX256BLDR8 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 and Infinity 60% +# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox +MCU_STARTUP = k20x7 + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +# - MCHCK_K20 for Infinity KB +#BOARD = MCHCK_K20 +BOARD = PJRC_TEENSY_3_1 + +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m4 + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 7 + +# Vector table for application +# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ +# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB +OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000 + +# Build Options +# comment out to disable the options. +# +CUSTOM_MATRIX ?= yes # Custom matrix file +SERIAL_LINK_ENABLE = yes +VISUALIZER_ENABLE ?= yes +LCD_ENABLE ?= yes +LED_ENABLE ?= yes +LCD_BACKLIGHT_ENABLE ?= yes + +ifdef LCD_ENABLE +include drivers/gdisp/st7565ergodox/driver.mk +endif + +ifdef LED_ENABLE +include drivers/gdisp/IS31FL3731C/driver.mk +endif + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/ergodox/infinity/bootloader_defs.h b/keyboards/ergodox/infinity/bootloader_defs.h new file mode 100644 index 0000000000..c67153be60 --- /dev/null +++ b/keyboards/ergodox/infinity/bootloader_defs.h @@ -0,0 +1 @@ +#define KIIBOHD_BOOTLOADER diff --git a/keyboards/ergodox/infinity/chconf.h b/keyboards/ergodox/infinity/chconf.h new file mode 100644 index 0000000000..d59c35eb68 --- /dev/null +++ b/keyboards/ergodox/infinity/chconf.h @@ -0,0 +1,524 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef _CHCONF_H_ +#define _CHCONF_H_ + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 32 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 100000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 0 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 20 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief I/O Queues APIs. + * @details If enabled then the I/O queues APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_QUEUES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS TRUE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK FALSE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS FALSE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS FALSE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the context switch circular trace buffer is + * activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_TRACE FALSE + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK FALSE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS FALSE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + * + * @note It is inserted into lock zone. + * @note It is also invoked when the threads simply return in order to + * terminate. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* _CHCONF_H_ */ + +/** @} */ diff --git a/keyboards/ergodox/infinity/config.h b/keyboards/ergodox/infinity/config.h new file mode 100644 index 0000000000..d24ee0f056 --- /dev/null +++ b/keyboards/ergodox/infinity/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2015 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c borks */ +#define MANUFACTURER "TMK" +#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00' +#define PRODUCT "Infinity keyboard/TMK" +#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00' + +/* key matrix size */ +#define MATRIX_ROWS 18 +#define MATRIX_COLS 5 +#define LOCAL_MATRIX_ROWS 9 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Keymap for Infiity prototype */ +#define INFINITY_PROTOTYPE + +#define SERIAL_LINK_BAUD 562500 +#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1) +// The visualizer needs gfx thread priorities +#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h new file mode 100644 index 0000000000..2ea73f1fb3 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h @@ -0,0 +1,113 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +static const I2CConfig i2ccfg = { + 400000 // clock speed (Hz); 400kHz max for IS31 +}; + +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 + +static const uint8_t led_mask[] = { + 0xFF, 0x00, /* C1-1 -> C1-16 */ + 0xFF, 0x00, /* C2-1 -> C2-16 */ + 0xFF, 0x00, /* C3-1 -> C3-16 */ + 0xFF, 0x00, /* C4-1 -> C4-16 */ + 0x3F, 0x00, /* C5-1 -> C5-16 */ + 0x00, 0x00, /* C6-1 -> C6-16 */ + 0x00, 0x00, /* C7-1 -> C7-16 */ + 0x00, 0x00, /* C8-1 -> C8-16 */ + 0x00, 0x00, /* C9-1 -> C9-16 */ +}; + +// The address of the LED +#define LA(c, r) (c + r * 16 ) +// Need to be an address that is not mapped, but inside the range of the controller matrix +#define NA LA(8, 8) + +// The numbers in the comments are the led numbers DXX on the PCB +// The mapping is taken from the schematic of left hand side +static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { +// 45 44 43 42 41 40 39 + { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, +// 52 51 50 49 48 47 46 + { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, +// 58 57 56 55 54 53 N/A + { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, +// 67 66 65 64 63 62 61 + { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, +// 76 75 74 73 72 60 59 + { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, +// N/A N/A N/A N/A N/A N/A 68 + { NA, NA, NA, NA, NA, NA, LA(5, 4) }, +// N/A N/A N/A N/A 71 70 69 + { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, +}; + + +#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND +#define IS31_TIMEOUT 5000 + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + /* I2C pins */ + palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL + palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA + palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); + palClearPad(GPIOB, 16); + /* start I2C */ + i2cStart(&I2CD1, &i2ccfg); + // try high drive (from kiibohd) + I2CD1.i2c->C2 |= I2Cx_C2_HDRS; + // try glitch fixing (from kiibohd) + I2CD1.i2c->FLT = 4; +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { + (void) g; + return led_mask; +} + +static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) +{ + (void) g; + return led_mapping[y][x]; +} + +static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { + (void) g; + if(!shutdown) { + palSetPad(GPIOB, 16); + } + else { + palClearPad(GPIOB, 16); + } +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk new file mode 100644 index 0000000000..f32d0d8685 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/IS31FL3731C +GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c new file mode 100644 index 0000000000..1d21f0c498 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c @@ -0,0 +1,333 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX +#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_IS31FL3731C.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 9 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 16 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#define IS31_ADDR_DEFAULT 0x74 + +#define IS31_REG_CONFIG 0x00 +// bits in reg +#define IS31_REG_CONFIG_PICTUREMODE 0x00 +#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 +#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 +// D2:D0 bits are starting frame for autoplay mode + +#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode + +#define IS31_REG_AUTOPLAYCTRL1 0x02 +// D6:D4 number of loops (000=infty) +// D2:D0 number of frames to be used + +#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) + +#define IS31_REG_DISPLAYOPT 0x05 +#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames +#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 +// D2:D0 bits blink period time (*0.27s) + +#define IS31_REG_AUDIOSYNC 0x06 +#define IS31_REG_AUDIOSYNC_ENABLE 0x1 + +#define IS31_REG_FRAMESTATE 0x07 + +#define IS31_REG_BREATHCTRL1 0x08 +// D6:D4 fade out time (26ms*2^i) +// D2:D0 fade in time (26ms*2^i) + +#define IS31_REG_BREATHCTRL2 0x09 +#define IS31_REG_BREATHCTRL2_ENABLE 0x10 +// D2:D0 extinguish time (3.5ms*2^i) + +#define IS31_REG_SHUTDOWN 0x0A +#define IS31_REG_SHUTDOWN_OFF 0x0 +#define IS31_REG_SHUTDOWN_ON 0x1 + +#define IS31_REG_AGCCTRL 0x0B +#define IS31_REG_ADCRATE 0x0C + +#define IS31_COMMANDREGISTER 0xFD +#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' +#define IS31_FUNCTIONREG_SIZE 0xD + +#define IS31_FRAME_SIZE 0xB4 + +#define IS31_PWM_REG 0x24 +#define IS31_PWM_SIZE 0x90 + +#define IS31_LED_MASK_SIZE 0x12 +#define IS31_SCREEN_WIDTH 16 + +#define IS31 + +//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm +const unsigned char cie[256] = { + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, + 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, + 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, + 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, + 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, + 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, + 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, + 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, + 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, + 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, + 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, + 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, + 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, + 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, + 242, 245, 247, 250, 252, 255, +}; + + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + uint8_t write_buffer_offset; + uint8_t write_buffer[IS31_FRAME_SIZE]; + uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; + uint8_t page; +}__attribute__((__packed__)) PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +static GFXINLINE void write_page(GDisplay* g, uint8_t page) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = IS31_COMMANDREGISTER; + tx[1] = page; + write_data(g, tx, 2); +} + +static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = reg; + tx[1] = data; + write_page(g, page); + write_data(g, tx, 2); +} + +static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { + PRIV(g)->write_buffer_offset = offset; + write_page(g, page); + write_data(g, (uint8_t*)PRIV(g), length + 1); +} + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + __builtin_memset(PRIV(g), 0, sizeof(PrivData)); + PRIV(g)->page = 0; + + // Initialise the board interface + init_board(g); + gfxSleepMilliseconds(10); + + // zero function page, all registers (assuming full_page is all zeroes) + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + set_hardware_shutdown(g, false); + gfxSleepMilliseconds(10); + // software shutdown + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + gfxSleepMilliseconds(10); + // zero function page, all registers + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + gfxSleepMilliseconds(10); + + + // zero all LED registers on all 8 pages, and enable the mask + __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); + for(uint8_t i=0; i<8; i++) { + write_ram(g, i, 0, IS31_FRAME_SIZE); + gfxSleepMilliseconds(1); + } + + // software shutdown disable (i.e. turn stuff on) + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + gfxSleepMilliseconds(10); + + // Finish Init + post_init_board(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + PRIV(g)->page++; + PRIV(g)->page %= 2; + // TODO: some smarter algorithm for this + // We should run only one physical page at a time + // This way we don't need to send so much data, and + // we could use slightly less memory + uint8_t* src = PRIV(g)->frame_buffer; + for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; + ++src; + } + } + write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); + gfxSleepMilliseconds(1); + write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + break; + case powerOn: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h new file mode 100644 index 0000000000..bb28ad775e --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h @@ -0,0 +1,36 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk new file mode 100644 index 0000000000..16c3f80f53 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_lcd +GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c new file mode 100644 index 0000000000..babfe2b367 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 128 +#define GDISP_SCREEN_HEIGHT 32 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk new file mode 100644 index 0000000000..2554344321 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_led +GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c new file mode 100644 index 0000000000..b0ebcdc475 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h new file mode 100644 index 0000000000..290571ce5b --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h @@ -0,0 +1,127 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +#include "print.h" + +#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 +#define ST7565_ADC ST7565_ADC_NORMAL +#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC +#define ST7565_PAGE_ORDER 0,1,2,3 +/* + * Custom page order for several LCD boards, e.g. HEM12864-99 + * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 + */ + +#define ST7565_GPIOPORT GPIOC +#define ST7565_PORT PORTC +#define ST7565_A0_PIN 7 +#define ST7565_RST_PIN 8 +#define ST7565_MOSI_PIN 6 +#define ST7565_SLCK_PIN 5 +#define ST7565_SS_PIN 4 + +#define palSetPadModeRaw(portname, bits) \ + ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits + +#define palSetPadModeNamed(portname, portmode) \ + palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) + +#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) +// DSPI Clock and Transfer Attributes +// Frame Size: 8 bits +// MSB First +// CLK Low by default +static const SPIConfig spi1config = { + NULL, + /* HW dependent part.*/ + ST7565_GPIOPORT, + ST7565_SS_PIN, + SPIx_CTARn_FMSZ(7) + | SPIx_CTARn_ASC(7) + | SPIx_CTARn_DT(7) + | SPIx_CTARn_CSSCK(7) + | SPIx_CTARn_PBR(0) + | SPIx_CTARn_BR(7) + //SPI_CR1_BR_0 +}; + +static bool_t st7565_is_data_mode = 1; + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + st7565_is_data_mode = 1; + palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + palSetPadModeRaw(MOSI, ST7565_SPI_MODE); + palSetPadModeRaw(SLCK, ST7565_SPI_MODE); + palSetPadModeRaw(SS, ST7565_SPI_MODE); + + spiInit(); + spiStart(&SPID1, &spi1config); + spiSelect(&SPID1); +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { + (void) g; + if (state) { + palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } + else { + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } +} + +static GFXINLINE void acquire_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to acquire + // spiAcquireBus(&SPID1); +} + +static GFXINLINE void release_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to release + //spiReleaseBus(&SPID1); +} + +static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { + (void) g; + if (st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 0; + } + spiSend(&SPID1, 1, &cmd); +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + if (!st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 1; + } + spiSend(&SPID1, length, data); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk new file mode 100644 index 0000000000..889a1a0317 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/st7565ergodox +GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c new file mode 100644 index 0000000000..c33aea81a8 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c @@ -0,0 +1,292 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX +#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_ST7565.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 32 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 128 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#include "drivers/gdisp/st7565ergodox/st7565.h" + +/*===========================================================================*/ +/* Driver config defaults for backward compatibility. */ +/*===========================================================================*/ +#ifndef ST7565_LCD_BIAS + #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 +#endif +#ifndef ST7565_ADC + #define ST7565_ADC ST7565_ADC_NORMAL +#endif +#ifndef ST7565_COM_SCAN + #define ST7565_COM_SCAN ST7565_COM_SCAN_INC +#endif +#ifndef ST7565_PAGE_ORDER + #define ST7565_PAGE_ORDER 0,1,2,3 +#endif + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + bool_t buffer2; + uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; +}PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) +#define RAM(g) (PRIV(g)->ram) +#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } +#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } + +// Some common routines and macros +#define delay(us) gfxSleepMicroseconds(us) +#define delay_ms(ms) gfxSleepMilliseconds(ms) + +#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) +#define xybit(y) (1<<((y)&7)) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/* + * As this controller can't update on a pixel boundary we need to maintain the + * the entire display surface in memory so that we can do the necessary bit + * operations. Fortunately it is a small display in monochrome. + * 64 * 128 / 8 = 1024 bytes. + */ + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + PRIV(g)->buffer2 = false; + + // Initialise the board interface + init_board(g); + + // Hardware reset + setpin_reset(g, TRUE); + gfxSleepMilliseconds(20); + setpin_reset(g, FALSE); + gfxSleepMilliseconds(20); + + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + write_cmd(g, ST7565_LCD_BIAS); + write_cmd(g, ST7565_ADC); + write_cmd(g, ST7565_COM_SCAN); + + write_cmd(g, ST7565_START_LINE | 0); + + write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); + + // turn on voltage converter (VC=1, VR=0, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x04); + delay_ms(50); + + // turn on voltage regulator (VC=1, VR=1, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x06); + delay_ms(50); + + // turn on voltage follower (VC=1, VR=1, VF=1) + write_cmd(g, ST7565_POWER_CONTROL | 0x07); + delay_ms(50); + + write_cmd(g, 0xE2); + write_cmd(g, ST7565_COM_SCAN); + write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); + //write_cmd2(g, ST7565_CONTRAST, 0); + write_cmd(g, ST7565_DISPLAY_ON); + write_cmd(g, ST7565_ALLON_NORMAL); + write_cmd(g, ST7565_INVERT_DISPLAY); + + write_cmd(g, ST7565_RMW); + + // Finish Init + post_init_board(g); + + // Release the bus + release_bus(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + unsigned p; + + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + acquire_bus(g); + unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); + for (p = 0; p < 4; p++) { + write_cmd(g, ST7565_PAGE | (p + dstOffset)); + write_cmd(g, ST7565_COLUMN_MSB | 0); + write_cmd(g, ST7565_COLUMN_LSB | 0); + write_cmd(g, ST7565_RMW); + write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); + } + unsigned line = (PRIV(g)->buffer2 ? 32 : 0); + write_cmd(g, ST7565_START_LINE | line); + PRIV(g)->buffer2 = !PRIV(g)->buffer2; + release_bus(g); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + if (gdispColor2Native(g->p.color) != Black) + RAM(g)[xyaddr(x, y)] |= xybit(y); + else + RAM(g)[xyaddr(x, y)] &= ~xybit(y); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + release_bus(g); + break; + case powerOn: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_ON); + release_bus(g); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + if ((unsigned)g->p.ptr > 100) + g->p.ptr = (void *)100; + acquire_bus(g); + write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); + release_bus(g); + g->g.Contrast = (unsigned)g->p.ptr; + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h new file mode 100644 index 0000000000..48587b9e14 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h @@ -0,0 +1,26 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h new file mode 100644 index 0000000000..48636b33d6 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h @@ -0,0 +1,37 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _ST7565_H +#define _ST7565_H + +#define ST7565_CONTRAST 0x81 +#define ST7565_ALLON_NORMAL 0xA4 +#define ST7565_ALLON 0xA5 +#define ST7565_POSITIVE_DISPLAY 0xA6 +#define ST7565_INVERT_DISPLAY 0xA7 +#define ST7565_DISPLAY_OFF 0xAE +#define ST7565_DISPLAY_ON 0xAF + +#define ST7565_LCD_BIAS_7 0xA3 +#define ST7565_LCD_BIAS_9 0xA2 + +#define ST7565_ADC_NORMAL 0xA0 +#define ST7565_ADC_REVERSE 0xA1 + +#define ST7565_COM_SCAN_INC 0xC0 +#define ST7565_COM_SCAN_DEC 0xC8 + +#define ST7565_START_LINE 0x40 +#define ST7565_PAGE 0xB0 +#define ST7565_COLUMN_MSB 0x10 +#define ST7565_COLUMN_LSB 0x00 +#define ST7565_RMW 0xE0 + +#define ST7565_RESISTOR_RATIO 0x20 +#define ST7565_POWER_CONTROL 0x28 + +#endif /* _ST7565_H */ diff --git a/keyboards/ergodox/infinity/gfxconf.h b/keyboards/ergodox/infinity/gfxconf.h new file mode 100644 index 0000000000..8caa577b73 --- /dev/null +++ b/keyboards/ergodox/infinity/gfxconf.h @@ -0,0 +1,331 @@ +/** + * This file has a different license to the rest of the uGFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +/** + * Copy this file into your project directory and rename it as gfxconf.h + * Edit your copy to turn on the uGFX features you want to use. + * The values below are the defaults. + * + * Only remove the comments from lines where you want to change the + * default value. This allows definitions to be included from + * driver makefiles when required and provides the best future + * compatibility for your project. + * + * Please use spaces instead of tabs in this file. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + + +/////////////////////////////////////////////////////////////////////////// +// GOS - One of these must be defined, preferably in your Makefile // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_USE_OS_CHIBIOS TRUE +//#define GFX_USE_OS_FREERTOS FALSE +// #define GFX_FREERTOS_USE_TRACE FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE +//#define GFX_USE_OS_ECOS FALSE +//#define GFX_USE_OS_RAWRTOS FALSE +//#define GFX_USE_OS_ARDUINO FALSE +//#define GFX_USE_OS_KEIL FALSE +//#define GFX_USE_OS_CMSIS FALSE +//#define GFX_USE_OS_RAW32 FALSE +// #define INTERRUPTS_OFF() optional_code +// #define INTERRUPTS_ON() optional_code +// These are not defined by default for some reason +#define GOS_NEED_X_THREADS FALSE +#define GOS_NEED_X_HEAP FALSE + +// Options that (should where relevant) apply to all operating systems + #define GFX_NO_INLINE FALSE +// #define GFX_COMPILER GFX_COMPILER_UNKNOWN +// #define GFX_CPU GFX_CPU_UNKNOWN +// #define GFX_OS_HEAP_SIZE 0 +// #define GFX_OS_NO_INIT FALSE +// #define GFX_OS_INIT_NO_WARNING FALSE +// #define GFX_OS_PRE_INIT_FUNCTION myHardwareInitRoutine +// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine +// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine + + +/////////////////////////////////////////////////////////////////////////// +// GDISP // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GDISP TRUE + +//#define GDISP_NEED_AUTOFLUSH FALSE +//#define GDISP_NEED_TIMERFLUSH FALSE +//#define GDISP_NEED_VALIDATION TRUE +//#define GDISP_NEED_CLIP TRUE +#define GDISP_NEED_CIRCLE TRUE +#define GDISP_NEED_ELLIPSE TRUE +#define GDISP_NEED_ARC TRUE +#define GDISP_NEED_ARCSECTORS TRUE +#define GDISP_NEED_CONVEX_POLYGON TRUE +//#define GDISP_NEED_SCROLL FALSE +#define GDISP_NEED_PIXELREAD TRUE +#define GDISP_NEED_CONTROL TRUE +//#define GDISP_NEED_QUERY FALSE +//#define GDISP_NEED_MULTITHREAD FALSE +//#define GDISP_NEED_STREAMING FALSE +#define GDISP_NEED_TEXT TRUE +// #define GDISP_NEED_TEXT_WORDWRAP FALSE +// #define GDISP_NEED_ANTIALIAS FALSE +// #define GDISP_NEED_UTF8 FALSE + #define GDISP_NEED_TEXT_KERNING TRUE +// #define GDISP_INCLUDE_FONT_UI1 FALSE +// #define GDISP_INCLUDE_FONT_UI2 FALSE // The smallest preferred font. +// #define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE + #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 TRUE +// #define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE +// #define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE + #define GDISP_INCLUDE_FONT_FIXED_5X8 TRUE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE +// #define GDISP_INCLUDE_USER_FONTS FALSE + +//#define GDISP_NEED_IMAGE FALSE +// #define GDISP_NEED_IMAGE_NATIVE FALSE +// #define GDISP_NEED_IMAGE_GIF FALSE +// #define GDISP_NEED_IMAGE_BMP FALSE +// #define GDISP_NEED_IMAGE_BMP_1 FALSE +// #define GDISP_NEED_IMAGE_BMP_4 FALSE +// #define GDISP_NEED_IMAGE_BMP_4_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_8 FALSE +// #define GDISP_NEED_IMAGE_BMP_8_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_16 FALSE +// #define GDISP_NEED_IMAGE_BMP_24 FALSE +// #define GDISP_NEED_IMAGE_BMP_32 FALSE +// #define GDISP_NEED_IMAGE_JPG FALSE +// #define GDISP_NEED_IMAGE_PNG FALSE +// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE +#ifdef EMULATOR +#define GDISP_NEED_PIXMAP TRUE +#endif +// #define GDISP_NEED_PIXMAP_IMAGE FALSE + +//#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE // If not defined the native hardware orientation is used. +//#define GDISP_LINEBUF_SIZE 128 +//#define GDISP_STARTUP_COLOR Black +#define GDISP_NEED_STARTUP_LOGO FALSE + +//#define GDISP_TOTAL_DISPLAYS 2 + +#ifndef EMULATOR +#define GDISP_DRIVER_LIST GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX +#else +#define GDISP_DRIVER_LIST GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX +#endif + + #ifdef GDISP_DRIVER_LIST + // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability + #define GDISP_HARDWARE_STREAM_WRITE FALSE + #define GDISP_HARDWARE_STREAM_READ FALSE + #define GDISP_HARDWARE_STREAM_POS FALSE + #define GDISP_HARDWARE_DRAWPIXEL TRUE + #define GDISP_HARDWARE_CLEARS FALSE + #define GDISP_HARDWARE_FILLS FALSE + #define GDISP_HARDWARE_BITFILLS FALSE + #define GDISP_HARDWARE_SCROLL FALSE + #define GDISP_HARDWARE_PIXELREAD TRUE + #define GDISP_HARDWARE_CONTROL TRUE + #define GDISP_HARDWARE_QUERY FALSE + #define GDISP_HARDWARE_CLIP FALSE + + #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888 + #endif + +// The custom format is not defined for some reason, so define it as error +// so we don't get compiler warnings +#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR + +#define GDISP_USE_GFXNET FALSE +// #define GDISP_GFXNET_PORT 13001 +// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE +// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE +// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GWIN // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GWIN FALSE + +//#define GWIN_NEED_WINDOWMANAGER FALSE +// #define GWIN_REDRAW_IMMEDIATE FALSE +// #define GWIN_REDRAW_SINGLEOP FALSE +// #define GWIN_NEED_FLASHING FALSE +// #define GWIN_FLASHING_PERIOD 250 + +//#define GWIN_NEED_CONSOLE FALSE +// #define GWIN_CONSOLE_USE_HISTORY FALSE +// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE +// #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE +// #define GWIN_CONSOLE_ESCSEQ FALSE +// #define GWIN_CONSOLE_USE_BASESTREAM FALSE +// #define GWIN_CONSOLE_USE_FLOAT FALSE +//#define GWIN_NEED_GRAPH FALSE +//#define GWIN_NEED_GL3D FALSE + +//#define GWIN_NEED_WIDGET FALSE +//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1 +// #define GWIN_NEED_LABEL FALSE +// #define GWIN_LABEL_ATTRIBUTE FALSE +// #define GWIN_NEED_BUTTON FALSE +// #define GWIN_BUTTON_LAZY_RELEASE FALSE +// #define GWIN_NEED_SLIDER FALSE +// #define GWIN_SLIDER_NOSNAP FALSE +// #define GWIN_SLIDER_DEAD_BAND 5 +// #define GWIN_SLIDER_TOGGLE_INC 20 +// #define GWIN_NEED_CHECKBOX FALSE +// #define GWIN_NEED_IMAGE FALSE +// #define GWIN_NEED_IMAGE_ANIMATION FALSE +// #define GWIN_NEED_RADIO FALSE +// #define GWIN_NEED_LIST FALSE +// #define GWIN_NEED_LIST_IMAGES FALSE +// #define GWIN_NEED_PROGRESSBAR FALSE +// #define GWIN_PROGRESSBAR_AUTO FALSE +// #define GWIN_NEED_KEYBOARD FALSE +// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1 +// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE +// #define GWIN_NEED_TEXTEDIT FALSE +// #define GWIN_FLAT_STYLING FALSE +// #define GWIN_WIDGET_TAGS FALSE + +//#define GWIN_NEED_CONTAINERS FALSE +// #define GWIN_NEED_CONTAINER FALSE +// #define GWIN_NEED_FRAME FALSE +// #define GWIN_NEED_TABSET FALSE +// #define GWIN_TABSET_TABHEIGHT 18 + + +/////////////////////////////////////////////////////////////////////////// +// GEVENT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GEVENT TRUE + +//#define GEVENT_ASSERT_NO_RESOURCE FALSE +//#define GEVENT_MAXIMUM_SIZE 32 +//#define GEVENT_MAX_SOURCE_LISTENERS 32 + + +/////////////////////////////////////////////////////////////////////////// +// GTIMER // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GTIMER FALSE + +//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY +//#define GTIMER_THREAD_WORKAREA_SIZE 2048 + + +/////////////////////////////////////////////////////////////////////////// +// GQUEUE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GQUEUE FALSE + +//#define GQUEUE_NEED_ASYNC FALSE +//#define GQUEUE_NEED_GSYNC FALSE +//#define GQUEUE_NEED_FSYNC FALSE +//#define GQUEUE_NEED_BUFFERS FALSE + +/////////////////////////////////////////////////////////////////////////// +// GINPUT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GINPUT FALSE + +//#define GINPUT_NEED_MOUSE FALSE +// #define GINPUT_TOUCH_STARTRAW FALSE +// #define GINPUT_TOUCH_NOTOUCH FALSE +// #define GINPUT_TOUCH_NOCALIBRATE FALSE +// #define GINPUT_TOUCH_NOCALIBRATE_GUI FALSE +// #define GINPUT_MOUSE_POLL_PERIOD 25 +// #define GINPUT_MOUSE_CLICK_TIME 300 +// #define GINPUT_TOUCH_CXTCLICK_TIME 700 +// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE +// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE +// #define GMOUSE_DRIVER_LIST GMOUSEVMT_Win32, GMOUSEVMT_Win32 +//#define GINPUT_NEED_KEYBOARD FALSE +// #define GINPUT_KEYBOARD_POLL_PERIOD 200 +// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 +// #define GKEYBOARD_LAYOUT_OFF FALSE +// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE +//#define GINPUT_NEED_TOGGLE FALSE +//#define GINPUT_NEED_DIAL FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GFILE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GFILE FALSE + +//#define GFILE_NEED_PRINTG FALSE +//#define GFILE_NEED_SCANG FALSE +//#define GFILE_NEED_STRINGS FALSE +//#define GFILE_NEED_FILELISTS FALSE +//#define GFILE_NEED_STDIO FALSE +//#define GFILE_NEED_NOAUTOMOUNT FALSE +//#define GFILE_NEED_NOAUTOSYNC FALSE + +//#define GFILE_NEED_MEMFS FALSE +//#define GFILE_NEED_ROMFS FALSE +//#define GFILE_NEED_RAMFS FALSE +//#define GFILE_NEED_FATFS FALSE +//#define GFILE_NEED_NATIVEFS FALSE +//#define GFILE_NEED_CHBIOSFS FALSE + +//#define GFILE_ALLOW_FLOATS FALSE +//#define GFILE_ALLOW_DEVICESPECIFIC FALSE +//#define GFILE_MAX_GFILES 3 + +/////////////////////////////////////////////////////////////////////////// +// GADC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GADC FALSE + +//#define GADC_MAX_LOWSPEED_DEVICES 4 + + +/////////////////////////////////////////////////////////////////////////// +// GAUDIO // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GAUDIO FALSE +// There seems to be a bug in the ugfx code, the wrong define is used +// So define it in order to avoid warnings +#define GFX_USE_GAUDIN GFX_USE_GAUDIO +// #define GAUDIO_NEED_PLAY FALSE +// #define GAUDIO_NEED_RECORD FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GMISC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GMISC TRUE + +//#define GMISC_NEED_ARRAYOPS FALSE +//#define GMISC_NEED_FASTTRIG FALSE +//#define GMISC_NEED_FIXEDTRIG FALSE +//#define GMISC_NEED_INVSQRT FALSE +// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE +// #define GMISC_INVSQRT_REAL_SLOW FALSE +#define GMISC_NEED_MATRIXFLOAT2D TRUE +#define GMISC_NEED_MATRIXFIXED2D FALSE + +#endif /* _GFXCONF_H */ diff --git a/keyboards/ergodox/infinity/halconf.h b/keyboards/ergodox/infinity/halconf.h new file mode 100644 index 0000000000..55dd5e88da --- /dev/null +++ b/keyboards/ergodox/infinity/halconf.h @@ -0,0 +1,353 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C TRUE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL TRUE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB TRUE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI TRUE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 128 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c new file mode 100644 index 0000000000..87ed40fabf --- /dev/null +++ b/keyboards/ergodox/infinity/infinity.c @@ -0,0 +1,76 @@ +#include "infinity_ergodox.h" +#include "ch.h" +#include "hal.h" +#include "serial_link/system/serial_link.h" +#include "lcd_backlight.h" + +void init_serial_link_hal(void) { + PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2); + PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2); + PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3); + PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3); +} + +#define RED_PIN 1 +#define GREEN_PIN 2 +#define BLUE_PIN 3 +#define CHANNEL_RED FTM0->CHANNEL[0] +#define CHANNEL_GREEN FTM0->CHANNEL[1] +#define CHANNEL_BLUE FTM0->CHANNEL[2] + +#define RGB_PORT PORTC +#define RGB_PORT_GPIO GPIOC + +// Base FTM clock selection (72 MHz system clock) +// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period +// Higher pre-scalar will use the most power (also look the best) +// Pre-scalar calculations +// 0 - 72 MHz -> 549 Hz +// 1 - 36 MHz -> 275 Hz +// 2 - 18 MHz -> 137 Hz +// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) +// 4 - 4 500 kHz -> 34 Hz (Visible flickering) +// 5 - 2 250 kHz -> 17 Hz +// 6 - 1 125 kHz -> 9 Hz +// 7 - 562 500 Hz -> 4 Hz +// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced +// Which will reduce the brightness range +#define PRESCALAR_DEFINE 0 + +void lcd_backlight_hal_init(void) { + // Setup Backlight + SIM->SCGC6 |= SIM_SCGC6_FTM0; + FTM0->CNT = 0; // Reset counter + + // PWM Period + // 16-bit maximum + FTM0->MOD = 0xFFFF; + + // Set FTM to PWM output - Edge Aligned, Low-true pulses +#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) + CHANNEL_RED.CnSC = CNSC_MODE; + CHANNEL_GREEN.CnSC = CNSC_MODE; + CHANNEL_BLUE.CnSC = CNSC_MODE; + + // System clock, /w prescalar setting + FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); + + CHANNEL_RED.CnV = 0; + CHANNEL_GREEN.CnV = 0; + CHANNEL_BLUE.CnV = 0; + + RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); + RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); + RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); + +#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) + RGB_PORT->PCR[RED_PIN] = RGB_MODE; + RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; + RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; +} + +void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { + CHANNEL_RED.CnV = r; + CHANNEL_GREEN.CnV = g; + CHANNEL_BLUE.CnV = b; +} diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h new file mode 100644 index 0000000000..de72675946 --- /dev/null +++ b/keyboards/ergodox/infinity/infinity.h @@ -0,0 +1,44 @@ +#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ +#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ + +#include "quantum.h" + +#define KEYMAP( \ + A80, A70, A60, A50, A40, A30, A20, \ + A81, A71, A61, A51, A41, A31, A21, \ + A82, A72, A62, A52, A42, A32, \ + A83, A73, A63, A53, A43, A33, A23, \ + A84, A74, A64, A54, A44, \ + A13, A03, \ + A04, \ + A34, A24, A14, \ + B20, B30, B40, B50, B60, B70, B80, \ + B21, B31, B41, B51, B61, B71, B81, \ + B32, B42, B52, B62, B72, B82, \ + B23, B33, B43, B53, B63, B73, B83, \ + B44, B54, B64, B74, B84, \ + B03, B13, \ + B04, \ + B14, B24, B34 \ +) { \ + { KC_NO, KC_NO, KC_NO, KC_##A03, KC_##A04 }, \ + { KC_NO, KC_NO, KC_NO, KC_##A13, KC_##A14 }, \ + { KC_##A20, KC_##A21, KC_NO, KC_##A23, KC_##A24 }, \ + { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \ + { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \ + { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \ + { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \ + { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \ + { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \ + { KC_NO, KC_NO, KC_NO, KC_##B03, KC_##B04 }, \ + { KC_NO, KC_NO, KC_NO, KC_##B13, KC_##B14 }, \ + { KC_##B20, KC_##B21, KC_NO, KC_##B23, KC_##B24 }, \ + { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \ + { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \ + { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \ + { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \ + { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \ + { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 } \ +} + +#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */ diff --git a/keyboards/ergodox/infinity/keymaps/default/keymap.c b/keyboards/ergodox/infinity/keymaps/default/keymap.c new file mode 100644 index 0000000000..f1e6b1c8ae --- /dev/null +++ b/keyboards/ergodox/infinity/keymaps/default/keymap.c @@ -0,0 +1,114 @@ +/* +Copyright 2016 Fred Sundvik +Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "infinity_ergodox.h" + +// Workaround for old keymap format +#define KC_RESET RESET + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + KEYMAP( // layer 0 : default + // left hand + EQL, 1, 2, 3, 4, 5, ESC, + BSLS,Q, W, E, R, T, FN1, + TAB, A, S, D, F, G, + LSFT,Z, X, C, V, B, FN0, + LGUI,GRV, BSLS,LEFT,RGHT, + LCTL,LALT, + HOME, + BSPC,DEL, END, + // right hand + FN2, 6, 7, 8, 9, 0, MINS, + LBRC,Y, U, I, O, P, RBRC, + H, J, K, L, SCLN,QUOT, + FN0, N, M, COMM,DOT, SLSH,RSFT, + LEFT,DOWN,UP, RGHT,RGUI, + RALT,RCTL, + PGUP, + PGDN,ENT, SPC + ), + + KEYMAP( // layer 1 : function and symbol keys + // left hand + TRNS,F1, F2, F3, F4, F5, F11, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + F12, F6, F7, F8, F9, F10, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // layer 2 : keyboard functions + // left hand + RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // layer 3: numpad + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC, + TRNS,NO, P7, P8, P9, PMNS,BSPC, + NO, P4, P5, P6, PPLS,PENT, + TRNS,NO, P1, P2, P3, PPLS,PENT, + P0, PDOT,SLSH,PENT,PENT, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), +}; +const uint16_t fn_actions[] = { + ACTION_LAYER_MOMENTARY(1), // FN0 - switch to Layer1 + ACTION_LAYER_SET(2, ON_PRESS), // FN1 - set Layer2 + ACTION_LAYER_TOGGLE(3), // FN2 - toggle Layer3 aka Numpad layer + ACTION_LAYER_SET(0, ON_PRESS), // FN3 - set Layer0 +}; diff --git a/keyboards/ergodox/infinity/keymaps/default/visualizer.c b/keyboards/ergodox/infinity/keymaps/default/visualizer.c new file mode 100644 index 0000000000..c0d335ce6a --- /dev/null +++ b/keyboards/ergodox/infinity/keymaps/default/visualizer.c @@ -0,0 +1,168 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Currently we are assuming that both the backlight and LCD are enabled +// But it's entirely possible to write a custom visualizer that use only +// one of them +#ifndef LCD_BACKLIGHT_ENABLE +#error This visualizer needs that LCD backlight is enabled +#endif + +#ifndef LCD_ENABLE +#error This visualizer needs that LCD is enabled +#endif + +#include "visualizer.h" +#include "led_test.h" + +static const char* welcome_text[] = {"TMK", "Infinity Ergodox"}; + +// Just an example how to write custom keyframe functions, we could have moved +// all this into the init function +bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + // Read the uGFX documentation for information how to use the displays + // http://wiki.ugfx.org/index.php/Main_Page + gdispClear(White); + // You can use static variables for things that can't be found in the animation + // or state structs + gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black); + gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black); + // Always remember to flush the display + gdispFlush(); + // you could set the backlight color as well, but we won't do it here, since + // it's part of the following animation + // lcd_backlight_color(hue, saturation, intensity); + // We don't need constant updates, just drawing the screen once is enough + return false; +} + +// Feel free to modify the animations below, or even add new ones if needed + +// Don't worry, if the startup animation is long, you can use the keyboard like normal +// during that time +static keyframe_animation_t startup_animation = { + .num_frames = 4, + .loop = false, + .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, + .frame_functions = { + display_welcome, + keyframe_animate_backlight_color, + keyframe_no_operation, + enable_visualization + }, +}; + +// The color animation animates the LCD color when you change layers +static keyframe_animation_t color_animation = { + .num_frames = 2, + .loop = false, + // Note that there's a 200 ms no-operation frame, + // this prevents the color from changing when activating the layer + // momentarily + .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)}, + .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, +}; + +// The LCD animation alternates between the layer name display and a +// bitmap that displays all active layers +static keyframe_animation_t lcd_animation = { + .num_frames = 2, + .loop = true, + .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)}, + .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap}, +}; + +static keyframe_animation_t suspend_animation = { + .num_frames = 3, + .loop = false, + .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0}, + .frame_functions = { + keyframe_display_layer_text, + keyframe_animate_backlight_color, + keyframe_disable_lcd_and_backlight, + }, +}; + +static keyframe_animation_t resume_animation = { + .num_frames = 5, + .loop = false, + .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, + .frame_functions = { + keyframe_enable_lcd_and_backlight, + display_welcome, + keyframe_animate_backlight_color, + keyframe_no_operation, + enable_visualization, + }, +}; + +void initialize_user_visualizer(visualizer_state_t* state) { + // The brightness will be dynamically adjustable in the future + // But for now, change it here. + lcd_backlight_brightness(0x50); + state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF); + state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); + start_keyframe_animation(&startup_animation); + start_keyframe_animation(&led_test_animation); +} + +void update_user_visualizer_state(visualizer_state_t* state) { + // Add more tests, change the colors and layer texts here + // Usually you want to check the high bits (higher layers first) + // because that's the order layers are processed for keypresses + // You can for check for example: + // state->status.layer + // state->status.default_layer + // state->status.leds (see led.h for available statuses) + if (state->status.layer & 0x8) { + state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF); + state->layer_text = "Numpad"; + } + else if (state->status.layer & 0x4) { + state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF); + state->layer_text = "KBD functions"; + } + else if (state->status.layer & 0x2) { + state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF); + state->layer_text = "Function keys"; + } + else { + state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF); + state->layer_text = "Default"; + } + // You can also stop existing animations, and start your custom ones here + // remember that you should normally have only one animation for the LCD + // and one for the background. But you can also combine them if you want. + start_keyframe_animation(&lcd_animation); + start_keyframe_animation(&color_animation); +} + +void user_visualizer_suspend(visualizer_state_t* state) { + state->layer_text = "Suspending..."; + uint8_t hue = LCD_HUE(state->current_lcd_color); + uint8_t sat = LCD_SAT(state->current_lcd_color); + state->target_lcd_color = LCD_COLOR(hue, sat, 0); + start_keyframe_animation(&suspend_animation); +} + +void user_visualizer_resume(visualizer_state_t* state) { + state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00); + state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); + start_keyframe_animation(&resume_animation); + start_keyframe_animation(&led_test_animation); +} diff --git a/keyboards/ergodox/infinity/led.c b/keyboards/ergodox/infinity/led.c new file mode 100644 index 0000000000..77195bb358 --- /dev/null +++ b/keyboards/ergodox/infinity/led.c @@ -0,0 +1,49 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "hal.h" + +#include "led.h" + + +void led_set(uint8_t usb_led) { +// The LCD backlight functionality conflicts with this simple +// red backlight +#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE) + // PTC1: LCD Backlight Red(0:on/1:off) + GPIOC->PDDR |= (1<<1); + PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + if (usb_led & (1<PCOR |= (1<<1); + } else { + GPIOC->PSOR |= (1<<1); + } +#elif !defined(LCD_BACKLIGHT_ENABLE) + (void)usb_led; + GPIOC->PDDR |= (1<<1); + PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<1); + GPIOC->PDDR |= (1<<2); + PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<2); + GPIOC->PDDR |= (1<<3); + PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<3); +#else + (void)usb_led; +#endif +} diff --git a/keyboards/ergodox/infinity/matrix.c b/keyboards/ergodox/infinity/matrix.c new file mode 100644 index 0000000000..2b806cd649 --- /dev/null +++ b/keyboards/ergodox/infinity/matrix.c @@ -0,0 +1,169 @@ +/* +Copyright 2016 Fred Sundvik +Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#include +#include +#include +#include "hal.h" +#include "timer.h" +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "matrix.h" + + +/* + * Infinity ErgoDox Pinusage: + * Column pins are input with internal pull-down. Row pins are output and strobe with high. + * Key is high or 1 when it turns on. + * + * col: { PTD1, PTD4, PTD5, PTD6, PTD7 } + * row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 } + */ +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS]; +static bool debouncing = false; +static uint16_t debouncing_time = 0; + + +void matrix_init(void) +{ + /* Column(sense) */ + palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); + + /* Row(strobe) */ + palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); + + memset(matrix, 0, MATRIX_ROWS); + memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS); +} + +uint8_t matrix_scan(void) +{ + for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { + matrix_row_t data = 0; + + // strobe row + switch (row) { + case 0: palSetPad(GPIOB, 2); break; + case 1: palSetPad(GPIOB, 3); break; + case 2: palSetPad(GPIOB, 18); break; + case 3: palSetPad(GPIOB, 19); break; + case 4: palSetPad(GPIOC, 0); break; + case 5: palSetPad(GPIOC, 9); break; + case 6: palSetPad(GPIOC, 10); break; + case 7: palSetPad(GPIOC, 11); break; + case 8: palSetPad(GPIOD, 0); break; + } + + // need wait to settle pin state + // if you wait too short, or have a too high update rate + // the keyboard might freeze, or there might not be enough + // processing power to update the LCD screen properly. + // 20us, or two ticks at 100000Hz seems to be OK + wait_us(20); + + // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 } + data = ((palReadPort(GPIOD) & 0xF0) >> 3) | + ((palReadPort(GPIOD) & 0x02) >> 1); + + // un-strobe row + switch (row) { + case 0: palClearPad(GPIOB, 2); break; + case 1: palClearPad(GPIOB, 3); break; + case 2: palClearPad(GPIOB, 18); break; + case 3: palClearPad(GPIOB, 19); break; + case 4: palClearPad(GPIOC, 0); break; + case 5: palClearPad(GPIOC, 9); break; + case 6: palClearPad(GPIOC, 10); break; + case 7: palClearPad(GPIOC, 11); break; + case 8: palClearPad(GPIOD, 0); break; + } + + if (matrix_debouncing[row] != data) { + matrix_debouncing[row] = data; + debouncing = true; + debouncing_time = timer_read(); + } + } + + uint8_t offset = 0; +#ifdef MASTER_IS_ON_RIGHT + if (is_serial_link_master()) { + offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS; + } +#endif + + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { + matrix[offset + row] = matrix_debouncing[row]; + } + debouncing = false; + } + return 1; +} + +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & (1<", + { + "x": 10.5 + }, + "I" + ], + [ + { + "y": -0.8799999999999999, + "x": 2.5 + }, + "W" + ], + [ + { + "y": -0.9950000000000001, + "x": 4.5, + "a": 4 + }, + "R", + { + "x": 8.5, + "a": 7 + }, + "U", + { + "x": 1 + }, + "O" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "T", + { + "h": 1.5 + }, + "", + { + "x": 4.5, + "h": 1.5 + }, + "", + "Y" + ], + [ + { + "y": -0.875, + "a": 6, + "w": 1.5 + }, + "Tab", + { + "a": 7 + }, + "Q", + { + "x": 14.5 + }, + "P", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "a": 7 + }, + "D\n\n\n\n", + { + "x": 10.5 + }, + "K" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "S\n\n\n\n", + { + "x": 1, + "c": "#c4bcbc" + }, + "F\n\n\n\n", + { + "x": 8.5 + }, + "J", + { + "x": 1, + "c": "#cccccc" + }, + "L" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "G", + { + "x": 6.5 + }, + "H" + ], + [ + { + "y": -0.875, + "a": 4, + "fa": [ + 0, + 0, + 0, + 2 + ], + "w": 1.5 + }, + "\n\n\nCtrl\n\n\nCaps", + { + "a": 7 + }, + "A", + { + "x": 14.5, + "a": 4 + }, + ":\n;", + { + "a": 7, + "w": 1.5 + }, + "Enter" + ], + [ + { + "y": -0.625, + "x": 6.5, + "h": 1.5 + }, + "PgDn", + { + "x": 4.5, + "h": 1.5 + }, + "PgUp" + ], + [ + { + "y": -0.75, + "x": 3.5 + }, + "C\n\n\n\n", + { + "x": 10.5, + "a": 4 + }, + "<\n," + ], + [ + { + "y": -0.875, + "x": 2.5, + "a": 7 + }, + "X\n\n\n\n", + { + "x": 1 + }, + "V\n\n\n\n", + { + "x": 8.5 + }, + "M", + { + "x": 1, + "a": 4 + }, + ">\n." + ], + [ + { + "y": -0.875, + "x": 5.5, + "a": 7 + }, + "B", + { + "x": 6.5 + }, + "N" + ], + [ + { + "y": -0.875, + "w": 1.5 + }, + "Shift", + "Z", + { + "x": 14.5, + "a": 4 + }, + "?\n/", + { + "w": 1.5 + }, + "\"\n'" + ], + [ + { + "y": -0.375, + "x": 3.5, + "a": 7 + }, + "Alt\n\n\n\n", + { + "x": 10.5 + }, + "\n\n\n\n" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "\n\n\n\n", + { + "x": 1 + }, + "Alt\n\n\n\n", + { + "x": 8.5 + }, + "\n\n\n\n", + { + "x": 1 + }, + "\n\n\n\n" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "Ctrl\n\n\n\n", + "Esc", + { + "x": 14.5 + }, + "\n\n\n\n", + "Fn" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1 + }, + "", + "(" + ], + [ + { + "h": 2 + }, + "Space", + { + "h": 2 + }, + "Del", + "[" + ], + [ + { + "x": 2 + }, + "{" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + ")", + "" + ], + [ + { + "x": -3 + }, + "]", + { + "h": 2 + }, + "Enter", + { + "h": 2 + }, + "" + ], + [ + { + "x": -3 + }, + "}" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/ab/keyboard-layout.png b/keyboards/ergodox/keymaps/ab/keyboard-layout.png new file mode 100644 index 0000000000..740684461e Binary files /dev/null and b/keyboards/ergodox/keymaps/ab/keyboard-layout.png differ diff --git a/keyboards/ergodox/keymaps/ab/keymap.c b/keyboards/ergodox/keymaps/ab/keymap.c new file mode 100644 index 0000000000..df6f334600 --- /dev/null +++ b/keyboards/ergodox/keymaps/ab/keymap.c @@ -0,0 +1,155 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define FN1 1 // media layer + +#define CAPS_CTL CTL_T(KC_CAPS) // Caps on tap, Ctrl on hold. +#define COPY LCTL(KC_V) // C-c Copy +#define PASTE LCTL(KC_V) // C-v Paste +#define ZM_NRM LCTL(KC_0) // C-0 Zoom Normal +#define ZM_OUT LCTL(KC_MINS) // C-- Zoom Out +#define ZM_IN LCTL(KC_PLUS) // C-+ Zoom In +#define EM_UNDO LCTL(KC_UNDS) // C-_ Emacs Undo + +#define _MOB 1 // Mobile# +#define _CUS1 2 // Custom macro 1 +#define _CUS2 3 // Custom macro 2 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BSpace | + * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | Fwd | | Back | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Caps/Ctl| A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | + * |--------+------+------+------+------+------| PgDn | | PgUp |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | ' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Ctrl | Esc | LGui | Alt | Alt | | Left | Dn | Up | Right| Fn | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Copy | ( | | ) | Paste| + * ,------|------+------| |------+------+------. + * | | | [ | | ] | | | + * |Space | Del |------| |------| Enter|BSpace| + * | | | { | | } | | | + * `--------------------' `--------------------' + */ +// 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_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_WBAK, + CAPS_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN, + KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, KC_LALT, + COPY, KC_LCBR, + KC_LPRN, + KC_SPC, KC_DEL, KC_LBRC, + // Right hand + KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_WFWD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_PGUP, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(FN1), + KC_RCBR, PASTE, + KC_RPRN, + KC_RBRC, KC_ENT, KC_BSPC), +/* Keymap 1: Fn Keys, media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | BSpace | + * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | LClk | MClk | RClk | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Teensy| | ZmNrm| ZmOut| ZmIn | | Undo |VolDn |VolUp | Mute | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------+------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// FN1 Layer + [FN1] = KEYMAP( + // Left hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + 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_BTN1, KC_BTN3, KC_BTN2, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, ZM_NRM, ZM_OUT, ZM_IN, + KC_TRNS, KC_TRNS, + KC_TRNS, + RESET, KC_TRNS, KC_TRNS, + // Right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, + KC_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, M(_MOB), KC_TRNS, M(_CUS1),M(_CUS2),KC_TRNS, KC_TRNS, + EM_UNDO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, 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 _MOB: // Your mobile# here. + return MACRODOWN(T(1), T(2), T(3), T(MINS), + T(1), T(2), T(3), T(MINS), + T(1), T(2), T(3), T(4), + END); + case _CUS1: // Your custom macro 1 + return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(SPC), END); + case _CUS2: // Your custom macro 2 + return MACRODOWN(T(L), T(S), T(SPC), T(MINS), T(L), T(ENT), END); + }; + 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/keyboards/ergodox/keymaps/ab/readme.md b/keyboards/ergodox/keymaps/ab/readme.md new file mode 100644 index 0000000000..6b1ac2be35 --- /dev/null +++ b/keyboards/ergodox/keymaps/ab/readme.md @@ -0,0 +1,21 @@ +# Beginner's keymap for Ergodox-EZ +Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps. + +![Beginner's Keymap](keyboard-layout.png) + +#### Pros +* Easier to switch between regular keyboards and Ergodox-EZ. +* Easy on beginners. It has everything you need for your day to day usage. + +#### Cons +* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md) +* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys. + +#### Notes +* Ideally number key [6] should have started from the right-hand side of the keyboard. Doing so breaks the familiar QWERTY layout. +* Quote key ['] should have been placed between [:] and [Enter]. Due to lack of key space, it is placed below [Enter]. +* Double [Alt] keys are placed adjacent to each other for convenience. +* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users. +* Additional bracket keys are placed in the center of the keyboard for programmer's convenience. + + diff --git a/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c new file mode 100644 index 0000000000..052517d70e --- /dev/null +++ b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c @@ -0,0 +1,185 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_german.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 | K | . | O | , | Y | L1 | | L1 | V | G | C | L | ß | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | H | A | E | I | U |------| |------| D | T | R | N | S | F | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M | J | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Enter |------| |------| Tab |RShift| + * | | | 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, DE_K, DE_DOT, DE_O, DE_COMM,DE_Y, TG(SYMB), + KC_BSPC, DE_H, DE_A, DE_E, DE_I, DE_U, + KC_LSFT, CTL_T(DE_X), DE_Q, DE_AE, DE_UE, DE_OE, 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_ENT ,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), DE_V, DE_G, DE_C, DE_L, DE_SS, DE_Z, + DE_D, DE_T, DE_R, DE_N, LT(MDIA, DE_S), GUI_T(KC_F), + MEH_T(KC_NO),KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), 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_RSFT + ), +/* 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/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md b/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md new file mode 100644 index 0000000000..f0dd3815c1 --- /dev/null +++ b/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md @@ -0,0 +1,7 @@ +# Basic implementation for k.o,y variant of the adnw layout + +adnw is a layout optimised for usage with german and english language +k.o,y is a variant of this layout +http://www.adnw.de/index.php?n=Main.SeitlicheNachbaranschl%C3%A4ge + +The os must use the de_DE layout diff --git a/keyboards/ergodox/keymaps/alexjj/keymap.c b/keyboards/ergodox/keymaps/alexjj/keymap.c new file mode 100644 index 0000000000..448f62da02 --- /dev/null +++ b/keyboards/ergodox/keymaps/alexjj/keymap.c @@ -0,0 +1,238 @@ +#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 +#define UNIC 3 // unicode entry layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ | + * |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| + * | Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" | + * |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------| + * | LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 | + * ,------|------|------| |------+------+------. + * | | | PgUp | | Ins | | | + * | Enter| BkSp |------| |------| ~L1 |Space | + * | | | PgDn | | Del | | | + * `--------------------' `--------------------' + */ +// 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_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_HOME, + KC_LCTRL, LCTL(KC_C), LCTL(KC_V), KC_LEFT,KC_RGHT, + KC_FN3, KC_F5, + KC_PGUP, + KC_ENT,KC_BSPC,KC_PGDN, + // right hand + KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_RBRC, 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_END, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_DOWN,KC_UP, ALL_T(KC_NO),KC_GRV, KC_RCTRL, + KC_F2, KC_FN2, + KC_INS, + KC_DELT,KC_FN1, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr| + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | £ | | | | | | . | 0 | = |Alt+F4| + * `----------------------------------' `----------------------------------' + * ↑ ,-------------. ,-------------. + * THERE! | | | | | | + * ,------|------|------| |------+------+------. + * CAD = Ctrl + Alt + Delete | | | | | | | | + * | | |------| |------| | | + * | | | | | CAD | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + 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,M(3),KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, + 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, LALT(KC_F4), + KC_TRNS, KC_TRNS, + KC_TRNS, + LCTL(LALT(KC_DEL)), KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | TEENSY | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + RESET, 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_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +/* Keymap 3: Unicode Entry + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Alt | | | E | | | | | | | 7 | 8 | 9 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Alt | | | C | | B | | | | | 1 | 2 | 3 | + | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * WINDOWS ONLY SETUP!! | ~L3 | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | Alt | Alt |------| |------| Alt | Alt | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[UNIC] = KEYMAP( // layer 3 : Unicode Entry + // left hand + KC_LALT, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, + KC_LALT, KC_TRNS, KC_TRNS, KC_E, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LALT, KC_A, KC_TRNS, KC_D, KC_F, KC_TRNS, + KC_LALT, KC_TRNS, KC_TRNS, KC_C, KC_TRNS, KC_B, KC_TRNS, + KC_LALT, KC_LALT, KC_LALT, KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_LALT,KC_LALT, KC_TRNS, + // right hand + KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS,KC_PPLS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TRNS, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_TRNS, + KC_P0, KC_P0, KC_P0, KC_PPLS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS,KC_LALT, KC_LALT + ), +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) + [2] = ACTION_LAYER_TAP_TOGGLE(MDIA), // FN2 - Momentary Layer 2 (Media) + [3] = ACTION_LAYER_TAP_TOGGLE(UNIC) // FN3 - Momentary Layer 3 (Unicode entry) +}; + +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); + } + case 3: // this would trigger when you hit a key mapped as M(3) + if (record->event.pressed) { + return MACRO( I(255), D(LALT), T(P1), T(P5), T(P6), U(LALT), 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) { + + 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; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/alexjj/readme.md b/keyboards/ergodox/keymaps/alexjj/readme.md new file mode 100644 index 0000000000..239e32d399 --- /dev/null +++ b/keyboards/ergodox/keymaps/alexjj/readme.md @@ -0,0 +1,179 @@ +Englishman in New York +=========================== + +:microphone: :tea: + +About +------ + +After using the massdrop configurator to get the basics, I wanted to add a +little extra to my ergodox. Notably the Hyper hotkey, the press and hold, +and a way to have my beloved £ :pound: symbol available[1](#unicode). Why not switch to a GB +layout? Well the computers I use are US keymap'd and I can't always change +that. Plus I've got used to 2/@ and 3/# and moving to the ergodox was hard +enough. :sweat_smile: + +I started from the default and edited from there as I needed. It's somewhat +similar to a regular layout, particularly R1 and shift/controls. I ended up +with a few keys that were blank, so I'm testing out some shortcuts. Alt+F4 for +quitting things in Windows, is one example, but I felt it was better placed on +the 1st layer - in case of fat fingers. + +Layout +------- + +![Layout](rl-layout.jpg "Isn't it lovely") + +### Base Layer + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ | +|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| +| Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" | +|--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------| +| LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 | + ,------|------|------| |------+------+------. + | | | PgUp | | Ins | | | + | Enter| BkSp |------| |------| ~L1 |Space | + | | | PgDn | | Del | | | + `--------------------' `--------------------' +``` + +### Symbol Layer + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr| +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | £ | | | | | | . | 0 | = |Alt+F4| + `----------------------------------' `----------------------------------' + ↑ ,-------------. ,-------------. + THERE! | | | | | | + ,------|------|------| |------+------+------. + CAD = Ctrl + Alt + Delete | | | | | | | | + | | |------| |------| | | + | | | | | CAD | | | + `--------------------' `--------------------' +``` +### Media Layer + +Not touched this, not used either. + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| TEENSY | | | | | | | | | | | | | | | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| | | | MsUp | | | | | | | | | | | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | | | | | | | | | | | Prev | Next | | | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | |Brwser| + | | |------| |------| |Back | + | | | | | | | | + `--------------------' `--------------------' +``` +### Unicode Layer + +Used to enter/test unicode input on Windows. All numbers are numpad keys. + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Alt | | | E | | | | | | | 7 | 8 | 9 | + | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| Alt | | | C | | B | | | | | 1 | 2 | 3 | + | | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + WINDOWS ONLY SETUP!! | ~L3 | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | Alt | Alt |------| |------| Alt | Alt | + | | | | | | | | + `--------------------' `--------------------' +``` + + +Usage +------ + +~L1 / L2 / L3 will momentarily switch to a layer if held and another key is pressed. +If pressed and released will remain on layer until pressed again. + +### Unicode + +This layout is for Windows only. To enter a character Press and Hold Alt, type + and hex code then release Alt. + +Changelog +----------- + +### [0.2.1] - 2016-04-05 + +* Changed £ to alt code in Windows. Windows sucks at unicode. + +### [0.2.0] - 2016-03-27 + +* Added unicode layer +* Moved Copy/Paste to left hand side +* Switched Enter and Space (again) +* Added L3 (unicode layer) toggle +* Removed Press and Hold for Alt on right hand size (/) +* Swapped Volume Up/Down to match arrows +* Tried fixing £ macro +* Removed * in the matrix function things (upstream change) + +### [0.1.1] - 2016-03-23 + +* Changed £ input to a macro + + +### [0.1.0] - 2016-03-22 + +After actually using the keyboard, I've made some changes: + +* Swapped Enter and Space +* Moved backspace to thumb keys (top right still remains) +* Added Ctrl+Alt+Delete +* Added Teensy Reset on 2nd layer +* Switched Up and Down +* Changed copy/paste to be Ctrl+c and Ctrl+v as KC_COPY/PASTE didn't work (in Windows) +* Moved ~L2 to replace +L1 after learning how the function works (notes above) +* Hopefully fixed GBP symbol (unicode enabled in MakeFile) + +### [0.0.1] - 2016-03-21 + +First version + + +Issues +------- + +Space for feedback and notes for future improvements + +---- +1: For Windows only, and you have to edit the [registry](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input). diff --git a/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg new file mode 100644 index 0000000000..e4e92bf464 Binary files /dev/null and b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg differ diff --git a/keyboards/ergodox/keymaps/algernon/COPYING b/keyboards/ergodox/keymaps/algernon/COPYING new file mode 100644 index 0000000000..94a9ed024d --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile new file mode 100644 index 0000000000..6bf3976b9d --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/Makefile @@ -0,0 +1,35 @@ +BOOTMAGIC_ENABLE=no +COMMAND_ENABLE=no +SLEEP_LED_ENABLE=no +UNICODE_ENABLE=no +FORCE_NKRO ?= yes +DEBUG_ENABLE = no +CONSOLE_ENABLE = no +TAP_DANCE_ENABLE = yes +KEYLOGGER_ENABLE ?= yes + +ifeq (${FORCE_NKRO},yes) +OPT_DEFS += -DFORCE_NKRO +endif + +ifeq (${KEYLOGGER_ENABLE},yes) +OPT_DEFS += -DKEYLOGGER_ENABLE +CONSOLE_ENABLE = yes +endif + +KEYMAP_VERSION = $(shell \ + if [ -d "${KEYMAP_PATH}/.git" ]; then \ + cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ + else echo QMK; fi) + +KEYMAP_BRANCH = $(shell \ + if [ -d "${KEYMAP_PATH}/.git" ]; then \ + cd "${KEYMAP_PATH}"; \ + fi; \ + git rev-parse --abbrev-ref HEAD 2>/dev/null) + +OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\" + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/algernon/config.h b/keyboards/ergodox/keymaps/algernon/config.h new file mode 100644 index 0000000000..9bb1025be5 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/config.h @@ -0,0 +1,27 @@ +#ifndef CONFIG_ALGERNON_H +#define CONFIG_ALGERNON_H + +#include "../../config.h" + +#undef MOUSEKEY_TIME_TO_MAX +#undef MOUSEKEY_MAX_SPEED + +#define MOUSEKEY_TIME_TO_MAX 1 +#define MOUSEKEY_MAX_SPEED 2 + +#undef MOUSEKEY_DELAY +#define MOUSEKEY_DELAY 0 + +#undef MOUSEKEY_WHEEL_DELAY +#define MOUSEKEY_WHEEL_DELAY 0 + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 3000 + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#undef LEADER_TIMEOUT +#define LEADER_TIMEOUT 1000 + +#endif diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png new file mode 100644 index 0000000000..3df68ea53d Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png new file mode 100644 index 0000000000..7b25a05b3a Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/heatmap.png b/keyboards/ergodox/keymaps/algernon/images/heatmap.png new file mode 100644 index 0000000000..356035e0a6 Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/heatmap.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png new file mode 100644 index 0000000000..104a9544d0 Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png new file mode 100644 index 0000000000..16d29e124d Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png new file mode 100644 index 0000000000..698d11e5f2 Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png new file mode 100644 index 0000000000..fe3c03c932 Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c new file mode 100644 index 0000000000..c120872929 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -0,0 +1,1216 @@ +/* + * algernon's ErgoDox EZ layout, please see the readme.md file! + */ + +#include "ergodox_ez.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" +#include "timer.h" +#include "keymap_plover.h" +#include "eeconfig.h" + +/* Layers */ + +enum { + BASE = 0, + ADORE, + ARRW, + APPSEL, + HUN, + NMDIA, + OHLFT, + OHRGT, + PLVR, +}; + +/* Macros */ + +enum { + NONE = 0, + // Buttons that do extra stuff + A_GUI, + A_PLVR, + A_ESC, + A_MPN, + + // Function / number keys + KF_1, // 1, F1 + KF_2, // 2, F2 + KF_3, // ... + KF_4, + KF_5, + KF_6, + KF_7, + KF_8, + KF_9, + KF_10, + KF_11, // =, F11 + + // Application select keys + APP_SLK, // Slack + APP_EMCS, // Emacs + APP_TERM, // Terminal + APP_CHRM, // Chrome + APP_MSIC, // Music + + // Diagonal mouse movement + A_MUL, + A_MUR, + A_MDL, + A_MDR, + + // Hungarian layer keys + HU_AA, // Á + HU_OO, // Ó + HU_EE, // É + HU_UU, // Ú + HU_II, // Í + HU_OE, // Ö + HU_UE, // Ü + HU_OEE, // Ő + HU_UEE, // Ű + + // One-handed layout specials + OH_BSSPC, + OH_ENTSFT, + OH_BASE, + OH_LEFT, + OH_RIGHT, +}; + +/* Fn keys */ + +enum { + F_BSE = 0, + F_HUN, + F_GUI, + F_SFT, + F_ALT, + F_CTRL +}; + +/* Custom keycodes */ + +enum { + CT_CLN = 0, + CT_MNS, + CT_TA, +}; + +/* States & timers */ + +uint16_t gui_timer = 0; + +uint16_t kf_timers[12]; + +uint16_t oh_base_timer = 0; +uint16_t oh_bsspc_timer = 0; +uint16_t oh_entsft_timer = 0; + +#define OH_BLINK_INTERVAL 500 + +uint8_t oh_left_blink = 0; +uint16_t oh_left_blink_timer = 0; +uint8_t oh_right_blink = 0; +uint16_t oh_right_blink_timer = 0; + +#if KEYLOGGER_ENABLE +bool log_enable = false; +#endif + +bool time_travel = false; + +/* The Keymap */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | : | | - | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | 1HND | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),M(OH_LEFT) + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 1: Adore layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | : | | - | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | 1HND | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[ADORE] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),M(OH_LEFT) + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 2: Arrow layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | Home | Up | End | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | Left | Down | Rght | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| PgUp | PgDn | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[ARRW] = KEYMAP( +// left 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_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_TRNS + ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_PGUP ,KC_PGDN + ), + +/* Keymap 3: Application select layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[APPSEL] = KEYMAP( +// left hand + KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + ), + + +/* Keymap 4: Hungarian Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | Ő | | Ű | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | Ö | | Ü | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | BASE | | | + * `--------------------' `--------------------' + */ + +[HUN] = KEYMAP( +// left hand + KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO +,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) +,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS + + // right hand + ,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_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 ,KC_NO ,KC_NO + + ,KC_NO ,KC_NO + ,KC_NO + ,F(F_BSE),KC_TRNS ,KC_TRNS + ), + +/* Keymap 5: Navigation & Media layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| + * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| + * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | + * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| + * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Mute | VlUp | | BASE | MClk | + * ,------|------|------| |------+------+------. + * | | | VlDn | | Prev |Left |Right | + * | SPC | Enter|------| |------| Click| Click| + * | | | ESC | | Next | | | + * `--------------------' `--------------------' + */ +[NMDIA] = KEYMAP( +// left hand + KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) +,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO +,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO +,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_MUTE ,KC_VOLU + ,KC_VOLD + ,KC_SPC,KC_ENTER,M(A_ESC) + + // right hand + ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR + ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO + ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,KC_TRNS ,KC_MS_BTN3 + ,KC_MPRV + ,KC_MNXT ,KC_BTN1 ,KC_BTN2 + ), + +/* Keymap 6: One-handed, left side + * + * ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| + * |-----------+------+------+------+------+-------------| + * | Tab | ' | , | . | P | Y | [ | + * |-----------+------+------+------+------+------| | + * | - | A | O | E | U | I |------| + * |-----------+------+------+------+------+------| ( | + * | Play/Pause| ; | Q | J | K | X | | + * `-----------+------+------+------+------+-------------' + * | Home | End | Down | Up | ESC | + * `-----------------------------------' + * ,-------------. + * | LAlt | GUI | + * ,------|------|------| + * |BackSp|LShift| Ctrl | + * | | |------| + * |Space |Enter |OTHER | + * `--------------------' + */ +[OHLFT] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) +,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) + + // right hand + ,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 ,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 ,KC_NO ,KC_NO + ), + +/* Keymap 7: One-handed, right side + * + * ,-----------------------------------------------------. + * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| + * |-----------+------+------+------+------+-------------| + * | / | L | R | C | G | F | ] | + * |-----------+------+------+------+------+------| | + * | \ | S | N | T | H | D |------| + * |-----------+------+------+------+------+------| ) | + * | Stop | Z | V | W | M | B | | + * `-----------+------+------+------+------+-------------' + * | PgDn | PgUp | Right| Left | ESC | + * `-----------------------------------' + * ,-------------. + * | LAlt | GUI | + * ,------|------|------| + * |BackSp|LShift| Ctrl | + * | | |------| + * |Space |Enter |OTHER | + * `--------------------' + */ +[OHRGT] = KEYMAP( +// left hand + M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) +,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC +,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D +,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN +,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) + + // right hand + ,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 ,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 ,KC_NO ,KC_NO + ), + +/* Keymap 8: Steno for Plover + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | BASE | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | T | P | H | |------| |------| | F | P | L | T | D | + * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| + * | | | K | W | R | | | | | | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( +// left hand +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), +KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, +KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, +KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO,PV_E, PV_U + ), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) + ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) + ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) + ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) + ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) + ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) +}; + +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); + + register_code(PV_LP); + register_code(PV_LH); + register_code(PV_LR); + register_code(PV_O); + register_code(PV_RL); + register_code(PV_RG); + } else { + unregister_code(PV_LP); + unregister_code(PV_LH); + unregister_code(PV_LR); + unregister_code(PV_O); + unregister_code(PV_RL); + unregister_code(PV_RG); + } +} + +macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) +{ + uint8_t need_shift = 0; + uint8_t hold_shift = 0; + + if (!record->event.pressed) + return MACRO_NONE; + + layer_off (HUN); + + if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { + hold_shift = 1; + need_shift = 1; + unregister_code (KC_LSFT); + } + if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { + need_shift = 1; + hold_shift = 0; + unregister_code (KC_LSFT); + } + + clear_oneshot_mods (); + + register_code (KC_RALT); + unregister_code (KC_RALT); + if (accent == (KC_DQT)) { + register_code (KC_RSFT); + } + register_code (accent); + unregister_code (accent); + if (need_shift && accent != (KC_DQT)) { + register_code (KC_RSFT); + } else if (accent == (KC_DQT) && !need_shift) { + unregister_code (KC_RSFT); + } + register_code (hun_char); + unregister_code (hun_char); + if (need_shift || accent == (KC_DQT)) + unregister_code (KC_RSFT); + if (hold_shift) + register_code (KC_LSFT); + + return MACRO_NONE; +} + +void ang_handle_kf (keyrecord_t *record, uint8_t id) +{ + uint8_t code = id - KF_1; + + if (record->event.pressed) { + kf_timers[code] = timer_read (); + } else { + uint8_t kc; + + if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { + // Long press + kc = KC_F1 + code; + } else { + if (id == KF_11) + kc = KC_EQL; + else + kc = KC_1 + code; + } + + register_code (kc); + unregister_code (kc); + } +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case A_ESC: + if (record->event.pressed) { + if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { + clear_oneshot_mods (); + } else { + register_code (KC_ESC); + } + layer_off (HUN); + } else { + unregister_code (KC_ESC); + } + break; + + case A_MPN: + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); + + if (oneshot) + clear_oneshot_mods (); + unregister_code (KC_LSFT); + + register_code (KC_MPRV); + unregister_code (KC_MPRV); + + if (!oneshot) + register_code (KC_LSFT); + } else { + return MACRO (T(MNXT), END); + } + } + break; + + /* Hungarian layer */ + case HU_AA: + return ang_do_hun (record, KC_QUOT, KC_A); + case HU_OO: + return ang_do_hun (record, KC_QUOT, KC_O); + case HU_EE: + return ang_do_hun (record, KC_QUOT, KC_E); + case HU_UU: + return ang_do_hun (record, KC_QUOT, KC_U); + case HU_II: + return ang_do_hun (record, KC_QUOT, KC_I); + case HU_OE: + return ang_do_hun (record, KC_DQT, KC_O); + case HU_UE: + return ang_do_hun (record, KC_DQT, KC_U); + case HU_OEE: + return ang_do_hun (record, KC_EQL, KC_O); + case HU_UEE: + return ang_do_hun (record, KC_EQL, KC_U); + + /* Mouse movement */ + case A_MUL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MUR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + case A_MDL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MDR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + /* Plover base */ + case A_PLVR: + toggle_steno(record->event.pressed); + break; + + /* GUI & AppSel */ + case A_GUI: + if (record->event.pressed) { + register_code (KC_LGUI); + if (record->tap.count && !record->tap.interrupted) { + if (record->tap.count >= 2) { + register_code (KC_W); + layer_on (APPSEL); + set_oneshot_layer (APPSEL, ONESHOT_START); + } + } else { + record->tap.count = 0; + } + gui_timer = 0; + } else { + if (record->tap.count >= 2) + { + unregister_code (KC_W); + clear_oneshot_layer_state (ONESHOT_PRESSED); + } + gui_timer = timer_read (); + } + break; + + case APP_SLK: + return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); + + case APP_EMCS: + return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); + + case APP_TERM: + return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); + + case APP_CHRM: + return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); + + case APP_MSIC: + return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); + + /* Function keys */ + case KF_1 ... KF_11: + ang_handle_kf (record, id); + break; + + /* 1HAND layout */ + case OH_BASE: + if (record->event.pressed) { + oh_base_timer = timer_read (); + } else { + if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { + layer_clear (); + } else { + return MACRO (T(APP), END); + } + } + break; + + case OH_BSSPC: + if (record->event.pressed) { + oh_bsspc_timer = timer_read (); + } else { + if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { + return MACRO (T(BSPC), END); + } else { + return MACRO (T(SPC), END); + } + } + break; + + case OH_ENTSFT: + if (record->event.pressed) { + oh_entsft_timer = timer_read (); + } else { + if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT)) + unregister_code (KC_LSFT); + else + register_code (KC_LSFT); + } else { + return MACRO (T(ENT), END); + } + } + break; + + case OH_LEFT: + if (record->event.pressed) { + layer_move (OHLFT); + oh_left_blink = 1; + oh_left_blink_timer = timer_read (); + ergodox_right_led_1_on (); + } + break; + + case OH_RIGHT: + if (record->event.pressed) { + layer_move (OHRGT); + oh_right_blink = 1; + oh_right_blink_timer = timer_read (); + ergodox_right_led_3_on (); + } + break; + } + return MACRO_NONE; +}; + +uint8_t is_adore = 0; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + uint8_t dl; + + ergodox_led_all_on(); + for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { + ergodox_led_all_set (i); + _delay_ms (5); + } + _delay_ms(1000); + for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { + ergodox_led_all_set (i); + _delay_ms (10); + } + ergodox_led_all_off(); + + if (!eeconfig_is_enabled()) + eeconfig_init(); + dl = eeconfig_read_default_layer (); + if (dl == (1UL << ADORE)) + is_adore = 1; +}; + +LEADER_EXTERNS(); + +void ang_do_unicode (void) { + register_code (KC_RCTL); + register_code (KC_RSFT); + register_code (KC_U); + unregister_code (KC_U); + unregister_code (KC_RSFT); + unregister_code (KC_RCTL); + _delay_ms (100); +} + +void ang_tap (uint16_t codes[]) { + for (int i = 0; codes[i] != 0; i++) { + register_code (codes[i]); + unregister_code (codes[i]); + _delay_ms (50); + } +} + +#define TAP_ONCE(code) \ + register_code (code); \ + unregister_code (code) + +void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + } else if (state->count == 2) { + register_code (KC_SCLN); + } +} + +void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (state->count == 2) { + unregister_code (KC_SCLN); + } +} + +void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_MINS); + } else if (state->count == 2) { + register_code (KC_RSFT); + register_code (KC_MINS); + } +} + +void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_MINS); + } else if (state->count == 2) { + unregister_code (KC_RSFT); + unregister_code (KC_MINS); + } +} + +typedef struct { + bool layer_toggle; + bool sticky; + bool finished_once; +} td_ta_state_t; + +void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (td_ta->finished_once) { + return; + } + + if (td_ta->sticky) { + td_ta->sticky = false; + td_ta->layer_toggle = false; + layer_off (ARRW); + return; + } + + td_ta->finished_once = true; + if (state->count == 1 && !state->pressed) { + register_code (KC_TAB); + td_ta->sticky = false; + td_ta->layer_toggle = false; + } else { + td_ta->layer_toggle = true; + layer_on (ARRW); + td_ta->sticky = (state->count == 2); + } +} + +void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (!td_ta->layer_toggle) + unregister_code (KC_TAB); + if (!td_ta->sticky) + layer_off (ARRW); + + td_ta->finished_once = false; +} + +const qk_tap_dance_action_t tap_dance_actions[] = { + [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) + ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) + ,[CT_TA] = { + .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, + .user_data = (void *)&((td_ta_state_t) { false, false, false }) + } +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) + unregister_code (KC_LGUI); + + if (layer != OHLFT) + oh_left_blink = 0; + if (layer != OHRGT) + oh_right_blink = 0; + + if (layer == HUN) { + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + } else if (layer == NMDIA) { + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + } else if (layer == PLVR) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + } else if (layer == ADORE) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + } + + if (layer == OHLFT || layer == OHRGT) { + ergodox_right_led_2_on(); + + if (oh_left_blink) { + if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { + if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) + ergodox_right_led_1_off (); + } + if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { + ergodox_right_led_1_on (); + oh_left_blink_timer = timer_read (); + } + } + + if (oh_right_blink) { + if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { + if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) + ergodox_right_led_3_off (); + } + if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { + ergodox_right_led_3_on (); + oh_right_blink_timer = timer_read (); + } + } + } + + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_1_set (LED_BRIGHTNESS_HI); + ergodox_right_led_1_on (); + } else { + ergodox_right_led_1_set (LED_BRIGHTNESS_LO); + if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_1_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LALT) || + ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + ergodox_right_led_2_on (); + } else { + ergodox_right_led_2_set (LED_BRIGHTNESS_LO); + if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_2_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || + ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_3_set (LED_BRIGHTNESS_HI); + ergodox_right_led_3_on (); + } else { + ergodox_right_led_3_set (LED_BRIGHTNESS_LO); + if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) + ergodox_right_led_3_off (); + } + + LEADER_DICTIONARY() { + leading = false; + leader_end (); + +#if KEYLOGGER_ENABLE + SEQ_ONE_KEY (KC_D) { + ergodox_led_all_on(); + _delay_ms(100); + ergodox_led_all_off(); + log_enable = !log_enable; + } +#endif + + SEQ_ONE_KEY (KC_T) { + time_travel = !time_travel; + } + + SEQ_ONE_KEY (KC_U) { + ang_do_unicode (); + } + + SEQ_ONE_KEY (KC_V) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); + } + + SEQ_ONE_KEY (KC_L) { + /* λ */ + ang_do_unicode (); + + uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_Y) { + uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_S) { + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + TAP_ONCE (KC_BSLS); + register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); + ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); + register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); + TAP_ONCE (KC_SLSH); + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + } + + SEQ_TWO_KEYS (KC_W, KC_M) { + register_code (KC_LALT); + register_code (KC_F2); + unregister_code (KC_F2); + unregister_code (KC_LALT); + + _delay_ms (1000); + + uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; + ang_tap (codes); + register_code (KC_LGUI); + register_code (KC_UP); + unregister_code (KC_UP); + unregister_code (KC_LGUI); + } + + SEQ_ONE_KEY (KC_A) { + if (is_adore == 0) { + default_layer_and (0); + default_layer_or ((1UL << ADORE)); + eeconfig_update_default_layer ((1UL << ADORE)); + is_adore = 1; + + ergodox_led_all_off (); + ergodox_right_led_3_on (); + _delay_ms (100); + ergodox_right_led_2_on (); + _delay_ms (100); + ergodox_right_led_3_off (); + ergodox_right_led_1_on (); + _delay_ms (100); + ergodox_right_led_2_off (); + _delay_ms (100); + ergodox_right_led_1_off (); + } else { + is_adore = 0; + default_layer_and (0); + default_layer_or (1UL << BASE); + eeconfig_update_default_layer ((1UL << BASE)); + + ergodox_led_all_off (); + ergodox_right_led_1_on (); + _delay_ms (100); + ergodox_right_led_2_on (); + _delay_ms (100); + ergodox_right_led_1_off (); + ergodox_right_led_3_on (); + _delay_ms (100); + ergodox_right_led_2_off (); + _delay_ms (100); + ergodox_right_led_3_off (); + } + } + } +} + +static uint16_t last4[4]; + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { +#if KEYLOGGER_ENABLE + uint8_t layer = biton32(layer_state); + + if (log_enable && layer == BASE) { + xprintf ("KL: col=%d, row=%d\n", record->event.key.col, + record->event.key.row); + } +#endif + + if (time_travel && !record->event.pressed) { + uint8_t p; + + // shift cache one to the left + for (p = 0; p < 3; p++) { + last4[p] = last4[p + 1]; + } + last4[3] = keycode; + + if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { + uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; + ang_tap (codes); + register_code (KC_RSFT); + register_code (KC_EQL); + unregister_code (KC_EQL); + unregister_code (KC_RSFT); + + uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; + ang_tap (codes2); + + return false; + } + } + + return true; +} diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md new file mode 100644 index 0000000000..6fe1775111 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -0,0 +1,198 @@ + + +algernon's layout +======================= + +This is an unconventional layout for the ErgoDox EZ. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox]. + + [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ + +Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary. + +## Table of Contents + +* [Layouts](#layouts) + - [Base layer](#base-layer) + - [ADORE layer](#adore-layer) + - [Hungarian layer](#hungarian-layer) + - [Navigation and media layer](#navigation-and-media-layer) + - [One-handed layer](#one-handed-layer) + - [Steno layer](#steno-layer) + - [LED states](#led-states) +* [Tools](#tools) + - [Heatmap](#heatmap) +* [Building](#building) + - [Using on Windows](#using-on-windows) +* [Changelog](#changelog) +* [License](#license) + +# Layouts + +## Base layer + +[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) + +At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave: + +* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers. +* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. +* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. +* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. +* The **Media** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** keys are toggles. +* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. +* Tapping the `:` key once yields `:`, tapping it twice yields `;`. +* The **Lead** key allows me to type in a sequence of keys, and trigger some actions: + - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that does this. + - `LEAD l` uses the unicode input method to enter a `λ`. + - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` + - `LEAD y` types `\o/`. + - `LEAD w m` maximises the currently focused window. + - `LEAD a` makes the [ADORE layer](#adore-layer) the default. + - `LEAD v` prints the firmware version, the keyboard and the keymap. + - `LEAD d` toggles logging keypress positions to the HID console. + - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. + +## ADORE layer + +[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a) + +While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen. + + [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm + +Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name. + +## Hungarian layer + +[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) + +On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. + +## Navigation and media layer + +[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) + +This layer is primarily for navigating with the cursor or the mouse, and some media things. + +## One-handed layer + +[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) + +The one-handed layer is used in situations where the right hand is occupied, by mousing around, for example. Tapping the `OTHER` key switches which side is active. For the most part, keys remain in their usual position. When the right half is active, keys are mirrored to the left half. + +The differences are as follows: + +* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier to tap. +* Most keys on the thumb cluster now have dual uses, and these do not change when switching sides: + - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held for longer than a normal tap. + - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. +* The `Apps`/`BASE` key can be used to go back to the base layer, by long-tapping it. A short-tap will send the `App` key, as usual. + +## Steno layer + +[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) + +This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too. + +## LED states + +The primary purpose of the LEDs is to show the modifier status, a secondary, to show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each have their designated LEDs: the *red*, *green* and *blue*, respectively. When a modifier is in a one-shot state, the respective LED will turn on with a dimmer light. If the modifier is toggled on, the brightness of the LED turns full. + +For the layers, the following rules apply: + +* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. +* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. +* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. +* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is on and bright, and either the *red* or the *blue* one is going to slowly blink, depending on the currently active side. +* For the [Steno layer](#steno-layer), all LEDs will be turned on. + +Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. + +# Tools + +## Heatmap + +When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too. + +Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, simply point `tools/log-to-heatmap.py` to a base layout file (one is included in the `tools/` directory), and the key position log. The latter one can create by running `hid-listen`, and redirecting its output to a file. + + [kle]: http://www.keyboard-layout-editor.com/ + +The generated heatmap looks somewhat like this: + + ![Heatmap](images/heatmap.png) + +# Building + +To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: + + [algernon:ez-layout]: https://github.com/algernon/ergodox-layout + [qmk]: https://github.com/jackhumbert/qmk_firmware + +``` +$ git clone https://github.com/jackhumbert/qmk_firmware.git +$ cd qmk_firmware +$ git clone https://github.com/algernon/ergodox-layout.git \ + keyboards/ergodox_ez/keymaps/algernon-master +$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master +``` + +From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): + +``` +$ make KEYBOARD=ergodox_ez KEYMAP=algernon +``` + +## Using on Windows + +The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line. + +# Changelog + +## v1.4 - 2016-07-29 + +* When toggling the key logging on or off, the LEDs will do a little dance. +* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. +* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. +* The `-`/`_` key was turned into a tap-dance key too. +* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. + +## v1.3 - 2016-07-06 + +* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. +* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. +* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. +* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. + +## v1.2 - 2016-06-22 + +* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). +* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. +* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. +* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. +* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer. +* `LEAD v` types the firmware version, and the keymap version. +* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. +* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. + +## v1.1 - 2016-06-14 + +* The keyboard starts in NKRO mode, bootmagic and other things are disabled. +* A [Steno](#steno-layer) layer was added, to be used with Plover. +* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. +* `LEAD y` types `\o/`. +* Some keys on the [Base](#base-layer) layer have been moved around: + - `?` moved to the left pinky, left of `Q`. + - `=` shifted one row down, but `F11` stayed where it was. + - `-` on the left half was replaced by `Tab`. + - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. + - `:` now inputs `;` when shifted. +* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. + +## v1.0 - 2016-05-26 + +Initial version. + +# License + +The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version. diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json new file mode 100644 index 0000000000..544f61ce87 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json @@ -0,0 +1,533 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 6 + }, + "", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 3, + "w": 1.5 + }, + "\n\n~\n`", + { + "t": "#0d0d0b" + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "L", + { + "x": 10.5 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 4 + }, + ">\n.", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "W", + { + "x": 8.5 + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "P" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "M", + { + "c": "#93c9b7", + "a": 4, + "h": 1.5 + }, + "{\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 6, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "a": 4, + "f": 3 + }, + "<\n,", + { + "x": 14.5, + "a": 6 + }, + "Y", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "I", + { + "x": 8.5, + "n": true + }, + "R", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "U", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "a": 7, + "h": 1.5 + }, + "(", + { + "x": 4.5, + "h": 1.5 + }, + ")" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 10.5 + }, + "V" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "Z", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "K", + { + "x": 8.5 + }, + "G", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "J" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "X", + { + "x": 6.5 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 4, + "f": 3 + }, + "?\n/", + { + "x": 14.5, + "a": 6 + }, + "Q", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "w": 1.5 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": false, + "a": 5 + }, + ";\n:", + { + "x": 8.5 + }, + "_\n-", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "1HAND" + ], + [ + { + "x": -3 + }, + "LEAD", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "HUN" + ] +] diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json new file mode 100644 index 0000000000..148bb1f23b --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json @@ -0,0 +1,533 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 6 + }, + "", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 3, + "w": 1.5 + }, + "\n\n~\n`", + { + "t": "#0d0d0b" + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4 + }, + ">\n.", + { + "x": 10.5, + "a": 6 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 4 + }, + "<\n,", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "P", + { + "x": 8.5 + }, + "G", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "R" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "Y", + { + "c": "#93c9b7", + "a": 4, + "h": 1.5 + }, + "{\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 6, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 14.5, + "a": 6 + }, + "L", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "U", + { + "x": 8.5, + "n": true + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "I", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "a": 7, + "h": 1.5 + }, + "(", + { + "x": 4.5, + "h": 1.5 + }, + ")" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 6 + }, + "J", + { + "x": 10.5 + }, + "W" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "Q", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "K", + { + "x": 8.5 + }, + "M", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "V" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "X", + { + "x": 6.5 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 4, + "f": 3 + }, + "?\n/", + { + "x": 14.5, + "a": 6 + }, + "Z", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "w": 1.5 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": false, + "a": 5 + }, + ";\n:", + { + "x": 8.5 + }, + "_\n-", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "1HAND" + ], + [ + { + "x": -3 + }, + "LEAD", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "HUN" + ] +] diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py new file mode 100755 index 0000000000..a13d12e81a --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py @@ -0,0 +1,145 @@ +#! /usr/bin/env python +import json +import os +import sys +import re + +from math import floor + +cr_coord_map = [ + [ + # Row 0 + [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], + [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], + ], + [ + # Row 1 + [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], + [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], + ], + [ + # Row 2 + [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], + [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], + ], + [ + # Row 3 + [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], + [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], + ], + [ + # Row 4 + [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], + [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], + ], + [ + # Row 5 + [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], + [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], + ], +] + +def set_attr_at(j, b, n, attr, fn, val): + blk = j[b][n] + if attr in blk: + blk[attr] = fn(blk[attr], val) + else: + blk[attr] = fn(None, val) + +def coord(col, row): + return cr_coord_map[row][col] + +def set_attr(orig, new): + return new + +def set_bg(j, (b, n), color): + set_attr_at(j, b, n, "c", set_attr, color) + #set_attr_at(j, b, n, "g", set_attr, False) + +def _set_tap_info(o, count, cap): + ns = 4 - o.count ("\n") + return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100) + +def set_tap_info(j, (b, n), count, cap): + j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap) + +def heatmap_color (v): + colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] + fb = 0 + if v <= 0: + idx1, idx2 = 0, 0 + elif v >= 1: + idx1, idx2 = len(colors) - 1, len(colors) - 1 + else: + val = v * (len(colors) - 1) + idx1 = int(floor(val)) + idx2 = idx1 + 1 + fb = val - float(idx1) + + r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] + g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] + b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] + + r, g, b = [x * 255 for x in r, g, b] + return "#%02x%02x%02x" % (r, g, b) + +# Load the keylog +def load_keylog(fname, restrict_row): + keylog = {} + total = 0 + with open(fname, "r") as f: + lines = f.readlines() + for line in lines: + m = re.search ('KL: col=(\d+), row=(\d+)', line) + if not m: + continue + (c, r) = (int(m.group (2)), int(m.group (1))) + if restrict_row != None and r != int(restrict_row): + continue + if (c, r) in keylog: + keylog[(c, r)] = keylog[(c, r)] + 1 + else: + keylog[(c, r)] = 1 + total = total + 1 + return total / 2, keylog + +def l_flat(s): + f = s.split("\n") + return ", ".join (f) + +def main(base_fn, log_fn, restrict_row = None): + + with open(base_fn, "r") as f: + layout = json.load (f) + + ## Reset colors + for row in cr_coord_map: + for col in row: + if col != []: + set_bg (layout, col, "#d9dae0") + #set_attr_at (layout, col[0], col[1], "g", set_attr, True) + + total, log = load_keylog (log_fn, restrict_row) + max_cnt = 0 + for (c, r) in log: + max_cnt = max(max_cnt, log[(c, r)]) + + # Create the heatmap + for (c, r) in log: + coords = coord(c, r) + b, n = coords + cap = max_cnt + v = float(log[(c, r)]) / cap + print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v)) + set_bg (layout, coord(c, r), heatmap_color (v)) + set_tap_info (layout, coord (c, r), log[(c, r)], total) + + print json.dumps(layout) + +if __name__ == "__main__": + if len(sys.argv) < 3: + print """Log to Heatmap -- creates a heatmap out of keyboard logs + +Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json""" + sys.exit (1) + main(*sys.argv[1:]) diff --git a/keyboards/ergodox/keymaps/algernon/tools/max-focused b/keyboards/ergodox/keymaps/algernon/tools/max-focused new file mode 100755 index 0000000000..4d5220aa8b --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/max-focused @@ -0,0 +1,5 @@ +#! /bin/sh +WIN="$(xdotool getactivewindow)" +wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz +xdotool windowsize ${WIN} 100% 100% +wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz diff --git a/keyboards/ergodox/keymaps/andrew_osx/keymap.c b/keyboards/ergodox/keymaps/andrew_osx/keymap.c new file mode 100644 index 0000000000..48257d23a3 --- /dev/null +++ b/keyboards/ergodox/keymaps/andrew_osx/keymap.c @@ -0,0 +1,187 @@ +// Netable differences vs. the default firmware for the ErgoDox EZ: +// 1. The Cmd key is now on the right side, making Cmd+Space easier. +// 2. The media keys work on OSX (But not on Windows). +#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 | '" | | '" | 6 | 7 | 8 | 9 | 0 | BkSp | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | - | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Ctrl/Esc| 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| Alt |AltShf| Left | Right| | Up | Down | [ | ] | L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Esc |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | ( | | { | | | + * | Space| LGui |------| |------| RGui |Enter | + * | | | ) | | } | | | + * `--------------------' `----------------------' + */ +// 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_QUOT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_FN1, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_LPRN, + KC_SPC,KC_LGUI,KC_RPRN, + // right hand + KC_QUOT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_FN1, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_BSLS, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TG(1), + KC_ESC, CTL_T(KC_ESC), + KC_LCBR, + KC_RCBR,KC_RGUI, 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 +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/keyboards/ergodox/keymaps/bepo/bepo.png b/keyboards/ergodox/keymaps/bepo/bepo.png new file mode 100644 index 0000000000..3df7aa609f Binary files /dev/null and b/keyboards/ergodox/keymaps/bepo/bepo.png differ diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c new file mode 100644 index 0000000000..921a94d63a --- /dev/null +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -0,0 +1,311 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_bepo.h" + +#define BASE 0 // default layer +#define QWER 1 // qwerty compat layer +#define SQWER 2 // shifted qwerty compat layer +#define AQWER 3 // alted qwerty compat layer +#define FNAV 4 // function / navigation keys +#define NUM 5 // numeric keypad keys +#define MSE 6 // mouse keys + +#define KP_00 0 +#define CA_Fx 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | B |E_ACUT| P | O |E_GRAV|Backsp| |CapsLo| ^ | V | D | L | J | Z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | W | A | U | I | E | , |------| |------| C | T | S | R | N | M | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL| + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | L_Num| | CA_Fx| | | + * | Space|LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// Left hand +BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, +BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, +BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, +BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, +TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, + KC_ESC, MO(MSE), + MO(NUM), + KC_SPC, KC_LSHIFT, MO(FNAV), +// Right hand + KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL, + KC_CAPSLOCK, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, + BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, + KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, + BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_NO, KC_INS, +M(CA_Fx), +MO(FNAV), KC_RSHIFT, KC_ENTER), +/* Keymap 1: QWERTY system compatibility layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | b | e | p | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | w | a | u | i | e | , |------| |------| c | t | s | r | n | m | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | e | a | y | x | . | k | | | | ' | q | g | h | f | c | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | L_Num| | | | | + * | Space|LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[QWER] = KEYMAP( +// Left hand +KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL, +KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, +KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, +KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, +KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, + KC_ESC, MO(MSE), + MO(NUM), + KC_SPC, MO(SQWER), MO(FNAV), +// Right hand + KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, + KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, + MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_NO, KC_INS, +KC_TRNS, +MO(FNAV), MO(SQWER), KC_ENTER), +/* Keymap 2: QWERTY shifted system compatibility layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ` | B | E | P | O | E |Backsp| |CapsLo| ! | V | D | L | J | Z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | W | A | U | I | E | ; |------| |------| C | T | S | R | N | M | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | L_Num| | | | | + * | Space|LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[SQWER] = KEYMAP( +// Left hand +KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, +KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, +S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON, +S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB), +KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, +// Right hand + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(KC_Z), + S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(KC_M), + KC_TRNS, S(KC_SLASH), S(KC_Q), S(KC_G), S(KC_H), S(KC_F), S(KC_C), + S(KC_RALT), S(KC_RCTL), S(KC_RGUI), KC_TRNS, KC_TRNS, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, KC_TRNS, KC_TRNS), +/* Keymap 3: QWERTY alted system compatibility layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | L_Num| | | | | + * | _ |LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[AQWER] = KEYMAP( +// Left hand +KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL, +KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, +KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, +KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, +KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, + KC_ESC, MO(MSE), + MO(NUM), + KC_UNDS, MO(SQWER), MO(FNAV), +// Right hand + KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, + KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, + KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_NO, KC_INS, +KC_TRNS, +MO(FNAV), MO(SQWER), KC_ENTER), +/* Keymap 4: function / navigation layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | | + * |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------| + * | | Undo | Cut | Copy | Paste| | | | | | | | | | | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | | | | | | | | | | | | | | | | | | + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[FNAV] = KEYMAP( +// Left hand +KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD, +KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_TRNS, KC_TRNS, +// Right hand + KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, + KC_NO, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_F11, KC_NO, + KC_PGDOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F12, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, +KC_NO, KC_NO, +KC_TRNS, +KC_TRNS, KC_TRNS, KC_NO), +/* Keymap 5: numeric layer, sends keypad codes + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | + | - | / | * | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | 7 | 8 | 9 | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | 4 | 5 | 6 | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | 1 | 2 | 3 | | | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | | | | | | | | | | | | | 0 | 00 | . | | | + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | | | | | | + * | | |------| |------| | Enter| + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUM] = KEYMAP( +// Left hand +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, 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_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_TRNS, + KC_NO, KC_TRNS, KC_NO, +// Right hand + KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO, + KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO, + KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO, + KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO, + KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO, +KC_NO, KC_NO, +KC_NO, +KC_NO, KC_TRNS, KC_KP_ENTER), +/* Keymap 6: mouse layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | |LClick| Up |RClick| WhUp | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | Left | Down | Right|WhDown| | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * | | | | | | | | | | | | | | | | | | + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[MSE] = KEYMAP( +// Left hand +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, 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_TRNS, KC_TRNS, + KC_NO, KC_TRNS, + KC_NO, + KC_NO, KC_TRNS, KC_NO, +// Right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_NO, + KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, +KC_NO, KC_NO, +KC_NO, +KC_NO, KC_TRNS, KC_NO) +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case KP_00: + if (record->event.pressed) { + return MACRO( T(KP_0), D(KP_0), END ); + } else { + return MACRO( U(KP_0), END ); + } + break; + case CA_Fx: + if (record->event.pressed) { + layer_on(FNAV); + return MACRO( D(LALT), D(LCTL), END ); + } else { + layer_off(FNAV); + return MACRO( U(LCTL), U(LALT), 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) { +}; diff --git a/keyboards/ergodox/keymaps/bepo/readme.md b/keyboards/ergodox/keymaps/bepo/readme.md new file mode 100644 index 0000000000..4a18cd80ff --- /dev/null +++ b/keyboards/ergodox/keymaps/bepo/readme.md @@ -0,0 +1,34 @@ +# BEPO keymap for the ErgoDox + +This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french. + +# Disposition BÉPO pour l'ErgoDox + +Cette keymap a été pensée pour la disposition BÉPO (http://bepo.fr), qui est une disposition de clavier francophone, ergonomique et libre, élaborée selon la méthode Dvorak. L'adaptation de cette disposition à l'ErgoDox a été réalisée en conservant les points forts du clavier TypeMatrix 2030 (très répandu dans la communauté bépo, avec un excellent rapport ergonomie / prix) voir en réglant certains de ses défauts (3 colonnes pour l'auriculaire droit et touche "Ê") et en apportant son lot de nouveautés (compatibilité avec les systèmes azerty et qwerty). + +Particularités +-------------- + +Touches de repos des pouces : "espace" à gauche et "entrée" à droite. + +Placement des touches de combinaison ("Shift", "Alt", "Ctrl"...) adapté aux pouces, et permettant de conserver chaque doigt pour les rangées de lettres auxquelles ils sont assignés sans avoir à changer la touche de combinaison de côté (exemple : "A" majuscule puis "M" majuscule avec les auriculaires et un seul appui d'une touche "Shift"). + +Les touches "Alt" et "Alt Gr" sont accessibles avec les pouces sur la rangée du bas comme sur la TypeMatrix 2030, avec une symétrie gauche / droite. + +Les touches "Ctrl" sont placées sur la même ligne que les touche "Alt" et "Alt Gr" comme sur un clavier clasique, elles sont accessibles aux pouces sur la rangée du bas (moins éloigné que le groupe de touches de pouces pour des petites mains). + +Les touches "Backspace" et "Delete" sont placées comme sur la TypeMatrix 2030, du côté gauche uniquement (pour laisser celles de la main droite servir de {caps,num,scroll}lock puisqu'elles ont des LED). + +La touche "Tab" est placée comme sur la TypeMatrix 2020. + +Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO". + +Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long). + +Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0". + +L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle. + +TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY. + +> Olivier Smedts diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile new file mode 100644 index 0000000000..6c0a79b110 --- /dev/null +++ b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile @@ -0,0 +1,2 @@ +SLEEP_LED_ENABLE = no +UNICODE_ENABLE = yes diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c new file mode 100644 index 0000000000..8a2ba26d22 --- /dev/null +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -0,0 +1,281 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "led.h" +#include "keymap_extras/keymap_neo2.h" + +// Layer names +#define BASE 0 // default layer +#define PMQ 1 // poor man’s QWERTZ +#define PMN 2 // poor man’s Neo +#define FMU 3 // FMU layer +#define NHL 4 // Neo’s software layer 4 rebuilt in Hardware + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Layer 0: default + * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + * │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + * │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ + * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ + * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + * │ ← │ ↑ │ │ ↓ │ → │ + * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + * │ │ │ ─ │ │ ─ │ │ │ + * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + * │ │ │ HYP │ │ MEH │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +[BASE] = KEYMAP( + // left hand + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, NEO_GRV, + NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME, + NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O, + KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ), + KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L, + KC_LEFT, KC_UP, + KC_MINS, + KC_SPC, KC_ENT, ALL_T(KC_NO), + // right hand + NEO_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, + NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R, + TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT, + NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + KC_DOWN, KC_RGHT, + KC_MINS, + MEH_T(KC_NO),KC_ENT,KC_SPC + ), + +/* Layer 1: poor man’s QWERTZ + * based on kaimi’s layout + * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + * │ C │ P │ T │ F │ K │ L │ HOM │ │ END │ B │ A │ S │ G │ V │ Y │ + * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + * │ Mod3 │ D │ H │ Ö │ O │ I ├─────┤ ├─────┤ U │ - │ Z │ E │ X │ Mod3 │ + * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + * │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ + * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + * │ ← │ ↑ │ │ ↓ │ → │ + * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + * │ │ │ ─ │ │ ─ │ │ │ + * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + * │ │ │ HYP │ │ MEH │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +[PMQ] = KEYMAP( + // left hand + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, + DE_C, DE_P, DE_T, DE_F, DE_K, DE_L, KC_HOME, + NEO_L1_L, DE_D, DE_H, DE_OE, DE_O, DE_I, + KC_LSFT, DE_AE, DE_Q, DE_R, DE_W, DE_N, KC_TRNS, + KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,MO(NHL), + KC_LEFT, KC_UP, + KC_MINS, + KC_SPC, KC_ENT, ALL_T(KC_NO), + // right hand + DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_END, DE_B, DE_A, DE_S, DE_G, DE_V, DE_Y, + DE_U, DE_MINS,DE_Z, DE_E, DE_X, NEO_L1_R, + KC_TRNS, DE_J, DE_M, DE_COMM,DE_DOT, DE_SS, KC_RSFT, + MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + KC_DOWN, KC_RGHT, + KC_MINS, + MEH_T(KC_NO),KC_ENT,KC_SPC + ), + +/* Layer 2: poor man’s Neo + * based on kaimi’s layout + * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + * │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + * │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + * │ ← │ ↑ │ │ ↓ │ → │ + * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + * │ │ │ ─ │ │ ─ │ │ │ + * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + * │ │ │ HYP │ │ MEH │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +[PMN] = KEYMAP( + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, + DE_Y, DE_X, DE_V, DE_L, DE_C, DE_W, KC_HOME, + KC_NO, DE_U, DE_I, DE_A, DE_E, DE_O, + KC_LSFT, DE_UE, DE_OE, DE_AE, DE_P, DE_Z, KC_TRNS, + KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,MO(NHL), + KC_LEFT, KC_UP, + KC_MINS, + KC_SPC, KC_ENT, ALL_T(KC_NO), + // right hand + DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_END, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS, + DE_S, DE_N, DE_R, DE_T, DE_D, KC_NO, + KC_TRNS, DE_B, DE_M, KC_COMM,KC_DOT, DE_J, KC_RSFT, + MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + KC_DOWN, KC_RGHT, + KC_MINS, + MEH_T(KC_NO),KC_ENT,KC_SPC + ), + +/* Layer 3: F-keys, Mouse and Unicode + * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + * │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + * │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + * │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + * │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │ + * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + * │ │ │ MLC │ │ MRC │ │ │ + * │ │ ├─────┤ ├─────┤ │ │ + * │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +[FMU] = KEYMAP( + // left hand + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_MS_L, KC_MS_U, + KC_BTN1, + 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_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, + KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_MS_D, KC_MS_R, + KC_BTN2, + KC_TRNS, KC_TRNS,KC_TRNS + ), + +/* Layer 4: Neo’s software layer 4 rebuilt in Hardware + * based on kaimi’s layout + * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + * │ │ PgUp│ BSpc│ ↑ │ Del │ PgDn│ │ │ │ │ 7 │ 8 │ 9 │ + │ − │ + * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + * │ │ Home│ ← │ ↓ │ → │ End ├─────┤ ├─────┤ │ 4 │ 5 │ 6 │ , │ . │ + * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + * │ │ Esc │ Tab │ Ins │ Ret │ Undo│ │ │ │ │ 1 │ 2 │ 3 │ │ │ + * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + * │ │ │ │ │ │ + * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + * │ │ │ │ │ │ │ │ + * │ │ ├─────┤ ├─────┤ │ │ + * │ │ │ │ │ │ │ │ + * └─────┴─────┴─────┘ └─────┴─────┴─────┘ + */ +[NHL] = KEYMAP( + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_PGUP,KC_BSPC,KC_UP, KC_DELT,KC_PGDN,KC_NO, + KC_NO, KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, + KC_NO, KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS, + KC_NO, KC_NO, KC_TRNS,KC_NO, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_7, KC_8, KC_9, DE_PLUS,DE_MINS, + KC_NO, KC_4, KC_5, KC_6, KC_COMM,KC_DOT, + KC_TRNS, KC_NO, KC_1, KC_2, KC_3, KC_NO, KC_NO, + KC_TRNS,KC_NO, KC_TRNS,KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO + ), +}; + +const uint16_t PROGMEM fn_actions[] = { + [BASE] = ACTION_FUNCTION(BASE), + [PMQ] = ACTION_FUNCTION(PMQ), + [PMN] = ACTION_FUNCTION(PMN), + [FMU] = ACTION_LAYER_TAP_TOGGLE(FMU), + [NHL] = ACTION_LAYER_TAP_TOGGLE(NHL) +}; + + +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) { + case FMU: + ergodox_right_led_1_on(); + break; + case PMQ: + ergodox_right_led_2_on(); + break; + case PMN: + ergodox_right_led_3_on(); + break; + default: + if(host_keyboard_leds() & (1<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/keyboards/ergodox/keymaps/colemak/readme.md b/keyboards/ergodox/keymaps/colemak/readme.md new file mode 100644 index 0000000000..e28b2f0856 --- /dev/null +++ b/keyboards/ergodox/keymaps/colemak/readme.md @@ -0,0 +1,4 @@ +# ErgoDox EZ Colemak Configuration + +Colemak layout with same layers as default ergodox ez keymap. + diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png new file mode 100644 index 0000000000..57df5a1f99 Binary files /dev/null and b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png differ diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c new file mode 100644 index 0000000000..a909ed3a4f --- /dev/null +++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c @@ -0,0 +1,264 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_norwegian.h" + +#define BASE 0 // default layer +#define BASE_MAC 1 // default layer mac +#define NUMB_SYMB 2 // numbers and symbols +#define NUMB_SYMB_MAC 3 // numbers and symbols mac +#define FUNCTION 4 // function keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Basic layer PC + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | [ | ] | { | } | * |Mac/PC| | ^ | $ | ( | ) | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ? | Q | W | F | P | G | " | | ' | J | L | U | Y | Å | Æ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | : | A | R | S | T | D |------| |------| H | N | E | I | O | Ø | + * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------| + * | ! | Z | X | C | V | B | | | | K | M | RIGHT| DOWN | UP | _ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Func | Lclk | Rclk | TAB |,/CTRL| | LEFT | Esc | ` | # | Num | + * `----------------------------------' `----------------------------------' + * ,-------------. ,--------------. + * | & | | | |Insert| / | + * ,------|------|------| |------+-------+------. + * | | | + | | Del | | | + * | Shift| ./Spc|------| |------| Enter |Space| + * | | |-/Alt | | Bspc | | | + * `--------------------' `---------------------' + */ +[BASE] = KEYMAP( + // left hand + NO_BSLS, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, NO_ASTR, TG(1), + NO_QUES, KC_Q, KC_W, KC_F, KC_P, KC_G, NO_QUO2, + NO_COLN, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_EXLM, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN, + MO(4), KC_BTN1, KC_BTN2, KC_TAB,GUI_T(KC_COMMA), + NO_AMPR, NO_PIPE, + NO_PLUS, + KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS), + // right hand + KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT, + NO_APOS, KC_J, KC_L, KC_U, KC_Y, NO_AA, NO_AE , + KC_H, KC_N, KC_E, KC_I, KC_O, NO_OSLH, + NO_EQL, KC_K, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_UNDS, + KC_LEFT, KC_ESC, KC_FN7, KC_HASH, MO(2), + KC_INSERT, NO_SLSH, + KC_DELT, + KC_BSPC,KC_ENT,KC_SPC + ), +/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | | | { | } | | | | | $ | | | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Func | | | |,/Ctrl| | | | ` | | Num | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | |./Cmd |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[BASE_MAC] = KEYMAP( + NO_BSLS_MAC, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CTL_T(KC_COMMA), + KC_TRNS, NO_PIPE_MAC, + KC_TRNS, + KC_TRNS,GUI_T(KC_DOT) , KC_TRNS, + // right hand + KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC, + NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, NO_GRV_MAC, KC_TRNS, MO(3), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Number ++ layer pc + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | % | | | | | | ~ | ´ | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | HOME | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUMB_SYMB] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS, + KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_FN2, KC_FN6 , KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS, + KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, + KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 3: Number ++ layer mac. Some keys have to be repeated from the pc symbol layer, since transient keys inherit from the layer we jump from, not the layer above. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | % | | | | | | ~ | ´ | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | HOME | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUMB_SYMB_MAC] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS, + KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_FN2, KC_FN10, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS, + KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, + KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 4: Function layer mac + pc + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | F3 | F2 | F1 | | |------| |------| | F5 | F6 | F7 | F8 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | F4 | | | | | | F9 | F10 | F11 | F12 | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[FUNCTION] = KEYMAP( + KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, + KC_TRNS, KC_F3 , KC_F2 , KC_F1 , KC_TRNS , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F4, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, + KC_TRNS, NO_TILD, 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 +) +}; + +enum macro_id { + TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. + [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed. + [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first. + [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first. + [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed. + [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed. + [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed. + [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly + [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly + [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed +}; + + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + keyevent_t event = record->event; + + switch (id) { + case TILDE_NO: + return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE); + case LESS_NO: + return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE); + case GRTR_NO: + return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE); + case CIRC_NO: + return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE); + case ACUT_NO: + return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE); + case GRV_NO: + return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE); + case LESS_NO_MAC: + return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE); + case GRTR_NO_MAC: + return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE); + case ACUT_NO_MAC: + return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE); + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md b/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md new file mode 100644 index 0000000000..48f095cae9 --- /dev/null +++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md @@ -0,0 +1,23 @@ +# Norwegian Colemak setup with osx/pc toggle + +## Motivation +I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I also wanted it to translate from a standard Norwegian keyboard OS setup. + +## Overview +The setup is created to be programmer friendly. +- Most of the symbols used in code can be activated without using layers or shift key. +- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb. +- Navigation is prioritized, arrows are right below the home row. + +## PC/Mac toggle +The default setup is for Norwegian keyboard setting(not colemak variants) on a PC(Windows or Linux). Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard. + +## Layers +Numbers and function buttons are on their own layers. The easiest way to switch layers(at least with my hands) in this setup, is to push your hand right below the little finger, on the layer switches. You will then have all your fingers free to type numbers or press function buttons. + +## Shift-key +Tap for the next character to be shifted, hold down for regular shift functionality + +## Layout + +![keyboard-layout](keyboard-layout.png) diff --git a/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png new file mode 100644 index 0000000000..6fba568fc3 Binary files /dev/null and b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png differ diff --git a/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png new file mode 100644 index 0000000000..b0a1c513cd Binary files /dev/null and b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png differ diff --git a/keyboards/ergodox/keymaps/csharp_dev/keymap.c b/keyboards/ergodox/keymaps/csharp_dev/keymap.c new file mode 100644 index 0000000000..e9648ede7d --- /dev/null +++ b/keyboards/ergodox/keymaps/csharp_dev/keymap.c @@ -0,0 +1,239 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define FKEYS 1 // F keys + macros + +#define MACRO_PUBLIC 10 +#define MACRO_PRIVATE 11 + +#define MACRO_STATIC 12 +#define MACRO_CONST 13 + +#define MACRO_VOID 14 +#define MACRO_VAR 15 +#define MACRO_STRING 16 + +#define MACRO_INT 17 +#define MACRO_FLOAT 18 +#define MACRO_BOOL 19 + +#define MACRO_RETURN 20 +#define MACRO_NULL 21 +#define MACRO_BREAK 22 + +#define MACRO_TODO 23 +#define MACRO_NEW 24 +#define MACRO_PARENTHESE 25 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ( | 1 | 2 | 3 | 4 | 5 | " | | Save | 6 | 7 | 8 | 9 | 0 | [ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ) | Q | W | E | R | T |Bkspa | | Del | Y | U | I | O | P | ] | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | { | A | S | D | F | G |------| |------| H | J | K | L | _ | Redo | + * |--------+------+------+------+------+------| / | | ; |------+------+------+------+------+--------| + * | } |Z~Alt | X | C | V | B | | | | N | M | ' | ! | ? | Undo | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Tab~CL| < | > | | | & | | = | + | - | * | L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |. ~L1 | , | |Home |End~L1| + * ,------|------|------| |------+------+------. + * | | | Copy | | UP | | | + * | Enter| Space|------| |------| Space|Enter | + * | ~WIN | ~LSFT| Past | | DOWN | ~LSFT| ~WIN | + * `--------------------' `--------------------' + */ +// 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_LPRN, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_QUOTE), + KC_RPRN, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPACE, + KC_LCBR, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_RCBR, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SLASH, + CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, + LT(1,KC_DOT), KC_COMM, + LCTL(KC_C), + GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V), + // right hand + LCTL(KC_S) , KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRACKET, + KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRACKET, + KC_H, KC_J, KC_K, KC_L, KC_UNDS,LCTL(KC_Y), + KC_SCOLON,KC_N, KC_M, KC_QUOTE ,KC_EXLM , LSFT(KC_SLASH), LCTL(KC_Z), + KC_EQUAL,KC_PLUS , KC_MINUS,KC_ASTR , TG(1), + KC_HOME, LT(1,KC_END), + KC_UP, + KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER) + ), + +/* Keymap 1: F keys + macros + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | F1 | F2 | F3 | F4 | F5 | ` | | Calc | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab |Public|Static|string|int |return| | | |//TODO| | | | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |Privat|Const |var |float |null |------| |------|new | | | | | | + * |--------+------+------+------+------+------| \ | | ~ |------+------+------+------+------+--------| + * | | | |void |bool |break;| | | |(); | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | WIN | Alt | | | | PgUp | PgDw | Ins | PtSc | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | Cut | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| Left | Right| + * | | | | | | | | + * `--------------------' `--------------------' + */ +// FKEYS + MACROS +[FKEYS] = KEYMAP( + // left hand + KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_GRAVE, + KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC), M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS, + KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL), + KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH, + KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS, + KC_TRNS,LCTL(KC_X), + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_CALCULATOR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, M(MACRO_TODO), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + M(MACRO_NEW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TILD, M(MACRO_PARENTHESE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_PGUP,KC_PGDOWN, KC_INSERT, KC_PSCREEN, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_LEFT, KC_RIGHT +), + + +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS) // FN1 - Momentary Layer 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 MACRO_PUBLIC: + if (record->event.pressed) { + return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END); + } + break; + case MACRO_PRIVATE: + if (record->event.pressed) { + return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END); + } + break; + case MACRO_STATIC: + if (record->event.pressed) { + return MACRO( T(S), T(T), T(A), T(T), T(I), T(C), T(SPACE), END); + } + break; + case MACRO_CONST: + if (record->event.pressed) { + return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END); + } + break; + case MACRO_VOID: + if (record->event.pressed) { + return MACRO( T(V), T(O), T(I), T(D), T(SPACE), END); + } + break; + case MACRO_VAR: + if (record->event.pressed) { + return MACRO( T(V), T(A), T(R), T(SPACE), END); + } + break; + case MACRO_STRING: + if (record->event.pressed) { + return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END); + } + break; + case MACRO_BOOL: + if (record->event.pressed) { + return MACRO( T(B), T(O), T(O), T(L), T(SPACE), END); + } + break; + case MACRO_INT: + if (record->event.pressed) { + return MACRO( T(I), T(N), T(T), T(SPACE), END); + } + break; + case MACRO_FLOAT: + if (record->event.pressed) { + return MACRO( T(F), T(L), T(O), T(A),T(T),T(SPACE), END); + } + break; + case MACRO_RETURN: + if (record->event.pressed) { + return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), END); + } + break; + case MACRO_NULL: + if (record->event.pressed) { + return MACRO( T(N), T(U), T(L), T(L), END); + } + case MACRO_BREAK: + if (record->event.pressed) { + return MACRO( T(B), T(R), T(E), T(A), T(K), T(SCOLON), END); + } + break; + case MACRO_TODO: + if (record->event.pressed) { + return MACRO( T(SLASH), T(SLASH), D(LSHIFT) ,T(T), T(O), T(D), T(O),U(LSHIFT), T(SPACE),END); + } + break; + case MACRO_NEW: + if (record->event.pressed) { + return MACRO( T(N), T(E), T(W), T(SPACE), END); + } + break; + case MACRO_PARENTHESE: + if (record->event.pressed) { + return MACRO( D(LSHIFT),T(9), T(0),U(LSHIFT), T(SCOLON), 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) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/csharp_dev/readme.md b/keyboards/ergodox/keymaps/csharp_dev/readme.md new file mode 100644 index 0000000000..96af077ade --- /dev/null +++ b/keyboards/ergodox/keymaps/csharp_dev/readme.md @@ -0,0 +1,47 @@ +# ErgoDox EZ C# Developer configuration + +## Changelog + +* Feb 12, 2016 (V1): + * First version commit +* Mar 20, 2016 (V2): + * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter + +## About +This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions. + +I came to the realization that my main tool as a developer, the qwerty keyboard was something that did not evolved at its core in almost 150 years. +There are a lot of reasons to this, and it would be a massive entreprise to change a standard so strongly anchored, but I wanted to give it a try and see how would look an input device dedicated to developers, more specifically a C# developer in my case. +The biggest flaw in standard QWERTY keyboards was that I always needed to perform key combination to access commonly used characters or actions. Think about it a minute, how many times a day do you press a modifier key such as Ctrl or Shift, it's insane and could be so easily optimized to require only one key press. + +Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design. + +![CSharpDev](csharp_dev_legend.png) + +## Layout design principles +* No key combination required for the most common input characters ( (),[],{},<> ... ) +* No key combination required for the most common actions (copy/paste/undo/save) +* Regroup characters by usage ( + - * = ...) +* Easy access to the most commonly used characters: ; / " . , +* Preregistered macro for the most common C# langage instructions: public / private / string / int / float ... + +## Why is it specific to C Sharp +I defined the characters priority based on their usage in C# language, most of this characters are also used in other coding languages but it may require some tweaking. +For example there is no direct access to ~ or $ keys which can be very common in some languages. +Note it is also specific to Windows environement as the shortcut used in action keys would not work on Mac Os + +## In usage +It was relatively easy to get used to the layout, but it's hard for me to define how easy it was as I was getting used to a blank Ergodox keyboard at the same time. +Still it's extremely satisfying to Save your file with just one easily accessible key or to have one big key to end your code line ( ; ) + +## Improvements +This layout was shared after a bunch of iterations and only once I was happy with it. +Still there are many way to improve or iterate on this: +* Make it language agnostic +* Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g. https://dzone.com/articles/most-pressed-keys-various ) +* QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur + +## Issues +One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold ) + + diff --git a/keyboards/ergodox/keymaps/dave/keymap.c b/keyboards/ergodox/keymaps/dave/keymap.c new file mode 100644 index 0000000000..e9480af3e9 --- /dev/null +++ b/keyboards/ergodox/keymaps/dave/keymap.c @@ -0,0 +1,199 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define PROG 1 // programming +#define NAVI 2 // navigation + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | BkSpce | + * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | Y | | G | Y | U | I | O | P | Enter | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | + * |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |`/Ctrl| \ | | | LAlt | | RAlt | [ | ] | |'/Ctrl| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | PrtS | PrtS | | CtAl | CtAl | + * ,------+------+------| |------+------+------. + * | | | L1 | | L1 | | | + * | Spce | ~L2 +------| |------+ ~L1 | Spce | + * | | | LGui | | RGui | | | + * `--------------------' `--------------------' + */ +// 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_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, + KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H, + CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT, + KC_PSCREEN, KC_PSCREEN, + TO(PROG, ON_PRESS), + KC_SPC, MO(NAVI), KC_LGUI, + // right hand + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, + KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, + KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_RALT,KC_LBRC,KC_RBRC,KC_NO, CTL_T(KC_QUOT), + MT(0x5, KC_NO), MT(0x5, KC_NO), + TO(PROG, ON_PRESS), + KC_RGUI, MO(PROG), KC_SPC + ), + +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | K/ | K* | K- | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | ( | ) | | | | | | | K7 | K8 | K9 | K+ | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | { | } | ` |------| |------| | K4 | K5 | K6 | K+ | ' | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | K1 | K2 | K3 | K= | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | K0 | K0 | K. | K= | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | L2 | | L2 | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// PROGRAMMING +[PROG] = KEYMAP( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, + TO(NAVI, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NUHS, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_QUOT, + KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, + KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(NAVI, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Navigation and system keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Home | Up | End | Ins | PgUp | | | | | | Ins | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Left | Down | Rght | Del | PgDn |------| |------| | Back | Del | Fwrd | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Lclk | MsUp | Rclk | | | | | | | Prev | Play | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | L0 | | L0 | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// NAVIGATION +[NAVI] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN, + KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(BASE, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(BASE, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + //[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols) + //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation) +}; + +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) { + /* leds is a static array holding the current brightness of each of the + * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and + * -1s in the code below, and because wasting a byte really doesn't matter + * that much (no, it *doesn't*, stop whinging!). Note that because it's + * static it'll maintain state across invocations of this routine. + */ + static uint8_t leds[4]; + uint8_t led; + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + + /* Loop over each LED/layer */ + for (led = 1; led <= 3; ++led) { + /* If the current layer matches the current LED, increment its + * brightness by 1 up to a maximum of 255. If the current layer doesn't + * match, decrement its brightness by 1 down to a minimum of zero. + */ + leds[led] += (layer == led) ? + (leds[led] < 255 ? 1 : 0): + (leds[led] > 0 ? -1 : 0); + /* Set LED state according to the new brightness */ + if (leds[led]) { + ergodox_right_led_on(led); + ergodox_right_led_set(led, leds[led]); + } + else { + ergodox_right_led_off(led); + } + } + + +}; diff --git a/keyboards/ergodox/keymaps/dave/readme.md b/keyboards/ergodox/keymaps/dave/readme.md new file mode 100644 index 0000000000..aa0f9bd192 --- /dev/null +++ b/keyboards/ergodox/keymaps/dave/readme.md @@ -0,0 +1,38 @@ +This keymap is my preferred layout (after a certain amount of experimentation). +The rationale behind the design is as follows: + +I grew up typing from a very early age and thus never learned the "correct" way +to touch type (essentially, I'm self-taught). As a, result my fingers don't +tend to stay on the "home keys" and occasionally my right hand wants to type +keys that are on the left of the keyboard, and vice versa. + +Hence, despite liking the idea of split keyboards in principle, I've never been +able to get on with them because the split simply doesn't work with my style of +typing. The Ergodox solves this neatly by virtue of having a few extra keys in +the "middle" of the keyboard which I can utilise for deliberate redundancy. +Thus in this keymap there are two "6" keys (one on the left, one on the right) +and likewise Y, H, G, and B are all duplicated to enable one-handed patterns +that I use frequently (e.g. "byobu" with the right hand, "yes" with the left, +etc.). + +I occasionally use the numeric pad for data entry, thus this is duplicated +under the natural home position of the right hand in layer 1 (activated by +holding one of the right thumb buttons), while the cursor keys are duplicated +under the classic WASD gaming layout of the left hand in layer 2 (activated by +holding one of the left thumb buttons). Various other useful keys also appear +in these layers (brackets and symbols for coding in layer 1, navigation and +F-keys in layer 2, etc.). + +Finally, modifier keys like Ctrl, Shift, and Alt, along with Backspace and +Enter are all in traditional locations in an effort to reuse existing muscle +memory as much as possible (keys like =, #, and ' are in layer 1). The layout +maps are in the comments of keymap_dave.c so I won't bother duplicating them +here. + +Oh, and the LEDs are rather pimped ... because I could! + +Anyway, although I'm sure this keymap won't be to many people's taste you might +find some interesting ideas in here for your own layouts. Do tweet me +(@waveform80) if you have any questions / suggestions / bugs. + +Dave. diff --git a/keyboards/ergodox/keymaps/default/default.png b/keyboards/ergodox/keymaps/default/default.png new file mode 100644 index 0000000000..6575f7b5e3 Binary files /dev/null and b/keyboards/ergodox/keymaps/default/default.png differ diff --git a/keyboards/ergodox/keymaps/default/default_highres.png b/keyboards/ergodox/keymaps/default/default_highres.png new file mode 100644 index 0000000000..7d9f045f43 Binary files /dev/null and b/keyboards/ergodox/keymaps/default/default_highres.png differ diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c new file mode 100644 index 0000000000..f1a83f4e79 --- /dev/null +++ b/keyboards/ergodox/keymaps/default/keymap.c @@ -0,0 +1,182 @@ +#include "ergodox.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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, 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, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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 + M(0), 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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox/keymaps/default/readme.md b/keyboards/ergodox/keymaps/default/readme.md new file mode 100644 index 0000000000..8f6dba45e9 --- /dev/null +++ b/keyboards/ergodox/keymaps/default/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) diff --git a/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png new file mode 100644 index 0000000000..04f46bbd54 Binary files /dev/null and b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png differ diff --git a/keyboards/ergodox/keymaps/default_osx/keymap.c b/keyboards/ergodox/keymaps/default_osx/keymap.c new file mode 100644 index 0000000000..c57ffbb889 --- /dev/null +++ b/keyboards/ergodox/keymaps/default_osx/keymap.c @@ -0,0 +1,187 @@ +// Netable differences vs. the default firmware for the ErgoDox EZ: +// 1. The Cmd key is now on the right side, making Cmd+Space easier. +// 2. The media keys work on OSX (But not on Windows). +#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, 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, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_LGUI, + MEH_T(KC_NO),KC_N, 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/keyboards/ergodox/keymaps/default_osx/readme.md b/keyboards/ergodox/keymaps/default_osx/readme.md new file mode 100644 index 0000000000..aa749aac90 --- /dev/null +++ b/keyboards/ergodox/keymaps/default_osx/readme.md @@ -0,0 +1,8 @@ +# The OSX Friendly Version of the Default Firmware + +So, I took the default firmware and just made a couple of tweaks that make it easier to use with OS X: + +1. The Cmd key is now on the right side, making Cmd+Space easier. +2. The media keys work on OSX (But not on Windows). + +![default osx](default_osx_highres.png) diff --git a/keyboards/ergodox/keymaps/dragon788/keymap.c b/keyboards/ergodox/keymaps/dragon788/keymap.c new file mode 100644 index 0000000000..3aec8c6cf9 --- /dev/null +++ b/keyboards/ergodox/keymaps/dragon788/keymap.c @@ -0,0 +1,229 @@ +#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 +#define PLVR 3 // Plover layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LGui | |Plover| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L2 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | '"/Ctrl| + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ~L1 | Grv | '" | Left |Rgt/L2| | Up/L2| Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | Home | | PgUp |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgDn | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | ace | | LAlt | |TabCtl| | | + * `--------------------' `----------------------' + */ +// 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_LGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + CTL_T(KC_ESC), 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_NO), + KC_FN1, KC_GRV, KC_QUOT,KC_LEFT, LT(MDIA, KC_RGHT), + KC_APP, KC_HOME, + KC_END, + KC_BSPC,KC_DELT,KC_LALT, + // right hand + TG(3), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + LT(MDIA, KC_UP), KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_PGUP, CTL_T(KC_ESC), + KC_PGDN, + CTL_T(KC_TAB),KC_ENT, 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 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | Calc | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// 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_CALC, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | Rclk | Lclk | | | | | | Lclk | Rclk | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft| MsUp |MsDown|MsRght|------| |------|MsLeft|MsDown| MsUp |MsRght| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | Prev | |VolUp | | + * ,------|------|------| |------+------+------. + * | | | Play | | Mute |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Fwd |Back | + * | | | Next | |VolDn | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, 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_TRNS, + KC_TRNS, KC_MPRV, + KC_MPLY, + KC_BTN1, KC_BTN2, KC_MNXT, + // right hand + 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_MS_L, KC_MS_D, KC_MS_U, 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_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_TRNS, + KC_MUTE, + KC_VOLD, KC_WBAK, KC_WFWD +), + +/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | c | v |------| |------| n | m | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_FN4, KC_NO, + KC_NO, + KC_C, KC_V, KC_NO, + // right hand + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M +), + +}; + +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/keyboards/ergodox/keymaps/dvorak/dvorak.png b/keyboards/ergodox/keymaps/dvorak/dvorak.png new file mode 100644 index 0000000000..cb83163095 Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak/dvorak.png differ diff --git a/keyboards/ergodox/keymaps/dvorak/keymap.c b/keyboards/ergodox/keymaps/dvorak/keymap.c new file mode 100644 index 0000000000..22947327d3 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak/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 | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1), + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, 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_BSLS, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, + MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), 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 +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/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png new file mode 100644 index 0000000000..6a36f9bfa1 Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png differ diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png new file mode 100644 index 0000000000..c6e6d913cb Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png differ diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png new file mode 100644 index 0000000000..23f56ff4c0 Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png differ diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c new file mode 100644 index 0000000000..82f55b4bc0 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c @@ -0,0 +1,185 @@ +#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 | BrBck| | Play | 6 | 7 | 8 | 9 | 0 | \ / L2 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Esc | ' | , | . | P | Y | Del | | Ins | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| LAlt | LGui | Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | App | L1 | | L2 |PrntScr | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space| Tab |------| |------| AltShf |Enter | + * | | | 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_WBAK, + KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DELT, + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_LALT, KC_LGUI, KC_LEFT,KC_RGHT, + CTL_T(KC_APP), TG(1), + KC_HOME, + KC_SPC,KC_TAB,KC_END, + // right hand + KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, LT(MDIA, KC_BSLS), + KC_INS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + TG(2), KC_PSCREEN, + KC_PGUP, + KC_PGDN,RALT(KC_RSFT), KC_ENT + ), +/* Keymap 1: Symbol & Media Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Prev | Next | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | |VolUp | | | + * | | |------| |------| Mute | | + * | | | | |VolDn | | | + * `--------------------' `--------------------' + */ +// 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_MPRV,KC_MNXT, + 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_VOLU, + KC_VOLD, KC_MUTE, KC_TRNS +), +/* Keymap 2: QWERTY Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Q | W | E | R | T | | | | Y | U | I | O | P | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | A | S | D | F | G |------| |------| H | J | K | L | ; | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( // layer 0 : default + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, + KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_TRNS, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, 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_TRNS, + KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_TRNS, + KC_TRNS, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), 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_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/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md b/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md new file mode 100644 index 0000000000..984106ff46 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md @@ -0,0 +1,29 @@ +# ErgoDox EZ Dvorak International Squisher + +Dvorak layout adjusted with several (linux) applications in mind: + +* Easier Escape for VIM +* Windows/Super key for awesome WM +* Alt+Shift for international characters +* PrintScreen for sys-rq +* Insert for the X11 clip-board + +Major layer changes: + +* Common multimedia keys are integrated into layer 0, less common into layer 1 +* No mouse keys +* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users) + +Known issues: + +* Alt+Shift does not work reliably (depends on the X11 kb layout? Not + entirely clear...) + +![layer0](keyboard-layout0.png) +![layer1](keyboard-layout1.png) +![layer2](keyboard-layout2.png) + +## Changelog + +* 2016-03-29 + * Initial release diff --git a/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c new file mode 100755 index 0000000000..6eb864b447 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c @@ -0,0 +1,284 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +/****************************************************************************************** + * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/) + * Layer 1: auxiliary keys + * Layer 2: full qwerty layout + ****************************************************************************************** + * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly + *****************************************************************************************/ + +// LAYERS +#define BASE 0 // dvorak layout (default) +#define AUX 1 // auxiliary keys +#define QWERTY 2 // qwerty layout + +// MACROS +#define OBRACE 0 // key { or shift +#define CBRACE 1 // key } or shift +#define OBRACK 2 // key [ or left alt +#define CBRACK 3 // key ] or left alt +#define CAPS 4 // caps lock + +// LEDS +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + +// TIMERS +#define KEY_TAP_FAST 85 +#define KEY_TAP_SLOW 95 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base layer + * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| + * |Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | |F3/SA | |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[BASE] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P, KC_Y, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, + M(OBRACE), KC_SLSH,KC_Q, KC_J, KC_K, KC_X, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), LT(AUX, KC_F6), + MT((MOD_LALT | MOD_LCTL), KC_F4), + KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3), + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_FN1, KC_F, KC_G, KC_C, KC_H, KC_L, ALL_T(KC_RBRACKET), + KC_D, KC_R, KC_T, KC_N, KC_S, CTL_T(KC_QUOTE), + KC_RALT, KC_B, KC_M, KC_W, KC_V, KC_Z, M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + LT(AUX, KC_F7), LCAG_T(KC_F8), + MT((MOD_LALT | MOD_LCTL), KC_F11), + MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC + ), +/* Keymap 1: Aux layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | SLEEP | PWR | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | `^ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç | + * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------| + * |CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | Play | + * ,------|------|------| |------+------+------. + * | | | | | VolUp| | | + * | Lclk | Rclk |------| |------| Prev | Next | + * | | | L2 | | VolDn| | | + * `--------------------' `--------------------' + */ +[AUX] = KEYMAP( + // left hand + KC_NO , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLEP, + KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO, + KC_NO , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO , + M(CAPS), KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO, + LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), + KC_NO , KC_TRNS, + KC_NO, + KC_BTN1, KC_BTN2, TG(QWERTY), + // right hand + KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_LBRACKET, + KC_NO, KC_4, KC_5, KC_6, KC_PPLS, KC_BSLASH, + KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_NO, + KC_NO ,KC_DOT, KC_0, KC_PEQL, KC_NO, + KC_TRNS, KC_MPLY, + KC_VOLU, + KC_VOLD, KC_MPRV, KC_MNXT +), +/* Keymap 2: QWERTY layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------| + * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG| TRANS| | TRANS|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | | TRANS| |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[QWERTY] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + M(OBRACE), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), KC_TRNS, + MT((MOD_LALT | MOD_LCTL), KC_F4), + KC_ENT,KC_TAB,KC_TRNS, + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, ALL_T(KC_RBRACKET), + KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOTE), + KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + KC_TRNS, LCAG_T(KC_F8), + MT((MOD_LALT | MOD_LCTL), KC_F11), + MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux) +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case OBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_QUOTE); + unregister_code(KC_QUOTE); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_BSLS); + unregister_code(KC_BSLS); + unregister_code(KC_RALT); + } + } + break; + } + case OBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_LBRACKET); + unregister_code(KC_LBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_RBRACKET); + unregister_code(KC_RBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CAPS: { + if (record->event.pressed) { + register_code(KC_CAPSLOCK); + } else { + unregister_code(KC_CAPSLOCK); + } + 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) { + case 1: + ergodox_right_led_3_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + + // Turn the caps lock led on + if (host_keyboard_leds() & (1< + +,--------------------------------------------------. ,--------------------------------------------------. +| \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | +|--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| +|Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | +|--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| +| {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | +'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------' + |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + '----------------------------------' '----------------------------------' + ,-------------. ,-------------. + |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| + ,------|------|------| |------+--------+------. + | | |F4/CA | |F11/CA| | | + | ENTER| TAB |------| |------| BSPC | SPACE| + | | |F3/SA | |F12/SA| | | + '--------------------' '----------------------' + CAG = CTRL-ALT-GUI + CA = CTRL-ALT + SA = SHIFT-ALT + + + +### Keymap 1: Aux layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      | Play |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       | VolUp|      |      |
+                                | Lclk | Rclk |------|       |------| Prev | Next |
+                                |      |      |  L2  |       | VolDn|      |      |
+                                '--------------------'       '--------------------'
+
+
+ +### Keymap 2: QWERTY layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      | TRANS|       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+
+ + +## Generation of .hex file +> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox) + +> Execute install.sh and generate.sh scripts. + +> Flash with `teensy_loader` binary (should be installed from previous step) diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png new file mode 100644 index 0000000000..1d2583740c Binary files /dev/null and b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png differ diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c new file mode 100644 index 0000000000..1d8e66a082 --- /dev/null +++ b/keyboards/ergodox/keymaps/emacs_osx_dk/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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Grv | 1 | 2 | 3 | 4 | 5 | L1 | | L2 | 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | \/LCtrl| A | S | D | F | G |------| |------| H | J | K | L | ; |'/RCtrl | + * |--------+------+------+------+------+------| RAlt | | RAlt |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ~L1 | LCtrl| Left| Right| LAlt | | LAlt | Up | Down | RCtrl| ~L2 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Del | Ins | | Esc | App | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| LGui |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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(SYMB), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_RALT, + MO(SYMB), KC_LCTRL, KC_LEFT,KC_RGHT,KC_LALT, + KC_DELT,KC_INS, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + TG(MDIA), KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), + KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_LALT,KC_UP, KC_DOWN,KC_RCTRL, MO(MDIA), + KC_ESC, KC_APP, + KC_PGUP, + KC_PGDN, KC_LGUI, 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 | 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_0, KC_0, KC_DOT, 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/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md b/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md new file mode 100644 index 0000000000..4839988d9b --- /dev/null +++ b/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Emacs-OSX-DeadKeys Configuration + +Since I'm an Emacs user, ctrl keys are very important and gets a placement where the usual caps_lock is. There +are an extra pair of ctrls, just in case there where problems with the holding one's, but not as comfortable. + +Gui button takes a predominant place on the thumb cluster, as I'm using a mac os x and it relies heavily on it. + +Finally there is also two Right Alts to easily access to accented letters of the spanish alphabet. + +![Default](default_highres.png) diff --git a/keyboards/ergodox/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/erez_experimental/Makefile new file mode 100644 index 0000000000..b673c5ce52 --- /dev/null +++ b/keyboards/ergodox/keymaps/erez_experimental/Makefile @@ -0,0 +1,9 @@ +# Having a file like this allows you to override Makefile definitions +# for your own particular keymap + +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +COMMAND_ENABLE = no # Commands for debug and configuration + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/erez_experimental/config.h b/keyboards/ergodox/keymaps/erez_experimental/config.h new file mode 100644 index 0000000000..e5d7fe1885 --- /dev/null +++ b/keyboards/ergodox/keymaps/erez_experimental/config.h @@ -0,0 +1,12 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 300 + +#undef LEADER_TIMEOUT +#define LEADER_TIMEOUT 300 + +#endif diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c new file mode 100644 index 0000000000..04ad2a8167 --- /dev/null +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -0,0 +1,199 @@ +#include +#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' | + * |--------+------+------+------+------+------| 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|Leader|------| |------| Tab/L1 |Enter | + * | | | 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_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_LEAD,KC_END, + // right hand + KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_MINS), + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,LT(SYMB, KC_TAB), KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 1 | 2 | 3 | 4 | 5 |------| |------| & | _ | - | ; | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 6 | 7 | 8 | 9 | 0 | | | | | | @ | = | % | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | |NxtTab|PrvTab| | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN), + 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS, + KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | PgUp | Home | End | PgDn | |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_PGUP, KC_HOME, KC_END, 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, 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) + [2] = ACTION_MACRO_TAP(0), // Eric Tang's Famous Macro! + [3] = ACTION_MACRO_TAP(1) // Eric Tang's Famous Macro! +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +LEADER_EXTERNS(); + +// 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; + } + + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_ONE_KEY(KC_W) { + register_code(KC_LALT); + register_code(KC_F4); + unregister_code(KC_F4); + unregister_code(KC_LALT); + } + SEQ_ONE_KEY(KC_O) { + register_code(KC_LCTL); + register_code(KC_LSFT); + register_code(KC_O); + unregister_code(KC_O); + unregister_code(KC_LSFT); + unregister_code(KC_LCTL); + } + } +} + diff --git a/keyboards/ergodox/keymaps/erez_experimental/readme.md b/keyboards/ergodox/keymaps/erez_experimental/readme.md new file mode 100644 index 0000000000..66acfa187b --- /dev/null +++ b/keyboards/ergodox/keymaps/erez_experimental/readme.md @@ -0,0 +1,51 @@ +# Erez's experimental layout + +This is my personal layout which I use to test out ideas which may or may not make it onto the default layout we ship with. It's based off the default layout, with various tweaks. + +Changelog: + +## May 24, 2016: + +* Implements Leader key example + * Leader, W sends Alt-F4 + * Leader, O sends Ctrl-shift-o (a shortcut I use in FrontApp) + +## May 8, 2016: + +* Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held +* Tweaked the positions of the numbers on the symbol layer. Basically, 12345 are now directly under their number-row counterparts in layer 0. You can imagine pulling the number row down to the home row. And 67890 are directly under 12345 - so it's a matter of just adding 5 and going to the next row (1+5 = 6, 2+5 = 7 and so on). +* Tweaks media/nav layer + * Removes mouse control, as I don't use it + * Makes left home row keys PgUp, Home, End, PgDn + +## Apr 29, 2016: + +* Tweaks the Hyper and Meh key to send brackets when tapped +* Turns bottom-right key into a minus/underscore (easy to reach with the right pinky) + +## Apr 25, 2016: + +* Made it so that the right and left Shift keys send opening and closing parens ( ) when tapped + +## Feb 11, 2016: + +* Updated ASCII legend for thumb clusters +* Made it so outer left-hand thumb key is L1 momentary toggle +* Added % and @ to L1 +* Swapped positions for _ and - on L1 + +## Feb 5, 2016: + +* A whole new design for the symbol layer. Specifically: + * Put the minus, underscore, and semicolon right in the homerow for the right hand + * Parens are in better places for me + * The arrow keys now send Ctrl-PgUp and Ctrl-PgDn, for switching browser tabs with the arrows when in symbol layer + * Tab (right-hand outer thumb key) now does double duty to toggle symbol layer when held down + * Backspace (left-hand outer thumb key) now just toggles symbol layer (I wasn't using it as a backspace) + + +## Jan 19, 2016: + +* Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic. +* Made ' into dual-action key (Win/Cmd when held down). + diff --git a/keyboards/ergodox/keymaps/german-kinergo/keymap.c b/keyboards/ergodox/keymaps/german-kinergo/keymap.c new file mode 100644 index 0000000000..b1cecf0ddd --- /dev/null +++ b/keyboards/ergodox/keymaps/german-kinergo/keymap.c @@ -0,0 +1,210 @@ +// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan. +// +// chschmitz, 2016-01-27 +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_german.h" + +// Layer names +#define BASE 0 // default layer +#define SYMB 1 // symbol layer +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * X'es mark the spots where this is different from the "german" layout which it is based on. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |X Esc X| 1 | 2 | 3 | 4 | 5 |X ` X| |XPRSCX| 6 | 7 | 8 | 9 | 0 | ß | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * |X Tab X| Q | W | E | R | T |X L1 X| |X L1 X| Z | U | I | O | P | Ü | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 | + * |--------+------+------+------+------+------|X L2 X| |X L2 X|------+------+------+------+------+--------| + * | LShift | Y | X | C | V | B | | | | N | M | , | . |X - X| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |XLGuiX|X ^ X|X < X|XLEFTX|XRIGHT| |XDownX|X Up X|X # X|X + X|XRGuiX| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |XCTRLX|XALTX | | Alt |Ctrl/Esc| + * ,------+------+------| |------+--------+------. + * |XXX |XXX | Home | | PgUp |XXX |XXX | + * | Bkspc|Del |------| |------| Enter | Space| + * | | | 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, DE_ACUT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1), + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, MO(2), + KC_LGUI, DE_CIRC, DE_LESS, KC_LEFT, KC_RIGHT, + KC_LCTRL, KC_LALT, + KC_HOME, + KC_BSPC,KC_DELT,KC_END, + // right hand + KC_PSCREEN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MO(1), DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, + KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE), + MO(2), KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT, + KC_DOWN, KC_UP, DE_HASH, DE_PLUS, KC_RGUI, + KC_RALT, KC_RCTRL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +// [BASE] = KEYMAP( // layer 0 : default +// // left hand +// KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY, +// KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), +// KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, +// KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), +// LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT, DE_MINS, DE_PLUS, +// ALT_T(KC_APP), KC_LGUI, +// KC_HOME, +// KC_SPC,KC_BSPC,KC_END, +// // right hand +// KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, +// TG(2), DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, +// KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE), +// MEH_T(KC_NO),KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(DE_MINS), KC_RSFT, +// KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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,DE_EXLM,DE_AT, DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS, + KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV, + KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_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, DE_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, DE_PLUS, KC_TRNS, + KC_TRNS, DE_AMPR, KC_1, KC_2, KC_3, DE_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, DE_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Back |Forwd | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, + KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, + KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, KC_TRNS, + // right hand + KC_TRNS, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11, + KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12, + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, + KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_WBAK, KC_WFWD +), +}; + +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) { + case SYMB: + ergodox_right_led_1_on(); + break; + case MDIA: + ergodox_right_led_2_on(); + break; + default: + ergodox_board_led_off(); + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout-code.png b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png new file mode 100644 index 0000000000..a0ef551e12 Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png differ diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout-media.png b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png new file mode 100644 index 0000000000..56aea1dca4 Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png differ diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout.png b/keyboards/ergodox/keymaps/german-kinergo/layout.png new file mode 100644 index 0000000000..76a1aa5d7a Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout.png differ diff --git a/keyboards/ergodox/keymaps/german-kinergo/readme.md b/keyboards/ergodox/keymaps/german-kinergo/readme.md new file mode 100644 index 0000000000..557d85a8a4 --- /dev/null +++ b/keyboards/ergodox/keymaps/german-kinergo/readme.md @@ -0,0 +1,35 @@ +# German Layout for the ErgoDox + +This layout is inspired by the "kinesis-qwerty-mod" from benblazak's +[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the +[qmk_firmware](https://github.com/jackhumbert/qmk_firmware). +The goal was to have a layout that is pretty close to an ordinary German +keyboard, so I don't have to make adjustments on the operating system level +and I keep some of the muscle memory to use a regular keyboard. + +Modifications I made with regard to the aforementioned layouts: + +* The key layout is pretty close to the layout of a German Kinesis Ergo Elan. + The only exception I made is that I reversed the "up" and "down" cursor keys, + since that feels more natural to me. + +* All layer changes are "momentary", i.e. they only last as long as the respective key is pressed. + +* I sacrificed the Hyper and Meh keys, which I don't use, and put layer change keys in their place. + +* I added a PrintScreen key which I use quite regularly for screenshots. + +## Default Layer + +![Layout of the default layer](layout.png "Layout of the default layer") + +## Code Layer + +![Layout of the code layer](layout-code.png "Layout of the code layer") + +## Media Layer + +![Layout of the media layer](layout-media.png "Layout of the media layer") + +Christoph Schmitz <schm4704 at web dot de> +2016-01-28 diff --git a/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py b/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py new file mode 100644 index 0000000000..7076a6ecb2 --- /dev/null +++ b/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py @@ -0,0 +1,710 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Compiler for keymap.c files + +This scrip will generate a keymap.c file from a simple +markdown file with a specific layout. + +Usage: + python compile_keymap.py INPUT_PATH [OUTPUT_PATH] +""" +from __future__ import division +from __future__ import print_function +from __future__ import absolute_import +from __future__ import unicode_literals + +import os +import io +import re +import sys +import json +import unicodedata +import collections +import itertools as it + +PY2 = sys.version_info.major == 2 + +if PY2: + chr = unichr + + +KEYBOARD_LAYOUTS = { + # These map positions in the parsed layout to + # positions in the KEYMAP MATRIX + 'ergodox_ez': [ + [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44], + [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51], + [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57], + [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64], + [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69], + [ 32, 33], [70, 71 ], + [ 34], [72 ], + [ 35, 36, 37], [73, 74, 75 ], + ] +} + +ROW_INDENTS = { + 'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0] +} + +BLANK_LAYOUTS = [ +# Compact Layout +""" +.------------------------------------.------------------------------------. +| | | | | | | | | | | | | | | +!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! +| | | | | | | | | | | | | | | +!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! +| | | | | | |-----!-----! | | | | | | +!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! +| | | | | | | | | | | | | | | +'-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' +""", + +# Wide Layout +""" +.---------------------------------------------. .---------------------------------------------. +| | | | | | | | ! | | | | | | | +!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! +| | | | | | | | ! | | | | | | | +!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! +| | | | | | |-------! !-------! | | | | | | +!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! +| | | | | | | | ! | | | | | | | +'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' + | | | | | | ! | | | | | + '------------------------------' '------------------------------' + .---------------. .---------------. + | | | ! | | + .-------+-------+-------! !-------+-------+-------. + ! ! | | ! | ! ! + ! ! !-------! !-------! ! ! + | | | | ! | | | + '-----------------------' '-----------------------' +""", +] + + +DEFAULT_CONFIG = { + "keymaps_includes": [ + "keymap_common.h", + ], + 'filler': "-+.'!:x", + 'separator': "|", + 'default_key_prefix': ["KC_"], +} + + +SECTIONS = [ + 'layout_config', + 'layers', +] + + +# Markdown Parsing + +ONELINE_COMMENT_RE = re.compile(r""" + ^ # comment must be at the start of the line + \s* # arbitrary whitespace + // # start of the comment + (.*) # the comment + $ # until the end of line +""", re.MULTILINE | re.VERBOSE +) + +INLINE_COMMENT_RE = re.compile(r""" + ([\,\"\[\]\{\}\d]) # anythig that might end a expression + \s+ # comment must be preceded by whitespace + // # start of the comment + \s # and succeded by whitespace + (?:[^\"\]\}\{\[]*) # the comment (except things which might be json) + $ # until the end of line +""", re.MULTILINE | re.VERBOSE) + +TRAILING_COMMA_RE = re.compile(r""" + , # the comma + (?:\s*) # arbitrary whitespace + $ # only works if the trailing comma is followed by newline + (\s*) # arbitrary whitespace + ([\]\}]) # end of an array or object +""", re.MULTILINE | re.VERBOSE) + + +def loads(raw_data): + if isinstance(raw_data, bytes): + raw_data = raw_data.decode('utf-8') + + raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) + raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) + raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data) + return json.loads(raw_data) + + +def parse_config(path): + def reset_section(): + section.update({ + 'name': section.get('name', ""), + 'sub_name': "", + 'start_line': -1, + 'end_line': -1, + 'code_lines': [], + }) + + def start_section(line_index, line): + end_section() + if line.startswith("# "): + name = line[2:] + elif line.startswith("## "): + name = line[3:] + else: + name = "" + + name = name.strip().replace(" ", "_").lower() + if name in SECTIONS: + section['name'] = name + else: + section['sub_name'] = name + section['start_line'] = line_index + + def end_section(): + if section['start_line'] >= 0: + if section['name'] == 'layout_config': + config.update(loads("\n".join( + section['code_lines'] + ))) + elif section['sub_name'].startswith('layer'): + layer_name = section['sub_name'] + config['layer_lines'][layer_name] = section['code_lines'] + + reset_section() + + def amend_section(line_index, line): + section['end_line'] = line_index + section['code_lines'].append(line) + + config = DEFAULT_CONFIG.copy() + config.update({ + 'layer_lines': collections.OrderedDict(), + 'macro_ids': {'UM'}, + 'unicode_macros': {}, + }) + + section = {} + reset_section() + + with io.open(path, encoding="utf-8") as fh: + for i, line in enumerate(fh): + if line.startswith("#"): + start_section(i, line) + elif line.startswith(" "): + amend_section(i, line[4:]) + else: + # TODO: maybe parse description + pass + + end_section() + assert 'layout' in config + return config + +# header file parsing + +IF0_RE = re.compile(r""" + ^ + #if 0 + $.*? + #endif +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +COMMENT_RE = re.compile(r""" + /\* + .*? + \*/" +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def read_header_file(path): + with io.open(path, encoding="utf-8") as fh: + data = fh.read() + data, _ = COMMENT_RE.subn("", data) + data, _ = IF0_RE.subn("", data) + return data + + +def regex_partial(re_str_fmt, flags): + def partial(*args, **kwargs): + re_str = re_str_fmt.format(*args, **kwargs) + return re.compile(re_str, flags) + return partial + + +KEYDEF_REP = regex_partial(r""" + #define + \s + ( + (?:{}) # the prefixes + (?:\w+) # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_RE = re.compile(r""" + ( + enum + \s\w+\s + \{ + .*? # the enum content + \} + ; + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_KEY_REP = regex_partial(r""" + ( + {} # the prefixes + \w+ # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def parse_keydefs(config, data): + prefix_options = "|".join(config['key_prefixes']) + keydef_re = KEYDEF_REP(prefix_options) + enum_key_re = ENUM_KEY_REP(prefix_options) + for match in keydef_re.finditer(data): + yield match.groups()[0] + + for enum_match in ENUM_RE.finditer(data): + enum = enum_match.groups()[0] + for key_match in enum_key_re.finditer(enum): + yield key_match.groups()[0] + + +def parse_valid_keys(config, out_path): + basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) + dirpaths = [] + subpaths = [] + while len(subpaths) < 6: + path = os.path.join(basepath, *subpaths) + dirpaths.append(path) + dirpaths.append(os.path.join(path, "tmk_core", "common")) + dirpaths.append(os.path.join(path, "quantum")) + subpaths.append('..') + + includes = set(config['keymaps_includes']) + includes.add("keycode.h") + + valid_keycodes = set() + for dirpath, include in it.product(dirpaths, includes): + include_path = os.path.join(dirpath, include) + if os.path.exists(include_path): + header_data = read_header_file(include_path) + valid_keycodes.update( + parse_keydefs(config, header_data) + ) + return valid_keycodes + + +# Keymap Parsing + +def iter_raw_codes(layer_lines, filler, separator): + filler_re = re.compile("[" + filler + " ]") + for line in layer_lines: + line, _ = filler_re.subn("", line.strip()) + if not line: + continue + codes = line.split(separator) + for code in codes[1:-1]: + yield code + + +def iter_indexed_codes(raw_codes, key_indexes): + key_rows = {} + key_indexes_flat = [] + + for row_index, key_indexes in enumerate(key_indexes): + for key_index in key_indexes: + key_rows[key_index] = row_index + key_indexes_flat.extend(key_indexes) + assert len(raw_codes) == len(key_indexes_flat) + for raw_code, key_index in zip(raw_codes, key_indexes_flat): + # we keep track of the row mostly for layout purposes + yield raw_code, key_index, key_rows[key_index] + + +LAYER_CHANGE_RE = re.compile(r""" + (DF|TG|MO)\(\d+\) +""", re.VERBOSE) + + +MACRO_RE = re.compile(r""" + M\(\w+\) +""", re.VERBOSE) + + +UNICODE_RE = re.compile(r""" + U[0-9A-F]{4} +""", re.VERBOSE) + + +NON_CODE = re.compile(r""" + ^[^A-Z0-9_]$ +""", re.VERBOSE) + + +def parse_uni_code(raw_code): + macro_id = "UC_" + ( + unicodedata.name(raw_code) + .replace(" ", "_") + .replace("-", "_") + ) + code = "M({})".format(macro_id) + uc_hex = "{:04X}".format(ord(raw_code)) + return code, macro_id, uc_hex + + +def parse_key_code(raw_code, key_prefixes, valid_keycodes): + if raw_code in valid_keycodes: + return raw_code + + for prefix in key_prefixes: + code = prefix + raw_code + if code in valid_keycodes: + return code + + +def parse_code(raw_code, key_prefixes, valid_keycodes): + if not raw_code: + return 'KC_TRNS', None, None + + if LAYER_CHANGE_RE.match(raw_code): + return raw_code, None, None + + if MACRO_RE.match(raw_code): + macro_id = raw_code[2:-1] + return raw_code, macro_id, None + + if UNICODE_RE.match(raw_code): + hex_code = raw_code[1:] + return parse_uni_code(chr(int(hex_code, 16))) + + if NON_CODE.match(raw_code): + return parse_uni_code(raw_code) + + code = parse_key_code(raw_code, key_prefixes, valid_keycodes) + return code, None, None + + +def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): + keymap = {} + raw_codes = list(iter_raw_codes( + layer_lines, config['filler'], config['separator'] + )) + indexed_codes = iter_indexed_codes(raw_codes, key_indexes) + key_prefixes = config['key_prefixes'] + for raw_code, key_index, row_index in indexed_codes: + code, macro_id, uc_hex = parse_code( + raw_code, key_prefixes, valid_keycodes + ) + # TODO: line numbers for invalid codes + err_msg = "Could not parse key '{}' on row {}".format( + raw_code, row_index + ) + assert code is not None, err_msg + # print(repr(raw_code), repr(code), macro_id, uc_hex) + if macro_id: + config['macro_ids'].add(macro_id) + if uc_hex: + config['unicode_macros'][macro_id] = uc_hex + keymap[key_index] = (code, row_index) + return keymap + + +def parse_keymaps(config, valid_keycodes): + keymaps = collections.OrderedDict() + key_indexes = config.get( + 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] + ) + # TODO: maybe validate key_indexes + + for layer_name, layer_lines, in config['layer_lines'].items(): + keymaps[layer_name] = parse_keymap( + config, key_indexes, layer_lines, valid_keycodes + ) + return keymaps + +# keymap.c output + +USERCODE = """ +// 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) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; +""" + +MACROCODE = """ +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 + +// TODO: allow default mode to be configured +static uint16_t unicode_mode = UC_MODE_WIN; + +uint16_t hextokeycode(uint8_t hex) {{ + if (hex == 0x0) {{ + return KC_P0; + }} + if (hex < 0xA) {{ + return KC_P1 + (hex - 0x1); + }} + return KC_A + (hex - 0xA); +}} + +void unicode_action_function(uint16_t hi, uint16_t lo) {{ + switch (unicode_mode) {{ + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + }} +}} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ + if (!record->event.pressed) {{ + return MACRO_NONE; + }} + // MACRODOWN only works in this function + switch(id) {{ + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; +{macro_cases} +{unicode_macro_cases} + default: + break; + }} + return MACRO_NONE; +}}; +""" + + +UNICODE_MACRO_TEMPLATE = """ +case {macro_id}: + unicode_action_function(0x{hi:02x}, 0x{lo:02x}); + break; +""".strip() + + +def unicode_macro_cases(config): + for macro_id, uc_hex in config['unicode_macros'].items(): + hi = int(uc_hex, 16) >> 8 + lo = int(uc_hex, 16) & 0xFF + unimacro_keys = ", ".join( + "T({})".format( + "KP_" + digit if digit.isdigit() else digit + ) for digit in uc_hex + ) + yield UNICODE_MACRO_TEMPLATE.format( + macro_id=macro_id, hi=hi, lo=lo + ) + + +def iter_keymap_lines(keymap, row_indents=None): + col_widths = {} + col = 0 + # first pass, figure out the column widths + prev_row_index = None + for code, row_index in keymap.values(): + if row_index != prev_row_index: + col = 0 + if row_indents: + col = row_indents[row_index] + col_widths[col] = max(len(code), col_widths.get(col, 0)) + prev_row_index = row_index + col += 1 + + # second pass, yield the cell values + col = 0 + prev_row_index = None + for key_index in sorted(keymap): + code, row_index = keymap[key_index] + if row_index != prev_row_index: + col = 0 + yield "\n" + if row_indents: + for indent_col in range(row_indents[row_index]): + pad = " " * (col_widths[indent_col] - 4) + yield (" /*-*/" + pad) + col = row_indents[row_index] + else: + yield pad + yield " {}".format(code) + if key_index < len(keymap) - 1: + yield "," + # This will be yielded on the next iteration when + # we know that we're not at the end of a line. + pad = " " * (col_widths[col] - len(code)) + prev_row_index = row_index + col += 1 + + +def iter_keymap_parts(config, keymaps): + # includes + for include_path in config['keymaps_includes']: + yield '#include "{}"\n'.format(include_path) + + yield "\n" + + # definitions + for i, macro_id in enumerate(sorted(config['macro_ids'])): + yield "#define {} {}\n".format(macro_id, i) + + yield "\n" + + for i, layer_name in enumerate(config['layer_lines']): + yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) + + yield "\n" + + # keymaps + yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" + + for i, layer_name in enumerate(config['layer_lines']): + # comment + layer_lines = config['layer_lines'][layer_name] + prefixed_lines = " * " + " * ".join(layer_lines) + yield "/*\n{} */\n".format(prefixed_lines) + + # keymap codes + keymap = keymaps[layer_name] + row_indents = ROW_INDENTS.get(config['layout']) + keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) + yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) + + yield "};\n\n" + + # no idea what this is for + yield "const uint16_t PROGMEM fn_actions[] = {};\n" + + # macros + yield MACROCODE.format( + macro_cases="", + unicode_macro_cases="\n".join(unicode_macro_cases(config)), + ) + + # TODO: dynamically create blinking lights + yield USERCODE + + +def main(argv=sys.argv[1:]): + if not argv or '-h' in argv or '--help' in argv: + print(__doc__) + return 0 + + in_path = os.path.abspath(argv[0]) + if not os.path.exists(in_path): + print("No such file '{}'".format(in_path)) + return 1 + + if len(argv) > 1: + out_path = os.path.abspath(argv[1]) + else: + dirname = os.path.dirname(in_path) + out_path = os.path.join(dirname, "keymap.c") + + config = parse_config(in_path) + valid_keys = parse_valid_keys(config, out_path) + keymaps = parse_keymaps(config, valid_keys) + + with io.open(out_path, mode="w", encoding="utf-8") as fh: + for part in iter_keymap_parts(config, keymaps): + fh.write(part) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.c b/keyboards/ergodox/keymaps/german-manuneo/keymap.c new file mode 100644 index 0000000000..5fcc14d518 --- /dev/null +++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.c @@ -0,0 +1,783 @@ +#include "ergodox_ez.h" +#include "action_layer.h" +#include "keymap.h" +#include "keymap_german.h" + +#define UC_ASYMPTOTICALLY_EQUAL_TO 0 +#define UC_DIVISION_SIGN 1 +#define UC_DOWNWARDS_ARROW 2 +#define UC_ELEMENT_OF 3 +#define UC_EMPTY_SET 4 +#define UC_FOR_ALL 5 +#define UC_GREEK_CAPITAL_LETTER_ALPHA 6 +#define UC_GREEK_CAPITAL_LETTER_BETA 7 +#define UC_GREEK_CAPITAL_LETTER_CHI 8 +#define UC_GREEK_CAPITAL_LETTER_DELTA 9 +#define UC_GREEK_CAPITAL_LETTER_EPSILON 10 +#define UC_GREEK_CAPITAL_LETTER_ETA 11 +#define UC_GREEK_CAPITAL_LETTER_GAMMA 12 +#define UC_GREEK_CAPITAL_LETTER_IOTA 13 +#define UC_GREEK_CAPITAL_LETTER_KAPPA 14 +#define UC_GREEK_CAPITAL_LETTER_LAMDA 15 +#define UC_GREEK_CAPITAL_LETTER_MU 16 +#define UC_GREEK_CAPITAL_LETTER_NU 17 +#define UC_GREEK_CAPITAL_LETTER_OMEGA 18 +#define UC_GREEK_CAPITAL_LETTER_OMICRON 19 +#define UC_GREEK_CAPITAL_LETTER_PHI 20 +#define UC_GREEK_CAPITAL_LETTER_PI 21 +#define UC_GREEK_CAPITAL_LETTER_PSI 22 +#define UC_GREEK_CAPITAL_LETTER_RHO 23 +#define UC_GREEK_CAPITAL_LETTER_SIGMA 24 +#define UC_GREEK_CAPITAL_LETTER_TAU 25 +#define UC_GREEK_CAPITAL_LETTER_THETA 26 +#define UC_GREEK_CAPITAL_LETTER_UPSILON 27 +#define UC_GREEK_CAPITAL_LETTER_XI 28 +#define UC_GREEK_CAPITAL_LETTER_ZETA 29 +#define UC_GREEK_SMALL_LETTER_ALPHA 30 +#define UC_GREEK_SMALL_LETTER_BETA 31 +#define UC_GREEK_SMALL_LETTER_CHI 32 +#define UC_GREEK_SMALL_LETTER_DELTA 33 +#define UC_GREEK_SMALL_LETTER_EPSILON 34 +#define UC_GREEK_SMALL_LETTER_ETA 35 +#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36 +#define UC_GREEK_SMALL_LETTER_GAMMA 37 +#define UC_GREEK_SMALL_LETTER_IOTA 38 +#define UC_GREEK_SMALL_LETTER_KAPPA 39 +#define UC_GREEK_SMALL_LETTER_LAMDA 40 +#define UC_GREEK_SMALL_LETTER_MU 41 +#define UC_GREEK_SMALL_LETTER_NU 42 +#define UC_GREEK_SMALL_LETTER_OMEGA 43 +#define UC_GREEK_SMALL_LETTER_OMICRON 44 +#define UC_GREEK_SMALL_LETTER_PHI 45 +#define UC_GREEK_SMALL_LETTER_PI 46 +#define UC_GREEK_SMALL_LETTER_PSI 47 +#define UC_GREEK_SMALL_LETTER_RHO 48 +#define UC_GREEK_SMALL_LETTER_SIGMA 49 +#define UC_GREEK_SMALL_LETTER_TAU 50 +#define UC_GREEK_SMALL_LETTER_THETA 51 +#define UC_GREEK_SMALL_LETTER_UPSILON 52 +#define UC_GREEK_SMALL_LETTER_XI 53 +#define UC_GREEK_SMALL_LETTER_ZETA 54 +#define UC_INFINITY 55 +#define UC_LEFTWARDS_ARROW 56 +#define UC_MULTIPLICATION_SIGN 57 +#define UC_NOT_AN_ELEMENT_OF 58 +#define UC_NOT_EQUAL_TO 59 +#define UC_PLUS_MINUS_SIGN 60 +#define UC_RIGHTWARDS_ARROW 61 +#define UC_SUBSCRIPT_EIGHT 62 +#define UC_SUBSCRIPT_FIVE 63 +#define UC_SUBSCRIPT_FOUR 64 +#define UC_SUBSCRIPT_NINE 65 +#define UC_SUBSCRIPT_ONE 66 +#define UC_SUBSCRIPT_SEVEN 67 +#define UC_SUBSCRIPT_SIX 68 +#define UC_SUBSCRIPT_THREE 69 +#define UC_SUBSCRIPT_TWO 70 +#define UC_SUBSCRIPT_ZERO 71 +#define UC_SUPERSCRIPT_EIGHT 72 +#define UC_SUPERSCRIPT_FIVE 73 +#define UC_SUPERSCRIPT_FOUR 74 +#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75 +#define UC_SUPERSCRIPT_NINE 76 +#define UC_SUPERSCRIPT_ONE 77 +#define UC_SUPERSCRIPT_SEVEN 78 +#define UC_SUPERSCRIPT_SIX 79 +#define UC_SUPERSCRIPT_THREE 80 +#define UC_SUPERSCRIPT_TWO 81 +#define UC_SUPERSCRIPT_ZERO 82 +#define UC_THERE_DOES_NOT_EXIST 83 +#define UC_THERE_EXISTS 84 +#define UC_UPWARDS_ARROW 85 +#define UC_VULGAR_FRACTION_ONE_EIGHTH 86 +#define UC_VULGAR_FRACTION_ONE_FIFTH 87 +#define UC_VULGAR_FRACTION_ONE_HALF 88 +#define UC_VULGAR_FRACTION_ONE_QUARTER 89 +#define UC_VULGAR_FRACTION_ONE_SIXTH 90 +#define UC_VULGAR_FRACTION_ONE_THIRD 91 +#define UC_VULGAR_FRACTION_THREE_QUARTERS 92 +#define UC_VULGAR_FRACTION_TWO_THIRDS 93 +#define UM 94 + +#define L0 0 // layer_0 +#define L1 1 // layer_1 +#define L2 2 // layer_2 +#define L3 3 // layer_3 +#define L4 4 // layer_4 +#define L5 5 // layer_5 +#define L6 6 // layer_6 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * .------------------------------------.------------------------------------. + * |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| + * '------------------------' '------------------------' + * .-----------. .-----------. + * |INS |TG(2)| !M(UM)|DELT | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | APP | ! PGUP| ! ! + * ! ! !-----! !-----! ! ! + * |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| + * '-----------------' '-----------------' + */ +[L0] = KEYMAP( + MO(5), DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT, + MO(4), DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME, + MO(1), DE_U, DE_I, DE_A, DE_E, DE_O, + MO(3), DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END, + KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_INS, TG(2), + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_APP, + /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, KC_LSFT, KC_ESC, + DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC, + TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, + /*-*/ DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS, + KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, + /*-*/ /*-*/ KC_RCTL, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, + M(UM), KC_DELT, + KC_PGUP, + KC_PGDN, KC_ENTER, KC_SPACE +), +/* + * .------------------------------------.------------------------------------. + * | |EXLM|DQOT|PARA| | | | | | | | |RING| | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | ← | ↓ | → | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L1] = KEYMAP( + KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS, + KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC, + KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS, + KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS, + /*-*/ DE_DLR, DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST, + KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS, + /*-*/ /*-*/ KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* + * .------------------------------------.------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L2] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, + /*-*/ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS, + KC_NLCK, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS, + /*-*/ /*-*/ KC_P0, KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* + * .------------------------------------.------------------------------------. + * | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L3] = KEYMAP( + KC_TRNS, M(UC_SUPERSCRIPT_ONE), M(UC_SUPERSCRIPT_TWO), M(UC_SUPERSCRIPT_THREE), M(UC_SUPERSCRIPT_FOUR), M(UC_SUPERSCRIPT_FIVE), M(UC_FOR_ALL), + KC_TRNS, M(UC_MULTIPLICATION_SIGN), M(UC_VULGAR_FRACTION_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_VULGAR_FRACTION_ONE_QUARTER), M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS, + KC_TRNS, KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET), + KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_SUPERSCRIPT_SIX), M(UC_SUPERSCRIPT_SEVEN), M(UC_SUPERSCRIPT_EIGHT), M(UC_SUPERSCRIPT_NINE), M(UC_SUPERSCRIPT_ZERO), KC_TRNS, + KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS, M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ M(UC_INFINITY), M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS, + KC_TRNS, DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS, + /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* + * .------------------------------------.------------------------------------. + * | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | θ | | | | | | β | μ | | | | ψ | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L4] = KEYMAP( + KC_TRNS, M(UC_SUBSCRIPT_ONE), M(UC_SUBSCRIPT_TWO), M(UC_SUBSCRIPT_THREE), M(UC_SUBSCRIPT_FOUR), M(UC_SUBSCRIPT_FIVE), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI), M(UC_GREEK_SMALL_LETTER_PI), M(UC_GREEK_SMALL_LETTER_PHI), M(UC_GREEK_SMALL_LETTER_OMEGA), M(UC_GREEK_SMALL_LETTER_GAMMA), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA), M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON), + KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_SUBSCRIPT_SIX), M(UC_SUBSCRIPT_SEVEN), M(UC_SUBSCRIPT_EIGHT), M(UC_SUBSCRIPT_NINE), M(UC_SUBSCRIPT_ZERO), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA), M(UC_GREEK_SMALL_LETTER_XI), M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_SMALL_LETTER_ZETA), + /*-*/ M(UC_GREEK_SMALL_LETTER_SIGMA), M(UC_GREEK_SMALL_LETTER_NU), M(UC_GREEK_SMALL_LETTER_RHO), M(UC_GREEK_SMALL_LETTER_TAU), M(UC_GREEK_SMALL_LETTER_DELTA), M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA), + KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA), M(UC_GREEK_SMALL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_PSI), + /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | Θ | | | | | | Β | Μ | | | | Ψ | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L5] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI), M(UC_GREEK_CAPITAL_LETTER_PI), M(UC_GREEK_CAPITAL_LETTER_PHI), M(UC_GREEK_CAPITAL_LETTER_OMEGA), M(UC_GREEK_CAPITAL_LETTER_GAMMA), KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA), M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON), + KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA), M(UC_GREEK_CAPITAL_LETTER_XI), M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ZETA), + /*-*/ M(UC_GREEK_CAPITAL_LETTER_SIGMA), M(UC_GREEK_CAPITAL_LETTER_NU), M(UC_GREEK_CAPITAL_LETTER_RHO), M(UC_GREEK_CAPITAL_LETTER_TAU), M(UC_GREEK_CAPITAL_LETTER_DELTA), KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA), M(UC_GREEK_CAPITAL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_PSI), + /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | | | | | | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' + */ +[L6] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {}; + +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 + +// TODO: allow default mode to be configured +static uint16_t unicode_mode = UC_MODE_WIN; + +uint16_t hextokeycode(uint8_t hex) { + if (hex == 0x0) { + return KC_P0; + } + if (hex < 0xA) { + return KC_P1 + (hex - 0x1); + } + return KC_A + (hex - 0xA); +} + +void unicode_action_function(uint16_t hi, uint16_t lo) { + switch (unicode_mode) { + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + } +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + if (!record->event.pressed) { + return MACRO_NONE; + } + // MACRODOWN only works in this function + switch(id) { + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; + +case UC_GREEK_SMALL_LETTER_OMICRON: + unicode_action_function(0x03, 0xbf); + break; +case UC_LEFTWARDS_ARROW: + unicode_action_function(0x21, 0x90); + break; +case UC_GREEK_CAPITAL_LETTER_RHO: + unicode_action_function(0x03, 0xa1); + break; +case UC_SUBSCRIPT_THREE: + unicode_action_function(0x20, 0x83); + break; +case UC_VULGAR_FRACTION_ONE_EIGHTH: + unicode_action_function(0x21, 0x5b); + break; +case UC_GREEK_SMALL_LETTER_LAMDA: + unicode_action_function(0x03, 0xbb); + break; +case UC_VULGAR_FRACTION_ONE_THIRD: + unicode_action_function(0x21, 0x53); + break; +case UC_GREEK_SMALL_LETTER_XI: + unicode_action_function(0x03, 0xbe); + break; +case UC_THERE_DOES_NOT_EXIST: + unicode_action_function(0x22, 0x04); + break; +case UC_SUPERSCRIPT_ONE: + unicode_action_function(0x00, 0xb9); + break; +case UC_GREEK_SMALL_LETTER_BETA: + unicode_action_function(0x03, 0xb2); + break; +case UC_SUBSCRIPT_FIVE: + unicode_action_function(0x20, 0x85); + break; +case UC_GREEK_CAPITAL_LETTER_IOTA: + unicode_action_function(0x03, 0x99); + break; +case UC_VULGAR_FRACTION_ONE_FIFTH: + unicode_action_function(0x21, 0x55); + break; +case UC_GREEK_SMALL_LETTER_PSI: + unicode_action_function(0x03, 0xc8); + break; +case UC_SUBSCRIPT_NINE: + unicode_action_function(0x20, 0x89); + break; +case UC_SUPERSCRIPT_FOUR: + unicode_action_function(0x20, 0x74); + break; +case UC_RIGHTWARDS_ARROW: + unicode_action_function(0x21, 0x92); + break; +case UC_SUPERSCRIPT_SIX: + unicode_action_function(0x20, 0x76); + break; +case UC_DOWNWARDS_ARROW: + unicode_action_function(0x21, 0x93); + break; +case UC_GREEK_SMALL_LETTER_PI: + unicode_action_function(0x03, 0xc0); + break; +case UC_SUPERSCRIPT_TWO: + unicode_action_function(0x00, 0xb2); + break; +case UC_GREEK_CAPITAL_LETTER_OMEGA: + unicode_action_function(0x03, 0xa9); + break; +case UC_GREEK_CAPITAL_LETTER_PSI: + unicode_action_function(0x03, 0xa8); + break; +case UC_SUBSCRIPT_FOUR: + unicode_action_function(0x20, 0x84); + break; +case UC_GREEK_CAPITAL_LETTER_NU: + unicode_action_function(0x03, 0x9d); + break; +case UC_DIVISION_SIGN: + unicode_action_function(0x00, 0xf7); + break; +case UC_GREEK_SMALL_LETTER_SIGMA: + unicode_action_function(0x03, 0xc3); + break; +case UC_GREEK_SMALL_LETTER_RHO: + unicode_action_function(0x03, 0xc1); + break; +case UC_VULGAR_FRACTION_ONE_SIXTH: + unicode_action_function(0x21, 0x59); + break; +case UC_GREEK_SMALL_LETTER_GAMMA: + unicode_action_function(0x03, 0xb3); + break; +case UC_VULGAR_FRACTION_TWO_THIRDS: + unicode_action_function(0x21, 0x54); + break; +case UC_GREEK_SMALL_LETTER_NU: + unicode_action_function(0x03, 0xbd); + break; +case UC_GREEK_SMALL_LETTER_ZETA: + unicode_action_function(0x03, 0xb6); + break; +case UC_GREEK_SMALL_LETTER_EPSILON: + unicode_action_function(0x03, 0xb5); + break; +case UC_GREEK_SMALL_LETTER_KAPPA: + unicode_action_function(0x03, 0xba); + break; +case UC_SUPERSCRIPT_SEVEN: + unicode_action_function(0x20, 0x77); + break; +case UC_GREEK_CAPITAL_LETTER_PI: + unicode_action_function(0x03, 0xa0); + break; +case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: + unicode_action_function(0x03, 0xc2); + break; +case UC_GREEK_CAPITAL_LETTER_XI: + unicode_action_function(0x03, 0x9e); + break; +case UC_GREEK_SMALL_LETTER_THETA: + unicode_action_function(0x03, 0xb8); + break; +case UC_GREEK_SMALL_LETTER_ETA: + unicode_action_function(0x03, 0xb7); + break; +case UC_SUBSCRIPT_TWO: + unicode_action_function(0x20, 0x82); + break; +case UC_ASYMPTOTICALLY_EQUAL_TO: + unicode_action_function(0x22, 0x43); + break; +case UC_GREEK_SMALL_LETTER_ALPHA: + unicode_action_function(0x03, 0xb1); + break; +case UC_GREEK_CAPITAL_LETTER_PHI: + unicode_action_function(0x03, 0xa6); + break; +case UC_GREEK_SMALL_LETTER_PHI: + unicode_action_function(0x03, 0xc6); + break; +case UC_INFINITY: + unicode_action_function(0x22, 0x1e); + break; +case UC_GREEK_CAPITAL_LETTER_OMICRON: + unicode_action_function(0x03, 0x9f); + break; +case UC_ELEMENT_OF: + unicode_action_function(0x22, 0x08); + break; +case UC_MULTIPLICATION_SIGN: + unicode_action_function(0x00, 0xd7); + break; +case UC_SUBSCRIPT_ZERO: + unicode_action_function(0x20, 0x80); + break; +case UC_GREEK_CAPITAL_LETTER_SIGMA: + unicode_action_function(0x03, 0xa3); + break; +case UC_GREEK_SMALL_LETTER_OMEGA: + unicode_action_function(0x03, 0xc9); + break; +case UC_SUBSCRIPT_ONE: + unicode_action_function(0x20, 0x81); + break; +case UC_GREEK_CAPITAL_LETTER_ZETA: + unicode_action_function(0x03, 0x96); + break; +case UC_GREEK_SMALL_LETTER_TAU: + unicode_action_function(0x03, 0xc4); + break; +case UC_SUPERSCRIPT_FIVE: + unicode_action_function(0x20, 0x75); + break; +case UC_THERE_EXISTS: + unicode_action_function(0x22, 0x03); + break; +case UC_PLUS_MINUS_SIGN: + unicode_action_function(0x00, 0xb1); + break; +case UC_VULGAR_FRACTION_THREE_QUARTERS: + unicode_action_function(0x00, 0xbe); + break; +case UC_SUPERSCRIPT_THREE: + unicode_action_function(0x00, 0xb3); + break; +case UC_EMPTY_SET: + unicode_action_function(0x22, 0x05); + break; +case UC_UPWARDS_ARROW: + unicode_action_function(0x21, 0x91); + break; +case UC_SUPERSCRIPT_NINE: + unicode_action_function(0x20, 0x79); + break; +case UC_GREEK_SMALL_LETTER_DELTA: + unicode_action_function(0x03, 0xb4); + break; +case UC_GREEK_SMALL_LETTER_MU: + unicode_action_function(0x03, 0xbc); + break; +case UC_GREEK_CAPITAL_LETTER_KAPPA: + unicode_action_function(0x03, 0x9a); + break; +case UC_SUBSCRIPT_EIGHT: + unicode_action_function(0x20, 0x88); + break; +case UC_GREEK_CAPITAL_LETTER_ALPHA: + unicode_action_function(0x03, 0x91); + break; +case UC_SUBSCRIPT_SEVEN: + unicode_action_function(0x20, 0x87); + break; +case UC_GREEK_CAPITAL_LETTER_BETA: + unicode_action_function(0x03, 0x92); + break; +case UC_GREEK_CAPITAL_LETTER_ETA: + unicode_action_function(0x03, 0x97); + break; +case UC_SUPERSCRIPT_EIGHT: + unicode_action_function(0x20, 0x78); + break; +case UC_SUPERSCRIPT_ZERO: + unicode_action_function(0x20, 0x70); + break; +case UC_NOT_AN_ELEMENT_OF: + unicode_action_function(0x22, 0x09); + break; +case UC_GREEK_SMALL_LETTER_UPSILON: + unicode_action_function(0x03, 0xc5); + break; +case UC_NOT_EQUAL_TO: + unicode_action_function(0x22, 0x60); + break; +case UC_GREEK_CAPITAL_LETTER_CHI: + unicode_action_function(0x03, 0xa7); + break; +case UC_FOR_ALL: + unicode_action_function(0x22, 0x00); + break; +case UC_GREEK_CAPITAL_LETTER_TAU: + unicode_action_function(0x03, 0xa4); + break; +case UC_VULGAR_FRACTION_ONE_QUARTER: + unicode_action_function(0x00, 0xbc); + break; +case UC_GREEK_SMALL_LETTER_CHI: + unicode_action_function(0x03, 0xc7); + break; +case UC_GREEK_CAPITAL_LETTER_THETA: + unicode_action_function(0x03, 0x98); + break; +case UC_GREEK_SMALL_LETTER_IOTA: + unicode_action_function(0x03, 0xb9); + break; +case UC_GREEK_CAPITAL_LETTER_LAMDA: + unicode_action_function(0x03, 0x9b); + break; +case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: + unicode_action_function(0x20, 0x7f); + break; +case UC_GREEK_CAPITAL_LETTER_UPSILON: + unicode_action_function(0x03, 0xa5); + break; +case UC_GREEK_CAPITAL_LETTER_MU: + unicode_action_function(0x03, 0x9c); + break; +case UC_GREEK_CAPITAL_LETTER_EPSILON: + unicode_action_function(0x03, 0x95); + break; +case UC_GREEK_CAPITAL_LETTER_GAMMA: + unicode_action_function(0x03, 0x93); + break; +case UC_SUBSCRIPT_SIX: + unicode_action_function(0x20, 0x86); + break; +case UC_GREEK_CAPITAL_LETTER_DELTA: + unicode_action_function(0x03, 0x94); + break; +case UC_VULGAR_FRACTION_ONE_HALF: + unicode_action_function(0x00, 0xbd); + break; + default: + 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) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.md b/keyboards/ergodox/keymaps/german-manuneo/keymap.md new file mode 100644 index 0000000000..2c9e0a8376 --- /dev/null +++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.md @@ -0,0 +1,188 @@ +# ManuNeo Ergodox Keyboard Layout + +Compile this file to a `keymap.c` file using `compile_keymap.py` + + python compile_keymap.py keymaps/german-manuneo/keymap.md + +Tested with python 2.7 and python 3.4 + + +# Layout Config + + { + "layout": "ergodox_ez", + "keymaps_includes": [ + "ergodox_ez.h", + "action_layer.h", + "keymap_common.h", + "keymap_extras/keymap_german.h", + ], + "key_prefixes": ["DE_", "KC_"], + "macros": { + // TODO: implement macros + // "MUC": "", + }, + // TODO: implement default unicode mode + } + + +# Layers + + +## Layer 0 + + .------------------------------------.------------------------------------. + |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| + '------------------------' '------------------------' + .-----------. .-----------. + |INS |TG(2)| !M(UM)|DELT | + .-----+-----+-----! !-----+-----+-----. + ! ! | APP | ! PGUP| ! ! + ! ! !-----! !-----! ! ! + |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| + '-----------------' '-----------------' + + +## Layer 1 + + .------------------------------------.------------------------------------. + | |EXLM|DQOT|PARA| | | | | | | | |RING| | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | ← | ↓ | → | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + + +## Layer 2 + + .------------------------------------.------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + + + +## Layer 3 + +http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html + + .------------------------------------.------------------------------------. + | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + + +## Layer 4 + + + .------------------------------------.------------------------------------. + | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | θ | | | | | | β | μ | | | | ψ | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + + +## Layer 5 + + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | Θ | | | | | | Β | Μ | | | | Ψ | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + + +## Layer 6 + + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | | | | | | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + diff --git a/keyboards/ergodox/keymaps/german/keymap.c b/keyboards/ergodox/keymaps/german/keymap.c new file mode 100644 index 0000000000..3eab51f0e2 --- /dev/null +++ b/keyboards/ergodox/keymaps/german/keymap.c @@ -0,0 +1,185 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_german.h" + +// Layer names +#define BASE 0 // default layer +#define SYMB 1 // symbol layer +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ^ | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 | ß | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | E | R | T | L1 | | L2 | Z | U | I | O | P | Ü | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Y | X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | 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) { + case SYMB: + ergodox_right_led_1_on(); + break; + case MDIA: + ergodox_right_led_2_on(); + break; + default: + ergodox_board_led_off(); + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c new file mode 100644 index 0000000000..6e271321d5 --- /dev/null +++ b/keyboards/ergodox/keymaps/j3rn/keymap.c @@ -0,0 +1,187 @@ +#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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Grv | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | BkSp | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Ctrl/Esc|A / L2| S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ~L1 | ~L2 |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | Home | | PgUp |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgDn | | | + * |Space | LGui |------| |------| Tab |Enter | + * | | |Shift | | Alt | | | + * `--------------------' `----------------------' + */ +// 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_LBRC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, + CTL_T(KC_ESC), LT(MDIA, KC_A),KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_FN1, KC_FN2, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + + ALT_T(KC_APP), KC_HOME, + KC_END, + KC_SPC, KC_LGUI, KC_LSHIFT, + // right hand + KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + + KC_PGUP, CTL_T(KC_ESC), + KC_PGDN, + KC_LALT, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | Lclk | Rclk | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, + KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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) + [2] = ACTION_LAYER_TAP_TOGGLE(MDIA) // FN2 - Momentary Layer 2 (Media) +}; + +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/keyboards/ergodox/keymaps/j3rn/readme.md b/keyboards/ergodox/keymaps/j3rn/readme.md new file mode 100644 index 0000000000..fc4b640426 --- /dev/null +++ b/keyboards/ergodox/keymaps/j3rn/readme.md @@ -0,0 +1,29 @@ +# J3RN's Mac-centric ErgoDox EZ keymap + +## Motivation + +Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key). + +## How is it different from the default ErgoDox EZ layout? + +This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means: + +### Mac-like changes + +- **The key to the left of "1" is "~" instead of "=".** +- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately. +- **The key to the left of "Q" is Tab instead of Delete.** +- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.** + +### Other changes + +- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a CAPS LOCK key. This is the Ctrl key I find myself using most. +- **Mouse uses Vim-style navigation**. To activate "Media mode," hold the 'a' key. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys. +- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach. +- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better. +- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold." +- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful. +- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location. + + +**I'm always open to feedback and/or suggestions!** diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c new file mode 100644 index 0000000000..80bf9d535d --- /dev/null +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -0,0 +1,118 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +// TODO: Define layer names that make sense for the ErgoDox EZ. +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, + KC_NO, KC_LCTL, KC_LALT,KC_LGUI, MO(2), + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_SPC,KC_END, + // right hand + KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, + KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT, + MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, + KC_NO, KC_NO, + KC_PGUP, + KC_PGDN, KC_SPC,KC_SPC + ), +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, + KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,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_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + KC_TRNS, KC_F12, KC_NO, KC_NO, KC_NO, RESET, KC_TRNS, + KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +[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, + KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 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_TRNS, + KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + KC_TRNS, KC_F12, KC_NO, KC_NO, KC_NO, RESET, KC_TRNS, + KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, 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) { + 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/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png new file mode 100644 index 0000000000..06f63c4968 Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png differ diff --git a/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png new file mode 100644 index 0000000000..4dd7182785 Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png differ diff --git a/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png new file mode 100644 index 0000000000..ee224cf0c1 Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png differ diff --git a/keyboards/ergodox/keymaps/jacobono/keymap.c b/keyboards/ergodox/keymaps/jacobono/keymap.c new file mode 100644 index 0000000000..6b19800af0 --- /dev/null +++ b/keyboards/ergodox/keymaps/jacobono/keymap.c @@ -0,0 +1,273 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define COLEMAK 0 // new colemak layout +#define QWERTY 1 // default layer +#define SYMB 2 // symbols +#define NUMPAD 3 // number pad +#define MDIA 4 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap 0: Basic COLEMAK layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | TAB | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | R | S | T | D |------| |------| H | N | E | I | O | DEL | + * |--------+------+------+------+------+------| | LGUI(TAB)------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L1 | | | UP |MO(L2)| |MO(L2)| Down | | ALT | RGUI | + * `----------------------------------' `------------------------------------' + * ,-------------. ,---------------. + * | LGUI | App | |Ctrl/Esc| Alt | + * ,------|------|------| |--------+--------+------. + * | | |QUKSL | | QUKSL | | | + * |Space |ENTER |------| |--------| ENTER |Space | + * | | |MO(L3)| | MO(L3) | | | + * `--------------------' `------------------------' + */ + + // If it accepts an argument (i.e, is a function), it doesn't need KC_. + // Otherwise, it needs KC_* + [COLEMAK] = KEYMAP( // layer 0 : Colemak layout default layer + // left hand + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_TRNS, + 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, KC_TRNS, + TG(QWERTY), KC_TRNS, KC_TRNS,KC_UP, MO(SYMB), + KC_LGUI, KC_APP, + LGUI(S(KC_SPC)), + KC_SPC,KC_ENT,MO(NUMPAD), + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT, + KC_TRNS, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB, + KC_H, KC_N, KC_E, KC_I, KC_O, KC_DEL, + LGUI(KC_TAB), KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MO(SYMB), KC_DOWN, KC_TRNS, KC_RALT, KC_RGUI, + CTL_T(KC_ESC), KC_LALT, + LGUI(S(KC_SPC)), + MO(NUMPAD), KC_ENT, KC_SPC), + + /* Keymap 1: Basic QWERTY layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | BkSp | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | DEL | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L0 | | L0 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L |; / L4| CTRL | + * |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L3| '" |AltShf| Left |MO(L2)| |MO(L2)| Down | [ | ] | ~L3 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | Tab | BkSp | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space| LGUI |------| |------| RGUI |Enter | + * | | | End | | PgDn | | | + * `--------------------' `----------------------' + */ + // If it accepts an argument (i.e, is a function), it doesn't need KC_. + // Otherwise, it needs KC_* + [QWERTY] = KEYMAP( // layer 1 + // left hand + KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, + KC_LCTRL, 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, + KC_TRNS, KC_QUOT, LALT(KC_LSFT), KC_LEFT, MO(SYMB), + KC_TAB, KC_DELT, + KC_HOME, + KC_SPC, KC_LGUI, KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT, + KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_RCTRL, + KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MO(SYMB), KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN, KC_RGUI, KC_ENT), + + + /* Keymap 2: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | @ | * | = | _ | | | | ~ | { | } | # | : | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | ! | + | - | " |------| |------| " | ( | ) | ' | ` | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | % | ^ | $ | & | | | | ; | [ | ] | \ | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + // SYMBOL + [SYMB] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_AT, KC_ASTR, KC_EQL, KC_UNDS, KC_TRNS, + KC_TRNS, KC_PIPE, KC_EXLM, KC_PLUS, KC_MINS, S(KC_QUOTE), + KC_TRNS, KC_TRNS, KC_PERC, KC_CIRC, KC_DLR, KC_AMPR, 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_TILD, KC_LCBR, KC_RCBR, KC_HASH, S(KC_SCLN), KC_F12, + S(KC_QUOTE),KC_LPRN, KC_RPRN, KC_QUOTE, KC_GRV, KC_TRNS, + KC_TRNS, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_SLSH, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), + + /* Keymap 3: Numpad Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | UP | | | | | | $ | 7 | 8 | 9 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | LEFT | DOWN | RIGHT| |------| |------| = | 4 | 5 | 6 | - | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | 1 | 2 | 3 | * | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | , | 0 | . | / | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + // Numpad + [NUMPAD] = KEYMAP( + // left hand + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RIGHT,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, + KC_TRNS, KC_DLR, KC_7, KC_8, KC_9, KC_PLUS, KC_TRNS, + KC_EQL, KC_4, KC_5, KC_6, KC_MINS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_ASTR, KC_TRNS, + KC_COMMA,KC_0, KC_DOT, KC_SLSH, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), + + /* Keymap 4: 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; + } + +}; diff --git a/keyboards/ergodox/keymaps/jacobono/readme.md b/keyboards/ergodox/keymaps/jacobono/readme.md new file mode 100644 index 0000000000..48de0509fc --- /dev/null +++ b/keyboards/ergodox/keymaps/jacobono/readme.md @@ -0,0 +1,34 @@ +# Default Layer # + +I'm using the colemak layer -- customized a bit to work a bit better when using spacemacs as my editor. + +![default-layer](img/colemak-default-layer.png) + +## Special Keys ## + +`SC1` => `LGUI + TAB` + +`SC2` => `LGUI + SPACE + TAB` + +`L1` => Switch to QWERTY Layout + +`T(L2)` => Toggle Symbol Layer + +`T(L3)` => Toggle Number and D-Pad Layer + +# QWERTY # + +Nothing special here -- just need this layer tucked away for the `WASD`. Which is literally the only reason I use it. +Just have the same button to toggle back to colemak. + +# Symbol Layer # + +![symbol-layer](img/symbol-layer.png) + +This is just putting matching closing symbols next to each other -- useful when editing lisp. + +# Number and D-Pad Layer # + +Just a basic number layer with a D-PAD on the other side. + +![number-dpad-layer](img/number-dpad-layer.png) diff --git a/keyboards/ergodox/keymaps/jgarr/keymap.c b/keyboards/ergodox/keymaps/jgarr/keymap.c new file mode 100644 index 0000000000..a3ad2040f4 --- /dev/null +++ b/keyboards/ergodox/keymaps/jgarr/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 + * + * ,--------------------------------------------------. ,-----------------------------------------------------. + * | Grv | 1 | 2 | 3 | 4 | 5 | Del | |Backspace| 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |---------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Ctrl/Esc| A | O | E | U | I |------| |---------| D | H | T | N |S / L2| - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `----------------+------+------+------+------+--------' + * | Ctrl | LGui | Alt | Left | Right| | Up | Down | [ | ] | = | + * `----------------------------------' `----------------------------------' + * ,--------------. ,-------------. + * | AltShf| LGui | | Alt | ~L1 | + * ,------|-------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp |------| |------| Enter |Space | + * | |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_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, TG(1), + CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO), + KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT, + LALT(KC_LSFT), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, + MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_EQL, + KC_LALT, KC_FN1, + KC_PGUP, + KC_PGDN,KC_ENT, 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; + } + +}; diff --git a/keyboards/ergodox/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c new file mode 100644 index 0000000000..de5664a25a --- /dev/null +++ b/keyboards/ergodox/keymaps/josh/keymap.c @@ -0,0 +1,205 @@ +#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 + +//macros +#define CTL_SFT_T 100 +#define CTL_SFT_G 101 +#define CTL_ALT_H 102 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | M 100| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / CTL | + * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | WIN | ` | M 102| M 101|AltShf| |AltShf| Left | Down | Up | Right | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LALT | | Alt | CAPS | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Delete |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_ESC, + ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB), + KC_LGUI, KC_GRV, M(CTL_ALT_H),M(CTL_SFT_G),LALT(KC_LSFT), + CTL_T(KC_APP), KC_LALT, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), + MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, + KC_LALT, KC_CAPS, + KC_PGUP, + KC_PGDN,KC_DEL, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | CALC | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + 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_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_CALC, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN,KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, 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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + case CTL_SFT_T: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(T), END); + } + return MACRO(U(LCTL), U(LSFT), END); + break; + case CTL_SFT_G: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(G), END); + } + return MACRO(U(LCTL), U(LSFT), END); + break; + case CTL_ALT_H: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LALT), T(H), END); + } + return MACRO(U(LCTL), U(LALT), 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) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/josh/readme.md b/keyboards/ergodox/keymaps/josh/readme.md new file mode 100644 index 0000000000..cee19d47ea --- /dev/null +++ b/keyboards/ergodox/keymaps/josh/readme.md @@ -0,0 +1,8 @@ +Layout is based on the default layout that comes on the ergodox infinity. Focused mostly on making ctl and alt easy to reach. I spend most my day working in Eclipse which has just so many 3 key shortcuts. + +* Removed numpad keys from symbol layer (I don't use them) +* Added arrow keys under h, j, k, l on symbol layer. vi movement keys! +* Added a few macros for eclipse hotkeys that I used all the time +* Added calc button on symbol layer +* tap vs hold on tab and \. Gives alt, ctl and shift on both sides of the keyboard + diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c new file mode 100644 index 0000000000..3982e0a19f --- /dev/null +++ b/keyboards/ergodox/keymaps/kastyle/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 | LGUI | | App | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl | 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 | + * `----------------------------------' `----------------------------------' + * ,---------------. ,---------------. + * |Ctrl/Esc| Alt | | Alt |Ctrl/Esc| + * ,------|--------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp| Del |------| |------| Enter | Space| + * | | | 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_LGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + 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, + CTL_T(KC_ESC), ALT_T(KC_APP), + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, + MEH_T(KC_NO),KC_N, 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_ENT, 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; + } + +}; diff --git a/keyboards/ergodox/keymaps/kines-ish/keymap.c b/keyboards/ergodox/keymaps/kines-ish/keymap.c new file mode 100644 index 0000000000..5063c99f28 --- /dev/null +++ b/keyboards/ergodox/keymaps/kines-ish/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 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Esc | Grv |Insert| Left | Right| | Up | Down | [ | ] | L2 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Ctrl | Alt | | LGui | Ctrl | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * |Backsp| Del |------| |------| Enter| Space| + * |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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_CAPS, 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_NO), + KC_ESC, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL,KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + 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, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN2, + KC_LGUI, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_PSCR,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_SLCK,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_PAUS,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/keyboards/ergodox/keymaps/kines-ish/readme.md b/keyboards/ergodox/keymaps/kines-ish/readme.md new file mode 100644 index 0000000000..5d39a0590d --- /dev/null +++ b/keyboards/ergodox/keymaps/kines-ish/readme.md @@ -0,0 +1,19 @@ +This keymap attempts to match the Kinesis Contoured (aka Advantage) default +layout as closely as possible. See +http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf + +Apart from the obvious mappings, this keymap also: + +* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv; + because the author--coming from a Kinesis keyboard--finds the delays and + accidental modifiers to be more disconcerting than helpful. + +* puts Esc in the bottom left since there's no place for it in the top + left to match the Kinesis. + +* changes the bottom-right key into an L2 toggle since there's otherwise no + way to get to L2. + +* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since + they're present on the Kinesis but not available in the default + ergodox_ez keymap. diff --git a/keyboards/ergodox/keymaps/maz/keymap.c b/keyboards/ergodox/keymaps/maz/keymap.c new file mode 100644 index 0000000000..7b8f0df74d --- /dev/null +++ b/keyboards/ergodox/keymaps/maz/keymap.c @@ -0,0 +1,229 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define ARRW 2 // arrow keys +#define MDIA 3 // media keys, including mouse + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | Space| Bksp |------| |------| Tab |Enter | + * | ctrl | gui | Alt | | Alt | gui | ctrl | + * `--------------------' `----------------------' + */ + // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue + // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing +// 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_TRNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_ESC, 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_NO), + KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), + KC_TRNS, KC_TRNS, + KC_TRNS, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, + // right hand + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_RALT,GUI_T(KC_TAB), CTL_T(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_DOT, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_TRNS, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Arrow keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | |PGDOWN| PGUP | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | HOME | END | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[ARRW] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |Mute |VolDn | VolUp| | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Prev | Play | Next | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * |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_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_WBAK, 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_BTN1, KC_BTN2, 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_TRNS, 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) { + 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/keyboards/ergodox/keymaps/maz/readme.md b/keyboards/ergodox/keymaps/maz/readme.md new file mode 100644 index 0000000000..000a8d0000 --- /dev/null +++ b/keyboards/ergodox/keymaps/maz/readme.md @@ -0,0 +1,121 @@ +# Introduction + +## Motivation +I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line. + +More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. + +## Changes +There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date. +### Modifier Keys +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. + +### Layers +* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best. +* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse +* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer +* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries +** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus + +### Removal Of Keys +I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. + +## Caveats +### Thumb Cluster Range +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are +* I have relatively large hands (I guarantee you there's no problem - I guarantee you) + +### Dangerous positioning +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. + +# Keymap +## Keymap 0: Basic layer +``` +,--------------------------------------------------. ,--------------------------------------------------. +| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | +|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+--------+------. + | | | | | | | | + | Space| Bksp |------| |------| Tab |Enter | + | ctrl | gui | Alt | | Alt | gui | ctrl | + `--------------------' `----------------------' + +``` + +## Keymap 1: Symbol Layer +The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | 0 | = | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Keymap 2: Arrow Layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | | | | | | | |PGDOWN| PGUP | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | HOME | END | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Keymap 3: Media and mouse keys +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | MsUp | | | | | | | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |Mute |VolDn | VolUp| | | | | | | | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | Prev | Play | Next | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + |Brwser| | | | | | | + |Back | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` diff --git a/keyboards/ergodox/keymaps/mpiechotka/keymap.c b/keyboards/ergodox/keymaps/mpiechotka/keymap.c new file mode 100644 index 0000000000..5bfef59955 --- /dev/null +++ b/keyboards/ergodox/keymaps/mpiechotka/keymap.c @@ -0,0 +1,276 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_colemak.h" + +enum { + BASE = 0, + BASE_CM, + SYMB, + MACR +}; + +enum { + LWIN = 1, + PC1, + PC2, + PC3, + PC4, + DL_BASE, + DL_BASE_CM, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0a: 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 | ; | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | + * |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LAlt | LGui | | LAlt | RAlt | + * ,------|------|------| |------+--------+------. + * | |Backsp| Home | | PgUp | | | + * | Space|ace/ |------| |------| Tab/ |Enter/| + * | /Shft|Ctrl | 1) | | 2) | Ctrl |Shift | + * `--------------------' `----------------------' + * + * 1) End/L1 + * 2) PgDown/L2 + */ +[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_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + KC_LALT, F(LWIN), + KC_HOME, + SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, 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, KC_O, KC_QUOT, + KC_MINS, KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO), + KC_LALT, KC_RALT, + KC_PGUP, + LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT) + ), +/* Keymap 0b: Basic layer (Colemak keycodes or QWERTY) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | + * |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LAlt | LGui | | LAlt | RAlt | + * ,------|------|------| |------+--------+------. + * | |Backsp| Home | | PgUp | | | + * | Space|ace/ |------| |------| Tab/ |Enter/| + * | /Shft|Ctrl | 1) | | 2) | Ctrl |Shift | + * `--------------------' `----------------------' + * + * 1) End/L1 + * 2) PgDown/L2 + */ +[BASE_CM] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, CM_Q, CM_W, CM_F, CM_P, CM_G, TG(SYMB), + KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, + KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, KC_EQL, + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + KC_LALT, F(LWIN), + KC_HOME, + SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END), + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), CM_J, CM_L, CM_U, CM_Y, KC_P, /*CM_SCLN*/ KC_BSLS, + CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, + KC_MINS, CM_K, CM_M, CM_COMM,CM_DOT, CTL_T(CM_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO), + KC_LALT, KC_RALT, + KC_PGUP, + LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(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: Macros + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | DLa | DLb | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | PC1 | PC2 | PC3 | PC4 | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MACROS +[MACR] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, F(DL_BASE),F(DL_BASE_CM),KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, F(PC1), F(PC2), F(PC3), F(PC4), 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_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + 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, 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_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [LWIN] = ACTION_MACRO(LWIN), + [PC1] = ACTION_MACRO(PC1), + [PC2] = ACTION_MACRO(PC2), + [PC3] = ACTION_MACRO(PC3), + [PC4] = ACTION_MACRO(PC4), + [DL_BASE] = ACTION_DEFAULT_LAYER_SET(BASE), + [DL_BASE_CM] = ACTION_DEFAULT_LAYER_SET(BASE_CM) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + case LWIN: + if (record->event.pressed) { + register_code(KC_RSFT); + unregister_code(KC_RSFT); + register_code(KC_LGUI); + } else { + unregister_code(KC_LGUI); + } + break; + case PC1: + if (!record->event.pressed) { + return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END); + } + break; + case PC2: + if (!record->event.pressed) { + return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END); + } + break; + case PC3: + if (!record->event.pressed) { + return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END); + } + break; + case PC4: + if (!record->event.pressed) { + return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), 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) { + + 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 SYMB: + ergodox_right_led_1_on(); + break; + case MACR: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } +}; diff --git a/keyboards/ergodox/keymaps/mpiechotka/readme.md b/keyboards/ergodox/keymaps/mpiechotka/readme.md new file mode 100644 index 0000000000..785400d1d2 --- /dev/null +++ b/keyboards/ergodox/keymaps/mpiechotka/readme.md @@ -0,0 +1,6 @@ +# ErgoDox EZ mpiechotka Configuration + +Modification of ErgoDox EZ Colemak layout with additional QWERTY/software Colemak layer and change of the special keys. + + + diff --git a/keyboards/ergodox/keymaps/msc/img/code_layer.png b/keyboards/ergodox/keymaps/msc/img/code_layer.png new file mode 100644 index 0000000000..7b5efaae79 Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/code_layer.png differ diff --git a/keyboards/ergodox/keymaps/msc/img/main_layer.png b/keyboards/ergodox/keymaps/msc/img/main_layer.png new file mode 100644 index 0000000000..65f92dda1b Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/main_layer.png differ diff --git a/keyboards/ergodox/keymaps/msc/img/media_layer.png b/keyboards/ergodox/keymaps/msc/img/media_layer.png new file mode 100644 index 0000000000..a69799b073 Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/media_layer.png differ diff --git a/keyboards/ergodox/keymaps/msc/keymap.c b/keyboards/ergodox/keymaps/msc/keymap.c new file mode 100644 index 0000000000..e567e513f9 --- /dev/null +++ b/keyboards/ergodox/keymaps/msc/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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Cmd | Alt |AltShf| Left | Right| | Left | Down | Up |Right | L2 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | 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_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_LGUI,KC_LALT, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN,GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(MDIA), + 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 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | Mute | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Prev |VolDn |VolUp | Next | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | Lclk | Rclk |------| |------| |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_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, 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_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, 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/keyboards/ergodox/keymaps/msc/readme.md b/keyboards/ergodox/keymaps/msc/readme.md new file mode 100644 index 0000000000..0d14fcbd29 --- /dev/null +++ b/keyboards/ergodox/keymaps/msc/readme.md @@ -0,0 +1,32 @@ +# MSC Configuration + +### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx. + +#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right. + +### Main Layer + +![Main Layer](img/main_layer.png) + +### Code Layer + +![Code Layer](img/code_layer.png) + +### Media Layer + +![Media Layer](img/media_layer.png) + +## Changelog + +Version 1.0 + +- Changed the temp code layer key in the bottom right to toggle media layer +- Changed the temp media key to only be ";" +- Changed right hand bottom row to match vim home row nav directions +- Changed media keys to match arrow key changes +- Changed media left and right click to spacebar and backspace locations +- Changed bottom left to Cmd +- Changed single quote on left bottom row to alt + +#### Coming Soon: +- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender. diff --git a/keyboards/ergodox/keymaps/naps62/keymap.c b/keyboards/ergodox/keymaps/naps62/keymap.c new file mode 100644 index 0000000000..d8c28423cf --- /dev/null +++ b/keyboards/ergodox/keymaps/naps62/keymap.c @@ -0,0 +1,187 @@ +#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 % | Lang | | Esc | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | Bckspc | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L2 | | L2 | Y | U | I | O | P | \ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; : | ' " | + * |--------+------+------+------+------+------| L1 | | L1 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , < | . > | / ? | - _ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L1 | ` ~ | ' " | \ | | L2 | | { | } | [ { | ] } | L1 | + * `----------------------------------' `----------------------------------' + * ,--------------. ,---------------. + * | Home | End | | PgUp |Insert | + * ,------|-------|------| |-------+-------+------. + * | | | LGui | | Del | | | + * | Space| Alt |------| |-------| Enter |Space | + * | | | LGui | | Bcsp | | | + * `---------------------' `----------------------' + */ +// 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_SPC), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(2), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), + MO(1), KC_GRV, KC_QUOT, KC_BSLS, MO(2), + + KC_HOME, KC_END, + KC_LGUI, + KC_SPC, KC_LALT, KC_LGUI, + + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + MO(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS, + KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, MO(1), + + KC_PGUP, KC_INS, + KC_DEL, + KC_BSPC, KC_ENT, 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_EQL,KC_DOT, KC_0, KC_MINS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | |GuiUp | Expl | | Term | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |GuiLft|GuiDwn|GuiRgt| | |------| |------| Left | Down | Up |Right | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | |Browsr| | | | |VolDwn|VolUp | Mute | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | | Play | Prev | Next | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Fwd |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, LGUI(KC_W), LGUI(KC_E), KC_BTN1, LGUI(KC_T), KC_TRNS, + KC_TRNS, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), 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_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, + KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_WBAK, KC_WFWD +), +}; + +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/keyboards/ergodox/keymaps/naps62/readme.md b/keyboards/ergodox/keymaps/naps62/readme.md new file mode 100644 index 0000000000..14728e4cc4 --- /dev/null +++ b/keyboards/ergodox/keymaps/naps62/readme.md @@ -0,0 +1,29 @@ +# ErgoDox EZ naps62 Configuration + +## Motivation + +I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming. + +## Key features / changes + +### Base Layer (L1) + +* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether. +* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this. +* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it. +* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing. +* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well. + +### Coder Layer (L2) + +* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer. + +### Media Layer (L3) + +* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones +* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here +* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now. + +## Author + +[Miguel Palhas](https://github.com/naps62) diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c new file mode 100644 index 0000000000..778cbc63cf --- /dev/null +++ b/keyboards/ergodox/keymaps/ordinary/keymap.c @@ -0,0 +1,454 @@ +#include "ergodox_ez.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols layer +#define MDIA 2 // media layer +#define SPEC 3 // special layer + +#define LCaps 10 // left caps-shift key +#define LSymb 11 // left symbol-shift key +#define LMdia 12 // left media-shift key +#define LSpec 13 // left special-shift key +#define RCaps 14 // right caps-shift key +#define RSymb 15 // right symbol-shift key +#define RMdia 16 // right media-shift key +#define RSpec 17 // right special-shift key + +#define MUL 20 // mouse up left +#define MUR 21 // mouse up right +#define MDL 22 // mouse down left +#define MDR 23 // mouse down right + +/* + * The Ordinary Layout for the Ergodox EZ keyboard, v4 + * + * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com + * + * No rights reserved. This software is in the public domain. + * Credit me if you are friendly but if you're a jerk don't bother. + * + * Details: readme.md + * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/******* Base Layer ******************************************************************************************************** + * + * ,------------------------------------------------------. ,------------------------------------------------------. + * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | + * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| + * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | + * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| + * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | + * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Home | End | | Left | Right| + * ,------|------|------| |------+------+------. + * | | | PgUp | | Up | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | PgDn | | Down | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC +,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC +,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) +,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI + ,KC_HOME,KC_END + ,KC_PGUP + ,KC_BSPC,KC_DEL ,KC_PGDN + // right hand + ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) + ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) + ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_DOWN ,KC_ENT ,KC_SPC + ), + +/******* Symbols Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | + * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| + * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| + * `-----------------------------------' `-------------------------------------' + * ,-------------. ,-------------. + * | Left | Right| | Home | End | + * ,------|------|------| |------+------+------. + * | | | Up | | PgUp | | | + * |Space |Enter |------| |------|BackSp| Del | + * | | | Down | | PgDn | | | + * `--------------------' `--------------------' + */ +[SYMB] = KEYMAP( +// left hand + KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC +,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) +,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_TAB +,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_SPC ,KC_ENT ,KC_DOWN + // right hand + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS + ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS + ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS + ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) + ,KC_HOME ,KC_END + ,KC_PGUP + ,KC_PGDN ,KC_BSPC ,KC_DEL +), + +/******* Media Layer ******************************************************************************************************* + * + * ,---------------------------------------------------------------. ,---------------------------------------------------------------. + * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | + * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| + * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | + * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| + * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | + * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| + * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | + * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' + * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| + * `---------------------------------------------' `---------------------------------------------' + * ,-------------. ,-------------. + * | Stop |Refrsh| | Prev | Next | + * ,------|------|------| |------+------+------. + * |Brwser|Brwser|Search| |VolUp | | | + * |Back | Fwd |------| |------| Stop | Play-| + * | | | Home | |VolDn | | Pause| + * `--------------------' `--------------------' + */ +[MDIA] = KEYMAP( +// left hand + KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC +,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U +,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D +,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 + ,KC_WSTP ,KC_WREF + ,KC_WSCH + ,KC_WBAK ,KC_NO ,KC_WHOM + // right hand + ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS + ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS + ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS + ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS + ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_MPRV ,KC_MNXT + ,KC_VOLU + ,KC_VOLD ,KC_MSTP ,KC_MPLY +), + +/******* Special Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | Esc | | | | | | | | | | | | Bspc | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | RShift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[SPEC] = KEYMAP( +// left hand + KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT + ,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[] = { + // the faux shift keys are implemented as macro taps + [LCaps] = ACTION_MACRO_TAP(LCaps) + ,[LSymb] = ACTION_MACRO_TAP(LSymb) + ,[LMdia] = ACTION_MACRO_TAP(LMdia) + ,[LSpec] = ACTION_MACRO_TAP(LSpec) + ,[RCaps] = ACTION_MACRO_TAP(RCaps) + ,[RSymb] = ACTION_MACRO_TAP(RSymb) + ,[RMdia] = ACTION_MACRO_TAP(RMdia) + ,[RSpec] = ACTION_MACRO_TAP(RSpec) +}; + +uint16_t caps_shift = 0; +uint16_t symb_shift = 0; +uint16_t mdia_shift = 0; + +bool symb_lock = false; +bool mdia_lock = false; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + // There are two shift keys for each layer so we increment a layer_shift var when one + // is pressed and decrement when one is released. If both are pressed at the same time + // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 + // only because sometimes rapid pressing led to irregular events; this way the states + // are self healing during use. + + case LCaps: // both caps-shift keys trigger Left Shift + case RCaps: // so they don't interfere with the magic combo + if (record->event.pressed && !record->tap.count) { + if(++caps_shift > 2) caps_shift = 2; + if(caps_shift == 2) { + register_code(KC_CAPS); + unregister_code(KC_CAPS); + } else if(caps_shift == 1) { + register_code(KC_LSFT); + } + } else { + if(--caps_shift < 0) caps_shift = 0; + if(caps_shift == 0) unregister_code(KC_LSFT); + } + break; + + case LSymb: + if (record->event.pressed) { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } else { + if(--symb_shift < 0) symb_shift = 0; + if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); + } + break; + + case LMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_TAB); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_TAB); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case LSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_GRV); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_GRV); + } else { + layer_off(SPEC); + } + } + break; + + case RSymb: + if (record->event.pressed) { + if (record->tap.count && (!symb_shift) && (!symb_lock)) { + register_code(KC_QUOT); + } else { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } + } else { + if(record->tap.count && symb_shift == 0) { + unregister_code(KC_QUOT); + } else { + if(--symb_shift < 0) symb_shift = 0; + if((!symb_shift) && (!symb_lock)) layer_off(SYMB); + } + } + break; + + case RMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_BSLS); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_BSLS); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case RSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_EQL); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_EQL); + } else { + layer_off(SPEC); + } + } + break; + + // mouse diagonals + + case MUL: // mouse up left + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MUR: // mouse up right + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + case MDL: // mouse down left + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MDR: // mouse down right + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + default: + // none + 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) { + // shift or caps lock turns on red light + if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<\n\n\nTab"], +[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], +[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], +[{y:-0.875,x:5.5},"B",{x:6.5},"N"], +[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], +[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], +[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], +[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], +[{x:2},"Page\n\n\n\n\n\nDown"], +[{r:-30,rx:13,y:-1,x:-3},"Left","Right"], +[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"], +[{x:-3},"Down"] + diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png new file mode 100644 index 0000000000..99e5ed80b1 Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt new file mode 100644 index 0000000000..4eccc9f350 --- /dev/null +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt @@ -0,0 +1,27 @@ +[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], +[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], +[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], +[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], +[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], +[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], +[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], +[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], +[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], +[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], +[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], +[{x:2},"Home\n\n\nBrowser"], +[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], +[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], +[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] + diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png new file mode 100644 index 0000000000..6eecf447ee Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt new file mode 100644 index 0000000000..a08827c6de --- /dev/null +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt @@ -0,0 +1,27 @@ +[{x:3.5,a:7},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], +[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], +[{y:-0.375,x:3.5},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{x:6.5},""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], +[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], +[{y:-0.75,x:3.5},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.875,x:5.5},"",{x:6.5},""], +[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], +[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], +[{y:-0.75,x:0.5},"","",{x:14.5},"",""], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], +[{h:2},"",{h:2},"",""], +[{x:2},""], +[{r:-30,rx:13,y:-1,x:-3},"",""], +[{x:-3},"",{h:2},"",{h:2},""], +[{x:-3},""] + diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png new file mode 100644 index 0000000000..e4de64a96f Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt new file mode 100644 index 0000000000..e199f5c59f --- /dev/null +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt @@ -0,0 +1,27 @@ +[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], +[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], +[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], +[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], +[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], +[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], +[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], +[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], +[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], +[{h:2},"Space",{h:2},"Enter","Up"], +[{x:2},"Down"], +[{r:-30,rx:13,y:-1,x:-3},"Home","End"], +[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], +[{x:-3},"Page\n\n\n\n\n\nDown"] + diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md new file mode 100644 index 0000000000..6465cd79e0 --- /dev/null +++ b/keyboards/ergodox/keymaps/ordinary/readme.md @@ -0,0 +1,103 @@ +# The Ordinary Layout, a familiar and powerful layout # + +The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout. + +The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards. + +Nicholas Keene +ordinarylayout@nicholaskeene.com +no rights reserved, use for any purposes, credit me if you are a nice person + +## The Base Layout ## + +* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh +* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key +* Several dark blue keys double for entry of characters which would typically be in those locations +* The turquoise keys are text navigation and manipulation +* The red keys is Escape and it is always found in that location no matter what + +![Ordinary base layout](ordinary-base.png) + +This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. + +Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. + +The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. + +The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. + +## The Symbols Layer ## + +* The light green keys are the eponymous symbols +* The bright green keys are F-Keys +* The dark green keys constitute a number pad +* The turquoise keys are the *reverse* of the turquoise keys on the base layer + +![Ordinary symbol layout](ordinary-symbol.png) + +The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. + +The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements: + +* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers. +* The slash, backslash, and pipe characters are grouped together as a memory aid. +* The & and | symbols are juxtaposed as a memory aid + +The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. + +Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. + +## The Media Layer ## + +* The dark orange keys on the left move the mouse cursor +* The dark orange keys on the right move the text cursor +* The light orange keys are for scrolling and paging +* The bright green keys are more F-keys +* The dark yellow keys signal Web and Audio applications +* The light yellow keys signal the operating system +* The dark gray keys do nothing in case you bump them by accident + +![Ordinary media layout](ordinary-media.png) + +This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. + +Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. + +Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. + +## Switching Between Layers ## + +In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. + +Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. + +Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. + +## Special Sequences ## + +![Ordinary special layout](ordinary-special.png) + +### Escape ### + +The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. + +The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. + +### Backspace ### + +At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. + +### RShift ### + +The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. + +**** + +The Ordinary Layout for the Ergodox EZ keyboard, v4 + +Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com + +No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. + +Details: readme.md + https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary diff --git a/keyboards/ergodox/keymaps/osx_de/keymap.c b/keyboards/ergodox/keymaps/osx_de/keymap.c new file mode 100644 index 0000000000..554813d7e8 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_de/keymap.c @@ -0,0 +1,364 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_german_osx.h" + +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define SMLY 3 +#define NUMB 4 +#define EGOS 5 + +#define M_CTRL_CMDV 0 +#define M_CTRL_CMDC 1 +#define M_MEH_SH_ACUT 2 +#define M_LGUI_SHFT 3 +#define M_CTL_SFT_HASH 4 +#define M_DE_OSX_CIRC_CTRLCMD 5 +#define M_DE_OSX_PLUS_CTRLALT 6 +#define SM_SMILE 7 +#define SM_SMIRK 8 +#define SM_CRY 9 +#define SM_SAD 10 +#define SM_HEART 11 +#define SM_LAUGH 12 +#define SM_KISS 13 +#define SM_FROWN 14 +#define M_TOGGLE_5 15 + +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE]=KEYMAP( +//left half + KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH), + KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, + KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, + KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, + LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN, + M(M_MEH_SH_ACUT), TG(MDIA), + KC_HOME, + KC_BSPC, KC_DEL, LT(SMLY,KC_END), + //right half + M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, + KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, + DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), + KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, + KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), + TG(NUMB), ALL_T(DE_OSX_ACUT), + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), +[SYMB]=KEYMAP( +//left half + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, + KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, + KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_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 half + M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, + DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, + KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), + DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, + KC_F13, KC_F12, + KC_F14, + KC_F15, KC_TRNS, KC_TRNS), +[MDIA]=KEYMAP( +//left half + 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 half + 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), +[SMLY]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half + M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, + M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +[NUMB]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, + KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, + KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +[EGOS]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_F1, KC_F2, + KC_F3, + KC_SPC, KC_LCTL, KC_F4, + //right half + M(M_TOGGLE_5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ +static uint16_t start; +switch(id) { +case M_TOGGLE_5: +//Macro: M_TOGGLE_5//----------------------- + if (record->event.pressed){ + layer_state ^= (1<<5); + layer_state &= (1<<5); + } + +break; +case M_CTRL_CMDC: +//Macro: M_CTRL_CMDC//----------------------- +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 M_DE_OSX_PLUS_CTRLALT: +//Macro: M_DE_OSX_PLUS_CTRLALT//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LALT),END); + } else { + return MACRO(U(LCTRL),U(LALT),T(RBRC),END); + } + } + +break; +case SM_KISS: +//Macro: SM_KISS//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END); + } + +break; +case SM_FROWN: +//Macro: SM_FROWN//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END); + } + +break; +case SM_CRY: +//Macro: SM_CRY//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); + } + +break; +case SM_SMILE: +//Macro: SM_SMILE//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); + } + +break; +case SM_SMIRK: +//Macro: SM_SMIRK//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); + } + +break; +case M_LGUI_SHFT: +//Macro: M_LGUI_SHFT//----------------------- +if (record->event.pressed){ + return MACRO(D(LGUI),D(LSFT),END); + }else{ + return MACRO(U(LGUI),U(LSFT),END); + } + +break; +case SM_HEART: +//Macro: SM_HEART//----------------------- +if (record->event.pressed) { + return MACRO(T(GRV),T(3),END); + } + +break; +case SM_LAUGH: +//Macro: SM_LAUGH//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END); + } + +break; +case M_CTL_SFT_HASH: +//Macro: M_CTL_SFT_HASH//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LSFT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LSFT),END); + } else { + return MACRO(U(LCTRL),U(LSFT),T(BSLS),END); + } + } + +break; +case SM_SAD: +//Macro: SM_SAD//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); + } + +break; +case M_DE_OSX_CIRC_CTRLCMD: +//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LGUI),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LGUI),END); + } else { + return MACRO(U(LCTRL),U(LGUI),T(NUBS),END); + } + } + +break; +case M_CTRL_CMDV: +//Macro: M_CTRL_CMDV//----------------------- +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 M_MEH_SH_ACUT: +//Macro: M_MEH_SH_ACUT//----------------------- +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); + } + } + +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) { + + case SYMB: + ergodox_right_led_1_on(); + + + break; + case MDIA: + + ergodox_right_led_2_on(); + + break; + case SMLY: + + + ergodox_right_led_3_on(); + break; + case NUMB: + ergodox_right_led_1_on(); + + ergodox_right_led_3_on(); + break; + case EGOS: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; +default: +// none +break; +} + +}; + diff --git a/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png new file mode 100644 index 0000000000..d442a992c8 Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png differ diff --git a/keyboards/ergodox/keymaps/osx_de/readme.md b/keyboards/ergodox/keymaps/osx_de/readme.md new file mode 100644 index 0000000000..5011a9dd62 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_de/readme.md @@ -0,0 +1,41 @@ +#Ergodox EZ für OSX + +Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyboard. Leider passte das layout nicht wirklich für OSX, deswegen habe ich einige Anpassungen gemacht. Dabei wurden folgende features umgesetzt: + +- Die Umlaute sollten an einigermassen sinnvollen Plätzen liegen +- der Umstieg sollte dadurch erleichtert werden, dass einige Tasten an ihren "normalen" Platz zurückgewandert sind. Z.B. ESC, Tab,... +- die Leertaste ist jetzt auf der rechten seite, neben Enter. Dafür hat der linke Daumen nun Backspace und Delete. +- die CMD- und Alt-Tasten sind in der Mitte einfach erreichbar. +- es gibt eine neue Layer die für Spiele genutzt werden kann (egosooter wie Counter Strike). Dort liegen die wichtigsten Tasten auf der linken Seite, im Daumenblock z.B. space und ctrl sowie die F-Tasten 1-4. Diese Layer ist über die Symbollayer erreichbar. +- Die Symbollayer wurde dahingehend angepasst, dass die klammern, etc nun auf beiden hälften der Tastatur zu finden sind +- der Zehnerblock wurde in eine eigene Layer umgezogen +- die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen + +# Erstellt Mit Dem ErgodoxLayoutGenerator + +Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein. +Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar). + + + +------------------------------ + +# ErgoDox EZ for OSX + +This is only a little tweak of the existing default layout for the ErgoDox keyboard. Unfortunately the default layout did not work well with german OSX, so I created som adjustments. These were the features added and changed: + +- the umlaut-keys should be at their useful place more or less +- the switching should be made more easy so some other keys (like tab, esc) were moved to their default place +- the space key can now be used with both hands +- the CMD- and ALT-Keys moved to the middle, can be reached more easily. +- there is a new layer for using the cursor-keys, placed like on the default keyboard. This makes them useable for games also +- the symbollayer now has only symbols +- the number block was moved to a special layer +- meh and hyper went down to the thumb block + +# Created Using the ErgodoxLayoutGenerator + +The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed. + +The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). + diff --git a/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c new file mode 100644 index 0000000000..687a5cb8b5 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c @@ -0,0 +1,174 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#include "keymap_neo2.h" +#include "keymap_uk.h" +#include "keymap_colemak.h" +#include "keymap_french_osx.h" +#include "keymap_nordic.h" +#include "keymap_dvorak.h" +#include "keymap_german.h" +#include "keymap_norwegian.h" +#include "keymap_fr_ch.h" +#include "keymap_german_osx.h" +#include "keymap_spanish.h" +#include "keymap_bepo.h" + +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define QWERTZ 3 +#define NUMB 4 + +#define UNUSED 0 + +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE]=KEYMAP( +//left half + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL, + KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_LGUI, + TG(QWERTZ), KC_H, KC_A, KC_E, KC_I, KC_U, + KC_LSFT, CTL_T(KC_X), KC_Q, DE_AE, DE_UE, DE_OE, KC_LALT, + LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + TG(MDIA), MEH_T(LSFT(DE_ACUT)), + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + //right half + KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, DE_OSX_MINS, + KC_RGUI, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y, + KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F), + KC_RALT, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT, + KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), + ALL_T(DE_ACUT), TG(NUMB), + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), +[SYMB]=KEYMAP( +//left half + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_GRV, LSFT(KC_GRV), DE_EXLM, DE_QST, KC_TRNS, KC_TRNS, + KC_TRNS, DE_HASH, DE_DLR, LALT(LSFT(KC_7)), DE_SLSH, KC_DOT, + KC_TRNS, KC_TRNS, DE_LESS, DE_PERC, LALT(KC_7), LALT(KC_N), 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 half + 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), +[MDIA]=KEYMAP( +//left half + 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + //right half + KC_TRNS, 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_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK), +[QWERTZ]=KEYMAP( +//left half + 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, + KC_TRNS, 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, + KC_TRNS, MEH_T(LSFT(DE_ACUT)), + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + //right half + 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), KC_TRNS, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), +[NUMB]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS, + KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, + KC_0, KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, 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) +{ +switch(id) { +case UNUSED: +//Macro: UNUSED//----------------------- + + + + + + 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) { + +default: +// none +break; +} + +}; + diff --git a/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png new file mode 100644 index 0000000000..193aa339e6 Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png differ diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c new file mode 100644 index 0000000000..21d695894a --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c @@ -0,0 +1,597 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_neo2.h" +#include "keymap_uk.h" +#include "keymap_colemak.h" +#include "keymap_nordic.h" +#include "keymap_dvorak.h" +#include "keymap_german.h" +#include "keymap_norwegian.h" +#include "keymap_fr_ch.h" +#include "keymap_german_osx.h" +#include "keymap_spanish.h" +#include "keymap_bepo.h" + + +/** +* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases +* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/ +* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ! +* +* use at own risk! +**/ + +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define SMLY 3 +#define NUMB 4 +#define EGOS 5 + +#define SMLY_TOG_QUOT 0 + +#define M_TOGGLE_5 1 + +#define TGH_NUM 2 + +#define M_DE_OSX_PLUS_CTRLALT 3 + +#define SM_KISS 4 + +#define SM_FROWN 5 + +#define SM_CRY 6 + +#define SM_SMILE 7 + +#define SM_SMIRK 8 + +#define M_LGUI_SHFT 9 + +#define SM_HEART 10 + +#define TOG_HLD_MDIA 11 + +#define SM_LAUGH 12 + +#define SM_SAD 13 + +#define M_DE_OSX_CIRC_CTRLCMD 14 + +#define M_MEH_SH_ACUT 15 + + +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/** +* Layer: BASE +* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ +* | ESC | 1 | 2 | 3 | 4 | 5 | Hold or toggle | | Hold or toggle | 6 | 7 | 8 | 9 | 0 | ß | +* | | | | | | | Layer NUMB | | Layer MDIA | | | | | | | +* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ +* | TAB | Q | W | E | R | T | Cmd | | Cmd | Z | U | I | O | P | Ü | +* | | | | | | | | | | | | | | | | +* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\ \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ +* | Alt | A | S | D | F | G | | H | J | K | L | Ö | Ä | +* | | | | | | | | | | | | | ALT | +* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ +* | Shift | Y | X | C | V | B | Alt | | Alt | N | M | , | . | - | Shift | +* | | Ctrl | | | | | | | | | | | | Ctrl | | +* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ +* +* +* /-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------/ +* | < | LongPress / Type | LongPress / Type | Shift+Ctrl | Type | | # | ACUT | CMD+Shift | ALT+Shift | + | +* | SYMB | DE_OSX_CIRC_CTRLCMD| DE_OSX_PLUS_CTRAlt | | Toggle SMLY | | Meh | Hyper | | | SYMB | +* \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/ /-------------------//-------------------/ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ +* | HOME | END | | LEFT | RIGHT | +* | | | | | | +* \-------------------\/-------------------/ /-------------------/\-------------------\ +* | PGUP | | UP | +* | | | | +* /-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------/ +* | BSPC | DEL | PGDN | | DOWN | ENT | SPC | +* | | | | | | | | +* \-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\ +* +* +**/ +[BASE]=KEYMAP( +//left half + KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM), + KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, + KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, + KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, + LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), + KC_HOME, KC_END, + KC_PGUP, + KC_BSPC, KC_DEL, KC_PGDN, + //right half + M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, + KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, + DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), + KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, + MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), + KC_LEFT, KC_RIGHT, + KC_UP, + KC_DOWN, KC_ENT, KC_SPC), +/** +* Layer: SYMB +* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ +* | APPLICATION| F1 | F2 | F3 | F4 | F5 | F5 | | F6 | F6 | F7 | F8 | F9 | F10 | F11 | +* | | | | | | | | | | | | | | | | +* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ +* | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! | +* | | | | | | | | | | | | | | | | +* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\ \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/ +* | | # | $ | \ | / | . | | / | ( | ) | { | } | # | +* | | | | | | | | | | | | | | +* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ +* | | | < | % | | | ~ | | | | | | ~ | | | | | +* | | | | | | | | | | | | | | | | +* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\ +* +* +* /-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------/ +* | | | | | | | ' | DQOT | | Toggle 5 | | +* | | | | | | | | | | | | +* \-----------\\-----------\\-----------\\-----------\/-----------//-----------/ /-----------//-----------/ \-----------\\-----------\\-----------\\-----------\\-----------\ +* | | | | F13 | F12 | +* | | | | | | +* \-----------\/-----------/ /-----------/\-----------\ +* | | | F14 | +* | | | | +* /-----------//-----------//-----------/ /-----------//-----------//-----------/ +* | | DEL | | | F15 | | | +* | | | | | | | | +* \-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\ +* +* +**/ +[SYMB]=KEYMAP( +//left half + KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, + KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, + KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, + KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_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 half + KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, + DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH, + KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, + KC_F13, KC_F12, + KC_F14, + KC_F15, KC_TRNS, KC_TRNS), +/** +* Layer: MDIA +* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ +* | | | | | | | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ +* | | | BTN1 | U | BTN2 | U | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* /-----//-----//-----//-----//-----//-----/\-----\ \-----\/-----//-----//-----//-----//-----//-----/ +* | | | L | D | R | D | | | | | | | | +* | | | | | | | | | | | | | | +* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ +* | | | L | D | R | BTN3 | | | | | | | | UP | | +* | | | | | | | | | | | | | | | | +* \-----\\-----\\-----\\-----\\-----\\-----\\-----\ \-----\\-----\\-----\\-----\\-----\\-----\\-----\ +* +* +* /-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----/ +* | | | | | | | | | LEFT | DOWN | RIGHT| +* | | | | | | | | | | | | +* \-----\\-----\\-----\\-----\/-----//-----/ /-----//-----/ \-----\\-----\\-----\\-----\\-----\ +* | | | | MPRV | MNXT | +* | | | | | | +* \-----\/-----/ /-----/\-----\ +* | | | VOLU | +* | | | | +* /-----//-----//-----/ /-----//-----//-----/ +* | | | | | VOLD | MUTE | MPLY | +* | | | | | | | | +* \-----\\-----\\-----\ \-----\\-----\\-----\ +* +* +**/ +[MDIA]=KEYMAP( +//left half + 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 half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, + KC_MPRV, KC_MNXT, + KC_VOLU, + KC_VOLD, KC_MUTE, KC_MPLY), +/** +* Layer: SMLY +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | Typing | Typing | Typing | | | | | +* | | | | | | | | | SM_SMILE| SM_SMIRK| SM_LAUGH| | | | | +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | | Typing | Typing | Typing | | | | +* | | | | | | | | | | SM_FROWN| SM_SAD | SM_CRY | | | | +* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/ +* | | | | | | | | Typing | Typing | | | | | +* | | | | | | | | SM_HEART| SM_KISS | | | | | +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\ +* +* +* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/ +* | | | | | | | | | | | | +* | | | | | | | | | | | | +* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\ +* | | | | | | +* | | | | | | +* \--------\/--------/ /--------/\--------\ +* | | | | +* | | | | +* /--------//--------//--------/ /--------//--------//--------/ +* | | | | | | | | +* | | | | | | | | +* \--------\\--------\\--------\ \--------\\--------\\--------\ +* +* +**/ +[SMLY]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half + M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, + M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +/** +* Layer: NUMB +* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ +* | | | | | | | | | | F6 | F7 | F8 | F9 | F10 | F11 | +* | | | | | | | | | | | | | | | | +* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ +* | | | | UP | | | | | | / | 7 | 8 | 9 | * | F12 | +* | | | | | | | | | | | | | | | | +* /----//----//----//----//----//----/\----\ \----\/----//----//----//----//----//----/ +* | | | LEFT| DOWN| RGHT| | | / | 4 | 5 | 6 | + | - | +* | | | | | | | | | | | | | | +* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ +* | | | | | | | | | | % | 1 | 2 | 3 | | | +* | | | | | | | | | | | | | | | | +* \----\\----\\----\\----\\----\\----\\----\ \----\\----\\----\\----\\----\\----\\----\ +* +* +* /----//----//----//----//----/ /----//----//----//----//----/ +* | | | | | | | 0 | . | , | = | | +* | | | | | | | | | | | | +* \----\\----\\----\\----\/----//----/ /----//----/ \----\\----\\----\\----\\----\ +* | | | | | | +* | | | | | | +* \----\/----/ /----/\----\ +* | | | | +* | | | | +* /----//----//----/ /----//----//----/ +* | | | | | | | | +* | | | | | | | | +* \----\\----\\----\ \----\\----\\----\ +* +* +**/ +[NUMB]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12, + DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS, + KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, + KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +/** +* Layer: EGOS +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/ +* | Shift | | | | | | | | | | | | | +* | | | | | | | | | | | | | | +* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ +* | | | | | | | | | | | | | | | | +* | | | | | | | | | | | | | | | | +* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\ +* +* +* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/ +* | Ctrl | | | | | | | | | Toggle 5| | +* | | | | | | | | | | | | +* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\ +* | F1 | F2 | | | | +* | | | | | | +* \--------\/--------/ /--------/\--------\ +* | F3 | | | +* | | | | +* /--------//--------//--------/ /--------//--------//--------/ +* | SPC | Ctrl | F4 | | | | | +* | | | | | | | | +* \--------\\--------\\--------\ \--------\\--------\\--------\ +* +* +**/ +[EGOS]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_F1, KC_F2, + KC_F3, + KC_SPC, KC_LCTL, KC_F4, + //right half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, 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) +{ +static uint16_t start; +switch(id) { +case SMLY_TOG_QUOT: +//Macro: SMLY_TOG_QUOT//----------------------- +if (record->event.pressed) { + start = timer_read(); + layer_state ^= (1<150) { + return MACRO_NONE; + } else { + return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END); + } + } + +break; +case M_TOGGLE_5: +//Macro: M_TOGGLE_5//----------------------- + if (record->event.pressed){ + layer_state ^= (1<<5); + layer_state &= (1<<5); + } + +break; +case TGH_NUM: +//Macro: TGH_NUM//----------------------- +if (record->event.pressed){ + start = timer_read(); + layer_state ^=(1< 150) { + layer_state^=(1<event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LALT),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END); + } + } + +break; +case SM_KISS: +//Macro: SM_KISS//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END); + } + +break; +case SM_FROWN: +//Macro: SM_FROWN//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END); + } + +break; +case SM_CRY: +//Macro: SM_CRY//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); + } + +break; +case SM_SMILE: +//Macro: SM_SMILE//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); + } + +break; +case SM_SMIRK: +//Macro: SM_SMIRK//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); + } + +break; +case M_LGUI_SHFT: +//Macro: M_LGUI_SHFT//----------------------- +if (record->event.pressed){ + return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END); + }else{ + return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END); + } + +break; +case SM_HEART: +//Macro: SM_HEART//----------------------- +if (record->event.pressed) { + return MACRO(TYPE(KC_GRV),TYPE(KC_3),END); + } + +break; +case TOG_HLD_MDIA: +//Macro: TOG_HLD_MDIA//----------------------- +if (record->event.pressed){ + start = timer_read(); + layer_state ^=(1< 150) { + layer_state^=(1<event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END); + } + +break; +case SM_SAD: +//Macro: SM_SAD//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); + } + +break; +case M_DE_OSX_CIRC_CTRLCMD: +//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LGUI),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END); + } + } + +break; +case M_MEH_SH_ACUT: +//Macro: M_MEH_SH_ACUT//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LSFT),U(LALT),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_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) { + +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) { + + case SYMB: + ergodox_right_led_1_on(); + + + break; + case MDIA: + + ergodox_right_led_2_on(); + + break; + case NUMB: + + + ergodox_right_led_3_on(); + break; + case EGOS: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; +default: +// none +break; +} + +}; + diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png new file mode 100644 index 0000000000..031d874a7b Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png differ diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/readme.md b/keyboards/ergodox/keymaps/osx_de_experimental/readme.md new file mode 100644 index 0000000000..e6a1018416 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_de_experimental/readme.md @@ -0,0 +1,22 @@ + +# Ergodox und Ergodox-EZ experimentelles Layout + +dieses layout ist experimentell und wird im Lufe der Zeit viele Änderungen und Verbesserungen durchlaufen. Falls diese sich als vorteilhaft erweisen, werden sie evtl. auch in das `osx_de` layout übernommen. + + + +# Erstellt Mit Dem ErgodoxLayoutGenerator + +Der ErgodoxLayoutGenerator (ELG) ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein. +Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar). +--------------------------------------------------------------------------------------------------------------------- + +# Ergodox and Ergodox-EZ experimental layout + +This is an experimental layout which will undergo heavy changes over time. If changes prove to be good, they might also move into the `osx_de` layout. + +Created Using the ErgodoxLayoutGenerator + +The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed. + +The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/osx_fr/keymap.c b/keyboards/ergodox/keymaps/osx_fr/keymap.c new file mode 100644 index 0000000000..de951666dd --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_fr/keymap.c @@ -0,0 +1,187 @@ +// French AZERTY version of the default_osx file +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_french_osx.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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | - | & | é | " | ' | ( | LEFT | | RIGHT| § | è | ! | ç | à | ) | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | A | Z | E | R | T | L1 | | L1 | Y | U | I | O | P | ` | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | Q | S | D | F | G |------| |------| H | J | K | L | M | LGui | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |W/Ctrl| X | C | V | B | | | | N | , |; / L2| : |=/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ù /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 + FR_MINS, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_LEFT, + KC_DELT, FR_A, FR_Z, KC_E, KC_R, KC_T, TG(1), + KC_BSPC, FR_Q, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(FR_W), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,FR_UGRV), FR_LESS, 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, FR_SECT, FR_EGRV, FR_EXLM, FR_CCED, FR_AGRV, FR_RPRN, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, FR_GRV, + KC_H, KC_J, KC_K, KC_L, FR_M, KC_LGUI, + MEH_T(KC_NO), KC_N, FR_COMM, LT(MDIA, FR_SCLN), FR_COLN, CTL_T(FR_EQL), 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,FR_EXLM,FR_AT, FR_LCBR,FR_RCBR,FR_PIPE,KC_TRNS, + KC_TRNS,FR_HASH,FR_DLR, FR_LPRN,FR_RPRN,FR_GRV, + KC_TRNS,FR_PERC,FR_CIRC,FR_LBRC,FR_RBRC,FR_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, FR_7, FR_8, FR_9, FR_ASTR, KC_F12, + KC_DOWN, FR_4, FR_5, FR_6, FR_PLUS, KC_TRNS, + KC_TRNS, FR_AMP, FR_1, FR_2, FR_3, FR_BSLS, KC_TRNS, + KC_TRNS,FR_COMM, FR_0, FR_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; + } + +}; \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c new file mode 100644 index 0000000000..1032be5491 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c @@ -0,0 +1,191 @@ +// Netable differences vs. the default firmware for the ErgoDox EZ: +// 1. The Cmd key is now on the right side, making Cmd+Space easier. +// 2. The media keys work on OSX (But not on Windows). +// Wanted to map default layer of my EZ to my existing Kinesis Mapping. +// Only default layer was remapped all others layers are standard Ergodox EZ +// Very personal mapping of-course, but who knows a starting point for others. + +#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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | CapsL | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '" | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |AltShf|Grv/L1| '" | Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LGui | App | | Ctrl/Esc | RGui | + * ,------|------|------| |------+--------+------. + * | | | Home | | = | | | + * | Backs|Delete|------| |------| Enter |Space | + * | pace | | End | | TAB | | | + * `--------------------' `----------------------' + */ +// 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_CAPSLOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LALT(KC_LSFT), LT(SYMB,KC_GRV),KC_QUOT,KC_LEFT,KC_RGHT, + KC_LGUI, ALT_T(KC_APP), + KC_HOME, + KC_BSPC,KC_DELT,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOTE, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + CTL_T(KC_ESC), KC_LGUI, + KC_EQL, + KC_TAB, KC_ENT, 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; + } + +}; diff --git a/keyboards/ergodox/keymaps/plover/keymap.c b/keyboards/ergodox/keymaps/plover/keymap.c new file mode 100644 index 0000000000..8a58a37f68 --- /dev/null +++ b/keyboards/ergodox/keymaps/plover/keymap.c @@ -0,0 +1,228 @@ +#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 +#define PLVR 3 // Plover layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LGui | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | |Plover| Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Esc | 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 | Home | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgUp | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | ace | | LAlt | | 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_LGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_HOME, + KC_END, + KC_BSPC,KC_DELT,KC_LALT, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(3), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, + MEH_T(KC_NO),KC_N, 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_ENT, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Fwd |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_BTN1, KC_BTN2, 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_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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_WBAK, KC_WFWD +), + +/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | c | v |------| |------| n | m | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_FN4, KC_NO, + KC_NO, + KC_C, KC_V, KC_NO, + // right hand + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M +), +}; + +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/keyboards/ergodox/keymaps/plums/keymap.c b/keyboards/ergodox/keymaps/plums/keymap.c new file mode 100644 index 0000000000..46eb2e42b1 --- /dev/null +++ b/keyboards/ergodox/keymaps/plums/keymap.c @@ -0,0 +1,229 @@ +#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 | F5 | |Hypr+M| 6 | 7 | 8 | 9 | 0 | Mute | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| SYMB | | MDIA |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Ca/Ctl| { | ( | | | : | | - | = | ) | } |C`/Ctl| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LGA | LAlt | | RAlt | Play | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * |Backsp| Esc |------| |------|Enter |Space | + * |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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB), + F(0), KC_LCBR, KC_LPRN,KC_PIPE,KC_COLN, + LGUI(KC_LALT), KC_LALT, + KC_HOME, + KC_BSPC, KC_ESC, KC_END, + // right hand + HYPR(KC_M), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE, + KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TG(MDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_MINS, KC_EQL, KC_RPRN, KC_RCBR, F(1), + KC_RALT, KC_MPLY, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | | | | | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |VolUp |VolDn | Prev | Next | | | LClk | RClk | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MACRO_TAP(0), // FN0 - Ctrl + a (For screen/tmux) + [1] = ACTION_MACRO_TAP(1) // FN1 - Ctrl + ` (For quake style console) +}; + +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: + if (record->event.pressed) { + if (record->tap.count) { + if (record->tap.interrupted) { + record->tap.count = 0; + // hold press action + register_code(KC_LCTL); + } else { + // tap press action + return MACRO( D(LCTL), T(A), U(LCTL), END ); + } + } else { + // hold press action + register_code(KC_LCTL); + } + } else { + if (record->tap.count) { + // tap release action + } else { + // hold release action + unregister_code(KC_LCTL); + } + record->tap.count = 0; + } + break; + case 1: + if (record->event.pressed) { + if (record->tap.count) { + if (record->tap.interrupted) { + record->tap.count = 0; + // hold press action + register_code(KC_RCTL); + } else { + // tap press action + return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END ); + } + } else { + // hold press action + register_code(KC_RCTL); + } + } else { + if (record->tap.count) { + // tap release action + } else { + // hold release action + unregister_code(KC_RCTL); + } + record->tap.count = 0; + } + 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/keyboards/ergodox/keymaps/plums/plums.png b/keyboards/ergodox/keymaps/plums/plums.png new file mode 100644 index 0000000000..2f127c4cab Binary files /dev/null and b/keyboards/ergodox/keymaps/plums/plums.png differ diff --git a/keyboards/ergodox/keymaps/plums/readme.md b/keyboards/ergodox/keymaps/plums/readme.md new file mode 100644 index 0000000000..b72329eef7 --- /dev/null +++ b/keyboards/ergodox/keymaps/plums/readme.md @@ -0,0 +1,11 @@ +# ErgoDox EZ Plums Configuration + +## Changelog + +* Apr 23, 2016 (v0.1.0): + * Shortcut for iTerm2 quake style dropdown (Ctrl+`) + * Shortcut for screen/tmux (Ctrl+a) + * Shortcut for shush (Hyper+m) + * Combo modifier for LGUI + LALT + +![Plums](plums.png) diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c new file mode 100644 index 0000000000..a66971befd --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c @@ -0,0 +1,46 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, + // + /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_RALT, KC_QUOT, KC_SPC + ) +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { +}; diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md new file mode 100644 index 0000000000..80475ab21e --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md @@ -0,0 +1,28 @@ +# Roman's Layout + +There is only one layer based on [Norman layout](https://normanlayout.info/). + +Looking for multiple-layer layouts? + +- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/) +- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/) + +[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195) + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). + +## CTRL/ESC + +CTRL and ESC are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png new file mode 100644 index 0000000000..4b9433be28 Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png differ diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c new file mode 100644 index 0000000000..7c9f673816 --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c @@ -0,0 +1,134 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 +#define SYMB 1 +#define PLVR 2 +#define ARRW 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR), + CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_LALT, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1, + // + /*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ KC_BSLS, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_RALT, KC_F4, KC_F5, KC_F6, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_FN3, KC_QUOT, KC_SPC + ), + [SYMB] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + /*-*/ /*-*/ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [PLVR] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO, + // + /*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + /*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, + /*-*/ /*-*/ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + /*-*/ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + /*-*/ /*-*/ /*-*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M + ), + [ARRW] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { + [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer + [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer + [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer +}; + +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) { + case SYMB: + ergodox_right_led_1_on(); + break; + case PLVR: + ergodox_right_led_2_on(); + break; + case ARRW: + ergodox_right_led_3_on(); + break; + default: + break; + } +}; diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md new file mode 100644 index 0000000000..16cebd0912 --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md @@ -0,0 +1,50 @@ +# Roman's Layout + +There are four layers: + +- **BASE** is [Norman layout](https://normanlayout.info/). +- **SYMB** for numbers and symbols. +- **PLVR** is optimized for [Plover](http://www.openstenoproject.org). +- **ARRW** for navigation (same fingers for arrows as HJKL on QWERTY). + +Looking for IJKL arrows? [Here we +go](../romanzolotarev-norman-plover-osx/). + +[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0) + +## Switching + +- Tap `SYMB` to toggle **SYMB**. +- Tap `ARRW` to toggle **ARRW**. +- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding. +- Tap `PLVR` to toggle **PLVR**. + +## LEDs + +- Red: SYMB is on. +- Green: PLVR is on. +- Blue: ARRW is on. + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). +- Tap `F14`, `F15` to adjust display brightness. + +**IMPORTANT**: If you have another keyboard connected via Bluetooth, then +`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug +you ErgoDox. Enjoy! + +## CTRL/ESC + +Both of those keys are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`. +- Then you can activate **PLVR** and use ErgoDox EZ for steno. diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png new file mode 100644 index 0000000000..cdc535f79e Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png differ diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c new file mode 100644 index 0000000000..9971b834cf --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c @@ -0,0 +1,134 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 +#define SYMB 1 +#define PLVR 2 +#define ARRW 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR), + CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_LALT, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1, + // + /*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ KC_BSLS, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_RALT, KC_F4, KC_F5, KC_F6, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_FN3, KC_QUOT, KC_SPC + ), + [SYMB] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + /*-*/ /*-*/ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [PLVR] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO, + // + /*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + /*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, + /*-*/ /*-*/ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + /*-*/ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + /*-*/ /*-*/ /*-*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M + ), + [ARRW] = 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_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_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { + [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer + [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer + [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer +}; + +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) { + case SYMB: + ergodox_right_led_1_on(); + break; + case PLVR: + ergodox_right_led_2_on(); + break; + case ARRW: + ergodox_right_led_3_on(); + break; + default: + break; + } +}; diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md new file mode 100644 index 0000000000..804c52a767 --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md @@ -0,0 +1,50 @@ +# Roman's Layout + +There are four layers: + +- **BASE** is [Norman layout](https://normanlayout.info/). +- **SYMB** for numbers and symbols. +- **PLVR** is optimized for [Plover](http://www.openstenoproject.org). +- **ARRW** for navigation (same fingers for arrows as IJKL on QWERTY). + +Looking for HJKL arrows? [Here we +go](../romanzolotarev-norman-plover-osx-hjkl/). + +[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417) + +## Switching + +- Tap `SYMB` to toggle **SYMB**. +- Tap `ARRW` to toggle **ARRW**. +- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding. +- Tap `PLVR` to toggle **PLVR**. + +## LEDs + +- Red: SYMB is on. +- Green: PLVR is on. +- Blue: ARRW is on. + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). +- Tap `F14`, `F15` to adjust display brightness. + +**IMPORTANT**: If you have another keyboard connected via Bluetooth, then +`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug +you ErgoDox. Enjoy! + +## CTRL/ESC + +Both of those keys are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`. +- Then you can activate **PLVR** and use ErgoDox EZ for steno. diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png new file mode 100644 index 0000000000..10b0752be5 Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png differ diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c new file mode 100644 index 0000000000..dedac694e4 --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c @@ -0,0 +1,74 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 +#define QWRT 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, + // + /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ TG(QWRT), KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + KC_MPLY, KC_MNXT, + KC_MPRV, + KC_RALT, KC_QUOT, KC_SPC + ), + [QWRT] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_E, KC_R, KC_T, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_D, KC_F, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, + /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, + // + /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, + /*-*/ /*-*/ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS, + /*-*/ KC_TRNS, KC_N, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + 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) { + case QWRT: + ergodox_right_led_1_on(); + break; + default: + break; + } +}; diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md new file mode 100644 index 0000000000..0e78c130b3 --- /dev/null +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md @@ -0,0 +1,34 @@ +# Roman's Layout + +There are two layers: + +- **BASE** is [Norman layout](https://normanlayout.info/). +- **QWRT** is QWERTY. + +[![keyboard-layout](romanzolotarev-norman-qwerty-osx.png)](http://www.keyboard-layout-editor.com/#/gists/3b236f450da474dc506a5a80390c3cc7) + +## Switching + +- Tap `QWRT` to toggle **QWRT**. + +## LEDs + +- Red: QWRT is on. + +## Functional Keys + +- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). +- Tap `F2` to copy screenshot to the clipboard. +- Hold `SHIFT` and tap `F2` to save screenshot as a file. +- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). + +## CTRL/ESC + +Both CTRL and ESC are frequently used in Vim. + +- Tap `CTRL/ESC` to send `ESC`. +- Hold `CTRL/ESC` to use as `CTRL`. + +## Activate N-rollover + +- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png new file mode 100644 index 0000000000..34762ecb75 Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png differ diff --git a/keyboards/ergodox/keymaps/sneako/keymap.c b/keyboards/ergodox/keymaps/sneako/keymap.c new file mode 100644 index 0000000000..0c68631029 --- /dev/null +++ b/keyboards/ergodox/keymaps/sneako/keymap.c @@ -0,0 +1,187 @@ +// Based on `default_osx` +// Replace left Bksp with Ctrl/Esc +// Remove the Ctrl from Z and / +#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | 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_E, KC_R, KC_T, TG(1), + CTL_T(KC_ESC), 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_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(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, 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 +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/keyboards/ergodox/keymaps/sneako/readme.md b/keyboards/ergodox/keymaps/sneako/readme.md new file mode 100644 index 0000000000..8dd110ee68 --- /dev/null +++ b/keyboards/ergodox/keymaps/sneako/readme.md @@ -0,0 +1,6 @@ +# ergodox_keymap + +Based on the default Ergodox EZ firmware + +Replaced the left side Bksp with a Crtl/Esc, this really helps in vim. +Removed the Ctrls from the Z and / keys. diff --git a/keyboards/ergodox/keymaps/software_neo2/keymap.c b/keyboards/ergodox/keymaps/software_neo2/keymap.c new file mode 100644 index 0000000000..2eaba0d7da --- /dev/null +++ b/keyboards/ergodox/keymaps/software_neo2/keymap.c @@ -0,0 +1,139 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_neo2.h" + +// Layer names +#define BASE 0 // default layer +#define MDIA 1 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ^ | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 |BackSpce| + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | X | V | L | C | W | L1 | | L1 | K | H | G | F | Q | ß | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | U | I | A | E | O |------| |------| S | N | R | T | D | Y | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Ü/Ctrl| Ö/C-S| Ä/Alt| P | Z | | | | B | M | , | . | J | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L1 | Home | PgDn | PgUp | End | | Right| Down | Up | Left | Esc | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------+------+------| |------+--------+------. + * | | |NeoL2 | |NeoL2 | | | + * | Tab |Backsp|------| |------| Space |Enter | + * | |ace |NeoL1 | |NeoL1 | | | + * `--------------------' `----------------------' + */ +// 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_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY, + KC_DELT, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, TG(1), + KC_CAPS, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O, + KC_LSFT, CTL_T(NEO_UE), C_S_T(NEO_OE), ALT_T(NEO_AE), NEO_P, NEO_Z, ALL_T(KC_NO), + DE_LESS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, + ALT_T(KC_APP),KC_LGUI, + NEO_L2_L, + KC_TAB,KC_BSPC,NEO_L1_L, + // right hand + KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, + NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_Y, + MEH_T(KC_NO),NEO_B, NEO_M, KC_COMM, KC_DOT, NEO_J, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ESC, + KC_LALT,CTL_T(KC_ESC), + NEO_L2_R, + NEO_L1_R,KC_SPC, KC_ENT + ), +/* Keymap 1: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Back |Forwd | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, + KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, + KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, KC_TRNS, + // right hand + KC_TRNS, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11, + KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12, + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, + KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_WBAK, KC_WFWD +), +}; + +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) { + case MDIA: + ergodox_right_led_2_on(); + break; + default: + ergodox_board_led_off(); + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/supercoder/config_user.h b/keyboards/ergodox/keymaps/supercoder/config_user.h new file mode 100644 index 0000000000..8da1383726 --- /dev/null +++ b/keyboards/ergodox/keymaps/supercoder/config_user.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H 1 + +#include "config.h" + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#endif diff --git a/keyboards/ergodox/keymaps/supercoder/images/layout.png b/keyboards/ergodox/keymaps/supercoder/images/layout.png new file mode 100644 index 0000000000..c72958c6e7 Binary files /dev/null and b/keyboards/ergodox/keymaps/supercoder/images/layout.png differ diff --git a/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg new file mode 100644 index 0000000000..d690eaf020 Binary files /dev/null and b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg differ diff --git a/keyboards/ergodox/keymaps/supercoder/keymap.c b/keyboards/ergodox/keymaps/supercoder/keymap.c new file mode 100644 index 0000000000..ca21d30fd2 --- /dev/null +++ b/keyboards/ergodox/keymaps/supercoder/keymap.c @@ -0,0 +1,75 @@ +/* + * SuperCoder 2000 layout + */ + +#include "ergodox_ez.h" + +/* Layers */ + +#define SC2K 0 // default layer + +/* The Keymap */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | 0 | 0 | 0 | 0 | 0 | 0 |------| |------| 1 | 1 | 1 | 1 | 1 | 1 | + * |-----------+------+------+------+------+------| 0 | | 1 |------+------+------+------+------+-----------| + * | 0 | 0 | 0 | 0 | 0 | 0 | | | | 1 | 1 | 1 | 1 | 1 | 1 | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | DONE | DONE | | DONE | DONE | + * ,------|------|------| |------+------+------. + * | | | DONE | | DONE | | | + * | DONE | DONE |------| |------| DONE | DONE | + * | | | DONE | | DONE | | | + * `--------------------' `--------------------' + */ +[SC2K] = KEYMAP( + // left hand + KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 +,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 +,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 +,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 +,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 + + ,KC_ENT ,KC_ENT + ,KC_ENT + ,KC_ENT ,KC_ENT ,KC_ENT + + // right hand + ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 + ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 + ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 + ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 + ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 + + ,KC_ENT ,KC_ENT + ,KC_ENT + ,KC_ENT ,KC_ENT ,KC_ENT + ), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + 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) { +} diff --git a/keyboards/ergodox/keymaps/supercoder/makefile.mk b/keyboards/ergodox/keymaps/supercoder/makefile.mk new file mode 100644 index 0000000000..41a195d9c0 --- /dev/null +++ b/keyboards/ergodox/keymaps/supercoder/makefile.mk @@ -0,0 +1,6 @@ +BOOTMAGIC_ENABLE=no +COMMAND_ENABLE=no +SLEEP_LED_ENABLE=no +UNICODE_ENABLE=no +MOUSEKEY_ENABLE=no +EXTRAKEY_ENABLE=no diff --git a/keyboards/ergodox/keymaps/supercoder/readme.md b/keyboards/ergodox/keymaps/supercoder/readme.md new file mode 100644 index 0000000000..97bf7f5835 --- /dev/null +++ b/keyboards/ergodox/keymaps/supercoder/readme.md @@ -0,0 +1,29 @@ +SuperCoder 2000 layout for the ErgoDox +================================================== + +![SuperCoder 2000](images/supercoder_2000.jpg) + +Ever found yourself in need of entering binary codes rapidly? Ever wanted to use +all ten fingers to do so? Ever felt your SuperCoder 2000 too limiting, by only +having three buttons? We heard you! With this layout for the ErgoDox EZ, you +will be able to tap in binary at an unparalleled speed and accuracy! Efficiency +never seen before! + +Behold the Ultimate SuperCoder 2000 layout! + +![SuperCoder layout](images/layout.png) + +### To use it... + +To use this piece of top quality engineering, you can either +[download the hex file][hex] we have prepared for you, or you can compile it on +your own: + + [hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex + +``` +$ git clone https://github.com/jackhumbert/qmk_firmware.git +$ cd qmk_firmware/keyboards/ergodox_ez +$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder +$ make KEYMAP=supercoder +``` diff --git a/keyboards/ergodox/keymaps/techtomas/keymap.c b/keyboards/ergodox/keymaps/techtomas/keymap.c new file mode 100644 index 0000000000..1ff6618b98 --- /dev/null +++ b/keyboards/ergodox/keymaps/techtomas/keymap.c @@ -0,0 +1,231 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define APP 2 // app layer +#define CNTL 3 // control layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | L2/` | 1 | 2 | 3 | 4 | 5 |CmdSpc| | - | 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | MEH/Tab| Q | W | E | R | T | [ | | ] | Y | U | I | O | P | MEH/\ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Hyp/Esc | A | S | D | F | G |------| |------| H | J | K | L | L2/; | Hyp/' | + * |--------+------+------+------+------+------| Tab | | STab |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | L2// | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |L1/Lft|L3/Rht| LCtl | LAlt | LGui | | Rgui | Up | Dn | L3 | L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtl | LGui | |AltGui|ShfGui| + * ,-------|------|------| |------+--------+------. + * | | |L1/Hom| |L2/PUp| | | + * | Backsp|Delete|------| |------| Enter | Space | + * | | |L3/End| |L1/PDn| | | + * `--------------------' `-----------------------' + */ +// 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 + LT(APP,KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_SPC), + MEH_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + ALL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TAB, + LT(SYMB,KC_LEFT), LT(CNTL,KC_RIGHT), KC_LCTL, KC_LALT, KC_LGUI, + KC_LCTL, KC_LGUI, + LT(SYMB,KC_HOME), + KC_BSPC, KC_DELETE, LT(CNTL,KC_END), + // right hand + KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, MEH_T(KC_BSLS), + KC_H, KC_J, KC_K, KC_L, LT(APP,KC_SCLN), ALL_T(KC_QUOT), + S(KC_TAB), KC_N, KC_M, KC_COMM, KC_DOT, LT(APP,KC_SLSH), KC_RSFT, + KC_RGUI, KC_UP, KC_DOWN, KC_FN3, KC_FN1, + LALT(KC_LGUI), S(KC_LGUI), + LT(APP,KC_PGUP), + LT(SYMB,KC_PGDN), KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | Tab | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | < | | > | : | 7 | 8 | 9 | / | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| ; | 4 | 5 | 6 | * | | + * |--------+------+------+------+------+------| F14 | | F15 |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | - | Entr | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 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,S(KC_COMM), + 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_F14, + 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_TAB, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + S(KC_DOT), KC_COLN, KC_7, KC_8, KC_9, KC_BSLS, KC_F12, + KC_SCLN, KC_4, KC_5, KC_6, KC_ASTR, KC_TRNS, + KC_F15, KC_AMPR, KC_1, KC_2, KC_3, KC_MINS, KC_ENT, + KC_0, KC_DOT, KC_EQL, KC_PLUS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: App Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | CmdQ | CmdW | | | | Stab | | Play | Prev | Next | | |PrtSc | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| VolDn|VolUp | | | | | + * |--------+------+------+------+------+------| | | Mute |------+------+------+------+------+--------| + * | | CmdZ | CmdX | CmdC | CmdY | CtrlC| | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// Control +[APP] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, LGUI(KC_Q), LGUI(KC_W), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_TAB), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LCTL(KC_C), 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_TRNS, + KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, + KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + 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_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 3: Control Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Pwr | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| Lclk |------| |------| Lft | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | Rclk | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Shift| | | Home | End | + * ,------|------|------| |------+------+------. + * | | | LAtl | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// Control +[CNTL] = KEYMAP( + KC_PWR, 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_BTN1, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LSFT, KC_TRNS, + KC_LALT, + 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, + KC_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_END, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), + [2] = ACTION_LAYER_TAP_TOGGLE(APP), + [3] = ACTION_LAYER_TAP_TOGGLE(CNTL) // 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; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/techtomas/readme.md b/keyboards/ergodox/keymaps/techtomas/readme.md new file mode 100644 index 0000000000..36e0591a8e --- /dev/null +++ b/keyboards/ergodox/keymaps/techtomas/readme.md @@ -0,0 +1,57 @@ +# Techtomas Configuration + +## Base Layer + +The base layer is a merge of what I liked with the default layout and the ordinary layout. The thumb cluster is more like the Kinesis advantage and the top row of the cluster is convient for use on the mac. + +* The Caps Lock postion handles [Hyper/Esc](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) +* The Tab key toggles MEH. +* The top vertical mods on the left and right are [ and ]. +* The bottom vertical mods on the left and right are tab and shift+tab +* The HYPER and MEH key are made in the same location on the right side of the board as well. Using Keyboard Maestro for OS X makes one-handed shortcuts very easy. +* Layer switching is focused around the thumb clusters plus some additional locations for convience. + +## Symbol Layer +The symbol layer can be tap/toggled with the bottom right key and also toggled on the thumb clusters. + +The bottom two vertical mods are set to F14 and F15 which is the default for changing screen brightness on the mac + +## App Layer +The app layer is used to control media playback and also some application shortcuts (OS X Focused). +It can be toggled on the left board in the top left corner (tilde/grave) or using your pinky on the right side of the board using either ; or /. +There is one additional toggle on the right thumb cluster for quick access to play and mute key combos. + +### Current App shortcuts defined +* Q = CMD+Q +* W = CMD+W +* Z = CMD+Z +* X = CMD+X +* C = CMD+C +* V = CMD+V +* B = CTRL+C +* P = Print Screen + +## Control Layer +The control layer is meant to help easily navigate and select text. It can also be stacked ontop of the Symbol layer when needed. + +The right arrow key and End key toggle the control layer on the left board. There is also a tap toggle for the layer in the same position on the right side of the board. + +On the left board you have mouse control with left & right click in the location of the G and B keys. +On the right board you have vim-style arrow keys using hjkl + +The left thumb cluster moves shift and alt within easy reach while holding the toggle (end). So far I've found this convient to navigate and skip around text when using the hjkl arrow keys. I found that it was easy to get the alt key stuck on depending on what key you released first so I added the PREVENT_STUCK_MODIFIERS to the config.h to help with that. + +## Changelog + +* May 4th, 2016 (v1.2): + * Moved layer toggles around to match my habbits of typing + * Enabled Prevent Stuck Modifers in my config.h (L3 + Alt on cluster would get stuck) + * Changed media layer to be more like an app layer with some quick shortcuts (mac centric) + * Moved around the base layer arrow keys so mod keys were more accesible + +* Apr 29, 2016 (V1.1): + * Added F14 and F15 to symbol layer + * Added control layer toggle to A key. + +* Apr 28, 2016 (V1.0): + * Modified config based on the default layout plus inspiration from the ordinary layout diff --git a/keyboards/ergodox/keymaps/teckinesis/keymap.c b/keyboards/ergodox/keymaps/teckinesis/keymap.c new file mode 100644 index 0000000000..ec6ceb96bc --- /dev/null +++ b/keyboards/ergodox/keymaps/teckinesis/keymap.c @@ -0,0 +1,455 @@ +#include "ergodox_ez.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols layer +#define MDIA 2 // media layer +#define SPEC 3 // special layer + +#define LCaps 10 // left caps-shift key +#define LSymb 11 // left symbol-shift key +#define LMdia 12 // left media-shift key +#define LSpec 13 // left special-shift key +#define RCaps 14 // right caps-shift key +#define RSymb 15 // right symbol-shift key +#define RMdia 16 // right media-shift key +#define RSpec 17 // right special-shift key + +#define MUL 20 // mouse up left +#define MUR 21 // mouse up right +#define MDL 22 // mouse down left +#define MDR 23 // mouse down right + +/* + * teckinesis layout for ErgoDox (EZ) + * + * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com + * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com + * + * No rights reserved. This software is in the public domain. + * Credit me if you are friendly but if you're a jerk don't bother. + * + * Details: readme.md + * https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/******* Base Layer ******************************************************************************************************** + * + * ,------------------------------------------------------. ,------------------------------------------------------. + * | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special | + * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| + * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | + * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| + * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | + * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' + * | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Home | End | | Left | Right| + * ,------|------|------| |------+------+------. + * | | | PgUp | | Up | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | PgDn | | Down | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC +,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC +,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) +,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI + ,KC_HOME,KC_END + ,KC_PGUP + ,KC_BSPC,KC_DEL ,KC_PGDN + // right hand + ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) + ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) + ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_DOWN ,KC_ENT ,KC_SPC + ), + +/******* Symbols Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | + * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| + * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| + * `-----------------------------------' `-------------------------------------' + * ,-------------. ,-------------. + * | Left | Right| | Home | End | + * ,------|------|------| |------+------+------. + * | | | Up | | PgUp | | | + * |Space |Enter |------| |------|BackSp| Del | + * | | | Down | | PgDn | | | + * `--------------------' `--------------------' + */ +[SYMB] = KEYMAP( +// left hand + KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC +,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) +,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_TAB +,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_SPC ,KC_ENT ,KC_DOWN + // right hand + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS + ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS + ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS + ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) + ,KC_HOME ,KC_END + ,KC_PGUP + ,KC_PGDN ,KC_BSPC ,KC_DEL +), + +/******* Media Layer ******************************************************************************************************* + * + * ,---------------------------------------------------------------. ,---------------------------------------------------------------. + * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | + * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| + * | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | | + * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| + * | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | | + * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| + * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | + * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' + * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| + * `---------------------------------------------' `---------------------------------------------' + * ,-------------. ,-------------. + * | Stop |Refrsh| | Prev | Next | + * ,------|------|------| |------+------+------. + * |Brwser|Brwser|Search| |VolUp | | | + * |Back | Fwd |------| |------| Stop | Play-| + * | | | Home | |VolDn | | Pause| + * `--------------------' `--------------------' + */ +[MDIA] = KEYMAP( +// left hand + KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC +,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U +,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D +,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 + ,KC_WSTP ,KC_WREF + ,KC_WSCH + ,KC_WBAK ,KC_NO ,KC_WHOM + // right hand + ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS + ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS + ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS + ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS + ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_MPRV ,KC_MNXT + ,KC_VOLU + ,KC_VOLD ,KC_MSTP ,KC_MPLY +), + +/******* Special Layer ***************************************************************************************************** + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | Esc | | | | | | | | | | | | Bspc | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | RShift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[SPEC] = KEYMAP( +// left hand + KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT + ,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[] = { + // the faux shift keys are implemented as macro taps + [LCaps] = ACTION_MACRO_TAP(LCaps) + ,[LSymb] = ACTION_MACRO_TAP(LSymb) + ,[LMdia] = ACTION_MACRO_TAP(LMdia) + ,[LSpec] = ACTION_MACRO_TAP(LSpec) + ,[RCaps] = ACTION_MACRO_TAP(RCaps) + ,[RSymb] = ACTION_MACRO_TAP(RSymb) + ,[RMdia] = ACTION_MACRO_TAP(RMdia) + ,[RSpec] = ACTION_MACRO_TAP(RSpec) +}; + +uint16_t caps_shift = 0; +uint16_t symb_shift = 0; +uint16_t mdia_shift = 0; + +bool symb_lock = false; +bool mdia_lock = false; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + // There are two shift keys for each layer so we increment a layer_shift var when one + // is pressed and decrement when one is released. If both are pressed at the same time + // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 + // only because sometimes rapid pressing led to irregular events; this way the states + // are self healing during use. + + case LCaps: // both caps-shift keys trigger Left Shift + case RCaps: // so they don't interfere with the magic combo + if (record->event.pressed && !record->tap.count) { + if(++caps_shift > 2) caps_shift = 2; + if(caps_shift == 2) { + register_code(KC_CAPS); + unregister_code(KC_CAPS); + } else if(caps_shift == 1) { + register_code(KC_LSFT); + } + } else { + if(--caps_shift < 0) caps_shift = 0; + if(caps_shift == 0) unregister_code(KC_LSFT); + } + break; + + case LSymb: + if (record->event.pressed) { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } else { + if(--symb_shift < 0) symb_shift = 0; + if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); + } + break; + + case LMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_TAB); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_TAB); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case LSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_EQL); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_EQL); + } else { + layer_off(SPEC); + } + } + break; + + case RSymb: + if (record->event.pressed) { + if (record->tap.count && (!symb_shift) && (!symb_lock)) { + register_code(KC_QUOT); + } else { + if(++symb_shift > 2) symb_shift = 2; + if(symb_shift == 2) { + symb_lock = !symb_lock; + } else if(symb_shift == 1) { + layer_on(SYMB); + } + } + } else { + if(record->tap.count && symb_shift == 0) { + unregister_code(KC_QUOT); + } else { + if(--symb_shift < 0) symb_shift = 0; + if((!symb_shift) && (!symb_lock)) layer_off(SYMB); + } + } + break; + + case RMdia: + if (record->event.pressed) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + register_code(KC_BSLS); + } else { + if(++mdia_shift > 2) mdia_shift = 2; + if(mdia_shift == 2) { + mdia_lock = !mdia_lock; + } else if(mdia_shift == 1) { + layer_on(MDIA); + } + } + } else { + if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + unregister_code(KC_BSLS); + } else { + if(--mdia_shift < 0) mdia_shift = 0; + if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); + } + } + break; + + case RSpec: + if (record->event.pressed) { + if (record->tap.count && !record->tap.interrupted) { + register_code(KC_MINS); + } else { + layer_on(SPEC); + } + } else { + if(record->tap.count && !record->tap.interrupted) { + unregister_code(KC_MINS); + } else { + layer_off(SPEC); + } + } + break; + + // mouse diagonals + + case MUL: // mouse up left + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MUR: // mouse up right + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + case MDL: // mouse down left + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + mousekey_send(); + } + break; + + case MDR: // mouse down right + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + mousekey_send(); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + mousekey_send(); + } + break; + + default: + // none + 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) { + // shift or caps lock turns on red light + if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<\n\n\n\nShift", + { + "c": "#cccccc" + }, + "Q", + { + "x": 14.5 + }, + "P", + { + "c": "#2277ff", + "f": 3, + "w": 1.5 + }, + "|\n\\\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#cccccc" + }, + "D", + { + "x": 10.5 + }, + "K" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "S", + { + "x": 1 + }, + "F", + { + "x": 8.5 + }, + "J", + { + "x": 1 + }, + "L" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "G", + { + "x": 6.5 + }, + "H" + ], + [ + { + "y": -0.875, + "c": "#2277ff", + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "c": "#cccccc" + }, + "A", + { + "x": 14.5 + }, + ":\n;", + { + "c": "#2277ff", + "f": 3, + "w": 1.5 + }, + "\"\n'\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#54d6de", + "fa": [ + 0, + 0, + 4, + 1 + ], + "h": 1.5 + }, + "< Tab\n\n\nShift Tab", + { + "x": 4.5, + "h": 1.5 + }, + "Tab >\n\n\nTab" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#cccccc" + }, + "C", + { + "x": 10.5 + }, + "<\n," + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "X", + { + "x": 1 + }, + "V", + { + "x": 8.5 + }, + "M", + { + "x": 1 + }, + ">\n." + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "B", + { + "x": 6.5 + }, + "N" + ], + [ + { + "y": -0.875, + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "c": "#cccccc" + }, + "Z", + { + "x": 14.5 + }, + "?\n/", + { + "c": "#2277ff", + "f": 3, + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#77aaff", + "fa": [ + 5, + 0, + 4, + 1 + ] + }, + "\n\n\nLAlt", + { + "x": 10.5 + }, + "\n\n\nRAlt" + ], + [ + { + "y": -0.875, + "x": 2.5, + "fa": [ + 5, + 1 + ] + }, + "\nHyper\n?\n/", + { + "x": 1, + "fa": [ + 5, + 1, + 0, + 1 + ] + }, + "\n\n\nSuper", + { + "x": 8.5 + }, + "\n\n\nSuper", + { + "x": 1, + "fa": [ + 0, + 0, + 0, + 1 + ] + }, + "{\n[\n\nHyper" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "Ctrl\n\n\nLCtrl", + { + "f2": 1 + }, + "\nMeh\n|\n\\", + { + "x": 14.5, + "fa": [ + 0, + 0, + 1, + 1 + ] + }, + "}\n]\n\nMeh", + "Ctrl\n\n\nRCtrl" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#54d6de" + }, + "Home", + "End" + ], + [ + { + "h": 2 + }, + "< Del\n\n\nBackspace", + { + "h": 2 + }, + "Del >\n\n\nDelete", + "Page\n\n\n\n\n\nUp" + ], + [ + { + "x": 2 + }, + "Page\n\n\n\n\n\nDown" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Left", + "Right" + ], + [ + { + "x": -3 + }, + "Up", + { + "h": 2 + }, + "Enter", + { + "h": 2 + }, + "Space" + ], + [ + { + "x": -3 + }, + "Down" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png new file mode 100644 index 0000000000..7c4584e9f3 Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png differ diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json new file mode 100644 index 0000000000..65fe394e8a --- /dev/null +++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json @@ -0,0 +1,436 @@ +[ + { + "name": "teckinesis (MediaLayer)", + "author": "Will Wolff-Myren", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea" + }, + [ + { + "x": 3.5, + "c": "#99de2a" + }, + "F13", + { + "x": 10.5 + }, + "F18" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "F12", + { + "x": 1 + }, + "F14", + { + "x": 8.5 + }, + "F17", + { + "x": 1 + }, + "F19" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "F15", + { + "c": "#ff4444" + }, + "Esc", + { + "x": 4.5 + }, + "Esc", + { + "c": "#99de2a" + }, + "F16" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "F11", + { + "x": 14.5 + }, + "F20" + ], + [ + { + "y": -0.995, + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "Media\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500", + "t": "#000000" + }, + "Mouse\n\n\n\n\n\nUp", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nUp" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nUpLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nUpRgt", + { + "x": 8.5, + "c": "#ffb063" + }, + "Home", + { + "x": 1 + }, + "Page\n\n\n\n\n\nUp" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nUp", + { + "c": "#ffb063", + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nUp", + { + "x": 4.5, + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nUp", + { + "c": "#e6e067" + }, + "Print\n\n\n\n\n\nScreen" + ], + [ + { + "y": -0.875, + "x": 1.5, + "c": "#737373", + "a": 7 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500" + }, + "Mouse\n\n\n\n\n\nDown", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nRight", + { + "x": 8.5 + }, + "Cursor\n\n\n\n\n\nLeft", + { + "x": 1 + }, + "Cursor\n\n\n\n\n\nRight" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nDown", + { + "x": 6.5 + }, + "Num\n\n\n\n\n\nLock" + ], + [ + { + "y": -0.875, + "x": 1.5, + "c": "#737373", + "a": 7 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "x": 16.5, + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.6299999999999999, + "x": 6.5, + "c": "#ffb063", + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nDown", + { + "x": 4.5, + "h": 1.5 + }, + "Scroll\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#ff8500" + }, + "Mouse\n\n\n\n\n\nDown", + { + "x": 10.5 + }, + "Cursor\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "Mouse\n\n\n\n\n\nDnLeft", + { + "x": 1 + }, + "Mouse\n\n\n\n\n\nDnRgt", + { + "x": 8.5, + "c": "#ffb063" + }, + "End", + { + "x": 1 + }, + "Page\n\n\n\n\n\nDown" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#e6e067" + }, + "Mute", + { + "x": 6.5, + "c": "#737373", + "a": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 1.5 + }, + "", + { + "x": 14.5 + }, + "" + ], + [ + { + "y": -0.9950000000000001, + "c": "#2277ff", + "a": 4, + "w": 1.5 + }, + "Ctrl", + { + "x": 16.5, + "w": 1.5 + }, + "Ctrl" + ], + [ + { + "y": -0.3799999999999999, + "x": 3.5, + "c": "#ff8500" + }, + "Middle\n\n\n\n\n\nClick", + { + "x": 10.5, + "c": "#ffb063", + "fa": [ + 0, + 0, + 0, + 1 + ] + }, + "Delete\n\n\nOption" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#ff8500" + }, + "Left\n\n\n\n\n\nClick", + { + "x": 1 + }, + "Right\n\n\n\n\n\nClick", + { + "x": 8.5, + "c": "#ffb063" + }, + "Insert\n\n\nCmd", + { + "x": 1, + "c": "#77aaff" + }, + "Hyper" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "Alt\n\n\nLAlt", + "Meh", + { + "x": 14.5 + }, + "Meh", + "Alt\n\n\nRAlt" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#ccbb00" + }, + "Stop\n\n\nBrowser", + "Reload\n\n\nBrowser" + ], + [ + { + "h": 2 + }, + "< Web\n\n\nBrowser", + { + "h": 2 + }, + "Web >\n\n\nBrowser", + "Search\n\n\nBrowser" + ], + [ + { + "x": 2 + }, + "Home\n\n\nBrowser" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Prev\n\n\nAudio\n\n\nTrack", + "Next\n\n\nAudio\n\n\nTrack" + ], + [ + { + "x": -3, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nUp", + { + "c": "#ccbb00", + "h": 2 + }, + "Stop\n\n\nAudio", + { + "h": 2 + }, + "Play\n\n\nAudio\n\n\nPause" + ], + [ + { + "x": -3, + "c": "#e6e067" + }, + "Vol\n\n\n\n\n\nDown" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png new file mode 100644 index 0000000000..cc51605f92 Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png differ diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json new file mode 100644 index 0000000000..439d0128ea --- /dev/null +++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json @@ -0,0 +1,422 @@ +[ + { + "name": "teckinesis (Symbol Layer)", + "author": "Will Wolff-Myren", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea" + }, + [ + { + "x": 3.5, + "c": "#99de2a" + }, + "F3", + { + "x": 10.5 + }, + "F8" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "F2", + { + "x": 1 + }, + "F4", + { + "x": 8.5 + }, + "F7", + { + "x": 1 + }, + "F9" + ], + [ + { + "y": -0.875, + "x": 5.5 + }, + "F5", + { + "c": "#ff4444" + }, + "Esc", + { + "x": 4.5, + "c": "#bbddbb" + }, + "_\n\n\n\n\n\n-", + { + "c": "#99de2a" + }, + "F6" + ], + [ + { + "y": -0.875, + "c": "#2277ff", + "w": 1.5 + }, + "Special\n\n\n\n\n\nShift", + { + "c": "#99de2a" + }, + "F1", + { + "x": 14.5 + }, + "F10", + { + "c": "#2277ff", + "w": 1.5 + }, + "\n\nSpecial\n\n\n\n\nShift" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#bbddbb" + }, + "{", + { + "x": 10.5, + "c": "#89b087" + }, + "8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "@", + { + "x": 1 + }, + "}", + { + "x": 8.5, + "c": "#89b087" + }, + "7", + { + "x": 1 + }, + "9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "&", + { + "h": 1.5 + }, + "<", + { + "x": 4.5, + "h": 1.5 + }, + ">", + "|" + ], + [ + { + "y": -0.875, + "c": "#2277ff", + "w": 1.5 + }, + "Media\n\n\n\n\n\nShift", + { + "c": "#bbddbb" + }, + "!", + { + "x": 14.5, + "c": "#89b087" + }, + "/", + { + "c": "#2277ff", + "w": 1.5 + }, + "\n\nMedia\n\n\n\n\nShift" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#bbddbb" + }, + "(", + { + "x": 10.5, + "c": "#89b087" + }, + "5" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "$", + { + "x": 1 + }, + ")", + { + "x": 8.5, + "c": "#89b087" + }, + "4", + { + "x": 1 + }, + "6" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "`", + { + "x": 6.5 + }, + "/" + ], + [ + { + "y": -0.875, + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "Symbols\n\n\n\n\n\nShift", + { + "c": "#bbddbb", + "t": "#000000" + }, + "#", + { + "x": 14.5, + "c": "#89b087" + }, + "*", + { + "c": "#000000", + "t": "#ff0000", + "w": 1.5 + }, + "\n\nSymbols\n\n\n\n\nShift" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#54d6de", + "t": "#000000", + "fa": [ + 0, + 0, + 0, + 1 + ], + "h": 1.5 + }, + "Tab >\n\n\nTab", + { + "x": 4.5, + "h": 1.5 + }, + "< Tab\n\n\nShift Tab" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#bbddbb" + }, + "[", + { + "x": 10.5, + "c": "#89b087" + }, + "2" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bbddbb" + }, + "^", + { + "x": 1 + }, + "]", + { + "x": 8.5, + "c": "#89b087" + }, + "1", + { + "x": 1 + }, + "3" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#bbddbb" + }, + "~", + { + "x": 6.5 + }, + "\\" + ], + [ + { + "y": -0.875, + "c": "#2277ff", + "w": 1.5 + }, + "Capitals\n\n\n\n\n\nShift", + { + "c": "#bbddbb" + }, + "%", + { + "x": 14.5, + "c": "#89b087" + }, + "-", + { + "c": "#2277ff", + "w": 1.5 + }, + "\n\nCapitals\n\n\n\n\nShift" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#77aaff" + }, + "\n\n\nLAlt", + { + "x": 10.5, + "c": "#89b087" + }, + ".\n\n\nOption" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#77aaff" + }, + "Hyper", + { + "x": 1 + }, + "\n\n\nSuper", + { + "x": 8.5, + "c": "#89b087" + }, + "0\n\n\nCmd", + { + "x": 1 + }, + "=\n\n\nHyper" + ], + [ + { + "y": -0.75, + "x": 0.5, + "c": "#77aaff" + }, + "Ctrl\n\n\nLCtrl", + "Meh", + { + "x": 14.5, + "c": "#89b087" + }, + "+\n\n\nMeh", + "Enter\n\n\nCtrl" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#54d6de" + }, + "Left", + "Right" + ], + [ + { + "h": 2 + }, + "Space", + { + "h": 2 + }, + "Enter", + "Up" + ], + [ + { + "x": 2 + }, + "Down" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3 + }, + "Home", + "End" + ], + [ + { + "x": -3 + }, + "Page\n\n\n\n\n\nUp", + { + "h": 2 + }, + "< Del\n\n\nBackspace", + { + "h": 2 + }, + "Del >\n\n\nDelete" + ], + [ + { + "x": -3 + }, + "Page\n\n\n\n\n\nDown" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png new file mode 100644 index 0000000000..7ca86cf47d Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png differ diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/README.md b/keyboards/ergodox/keymaps/tkuichooseyou/README.md new file mode 100644 index 0000000000..ab02fac2ca --- /dev/null +++ b/keyboards/ergodox/keymaps/tkuichooseyou/README.md @@ -0,0 +1,13 @@ +# Based on Default OSX +I'm a vim and OSX user + +- Moved Hyper and Meh up, replaced with CMD + - Because I'm used to having symmetrical CMD keys on both hands +- Changed left delete to Tab to match OSX +- Changed left Backspace to CTRL/ESC for vim +- Changed top left and top right arrow to `CMD+{` and `CMD+}` + - Useful for switching tabs in Safari, Xcode, etc. +- Remove the Ctrl from Z and / +- Remove CMD from right quote +- Changed right Alt to Delete + diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex b/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex new file mode 100644 index 0000000000..a8cf4527a5 --- /dev/null +++ b/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex @@ -0,0 +1,1137 @@ +:100000000C947B020C94C2020C94C2020C94C202A7 +:100010000C94C2020C94C2020C94C2020C94C20250 +:100020000C94C2020C94C2020C94F70D0C94C90EED +:100030000C94C2020C94C2020C94C2020C94C20230 +:100040000C94C2020C9486210C94C2020C94C2023D +:100050000C94C2020C94681C0C94C2020C94C20250 +:100060000C94C2020C94C2020C94C2020C94C20200 +:100070000C94C2020C94C2020C94C2020C94C202F0 +:100080000C94C2020C94C2020C94C2020C94C202E0 +:100090000C94C2020C94C2020C94C2020C94C202D0 +:1000A0000C94C2020C94C2020C94C202360F580F78 +:1000B0004610580F46109D0FC00F461015102810FF +:1000C000F712F712261326135C137C13AD14AD142C +:1000D0008713AD14371437149E14AD14AD14A71440 +:1000E0004414441444144414441444144414441450 +:1000F0004414441444144414441444144414441440 +:10010000561463146A1471147B140000F0A12E00BD +:100110002B002961E100354100001E00140004009D +:100120001D0034004D001F001A0016001B00E104E2 +:100130002A00200008000700060050002C002100C3 +:100140001500090019004F004A00220017000A009C +:100150000500000065642F0A006F0000E300000046 +:10016000E300300A00670000E30000004C002300B9 +:100170001C000B00110000002961240018000D0074 +:10018000100052004B0025000C000E0036005100FC +:100190002800260012000F0037002F002B00270038 +:1001A00013003342380030004E002D00310034007F +:1001B000E500C10000000100010001000100010094 +:1001C00000003A001E0220022202010001003B0052 +:1001D0001F0221022302010001003C002F0226021F +:1001E0002F00010001003D00300227023000010015 +:1001F00001003E003102350035020000010001001F +:1002000001000000010000000100010001000000E9 +:100210000100000001003F005200510024020000D4 +:1002200001004000240021001E00010001004100E7 +:10023000250022001F003700010042002600230095 +:10024000200027000100430025022E0231002E006D +:100250000100440045000100010001000000010010 +:100260000100010001000100000001000100010087 +:1002700001000100010001000100F2000100010085 +:1002800001000100F000F1000100F4000100010094 +:100290000100F3000100F500010001000100010070 +:1002A0000100000001000100010000000100000049 +:1002B0000100010001000000010000000100010038 +:1002C0000100010001000000010001000100010027 +:1002D0000100A9000100010001000100AC00AA001A +:1002E000B600010001000100AB00A8000100010000 +:1002F0000100010001000100010001000100AE0049 +:1003000001000100000016034500720067006F0045 +:1003100044006F007800200045005A0000001603DA +:100320004500720067006F0044006F0078002000F5 +:1003300045005A0000000403090409026D0004018D +:1003400000A0FA09040000010301010009211101C4 +:1003500000012240000705810308000A090401008A +:100360000103010200092111010001224D000705CE +:10037000820308000A0904020001030000000921A9 +:10038000110100012236000705830308000A090451 +:1003900003000103000000092111010001223900BE +:1003A000070584031000011201100100000008ED90 +:1003B000FE071301000102000105010906A1010564 +:1003C0000719E029E7150025019508750181020547 +:1003D000081901290595057501910295017503918B +:1003E0000105071900297715002501957875018108 +:1003F00002C005010980A101850216010026B7008F +:100400001A01002AB700751095018100C0050C097A +:1004100001A1018503160100269C021A01002A9CF5 +:1004200002751095018100C005010902A1010901B1 +:10043000A10005091901290515002501950575017A +:10044000810295017503810105010930093115818A +:10045000257F95027508810609381581257F95014C +:1004600075088106050C0A38021581257F950175EE +:10047000088106C0C005010906A101050719E02988 +:10048000E715002501950875018102950175088120 +:100490000105081901290595057501910295017558 +:1004A0000391010507190029FF150026FF00950695 +:1004B00075088100C000000000000000000000007E +:1004C000010204060A0F17202C3A4A5D71879DB37A +:1004D000C7DAE9F5FCFFFCF5E9DAC7B39D87715D82 +:1004E0004A3A2C20170F0A060402010000000000FF +:1004F00000000000000011241FBECFEFDAE0DEBFD5 +:10050000CDBF04B603FE27C0809101029091020284 +:10051000A0910302B09104028730904BA740B04BEA +:10052000D1F4109201021092020210920302109272 +:10053000040214BE84B7877F84BF0FB6F894A895D1 +:1005400080916000886180936000109260000FBE0F +:10055000E0E0FFE3099511E0A0E0B1E0E6EBF6E4AE +:1005600002C005900D92A433B107D9F712E0A4E3BD +:10057000B1E001C01D92A130B107E1F70E943C0B30 +:100580000C9459230C9400001092B9008AE08093D7 +:10059000B800089594EA9093BC009091BC0097FF36 +:1005A000FCCF9091B900987F983021F0903111F0F4 +:1005B00081E008958093BB0084E88093BC00809123 +:1005C000BC0087FFFCCF8091B900887F883111F093 +:1005D000803471F780E0089584E98093BC008091B5 +:1005E000BC0084FDFCCF08958093BB0084E8809319 +:1005F000BC008091BC0087FFFCCF9091B900987F30 +:1006000081E0983209F480E0089584E88093BC008A +:100610008091BC0087FFFCCF8091BB00089580B320 +:100620008C7080BB81B3836F81BB08958091010181 +:10063000811115C080E40E94CA02809301018111DA +:100640000CC082E10E94F40280930101811105C077 +:100650008FEF0E94F402809301010E94EC0284B1AA +:10066000807F84B985B1807F85B98AB1837F8AB95B +:100670008BB1837F8BB93E98469808950E94E00421 +:10068000809301010E9416030E940F03A5E3B1E0CD +:10069000E3E4F1E08EE08E0F11921D928E13FCCFF9 +:1006A0000C94CA040E94E004809301010E94160386 +:1006B0000E940F03A5E3B1E0E3E4F1E08EE08E0FCA +:1006C00011921D928E13FCCF0895BF92CF92DF92AC +:1006D000EF92FF920F931F93CF93DF9380910101CD +:1006E000882379F0809134018F5F809334018111E8 +:1006F00008C00E94E00480930101811102C00E94A1 +:10070000720405E311E0C0E0D0E0DD24D39482E080 +:10071000C82EEE24E394F12CC730D10500F580916A +:100720000101811164C080E40E94CA02809301012A +:10073000811112C082E10E94F402809301018111B3 +:100740000BC0C7010C2E01C0880F0A94EAF78095F0 +:100750000E94F402809301010E94EC0248C0CA305A +:10076000A1F028F4C83059F0C93061F005C0CC3090 +:1007700089F070F0CD3089F0209A289810C0219A25 +:1007800029980DC0229A2A980AC0239A2B9807C04C +:10079000529A01C0539A5B9802C03E9A469890EADA +:1007A0009A95F1F79FB1799902C082E001C080E08B +:1007B00091709D25982B7C9902C084E001C080E057 +:1007C000892B7D9902C038E001C030E0832B7E99EF +:1007D00002C020E101C020E0822B9FB19095991FBB +:1007E0009927991F9295990F907E892B0FC0809120 +:1007F0000101811149C080E40E94CA028093010175 +:10080000882379F1B12C0E94EC028B2DF8019081A4 +:10081000981719F08083C09200010E941603219658 +:100820000F5F1F4FCE30D10509F076CF80910001C8 +:10083000882361F1815080930001882339F08FE98A +:100840009FE00197F1F700C0000020C0A3E4B1E0F1 +:10085000E5E3F1E0CF01825F91919D938E13FCCF90 +:1008600015C083E10E94F402809301018111CACF77 +:1008700081E40E94CA02809301018111C3CF0E94CA +:100880000503B82EB094BFCF80E0C0CF0E947004A3 +:1008900081E0DF91CF911F910F91FF90EF90DF905A +:1008A000CF90BF900895E82FF0E0ED5BFE4F808180 +:1008B000089508950F931F93CF93DF93C3E4D1E07E +:1008C00010E00C2F025F899190E00E948C1B180FA2 +:1008D0000C13F9CF812FDF91CF911F910F910895C4 +:1008E0000C94400556985E9825982D9826982E9839 +:1008F00027982F988FEF90E090938900809388003D +:1009000090938B0080938A0090938D0080938C004D +:10091000259A2D9A2FEF80E792E021508040904059 +:10092000E1F700C00000269A2E9A2FEF80E792E0B0 +:10093000215080409040E1F700C00000279A2F9A94 +:100940002FEF80E792E0215080409040E1F700C017 +:10095000000025982D982FEF80E792E021508040ED +:100960009040E1F700C0000026982E982FEF80E716 +:1009700092E0215080409040E1F700C000002798AD +:100980002F9856985E9825982D9826982E982798F7 +:100990002F98089589EA8093800089E080938100F0 +:1009A00024982C983F988AB18F748AB96E98479A88 +:1009B0008BB1806B8BB9769A0E9472040C943F05C0 +:1009C00080E2809301018091510181110EC00E944B +:1009D000C40281E0809351012FEF83ED90E3215019 +:1009E00080409040E1F700C0000080E40E94CA020D +:1009F0008093010181112EC00E94F40280930101B5 +:100A0000811128C00E94F40280930101811122C04B +:100A10008FE30E94F4028093010181111BC00E94A8 +:100A2000EC0280E40E94CA0280930101811112C08D +:100A30008CE00E94F4028093010181110BC00E949E +:100A4000F40280930101811105C08FE30E94F4023A +:100A5000809301010E94EC028091010108956111CF +:100A60000BC0FC018281882321F085EE0E949B113E +:100A700003C085EE0E94631280E090E0089508951F +:100A80006091C2017091C3018091C4019091C50130 +:100A90000E94981B56985E9825982D9826982E9817 +:100AA00027982F98813019F0823021F00895259AE7 +:100AB0002D9A0895269A2E9A089581E0089581E04E +:100AC00008950C945F050895282F882339F090E04D +:100AD0002A3010F44D9608950697089587E290E025 +:100AE0000895AF92BF92DF92EF92FF920F931F9300 +:100AF000CF93DF938C01FC01C081D181CE010E9494 +:100B0000111ABE010E94E908EC01B8010E946105BA +:100B1000882309F4D1C1F8018281882309F4C6C071 +:100B200080916201811127C0C431F0E7DF0709F02D +:100B3000BDC10E94630581E0809362010E94321C66 +:100B400090936101809360011092550110925701BA +:100B500010925601109259011092580110925B01A7 +:100B600010925A0110925D0110925C0110925F0187 +:100B700010925E01A1C180916001909161010E947B +:100B80003E1C883C910570F480915501E82FF0E0FF +:100B9000EE0FFF1FEA5AFE4FD183C0838F5F809311 +:100BA00055018AC1C13020E8D20708F451C0F801CC +:100BB0008281882309F47EC05E01E894B7F88091B1 +:100BC0005401813079F050F08230C1F482EE0E94FD +:100BD0009B1187E50E949B1187E50EC082EE0E9463 +:100BE0009B110CC080EE0E949B1181EE0E949B1114 +:100BF00088E10E949B1188E10E9463128CE0E82E3C +:100C0000F12CC5010E2C02C0969587950A94E2F747 +:100C10008F700E946405D82E0E949B118D2D0E941A +:100C20006312F4E0EF1AF1082CEFE2162FEFF20650 +:100C300041F780915401813029F010F0823041F465 +:100C400082EE04C080EE0E94631281EE0E94631265 +:100C5000C43180E7D80768F4C23090E7D90708F0BC +:100C600046C0C115E0E7DE0771F0C130D047A1F101 +:100C70000CC1C33320E7D20709F4D8C0C433D0472E +:100C800009F4EBC002C1F8018281882309F402C192 +:100C90000E941815FFEF24E38CE0F15020408040C3 +:100CA000E1F700C000000E948D1C06C1C13080E841 +:100CB000D80770F2C43120E7D20708F0B3C0C230C1 +:100CC00080E7D807A0F4C11590E7D90709F4E2C07E +:100CD000C130D04709F0D9C0F8018281882309F4D6 +:100CE000D9C08091DF0181608093DF01E5C0F80108 +:100CF0008281882309F4CEC00E94E71C811102C0C2 +:100D00000E94CD1C0E94FA1C90E09093F301809306 +:100D1000F201C230F0E7DF0721F48091F201816037 +:100D20007AC0C33020E7D20721F48091F2018260BB +:100D300072C0C43080E7D80721F48091F20184604A +:100D40006AC0C53090E7D90719F48091F20127C035 +:100D5000C630E0E7DE0721F48091F20180615BC0DC +:100D6000C730F0E7DF0721F48091F201806253C0C1 +:100D7000C83020E7D20721F48091F20180644BC093 +:100D8000C93080E7D80721F48091F201806843C020 +:100D9000CA3090E7D90729F48091F2018460886015 +:100DA0003AC0CB30E0E7DE0721F48091F2018E7F7C +:100DB00032C0CC30F0E7DF0721F48091F2018D7F63 +:100DC0002AC0CD3020E7D20721F48091F2018B7F39 +:100DD00022C0CE3080E7D80719F48091F2011AC002 +:100DE0008091F201CF3090E7D90711F48F7E13C0C4 +:100DF000C031E0E7DE0711F48F7D0DC0C131F0E7AF +:100E0000DF0711F48F7B07C0C231D04711F48F7711 +:100E100002C08B7F877F8093F2018091F2010E9454 +:100E2000FE1C4AC0C333F0E7DF07A1F4F80182815A +:100E3000882321F01092520182E016C08091520165 +:100E4000811106C086E20E949B1186E20E94631215 +:100E500082E018C0C433D047C1F4F80182818823EE +:100E600031F01092530180E20E94B21225C08091AD +:100E70005301811106C087E20E949B1187E20E9404 +:100E8000631280E20E94B91217C081E08093520180 +:100E900080935301C801DF91CF911F910F91FF9073 +:100EA000EF90DF90BF90AF900C945D05C130F0E8FB +:100EB000DF0708F081CECCCE80E0DF91CF911F918B +:100EC0000F91FF90EF90DF90BF90AF90089526E0D4 +:100ED000729FF001112444E5849FE00DF11D11245F +:100EE000E60FF11DEE0FFF1FE25FFE4F859194911B +:100EF0000E94FB08811560E49607B0F5811570E348 +:100F0000970708F0DEC0803E9105D8F4803C91053B +:100F100008F06CC0883A910578F4853A910508F09C +:100F20006BC08130910509F452C108F40FC18430BF +:100F3000910508F04CC10AC18B3B910508F467C0CC +:100F400005C18F3F910509F048F4803F910508F0F5 +:100F5000ADC0883E910508F43AC1F8C0811520E281 +:100F6000920708F0A5C00895811543E5940790F411 +:100F7000811562E5960708F0C8C0811571E59707ED +:100F800008F0BEC0811520E5920708F09DC09F7053 +:100F9000906A0895811545E59407D8F4811564E5B4 +:100FA000960708F0C8C0482F4695469570E2479FBF +:100FB000A00111248370992721E030E0B90102C01B +:100FC000660F771F8A95E2F7CB01842B952B9A68E1 +:100FD0000895811576E5970708F4B2C09C01305654 +:100FE0002115304108F0B2C09F70AEC0FC01EE0F79 +:100FF000FF1FE657F04062C0853A910509F4A9C089 +:10100000863A910509F0A8C082E890E40895883AEC +:10101000910509F4A4C0893A910509F4A3C08A3A5C +:10102000910509F4A2C08B3A910509F4A1C08C3A4C +:10103000910509F4A0C08D3A910509F49FC0803B49 +:10104000910509F49EC08E3A910509F49DC08F3A2E +:10105000910509F49CC0813B910509F49BC0823B3A +:10106000910509F49AC0833B910509F499C0843B2A +:10107000910509F498C0853B910509F497C0863B1A +:10108000910509F496C0873B910509F495C0883B0A +:10109000910509F494C0893B910509F493C08A3BFA +:1010A000910509F492C080E094E408959065089554 +:1010B000FC01FF70EE0FFF1FE65FFE4F85919491DC +:1010C00008959927906C0895482F437021E030E0EF +:1010D00002C0220F331F4A95E2F73C68AC0164E07E +:1010E000569547956A95E1F74370342B8F70869536 +:1010F000869560E2869FC0011124822B932B089570 +:10110000982F8827816F906A0895482F46954695B5 +:1011100070E2479FA00111248370992721E030E0FD +:10112000B90102C0660F771F8A95E2F7CB01842BC5 +:10113000952B9C680895982F8827846F906A08954E +:101140008F719927982F88279062089580E090E00A +:10115000089581E890E4089583E890E4089582EE8C +:1011600094E4089589EE94E408958AEE94E4089551 +:1011700085EB94E4089586EB94E4089587EB94E47A +:1011800008958CEC94E408958DEC94E4089583E83C +:1011900095E408958AE895E4089582E995E4089530 +:1011A00084E995E4089581E296E4089583E296E463 +:1011B000089584E296E4089585E296E4089586E22F +:1011C00096E4089587E296E408958AE296E4089505 +:1011D000089596E0799FF001112494E5899FE00D30 +:1011E000F11D1124E60FF11DEE0FFF1FE25FFE4F10 +:1011F0008591949108958238910549F1B0F4813335 +:10120000910509F458C048F48932910509F44EC09B +:101210008A32910509F454C008958533910509F483 +:1012200040C08933910599F00895833E910529F1D5 +:1012300038F4803E910591F0823E9105A1F0089529 +:10124000863E9105F9F0873E910531F10895209190 +:10125000F20120FD3AC021FD38C008958091F201CD +:1012600080FD35C032C08091F20182FF32C0809192 +:10127000F20184FD30C083EE39C08091F20182FD1D +:1012800028C0F5CF8091F20183FF27C08091F20141 +:1012900084FD21C087EE2AC08091F20183FD1DC02C +:1012A000F5CF8091F20185FD1AC01BC08091F2013B +:1012B00085FD17C014C08091F20186FD14C015C0D1 +:1012C0008091F20186FD11C00EC080EE0FC089E34F +:1012D0000DC082EE0BC080E009C086EE07C089E237 +:1012E00005C085E303C08AE201C081E390E0089570 +:1012F00008950C947809809173010895CF93DF933A +:1013000000D01F92CDB7DEB79C018091F8018430E8 +:1013100019F593E099833B832A839093E9008FEF3B +:101320009091E800815095FD06C095ED9A95F1F7F2 +:1013300000008111F5CF8091E80085FF0DC040E0ED +:1013400050E063E070E0CE0101960E94E70B8091CF +:10135000E8008E778093E8000F900F900F90DF9158 +:10136000CF910895CF93DF9300D01F92CDB7DEB712 +:101370002091F801243021F522E029839B838A8380 +:1013800083E08093E9008FEF9091E800815095FD14 +:1013900006C095ED9A95F1F700008111F5CF809187 +:1013A000E80085FF0DC040E050E063E070E0CE0152 +:1013B00001960E94E70B8091E8008E778093E80009 +:1013C0000F900F900F90DF91CF9108952091F80129 +:1013D0002430F1F422E02093E9002FEF3091E8006F +:1013E000215035FD06C035ED3A95F1F70000211189 +:1013F000F5CF2091E80025FF0BC040E050E065E00C +:1014000070E00E94E70B8091E8008E778093E800FF +:101410000895CF93DF93EC019091F801943009F097 +:1014200046C080910C018823D9F080910D0188235A +:10143000B9F09093E9008FEF9091E800815095FD0D +:1014400006C095E19A95F1F700008111F5CF8091E2 +:10145000E80085FF2CC040E050E060E170E017C07C +:1014600081E08093E9008FEF9091E800815095FD35 +:1014700006C095ED9A95F1F700008111F5CF8091A6 +:10148000E80085FF14C040E050E068E070E0CE0165 +:101490000E94E70B8091E8008E778093E80080E15E +:1014A000FE01A3E6B1E001900D928A95E1F7DF918C +:1014B000CF9108958091F701811109C00E947C0DA0 +:1014C0000E94D90D8091E20084608093E20008952B +:1014D0001092F701089508950C9473210E94231C23 +:1014E0000E9479210E947F100C94790942E061ECFE +:1014F00081E00E94F60C42E061EC82E00E94F60C72 +:1015000042E061EC83E00E94F60C42E161EC84E091 +:101510000C94F60C8091FA01833009F455C030F434 +:10152000813071F0823009F48EC008958A3009F458 +:101530007AC08B3009F460C0893009F09CC020C0AB +:101540008091F901813A09F096C08091E800877F87 +:101550008093E8008091FD019091FE01892B21F498 +:1015600060E183E691E003C060E080E090E070E03D +:101570000E94320C8091E8008B778093E8000895F8 +:101580008091F901813209F076C08091FD0190913E +:10159000FE01009719F0039709F06DC08091E800F3 +:1015A000877F8093E8008091E80082FD05C08091EC +:1015B000F8018111F8CF5FC08091F1008093730131 +:1015C0008091E8008B7753C08091F901813A09F04E +:1015D00052C08091FD019091FE01892B09F04BC012 +:1015E0008091E800877F8093E8008091E80080FF89 +:1015F000FCCF80910C0136C08091F9018132D9F580 +:101600008091FD019091FE01892BA9F58091E80060 +:10161000877F8093E8000E942B0D8091FB018093CF +:101620000C010C9418158091F901813221F58091FB +:10163000E800877F8093E8000E942B0D8091FC01D9 +:101640008093740108958091F901813AA1F4809109 +:10165000E800877F8093E8008091E80080FFFCCF5E +:10166000809174018093F1008091E8008E778093DF +:10167000E8000C942B0D089584B7877F84BF0FB6C4 +:10168000F894A89580916000886180936000109222 +:1016900060000FBE80E880936100109261000E949C +:1016A000CE100E947C0D0E94D90D8091E2008460D2 +:1016B0008093E20078940E945F100E94D01082E034 +:1016C00091E00E947A100E9461218091F80185309A +:1016D00069F40E94E81B8091F6018823B1F30E940F +:1016E000151C882391F30E94D10BEFCF0E94D610D6 +:1016F000ECCF292F332723303105C9F064F4213092 +:10170000310581F02230310509F043C08DE690E0CB +:101710002AE333E042C021323105F1F022323105B3 +:1017200041F137C082E190E027EA33E036C09927E3 +:101730008130910541F08230910541F0892B49F5C6 +:10174000E6E3F3E005C0EEE1F3E002C0E6E0F3E03B +:10175000849190E09F0121C06430D8F4E62FF0E03E +:10176000EE0FFF1FEE5DFE4F2081318189E090E09A +:1017700014C0643070F470E0FB01EE0FFF1FE65EF2 +:10178000FE4F20813181FB01EA5EFE4F808190E0B7 +:1017900004C080E090E020E030E0FA013183208353 +:1017A000089580E189BD82E189BD09B400FEFDCFC5 +:1017B0008091D8008F7D8093D8008091E000826076 +:1017C0008093E0008091E00081FDFCCF0895CF92EE +:1017D000DF92EF92FF920F931F93CF93DF93EC0171 +:1017E0008B016A010E944A0D811133C0C114D104DA +:1017F00039F0F60180819181081B190BC80FD91FA0 +:10180000E12CF12C0115110519F18091E80085FDFD +:1018100016C08091E8008E778093E800C114D1044F +:1018200049F0F60180819181E80EF91EF182E08293 +:1018300085E00FC00E944A0D882321F30AC08991D8 +:101840008093F10001501109FFEFEF1AFF0ADACF80 +:1018500080E0DF91CF911F910F91FF90EF90DF908B +:10186000CF9008952091FF0130910002261737078D +:1018700048F06115710539F42091E8002E77209326 +:10188000E80001C0B90140E061157105A9F120919E +:10189000F801222309F443C0253009F442C0209105 +:1018A000E80023FD40C02091E80022FD32C02091D5 +:1018B000E80020FFE9CF4091F3002091F20030E0F2 +:1018C000342BFC01CF016115710559F02830310529 +:1018D00040F481918093F100615071092F5F3F4F77 +:1018E000F1CF41E02830310509F040E02091E800D7 +:1018F0002E772093E800C8CF4111C9CF0AC080914C +:10190000F801882361F0853061F08091E80083FD63 +:101910000AC08091E80082FFF2CF80E0089582E063 +:10192000089583E0089581E008952091FF013091AA +:1019300000022617370748F06115710539F4209128 +:10194000E8002E772093E80001C0B901FC0120E0F7 +:101950006115710591F18091F801882309F440C067 +:10196000853009F43FC08091E80083FD3DC080913F +:10197000E80082FD2FC08091E80080FFE9CF209130 +:10198000F3008091F20090E0922B6115710559F0FF +:101990008830910540F424912093F10031966150F4 +:1019A00071090196F2CF21E0089709F020E08091BB +:1019B000E8008E778093E800CBCF2111CCCF0AC00E +:1019C0008091F801882361F0853061F08091E80012 +:1019D00083FD0AC08091E80082FFF2CF80E0089585 +:1019E00082E0089583E0089581E00895982F97306C +:1019F00058F59093E900981739F07091EC00209118 +:101A0000ED005091F00003C0242F762F50E021FF0D +:101A100019C03091EB003E7F3093EB003091ED0028 +:101A20003D7F3093ED003091EB0031603093EB005F +:101A30007093EC002093ED005093F0002091EE00A5 +:101A400027FF07C09F5FD3CF8F708093E90081E0AD +:101A5000089580E008958091F90187FF11C0809179 +:101A6000E80082FD05C08091F8018111F8CF11C016 +:101A70008091E8008B770BC08091F801882349F0B2 +:101A80008091E80080FFF8CF8091E8008E77809306 +:101A9000E80008952091E4003091E50095E640913A +:101AA000EC00842F817040FF22C08091E80080FD0F +:101AB0001CC08091F801882391F0853091F08091CD +:101AC000EB0085FD10C04091E4005091E500421705 +:101AD000530729F39A01915011F784E0089582E0A9 +:101AE000089583E0089581E0089580E0089540918D +:101AF000E80042FFDECF08950E94EA0D0E94F20D39 +:101B0000E0EEF0E0808181608083E8EDF0E08081AC +:101B10008F77808319BCA7EDB0E08C918E7F8C937A +:101B200080818F7E80831092F70108950F931F9319 +:101B3000CF93DF930E94EA0D0E94F20DC8EDD0E032 +:101B400088818F77888388818068888388818F7D6A +:101B5000888319BC1092F8011092F4011092F601DA +:101B60001092F50100EE10E0F80180818B7F8083F8 +:101B700088818160888342E060E080E00E94F60C0A +:101B8000E1EEF0E080818E7F8083E2EEF0E0808104 +:101B900081608083808188608083F80180818E7F6E +:101BA0008083888180618883DF91CF911F910F911D +:101BB0000895E8EDF0E080818F7E8083E7EDF0E02E +:101BC00080818160808384E082BF81E08093F7011F +:101BD0000C94960DE8EDF0E080818E7F808310926A +:101BE000E20008951092DA001092E10008951F9229 +:101BF0000F920FB60F9211242F933F934F935F9341 +:101C00006F937F938F939F93AF93BF93EF93FF93C4 +:101C10008091E10082FF0BC08091E20082FF07C04B +:101C20008091E1008B7F8093E1000E945E108091A3 +:101C3000DA0080FF1FC08091D80080FF1BC0809118 +:101C4000DA008E7F8093DA008091D90080FF0DC08A +:101C500080E189BD82E189BD09B400FEFDCF81E04C +:101C60008093F8010E945A0A05C019BC1092F8012D +:101C70000E94680A8091E10080FF19C08091E20013 +:101C800080FF15C08091E2008E7F8093E2008091FA +:101C9000E20080618093E2008091D80080628093AE +:101CA000D80019BC85E08093F8010E946C0A8091ED +:101CB000E10084FF30C08091E20084FF2CC080E10D +:101CC00089BD82E189BD09B400FEFDCF8091D800B5 +:101CD0008F7D8093D8008091E1008F7E8093E1001A +:101CE0008091E2008F7E8093E2008091E20081602B +:101CF0008093E2008091F401882311F084E007C012 +:101D00008091E30087FD02C081E001C083E0809301 +:101D1000F8010E946E0A8091E10083FF29C0809142 +:101D2000E20083FF25C08091E100877F8093E1007E +:101D300082E08093F8011092F4018091E1008E7F9F +:101D40008093E1008091E2008E7F8093E200809199 +:101D5000E20080618093E20042E060E080E00E9467 +:101D6000F60C8091F00088608093F0000E946B0A6E +:101D7000FF91EF91BF91AF919F918F917F916F9163 +:101D80005F914F913F912F910F900FBE0F901F9039 +:101D900018951F920F920FB60F9211242F933F9315 +:101DA0004F935F936F937F938F939F93AF93BF9363 +:101DB000CF93DF93EF93FF93C091E900CF708091B1 +:101DC000EC00D82FD17080FDD0E81092E90080910E +:101DD000F000877F8093F00078940E940D0F10929E +:101DE000E9008091F00088608093F000CD2BCF70E7 +:101DF000C093E900FF91EF91DF91CF91BF91AF9137 +:101E00009F918F917F916F915F914F913F912F9112 +:101E10000F900FBE0F901F9018951F93CF93DF93D5 +:101E2000CDB7DEB7AA970FB6F894DEBF0FBECDBF11 +:101E3000E9EFF1E088E08E0F9091F10091938E131D +:101E4000FBCF0E948A0A8091E80083FF1FC1809126 +:101E5000F9019091FA01492F50E04A30510508F0FC +:101E600015C1FA01EA5AFF4F0C940A23803881F019 +:101E7000823809F00BC18091FD018F708093E900D9 +:101E80008091EB0085FB882780F91092E90006C05D +:101E90008091F5019091F601911182609091E80096 +:101EA000977F9093E8008093F1001092F100C8C0F2 +:101EB000282F2D7F09F0EAC0882319F0823061F0C5 +:101EC000E5C08091FB01813009F0E0C0933009F05A +:101ED00080E08093F6012BC08091FB01811127C027 +:101EE0008091FD018F7009F4D1C08093E9002091A9 +:101EF000EB0020FF1CC0933021F48091EB00806246 +:101F000014C09091EB0090619093EB0021E030E0E1 +:101F1000A90102C0440F551F8A95E2F74093EA00D9 +:101F20001092EA008091EB0088608093EB001092A1 +:101F3000E9008091E800877F86C08111A7C01091D9 +:101F4000FB011F778091E3008078812B8093E30071 +:101F50008091E800877F8093E8000E942B0D80919C +:101F6000E80080FFFCCF8091E30080688093E3006D +:101F7000111102C082E001C083E08093F80186C0A5 +:101F80008058823008F082C08091FB019091FC0162 +:101F90008C3D53E0950779F583E08A838AE2898353 +:101FA0004FB7F894DE01139620E03EE051E2E32FB4 +:101FB000F0E050935700E49120FF03C0E295EF70EA +:101FC0003F5FEF708E2F90E0EA3010F0C79601C0AF +:101FD000C0968D939D932F5F243149F74FBF809119 +:101FE000E800877F8093E8006AE270E0CE01019606 +:101FF0000E94320C14C0AE014F5F5F4F6091FD0133 +:102000000E94790BBC01892B09F440C09091E80033 +:10201000977F9093E80089819A810E94950C809126 +:10202000E8008B778093E80031C0803879F58091A3 +:10203000E800877F8093E8008091F4018093F100AD +:102040008091E8008E778093E8000E942B0D1EC0DF +:1020500081111CC09091FB019230C0F48091E80086 +:10206000877F8093E8009093F4010E942B0D80916C +:10207000F401811106C08091E30087FD02C081E078 +:1020800001C084E08093F8010E94760A8091E80004 +:1020900083FF0AC08091E800877F8093E8008091E9 +:1020A000EB0080628093EB00AA960FB6F894DEBF37 +:1020B0000FBECDBFDF91CF911F9108950895CF93AB +:1020C0008091F8018823A1F0C091E900CF70909130 +:1020D000EC00892F817090FD80E8C82B1092E900F8 +:1020E0008091E80083FD0E940D0FCF70C093E9003E +:1020F000CF91089590937A01809379010895E091AA +:102100007901F0917A01309721F00190F081E02D72 +:10211000099480E00895E0917901F0917A01309777 +:1021200021F00280F381E02D09940895E091790176 +:10213000F0917A01309721F00480F581E02D099427 +:10214000089520917701309178018217930771F0FB +:102150009093780180937701E0917901F0917A0171 +:10216000309721F00680F781E02D099408952091A1 +:102170007501309176018217930771F09093760183 +:1021800080937501E0917901F0917A01309721F007 +:102190000084F185E02D0994089508950C94CD10E4 +:1021A0000E94291C0E943E030C94AF1C9F92AF9288 +:1021B000BF92CF92DF92EF92FF920F931F93CF9334 +:1021C000DF9300D000D000D0CDB7DEB70E9465030A +:1021D0000DE010E0AA24A394B12C902E802F0E9431 +:1021E0005304980124583E4F6901F901F080F82604 +:1021F000A1F40150110988F78FEF89838A831B822C +:102200000E94321C8160782F9D838C8349815A8182 +:102210006B818D810E946D112FC09091DF0191FF24 +:1022200004C08E830E9459048E8125E030E0A50110 +:10223000022E01C0440F0A94EAF7E42E4F21C1F0A8 +:1022400029839A828E2191E009F490E09B830E9479 +:10225000321C8160782F9D838C8349815A816B81E8 +:102260008D810E946D11F6018081E826E08204C014 +:1022700021503109E0F6BDCF0E947D1E10917B01F7 +:102280000E947F101817B9F00E947F1080937B0185 +:1022900026960FB6F894DEBF0FBECDBFDF91CF916B +:1022A0001F910F91FF90EF90DF90CF90BF90AF9074 +:1022B0009F900C94790926960FB6F894DEBF0FBE56 +:1022C000CDBFDF91CF911F910F91FF90EF90DF90E5 +:1022D000CF90BF90AF909F900895CF93DF93CDB7ED +:1022E000DEB72B970FB6F894DEBF0FBECDBF4F837E +:1022F000588769877A878B87DE01119686E0FD0112 +:1023000011928A95E9F785E0FE01379601900D92CA +:102310008A95E1F749815A816B817C818D819E810B +:102320000E94B6172B960FB6F894DEBF0FBECDBF36 +:10233000DF91CF910895CF93882309F4C2C0C82FAD +:10234000823859F40E947F1081FDBBC089E30E944E +:10235000901A0E945D1B89E30CC0833879F40E94B7 +:102360007F1080FDAEC083E50E94901A0E945D1B25 +:1023700083E50E94D21ACF910C945D1B843859F4E6 +:102380000E947F1082FD9DC087E40E94901A0E94E7 +:102390005D1B87E4EECF8CEF8C0F813A48F48C2FD5 +:1023A0000E94C72081118DC08C2F0E94901AE3CF0C +:1023B00080E28C0F883048F4C77081E001C0880F3C +:1023C000CA95EAF70E94161BD6CF8BE58C0F833097 +:1023D00078F4C53A29F0C63A31F083E890E005C0B8 +:1023E00081E890E002C082E890E0CF910C94A110C7 +:1023F00088E58C0F833108F064C0C83A39F1C93AD6 +:1024000041F1CA3A49F1CB3A51F1CC3A59F1CD3ABE +:1024100061F1C03B69F1CE3A71F1CF3A79F1C13B3C +:1024200081F1C23B89F1C33B91F1C43B99F1C53BBA +:10243000A1F1C63BA9F1C73BB1F1C83BB9F1C93B1A +:10244000C1F1CA3BC9F180E090E038C082EE90E073 +:1024500035C089EE90E032C08AEE90E02FC085EB67 +:1024600090E02CC086EB90E029C087EB90E026C07E +:102470008CEC90E023C08DEC90E020C083E891E0EC +:102480001DC08AE891E01AC082E991E017C084E992 +:1024900091E014C081E292E011C083E292E00EC0AC +:1024A00084E292E00BC085E292E008C086E292E00E +:1024B00005C087E292E002C08AE292E0CF910C94DC +:1024C000B710CF910895882309F44BC0823859F48E +:1024D0000E947F1081FF45C089E30E94901A0E94EC +:1024E0005D1B89E30CC0833871F40E947F1080FF6C +:1024F00038C083E50E94901A0E945D1B83E50E940C +:10250000D21A0C945D1B843859F40E947F1082FF0C +:1025100028C087E40E94901A0E945D1B87E4EFCFD9 +:102520009CEF980F913A58F390E2980F983050F43E +:10253000877091E001C0990F8A95EAF7892F0E9470 +:102540001C1BDFCF9BE5980F933020F480E090E0D8 +:102550000C94A110885A833120F480E090E00C9410 +:10256000B7100895882321F00E94161B0C945D1B60 +:102570000895882321F00E941C1B0C945D1B089574 +:102580007F928F929F92AF92BF92CF92DF92EF9203 +:10259000FF920F931F93CF93DF931F92CDB7DEB7B8 +:1025A0007C01C62E772EFC01058102950F701281E9 +:1025B00011110E94331B0E94891A882379F011237C +:1025C00069F080E28C0D883048F082E00E94721A37 +:1025D0000E94891A91E0D82ED92601C0D12CE72D6E +:1025E000E295EF70F0E0E05AFF4F0C940A23872D3C +:1025F000807F072D0F70882311F00295007F112333 +:1026000089F0002309F490C180E28C0D883020F419 +:10261000802F0E94161B03C0802F0E94261B0E9441 +:102620005D1B82C18C2D0E946312002309F495C1A9 +:1026300080E28C0D883020F4802F0E941C1B03C088 +:10264000802F0E942C1B0E945D1B87C1972D907FBD +:10265000872D8F70903211F08295807FCC2021F0F1 +:10266000F1E0CF16B1F01EC0112349F0002309F4A8 +:1026700014C1013009F011C10E94461B6EC1002334 +:1026800019F0013009F469C189830E94491B8981CD +:102690000AC1112321F0023008F05FC1FEC0011110 +:1026A0005CC101C1112321F0002309F4F6C03CC133 +:1026B000002309F4F8C03EC1872D86958695837066 +:1026C00090E0009719F0019761F047C1112321F0C4 +:1026D0008C2D972D937002C080E090E00E94A11095 +:1026E0003CC1112321F08C2D972D937002C080E006 +:1026F00090E00E94B71031C18C2D112319F00E9477 +:10270000851D02C00E94ED1D0E94721E26C1872DEC +:10271000837009F052C0111120C18C2D82958695CD +:102720008770880F880F9C2D9F70892E912CA12C6B +:10273000B12C082E04C0880C991CAA1CBB1C0A943E +:10274000D2F7C4FE14C00FE010E020E030E0B90181 +:10275000A80104C0440F551F661F771F8A95D2F742 +:10276000CB01BA01609570958095909503C060E0AB +:1027700070E0CB01272D26952695237030E022307E +:10278000310569F02330310589F0682979298A29D2 +:102790009B292130310571F00E94FE18DEC06829A6 +:1027A00079298A299B290E941A19D7C00E94FE18EC +:1027B000C501B4010E94E218D0C0112319F0872D81 +:1027C000817001C08695882309F4C7C08C2D82953D +:1027D00086958770880F880F9C2D9F70892E912C6D +:1027E000A12CB12C082E04C0880C991CAA1CBB1C5F +:1027F0000A94D2F7C4FE14C00FE010E020E030E0ED +:10280000B901A80104C0440F551F661F771F8A95A0 +:10281000D2F7CB01BA01609570958095909503C071 +:1028200060E070E0CB01272D269526952370422F7E +:1028300050E04230510569F04330510589F0682974 +:1028400079298A299B294130510571F00E94D819B4 +:1028500084C0682979298A299B290E94F4197DC09E +:102860000E94D819C501B4010E94BC1976C08C2DF4 +:1028700090E0FC01E05EF109E531F10508F050C09F +:10288000E059FF4F0C940A230C2D0F70872D8F7188 +:10289000112331F00E945519802F0E94B2125DC0A1 +:1028A0000E947619802F0E94B91257C0112339F067 +:1028B000011153C0872D8F710E949B194EC00230A9 +:1028C00008F04BC0F7CF112339F0872D8F710E948C +:1028D000551943C01123C9F3872D8F710E947619B2 +:1028E0003CC0112329F0872D8F710E94401935C0FB +:1028F0000E94361932C0112351F0172D1F71812FFC +:102900000E94551963E0812F0E94691A26C081E058 +:102910000E94721A023008F182E00E94721A1DC0F1 +:10292000112331F0002389F28C2D0E949B1115C0D8 +:10293000002391F28C2D0E9463120FC0472D4F701F +:102940006C2DC7010E942F050E945A1806C0472D02 +:102950004F706C2DC7010E94E808DD20F9F00E943D +:10296000651A80FD1BC0F70112820E945F1A0E9447 +:102970005519C7010E94DD140E945F1A0F90DF9164 +:10298000CF911F910F91FF90EF90DF90CF90BF906C +:10299000AF909F908F907F900C9476190F90DF915D +:1029A000CF911F910F91FF90EF90DF90CF90BF904C +:1029B000AF909F908F907F9008950F931F93CF9328 +:1029C000DF93EC01888199812B813C81232BB9F025 +:1029D0009F3F11F48F3F99F0CE010E94710588232B +:1029E00071F0688179818A810E945B1A8C010E9452 +:1029F000101A0E94D718B801CE010E94C012DF91B0 +:102A0000CF911F910F9108950E94331B0E94431B89 +:102A10000E94081B0E945D1B0E94231F0E94721EC1 +:102A200080E090E00E94A11080E090E00C94B7104C +:102A30000E94231B0C9404150E94501A292F2295E2 +:102A40002F7030E02C3031054CF42A3031056CF415 +:102A50002250310922303105A8F407C02C3031054D +:102A600069F02F30310551F00DC0803F69F018F446 +:102A7000803E40F409C0843F29F406C093FB8827B8 +:102A800080F9089580E0089581E00895CF93DF9361 +:102A900000D000D01F92CDB7DEB70F900F900F90EF +:102AA0000F900F90DF91CF910895CF93DF9300D0D7 +:102AB00000D000D0CDB7DEB726960FB6F894DEBFB3 +:102AC0000FBECDBFDF91CF9108951F93CF93DF93BA +:102AD000C0918A0116E080918B01C81799F0D0E06F +:102AE0001C9FF0011D9FF00D1124E457FE4F408103 +:102AF000518162817381848195810E94551521964F +:102B0000C770E9CFDF91CF911F9108954091BC012B +:102B10005091BD016091BE017091BF018091C001D3 +:102B20009091C1010C9455158091C10182958F70CF +:102B300009F054C08091BE01882309F44FC08091F0 +:102B40008A01A0918B016091BC017091BD014091FF +:102B5000BF015091C001B6E08A1709F43FC090E070 +:102B600041155105C1F17F3F11F46F3FA1F1B89FAD +:102B7000F001B99FF00D1124E457FE4F218172132B +:102B80002AC02081621327C02281211124C0238101 +:102B900034812417350710F421503109241B350BDB +:102BA000283C3105C0F42091C1012F702061209391 +:102BB000C10126E0289FF001299FF00D1124EF5656 +:102BC000FE4F80818F70806180838CEB91E00E944A +:102BD000DD140C94651501968770BECF0895CF92D1 +:102BE000DF92EF92FF920F931F93CF93DF93CDB7B6 +:102BF000DEB762970FB6F894DEBF0FBECDBF8C0173 +:102C000085E0F801DE011D9601900D928A95E1F7AD +:102C1000D8014C9111965C91119712966C91129774 +:102C20001396CD90DC9014973091BC017091BD014A +:102C30008091BF019091C001009709F46BC17F3F63 +:102C400019F43F3F09F466C1E090BE01EE2009F49B +:102C5000C0C02091C101C816D90628F0F601E81BB2 +:102C6000F90BCF0104C0809590958C0D9D1DFF241C +:102C7000F394883C910578F0F12C207F09F0C6C0D0 +:102C80007C2DD98AC88A89890E9446158CEB91E0EF +:102C90000E94DD14B1C0822F807F09F046C07513F9 +:102CA00014C0341312C0611110C02F702061209322 +:102CB000C1010E9486158CEB91E00E94DD14809189 +:102CC000C101D80115968C932EC0CD2819F15F3F14 +:102CD00011F44F3FF9F0F62E61111CC080918A016A +:102CE00020918B0136E0821709F45AC090E0389F9A +:102CF000F001399FF00D1124E457FE4F71815713F5 +:102D000006C07081471303C07281711103C0019620 +:102D10008770E9CFF62E662309F418C18091C101AE +:102D200081608093C101F12C11C1751308C0341367 +:102D300006C0611104C08091C101D801C3C04D8794 +:102D40005E878D859E856A8B0E941C156A89882303 +:102D5000E1F16623D1F12091C101822F82958F701C +:102D600090E0029774F08091BC019091BD0198872A +:102D70008F831986DB86CA862C87CE0107960E9430 +:102D8000DD1486E0F801ACEBB1E001900D928A957C +:102D9000E1F70E9494150E948615FF24F394D6C093 +:102DA0004D875E878D859E850E94501A292F22951A +:102DB0002F7030E0223031050CF0BCC09F7009F05C +:102DC000B6C0805E883008F4C1C0C8010E94DD141E +:102DD000E4CFC816D90608F453C0F601E81BF90B76 +:102DE000CF01883C910508F450C0F12C7C2DD98A84 +:102DF000C88A89890E944615ECEBF1E086E0DF0184 +:102E00001D928A95E9F70E948615A0C0751314C01B +:102E1000341312C0611110C08091C101F801858383 +:102E2000C8010E94DD1486E0ECEBF1E0DF011D92A9 +:102E30008A95E9F7FE2C8AC04D875E878D859E8531 +:102E40006A8B0E941C156A89882309F4BECF662309 +:102E500009F4BBCF2091C101822F82958F7090E041 +:102E600002970CF48ECF8091BC019091BD019A83A2 +:102E700089831B82DD82CC822E83CE0101967FCF97 +:102E8000809590958C0D9D1DACCFF62E662309F490 +:102E90009CCF75132EC034132CC02091C10120FD8E +:102EA0001FC0822F82958F70D9F0D80115962C9370 +:102EB00015978F3049F08F5F982F9295907F822FD2 +:102EC0008F70892B15968C93C8010E94DD1486E0C3 +:102ED000F801ACEBB1E001900D928A95E1F793CF48 +:102EE00086E0F801ACEBB1E001900D928A95E1F734 +:102EF0002DC04D875E878D859E850E941C15811192 +:102F000040CF8091C10181608093C101C8010E94BE +:102F1000DD141CC0662309F458CF4D875E878D856C +:102F20009E850E941C15882309F44FCF2ACF81115A +:102F300048CF0CC0243031050CF047CF9F7009F406 +:102F400040CFF8019581907F09F03BCF8F2D62969D +:102F50000FB6F894DEBF0FBECDBFDF91CF911F91AA +:102F60000F91FF90EF90DF90CF9008951F93CF9334 +:102F7000DF93CDB7DEB72C970FB6F894DEBF0FBE48 +:102F8000CDBF4F83588769877A878B879C87CE010F +:102F900007960E94EF15882369F08F8198852A850E +:102FA0003B85232BF1F19F3F09F063C08F3F09F070 +:102FB00060C037C086E0FE013796DE0111960190B1 +:102FC0000D928A95E1F76F817885EA85FB853097C8 +:102FD00041F17F3F11F46F3F21F120918B0130E0EF +:102FE000C90101968770992740918A0150E08417A2 +:102FF000950709F447C069837A83FD83EC8396E0E3 +:10300000929FD001939FB00D1124A457BE4FFE0193 +:10301000319601900D929A95E1F780938B010E9471 +:10302000651516E080918A0190918B018917C1F195 +:10303000189FC001112484579E4F0E94EF158823CA +:1030400079F1E0918A011E9FF0011124E457FE4FAF +:103050004081518162817381848195810E945515DF +:1030600080918A0190E001968770992780938A0168 +:10307000D9CF4F81588569857A858B859C850E943B +:103080005515CFCF0E94181510928B0110928A010E +:10309000ECEBF1E086E0DF011D928A95E9F7C1CF04 +:1030A0002C960FB6F894DEBF0FBECDBFDF91CF9147 +:1030B0001F910895EF92FF920F931F93CF93DF9389 +:1030C0008C01892B09F46CC0F12CEE24E394E80107 +:1030D0002196F8018491843740F4843008F051C07F +:1030E000813081F0823019F15BC0853709F444C02A +:1030F000A8F19CE7980F903708F052C08F770E9494 +:10310000631241C00E5F1F4FFE01C49180E28C0F1D +:10311000883048F4C7708E2D01C0880FCA95EAF731 +:103120000E94361B14C08C2F0E949B112DC00E5F75 +:103130001F4FFE01C49180E28C0F883058F4C77095 +:103140008E2D01C0880FCA95EAF70E943C1B0E9491 +:103150005D1B1AC08C2F0E94631216C00E5F1F4F9A +:10316000FE01C491CC2381F08FE99FE00197F1F734 +:1031700000C00000C150F6CF0E5F1F4FFE01F4905B +:1031800003C00E949B118E018F2D882309F49FCFCD +:10319000EFE9FFE03197F1F700C000008150F5CF73 +:1031A000DF91CF911F910F91FF90EF9008950895B7 +:1031B0006093C6017093C7018093C8019093C901C1 +:1031C0000C9404150F931F930091C6011091C70131 +:1031D0002091C8013091C901DC01CB01802B912BDA +:1031E000A22BB32B8093C6019093C701A093C80173 +:1031F000B093C9011F910F910C9404150F931F9365 +:103200000091C6011091C7012091C8013091C901F8 +:10321000DC01CB0180239123A223B3238093C60139 +:103220009093C701A093C801B093C9011F910F915A +:103230000C9404150F931F930091C6011091C701C0 +:103240002091C8013091C901DC01CB018027912771 +:10325000A227B3278093C6019093C701A093C8010A +:10326000B093C9011F910F910C9404151092C201E3 +:103270001092C3011092C4011092C5010C94041560 +:1032800041E050E060E070E004C0440F551F661F4D +:10329000771F8A95D2F74093C2015093C301609380 +:1032A000C4017093C5010C94041541E050E060E046 +:1032B00070E004C0440F551F661F771F8A95D2F730 +:1032C0008091C2019091C301A091C401B091C50148 +:1032D000482B592B6A2B7B2B4093C2015093C3017F +:1032E0006093C4017093C5010C94041541E050E053 +:1032F00060E070E004C0440F551F661F771F8A9579 +:10330000D2F740955095609570958091C20190914B +:10331000C301A091C401B091C501482359236A2378 +:103320007B234093C2015093C3016093C401709307 +:10333000C5010C94041541E050E060E070E004C069 +:10334000440F551F661F771F8A95D2F78091C201DF +:103350009091C301A091C401B091C501482759279C +:103360006A277B274093C2015093C3016093C40135 +:103370007093C5010C9404150F931F930091C20123 +:103380001091C3012091C4013091C501DC01CB0132 +:10339000802B912BA22BB32B8093C2019093C3015E +:1033A000A093C401B093C5011F910F910C94041513 +:1033B0000F931F930091C2011091C3012091C4018A +:1033C0003091C501DC01CB0180239123A223B323DB +:1033D0008093C2019093C301A093C401B093C5012F +:1033E0001F910F910C9404150F931F930091C2012C +:1033F0001091C3012091C4013091C501DC01CB01C2 +:1034000080279127A227B3278093C2019093C301FD +:10341000A093C401B093C5011F910F910C940415A2 +:103420000895CF92DF92EF92FF920F931F93CF9365 +:10343000DF938C01C090C601D090C701E090C80115 +:10344000F090C9018091C2019091C301A091C40183 +:10345000B091C501C82AD92AEA2AFB2ACFE1D0E0D7 +:10346000D701C6010C2E04C0B695A79597958795F0 +:103470000A94D2F780FF06C0B8018C2F0E9467071C +:10348000019721F4219760F780E001C08C2FDF9134 +:10349000CF911F910F91FF90EF90DF90CF90089503 +:1034A000CF93DF93EC010E94111ABE010E946707BF +:1034B000DF91CF910895CB010E94501A0895809119 +:1034C000CA0185958595859508958091CA01877073 +:1034D000089598E0899F90011124262B2093CA011A +:1034E0000C9455192091CA01809582238093CA01BA +:1034F000982F977069F430E0482F552747FD509575 +:103500002417350729F08595859585950C947619AE +:1035100008959091CA01977081E009F480E00895C0 +:1035200090910C01992321F090910D01911109C006 +:1035300020910E0130910F01F90132969FEF40E08A +:103540001FC0982F9695969596959F3050F5E091CF +:103550000E01F0910F01E90FF11D877021E030E0BD +:10356000A90102C0440F551F8A95E2F7CA01918153 +:10357000892B818308959F3F39F04F5F4E3041F092 +:1035800051915813F8CF0DC05111F7CF942FF5CFAB +:103590009F3F39F0F901E90FF11D97FDFA958283FC +:1035A0000895089590910C01992321F090910D01B7 +:1035B000911109C020910E0130910F01F90132964D +:1035C000205F3F4F1FC0982F9695969596959F30F8 +:1035D000F0F4E0910E01F0910F01E90FF11D8770F9 +:1035E00021E030E0A90102C0440F551F8A95E2F79F +:1035F000CA01809591818923818308953196E217CC +:10360000F30729F090819813F9CF1082F7CF08952E +:1036100081E090E0E0910E01F0910F01E80FF91FB9 +:103620001082019680319105A9F708959091DE01ED +:10363000892B8093DE01089580959091DE01892386 +:103640008093DE0108951092DE0108959091DD01CE +:10365000892B8093DD01089580959091DD01892368 +:103660008093DD0108951092DD0108959091DC01B1 +:10367000892B8093DC01089580959091DC0189234A +:103680008093DC0108951092DC0108958093CB01B2 +:1036900008951092CB01089580910E0190910F0131 +:1036A000FC0131969C01205F3F4F80E09191911188 +:1036B0008F5FE217F307D1F70895E0910E01F091C3 +:1036C0000F018091DE018083E0910E01F0910F01E6 +:1036D00090818091DD01892B8083E0910E01F09132 +:1036E0000F0190818091DC01892B80838091CB0137 +:1036F000882361F0E0910E01F0910F019081892BF8 +:1037000080830E944C1B81111092CB0180910E018D +:1037100090910F010C948B1020E0009739F0AC01D0 +:1037200041505109842395232F5FF7CF822F0895AD +:10373000CF92DF92EF92FF926C01EE24FF24C1142E +:10374000D104E104F10421F0C701B60120E101C078 +:1037500020E0C72ED82EE92EFF24C114D104E104A5 +:10376000F10419F0285FC701B6016B017C0154E038 +:10377000F694E794D794C7945A95D1F7C114D1041D +:10378000E104F10419F02C5FC701B6016B017C0163 +:1037900042E0F694E794D794C7944A95D1F7C114C0 +:1037A000D104E104F10419F02E5FC701B601DC0178 +:1037B000CB01B695A79597958795892B8A2B8B2B4F +:1037C00009F02F5F822FFF90EF90DF90CF90089548 +:1037D0008091F801843039F11092E00120E488E111 +:1037E00090E00FB6F894A895809360000FBE2093E8 +:1037F000600080E00E94790983B7817F846083BF85 +:1038000083B7816083BF7894889583B78E7F83BFA9 +:103810000FB6F894A895809160008861809360004D +:10382000109260000FBE089508950E9452030E94F6 +:1038300065030E94141C0E945A0491E0811101C08A +:1038400090E0892F08950E9418150E947F100C9413 +:10385000790982E084BD93E095BD9AEF97BD80938E +:103860006E0008952FB7F8948091E1019091E201E4 +:10387000A091E301B091E4012FBF0895CF92DF92B0 +:10388000EF92FF920F931F932FB7F8944091E101AD +:103890005091E2016091E3017091E4012FBF6A0150 +:1038A0007B01EE24FF248C0120E030E0C016D1061D +:1038B000E206F30610F4415051099A01281B390B16 +:1038C000C9011F910F91FF90EF90DF90CF90089565 +:1038D0001F920F920FB60F9211248F939F93AF9365 +:1038E000BF938091E1019091E201A091E301B09139 +:1038F000E4010196A11DB11D8093E1019093E201C5 +:10390000A093E301B093E401BF91AF919F918F9198 +:103910000F900FBE0F901F9018950E947C0DF89489 +:103920002FEF87EA91E6215080409040E1F700C0F8 +:10393000000087E090EBDC0180930102909302028B +:10394000A0930302B09304029CE088E10FB6F894C0 +:10395000A895809360000FBE90936000FFCF0E94F7 +:10396000E71C811102C00E94CD1C0E94F21C8093B2 +:10397000DF010E94FA1C90E09093F3018093F20122 +:1039800087FB882780F980930D010E94F61C682F21 +:1039900070E080E090E00C94D8186DEE7EEF80E04F +:1039A00090E00E94432360E082E090E00E94322396 +:1039B00060E083E090E00E94322360E084E090E0E9 +:1039C0000E94322360E085E090E00C94322380E096 +:1039D00090E00E942C2321E08D3E9E4F09F020E0D4 +:1039E000822F089582E090E00C94242383E090E0FD +:1039F0000C94242384E090E00C942423682F84E02A +:103A000090E00C9432238091E70180FF0BC060911D +:103A1000130185E0689FB001112475956795759530 +:103A200067952BC081FF09C06091130185E0689FF5 +:103A3000B00111247595679520C082FF07C0609181 +:103A4000130185E0689FB001112417C09091E8012F +:103A50009923D1F060911201961788F720911301F4 +:103A600085E0289F90011124929FA001939F500D03 +:103A7000112470E0CA010E94F6226038710540F4FA +:103A80006115710539F002C065E070E0862F089578 +:103A90008FE7089581E008958091E70180FF08C0D5 +:103AA0006091110170E0759567957595679521C0D6 +:103AB00081FF06C06091110170E07595679519C08E +:103AC00082FF04C06091110170E010C09091E80184 +:103AD0009923C1F0609110019617A0F78091110110 +:103AE000899FC001112470E00E94F62260387105A0 +:103AF00028F46115710521F0862F08958FE7089548 +:103B000081E0089561E070E0F4CF803F21F40E94ED +:103B1000031D819504C0813F29F40E94031D8093F9 +:103B2000EB010895823F21F40E94031D819504C09A +:103B3000833F29F40E94031D8093EA010895893F81 +:103B400019F40E944C1D05C08A3F31F40E944C1D9F +:103B500081958093EC0108958B3F21F40E944C1DC8 +:103B6000819504C08C3F29F40E944C1D8093ED0187 +:103B70000895843F21F48091E901816017C0853F59 +:103B800021F48091E901826011C0863F21F4809187 +:103B9000E90184600BC0873F21F48091E9018860CE +:103BA00005C0883F31F48091E90180618093E9018B +:103BB00008958D3F21F48091E70181600BC08E3F15 +:103BC00021F48091E701826005C08F3F29F4809144 +:103BD000E70184608093E7010895803F39F4809184 +:103BE000EB0187FF6CC01092EB0169C0813F29F4A3 +:103BF0008091EB011816BCF362C09091EA01823FFC +:103C000029F497FF5CC01092EA0159C0833F19F470 +:103C10001916CCF354C0893F41F48091EC01181679 +:103C20000CF04DC01092EC014AC08A3F29F48091FB +:103C3000EC0187FF44C0F6CF8B3F39F48091ED0152 +:103C400087FF3DC01092ED013AC08C3F29F480916E +:103C5000ED011816BCF333C0843F21F48091E901D3 +:103C60008E7F17C0853F21F48091E9018D7F11C0BF +:103C7000863F21F48091E9018B7F0BC0873F21F4BF +:103C80008091E901877F05C0883F31F48091E90187 +:103C90008F7E8093E90113C08D3F21F48091E7016D +:103CA0008E7F0BC08E3F21F48091E7018D7F05C090 +:103CB0008F3F29F48091E7018B7F8093E70180910A +:103CC000EA0181110EC08091EB0181110AC080913F +:103CD000EC01811106C08091ED01811102C01092AA +:103CE000E801089589EE91E00E9496100E94321C2E +:103CF0009093E6018093E50108951F93CF93DF939E +:103D00008091E5019091E6010E943E1CAC019091EA +:103D1000E801992321F02091140130E006C02091A0 +:103D200015018AE0289F900111244217530708F4D7 +:103D300086C08091EA01C091EB01D091EC01109115 +:103D4000ED01811107C0C11176C0D11174C01111EC +:103D500072C075C09F3F19F09F5F9093E8011816DD +:103D600024F40E94031D8093EA018091EA0187FFF9 +:103D700005C00E94031D81958093EA011C1624F45E +:103D80000E94031D8093EB018091EB0187FF05C02A +:103D90000E94031D81958093EB016091EA016623E7 +:103DA00039F1C091EB01CC2319F1772767FD7095AC +:103DB000872F972F0E94FD2123E333E343E35FE343 +:103DC0000E9461220E94C5216093EA016C2F77272F +:103DD00067FD7095872F972F0E94FD2123E333E322 +:103DE00043E35FE30E9461220E94C5216093EB01DF +:103DF0001D1624F40E944C1D8093EC018091EC016F +:103E000087FF05C00E944C1D81958093EC0111161F +:103E100024F40E944C1D8093ED018091ED0187FFF9 +:103E200005C00E944C1D81958093ED01DF91CF91DB +:103E30001F910C94721E9F3F09F08ECF96CFDF9199 +:103E4000CF911F910895E9EEF1E085E0DF011D9229 +:103E50008A95E9F71092E8011092E70108958330FE +:103E600081F128F4813059F08230D1F00895853005 +:103E700009F449C0B8F1863009F456C0089580911C +:103E80001501262F30E0280F311D2F3F310524F476 +:103E9000680F6093150108958FEF809315010895C1 +:103EA00080911401262F30E0280F311D2F3F31055E +:103EB00024F4680F6093140108958FEF8093140128 +:103EC000089580911301262F30E0280F311D2F3FD8 +:103ED000310524F4680F6093130108958FEF8093E8 +:103EE0001301089580911201262F30E0280F311D13 +:103EF0002F3F310524F4680F6093120108958FEF6E +:103F000080931201089580911101262F30E0280F2F +:103F1000311D2F3F310524F4680F6093110108957E +:103F20008FEF80931101089580911001262F30E0CA +:103F3000280F311D2F3F310524F4680F60931001C5 +:103F400008958FEF809310010895833011F128F4C4 +:103F5000813049F0823091F00895853081F120F16F +:103F60008630C1F1089580911501681720F4861BF1 +:103F70008093150108951092150108958091140100 +:103F8000681720F4861B8093140108951092140181 +:103F9000089580911301681720F4861B8093130104 +:103FA000089510921301089580911201681720F46A +:103FB000861B80931201089510921201089580913A +:103FC0001101681720F4861B809311010895109247 +:103FD0001101089580911001681720F4861B8093C9 +:103FE000100108951092100108950F931F938D31C1 +:103FF00009F471C008F045C0803109F485C008F5A6 +:10400000873009F46FC068F4863009F0ADC0809144 +:10401000DF01817F8E7F8093DF0181E08093EF015C +:10402000A4C08B3009F49EC08E3009F09DC08091F1 +:10403000DF0182FB222720F991E0922790FB82F991 +:104040006CC0863109F48EC060F4813109F08CC0F7 +:104050000E94181590910D0181E0892780930D0130 +:1040600081C0893109F47EC08B3109F07DC0809117 +:10407000DF0181FB222720F991E0922790FB81F953 +:104080004CC0853309F466C048F4873209F462C035 +:1040900008F44FC0893209F45DC066C0833438F437 +:1040A0008A3308F044C0883309F45CC05DC08334AF +:1040B00009F450C0883409F057C00E9418150FEF5A +:1040C00013ED20E3015010402040E1F700C0000054 +:1040D0000E948D1C47C00E947F210E947F100E9479 +:1040E000790940C09091DF01892F8095817080FB14 +:1040F00090F929F0966098609093DF0136C0997F1F +:10410000977F9093DF012EC08091DF0183FB2227F0 +:1041100020F991E0922790FB83F98093DF019923A6 +:1041200009F18091DF0181608093DF011BC0895319 +:1041300001C08D5141E050E060E070E08A019B01D8 +:1041400004C0000F111F221F331F8A95D2F7C90127 +:10415000B80104C061E070E080E090E00E94D818EF +:104160000E94181581E001C080E01F910F91089511 +:1041700080E0089580E008958E518A3030F4E82F71 +:10418000F0E0E65DFE4F8081089580E00895CF93D2 +:10419000C82F8091EF01813079F018F08230E9F179 +:1041A00086C0E0910E01F0910F018081813169F0AC +:1041B000823209F07EC009C0E0910E01F0910F013A +:1041C0008081813111F0823261F48C2F0E94B820FD +:1041D000811104C08C2F0E94F51F1DC081E090E06A +:1041E0001AC08C2F0E94BA20811114C0C43179F0FA +:1041F00048F4CB3079F0C03109F05FC082E08093A1 +:10420000EF0108C0C93219F0C83321F056C010922E +:10421000EF0153C081E0817052C0C93281F110F5C5 +:10422000C43169F1A8F4C73009F045C08AE0809331 +:10423000150194E19093140193E0909313018093FE +:10424000120188E08093110188E28093100133C04D +:1042500082EE8C0F863078F58C2F0E94BC208093E4 +:10426000EE0129C0CE34E9F020F4CB3421F56AE028 +:1042700013C0C13579F0C235F1F461E00DC0809111 +:10428000EE01882319F01092EE0115C081E08093B1 +:10429000EF0115C061E006C08091EE010E942F1F62 +:1042A0000AC06AE08091EE010E94A51F04C010922E +:1042B000EF0180E004C081E002C080E0ACCFCF918C +:1042C0000895E1E8F0E080818860808380818160EA +:1042D00080838FB7F89493E09093890090ED90934A +:1042E00088008FBF0895EFE6F0E0808182608083D0 +:1042F0000895EFE6F0E080818D7F80830895EFE6FA +:10430000F0E0908182E08927808308951F920F92C8 +:104310000FB60F9211242F933F934F935F936F9398 +:104320007F938F939F93AF93BF93EF93FF9380916E +:10433000F0019091F10101969093F1018093F001C9 +:10434000811103C082E00E947909E091F101E695B4 +:10435000E695F0E0EB54FB4FE4918091F0018E1371 +:1043600003C080E00E947909FF91EF91BF91AF9166 +:104370009F918F917F916F915F914F913F912F917D +:104380000F900FBE0F901F9018950E94CC2168943B +:10439000B1110C945B2208950E94402288F09F572F +:1043A00098F0B92F9927B751B0F0E1F0660F771F59 +:1043B000881F991F1AF0BA95C9F714C0B13091F04F +:1043C0000E945A22B1E008950C945A22672F782F48 +:1043D0008827B85F39F0B93FCCF386957795679514 +:1043E000B395D9F73EF490958095709561957F4F80 +:1043F0008F4F9F4F0895E89409C097FB3EF4909526 +:104400008095709561957F4F8F4F9F4F9923A9F0AD +:10441000F92F96E9BB279395F6958795779567953C +:10442000B795F111F8CFFAF4BB0F11F460FF1BC080 +:104430006F5F7F4F8F4F9F4F16C0882311F096E913 +:1044400011C0772321F09EE8872F762F05C06623C1 +:1044500071F096E8862F70E060E02AF09A95660F7A +:10446000771F881FDAF7880F9695879597F9089533 +:1044700057FD9058440F551F59F05F3F71F0479515 +:10448000880F97FB991F61F09F3F79F087950895FA +:10449000121613061406551FF2CF4695F1DF08C019 +:1044A000161617061806991FF1CF86957105610536 +:1044B00008940895E894BB2766277727CB0197F9DE +:1044C00008950E9474220C94E5220E94D72238F0AD +:1044D0000E94DE2220F0952311F00C94CE220C9441 +:1044E000D42211240C945B220E94382270F3959FF1 +:1044F000C1F3950F50E0551F629FF001729FBB27DB +:10450000F00DB11D639FAA27F00DB11DAA1F649F76 +:104510006627B00DA11D661F829F2227B00DA11D29 +:10452000621F739FB00DA11D621F839FA00D611DAF +:10453000221F749F3327A00D611D231F849F600DD0 +:10454000211D822F762F6A2F11249F5750409AF0F9 +:10455000F1F088234AF0EE0FFF1FBB1F661F771F85 +:10456000881F91505040A9F79E3F510580F00C9450 +:10457000CE220C945B225F3FE4F3983ED4F3869501 +:1045800077956795B795F795E7959F5FC1F7FE2BF0 +:10459000880F911D9695879597F9089597F99F67CC +:1045A00080E870E060E008959FEF80EC08950024BB +:1045B0000A941616170618060906089500240A9488 +:1045C00012161306140605060895092E0394000C0E +:1045D00011F4882352F0BB0F40F4BF2B11F460FF9D +:1045E00004C06F5F7F4F8F4F9F4F089597FB072E3B +:1045F00016F4009407D077FD09D00E94102307FC21 +:1046000005D03EF4909581959F4F089570956195E2 +:104610007F4F0895EE0FFF1F0590F491E02D099450 +:10462000AA1BBB1B51E107C0AA1FBB1FA617B707D8 +:1046300010F0A61BB70B881F991F5A95A9F78095F4 +:104640009095BC01CD010895F999FECF92BD81BD31 +:10465000F89A992780B50895A8E1B0E042E050E0CB +:104660000C944B23262FF999FECF92BD81BDF89A69 +:10467000019700B4021631F020BD0FB6F894FA9AF3 +:10468000F99A0FBE08950196272F0E9433230C94A8 +:104690003223DC01CB01FC01F999FECF06C0F2BD4B +:1046A000E1BDF89A319600B40D9241505040B8F7F0 +:0646B0000895F894FFCF0D +:1046B60002207B09090AE609B2097E090101CC013B +:1046C60028080A03140A404D363975042804F203F3 +:1046D600B9034C0365037E03970301020304050631 +:0446E60007080900B8 +:00000001FF diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c new file mode 100644 index 0000000000..87b77e42ef --- /dev/null +++ b/keyboards/ergodox/keymaps/tkuichooseyou/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 |CMD+{ | | CMD+}| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | Hyper| | Meh | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | + * |--------+------+------+------+------+------| LGui | | LGui |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Del |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, LGUI(LSFT(KC_LBRC)), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + 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 + LGUI(LSFT(KC_RBRC)), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MEH_T(KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, + KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_DELT, 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 +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/keyboards/ergodox/keymaps/tm2030/keymap.c b/keyboards/ergodox/keymaps/tm2030/keymap.c new file mode 100644 index 0000000000..ca80752263 --- /dev/null +++ b/keyboards/ergodox/keymaps/tm2030/keymap.c @@ -0,0 +1,242 @@ +/* TypeMatrix-2030-like keymap */ +#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 NUMR 8 // numeric layer +#define FNLR 9 // fn layer + +#define MDBL0 1 +#define MFNLR 2 + +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(NUMR), + 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(NUMR), + 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 + ), +/* Numeric 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 +[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, + 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_TRNS, 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 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | Calc | Mail |Browsr|------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | 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_CALC, KC_MAIL, KC_WHOM, + 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_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_invert(NUMR); + layer_invert(FNLR); + 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: numeric layer + if (layer_state & (1 << NUMR)) { + 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) { + 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/keyboards/ergodox/keymaps/tonyabra_osx/readme.md b/keyboards/ergodox/keymaps/tonyabra_osx/readme.md new file mode 100644 index 0000000000..f9d76efc23 --- /dev/null +++ b/keyboards/ergodox/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/keyboards/ergodox/keymaps/townk_osx/config.h b/keyboards/ergodox/keymaps/townk_osx/config.h new file mode 100644 index 0000000000..58ba690afd --- /dev/null +++ b/keyboards/ergodox/keymaps/townk_osx/config.h @@ -0,0 +1,92 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ErgoDox EZ +#define PRODUCT ErgoDox EZ +#define DESCRIPTION t.m.k. keyboard firmware for Ergodox + +/* key matrix size */ +#define MATRIX_ROWS 14 +#define MATRIX_COLS 6 + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#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 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 2 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION +//#define DEBUG_MATRIX_SCAN_RATE +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 3000 + +#endif diff --git a/keyboards/ergodox/keymaps/townk_osx/keymap.c b/keyboards/ergodox/keymaps/townk_osx/keymap.c new file mode 100644 index 0000000000..07e58a491b --- /dev/null +++ b/keyboards/ergodox/keymaps/townk_osx/keymap.c @@ -0,0 +1,285 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "led.h" +#include "keymap.h" +#include "timer.h" + +/* + +# Why this Layout + +This layout was based on Kinesis layout and other ErgoDox user layouts +available. It's target to be used on a MacOS but I'm pretty sure it can be +addapted to Windows and/or Linux easily. + +## Function Key + +The `fn` key work almost like it would in any other keyboard with the exception +it has a semi-sticky behavior. What does that mean? + +Well, if you press the `fn` and release it, the keyboard will be put on the +_function layout_ and the next key stroke will be processed as if the `fn` key +was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and +press any other key, when you release them, the keyboard leyout is back to +_normal_. + +While pressing the `fn` with the left hand and strikeing the other keys on the +right hand is farly easy, the same cannot being said for the other keys on the +left side. So, instead of trying to do contorcionism with my left hand, I +decided to do a semi-sticky version of `fn`. This way, I can press the `fn` +key with my pinky, release it and press the `1` key to issue an `F1` to the +operating system. + +## Key-Pad Key + +The `key pad` key is a layout switch key. If pressed, it will put the keyboard +on the _key pad layout_ and stay there until key is pressed again. + +This is used to make the keyboard behave mostly like a **num pad keyboard**. + +## Notes +- Regardless in which layout you are, keys from other layouts are not + accessible. This means that if you are on the _key pad layout_, the left hand + will be pretty much unusable. + Of course that like anything else, there are exceptions to this rule. + Modifiers should remain accessible throughout the layers. +- The _shift key_ is, like the _function key_, also configured to have a sticky + behavior. +- All sticky keys have a timeout of 3 seconds. + +*/ +#define BASE 0 +#define KEYPAD 1 +#define FN 2 + +#define MACRO_TMUX_ESC 10 +#define MACRO_TMUX_PASTE 11 +#define MACRO_OSX_COPY 12 +#define MACRO_OSX_PASTE 13 + +#define M_TESC M(MACRO_TMUX_ESC) +#define M_TPASTE M(MACRO_TMUX_PASTE) +#define M_OSXCPY M(MACRO_OSX_COPY) +#define M_OSXPST M(MACRO_OSX_PASTE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 | 2 | 3 | 4 | 5 | ESC | | Pwr | 6 | 7 | 8 | 9 | 0 | - _ | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Tab | Q | W | E | R | T | F16 | | F17 | Y | U | I | O | P | = + | + * |-----------+------+------+------+------+------| Meh | | Meh |------+------+------+------+------+-----------| + * | \ (Ctrl) | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " (Ctrl)| + * |-----------+------+------+------+------+------| F18 | | F19 |------+------+------+------+------+-----------| + * | LShift | Z | X | C | V | B | Hyper| | Hyper| N | M | , | . | / | RShift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | FN | KPAD |LCtrl | LAlt | LGui | | RGui | RAlt | RCtrl| KPAD | FN | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | M(0) | M(1) | | M(2) | M(3) | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + * + * M(0) = Ctrk+A Esc + * (this is used to issue the Esc key to the Tmux application) + * M(1) = Ctrk+A P + * (this is used to issue the Paste key to the Tmux application) + * M(2) = Cmd+C + * M(3) = Cmd+V + */ +[BASE]=KEYMAP(//left half + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_F16), + CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_FN2, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_F18), + KC_FN1, TG(KEYPAD), KC_LCTRL, KC_LALT, KC_LGUI, + M_TESC, M_TPASTE, + KC_HOME, + KC_BSPC, KC_DELT, KC_END, + //right half + KC_POWER, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MEH_T(KC_F17), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), + ALL_T(KC_F19), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN2, + KC_RGUI, KC_RALT, CTL_T(KC_LBRC), KC_FN3, KC_FN1, + M_OSXCPY, M_OSXPST, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), + +/* Keymap 1: KeyPad Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | LClk | RClk | MClk | | | | BTab | Clear| / | * | ^ | ( | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | M.Accel 2 | |ScrlUp| U |ScrlDn| | | | Tab | 7 | 8 | 9 | + | ) | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | M.Accel 1 | | L | D | R | |------| |------| 4 | 5 | 6 | - | | | + * |-----------+------+------+------+------+------| | |Return|------+------+------+------+------+-----------| + * | M.Accel 0 | |ScrlL | |ScrlR | | | | | 1 | 2 | 3 | = | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | XXXX | | | | | 0 | . | , | XXXX | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | XXXX | | + * | | |------| |------| XXXX | | + * | | | | | | XXXX | | + * `--------------------' `--------------------' + */ +[KEYPAD]=KEYMAP(//left half + KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, + KC_MS_ACCEL2, KC_NO, KC_MS_WH_UP, KC_MS_U, KC_MS_WH_DOWN, KC_NO, KC_NO, + KC_MS_ACCEL1, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, + KC_MS_ACCEL0, KC_NO, KC_MS_WH_LEFT, KC_NO, KC_MS_WH_RIGHT, 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, + //right half + LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH, KC_KP_ASTERISK, KC_CIRCUMFLEX, KC_LPRN, KC_NO, + KC_TAB, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_RPRN, KC_NO, + KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, KC_NO, KC_NO, + KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_EQUAL, KC_NO, KC_NO, + KC_KP_0, KC_KP_DOT, KC_KP_COMMA, KC_TRNS, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_TRNS, KC_NO), + +/* Keymap 2: Functions Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Vol. Up | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | Stop | Rw | Rec | FF | | XXXX | | XXXX | | | | | | Vol. Down | + * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| + * | CapsLock | Eject| Prev | Play | Next | |------| |------| Left | Down | Up | Right| | Mute | + * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| + * | L Shift | | | | | | XXXX | | XXXX | | | | | | R Shift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | XXXXX | | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | | XXXXX | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + * + * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer. + */ +[FN]=KEYMAP(//left half + KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_NO, KC_MEDIA_STOP, KC_MEDIA_REWIND, KC_MEDIA_SELECT, KC_MEDIA_FAST_FORWARD, KC_NO, KC_TRNS, + KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + //right half + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_MUTE, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO)}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_ONESHOT(FN), + [2] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. + [3] = ACTION_LAYER_TAP_KEY(KEYPAD, KC_RBRC), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + // MACRODOWN only works in this function + switch(id) { + case MACRO_TMUX_ESC: + if (record->event.pressed) { + return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END); + } + return MACRO(U(ESC), END); + case MACRO_TMUX_PASTE: + if (record->event.pressed) { + return MACRO(D(LCTRL), T(A), U(LCTRL), D(P), END); + } + return MACRO(U(P), END); + case MACRO_OSX_COPY: + if (record->event.pressed) { + return MACRO(D(LGUI), D(C), END); + } + return MACRO(U(C), U(LGUI), END); + case MACRO_OSX_PASTE: + if (record->event.pressed) { + return MACRO(D(LGUI), D(V), END); + } + return MACRO(U(V), U(LGUI), END); + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { +}; + +uint8_t current_layer = BASE; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_led_all_off(); + ergodox_led_all_set(LED_BRIGHTNESS_LO); + + switch (layer) { + case BASE: + current_layer = BASE; + break; + case KEYPAD: + current_layer = KEYPAD; + break; + default: + // none + break; + } + + // layer leds + if (current_layer == KEYPAD) { + ergodox_right_led_3_on(); + } + + // capslock + if (host_keyboard_leds() & (3<mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && // is shift pressed and there is no other + !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) || // modifier being pressed as well + (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) { // or the one shot shift didn't timed out + ergodox_right_led_1_set(LED_BRIGHTNESS_HI); + ergodox_right_led_1_on(); + } +}; diff --git a/keyboards/ergodox/keymaps/townk_osx/makefile.mk b/keyboards/ergodox/keymaps/townk_osx/makefile.mk new file mode 100644 index 0000000000..e757557bda --- /dev/null +++ b/keyboards/ergodox/keymaps/townk_osx/makefile.mk @@ -0,0 +1,4 @@ +# I don't want my keyboard blinking lights when is suppose to be asleep. +SLEEP_LED_ENABLE = no + +CONFIG_H = keymaps/$(KEYMAP)/config.h diff --git a/keyboards/ergodox/keymaps/townk_osx/readme.md b/keyboards/ergodox/keymaps/townk_osx/readme.md new file mode 100644 index 0000000000..c2853ca173 --- /dev/null +++ b/keyboards/ergodox/keymaps/townk_osx/readme.md @@ -0,0 +1,77 @@ +# Townk's Keymap + +Trying to take care of an enjury on my arm I borrow an ergonomic keyboard from +a frient ([Kinesis Advantage](http://www.kinesis-ergo.com/shop/advantage-pro-for-pc-mac/)). + +I really enjoyed my time with it but there were some anoyancies: + +* The curvature on the keys bothered me since I'm a Vim user and using the + motion keys on my editor was awkard. +* I had to spend too much time remapping the keyboard to make some symbol keys + more accessible to me. +* The fact that my hands had to stay close to each other was a bit stressfull + to my sholders. + +After a long research I find out that Ergodox EZ would be perfect for my needs +and purchase one. Before the keyboard even got in my hands I started to think +on the layout I would use on it and soon enough I planed couple adjustments +from the Kinesis I was using so far. + +## The layout + +Here are the layout mapping in images so you can have a glimpse on it: + +![Base Layout](townk_osx_base.png) +![fn Layout](townk_osx_fn.png) +![Keypad & Mouse Layout](townk_osx_keypad.png) + +Notice that, differently from the default behavior, my layer keys are not transparent +by default, which means that if you press any non-labeled white key, nothing will be +handled to the OS. + +### One shot keys + +It all started with the access to the function keys (F1, F2, F3...), since +those keys are located on a different layer I needed a way to press them with +minimal effort without disrupting my flow. + +For me, togglihg a layer to press a button and than toggle it back is a waste +of time (although I admit it's a single tap from what I have), so I decided to +do it as a one shot key. I could press it and the next pressed key would be +handled by the target layer which just after it delivers the key to the OS it +would get back to the previous layer. + +After setting up my layout to do just that I realized that occasionally I +would stop myseld on the middle of the process and the one shot layer would be +still triggered until I press any other key. So to prevent me from tapping +keys I don't want I added a timeout of 3 seconds for the one shot actions. + +Ultimately I tested the shift key as a one shot one and really like it, so +here you have it, all the one shot keys on my layout. + +## Glossary + +If you're not familiar with the Mac symbols used on some keys, here is a +reference to them: + +| Symbol | Description | +| :----: | ------------------- | +| ⌘ | Command | +| ⇪ | Caps Lock | +| ⇧ | Shift | +| ⌥ | Option (alt) | +| ⎋ | Esc | +| ⇥ | Tab forward | +| ⇤ | Tab backward | +| ⌃ | Control | +| ␣ | Space | +| ⌫ | Backspace | +| ⌦ | Delete | +| ⏎ | Enter | +| ⌤ | Return | +| ⌽ | Power on/off button | +| ↖ | Home | +| ↘ | End | +| ⇞ | Page up | +| ⇟ | Page down | +| ⌧ | Clear | diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png new file mode 100644 index 0000000000..f9bc8b443a Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png differ diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png new file mode 100644 index 0000000000..983b723480 Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png differ diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png new file mode 100644 index 0000000000..8f04b4327d Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png differ diff --git a/keyboards/ergodox/keymaps/twey/keymap.c b/keyboards/ergodox/keymaps/twey/keymap.c new file mode 100644 index 0000000000..019930f2a2 --- /dev/null +++ b/keyboards/ergodox/keymaps/twey/keymap.c @@ -0,0 +1,221 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_plover.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define STEN 2 // steno +#define MDIA 3 // media keys + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,---------------------------------------------------. ,---------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | STEN | | NONE | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+-------+-------------| |-------+------+------+------+------+------+--------| + * | Del | ' | , | . | P | Y | Esc | | Caps | F | G | C | R | L | / | + * |--------+------+------+------+-------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |-------| D | H | T | N | S | - | + * |--------+------+------+------+-------+------| Tab | | Enter |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+-------+-------------' `--------------+------+------+------+------+--------' + * | L1 | NONE | Grv | Left | Right | | Up | Down | [ | ] | L1 | + * `-----------------------------------' `----------------------------------' + * ,--------------. ,---------------. + * | PgUp | PgDn | | Home | End | + * ,------|-------|------| |-------+-------+------. + * | | | NONE | | AltGr | | | + * | Alt | Enter |------| |-------| Space | Ctrl | + * | | | Supr | | ~MDIA | | | + * `---------------------' `----------------------' + */ +// 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, M(0), + KC_DELT, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_ESC, + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_TAB, + MO(SYMB), KC_NO, KC_GRV, KC_LEFT,KC_RGHT, + KC_PGUP,KC_PGDN, + KC_NO, + KC_LALT,KC_ENT ,KC_LGUI, + // right hand + KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + KC_CAPS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z , KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB), + KC_HOME, KC_END, + KC_RALT, + MO(MDIA),KC_SPC,KC_RCTL + ), +/* 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 +), + +[STEN] = KEYMAP( // layout: layer 2: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR, + KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, + KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, + KC_TRNS,KC_NO, KC_NO, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_STAR, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_TRNS,PV_E, PV_U +), + +/* Keymap 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | Back | | Frwd | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Prev | Play | Next | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// 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_WBAK, KC_TRNS, KC_WFWD, KC_TRNS, KC_TRNS, + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(MDIA) // FN1 - Momentary Layer 3 (Media) +}; + +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != STEN) layer_on(STEN); else layer_off(STEN); + + register_code(PV_LP); + register_code(PV_LH); + register_code(PV_LR); + register_code(PV_O); + register_code(PV_RL); + register_code(PV_RG); + } else { + unregister_code(PV_LP); + unregister_code(PV_LH); + unregister_code(PV_LR); + unregister_code(PV_O); + unregister_code(PV_RL); + unregister_code(PV_RG); + } +} + +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: + toggle_steno(record->event.pressed); + 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) { + uint32_t layer0 = layer_state & (1UL << 0), + layer1 = layer_state & (1UL << 1), + layer2 = layer_state & (1UL << 2), + layer3 = layer_state & (1UL << 3); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + + if (layer1) ergodox_right_led_1_on(); + if (layer2) ergodox_right_led_2_on(); + if (layer3) ergodox_right_led_3_on(); +}; diff --git a/keyboards/ergodox/keymaps/twey/readme.md b/keyboards/ergodox/keymaps/twey/readme.md new file mode 100644 index 0000000000..979e4261e5 --- /dev/null +++ b/keyboards/ergodox/keymaps/twey/readme.md @@ -0,0 +1,17 @@ +# Twey's Home Configuration +## Layers +- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all + modifiers on thumb keys, as well as return and space. +- Layer 1: Default symbol layout. +- Layer 2: Plover-oriented stenography layer. +- Layer 3: Extended media/mouse layout. + +## Unusual features +The Plover key (top right key on the left half) also sends my Plover +‘toggle’ chord (SH-FT) when pressed, as well as toggling the steno +layer, so you can toggle between steno and typing modes with a single +keypress. + +If you want to use this feature, you'll need to add the +`commands.json` dictionary to your Plover dictionaries, or define the +toggle stroke (`PHROLG`) yourself. diff --git a/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c new file mode 100644 index 0000000000..8effa53b26 --- /dev/null +++ b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c @@ -0,0 +1,366 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +// readme +// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer. +// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of +// blanks so still discovering what I like. +// If you aren't familiar with a dead key, the idea is that you tap the dead key which switches the layout. the next key you hit +// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I +// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do. + + +// TODO: Define layer names that make sense for the ErgoDox EZ. +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define DEAD 3 // dead version of the symbols layer + +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 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | D | R | W | B | L1 | | L1 | J | F | U | P | ; | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Hyper | A | S | H | T | G |------| |------| Y | N | E | O | I | ' | + * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | M | C | V | | | | K | L | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | CTRL | OPT | CMD | | Left | Down | Up | Right| L3 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Bckspc| Space|------| |------| Space |Enter | + * | | | 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(1), + ALL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_NO, + KC_NO, KC_NO, KC_LCTL,KC_LALT,KC_LGUI, + KC_NO, KC_NO, + KC_HOME, + KC_BSPC,KC_SPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, + KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, + MEH_T(KC_NO),KC_K, KC_L, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, KC_FN4, + KC_NO, KC_NO, + KC_PGUP, + KC_PGDN,KC_SPC,KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_PERC, KC_AMPR, LSFT(KC_SLSH), LSFT(KC_EQL), KC_AT, KC_TRNS, + KC_TRNS, KC_SLSH, KC_LPRN, KC_EQL, KC_0, LSFT(KC_LBRC), + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_PIPE, 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_DLR, KC_UNDERSCORE, KC_LBRC, KC_RBRC, KC_EXLM, KC_F12, + KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_QUOT, + KC_TRNS, KC_SLSH, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 +), +/* Keymap 4: Dead Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[DEAD] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, M(100), M(101), M(102), M(103), M(104), KC_TRNS, + KC_TRNS, M(109), M(110), M(111), M(112), M(113), + KC_TRNS, M(120), M(121), M(122), M(123), M(124), 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, M(105), M(106), M(107), M(108), M(130), KC_F12, + M(114), M(115), M(116), M(117), M(118), M(119), + KC_TRNS, M(125), M(126), M(127), M(128), M(129), 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_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) + [2] = ACTION_LAYER_ON(BASE,0), // FN2 - Go back to the base layer + [3] = ACTION_LAYER_ON(DEAD,0), + [4] = ACTION_LAYER_TOGGLE(DEAD), +}; + +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 100: + layer_clear(); + return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END); + break; + case 101: + layer_clear(); + return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END); + break; + case 102: + layer_clear(); + return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END); + break; + case 103: + layer_clear(); + return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END); + break; + case 104: + layer_clear(); + return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END); + break; + case 105: + layer_clear(); + return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END); + break; + case 106: + layer_clear(); + return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END); + break; + case 107: + layer_clear(); + return MACRODOWN(T(LBRC), T(FN4), END); + break; + case 108: + layer_clear(); + return MACRODOWN(T(RBRC), T(FN4), END); + break; + case 130: + layer_clear(); + return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END); + break; + case 109: + layer_clear(); + return MACRODOWN(T(SLSH), T(FN4), END); + break; + case 110: + layer_clear(); + return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END); + break; + case 111: + layer_clear(); + return MACRODOWN(T(EQL), T(FN4), END); + break; + case 112: + layer_clear(); + return MACRODOWN(T(0), T(FN4), END); + break; + case 113: + layer_clear(); + return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END); + break; + case 114: + layer_clear(); + return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END); + break; + case 115: + layer_clear(); + return MACRODOWN(T(1), T(FN4), END); + break; + case 116: + layer_clear(); + return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END); + break; + case 117: + layer_clear(); + return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END); + break; + case 118: + layer_clear(); + return MACRODOWN(T(MINS), T(FN4), END); + break; + case 119: + layer_clear(); + return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END); + break; + case 120: + layer_clear(); + return MACRODOWN(T(6), T(FN4), END); + break; + case 121: + layer_clear(); + return MACRODOWN(T(7), T(FN4), END); + break; + case 122: + layer_clear(); + return MACRODOWN(T(8), T(FN4), END); + break; + case 123: + layer_clear(); + return MACRODOWN(T(9), T(FN4), END); + break; + case 124: + layer_clear(); + return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END); + break; + case 125: + layer_clear(); + return MACRODOWN(T(BSLS), T(FN4), END); + break; + case 126: + layer_clear(); + return MACRODOWN(T(2), T(FN4), END); + break; + case 127: + layer_clear(); + return MACRODOWN(T(3), T(FN4), END); + break; + case 128: + layer_clear(); + return MACRODOWN(T(4), T(FN4), END); + break; + case 129: + layer_clear(); + return MACRODOWN(T(5), T(FN4), END); + break; + + default: + return MACRO_NONE; + } + 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/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c new file mode 100644 index 0000000000..3444152bc3 --- /dev/null +++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c @@ -0,0 +1,233 @@ +#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 + +#define SGWK 0 // "sagewick", ⌘S ⌘⇥ +#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R +#define BBED 2 // BBEdit +#define TMNL 3 // Terminal +#define SAFA 4 // Safari +#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | L1 | | L1 | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ⌦ | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ⌫ | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' / L⌘ | + * |--------+------+------+------+------+------| L⌘ | | L⌘ |------+------+------+------+------+--------| + * | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / / ⌃| R⇧ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L⌃ | L⌥ | L⌘ | ← | → | | ↑ | ↓ | [ | ] | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | `~ | '" | | ⎋ | ⌫ | + * ,------|------|------| |------+--------+------. + * | | | PgUp | | PgDn | | | + * | | ⌫ |------| |------| ⇥ |Enter | + * | | | L⌥ | | L⌃ | | | + * `--------------------' `----------------------' + */ +// 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, TG(SYMB), + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(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, + KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, + KC_GRV, KC_QUOT, + KC_PGUP, + KC_SPC,KC_BSPC,KC_LALT, + // right hand + TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC , + KC_ESC, KC_BSPC, + KC_PGDN, + KC_LCTL, KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | [ | ] | { | } | " | | | | / | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | & | 1 | 2 | 3 | = | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | . | ← | → | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | Home | | | + * | | |------| |------| | | + * | | | | | End | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS, + KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, + KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_HOME, + KC_END , KC_TRNS, KC_TRNS +), +/* Keymap 2: Media keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | Home | | End | | | + * | | |------| |------| ⌘C | ⌘V | + * | | | | | ⌘X | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS, + KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR, + KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, + LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, + KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) +), +}; + +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 SGWK: + if (record->event.pressed) { + return MACRO( + I(10), + D(LGUI), T(S), U(LGUI), + D(LGUI), T(TAB), U(LGUI), + END); + } + break; + case SGWF: + if (record->event.pressed) { + return MACRO( + I(10), + D(LGUI), T(S), U(LGUI), + D(LGUI), T(TAB), U(LGUI), + D(LGUI), T(R), U(LGUI), + END); + } + break; + case BBED: + if (record->event.pressed) { + return MACRO( + I(10), + D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), + T(B), T(B), T(E), T(D), T(I), T(T), + T(ENT), + END); + } + break; + case TMNL: + if (record->event.pressed) { + return MACRO( + I(10), + D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), + T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L), + T(ENT), + END); + } + break; + case SAFA: + if (record->event.pressed) { + return MACRO( + I(10), + D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), + T(S), T(A), T(F), T(A), T(R), T(I), + T(ENT), + 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) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown new file mode 100644 index 0000000000..7bce7c6909 --- /dev/null +++ b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown @@ -0,0 +1,45 @@ +# The Zweihander Layout + +NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”. + +This layout is tuned for people who… + + +## use OS X + +This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts. + + +## mouse left-handed while doing other things with the right hand + +I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder: + +- Close Window (⌘W) +- Back (⌘[) +- Forward (⌘]) +- Open and Close Parent Folder (⌥⌘↓) +- Go Up and Close Just-Left Folder (⌥⌘↑) +- Cycle through open windows in current application (⌘\` and ⌘⇧\`) +- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥) +- Space (page down in browsers; Quick Look in the Finder) +- Shift-Space (page up in web browsers) + +Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word. + + +## use lots of modifier keys in OS X menu-item shortcuts + +I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include: + +- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫) +- Shut Down Without Asking for Confirmation (⇧⌥⌘ power) + + +## use Emacs-style shortcuts + +I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key. + + +## use spreadsheets + +All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. diff --git a/keyboards/ergodox_ez/190hotfix.sh b/keyboards/ergodox_ez/190hotfix.sh deleted file mode 100755 index bdc3adce22..0000000000 --- a/keyboards/ergodox_ez/190hotfix.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#a tool to fix broken keymaps as a result of pull request #190 -#changing the declaration of matrix_scan_user() and matrix_init_user() -# -#This script will save a copy of the specified keymap as keymap.c.bak -#and then create a new keymap.c with the definion corrected. -#this script must be run from the ergodox_ez directory -if [ $# -ne 1 ]; then - echo $0: usage: ./190hotfix keymap_name - exit 1 -fi - -echo Saving backup as ./keymaps/$1/keymap.c.bak ... -mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak - -echo Modifying ./keymaps/$1/keymap.c ... -cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c - -echo Complete! diff --git a/keyboards/ergodox_ez/Makefile b/keyboards/ergodox_ez/Makefile deleted file mode 100644 index 54edaed6d1..0000000000 --- a/keyboards/ergodox_ez/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make = Make software. -# -# make clean = Clean out built project files. -# -# That's pretty much all you need. To compile, always go make clean, -# followed by make. -# -# For advanced users only: -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -#---------------------------------------------------------------------------- - -# # project specific files -SRC = twimaster.c \ - matrix.c - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= yes # Unicode - -ifndef QUANTUM_DIR - include ../../Makefile -endif diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h deleted file mode 100644 index 2bb56731b2..0000000000 --- a/keyboards/ergodox_ez/config.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION QMK keyboard firmware for Ergodox EZ - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 - -#define TAPPING_TOGGLE 1 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -//#define DEBUG_MATRIX_SCAN_RATE - -#endif diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c deleted file mode 100644 index f0558d9f21..0000000000 --- a/keyboards/ergodox_ez/ergodox_ez.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "ergodox_ez.h" -#include "i2cmaster.h" - -bool i2c_initialized = 0; -uint8_t mcp23018_status = 0x20; - -void matrix_init_kb(void) { - // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") - TCCR1A = 0b10101001; // set and configure fast PWM - TCCR1B = 0b00001001; // set and configure fast PWM - - // (tied to Vcc for hardware convenience) - DDRB &= ~(1<<4); // set B(4) as input - PORTB &= ~(1<<4); // set B(4) internal pull-up disabled - - // unused pins - C7, D4, D5, D7, E6 - // set as input with internal pull-ip enabled - DDRC &= ~(1<<7); - DDRD &= ~(1<<7 | 1<<5 | 1<<4); - DDRE &= ~(1<<6); - PORTC |= (1<<7); - PORTD |= (1<<7 | 1<<5 | 1<<4); - PORTE |= (1<<6); - - ergodox_blink_all_leds(); - - matrix_init_user(); -} - -void ergodox_blink_all_leds(void) -{ - ergodox_led_all_off(); - ergodox_led_all_set(LED_BRIGHTNESS_HI); - ergodox_right_led_1_on(); - _delay_ms(50); - ergodox_right_led_2_on(); - _delay_ms(50); - ergodox_right_led_3_on(); - _delay_ms(50); - ergodox_right_led_1_off(); - _delay_ms(50); - ergodox_right_led_2_off(); - _delay_ms(50); - ergodox_right_led_3_off(); - //ergodox_led_all_on(); - //_delay_ms(333); - ergodox_led_all_off(); -} - -uint8_t init_mcp23018(void) { - mcp23018_status = 0x20; - - // I2C subsystem - if (i2c_initialized == 0) { - i2c_init(); // on pins D(1,0) - i2c_initialized++; - _delay_ms(1000); - } - - // set pin direction - // - unused : input : 1 - // - input : input : 1 - // - driving : output : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - i2c_stop(); - - // set pull-up - // - unused : on : 1 - // - input : on : 1 - // - driving : off : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - -out: - i2c_stop(); - - return mcp23018_status; -} - - diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h deleted file mode 100644 index db4ec867bc..0000000000 --- a/keyboards/ergodox_ez/ergodox_ez.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef ERGODOX_EZ_H -#define ERGODOX_EZ_H - -#include "quantum.h" -#include -#include -#include "i2cmaster.h" -#include - -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -#define CPU_16MHz 0x00 - -// I2C aliases and register addresses (see "mcp23018.md") -#define I2C_ADDR 0b0100000 -#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) -#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) -#define IODIRA 0x00 // i/o direction register -#define IODIRB 0x01 -#define GPPUA 0x0C // GPIO pull-up resistor register -#define GPPUB 0x0D -#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) -#define GPIOB 0x13 -#define OLATA 0x14 // output latch register -#define OLATB 0x15 - -extern uint8_t mcp23018_status; - -void init_ergodox(void); -void ergodox_blink_all_leds(void); -uint8_t init_mcp23018(void); -uint8_t ergodox_left_leds_update(void); - -#define LED_BRIGHTNESS_LO 15 -#define LED_BRIGHTNESS_HI 255 - - -inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } -inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } -inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } -inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } -inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } - -inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } -inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } -inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } -inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } -inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } - -inline void ergodox_led_all_on(void) -{ - ergodox_board_led_on(); - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); -} - -inline void ergodox_led_all_off(void) -{ - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); -} - -inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } -inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } -inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } -inline void ergodox_right_led_set(uint8_t led, uint8_t n) { - (led == 1) ? (OCR1A = n) : - (led == 2) ? (OCR1B = n) : - (OCR1C = n); -} - -inline void ergodox_led_all_set(uint8_t n) -{ - ergodox_right_led_1_set(n); - ergodox_right_led_2_set(n); - ergodox_right_led_3_set(n); -} - -#define KEYMAP( \ - \ - /* left hand, spatial positions */ \ - k00,k01,k02,k03,k04,k05,k06, \ - k10,k11,k12,k13,k14,k15,k16, \ - k20,k21,k22,k23,k24,k25, \ - k30,k31,k32,k33,k34,k35,k36, \ - k40,k41,k42,k43,k44, \ - k55,k56, \ - k54, \ - k53,k52,k51, \ - \ - /* right hand, spatial positions */ \ - k07,k08,k09,k0A,k0B,k0C,k0D, \ - k17,k18,k19,k1A,k1B,k1C,k1D, \ - k28,k29,k2A,k2B,k2C,k2D, \ - k37,k38,k39,k3A,k3B,k3C,k3D, \ - k49,k4A,k4B,k4C,k4D, \ - k57,k58, \ - k59, \ - k5C,k5B,k5A ) \ - \ - /* matrix positions */ \ - { \ - { k00, k10, k20, k30, k40, KC_NO }, \ - { k01, k11, k21, k31, k41, k51 }, \ - { k02, k12, k22, k32, k42, k52 }, \ - { k03, k13, k23, k33, k43, k53 }, \ - { k04, k14, k24, k34, k44, k54 }, \ - { k05, k15, k25, k35, KC_NO, k55 }, \ - { k06, k16, KC_NO, k36, KC_NO, k56 }, \ - \ - { k07, k17, KC_NO, k37,KC_NO, k57 }, \ - { k08, k18, k28, k38,KC_NO, k58 }, \ - { k09, k19, k29, k39, k49, k59 }, \ - { k0A, k1A, k2A, k3A, k4A, k5A }, \ - { k0B, k1B, k2B, k3B, k4B, k5B }, \ - { k0C, k1C, k2C, k3C, k4C, k5C }, \ - { k0D, k1D, k2D, k3D, k4D, KC_NO } \ - } - -#endif diff --git a/keyboards/ergodox_ez/i2cmaster.h b/keyboards/ergodox_ez/i2cmaster.h deleted file mode 100644 index 3917b9e6c0..0000000000 --- a/keyboards/ergodox_ez/i2cmaster.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef _I2CMASTER_H -#define _I2CMASTER_H 1 -/************************************************************************* -* Title: C include file for the I2C master interface -* (i2cmaster.S or twimaster.c) -* Author: Peter Fleury http://jump.to/fleury -* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device -* Usage: see Doxygen manual -**************************************************************************/ - -#ifdef DOXYGEN -/** - @defgroup pfleury_ic2master I2C Master library - @code #include @endcode - - @brief I2C (TWI) Master Software Library - - Basic routines for communicating with I2C slave devices. This single master - implementation is limited to one bus master on the I2C bus. - - This I2c library is implemented as a compact assembler software implementation of the I2C protocol - which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). - Since the API for these two implementations is exactly the same, an application can be linked either against the - software I2C implementation or the hardware I2C implementation. - - Use 4.7k pull-up resistor on the SDA and SCL pin. - - Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module - i2cmaster.S to your target when using the software I2C implementation ! - - Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. - - @note - The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted - to GNU assembler and AVR-GCC C call interface. - Replaced the incorrect quarter period delays found in AVR300 with - half period delays. - - @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury - - @par API Usage Example - The following code shows typical usage of this library, see example test_i2cmaster.c - - @code - - #include - - - #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet - - int main(void) - { - unsigned char ret; - - i2c_init(); // initialize I2C library - - // write 0x75 to EEPROM address 5 (Byte Write) - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - i2c_write(0x05); // write address = 5 - i2c_write(0x75); // write value 0x75 to EEPROM - i2c_stop(); // set stop conditon = release bus - - - // read previously written value back from EEPROM address 5 - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - - i2c_write(0x05); // write address = 5 - i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode - - ret = i2c_readNak(); // read one byte from EEPROM - i2c_stop(); - - for(;;); - } - @endcode - -*/ -#endif /* DOXYGEN */ - -/**@{*/ - -#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 -#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" -#endif - -#include - -/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_READ 1 - -/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_WRITE 0 - - -/** - @brief initialize the I2C master interace. Need to be called only once - @param void - @return none - */ -extern void i2c_init(void); - - -/** - @brief Terminates the data transfer and releases the I2C bus - @param void - @return none - */ -extern void i2c_stop(void); - - -/** - @brief Issues a start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_start(unsigned char addr); - - -/** - @brief Issues a repeated start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_rep_start(unsigned char addr); - - -/** - @brief Issues a start condition and sends address and transfer direction - - If device is busy, use ack polling to wait until device ready - @param addr address and transfer direction of I2C device - @return none - */ -extern void i2c_start_wait(unsigned char addr); - - -/** - @brief Send one byte to I2C device - @param data byte to be transfered - @retval 0 write successful - @retval 1 write failed - */ -extern unsigned char i2c_write(unsigned char data); - - -/** - @brief read one byte from the I2C device, request more data from device - @return byte read from I2C device - */ -extern unsigned char i2c_readAck(void); - -/** - @brief read one byte from the I2C device, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_readNak(void); - -/** - @brief read one byte from the I2C device - - Implemented as a macro, which calls either i2c_readAck or i2c_readNak - - @param ack 1 send ack, request more data from device
- 0 send nak, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_read(unsigned char ack); -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - - -/**@}*/ -#endif diff --git a/keyboards/ergodox_ez/keymaps/ab/Makefile b/keyboards/ergodox_ez/keymaps/ab/Makefile deleted file mode 100644 index b673c5ce52..0000000000 --- a/keyboards/ergodox_ez/keymaps/ab/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# Having a file like this allows you to override Makefile definitions -# for your own particular keymap - -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -COMMAND_ENABLE = no # Commands for debug and configuration - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json b/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json deleted file mode 100644 index e2badad4de..0000000000 --- a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json +++ /dev/null @@ -1,387 +0,0 @@ -[ - { - "name": "Beginner's Keymap for Ergodox-EZ", - "author": "Anand Babu Periasamy" - }, - [ - { - "x": 3.5 - }, - "#\n3\n\n\nF3", - { - "x": 10.5 - }, - ")\n0\n\n\nF10" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "@\n2\n\n\nF2", - { - "x": 1 - }, - "$\n4\n\n\nF4", - { - "x": 8.5 - }, - "(\n9\n\n\nF9", - { - "x": 1 - }, - "_\n-\n\n\nF11" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "%\n5\n\n\nF5", - "^\n6\n\n\nF6", - { - "x": 4.5 - }, - "&\n7\n\n\nF7", - "*\n8\n\n\nF8" - ], - [ - { - "y": -0.875, - "w": 1.5 - }, - "~\n`\n\n\nEsc", - "!\n1\n\n\nF1", - { - "x": 14.5 - }, - "+\n=\n\n\nF12", - { - "a": 7, - "w": 1.5 - }, - "Backspace\n\n\n\nBackspace" - ], - [ - { - "y": -0.375, - "x": 3.5 - }, - "E\n\n\n\n", - { - "x": 10.5 - }, - "I" - ], - [ - { - "y": -0.8799999999999999, - "x": 2.5 - }, - "W" - ], - [ - { - "y": -0.9950000000000001, - "x": 4.5, - "a": 4 - }, - "R", - { - "x": 8.5, - "a": 7 - }, - "U", - { - "x": 1 - }, - "O" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "T", - { - "h": 1.5 - }, - "", - { - "x": 4.5, - "h": 1.5 - }, - "", - "Y" - ], - [ - { - "y": -0.875, - "a": 6, - "w": 1.5 - }, - "Tab", - { - "a": 7 - }, - "Q", - { - "x": 14.5 - }, - "P", - { - "a": 4, - "w": 1.5 - }, - "|\n\\" - ], - [ - { - "y": -0.375, - "x": 3.5, - "a": 7 - }, - "D\n\n\n\n", - { - "x": 10.5 - }, - "K" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "S\n\n\n\n", - { - "x": 1, - "c": "#c4bcbc" - }, - "F\n\n\n\n", - { - "x": 8.5 - }, - "J", - { - "x": 1, - "c": "#cccccc" - }, - "L" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "G", - { - "x": 6.5 - }, - "H" - ], - [ - { - "y": -0.875, - "a": 4, - "fa": [ - 0, - 0, - 0, - 2 - ], - "w": 1.5 - }, - "\n\n\nCtrl\n\n\nCaps", - { - "a": 7 - }, - "A", - { - "x": 14.5, - "a": 4 - }, - ":\n;", - { - "a": 7, - "w": 1.5 - }, - "Enter" - ], - [ - { - "y": -0.625, - "x": 6.5, - "h": 1.5 - }, - "PgDn", - { - "x": 4.5, - "h": 1.5 - }, - "PgUp" - ], - [ - { - "y": -0.75, - "x": 3.5 - }, - "C\n\n\n\n", - { - "x": 10.5, - "a": 4 - }, - "<\n," - ], - [ - { - "y": -0.875, - "x": 2.5, - "a": 7 - }, - "X\n\n\n\n", - { - "x": 1 - }, - "V\n\n\n\n", - { - "x": 8.5 - }, - "M", - { - "x": 1, - "a": 4 - }, - ">\n." - ], - [ - { - "y": -0.875, - "x": 5.5, - "a": 7 - }, - "B", - { - "x": 6.5 - }, - "N" - ], - [ - { - "y": -0.875, - "w": 1.5 - }, - "Shift", - "Z", - { - "x": 14.5, - "a": 4 - }, - "?\n/", - { - "w": 1.5 - }, - "\"\n'" - ], - [ - { - "y": -0.375, - "x": 3.5, - "a": 7 - }, - "Alt\n\n\n\n", - { - "x": 10.5 - }, - "\n\n\n\n" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "\n\n\n\n", - { - "x": 1 - }, - "Alt\n\n\n\n", - { - "x": 8.5 - }, - "\n\n\n\n", - { - "x": 1 - }, - "\n\n\n\n" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "Ctrl\n\n\n\n", - "Esc", - { - "x": 14.5 - }, - "\n\n\n\n", - "Fn" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1 - }, - "", - "(" - ], - [ - { - "h": 2 - }, - "Space", - { - "h": 2 - }, - "Del", - "[" - ], - [ - { - "x": 2 - }, - "{" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3 - }, - ")", - "" - ], - [ - { - "x": -3 - }, - "]", - { - "h": 2 - }, - "Enter", - { - "h": 2 - }, - "" - ], - [ - { - "x": -3 - }, - "}" - ] -] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png b/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png deleted file mode 100644 index 740684461e..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/ab/keymap.c b/keyboards/ergodox_ez/keymaps/ab/keymap.c deleted file mode 100644 index df6f334600..0000000000 --- a/keyboards/ergodox_ez/keymaps/ab/keymap.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define FN1 1 // media layer - -#define CAPS_CTL CTL_T(KC_CAPS) // Caps on tap, Ctrl on hold. -#define COPY LCTL(KC_V) // C-c Copy -#define PASTE LCTL(KC_V) // C-v Paste -#define ZM_NRM LCTL(KC_0) // C-0 Zoom Normal -#define ZM_OUT LCTL(KC_MINS) // C-- Zoom Out -#define ZM_IN LCTL(KC_PLUS) // C-+ Zoom In -#define EM_UNDO LCTL(KC_UNDS) // C-_ Emacs Undo - -#define _MOB 1 // Mobile# -#define _CUS1 2 // Custom macro 1 -#define _CUS2 3 // Custom macro 2 - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BSpace | - * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | Fwd | | Back | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Caps/Ctl| A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | - * |--------+------+------+------+------+------| PgDn | | PgUp |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | ' | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Ctrl | Esc | LGui | Alt | Alt | | Left | Dn | Up | Right| Fn | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Copy | ( | | ) | Paste| - * ,------|------+------| |------+------+------. - * | | | [ | | ] | | | - * |Space | Del |------| |------| Enter|BSpace| - * | | | { | | } | | | - * `--------------------' `--------------------' - */ -// 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_6, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_WBAK, - CAPS_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN, - KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, KC_LALT, - COPY, KC_LCBR, - KC_LPRN, - KC_SPC, KC_DEL, KC_LBRC, - // Right hand - KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_WFWD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_PGUP, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, - KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(FN1), - KC_RCBR, PASTE, - KC_RPRN, - KC_RBRC, KC_ENT, KC_BSPC), -/* Keymap 1: Fn Keys, media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | BSpace | - * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | LClk | MClk | RClk | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Teensy| | ZmNrm| ZmOut| ZmIn | | Undo |VolDn |VolUp | Mute | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------+------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// FN1 Layer - [FN1] = KEYMAP( - // Left hand - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - 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_BTN1, KC_BTN3, KC_BTN2, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, ZM_NRM, ZM_OUT, ZM_IN, - KC_TRNS, KC_TRNS, - KC_TRNS, - RESET, KC_TRNS, KC_TRNS, - // Right hand - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, - KC_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, M(_MOB), KC_TRNS, M(_CUS1),M(_CUS2),KC_TRNS, KC_TRNS, - EM_UNDO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, 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 _MOB: // Your mobile# here. - return MACRODOWN(T(1), T(2), T(3), T(MINS), - T(1), T(2), T(3), T(MINS), - T(1), T(2), T(3), T(4), - END); - case _CUS1: // Your custom macro 1 - return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(SPC), END); - case _CUS2: // Your custom macro 2 - return MACRODOWN(T(L), T(S), T(SPC), T(MINS), T(L), T(ENT), END); - }; - 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/keyboards/ergodox_ez/keymaps/ab/readme.md b/keyboards/ergodox_ez/keymaps/ab/readme.md deleted file mode 100644 index 6b1ac2be35..0000000000 --- a/keyboards/ergodox_ez/keymaps/ab/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# Beginner's keymap for Ergodox-EZ -Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps. - -![Beginner's Keymap](keyboard-layout.png) - -#### Pros -* Easier to switch between regular keyboards and Ergodox-EZ. -* Easy on beginners. It has everything you need for your day to day usage. - -#### Cons -* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md) -* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys. - -#### Notes -* Ideally number key [6] should have started from the right-hand side of the keyboard. Doing so breaks the familiar QWERTY layout. -* Quote key ['] should have been placed between [:] and [Enter]. Due to lack of key space, it is placed below [Enter]. -* Double [Alt] keys are placed adjacent to each other for convenience. -* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users. -* Additional bracket keys are placed in the center of the keyboard for programmer's convenience. - - diff --git a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c deleted file mode 100644 index 052517d70e..0000000000 --- a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_german.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 | K | . | O | , | Y | L1 | | L1 | V | G | C | L | ß | Z | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | H | A | E | I | U |------| |------| D | T | R | N | S | F | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M | J | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space|Enter |------| |------| Tab |RShift| - * | | | 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, DE_K, DE_DOT, DE_O, DE_COMM,DE_Y, TG(SYMB), - KC_BSPC, DE_H, DE_A, DE_E, DE_I, DE_U, - KC_LSFT, CTL_T(DE_X), DE_Q, DE_AE, DE_UE, DE_OE, 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_ENT ,KC_END, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), DE_V, DE_G, DE_C, DE_L, DE_SS, DE_Z, - DE_D, DE_T, DE_R, DE_N, LT(MDIA, DE_S), GUI_T(KC_F), - MEH_T(KC_NO),KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), 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_RSFT - ), -/* 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/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md b/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md deleted file mode 100644 index f0dd3815c1..0000000000 --- a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md +++ /dev/null @@ -1,7 +0,0 @@ -# Basic implementation for k.o,y variant of the adnw layout - -adnw is a layout optimised for usage with german and english language -k.o,y is a variant of this layout -http://www.adnw.de/index.php?n=Main.SeitlicheNachbaranschl%C3%A4ge - -The os must use the de_DE layout diff --git a/keyboards/ergodox_ez/keymaps/alexjj/keymap.c b/keyboards/ergodox_ez/keymaps/alexjj/keymap.c deleted file mode 100644 index 448f62da02..0000000000 --- a/keyboards/ergodox_ez/keymaps/alexjj/keymap.c +++ /dev/null @@ -1,238 +0,0 @@ -#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 -#define UNIC 3 // unicode entry layer - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ | - * |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| - * | Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" | - * |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------| - * | LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 | - * ,------|------|------| |------+------+------. - * | | | PgUp | | Ins | | | - * | Enter| BkSp |------| |------| ~L1 |Space | - * | | | PgDn | | Del | | | - * `--------------------' `--------------------' - */ -// 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_6, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, - KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_HOME, - KC_LCTRL, LCTL(KC_C), LCTL(KC_V), KC_LEFT,KC_RGHT, - KC_FN3, KC_F5, - KC_PGUP, - KC_ENT,KC_BSPC,KC_PGDN, - // right hand - KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_RBRC, 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_END, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_DOWN,KC_UP, ALL_T(KC_NO),KC_GRV, KC_RCTRL, - KC_F2, KC_FN2, - KC_INS, - KC_DELT,KC_FN1, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr| - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | £ | | | | | | . | 0 | = |Alt+F4| - * `----------------------------------' `----------------------------------' - * ↑ ,-------------. ,-------------. - * THERE! | | | | | | - * ,------|------|------| |------+------+------. - * CAD = Ctrl + Alt + Delete | | | | | | | | - * | | |------| |------| | | - * | | | | | CAD | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - 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,M(3),KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, - // right hand - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, - 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, LALT(KC_F4), - KC_TRNS, KC_TRNS, - KC_TRNS, - LCTL(LALT(KC_DEL)), KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | TEENSY | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - RESET, 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_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK -), -/* Keymap 3: Unicode Entry - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Alt | | | E | | | | | | | 7 | 8 | 9 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Alt | | | C | | B | | | | | 1 | 2 | 3 | + | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * WINDOWS ONLY SETUP!! | ~L3 | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | Alt | Alt |------| |------| Alt | Alt | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[UNIC] = KEYMAP( // layer 3 : Unicode Entry - // left hand - KC_LALT, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, - KC_LALT, KC_TRNS, KC_TRNS, KC_E, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LALT, KC_A, KC_TRNS, KC_D, KC_F, KC_TRNS, - KC_LALT, KC_TRNS, KC_TRNS, KC_C, KC_TRNS, KC_B, KC_TRNS, - KC_LALT, KC_LALT, KC_LALT, KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_LALT,KC_LALT, KC_TRNS, - // right hand - KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS,KC_PPLS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TRNS, - KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_TRNS, - KC_P0, KC_P0, KC_P0, KC_PPLS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS,KC_LALT, KC_LALT - ), -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) - [2] = ACTION_LAYER_TAP_TOGGLE(MDIA), // FN2 - Momentary Layer 2 (Media) - [3] = ACTION_LAYER_TAP_TOGGLE(UNIC) // FN3 - Momentary Layer 3 (Unicode entry) -}; - -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); - } - case 3: // this would trigger when you hit a key mapped as M(3) - if (record->event.pressed) { - return MACRO( I(255), D(LALT), T(P1), T(P5), T(P6), U(LALT), 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) { - - 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; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/alexjj/readme.md b/keyboards/ergodox_ez/keymaps/alexjj/readme.md deleted file mode 100644 index 239e32d399..0000000000 --- a/keyboards/ergodox_ez/keymaps/alexjj/readme.md +++ /dev/null @@ -1,179 +0,0 @@ -Englishman in New York -=========================== - -:microphone: :tea: - -About ------- - -After using the massdrop configurator to get the basics, I wanted to add a -little extra to my ergodox. Notably the Hyper hotkey, the press and hold, -and a way to have my beloved £ :pound: symbol available[1](#unicode). Why not switch to a GB -layout? Well the computers I use are US keymap'd and I can't always change -that. Plus I've got used to 2/@ and 3/# and moving to the ergodox was hard -enough. :sweat_smile: - -I started from the default and edited from there as I needed. It's somewhat -similar to a regular layout, particularly R1 and shift/controls. I ended up -with a few keys that were blank, so I'm testing out some shortcuts. Alt+F4 for -quitting things in Windows, is one example, but I felt it was better placed on -the 1st layer - in case of fat fingers. - -Layout -------- - -![Layout](rl-layout.jpg "Isn't it lovely") - -### Base Layer - -``` -,--------------------------------------------------. ,--------------------------------------------------. -| ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ | -|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| -| Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" | -|--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------| -| LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 | - ,------|------|------| |------+------+------. - | | | PgUp | | Ins | | | - | Enter| BkSp |------| |------| ~L1 |Space | - | | | PgDn | | Del | | | - `--------------------' `--------------------' -``` - -### Symbol Layer - -``` -,--------------------------------------------------. ,--------------------------------------------------. -| | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr| -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | £ | | | | | | . | 0 | = |Alt+F4| - `----------------------------------' `----------------------------------' - ↑ ,-------------. ,-------------. - THERE! | | | | | | - ,------|------|------| |------+------+------. - CAD = Ctrl + Alt + Delete | | | | | | | | - | | |------| |------| | | - | | | | | CAD | | | - `--------------------' `--------------------' -``` -### Media Layer - -Not touched this, not used either. - -``` -,--------------------------------------------------. ,--------------------------------------------------. -| TEENSY | | | | | | | | | | | | | | | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| | | | MsUp | | | | | | | | | | | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | | | | | | | | | | | Prev | Next | | | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | |Brwser| - | | |------| |------| |Back | - | | | | | | | | - `--------------------' `--------------------' -``` -### Unicode Layer - -Used to enter/test unicode input on Windows. All numbers are numpad keys. - -``` -,--------------------------------------------------. ,--------------------------------------------------. -| Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Alt | | | E | | | | | | | 7 | 8 | 9 | + | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| Alt | | | C | | B | | | | | 1 | 2 | 3 | + | | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - WINDOWS ONLY SETUP!! | ~L3 | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | Alt | Alt |------| |------| Alt | Alt | - | | | | | | | | - `--------------------' `--------------------' -``` - - -Usage ------- - -~L1 / L2 / L3 will momentarily switch to a layer if held and another key is pressed. -If pressed and released will remain on layer until pressed again. - -### Unicode - -This layout is for Windows only. To enter a character Press and Hold Alt, type + and hex code then release Alt. - -Changelog ------------ - -### [0.2.1] - 2016-04-05 - -* Changed £ to alt code in Windows. Windows sucks at unicode. - -### [0.2.0] - 2016-03-27 - -* Added unicode layer -* Moved Copy/Paste to left hand side -* Switched Enter and Space (again) -* Added L3 (unicode layer) toggle -* Removed Press and Hold for Alt on right hand size (/) -* Swapped Volume Up/Down to match arrows -* Tried fixing £ macro -* Removed * in the matrix function things (upstream change) - -### [0.1.1] - 2016-03-23 - -* Changed £ input to a macro - - -### [0.1.0] - 2016-03-22 - -After actually using the keyboard, I've made some changes: - -* Swapped Enter and Space -* Moved backspace to thumb keys (top right still remains) -* Added Ctrl+Alt+Delete -* Added Teensy Reset on 2nd layer -* Switched Up and Down -* Changed copy/paste to be Ctrl+c and Ctrl+v as KC_COPY/PASTE didn't work (in Windows) -* Moved ~L2 to replace +L1 after learning how the function works (notes above) -* Hopefully fixed GBP symbol (unicode enabled in MakeFile) - -### [0.0.1] - 2016-03-21 - -First version - - -Issues -------- - -Space for feedback and notes for future improvements - ----- -1: For Windows only, and you have to edit the [registry](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input). diff --git a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg b/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg deleted file mode 100644 index e4e92bf464..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/COPYING b/keyboards/ergodox_ez/keymaps/algernon/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox_ez/keymaps/algernon/Makefile deleted file mode 100644 index 6bf3976b9d..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -BOOTMAGIC_ENABLE=no -COMMAND_ENABLE=no -SLEEP_LED_ENABLE=no -UNICODE_ENABLE=no -FORCE_NKRO ?= yes -DEBUG_ENABLE = no -CONSOLE_ENABLE = no -TAP_DANCE_ENABLE = yes -KEYLOGGER_ENABLE ?= yes - -ifeq (${FORCE_NKRO},yes) -OPT_DEFS += -DFORCE_NKRO -endif - -ifeq (${KEYLOGGER_ENABLE},yes) -OPT_DEFS += -DKEYLOGGER_ENABLE -CONSOLE_ENABLE = yes -endif - -KEYMAP_VERSION = $(shell \ - if [ -d "${KEYMAP_PATH}/.git" ]; then \ - cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ - else echo QMK; fi) - -KEYMAP_BRANCH = $(shell \ - if [ -d "${KEYMAP_PATH}/.git" ]; then \ - cd "${KEYMAP_PATH}"; \ - fi; \ - git rev-parse --abbrev-ref HEAD 2>/dev/null) - -OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\" - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergodox_ez/keymaps/algernon/config.h b/keyboards/ergodox_ez/keymaps/algernon/config.h deleted file mode 100644 index 9bb1025be5..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/config.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CONFIG_ALGERNON_H -#define CONFIG_ALGERNON_H - -#include "../../config.h" - -#undef MOUSEKEY_TIME_TO_MAX -#undef MOUSEKEY_MAX_SPEED - -#define MOUSEKEY_TIME_TO_MAX 1 -#define MOUSEKEY_MAX_SPEED 2 - -#undef MOUSEKEY_DELAY -#define MOUSEKEY_DELAY 0 - -#undef MOUSEKEY_WHEEL_DELAY -#define MOUSEKEY_WHEEL_DELAY 0 - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 3000 - -#undef LOCKING_SUPPORT_ENABLE -#undef LOCKING_RESYNC_ENABLE - -#undef LEADER_TIMEOUT -#define LEADER_TIMEOUT 1000 - -#endif diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png deleted file mode 100644 index 3df68ea53d..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/adore-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png deleted file mode 100644 index 7b25a05b3a..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png b/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png deleted file mode 100644 index 356035e0a6..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/heatmap.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png deleted file mode 100644 index 104a9544d0..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png deleted file mode 100644 index 16d29e124d..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png deleted file mode 100644 index 698d11e5f2..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png deleted file mode 100644 index fe3c03c932..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox_ez/keymaps/algernon/keymap.c deleted file mode 100644 index c120872929..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/keymap.c +++ /dev/null @@ -1,1216 +0,0 @@ -/* - * algernon's ErgoDox EZ layout, please see the readme.md file! - */ - -#include "ergodox_ez.h" -#include "led.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "mousekey.h" -#include "timer.h" -#include "keymap_plover.h" -#include "eeconfig.h" - -/* Layers */ - -enum { - BASE = 0, - ADORE, - ARRW, - APPSEL, - HUN, - NMDIA, - OHLFT, - OHRGT, - PLVR, -}; - -/* Macros */ - -enum { - NONE = 0, - // Buttons that do extra stuff - A_GUI, - A_PLVR, - A_ESC, - A_MPN, - - // Function / number keys - KF_1, // 1, F1 - KF_2, // 2, F2 - KF_3, // ... - KF_4, - KF_5, - KF_6, - KF_7, - KF_8, - KF_9, - KF_10, - KF_11, // =, F11 - - // Application select keys - APP_SLK, // Slack - APP_EMCS, // Emacs - APP_TERM, // Terminal - APP_CHRM, // Chrome - APP_MSIC, // Music - - // Diagonal mouse movement - A_MUL, - A_MUR, - A_MDL, - A_MDR, - - // Hungarian layer keys - HU_AA, // Á - HU_OO, // Ó - HU_EE, // É - HU_UU, // Ú - HU_II, // Í - HU_OE, // Ö - HU_UE, // Ü - HU_OEE, // Ő - HU_UEE, // Ű - - // One-handed layout specials - OH_BSSPC, - OH_ENTSFT, - OH_BASE, - OH_LEFT, - OH_RIGHT, -}; - -/* Fn keys */ - -enum { - F_BSE = 0, - F_HUN, - F_GUI, - F_SFT, - F_ALT, - F_CTRL -}; - -/* Custom keycodes */ - -enum { - CT_CLN = 0, - CT_MNS, - CT_TA, -}; - -/* States & timers */ - -uint16_t gui_timer = 0; - -uint16_t kf_timers[12]; - -uint16_t oh_base_timer = 0; -uint16_t oh_bsspc_timer = 0; -uint16_t oh_entsft_timer = 0; - -#define OH_BLINK_INTERVAL 500 - -uint8_t oh_left_blink = 0; -uint16_t oh_left_blink_timer = 0; -uint8_t oh_right_blink = 0; -uint16_t oh_right_blink_timer = 0; - -#if KEYLOGGER_ENABLE -bool log_enable = false; -#endif - -bool time_travel = false; - -/* The Keymap */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Keymap 0: Base Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 1: Adore layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[ADORE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U -,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS - ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 2: Arrow layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | Home | Up | End | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | Left | Down | Rght | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| PgUp | PgDn | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[ARRW] = KEYMAP( -// left 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_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_TRNS - ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_PGUP ,KC_PGDN - ), - -/* Keymap 3: Application select layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[APPSEL] = KEYMAP( -// left hand - KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS - ), - - -/* Keymap 4: Hungarian Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | Ő | | Ű | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | Ö | | Ü | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | BASE | | | - * `--------------------' `--------------------' - */ - -[HUN] = KEYMAP( -// left hand - KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO -,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) -,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS - - // right hand - ,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_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 ,KC_NO ,KC_NO - - ,KC_NO ,KC_NO - ,KC_NO - ,F(F_BSE),KC_TRNS ,KC_TRNS - ), - -/* Keymap 5: Navigation & Media layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| - * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| - * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | - * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| - * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Mute | VlUp | | BASE | MClk | - * ,------|------|------| |------+------+------. - * | | | VlDn | | Prev |Left |Right | - * | SPC | Enter|------| |------| Click| Click| - * | | | ESC | | Next | | | - * `--------------------' `--------------------' - */ -[NMDIA] = KEYMAP( -// left hand - KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) -,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO -,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO -,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_MUTE ,KC_VOLU - ,KC_VOLD - ,KC_SPC,KC_ENTER,M(A_ESC) - - // right hand - ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR - ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO - ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP - ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,KC_TRNS ,KC_MS_BTN3 - ,KC_MPRV - ,KC_MNXT ,KC_BTN1 ,KC_BTN2 - ), - -/* Keymap 6: One-handed, left side - * - * ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| - * |-----------+------+------+------+------+-------------| - * | Tab | ' | , | . | P | Y | [ | - * |-----------+------+------+------+------+------| | - * | - | A | O | E | U | I |------| - * |-----------+------+------+------+------+------| ( | - * | Play/Pause| ; | Q | J | K | X | | - * `-----------+------+------+------+------+-------------' - * | Home | End | Down | Up | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHLFT] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) -,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 7: One-handed, right side - * - * ,-----------------------------------------------------. - * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| - * |-----------+------+------+------+------+-------------| - * | / | L | R | C | G | F | ] | - * |-----------+------+------+------+------+------| | - * | \ | S | N | T | H | D |------| - * |-----------+------+------+------+------+------| ) | - * | Stop | Z | V | W | M | B | | - * `-----------+------+------+------+------+-------------' - * | PgDn | PgUp | Right| Left | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHRGT] = KEYMAP( -// left hand - M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) -,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC -,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D -,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN -,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 8: Steno for Plover - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | BASE | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | T | P | H | |------| |------| | F | P | L | T | D | - * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| - * | | | K | W | R | | | | | | R | B | G | S | Z | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | A | O |------| |------| E | U | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[PLVR] = KEYMAP( -// left hand -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), -KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, -KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, -KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - PV_A, PV_O, KC_NO, - - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, - PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, - PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO,PV_E, PV_U - ), - -}; - -const uint16_t PROGMEM fn_actions[] = { - [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) - ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) - ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) - ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) - ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) - ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) -}; - -void toggle_steno(int pressed) -{ - uint8_t layer = biton32(layer_state); - - if (pressed) { - if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); - - register_code(PV_LP); - register_code(PV_LH); - register_code(PV_LR); - register_code(PV_O); - register_code(PV_RL); - register_code(PV_RG); - } else { - unregister_code(PV_LP); - unregister_code(PV_LH); - unregister_code(PV_LR); - unregister_code(PV_O); - unregister_code(PV_RL); - unregister_code(PV_RG); - } -} - -macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) -{ - uint8_t need_shift = 0; - uint8_t hold_shift = 0; - - if (!record->event.pressed) - return MACRO_NONE; - - layer_off (HUN); - - if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { - hold_shift = 1; - need_shift = 1; - unregister_code (KC_LSFT); - } - if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { - need_shift = 1; - hold_shift = 0; - unregister_code (KC_LSFT); - } - - clear_oneshot_mods (); - - register_code (KC_RALT); - unregister_code (KC_RALT); - if (accent == (KC_DQT)) { - register_code (KC_RSFT); - } - register_code (accent); - unregister_code (accent); - if (need_shift && accent != (KC_DQT)) { - register_code (KC_RSFT); - } else if (accent == (KC_DQT) && !need_shift) { - unregister_code (KC_RSFT); - } - register_code (hun_char); - unregister_code (hun_char); - if (need_shift || accent == (KC_DQT)) - unregister_code (KC_RSFT); - if (hold_shift) - register_code (KC_LSFT); - - return MACRO_NONE; -} - -void ang_handle_kf (keyrecord_t *record, uint8_t id) -{ - uint8_t code = id - KF_1; - - if (record->event.pressed) { - kf_timers[code] = timer_read (); - } else { - uint8_t kc; - - if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc = KC_F1 + code; - } else { - if (id == KF_11) - kc = KC_EQL; - else - kc = KC_1 + code; - } - - register_code (kc); - unregister_code (kc); - } -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case A_ESC: - if (record->event.pressed) { - if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { - clear_oneshot_mods (); - } else { - register_code (KC_ESC); - } - layer_off (HUN); - } else { - unregister_code (KC_ESC); - } - break; - - case A_MPN: - if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); - - if (oneshot) - clear_oneshot_mods (); - unregister_code (KC_LSFT); - - register_code (KC_MPRV); - unregister_code (KC_MPRV); - - if (!oneshot) - register_code (KC_LSFT); - } else { - return MACRO (T(MNXT), END); - } - } - break; - - /* Hungarian layer */ - case HU_AA: - return ang_do_hun (record, KC_QUOT, KC_A); - case HU_OO: - return ang_do_hun (record, KC_QUOT, KC_O); - case HU_EE: - return ang_do_hun (record, KC_QUOT, KC_E); - case HU_UU: - return ang_do_hun (record, KC_QUOT, KC_U); - case HU_II: - return ang_do_hun (record, KC_QUOT, KC_I); - case HU_OE: - return ang_do_hun (record, KC_DQT, KC_O); - case HU_UE: - return ang_do_hun (record, KC_DQT, KC_U); - case HU_OEE: - return ang_do_hun (record, KC_EQL, KC_O); - case HU_UEE: - return ang_do_hun (record, KC_EQL, KC_U); - - /* Mouse movement */ - case A_MUL: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MUR: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_MDL: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MDR: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - /* Plover base */ - case A_PLVR: - toggle_steno(record->event.pressed); - break; - - /* GUI & AppSel */ - case A_GUI: - if (record->event.pressed) { - register_code (KC_LGUI); - if (record->tap.count && !record->tap.interrupted) { - if (record->tap.count >= 2) { - register_code (KC_W); - layer_on (APPSEL); - set_oneshot_layer (APPSEL, ONESHOT_START); - } - } else { - record->tap.count = 0; - } - gui_timer = 0; - } else { - if (record->tap.count >= 2) - { - unregister_code (KC_W); - clear_oneshot_layer_state (ONESHOT_PRESSED); - } - gui_timer = timer_read (); - } - break; - - case APP_SLK: - return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); - - case APP_EMCS: - return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); - - case APP_TERM: - return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); - - case APP_CHRM: - return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); - - case APP_MSIC: - return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); - - /* Function keys */ - case KF_1 ... KF_11: - ang_handle_kf (record, id); - break; - - /* 1HAND layout */ - case OH_BASE: - if (record->event.pressed) { - oh_base_timer = timer_read (); - } else { - if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { - layer_clear (); - } else { - return MACRO (T(APP), END); - } - } - break; - - case OH_BSSPC: - if (record->event.pressed) { - oh_bsspc_timer = timer_read (); - } else { - if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { - return MACRO (T(BSPC), END); - } else { - return MACRO (T(SPC), END); - } - } - break; - - case OH_ENTSFT: - if (record->event.pressed) { - oh_entsft_timer = timer_read (); - } else { - if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT)) - unregister_code (KC_LSFT); - else - register_code (KC_LSFT); - } else { - return MACRO (T(ENT), END); - } - } - break; - - case OH_LEFT: - if (record->event.pressed) { - layer_move (OHLFT); - oh_left_blink = 1; - oh_left_blink_timer = timer_read (); - ergodox_right_led_1_on (); - } - break; - - case OH_RIGHT: - if (record->event.pressed) { - layer_move (OHRGT); - oh_right_blink = 1; - oh_right_blink_timer = timer_read (); - ergodox_right_led_3_on (); - } - break; - } - return MACRO_NONE; -}; - -uint8_t is_adore = 0; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - uint8_t dl; - - ergodox_led_all_on(); - for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { - ergodox_led_all_set (i); - _delay_ms (5); - } - _delay_ms(1000); - for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { - ergodox_led_all_set (i); - _delay_ms (10); - } - ergodox_led_all_off(); - - if (!eeconfig_is_enabled()) - eeconfig_init(); - dl = eeconfig_read_default_layer (); - if (dl == (1UL << ADORE)) - is_adore = 1; -}; - -LEADER_EXTERNS(); - -void ang_do_unicode (void) { - register_code (KC_RCTL); - register_code (KC_RSFT); - register_code (KC_U); - unregister_code (KC_U); - unregister_code (KC_RSFT); - unregister_code (KC_RCTL); - _delay_ms (100); -} - -void ang_tap (uint16_t codes[]) { - for (int i = 0; codes[i] != 0; i++) { - register_code (codes[i]); - unregister_code (codes[i]); - _delay_ms (50); - } -} - -#define TAP_ONCE(code) \ - register_code (code); \ - unregister_code (code) - -void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - } else if (state->count == 2) { - register_code (KC_SCLN); - } -} - -void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (state->count == 2) { - unregister_code (KC_SCLN); - } -} - -void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_MINS); - } else if (state->count == 2) { - register_code (KC_RSFT); - register_code (KC_MINS); - } -} - -void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_MINS); - } else if (state->count == 2) { - unregister_code (KC_RSFT); - unregister_code (KC_MINS); - } -} - -typedef struct { - bool layer_toggle; - bool sticky; - bool finished_once; -} td_ta_state_t; - -void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (td_ta->finished_once) { - return; - } - - if (td_ta->sticky) { - td_ta->sticky = false; - td_ta->layer_toggle = false; - layer_off (ARRW); - return; - } - - td_ta->finished_once = true; - if (state->count == 1 && !state->pressed) { - register_code (KC_TAB); - td_ta->sticky = false; - td_ta->layer_toggle = false; - } else { - td_ta->layer_toggle = true; - layer_on (ARRW); - td_ta->sticky = (state->count == 2); - } -} - -void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (!td_ta->layer_toggle) - unregister_code (KC_TAB); - if (!td_ta->sticky) - layer_off (ARRW); - - td_ta->finished_once = false; -} - -const qk_tap_dance_action_t tap_dance_actions[] = { - [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) - ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) - ,[CT_TA] = { - .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, - .user_data = (void *)&((td_ta_state_t) { false, false, false }) - } -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) - unregister_code (KC_LGUI); - - if (layer != OHLFT) - oh_left_blink = 0; - if (layer != OHRGT) - oh_right_blink = 0; - - if (layer == HUN) { - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - } else if (layer == NMDIA) { - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - } else if (layer == PLVR) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - } else if (layer == ADORE) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - } - - if (layer == OHLFT || layer == OHRGT) { - ergodox_right_led_2_on(); - - if (oh_left_blink) { - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) - ergodox_right_led_1_off (); - } - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_1_on (); - oh_left_blink_timer = timer_read (); - } - } - - if (oh_right_blink) { - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) - ergodox_right_led_3_off (); - } - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_3_on (); - oh_right_blink_timer = timer_read (); - } - } - } - - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_1_set (LED_BRIGHTNESS_HI); - ergodox_right_led_1_on (); - } else { - ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_1_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LALT) || - ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - ergodox_right_led_2_on (); - } else { - ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_2_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || - ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_3_set (LED_BRIGHTNESS_HI); - ergodox_right_led_3_on (); - } else { - ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) - ergodox_right_led_3_off (); - } - - LEADER_DICTIONARY() { - leading = false; - leader_end (); - -#if KEYLOGGER_ENABLE - SEQ_ONE_KEY (KC_D) { - ergodox_led_all_on(); - _delay_ms(100); - ergodox_led_all_off(); - log_enable = !log_enable; - } -#endif - - SEQ_ONE_KEY (KC_T) { - time_travel = !time_travel; - } - - SEQ_ONE_KEY (KC_U) { - ang_do_unicode (); - } - - SEQ_ONE_KEY (KC_V) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); - } - - SEQ_ONE_KEY (KC_L) { - /* λ */ - ang_do_unicode (); - - uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_Y) { - uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_S) { - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - TAP_ONCE (KC_BSLS); - register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); - ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); - register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); - TAP_ONCE (KC_SLSH); - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - } - - SEQ_TWO_KEYS (KC_W, KC_M) { - register_code (KC_LALT); - register_code (KC_F2); - unregister_code (KC_F2); - unregister_code (KC_LALT); - - _delay_ms (1000); - - uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; - ang_tap (codes); - register_code (KC_LGUI); - register_code (KC_UP); - unregister_code (KC_UP); - unregister_code (KC_LGUI); - } - - SEQ_ONE_KEY (KC_A) { - if (is_adore == 0) { - default_layer_and (0); - default_layer_or ((1UL << ADORE)); - eeconfig_update_default_layer ((1UL << ADORE)); - is_adore = 1; - - ergodox_led_all_off (); - ergodox_right_led_3_on (); - _delay_ms (100); - ergodox_right_led_2_on (); - _delay_ms (100); - ergodox_right_led_3_off (); - ergodox_right_led_1_on (); - _delay_ms (100); - ergodox_right_led_2_off (); - _delay_ms (100); - ergodox_right_led_1_off (); - } else { - is_adore = 0; - default_layer_and (0); - default_layer_or (1UL << BASE); - eeconfig_update_default_layer ((1UL << BASE)); - - ergodox_led_all_off (); - ergodox_right_led_1_on (); - _delay_ms (100); - ergodox_right_led_2_on (); - _delay_ms (100); - ergodox_right_led_1_off (); - ergodox_right_led_3_on (); - _delay_ms (100); - ergodox_right_led_2_off (); - _delay_ms (100); - ergodox_right_led_3_off (); - } - } - } -} - -static uint16_t last4[4]; - -bool process_record_user (uint16_t keycode, keyrecord_t *record) { -#if KEYLOGGER_ENABLE - uint8_t layer = biton32(layer_state); - - if (log_enable && layer == BASE) { - xprintf ("KL: col=%d, row=%d\n", record->event.key.col, - record->event.key.row); - } -#endif - - if (time_travel && !record->event.pressed) { - uint8_t p; - - // shift cache one to the left - for (p = 0; p < 3; p++) { - last4[p] = last4[p + 1]; - } - last4[3] = keycode; - - if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { - uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; - ang_tap (codes); - register_code (KC_RSFT); - register_code (KC_EQL); - unregister_code (KC_EQL); - unregister_code (KC_RSFT); - - uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; - ang_tap (codes2); - - return false; - } - } - - return true; -} diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md deleted file mode 100644 index 6fe1775111..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/readme.md +++ /dev/null @@ -1,198 +0,0 @@ - - -algernon's layout -======================= - -This is an unconventional layout for the ErgoDox EZ. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox]. - - [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ - -Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary. - -## Table of Contents - -* [Layouts](#layouts) - - [Base layer](#base-layer) - - [ADORE layer](#adore-layer) - - [Hungarian layer](#hungarian-layer) - - [Navigation and media layer](#navigation-and-media-layer) - - [One-handed layer](#one-handed-layer) - - [Steno layer](#steno-layer) - - [LED states](#led-states) -* [Tools](#tools) - - [Heatmap](#heatmap) -* [Building](#building) - - [Using on Windows](#using-on-windows) -* [Changelog](#changelog) -* [License](#license) - -# Layouts - -## Base layer - -[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) - -At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave: - -* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers. -* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. -* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. -* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. -* The **Media** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** keys are toggles. -* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. -* Tapping the `:` key once yields `:`, tapping it twice yields `;`. -* The **Lead** key allows me to type in a sequence of keys, and trigger some actions: - - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that does this. - - `LEAD l` uses the unicode input method to enter a `λ`. - - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` - - `LEAD y` types `\o/`. - - `LEAD w m` maximises the currently focused window. - - `LEAD a` makes the [ADORE layer](#adore-layer) the default. - - `LEAD v` prints the firmware version, the keyboard and the keymap. - - `LEAD d` toggles logging keypress positions to the HID console. - - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. - -## ADORE layer - -[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a) - -While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen. - - [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm - -Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name. - -## Hungarian layer - -[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) - -On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. - -## Navigation and media layer - -[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) - -This layer is primarily for navigating with the cursor or the mouse, and some media things. - -## One-handed layer - -[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) - -The one-handed layer is used in situations where the right hand is occupied, by mousing around, for example. Tapping the `OTHER` key switches which side is active. For the most part, keys remain in their usual position. When the right half is active, keys are mirrored to the left half. - -The differences are as follows: - -* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier to tap. -* Most keys on the thumb cluster now have dual uses, and these do not change when switching sides: - - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held for longer than a normal tap. - - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. -* The `Apps`/`BASE` key can be used to go back to the base layer, by long-tapping it. A short-tap will send the `App` key, as usual. - -## Steno layer - -[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) - -This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too. - -## LED states - -The primary purpose of the LEDs is to show the modifier status, a secondary, to show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each have their designated LEDs: the *red*, *green* and *blue*, respectively. When a modifier is in a one-shot state, the respective LED will turn on with a dimmer light. If the modifier is toggled on, the brightness of the LED turns full. - -For the layers, the following rules apply: - -* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. -* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. -* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. -* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is on and bright, and either the *red* or the *blue* one is going to slowly blink, depending on the currently active side. -* For the [Steno layer](#steno-layer), all LEDs will be turned on. - -Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. - -# Tools - -## Heatmap - -When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too. - -Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, simply point `tools/log-to-heatmap.py` to a base layout file (one is included in the `tools/` directory), and the key position log. The latter one can create by running `hid-listen`, and redirecting its output to a file. - - [kle]: http://www.keyboard-layout-editor.com/ - -The generated heatmap looks somewhat like this: - - ![Heatmap](images/heatmap.png) - -# Building - -To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: - - [algernon:ez-layout]: https://github.com/algernon/ergodox-layout - [qmk]: https://github.com/jackhumbert/qmk_firmware - -``` -$ git clone https://github.com/jackhumbert/qmk_firmware.git -$ cd qmk_firmware -$ git clone https://github.com/algernon/ergodox-layout.git \ - keyboards/ergodox_ez/keymaps/algernon-master -$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master -``` - -From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): - -``` -$ make KEYBOARD=ergodox_ez KEYMAP=algernon -``` - -## Using on Windows - -The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line. - -# Changelog - -## v1.4 - 2016-07-29 - -* When toggling the key logging on or off, the LEDs will do a little dance. -* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. -* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. -* The `-`/`_` key was turned into a tap-dance key too. -* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. - -## v1.3 - 2016-07-06 - -* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. -* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. -* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. -* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. - -## v1.2 - 2016-06-22 - -* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). -* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. -* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. -* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. -* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer. -* `LEAD v` types the firmware version, and the keymap version. -* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. -* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. - -## v1.1 - 2016-06-14 - -* The keyboard starts in NKRO mode, bootmagic and other things are disabled. -* A [Steno](#steno-layer) layer was added, to be used with Plover. -* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. -* `LEAD y` types `\o/`. -* Some keys on the [Base](#base-layer) layer have been moved around: - - `?` moved to the left pinky, left of `Q`. - - `=` shifted one row down, but `F11` stayed where it was. - - `-` on the left half was replaced by `Tab`. - - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - - `:` now inputs `;` when shifted. -* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. - -## v1.0 - 2016-05-26 - -Initial version. - -# License - -The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version. diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json deleted file mode 100644 index 544f61ce87..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-adore-layout.json +++ /dev/null @@ -1,533 +0,0 @@ -[ - { - "backcolor": "#ffffff", - "name": "ErgoDox - algernon's layout: Heatmap", - "author": "Gergely Nagy ", - "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea", - "pcb": true, - "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" - }, - [ - { - "x": 3.5, - "c": "#a7d0db", - "fa": [ - 0, - 0, - 2 - ] - }, - "#\n3\nF3", - { - "x": 10.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4, - "fa": [ - 0, - 0, - 2 - ] - }, - "*\n8\nF8" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "@\n2\nF2", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "$\n4\nF4", - { - "x": 8.5 - }, - "&\n7\nF7", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "(\n9\nF9" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "%\n5\nF5", - { - "c": "#f9cd31", - "a": 7, - "f": 2 - }, - "STENO", - { - "x": 4.5, - "f": 6 - }, - "", - { - "c": "#7adabd", - "a": 4, - "f": 3, - "fa": [ - 0, - 0, - 2 - ] - }, - "^\n6\nF6" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "f": 3, - "w": 1.5 - }, - "\n\n~\n`", - { - "t": "#0d0d0b" - }, - "!\n1\nF1", - { - "x": 14.5 - }, - ")\n0\nF10", - { - "a": 7, - "w": 1.5 - }, - "F11" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "L", - { - "x": 10.5 - }, - "C" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", - "a": 4 - }, - ">\n.", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "a": 6 - }, - "W", - { - "x": 8.5 - }, - "H", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "P" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "M", - { - "c": "#93c9b7", - "a": 4, - "h": 1.5 - }, - "{\n[", - { - "x": 4.5, - "h": 1.5 - }, - "}\n]", - { - "c": "#7adabd", - "a": 6 - }, - "F" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", - "f": 6, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "a": 4, - "f": 3 - }, - "<\n,", - { - "x": 14.5, - "a": 6 - }, - "Y", - { - "a": 4, - "w": 1.5 - }, - "|\n\\" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "E", - { - "x": 10.5 - }, - "T" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "O", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "n": true - }, - "I", - { - "x": 8.5, - "n": true - }, - "R", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "N" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "U", - { - "x": 6.5 - }, - "D" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", - "fa": [ - 6 - ], - "w": 1.5 - }, - "\n\nTab", - { - "f": 3 - }, - "A", - { - "x": 14.5, - "f": 3 - }, - "S", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6 - ], - "w": 1.5 - }, - "+\n=" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#93c9b7", - "t": "#000000", - "a": 7, - "h": 1.5 - }, - "(", - { - "x": 4.5, - "h": 1.5 - }, - ")" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#a7d0db", - "a": 4, - "f": 3 - }, - "\"\n'", - { - "x": 10.5 - }, - "V" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "Z", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "K", - { - "x": 8.5 - }, - "G", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "J" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "X", - { - "x": 6.5 - }, - "B" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "f": 9, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "t": "#0d0d0b", - "a": 4, - "f": 3 - }, - "?\n/", - { - "x": 14.5, - "a": 6 - }, - "Q", - { - "c": "#ffb07b", - "t": "#000000", - "f": 9, - "w": 1.5 - }, - "" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#d9dae0", - "g": true, - "a": 7, - "f": 3 - }, - "", - { - "x": 10.5 - }, - "" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "", - { - "x": 1, - "c": "#d4872a", - "g": false, - "a": 5 - }, - ";\n:", - { - "x": 8.5 - }, - "_\n-", - { - "x": 1, - "c": "#d9dae0", - "g": true, - "a": 7 - }, - "" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "", - {}, - "", - { - "x": 14.5 - }, - "", - {}, - "" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#f9cd31", - "g": false - }, - "Alt", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 9 - ] - }, - "\n\n\n" - ], - [ - { - "c": "#d4872a", - "a": 7, - "f": 9, - "h": 2 - }, - "", - { - "h": 2 - }, - "", - { - "c": "#f9cd31", - "f": 3 - }, - "Ctrl" - ], - [ - { - "x": 2, - "c": "#e26757" - }, - "ESC" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "MEDIA", - {}, - "1HAND" - ], - [ - { - "x": -3 - }, - "LEAD", - { - "c": "#d4872a", - "f": 9, - "h": 2 - }, - "", - { - "f": 3, - "h": 2 - }, - "SPC" - ], - [ - { - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "HUN" - ] -] diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json b/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json deleted file mode 100644 index 148bb1f23b..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/tools/heatmap-base-layout.json +++ /dev/null @@ -1,533 +0,0 @@ -[ - { - "backcolor": "#ffffff", - "name": "ErgoDox - algernon's layout: Heatmap", - "author": "Gergely Nagy ", - "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea", - "pcb": true, - "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" - }, - [ - { - "x": 3.5, - "c": "#a7d0db", - "fa": [ - 0, - 0, - 2 - ] - }, - "#\n3\nF3", - { - "x": 10.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4, - "fa": [ - 0, - 0, - 2 - ] - }, - "*\n8\nF8" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "@\n2\nF2", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "$\n4\nF4", - { - "x": 8.5 - }, - "&\n7\nF7", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "(\n9\nF9" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "%\n5\nF5", - { - "c": "#f9cd31", - "a": 7, - "f": 2 - }, - "STENO", - { - "x": 4.5, - "f": 6 - }, - "", - { - "c": "#7adabd", - "a": 4, - "f": 3, - "fa": [ - 0, - 0, - 2 - ] - }, - "^\n6\nF6" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "f": 3, - "w": 1.5 - }, - "\n\n~\n`", - { - "t": "#0d0d0b" - }, - "!\n1\nF1", - { - "x": 14.5 - }, - ")\n0\nF10", - { - "a": 7, - "w": 1.5 - }, - "F11" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4 - }, - ">\n.", - { - "x": 10.5, - "a": 6 - }, - "C" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", - "a": 4 - }, - "<\n,", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "a": 6 - }, - "P", - { - "x": 8.5 - }, - "G", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "R" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "Y", - { - "c": "#93c9b7", - "a": 4, - "h": 1.5 - }, - "{\n[", - { - "x": 4.5, - "h": 1.5 - }, - "}\n]", - { - "c": "#7adabd", - "a": 6 - }, - "F" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", - "f": 6, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "a": 4, - "f": 3 - }, - "\"\n'", - { - "x": 14.5, - "a": 6 - }, - "L", - { - "a": 4, - "w": 1.5 - }, - "|\n\\" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "E", - { - "x": 10.5 - }, - "T" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "O", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "n": true - }, - "U", - { - "x": 8.5, - "n": true - }, - "H", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "N" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "I", - { - "x": 6.5 - }, - "D" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", - "fa": [ - 6 - ], - "w": 1.5 - }, - "\n\nTab", - { - "f": 3 - }, - "A", - { - "x": 14.5, - "f": 3 - }, - "S", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6 - ], - "w": 1.5 - }, - "+\n=" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#93c9b7", - "t": "#000000", - "a": 7, - "h": 1.5 - }, - "(", - { - "x": 4.5, - "h": 1.5 - }, - ")" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#a7d0db", - "a": 6 - }, - "J", - { - "x": 10.5 - }, - "W" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "Q", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "K", - { - "x": 8.5 - }, - "M", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "V" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "X", - { - "x": 6.5 - }, - "B" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "f": 9, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "t": "#0d0d0b", - "a": 4, - "f": 3 - }, - "?\n/", - { - "x": 14.5, - "a": 6 - }, - "Z", - { - "c": "#ffb07b", - "t": "#000000", - "f": 9, - "w": 1.5 - }, - "" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#d9dae0", - "g": true, - "a": 7, - "f": 3 - }, - "", - { - "x": 10.5 - }, - "" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "", - { - "x": 1, - "c": "#d4872a", - "g": false, - "a": 5 - }, - ";\n:", - { - "x": 8.5 - }, - "_\n-", - { - "x": 1, - "c": "#d9dae0", - "g": true, - "a": 7 - }, - "" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "", - {}, - "", - { - "x": 14.5 - }, - "", - {}, - "" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#f9cd31", - "g": false - }, - "Alt", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 9 - ] - }, - "\n\n\n" - ], - [ - { - "c": "#d4872a", - "a": 7, - "f": 9, - "h": 2 - }, - "", - { - "h": 2 - }, - "", - { - "c": "#f9cd31", - "f": 3 - }, - "Ctrl" - ], - [ - { - "x": 2, - "c": "#e26757" - }, - "ESC" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "MEDIA", - {}, - "1HAND" - ], - [ - { - "x": -3 - }, - "LEAD", - { - "c": "#d4872a", - "f": 9, - "h": 2 - }, - "", - { - "f": 3, - "h": 2 - }, - "SPC" - ], - [ - { - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "HUN" - ] -] diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py deleted file mode 100755 index a13d12e81a..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/tools/log-to-heatmap.py +++ /dev/null @@ -1,145 +0,0 @@ -#! /usr/bin/env python -import json -import os -import sys -import re - -from math import floor - -cr_coord_map = [ - [ - # Row 0 - [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], - [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], - ], - [ - # Row 1 - [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], - [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], - ], - [ - # Row 2 - [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], - [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], - ], - [ - # Row 3 - [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], - [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], - ], - [ - # Row 4 - [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], - [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], - ], - [ - # Row 5 - [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], - [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], - ], -] - -def set_attr_at(j, b, n, attr, fn, val): - blk = j[b][n] - if attr in blk: - blk[attr] = fn(blk[attr], val) - else: - blk[attr] = fn(None, val) - -def coord(col, row): - return cr_coord_map[row][col] - -def set_attr(orig, new): - return new - -def set_bg(j, (b, n), color): - set_attr_at(j, b, n, "c", set_attr, color) - #set_attr_at(j, b, n, "g", set_attr, False) - -def _set_tap_info(o, count, cap): - ns = 4 - o.count ("\n") - return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100) - -def set_tap_info(j, (b, n), count, cap): - j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap) - -def heatmap_color (v): - colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] - fb = 0 - if v <= 0: - idx1, idx2 = 0, 0 - elif v >= 1: - idx1, idx2 = len(colors) - 1, len(colors) - 1 - else: - val = v * (len(colors) - 1) - idx1 = int(floor(val)) - idx2 = idx1 + 1 - fb = val - float(idx1) - - r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] - g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] - b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] - - r, g, b = [x * 255 for x in r, g, b] - return "#%02x%02x%02x" % (r, g, b) - -# Load the keylog -def load_keylog(fname, restrict_row): - keylog = {} - total = 0 - with open(fname, "r") as f: - lines = f.readlines() - for line in lines: - m = re.search ('KL: col=(\d+), row=(\d+)', line) - if not m: - continue - (c, r) = (int(m.group (2)), int(m.group (1))) - if restrict_row != None and r != int(restrict_row): - continue - if (c, r) in keylog: - keylog[(c, r)] = keylog[(c, r)] + 1 - else: - keylog[(c, r)] = 1 - total = total + 1 - return total / 2, keylog - -def l_flat(s): - f = s.split("\n") - return ", ".join (f) - -def main(base_fn, log_fn, restrict_row = None): - - with open(base_fn, "r") as f: - layout = json.load (f) - - ## Reset colors - for row in cr_coord_map: - for col in row: - if col != []: - set_bg (layout, col, "#d9dae0") - #set_attr_at (layout, col[0], col[1], "g", set_attr, True) - - total, log = load_keylog (log_fn, restrict_row) - max_cnt = 0 - for (c, r) in log: - max_cnt = max(max_cnt, log[(c, r)]) - - # Create the heatmap - for (c, r) in log: - coords = coord(c, r) - b, n = coords - cap = max_cnt - v = float(log[(c, r)]) / cap - print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v)) - set_bg (layout, coord(c, r), heatmap_color (v)) - set_tap_info (layout, coord (c, r), log[(c, r)], total) - - print json.dumps(layout) - -if __name__ == "__main__": - if len(sys.argv) < 3: - print """Log to Heatmap -- creates a heatmap out of keyboard logs - -Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json""" - sys.exit (1) - main(*sys.argv[1:]) diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused b/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused deleted file mode 100755 index 4d5220aa8b..0000000000 --- a/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -WIN="$(xdotool getactivewindow)" -wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz -xdotool windowsize ${WIN} 100% 100% -wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz diff --git a/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c b/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c deleted file mode 100644 index 48257d23a3..0000000000 --- a/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -// Netable differences vs. the default firmware for the ErgoDox EZ: -// 1. The Cmd key is now on the right side, making Cmd+Space easier. -// 2. The media keys work on OSX (But not on Windows). -#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 | '" | | '" | 6 | 7 | 8 | 9 | 0 | BkSp | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | - | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Ctrl/Esc| 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| Alt |AltShf| Left | Right| | Up | Down | [ | ] | L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Esc |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | ( | | { | | | - * | Space| LGui |------| |------| RGui |Enter | - * | | | ) | | } | | | - * `--------------------' `----------------------' - */ -// 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_QUOT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_FN1, - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LT(SYMB,KC_GRV),KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - ALT_T(KC_APP), KC_LGUI, - KC_LPRN, - KC_SPC,KC_LGUI,KC_RPRN, - // right hand - KC_QUOT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_FN1, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_BSLS, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TG(1), - KC_ESC, CTL_T(KC_ESC), - KC_LCBR, - KC_RCBR,KC_RGUI, 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 -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/keyboards/ergodox_ez/keymaps/bepo/bepo.png b/keyboards/ergodox_ez/keymaps/bepo/bepo.png deleted file mode 100644 index 3df7aa609f..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/bepo/bepo.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox_ez/keymaps/bepo/keymap.c deleted file mode 100644 index 921a94d63a..0000000000 --- a/keyboards/ergodox_ez/keymaps/bepo/keymap.c +++ /dev/null @@ -1,311 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_bepo.h" - -#define BASE 0 // default layer -#define QWER 1 // qwerty compat layer -#define SQWER 2 // shifted qwerty compat layer -#define AQWER 3 // alted qwerty compat layer -#define FNAV 4 // function / navigation keys -#define NUM 5 // numeric keypad keys -#define MSE 6 // mouse keys - -#define KP_00 0 -#define CA_Fx 1 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Base layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | % | B |E_ACUT| P | O |E_GRAV|Backsp| |CapsLo| ^ | V | D | L | J | Z | - * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| - * | W | A | U | I | E | , |------| |------| C | T | S | R | N | M | - * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| - * | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL| - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | CA_Fx| | | - * | Space|LShift|------| |------|RShift|Enter | - * | | |L_FNav| |L_FNav| | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// Left hand -BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, -BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, -BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, -BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, -TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), - MO(NUM), - KC_SPC, KC_LSHIFT, MO(FNAV), -// Right hand - KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL, - KC_CAPSLOCK, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, - BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, - KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, - BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -M(CA_Fx), -MO(FNAV), KC_RSHIFT, KC_ENTER), -/* Keymap 1: QWERTY system compatibility layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | % | b | e | p | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | - * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| - * | w | a | u | i | e | , |------| |------| c | t | s | r | n | m | - * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| - * | e | a | y | x | . | k | | | | ' | q | g | h | f | c | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | - * | Space|LShift|------| |------|RShift|Enter | - * | | |L_FNav| |L_FNav| | | - * `--------------------' `--------------------' - */ -[QWER] = KEYMAP( -// Left hand -KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL, -KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, -KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, -KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, -KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), - MO(NUM), - KC_SPC, MO(SQWER), MO(FNAV), -// Right hand - KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, - KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, - MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -KC_TRNS, -MO(FNAV), MO(SQWER), KC_ENTER), -/* Keymap 2: QWERTY shifted system compatibility layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ` | B | E | P | O | E |Backsp| |CapsLo| ! | V | D | L | J | Z | - * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| - * | W | A | U | I | E | ; |------| |------| C | T | S | R | N | M | - * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| - * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | - * | Space|LShift|------| |------|RShift|Enter | - * | | |L_FNav| |L_FNav| | | - * `--------------------' `--------------------' - */ -[SQWER] = KEYMAP( -// Left hand -KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, -KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, -S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON, -S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB), -KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT), - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, -// Right hand - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_TRNS, KC_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(KC_Z), - S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(KC_M), - KC_TRNS, S(KC_SLASH), S(KC_Q), S(KC_G), S(KC_H), S(KC_F), S(KC_C), - S(KC_RALT), S(KC_RCTL), S(KC_RGUI), KC_TRNS, KC_TRNS, -KC_TRNS, KC_TRNS, -KC_TRNS, -KC_TRNS, KC_TRNS, KC_TRNS), -/* Keymap 3: QWERTY alted system compatibility layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | - * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| - * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m | - * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| - * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause| - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | | | | - * | _ |LShift|------| |------|RShift|Enter | - * | | |L_FNav| |L_FNav| | | - * `--------------------' `--------------------' - */ -[AQWER] = KEYMAP( -// Left hand -KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL, -KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, -KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, -KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, -KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT, - KC_ESC, MO(MSE), - MO(NUM), - KC_UNDS, MO(SQWER), MO(FNAV), -// Right hand - KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, - KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, - KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_NO, KC_INS, -KC_TRNS, -MO(FNAV), MO(SQWER), KC_ENTER), -/* Keymap 4: function / navigation layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | | - * |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------| - * | | Undo | Cut | Copy | Paste| | | | | | | | | | | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | | | | | | | | | | | | | | | | | | - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[FNAV] = KEYMAP( -// Left hand -KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD, -KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_TRNS, KC_TRNS, -// Right hand - KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, - KC_NO, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_F11, KC_NO, - KC_PGDOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F12, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, -KC_NO, KC_NO, -KC_TRNS, -KC_TRNS, KC_TRNS, KC_NO), -/* Keymap 5: numeric layer, sends keypad codes - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | + | - | / | * | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | 7 | 8 | 9 | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | 4 | 5 | 6 | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | 1 | 2 | 3 | | | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | | | | | | | | | | | | | 0 | 00 | . | | | - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | | | | | | - * | | |------| |------| | Enter| - * | | | | | | | | - * `--------------------' `--------------------' - */ -[NUM] = KEYMAP( -// Left hand -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, 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_TRNS, KC_TRNS, - KC_NO, KC_NO, - KC_TRNS, - KC_NO, KC_TRNS, KC_NO, -// Right hand - KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO, - KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO, - KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO, - KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO, - KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO, -KC_NO, KC_NO, -KC_NO, -KC_NO, KC_TRNS, KC_KP_ENTER), -/* Keymap 6: mouse layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | |LClick| Up |RClick| WhUp | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | Left | Down | Right|WhDown| | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | | | | | | | | | | | | | | | | | | - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[MSE] = KEYMAP( -// Left hand -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, 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_TRNS, KC_TRNS, - KC_NO, KC_TRNS, - KC_NO, - KC_NO, KC_TRNS, KC_NO, -// Right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_NO, - KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, -KC_NO, KC_NO, -KC_NO, -KC_NO, KC_TRNS, KC_NO) -}; - -const uint16_t PROGMEM fn_actions[] = { -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case KP_00: - if (record->event.pressed) { - return MACRO( T(KP_0), D(KP_0), END ); - } else { - return MACRO( U(KP_0), END ); - } - break; - case CA_Fx: - if (record->event.pressed) { - layer_on(FNAV); - return MACRO( D(LALT), D(LCTL), END ); - } else { - layer_off(FNAV); - return MACRO( U(LCTL), U(LALT), 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) { -}; diff --git a/keyboards/ergodox_ez/keymaps/bepo/readme.md b/keyboards/ergodox_ez/keymaps/bepo/readme.md deleted file mode 100644 index 4a18cd80ff..0000000000 --- a/keyboards/ergodox_ez/keymaps/bepo/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -# BEPO keymap for the ErgoDox - -This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french. - -# Disposition BÉPO pour l'ErgoDox - -Cette keymap a été pensée pour la disposition BÉPO (http://bepo.fr), qui est une disposition de clavier francophone, ergonomique et libre, élaborée selon la méthode Dvorak. L'adaptation de cette disposition à l'ErgoDox a été réalisée en conservant les points forts du clavier TypeMatrix 2030 (très répandu dans la communauté bépo, avec un excellent rapport ergonomie / prix) voir en réglant certains de ses défauts (3 colonnes pour l'auriculaire droit et touche "Ê") et en apportant son lot de nouveautés (compatibilité avec les systèmes azerty et qwerty). - -Particularités --------------- - -Touches de repos des pouces : "espace" à gauche et "entrée" à droite. - -Placement des touches de combinaison ("Shift", "Alt", "Ctrl"...) adapté aux pouces, et permettant de conserver chaque doigt pour les rangées de lettres auxquelles ils sont assignés sans avoir à changer la touche de combinaison de côté (exemple : "A" majuscule puis "M" majuscule avec les auriculaires et un seul appui d'une touche "Shift"). - -Les touches "Alt" et "Alt Gr" sont accessibles avec les pouces sur la rangée du bas comme sur la TypeMatrix 2030, avec une symétrie gauche / droite. - -Les touches "Ctrl" sont placées sur la même ligne que les touche "Alt" et "Alt Gr" comme sur un clavier clasique, elles sont accessibles aux pouces sur la rangée du bas (moins éloigné que le groupe de touches de pouces pour des petites mains). - -Les touches "Backspace" et "Delete" sont placées comme sur la TypeMatrix 2030, du côté gauche uniquement (pour laisser celles de la main droite servir de {caps,num,scroll}lock puisqu'elles ont des LED). - -La touche "Tab" est placée comme sur la TypeMatrix 2020. - -Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO". - -Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long). - -Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0". - -L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle. - -TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY. - -> Olivier Smedts diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile deleted file mode 100644 index 6c0a79b110..0000000000 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -SLEEP_LED_ENABLE = no -UNICODE_ENABLE = yes diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c deleted file mode 100644 index 8a2ba26d22..0000000000 --- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c +++ /dev/null @@ -1,281 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "led.h" -#include "keymap_extras/keymap_neo2.h" - -// Layer names -#define BASE 0 // default layer -#define PMQ 1 // poor man’s QWERTZ -#define PMN 2 // poor man’s Neo -#define FMU 3 // FMU layer -#define NHL 4 // Neo’s software layer 4 rebuilt in Hardware - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Layer 0: default - * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ - * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ - * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ - * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ - * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ - * │ ← │ ↑ │ │ ↓ │ → │ - * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ - * │ │ │ ─ │ │ ─ │ │ │ - * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ - * │ │ │ HYP │ │ MEH │ │ │ - * └─────┴─────┴─────┘ └─────┴─────┴─────┘ - */ -[BASE] = KEYMAP( - // left hand - KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, NEO_GRV, - NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME, - NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O, - KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ), - KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L, - KC_LEFT, KC_UP, - KC_MINS, - KC_SPC, KC_ENT, ALL_T(KC_NO), - // right hand - NEO_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, - NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R, - TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT, - NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, - KC_DOWN, KC_RGHT, - KC_MINS, - MEH_T(KC_NO),KC_ENT,KC_SPC - ), - -/* Layer 1: poor man’s QWERTZ - * based on kaimi’s layout - * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ - * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ C │ P │ T │ F │ K │ L │ HOM │ │ END │ B │ A │ S │ G │ V │ Y │ - * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ Mod3 │ D │ H │ Ö │ O │ I ├─────┤ ├─────┤ U │ - │ Z │ E │ X │ Mod3 │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ - * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ - * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ - * │ ← │ ↑ │ │ ↓ │ → │ - * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ - * │ │ │ ─ │ │ ─ │ │ │ - * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ - * │ │ │ HYP │ │ MEH │ │ │ - * └─────┴─────┴─────┘ └─────┴─────┴─────┘ - */ -[PMQ] = KEYMAP( - // left hand - KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, - DE_C, DE_P, DE_T, DE_F, DE_K, DE_L, KC_HOME, - NEO_L1_L, DE_D, DE_H, DE_OE, DE_O, DE_I, - KC_LSFT, DE_AE, DE_Q, DE_R, DE_W, DE_N, KC_TRNS, - KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,MO(NHL), - KC_LEFT, KC_UP, - KC_MINS, - KC_SPC, KC_ENT, ALL_T(KC_NO), - // right hand - DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_END, DE_B, DE_A, DE_S, DE_G, DE_V, DE_Y, - DE_U, DE_MINS,DE_Z, DE_E, DE_X, NEO_L1_R, - KC_TRNS, DE_J, DE_M, DE_COMM,DE_DOT, DE_SS, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, - KC_DOWN, KC_RGHT, - KC_MINS, - MEH_T(KC_NO),KC_ENT,KC_SPC - ), - -/* Layer 2: poor man’s Neo - * based on kaimi’s layout - * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ - * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ - * ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ - * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ - * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ - * │ ← │ ↑ │ │ ↓ │ → │ - * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ - * │ │ │ ─ │ │ ─ │ │ │ - * │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ - * │ │ │ HYP │ │ MEH │ │ │ - * └─────┴─────┴─────┘ └─────┴─────┴─────┘ - */ -[PMN] = KEYMAP( - KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, - DE_Y, DE_X, DE_V, DE_L, DE_C, DE_W, KC_HOME, - KC_NO, DE_U, DE_I, DE_A, DE_E, DE_O, - KC_LSFT, DE_UE, DE_OE, DE_AE, DE_P, DE_Z, KC_TRNS, - KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,MO(NHL), - KC_LEFT, KC_UP, - KC_MINS, - KC_SPC, KC_ENT, ALL_T(KC_NO), - // right hand - DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_END, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS, - DE_S, DE_N, DE_R, DE_T, DE_D, KC_NO, - KC_TRNS, DE_B, DE_M, KC_COMM,KC_DOT, DE_J, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, - KC_DOWN, KC_RGHT, - KC_MINS, - MEH_T(KC_NO),KC_ENT,KC_SPC - ), - -/* Layer 3: F-keys, Mouse and Unicode - * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ - * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ - * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ - * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ - * │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │ - * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ - * │ │ │ MLC │ │ MRC │ │ │ - * │ │ ├─────┤ ├─────┤ │ │ - * │ │ │ │ │ │ │ │ - * └─────┴─────┴─────┘ └─────┴─────┴─────┘ - */ -[FMU] = KEYMAP( - // left hand - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_MS_L, KC_MS_U, - KC_BTN1, - 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_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, - KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, - KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_MS_D, KC_MS_R, - KC_BTN2, - KC_TRNS, KC_TRNS,KC_TRNS - ), - -/* Layer 4: Neo’s software layer 4 rebuilt in Hardware - * based on kaimi’s layout - * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ │ PgUp│ BSpc│ ↑ │ Del │ PgDn│ │ │ │ │ 7 │ 8 │ 9 │ + │ − │ - * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ │ Home│ ← │ ↓ │ → │ End ├─────┤ ├─────┤ │ 4 │ 5 │ 6 │ , │ . │ - * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ Esc │ Tab │ Ins │ Ret │ Undo│ │ │ │ │ 1 │ 2 │ 3 │ │ │ - * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ - * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ - * │ │ │ │ │ │ - * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ - * │ │ │ │ │ │ │ │ - * │ │ ├─────┤ ├─────┤ │ │ - * │ │ │ │ │ │ │ │ - * └─────┴─────┴─────┘ └─────┴─────┴─────┘ - */ -[NHL] = KEYMAP( - // left hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_PGUP,KC_BSPC,KC_UP, KC_DELT,KC_PGDN,KC_NO, - KC_NO, KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, - KC_NO, KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS, - KC_NO, KC_NO, KC_TRNS,KC_NO, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO, - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_7, KC_8, KC_9, DE_PLUS,DE_MINS, - KC_NO, KC_4, KC_5, KC_6, KC_COMM,KC_DOT, - KC_TRNS, KC_NO, KC_1, KC_2, KC_3, KC_NO, KC_NO, - KC_TRNS,KC_NO, KC_TRNS,KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO - ), -}; - -const uint16_t PROGMEM fn_actions[] = { - [BASE] = ACTION_FUNCTION(BASE), - [PMQ] = ACTION_FUNCTION(PMQ), - [PMN] = ACTION_FUNCTION(PMN), - [FMU] = ACTION_LAYER_TAP_TOGGLE(FMU), - [NHL] = ACTION_LAYER_TAP_TOGGLE(NHL) -}; - - -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) { - case FMU: - ergodox_right_led_1_on(); - break; - case PMQ: - ergodox_right_led_2_on(); - break; - case PMN: - ergodox_right_led_3_on(); - break; - default: - if(host_keyboard_leds() & (1<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/keyboards/ergodox_ez/keymaps/colemak/readme.md b/keyboards/ergodox_ez/keymaps/colemak/readme.md deleted file mode 100644 index e28b2f0856..0000000000 --- a/keyboards/ergodox_ez/keymaps/colemak/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# ErgoDox EZ Colemak Configuration - -Colemak layout with same layers as default ergodox ez keymap. - diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png deleted file mode 100644 index 57df5a1f99..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c deleted file mode 100644 index a909ed3a4f..0000000000 --- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c +++ /dev/null @@ -1,264 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_norwegian.h" - -#define BASE 0 // default layer -#define BASE_MAC 1 // default layer mac -#define NUMB_SYMB 2 // numbers and symbols -#define NUMB_SYMB_MAC 3 // numbers and symbols mac -#define FUNCTION 4 // function keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Keymap 0: Basic layer PC - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | \ | [ | ] | { | } | * |Mac/PC| | ^ | $ | ( | ) | < | > | @ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ? | Q | W | F | P | G | " | | ' | J | L | U | Y | Å | Æ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | : | A | R | S | T | D |------| |------| H | N | E | I | O | Ø | - * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------| - * | ! | Z | X | C | V | B | | | | K | M | RIGHT| DOWN | UP | _ | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Func | Lclk | Rclk | TAB |,/CTRL| | LEFT | Esc | ` | # | Num | - * `----------------------------------' `----------------------------------' - * ,-------------. ,--------------. - * | & | | | |Insert| / | - * ,------|------|------| |------+-------+------. - * | | | + | | Del | | | - * | Shift| ./Spc|------| |------| Enter |Space| - * | | |-/Alt | | Bspc | | | - * `--------------------' `---------------------' - */ -[BASE] = KEYMAP( - // left hand - NO_BSLS, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, NO_ASTR, TG(1), - NO_QUES, KC_Q, KC_W, KC_F, KC_P, KC_G, NO_QUO2, - NO_COLN, KC_A, KC_R, KC_S, KC_T, KC_D, - KC_EXLM, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN, - MO(4), KC_BTN1, KC_BTN2, KC_TAB,GUI_T(KC_COMMA), - NO_AMPR, NO_PIPE, - NO_PLUS, - KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS), - // right hand - KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT, - NO_APOS, KC_J, KC_L, KC_U, KC_Y, NO_AA, NO_AE , - KC_H, KC_N, KC_E, KC_I, KC_O, NO_OSLH, - NO_EQL, KC_K, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_UNDS, - KC_LEFT, KC_ESC, KC_FN7, KC_HASH, MO(2), - KC_INSERT, NO_SLSH, - KC_DELT, - KC_BSPC,KC_ENT,KC_SPC - ), -/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | \ | | | { | } | | | | | $ | | | < | > | @ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------| - * | | | | | | |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Func | | | |,/Ctrl| | | | ` | | Num | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | |./Cmd |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[BASE_MAC] = KEYMAP( - NO_BSLS_MAC, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CTL_T(KC_COMMA), - KC_TRNS, NO_PIPE_MAC, - KC_TRNS, - KC_TRNS,GUI_T(KC_DOT) , KC_TRNS, - // right hand - KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC, - NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, NO_GRV_MAC, KC_TRNS, MO(3), - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 2: Number ++ layer pc - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | % | | | | | | ~ | ´ | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | HOME | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[NUMB_SYMB] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS, - KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_FN2, KC_FN6 , KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS, - KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, - KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 3: Number ++ layer mac. Some keys have to be repeated from the pc symbol layer, since transient keys inherit from the layer we jump from, not the layer above. - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | % | | | | | | ~ | ´ | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | HOME | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[NUMB_SYMB_MAC] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS, - KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_FN2, KC_FN10, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS, - KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, - KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 4: Function layer mac + pc - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | F3 | F2 | F1 | | |------| |------| | F5 | F6 | F7 | F8 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | F4 | | | | | | F9 | F10 | F11 | F12 | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[FUNCTION] = KEYMAP( - KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, - KC_TRNS, KC_F3 , KC_F2 , KC_F1 , KC_TRNS , KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F4, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, - KC_TRNS, NO_TILD, 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 -) -}; - -enum macro_id { - TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. - [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed. - [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first. - [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first. - [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed. - [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed. - [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed. - [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly - [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly - [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed -}; - - - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - keyevent_t event = record->event; - - switch (id) { - case TILDE_NO: - return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE); - case LESS_NO: - return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE); - case GRTR_NO: - return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE); - case CIRC_NO: - return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE); - case ACUT_NO: - return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE); - case GRV_NO: - return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE); - case LESS_NO_MAC: - return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE); - case GRTR_NO_MAC: - return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE); - case ACUT_NO_MAC: - return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE); - } - return MACRO_NONE; -}; diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md deleted file mode 100644 index 48f095cae9..0000000000 --- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -# Norwegian Colemak setup with osx/pc toggle - -## Motivation -I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I also wanted it to translate from a standard Norwegian keyboard OS setup. - -## Overview -The setup is created to be programmer friendly. -- Most of the symbols used in code can be activated without using layers or shift key. -- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb. -- Navigation is prioritized, arrows are right below the home row. - -## PC/Mac toggle -The default setup is for Norwegian keyboard setting(not colemak variants) on a PC(Windows or Linux). Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard. - -## Layers -Numbers and function buttons are on their own layers. The easiest way to switch layers(at least with my hands) in this setup, is to push your hand right below the little finger, on the layer switches. You will then have all your fingers free to type numbers or press function buttons. - -## Shift-key -Tap for the next character to be shifted, hold down for regular shift functionality - -## Layout - -![keyboard-layout](keyboard-layout.png) diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png b/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png deleted file mode 100644 index 6fba568fc3..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png b/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png deleted file mode 100644 index b0a1c513cd..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c b/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c deleted file mode 100644 index e9648ede7d..0000000000 --- a/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c +++ /dev/null @@ -1,239 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define FKEYS 1 // F keys + macros - -#define MACRO_PUBLIC 10 -#define MACRO_PRIVATE 11 - -#define MACRO_STATIC 12 -#define MACRO_CONST 13 - -#define MACRO_VOID 14 -#define MACRO_VAR 15 -#define MACRO_STRING 16 - -#define MACRO_INT 17 -#define MACRO_FLOAT 18 -#define MACRO_BOOL 19 - -#define MACRO_RETURN 20 -#define MACRO_NULL 21 -#define MACRO_BREAK 22 - -#define MACRO_TODO 23 -#define MACRO_NEW 24 -#define MACRO_PARENTHESE 25 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ( | 1 | 2 | 3 | 4 | 5 | " | | Save | 6 | 7 | 8 | 9 | 0 | [ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ) | Q | W | E | R | T |Bkspa | | Del | Y | U | I | O | P | ] | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | { | A | S | D | F | G |------| |------| H | J | K | L | _ | Redo | - * |--------+------+------+------+------+------| / | | ; |------+------+------+------+------+--------| - * | } |Z~Alt | X | C | V | B | | | | N | M | ' | ! | ? | Undo | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Tab~CL| < | > | | | & | | = | + | - | * | L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * |. ~L1 | , | |Home |End~L1| - * ,------|------|------| |------+------+------. - * | | | Copy | | UP | | | - * | Enter| Space|------| |------| Space|Enter | - * | ~WIN | ~LSFT| Past | | DOWN | ~LSFT| ~WIN | - * `--------------------' `--------------------' - */ -// 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_LPRN, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_QUOTE), - KC_RPRN, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPACE, - KC_LCBR, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_RCBR, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SLASH, - CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, - LT(1,KC_DOT), KC_COMM, - LCTL(KC_C), - GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V), - // right hand - LCTL(KC_S) , KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRACKET, - KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRACKET, - KC_H, KC_J, KC_K, KC_L, KC_UNDS,LCTL(KC_Y), - KC_SCOLON,KC_N, KC_M, KC_QUOTE ,KC_EXLM , LSFT(KC_SLASH), LCTL(KC_Z), - KC_EQUAL,KC_PLUS , KC_MINUS,KC_ASTR , TG(1), - KC_HOME, LT(1,KC_END), - KC_UP, - KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER) - ), - -/* Keymap 1: F keys + macros - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | F1 | F2 | F3 | F4 | F5 | ` | | Calc | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab |Public|Static|string|int |return| | | |//TODO| | | | | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |Privat|Const |var |float |null |------| |------|new | | | | | | - * |--------+------+------+------+------+------| \ | | ~ |------+------+------+------+------+--------| - * | | | |void |bool |break;| | | |(); | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | WIN | Alt | | | | PgUp | PgDw | Ins | PtSc | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | Cut | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| Left | Right| - * | | | | | | | | - * `--------------------' `--------------------' - */ -// FKEYS + MACROS -[FKEYS] = KEYMAP( - // left hand - KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_GRAVE, - KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC), M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS, - KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL), - KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH, - KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS, - KC_TRNS,LCTL(KC_X), - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, - // right hand - KC_CALCULATOR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, M(MACRO_TODO), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, - M(MACRO_NEW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TILD, M(MACRO_PARENTHESE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_PGUP,KC_PGDOWN, KC_INSERT, KC_PSCREEN, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_LEFT, KC_RIGHT -), - - -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS) // FN1 - Momentary Layer 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 MACRO_PUBLIC: - if (record->event.pressed) { - return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END); - } - break; - case MACRO_PRIVATE: - if (record->event.pressed) { - return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END); - } - break; - case MACRO_STATIC: - if (record->event.pressed) { - return MACRO( T(S), T(T), T(A), T(T), T(I), T(C), T(SPACE), END); - } - break; - case MACRO_CONST: - if (record->event.pressed) { - return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END); - } - break; - case MACRO_VOID: - if (record->event.pressed) { - return MACRO( T(V), T(O), T(I), T(D), T(SPACE), END); - } - break; - case MACRO_VAR: - if (record->event.pressed) { - return MACRO( T(V), T(A), T(R), T(SPACE), END); - } - break; - case MACRO_STRING: - if (record->event.pressed) { - return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END); - } - break; - case MACRO_BOOL: - if (record->event.pressed) { - return MACRO( T(B), T(O), T(O), T(L), T(SPACE), END); - } - break; - case MACRO_INT: - if (record->event.pressed) { - return MACRO( T(I), T(N), T(T), T(SPACE), END); - } - break; - case MACRO_FLOAT: - if (record->event.pressed) { - return MACRO( T(F), T(L), T(O), T(A),T(T),T(SPACE), END); - } - break; - case MACRO_RETURN: - if (record->event.pressed) { - return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), END); - } - break; - case MACRO_NULL: - if (record->event.pressed) { - return MACRO( T(N), T(U), T(L), T(L), END); - } - case MACRO_BREAK: - if (record->event.pressed) { - return MACRO( T(B), T(R), T(E), T(A), T(K), T(SCOLON), END); - } - break; - case MACRO_TODO: - if (record->event.pressed) { - return MACRO( T(SLASH), T(SLASH), D(LSHIFT) ,T(T), T(O), T(D), T(O),U(LSHIFT), T(SPACE),END); - } - break; - case MACRO_NEW: - if (record->event.pressed) { - return MACRO( T(N), T(E), T(W), T(SPACE), END); - } - break; - case MACRO_PARENTHESE: - if (record->event.pressed) { - return MACRO( D(LSHIFT),T(9), T(0),U(LSHIFT), T(SCOLON), 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) { - - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md b/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md deleted file mode 100644 index 96af077ade..0000000000 --- a/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -# ErgoDox EZ C# Developer configuration - -## Changelog - -* Feb 12, 2016 (V1): - * First version commit -* Mar 20, 2016 (V2): - * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter - -## About -This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions. - -I came to the realization that my main tool as a developer, the qwerty keyboard was something that did not evolved at its core in almost 150 years. -There are a lot of reasons to this, and it would be a massive entreprise to change a standard so strongly anchored, but I wanted to give it a try and see how would look an input device dedicated to developers, more specifically a C# developer in my case. -The biggest flaw in standard QWERTY keyboards was that I always needed to perform key combination to access commonly used characters or actions. Think about it a minute, how many times a day do you press a modifier key such as Ctrl or Shift, it's insane and could be so easily optimized to require only one key press. - -Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design. - -![CSharpDev](csharp_dev_legend.png) - -## Layout design principles -* No key combination required for the most common input characters ( (),[],{},<> ... ) -* No key combination required for the most common actions (copy/paste/undo/save) -* Regroup characters by usage ( + - * = ...) -* Easy access to the most commonly used characters: ; / " . , -* Preregistered macro for the most common C# langage instructions: public / private / string / int / float ... - -## Why is it specific to C Sharp -I defined the characters priority based on their usage in C# language, most of this characters are also used in other coding languages but it may require some tweaking. -For example there is no direct access to ~ or $ keys which can be very common in some languages. -Note it is also specific to Windows environement as the shortcut used in action keys would not work on Mac Os - -## In usage -It was relatively easy to get used to the layout, but it's hard for me to define how easy it was as I was getting used to a blank Ergodox keyboard at the same time. -Still it's extremely satisfying to Save your file with just one easily accessible key or to have one big key to end your code line ( ; ) - -## Improvements -This layout was shared after a bunch of iterations and only once I was happy with it. -Still there are many way to improve or iterate on this: -* Make it language agnostic -* Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g. https://dzone.com/articles/most-pressed-keys-various ) -* QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur - -## Issues -One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold ) - - diff --git a/keyboards/ergodox_ez/keymaps/dave/keymap.c b/keyboards/ergodox_ez/keymaps/dave/keymap.c deleted file mode 100644 index e9480af3e9..0000000000 --- a/keyboards/ergodox_ez/keymaps/dave/keymap.c +++ /dev/null @@ -1,199 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define PROG 1 // programming -#define NAVI 2 // navigation - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | BkSpce | - * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | Y | | G | Y | U | I | O | P | Enter | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | - * |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |`/Ctrl| \ | | | LAlt | | RAlt | [ | ] | |'/Ctrl| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | PrtS | PrtS | | CtAl | CtAl | - * ,------+------+------| |------+------+------. - * | | | L1 | | L1 | | | - * | Spce | ~L2 +------| |------+ ~L1 | Spce | - * | | | LGui | | RGui | | | - * `--------------------' `--------------------' - */ -// 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_6, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, - KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H, - CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT, - KC_PSCREEN, KC_PSCREEN, - TO(PROG, ON_PRESS), - KC_SPC, MO(NAVI), KC_LGUI, - // right hand - KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, - KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, - KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_RALT,KC_LBRC,KC_RBRC,KC_NO, CTL_T(KC_QUOT), - MT(0x5, KC_NO), MT(0x5, KC_NO), - TO(PROG, ON_PRESS), - KC_RGUI, MO(PROG), KC_SPC - ), - -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | K/ | K* | K- | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | ( | ) | | | | | | | K7 | K8 | K9 | K+ | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | { | } | ` |------| |------| | K4 | K5 | K6 | K+ | ' | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | | K1 | K2 | K3 | K= | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | K0 | K0 | K. | K= | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | L2 | | L2 | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// PROGRAMMING -[PROG] = KEYMAP( - // left hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, - TO(NAVI, ON_PRESS), - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL, - KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NUHS, - KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_QUOT, - KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, - KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS, - KC_TRNS, KC_TRNS, - TO(NAVI, ON_PRESS), - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 2: Navigation and system keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | Home | Up | End | Ins | PgUp | | | | | | Ins | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Left | Down | Rght | Del | PgDn |------| |------| | Back | Del | Fwrd | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Lclk | MsUp | Rclk | | | | | | | Prev | Play | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | L0 | | L0 | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// NAVIGATION -[NAVI] = KEYMAP( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS, - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN, - KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, - KC_TRNS, KC_TRNS, - TO(BASE, ON_PRESS), - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - TO(BASE, ON_PRESS), - KC_TRNS, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { - //[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols) - //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation) -}; - -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) { - /* leds is a static array holding the current brightness of each of the - * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and - * -1s in the code below, and because wasting a byte really doesn't matter - * that much (no, it *doesn't*, stop whinging!). Note that because it's - * static it'll maintain state across invocations of this routine. - */ - static uint8_t leds[4]; - uint8_t led; - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - - /* Loop over each LED/layer */ - for (led = 1; led <= 3; ++led) { - /* If the current layer matches the current LED, increment its - * brightness by 1 up to a maximum of 255. If the current layer doesn't - * match, decrement its brightness by 1 down to a minimum of zero. - */ - leds[led] += (layer == led) ? - (leds[led] < 255 ? 1 : 0): - (leds[led] > 0 ? -1 : 0); - /* Set LED state according to the new brightness */ - if (leds[led]) { - ergodox_right_led_on(led); - ergodox_right_led_set(led, leds[led]); - } - else { - ergodox_right_led_off(led); - } - } - - -}; diff --git a/keyboards/ergodox_ez/keymaps/dave/readme.md b/keyboards/ergodox_ez/keymaps/dave/readme.md deleted file mode 100644 index aa0f9bd192..0000000000 --- a/keyboards/ergodox_ez/keymaps/dave/readme.md +++ /dev/null @@ -1,38 +0,0 @@ -This keymap is my preferred layout (after a certain amount of experimentation). -The rationale behind the design is as follows: - -I grew up typing from a very early age and thus never learned the "correct" way -to touch type (essentially, I'm self-taught). As a, result my fingers don't -tend to stay on the "home keys" and occasionally my right hand wants to type -keys that are on the left of the keyboard, and vice versa. - -Hence, despite liking the idea of split keyboards in principle, I've never been -able to get on with them because the split simply doesn't work with my style of -typing. The Ergodox solves this neatly by virtue of having a few extra keys in -the "middle" of the keyboard which I can utilise for deliberate redundancy. -Thus in this keymap there are two "6" keys (one on the left, one on the right) -and likewise Y, H, G, and B are all duplicated to enable one-handed patterns -that I use frequently (e.g. "byobu" with the right hand, "yes" with the left, -etc.). - -I occasionally use the numeric pad for data entry, thus this is duplicated -under the natural home position of the right hand in layer 1 (activated by -holding one of the right thumb buttons), while the cursor keys are duplicated -under the classic WASD gaming layout of the left hand in layer 2 (activated by -holding one of the left thumb buttons). Various other useful keys also appear -in these layers (brackets and symbols for coding in layer 1, navigation and -F-keys in layer 2, etc.). - -Finally, modifier keys like Ctrl, Shift, and Alt, along with Backspace and -Enter are all in traditional locations in an effort to reuse existing muscle -memory as much as possible (keys like =, #, and ' are in layer 1). The layout -maps are in the comments of keymap_dave.c so I won't bother duplicating them -here. - -Oh, and the LEDs are rather pimped ... because I could! - -Anyway, although I'm sure this keymap won't be to many people's taste you might -find some interesting ideas in here for your own layouts. Do tweet me -(@waveform80) if you have any questions / suggestions / bugs. - -Dave. diff --git a/keyboards/ergodox_ez/keymaps/default/default.png b/keyboards/ergodox_ez/keymaps/default/default.png deleted file mode 100644 index 6575f7b5e3..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/default/default.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/default/default_highres.png b/keyboards/ergodox_ez/keymaps/default/default_highres.png deleted file mode 100644 index 7d9f045f43..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/default/default_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c deleted file mode 100644 index b48a54a43f..0000000000 --- a/keyboards/ergodox_ez/keymaps/default/keymap.c +++ /dev/null @@ -1,182 +0,0 @@ -#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | - * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, 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, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | 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 - M(0), 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) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - 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/keyboards/ergodox_ez/keymaps/default/readme.md b/keyboards/ergodox_ez/keymaps/default/readme.md deleted file mode 100644 index 8f6dba45e9..0000000000 --- a/keyboards/ergodox_ez/keymaps/default/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Default Configuration - -## Changelog - -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: - -![Default](default_highres.png) diff --git a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png b/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png deleted file mode 100644 index 04f46bbd54..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c b/keyboards/ergodox_ez/keymaps/default_osx/keymap.c deleted file mode 100644 index c57ffbb889..0000000000 --- a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -// Netable differences vs. the default firmware for the ErgoDox EZ: -// 1. The Cmd key is now on the right side, making Cmd+Space easier. -// 2. The media keys work on OSX (But not on Windows). -#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | - * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, 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, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_LGUI, - MEH_T(KC_NO),KC_N, 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/keyboards/ergodox_ez/keymaps/default_osx/readme.md b/keyboards/ergodox_ez/keymaps/default_osx/readme.md deleted file mode 100644 index aa749aac90..0000000000 --- a/keyboards/ergodox_ez/keymaps/default_osx/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# The OSX Friendly Version of the Default Firmware - -So, I took the default firmware and just made a couple of tweaks that make it easier to use with OS X: - -1. The Cmd key is now on the right side, making Cmd+Space easier. -2. The media keys work on OSX (But not on Windows). - -![default osx](default_osx_highres.png) diff --git a/keyboards/ergodox_ez/keymaps/dragon788/keymap.c b/keyboards/ergodox_ez/keymaps/dragon788/keymap.c deleted file mode 100644 index 3aec8c6cf9..0000000000 --- a/keyboards/ergodox_ez/keymaps/dragon788/keymap.c +++ /dev/null @@ -1,229 +0,0 @@ -#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 -#define PLVR 3 // Plover layer - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LGui | |Plover| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L2 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | '"/Ctrl| - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | ~L1 | Grv | '" | Left |Rgt/L2| | Up/L2| Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | Home | | PgUp |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | End | | PgDn | | | - * |Backsp|Delete|------| |------| Enter |Space | - * | ace | | LAlt | |TabCtl| | | - * `--------------------' `----------------------' - */ -// 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_LGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - CTL_T(KC_ESC), 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_NO), - KC_FN1, KC_GRV, KC_QUOT,KC_LEFT, LT(MDIA, KC_RGHT), - KC_APP, KC_HOME, - KC_END, - KC_BSPC,KC_DELT,KC_LALT, - // right hand - TG(3), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - LT(MDIA, KC_UP), KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - KC_PGUP, CTL_T(KC_ESC), - KC_PGDN, - CTL_T(KC_TAB),KC_ENT, 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 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | Calc | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// 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_CALC, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | Rclk | Lclk | | | | | | Lclk | Rclk | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft| MsUp |MsDown|MsRght|------| |------|MsLeft|MsDown| MsUp |MsRght| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | Prev | |VolUp | | - * ,------|------|------| |------+------+------. - * | | | Play | | Mute |Brwser|Brwser| - * | Lclk | Rclk |------| |------|Fwd |Back | - * | | | Next | |VolDn | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -KEYMAP( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, 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_TRNS, - KC_TRNS, KC_MPRV, - KC_MPLY, - KC_BTN1, KC_BTN2, KC_MNXT, - // right hand - 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_MS_L, KC_MS_D, KC_MS_U, 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_TRNS, KC_TRNS, KC_TRNS, - KC_VOLU, KC_TRNS, - KC_MUTE, - KC_VOLD, KC_WBAK, KC_WFWD -), - -/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | c | v |------| |------| n | m | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover - // left hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, - KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_FN4, KC_NO, - KC_NO, - KC_C, KC_V, KC_NO, - // right hand - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_NO, KC_N, KC_M -), - -}; - -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/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png b/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png deleted file mode 100644 index cb83163095..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak/keymap.c deleted file mode 100644 index 22947327d3..0000000000 --- a/keyboards/ergodox_ez/keymaps/dvorak/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1), - KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, 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_BSLS, - TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, - MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), 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 -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/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png deleted file mode 100644 index 6a36f9bfa1..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png deleted file mode 100644 index c6e6d913cb..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png deleted file mode 100644 index 23f56ff4c0..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c deleted file mode 100644 index 82f55b4bc0..0000000000 --- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c +++ /dev/null @@ -1,185 +0,0 @@ -#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 | BrBck| | Play | 6 | 7 | 8 | 9 | 0 | \ / L2 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Esc | ' | , | . | P | Y | Del | | Ins | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | O | E | U | I |------| |------| D | H | T | N | S | - | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| LAlt | LGui | Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,---------------. - * | App | L1 | | L2 |PrntScr | - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space| Tab |------| |------| AltShf |Enter | - * | | | 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_WBAK, - KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DELT, - KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO), - LT(SYMB,KC_GRV),KC_LALT, KC_LGUI, KC_LEFT,KC_RGHT, - CTL_T(KC_APP), TG(1), - KC_HOME, - KC_SPC,KC_TAB,KC_END, - // right hand - KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, LT(MDIA, KC_BSLS), - KC_INS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - TG(2), KC_PSCREEN, - KC_PGUP, - KC_PGDN,RALT(KC_RSFT), KC_ENT - ), -/* Keymap 1: Symbol & Media Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Prev | Next | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | |VolUp | | | - * | | |------| |------| Mute | | - * | | | | |VolDn | | | - * `--------------------' `--------------------' - */ -// 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_MPRV,KC_MNXT, - 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_VOLU, - KC_VOLD, KC_MUTE, KC_TRNS -), -/* Keymap 2: QWERTY Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | Q | W | E | R | T | | | | Y | U | I | O | P | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | A | S | D | F | G |------| |------| H | J | K | L | ; | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -KEYMAP( // layer 0 : default - // left hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, - KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_TRNS, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, 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_TRNS, - KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_TRNS, - KC_TRNS, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), 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_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/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md deleted file mode 100644 index 984106ff46..0000000000 --- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -# ErgoDox EZ Dvorak International Squisher - -Dvorak layout adjusted with several (linux) applications in mind: - -* Easier Escape for VIM -* Windows/Super key for awesome WM -* Alt+Shift for international characters -* PrintScreen for sys-rq -* Insert for the X11 clip-board - -Major layer changes: - -* Common multimedia keys are integrated into layer 0, less common into layer 1 -* No mouse keys -* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users) - -Known issues: - -* Alt+Shift does not work reliably (depends on the X11 kb layout? Not - entirely clear...) - -![layer0](keyboard-layout0.png) -![layer1](keyboard-layout1.png) -![layer2](keyboard-layout2.png) - -## Changelog - -* 2016-03-29 - * Initial release diff --git a/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c deleted file mode 100755 index 6eb864b447..0000000000 --- a/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c +++ /dev/null @@ -1,284 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -/****************************************************************************************** - * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/) - * Layer 1: auxiliary keys - * Layer 2: full qwerty layout - ****************************************************************************************** - * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly - *****************************************************************************************/ - -// LAYERS -#define BASE 0 // dvorak layout (default) -#define AUX 1 // auxiliary keys -#define QWERTY 2 // qwerty layout - -// MACROS -#define OBRACE 0 // key { or shift -#define CBRACE 1 // key } or shift -#define OBRACK 2 // key [ or left alt -#define CBRACK 3 // key ] or left alt -#define CAPS 4 // caps lock - -// LEDS -#define USB_LED_NUM_LOCK 0 -#define USB_LED_CAPS_LOCK 1 -#define USB_LED_SCROLL_LOCK 2 -#define USB_LED_COMPOSE 3 -#define USB_LED_KANA 4 - -// TIMERS -#define KEY_TAP_FAST 85 -#define KEY_TAP_SLOW 95 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Base layer - * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | - * |--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| - * |Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | - * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| - * | {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| - * ,------|------|------| |------+--------+------. - * | | |F4/CA | |F11/CA| | | - * | ENTER| TAB |------| |------| BSPC | SPACE| - * | | |F3/SA | |F12/SA| | | - * `--------------------' `----------------------' - * CAG = CTRL-ALT-GUI - * CA = CTRL-ALT - * SA = SHIFT-ALT - * - */ -[BASE] = KEYMAP( - // left hand - KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, - LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P, KC_Y, MEH_T(KC_DEL), - CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, - M(OBRACE), KC_SLSH,KC_Q, KC_J, KC_K, KC_X, KC_LGUI, - M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, - LCAG_T(KC_F5), LT(AUX, KC_F6), - MT((MOD_LALT | MOD_LCTL), KC_F4), - KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3), - // right hand - KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, - KC_FN1, KC_F, KC_G, KC_C, KC_H, KC_L, ALL_T(KC_RBRACKET), - KC_D, KC_R, KC_T, KC_N, KC_S, CTL_T(KC_QUOTE), - KC_RALT, KC_B, KC_M, KC_W, KC_V, KC_Z, M(CBRACE), - KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), - LT(AUX, KC_F7), LCAG_T(KC_F8), - MT((MOD_LALT | MOD_LCTL), KC_F11), - MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC - ), -/* Keymap 1: Aux layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | SLEEP | PWR | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | `^ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç | - * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------| - * |CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | Play | - * ,------|------|------| |------+------+------. - * | | | | | VolUp| | | - * | Lclk | Rclk |------| |------| Prev | Next | - * | | | L2 | | VolDn| | | - * `--------------------' `--------------------' - */ -[AUX] = KEYMAP( - // left hand - KC_NO , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLEP, - KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO, - KC_NO , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO , - M(CAPS), KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO, - LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), - KC_NO , KC_TRNS, - KC_NO, - KC_BTN1, KC_BTN2, TG(QWERTY), - // right hand - KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_LBRACKET, - KC_NO, KC_4, KC_5, KC_6, KC_PPLS, KC_BSLASH, - KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_NO, - KC_NO ,KC_DOT, KC_0, KC_PEQL, KC_NO, - KC_TRNS, KC_MPLY, - KC_VOLU, - KC_VOLD, KC_MPRV, KC_MNXT -), -/* Keymap 2: QWERTY layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ | - * |--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------| - * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl | - * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| - * | {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * |F5/CAG| TRANS| | TRANS|F8/CAG| - * ,------|------|------| |------+--------+------. - * | | |F4/CA | |F11/CA| | | - * | ENTER| TAB |------| |------| BSPC | SPACE| - * | | | TRANS| |F12/SA| | | - * `--------------------' `----------------------' - * CAG = CTRL-ALT-GUI - * CA = CTRL-ALT - * SA = SHIFT-ALT - * - */ -[QWERTY] = KEYMAP( - // left hand - KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, - KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_DEL), - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - M(OBRACE), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, - M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, - LCAG_T(KC_F5), KC_TRNS, - MT((MOD_LALT | MOD_LCTL), KC_F4), - KC_ENT,KC_TAB,KC_TRNS, - // right hand - KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, - KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, ALL_T(KC_RBRACKET), - KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOTE), - KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,M(CBRACE), - KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), - KC_TRNS, LCAG_T(KC_F8), - MT((MOD_LALT | MOD_LCTL), KC_F11), - MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux) -}; - -static uint16_t key_timer; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case OBRACE: { - if (record->event.pressed) { - key_timer = timer_read(); - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { - register_code(KC_RALT); - register_code(KC_QUOTE); - unregister_code(KC_QUOTE); - unregister_code(KC_RALT); - } - } - break; - } - case CBRACE: { - if (record->event.pressed) { - key_timer = timer_read(); - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { - register_code(KC_RALT); - register_code(KC_BSLS); - unregister_code(KC_BSLS); - unregister_code(KC_RALT); - } - } - break; - } - case OBRACK: { - if (record->event.pressed) { - key_timer = timer_read(); - register_code(KC_LALT); - } else { - unregister_code(KC_LALT); - if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { - register_code(KC_RALT); - register_code(KC_LBRACKET); - unregister_code(KC_LBRACKET); - unregister_code(KC_RALT); - } - } - break; - } - case CBRACK: { - if (record->event.pressed) { - key_timer = timer_read(); - register_code(KC_LALT); - } else { - unregister_code(KC_LALT); - if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { - register_code(KC_RALT); - register_code(KC_RBRACKET); - unregister_code(KC_RBRACKET); - unregister_code(KC_RALT); - } - } - break; - } - case CAPS: { - if (record->event.pressed) { - register_code(KC_CAPSLOCK); - } else { - unregister_code(KC_CAPSLOCK); - } - 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) { - case 1: - ergodox_right_led_3_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } - - // Turn the caps lock led on - if (host_keyboard_leds() & (1< - -,--------------------------------------------------. ,--------------------------------------------------. -| \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | -|--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| -|Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | -|--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| -| {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | -'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------' - |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| - '----------------------------------' '----------------------------------' - ,-------------. ,-------------. - |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| - ,------|------|------| |------+--------+------. - | | |F4/CA | |F11/CA| | | - | ENTER| TAB |------| |------| BSPC | SPACE| - | | |F3/SA | |F12/SA| | | - '--------------------' '----------------------' - CAG = CTRL-ALT-GUI - CA = CTRL-ALT - SA = SHIFT-ALT - - - -### Keymap 1: Aux layer - -

-
-,--------------------------------------------------.           ,--------------------------------------------------.
-|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
-|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
-|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
-'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
-  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
-  '----------------------------------'                                       '----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |      |      |       |      | Play |
-                                ,------|------|------|       |------+------+------.
-                                |      |      |      |       | VolUp|      |      |
-                                | Lclk | Rclk |------|       |------| Prev | Next |
-                                |      |      |  L2  |       | VolDn|      |      |
-                                '--------------------'       '--------------------'
-
-
- -### Keymap 2: QWERTY layer - -

-
-,--------------------------------------------------.           ,--------------------------------------------------.
-|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
-|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
-|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
-|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
-| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
-'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
-  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
-  '----------------------------------'                                       '----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
-                                ,------|------|------|       |------+--------+------.
-                                |      |      |F4/CA |       |F11/CA|        |      |
-                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
-                                |      |      | TRANS|       |F12/SA|        |      |
-                                '--------------------'       '----------------------'
- CAG = CTRL-ALT-GUI
-  CA = CTRL-ALT
-  SA = SHIFT-ALT
-
-
- - -## Generation of .hex file -> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox) - -> Execute install.sh and generate.sh scripts. - -> Flash with `teensy_loader` binary (should be installed from previous step) diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png deleted file mode 100644 index 1d2583740c..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c deleted file mode 100644 index 1d8e66a082..0000000000 --- a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Grv | 1 | 2 | 3 | 4 | 5 | L1 | | L2 | 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | \/LCtrl| A | S | D | F | G |------| |------| H | J | K | L | ; |'/RCtrl | - * |--------+------+------+------+------+------| RAlt | | RAlt |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | ~L1 | LCtrl| Left| Right| LAlt | | LAlt | Up | Down | RCtrl| ~L2 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Del | Ins | | Esc | App | - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space|Backsp|------| |------| LGui |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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(SYMB), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, - CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_RALT, - MO(SYMB), KC_LCTRL, KC_LEFT,KC_RGHT,KC_LALT, - KC_DELT,KC_INS, - KC_HOME, - KC_SPC,KC_BSPC,KC_END, - // right hand - TG(MDIA), KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), - KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_LALT,KC_UP, KC_DOWN,KC_RCTRL, MO(MDIA), - KC_ESC, KC_APP, - KC_PGUP, - KC_PGDN, KC_LGUI, 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 | 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_0, KC_0, KC_DOT, 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/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md deleted file mode 100644 index 4839988d9b..0000000000 --- a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Emacs-OSX-DeadKeys Configuration - -Since I'm an Emacs user, ctrl keys are very important and gets a placement where the usual caps_lock is. There -are an extra pair of ctrls, just in case there where problems with the holding one's, but not as comfortable. - -Gui button takes a predominant place on the thumb cluster, as I'm using a mac os x and it relies heavily on it. - -Finally there is also two Right Alts to easily access to accented letters of the spanish alphabet. - -![Default](default_highres.png) diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile b/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile deleted file mode 100644 index b673c5ce52..0000000000 --- a/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# Having a file like this allows you to override Makefile definitions -# for your own particular keymap - -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -COMMAND_ENABLE = no # Commands for debug and configuration - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/config.h b/keyboards/ergodox_ez/keymaps/erez_experimental/config.h deleted file mode 100644 index e5d7fe1885..0000000000 --- a/keyboards/ergodox_ez/keymaps/erez_experimental/config.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 300 - -#undef LEADER_TIMEOUT -#define LEADER_TIMEOUT 300 - -#endif diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c deleted file mode 100644 index 04ad2a8167..0000000000 --- a/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c +++ /dev/null @@ -1,199 +0,0 @@ -#include -#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' | - * |--------+------+------+------+------+------| 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|Leader|------| |------| Tab/L1 |Enter | - * | | | 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_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC), - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, - ALT_T(KC_APP), KC_LGUI, - KC_HOME, - KC_SPC,KC_LEAD,KC_END, - // right hand - KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_MINS), - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN,LT(SYMB, KC_TAB), KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 1 | 2 | 3 | 4 | 5 |------| |------| & | _ | - | ; | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 6 | 7 | 8 | 9 | 0 | | | | | | @ | = | % | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | |NxtTab|PrvTab| | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN), - 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, - KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS, - KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | PgUp | Home | End | PgDn | |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_PGUP, KC_HOME, KC_END, 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, 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) - [2] = ACTION_MACRO_TAP(0), // Eric Tang's Famous Macro! - [3] = ACTION_MACRO_TAP(1) // Eric Tang's Famous Macro! -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - return MACRO_NONE; -}; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - -}; - -LEADER_EXTERNS(); - -// 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; - } - - LEADER_DICTIONARY() { - leading = false; - leader_end(); - - SEQ_ONE_KEY(KC_W) { - register_code(KC_LALT); - register_code(KC_F4); - unregister_code(KC_F4); - unregister_code(KC_LALT); - } - SEQ_ONE_KEY(KC_O) { - register_code(KC_LCTL); - register_code(KC_LSFT); - register_code(KC_O); - unregister_code(KC_O); - unregister_code(KC_LSFT); - unregister_code(KC_LCTL); - } - } -} - diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md b/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md deleted file mode 100644 index 66acfa187b..0000000000 --- a/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# Erez's experimental layout - -This is my personal layout which I use to test out ideas which may or may not make it onto the default layout we ship with. It's based off the default layout, with various tweaks. - -Changelog: - -## May 24, 2016: - -* Implements Leader key example - * Leader, W sends Alt-F4 - * Leader, O sends Ctrl-shift-o (a shortcut I use in FrontApp) - -## May 8, 2016: - -* Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held -* Tweaked the positions of the numbers on the symbol layer. Basically, 12345 are now directly under their number-row counterparts in layer 0. You can imagine pulling the number row down to the home row. And 67890 are directly under 12345 - so it's a matter of just adding 5 and going to the next row (1+5 = 6, 2+5 = 7 and so on). -* Tweaks media/nav layer - * Removes mouse control, as I don't use it - * Makes left home row keys PgUp, Home, End, PgDn - -## Apr 29, 2016: - -* Tweaks the Hyper and Meh key to send brackets when tapped -* Turns bottom-right key into a minus/underscore (easy to reach with the right pinky) - -## Apr 25, 2016: - -* Made it so that the right and left Shift keys send opening and closing parens ( ) when tapped - -## Feb 11, 2016: - -* Updated ASCII legend for thumb clusters -* Made it so outer left-hand thumb key is L1 momentary toggle -* Added % and @ to L1 -* Swapped positions for _ and - on L1 - -## Feb 5, 2016: - -* A whole new design for the symbol layer. Specifically: - * Put the minus, underscore, and semicolon right in the homerow for the right hand - * Parens are in better places for me - * The arrow keys now send Ctrl-PgUp and Ctrl-PgDn, for switching browser tabs with the arrows when in symbol layer - * Tab (right-hand outer thumb key) now does double duty to toggle symbol layer when held down - * Backspace (left-hand outer thumb key) now just toggles symbol layer (I wasn't using it as a backspace) - - -## Jan 19, 2016: - -* Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic. -* Made ' into dual-action key (Win/Cmd when held down). - diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c b/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c deleted file mode 100644 index b1cecf0ddd..0000000000 --- a/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c +++ /dev/null @@ -1,210 +0,0 @@ -// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan. -// -// chschmitz, 2016-01-27 -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_german.h" - -// Layer names -#define BASE 0 // default layer -#define SYMB 1 // symbol layer -#define MDIA 2 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * X'es mark the spots where this is different from the "german" layout which it is based on. - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |X Esc X| 1 | 2 | 3 | 4 | 5 |X ` X| |XPRSCX| 6 | 7 | 8 | 9 | 0 | ß | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * |X Tab X| Q | W | E | R | T |X L1 X| |X L1 X| Z | U | I | O | P | Ü | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 | - * |--------+------+------+------+------+------|X L2 X| |X L2 X|------+------+------+------+------+--------| - * | LShift | Y | X | C | V | B | | | | N | M | , | . |X - X| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |XLGuiX|X ^ X|X < X|XLEFTX|XRIGHT| |XDownX|X Up X|X # X|X + X|XRGuiX| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * |XCTRLX|XALTX | | Alt |Ctrl/Esc| - * ,------+------+------| |------+--------+------. - * |XXX |XXX | Home | | PgUp |XXX |XXX | - * | Bkspc|Del |------| |------| Enter | Space| - * | | | 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, DE_ACUT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1), - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, MO(2), - KC_LGUI, DE_CIRC, DE_LESS, KC_LEFT, KC_RIGHT, - KC_LCTRL, KC_LALT, - KC_HOME, - KC_BSPC,KC_DELT,KC_END, - // right hand - KC_PSCREEN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MO(1), DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, - KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE), - MO(2), KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT, - KC_DOWN, KC_UP, DE_HASH, DE_PLUS, KC_RGUI, - KC_RALT, KC_RCTRL, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC - ), -// [BASE] = KEYMAP( // layer 0 : default -// // left hand -// KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY, -// KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), -// KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, -// KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), -// LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT, DE_MINS, DE_PLUS, -// ALT_T(KC_APP), KC_LGUI, -// KC_HOME, -// KC_SPC,KC_BSPC,KC_END, -// // right hand -// KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, -// TG(2), DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, -// KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE), -// MEH_T(KC_NO),KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(DE_MINS), KC_RSFT, -// KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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,DE_EXLM,DE_AT, DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS, - KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV, - KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_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, DE_ASTR, KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, DE_PLUS, KC_TRNS, - KC_TRNS, DE_AMPR, KC_1, KC_2, KC_3, DE_BSLS, KC_TRNS, - KC_TRNS,KC_DOT, KC_0, DE_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | |Brwser|Brwser| - * | Lclk | Rclk |------| |------|Back |Forwd | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS, - KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, - KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, - KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_BTN1, KC_BTN2, KC_TRNS, - // right hand - KC_TRNS, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11, - KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12, - KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, - KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_WBAK, KC_WFWD -), -}; - -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) { - case SYMB: - ergodox_right_led_1_on(); - break; - case MDIA: - ergodox_right_led_2_on(); - break; - default: - ergodox_board_led_off(); - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png deleted file mode 100644 index a0ef551e12..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png deleted file mode 100644 index 56aea1dca4..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png deleted file mode 100644 index 76a1aa5d7a..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md b/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md deleted file mode 100644 index 557d85a8a4..0000000000 --- a/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -# German Layout for the ErgoDox - -This layout is inspired by the "kinesis-qwerty-mod" from benblazak's -[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the -[qmk_firmware](https://github.com/jackhumbert/qmk_firmware). -The goal was to have a layout that is pretty close to an ordinary German -keyboard, so I don't have to make adjustments on the operating system level -and I keep some of the muscle memory to use a regular keyboard. - -Modifications I made with regard to the aforementioned layouts: - -* The key layout is pretty close to the layout of a German Kinesis Ergo Elan. - The only exception I made is that I reversed the "up" and "down" cursor keys, - since that feels more natural to me. - -* All layer changes are "momentary", i.e. they only last as long as the respective key is pressed. - -* I sacrificed the Hyper and Meh keys, which I don't use, and put layer change keys in their place. - -* I added a PrintScreen key which I use quite regularly for screenshots. - -## Default Layer - -![Layout of the default layer](layout.png "Layout of the default layer") - -## Code Layer - -![Layout of the code layer](layout-code.png "Layout of the code layer") - -## Media Layer - -![Layout of the media layer](layout-media.png "Layout of the media layer") - -Christoph Schmitz <schm4704 at web dot de> -2016-01-28 diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py deleted file mode 100644 index 7076a6ecb2..0000000000 --- a/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py +++ /dev/null @@ -1,710 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Compiler for keymap.c files - -This scrip will generate a keymap.c file from a simple -markdown file with a specific layout. - -Usage: - python compile_keymap.py INPUT_PATH [OUTPUT_PATH] -""" -from __future__ import division -from __future__ import print_function -from __future__ import absolute_import -from __future__ import unicode_literals - -import os -import io -import re -import sys -import json -import unicodedata -import collections -import itertools as it - -PY2 = sys.version_info.major == 2 - -if PY2: - chr = unichr - - -KEYBOARD_LAYOUTS = { - # These map positions in the parsed layout to - # positions in the KEYMAP MATRIX - 'ergodox_ez': [ - [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44], - [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51], - [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57], - [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64], - [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69], - [ 32, 33], [70, 71 ], - [ 34], [72 ], - [ 35, 36, 37], [73, 74, 75 ], - ] -} - -ROW_INDENTS = { - 'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0] -} - -BLANK_LAYOUTS = [ -# Compact Layout -""" -.------------------------------------.------------------------------------. -| | | | | | | | | | | | | | | -!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! -| | | | | | | | | | | | | | | -!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! -| | | | | | |-----!-----! | | | | | | -!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! -| | | | | | | | | | | | | | | -'-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' -""", - -# Wide Layout -""" -.---------------------------------------------. .---------------------------------------------. -| | | | | | | | ! | | | | | | | -!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! -| | | | | | | | ! | | | | | | | -!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! -| | | | | | |-------! !-------! | | | | | | -!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! -| | | | | | | | ! | | | | | | | -'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' - | | | | | | ! | | | | | - '------------------------------' '------------------------------' - .---------------. .---------------. - | | | ! | | - .-------+-------+-------! !-------+-------+-------. - ! ! | | ! | ! ! - ! ! !-------! !-------! ! ! - | | | | ! | | | - '-----------------------' '-----------------------' -""", -] - - -DEFAULT_CONFIG = { - "keymaps_includes": [ - "keymap_common.h", - ], - 'filler': "-+.'!:x", - 'separator': "|", - 'default_key_prefix': ["KC_"], -} - - -SECTIONS = [ - 'layout_config', - 'layers', -] - - -# Markdown Parsing - -ONELINE_COMMENT_RE = re.compile(r""" - ^ # comment must be at the start of the line - \s* # arbitrary whitespace - // # start of the comment - (.*) # the comment - $ # until the end of line -""", re.MULTILINE | re.VERBOSE -) - -INLINE_COMMENT_RE = re.compile(r""" - ([\,\"\[\]\{\}\d]) # anythig that might end a expression - \s+ # comment must be preceded by whitespace - // # start of the comment - \s # and succeded by whitespace - (?:[^\"\]\}\{\[]*) # the comment (except things which might be json) - $ # until the end of line -""", re.MULTILINE | re.VERBOSE) - -TRAILING_COMMA_RE = re.compile(r""" - , # the comma - (?:\s*) # arbitrary whitespace - $ # only works if the trailing comma is followed by newline - (\s*) # arbitrary whitespace - ([\]\}]) # end of an array or object -""", re.MULTILINE | re.VERBOSE) - - -def loads(raw_data): - if isinstance(raw_data, bytes): - raw_data = raw_data.decode('utf-8') - - raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) - raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) - raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data) - return json.loads(raw_data) - - -def parse_config(path): - def reset_section(): - section.update({ - 'name': section.get('name', ""), - 'sub_name': "", - 'start_line': -1, - 'end_line': -1, - 'code_lines': [], - }) - - def start_section(line_index, line): - end_section() - if line.startswith("# "): - name = line[2:] - elif line.startswith("## "): - name = line[3:] - else: - name = "" - - name = name.strip().replace(" ", "_").lower() - if name in SECTIONS: - section['name'] = name - else: - section['sub_name'] = name - section['start_line'] = line_index - - def end_section(): - if section['start_line'] >= 0: - if section['name'] == 'layout_config': - config.update(loads("\n".join( - section['code_lines'] - ))) - elif section['sub_name'].startswith('layer'): - layer_name = section['sub_name'] - config['layer_lines'][layer_name] = section['code_lines'] - - reset_section() - - def amend_section(line_index, line): - section['end_line'] = line_index - section['code_lines'].append(line) - - config = DEFAULT_CONFIG.copy() - config.update({ - 'layer_lines': collections.OrderedDict(), - 'macro_ids': {'UM'}, - 'unicode_macros': {}, - }) - - section = {} - reset_section() - - with io.open(path, encoding="utf-8") as fh: - for i, line in enumerate(fh): - if line.startswith("#"): - start_section(i, line) - elif line.startswith(" "): - amend_section(i, line[4:]) - else: - # TODO: maybe parse description - pass - - end_section() - assert 'layout' in config - return config - -# header file parsing - -IF0_RE = re.compile(r""" - ^ - #if 0 - $.*? - #endif -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -COMMENT_RE = re.compile(r""" - /\* - .*? - \*/" -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def read_header_file(path): - with io.open(path, encoding="utf-8") as fh: - data = fh.read() - data, _ = COMMENT_RE.subn("", data) - data, _ = IF0_RE.subn("", data) - return data - - -def regex_partial(re_str_fmt, flags): - def partial(*args, **kwargs): - re_str = re_str_fmt.format(*args, **kwargs) - return re.compile(re_str, flags) - return partial - - -KEYDEF_REP = regex_partial(r""" - #define - \s - ( - (?:{}) # the prefixes - (?:\w+) # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_RE = re.compile(r""" - ( - enum - \s\w+\s - \{ - .*? # the enum content - \} - ; - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_KEY_REP = regex_partial(r""" - ( - {} # the prefixes - \w+ # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def parse_keydefs(config, data): - prefix_options = "|".join(config['key_prefixes']) - keydef_re = KEYDEF_REP(prefix_options) - enum_key_re = ENUM_KEY_REP(prefix_options) - for match in keydef_re.finditer(data): - yield match.groups()[0] - - for enum_match in ENUM_RE.finditer(data): - enum = enum_match.groups()[0] - for key_match in enum_key_re.finditer(enum): - yield key_match.groups()[0] - - -def parse_valid_keys(config, out_path): - basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) - dirpaths = [] - subpaths = [] - while len(subpaths) < 6: - path = os.path.join(basepath, *subpaths) - dirpaths.append(path) - dirpaths.append(os.path.join(path, "tmk_core", "common")) - dirpaths.append(os.path.join(path, "quantum")) - subpaths.append('..') - - includes = set(config['keymaps_includes']) - includes.add("keycode.h") - - valid_keycodes = set() - for dirpath, include in it.product(dirpaths, includes): - include_path = os.path.join(dirpath, include) - if os.path.exists(include_path): - header_data = read_header_file(include_path) - valid_keycodes.update( - parse_keydefs(config, header_data) - ) - return valid_keycodes - - -# Keymap Parsing - -def iter_raw_codes(layer_lines, filler, separator): - filler_re = re.compile("[" + filler + " ]") - for line in layer_lines: - line, _ = filler_re.subn("", line.strip()) - if not line: - continue - codes = line.split(separator) - for code in codes[1:-1]: - yield code - - -def iter_indexed_codes(raw_codes, key_indexes): - key_rows = {} - key_indexes_flat = [] - - for row_index, key_indexes in enumerate(key_indexes): - for key_index in key_indexes: - key_rows[key_index] = row_index - key_indexes_flat.extend(key_indexes) - assert len(raw_codes) == len(key_indexes_flat) - for raw_code, key_index in zip(raw_codes, key_indexes_flat): - # we keep track of the row mostly for layout purposes - yield raw_code, key_index, key_rows[key_index] - - -LAYER_CHANGE_RE = re.compile(r""" - (DF|TG|MO)\(\d+\) -""", re.VERBOSE) - - -MACRO_RE = re.compile(r""" - M\(\w+\) -""", re.VERBOSE) - - -UNICODE_RE = re.compile(r""" - U[0-9A-F]{4} -""", re.VERBOSE) - - -NON_CODE = re.compile(r""" - ^[^A-Z0-9_]$ -""", re.VERBOSE) - - -def parse_uni_code(raw_code): - macro_id = "UC_" + ( - unicodedata.name(raw_code) - .replace(" ", "_") - .replace("-", "_") - ) - code = "M({})".format(macro_id) - uc_hex = "{:04X}".format(ord(raw_code)) - return code, macro_id, uc_hex - - -def parse_key_code(raw_code, key_prefixes, valid_keycodes): - if raw_code in valid_keycodes: - return raw_code - - for prefix in key_prefixes: - code = prefix + raw_code - if code in valid_keycodes: - return code - - -def parse_code(raw_code, key_prefixes, valid_keycodes): - if not raw_code: - return 'KC_TRNS', None, None - - if LAYER_CHANGE_RE.match(raw_code): - return raw_code, None, None - - if MACRO_RE.match(raw_code): - macro_id = raw_code[2:-1] - return raw_code, macro_id, None - - if UNICODE_RE.match(raw_code): - hex_code = raw_code[1:] - return parse_uni_code(chr(int(hex_code, 16))) - - if NON_CODE.match(raw_code): - return parse_uni_code(raw_code) - - code = parse_key_code(raw_code, key_prefixes, valid_keycodes) - return code, None, None - - -def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): - keymap = {} - raw_codes = list(iter_raw_codes( - layer_lines, config['filler'], config['separator'] - )) - indexed_codes = iter_indexed_codes(raw_codes, key_indexes) - key_prefixes = config['key_prefixes'] - for raw_code, key_index, row_index in indexed_codes: - code, macro_id, uc_hex = parse_code( - raw_code, key_prefixes, valid_keycodes - ) - # TODO: line numbers for invalid codes - err_msg = "Could not parse key '{}' on row {}".format( - raw_code, row_index - ) - assert code is not None, err_msg - # print(repr(raw_code), repr(code), macro_id, uc_hex) - if macro_id: - config['macro_ids'].add(macro_id) - if uc_hex: - config['unicode_macros'][macro_id] = uc_hex - keymap[key_index] = (code, row_index) - return keymap - - -def parse_keymaps(config, valid_keycodes): - keymaps = collections.OrderedDict() - key_indexes = config.get( - 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] - ) - # TODO: maybe validate key_indexes - - for layer_name, layer_lines, in config['layer_lines'].items(): - keymaps[layer_name] = parse_keymap( - config, key_indexes, layer_lines, valid_keycodes - ) - return keymaps - -# keymap.c output - -USERCODE = """ -// 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) { - case L1: - ergodox_right_led_1_on(); - break; - case L2: - ergodox_right_led_2_on(); - break; - case L3: - ergodox_right_led_3_on(); - break; - case L4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - break; - case L5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - // case L6: - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - // case L7: - // ergodox_right_led_1_on(); - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - default: - ergodox_board_led_off(); - break; - } -}; -""" - -MACROCODE = """ -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 -#define UC_MODE_OSX 2 - -// TODO: allow default mode to be configured -static uint16_t unicode_mode = UC_MODE_WIN; - -uint16_t hextokeycode(uint8_t hex) {{ - if (hex == 0x0) {{ - return KC_P0; - }} - if (hex < 0xA) {{ - return KC_P1 + (hex - 0x1); - }} - return KC_A + (hex - 0xA); -}} - -void unicode_action_function(uint16_t hi, uint16_t lo) {{ - switch (unicode_mode) {{ - case UC_MODE_WIN: - register_code(KC_LALT); - - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LALT); - break; - case UC_MODE_LINUX: - register_code(KC_LCTL); - register_code(KC_LSFT); - - register_code(KC_U); - unregister_code(KC_U); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - case UC_MODE_OSX: - break; - }} -}} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ - if (!record->event.pressed) {{ - return MACRO_NONE; - }} - // MACRODOWN only works in this function - switch(id) {{ - case UM: - unicode_mode = (unicode_mode + 1) % 2; - break; -{macro_cases} -{unicode_macro_cases} - default: - break; - }} - return MACRO_NONE; -}}; -""" - - -UNICODE_MACRO_TEMPLATE = """ -case {macro_id}: - unicode_action_function(0x{hi:02x}, 0x{lo:02x}); - break; -""".strip() - - -def unicode_macro_cases(config): - for macro_id, uc_hex in config['unicode_macros'].items(): - hi = int(uc_hex, 16) >> 8 - lo = int(uc_hex, 16) & 0xFF - unimacro_keys = ", ".join( - "T({})".format( - "KP_" + digit if digit.isdigit() else digit - ) for digit in uc_hex - ) - yield UNICODE_MACRO_TEMPLATE.format( - macro_id=macro_id, hi=hi, lo=lo - ) - - -def iter_keymap_lines(keymap, row_indents=None): - col_widths = {} - col = 0 - # first pass, figure out the column widths - prev_row_index = None - for code, row_index in keymap.values(): - if row_index != prev_row_index: - col = 0 - if row_indents: - col = row_indents[row_index] - col_widths[col] = max(len(code), col_widths.get(col, 0)) - prev_row_index = row_index - col += 1 - - # second pass, yield the cell values - col = 0 - prev_row_index = None - for key_index in sorted(keymap): - code, row_index = keymap[key_index] - if row_index != prev_row_index: - col = 0 - yield "\n" - if row_indents: - for indent_col in range(row_indents[row_index]): - pad = " " * (col_widths[indent_col] - 4) - yield (" /*-*/" + pad) - col = row_indents[row_index] - else: - yield pad - yield " {}".format(code) - if key_index < len(keymap) - 1: - yield "," - # This will be yielded on the next iteration when - # we know that we're not at the end of a line. - pad = " " * (col_widths[col] - len(code)) - prev_row_index = row_index - col += 1 - - -def iter_keymap_parts(config, keymaps): - # includes - for include_path in config['keymaps_includes']: - yield '#include "{}"\n'.format(include_path) - - yield "\n" - - # definitions - for i, macro_id in enumerate(sorted(config['macro_ids'])): - yield "#define {} {}\n".format(macro_id, i) - - yield "\n" - - for i, layer_name in enumerate(config['layer_lines']): - yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) - - yield "\n" - - # keymaps - yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" - - for i, layer_name in enumerate(config['layer_lines']): - # comment - layer_lines = config['layer_lines'][layer_name] - prefixed_lines = " * " + " * ".join(layer_lines) - yield "/*\n{} */\n".format(prefixed_lines) - - # keymap codes - keymap = keymaps[layer_name] - row_indents = ROW_INDENTS.get(config['layout']) - keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) - yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) - - yield "};\n\n" - - # no idea what this is for - yield "const uint16_t PROGMEM fn_actions[] = {};\n" - - # macros - yield MACROCODE.format( - macro_cases="", - unicode_macro_cases="\n".join(unicode_macro_cases(config)), - ) - - # TODO: dynamically create blinking lights - yield USERCODE - - -def main(argv=sys.argv[1:]): - if not argv or '-h' in argv or '--help' in argv: - print(__doc__) - return 0 - - in_path = os.path.abspath(argv[0]) - if not os.path.exists(in_path): - print("No such file '{}'".format(in_path)) - return 1 - - if len(argv) > 1: - out_path = os.path.abspath(argv[1]) - else: - dirname = os.path.dirname(in_path) - out_path = os.path.join(dirname, "keymap.c") - - config = parse_config(in_path) - valid_keys = parse_valid_keys(config, out_path) - keymaps = parse_keymaps(config, valid_keys) - - with io.open(out_path, mode="w", encoding="utf-8") as fh: - for part in iter_keymap_parts(config, keymaps): - fh.write(part) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c deleted file mode 100644 index 5fcc14d518..0000000000 --- a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c +++ /dev/null @@ -1,783 +0,0 @@ -#include "ergodox_ez.h" -#include "action_layer.h" -#include "keymap.h" -#include "keymap_german.h" - -#define UC_ASYMPTOTICALLY_EQUAL_TO 0 -#define UC_DIVISION_SIGN 1 -#define UC_DOWNWARDS_ARROW 2 -#define UC_ELEMENT_OF 3 -#define UC_EMPTY_SET 4 -#define UC_FOR_ALL 5 -#define UC_GREEK_CAPITAL_LETTER_ALPHA 6 -#define UC_GREEK_CAPITAL_LETTER_BETA 7 -#define UC_GREEK_CAPITAL_LETTER_CHI 8 -#define UC_GREEK_CAPITAL_LETTER_DELTA 9 -#define UC_GREEK_CAPITAL_LETTER_EPSILON 10 -#define UC_GREEK_CAPITAL_LETTER_ETA 11 -#define UC_GREEK_CAPITAL_LETTER_GAMMA 12 -#define UC_GREEK_CAPITAL_LETTER_IOTA 13 -#define UC_GREEK_CAPITAL_LETTER_KAPPA 14 -#define UC_GREEK_CAPITAL_LETTER_LAMDA 15 -#define UC_GREEK_CAPITAL_LETTER_MU 16 -#define UC_GREEK_CAPITAL_LETTER_NU 17 -#define UC_GREEK_CAPITAL_LETTER_OMEGA 18 -#define UC_GREEK_CAPITAL_LETTER_OMICRON 19 -#define UC_GREEK_CAPITAL_LETTER_PHI 20 -#define UC_GREEK_CAPITAL_LETTER_PI 21 -#define UC_GREEK_CAPITAL_LETTER_PSI 22 -#define UC_GREEK_CAPITAL_LETTER_RHO 23 -#define UC_GREEK_CAPITAL_LETTER_SIGMA 24 -#define UC_GREEK_CAPITAL_LETTER_TAU 25 -#define UC_GREEK_CAPITAL_LETTER_THETA 26 -#define UC_GREEK_CAPITAL_LETTER_UPSILON 27 -#define UC_GREEK_CAPITAL_LETTER_XI 28 -#define UC_GREEK_CAPITAL_LETTER_ZETA 29 -#define UC_GREEK_SMALL_LETTER_ALPHA 30 -#define UC_GREEK_SMALL_LETTER_BETA 31 -#define UC_GREEK_SMALL_LETTER_CHI 32 -#define UC_GREEK_SMALL_LETTER_DELTA 33 -#define UC_GREEK_SMALL_LETTER_EPSILON 34 -#define UC_GREEK_SMALL_LETTER_ETA 35 -#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36 -#define UC_GREEK_SMALL_LETTER_GAMMA 37 -#define UC_GREEK_SMALL_LETTER_IOTA 38 -#define UC_GREEK_SMALL_LETTER_KAPPA 39 -#define UC_GREEK_SMALL_LETTER_LAMDA 40 -#define UC_GREEK_SMALL_LETTER_MU 41 -#define UC_GREEK_SMALL_LETTER_NU 42 -#define UC_GREEK_SMALL_LETTER_OMEGA 43 -#define UC_GREEK_SMALL_LETTER_OMICRON 44 -#define UC_GREEK_SMALL_LETTER_PHI 45 -#define UC_GREEK_SMALL_LETTER_PI 46 -#define UC_GREEK_SMALL_LETTER_PSI 47 -#define UC_GREEK_SMALL_LETTER_RHO 48 -#define UC_GREEK_SMALL_LETTER_SIGMA 49 -#define UC_GREEK_SMALL_LETTER_TAU 50 -#define UC_GREEK_SMALL_LETTER_THETA 51 -#define UC_GREEK_SMALL_LETTER_UPSILON 52 -#define UC_GREEK_SMALL_LETTER_XI 53 -#define UC_GREEK_SMALL_LETTER_ZETA 54 -#define UC_INFINITY 55 -#define UC_LEFTWARDS_ARROW 56 -#define UC_MULTIPLICATION_SIGN 57 -#define UC_NOT_AN_ELEMENT_OF 58 -#define UC_NOT_EQUAL_TO 59 -#define UC_PLUS_MINUS_SIGN 60 -#define UC_RIGHTWARDS_ARROW 61 -#define UC_SUBSCRIPT_EIGHT 62 -#define UC_SUBSCRIPT_FIVE 63 -#define UC_SUBSCRIPT_FOUR 64 -#define UC_SUBSCRIPT_NINE 65 -#define UC_SUBSCRIPT_ONE 66 -#define UC_SUBSCRIPT_SEVEN 67 -#define UC_SUBSCRIPT_SIX 68 -#define UC_SUBSCRIPT_THREE 69 -#define UC_SUBSCRIPT_TWO 70 -#define UC_SUBSCRIPT_ZERO 71 -#define UC_SUPERSCRIPT_EIGHT 72 -#define UC_SUPERSCRIPT_FIVE 73 -#define UC_SUPERSCRIPT_FOUR 74 -#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75 -#define UC_SUPERSCRIPT_NINE 76 -#define UC_SUPERSCRIPT_ONE 77 -#define UC_SUPERSCRIPT_SEVEN 78 -#define UC_SUPERSCRIPT_SIX 79 -#define UC_SUPERSCRIPT_THREE 80 -#define UC_SUPERSCRIPT_TWO 81 -#define UC_SUPERSCRIPT_ZERO 82 -#define UC_THERE_DOES_NOT_EXIST 83 -#define UC_THERE_EXISTS 84 -#define UC_UPWARDS_ARROW 85 -#define UC_VULGAR_FRACTION_ONE_EIGHTH 86 -#define UC_VULGAR_FRACTION_ONE_FIFTH 87 -#define UC_VULGAR_FRACTION_ONE_HALF 88 -#define UC_VULGAR_FRACTION_ONE_QUARTER 89 -#define UC_VULGAR_FRACTION_ONE_SIXTH 90 -#define UC_VULGAR_FRACTION_ONE_THIRD 91 -#define UC_VULGAR_FRACTION_THREE_QUARTERS 92 -#define UC_VULGAR_FRACTION_TWO_THIRDS 93 -#define UM 94 - -#define L0 0 // layer_0 -#define L1 1 // layer_1 -#define L2 2 // layer_2 -#define L3 3 // layer_3 -#define L4 4 // layer_4 -#define L5 5 // layer_5 -#define L6 6 // layer_6 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* - * .------------------------------------.------------------------------------. - * |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| - * '------------------------' '------------------------' - * .-----------. .-----------. - * |INS |TG(2)| !M(UM)|DELT | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | APP | ! PGUP| ! ! - * ! ! !-----! !-----! ! ! - * |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| - * '-----------------' '-----------------' - */ -[L0] = KEYMAP( - MO(5), DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT, - MO(4), DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME, - MO(1), DE_U, DE_I, DE_A, DE_E, DE_O, - MO(3), DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END, - KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_INS, TG(2), - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_APP, - /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, KC_LSFT, KC_ESC, - DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC, - TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, - /*-*/ DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS, - KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, - /*-*/ /*-*/ KC_RCTL, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, - M(UM), KC_DELT, - KC_PGUP, - KC_PGDN, KC_ENTER, KC_SPACE -), -/* - * .------------------------------------.------------------------------------. - * | |EXLM|DQOT|PARA| | | | | | | | |RING| | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | ← | ↓ | → | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L1] = KEYMAP( - KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS, - KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC, - KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS, - KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS, - /*-*/ DE_DLR, DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST, - KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS, - /*-*/ /*-*/ KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L2] = KEYMAP( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL, - KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, - /*-*/ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS, - KC_NLCK, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS, - /*-*/ /*-*/ KC_P0, KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L3] = KEYMAP( - KC_TRNS, M(UC_SUPERSCRIPT_ONE), M(UC_SUPERSCRIPT_TWO), M(UC_SUPERSCRIPT_THREE), M(UC_SUPERSCRIPT_FOUR), M(UC_SUPERSCRIPT_FIVE), M(UC_FOR_ALL), - KC_TRNS, M(UC_MULTIPLICATION_SIGN), M(UC_VULGAR_FRACTION_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_VULGAR_FRACTION_ONE_QUARTER), M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS, - KC_TRNS, KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET), - KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_SUPERSCRIPT_SIX), M(UC_SUPERSCRIPT_SEVEN), M(UC_SUPERSCRIPT_EIGHT), M(UC_SUPERSCRIPT_NINE), M(UC_SUPERSCRIPT_ZERO), KC_TRNS, - KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS, M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ M(UC_INFINITY), M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS, - KC_TRNS, DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS, - /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | θ | | | | | | β | μ | | | | ψ | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L4] = KEYMAP( - KC_TRNS, M(UC_SUBSCRIPT_ONE), M(UC_SUBSCRIPT_TWO), M(UC_SUBSCRIPT_THREE), M(UC_SUBSCRIPT_FOUR), M(UC_SUBSCRIPT_FIVE), KC_TRNS, - KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI), M(UC_GREEK_SMALL_LETTER_PI), M(UC_GREEK_SMALL_LETTER_PHI), M(UC_GREEK_SMALL_LETTER_OMEGA), M(UC_GREEK_SMALL_LETTER_GAMMA), KC_TRNS, - KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA), M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON), - KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_SUBSCRIPT_SIX), M(UC_SUBSCRIPT_SEVEN), M(UC_SUBSCRIPT_EIGHT), M(UC_SUBSCRIPT_NINE), M(UC_SUBSCRIPT_ZERO), KC_TRNS, - KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA), M(UC_GREEK_SMALL_LETTER_XI), M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_SMALL_LETTER_ZETA), - /*-*/ M(UC_GREEK_SMALL_LETTER_SIGMA), M(UC_GREEK_SMALL_LETTER_NU), M(UC_GREEK_SMALL_LETTER_RHO), M(UC_GREEK_SMALL_LETTER_TAU), M(UC_GREEK_SMALL_LETTER_DELTA), M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA), - KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA), M(UC_GREEK_SMALL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_PSI), - /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | | | | | | | | | | | | | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | Θ | | | | | | Β | Μ | | | | Ψ | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L5] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI), M(UC_GREEK_CAPITAL_LETTER_PI), M(UC_GREEK_CAPITAL_LETTER_PHI), M(UC_GREEK_CAPITAL_LETTER_OMEGA), M(UC_GREEK_CAPITAL_LETTER_GAMMA), KC_TRNS, - KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA), M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON), - KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA), M(UC_GREEK_CAPITAL_LETTER_XI), M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ZETA), - /*-*/ M(UC_GREEK_CAPITAL_LETTER_SIGMA), M(UC_GREEK_CAPITAL_LETTER_NU), M(UC_GREEK_CAPITAL_LETTER_RHO), M(UC_GREEK_CAPITAL_LETTER_TAU), M(UC_GREEK_CAPITAL_LETTER_DELTA), KC_TRNS, - KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA), M(UC_GREEK_CAPITAL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_PSI), - /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | | | | | | | | | | | | | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | | | | | | | | | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | |-----!-----! | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | | | | | | | | | | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' - */ -[L6] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {}; - -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 -#define UC_MODE_OSX 2 - -// TODO: allow default mode to be configured -static uint16_t unicode_mode = UC_MODE_WIN; - -uint16_t hextokeycode(uint8_t hex) { - if (hex == 0x0) { - return KC_P0; - } - if (hex < 0xA) { - return KC_P1 + (hex - 0x1); - } - return KC_A + (hex - 0xA); -} - -void unicode_action_function(uint16_t hi, uint16_t lo) { - switch (unicode_mode) { - case UC_MODE_WIN: - register_code(KC_LALT); - - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LALT); - break; - case UC_MODE_LINUX: - register_code(KC_LCTL); - register_code(KC_LSFT); - - register_code(KC_U); - unregister_code(KC_U); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - case UC_MODE_OSX: - break; - } -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - if (!record->event.pressed) { - return MACRO_NONE; - } - // MACRODOWN only works in this function - switch(id) { - case UM: - unicode_mode = (unicode_mode + 1) % 2; - break; - -case UC_GREEK_SMALL_LETTER_OMICRON: - unicode_action_function(0x03, 0xbf); - break; -case UC_LEFTWARDS_ARROW: - unicode_action_function(0x21, 0x90); - break; -case UC_GREEK_CAPITAL_LETTER_RHO: - unicode_action_function(0x03, 0xa1); - break; -case UC_SUBSCRIPT_THREE: - unicode_action_function(0x20, 0x83); - break; -case UC_VULGAR_FRACTION_ONE_EIGHTH: - unicode_action_function(0x21, 0x5b); - break; -case UC_GREEK_SMALL_LETTER_LAMDA: - unicode_action_function(0x03, 0xbb); - break; -case UC_VULGAR_FRACTION_ONE_THIRD: - unicode_action_function(0x21, 0x53); - break; -case UC_GREEK_SMALL_LETTER_XI: - unicode_action_function(0x03, 0xbe); - break; -case UC_THERE_DOES_NOT_EXIST: - unicode_action_function(0x22, 0x04); - break; -case UC_SUPERSCRIPT_ONE: - unicode_action_function(0x00, 0xb9); - break; -case UC_GREEK_SMALL_LETTER_BETA: - unicode_action_function(0x03, 0xb2); - break; -case UC_SUBSCRIPT_FIVE: - unicode_action_function(0x20, 0x85); - break; -case UC_GREEK_CAPITAL_LETTER_IOTA: - unicode_action_function(0x03, 0x99); - break; -case UC_VULGAR_FRACTION_ONE_FIFTH: - unicode_action_function(0x21, 0x55); - break; -case UC_GREEK_SMALL_LETTER_PSI: - unicode_action_function(0x03, 0xc8); - break; -case UC_SUBSCRIPT_NINE: - unicode_action_function(0x20, 0x89); - break; -case UC_SUPERSCRIPT_FOUR: - unicode_action_function(0x20, 0x74); - break; -case UC_RIGHTWARDS_ARROW: - unicode_action_function(0x21, 0x92); - break; -case UC_SUPERSCRIPT_SIX: - unicode_action_function(0x20, 0x76); - break; -case UC_DOWNWARDS_ARROW: - unicode_action_function(0x21, 0x93); - break; -case UC_GREEK_SMALL_LETTER_PI: - unicode_action_function(0x03, 0xc0); - break; -case UC_SUPERSCRIPT_TWO: - unicode_action_function(0x00, 0xb2); - break; -case UC_GREEK_CAPITAL_LETTER_OMEGA: - unicode_action_function(0x03, 0xa9); - break; -case UC_GREEK_CAPITAL_LETTER_PSI: - unicode_action_function(0x03, 0xa8); - break; -case UC_SUBSCRIPT_FOUR: - unicode_action_function(0x20, 0x84); - break; -case UC_GREEK_CAPITAL_LETTER_NU: - unicode_action_function(0x03, 0x9d); - break; -case UC_DIVISION_SIGN: - unicode_action_function(0x00, 0xf7); - break; -case UC_GREEK_SMALL_LETTER_SIGMA: - unicode_action_function(0x03, 0xc3); - break; -case UC_GREEK_SMALL_LETTER_RHO: - unicode_action_function(0x03, 0xc1); - break; -case UC_VULGAR_FRACTION_ONE_SIXTH: - unicode_action_function(0x21, 0x59); - break; -case UC_GREEK_SMALL_LETTER_GAMMA: - unicode_action_function(0x03, 0xb3); - break; -case UC_VULGAR_FRACTION_TWO_THIRDS: - unicode_action_function(0x21, 0x54); - break; -case UC_GREEK_SMALL_LETTER_NU: - unicode_action_function(0x03, 0xbd); - break; -case UC_GREEK_SMALL_LETTER_ZETA: - unicode_action_function(0x03, 0xb6); - break; -case UC_GREEK_SMALL_LETTER_EPSILON: - unicode_action_function(0x03, 0xb5); - break; -case UC_GREEK_SMALL_LETTER_KAPPA: - unicode_action_function(0x03, 0xba); - break; -case UC_SUPERSCRIPT_SEVEN: - unicode_action_function(0x20, 0x77); - break; -case UC_GREEK_CAPITAL_LETTER_PI: - unicode_action_function(0x03, 0xa0); - break; -case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: - unicode_action_function(0x03, 0xc2); - break; -case UC_GREEK_CAPITAL_LETTER_XI: - unicode_action_function(0x03, 0x9e); - break; -case UC_GREEK_SMALL_LETTER_THETA: - unicode_action_function(0x03, 0xb8); - break; -case UC_GREEK_SMALL_LETTER_ETA: - unicode_action_function(0x03, 0xb7); - break; -case UC_SUBSCRIPT_TWO: - unicode_action_function(0x20, 0x82); - break; -case UC_ASYMPTOTICALLY_EQUAL_TO: - unicode_action_function(0x22, 0x43); - break; -case UC_GREEK_SMALL_LETTER_ALPHA: - unicode_action_function(0x03, 0xb1); - break; -case UC_GREEK_CAPITAL_LETTER_PHI: - unicode_action_function(0x03, 0xa6); - break; -case UC_GREEK_SMALL_LETTER_PHI: - unicode_action_function(0x03, 0xc6); - break; -case UC_INFINITY: - unicode_action_function(0x22, 0x1e); - break; -case UC_GREEK_CAPITAL_LETTER_OMICRON: - unicode_action_function(0x03, 0x9f); - break; -case UC_ELEMENT_OF: - unicode_action_function(0x22, 0x08); - break; -case UC_MULTIPLICATION_SIGN: - unicode_action_function(0x00, 0xd7); - break; -case UC_SUBSCRIPT_ZERO: - unicode_action_function(0x20, 0x80); - break; -case UC_GREEK_CAPITAL_LETTER_SIGMA: - unicode_action_function(0x03, 0xa3); - break; -case UC_GREEK_SMALL_LETTER_OMEGA: - unicode_action_function(0x03, 0xc9); - break; -case UC_SUBSCRIPT_ONE: - unicode_action_function(0x20, 0x81); - break; -case UC_GREEK_CAPITAL_LETTER_ZETA: - unicode_action_function(0x03, 0x96); - break; -case UC_GREEK_SMALL_LETTER_TAU: - unicode_action_function(0x03, 0xc4); - break; -case UC_SUPERSCRIPT_FIVE: - unicode_action_function(0x20, 0x75); - break; -case UC_THERE_EXISTS: - unicode_action_function(0x22, 0x03); - break; -case UC_PLUS_MINUS_SIGN: - unicode_action_function(0x00, 0xb1); - break; -case UC_VULGAR_FRACTION_THREE_QUARTERS: - unicode_action_function(0x00, 0xbe); - break; -case UC_SUPERSCRIPT_THREE: - unicode_action_function(0x00, 0xb3); - break; -case UC_EMPTY_SET: - unicode_action_function(0x22, 0x05); - break; -case UC_UPWARDS_ARROW: - unicode_action_function(0x21, 0x91); - break; -case UC_SUPERSCRIPT_NINE: - unicode_action_function(0x20, 0x79); - break; -case UC_GREEK_SMALL_LETTER_DELTA: - unicode_action_function(0x03, 0xb4); - break; -case UC_GREEK_SMALL_LETTER_MU: - unicode_action_function(0x03, 0xbc); - break; -case UC_GREEK_CAPITAL_LETTER_KAPPA: - unicode_action_function(0x03, 0x9a); - break; -case UC_SUBSCRIPT_EIGHT: - unicode_action_function(0x20, 0x88); - break; -case UC_GREEK_CAPITAL_LETTER_ALPHA: - unicode_action_function(0x03, 0x91); - break; -case UC_SUBSCRIPT_SEVEN: - unicode_action_function(0x20, 0x87); - break; -case UC_GREEK_CAPITAL_LETTER_BETA: - unicode_action_function(0x03, 0x92); - break; -case UC_GREEK_CAPITAL_LETTER_ETA: - unicode_action_function(0x03, 0x97); - break; -case UC_SUPERSCRIPT_EIGHT: - unicode_action_function(0x20, 0x78); - break; -case UC_SUPERSCRIPT_ZERO: - unicode_action_function(0x20, 0x70); - break; -case UC_NOT_AN_ELEMENT_OF: - unicode_action_function(0x22, 0x09); - break; -case UC_GREEK_SMALL_LETTER_UPSILON: - unicode_action_function(0x03, 0xc5); - break; -case UC_NOT_EQUAL_TO: - unicode_action_function(0x22, 0x60); - break; -case UC_GREEK_CAPITAL_LETTER_CHI: - unicode_action_function(0x03, 0xa7); - break; -case UC_FOR_ALL: - unicode_action_function(0x22, 0x00); - break; -case UC_GREEK_CAPITAL_LETTER_TAU: - unicode_action_function(0x03, 0xa4); - break; -case UC_VULGAR_FRACTION_ONE_QUARTER: - unicode_action_function(0x00, 0xbc); - break; -case UC_GREEK_SMALL_LETTER_CHI: - unicode_action_function(0x03, 0xc7); - break; -case UC_GREEK_CAPITAL_LETTER_THETA: - unicode_action_function(0x03, 0x98); - break; -case UC_GREEK_SMALL_LETTER_IOTA: - unicode_action_function(0x03, 0xb9); - break; -case UC_GREEK_CAPITAL_LETTER_LAMDA: - unicode_action_function(0x03, 0x9b); - break; -case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: - unicode_action_function(0x20, 0x7f); - break; -case UC_GREEK_CAPITAL_LETTER_UPSILON: - unicode_action_function(0x03, 0xa5); - break; -case UC_GREEK_CAPITAL_LETTER_MU: - unicode_action_function(0x03, 0x9c); - break; -case UC_GREEK_CAPITAL_LETTER_EPSILON: - unicode_action_function(0x03, 0x95); - break; -case UC_GREEK_CAPITAL_LETTER_GAMMA: - unicode_action_function(0x03, 0x93); - break; -case UC_SUBSCRIPT_SIX: - unicode_action_function(0x20, 0x86); - break; -case UC_GREEK_CAPITAL_LETTER_DELTA: - unicode_action_function(0x03, 0x94); - break; -case UC_VULGAR_FRACTION_ONE_HALF: - unicode_action_function(0x00, 0xbd); - break; - default: - 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) { - case L1: - ergodox_right_led_1_on(); - break; - case L2: - ergodox_right_led_2_on(); - break; - case L3: - ergodox_right_led_3_on(); - break; - case L4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - break; - case L5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - // case L6: - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - // case L7: - // ergodox_right_led_1_on(); - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - default: - ergodox_board_led_off(); - break; - } -}; diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md deleted file mode 100644 index 2c9e0a8376..0000000000 --- a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md +++ /dev/null @@ -1,188 +0,0 @@ -# ManuNeo Ergodox Keyboard Layout - -Compile this file to a `keymap.c` file using `compile_keymap.py` - - python compile_keymap.py keymaps/german-manuneo/keymap.md - -Tested with python 2.7 and python 3.4 - - -# Layout Config - - { - "layout": "ergodox_ez", - "keymaps_includes": [ - "ergodox_ez.h", - "action_layer.h", - "keymap_common.h", - "keymap_extras/keymap_german.h", - ], - "key_prefixes": ["DE_", "KC_"], - "macros": { - // TODO: implement macros - // "MUC": "", - }, - // TODO: implement default unicode mode - } - - -# Layers - - -## Layer 0 - - .------------------------------------.------------------------------------. - |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| - '------------------------' '------------------------' - .-----------. .-----------. - |INS |TG(2)| !M(UM)|DELT | - .-----+-----+-----! !-----+-----+-----. - ! ! | APP | ! PGUP| ! ! - ! ! !-----! !-----! ! ! - |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| - '-----------------' '-----------------' - - -## Layer 1 - - .------------------------------------.------------------------------------. - | |EXLM|DQOT|PARA| | | | | | | | |RING| | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | ← | ↓ | → | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - -## Layer 2 - - .------------------------------------.------------------------------------. - | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - - -## Layer 3 - -http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html - - .------------------------------------.------------------------------------. - | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - -## Layer 4 - - - .------------------------------------.------------------------------------. - | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | θ | | | | | | β | μ | | | | ψ | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - -## Layer 5 - - .------------------------------------.------------------------------------. - | | | | | | | | | | | | | | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | Θ | | | | | | Β | Μ | | | | Ψ | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - -## Layer 6 - - .------------------------------------.------------------------------------. - | | | | | | | | | | | | | | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | | | | | | | | | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | |-----!-----! | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | | | | | | | | | | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - diff --git a/keyboards/ergodox_ez/keymaps/german/keymap.c b/keyboards/ergodox_ez/keymaps/german/keymap.c deleted file mode 100644 index 3eab51f0e2..0000000000 --- a/keyboards/ergodox_ez/keymaps/german/keymap.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_german.h" - -// Layer names -#define BASE 0 // default layer -#define SYMB 1 // symbol layer -#define MDIA 2 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ^ | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 | ß | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | Q | W | E | R | T | L1 | | L2 | Z | U | I | O | P | Ü | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Y | X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | 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) { - case SYMB: - ergodox_right_led_1_on(); - break; - case MDIA: - ergodox_right_led_2_on(); - break; - default: - ergodox_board_led_off(); - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/j3rn/keymap.c b/keyboards/ergodox_ez/keymaps/j3rn/keymap.c deleted file mode 100644 index 6e271321d5..0000000000 --- a/keyboards/ergodox_ez/keymaps/j3rn/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -#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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Grv | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | BkSp | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Ctrl/Esc|A / L2| S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | ~L1 | ~L2 |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | Home | | PgUp |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | End | | PgDn | | | - * |Space | LGui |------| |------| Tab |Enter | - * | | |Shift | | Alt | | | - * `--------------------' `----------------------' - */ -// 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_LBRC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, - CTL_T(KC_ESC), LT(MDIA, KC_A),KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - KC_FN1, KC_FN2, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - - ALT_T(KC_APP), KC_HOME, - KC_END, - KC_SPC, KC_LGUI, KC_LSHIFT, - // right hand - KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - - KC_PGUP, CTL_T(KC_ESC), - KC_PGDN, - KC_LALT, 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | Lclk | Rclk | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, - KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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) - [2] = ACTION_LAYER_TAP_TOGGLE(MDIA) // FN2 - Momentary Layer 2 (Media) -}; - -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/keyboards/ergodox_ez/keymaps/j3rn/readme.md b/keyboards/ergodox_ez/keymaps/j3rn/readme.md deleted file mode 100644 index fc4b640426..0000000000 --- a/keyboards/ergodox_ez/keymaps/j3rn/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -# J3RN's Mac-centric ErgoDox EZ keymap - -## Motivation - -Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key). - -## How is it different from the default ErgoDox EZ layout? - -This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means: - -### Mac-like changes - -- **The key to the left of "1" is "~" instead of "=".** -- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately. -- **The key to the left of "Q" is Tab instead of Delete.** -- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.** - -### Other changes - -- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a CAPS LOCK key. This is the Ctrl key I find myself using most. -- **Mouse uses Vim-style navigation**. To activate "Media mode," hold the 'a' key. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys. -- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach. -- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better. -- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold." -- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful. -- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location. - - -**I'm always open to feedback and/or suggestions!** diff --git a/keyboards/ergodox_ez/keymaps/jack/keymap.c b/keyboards/ergodox_ez/keymaps/jack/keymap.c deleted file mode 100644 index 80bf9d535d..0000000000 --- a/keyboards/ergodox_ez/keymaps/jack/keymap.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -// TODO: Define layer names that make sense for the ErgoDox EZ. -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP( // layer 0 : default - // left hand - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, - KC_NO, KC_LCTL, KC_LALT,KC_LGUI, MO(2), - ALT_T(KC_APP), KC_LGUI, - KC_HOME, - KC_SPC,KC_SPC,KC_END, - // right hand - KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, - KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT, - MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, - KC_NO, KC_NO, - KC_PGUP, - KC_PGDN, KC_SPC,KC_SPC - ), -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, - KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,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_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - KC_TRNS, KC_F12, KC_NO, KC_NO, KC_NO, RESET, KC_TRNS, - KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -[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, - KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 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_TRNS, - KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, - KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - KC_TRNS, KC_F12, KC_NO, KC_NO, KC_NO, RESET, KC_TRNS, - KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, 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) { - 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/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png deleted file mode 100644 index 06f63c4968..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png deleted file mode 100644 index 4dd7182785..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png deleted file mode 100644 index ee224cf0c1..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/jacobono/keymap.c b/keyboards/ergodox_ez/keymaps/jacobono/keymap.c deleted file mode 100644 index 6b19800af0..0000000000 --- a/keyboards/ergodox_ez/keymaps/jacobono/keymap.c +++ /dev/null @@ -1,273 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define COLEMAK 0 // new colemak layout -#define QWERTY 1 // default layer -#define SYMB 2 // symbols -#define NUMPAD 3 // number pad -#define MDIA 4 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap 0: Basic COLEMAK layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | TAB | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | R | S | T | D |------| |------| H | N | E | I | O | DEL | - * |--------+------+------+------+------+------| | LGUI(TAB)------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | L1 | | | UP |MO(L2)| |MO(L2)| Down | | ALT | RGUI | - * `----------------------------------' `------------------------------------' - * ,-------------. ,---------------. - * | LGUI | App | |Ctrl/Esc| Alt | - * ,------|------|------| |--------+--------+------. - * | | |QUKSL | | QUKSL | | | - * |Space |ENTER |------| |--------| ENTER |Space | - * | | |MO(L3)| | MO(L3) | | | - * `--------------------' `------------------------' - */ - - // If it accepts an argument (i.e, is a function), it doesn't need KC_. - // Otherwise, it needs KC_* - [COLEMAK] = KEYMAP( // layer 0 : Colemak layout default layer - // left hand - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_TRNS, - 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, KC_TRNS, - TG(QWERTY), KC_TRNS, KC_TRNS,KC_UP, MO(SYMB), - KC_LGUI, KC_APP, - LGUI(S(KC_SPC)), - KC_SPC,KC_ENT,MO(NUMPAD), - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT, - KC_TRNS, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB, - KC_H, KC_N, KC_E, KC_I, KC_O, KC_DEL, - LGUI(KC_TAB), KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - MO(SYMB), KC_DOWN, KC_TRNS, KC_RALT, KC_RGUI, - CTL_T(KC_ESC), KC_LALT, - LGUI(S(KC_SPC)), - MO(NUMPAD), KC_ENT, KC_SPC), - - /* Keymap 1: Basic QWERTY layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | BkSp | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | DEL | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L0 | | L0 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L |; / L4| CTRL | - * |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L3| '" |AltShf| Left |MO(L2)| |MO(L2)| Down | [ | ] | ~L3 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,---------------. - * | Tab | BkSp | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space| LGUI |------| |------| RGUI |Enter | - * | | | End | | PgDn | | | - * `--------------------' `----------------------' - */ - // If it accepts an argument (i.e, is a function), it doesn't need KC_. - // Otherwise, it needs KC_* - [QWERTY] = KEYMAP( // layer 1 - // left hand - KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, - KC_LCTRL, 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, - KC_TRNS, KC_QUOT, LALT(KC_LSFT), KC_LEFT, MO(SYMB), - KC_TAB, KC_DELT, - KC_HOME, - KC_SPC, KC_LGUI, KC_END, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT, - KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_RCTRL, - KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - MO(SYMB), KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN, KC_RGUI, KC_ENT), - - - /* Keymap 2: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | @ | * | = | _ | | | | ~ | { | } | # | : | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | ! | + | - | " |------| |------| " | ( | ) | ' | ` | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | % | ^ | $ | & | | | | ; | [ | ] | \ | / | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ - // SYMBOL - [SYMB] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_TRNS, KC_AT, KC_ASTR, KC_EQL, KC_UNDS, KC_TRNS, - KC_TRNS, KC_PIPE, KC_EXLM, KC_PLUS, KC_MINS, S(KC_QUOTE), - KC_TRNS, KC_TRNS, KC_PERC, KC_CIRC, KC_DLR, KC_AMPR, 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_TILD, KC_LCBR, KC_RCBR, KC_HASH, S(KC_SCLN), KC_F12, - S(KC_QUOTE),KC_LPRN, KC_RPRN, KC_QUOTE, KC_GRV, KC_TRNS, - KC_TRNS, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_SLSH, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), - - /* Keymap 3: Numpad Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | UP | | | | | | $ | 7 | 8 | 9 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | LEFT | DOWN | RIGHT| |------| |------| = | 4 | 5 | 6 | - | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | 1 | 2 | 3 | * | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | , | 0 | . | / | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ - // Numpad - [NUMPAD] = KEYMAP( - // left hand - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RIGHT,KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, - KC_TRNS, KC_DLR, KC_7, KC_8, KC_9, KC_PLUS, KC_TRNS, - KC_EQL, KC_4, KC_5, KC_6, KC_MINS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_ASTR, KC_TRNS, - KC_COMMA,KC_0, KC_DOT, KC_SLSH, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), - - /* Keymap 4: 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; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/jacobono/readme.md b/keyboards/ergodox_ez/keymaps/jacobono/readme.md deleted file mode 100644 index 48de0509fc..0000000000 --- a/keyboards/ergodox_ez/keymaps/jacobono/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -# Default Layer # - -I'm using the colemak layer -- customized a bit to work a bit better when using spacemacs as my editor. - -![default-layer](img/colemak-default-layer.png) - -## Special Keys ## - -`SC1` => `LGUI + TAB` - -`SC2` => `LGUI + SPACE + TAB` - -`L1` => Switch to QWERTY Layout - -`T(L2)` => Toggle Symbol Layer - -`T(L3)` => Toggle Number and D-Pad Layer - -# QWERTY # - -Nothing special here -- just need this layer tucked away for the `WASD`. Which is literally the only reason I use it. -Just have the same button to toggle back to colemak. - -# Symbol Layer # - -![symbol-layer](img/symbol-layer.png) - -This is just putting matching closing symbols next to each other -- useful when editing lisp. - -# Number and D-Pad Layer # - -Just a basic number layer with a D-PAD on the other side. - -![number-dpad-layer](img/number-dpad-layer.png) diff --git a/keyboards/ergodox_ez/keymaps/jgarr/keymap.c b/keyboards/ergodox_ez/keymaps/jgarr/keymap.c deleted file mode 100644 index a3ad2040f4..0000000000 --- a/keyboards/ergodox_ez/keymaps/jgarr/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 - * - * ,--------------------------------------------------. ,-----------------------------------------------------. - * | Grv | 1 | 2 | 3 | 4 | 5 | Del | |Backspace| 6 | 7 | 8 | 9 | 0 | \ | - * |--------+------+------+------+------+-------------| |---------+------+------+------+------+------+--------| - * | Tab | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Ctrl/Esc| A | O | E | U | I |------| |---------| D | H | T | N |S / L2| - | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `----------------+------+------+------+------+--------' - * | Ctrl | LGui | Alt | Left | Right| | Up | Down | [ | ] | = | - * `----------------------------------' `----------------------------------' - * ,--------------. ,-------------. - * | AltShf| LGui | | Alt | ~L1 | - * ,------|-------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space|Backsp |------| |------| Enter |Space | - * | |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_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, TG(1), - CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO), - KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT, - LALT(KC_LSFT), KC_LGUI, - KC_HOME, - KC_SPC,KC_BSPC,KC_END, - // right hand - KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, - TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, - MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_EQL, - KC_LALT, KC_FN1, - KC_PGUP, - KC_PGDN,KC_ENT, 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; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox_ez/keymaps/josh/keymap.c deleted file mode 100644 index de5664a25a..0000000000 --- a/keyboards/ergodox_ez/keymaps/josh/keymap.c +++ /dev/null @@ -1,205 +0,0 @@ -#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 - -//macros -#define CTL_SFT_T 100 -#define CTL_SFT_G 101 -#define CTL_ALT_H 102 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | ESC | | M 100| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / CTL | - * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | WIN | ` | M 102| M 101|AltShf| |AltShf| Left | Down | Up | Right | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LALT | | Alt | CAPS | - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space|Backsp|------| |------| Delete |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_ESC, - ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB), - KC_LGUI, KC_GRV, M(CTL_ALT_H),M(CTL_SFT_G),LALT(KC_LSFT), - CTL_T(KC_APP), KC_LALT, - KC_HOME, - KC_SPC,KC_BSPC,KC_END, - // right hand - M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), - MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, - KC_LALT, KC_CAPS, - KC_PGUP, - KC_PGDN,KC_DEL, KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | CALC | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, - 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_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_CALC, - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN,KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, 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) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - break; - case CTL_SFT_T: - if (record->event.pressed) { - return MACRO(D(LCTL), D(LSFT), T(T), END); - } - return MACRO(U(LCTL), U(LSFT), END); - break; - case CTL_SFT_G: - if (record->event.pressed) { - return MACRO(D(LCTL), D(LSFT), T(G), END); - } - return MACRO(U(LCTL), U(LSFT), END); - break; - case CTL_ALT_H: - if (record->event.pressed) { - return MACRO(D(LCTL), D(LALT), T(H), END); - } - return MACRO(U(LCTL), U(LALT), 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) { - - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/josh/readme.md b/keyboards/ergodox_ez/keymaps/josh/readme.md deleted file mode 100644 index cee19d47ea..0000000000 --- a/keyboards/ergodox_ez/keymaps/josh/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Layout is based on the default layout that comes on the ergodox infinity. Focused mostly on making ctl and alt easy to reach. I spend most my day working in Eclipse which has just so many 3 key shortcuts. - -* Removed numpad keys from symbol layer (I don't use them) -* Added arrow keys under h, j, k, l on symbol layer. vi movement keys! -* Added a few macros for eclipse hotkeys that I used all the time -* Added calc button on symbol layer -* tap vs hold on tab and \. Gives alt, ctl and shift on both sides of the keyboard - diff --git a/keyboards/ergodox_ez/keymaps/kastyle/keymap.c b/keyboards/ergodox_ez/keymaps/kastyle/keymap.c deleted file mode 100644 index 3982e0a19f..0000000000 --- a/keyboards/ergodox_ez/keymaps/kastyle/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | LGUI | | App | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LCtrl | 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 | - * `----------------------------------' `----------------------------------' - * ,---------------. ,---------------. - * |Ctrl/Esc| Alt | | Alt |Ctrl/Esc| - * ,------|--------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * |Backsp| Del |------| |------| Enter | Space| - * | | | 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_LGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - 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, - CTL_T(KC_ESC), ALT_T(KC_APP), - KC_HOME, - KC_BSPC,KC_DEL,KC_END, - // right hand - KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, - MEH_T(KC_NO),KC_N, 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_ENT, 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; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c b/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c deleted file mode 100644 index 5063c99f28..0000000000 --- a/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Caps | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Esc | Grv |Insert| Left | Right| | Up | Down | [ | ] | L2 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Ctrl | Alt | | LGui | Ctrl | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * |Backsp| Del |------| |------| Enter| Space| - * |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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_CAPS, 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_NO), - KC_ESC, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, - KC_LCTL,KC_LALT, - KC_HOME, - KC_BSPC,KC_DEL,KC_END, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - 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, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN2, - KC_LGUI, KC_RCTL, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_PSCR,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_SLCK,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, - KC_PAUS,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/keyboards/ergodox_ez/keymaps/kines-ish/readme.md b/keyboards/ergodox_ez/keymaps/kines-ish/readme.md deleted file mode 100644 index 5d39a0590d..0000000000 --- a/keyboards/ergodox_ez/keymaps/kines-ish/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -This keymap attempts to match the Kinesis Contoured (aka Advantage) default -layout as closely as possible. See -http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf - -Apart from the obvious mappings, this keymap also: - -* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv; - because the author--coming from a Kinesis keyboard--finds the delays and - accidental modifiers to be more disconcerting than helpful. - -* puts Esc in the bottom left since there's no place for it in the top - left to match the Kinesis. - -* changes the bottom-right key into an L2 toggle since there's otherwise no - way to get to L2. - -* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since - they're present on the Kinesis but not available in the default - ergodox_ez keymap. diff --git a/keyboards/ergodox_ez/keymaps/maz/keymap.c b/keyboards/ergodox_ez/keymaps/maz/keymap.c deleted file mode 100644 index 7b8f0df74d..0000000000 --- a/keyboards/ergodox_ez/keymaps/maz/keymap.c +++ /dev/null @@ -1,229 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define ARRW 2 // arrow keys -#define MDIA 3 // media keys, including mouse - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+--------+------. - * | | | | | | | | - * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | Alt | | Alt | gui | ctrl | - * `--------------------' `----------------------' - */ - // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue - // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing -// 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_TRNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_ESC, 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_NO), - KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW), - KC_TRNS, KC_TRNS, - KC_TRNS, - CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, - // right hand - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_RALT,GUI_T(KC_TAB), CTL_T(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_DOT, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, - KC_TRNS,KC_TRNS, KC_0, KC_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Arrow keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | |PGDOWN| PGUP | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | HOME | END | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[ARRW] = KEYMAP( - // left 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 3: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |Mute |VolDn | VolUp| | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | Prev | Play | Next | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * |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_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_WBAK, 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_BTN1, KC_BTN2, 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_TRNS, 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) { - 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/keyboards/ergodox_ez/keymaps/maz/readme.md b/keyboards/ergodox_ez/keymaps/maz/readme.md deleted file mode 100644 index 000a8d0000..0000000000 --- a/keyboards/ergodox_ez/keymaps/maz/readme.md +++ /dev/null @@ -1,121 +0,0 @@ -# Introduction - -## Motivation -I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line. - -More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. - -## Changes -There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date. -### Modifier Keys -The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. - -### Layers -* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best. -* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse -* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer -* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries -** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus - -### Removal Of Keys -I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use. - -## Caveats -### Thumb Cluster Range -I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: -* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are -* I have relatively large hands (I guarantee you there's no problem - I guarantee you) - -### Dangerous positioning -I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. - -# Keymap -## Keymap 0: Basic layer -``` -,--------------------------------------------------. ,--------------------------------------------------. -| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | -|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| -| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+--------+------. - | | | | | | | | - | Space| Bksp |------| |------| Tab |Enter | - | ctrl | gui | Alt | | Alt | gui | ctrl | - `--------------------' `----------------------' - -``` - -## Keymap 1: Symbol Layer -The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | 0 | = | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` - -## Keymap 2: Arrow Layer -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | | | | | | | | | | | | | | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | | | | | | | | | |PGDOWN| PGUP | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | | | | | | HOME | END | | | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` - -## Keymap 3: Media and mouse keys -``` - ,--------------------------------------------------. ,--------------------------------------------------. - | | | | | | | | | | | | | | | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | | | MsUp | | | | | | | | | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |Mute |VolDn | VolUp| | | | | | | | | | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | Prev | Play | Next | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - |Brwser| | | | | | | - |Back | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' -``` diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c b/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c deleted file mode 100644 index 5bfef59955..0000000000 --- a/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c +++ /dev/null @@ -1,276 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_colemak.h" - -enum { - BASE = 0, - BASE_CM, - SYMB, - MACR -}; - -enum { - LWIN = 1, - PC1, - PC2, - PC3, - PC4, - DL_BASE, - DL_BASE_CM, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0a: 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 | ; | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | - * |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LAlt | LGui | | LAlt | RAlt | - * ,------|------|------| |------+--------+------. - * | |Backsp| Home | | PgUp | | | - * | Space|ace/ |------| |------| Tab/ |Enter/| - * | /Shft|Ctrl | 1) | | 2) | Ctrl |Shift | - * `--------------------' `----------------------' - * - * 1) End/L1 - * 2) PgDown/L2 - */ -[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_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, - KC_LALT, F(LWIN), - KC_HOME, - SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, 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, KC_O, KC_QUOT, - KC_MINS, KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO), - KC_LALT, KC_RALT, - KC_PGUP, - LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT) - ), -/* Keymap 0b: Basic layer (Colemak keycodes or QWERTY) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | - * |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LAlt | LGui | | LAlt | RAlt | - * ,------|------|------| |------+--------+------. - * | |Backsp| Home | | PgUp | | | - * | Space|ace/ |------| |------| Tab/ |Enter/| - * | /Shft|Ctrl | 1) | | 2) | Ctrl |Shift | - * `--------------------' `----------------------' - * - * 1) End/L1 - * 2) PgDown/L2 - */ -[BASE_CM] = KEYMAP( // layer 0 : default - // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, CM_Q, CM_W, CM_F, CM_P, CM_G, TG(SYMB), - KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, - KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, KC_EQL, - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, - KC_LALT, F(LWIN), - KC_HOME, - SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END), - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), CM_J, CM_L, CM_U, CM_Y, KC_P, /*CM_SCLN*/ KC_BSLS, - CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, - KC_MINS, CM_K, CM_M, CM_COMM,CM_DOT, CTL_T(CM_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO), - KC_LALT, KC_RALT, - KC_PGUP, - LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(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: Macros - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | DLa | DLb | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | PC1 | PC2 | PC3 | PC4 | |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MACROS -[MACR] = KEYMAP( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, F(DL_BASE),F(DL_BASE_CM),KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, F(PC1), F(PC2), F(PC3), F(PC4), 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_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, - // right hand - 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, 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_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [LWIN] = ACTION_MACRO(LWIN), - [PC1] = ACTION_MACRO(PC1), - [PC2] = ACTION_MACRO(PC2), - [PC3] = ACTION_MACRO(PC3), - [PC4] = ACTION_MACRO(PC4), - [DL_BASE] = ACTION_DEFAULT_LAYER_SET(BASE), - [DL_BASE_CM] = ACTION_DEFAULT_LAYER_SET(BASE_CM) -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - case LWIN: - if (record->event.pressed) { - register_code(KC_RSFT); - unregister_code(KC_RSFT); - register_code(KC_LGUI); - } else { - unregister_code(KC_LGUI); - } - break; - case PC1: - if (!record->event.pressed) { - return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END); - } - break; - case PC2: - if (!record->event.pressed) { - return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END); - } - break; - case PC3: - if (!record->event.pressed) { - return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END); - } - break; - case PC4: - if (!record->event.pressed) { - return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), 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) { - - 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 SYMB: - ergodox_right_led_1_on(); - break; - case MACR: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } -}; diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md b/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md deleted file mode 100644 index 785400d1d2..0000000000 --- a/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# ErgoDox EZ mpiechotka Configuration - -Modification of ErgoDox EZ Colemak layout with additional QWERTY/software Colemak layer and change of the special keys. - - - diff --git a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png deleted file mode 100644 index 7b5efaae79..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png deleted file mode 100644 index 65f92dda1b..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png deleted file mode 100644 index a69799b073..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/msc/keymap.c b/keyboards/ergodox_ez/keymaps/msc/keymap.c deleted file mode 100644 index e567e513f9..0000000000 --- a/keyboards/ergodox_ez/keymaps/msc/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |' / Cmd | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | Cmd | Alt |AltShf| Left | Right| | Left | Down | Up |Right | L2 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | 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_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - KC_LGUI,KC_LALT, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN,GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(MDIA), - 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 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | Mute | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | Prev |VolDn |VolUp | Next | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | Lclk | Rclk |------| |------| |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_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_BTN1, KC_BTN2, 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_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, 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/keyboards/ergodox_ez/keymaps/msc/readme.md b/keyboards/ergodox_ez/keymaps/msc/readme.md deleted file mode 100644 index 0d14fcbd29..0000000000 --- a/keyboards/ergodox_ez/keymaps/msc/readme.md +++ /dev/null @@ -1,32 +0,0 @@ -# MSC Configuration - -### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx. - -#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right. - -### Main Layer - -![Main Layer](img/main_layer.png) - -### Code Layer - -![Code Layer](img/code_layer.png) - -### Media Layer - -![Media Layer](img/media_layer.png) - -## Changelog - -Version 1.0 - -- Changed the temp code layer key in the bottom right to toggle media layer -- Changed the temp media key to only be ";" -- Changed right hand bottom row to match vim home row nav directions -- Changed media keys to match arrow key changes -- Changed media left and right click to spacebar and backspace locations -- Changed bottom left to Cmd -- Changed single quote on left bottom row to alt - -#### Coming Soon: -- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender. diff --git a/keyboards/ergodox_ez/keymaps/naps62/keymap.c b/keyboards/ergodox_ez/keymaps/naps62/keymap.c deleted file mode 100644 index d8c28423cf..0000000000 --- a/keyboards/ergodox_ez/keymaps/naps62/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -#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 % | Lang | | Esc | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | Bckspc | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L2 | | L2 | Y | U | I | O | P | \ | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; : | ' " | - * |--------+------+------+------+------+------| L1 | | L1 |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , < | . > | / ? | - _ | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | L1 | ` ~ | ' " | \ | | L2 | | { | } | [ { | ] } | L1 | - * `----------------------------------' `----------------------------------' - * ,--------------. ,---------------. - * | Home | End | | PgUp |Insert | - * ,------|-------|------| |-------+-------+------. - * | | | LGui | | Del | | | - * | Space| Alt |------| |-------| Enter |Space | - * | | | LGui | | Bcsp | | | - * `---------------------' `----------------------' - */ -// 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_SPC), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(2), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), - MO(1), KC_GRV, KC_QUOT, KC_BSLS, MO(2), - - KC_HOME, KC_END, - KC_LGUI, - KC_SPC, KC_LALT, KC_LGUI, - - // right hand - KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - MO(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS, - KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, MO(1), - - KC_PGUP, KC_INS, - KC_DEL, - KC_BSPC, KC_ENT, 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_EQL,KC_DOT, KC_0, KC_MINS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | |GuiUp | Expl | | Term | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |GuiLft|GuiDwn|GuiRgt| | |------| |------| Left | Down | Up |Right | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | |Browsr| | | | |VolDwn|VolUp | Mute | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | | Play | Prev | Next | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | |Brwser|Brwser| - * | Lclk | Rclk |------| |------|Fwd |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -KEYMAP( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, LGUI(KC_W), LGUI(KC_E), KC_BTN1, LGUI(KC_T), KC_TRNS, - KC_TRNS, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), 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_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_BTN1, KC_BTN2, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, - KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_WBAK, KC_WFWD -), -}; - -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/keyboards/ergodox_ez/keymaps/naps62/readme.md b/keyboards/ergodox_ez/keymaps/naps62/readme.md deleted file mode 100644 index 14728e4cc4..0000000000 --- a/keyboards/ergodox_ez/keymaps/naps62/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -# ErgoDox EZ naps62 Configuration - -## Motivation - -I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming. - -## Key features / changes - -### Base Layer (L1) - -* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether. -* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this. -* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it. -* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing. -* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well. - -### Coder Layer (L2) - -* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer. - -### Media Layer (L3) - -* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones -* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here -* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now. - -## Author - -[Miguel Palhas](https://github.com/naps62) diff --git a/keyboards/ergodox_ez/keymaps/ordinary/keymap.c b/keyboards/ergodox_ez/keymaps/ordinary/keymap.c deleted file mode 100644 index 778cbc63cf..0000000000 --- a/keyboards/ergodox_ez/keymaps/ordinary/keymap.c +++ /dev/null @@ -1,454 +0,0 @@ -#include "ergodox_ez.h" -#include "led.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "mousekey.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols layer -#define MDIA 2 // media layer -#define SPEC 3 // special layer - -#define LCaps 10 // left caps-shift key -#define LSymb 11 // left symbol-shift key -#define LMdia 12 // left media-shift key -#define LSpec 13 // left special-shift key -#define RCaps 14 // right caps-shift key -#define RSymb 15 // right symbol-shift key -#define RMdia 16 // right media-shift key -#define RSpec 17 // right special-shift key - -#define MUL 20 // mouse up left -#define MUR 21 // mouse up right -#define MDL 22 // mouse down left -#define MDR 23 // mouse down right - -/* - * The Ordinary Layout for the Ergodox EZ keyboard, v4 - * - * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com - * - * No rights reserved. This software is in the public domain. - * Credit me if you are friendly but if you're a jerk don't bother. - * - * Details: readme.md - * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/******* Base Layer ******************************************************************************************************** - * - * ,------------------------------------------------------. ,------------------------------------------------------. - * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | - * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| - * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | - * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| - * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | - * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| - * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | - * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' - * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | Home | End | | Left | Right| - * ,------|------|------| |------+------+------. - * | | | PgUp | | Up | | | - * |Backsp| Del |------| |------| Enter| Space| - * | | | PgDn | | Down | | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// left hand - F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC -,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC -,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G -,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) -,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI - ,KC_HOME,KC_END - ,KC_PGUP - ,KC_BSPC,KC_DEL ,KC_PGDN - // right hand - ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) - ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) - ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) - ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) - ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_DOWN ,KC_ENT ,KC_SPC - ), - -/******* Symbols Layer ***************************************************************************************************** - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | - * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| - * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| - * `-----------------------------------' `-------------------------------------' - * ,-------------. ,-------------. - * | Left | Right| | Home | End | - * ,------|------|------| |------+------+------. - * | | | Up | | PgUp | | | - * |Space |Enter |------| |------|BackSp| Del | - * | | | Down | | PgDn | | | - * `--------------------' `--------------------' - */ -[SYMB] = KEYMAP( -// left hand - KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC -,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) -,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_TAB -,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_SPC ,KC_ENT ,KC_DOWN - // right hand - ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS - ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS - ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS - ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS - ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) - ,KC_HOME ,KC_END - ,KC_PGUP - ,KC_PGDN ,KC_BSPC ,KC_DEL -), - -/******* Media Layer ******************************************************************************************************* - * - * ,---------------------------------------------------------------. ,---------------------------------------------------------------. - * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | - * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| - * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | - * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| - * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | - * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| - * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | - * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' - * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| - * `---------------------------------------------' `---------------------------------------------' - * ,-------------. ,-------------. - * | Stop |Refrsh| | Prev | Next | - * ,------|------|------| |------+------+------. - * |Brwser|Brwser|Search| |VolUp | | | - * |Back | Fwd |------| |------| Stop | Play-| - * | | | Home | |VolDn | | Pause| - * `--------------------' `--------------------' - */ -[MDIA] = KEYMAP( -// left hand - KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC -,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U -,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD -,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D -,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 - ,KC_WSTP ,KC_WREF - ,KC_WSCH - ,KC_WBAK ,KC_NO ,KC_WHOM - // right hand - ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS - ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS - ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS - ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS - ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL - ,KC_MPRV ,KC_MNXT - ,KC_VOLU - ,KC_VOLD ,KC_MSTP ,KC_MPLY -), - -/******* Special Layer ***************************************************************************************************** - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | Bspc | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | RShift | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[SPEC] = KEYMAP( -// left hand - KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_BSPC ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT - ,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[] = { - // the faux shift keys are implemented as macro taps - [LCaps] = ACTION_MACRO_TAP(LCaps) - ,[LSymb] = ACTION_MACRO_TAP(LSymb) - ,[LMdia] = ACTION_MACRO_TAP(LMdia) - ,[LSpec] = ACTION_MACRO_TAP(LSpec) - ,[RCaps] = ACTION_MACRO_TAP(RCaps) - ,[RSymb] = ACTION_MACRO_TAP(RSymb) - ,[RMdia] = ACTION_MACRO_TAP(RMdia) - ,[RSpec] = ACTION_MACRO_TAP(RSpec) -}; - -uint16_t caps_shift = 0; -uint16_t symb_shift = 0; -uint16_t mdia_shift = 0; - -bool symb_lock = false; -bool mdia_lock = false; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - // There are two shift keys for each layer so we increment a layer_shift var when one - // is pressed and decrement when one is released. If both are pressed at the same time - // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 - // only because sometimes rapid pressing led to irregular events; this way the states - // are self healing during use. - - case LCaps: // both caps-shift keys trigger Left Shift - case RCaps: // so they don't interfere with the magic combo - if (record->event.pressed && !record->tap.count) { - if(++caps_shift > 2) caps_shift = 2; - if(caps_shift == 2) { - register_code(KC_CAPS); - unregister_code(KC_CAPS); - } else if(caps_shift == 1) { - register_code(KC_LSFT); - } - } else { - if(--caps_shift < 0) caps_shift = 0; - if(caps_shift == 0) unregister_code(KC_LSFT); - } - break; - - case LSymb: - if (record->event.pressed) { - if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } - } else { - if(--symb_shift < 0) symb_shift = 0; - if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); - } - break; - - case LMdia: - if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { - register_code(KC_TAB); - } else { - if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } - } - } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { - unregister_code(KC_TAB); - } else { - if(--mdia_shift < 0) mdia_shift = 0; - if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); - } - } - break; - - case LSpec: - if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_GRV); - } else { - layer_on(SPEC); - } - } else { - if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_GRV); - } else { - layer_off(SPEC); - } - } - break; - - case RSymb: - if (record->event.pressed) { - if (record->tap.count && (!symb_shift) && (!symb_lock)) { - register_code(KC_QUOT); - } else { - if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } - } - } else { - if(record->tap.count && symb_shift == 0) { - unregister_code(KC_QUOT); - } else { - if(--symb_shift < 0) symb_shift = 0; - if((!symb_shift) && (!symb_lock)) layer_off(SYMB); - } - } - break; - - case RMdia: - if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { - register_code(KC_BSLS); - } else { - if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } - } - } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { - unregister_code(KC_BSLS); - } else { - if(--mdia_shift < 0) mdia_shift = 0; - if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); - } - } - break; - - case RSpec: - if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_EQL); - } else { - layer_on(SPEC); - } - } else { - if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_EQL); - } else { - layer_off(SPEC); - } - } - break; - - // mouse diagonals - - case MUL: // mouse up left - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - mousekey_send(); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - mousekey_send(); - } - break; - - case MUR: // mouse up right - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - mousekey_send(); - } - break; - - case MDL: // mouse down left - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - mousekey_send(); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - mousekey_send(); - } - break; - - case MDR: // mouse down right - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - mousekey_send(); - } - break; - - default: - // none - 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) { - // shift or caps lock turns on red light - if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<\n\n\nTab"], -[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], -[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], -[{y:-0.875,x:5.5},"B",{x:6.5},"N"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], -[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], -[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], -[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], -[{x:2},"Page\n\n\n\n\n\nDown"], -[{r:-30,rx:13,y:-1,x:-3},"Left","Right"], -[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"], -[{x:-3},"Down"] - diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png deleted file mode 100644 index 99e5ed80b1..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt deleted file mode 100644 index 4eccc9f350..0000000000 --- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], -[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], -[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], -[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], -[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], -[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], -[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], -[{x:2},"Home\n\n\nBrowser"], -[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] - diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png deleted file mode 100644 index 6eecf447ee..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt deleted file mode 100644 index a08827c6de..0000000000 --- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5,a:7},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], -[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], -[{y:-0.375,x:3.5},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], -[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], -[{y:-0.75,x:3.5},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], -[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.75,x:0.5},"","",{x:14.5},"",""], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], -[{h:2},"",{h:2},"",""], -[{x:2},""], -[{r:-30,rx:13,y:-1,x:-3},"",""], -[{x:-3},"",{h:2},"",{h:2},""], -[{x:-3},""] - diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png deleted file mode 100644 index e4de64a96f..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt deleted file mode 100644 index e199f5c59f..0000000000 --- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt +++ /dev/null @@ -1,27 +0,0 @@ -[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], -[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], -[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], -[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], -[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], -[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], -[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], -[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], -[{h:2},"Space",{h:2},"Enter","Up"], -[{x:2},"Down"], -[{r:-30,rx:13,y:-1,x:-3},"Home","End"], -[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], -[{x:-3},"Page\n\n\n\n\n\nDown"] - diff --git a/keyboards/ergodox_ez/keymaps/ordinary/readme.md b/keyboards/ergodox_ez/keymaps/ordinary/readme.md deleted file mode 100644 index 6465cd79e0..0000000000 --- a/keyboards/ergodox_ez/keymaps/ordinary/readme.md +++ /dev/null @@ -1,103 +0,0 @@ -# The Ordinary Layout, a familiar and powerful layout # - -The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout. - -The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards. - -Nicholas Keene -ordinarylayout@nicholaskeene.com -no rights reserved, use for any purposes, credit me if you are a nice person - -## The Base Layout ## - -* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh -* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key -* Several dark blue keys double for entry of characters which would typically be in those locations -* The turquoise keys are text navigation and manipulation -* The red keys is Escape and it is always found in that location no matter what - -![Ordinary base layout](ordinary-base.png) - -This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. - -Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. - -The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. - -The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. - -## The Symbols Layer ## - -* The light green keys are the eponymous symbols -* The bright green keys are F-Keys -* The dark green keys constitute a number pad -* The turquoise keys are the *reverse* of the turquoise keys on the base layer - -![Ordinary symbol layout](ordinary-symbol.png) - -The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. - -The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements: - -* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers. -* The slash, backslash, and pipe characters are grouped together as a memory aid. -* The & and | symbols are juxtaposed as a memory aid - -The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. - -Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. - -## The Media Layer ## - -* The dark orange keys on the left move the mouse cursor -* The dark orange keys on the right move the text cursor -* The light orange keys are for scrolling and paging -* The bright green keys are more F-keys -* The dark yellow keys signal Web and Audio applications -* The light yellow keys signal the operating system -* The dark gray keys do nothing in case you bump them by accident - -![Ordinary media layout](ordinary-media.png) - -This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. - -Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. - -Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. - -## Switching Between Layers ## - -In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. - -Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. - -Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. - -## Special Sequences ## - -![Ordinary special layout](ordinary-special.png) - -### Escape ### - -The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. - -The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. - -### Backspace ### - -At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. - -### RShift ### - -The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. - -**** - -The Ordinary Layout for the Ergodox EZ keyboard, v4 - -Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com - -No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. - -Details: readme.md - https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary diff --git a/keyboards/ergodox_ez/keymaps/osx_de/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de/keymap.c deleted file mode 100644 index 554813d7e8..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_de/keymap.c +++ /dev/null @@ -1,364 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_german_osx.h" - -#define BASE 0 -#define SYMB 1 -#define MDIA 2 -#define SMLY 3 -#define NUMB 4 -#define EGOS 5 - -#define M_CTRL_CMDV 0 -#define M_CTRL_CMDC 1 -#define M_MEH_SH_ACUT 2 -#define M_LGUI_SHFT 3 -#define M_CTL_SFT_HASH 4 -#define M_DE_OSX_CIRC_CTRLCMD 5 -#define M_DE_OSX_PLUS_CTRLALT 6 -#define SM_SMILE 7 -#define SM_SMIRK 8 -#define SM_CRY 9 -#define SM_SAD 10 -#define SM_HEART 11 -#define SM_LAUGH 12 -#define SM_KISS 13 -#define SM_FROWN 14 -#define M_TOGGLE_5 15 - -//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE]=KEYMAP( -//left half - KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH), - KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, - KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, - KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, - LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN, - M(M_MEH_SH_ACUT), TG(MDIA), - KC_HOME, - KC_BSPC, KC_DEL, LT(SMLY,KC_END), - //right half - M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, - KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, - DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), - KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, - KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), - TG(NUMB), ALL_T(DE_OSX_ACUT), - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC), -[SYMB]=KEYMAP( -//left half - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, - KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, - KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_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 half - M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, - DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, - KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), - DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, - KC_F13, KC_F12, - KC_F14, - KC_F15, KC_TRNS, KC_TRNS), -[MDIA]=KEYMAP( -//left half - 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 half - 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), -[SMLY]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half - M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, - M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), -[NUMB]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, - KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, - KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), -[EGOS]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_F1, KC_F2, - KC_F3, - KC_SPC, KC_LCTL, KC_F4, - //right half - M(M_TOGGLE_5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -static uint16_t start; -switch(id) { -case M_TOGGLE_5: -//Macro: M_TOGGLE_5//----------------------- - if (record->event.pressed){ - layer_state ^= (1<<5); - layer_state &= (1<<5); - } - -break; -case M_CTRL_CMDC: -//Macro: M_CTRL_CMDC//----------------------- -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 M_DE_OSX_PLUS_CTRLALT: -//Macro: M_DE_OSX_PLUS_CTRLALT//----------------------- -if (record->event.pressed) { - start = timer_read(); - return MACRO(D(LCTRL),D(LALT),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LALT),END); - } else { - return MACRO(U(LCTRL),U(LALT),T(RBRC),END); - } - } - -break; -case SM_KISS: -//Macro: SM_KISS//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END); - } - -break; -case SM_FROWN: -//Macro: SM_FROWN//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END); - } - -break; -case SM_CRY: -//Macro: SM_CRY//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); - } - -break; -case SM_SMILE: -//Macro: SM_SMILE//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); - } - -break; -case SM_SMIRK: -//Macro: SM_SMIRK//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); - } - -break; -case M_LGUI_SHFT: -//Macro: M_LGUI_SHFT//----------------------- -if (record->event.pressed){ - return MACRO(D(LGUI),D(LSFT),END); - }else{ - return MACRO(U(LGUI),U(LSFT),END); - } - -break; -case SM_HEART: -//Macro: SM_HEART//----------------------- -if (record->event.pressed) { - return MACRO(T(GRV),T(3),END); - } - -break; -case SM_LAUGH: -//Macro: SM_LAUGH//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END); - } - -break; -case M_CTL_SFT_HASH: -//Macro: M_CTL_SFT_HASH//----------------------- -if (record->event.pressed) { - start = timer_read(); - return MACRO(D(LCTRL),D(LSFT),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LSFT),END); - } else { - return MACRO(U(LCTRL),U(LSFT),T(BSLS),END); - } - } - -break; -case SM_SAD: -//Macro: SM_SAD//----------------------- -if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); - } - -break; -case M_DE_OSX_CIRC_CTRLCMD: -//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- -if (record->event.pressed) { - start = timer_read(); - return MACRO(D(LCTRL),D(LGUI),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LGUI),END); - } else { - return MACRO(U(LCTRL),U(LGUI),T(NUBS),END); - } - } - -break; -case M_CTRL_CMDV: -//Macro: M_CTRL_CMDV//----------------------- -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 M_MEH_SH_ACUT: -//Macro: M_MEH_SH_ACUT//----------------------- -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); - } - } - -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) { - - case SYMB: - ergodox_right_led_1_on(); - - - break; - case MDIA: - - ergodox_right_led_2_on(); - - break; - case SMLY: - - - ergodox_right_led_3_on(); - break; - case NUMB: - ergodox_right_led_1_on(); - - ergodox_right_led_3_on(); - break; - case EGOS: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; -default: -// none -break; -} - -}; - diff --git a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png b/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png deleted file mode 100644 index d442a992c8..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/osx_de/readme.md b/keyboards/ergodox_ez/keymaps/osx_de/readme.md deleted file mode 100644 index 5011a9dd62..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_de/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -#Ergodox EZ für OSX - -Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyboard. Leider passte das layout nicht wirklich für OSX, deswegen habe ich einige Anpassungen gemacht. Dabei wurden folgende features umgesetzt: - -- Die Umlaute sollten an einigermassen sinnvollen Plätzen liegen -- der Umstieg sollte dadurch erleichtert werden, dass einige Tasten an ihren "normalen" Platz zurückgewandert sind. Z.B. ESC, Tab,... -- die Leertaste ist jetzt auf der rechten seite, neben Enter. Dafür hat der linke Daumen nun Backspace und Delete. -- die CMD- und Alt-Tasten sind in der Mitte einfach erreichbar. -- es gibt eine neue Layer die für Spiele genutzt werden kann (egosooter wie Counter Strike). Dort liegen die wichtigsten Tasten auf der linken Seite, im Daumenblock z.B. space und ctrl sowie die F-Tasten 1-4. Diese Layer ist über die Symbollayer erreichbar. -- Die Symbollayer wurde dahingehend angepasst, dass die klammern, etc nun auf beiden hälften der Tastatur zu finden sind -- der Zehnerblock wurde in eine eigene Layer umgezogen -- die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen - -# Erstellt Mit Dem ErgodoxLayoutGenerator - -Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein. -Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar). - - - ------------------------------- - -# ErgoDox EZ for OSX - -This is only a little tweak of the existing default layout for the ErgoDox keyboard. Unfortunately the default layout did not work well with german OSX, so I created som adjustments. These were the features added and changed: - -- the umlaut-keys should be at their useful place more or less -- the switching should be made more easy so some other keys (like tab, esc) were moved to their default place -- the space key can now be used with both hands -- the CMD- and ALT-Keys moved to the middle, can be reached more easily. -- there is a new layer for using the cursor-keys, placed like on the default keyboard. This makes them useable for games also -- the symbollayer now has only symbols -- the number block was moved to a special layer -- meh and hyper went down to the thumb block - -# Created Using the ErgodoxLayoutGenerator - -The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed. - -The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). - diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c deleted file mode 100644 index 687a5cb8b5..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c +++ /dev/null @@ -1,174 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#include "keymap_neo2.h" -#include "keymap_uk.h" -#include "keymap_colemak.h" -#include "keymap_french_osx.h" -#include "keymap_nordic.h" -#include "keymap_dvorak.h" -#include "keymap_german.h" -#include "keymap_norwegian.h" -#include "keymap_fr_ch.h" -#include "keymap_german_osx.h" -#include "keymap_spanish.h" -#include "keymap_bepo.h" - -#define BASE 0 -#define SYMB 1 -#define MDIA 2 -#define QWERTZ 3 -#define NUMB 4 - -#define UNUSED 0 - -//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE]=KEYMAP( -//left half - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL, - KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_LGUI, - TG(QWERTZ), KC_H, KC_A, KC_E, KC_I, KC_U, - KC_LSFT, CTL_T(KC_X), KC_Q, DE_AE, DE_UE, DE_OE, KC_LALT, - LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, - TG(MDIA), MEH_T(LSFT(DE_ACUT)), - KC_HOME, - KC_BSPC, KC_DEL, KC_END, - //right half - KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, DE_OSX_MINS, - KC_RGUI, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y, - KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F), - KC_RALT, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT, - KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), - ALL_T(DE_ACUT), TG(NUMB), - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC), -[SYMB]=KEYMAP( -//left half - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_GRV, LSFT(KC_GRV), DE_EXLM, DE_QST, KC_TRNS, KC_TRNS, - KC_TRNS, DE_HASH, DE_DLR, LALT(LSFT(KC_7)), DE_SLSH, KC_DOT, - KC_TRNS, KC_TRNS, DE_LESS, DE_PERC, LALT(KC_7), LALT(KC_N), 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 half - 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), -[MDIA]=KEYMAP( -//left half - 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - //right half - KC_TRNS, 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_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK), -[QWERTZ]=KEYMAP( -//left half - 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, - KC_TRNS, 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, - KC_TRNS, MEH_T(LSFT(DE_ACUT)), - KC_HOME, - KC_BSPC, KC_DEL, KC_END, - //right half - 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), KC_TRNS, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC), -[NUMB]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS, - KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, - KC_0, KC_DOT, KC_0, KC_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, 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) -{ -switch(id) { -case UNUSED: -//Macro: UNUSED//----------------------- - - - - - - 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) { - -default: -// none -break; -} - -}; - diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png deleted file mode 100644 index 193aa339e6..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c deleted file mode 100644 index 21d695894a..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c +++ /dev/null @@ -1,597 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_neo2.h" -#include "keymap_uk.h" -#include "keymap_colemak.h" -#include "keymap_nordic.h" -#include "keymap_dvorak.h" -#include "keymap_german.h" -#include "keymap_norwegian.h" -#include "keymap_fr_ch.h" -#include "keymap_german_osx.h" -#include "keymap_spanish.h" -#include "keymap_bepo.h" - - -/** -* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases -* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/ -* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ! -* -* use at own risk! -**/ - -#define BASE 0 -#define SYMB 1 -#define MDIA 2 -#define SMLY 3 -#define NUMB 4 -#define EGOS 5 - -#define SMLY_TOG_QUOT 0 - -#define M_TOGGLE_5 1 - -#define TGH_NUM 2 - -#define M_DE_OSX_PLUS_CTRLALT 3 - -#define SM_KISS 4 - -#define SM_FROWN 5 - -#define SM_CRY 6 - -#define SM_SMILE 7 - -#define SM_SMIRK 8 - -#define M_LGUI_SHFT 9 - -#define SM_HEART 10 - -#define TOG_HLD_MDIA 11 - -#define SM_LAUGH 12 - -#define SM_SAD 13 - -#define M_DE_OSX_CIRC_CTRLCMD 14 - -#define M_MEH_SH_ACUT 15 - - -//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/** -* Layer: BASE -* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ -* | ESC | 1 | 2 | 3 | 4 | 5 | Hold or toggle | | Hold or toggle | 6 | 7 | 8 | 9 | 0 | ß | -* | | | | | | | Layer NUMB | | Layer MDIA | | | | | | | -* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ -* | TAB | Q | W | E | R | T | Cmd | | Cmd | Z | U | I | O | P | Ü | -* | | | | | | | | | | | | | | | | -* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\ \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ -* | Alt | A | S | D | F | G | | H | J | K | L | Ö | Ä | -* | | | | | | | | | | | | | ALT | -* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ -* | Shift | Y | X | C | V | B | Alt | | Alt | N | M | , | . | - | Shift | -* | | Ctrl | | | | | | | | | | | | Ctrl | | -* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ -* -* -* /-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------/ -* | < | LongPress / Type | LongPress / Type | Shift+Ctrl | Type | | # | ACUT | CMD+Shift | ALT+Shift | + | -* | SYMB | DE_OSX_CIRC_CTRLCMD| DE_OSX_PLUS_CTRAlt | | Toggle SMLY | | Meh | Hyper | | | SYMB | -* \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/ /-------------------//-------------------/ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ -* | HOME | END | | LEFT | RIGHT | -* | | | | | | -* \-------------------\/-------------------/ /-------------------/\-------------------\ -* | PGUP | | UP | -* | | | | -* /-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------/ -* | BSPC | DEL | PGDN | | DOWN | ENT | SPC | -* | | | | | | | | -* \-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\ -* -* -**/ -[BASE]=KEYMAP( -//left half - KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM), - KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, - KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, - KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, - LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), - KC_HOME, KC_END, - KC_PGUP, - KC_BSPC, KC_DEL, KC_PGDN, - //right half - M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, - KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, - DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), - KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, - MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), - KC_LEFT, KC_RIGHT, - KC_UP, - KC_DOWN, KC_ENT, KC_SPC), -/** -* Layer: SYMB -* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ -* | APPLICATION| F1 | F2 | F3 | F4 | F5 | F5 | | F6 | F6 | F7 | F8 | F9 | F10 | F11 | -* | | | | | | | | | | | | | | | | -* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ -* | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! | -* | | | | | | | | | | | | | | | | -* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\ \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/ -* | | # | $ | \ | / | . | | / | ( | ) | { | } | # | -* | | | | | | | | | | | | | | -* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ -* | | | < | % | | | ~ | | | | | | ~ | | | | | -* | | | | | | | | | | | | | | | | -* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\ -* -* -* /-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------/ -* | | | | | | | ' | DQOT | | Toggle 5 | | -* | | | | | | | | | | | | -* \-----------\\-----------\\-----------\\-----------\/-----------//-----------/ /-----------//-----------/ \-----------\\-----------\\-----------\\-----------\\-----------\ -* | | | | F13 | F12 | -* | | | | | | -* \-----------\/-----------/ /-----------/\-----------\ -* | | | F14 | -* | | | | -* /-----------//-----------//-----------/ /-----------//-----------//-----------/ -* | | DEL | | | F15 | | | -* | | | | | | | | -* \-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\ -* -* -**/ -[SYMB]=KEYMAP( -//left half - KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, - KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, - KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, - KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_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 half - KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, - DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH, - KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, - KC_F13, KC_F12, - KC_F14, - KC_F15, KC_TRNS, KC_TRNS), -/** -* Layer: MDIA -* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ -* | | | | | | | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ -* | | | BTN1 | U | BTN2 | U | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* /-----//-----//-----//-----//-----//-----/\-----\ \-----\/-----//-----//-----//-----//-----//-----/ -* | | | L | D | R | D | | | | | | | | -* | | | | | | | | | | | | | | -* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/ -* | | | L | D | R | BTN3 | | | | | | | | UP | | -* | | | | | | | | | | | | | | | | -* \-----\\-----\\-----\\-----\\-----\\-----\\-----\ \-----\\-----\\-----\\-----\\-----\\-----\\-----\ -* -* -* /-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----/ -* | | | | | | | | | LEFT | DOWN | RIGHT| -* | | | | | | | | | | | | -* \-----\\-----\\-----\\-----\/-----//-----/ /-----//-----/ \-----\\-----\\-----\\-----\\-----\ -* | | | | MPRV | MNXT | -* | | | | | | -* \-----\/-----/ /-----/\-----\ -* | | | VOLU | -* | | | | -* /-----//-----//-----/ /-----//-----//-----/ -* | | | | | VOLD | MUTE | MPLY | -* | | | | | | | | -* \-----\\-----\\-----\ \-----\\-----\\-----\ -* -* -**/ -[MDIA]=KEYMAP( -//left half - 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 half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, - KC_MPRV, KC_MNXT, - KC_VOLU, - KC_VOLD, KC_MUTE, KC_MPLY), -/** -* Layer: SMLY -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | Typing | Typing | Typing | | | | | -* | | | | | | | | | SM_SMILE| SM_SMIRK| SM_LAUGH| | | | | -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | | Typing | Typing | Typing | | | | -* | | | | | | | | | | SM_FROWN| SM_SAD | SM_CRY | | | | -* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/ -* | | | | | | | | Typing | Typing | | | | | -* | | | | | | | | SM_HEART| SM_KISS | | | | | -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\ -* -* -* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/ -* | | | | | | | | | | | | -* | | | | | | | | | | | | -* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\ -* | | | | | | -* | | | | | | -* \--------\/--------/ /--------/\--------\ -* | | | | -* | | | | -* /--------//--------//--------/ /--------//--------//--------/ -* | | | | | | | | -* | | | | | | | | -* \--------\\--------\\--------\ \--------\\--------\\--------\ -* -* -**/ -[SMLY]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half - M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, - M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), -/** -* Layer: NUMB -* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ -* | | | | | | | | | | F6 | F7 | F8 | F9 | F10 | F11 | -* | | | | | | | | | | | | | | | | -* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ -* | | | | UP | | | | | | / | 7 | 8 | 9 | * | F12 | -* | | | | | | | | | | | | | | | | -* /----//----//----//----//----//----/\----\ \----\/----//----//----//----//----//----/ -* | | | LEFT| DOWN| RGHT| | | / | 4 | 5 | 6 | + | - | -* | | | | | | | | | | | | | | -* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/ -* | | | | | | | | | | % | 1 | 2 | 3 | | | -* | | | | | | | | | | | | | | | | -* \----\\----\\----\\----\\----\\----\\----\ \----\\----\\----\\----\\----\\----\\----\ -* -* -* /----//----//----//----//----/ /----//----//----//----//----/ -* | | | | | | | 0 | . | , | = | | -* | | | | | | | | | | | | -* \----\\----\\----\\----\/----//----/ /----//----/ \----\\----\\----\\----\\----\ -* | | | | | | -* | | | | | | -* \----\/----/ /----/\----\ -* | | | | -* | | | | -* /----//----//----/ /----//----//----/ -* | | | | | | | | -* | | | | | | | | -* \----\\----\\----\ \----\\----\\----\ -* -* -**/ -[NUMB]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 half - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12, - DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS, - KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, - KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS), -/** -* Layer: EGOS -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/ -* | Shift | | | | | | | | | | | | | -* | | | | | | | | | | | | | | -* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/ -* | | | | | | | | | | | | | | | | -* | | | | | | | | | | | | | | | | -* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\ -* -* -* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/ -* | Ctrl | | | | | | | | | Toggle 5| | -* | | | | | | | | | | | | -* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\ -* | F1 | F2 | | | | -* | | | | | | -* \--------\/--------/ /--------/\--------\ -* | F3 | | | -* | | | | -* /--------//--------//--------/ /--------//--------//--------/ -* | SPC | Ctrl | F4 | | | | | -* | | | | | | | | -* \--------\\--------\\--------\ \--------\\--------\\--------\ -* -* -**/ -[EGOS]=KEYMAP( -//left half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_F1, KC_F2, - KC_F3, - KC_SPC, KC_LCTL, KC_F4, - //right half - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, 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) -{ -static uint16_t start; -switch(id) { -case SMLY_TOG_QUOT: -//Macro: SMLY_TOG_QUOT//----------------------- -if (record->event.pressed) { - start = timer_read(); - layer_state ^= (1<150) { - return MACRO_NONE; - } else { - return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END); - } - } - -break; -case M_TOGGLE_5: -//Macro: M_TOGGLE_5//----------------------- - if (record->event.pressed){ - layer_state ^= (1<<5); - layer_state &= (1<<5); - } - -break; -case TGH_NUM: -//Macro: TGH_NUM//----------------------- -if (record->event.pressed){ - start = timer_read(); - layer_state ^=(1< 150) { - layer_state^=(1<event.pressed) { - start = timer_read(); - return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LALT),END); - } else { - return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END); - } - } - -break; -case SM_KISS: -//Macro: SM_KISS//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END); - } - -break; -case SM_FROWN: -//Macro: SM_FROWN//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END); - } - -break; -case SM_CRY: -//Macro: SM_CRY//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); - } - -break; -case SM_SMILE: -//Macro: SM_SMILE//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); - } - -break; -case SM_SMIRK: -//Macro: SM_SMIRK//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); - } - -break; -case M_LGUI_SHFT: -//Macro: M_LGUI_SHFT//----------------------- -if (record->event.pressed){ - return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END); - }else{ - return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END); - } - -break; -case SM_HEART: -//Macro: SM_HEART//----------------------- -if (record->event.pressed) { - return MACRO(TYPE(KC_GRV),TYPE(KC_3),END); - } - -break; -case TOG_HLD_MDIA: -//Macro: TOG_HLD_MDIA//----------------------- -if (record->event.pressed){ - start = timer_read(); - layer_state ^=(1< 150) { - layer_state^=(1<event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END); - } - -break; -case SM_SAD: -//Macro: SM_SAD//----------------------- -if (record->event.pressed) { - return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); - } - -break; -case M_DE_OSX_CIRC_CTRLCMD: -//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- -if (record->event.pressed) { - start = timer_read(); - return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LGUI),END); - } else { - return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END); - } - } - -break; -case M_MEH_SH_ACUT: -//Macro: M_MEH_SH_ACUT//----------------------- -if (record->event.pressed) { - start = timer_read(); - return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END); - } else { - if (timer_elapsed(start) >150) { - return MACRO(U(LCTRL),U(LSFT),U(LALT),END); - } else { - return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_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) { - -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) { - - case SYMB: - ergodox_right_led_1_on(); - - - break; - case MDIA: - - ergodox_right_led_2_on(); - - break; - case NUMB: - - - ergodox_right_led_3_on(); - break; - case EGOS: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; -default: -// none -break; -} - -}; - diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png deleted file mode 100644 index 031d874a7b..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md b/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md deleted file mode 100644 index e6a1018416..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md +++ /dev/null @@ -1,22 +0,0 @@ - -# Ergodox und Ergodox-EZ experimentelles Layout - -dieses layout ist experimentell und wird im Lufe der Zeit viele Änderungen und Verbesserungen durchlaufen. Falls diese sich als vorteilhaft erweisen, werden sie evtl. auch in das `osx_de` layout übernommen. - - - -# Erstellt Mit Dem ErgodoxLayoutGenerator - -Der ErgodoxLayoutGenerator (ELG) ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein. -Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar). ---------------------------------------------------------------------------------------------------------------------- - -# Ergodox and Ergodox-EZ experimental layout - -This is an experimental layout which will undergo heavy changes over time. If changes prove to be good, they might also move into the `osx_de` layout. - -Created Using the ErgodoxLayoutGenerator - -The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed. - -The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c b/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c deleted file mode 100644 index de951666dd..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -// French AZERTY version of the default_osx file -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_french_osx.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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | - | & | é | " | ' | ( | LEFT | | RIGHT| § | è | ! | ç | à | ) | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | A | Z | E | R | T | L1 | | L1 | Y | U | I | O | P | ` | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | Q | S | D | F | G |------| |------| H | J | K | L | M | LGui | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |W/Ctrl| X | C | V | B | | | | N | , |; / L2| : |=/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | ù /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 - FR_MINS, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_LEFT, - KC_DELT, FR_A, FR_Z, KC_E, KC_R, KC_T, TG(1), - KC_BSPC, FR_Q, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(FR_W), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LT(SYMB,FR_UGRV), FR_LESS, 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, FR_SECT, FR_EGRV, FR_EXLM, FR_CCED, FR_AGRV, FR_RPRN, - TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, FR_GRV, - KC_H, KC_J, KC_K, KC_L, FR_M, KC_LGUI, - MEH_T(KC_NO), KC_N, FR_COMM, LT(MDIA, FR_SCLN), FR_COLN, CTL_T(FR_EQL), 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,FR_EXLM,FR_AT, FR_LCBR,FR_RCBR,FR_PIPE,KC_TRNS, - KC_TRNS,FR_HASH,FR_DLR, FR_LPRN,FR_RPRN,FR_GRV, - KC_TRNS,FR_PERC,FR_CIRC,FR_LBRC,FR_RBRC,FR_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, FR_7, FR_8, FR_9, FR_ASTR, KC_F12, - KC_DOWN, FR_4, FR_5, FR_6, FR_PLUS, KC_TRNS, - KC_TRNS, FR_AMP, FR_1, FR_2, FR_3, FR_BSLS, KC_TRNS, - KC_TRNS,FR_COMM, FR_0, FR_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; - } - -}; \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c deleted file mode 100644 index 1032be5491..0000000000 --- a/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c +++ /dev/null @@ -1,191 +0,0 @@ -// Netable differences vs. the default firmware for the ErgoDox EZ: -// 1. The Cmd key is now on the right side, making Cmd+Space easier. -// 2. The media keys work on OSX (But not on Windows). -// Wanted to map default layer of my EZ to my existing Kinesis Mapping. -// Only default layer was remapped all others layers are standard Ergodox EZ -// Very personal mapping of-course, but who knows a starting point for others. - -#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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | CapsL | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ESC | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '" | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |AltShf|Grv/L1| '" | Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LGui | App | | Ctrl/Esc | RGui | - * ,------|------|------| |------+--------+------. - * | | | Home | | = | | | - * | Backs|Delete|------| |------| Enter |Space | - * | pace | | End | | TAB | | | - * `--------------------' `----------------------' - */ -// 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_CAPSLOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LALT(KC_LSFT), LT(SYMB,KC_GRV),KC_QUOT,KC_LEFT,KC_RGHT, - KC_LGUI, ALT_T(KC_APP), - KC_HOME, - KC_BSPC,KC_DELT,KC_END, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOTE, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - CTL_T(KC_ESC), KC_LGUI, - KC_EQL, - KC_TAB, KC_ENT, 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; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/plover/keymap.c b/keyboards/ergodox_ez/keymaps/plover/keymap.c deleted file mode 100644 index 8a58a37f68..0000000000 --- a/keyboards/ergodox_ez/keymaps/plover/keymap.c +++ /dev/null @@ -1,228 +0,0 @@ -#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 -#define PLVR 3 // Plover layer - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LGui | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | |Plover| Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Esc | 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 | Home | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | End | | PgUp | | | - * |Backsp|Delete|------| |------| Enter |Space | - * | ace | | LAlt | | 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_LGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, - 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_HOME, - KC_END, - KC_BSPC,KC_DELT,KC_LALT, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(3), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, - MEH_T(KC_NO),KC_N, 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_ENT, 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | |Brwser|Brwser| - * | Lclk | Rclk |------| |------|Fwd |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_BTN1, KC_BTN2, 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_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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_WBAK, KC_WFWD -), - -/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | c | v |------| |------| n | m | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover - // left hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_FN4, KC_NO, - KC_NO, - KC_C, KC_V, KC_NO, - // right hand - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_NO, KC_N, KC_M -), -}; - -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/keyboards/ergodox_ez/keymaps/plums/keymap.c b/keyboards/ergodox_ez/keymaps/plums/keymap.c deleted file mode 100644 index 46eb2e42b1..0000000000 --- a/keyboards/ergodox_ez/keymaps/plums/keymap.c +++ /dev/null @@ -1,229 +0,0 @@ -#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 | F5 | |Hypr+M| 6 | 7 | 8 | 9 | 0 | Mute | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| SYMB | | MDIA |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Ca/Ctl| { | ( | | | : | | - | = | ) | } |C`/Ctl| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LGA | LAlt | | RAlt | Play | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * |Backsp| Esc |------| |------|Enter |Space | - * |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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, - KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB), - F(0), KC_LCBR, KC_LPRN,KC_PIPE,KC_COLN, - LGUI(KC_LALT), KC_LALT, - KC_HOME, - KC_BSPC, KC_ESC, KC_END, - // right hand - HYPR(KC_M), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE, - KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - TG(MDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_MINS, KC_EQL, KC_RPRN, KC_RCBR, F(1), - KC_RALT, KC_MPLY, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | | | | | | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, - KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |VolUp |VolDn | Prev | Next | | | LClk | RClk | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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, - KC_TRNS, KC_TRNS, KC_WBAK -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MACRO_TAP(0), // FN0 - Ctrl + a (For screen/tmux) - [1] = ACTION_MACRO_TAP(1) // FN1 - Ctrl + ` (For quake style console) -}; - -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: - if (record->event.pressed) { - if (record->tap.count) { - if (record->tap.interrupted) { - record->tap.count = 0; - // hold press action - register_code(KC_LCTL); - } else { - // tap press action - return MACRO( D(LCTL), T(A), U(LCTL), END ); - } - } else { - // hold press action - register_code(KC_LCTL); - } - } else { - if (record->tap.count) { - // tap release action - } else { - // hold release action - unregister_code(KC_LCTL); - } - record->tap.count = 0; - } - break; - case 1: - if (record->event.pressed) { - if (record->tap.count) { - if (record->tap.interrupted) { - record->tap.count = 0; - // hold press action - register_code(KC_RCTL); - } else { - // tap press action - return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END ); - } - } else { - // hold press action - register_code(KC_RCTL); - } - } else { - if (record->tap.count) { - // tap release action - } else { - // hold release action - unregister_code(KC_RCTL); - } - record->tap.count = 0; - } - 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/keyboards/ergodox_ez/keymaps/plums/plums.png b/keyboards/ergodox_ez/keymaps/plums/plums.png deleted file mode 100644 index 2f127c4cab..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/plums/plums.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/plums/readme.md b/keyboards/ergodox_ez/keymaps/plums/readme.md deleted file mode 100644 index b72329eef7..0000000000 --- a/keyboards/ergodox_ez/keymaps/plums/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# ErgoDox EZ Plums Configuration - -## Changelog - -* Apr 23, 2016 (v0.1.0): - * Shortcut for iTerm2 quake style dropdown (Ctrl+`) - * Shortcut for screen/tmux (Ctrl+a) - * Shortcut for shush (Hyper+m) - * Combo modifier for LGUI + LALT - -![Plums](plums.png) diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c deleted file mode 100644 index a66971befd..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = KEYMAP( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, - CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, - KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, - // - /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, - /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, - /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - KC_MPLY, KC_MNXT, - KC_MPRV, - KC_RALT, KC_QUOT, KC_SPC - ) -}; - -const uint16_t PROGMEM fn_actions[] = { -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - return MACRO_NONE; -}; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { -}; diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md deleted file mode 100644 index 80475ab21e..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# Roman's Layout - -There is only one layer based on [Norman layout](https://normanlayout.info/). - -Looking for multiple-layer layouts? - -- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/) -- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/) - -[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195) - -## Functional Keys - -- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). -- Tap `F2` to copy screenshot to the clipboard. -- Hold `SHIFT` and tap `F2` to save screenshot as a file. -- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). - -## CTRL/ESC - -CTRL and ESC are frequently used in Vim. - -- Tap `CTRL/ESC` to send `ESC`. -- Hold `CTRL/ESC` to use as `CTRL`. - -## Activate N-rollover - -- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png deleted file mode 100644 index 4b9433be28..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c deleted file mode 100644 index 7c9f673816..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c +++ /dev/null @@ -1,134 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 -#define SYMB 1 -#define PLVR 2 -#define ARRW 3 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = KEYMAP( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14, - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR), - CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, - KC_F1, KC_F2, KC_F3, KC_LALT, KC_LGUI, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1, - // - /*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - /*-*/ KC_BSLS, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, - /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, - /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - /*-*/ /*-*/ /*-*/ KC_RGUI, KC_RALT, KC_F4, KC_F5, KC_F6, - KC_MPLY, KC_MNXT, - KC_MPRV, - KC_FN3, KC_QUOT, KC_SPC - ), - [SYMB] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - // - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - /*-*/ /*-*/ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS - ), - [PLVR] = KEYMAP( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO, - // - /*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - /*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, - /*-*/ /*-*/ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - /*-*/ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - /*-*/ /*-*/ /*-*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_NO, KC_N, KC_M - ), - [ARRW] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - // - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { - [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer - [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer - [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer -}; - -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) { - case SYMB: - ergodox_right_led_1_on(); - break; - case PLVR: - ergodox_right_led_2_on(); - break; - case ARRW: - ergodox_right_led_3_on(); - break; - default: - break; - } -}; diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md deleted file mode 100644 index 16cebd0912..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# Roman's Layout - -There are four layers: - -- **BASE** is [Norman layout](https://normanlayout.info/). -- **SYMB** for numbers and symbols. -- **PLVR** is optimized for [Plover](http://www.openstenoproject.org). -- **ARRW** for navigation (same fingers for arrows as HJKL on QWERTY). - -Looking for IJKL arrows? [Here we -go](../romanzolotarev-norman-plover-osx/). - -[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0) - -## Switching - -- Tap `SYMB` to toggle **SYMB**. -- Tap `ARRW` to toggle **ARRW**. -- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding. -- Tap `PLVR` to toggle **PLVR**. - -## LEDs - -- Red: SYMB is on. -- Green: PLVR is on. -- Blue: ARRW is on. - -## Functional Keys - -- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). -- Tap `F2` to copy screenshot to the clipboard. -- Hold `SHIFT` and tap `F2` to save screenshot as a file. -- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). -- Tap `F14`, `F15` to adjust display brightness. - -**IMPORTANT**: If you have another keyboard connected via Bluetooth, then -`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug -you ErgoDox. Enjoy! - -## CTRL/ESC - -Both of those keys are frequently used in Vim. - -- Tap `CTRL/ESC` to send `ESC`. -- Hold `CTRL/ESC` to use as `CTRL`. - -## Activate N-rollover - -- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`. -- Then you can activate **PLVR** and use ErgoDox EZ for steno. diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png deleted file mode 100644 index cdc535f79e..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c deleted file mode 100644 index 9971b834cf..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c +++ /dev/null @@ -1,134 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 -#define SYMB 1 -#define PLVR 2 -#define ARRW 3 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = KEYMAP( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14, - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR), - CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, - KC_F1, KC_F2, KC_F3, KC_LALT, KC_LGUI, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1, - // - /*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - /*-*/ KC_BSLS, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, - /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, - /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - /*-*/ /*-*/ /*-*/ KC_RGUI, KC_RALT, KC_F4, KC_F5, KC_F6, - KC_MPLY, KC_MNXT, - KC_MPRV, - KC_FN3, KC_QUOT, KC_SPC - ), - [SYMB] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - // - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - /*-*/ /*-*/ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS - ), - [PLVR] = KEYMAP( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO, - // - /*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - /*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, - /*-*/ /*-*/ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - /*-*/ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - /*-*/ /*-*/ /*-*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_NO, KC_N, KC_M - ), - [ARRW] = 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_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_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - // - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { - [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer - [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer - [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer -}; - -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) { - case SYMB: - ergodox_right_led_1_on(); - break; - case PLVR: - ergodox_right_led_2_on(); - break; - case ARRW: - ergodox_right_led_3_on(); - break; - default: - break; - } -}; diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md deleted file mode 100644 index 804c52a767..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# Roman's Layout - -There are four layers: - -- **BASE** is [Norman layout](https://normanlayout.info/). -- **SYMB** for numbers and symbols. -- **PLVR** is optimized for [Plover](http://www.openstenoproject.org). -- **ARRW** for navigation (same fingers for arrows as IJKL on QWERTY). - -Looking for HJKL arrows? [Here we -go](../romanzolotarev-norman-plover-osx-hjkl/). - -[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417) - -## Switching - -- Tap `SYMB` to toggle **SYMB**. -- Tap `ARRW` to toggle **ARRW**. -- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding. -- Tap `PLVR` to toggle **PLVR**. - -## LEDs - -- Red: SYMB is on. -- Green: PLVR is on. -- Blue: ARRW is on. - -## Functional Keys - -- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). -- Tap `F2` to copy screenshot to the clipboard. -- Hold `SHIFT` and tap `F2` to save screenshot as a file. -- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). -- Tap `F14`, `F15` to adjust display brightness. - -**IMPORTANT**: If you have another keyboard connected via Bluetooth, then -`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug -you ErgoDox. Enjoy! - -## CTRL/ESC - -Both of those keys are frequently used in Vim. - -- Tap `CTRL/ESC` to send `ESC`. -- Hold `CTRL/ESC` to use as `CTRL`. - -## Activate N-rollover - -- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`. -- Then you can activate **PLVR** and use ErgoDox EZ for steno. diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png deleted file mode 100644 index 10b0752be5..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c deleted file mode 100644 index dedac694e4..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 -#define QWRT 1 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = KEYMAP( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, - KC_LCTL, KC_A, KC_S, KC_E, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, - KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, - // - /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - /*-*/ TG(QWRT), KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, - /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, - /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - KC_MPLY, KC_MNXT, - KC_MPRV, - KC_RALT, KC_QUOT, KC_SPC - ), - [QWRT] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_E, KC_R, KC_T, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_D, KC_F, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, - /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, - // - /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - /*-*/ KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS, - /*-*/ /*-*/ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS, - /*-*/ KC_TRNS, KC_N, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = { -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - 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) { - case QWRT: - ergodox_right_led_1_on(); - break; - default: - break; - } -}; diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md deleted file mode 100644 index 0e78c130b3..0000000000 --- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -# Roman's Layout - -There are two layers: - -- **BASE** is [Norman layout](https://normanlayout.info/). -- **QWRT** is QWERTY. - -[![keyboard-layout](romanzolotarev-norman-qwerty-osx.png)](http://www.keyboard-layout-editor.com/#/gists/3b236f450da474dc506a5a80390c3cc7) - -## Switching - -- Tap `QWRT` to toggle **QWRT**. - -## LEDs - -- Red: QWRT is on. - -## Functional Keys - -- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). -- Tap `F2` to copy screenshot to the clipboard. -- Hold `SHIFT` and tap `F2` to save screenshot as a file. -- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). - -## CTRL/ESC - -Both CTRL and ESC are frequently used in Vim. - -- Tap `CTRL/ESC` to send `ESC`. -- Hold `CTRL/ESC` to use as `CTRL`. - -## Activate N-rollover - -- Hold left `SHIFT` and right `SHIRT` and then tap `N`. diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png deleted file mode 100644 index 34762ecb75..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/sneako/keymap.c b/keyboards/ergodox_ez/keymaps/sneako/keymap.c deleted file mode 100644 index 0c68631029..0000000000 --- a/keyboards/ergodox_ez/keymaps/sneako/keymap.c +++ /dev/null @@ -1,187 +0,0 @@ -// Based on `default_osx` -// Replace left Bksp with Ctrl/Esc -// Remove the Ctrl from Z and / -#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 | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | 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_E, KC_R, KC_T, TG(1), - CTL_T(KC_ESC), 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_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(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, 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 -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/keyboards/ergodox_ez/keymaps/sneako/readme.md b/keyboards/ergodox_ez/keymaps/sneako/readme.md deleted file mode 100644 index 8dd110ee68..0000000000 --- a/keyboards/ergodox_ez/keymaps/sneako/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# ergodox_keymap - -Based on the default Ergodox EZ firmware - -Replaced the left side Bksp with a Crtl/Esc, this really helps in vim. -Removed the Ctrls from the Z and / keys. diff --git a/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c deleted file mode 100644 index 2eaba0d7da..0000000000 --- a/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c +++ /dev/null @@ -1,139 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_neo2.h" - -// Layer names -#define BASE 0 // default layer -#define MDIA 1 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ^ | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 |BackSpce| - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | X | V | L | C | W | L1 | | L1 | K | H | G | F | Q | ß | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Caps | U | I | A | E | O |------| |------| S | N | R | T | D | Y | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Ü/Ctrl| Ö/C-S| Ä/Alt| P | Z | | | | B | M | , | . | J | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | L1 | Home | PgDn | PgUp | End | | Right| Down | Up | Left | Esc | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| - * ,------+------+------| |------+--------+------. - * | | |NeoL2 | |NeoL2 | | | - * | Tab |Backsp|------| |------| Space |Enter | - * | |ace |NeoL1 | |NeoL1 | | | - * `--------------------' `----------------------' - */ -// 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_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY, - KC_DELT, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, TG(1), - KC_CAPS, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O, - KC_LSFT, CTL_T(NEO_UE), C_S_T(NEO_OE), ALT_T(NEO_AE), NEO_P, NEO_Z, ALL_T(KC_NO), - DE_LESS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, - ALT_T(KC_APP),KC_LGUI, - NEO_L2_L, - KC_TAB,KC_BSPC,NEO_L1_L, - // right hand - KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, - NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_Y, - MEH_T(KC_NO),NEO_B, NEO_M, KC_COMM, KC_DOT, NEO_J, KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ESC, - KC_LALT,CTL_T(KC_ESC), - NEO_L2_R, - NEO_L1_R,KC_SPC, KC_ENT - ), -/* Keymap 1: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | |Brwser|Brwser| - * | Lclk | Rclk |------| |------|Back |Forwd | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS, - KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, - KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, - KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_BTN1, KC_BTN2, KC_TRNS, - // right hand - KC_TRNS, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11, - KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12, - KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, - KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_WBAK, KC_WFWD -), -}; - -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) { - case MDIA: - ergodox_right_led_2_on(); - break; - default: - ergodox_board_led_off(); - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/supercoder/config_user.h b/keyboards/ergodox_ez/keymaps/supercoder/config_user.h deleted file mode 100644 index 8da1383726..0000000000 --- a/keyboards/ergodox_ez/keymaps/supercoder/config_user.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H 1 - -#include "config.h" - -#undef LOCKING_SUPPORT_ENABLE -#undef LOCKING_RESYNC_ENABLE - -#endif diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png b/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png deleted file mode 100644 index c72958c6e7..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg b/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg deleted file mode 100644 index d690eaf020..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/supercoder/keymap.c b/keyboards/ergodox_ez/keymaps/supercoder/keymap.c deleted file mode 100644 index ca21d30fd2..0000000000 --- a/keyboards/ergodox_ez/keymaps/supercoder/keymap.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SuperCoder 2000 layout - */ - -#include "ergodox_ez.h" - -/* Layers */ - -#define SC2K 0 // default layer - -/* The Keymap */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Keymap 0: Base Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | 0 | 0 | 0 | 0 | 0 | 0 |------| |------| 1 | 1 | 1 | 1 | 1 | 1 | - * |-----------+------+------+------+------+------| 0 | | 1 |------+------+------+------+------+-----------| - * | 0 | 0 | 0 | 0 | 0 | 0 | | | | 1 | 1 | 1 | 1 | 1 | 1 | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | DONE | DONE | | DONE | DONE | - * ,------|------|------| |------+------+------. - * | | | DONE | | DONE | | | - * | DONE | DONE |------| |------| DONE | DONE | - * | | | DONE | | DONE | | | - * `--------------------' `--------------------' - */ -[SC2K] = KEYMAP( - // left hand - KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 -,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 -,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 -,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 -,KC_0 ,KC_0 ,KC_0 ,KC_0 ,KC_0 - - ,KC_ENT ,KC_ENT - ,KC_ENT - ,KC_ENT ,KC_ENT ,KC_ENT - - // right hand - ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 - ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 - ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 - ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 - ,KC_1 ,KC_1 ,KC_1 ,KC_1 ,KC_1 - - ,KC_ENT ,KC_ENT - ,KC_ENT - ,KC_ENT ,KC_ENT ,KC_ENT - ), -}; - -const uint16_t PROGMEM fn_actions[] = { -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - 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) { -} diff --git a/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk b/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk deleted file mode 100644 index 41a195d9c0..0000000000 --- a/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk +++ /dev/null @@ -1,6 +0,0 @@ -BOOTMAGIC_ENABLE=no -COMMAND_ENABLE=no -SLEEP_LED_ENABLE=no -UNICODE_ENABLE=no -MOUSEKEY_ENABLE=no -EXTRAKEY_ENABLE=no diff --git a/keyboards/ergodox_ez/keymaps/supercoder/readme.md b/keyboards/ergodox_ez/keymaps/supercoder/readme.md deleted file mode 100644 index 97bf7f5835..0000000000 --- a/keyboards/ergodox_ez/keymaps/supercoder/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -SuperCoder 2000 layout for the ErgoDox -================================================== - -![SuperCoder 2000](images/supercoder_2000.jpg) - -Ever found yourself in need of entering binary codes rapidly? Ever wanted to use -all ten fingers to do so? Ever felt your SuperCoder 2000 too limiting, by only -having three buttons? We heard you! With this layout for the ErgoDox EZ, you -will be able to tap in binary at an unparalleled speed and accuracy! Efficiency -never seen before! - -Behold the Ultimate SuperCoder 2000 layout! - -![SuperCoder layout](images/layout.png) - -### To use it... - -To use this piece of top quality engineering, you can either -[download the hex file][hex] we have prepared for you, or you can compile it on -your own: - - [hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex - -``` -$ git clone https://github.com/jackhumbert/qmk_firmware.git -$ cd qmk_firmware/keyboards/ergodox_ez -$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder -$ make KEYMAP=supercoder -``` diff --git a/keyboards/ergodox_ez/keymaps/techtomas/keymap.c b/keyboards/ergodox_ez/keymaps/techtomas/keymap.c deleted file mode 100644 index 1ff6618b98..0000000000 --- a/keyboards/ergodox_ez/keymaps/techtomas/keymap.c +++ /dev/null @@ -1,231 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define APP 2 // app layer -#define CNTL 3 // control layer - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | L2/` | 1 | 2 | 3 | 4 | 5 |CmdSpc| | - | 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | MEH/Tab| Q | W | E | R | T | [ | | ] | Y | U | I | O | P | MEH/\ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Hyp/Esc | A | S | D | F | G |------| |------| H | J | K | L | L2/; | Hyp/' | - * |--------+------+------+------+------+------| Tab | | STab |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | L2// | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |L1/Lft|L3/Rht| LCtl | LAlt | LGui | | Rgui | Up | Dn | L3 | L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LCtl | LGui | |AltGui|ShfGui| - * ,-------|------|------| |------+--------+------. - * | | |L1/Hom| |L2/PUp| | | - * | Backsp|Delete|------| |------| Enter | Space | - * | | |L3/End| |L1/PDn| | | - * `--------------------' `-----------------------' - */ -// 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 - LT(APP,KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_SPC), - MEH_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, - ALL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TAB, - LT(SYMB,KC_LEFT), LT(CNTL,KC_RIGHT), KC_LCTL, KC_LALT, KC_LGUI, - KC_LCTL, KC_LGUI, - LT(SYMB,KC_HOME), - KC_BSPC, KC_DELETE, LT(CNTL,KC_END), - // right hand - KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, MEH_T(KC_BSLS), - KC_H, KC_J, KC_K, KC_L, LT(APP,KC_SCLN), ALL_T(KC_QUOT), - S(KC_TAB), KC_N, KC_M, KC_COMM, KC_DOT, LT(APP,KC_SLSH), KC_RSFT, - KC_RGUI, KC_UP, KC_DOWN, KC_FN3, KC_FN1, - LALT(KC_LGUI), S(KC_LGUI), - LT(APP,KC_PGUP), - LT(SYMB,KC_PGDN), KC_ENT, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | Tab | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | < | | > | : | 7 | 8 | 9 | / | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| ; | 4 | 5 | 6 | * | | - * |--------+------+------+------+------+------| F14 | | F15 |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | - | Entr | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 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,S(KC_COMM), - 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_F14, - 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_TAB, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - S(KC_DOT), KC_COLN, KC_7, KC_8, KC_9, KC_BSLS, KC_F12, - KC_SCLN, KC_4, KC_5, KC_6, KC_ASTR, KC_TRNS, - KC_F15, KC_AMPR, KC_1, KC_2, KC_3, KC_MINS, KC_ENT, - KC_0, KC_DOT, KC_EQL, KC_PLUS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: App Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | CmdQ | CmdW | | | | Stab | | Play | Prev | Next | | |PrtSc | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| VolDn|VolUp | | | | | - * |--------+------+------+------+------+------| | | Mute |------+------+------+------+------+--------| - * | | CmdZ | CmdX | CmdC | CmdY | CtrlC| | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// Control -[APP] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, LGUI(KC_Q), LGUI(KC_W), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_TAB), - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LCTL(KC_C), 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_TRNS, - KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, - KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - 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_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 3: Control Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Pwr | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| Lclk |------| |------| Lft | Down | Up | Right| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | Rclk | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Shift| | | Home | End | - * ,------|------|------| |------+------+------. - * | | | LAtl | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// Control -[CNTL] = KEYMAP( - KC_PWR, 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_BTN1, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LSFT, KC_TRNS, - KC_LALT, - 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, - KC_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_END, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), - [2] = ACTION_LAYER_TAP_TOGGLE(APP), - [3] = ACTION_LAYER_TAP_TOGGLE(CNTL) // 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; - case 3: - ergodox_right_led_3_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/techtomas/readme.md b/keyboards/ergodox_ez/keymaps/techtomas/readme.md deleted file mode 100644 index 36e0591a8e..0000000000 --- a/keyboards/ergodox_ez/keymaps/techtomas/readme.md +++ /dev/null @@ -1,57 +0,0 @@ -# Techtomas Configuration - -## Base Layer - -The base layer is a merge of what I liked with the default layout and the ordinary layout. The thumb cluster is more like the Kinesis advantage and the top row of the cluster is convient for use on the mac. - -* The Caps Lock postion handles [Hyper/Esc](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) -* The Tab key toggles MEH. -* The top vertical mods on the left and right are [ and ]. -* The bottom vertical mods on the left and right are tab and shift+tab -* The HYPER and MEH key are made in the same location on the right side of the board as well. Using Keyboard Maestro for OS X makes one-handed shortcuts very easy. -* Layer switching is focused around the thumb clusters plus some additional locations for convience. - -## Symbol Layer -The symbol layer can be tap/toggled with the bottom right key and also toggled on the thumb clusters. - -The bottom two vertical mods are set to F14 and F15 which is the default for changing screen brightness on the mac - -## App Layer -The app layer is used to control media playback and also some application shortcuts (OS X Focused). -It can be toggled on the left board in the top left corner (tilde/grave) or using your pinky on the right side of the board using either ; or /. -There is one additional toggle on the right thumb cluster for quick access to play and mute key combos. - -### Current App shortcuts defined -* Q = CMD+Q -* W = CMD+W -* Z = CMD+Z -* X = CMD+X -* C = CMD+C -* V = CMD+V -* B = CTRL+C -* P = Print Screen - -## Control Layer -The control layer is meant to help easily navigate and select text. It can also be stacked ontop of the Symbol layer when needed. - -The right arrow key and End key toggle the control layer on the left board. There is also a tap toggle for the layer in the same position on the right side of the board. - -On the left board you have mouse control with left & right click in the location of the G and B keys. -On the right board you have vim-style arrow keys using hjkl - -The left thumb cluster moves shift and alt within easy reach while holding the toggle (end). So far I've found this convient to navigate and skip around text when using the hjkl arrow keys. I found that it was easy to get the alt key stuck on depending on what key you released first so I added the PREVENT_STUCK_MODIFIERS to the config.h to help with that. - -## Changelog - -* May 4th, 2016 (v1.2): - * Moved layer toggles around to match my habbits of typing - * Enabled Prevent Stuck Modifers in my config.h (L3 + Alt on cluster would get stuck) - * Changed media layer to be more like an app layer with some quick shortcuts (mac centric) - * Moved around the base layer arrow keys so mod keys were more accesible - -* Apr 29, 2016 (V1.1): - * Added F14 and F15 to symbol layer - * Added control layer toggle to A key. - -* Apr 28, 2016 (V1.0): - * Modified config based on the default layout plus inspiration from the ordinary layout diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c b/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c deleted file mode 100644 index ec6ceb96bc..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/keymap.c +++ /dev/null @@ -1,455 +0,0 @@ -#include "ergodox_ez.h" -#include "led.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "mousekey.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols layer -#define MDIA 2 // media layer -#define SPEC 3 // special layer - -#define LCaps 10 // left caps-shift key -#define LSymb 11 // left symbol-shift key -#define LMdia 12 // left media-shift key -#define LSpec 13 // left special-shift key -#define RCaps 14 // right caps-shift key -#define RSymb 15 // right symbol-shift key -#define RMdia 16 // right media-shift key -#define RSpec 17 // right special-shift key - -#define MUL 20 // mouse up left -#define MUR 21 // mouse up right -#define MDL 22 // mouse down left -#define MDR 23 // mouse down right - -/* - * teckinesis layout for ErgoDox (EZ) - * - * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com - * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com - * - * No rights reserved. This software is in the public domain. - * Credit me if you are friendly but if you're a jerk don't bother. - * - * Details: readme.md - * https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/******* Base Layer ******************************************************************************************************** - * - * ,------------------------------------------------------. ,------------------------------------------------------. - * | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special | - * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| - * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | - * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| - * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | - * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| - * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | - * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' - * | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | Home | End | | Left | Right| - * ,------|------|------| |------+------+------. - * | | | PgUp | | Up | | | - * |Backsp| Del |------| |------| Enter| Space| - * | | | PgDn | | Down | | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// left hand - F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC -,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC -,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G -,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) -,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI - ,KC_HOME,KC_END - ,KC_PGUP - ,KC_BSPC,KC_DEL ,KC_PGDN - // right hand - ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) - ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) - ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) - ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) - ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_DOWN ,KC_ENT ,KC_SPC - ), - -/******* Symbols Layer ***************************************************************************************************** - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | - * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| - * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| - * `-----------------------------------' `-------------------------------------' - * ,-------------. ,-------------. - * | Left | Right| | Home | End | - * ,------|------|------| |------+------+------. - * | | | Up | | PgUp | | | - * |Space |Enter |------| |------|BackSp| Del | - * | | | Down | | PgDn | | | - * `--------------------' `--------------------' - */ -[SYMB] = KEYMAP( -// left hand - KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC -,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) -,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_TAB -,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_SPC ,KC_ENT ,KC_DOWN - // right hand - ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS - ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS - ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS - ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS - ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) - ,KC_HOME ,KC_END - ,KC_PGUP - ,KC_PGDN ,KC_BSPC ,KC_DEL -), - -/******* Media Layer ******************************************************************************************************* - * - * ,---------------------------------------------------------------. ,---------------------------------------------------------------. - * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | - * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| - * | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | | - * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| - * | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | | - * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| - * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | - * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' - * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| - * `---------------------------------------------' `---------------------------------------------' - * ,-------------. ,-------------. - * | Stop |Refrsh| | Prev | Next | - * ,------|------|------| |------+------+------. - * |Brwser|Brwser|Search| |VolUp | | | - * |Back | Fwd |------| |------| Stop | Play-| - * | | | Home | |VolDn | | Pause| - * `--------------------' `--------------------' - */ -[MDIA] = KEYMAP( -// left hand - KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC -,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U -,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD -,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D -,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 - ,KC_WSTP ,KC_WREF - ,KC_WSCH - ,KC_WBAK ,KC_NO ,KC_WHOM - // right hand - ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS - ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS - ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS - ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS - ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL - ,KC_MPRV ,KC_MNXT - ,KC_VOLU - ,KC_VOLD ,KC_MSTP ,KC_MPLY -), - -/******* Special Layer ***************************************************************************************************** - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | Bspc | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | RShift | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[SPEC] = KEYMAP( -// left hand - KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_BSPC ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT - ,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[] = { - // the faux shift keys are implemented as macro taps - [LCaps] = ACTION_MACRO_TAP(LCaps) - ,[LSymb] = ACTION_MACRO_TAP(LSymb) - ,[LMdia] = ACTION_MACRO_TAP(LMdia) - ,[LSpec] = ACTION_MACRO_TAP(LSpec) - ,[RCaps] = ACTION_MACRO_TAP(RCaps) - ,[RSymb] = ACTION_MACRO_TAP(RSymb) - ,[RMdia] = ACTION_MACRO_TAP(RMdia) - ,[RSpec] = ACTION_MACRO_TAP(RSpec) -}; - -uint16_t caps_shift = 0; -uint16_t symb_shift = 0; -uint16_t mdia_shift = 0; - -bool symb_lock = false; -bool mdia_lock = false; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - // There are two shift keys for each layer so we increment a layer_shift var when one - // is pressed and decrement when one is released. If both are pressed at the same time - // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 - // only because sometimes rapid pressing led to irregular events; this way the states - // are self healing during use. - - case LCaps: // both caps-shift keys trigger Left Shift - case RCaps: // so they don't interfere with the magic combo - if (record->event.pressed && !record->tap.count) { - if(++caps_shift > 2) caps_shift = 2; - if(caps_shift == 2) { - register_code(KC_CAPS); - unregister_code(KC_CAPS); - } else if(caps_shift == 1) { - register_code(KC_LSFT); - } - } else { - if(--caps_shift < 0) caps_shift = 0; - if(caps_shift == 0) unregister_code(KC_LSFT); - } - break; - - case LSymb: - if (record->event.pressed) { - if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } - } else { - if(--symb_shift < 0) symb_shift = 0; - if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); - } - break; - - case LMdia: - if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { - register_code(KC_TAB); - } else { - if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } - } - } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { - unregister_code(KC_TAB); - } else { - if(--mdia_shift < 0) mdia_shift = 0; - if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); - } - } - break; - - case LSpec: - if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_EQL); - } else { - layer_on(SPEC); - } - } else { - if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_EQL); - } else { - layer_off(SPEC); - } - } - break; - - case RSymb: - if (record->event.pressed) { - if (record->tap.count && (!symb_shift) && (!symb_lock)) { - register_code(KC_QUOT); - } else { - if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } - } - } else { - if(record->tap.count && symb_shift == 0) { - unregister_code(KC_QUOT); - } else { - if(--symb_shift < 0) symb_shift = 0; - if((!symb_shift) && (!symb_lock)) layer_off(SYMB); - } - } - break; - - case RMdia: - if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { - register_code(KC_BSLS); - } else { - if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } - } - } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { - unregister_code(KC_BSLS); - } else { - if(--mdia_shift < 0) mdia_shift = 0; - if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); - } - } - break; - - case RSpec: - if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_MINS); - } else { - layer_on(SPEC); - } - } else { - if(record->tap.count && !record->tap.interrupted) { - unregister_code(KC_MINS); - } else { - layer_off(SPEC); - } - } - break; - - // mouse diagonals - - case MUL: // mouse up left - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - mousekey_send(); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - mousekey_send(); - } - break; - - case MUR: // mouse up right - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - mousekey_send(); - } - break; - - case MDL: // mouse down left - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - mousekey_send(); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - mousekey_send(); - } - break; - - case MDR: // mouse down right - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - mousekey_send(); - } - break; - - default: - // none - 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) { - // shift or caps lock turns on red light - if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<\n\n\n\nShift", - { - "c": "#cccccc" - }, - "Q", - { - "x": 14.5 - }, - "P", - { - "c": "#2277ff", - "f": 3, - "w": 1.5 - }, - "|\n\\\nMedia\n\n\n\n\nShift" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#cccccc" - }, - "D", - { - "x": 10.5 - }, - "K" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "S", - { - "x": 1 - }, - "F", - { - "x": 8.5 - }, - "J", - { - "x": 1 - }, - "L" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "G", - { - "x": 6.5 - }, - "H" - ], - [ - { - "y": -0.875, - "c": "#2277ff", - "w": 1.5 - }, - "Symbols\n\n\n\n\n\nShift", - { - "c": "#cccccc" - }, - "A", - { - "x": 14.5 - }, - ":\n;", - { - "c": "#2277ff", - "f": 3, - "w": 1.5 - }, - "\"\n'\nSymbols\n\n\n\n\nShift" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#54d6de", - "fa": [ - 0, - 0, - 4, - 1 - ], - "h": 1.5 - }, - "< Tab\n\n\nShift Tab", - { - "x": 4.5, - "h": 1.5 - }, - "Tab >\n\n\nTab" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#cccccc" - }, - "C", - { - "x": 10.5 - }, - "<\n," - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "X", - { - "x": 1 - }, - "V", - { - "x": 8.5 - }, - "M", - { - "x": 1 - }, - ">\n." - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "B", - { - "x": 6.5 - }, - "N" - ], - [ - { - "y": -0.875, - "c": "#2277ff", - "w": 1.5 - }, - "Capitals\n\n\n\n\n\nShift", - { - "c": "#cccccc" - }, - "Z", - { - "x": 14.5 - }, - "?\n/", - { - "c": "#2277ff", - "f": 3, - "w": 1.5 - }, - "\n\nCapitals\n\n\n\n\nShift" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#77aaff", - "fa": [ - 5, - 0, - 4, - 1 - ] - }, - "\n\n\nLAlt", - { - "x": 10.5 - }, - "\n\n\nRAlt" - ], - [ - { - "y": -0.875, - "x": 2.5, - "fa": [ - 5, - 1 - ] - }, - "\nHyper\n?\n/", - { - "x": 1, - "fa": [ - 5, - 1, - 0, - 1 - ] - }, - "\n\n\nSuper", - { - "x": 8.5 - }, - "\n\n\nSuper", - { - "x": 1, - "fa": [ - 0, - 0, - 0, - 1 - ] - }, - "{\n[\n\nHyper" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "Ctrl\n\n\nLCtrl", - { - "f2": 1 - }, - "\nMeh\n|\n\\", - { - "x": 14.5, - "fa": [ - 0, - 0, - 1, - 1 - ] - }, - "}\n]\n\nMeh", - "Ctrl\n\n\nRCtrl" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#54d6de" - }, - "Home", - "End" - ], - [ - { - "h": 2 - }, - "< Del\n\n\nBackspace", - { - "h": 2 - }, - "Del >\n\n\nDelete", - "Page\n\n\n\n\n\nUp" - ], - [ - { - "x": 2 - }, - "Page\n\n\n\n\n\nDown" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3 - }, - "Left", - "Right" - ], - [ - { - "x": -3 - }, - "Up", - { - "h": 2 - }, - "Enter", - { - "h": 2 - }, - "Space" - ], - [ - { - "x": -3 - }, - "Down" - ] -] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png deleted file mode 100644 index 7c4584e9f3..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-base.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json deleted file mode 100644 index 65fe394e8a..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.json +++ /dev/null @@ -1,436 +0,0 @@ -[ - { - "name": "teckinesis (MediaLayer)", - "author": "Will Wolff-Myren", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea" - }, - [ - { - "x": 3.5, - "c": "#99de2a" - }, - "F13", - { - "x": 10.5 - }, - "F18" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "F12", - { - "x": 1 - }, - "F14", - { - "x": 8.5 - }, - "F17", - { - "x": 1 - }, - "F19" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "F15", - { - "c": "#ff4444" - }, - "Esc", - { - "x": 4.5 - }, - "Esc", - { - "c": "#99de2a" - }, - "F16" - ], - [ - { - "y": -0.875, - "x": 1.5 - }, - "F11", - { - "x": 14.5 - }, - "F20" - ], - [ - { - "y": -0.995, - "c": "#000000", - "t": "#ff0000", - "w": 1.5 - }, - "Media\n\n\n\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "\n\nMedia\n\n\n\n\nShift" - ], - [ - { - "y": -0.3799999999999999, - "x": 3.5, - "c": "#ff8500", - "t": "#000000" - }, - "Mouse\n\n\n\n\n\nUp", - { - "x": 10.5 - }, - "Cursor\n\n\n\n\n\nUp" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "Mouse\n\n\n\n\n\nUpLeft", - { - "x": 1 - }, - "Mouse\n\n\n\n\n\nUpRgt", - { - "x": 8.5, - "c": "#ffb063" - }, - "Home", - { - "x": 1 - }, - "Page\n\n\n\n\n\nUp" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#e6e067" - }, - "Vol\n\n\n\n\n\nUp", - { - "c": "#ffb063", - "h": 1.5 - }, - "Scroll\n\n\n\n\n\nUp", - { - "x": 4.5, - "h": 1.5 - }, - "Scroll\n\n\n\n\n\nUp", - { - "c": "#e6e067" - }, - "Print\n\n\n\n\n\nScreen" - ], - [ - { - "y": -0.875, - "x": 1.5, - "c": "#737373", - "a": 7 - }, - "", - { - "x": 14.5 - }, - "" - ], - [ - { - "y": -0.9950000000000001, - "c": "#2277ff", - "a": 4, - "w": 1.5 - }, - "Symbols\n\n\n\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "\n\nSymbols\n\n\n\n\nShift" - ], - [ - { - "y": -0.3799999999999999, - "x": 3.5, - "c": "#ff8500" - }, - "Mouse\n\n\n\n\n\nDown", - { - "x": 10.5 - }, - "Cursor\n\n\n\n\n\nDown" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "Mouse\n\n\n\n\n\nLeft", - { - "x": 1 - }, - "Mouse\n\n\n\n\n\nRight", - { - "x": 8.5 - }, - "Cursor\n\n\n\n\n\nLeft", - { - "x": 1 - }, - "Cursor\n\n\n\n\n\nRight" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#e6e067" - }, - "Vol\n\n\n\n\n\nDown", - { - "x": 6.5 - }, - "Num\n\n\n\n\n\nLock" - ], - [ - { - "y": -0.875, - "x": 1.5, - "c": "#737373", - "a": 7 - }, - "", - { - "x": 14.5 - }, - "" - ], - [ - { - "y": -0.9950000000000001, - "c": "#2277ff", - "a": 4, - "w": 1.5 - }, - "Capitals\n\n\n\n\n\nShift", - { - "x": 16.5, - "w": 1.5 - }, - "\n\nCapitals\n\n\n\n\nShift" - ], - [ - { - "y": -0.6299999999999999, - "x": 6.5, - "c": "#ffb063", - "h": 1.5 - }, - "Scroll\n\n\n\n\n\nDown", - { - "x": 4.5, - "h": 1.5 - }, - "Scroll\n\n\n\n\n\nDown" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#ff8500" - }, - "Mouse\n\n\n\n\n\nDown", - { - "x": 10.5 - }, - "Cursor\n\n\n\n\n\nDown" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "Mouse\n\n\n\n\n\nDnLeft", - { - "x": 1 - }, - "Mouse\n\n\n\n\n\nDnRgt", - { - "x": 8.5, - "c": "#ffb063" - }, - "End", - { - "x": 1 - }, - "Page\n\n\n\n\n\nDown" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#e6e067" - }, - "Mute", - { - "x": 6.5, - "c": "#737373", - "a": 7 - }, - "" - ], - [ - { - "y": -0.875, - "x": 1.5 - }, - "", - { - "x": 14.5 - }, - "" - ], - [ - { - "y": -0.9950000000000001, - "c": "#2277ff", - "a": 4, - "w": 1.5 - }, - "Ctrl", - { - "x": 16.5, - "w": 1.5 - }, - "Ctrl" - ], - [ - { - "y": -0.3799999999999999, - "x": 3.5, - "c": "#ff8500" - }, - "Middle\n\n\n\n\n\nClick", - { - "x": 10.5, - "c": "#ffb063", - "fa": [ - 0, - 0, - 0, - 1 - ] - }, - "Delete\n\n\nOption" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#ff8500" - }, - "Left\n\n\n\n\n\nClick", - { - "x": 1 - }, - "Right\n\n\n\n\n\nClick", - { - "x": 8.5, - "c": "#ffb063" - }, - "Insert\n\n\nCmd", - { - "x": 1, - "c": "#77aaff" - }, - "Hyper" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "Alt\n\n\nLAlt", - "Meh", - { - "x": 14.5 - }, - "Meh", - "Alt\n\n\nRAlt" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#ccbb00" - }, - "Stop\n\n\nBrowser", - "Reload\n\n\nBrowser" - ], - [ - { - "h": 2 - }, - "< Web\n\n\nBrowser", - { - "h": 2 - }, - "Web >\n\n\nBrowser", - "Search\n\n\nBrowser" - ], - [ - { - "x": 2 - }, - "Home\n\n\nBrowser" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3 - }, - "Prev\n\n\nAudio\n\n\nTrack", - "Next\n\n\nAudio\n\n\nTrack" - ], - [ - { - "x": -3, - "c": "#e6e067" - }, - "Vol\n\n\n\n\n\nUp", - { - "c": "#ccbb00", - "h": 2 - }, - "Stop\n\n\nAudio", - { - "h": 2 - }, - "Play\n\n\nAudio\n\n\nPause" - ], - [ - { - "x": -3, - "c": "#e6e067" - }, - "Vol\n\n\n\n\n\nDown" - ] -] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png deleted file mode 100644 index cc51605f92..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-media.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json deleted file mode 100644 index 439d0128ea..0000000000 --- a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.json +++ /dev/null @@ -1,422 +0,0 @@ -[ - { - "name": "teckinesis (Symbol Layer)", - "author": "Will Wolff-Myren", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea" - }, - [ - { - "x": 3.5, - "c": "#99de2a" - }, - "F3", - { - "x": 10.5 - }, - "F8" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "F2", - { - "x": 1 - }, - "F4", - { - "x": 8.5 - }, - "F7", - { - "x": 1 - }, - "F9" - ], - [ - { - "y": -0.875, - "x": 5.5 - }, - "F5", - { - "c": "#ff4444" - }, - "Esc", - { - "x": 4.5, - "c": "#bbddbb" - }, - "_\n\n\n\n\n\n-", - { - "c": "#99de2a" - }, - "F6" - ], - [ - { - "y": -0.875, - "c": "#2277ff", - "w": 1.5 - }, - "Special\n\n\n\n\n\nShift", - { - "c": "#99de2a" - }, - "F1", - { - "x": 14.5 - }, - "F10", - { - "c": "#2277ff", - "w": 1.5 - }, - "\n\nSpecial\n\n\n\n\nShift" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#bbddbb" - }, - "{", - { - "x": 10.5, - "c": "#89b087" - }, - "8" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bbddbb" - }, - "@", - { - "x": 1 - }, - "}", - { - "x": 8.5, - "c": "#89b087" - }, - "7", - { - "x": 1 - }, - "9" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#bbddbb" - }, - "&", - { - "h": 1.5 - }, - "<", - { - "x": 4.5, - "h": 1.5 - }, - ">", - "|" - ], - [ - { - "y": -0.875, - "c": "#2277ff", - "w": 1.5 - }, - "Media\n\n\n\n\n\nShift", - { - "c": "#bbddbb" - }, - "!", - { - "x": 14.5, - "c": "#89b087" - }, - "/", - { - "c": "#2277ff", - "w": 1.5 - }, - "\n\nMedia\n\n\n\n\nShift" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#bbddbb" - }, - "(", - { - "x": 10.5, - "c": "#89b087" - }, - "5" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bbddbb" - }, - "$", - { - "x": 1 - }, - ")", - { - "x": 8.5, - "c": "#89b087" - }, - "4", - { - "x": 1 - }, - "6" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#bbddbb" - }, - "`", - { - "x": 6.5 - }, - "/" - ], - [ - { - "y": -0.875, - "c": "#000000", - "t": "#ff0000", - "w": 1.5 - }, - "Symbols\n\n\n\n\n\nShift", - { - "c": "#bbddbb", - "t": "#000000" - }, - "#", - { - "x": 14.5, - "c": "#89b087" - }, - "*", - { - "c": "#000000", - "t": "#ff0000", - "w": 1.5 - }, - "\n\nSymbols\n\n\n\n\nShift" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#54d6de", - "t": "#000000", - "fa": [ - 0, - 0, - 0, - 1 - ], - "h": 1.5 - }, - "Tab >\n\n\nTab", - { - "x": 4.5, - "h": 1.5 - }, - "< Tab\n\n\nShift Tab" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#bbddbb" - }, - "[", - { - "x": 10.5, - "c": "#89b087" - }, - "2" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bbddbb" - }, - "^", - { - "x": 1 - }, - "]", - { - "x": 8.5, - "c": "#89b087" - }, - "1", - { - "x": 1 - }, - "3" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#bbddbb" - }, - "~", - { - "x": 6.5 - }, - "\\" - ], - [ - { - "y": -0.875, - "c": "#2277ff", - "w": 1.5 - }, - "Capitals\n\n\n\n\n\nShift", - { - "c": "#bbddbb" - }, - "%", - { - "x": 14.5, - "c": "#89b087" - }, - "-", - { - "c": "#2277ff", - "w": 1.5 - }, - "\n\nCapitals\n\n\n\n\nShift" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#77aaff" - }, - "\n\n\nLAlt", - { - "x": 10.5, - "c": "#89b087" - }, - ".\n\n\nOption" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#77aaff" - }, - "Hyper", - { - "x": 1 - }, - "\n\n\nSuper", - { - "x": 8.5, - "c": "#89b087" - }, - "0\n\n\nCmd", - { - "x": 1 - }, - "=\n\n\nHyper" - ], - [ - { - "y": -0.75, - "x": 0.5, - "c": "#77aaff" - }, - "Ctrl\n\n\nLCtrl", - "Meh", - { - "x": 14.5, - "c": "#89b087" - }, - "+\n\n\nMeh", - "Enter\n\n\nCtrl" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#54d6de" - }, - "Left", - "Right" - ], - [ - { - "h": 2 - }, - "Space", - { - "h": 2 - }, - "Enter", - "Up" - ], - [ - { - "x": 2 - }, - "Down" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3 - }, - "Home", - "End" - ], - [ - { - "x": -3 - }, - "Page\n\n\n\n\n\nUp", - { - "h": 2 - }, - "< Del\n\n\nBackspace", - { - "h": 2 - }, - "Del >\n\n\nDelete" - ], - [ - { - "x": -3 - }, - "Page\n\n\n\n\n\nDown" - ] -] \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png deleted file mode 100644 index 7ca86cf47d..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/teckinesis/teckinesis-symbol.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md b/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md deleted file mode 100644 index ab02fac2ca..0000000000 --- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Based on Default OSX -I'm a vim and OSX user - -- Moved Hyper and Meh up, replaced with CMD - - Because I'm used to having symmetrical CMD keys on both hands -- Changed left delete to Tab to match OSX -- Changed left Backspace to CTRL/ESC for vim -- Changed top left and top right arrow to `CMD+{` and `CMD+}` - - Useful for switching tabs in Safari, Xcode, etc. -- Remove the Ctrl from Z and / -- Remove CMD from right quote -- Changed right Alt to Delete - diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex b/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex deleted file mode 100644 index a8cf4527a5..0000000000 --- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex +++ /dev/null @@ -1,1137 +0,0 @@ -:100000000C947B020C94C2020C94C2020C94C202A7 -:100010000C94C2020C94C2020C94C2020C94C20250 -:100020000C94C2020C94C2020C94F70D0C94C90EED -:100030000C94C2020C94C2020C94C2020C94C20230 -:100040000C94C2020C9486210C94C2020C94C2023D -:100050000C94C2020C94681C0C94C2020C94C20250 -:100060000C94C2020C94C2020C94C2020C94C20200 -:100070000C94C2020C94C2020C94C2020C94C202F0 -:100080000C94C2020C94C2020C94C2020C94C202E0 -:100090000C94C2020C94C2020C94C2020C94C202D0 -:1000A0000C94C2020C94C2020C94C202360F580F78 -:1000B0004610580F46109D0FC00F461015102810FF -:1000C000F712F712261326135C137C13AD14AD142C -:1000D0008713AD14371437149E14AD14AD14A71440 -:1000E0004414441444144414441444144414441450 -:1000F0004414441444144414441444144414441440 -:10010000561463146A1471147B140000F0A12E00BD -:100110002B002961E100354100001E00140004009D -:100120001D0034004D001F001A0016001B00E104E2 -:100130002A00200008000700060050002C002100C3 -:100140001500090019004F004A00220017000A009C -:100150000500000065642F0A006F0000E300000046 -:10016000E300300A00670000E30000004C002300B9 -:100170001C000B00110000002961240018000D0074 -:10018000100052004B0025000C000E0036005100FC -:100190002800260012000F0037002F002B00270038 -:1001A00013003342380030004E002D00310034007F -:1001B000E500C10000000100010001000100010094 -:1001C00000003A001E0220022202010001003B0052 -:1001D0001F0221022302010001003C002F0226021F -:1001E0002F00010001003D00300227023000010015 -:1001F00001003E003102350035020000010001001F -:1002000001000000010000000100010001000000E9 -:100210000100000001003F005200510024020000D4 -:1002200001004000240021001E00010001004100E7 -:10023000250022001F003700010042002600230095 -:10024000200027000100430025022E0231002E006D -:100250000100440045000100010001000000010010 -:100260000100010001000100000001000100010087 -:1002700001000100010001000100F2000100010085 -:1002800001000100F000F1000100F4000100010094 -:100290000100F3000100F500010001000100010070 -:1002A0000100000001000100010000000100000049 -:1002B0000100010001000000010000000100010038 -:1002C0000100010001000000010001000100010027 -:1002D0000100A9000100010001000100AC00AA001A -:1002E000B600010001000100AB00A8000100010000 -:1002F0000100010001000100010001000100AE0049 -:1003000001000100000016034500720067006F0045 -:1003100044006F007800200045005A0000001603DA -:100320004500720067006F0044006F0078002000F5 -:1003300045005A0000000403090409026D0004018D -:1003400000A0FA09040000010301010009211101C4 -:1003500000012240000705810308000A090401008A -:100360000103010200092111010001224D000705CE -:10037000820308000A0904020001030000000921A9 -:10038000110100012236000705830308000A090451 -:1003900003000103000000092111010001223900BE -:1003A000070584031000011201100100000008ED90 -:1003B000FE071301000102000105010906A1010564 -:1003C0000719E029E7150025019508750181020547 -:1003D000081901290595057501910295017503918B -:1003E0000105071900297715002501957875018108 -:1003F00002C005010980A101850216010026B7008F -:100400001A01002AB700751095018100C0050C097A -:1004100001A1018503160100269C021A01002A9CF5 -:1004200002751095018100C005010902A1010901B1 -:10043000A10005091901290515002501950575017A -:10044000810295017503810105010930093115818A -:10045000257F95027508810609381581257F95014C -:1004600075088106050C0A38021581257F950175EE -:10047000088106C0C005010906A101050719E02988 -:10048000E715002501950875018102950175088120 -:100490000105081901290595057501910295017558 -:1004A0000391010507190029FF150026FF00950695 -:1004B00075088100C000000000000000000000007E -:1004C000010204060A0F17202C3A4A5D71879DB37A -:1004D000C7DAE9F5FCFFFCF5E9DAC7B39D87715D82 -:1004E0004A3A2C20170F0A060402010000000000FF -:1004F00000000000000011241FBECFEFDAE0DEBFD5 -:10050000CDBF04B603FE27C0809101029091020284 -:10051000A0910302B09104028730904BA740B04BEA -:10052000D1F4109201021092020210920302109272 -:10053000040214BE84B7877F84BF0FB6F894A895D1 -:1005400080916000886180936000109260000FBE0F -:10055000E0E0FFE3099511E0A0E0B1E0E6EBF6E4AE -:1005600002C005900D92A433B107D9F712E0A4E3BD -:10057000B1E001C01D92A130B107E1F70E943C0B30 -:100580000C9459230C9400001092B9008AE08093D7 -:10059000B800089594EA9093BC009091BC0097FF36 -:1005A000FCCF9091B900987F983021F0903111F0F4 -:1005B00081E008958093BB0084E88093BC00809123 -:1005C000BC0087FFFCCF8091B900887F883111F093 -:1005D000803471F780E0089584E98093BC008091B5 -:1005E000BC0084FDFCCF08958093BB0084E8809319 -:1005F000BC008091BC0087FFFCCF9091B900987F30 -:1006000081E0983209F480E0089584E88093BC008A -:100610008091BC0087FFFCCF8091BB00089580B320 -:100620008C7080BB81B3836F81BB08958091010181 -:10063000811115C080E40E94CA02809301018111DA -:100640000CC082E10E94F40280930101811105C077 -:100650008FEF0E94F402809301010E94EC0284B1AA -:10066000807F84B985B1807F85B98AB1837F8AB95B -:100670008BB1837F8BB93E98469808950E94E00421 -:10068000809301010E9416030E940F03A5E3B1E0CD -:10069000E3E4F1E08EE08E0F11921D928E13FCCFF9 -:1006A0000C94CA040E94E004809301010E94160386 -:1006B0000E940F03A5E3B1E0E3E4F1E08EE08E0FCA -:1006C00011921D928E13FCCF0895BF92CF92DF92AC -:1006D000EF92FF920F931F93CF93DF9380910101CD -:1006E000882379F0809134018F5F809334018111E8 -:1006F00008C00E94E00480930101811102C00E94A1 -:10070000720405E311E0C0E0D0E0DD24D39482E080 -:10071000C82EEE24E394F12CC730D10500F580916A -:100720000101811164C080E40E94CA02809301012A -:10073000811112C082E10E94F402809301018111B3 -:100740000BC0C7010C2E01C0880F0A94EAF78095F0 -:100750000E94F402809301010E94EC0248C0CA305A -:10076000A1F028F4C83059F0C93061F005C0CC3090 -:1007700089F070F0CD3089F0209A289810C0219A25 -:1007800029980DC0229A2A980AC0239A2B9807C04C -:10079000529A01C0539A5B9802C03E9A469890EADA -:1007A0009A95F1F79FB1799902C082E001C080E08B -:1007B00091709D25982B7C9902C084E001C080E057 -:1007C000892B7D9902C038E001C030E0832B7E99EF -:1007D00002C020E101C020E0822B9FB19095991FBB -:1007E0009927991F9295990F907E892B0FC0809120 -:1007F0000101811149C080E40E94CA028093010175 -:10080000882379F1B12C0E94EC028B2DF8019081A4 -:10081000981719F08083C09200010E941603219658 -:100820000F5F1F4FCE30D10509F076CF80910001C8 -:10083000882361F1815080930001882339F08FE98A -:100840009FE00197F1F700C0000020C0A3E4B1E0F1 -:10085000E5E3F1E0CF01825F91919D938E13FCCF90 -:1008600015C083E10E94F402809301018111CACF77 -:1008700081E40E94CA02809301018111C3CF0E94CA -:100880000503B82EB094BFCF80E0C0CF0E947004A3 -:1008900081E0DF91CF911F910F91FF90EF90DF905A -:1008A000CF90BF900895E82FF0E0ED5BFE4F808180 -:1008B000089508950F931F93CF93DF93C3E4D1E07E -:1008C00010E00C2F025F899190E00E948C1B180FA2 -:1008D0000C13F9CF812FDF91CF911F910F910895C4 -:1008E0000C94400556985E9825982D9826982E9839 -:1008F00027982F988FEF90E090938900809388003D -:1009000090938B0080938A0090938D0080938C004D -:10091000259A2D9A2FEF80E792E021508040904059 -:10092000E1F700C00000269A2E9A2FEF80E792E0B0 -:10093000215080409040E1F700C00000279A2F9A94 -:100940002FEF80E792E0215080409040E1F700C017 -:10095000000025982D982FEF80E792E021508040ED -:100960009040E1F700C0000026982E982FEF80E716 -:1009700092E0215080409040E1F700C000002798AD -:100980002F9856985E9825982D9826982E982798F7 -:100990002F98089589EA8093800089E080938100F0 -:1009A00024982C983F988AB18F748AB96E98479A88 -:1009B0008BB1806B8BB9769A0E9472040C943F05C0 -:1009C00080E2809301018091510181110EC00E944B -:1009D000C40281E0809351012FEF83ED90E3215019 -:1009E00080409040E1F700C0000080E40E94CA020D -:1009F0008093010181112EC00E94F40280930101B5 -:100A0000811128C00E94F40280930101811122C04B -:100A10008FE30E94F4028093010181111BC00E94A8 -:100A2000EC0280E40E94CA0280930101811112C08D -:100A30008CE00E94F4028093010181110BC00E949E -:100A4000F40280930101811105C08FE30E94F4023A -:100A5000809301010E94EC028091010108956111CF -:100A60000BC0FC018281882321F085EE0E949B113E -:100A700003C085EE0E94631280E090E0089508951F -:100A80006091C2017091C3018091C4019091C50130 -:100A90000E94981B56985E9825982D9826982E9817 -:100AA00027982F98813019F0823021F00895259AE7 -:100AB0002D9A0895269A2E9A089581E0089581E04E -:100AC00008950C945F050895282F882339F090E04D -:100AD0002A3010F44D9608950697089587E290E025 -:100AE0000895AF92BF92DF92EF92FF920F931F9300 -:100AF000CF93DF938C01FC01C081D181CE010E9494 -:100B0000111ABE010E94E908EC01B8010E946105BA -:100B1000882309F4D1C1F8018281882309F4C6C071 -:100B200080916201811127C0C431F0E7DF0709F02D -:100B3000BDC10E94630581E0809362010E94321C66 -:100B400090936101809360011092550110925701BA -:100B500010925601109259011092580110925B01A7 -:100B600010925A0110925D0110925C0110925F0187 -:100B700010925E01A1C180916001909161010E947B -:100B80003E1C883C910570F480915501E82FF0E0FF -:100B9000EE0FFF1FEA5AFE4FD183C0838F5F809311 -:100BA00055018AC1C13020E8D20708F451C0F801CC -:100BB0008281882309F47EC05E01E894B7F88091B1 -:100BC0005401813079F050F08230C1F482EE0E94FD -:100BD0009B1187E50E949B1187E50EC082EE0E9463 -:100BE0009B110CC080EE0E949B1181EE0E949B1114 -:100BF00088E10E949B1188E10E9463128CE0E82E3C -:100C0000F12CC5010E2C02C0969587950A94E2F747 -:100C10008F700E946405D82E0E949B118D2D0E941A -:100C20006312F4E0EF1AF1082CEFE2162FEFF20650 -:100C300041F780915401813029F010F0823041F465 -:100C400082EE04C080EE0E94631281EE0E94631265 -:100C5000C43180E7D80768F4C23090E7D90708F0BC -:100C600046C0C115E0E7DE0771F0C130D047A1F101 -:100C70000CC1C33320E7D20709F4D8C0C433D0472E -:100C800009F4EBC002C1F8018281882309F402C192 -:100C90000E941815FFEF24E38CE0F15020408040C3 -:100CA000E1F700C000000E948D1C06C1C13080E841 -:100CB000D80770F2C43120E7D20708F0B3C0C230C1 -:100CC00080E7D807A0F4C11590E7D90709F4E2C07E -:100CD000C130D04709F0D9C0F8018281882309F4D6 -:100CE000D9C08091DF0181608093DF01E5C0F80108 -:100CF0008281882309F4CEC00E94E71C811102C0C2 -:100D00000E94CD1C0E94FA1C90E09093F301809306 -:100D1000F201C230F0E7DF0721F48091F201816037 -:100D20007AC0C33020E7D20721F48091F2018260BB -:100D300072C0C43080E7D80721F48091F20184604A -:100D40006AC0C53090E7D90719F48091F20127C035 -:100D5000C630E0E7DE0721F48091F20180615BC0DC -:100D6000C730F0E7DF0721F48091F201806253C0C1 -:100D7000C83020E7D20721F48091F20180644BC093 -:100D8000C93080E7D80721F48091F201806843C020 -:100D9000CA3090E7D90729F48091F2018460886015 -:100DA0003AC0CB30E0E7DE0721F48091F2018E7F7C -:100DB00032C0CC30F0E7DF0721F48091F2018D7F63 -:100DC0002AC0CD3020E7D20721F48091F2018B7F39 -:100DD00022C0CE3080E7D80719F48091F2011AC002 -:100DE0008091F201CF3090E7D90711F48F7E13C0C4 -:100DF000C031E0E7DE0711F48F7D0DC0C131F0E7AF -:100E0000DF0711F48F7B07C0C231D04711F48F7711 -:100E100002C08B7F877F8093F2018091F2010E9454 -:100E2000FE1C4AC0C333F0E7DF07A1F4F80182815A -:100E3000882321F01092520182E016C08091520165 -:100E4000811106C086E20E949B1186E20E94631215 -:100E500082E018C0C433D047C1F4F80182818823EE -:100E600031F01092530180E20E94B21225C08091AD -:100E70005301811106C087E20E949B1187E20E9404 -:100E8000631280E20E94B91217C081E08093520180 -:100E900080935301C801DF91CF911F910F91FF9073 -:100EA000EF90DF90BF90AF900C945D05C130F0E8FB -:100EB000DF0708F081CECCCE80E0DF91CF911F918B -:100EC0000F91FF90EF90DF90BF90AF90089526E0D4 -:100ED000729FF001112444E5849FE00DF11D11245F -:100EE000E60FF11DEE0FFF1FE25FFE4F859194911B -:100EF0000E94FB08811560E49607B0F5811570E348 -:100F0000970708F0DEC0803E9105D8F4803C91053B -:100F100008F06CC0883A910578F4853A910508F09C -:100F20006BC08130910509F452C108F40FC18430BF -:100F3000910508F04CC10AC18B3B910508F467C0CC -:100F400005C18F3F910509F048F4803F910508F0F5 -:100F5000ADC0883E910508F43AC1F8C0811520E281 -:100F6000920708F0A5C00895811543E5940790F411 -:100F7000811562E5960708F0C8C0811571E59707ED -:100F800008F0BEC0811520E5920708F09DC09F7053 -:100F9000906A0895811545E59407D8F4811564E5B4 -:100FA000960708F0C8C0482F4695469570E2479FBF -:100FB000A00111248370992721E030E0B90102C01B -:100FC000660F771F8A95E2F7CB01842B952B9A68E1 -:100FD0000895811576E5970708F4B2C09C01305654 -:100FE0002115304108F0B2C09F70AEC0FC01EE0F79 -:100FF000FF1FE657F04062C0853A910509F4A9C089 -:10100000863A910509F0A8C082E890E40895883AEC -:10101000910509F4A4C0893A910509F4A3C08A3A5C -:10102000910509F4A2C08B3A910509F4A1C08C3A4C -:10103000910509F4A0C08D3A910509F49FC0803B49 -:10104000910509F49EC08E3A910509F49DC08F3A2E -:10105000910509F49CC0813B910509F49BC0823B3A -:10106000910509F49AC0833B910509F499C0843B2A -:10107000910509F498C0853B910509F497C0863B1A -:10108000910509F496C0873B910509F495C0883B0A -:10109000910509F494C0893B910509F493C08A3BFA -:1010A000910509F492C080E094E408959065089554 -:1010B000FC01FF70EE0FFF1FE65FFE4F85919491DC -:1010C00008959927906C0895482F437021E030E0EF -:1010D00002C0220F331F4A95E2F73C68AC0164E07E -:1010E000569547956A95E1F74370342B8F70869536 -:1010F000869560E2869FC0011124822B932B089570 -:10110000982F8827816F906A0895482F46954695B5 -:1011100070E2479FA00111248370992721E030E0FD -:10112000B90102C0660F771F8A95E2F7CB01842BC5 -:10113000952B9C680895982F8827846F906A08954E -:101140008F719927982F88279062089580E090E00A -:10115000089581E890E4089583E890E4089582EE8C -:1011600094E4089589EE94E408958AEE94E4089551 -:1011700085EB94E4089586EB94E4089587EB94E47A -:1011800008958CEC94E408958DEC94E4089583E83C -:1011900095E408958AE895E4089582E995E4089530 -:1011A00084E995E4089581E296E4089583E296E463 -:1011B000089584E296E4089585E296E4089586E22F -:1011C00096E4089587E296E408958AE296E4089505 -:1011D000089596E0799FF001112494E5899FE00D30 -:1011E000F11D1124E60FF11DEE0FFF1FE25FFE4F10 -:1011F0008591949108958238910549F1B0F4813335 -:10120000910509F458C048F48932910509F44EC09B -:101210008A32910509F454C008958533910509F483 -:1012200040C08933910599F00895833E910529F1D5 -:1012300038F4803E910591F0823E9105A1F0089529 -:10124000863E9105F9F0873E910531F10895209190 -:10125000F20120FD3AC021FD38C008958091F201CD -:1012600080FD35C032C08091F20182FF32C0809192 -:10127000F20184FD30C083EE39C08091F20182FD1D -:1012800028C0F5CF8091F20183FF27C08091F20141 -:1012900084FD21C087EE2AC08091F20183FD1DC02C -:1012A000F5CF8091F20185FD1AC01BC08091F2013B -:1012B00085FD17C014C08091F20186FD14C015C0D1 -:1012C0008091F20186FD11C00EC080EE0FC089E34F -:1012D0000DC082EE0BC080E009C086EE07C089E237 -:1012E00005C085E303C08AE201C081E390E0089570 -:1012F00008950C947809809173010895CF93DF933A -:1013000000D01F92CDB7DEB79C018091F8018430E8 -:1013100019F593E099833B832A839093E9008FEF3B -:101320009091E800815095FD06C095ED9A95F1F7F2 -:1013300000008111F5CF8091E80085FF0DC040E0ED -:1013400050E063E070E0CE0101960E94E70B8091CF -:10135000E8008E778093E8000F900F900F90DF9158 -:10136000CF910895CF93DF9300D01F92CDB7DEB712 -:101370002091F801243021F522E029839B838A8380 -:1013800083E08093E9008FEF9091E800815095FD14 -:1013900006C095ED9A95F1F700008111F5CF809187 -:1013A000E80085FF0DC040E050E063E070E0CE0152 -:1013B00001960E94E70B8091E8008E778093E80009 -:1013C0000F900F900F90DF91CF9108952091F80129 -:1013D0002430F1F422E02093E9002FEF3091E8006F -:1013E000215035FD06C035ED3A95F1F70000211189 -:1013F000F5CF2091E80025FF0BC040E050E065E00C -:1014000070E00E94E70B8091E8008E778093E800FF -:101410000895CF93DF93EC019091F801943009F097 -:1014200046C080910C018823D9F080910D0188235A -:10143000B9F09093E9008FEF9091E800815095FD0D -:1014400006C095E19A95F1F700008111F5CF8091E2 -:10145000E80085FF2CC040E050E060E170E017C07C -:1014600081E08093E9008FEF9091E800815095FD35 -:1014700006C095ED9A95F1F700008111F5CF8091A6 -:10148000E80085FF14C040E050E068E070E0CE0165 -:101490000E94E70B8091E8008E778093E80080E15E -:1014A000FE01A3E6B1E001900D928A95E1F7DF918C -:1014B000CF9108958091F701811109C00E947C0DA0 -:1014C0000E94D90D8091E20084608093E20008952B -:1014D0001092F701089508950C9473210E94231C23 -:1014E0000E9479210E947F100C94790942E061ECFE -:1014F00081E00E94F60C42E061EC82E00E94F60C72 -:1015000042E061EC83E00E94F60C42E161EC84E091 -:101510000C94F60C8091FA01833009F455C030F434 -:10152000813071F0823009F48EC008958A3009F458 -:101530007AC08B3009F460C0893009F09CC020C0AB -:101540008091F901813A09F096C08091E800877F87 -:101550008093E8008091FD019091FE01892B21F498 -:1015600060E183E691E003C060E080E090E070E03D -:101570000E94320C8091E8008B778093E8000895F8 -:101580008091F901813209F076C08091FD0190913E -:10159000FE01009719F0039709F06DC08091E800F3 -:1015A000877F8093E8008091E80082FD05C08091EC -:1015B000F8018111F8CF5FC08091F1008093730131 -:1015C0008091E8008B7753C08091F901813A09F04E -:1015D00052C08091FD019091FE01892B09F04BC012 -:1015E0008091E800877F8093E8008091E80080FF89 -:1015F000FCCF80910C0136C08091F9018132D9F580 -:101600008091FD019091FE01892BA9F58091E80060 -:10161000877F8093E8000E942B0D8091FB018093CF -:101620000C010C9418158091F901813221F58091FB -:10163000E800877F8093E8000E942B0D8091FC01D9 -:101640008093740108958091F901813AA1F4809109 -:10165000E800877F8093E8008091E80080FFFCCF5E -:10166000809174018093F1008091E8008E778093DF -:10167000E8000C942B0D089584B7877F84BF0FB6C4 -:10168000F894A89580916000886180936000109222 -:1016900060000FBE80E880936100109261000E949C -:1016A000CE100E947C0D0E94D90D8091E2008460D2 -:1016B0008093E20078940E945F100E94D01082E034 -:1016C00091E00E947A100E9461218091F80185309A -:1016D00069F40E94E81B8091F6018823B1F30E940F -:1016E000151C882391F30E94D10BEFCF0E94D610D6 -:1016F000ECCF292F332723303105C9F064F4213092 -:10170000310581F02230310509F043C08DE690E0CB -:101710002AE333E042C021323105F1F022323105B3 -:1017200041F137C082E190E027EA33E036C09927E3 -:101730008130910541F08230910541F0892B49F5C6 -:10174000E6E3F3E005C0EEE1F3E002C0E6E0F3E03B -:10175000849190E09F0121C06430D8F4E62FF0E03E -:10176000EE0FFF1FEE5DFE4F2081318189E090E09A -:1017700014C0643070F470E0FB01EE0FFF1FE65EF2 -:10178000FE4F20813181FB01EA5EFE4F808190E0B7 -:1017900004C080E090E020E030E0FA013183208353 -:1017A000089580E189BD82E189BD09B400FEFDCFC5 -:1017B0008091D8008F7D8093D8008091E000826076 -:1017C0008093E0008091E00081FDFCCF0895CF92EE -:1017D000DF92EF92FF920F931F93CF93DF93EC0171 -:1017E0008B016A010E944A0D811133C0C114D104DA -:1017F00039F0F60180819181081B190BC80FD91FA0 -:10180000E12CF12C0115110519F18091E80085FDFD -:1018100016C08091E8008E778093E800C114D1044F -:1018200049F0F60180819181E80EF91EF182E08293 -:1018300085E00FC00E944A0D882321F30AC08991D8 -:101840008093F10001501109FFEFEF1AFF0ADACF80 -:1018500080E0DF91CF911F910F91FF90EF90DF908B -:10186000CF9008952091FF0130910002261737078D -:1018700048F06115710539F42091E8002E77209326 -:10188000E80001C0B90140E061157105A9F120919E -:10189000F801222309F443C0253009F442C0209105 -:1018A000E80023FD40C02091E80022FD32C02091D5 -:1018B000E80020FFE9CF4091F3002091F20030E0F2 -:1018C000342BFC01CF016115710559F02830310529 -:1018D00040F481918093F100615071092F5F3F4F77 -:1018E000F1CF41E02830310509F040E02091E800D7 -:1018F0002E772093E800C8CF4111C9CF0AC080914C -:10190000F801882361F0853061F08091E80083FD63 -:101910000AC08091E80082FFF2CF80E0089582E063 -:10192000089583E0089581E008952091FF013091AA -:1019300000022617370748F06115710539F4209128 -:10194000E8002E772093E80001C0B901FC0120E0F7 -:101950006115710591F18091F801882309F440C067 -:10196000853009F43FC08091E80083FD3DC080913F -:10197000E80082FD2FC08091E80080FFE9CF209130 -:10198000F3008091F20090E0922B6115710559F0FF -:101990008830910540F424912093F10031966150F4 -:1019A00071090196F2CF21E0089709F020E08091BB -:1019B000E8008E778093E800CBCF2111CCCF0AC00E -:1019C0008091F801882361F0853061F08091E80012 -:1019D00083FD0AC08091E80082FFF2CF80E0089585 -:1019E00082E0089583E0089581E00895982F97306C -:1019F00058F59093E900981739F07091EC00209118 -:101A0000ED005091F00003C0242F762F50E021FF0D -:101A100019C03091EB003E7F3093EB003091ED0028 -:101A20003D7F3093ED003091EB0031603093EB005F -:101A30007093EC002093ED005093F0002091EE00A5 -:101A400027FF07C09F5FD3CF8F708093E90081E0AD -:101A5000089580E008958091F90187FF11C0809179 -:101A6000E80082FD05C08091F8018111F8CF11C016 -:101A70008091E8008B770BC08091F801882349F0B2 -:101A80008091E80080FFF8CF8091E8008E77809306 -:101A9000E80008952091E4003091E50095E640913A -:101AA000EC00842F817040FF22C08091E80080FD0F -:101AB0001CC08091F801882391F0853091F08091CD -:101AC000EB0085FD10C04091E4005091E500421705 -:101AD000530729F39A01915011F784E0089582E0A9 -:101AE000089583E0089581E0089580E0089540918D -:101AF000E80042FFDECF08950E94EA0D0E94F20D39 -:101B0000E0EEF0E0808181608083E8EDF0E08081AC -:101B10008F77808319BCA7EDB0E08C918E7F8C937A -:101B200080818F7E80831092F70108950F931F9319 -:101B3000CF93DF930E94EA0D0E94F20DC8EDD0E032 -:101B400088818F77888388818068888388818F7D6A -:101B5000888319BC1092F8011092F4011092F601DA -:101B60001092F50100EE10E0F80180818B7F8083F8 -:101B700088818160888342E060E080E00E94F60C0A -:101B8000E1EEF0E080818E7F8083E2EEF0E0808104 -:101B900081608083808188608083F80180818E7F6E -:101BA0008083888180618883DF91CF911F910F911D -:101BB0000895E8EDF0E080818F7E8083E7EDF0E02E -:101BC00080818160808384E082BF81E08093F7011F -:101BD0000C94960DE8EDF0E080818E7F808310926A -:101BE000E20008951092DA001092E10008951F9229 -:101BF0000F920FB60F9211242F933F934F935F9341 -:101C00006F937F938F939F93AF93BF93EF93FF93C4 -:101C10008091E10082FF0BC08091E20082FF07C04B -:101C20008091E1008B7F8093E1000E945E108091A3 -:101C3000DA0080FF1FC08091D80080FF1BC0809118 -:101C4000DA008E7F8093DA008091D90080FF0DC08A -:101C500080E189BD82E189BD09B400FEFDCF81E04C -:101C60008093F8010E945A0A05C019BC1092F8012D -:101C70000E94680A8091E10080FF19C08091E20013 -:101C800080FF15C08091E2008E7F8093E2008091FA -:101C9000E20080618093E2008091D80080628093AE -:101CA000D80019BC85E08093F8010E946C0A8091ED -:101CB000E10084FF30C08091E20084FF2CC080E10D -:101CC00089BD82E189BD09B400FEFDCF8091D800B5 -:101CD0008F7D8093D8008091E1008F7E8093E1001A -:101CE0008091E2008F7E8093E2008091E20081602B -:101CF0008093E2008091F401882311F084E007C012 -:101D00008091E30087FD02C081E001C083E0809301 -:101D1000F8010E946E0A8091E10083FF29C0809142 -:101D2000E20083FF25C08091E100877F8093E1007E -:101D300082E08093F8011092F4018091E1008E7F9F -:101D40008093E1008091E2008E7F8093E200809199 -:101D5000E20080618093E20042E060E080E00E9467 -:101D6000F60C8091F00088608093F0000E946B0A6E -:101D7000FF91EF91BF91AF919F918F917F916F9163 -:101D80005F914F913F912F910F900FBE0F901F9039 -:101D900018951F920F920FB60F9211242F933F9315 -:101DA0004F935F936F937F938F939F93AF93BF9363 -:101DB000CF93DF93EF93FF93C091E900CF708091B1 -:101DC000EC00D82FD17080FDD0E81092E90080910E -:101DD000F000877F8093F00078940E940D0F10929E -:101DE000E9008091F00088608093F000CD2BCF70E7 -:101DF000C093E900FF91EF91DF91CF91BF91AF9137 -:101E00009F918F917F916F915F914F913F912F9112 -:101E10000F900FBE0F901F9018951F93CF93DF93D5 -:101E2000CDB7DEB7AA970FB6F894DEBF0FBECDBF11 -:101E3000E9EFF1E088E08E0F9091F10091938E131D -:101E4000FBCF0E948A0A8091E80083FF1FC1809126 -:101E5000F9019091FA01492F50E04A30510508F0FC -:101E600015C1FA01EA5AFF4F0C940A23803881F019 -:101E7000823809F00BC18091FD018F708093E900D9 -:101E80008091EB0085FB882780F91092E90006C05D -:101E90008091F5019091F601911182609091E80096 -:101EA000977F9093E8008093F1001092F100C8C0F2 -:101EB000282F2D7F09F0EAC0882319F0823061F0C5 -:101EC000E5C08091FB01813009F0E0C0933009F05A -:101ED00080E08093F6012BC08091FB01811127C027 -:101EE0008091FD018F7009F4D1C08093E9002091A9 -:101EF000EB0020FF1CC0933021F48091EB00806246 -:101F000014C09091EB0090619093EB0021E030E0E1 -:101F1000A90102C0440F551F8A95E2F74093EA00D9 -:101F20001092EA008091EB0088608093EB001092A1 -:101F3000E9008091E800877F86C08111A7C01091D9 -:101F4000FB011F778091E3008078812B8093E30071 -:101F50008091E800877F8093E8000E942B0D80919C -:101F6000E80080FFFCCF8091E30080688093E3006D -:101F7000111102C082E001C083E08093F80186C0A5 -:101F80008058823008F082C08091FB019091FC0162 -:101F90008C3D53E0950779F583E08A838AE2898353 -:101FA0004FB7F894DE01139620E03EE051E2E32FB4 -:101FB000F0E050935700E49120FF03C0E295EF70EA -:101FC0003F5FEF708E2F90E0EA3010F0C79601C0AF -:101FD000C0968D939D932F5F243149F74FBF809119 -:101FE000E800877F8093E8006AE270E0CE01019606 -:101FF0000E94320C14C0AE014F5F5F4F6091FD0133 -:102000000E94790BBC01892B09F440C09091E80033 -:10201000977F9093E80089819A810E94950C809126 -:10202000E8008B778093E80031C0803879F58091A3 -:10203000E800877F8093E8008091F4018093F100AD -:102040008091E8008E778093E8000E942B0D1EC0DF -:1020500081111CC09091FB019230C0F48091E80086 -:10206000877F8093E8009093F4010E942B0D80916C -:10207000F401811106C08091E30087FD02C081E078 -:1020800001C084E08093F8010E94760A8091E80004 -:1020900083FF0AC08091E800877F8093E8008091E9 -:1020A000EB0080628093EB00AA960FB6F894DEBF37 -:1020B0000FBECDBFDF91CF911F9108950895CF93AB -:1020C0008091F8018823A1F0C091E900CF70909130 -:1020D000EC00892F817090FD80E8C82B1092E900F8 -:1020E0008091E80083FD0E940D0FCF70C093E9003E -:1020F000CF91089590937A01809379010895E091AA -:102100007901F0917A01309721F00190F081E02D72 -:10211000099480E00895E0917901F0917A01309777 -:1021200021F00280F381E02D09940895E091790176 -:10213000F0917A01309721F00480F581E02D099427 -:10214000089520917701309178018217930771F0FB -:102150009093780180937701E0917901F0917A0171 -:10216000309721F00680F781E02D099408952091A1 -:102170007501309176018217930771F09093760183 -:1021800080937501E0917901F0917A01309721F007 -:102190000084F185E02D0994089508950C94CD10E4 -:1021A0000E94291C0E943E030C94AF1C9F92AF9288 -:1021B000BF92CF92DF92EF92FF920F931F93CF9334 -:1021C000DF9300D000D000D0CDB7DEB70E9465030A -:1021D0000DE010E0AA24A394B12C902E802F0E9431 -:1021E0005304980124583E4F6901F901F080F82604 -:1021F000A1F40150110988F78FEF89838A831B822C -:102200000E94321C8160782F9D838C8349815A8182 -:102210006B818D810E946D112FC09091DF0191FF24 -:1022200004C08E830E9459048E8125E030E0A50110 -:10223000022E01C0440F0A94EAF7E42E4F21C1F0A8 -:1022400029839A828E2191E009F490E09B830E9479 -:10225000321C8160782F9D838C8349815A816B81E8 -:102260008D810E946D11F6018081E826E08204C014 -:1022700021503109E0F6BDCF0E947D1E10917B01F7 -:102280000E947F101817B9F00E947F1080937B0185 -:1022900026960FB6F894DEBF0FBECDBFDF91CF916B -:1022A0001F910F91FF90EF90DF90CF90BF90AF9074 -:1022B0009F900C94790926960FB6F894DEBF0FBE56 -:1022C000CDBFDF91CF911F910F91FF90EF90DF90E5 -:1022D000CF90BF90AF909F900895CF93DF93CDB7ED -:1022E000DEB72B970FB6F894DEBF0FBECDBF4F837E -:1022F000588769877A878B87DE01119686E0FD0112 -:1023000011928A95E9F785E0FE01379601900D92CA -:102310008A95E1F749815A816B817C818D819E810B -:102320000E94B6172B960FB6F894DEBF0FBECDBF36 -:10233000DF91CF910895CF93882309F4C2C0C82FAD -:10234000823859F40E947F1081FDBBC089E30E944E -:10235000901A0E945D1B89E30CC0833879F40E94B7 -:102360007F1080FDAEC083E50E94901A0E945D1B25 -:1023700083E50E94D21ACF910C945D1B843859F4E6 -:102380000E947F1082FD9DC087E40E94901A0E94E7 -:102390005D1B87E4EECF8CEF8C0F813A48F48C2FD5 -:1023A0000E94C72081118DC08C2F0E94901AE3CF0C -:1023B00080E28C0F883048F4C77081E001C0880F3C -:1023C000CA95EAF70E94161BD6CF8BE58C0F833097 -:1023D00078F4C53A29F0C63A31F083E890E005C0B8 -:1023E00081E890E002C082E890E0CF910C94A110C7 -:1023F00088E58C0F833108F064C0C83A39F1C93AD6 -:1024000041F1CA3A49F1CB3A51F1CC3A59F1CD3ABE -:1024100061F1C03B69F1CE3A71F1CF3A79F1C13B3C -:1024200081F1C23B89F1C33B91F1C43B99F1C53BBA -:10243000A1F1C63BA9F1C73BB1F1C83BB9F1C93B1A -:10244000C1F1CA3BC9F180E090E038C082EE90E073 -:1024500035C089EE90E032C08AEE90E02FC085EB67 -:1024600090E02CC086EB90E029C087EB90E026C07E -:102470008CEC90E023C08DEC90E020C083E891E0EC -:102480001DC08AE891E01AC082E991E017C084E992 -:1024900091E014C081E292E011C083E292E00EC0AC -:1024A00084E292E00BC085E292E008C086E292E00E -:1024B00005C087E292E002C08AE292E0CF910C94DC -:1024C000B710CF910895882309F44BC0823859F48E -:1024D0000E947F1081FF45C089E30E94901A0E94EC -:1024E0005D1B89E30CC0833871F40E947F1080FF6C -:1024F00038C083E50E94901A0E945D1B83E50E940C -:10250000D21A0C945D1B843859F40E947F1082FF0C -:1025100028C087E40E94901A0E945D1B87E4EFCFD9 -:102520009CEF980F913A58F390E2980F983050F43E -:10253000877091E001C0990F8A95EAF7892F0E9470 -:102540001C1BDFCF9BE5980F933020F480E090E0D8 -:102550000C94A110885A833120F480E090E00C9410 -:10256000B7100895882321F00E94161B0C945D1B60 -:102570000895882321F00E941C1B0C945D1B089574 -:102580007F928F929F92AF92BF92CF92DF92EF9203 -:10259000FF920F931F93CF93DF931F92CDB7DEB7B8 -:1025A0007C01C62E772EFC01058102950F701281E9 -:1025B00011110E94331B0E94891A882379F011237C -:1025C00069F080E28C0D883048F082E00E94721A37 -:1025D0000E94891A91E0D82ED92601C0D12CE72D6E -:1025E000E295EF70F0E0E05AFF4F0C940A23872D3C -:1025F000807F072D0F70882311F00295007F112333 -:1026000089F0002309F490C180E28C0D883020F419 -:10261000802F0E94161B03C0802F0E94261B0E9441 -:102620005D1B82C18C2D0E946312002309F495C1A9 -:1026300080E28C0D883020F4802F0E941C1B03C088 -:10264000802F0E942C1B0E945D1B87C1972D907FBD -:10265000872D8F70903211F08295807FCC2021F0F1 -:10266000F1E0CF16B1F01EC0112349F0002309F4A8 -:1026700014C1013009F011C10E94461B6EC1002334 -:1026800019F0013009F469C189830E94491B8981CD -:102690000AC1112321F0023008F05FC1FEC0011110 -:1026A0005CC101C1112321F0002309F4F6C03CC133 -:1026B000002309F4F8C03EC1872D86958695837066 -:1026C00090E0009719F0019761F047C1112321F0C4 -:1026D0008C2D972D937002C080E090E00E94A11095 -:1026E0003CC1112321F08C2D972D937002C080E006 -:1026F00090E00E94B71031C18C2D112319F00E9477 -:10270000851D02C00E94ED1D0E94721E26C1872DEC -:10271000837009F052C0111120C18C2D82958695CD -:102720008770880F880F9C2D9F70892E912CA12C6B -:10273000B12C082E04C0880C991CAA1CBB1C0A943E -:10274000D2F7C4FE14C00FE010E020E030E0B90181 -:10275000A80104C0440F551F661F771F8A95D2F742 -:10276000CB01BA01609570958095909503C060E0AB -:1027700070E0CB01272D26952695237030E022307E -:10278000310569F02330310589F0682979298A29D2 -:102790009B292130310571F00E94FE18DEC06829A6 -:1027A00079298A299B290E941A19D7C00E94FE18EC -:1027B000C501B4010E94E218D0C0112319F0872D81 -:1027C000817001C08695882309F4C7C08C2D82953D -:1027D00086958770880F880F9C2D9F70892E912C6D -:1027E000A12CB12C082E04C0880C991CAA1CBB1C5F -:1027F0000A94D2F7C4FE14C00FE010E020E030E0ED -:10280000B901A80104C0440F551F661F771F8A95A0 -:10281000D2F7CB01BA01609570958095909503C071 -:1028200060E070E0CB01272D269526952370422F7E -:1028300050E04230510569F04330510589F0682974 -:1028400079298A299B294130510571F00E94D819B4 -:1028500084C0682979298A299B290E94F4197DC09E -:102860000E94D819C501B4010E94BC1976C08C2DF4 -:1028700090E0FC01E05EF109E531F10508F050C09F -:10288000E059FF4F0C940A230C2D0F70872D8F7188 -:10289000112331F00E945519802F0E94B2125DC0A1 -:1028A0000E947619802F0E94B91257C0112339F067 -:1028B000011153C0872D8F710E949B194EC00230A9 -:1028C00008F04BC0F7CF112339F0872D8F710E948C -:1028D000551943C01123C9F3872D8F710E947619B2 -:1028E0003CC0112329F0872D8F710E94401935C0FB -:1028F0000E94361932C0112351F0172D1F71812FFC -:102900000E94551963E0812F0E94691A26C081E058 -:102910000E94721A023008F182E00E94721A1DC0F1 -:10292000112331F0002389F28C2D0E949B1115C0D8 -:10293000002391F28C2D0E9463120FC0472D4F701F -:102940006C2DC7010E942F050E945A1806C0472D02 -:102950004F706C2DC7010E94E808DD20F9F00E943D -:10296000651A80FD1BC0F70112820E945F1A0E9447 -:102970005519C7010E94DD140E945F1A0F90DF9164 -:10298000CF911F910F91FF90EF90DF90CF90BF906C -:10299000AF909F908F907F900C9476190F90DF915D -:1029A000CF911F910F91FF90EF90DF90CF90BF904C -:1029B000AF909F908F907F9008950F931F93CF9328 -:1029C000DF93EC01888199812B813C81232BB9F025 -:1029D0009F3F11F48F3F99F0CE010E94710588232B -:1029E00071F0688179818A810E945B1A8C010E9452 -:1029F000101A0E94D718B801CE010E94C012DF91B0 -:102A0000CF911F910F9108950E94331B0E94431B89 -:102A10000E94081B0E945D1B0E94231F0E94721EC1 -:102A200080E090E00E94A11080E090E00C94B7104C -:102A30000E94231B0C9404150E94501A292F2295E2 -:102A40002F7030E02C3031054CF42A3031056CF415 -:102A50002250310922303105A8F407C02C3031054D -:102A600069F02F30310551F00DC0803F69F018F446 -:102A7000803E40F409C0843F29F406C093FB8827B8 -:102A800080F9089580E0089581E00895CF93DF9361 -:102A900000D000D01F92CDB7DEB70F900F900F90EF -:102AA0000F900F90DF91CF910895CF93DF9300D0D7 -:102AB00000D000D0CDB7DEB726960FB6F894DEBFB3 -:102AC0000FBECDBFDF91CF9108951F93CF93DF93BA -:102AD000C0918A0116E080918B01C81799F0D0E06F -:102AE0001C9FF0011D9FF00D1124E457FE4F408103 -:102AF000518162817381848195810E94551521964F -:102B0000C770E9CFDF91CF911F9108954091BC012B -:102B10005091BD016091BE017091BF018091C001D3 -:102B20009091C1010C9455158091C10182958F70CF -:102B300009F054C08091BE01882309F44FC08091F0 -:102B40008A01A0918B016091BC017091BD014091FF -:102B5000BF015091C001B6E08A1709F43FC090E070 -:102B600041155105C1F17F3F11F46F3FA1F1B89FAD -:102B7000F001B99FF00D1124E457FE4F218172132B -:102B80002AC02081621327C02281211124C0238101 -:102B900034812417350710F421503109241B350BDB -:102BA000283C3105C0F42091C1012F702061209391 -:102BB000C10126E0289FF001299FF00D1124EF5656 -:102BC000FE4F80818F70806180838CEB91E00E944A -:102BD000DD140C94651501968770BECF0895CF92D1 -:102BE000DF92EF92FF920F931F93CF93DF93CDB7B6 -:102BF000DEB762970FB6F894DEBF0FBECDBF8C0173 -:102C000085E0F801DE011D9601900D928A95E1F7AD -:102C1000D8014C9111965C91119712966C91129774 -:102C20001396CD90DC9014973091BC017091BD014A -:102C30008091BF019091C001009709F46BC17F3F63 -:102C400019F43F3F09F466C1E090BE01EE2009F49B -:102C5000C0C02091C101C816D90628F0F601E81BB2 -:102C6000F90BCF0104C0809590958C0D9D1DFF241C -:102C7000F394883C910578F0F12C207F09F0C6C0D0 -:102C80007C2DD98AC88A89890E9446158CEB91E0EF -:102C90000E94DD14B1C0822F807F09F046C07513F9 -:102CA00014C0341312C0611110C02F702061209322 -:102CB000C1010E9486158CEB91E00E94DD14809189 -:102CC000C101D80115968C932EC0CD2819F15F3F14 -:102CD00011F44F3FF9F0F62E61111CC080918A016A -:102CE00020918B0136E0821709F45AC090E0389F9A -:102CF000F001399FF00D1124E457FE4F71815713F5 -:102D000006C07081471303C07281711103C0019620 -:102D10008770E9CFF62E662309F418C18091C101AE -:102D200081608093C101F12C11C1751308C0341367 -:102D300006C0611104C08091C101D801C3C04D8794 -:102D40005E878D859E856A8B0E941C156A89882303 -:102D5000E1F16623D1F12091C101822F82958F701C -:102D600090E0029774F08091BC019091BD0198872A -:102D70008F831986DB86CA862C87CE0107960E9430 -:102D8000DD1486E0F801ACEBB1E001900D928A957C -:102D9000E1F70E9494150E948615FF24F394D6C093 -:102DA0004D875E878D859E850E94501A292F22951A -:102DB0002F7030E0223031050CF0BCC09F7009F05C -:102DC000B6C0805E883008F4C1C0C8010E94DD141E -:102DD000E4CFC816D90608F453C0F601E81BF90B76 -:102DE000CF01883C910508F450C0F12C7C2DD98A84 -:102DF000C88A89890E944615ECEBF1E086E0DF0184 -:102E00001D928A95E9F70E948615A0C0751314C01B -:102E1000341312C0611110C08091C101F801858383 -:102E2000C8010E94DD1486E0ECEBF1E0DF011D92A9 -:102E30008A95E9F7FE2C8AC04D875E878D859E8531 -:102E40006A8B0E941C156A89882309F4BECF662309 -:102E500009F4BBCF2091C101822F82958F7090E041 -:102E600002970CF48ECF8091BC019091BD019A83A2 -:102E700089831B82DD82CC822E83CE0101967FCF97 -:102E8000809590958C0D9D1DACCFF62E662309F490 -:102E90009CCF75132EC034132CC02091C10120FD8E -:102EA0001FC0822F82958F70D9F0D80115962C9370 -:102EB00015978F3049F08F5F982F9295907F822FD2 -:102EC0008F70892B15968C93C8010E94DD1486E0C3 -:102ED000F801ACEBB1E001900D928A95E1F793CF48 -:102EE00086E0F801ACEBB1E001900D928A95E1F734 -:102EF0002DC04D875E878D859E850E941C15811192 -:102F000040CF8091C10181608093C101C8010E94BE -:102F1000DD141CC0662309F458CF4D875E878D856C -:102F20009E850E941C15882309F44FCF2ACF81115A -:102F300048CF0CC0243031050CF047CF9F7009F406 -:102F400040CFF8019581907F09F03BCF8F2D62969D -:102F50000FB6F894DEBF0FBECDBFDF91CF911F91AA -:102F60000F91FF90EF90DF90CF9008951F93CF9334 -:102F7000DF93CDB7DEB72C970FB6F894DEBF0FBE48 -:102F8000CDBF4F83588769877A878B879C87CE010F -:102F900007960E94EF15882369F08F8198852A850E -:102FA0003B85232BF1F19F3F09F063C08F3F09F070 -:102FB00060C037C086E0FE013796DE0111960190B1 -:102FC0000D928A95E1F76F817885EA85FB853097C8 -:102FD00041F17F3F11F46F3F21F120918B0130E0EF -:102FE000C90101968770992740918A0150E08417A2 -:102FF000950709F447C069837A83FD83EC8396E0E3 -:10300000929FD001939FB00D1124A457BE4FFE0193 -:10301000319601900D929A95E1F780938B010E9471 -:10302000651516E080918A0190918B018917C1F195 -:10303000189FC001112484579E4F0E94EF158823CA -:1030400079F1E0918A011E9FF0011124E457FE4FAF -:103050004081518162817381848195810E945515DF -:1030600080918A0190E001968770992780938A0168 -:10307000D9CF4F81588569857A858B859C850E943B -:103080005515CFCF0E94181510928B0110928A010E -:10309000ECEBF1E086E0DF011D928A95E9F7C1CF04 -:1030A0002C960FB6F894DEBF0FBECDBFDF91CF9147 -:1030B0001F910895EF92FF920F931F93CF93DF9389 -:1030C0008C01892B09F46CC0F12CEE24E394E80107 -:1030D0002196F8018491843740F4843008F051C07F -:1030E000813081F0823019F15BC0853709F444C02A -:1030F000A8F19CE7980F903708F052C08F770E9494 -:10310000631241C00E5F1F4FFE01C49180E28C0F1D -:10311000883048F4C7708E2D01C0880FCA95EAF731 -:103120000E94361B14C08C2F0E949B112DC00E5F75 -:103130001F4FFE01C49180E28C0F883058F4C77095 -:103140008E2D01C0880FCA95EAF70E943C1B0E9491 -:103150005D1B1AC08C2F0E94631216C00E5F1F4F9A -:10316000FE01C491CC2381F08FE99FE00197F1F734 -:1031700000C00000C150F6CF0E5F1F4FFE01F4905B -:1031800003C00E949B118E018F2D882309F49FCFCD -:10319000EFE9FFE03197F1F700C000008150F5CF73 -:1031A000DF91CF911F910F91FF90EF9008950895B7 -:1031B0006093C6017093C7018093C8019093C901C1 -:1031C0000C9404150F931F930091C6011091C70131 -:1031D0002091C8013091C901DC01CB01802B912BDA -:1031E000A22BB32B8093C6019093C701A093C80173 -:1031F000B093C9011F910F910C9404150F931F9365 -:103200000091C6011091C7012091C8013091C901F8 -:10321000DC01CB0180239123A223B3238093C60139 -:103220009093C701A093C801B093C9011F910F915A -:103230000C9404150F931F930091C6011091C701C0 -:103240002091C8013091C901DC01CB018027912771 -:10325000A227B3278093C6019093C701A093C8010A -:10326000B093C9011F910F910C9404151092C201E3 -:103270001092C3011092C4011092C5010C94041560 -:1032800041E050E060E070E004C0440F551F661F4D -:10329000771F8A95D2F74093C2015093C301609380 -:1032A000C4017093C5010C94041541E050E060E046 -:1032B00070E004C0440F551F661F771F8A95D2F730 -:1032C0008091C2019091C301A091C401B091C50148 -:1032D000482B592B6A2B7B2B4093C2015093C3017F -:1032E0006093C4017093C5010C94041541E050E053 -:1032F00060E070E004C0440F551F661F771F8A9579 -:10330000D2F740955095609570958091C20190914B -:10331000C301A091C401B091C501482359236A2378 -:103320007B234093C2015093C3016093C401709307 -:10333000C5010C94041541E050E060E070E004C069 -:10334000440F551F661F771F8A95D2F78091C201DF -:103350009091C301A091C401B091C501482759279C -:103360006A277B274093C2015093C3016093C40135 -:103370007093C5010C9404150F931F930091C20123 -:103380001091C3012091C4013091C501DC01CB0132 -:10339000802B912BA22BB32B8093C2019093C3015E -:1033A000A093C401B093C5011F910F910C94041513 -:1033B0000F931F930091C2011091C3012091C4018A -:1033C0003091C501DC01CB0180239123A223B323DB -:1033D0008093C2019093C301A093C401B093C5012F -:1033E0001F910F910C9404150F931F930091C2012C -:1033F0001091C3012091C4013091C501DC01CB01C2 -:1034000080279127A227B3278093C2019093C301FD -:10341000A093C401B093C5011F910F910C940415A2 -:103420000895CF92DF92EF92FF920F931F93CF9365 -:10343000DF938C01C090C601D090C701E090C80115 -:10344000F090C9018091C2019091C301A091C40183 -:10345000B091C501C82AD92AEA2AFB2ACFE1D0E0D7 -:10346000D701C6010C2E04C0B695A79597958795F0 -:103470000A94D2F780FF06C0B8018C2F0E9467071C -:10348000019721F4219760F780E001C08C2FDF9134 -:10349000CF911F910F91FF90EF90DF90CF90089503 -:1034A000CF93DF93EC010E94111ABE010E946707BF -:1034B000DF91CF910895CB010E94501A0895809119 -:1034C000CA0185958595859508958091CA01877073 -:1034D000089598E0899F90011124262B2093CA011A -:1034E0000C9455192091CA01809582238093CA01BA -:1034F000982F977069F430E0482F552747FD509575 -:103500002417350729F08595859585950C947619AE -:1035100008959091CA01977081E009F480E00895C0 -:1035200090910C01992321F090910D01911109C006 -:1035300020910E0130910F01F90132969FEF40E08A -:103540001FC0982F9695969596959F3050F5E091CF -:103550000E01F0910F01E90FF11D877021E030E0BD -:10356000A90102C0440F551F8A95E2F7CA01918153 -:10357000892B818308959F3F39F04F5F4E3041F092 -:1035800051915813F8CF0DC05111F7CF942FF5CFAB -:103590009F3F39F0F901E90FF11D97FDFA958283FC -:1035A0000895089590910C01992321F090910D01B7 -:1035B000911109C020910E0130910F01F90132964D -:1035C000205F3F4F1FC0982F9695969596959F30F8 -:1035D000F0F4E0910E01F0910F01E90FF11D8770F9 -:1035E00021E030E0A90102C0440F551F8A95E2F79F -:1035F000CA01809591818923818308953196E217CC -:10360000F30729F090819813F9CF1082F7CF08952E -:1036100081E090E0E0910E01F0910F01E80FF91FB9 -:103620001082019680319105A9F708959091DE01ED -:10363000892B8093DE01089580959091DE01892386 -:103640008093DE0108951092DE0108959091DD01CE -:10365000892B8093DD01089580959091DD01892368 -:103660008093DD0108951092DD0108959091DC01B1 -:10367000892B8093DC01089580959091DC0189234A -:103680008093DC0108951092DC0108958093CB01B2 -:1036900008951092CB01089580910E0190910F0131 -:1036A000FC0131969C01205F3F4F80E09191911188 -:1036B0008F5FE217F307D1F70895E0910E01F091C3 -:1036C0000F018091DE018083E0910E01F0910F01E6 -:1036D00090818091DD01892B8083E0910E01F09132 -:1036E0000F0190818091DC01892B80838091CB0137 -:1036F000882361F0E0910E01F0910F019081892BF8 -:1037000080830E944C1B81111092CB0180910E018D -:1037100090910F010C948B1020E0009739F0AC01D0 -:1037200041505109842395232F5FF7CF822F0895AD -:10373000CF92DF92EF92FF926C01EE24FF24C1142E -:10374000D104E104F10421F0C701B60120E101C078 -:1037500020E0C72ED82EE92EFF24C114D104E104A5 -:10376000F10419F0285FC701B6016B017C0154E038 -:10377000F694E794D794C7945A95D1F7C114D1041D -:10378000E104F10419F02C5FC701B6016B017C0163 -:1037900042E0F694E794D794C7944A95D1F7C114C0 -:1037A000D104E104F10419F02E5FC701B601DC0178 -:1037B000CB01B695A79597958795892B8A2B8B2B4F -:1037C00009F02F5F822FFF90EF90DF90CF90089548 -:1037D0008091F801843039F11092E00120E488E111 -:1037E00090E00FB6F894A895809360000FBE2093E8 -:1037F000600080E00E94790983B7817F846083BF85 -:1038000083B7816083BF7894889583B78E7F83BFA9 -:103810000FB6F894A895809160008861809360004D -:10382000109260000FBE089508950E9452030E94F6 -:1038300065030E94141C0E945A0491E0811101C08A -:1038400090E0892F08950E9418150E947F100C9413 -:10385000790982E084BD93E095BD9AEF97BD80938E -:103860006E0008952FB7F8948091E1019091E201E4 -:10387000A091E301B091E4012FBF0895CF92DF92B0 -:10388000EF92FF920F931F932FB7F8944091E101AD -:103890005091E2016091E3017091E4012FBF6A0150 -:1038A0007B01EE24FF248C0120E030E0C016D1061D -:1038B000E206F30610F4415051099A01281B390B16 -:1038C000C9011F910F91FF90EF90DF90CF90089565 -:1038D0001F920F920FB60F9211248F939F93AF9365 -:1038E000BF938091E1019091E201A091E301B09139 -:1038F000E4010196A11DB11D8093E1019093E201C5 -:10390000A093E301B093E401BF91AF919F918F9198 -:103910000F900FBE0F901F9018950E947C0DF89489 -:103920002FEF87EA91E6215080409040E1F700C0F8 -:10393000000087E090EBDC0180930102909302028B -:10394000A0930302B09304029CE088E10FB6F894C0 -:10395000A895809360000FBE90936000FFCF0E94F7 -:10396000E71C811102C00E94CD1C0E94F21C8093B2 -:10397000DF010E94FA1C90E09093F3018093F20122 -:1039800087FB882780F980930D010E94F61C682F21 -:1039900070E080E090E00C94D8186DEE7EEF80E04F -:1039A00090E00E94432360E082E090E00E94322396 -:1039B00060E083E090E00E94322360E084E090E0E9 -:1039C0000E94322360E085E090E00C94322380E096 -:1039D00090E00E942C2321E08D3E9E4F09F020E0D4 -:1039E000822F089582E090E00C94242383E090E0FD -:1039F0000C94242384E090E00C942423682F84E02A -:103A000090E00C9432238091E70180FF0BC060911D -:103A1000130185E0689FB001112475956795759530 -:103A200067952BC081FF09C06091130185E0689FF5 -:103A3000B00111247595679520C082FF07C0609181 -:103A4000130185E0689FB001112417C09091E8012F -:103A50009923D1F060911201961788F720911301F4 -:103A600085E0289F90011124929FA001939F500D03 -:103A7000112470E0CA010E94F6226038710540F4FA -:103A80006115710539F002C065E070E0862F089578 -:103A90008FE7089581E008958091E70180FF08C0D5 -:103AA0006091110170E0759567957595679521C0D6 -:103AB00081FF06C06091110170E07595679519C08E -:103AC00082FF04C06091110170E010C09091E80184 -:103AD0009923C1F0609110019617A0F78091110110 -:103AE000899FC001112470E00E94F62260387105A0 -:103AF00028F46115710521F0862F08958FE7089548 -:103B000081E0089561E070E0F4CF803F21F40E94ED -:103B1000031D819504C0813F29F40E94031D8093F9 -:103B2000EB010895823F21F40E94031D819504C09A -:103B3000833F29F40E94031D8093EA010895893F81 -:103B400019F40E944C1D05C08A3F31F40E944C1D9F -:103B500081958093EC0108958B3F21F40E944C1DC8 -:103B6000819504C08C3F29F40E944C1D8093ED0187 -:103B70000895843F21F48091E901816017C0853F59 -:103B800021F48091E901826011C0863F21F4809187 -:103B9000E90184600BC0873F21F48091E9018860CE -:103BA00005C0883F31F48091E90180618093E9018B -:103BB00008958D3F21F48091E70181600BC08E3F15 -:103BC00021F48091E701826005C08F3F29F4809144 -:103BD000E70184608093E7010895803F39F4809184 -:103BE000EB0187FF6CC01092EB0169C0813F29F4A3 -:103BF0008091EB011816BCF362C09091EA01823FFC -:103C000029F497FF5CC01092EA0159C0833F19F470 -:103C10001916CCF354C0893F41F48091EC01181679 -:103C20000CF04DC01092EC014AC08A3F29F48091FB -:103C3000EC0187FF44C0F6CF8B3F39F48091ED0152 -:103C400087FF3DC01092ED013AC08C3F29F480916E -:103C5000ED011816BCF333C0843F21F48091E901D3 -:103C60008E7F17C0853F21F48091E9018D7F11C0BF -:103C7000863F21F48091E9018B7F0BC0873F21F4BF -:103C80008091E901877F05C0883F31F48091E90187 -:103C90008F7E8093E90113C08D3F21F48091E7016D -:103CA0008E7F0BC08E3F21F48091E7018D7F05C090 -:103CB0008F3F29F48091E7018B7F8093E70180910A -:103CC000EA0181110EC08091EB0181110AC080913F -:103CD000EC01811106C08091ED01811102C01092AA -:103CE000E801089589EE91E00E9496100E94321C2E -:103CF0009093E6018093E50108951F93CF93DF939E -:103D00008091E5019091E6010E943E1CAC019091EA -:103D1000E801992321F02091140130E006C02091A0 -:103D200015018AE0289F900111244217530708F4D7 -:103D300086C08091EA01C091EB01D091EC01109115 -:103D4000ED01811107C0C11176C0D11174C01111EC -:103D500072C075C09F3F19F09F5F9093E8011816DD -:103D600024F40E94031D8093EA018091EA0187FFF9 -:103D700005C00E94031D81958093EA011C1624F45E -:103D80000E94031D8093EB018091EB0187FF05C02A -:103D90000E94031D81958093EB016091EA016623E7 -:103DA00039F1C091EB01CC2319F1772767FD7095AC -:103DB000872F972F0E94FD2123E333E343E35FE343 -:103DC0000E9461220E94C5216093EA016C2F77272F -:103DD00067FD7095872F972F0E94FD2123E333E322 -:103DE00043E35FE30E9461220E94C5216093EB01DF -:103DF0001D1624F40E944C1D8093EC018091EC016F -:103E000087FF05C00E944C1D81958093EC0111161F -:103E100024F40E944C1D8093ED018091ED0187FFF9 -:103E200005C00E944C1D81958093ED01DF91CF91DB -:103E30001F910C94721E9F3F09F08ECF96CFDF9199 -:103E4000CF911F910895E9EEF1E085E0DF011D9229 -:103E50008A95E9F71092E8011092E70108958330FE -:103E600081F128F4813059F08230D1F00895853005 -:103E700009F449C0B8F1863009F456C0089580911C -:103E80001501262F30E0280F311D2F3F310524F476 -:103E9000680F6093150108958FEF809315010895C1 -:103EA00080911401262F30E0280F311D2F3F31055E -:103EB00024F4680F6093140108958FEF8093140128 -:103EC000089580911301262F30E0280F311D2F3FD8 -:103ED000310524F4680F6093130108958FEF8093E8 -:103EE0001301089580911201262F30E0280F311D13 -:103EF0002F3F310524F4680F6093120108958FEF6E -:103F000080931201089580911101262F30E0280F2F -:103F1000311D2F3F310524F4680F6093110108957E -:103F20008FEF80931101089580911001262F30E0CA -:103F3000280F311D2F3F310524F4680F60931001C5 -:103F400008958FEF809310010895833011F128F4C4 -:103F5000813049F0823091F00895853081F120F16F -:103F60008630C1F1089580911501681720F4861BF1 -:103F70008093150108951092150108958091140100 -:103F8000681720F4861B8093140108951092140181 -:103F9000089580911301681720F4861B8093130104 -:103FA000089510921301089580911201681720F46A -:103FB000861B80931201089510921201089580913A -:103FC0001101681720F4861B809311010895109247 -:103FD0001101089580911001681720F4861B8093C9 -:103FE000100108951092100108950F931F938D31C1 -:103FF00009F471C008F045C0803109F485C008F5A6 -:10400000873009F46FC068F4863009F0ADC0809144 -:10401000DF01817F8E7F8093DF0181E08093EF015C -:10402000A4C08B3009F49EC08E3009F09DC08091F1 -:10403000DF0182FB222720F991E0922790FB82F991 -:104040006CC0863109F48EC060F4813109F08CC0F7 -:104050000E94181590910D0181E0892780930D0130 -:1040600081C0893109F47EC08B3109F07DC0809117 -:10407000DF0181FB222720F991E0922790FB81F953 -:104080004CC0853309F466C048F4873209F462C035 -:1040900008F44FC0893209F45DC066C0833438F437 -:1040A0008A3308F044C0883309F45CC05DC08334AF -:1040B00009F450C0883409F057C00E9418150FEF5A -:1040C00013ED20E3015010402040E1F700C0000054 -:1040D0000E948D1C47C00E947F210E947F100E9479 -:1040E000790940C09091DF01892F8095817080FB14 -:1040F00090F929F0966098609093DF0136C0997F1F -:10410000977F9093DF012EC08091DF0183FB2227F0 -:1041100020F991E0922790FB83F98093DF019923A6 -:1041200009F18091DF0181608093DF011BC0895319 -:1041300001C08D5141E050E060E070E08A019B01D8 -:1041400004C0000F111F221F331F8A95D2F7C90127 -:10415000B80104C061E070E080E090E00E94D818EF -:104160000E94181581E001C080E01F910F91089511 -:1041700080E0089580E008958E518A3030F4E82F71 -:10418000F0E0E65DFE4F8081089580E00895CF93D2 -:10419000C82F8091EF01813079F018F08230E9F179 -:1041A00086C0E0910E01F0910F018081813169F0AC -:1041B000823209F07EC009C0E0910E01F0910F013A -:1041C0008081813111F0823261F48C2F0E94B820FD -:1041D000811104C08C2F0E94F51F1DC081E090E06A -:1041E0001AC08C2F0E94BA20811114C0C43179F0FA -:1041F00048F4CB3079F0C03109F05FC082E08093A1 -:10420000EF0108C0C93219F0C83321F056C010922E -:10421000EF0153C081E0817052C0C93281F110F5C5 -:10422000C43169F1A8F4C73009F045C08AE0809331 -:10423000150194E19093140193E0909313018093FE -:10424000120188E08093110188E28093100133C04D -:1042500082EE8C0F863078F58C2F0E94BC208093E4 -:10426000EE0129C0CE34E9F020F4CB3421F56AE028 -:1042700013C0C13579F0C235F1F461E00DC0809111 -:10428000EE01882319F01092EE0115C081E08093B1 -:10429000EF0115C061E006C08091EE010E942F1F62 -:1042A0000AC06AE08091EE010E94A51F04C010922E -:1042B000EF0180E004C081E002C080E0ACCFCF918C -:1042C0000895E1E8F0E080818860808380818160EA -:1042D00080838FB7F89493E09093890090ED90934A -:1042E00088008FBF0895EFE6F0E0808182608083D0 -:1042F0000895EFE6F0E080818D7F80830895EFE6FA -:10430000F0E0908182E08927808308951F920F92C8 -:104310000FB60F9211242F933F934F935F936F9398 -:104320007F938F939F93AF93BF93EF93FF9380916E -:10433000F0019091F10101969093F1018093F001C9 -:10434000811103C082E00E947909E091F101E695B4 -:10435000E695F0E0EB54FB4FE4918091F0018E1371 -:1043600003C080E00E947909FF91EF91BF91AF9166 -:104370009F918F917F916F915F914F913F912F917D -:104380000F900FBE0F901F9018950E94CC2168943B -:10439000B1110C945B2208950E94402288F09F572F -:1043A00098F0B92F9927B751B0F0E1F0660F771F59 -:1043B000881F991F1AF0BA95C9F714C0B13091F04F -:1043C0000E945A22B1E008950C945A22672F782F48 -:1043D0008827B85F39F0B93FCCF386957795679514 -:1043E000B395D9F73EF490958095709561957F4F80 -:1043F0008F4F9F4F0895E89409C097FB3EF4909526 -:104400008095709561957F4F8F4F9F4F9923A9F0AD -:10441000F92F96E9BB279395F6958795779567953C -:10442000B795F111F8CFFAF4BB0F11F460FF1BC080 -:104430006F5F7F4F8F4F9F4F16C0882311F096E913 -:1044400011C0772321F09EE8872F762F05C06623C1 -:1044500071F096E8862F70E060E02AF09A95660F7A -:10446000771F881FDAF7880F9695879597F9089533 -:1044700057FD9058440F551F59F05F3F71F0479515 -:10448000880F97FB991F61F09F3F79F087950895FA -:10449000121613061406551FF2CF4695F1DF08C019 -:1044A000161617061806991FF1CF86957105610536 -:1044B00008940895E894BB2766277727CB0197F9DE -:1044C00008950E9474220C94E5220E94D72238F0AD -:1044D0000E94DE2220F0952311F00C94CE220C9441 -:1044E000D42211240C945B220E94382270F3959FF1 -:1044F000C1F3950F50E0551F629FF001729FBB27DB -:10450000F00DB11D639FAA27F00DB11DAA1F649F76 -:104510006627B00DA11D661F829F2227B00DA11D29 -:10452000621F739FB00DA11D621F839FA00D611DAF -:10453000221F749F3327A00D611D231F849F600DD0 -:10454000211D822F762F6A2F11249F5750409AF0F9 -:10455000F1F088234AF0EE0FFF1FBB1F661F771F85 -:10456000881F91505040A9F79E3F510580F00C9450 -:10457000CE220C945B225F3FE4F3983ED4F3869501 -:1045800077956795B795F795E7959F5FC1F7FE2BF0 -:10459000880F911D9695879597F9089597F99F67CC -:1045A00080E870E060E008959FEF80EC08950024BB -:1045B0000A941616170618060906089500240A9488 -:1045C00012161306140605060895092E0394000C0E -:1045D00011F4882352F0BB0F40F4BF2B11F460FF9D -:1045E00004C06F5F7F4F8F4F9F4F089597FB072E3B -:1045F00016F4009407D077FD09D00E94102307FC21 -:1046000005D03EF4909581959F4F089570956195E2 -:104610007F4F0895EE0FFF1F0590F491E02D099450 -:10462000AA1BBB1B51E107C0AA1FBB1FA617B707D8 -:1046300010F0A61BB70B881F991F5A95A9F78095F4 -:104640009095BC01CD010895F999FECF92BD81BD31 -:10465000F89A992780B50895A8E1B0E042E050E0CB -:104660000C944B23262FF999FECF92BD81BDF89A69 -:10467000019700B4021631F020BD0FB6F894FA9AF3 -:10468000F99A0FBE08950196272F0E9433230C94A8 -:104690003223DC01CB01FC01F999FECF06C0F2BD4B -:1046A000E1BDF89A319600B40D9241505040B8F7F0 -:0646B0000895F894FFCF0D -:1046B60002207B09090AE609B2097E090101CC013B -:1046C60028080A03140A404D363975042804F203F3 -:1046D600B9034C0365037E03970301020304050631 -:0446E60007080900B8 -:00000001FF diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c deleted file mode 100644 index 87b77e42ef..0000000000 --- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 |CMD+{ | | CMD+}| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | Hyper| | Meh | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| LGui | - * |--------+------+------+------+------+------| LGui | | LGui |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Del |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, LGUI(LSFT(KC_LBRC)), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, - 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 - LGUI(LSFT(KC_RBRC)), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MEH_T(KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, - KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, - KC_DELT, 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 -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/keyboards/ergodox_ez/keymaps/tm2030/keymap.c b/keyboards/ergodox_ez/keymaps/tm2030/keymap.c deleted file mode 100644 index ca80752263..0000000000 --- a/keyboards/ergodox_ez/keymaps/tm2030/keymap.c +++ /dev/null @@ -1,242 +0,0 @@ -/* TypeMatrix-2030-like keymap */ -#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 NUMR 8 // numeric layer -#define FNLR 9 // fn layer - -#define MDBL0 1 -#define MFNLR 2 - -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(NUMR), - 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(NUMR), - 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 - ), -/* Numeric 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 -[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, - 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_TRNS, 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 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | Calc | Mail |Browsr|------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | 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_CALC, KC_MAIL, KC_WHOM, - 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_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_invert(NUMR); - layer_invert(FNLR); - 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: numeric layer - if (layer_state & (1 << NUMR)) { - 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) { - 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/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md b/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md deleted file mode 100644 index f9d76efc23..0000000000 --- a/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# 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/keyboards/ergodox_ez/keymaps/townk_osx/config.h b/keyboards/ergodox_ez/keymaps/townk_osx/config.h deleted file mode 100644 index 58ba690afd..0000000000 --- a/keyboards/ergodox_ez/keymaps/townk_osx/config.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION t.m.k. keyboard firmware for Ergodox - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#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 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 2 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -//#define DEBUG_MATRIX_SCAN_RATE -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 3000 - -#endif diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c b/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c deleted file mode 100644 index 07e58a491b..0000000000 --- a/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c +++ /dev/null @@ -1,285 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "led.h" -#include "keymap.h" -#include "timer.h" - -/* - -# Why this Layout - -This layout was based on Kinesis layout and other ErgoDox user layouts -available. It's target to be used on a MacOS but I'm pretty sure it can be -addapted to Windows and/or Linux easily. - -## Function Key - -The `fn` key work almost like it would in any other keyboard with the exception -it has a semi-sticky behavior. What does that mean? - -Well, if you press the `fn` and release it, the keyboard will be put on the -_function layout_ and the next key stroke will be processed as if the `fn` key -was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and -press any other key, when you release them, the keyboard leyout is back to -_normal_. - -While pressing the `fn` with the left hand and strikeing the other keys on the -right hand is farly easy, the same cannot being said for the other keys on the -left side. So, instead of trying to do contorcionism with my left hand, I -decided to do a semi-sticky version of `fn`. This way, I can press the `fn` -key with my pinky, release it and press the `1` key to issue an `F1` to the -operating system. - -## Key-Pad Key - -The `key pad` key is a layout switch key. If pressed, it will put the keyboard -on the _key pad layout_ and stay there until key is pressed again. - -This is used to make the keyboard behave mostly like a **num pad keyboard**. - -## Notes -- Regardless in which layout you are, keys from other layouts are not - accessible. This means that if you are on the _key pad layout_, the left hand - will be pretty much unusable. - Of course that like anything else, there are exceptions to this rule. - Modifiers should remain accessible throughout the layers. -- The _shift key_ is, like the _function key_, also configured to have a sticky - behavior. -- All sticky keys have a timeout of 3 seconds. - -*/ -#define BASE 0 -#define KEYPAD 1 -#define FN 2 - -#define MACRO_TMUX_ESC 10 -#define MACRO_TMUX_PASTE 11 -#define MACRO_OSX_COPY 12 -#define MACRO_OSX_PASTE 13 - -#define M_TESC M(MACRO_TMUX_ESC) -#define M_TPASTE M(MACRO_TMUX_PASTE) -#define M_OSXCPY M(MACRO_OSX_COPY) -#define M_OSXPST M(MACRO_OSX_PASTE) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Base Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 | 2 | 3 | 4 | 5 | ESC | | Pwr | 6 | 7 | 8 | 9 | 0 | - _ | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Tab | Q | W | E | R | T | F16 | | F17 | Y | U | I | O | P | = + | - * |-----------+------+------+------+------+------| Meh | | Meh |------+------+------+------+------+-----------| - * | \ (Ctrl) | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " (Ctrl)| - * |-----------+------+------+------+------+------| F18 | | F19 |------+------+------+------+------+-----------| - * | LShift | Z | X | C | V | B | Hyper| | Hyper| N | M | , | . | / | RShift | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | FN | KPAD |LCtrl | LAlt | LGui | | RGui | RAlt | RCtrl| KPAD | FN | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | M(0) | M(1) | | M(2) | M(3) | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * |Backsp| Del |------| |------| Enter| Space| - * | | | End | | PgDn | | | - * `--------------------' `--------------------' - * - * M(0) = Ctrk+A Esc - * (this is used to issue the Esc key to the Tmux application) - * M(1) = Ctrk+A P - * (this is used to issue the Paste key to the Tmux application) - * M(2) = Cmd+C - * M(3) = Cmd+V - */ -[BASE]=KEYMAP(//left half - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_F16), - CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_FN2, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_F18), - KC_FN1, TG(KEYPAD), KC_LCTRL, KC_LALT, KC_LGUI, - M_TESC, M_TPASTE, - KC_HOME, - KC_BSPC, KC_DELT, KC_END, - //right half - KC_POWER, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MEH_T(KC_F17), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), - ALL_T(KC_F19), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN2, - KC_RGUI, KC_RALT, CTL_T(KC_LBRC), KC_FN3, KC_FN1, - M_OSXCPY, M_OSXPST, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC), - -/* Keymap 1: KeyPad Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | LClk | RClk | MClk | | | | BTab | Clear| / | * | ^ | ( | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | M.Accel 2 | |ScrlUp| U |ScrlDn| | | | Tab | 7 | 8 | 9 | + | ) | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | M.Accel 1 | | L | D | R | |------| |------| 4 | 5 | 6 | - | | | - * |-----------+------+------+------+------+------| | |Return|------+------+------+------+------+-----------| - * | M.Accel 0 | |ScrlL | |ScrlR | | | | | 1 | 2 | 3 | = | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | XXXX | | | | | 0 | . | , | XXXX | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | XXXX | | - * | | |------| |------| XXXX | | - * | | | | | | XXXX | | - * `--------------------' `--------------------' - */ -[KEYPAD]=KEYMAP(//left half - KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, - KC_MS_ACCEL2, KC_NO, KC_MS_WH_UP, KC_MS_U, KC_MS_WH_DOWN, KC_NO, KC_NO, - KC_MS_ACCEL1, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, - KC_MS_ACCEL0, KC_NO, KC_MS_WH_LEFT, KC_NO, KC_MS_WH_RIGHT, 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, - //right half - LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH, KC_KP_ASTERISK, KC_CIRCUMFLEX, KC_LPRN, KC_NO, - KC_TAB, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_RPRN, KC_NO, - KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, KC_NO, KC_NO, - KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_EQUAL, KC_NO, KC_NO, - KC_KP_0, KC_KP_DOT, KC_KP_COMMA, KC_TRNS, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_TRNS, KC_NO), - -/* Keymap 2: Functions Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Vol. Up | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | Stop | Rw | Rec | FF | | XXXX | | XXXX | | | | | | Vol. Down | - * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| - * | CapsLock | Eject| Prev | Play | Next | |------| |------| Left | Down | Up | Right| | Mute | - * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| - * | L Shift | | | | | | XXXX | | XXXX | | | | | | R Shift | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | XXXXX | | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | | XXXXX | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - * - * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer. - */ -[FN]=KEYMAP(//left half - KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_NO, KC_MEDIA_STOP, KC_MEDIA_REWIND, KC_MEDIA_SELECT, KC_MEDIA_FAST_FORWARD, KC_NO, KC_TRNS, - KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO, - //right half - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, - KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_MUTE, - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, - KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO)}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_ONESHOT(FN), - [2] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. - [3] = ACTION_LAYER_TAP_KEY(KEYPAD, KC_RBRC), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function - switch(id) { - case MACRO_TMUX_ESC: - if (record->event.pressed) { - return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END); - } - return MACRO(U(ESC), END); - case MACRO_TMUX_PASTE: - if (record->event.pressed) { - return MACRO(D(LCTRL), T(A), U(LCTRL), D(P), END); - } - return MACRO(U(P), END); - case MACRO_OSX_COPY: - if (record->event.pressed) { - return MACRO(D(LGUI), D(C), END); - } - return MACRO(U(C), U(LGUI), END); - case MACRO_OSX_PASTE: - if (record->event.pressed) { - return MACRO(D(LGUI), D(V), END); - } - return MACRO(U(V), U(LGUI), END); - } - return MACRO_NONE; -}; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { -}; - -uint8_t current_layer = BASE; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - ergodox_led_all_off(); - ergodox_led_all_set(LED_BRIGHTNESS_LO); - - switch (layer) { - case BASE: - current_layer = BASE; - break; - case KEYPAD: - current_layer = KEYPAD; - break; - default: - // none - break; - } - - // layer leds - if (current_layer == KEYPAD) { - ergodox_right_led_3_on(); - } - - // capslock - if (host_keyboard_leds() & (3<mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && // is shift pressed and there is no other - !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) || // modifier being pressed as well - (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) { // or the one shot shift didn't timed out - ergodox_right_led_1_set(LED_BRIGHTNESS_HI); - ergodox_right_led_1_on(); - } -}; diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk b/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk deleted file mode 100644 index e757557bda..0000000000 --- a/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk +++ /dev/null @@ -1,4 +0,0 @@ -# I don't want my keyboard blinking lights when is suppose to be asleep. -SLEEP_LED_ENABLE = no - -CONFIG_H = keymaps/$(KEYMAP)/config.h diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/readme.md b/keyboards/ergodox_ez/keymaps/townk_osx/readme.md deleted file mode 100644 index c2853ca173..0000000000 --- a/keyboards/ergodox_ez/keymaps/townk_osx/readme.md +++ /dev/null @@ -1,77 +0,0 @@ -# Townk's Keymap - -Trying to take care of an enjury on my arm I borrow an ergonomic keyboard from -a frient ([Kinesis Advantage](http://www.kinesis-ergo.com/shop/advantage-pro-for-pc-mac/)). - -I really enjoyed my time with it but there were some anoyancies: - -* The curvature on the keys bothered me since I'm a Vim user and using the - motion keys on my editor was awkard. -* I had to spend too much time remapping the keyboard to make some symbol keys - more accessible to me. -* The fact that my hands had to stay close to each other was a bit stressfull - to my sholders. - -After a long research I find out that Ergodox EZ would be perfect for my needs -and purchase one. Before the keyboard even got in my hands I started to think -on the layout I would use on it and soon enough I planed couple adjustments -from the Kinesis I was using so far. - -## The layout - -Here are the layout mapping in images so you can have a glimpse on it: - -![Base Layout](townk_osx_base.png) -![fn Layout](townk_osx_fn.png) -![Keypad & Mouse Layout](townk_osx_keypad.png) - -Notice that, differently from the default behavior, my layer keys are not transparent -by default, which means that if you press any non-labeled white key, nothing will be -handled to the OS. - -### One shot keys - -It all started with the access to the function keys (F1, F2, F3...), since -those keys are located on a different layer I needed a way to press them with -minimal effort without disrupting my flow. - -For me, togglihg a layer to press a button and than toggle it back is a waste -of time (although I admit it's a single tap from what I have), so I decided to -do it as a one shot key. I could press it and the next pressed key would be -handled by the target layer which just after it delivers the key to the OS it -would get back to the previous layer. - -After setting up my layout to do just that I realized that occasionally I -would stop myseld on the middle of the process and the one shot layer would be -still triggered until I press any other key. So to prevent me from tapping -keys I don't want I added a timeout of 3 seconds for the one shot actions. - -Ultimately I tested the shift key as a one shot one and really like it, so -here you have it, all the one shot keys on my layout. - -## Glossary - -If you're not familiar with the Mac symbols used on some keys, here is a -reference to them: - -| Symbol | Description | -| :----: | ------------------- | -| ⌘ | Command | -| ⇪ | Caps Lock | -| ⇧ | Shift | -| ⌥ | Option (alt) | -| ⎋ | Esc | -| ⇥ | Tab forward | -| ⇤ | Tab backward | -| ⌃ | Control | -| ␣ | Space | -| ⌫ | Backspace | -| ⌦ | Delete | -| ⏎ | Enter | -| ⌤ | Return | -| ⌽ | Power on/off button | -| ↖ | Home | -| ↘ | End | -| ⇞ | Page up | -| ⇟ | Page down | -| ⌧ | Clear | diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png deleted file mode 100644 index f9bc8b443a..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png deleted file mode 100644 index 983b723480..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png deleted file mode 100644 index 8f04b4327d..0000000000 Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/twey/keymap.c b/keyboards/ergodox_ez/keymaps/twey/keymap.c deleted file mode 100644 index 019930f2a2..0000000000 --- a/keyboards/ergodox_ez/keymaps/twey/keymap.c +++ /dev/null @@ -1,221 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "keymap_plover.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define STEN 2 // steno -#define MDIA 3 // media keys - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,---------------------------------------------------. ,---------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | STEN | | NONE | 6 | 7 | 8 | 9 | 0 | \ | - * |--------+------+------+------+-------+-------------| |-------+------+------+------+------+------+--------| - * | Del | ' | , | . | P | Y | Esc | | Caps | F | G | C | R | L | / | - * |--------+------+------+------+-------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | O | E | U | I |------| |-------| D | H | T | N | S | - | - * |--------+------+------+------+-------+------| Tab | | Enter |------+------+------+------+------+--------| - * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | - * `--------+------+------+------+-------+-------------' `--------------+------+------+------+------+--------' - * | L1 | NONE | Grv | Left | Right | | Up | Down | [ | ] | L1 | - * `-----------------------------------' `----------------------------------' - * ,--------------. ,---------------. - * | PgUp | PgDn | | Home | End | - * ,------|-------|------| |-------+-------+------. - * | | | NONE | | AltGr | | | - * | Alt | Enter |------| |-------| Space | Ctrl | - * | | | Supr | | ~MDIA | | | - * `---------------------' `----------------------' - */ -// 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, M(0), - KC_DELT, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_ESC, - KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_TAB, - MO(SYMB), KC_NO, KC_GRV, KC_LEFT,KC_RGHT, - KC_PGUP,KC_PGDN, - KC_NO, - KC_LALT,KC_ENT ,KC_LGUI, - // right hand - KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, - KC_CAPS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z , KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB), - KC_HOME, KC_END, - KC_RALT, - MO(MDIA),KC_SPC,KC_RCTL - ), -/* 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 -), - -[STEN] = KEYMAP( // layout: layer 2: Steno for Plover - // left hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, - KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR, - KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, - KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, - KC_TRNS,KC_NO, KC_NO, KC_TRNS, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - PV_A, PV_O, KC_NO, - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - PV_STAR, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, - PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, - PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, - KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, - KC_NO, KC_NO, - KC_NO, - KC_TRNS,PV_E, PV_U -), - -/* Keymap 3: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | Back | | Frwd | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Prev | Play | Next | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// 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_WBAK, KC_TRNS, KC_WFWD, KC_TRNS, KC_TRNS, - KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(MDIA) // FN1 - Momentary Layer 3 (Media) -}; - -void toggle_steno(int pressed) -{ - uint8_t layer = biton32(layer_state); - - if (pressed) { - if (layer != STEN) layer_on(STEN); else layer_off(STEN); - - register_code(PV_LP); - register_code(PV_LH); - register_code(PV_LR); - register_code(PV_O); - register_code(PV_RL); - register_code(PV_RG); - } else { - unregister_code(PV_LP); - unregister_code(PV_LH); - unregister_code(PV_LR); - unregister_code(PV_O); - unregister_code(PV_RL); - unregister_code(PV_RG); - } -} - -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: - toggle_steno(record->event.pressed); - 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) { - uint32_t layer0 = layer_state & (1UL << 0), - layer1 = layer_state & (1UL << 1), - layer2 = layer_state & (1UL << 2), - layer3 = layer_state & (1UL << 3); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - - if (layer1) ergodox_right_led_1_on(); - if (layer2) ergodox_right_led_2_on(); - if (layer3) ergodox_right_led_3_on(); -}; diff --git a/keyboards/ergodox_ez/keymaps/twey/readme.md b/keyboards/ergodox_ez/keymaps/twey/readme.md deleted file mode 100644 index 979e4261e5..0000000000 --- a/keyboards/ergodox_ez/keymaps/twey/readme.md +++ /dev/null @@ -1,17 +0,0 @@ -# Twey's Home Configuration -## Layers -- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all - modifiers on thumb keys, as well as return and space. -- Layer 1: Default symbol layout. -- Layer 2: Plover-oriented stenography layer. -- Layer 3: Extended media/mouse layout. - -## Unusual features -The Plover key (top right key on the left half) also sends my Plover -‘toggle’ chord (SH-FT) when pressed, as well as toggling the steno -layer, so you can toggle between steno and typing modes with a single -keypress. - -If you want to use this feature, you'll need to add the -`commands.json` dictionary to your Plover dictionaries, or define the -toggle stroke (`PHROLG`) yourself. diff --git a/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c deleted file mode 100644 index 8effa53b26..0000000000 --- a/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c +++ /dev/null @@ -1,366 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -// readme -// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer. -// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of -// blanks so still discovering what I like. -// If you aren't familiar with a dead key, the idea is that you tap the dead key which switches the layout. the next key you hit -// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I -// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do. - - -// TODO: Define layer names that make sense for the ErgoDox EZ. -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys -#define DEAD 3 // dead version of the symbols layer - -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 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | D | R | W | B | L1 | | L1 | J | F | U | P | ; | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Hyper | A | S | H | T | G |------| |------| Y | N | E | O | I | ' | - * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | M | C | V | | | | K | L | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | CTRL | OPT | CMD | | Left | Down | Up | Right| L3 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * |Bckspc| Space|------| |------| Space |Enter | - * | | | 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(1), - ALL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_NO, - KC_NO, KC_NO, KC_LCTL,KC_LALT,KC_LGUI, - KC_NO, KC_NO, - KC_HOME, - KC_BSPC,KC_SPC,KC_END, - // right hand - KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, - KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, - MEH_T(KC_NO),KC_K, KC_L, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, KC_FN4, - KC_NO, KC_NO, - KC_PGUP, - KC_PGDN,KC_SPC,KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_PERC, KC_AMPR, LSFT(KC_SLSH), LSFT(KC_EQL), KC_AT, KC_TRNS, - KC_TRNS, KC_SLSH, KC_LPRN, KC_EQL, KC_0, LSFT(KC_LBRC), - KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_PIPE, 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_DLR, KC_UNDERSCORE, KC_LBRC, KC_RBRC, KC_EXLM, KC_F12, - KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_QUOT, - KC_TRNS, KC_SLSH, KC_2, KC_3, KC_4, KC_5, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 -), -/* Keymap 4: Dead Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[DEAD] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, M(100), M(101), M(102), M(103), M(104), KC_TRNS, - KC_TRNS, M(109), M(110), M(111), M(112), M(113), - KC_TRNS, M(120), M(121), M(122), M(123), M(124), 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, M(105), M(106), M(107), M(108), M(130), KC_F12, - M(114), M(115), M(116), M(117), M(118), M(119), - KC_TRNS, M(125), M(126), M(127), M(128), M(129), 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_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) - [2] = ACTION_LAYER_ON(BASE,0), // FN2 - Go back to the base layer - [3] = ACTION_LAYER_ON(DEAD,0), - [4] = ACTION_LAYER_TOGGLE(DEAD), -}; - -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 100: - layer_clear(); - return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END); - break; - case 101: - layer_clear(); - return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END); - break; - case 102: - layer_clear(); - return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END); - break; - case 103: - layer_clear(); - return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END); - break; - case 104: - layer_clear(); - return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END); - break; - case 105: - layer_clear(); - return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END); - break; - case 106: - layer_clear(); - return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END); - break; - case 107: - layer_clear(); - return MACRODOWN(T(LBRC), T(FN4), END); - break; - case 108: - layer_clear(); - return MACRODOWN(T(RBRC), T(FN4), END); - break; - case 130: - layer_clear(); - return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END); - break; - case 109: - layer_clear(); - return MACRODOWN(T(SLSH), T(FN4), END); - break; - case 110: - layer_clear(); - return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END); - break; - case 111: - layer_clear(); - return MACRODOWN(T(EQL), T(FN4), END); - break; - case 112: - layer_clear(); - return MACRODOWN(T(0), T(FN4), END); - break; - case 113: - layer_clear(); - return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END); - break; - case 114: - layer_clear(); - return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END); - break; - case 115: - layer_clear(); - return MACRODOWN(T(1), T(FN4), END); - break; - case 116: - layer_clear(); - return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END); - break; - case 117: - layer_clear(); - return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END); - break; - case 118: - layer_clear(); - return MACRODOWN(T(MINS), T(FN4), END); - break; - case 119: - layer_clear(); - return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END); - break; - case 120: - layer_clear(); - return MACRODOWN(T(6), T(FN4), END); - break; - case 121: - layer_clear(); - return MACRODOWN(T(7), T(FN4), END); - break; - case 122: - layer_clear(); - return MACRODOWN(T(8), T(FN4), END); - break; - case 123: - layer_clear(); - return MACRODOWN(T(9), T(FN4), END); - break; - case 124: - layer_clear(); - return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END); - break; - case 125: - layer_clear(); - return MACRODOWN(T(BSLS), T(FN4), END); - break; - case 126: - layer_clear(); - return MACRODOWN(T(2), T(FN4), END); - break; - case 127: - layer_clear(); - return MACRODOWN(T(3), T(FN4), END); - break; - case 128: - layer_clear(); - return MACRODOWN(T(4), T(FN4), END); - break; - case 129: - layer_clear(); - return MACRODOWN(T(5), T(FN4), END); - break; - - default: - return MACRO_NONE; - } - 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/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c deleted file mode 100644 index 3444152bc3..0000000000 --- a/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ /dev/null @@ -1,233 +0,0 @@ -#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 - -#define SGWK 0 // "sagewick", ⌘S ⌘⇥ -#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R -#define BBED 2 // BBEdit -#define TMNL 3 // Terminal -#define SAFA 4 // Safari -#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | L1 | | L1 | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ⌦ | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ⌫ | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' / L⌘ | - * |--------+------+------+------+------+------| L⌘ | | L⌘ |------+------+------+------+------+--------| - * | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / / ⌃| R⇧ | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | L⌃ | L⌥ | L⌘ | ← | → | | ↑ | ↓ | [ | ] | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,---------------. - * | `~ | '" | | ⎋ | ⌫ | - * ,------|------|------| |------+--------+------. - * | | | PgUp | | PgDn | | | - * | | ⌫ |------| |------| ⇥ |Enter | - * | | | L⌥ | | L⌃ | | | - * `--------------------' `----------------------' - */ -// 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, TG(SYMB), - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(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, - KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, - KC_GRV, KC_QUOT, - KC_PGUP, - KC_SPC,KC_BSPC,KC_LALT, - // right hand - TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC , - KC_ESC, KC_BSPC, - KC_PGDN, - KC_LCTL, KC_TAB, KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | [ | ] | { | } | " | | | | / | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | = | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | . | ← | → | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | Home | | | - * | | |------| |------| | | - * | | | | | End | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS, - KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, - KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, - KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_HOME, - KC_END , KC_TRNS, KC_TRNS -), -/* Keymap 2: Media keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | Home | | End | | | - * | | |------| |------| ⌘C | ⌘V | - * | | | | | ⌘X | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS, - KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_HOME, - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR, - KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, - LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, - KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) -), -}; - -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 SGWK: - if (record->event.pressed) { - return MACRO( - I(10), - D(LGUI), T(S), U(LGUI), - D(LGUI), T(TAB), U(LGUI), - END); - } - break; - case SGWF: - if (record->event.pressed) { - return MACRO( - I(10), - D(LGUI), T(S), U(LGUI), - D(LGUI), T(TAB), U(LGUI), - D(LGUI), T(R), U(LGUI), - END); - } - break; - case BBED: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(B), T(B), T(E), T(D), T(I), T(T), - T(ENT), - END); - } - break; - case TMNL: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L), - T(ENT), - END); - } - break; - case SAFA: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(S), T(A), T(F), T(A), T(R), T(I), - T(ENT), - 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) { - - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown deleted file mode 100644 index 7bce7c6909..0000000000 --- a/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown +++ /dev/null @@ -1,45 +0,0 @@ -# The Zweihander Layout - -NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”. - -This layout is tuned for people who… - - -## use OS X - -This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts. - - -## mouse left-handed while doing other things with the right hand - -I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder: - -- Close Window (⌘W) -- Back (⌘[) -- Forward (⌘]) -- Open and Close Parent Folder (⌥⌘↓) -- Go Up and Close Just-Left Folder (⌥⌘↑) -- Cycle through open windows in current application (⌘\` and ⌘⇧\`) -- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥) -- Space (page down in browsers; Quick Look in the Finder) -- Shift-Space (page up in web browsers) - -Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word. - - -## use lots of modifier keys in OS X menu-item shortcuts - -I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include: - -- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫) -- Shut Down Without Asking for Confirmation (⇧⌥⌘ power) - - -## use Emacs-style shortcuts - -I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key. - - -## use spreadsheets - -All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c deleted file mode 100644 index dc29cf5cd0..0000000000 --- a/keyboards/ergodox_ez/matrix.c +++ /dev/null @@ -1,382 +0,0 @@ -/* - -Note for ErgoDox EZ customizers: Here be dragons! -This is not a file you want to be messing with. -All of the interesting stuff for you is under keymaps/ :) -Love, Erez - -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include "wait.h" -#include "action_layer.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "ergodox_ez.h" -#include "i2cmaster.h" -#ifdef DEBUG_MATRIX_SCAN_RATE -#include "timer.h" -#endif - -/* - * This constant define not debouncing time in msecs, but amount of matrix - * scan loops which should be made to get stable debounced results. - * - * On Ergodox matrix scan rate is relatively low, because of slow I2C. - * Now it's only 317 scans/second, or about 3.15 msec/scan. - * According to Cherry specs, debouncing time is 5 msec. - * - * And so, there is no sense to have DEBOUNCE higher than 2. - */ - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(uint8_t row); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -static uint8_t mcp23018_reset_loop; - -#ifdef DEBUG_MATRIX_SCAN_RATE -uint32_t matrix_timer; -uint32_t matrix_scan_count; -#endif - - -__attribute__ ((weak)) -void matrix_init_user(void) {} - -__attribute__ ((weak)) -void matrix_scan_user(void) {} - -__attribute__ ((weak)) -void matrix_init_kb(void) { - matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { - matrix_scan_user(); -} - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // initialize row and col - - mcp23018_status = init_mcp23018(); - - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - - matrix_init_kb(); - -} - -void matrix_power_up(void) { - mcp23018_status = init_mcp23018(); - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - -} - -uint8_t matrix_scan(void) -{ - if (mcp23018_status) { // if there was an error - if (++mcp23018_reset_loop == 0) { - // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans - // this will be approx bit more frequent than once per second - print("trying to reset mcp23018\n"); - mcp23018_status = init_mcp23018(); - if (mcp23018_status) { - print("left side not responding\n"); - } else { - print("left side attached\n"); - ergodox_blink_all_leds(); - } - } - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_scan_count++; - - uint32_t timer_now = timer_read32(); - if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) { - print("matrix scan frequency: "); - pdec(matrix_scan_count); - print("\n"); - - matrix_timer = timer_now; - matrix_scan_count = 0; - } -#endif - - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(i); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - wait_us(1); - // this should be wait_ms(1) but has been left as-is at EZ's request - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - matrix_scan_quantum(); - - return 1; -} - -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1< http://jump.to/fleury -* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device with hardware TWI -* Usage: API compatible with I2C Software Library i2cmaster.h -**************************************************************************/ -#include -#include - -#include - - -/* define CPU frequency in Mhz here if not defined in Makefile */ -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -/* I2C clock in Hz */ -#define SCL_CLOCK 400000L - - -/************************************************************************* - Initialization of the I2C bus interface. Need to be called only once -*************************************************************************/ -void i2c_init(void) -{ - /* initialize TWI clock - * minimal values in Bit Rate Register (TWBR) and minimal Prescaler - * bits in the TWI Status Register should give us maximal possible - * I2C bus speed - about 444 kHz - * - * for more details, see 20.5.2 in ATmega16/32 secification - */ - - TWSR = 0; /* no prescaler */ - TWBR = 10; /* must be >= 10 for stable operation */ - -}/* i2c_init */ - - -/************************************************************************* - Issues a start condition and sends address and transfer direction. - return 0 = device accessible, 1= failed to access device -*************************************************************************/ -unsigned char i2c_start(unsigned char address) -{ - uint8_t twst; - - // send START condition - TWCR = (1<= 0: - if section['name'] == 'layout_config': - config.update(loads("\n".join( - section['code_lines'] - ))) - elif section['sub_name'].startswith('layer'): - layer_name = section['sub_name'] - config['layer_lines'][layer_name] = section['code_lines'] - - reset_section() - - def amend_section(line_index, line): - section['end_line'] = line_index - section['code_lines'].append(line) - - config = DEFAULT_CONFIG.copy() - config.update({ - 'layer_lines': collections.OrderedDict(), - 'macro_ids': {'UM'}, - 'unicode_macros': {}, - }) - - section = {} - reset_section() - - with io.open(path, encoding="utf-8") as fh: - for i, line in enumerate(fh): - if line.startswith("#"): - start_section(i, line) - elif line.startswith(" "): - amend_section(i, line[4:]) - else: - # TODO: maybe parse description - pass - - end_section() - assert 'layout' in config - return config - -# header file parsing - -IF0_RE = re.compile(r""" - ^ - #if 0 - $.*? - #endif -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -COMMENT_RE = re.compile(r""" - /\* - .*? - \*/" -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def read_header_file(path): - with io.open(path, encoding="utf-8") as fh: - data = fh.read() - data, _ = COMMENT_RE.subn("", data) - data, _ = IF0_RE.subn("", data) - return data - - -def regex_partial(re_str_fmt, flags): - def partial(*args, **kwargs): - re_str = re_str_fmt.format(*args, **kwargs) - return re.compile(re_str, flags) - return partial - - -KEYDEF_REP = regex_partial(r""" - #define - \s - ( - (?:{}) # the prefixes - (?:\w+) # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_RE = re.compile(r""" - ( - enum - \s\w+\s - \{ - .*? # the enum content - \} - ; - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_KEY_REP = regex_partial(r""" - ( - {} # the prefixes - \w+ # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def parse_keydefs(config, data): - prefix_options = "|".join(config['key_prefixes']) - keydef_re = KEYDEF_REP(prefix_options) - enum_key_re = ENUM_KEY_REP(prefix_options) - for match in keydef_re.finditer(data): - yield match.groups()[0] - - for enum_match in ENUM_RE.finditer(data): - enum = enum_match.groups()[0] - for key_match in enum_key_re.finditer(enum): - yield key_match.groups()[0] - - -def parse_valid_keys(config, out_path): - basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) - dirpaths = [] - subpaths = [] - while len(subpaths) < 6: - path = os.path.join(basepath, *subpaths) - dirpaths.append(path) - dirpaths.append(os.path.join(path, "tmk_core", "common")) - dirpaths.append(os.path.join(path, "quantum")) - subpaths.append('..') - - includes = set(config['keymaps_includes']) - includes.add("keycode.h") - - valid_keycodes = set() - for dirpath, include in it.product(dirpaths, includes): - include_path = os.path.join(dirpath, include) - if os.path.exists(include_path): - header_data = read_header_file(include_path) - valid_keycodes.update( - parse_keydefs(config, header_data) - ) - return valid_keycodes - - -# Keymap Parsing - -def iter_raw_codes(layer_lines, filler, separator): - filler_re = re.compile("[" + filler + " ]") - for line in layer_lines: - line, _ = filler_re.subn("", line.strip()) - if not line: - continue - codes = line.split(separator) - for code in codes[1:-1]: - yield code - - -def iter_indexed_codes(raw_codes, key_indexes): - key_rows = {} - key_indexes_flat = [] - - for row_index, key_indexes in enumerate(key_indexes): - for key_index in key_indexes: - key_rows[key_index] = row_index - key_indexes_flat.extend(key_indexes) - assert len(raw_codes) == len(key_indexes_flat) - for raw_code, key_index in zip(raw_codes, key_indexes_flat): - # we keep track of the row mostly for layout purposes - yield raw_code, key_index, key_rows[key_index] - - -LAYER_CHANGE_RE = re.compile(r""" - (DF|TG|MO)\(\d+\) -""", re.VERBOSE) - - -MACRO_RE = re.compile(r""" - M\(\w+\) -""", re.VERBOSE) - - -UNICODE_RE = re.compile(r""" - U[0-9A-F]{4} -""", re.VERBOSE) - - -NON_CODE = re.compile(r""" - ^[^A-Z0-9_]$ -""", re.VERBOSE) - - -def parse_uni_code(raw_code): - macro_id = "UC_" + ( - unicodedata.name(raw_code) - .replace(" ", "_") - .replace("-", "_") - ) - code = "M({})".format(macro_id) - uc_hex = "{:04X}".format(ord(raw_code)) - return code, macro_id, uc_hex - - -def parse_key_code(raw_code, key_prefixes, valid_keycodes): - if raw_code in valid_keycodes: - return raw_code - - for prefix in key_prefixes: - code = prefix + raw_code - if code in valid_keycodes: - return code - - -def parse_code(raw_code, key_prefixes, valid_keycodes): - if not raw_code: - return 'KC_TRNS', None, None - - if LAYER_CHANGE_RE.match(raw_code): - return raw_code, None, None - - if MACRO_RE.match(raw_code): - macro_id = raw_code[2:-1] - return raw_code, macro_id, None - - if UNICODE_RE.match(raw_code): - hex_code = raw_code[1:] - return parse_uni_code(chr(int(hex_code, 16))) - - if NON_CODE.match(raw_code): - return parse_uni_code(raw_code) - - code = parse_key_code(raw_code, key_prefixes, valid_keycodes) - return code, None, None - - -def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): - keymap = {} - raw_codes = list(iter_raw_codes( - layer_lines, config['filler'], config['separator'] - )) - indexed_codes = iter_indexed_codes(raw_codes, key_indexes) - key_prefixes = config['key_prefixes'] - for raw_code, key_index, row_index in indexed_codes: - code, macro_id, uc_hex = parse_code( - raw_code, key_prefixes, valid_keycodes - ) - # TODO: line numbers for invalid codes - err_msg = "Could not parse key '{}' on row {}".format( - raw_code, row_index - ) - assert code is not None, err_msg - # print(repr(raw_code), repr(code), macro_id, uc_hex) - if macro_id: - config['macro_ids'].add(macro_id) - if uc_hex: - config['unicode_macros'][macro_id] = uc_hex - keymap[key_index] = (code, row_index) - return keymap - - -def parse_keymaps(config, valid_keycodes): - keymaps = collections.OrderedDict() - key_indexes = config.get( - 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] - ) - # TODO: maybe validate key_indexes - - for layer_name, layer_lines, in config['layer_lines'].items(): - keymaps[layer_name] = parse_keymap( - config, key_indexes, layer_lines, valid_keycodes - ) - return keymaps - -# keymap.c output - -USERCODE = """ -// 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) { - case L1: - ergodox_right_led_1_on(); - break; - case L2: - ergodox_right_led_2_on(); - break; - case L3: - ergodox_right_led_3_on(); - break; - case L4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - break; - case L5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - // case L6: - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - // case L7: - // ergodox_right_led_1_on(); - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - default: - ergodox_board_led_off(); - break; - } -}; -""" - -MACROCODE = """ -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 -#define UC_MODE_OSX 2 - -// TODO: allow default mode to be configured -static uint16_t unicode_mode = UC_MODE_WIN; - -uint16_t hextokeycode(uint8_t hex) {{ - if (hex == 0x0) {{ - return KC_P0; - }} - if (hex < 0xA) {{ - return KC_P1 + (hex - 0x1); - }} - return KC_A + (hex - 0xA); -}} - -void unicode_action_function(uint16_t hi, uint16_t lo) {{ - switch (unicode_mode) {{ - case UC_MODE_WIN: - register_code(KC_LALT); - - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LALT); - break; - case UC_MODE_LINUX: - register_code(KC_LCTL); - register_code(KC_LSFT); - - register_code(KC_U); - unregister_code(KC_U); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - case UC_MODE_OSX: - break; - }} -}} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ - if (!record->event.pressed) {{ - return MACRO_NONE; - }} - // MACRODOWN only works in this function - switch(id) {{ - case UM: - unicode_mode = (unicode_mode + 1) % 2; - break; -{macro_cases} -{unicode_macro_cases} - default: - break; - }} - return MACRO_NONE; -}}; -""" - - -UNICODE_MACRO_TEMPLATE = """ -case {macro_id}: - unicode_action_function(0x{hi:02x}, 0x{lo:02x}); - break; -""".strip() - - -def unicode_macro_cases(config): - for macro_id, uc_hex in config['unicode_macros'].items(): - hi = int(uc_hex, 16) >> 8 - lo = int(uc_hex, 16) & 0xFF - unimacro_keys = ", ".join( - "T({})".format( - "KP_" + digit if digit.isdigit() else digit - ) for digit in uc_hex - ) - yield UNICODE_MACRO_TEMPLATE.format( - macro_id=macro_id, hi=hi, lo=lo - ) - - -def iter_keymap_lines(keymap, row_indents=None): - col_widths = {} - col = 0 - # first pass, figure out the column widths - prev_row_index = None - for code, row_index in keymap.values(): - if row_index != prev_row_index: - col = 0 - if row_indents: - col = row_indents[row_index] - col_widths[col] = max(len(code), col_widths.get(col, 0)) - prev_row_index = row_index - col += 1 - - # second pass, yield the cell values - col = 0 - prev_row_index = None - for key_index in sorted(keymap): - code, row_index = keymap[key_index] - if row_index != prev_row_index: - col = 0 - yield "\n" - if row_indents: - for indent_col in range(row_indents[row_index]): - pad = " " * (col_widths[indent_col] - 4) - yield (" /*-*/" + pad) - col = row_indents[row_index] - else: - yield pad - yield " {}".format(code) - if key_index < len(keymap) - 1: - yield "," - # This will be yielded on the next iteration when - # we know that we're not at the end of a line. - pad = " " * (col_widths[col] - len(code)) - prev_row_index = row_index - col += 1 - - -def iter_keymap_parts(config, keymaps): - # includes - for include_path in config['keymaps_includes']: - yield '#include "{}"\n'.format(include_path) - - yield "\n" - - # definitions - for i, macro_id in enumerate(sorted(config['macro_ids'])): - yield "#define {} {}\n".format(macro_id, i) - - yield "\n" - - for i, layer_name in enumerate(config['layer_lines']): - yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) - - yield "\n" - - # keymaps - yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" - - for i, layer_name in enumerate(config['layer_lines']): - # comment - layer_lines = config['layer_lines'][layer_name] - prefixed_lines = " * " + " * ".join(layer_lines) - yield "/*\n{} */\n".format(prefixed_lines) - - # keymap codes - keymap = keymaps[layer_name] - row_indents = ROW_INDENTS.get(config['layout']) - keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) - yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) - - yield "};\n\n" - - # no idea what this is for - yield "const uint16_t PROGMEM fn_actions[] = {};\n" - - # macros - yield MACROCODE.format( - macro_cases="", - unicode_macro_cases="\n".join(unicode_macro_cases(config)), - ) - - # TODO: dynamically create blinking lights - yield USERCODE - - -def main(argv=sys.argv[1:]): - if not argv or '-h' in argv or '--help' in argv: - print(__doc__) - return 0 - - in_path = os.path.abspath(argv[0]) - if not os.path.exists(in_path): - print("No such file '{}'".format(in_path)) - return 1 - - if len(argv) > 1: - out_path = os.path.abspath(argv[1]) - else: - dirname = os.path.dirname(in_path) - out_path = os.path.join(dirname, "keymap.c") - - config = parse_config(in_path) - valid_keys = parse_valid_keys(config, out_path) - keymaps = parse_keymaps(config, valid_keys) - - with io.open(out_path, mode="w", encoding="utf-8") as fh: - for part in iter_keymap_parts(config, keymaps): - fh.write(part) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/keyboards/ergodox_ez/util/readme.md b/keyboards/ergodox_ez/util/readme.md deleted file mode 100644 index 26c5e5d99c..0000000000 --- a/keyboards/ergodox_ez/util/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# ErgoDox EZ Utilities - -The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option. diff --git a/keyboards/infinity_ergodox/MEMO.txt b/keyboards/infinity_ergodox/MEMO.txt deleted file mode 100644 index e2886aa002..0000000000 --- a/keyboards/infinity_ergodox/MEMO.txt +++ /dev/null @@ -1,385 +0,0 @@ -flabbergast's TMK/ChibiOS port -============================== -2015/10/16 - - -Build ------ -$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git - -$ cd tmk_keyboard -$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios -or -$ cd tmk_keyboard/tmk_core/tool/chibios -$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios - -$ cd tmk_keyboard/keyboard/infinity_chibios -$ make - - - - -Chibios Configuration ---------------------- -halconf.h: for HAL configuration - placed in project directory - read in chibios/os/hal/hal.mk - included in chibios/os/hal/include/hal.h -mcuconf.h: for MCU configuration - placed in project directory - included in halconf.h - - -Chibios Term ------------- -PAL = Port Abstraction Layer - palWritePad - palReadPad - palSetPad - chibios/os/hal/include/pal.h - -LLD = Low Level Driver - - -Makefile --------- - # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) - MCU_FAMILY = KINETIS - MCU_SERIES = KL2x - - # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ - # or /ld/ - MCU_LDSCRIPT = MKL26Z64 - - # - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ - MCU_STARTUP = kl2x - - # Board: it should exist either in /os/hal/boards/ - # or /boards - BOARD = PJRC_TEENSY_LC - - MCU = cortex-m0 - - # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 - ARMV = 6 - - -halconf.h ---------- - - -mcuconf.h ---------- - - -chconf.h --------- - - -ld script ---------- ---- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900 -+++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900 -@@ -27,7 +27,8 @@ - { - flash0 : org = 0x00000000, len = 0xc0 - flashcfg : org = 0x00000400, len = 0x10 -- flash : org = 0x00000410, len = 64k - 0x410 -+ flash : org = 0x00000410, len = 62k - 0x410 -+ eeprom_emu : org = 0x0000F800, len = 2k - ram : org = 0x1FFFF800, len = 8k - } - -@@ -35,6 +36,10 @@ - __ram_size__ = LENGTH(ram); - __ram_end__ = __ram_start__ + __ram_size__; - -+__eeprom_workarea_start__ = ORIGIN(eeprom_emu); -+__eeprom_workarea_size__ = LENGTH(eeprom_emu); -+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; -+ - SECTIONS - { - . = 0; - - - -Configuration/Startup for Infinity 60% --------------------------------------- -Configuration: - - -Clock: -Inifinity - FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz - Clock dividor: - SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock - SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock - SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock - Internal reference clock: - MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL - MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable - FLL multipilication: - MCG_C4[DMX32] = 1 - MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz - -chibios/os/hal/ports/KINETIS/K20x/hal_lld.c - k20x_clock_init(): called in __early_init() defined in board.c - disable watchdog and configure clock - - configurable macros: - KINETIS_NO_INIT: whether init or not - KINETIS_MCG_MODE: clock mode - KINETIS_MCG_MODE_FEI - KINETIS_MCG_MODE_PEE - hal/ports/KINETIS/K20x/hal_lld.h - - -chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h - PALConfig pal_default_config - boardInit() - __early_init() - macro definitions for board infos, freq and mcu type - -chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c - -USB - - -Startup -------- - common/ports/ARMCMx/GCC/crt0_v[67]m.s - Reset_Handler: startup code - common/ports/ARMCMx/GCC/crt1.c - __core_init(): weak - __early_init(): weak - __late_init(): weak - __default_exit(): weak - called from Reset_Handler of crt0 - common/ports/ARMCMx/GCC/vector.c - common/ports/ARMCMx/GCC/ld/*.ld - -chibios/os/common/ports/ARMCMx/compilers/GCC/ -├── crt0_v6m.s -├── crt0_v7m.s -├── crt1.c -├── ld -│   ├── MK20DX128BLDR3.ld -│   ├── MK20DX128BLDR4.ld -│   ├── MK20DX128.ld -│   ├── MK20DX256.ld -│   ├── MKL25Z128.ld -│   ├── MKL26Z128.ld -│   ├── MKL26Z64.ld -│   └── STM32L476xG.ld -├── mk -│   ├── startup_k20x5.mk -│   ├── startup_k20x7.mk -│   ├── startup_k20x.mk -│   ├── startup_kl2x.mk -│   └── startup_stm32l4xx.mk -├── rules.ld -├── rules.mk -└── vectors.c - -chibios/os/hal/ -├── boards -│   ├── FREESCALE_FREEDOM_K20D50M -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── MCHCK_K20 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_3 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_3_1 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_LC -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── readme.txt -│   ├── simulator -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── ST_NUCLEO_F030R8 -│   │   ├── board.c -│   │   ├── board.h -│   │   ├── board.mk -│   │   └── cfg -│   │   └── board.chcfg -├── hal.mk -├── include -│   ├── adc.h -│   ├── can.h -│   ├── dac.h -│   ├── ext.h -│   ├── gpt.h -│   ├── hal_channels.h -│   ├── hal_files.h -│   ├── hal.h -│   ├── hal_ioblock.h -│   ├── hal_mmcsd.h -│   ├── hal_queues.h -│   ├── hal_streams.h -│   ├── i2c.h -│   ├── i2s.h -│   ├── icu.h -│   ├── mac.h -│   ├── mii.h -│   ├── mmc_spi.h -│   ├── pal.h -│   ├── pwm.h -│   ├── rtc.h -│   ├── sdc.h -│   ├── serial.h -│   ├── serial_usb.h -│   ├── spi.h -│   ├── st.h -│   ├── uart.h -│   └── usb.h -├── lib -│   └── streams -│   ├── chprintf.c -│   ├── chprintf.h -│   ├── memstreams.c -│   ├── memstreams.h -│   ├── nullstreams.c -│   └── nullstreams.h -├── osal -│   ├── nil -│   │   ├── osal.c -│   │   ├── osal.h -│   │   └── osal.mk -│   ├── os-less -│   │   └── ARMCMx -│   │   ├── osal.c -│   │   ├── osal.h -│   │   └── osal.mk -│   └── rt -│   ├── osal.c -│   ├── osal.h -│   └── osal.mk -├── ports -│   ├── AVR -│   ├── common -│   │   └── ARMCMx -│   │   ├── mpu.h -│   │   ├── nvic.c -│   │   └── nvic.h -│   ├── KINETIS -│   │   ├── K20x -│   │   │   ├── hal_lld.c -│   │   │   ├── hal_lld.h -│   │   │   ├── kinetis_registry.h -│   │   │   ├── platform.dox -│   │   │   ├── platform.mk -│   │   │   ├── pwm_lld.c -│   │   │   ├── pwm_lld.h -│   │   │   ├── spi_lld.c -│   │   │   └── spi_lld.h -│   │   ├── KL2x -│   │   │   ├── hal_lld.c -│   │   │   ├── hal_lld.h -│   │   │   ├── kinetis_registry.h -│   │   │   ├── platform.mk -│   │   │   ├── pwm_lld.c -│   │   │   └── pwm_lld.h -│   │   ├── LLD -│   │   │   ├── adc_lld.c -│   │   │   ├── adc_lld.h -│   │   │   ├── ext_lld.c -│   │   │   ├── ext_lld.h -│   │   │   ├── gpt_lld.c -│   │   │   ├── gpt_lld.h -│   │   │   ├── i2c_lld.c -│   │   │   ├── i2c_lld.h -│   │   │   ├── pal_lld.c -│   │   │   ├── pal_lld.h -│   │   │   ├── serial_lld.c -│   │   │   ├── serial_lld.h -│   │   │   ├── st_lld.c -│   │   │   ├── st_lld.h -│   │   │   ├── usb_lld.c -│   │   │   └── usb_lld.h -│   │   └── README.md -│   ├── LPC -│   ├── simulator -│   └── STM32 -├── src -│   ├── adc.c -│   ├── can.c -│   ├── dac.c -│   ├── ext.c -│   ├── gpt.c -│   ├── hal.c -│   ├── hal_mmcsd.c -│   ├── hal_queues.c -│   ├── i2c.c -│   ├── i2s.c -│   ├── icu.c -│   ├── mac.c -│   ├── mmc_spi.c -│   ├── pal.c -│   ├── pwm.c -│   ├── rtc.c -│   ├── sdc.c -│   ├── serial.c -│   ├── serial_usb.c -│   ├── spi.c -│   ├── st.c -│   ├── uart.c -│   └── usb.c -└── templates - ├── adc_lld.c - ├── adc_lld.h - ├── can_lld.c - ├── can_lld.h - ├── dac_lld.c - ├── dac_lld.h - ├── ext_lld.c - ├── ext_lld.h - ├── gpt_lld.c - ├── gpt_lld.h - ├── halconf.h - ├── hal_lld.c - ├── hal_lld.h - ├── i2c_lld.c - ├── i2c_lld.h - ├── i2s_lld.c - ├── i2s_lld.h - ├── icu_lld.c - ├── icu_lld.h - ├── mac_lld.c - ├── mac_lld.h - ├── mcuconf.h - ├── osal - │   ├── osal.c - │   ├── osal.h - │   └── osal.mk - ├── pal_lld.c - ├── pal_lld.h - ├── platform.mk - ├── pwm_lld.c - ├── pwm_lld.h - ├── rtc_lld.c - ├── rtc_lld.h - ├── sdc_lld.c - ├── sdc_lld.h - ├── serial_lld.c - ├── serial_lld.h - ├── spi_lld.c - ├── spi_lld.h - ├── st_lld.c - ├── st_lld.h - ├── uart_lld.c - ├── uart_lld.h - ├── usb_lld.c - └── usb_lld.h diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile deleted file mode 100644 index 7edc03d8cc..0000000000 --- a/keyboards/infinity_ergodox/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -# project specific files -SRC = matrix.c \ - led.c - -## chip/board settings -# - the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -# - For Teensies, FAMILY = KINETIS and SERIES is either -# KL2x (LC) or K20x (3.0,3.1,3.2). -# - For Infinity KB, SERIES = K20x -MCU_FAMILY = KINETIS -MCU_SERIES = K20x - -# Linker script to use -# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# - NOTE: a custom ld script is needed for EEPROM on Teensy LC -# - LDSCRIPT = -# - MKL26Z64 for Teensy LC -# - MK20DX128 for Teensy 3.0 -# - MK20DX256 for Teensy 3.1 and 3.2 -# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader -# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader -MCU_LDSCRIPT = MK20DX256BLDR8 - -# Startup code to use -# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -# - STARTUP = -# - kl2x for Teensy LC -# - k20x5 for Teensy 3.0 and Infinity 60% -# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox -MCU_STARTUP = k20x7 - -# Board: it should exist either in /os/hal/boards/ -# or /boards -# - BOARD = -# - PJRC_TEENSY_LC for Teensy LC -# - PJRC_TEENSY_3 for Teensy 3.0 -# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 -# - MCHCK_K20 for Infinity KB -#BOARD = MCHCK_K20 -BOARD = PJRC_TEENSY_3_1 - -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m4 - -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -# I.e. 6 for Teensy LC; 7 for Teensy 3.x -ARMV = 7 - -# Vector table for application -# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ -# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB -OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000 - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration -## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file -SERIAL_LINK_ENABLE = yes -VISUALIZER_ENABLE ?= yes -LCD_ENABLE ?= yes -LED_ENABLE ?= yes -LCD_BACKLIGHT_ENABLE ?= yes - -ifdef LCD_ENABLE -include drivers/gdisp/st7565ergodox/driver.mk -endif - -ifdef LED_ENABLE -include drivers/gdisp/IS31FL3731C/driver.mk -endif - -ifndef QUANTUM_DIR - include ../../Makefile -endif \ No newline at end of file diff --git a/keyboards/infinity_ergodox/bootloader_defs.h b/keyboards/infinity_ergodox/bootloader_defs.h deleted file mode 100644 index c67153be60..0000000000 --- a/keyboards/infinity_ergodox/bootloader_defs.h +++ /dev/null @@ -1 +0,0 @@ -#define KIIBOHD_BOOTLOADER diff --git a/keyboards/infinity_ergodox/chconf.h b/keyboards/infinity_ergodox/chconf.h deleted file mode 100644 index d59c35eb68..0000000000 --- a/keyboards/infinity_ergodox/chconf.h +++ /dev/null @@ -1,524 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -#define _CHIBIOS_RT_CONF_ - -/*===========================================================================*/ -/** - * @name System timers settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System time counter resolution. - * @note Allowed values are 16 or 32 bits. - */ -#define CH_CFG_ST_RESOLUTION 32 - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#define CH_CFG_ST_FREQUENCY 100000 - -/** - * @brief Time delta constant for the tick-less mode. - * @note If this value is zero then the system uses the classic - * periodic tick. This value represents the minimum number - * of ticks that is safe to specify in a timeout directive. - * The value one is not valid, timeouts are rounded up to - * this value. - */ -#define CH_CFG_ST_TIMEDELTA 0 - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - * @note The round robin preemption is not supported in tickless mode and - * must be set to zero in that case. - */ -#define CH_CFG_TIME_QUANTUM 20 - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_CFG_USE_MEMCORE. - */ -#define CH_CFG_MEMCORE_SIZE 0 - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread. The application @p main() - * function becomes the idle thread and must implement an - * infinite loop. - */ -#define CH_CFG_NO_IDLE_THREAD FALSE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#define CH_CFG_OPTIMIZE_SPEED TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Time Measurement APIs. - * @details If enabled then the time measurement APIs are included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_TM FALSE - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_REGISTRY TRUE - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_WAITEXIT TRUE - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_SEMAPHORES TRUE - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MUTEXES TRUE - -/** - * @brief Enables recursive behavior on mutexes. - * @note Recursive mutexes are heavier and have an increased - * memory footprint. - * - * @note The default is @p FALSE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_CONDVARS TRUE - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_CONDVARS. - */ -#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_EVENTS TRUE - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_EVENTS. - */ -#define CH_CFG_USE_EVENTS_TIMEOUT TRUE - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MESSAGES TRUE - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_MESSAGES. - */ -#define CH_CFG_USE_MESSAGES_PRIORITY FALSE - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_MAILBOXES TRUE - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_QUEUES TRUE - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMCORE TRUE - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or - * @p CH_CFG_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#define CH_CFG_USE_HEAP TRUE - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMPOOLS TRUE - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_WAITEXIT. - * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. - */ -#define CH_CFG_USE_DYNAMIC TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, kernel statistics. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_STATISTICS FALSE - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_SYSTEM_STATE_CHECK FALSE - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_CHECKS FALSE - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_ASSERTS FALSE - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_TRACE FALSE - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#define CH_DBG_ENABLE_STACK_CHECK FALSE - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_FILL_THREADS FALSE - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p thread_t structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p FALSE. - * @note This debug option is not currently compatible with the - * tickless mode. - */ -#define CH_DBG_THREADS_PROFILING FALSE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p thread_t structure. - */ -#define CH_CFG_THREAD_EXTRA_FIELDS \ - /* Add threads custom fields here.*/ - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#define CH_CFG_THREAD_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* Context switch code here.*/ \ -} - -/** - * @brief ISR enter hook. - */ -#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ - /* IRQ prologue code here.*/ \ -} - -/** - * @brief ISR exit hook. - */ -#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ - /* IRQ epilogue code here.*/ \ -} - -/** - * @brief Idle thread enter hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to activate a power saving mode. - */ -#define CH_CFG_IDLE_ENTER_HOOK() { \ -} - -/** - * @brief Idle thread leave hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to deactivate a power saving mode. - */ -#define CH_CFG_IDLE_LEAVE_HOOK() { \ -} - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#define CH_CFG_IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#define CH_CFG_SYSTEM_TICK_HOOK() { \ - /* System tick event code here.*/ \ -} - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ - /* System halt code here.*/ \ -} - -/** - * @brief Trace hook. - * @details This hook is invoked each time a new record is written in the - * trace buffer. - */ -#define CH_CFG_TRACE_HOOK(tep) { \ - /* Trace code here.*/ \ -} - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/keyboards/infinity_ergodox/config.h b/keyboards/infinity_ergodox/config.h deleted file mode 100644 index d24ee0f056..0000000000 --- a/keyboards/infinity_ergodox/config.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2015 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6464 -#define DEVICE_VER 0x0001 -/* in python2: list(u"whatever".encode('utf-16-le')) */ -/* at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER "TMK" -#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00' -#define PRODUCT "Infinity keyboard/TMK" -#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00' - -/* key matrix size */ -#define MATRIX_ROWS 18 -#define MATRIX_COLS 5 -#define LOCAL_MATRIX_ROWS 9 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -//#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -//#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* Keymap for Infiity prototype */ -#define INFINITY_PROTOTYPE - -#define SERIAL_LINK_BAUD 562500 -#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1) -// The visualizer needs gfx thread priorities -#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h deleted file mode 100644 index 2ea73f1fb3..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -static const I2CConfig i2ccfg = { - 400000 // clock speed (Hz); 400kHz max for IS31 -}; - -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 - -static const uint8_t led_mask[] = { - 0xFF, 0x00, /* C1-1 -> C1-16 */ - 0xFF, 0x00, /* C2-1 -> C2-16 */ - 0xFF, 0x00, /* C3-1 -> C3-16 */ - 0xFF, 0x00, /* C4-1 -> C4-16 */ - 0x3F, 0x00, /* C5-1 -> C5-16 */ - 0x00, 0x00, /* C6-1 -> C6-16 */ - 0x00, 0x00, /* C7-1 -> C7-16 */ - 0x00, 0x00, /* C8-1 -> C8-16 */ - 0x00, 0x00, /* C9-1 -> C9-16 */ -}; - -// The address of the LED -#define LA(c, r) (c + r * 16 ) -// Need to be an address that is not mapped, but inside the range of the controller matrix -#define NA LA(8, 8) - -// The numbers in the comments are the led numbers DXX on the PCB -// The mapping is taken from the schematic of left hand side -static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { -// 45 44 43 42 41 40 39 - { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, -// 52 51 50 49 48 47 46 - { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, -// 58 57 56 55 54 53 N/A - { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, -// 67 66 65 64 63 62 61 - { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, -// 76 75 74 73 72 60 59 - { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, -// N/A N/A N/A N/A N/A N/A 68 - { NA, NA, NA, NA, NA, NA, LA(5, 4) }, -// N/A N/A N/A N/A 71 70 69 - { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, -}; - - -#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND -#define IS31_TIMEOUT 5000 - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - /* I2C pins */ - palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL - palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA - palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); - palClearPad(GPIOB, 16); - /* start I2C */ - i2cStart(&I2CD1, &i2ccfg); - // try high drive (from kiibohd) - I2CD1.i2c->C2 |= I2Cx_C2_HDRS; - // try glitch fixing (from kiibohd) - I2CD1.i2c->FLT = 4; -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { - (void) g; - return led_mask; -} - -static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) -{ - (void) g; - return led_mapping[y][x]; -} - -static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { - (void) g; - if(!shutdown) { - palSetPad(GPIOB, 16); - } - else { - palClearPad(GPIOB, 16); - } -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk deleted file mode 100644 index f32d0d8685..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/IS31FL3731C -GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c deleted file mode 100644 index 1d21f0c498..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX -#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_IS31FL3731C.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 9 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 16 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#define IS31_ADDR_DEFAULT 0x74 - -#define IS31_REG_CONFIG 0x00 -// bits in reg -#define IS31_REG_CONFIG_PICTUREMODE 0x00 -#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 -#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 -// D2:D0 bits are starting frame for autoplay mode - -#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode - -#define IS31_REG_AUTOPLAYCTRL1 0x02 -// D6:D4 number of loops (000=infty) -// D2:D0 number of frames to be used - -#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) - -#define IS31_REG_DISPLAYOPT 0x05 -#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames -#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 -// D2:D0 bits blink period time (*0.27s) - -#define IS31_REG_AUDIOSYNC 0x06 -#define IS31_REG_AUDIOSYNC_ENABLE 0x1 - -#define IS31_REG_FRAMESTATE 0x07 - -#define IS31_REG_BREATHCTRL1 0x08 -// D6:D4 fade out time (26ms*2^i) -// D2:D0 fade in time (26ms*2^i) - -#define IS31_REG_BREATHCTRL2 0x09 -#define IS31_REG_BREATHCTRL2_ENABLE 0x10 -// D2:D0 extinguish time (3.5ms*2^i) - -#define IS31_REG_SHUTDOWN 0x0A -#define IS31_REG_SHUTDOWN_OFF 0x0 -#define IS31_REG_SHUTDOWN_ON 0x1 - -#define IS31_REG_AGCCTRL 0x0B -#define IS31_REG_ADCRATE 0x0C - -#define IS31_COMMANDREGISTER 0xFD -#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' -#define IS31_FUNCTIONREG_SIZE 0xD - -#define IS31_FRAME_SIZE 0xB4 - -#define IS31_PWM_REG 0x24 -#define IS31_PWM_SIZE 0x90 - -#define IS31_LED_MASK_SIZE 0x12 -#define IS31_SCREEN_WIDTH 16 - -#define IS31 - -//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm -const unsigned char cie[256] = { - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, - 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, - 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, - 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, - 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, - 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, - 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, - 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, - 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, - 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, - 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, - 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, - 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, - 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, - 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, - 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, - 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, - 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, - 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, - 242, 245, 247, 250, 252, 255, -}; - - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - uint8_t write_buffer_offset; - uint8_t write_buffer[IS31_FRAME_SIZE]; - uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; - uint8_t page; -}__attribute__((__packed__)) PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -static GFXINLINE void write_page(GDisplay* g, uint8_t page) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = IS31_COMMANDREGISTER; - tx[1] = page; - write_data(g, tx, 2); -} - -static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = reg; - tx[1] = data; - write_page(g, page); - write_data(g, tx, 2); -} - -static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { - PRIV(g)->write_buffer_offset = offset; - write_page(g, page); - write_data(g, (uint8_t*)PRIV(g), length + 1); -} - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - __builtin_memset(PRIV(g), 0, sizeof(PrivData)); - PRIV(g)->page = 0; - - // Initialise the board interface - init_board(g); - gfxSleepMilliseconds(10); - - // zero function page, all registers (assuming full_page is all zeroes) - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - set_hardware_shutdown(g, false); - gfxSleepMilliseconds(10); - // software shutdown - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - gfxSleepMilliseconds(10); - // zero function page, all registers - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - gfxSleepMilliseconds(10); - - - // zero all LED registers on all 8 pages, and enable the mask - __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); - for(uint8_t i=0; i<8; i++) { - write_ram(g, i, 0, IS31_FRAME_SIZE); - gfxSleepMilliseconds(1); - } - - // software shutdown disable (i.e. turn stuff on) - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - gfxSleepMilliseconds(10); - - // Finish Init - post_init_board(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - PRIV(g)->page++; - PRIV(g)->page %= 2; - // TODO: some smarter algorithm for this - // We should run only one physical page at a time - // This way we don't need to send so much data, and - // we could use slightly less memory - uint8_t* src = PRIV(g)->frame_buffer; - for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; - ++src; - } - } - write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); - gfxSleepMilliseconds(1); - write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - break; - case powerOn: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h deleted file mode 100644 index bb28ad775e..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk deleted file mode 100644 index 16c3f80f53..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_lcd -GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c deleted file mode 100644 index babfe2b367..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 128 -#define GDISP_SCREEN_HEIGHT 32 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk deleted file mode 100644 index 2554344321..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_led -GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c deleted file mode 100644 index b0ebcdc475..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h deleted file mode 100644 index 290571ce5b..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -#include "print.h" - -#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 -#define ST7565_ADC ST7565_ADC_NORMAL -#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC -#define ST7565_PAGE_ORDER 0,1,2,3 -/* - * Custom page order for several LCD boards, e.g. HEM12864-99 - * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 - */ - -#define ST7565_GPIOPORT GPIOC -#define ST7565_PORT PORTC -#define ST7565_A0_PIN 7 -#define ST7565_RST_PIN 8 -#define ST7565_MOSI_PIN 6 -#define ST7565_SLCK_PIN 5 -#define ST7565_SS_PIN 4 - -#define palSetPadModeRaw(portname, bits) \ - ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits - -#define palSetPadModeNamed(portname, portmode) \ - palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) - -#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) -// DSPI Clock and Transfer Attributes -// Frame Size: 8 bits -// MSB First -// CLK Low by default -static const SPIConfig spi1config = { - NULL, - /* HW dependent part.*/ - ST7565_GPIOPORT, - ST7565_SS_PIN, - SPIx_CTARn_FMSZ(7) - | SPIx_CTARn_ASC(7) - | SPIx_CTARn_DT(7) - | SPIx_CTARn_CSSCK(7) - | SPIx_CTARn_PBR(0) - | SPIx_CTARn_BR(7) - //SPI_CR1_BR_0 -}; - -static bool_t st7565_is_data_mode = 1; - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - st7565_is_data_mode = 1; - palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - palSetPadModeRaw(MOSI, ST7565_SPI_MODE); - palSetPadModeRaw(SLCK, ST7565_SPI_MODE); - palSetPadModeRaw(SS, ST7565_SPI_MODE); - - spiInit(); - spiStart(&SPID1, &spi1config); - spiSelect(&SPID1); -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { - (void) g; - if (state) { - palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } - else { - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } -} - -static GFXINLINE void acquire_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to acquire - // spiAcquireBus(&SPID1); -} - -static GFXINLINE void release_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to release - //spiReleaseBus(&SPID1); -} - -static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { - (void) g; - if (st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 0; - } - spiSend(&SPID1, 1, &cmd); -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - if (!st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 1; - } - spiSend(&SPID1, length, data); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk deleted file mode 100644 index 889a1a0317..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/st7565ergodox -GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c deleted file mode 100644 index c33aea81a8..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX -#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_ST7565.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 32 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 128 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#include "drivers/gdisp/st7565ergodox/st7565.h" - -/*===========================================================================*/ -/* Driver config defaults for backward compatibility. */ -/*===========================================================================*/ -#ifndef ST7565_LCD_BIAS - #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 -#endif -#ifndef ST7565_ADC - #define ST7565_ADC ST7565_ADC_NORMAL -#endif -#ifndef ST7565_COM_SCAN - #define ST7565_COM_SCAN ST7565_COM_SCAN_INC -#endif -#ifndef ST7565_PAGE_ORDER - #define ST7565_PAGE_ORDER 0,1,2,3 -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - bool_t buffer2; - uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; -}PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) -#define RAM(g) (PRIV(g)->ram) -#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } -#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } - -// Some common routines and macros -#define delay(us) gfxSleepMicroseconds(us) -#define delay_ms(ms) gfxSleepMilliseconds(ms) - -#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) -#define xybit(y) (1<<((y)&7)) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/* - * As this controller can't update on a pixel boundary we need to maintain the - * the entire display surface in memory so that we can do the necessary bit - * operations. Fortunately it is a small display in monochrome. - * 64 * 128 / 8 = 1024 bytes. - */ - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - PRIV(g)->buffer2 = false; - - // Initialise the board interface - init_board(g); - - // Hardware reset - setpin_reset(g, TRUE); - gfxSleepMilliseconds(20); - setpin_reset(g, FALSE); - gfxSleepMilliseconds(20); - - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - write_cmd(g, ST7565_LCD_BIAS); - write_cmd(g, ST7565_ADC); - write_cmd(g, ST7565_COM_SCAN); - - write_cmd(g, ST7565_START_LINE | 0); - - write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); - - // turn on voltage converter (VC=1, VR=0, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x04); - delay_ms(50); - - // turn on voltage regulator (VC=1, VR=1, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x06); - delay_ms(50); - - // turn on voltage follower (VC=1, VR=1, VF=1) - write_cmd(g, ST7565_POWER_CONTROL | 0x07); - delay_ms(50); - - write_cmd(g, 0xE2); - write_cmd(g, ST7565_COM_SCAN); - write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); - //write_cmd2(g, ST7565_CONTRAST, 0); - write_cmd(g, ST7565_DISPLAY_ON); - write_cmd(g, ST7565_ALLON_NORMAL); - write_cmd(g, ST7565_INVERT_DISPLAY); - - write_cmd(g, ST7565_RMW); - - // Finish Init - post_init_board(g); - - // Release the bus - release_bus(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - unsigned p; - - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - acquire_bus(g); - unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); - for (p = 0; p < 4; p++) { - write_cmd(g, ST7565_PAGE | (p + dstOffset)); - write_cmd(g, ST7565_COLUMN_MSB | 0); - write_cmd(g, ST7565_COLUMN_LSB | 0); - write_cmd(g, ST7565_RMW); - write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); - } - unsigned line = (PRIV(g)->buffer2 ? 32 : 0); - write_cmd(g, ST7565_START_LINE | line); - PRIV(g)->buffer2 = !PRIV(g)->buffer2; - release_bus(g); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - if (gdispColor2Native(g->p.color) != Black) - RAM(g)[xyaddr(x, y)] |= xybit(y); - else - RAM(g)[xyaddr(x, y)] &= ~xybit(y); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - release_bus(g); - break; - case powerOn: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_ON); - release_bus(g); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - if ((unsigned)g->p.ptr > 100) - g->p.ptr = (void *)100; - acquire_bus(g); - write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); - release_bus(g); - g->g.Contrast = (unsigned)g->p.ptr; - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h deleted file mode 100644 index 48587b9e14..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h deleted file mode 100644 index 48636b33d6..0000000000 --- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _ST7565_H -#define _ST7565_H - -#define ST7565_CONTRAST 0x81 -#define ST7565_ALLON_NORMAL 0xA4 -#define ST7565_ALLON 0xA5 -#define ST7565_POSITIVE_DISPLAY 0xA6 -#define ST7565_INVERT_DISPLAY 0xA7 -#define ST7565_DISPLAY_OFF 0xAE -#define ST7565_DISPLAY_ON 0xAF - -#define ST7565_LCD_BIAS_7 0xA3 -#define ST7565_LCD_BIAS_9 0xA2 - -#define ST7565_ADC_NORMAL 0xA0 -#define ST7565_ADC_REVERSE 0xA1 - -#define ST7565_COM_SCAN_INC 0xC0 -#define ST7565_COM_SCAN_DEC 0xC8 - -#define ST7565_START_LINE 0x40 -#define ST7565_PAGE 0xB0 -#define ST7565_COLUMN_MSB 0x10 -#define ST7565_COLUMN_LSB 0x00 -#define ST7565_RMW 0xE0 - -#define ST7565_RESISTOR_RATIO 0x20 -#define ST7565_POWER_CONTROL 0x28 - -#endif /* _ST7565_H */ diff --git a/keyboards/infinity_ergodox/gfxconf.h b/keyboards/infinity_ergodox/gfxconf.h deleted file mode 100644 index 8caa577b73..0000000000 --- a/keyboards/infinity_ergodox/gfxconf.h +++ /dev/null @@ -1,331 +0,0 @@ -/** - * This file has a different license to the rest of the uGFX system. - * You can copy, modify and distribute this file as you see fit. - * You do not need to publish your source modifications to this file. - * The only thing you are not permitted to do is to relicense it - * under a different license. - */ - -/** - * Copy this file into your project directory and rename it as gfxconf.h - * Edit your copy to turn on the uGFX features you want to use. - * The values below are the defaults. - * - * Only remove the comments from lines where you want to change the - * default value. This allows definitions to be included from - * driver makefiles when required and provides the best future - * compatibility for your project. - * - * Please use spaces instead of tabs in this file. - */ - -#ifndef _GFXCONF_H -#define _GFXCONF_H - - -/////////////////////////////////////////////////////////////////////////// -// GOS - One of these must be defined, preferably in your Makefile // -/////////////////////////////////////////////////////////////////////////// -//#define GFX_USE_OS_CHIBIOS TRUE -//#define GFX_USE_OS_FREERTOS FALSE -// #define GFX_FREERTOS_USE_TRACE FALSE -//#define GFX_USE_OS_WIN32 FALSE -//#define GFX_USE_OS_LINUX FALSE -//#define GFX_USE_OS_OSX FALSE -//#define GFX_USE_OS_ECOS FALSE -//#define GFX_USE_OS_RAWRTOS FALSE -//#define GFX_USE_OS_ARDUINO FALSE -//#define GFX_USE_OS_KEIL FALSE -//#define GFX_USE_OS_CMSIS FALSE -//#define GFX_USE_OS_RAW32 FALSE -// #define INTERRUPTS_OFF() optional_code -// #define INTERRUPTS_ON() optional_code -// These are not defined by default for some reason -#define GOS_NEED_X_THREADS FALSE -#define GOS_NEED_X_HEAP FALSE - -// Options that (should where relevant) apply to all operating systems - #define GFX_NO_INLINE FALSE -// #define GFX_COMPILER GFX_COMPILER_UNKNOWN -// #define GFX_CPU GFX_CPU_UNKNOWN -// #define GFX_OS_HEAP_SIZE 0 -// #define GFX_OS_NO_INIT FALSE -// #define GFX_OS_INIT_NO_WARNING FALSE -// #define GFX_OS_PRE_INIT_FUNCTION myHardwareInitRoutine -// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine -// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine - - -/////////////////////////////////////////////////////////////////////////// -// GDISP // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GDISP TRUE - -//#define GDISP_NEED_AUTOFLUSH FALSE -//#define GDISP_NEED_TIMERFLUSH FALSE -//#define GDISP_NEED_VALIDATION TRUE -//#define GDISP_NEED_CLIP TRUE -#define GDISP_NEED_CIRCLE TRUE -#define GDISP_NEED_ELLIPSE TRUE -#define GDISP_NEED_ARC TRUE -#define GDISP_NEED_ARCSECTORS TRUE -#define GDISP_NEED_CONVEX_POLYGON TRUE -//#define GDISP_NEED_SCROLL FALSE -#define GDISP_NEED_PIXELREAD TRUE -#define GDISP_NEED_CONTROL TRUE -//#define GDISP_NEED_QUERY FALSE -//#define GDISP_NEED_MULTITHREAD FALSE -//#define GDISP_NEED_STREAMING FALSE -#define GDISP_NEED_TEXT TRUE -// #define GDISP_NEED_TEXT_WORDWRAP FALSE -// #define GDISP_NEED_ANTIALIAS FALSE -// #define GDISP_NEED_UTF8 FALSE - #define GDISP_NEED_TEXT_KERNING TRUE -// #define GDISP_INCLUDE_FONT_UI1 FALSE -// #define GDISP_INCLUDE_FONT_UI2 FALSE // The smallest preferred font. -// #define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE - #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 TRUE -// #define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE -// #define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE - #define GDISP_INCLUDE_FONT_FIXED_5X8 TRUE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE -// #define GDISP_INCLUDE_USER_FONTS FALSE - -//#define GDISP_NEED_IMAGE FALSE -// #define GDISP_NEED_IMAGE_NATIVE FALSE -// #define GDISP_NEED_IMAGE_GIF FALSE -// #define GDISP_NEED_IMAGE_BMP FALSE -// #define GDISP_NEED_IMAGE_BMP_1 FALSE -// #define GDISP_NEED_IMAGE_BMP_4 FALSE -// #define GDISP_NEED_IMAGE_BMP_4_RLE FALSE -// #define GDISP_NEED_IMAGE_BMP_8 FALSE -// #define GDISP_NEED_IMAGE_BMP_8_RLE FALSE -// #define GDISP_NEED_IMAGE_BMP_16 FALSE -// #define GDISP_NEED_IMAGE_BMP_24 FALSE -// #define GDISP_NEED_IMAGE_BMP_32 FALSE -// #define GDISP_NEED_IMAGE_JPG FALSE -// #define GDISP_NEED_IMAGE_PNG FALSE -// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE -#ifdef EMULATOR -#define GDISP_NEED_PIXMAP TRUE -#endif -// #define GDISP_NEED_PIXMAP_IMAGE FALSE - -//#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE // If not defined the native hardware orientation is used. -//#define GDISP_LINEBUF_SIZE 128 -//#define GDISP_STARTUP_COLOR Black -#define GDISP_NEED_STARTUP_LOGO FALSE - -//#define GDISP_TOTAL_DISPLAYS 2 - -#ifndef EMULATOR -#define GDISP_DRIVER_LIST GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX -#else -#define GDISP_DRIVER_LIST GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX -#endif - - #ifdef GDISP_DRIVER_LIST - // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability - #define GDISP_HARDWARE_STREAM_WRITE FALSE - #define GDISP_HARDWARE_STREAM_READ FALSE - #define GDISP_HARDWARE_STREAM_POS FALSE - #define GDISP_HARDWARE_DRAWPIXEL TRUE - #define GDISP_HARDWARE_CLEARS FALSE - #define GDISP_HARDWARE_FILLS FALSE - #define GDISP_HARDWARE_BITFILLS FALSE - #define GDISP_HARDWARE_SCROLL FALSE - #define GDISP_HARDWARE_PIXELREAD TRUE - #define GDISP_HARDWARE_CONTROL TRUE - #define GDISP_HARDWARE_QUERY FALSE - #define GDISP_HARDWARE_CLIP FALSE - - #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888 - #endif - -// The custom format is not defined for some reason, so define it as error -// so we don't get compiler warnings -#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR - -#define GDISP_USE_GFXNET FALSE -// #define GDISP_GFXNET_PORT 13001 -// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE -// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE -// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE - - -/////////////////////////////////////////////////////////////////////////// -// GWIN // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GWIN FALSE - -//#define GWIN_NEED_WINDOWMANAGER FALSE -// #define GWIN_REDRAW_IMMEDIATE FALSE -// #define GWIN_REDRAW_SINGLEOP FALSE -// #define GWIN_NEED_FLASHING FALSE -// #define GWIN_FLASHING_PERIOD 250 - -//#define GWIN_NEED_CONSOLE FALSE -// #define GWIN_CONSOLE_USE_HISTORY FALSE -// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE -// #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE -// #define GWIN_CONSOLE_ESCSEQ FALSE -// #define GWIN_CONSOLE_USE_BASESTREAM FALSE -// #define GWIN_CONSOLE_USE_FLOAT FALSE -//#define GWIN_NEED_GRAPH FALSE -//#define GWIN_NEED_GL3D FALSE - -//#define GWIN_NEED_WIDGET FALSE -//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1 -// #define GWIN_NEED_LABEL FALSE -// #define GWIN_LABEL_ATTRIBUTE FALSE -// #define GWIN_NEED_BUTTON FALSE -// #define GWIN_BUTTON_LAZY_RELEASE FALSE -// #define GWIN_NEED_SLIDER FALSE -// #define GWIN_SLIDER_NOSNAP FALSE -// #define GWIN_SLIDER_DEAD_BAND 5 -// #define GWIN_SLIDER_TOGGLE_INC 20 -// #define GWIN_NEED_CHECKBOX FALSE -// #define GWIN_NEED_IMAGE FALSE -// #define GWIN_NEED_IMAGE_ANIMATION FALSE -// #define GWIN_NEED_RADIO FALSE -// #define GWIN_NEED_LIST FALSE -// #define GWIN_NEED_LIST_IMAGES FALSE -// #define GWIN_NEED_PROGRESSBAR FALSE -// #define GWIN_PROGRESSBAR_AUTO FALSE -// #define GWIN_NEED_KEYBOARD FALSE -// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1 -// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE -// #define GWIN_NEED_TEXTEDIT FALSE -// #define GWIN_FLAT_STYLING FALSE -// #define GWIN_WIDGET_TAGS FALSE - -//#define GWIN_NEED_CONTAINERS FALSE -// #define GWIN_NEED_CONTAINER FALSE -// #define GWIN_NEED_FRAME FALSE -// #define GWIN_NEED_TABSET FALSE -// #define GWIN_TABSET_TABHEIGHT 18 - - -/////////////////////////////////////////////////////////////////////////// -// GEVENT // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GEVENT TRUE - -//#define GEVENT_ASSERT_NO_RESOURCE FALSE -//#define GEVENT_MAXIMUM_SIZE 32 -//#define GEVENT_MAX_SOURCE_LISTENERS 32 - - -/////////////////////////////////////////////////////////////////////////// -// GTIMER // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GTIMER FALSE - -//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY -//#define GTIMER_THREAD_WORKAREA_SIZE 2048 - - -/////////////////////////////////////////////////////////////////////////// -// GQUEUE // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GQUEUE FALSE - -//#define GQUEUE_NEED_ASYNC FALSE -//#define GQUEUE_NEED_GSYNC FALSE -//#define GQUEUE_NEED_FSYNC FALSE -//#define GQUEUE_NEED_BUFFERS FALSE - -/////////////////////////////////////////////////////////////////////////// -// GINPUT // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GINPUT FALSE - -//#define GINPUT_NEED_MOUSE FALSE -// #define GINPUT_TOUCH_STARTRAW FALSE -// #define GINPUT_TOUCH_NOTOUCH FALSE -// #define GINPUT_TOUCH_NOCALIBRATE FALSE -// #define GINPUT_TOUCH_NOCALIBRATE_GUI FALSE -// #define GINPUT_MOUSE_POLL_PERIOD 25 -// #define GINPUT_MOUSE_CLICK_TIME 300 -// #define GINPUT_TOUCH_CXTCLICK_TIME 700 -// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE -// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE -// #define GMOUSE_DRIVER_LIST GMOUSEVMT_Win32, GMOUSEVMT_Win32 -//#define GINPUT_NEED_KEYBOARD FALSE -// #define GINPUT_KEYBOARD_POLL_PERIOD 200 -// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 -// #define GKEYBOARD_LAYOUT_OFF FALSE -// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE -//#define GINPUT_NEED_TOGGLE FALSE -//#define GINPUT_NEED_DIAL FALSE - - -/////////////////////////////////////////////////////////////////////////// -// GFILE // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GFILE FALSE - -//#define GFILE_NEED_PRINTG FALSE -//#define GFILE_NEED_SCANG FALSE -//#define GFILE_NEED_STRINGS FALSE -//#define GFILE_NEED_FILELISTS FALSE -//#define GFILE_NEED_STDIO FALSE -//#define GFILE_NEED_NOAUTOMOUNT FALSE -//#define GFILE_NEED_NOAUTOSYNC FALSE - -//#define GFILE_NEED_MEMFS FALSE -//#define GFILE_NEED_ROMFS FALSE -//#define GFILE_NEED_RAMFS FALSE -//#define GFILE_NEED_FATFS FALSE -//#define GFILE_NEED_NATIVEFS FALSE -//#define GFILE_NEED_CHBIOSFS FALSE - -//#define GFILE_ALLOW_FLOATS FALSE -//#define GFILE_ALLOW_DEVICESPECIFIC FALSE -//#define GFILE_MAX_GFILES 3 - -/////////////////////////////////////////////////////////////////////////// -// GADC // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GADC FALSE - -//#define GADC_MAX_LOWSPEED_DEVICES 4 - - -/////////////////////////////////////////////////////////////////////////// -// GAUDIO // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GAUDIO FALSE -// There seems to be a bug in the ugfx code, the wrong define is used -// So define it in order to avoid warnings -#define GFX_USE_GAUDIN GFX_USE_GAUDIO -// #define GAUDIO_NEED_PLAY FALSE -// #define GAUDIO_NEED_RECORD FALSE - - -/////////////////////////////////////////////////////////////////////////// -// GMISC // -/////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GMISC TRUE - -//#define GMISC_NEED_ARRAYOPS FALSE -//#define GMISC_NEED_FASTTRIG FALSE -//#define GMISC_NEED_FIXEDTRIG FALSE -//#define GMISC_NEED_INVSQRT FALSE -// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE -// #define GMISC_INVSQRT_REAL_SLOW FALSE -#define GMISC_NEED_MATRIXFLOAT2D TRUE -#define GMISC_NEED_MATRIXFIXED2D FALSE - -#endif /* _GFXCONF_H */ diff --git a/keyboards/infinity_ergodox/halconf.h b/keyboards/infinity_ergodox/halconf.h deleted file mode 100644 index 55dd5e88da..0000000000 --- a/keyboards/infinity_ergodox/halconf.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the DAC subsystem. - */ -#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -#define HAL_USE_DAC FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C TRUE -#endif - -/** - * @brief Enables the I2S subsystem. - */ -#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) -#define HAL_USE_I2S FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL TRUE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB TRUE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI TRUE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE -#endif - -/** - * @brief Enables the WDG subsystem. - */ -#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) -#define HAL_USE_WDG FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) -#define ADC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define ADC_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* I2C driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the I2C bus. - */ -#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define I2C_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) -#define MAC_USE_ZERO_COPY FALSE -#endif - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) -#define MAC_USE_EVENTS TRUE -#endif - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SDC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Number of initialization attempts before rejecting the card. - * @note Attempts are performed at 10mS intervals. - */ -#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) -#define SDC_INIT_RETRY 100 -#endif - -/** - * @brief Include support for MMC cards. - * @note MMC support is not yet implemented so this option must be kept - * at @p FALSE. - */ -#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) -#define SDC_MMC_SUPPORT FALSE -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - */ -#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) -#define SDC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 128 -#endif - -/*===========================================================================*/ -/* SERIAL_USB driver related setting. */ -/*===========================================================================*/ - -/** - * @brief Serial over USB buffers size. - * @details Configuration parameter, the buffer size must be a multiple of - * the USB data endpoint maximum packet size. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_SIZE 256 -#endif - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) -#define SPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* USB driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) -#define USB_USE_WAIT TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c deleted file mode 100644 index 87ed40fabf..0000000000 --- a/keyboards/infinity_ergodox/infinity_ergodox.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "infinity_ergodox.h" -#include "ch.h" -#include "hal.h" -#include "serial_link/system/serial_link.h" -#include "lcd_backlight.h" - -void init_serial_link_hal(void) { - PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2); - PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2); - PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3); - PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3); -} - -#define RED_PIN 1 -#define GREEN_PIN 2 -#define BLUE_PIN 3 -#define CHANNEL_RED FTM0->CHANNEL[0] -#define CHANNEL_GREEN FTM0->CHANNEL[1] -#define CHANNEL_BLUE FTM0->CHANNEL[2] - -#define RGB_PORT PORTC -#define RGB_PORT_GPIO GPIOC - -// Base FTM clock selection (72 MHz system clock) -// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period -// Higher pre-scalar will use the most power (also look the best) -// Pre-scalar calculations -// 0 - 72 MHz -> 549 Hz -// 1 - 36 MHz -> 275 Hz -// 2 - 18 MHz -> 137 Hz -// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) -// 4 - 4 500 kHz -> 34 Hz (Visible flickering) -// 5 - 2 250 kHz -> 17 Hz -// 6 - 1 125 kHz -> 9 Hz -// 7 - 562 500 Hz -> 4 Hz -// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced -// Which will reduce the brightness range -#define PRESCALAR_DEFINE 0 - -void lcd_backlight_hal_init(void) { - // Setup Backlight - SIM->SCGC6 |= SIM_SCGC6_FTM0; - FTM0->CNT = 0; // Reset counter - - // PWM Period - // 16-bit maximum - FTM0->MOD = 0xFFFF; - - // Set FTM to PWM output - Edge Aligned, Low-true pulses -#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) - CHANNEL_RED.CnSC = CNSC_MODE; - CHANNEL_GREEN.CnSC = CNSC_MODE; - CHANNEL_BLUE.CnSC = CNSC_MODE; - - // System clock, /w prescalar setting - FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); - - CHANNEL_RED.CnV = 0; - CHANNEL_GREEN.CnV = 0; - CHANNEL_BLUE.CnV = 0; - - RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); - RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); - RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); - -#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) - RGB_PORT->PCR[RED_PIN] = RGB_MODE; - RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; - RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; -} - -void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { - CHANNEL_RED.CnV = r; - CHANNEL_GREEN.CnV = g; - CHANNEL_BLUE.CnV = b; -} diff --git a/keyboards/infinity_ergodox/infinity_ergodox.h b/keyboards/infinity_ergodox/infinity_ergodox.h deleted file mode 100644 index de72675946..0000000000 --- a/keyboards/infinity_ergodox/infinity_ergodox.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ -#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ - -#include "quantum.h" - -#define KEYMAP( \ - A80, A70, A60, A50, A40, A30, A20, \ - A81, A71, A61, A51, A41, A31, A21, \ - A82, A72, A62, A52, A42, A32, \ - A83, A73, A63, A53, A43, A33, A23, \ - A84, A74, A64, A54, A44, \ - A13, A03, \ - A04, \ - A34, A24, A14, \ - B20, B30, B40, B50, B60, B70, B80, \ - B21, B31, B41, B51, B61, B71, B81, \ - B32, B42, B52, B62, B72, B82, \ - B23, B33, B43, B53, B63, B73, B83, \ - B44, B54, B64, B74, B84, \ - B03, B13, \ - B04, \ - B14, B24, B34 \ -) { \ - { KC_NO, KC_NO, KC_NO, KC_##A03, KC_##A04 }, \ - { KC_NO, KC_NO, KC_NO, KC_##A13, KC_##A14 }, \ - { KC_##A20, KC_##A21, KC_NO, KC_##A23, KC_##A24 }, \ - { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \ - { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \ - { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \ - { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \ - { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \ - { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \ - { KC_NO, KC_NO, KC_NO, KC_##B03, KC_##B04 }, \ - { KC_NO, KC_NO, KC_NO, KC_##B13, KC_##B14 }, \ - { KC_##B20, KC_##B21, KC_NO, KC_##B23, KC_##B24 }, \ - { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \ - { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \ - { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \ - { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \ - { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \ - { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 } \ -} - -#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */ diff --git a/keyboards/infinity_ergodox/keymaps/default/keymap.c b/keyboards/infinity_ergodox/keymaps/default/keymap.c deleted file mode 100644 index f1e6b1c8ae..0000000000 --- a/keyboards/infinity_ergodox/keymaps/default/keymap.c +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2016 Fred Sundvik -Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "infinity_ergodox.h" - -// Workaround for old keymap format -#define KC_RESET RESET - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( // layer 0 : default - // left hand - EQL, 1, 2, 3, 4, 5, ESC, - BSLS,Q, W, E, R, T, FN1, - TAB, A, S, D, F, G, - LSFT,Z, X, C, V, B, FN0, - LGUI,GRV, BSLS,LEFT,RGHT, - LCTL,LALT, - HOME, - BSPC,DEL, END, - // right hand - FN2, 6, 7, 8, 9, 0, MINS, - LBRC,Y, U, I, O, P, RBRC, - H, J, K, L, SCLN,QUOT, - FN0, N, M, COMM,DOT, SLSH,RSFT, - LEFT,DOWN,UP, RGHT,RGUI, - RALT,RCTL, - PGUP, - PGDN,ENT, SPC - ), - - KEYMAP( // layer 1 : function and symbol keys - // left hand - TRNS,F1, F2, F3, F4, F5, F11, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - F12, F6, F7, F8, F9, F10, TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), - - KEYMAP( // layer 2 : keyboard functions - // left hand - RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), - - KEYMAP( // layer 3: numpad - // left hand - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC, - TRNS,NO, P7, P8, P9, PMNS,BSPC, - NO, P4, P5, P6, PPLS,PENT, - TRNS,NO, P1, P2, P3, PPLS,PENT, - P0, PDOT,SLSH,PENT,PENT, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), -}; -const uint16_t fn_actions[] = { - ACTION_LAYER_MOMENTARY(1), // FN0 - switch to Layer1 - ACTION_LAYER_SET(2, ON_PRESS), // FN1 - set Layer2 - ACTION_LAYER_TOGGLE(3), // FN2 - toggle Layer3 aka Numpad layer - ACTION_LAYER_SET(0, ON_PRESS), // FN3 - set Layer0 -}; diff --git a/keyboards/infinity_ergodox/keymaps/default/visualizer.c b/keyboards/infinity_ergodox/keymaps/default/visualizer.c deleted file mode 100644 index c0d335ce6a..0000000000 --- a/keyboards/infinity_ergodox/keymaps/default/visualizer.c +++ /dev/null @@ -1,168 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -// Currently we are assuming that both the backlight and LCD are enabled -// But it's entirely possible to write a custom visualizer that use only -// one of them -#ifndef LCD_BACKLIGHT_ENABLE -#error This visualizer needs that LCD backlight is enabled -#endif - -#ifndef LCD_ENABLE -#error This visualizer needs that LCD is enabled -#endif - -#include "visualizer.h" -#include "led_test.h" - -static const char* welcome_text[] = {"TMK", "Infinity Ergodox"}; - -// Just an example how to write custom keyframe functions, we could have moved -// all this into the init function -bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) { - (void)animation; - // Read the uGFX documentation for information how to use the displays - // http://wiki.ugfx.org/index.php/Main_Page - gdispClear(White); - // You can use static variables for things that can't be found in the animation - // or state structs - gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black); - gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black); - // Always remember to flush the display - gdispFlush(); - // you could set the backlight color as well, but we won't do it here, since - // it's part of the following animation - // lcd_backlight_color(hue, saturation, intensity); - // We don't need constant updates, just drawing the screen once is enough - return false; -} - -// Feel free to modify the animations below, or even add new ones if needed - -// Don't worry, if the startup animation is long, you can use the keyboard like normal -// during that time -static keyframe_animation_t startup_animation = { - .num_frames = 4, - .loop = false, - .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, - .frame_functions = { - display_welcome, - keyframe_animate_backlight_color, - keyframe_no_operation, - enable_visualization - }, -}; - -// The color animation animates the LCD color when you change layers -static keyframe_animation_t color_animation = { - .num_frames = 2, - .loop = false, - // Note that there's a 200 ms no-operation frame, - // this prevents the color from changing when activating the layer - // momentarily - .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)}, - .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, -}; - -// The LCD animation alternates between the layer name display and a -// bitmap that displays all active layers -static keyframe_animation_t lcd_animation = { - .num_frames = 2, - .loop = true, - .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)}, - .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap}, -}; - -static keyframe_animation_t suspend_animation = { - .num_frames = 3, - .loop = false, - .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0}, - .frame_functions = { - keyframe_display_layer_text, - keyframe_animate_backlight_color, - keyframe_disable_lcd_and_backlight, - }, -}; - -static keyframe_animation_t resume_animation = { - .num_frames = 5, - .loop = false, - .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, - .frame_functions = { - keyframe_enable_lcd_and_backlight, - display_welcome, - keyframe_animate_backlight_color, - keyframe_no_operation, - enable_visualization, - }, -}; - -void initialize_user_visualizer(visualizer_state_t* state) { - // The brightness will be dynamically adjustable in the future - // But for now, change it here. - lcd_backlight_brightness(0x50); - state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF); - state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); - start_keyframe_animation(&startup_animation); - start_keyframe_animation(&led_test_animation); -} - -void update_user_visualizer_state(visualizer_state_t* state) { - // Add more tests, change the colors and layer texts here - // Usually you want to check the high bits (higher layers first) - // because that's the order layers are processed for keypresses - // You can for check for example: - // state->status.layer - // state->status.default_layer - // state->status.leds (see led.h for available statuses) - if (state->status.layer & 0x8) { - state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF); - state->layer_text = "Numpad"; - } - else if (state->status.layer & 0x4) { - state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF); - state->layer_text = "KBD functions"; - } - else if (state->status.layer & 0x2) { - state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF); - state->layer_text = "Function keys"; - } - else { - state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF); - state->layer_text = "Default"; - } - // You can also stop existing animations, and start your custom ones here - // remember that you should normally have only one animation for the LCD - // and one for the background. But you can also combine them if you want. - start_keyframe_animation(&lcd_animation); - start_keyframe_animation(&color_animation); -} - -void user_visualizer_suspend(visualizer_state_t* state) { - state->layer_text = "Suspending..."; - uint8_t hue = LCD_HUE(state->current_lcd_color); - uint8_t sat = LCD_SAT(state->current_lcd_color); - state->target_lcd_color = LCD_COLOR(hue, sat, 0); - start_keyframe_animation(&suspend_animation); -} - -void user_visualizer_resume(visualizer_state_t* state) { - state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00); - state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); - start_keyframe_animation(&resume_animation); - start_keyframe_animation(&led_test_animation); -} diff --git a/keyboards/infinity_ergodox/led.c b/keyboards/infinity_ergodox/led.c deleted file mode 100644 index 77195bb358..0000000000 --- a/keyboards/infinity_ergodox/led.c +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "hal.h" - -#include "led.h" - - -void led_set(uint8_t usb_led) { -// The LCD backlight functionality conflicts with this simple -// red backlight -#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE) - // PTC1: LCD Backlight Red(0:on/1:off) - GPIOC->PDDR |= (1<<1); - PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - if (usb_led & (1<PCOR |= (1<<1); - } else { - GPIOC->PSOR |= (1<<1); - } -#elif !defined(LCD_BACKLIGHT_ENABLE) - (void)usb_led; - GPIOC->PDDR |= (1<<1); - PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<1); - GPIOC->PDDR |= (1<<2); - PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<2); - GPIOC->PDDR |= (1<<3); - PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<3); -#else - (void)usb_led; -#endif -} diff --git a/keyboards/infinity_ergodox/matrix.c b/keyboards/infinity_ergodox/matrix.c deleted file mode 100644 index 2b806cd649..0000000000 --- a/keyboards/infinity_ergodox/matrix.c +++ /dev/null @@ -1,169 +0,0 @@ -/* -Copyright 2016 Fred Sundvik -Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include -#include -#include -#include "hal.h" -#include "timer.h" -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "matrix.h" - - -/* - * Infinity ErgoDox Pinusage: - * Column pins are input with internal pull-down. Row pins are output and strobe with high. - * Key is high or 1 when it turns on. - * - * col: { PTD1, PTD4, PTD5, PTD6, PTD7 } - * row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 } - */ -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS]; -static bool debouncing = false; -static uint16_t debouncing_time = 0; - - -void matrix_init(void) -{ - /* Column(sense) */ - palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); - - /* Row(strobe) */ - palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); - - memset(matrix, 0, MATRIX_ROWS); - memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS); -} - -uint8_t matrix_scan(void) -{ - for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { - matrix_row_t data = 0; - - // strobe row - switch (row) { - case 0: palSetPad(GPIOB, 2); break; - case 1: palSetPad(GPIOB, 3); break; - case 2: palSetPad(GPIOB, 18); break; - case 3: palSetPad(GPIOB, 19); break; - case 4: palSetPad(GPIOC, 0); break; - case 5: palSetPad(GPIOC, 9); break; - case 6: palSetPad(GPIOC, 10); break; - case 7: palSetPad(GPIOC, 11); break; - case 8: palSetPad(GPIOD, 0); break; - } - - // need wait to settle pin state - // if you wait too short, or have a too high update rate - // the keyboard might freeze, or there might not be enough - // processing power to update the LCD screen properly. - // 20us, or two ticks at 100000Hz seems to be OK - wait_us(20); - - // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 } - data = ((palReadPort(GPIOD) & 0xF0) >> 3) | - ((palReadPort(GPIOD) & 0x02) >> 1); - - // un-strobe row - switch (row) { - case 0: palClearPad(GPIOB, 2); break; - case 1: palClearPad(GPIOB, 3); break; - case 2: palClearPad(GPIOB, 18); break; - case 3: palClearPad(GPIOB, 19); break; - case 4: palClearPad(GPIOC, 0); break; - case 5: palClearPad(GPIOC, 9); break; - case 6: palClearPad(GPIOC, 10); break; - case 7: palClearPad(GPIOC, 11); break; - case 8: palClearPad(GPIOD, 0); break; - } - - if (matrix_debouncing[row] != data) { - matrix_debouncing[row] = data; - debouncing = true; - debouncing_time = timer_read(); - } - } - - uint8_t offset = 0; -#ifdef MASTER_IS_ON_RIGHT - if (is_serial_link_master()) { - offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS; - } -#endif - - if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { - for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { - matrix[offset + row] = matrix_debouncing[row]; - } - debouncing = false; - } - return 1; -} - -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & (1< Date: Fri, 8 Jul 2016 09:09:31 +0300 Subject: All Ez keymaps compiles --- keyboards/ergodox/config.h | 12 ++++++++++++ keyboards/ergodox/keymaps/ab/keymap.c | 2 +- keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c | 2 +- keyboards/ergodox/keymaps/alexjj/keymap.c | 2 +- keyboards/ergodox/keymaps/algernon/keymap.c | 2 +- keyboards/ergodox/keymaps/andrew_osx/keymap.c | 2 +- keyboards/ergodox/keymaps/bepo/keymap.c | 2 +- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 2 +- keyboards/ergodox/keymaps/colemak/keymap.c | 2 +- keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c | 2 +- keyboards/ergodox/keymaps/csharp_dev/keymap.c | 2 +- keyboards/ergodox/keymaps/dave/keymap.c | 2 +- keyboards/ergodox/keymaps/default_osx/keymap.c | 2 +- keyboards/ergodox/keymaps/dragon788/keymap.c | 2 +- keyboards/ergodox/keymaps/dvorak/keymap.c | 2 +- keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c | 2 +- keyboards/ergodox/keymaps/dvorak_spanish/keymap.c | 2 +- keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c | 2 +- keyboards/ergodox/keymaps/erez_experimental/keymap.c | 2 +- keyboards/ergodox/keymaps/german-kinergo/keymap.c | 2 +- keyboards/ergodox/keymaps/german-manuneo/keymap.c | 2 +- keyboards/ergodox/keymaps/german-manuneo/keymap.md | 2 +- keyboards/ergodox/keymaps/german/keymap.c | 2 +- keyboards/ergodox/keymaps/j3rn/keymap.c | 2 +- keyboards/ergodox/keymaps/jack/keymap.c | 2 +- keyboards/ergodox/keymaps/jacobono/keymap.c | 2 +- keyboards/ergodox/keymaps/jgarr/keymap.c | 2 +- keyboards/ergodox/keymaps/josh/keymap.c | 2 +- keyboards/ergodox/keymaps/kastyle/keymap.c | 2 +- keyboards/ergodox/keymaps/kines-ish/keymap.c | 2 +- keyboards/ergodox/keymaps/maz/keymap.c | 2 +- keyboards/ergodox/keymaps/mpiechotka/keymap.c | 2 +- keyboards/ergodox/keymaps/msc/keymap.c | 2 +- keyboards/ergodox/keymaps/naps62/keymap.c | 2 +- keyboards/ergodox/keymaps/ordinary/keymap.c | 2 +- keyboards/ergodox/keymaps/osx_de/keymap.c | 2 +- keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c | 2 +- keyboards/ergodox/keymaps/osx_de_experimental/keymap.c | 2 +- keyboards/ergodox/keymaps/osx_fr/keymap.c | 4 ++-- keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c | 2 +- keyboards/ergodox/keymaps/plover/keymap.c | 2 +- keyboards/ergodox/keymaps/plums/keymap.c | 2 +- keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c | 2 +- .../keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c | 2 +- .../keymaps/romanzolotarev-norman-plover-osx/keymap.c | 2 +- .../keymaps/romanzolotarev-norman-qwerty-osx/keymap.c | 2 +- keyboards/ergodox/keymaps/sneako/keymap.c | 2 +- keyboards/ergodox/keymaps/software_neo2/keymap.c | 2 +- keyboards/ergodox/keymaps/supercoder/keymap.c | 2 +- keyboards/ergodox/keymaps/techtomas/keymap.c | 2 +- keyboards/ergodox/keymaps/teckinesis/keymap.c | 2 +- keyboards/ergodox/keymaps/tkuichooseyou/keymap.c | 2 +- keyboards/ergodox/keymaps/tm2030/keymap.c | 2 +- keyboards/ergodox/keymaps/tonyabra_osx/keymap.c | 2 +- keyboards/ergodox/keymaps/townk_osx/keymap.c | 2 +- keyboards/ergodox/keymaps/twey/keymap.c | 2 +- keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c | 2 +- keyboards/ergodox/keymaps/zweihander-osx/keymap.c | 2 +- 58 files changed, 70 insertions(+), 58 deletions(-) create mode 100644 keyboards/ergodox/config.h diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h new file mode 100644 index 0000000000..c37c10e931 --- /dev/null +++ b/keyboards/ergodox/config.h @@ -0,0 +1,12 @@ +#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ +#define KEYBOARDS_ERGODOX_CONFIG_H_ + +#ifdef SUBPROJECT_ez + #include "ez/config.h" +#endif +#ifdef SUBPROJECT_infinity + #include "infinity/config.h" +#endif + + +#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox/keymaps/ab/keymap.c b/keyboards/ergodox/keymaps/ab/keymap.c index df6f334600..7938c9da3b 100644 --- a/keyboards/ergodox/keymaps/ab/keymap.c +++ b/keyboards/ergodox/keymaps/ab/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c index 052517d70e..31ae4262b2 100644 --- a/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c +++ b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_german.h" diff --git a/keyboards/ergodox/keymaps/alexjj/keymap.c b/keyboards/ergodox/keymaps/alexjj/keymap.c index 448f62da02..ac954ba5bc 100644 --- a/keyboards/ergodox/keymaps/alexjj/keymap.c +++ b/keyboards/ergodox/keymaps/alexjj/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index c120872929..1ebcf528b4 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -2,7 +2,7 @@ * algernon's ErgoDox EZ layout, please see the readme.md file! */ -#include "ergodox_ez.h" +#include "ergodox.h" #include "led.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/andrew_osx/keymap.c b/keyboards/ergodox/keymaps/andrew_osx/keymap.c index 48257d23a3..750155d986 100644 --- a/keyboards/ergodox/keymaps/andrew_osx/keymap.c +++ b/keyboards/ergodox/keymaps/andrew_osx/keymap.c @@ -1,7 +1,7 @@ // Netable differences vs. the default firmware for the ErgoDox EZ: // 1. The Cmd key is now on the right side, making Cmd+Space easier. // 2. The media keys work on OSX (But not on Windows). -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c index 921a94d63a..2d88fc10ea 100644 --- a/keyboards/ergodox/keymaps/bepo/keymap.c +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_bepo.h" diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 8a2ba26d22..2ac06eef85 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "led.h" diff --git a/keyboards/ergodox/keymaps/colemak/keymap.c b/keyboards/ergodox/keymaps/colemak/keymap.c index 9601726f7b..7ef81ab4b9 100644 --- a/keyboards/ergodox/keymaps/colemak/keymap.c +++ b/keyboards/ergodox/keymaps/colemak/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c index a909ed3a4f..eb0156c45b 100644 --- a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c +++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_norwegian.h" diff --git a/keyboards/ergodox/keymaps/csharp_dev/keymap.c b/keyboards/ergodox/keymaps/csharp_dev/keymap.c index e9648ede7d..e0c66f4872 100644 --- a/keyboards/ergodox/keymaps/csharp_dev/keymap.c +++ b/keyboards/ergodox/keymaps/csharp_dev/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/dave/keymap.c b/keyboards/ergodox/keymaps/dave/keymap.c index e9480af3e9..32c70097b0 100644 --- a/keyboards/ergodox/keymaps/dave/keymap.c +++ b/keyboards/ergodox/keymaps/dave/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/default_osx/keymap.c b/keyboards/ergodox/keymaps/default_osx/keymap.c index c57ffbb889..e9a242e07d 100644 --- a/keyboards/ergodox/keymaps/default_osx/keymap.c +++ b/keyboards/ergodox/keymaps/default_osx/keymap.c @@ -1,7 +1,7 @@ // Netable differences vs. the default firmware for the ErgoDox EZ: // 1. The Cmd key is now on the right side, making Cmd+Space easier. // 2. The media keys work on OSX (But not on Windows). -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/dragon788/keymap.c b/keyboards/ergodox/keymaps/dragon788/keymap.c index 3aec8c6cf9..d33bc6a259 100644 --- a/keyboards/ergodox/keymaps/dragon788/keymap.c +++ b/keyboards/ergodox/keymaps/dragon788/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/dvorak/keymap.c b/keyboards/ergodox/keymaps/dvorak/keymap.c index 22947327d3..d3609c673e 100644 --- a/keyboards/ergodox/keymaps/dvorak/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c index 82f55b4bc0..89eae52080 100644 --- a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c index 6eb864b447..6d7adf9073 100755 --- a/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c index 1d8e66a082..e80f08d736 100644 --- a/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c +++ b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 04ad2a8167..47e40aa557 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -1,5 +1,5 @@ #include -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/german-kinergo/keymap.c b/keyboards/ergodox/keymaps/german-kinergo/keymap.c index b1cecf0ddd..971318d87b 100644 --- a/keyboards/ergodox/keymaps/german-kinergo/keymap.c +++ b/keyboards/ergodox/keymaps/german-kinergo/keymap.c @@ -1,7 +1,7 @@ // German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan. // // chschmitz, 2016-01-27 -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_german.h" diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.c b/keyboards/ergodox/keymaps/german-manuneo/keymap.c index 5fcc14d518..16e92bc23b 100644 --- a/keyboards/ergodox/keymaps/german-manuneo/keymap.c +++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "action_layer.h" #include "keymap.h" #include "keymap_german.h" diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.md b/keyboards/ergodox/keymaps/german-manuneo/keymap.md index 2c9e0a8376..837b254462 100644 --- a/keyboards/ergodox/keymaps/german-manuneo/keymap.md +++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.md @@ -12,7 +12,7 @@ Tested with python 2.7 and python 3.4 { "layout": "ergodox_ez", "keymaps_includes": [ - "ergodox_ez.h", + "ergodox.h", "action_layer.h", "keymap_common.h", "keymap_extras/keymap_german.h", diff --git a/keyboards/ergodox/keymaps/german/keymap.c b/keyboards/ergodox/keymaps/german/keymap.c index 3eab51f0e2..9b2f6ffa2d 100644 --- a/keyboards/ergodox/keymaps/german/keymap.c +++ b/keyboards/ergodox/keymaps/german/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_german.h" diff --git a/keyboards/ergodox/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c index 6e271321d5..43c8f30a35 100644 --- a/keyboards/ergodox/keymaps/j3rn/keymap.c +++ b/keyboards/ergodox/keymaps/j3rn/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c index 80bf9d535d..dda253fa45 100644 --- a/keyboards/ergodox/keymaps/jack/keymap.c +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/jacobono/keymap.c b/keyboards/ergodox/keymaps/jacobono/keymap.c index 6b19800af0..dc7382bfe8 100644 --- a/keyboards/ergodox/keymaps/jacobono/keymap.c +++ b/keyboards/ergodox/keymaps/jacobono/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/jgarr/keymap.c b/keyboards/ergodox/keymaps/jgarr/keymap.c index a3ad2040f4..42d58421de 100644 --- a/keyboards/ergodox/keymaps/jgarr/keymap.c +++ b/keyboards/ergodox/keymaps/jgarr/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c index de5664a25a..488b214273 100644 --- a/keyboards/ergodox/keymaps/josh/keymap.c +++ b/keyboards/ergodox/keymaps/josh/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c index 3982e0a19f..a920850039 100644 --- a/keyboards/ergodox/keymaps/kastyle/keymap.c +++ b/keyboards/ergodox/keymaps/kastyle/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/kines-ish/keymap.c b/keyboards/ergodox/keymaps/kines-ish/keymap.c index 5063c99f28..83f5b0e2b4 100644 --- a/keyboards/ergodox/keymaps/kines-ish/keymap.c +++ b/keyboards/ergodox/keymaps/kines-ish/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/maz/keymap.c b/keyboards/ergodox/keymaps/maz/keymap.c index 7b8f0df74d..6378f874be 100644 --- a/keyboards/ergodox/keymaps/maz/keymap.c +++ b/keyboards/ergodox/keymaps/maz/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/mpiechotka/keymap.c b/keyboards/ergodox/keymaps/mpiechotka/keymap.c index 5bfef59955..67aca4479c 100644 --- a/keyboards/ergodox/keymaps/mpiechotka/keymap.c +++ b/keyboards/ergodox/keymaps/mpiechotka/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_colemak.h" diff --git a/keyboards/ergodox/keymaps/msc/keymap.c b/keyboards/ergodox/keymaps/msc/keymap.c index e567e513f9..c43aecf6b8 100644 --- a/keyboards/ergodox/keymaps/msc/keymap.c +++ b/keyboards/ergodox/keymaps/msc/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/naps62/keymap.c b/keyboards/ergodox/keymaps/naps62/keymap.c index d8c28423cf..9064053fc1 100644 --- a/keyboards/ergodox/keymaps/naps62/keymap.c +++ b/keyboards/ergodox/keymaps/naps62/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c index 778cbc63cf..bf0574ea2c 100644 --- a/keyboards/ergodox/keymaps/ordinary/keymap.c +++ b/keyboards/ergodox/keymaps/ordinary/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "led.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/osx_de/keymap.c b/keyboards/ergodox/keymaps/osx_de/keymap.c index 554813d7e8..e3b9e11f47 100644 --- a/keyboards/ergodox/keymaps/osx_de/keymap.c +++ b/keyboards/ergodox/keymaps/osx_de/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_german_osx.h" diff --git a/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c index 687a5cb8b5..6c4312a32e 100644 --- a/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c +++ b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c index 21d695894a..61b6a4fdb3 100644 --- a/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_neo2.h" diff --git a/keyboards/ergodox/keymaps/osx_fr/keymap.c b/keyboards/ergodox/keymaps/osx_fr/keymap.c index de951666dd..7dee284fae 100644 --- a/keyboards/ergodox/keymaps/osx_fr/keymap.c +++ b/keyboards/ergodox/keymaps/osx_fr/keymap.c @@ -1,5 +1,5 @@ // French AZERTY version of the default_osx file -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_french_osx.h" @@ -184,4 +184,4 @@ void matrix_scan_user(void) { break; } -}; \ No newline at end of file +}; diff --git a/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c index 1032be5491..11281df8ab 100644 --- a/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c +++ b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c @@ -5,7 +5,7 @@ // Only default layer was remapped all others layers are standard Ergodox EZ // Very personal mapping of-course, but who knows a starting point for others. -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/plover/keymap.c b/keyboards/ergodox/keymaps/plover/keymap.c index 8a58a37f68..12b3aa212f 100644 --- a/keyboards/ergodox/keymaps/plover/keymap.c +++ b/keyboards/ergodox/keymaps/plover/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/plums/keymap.c b/keyboards/ergodox/keymaps/plums/keymap.c index 46eb2e42b1..2853455e3d 100644 --- a/keyboards/ergodox/keymaps/plums/keymap.c +++ b/keyboards/ergodox/keymaps/plums/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c index a66971befd..24d0c4ecb7 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c index 7c9f673816..9f41e51899 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c index 9971b834cf..563e24872d 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c index dedac694e4..5569f5c74e 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/sneako/keymap.c b/keyboards/ergodox/keymaps/sneako/keymap.c index 0c68631029..08cadd6852 100644 --- a/keyboards/ergodox/keymaps/sneako/keymap.c +++ b/keyboards/ergodox/keymaps/sneako/keymap.c @@ -1,7 +1,7 @@ // Based on `default_osx` // Replace left Bksp with Ctrl/Esc // Remove the Ctrl from Z and / -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/software_neo2/keymap.c b/keyboards/ergodox/keymaps/software_neo2/keymap.c index 2eaba0d7da..41ace403d7 100644 --- a/keyboards/ergodox/keymaps/software_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/software_neo2/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_neo2.h" diff --git a/keyboards/ergodox/keymaps/supercoder/keymap.c b/keyboards/ergodox/keymaps/supercoder/keymap.c index ca21d30fd2..775acf2c96 100644 --- a/keyboards/ergodox/keymaps/supercoder/keymap.c +++ b/keyboards/ergodox/keymaps/supercoder/keymap.c @@ -2,7 +2,7 @@ * SuperCoder 2000 layout */ -#include "ergodox_ez.h" +#include "ergodox.h" /* Layers */ diff --git a/keyboards/ergodox/keymaps/techtomas/keymap.c b/keyboards/ergodox/keymaps/techtomas/keymap.c index 1ff6618b98..93d59d4876 100644 --- a/keyboards/ergodox/keymaps/techtomas/keymap.c +++ b/keyboards/ergodox/keymaps/techtomas/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/teckinesis/keymap.c b/keyboards/ergodox/keymaps/teckinesis/keymap.c index ec6ceb96bc..2837874f78 100644 --- a/keyboards/ergodox/keymaps/teckinesis/keymap.c +++ b/keyboards/ergodox/keymaps/teckinesis/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "led.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c index 87b77e42ef..d1c7791865 100644 --- a/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c +++ b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/tm2030/keymap.c b/keyboards/ergodox/keymaps/tm2030/keymap.c index ca80752263..1d861ee7c2 100644 --- a/keyboards/ergodox/keymaps/tm2030/keymap.c +++ b/keyboards/ergodox/keymaps/tm2030/keymap.c @@ -1,5 +1,5 @@ /* TypeMatrix-2030-like keymap */ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "led.h" diff --git a/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c b/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c index 87b9fb6764..2a15fcb8d8 100644 --- a/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c +++ b/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" diff --git a/keyboards/ergodox/keymaps/townk_osx/keymap.c b/keyboards/ergodox/keymaps/townk_osx/keymap.c index 07e58a491b..5043d49a09 100644 --- a/keyboards/ergodox/keymaps/townk_osx/keymap.c +++ b/keyboards/ergodox/keymaps/townk_osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "action_util.h" diff --git a/keyboards/ergodox/keymaps/twey/keymap.c b/keyboards/ergodox/keymaps/twey/keymap.c index 019930f2a2..5deacd63f5 100644 --- a/keyboards/ergodox/keymaps/twey/keymap.c +++ b/keyboards/ergodox/keymaps/twey/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" #include "keymap_plover.h" diff --git a/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c index 8effa53b26..c05a1018de 100644 --- a/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c +++ b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" // readme diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c index 3444152bc3..40b1d7d6dd 100644 --- a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c +++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" -- cgit v1.2.3 From e01b4c3fd9a7b66276ffd22dcac25d569d7bb7ff Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 00:41:15 +0300 Subject: Most ergodox keymaps compiles on Infinity There are linker errors due to missing led funcitonality though --- .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 +++++++ .../ergodox/drivers/gdisp/IS31FL3731C/driver.mk | 2 + .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 +++++++++++++++++++++ .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 +++ .../ergodox/drivers/gdisp/emulator_lcd/driver.mk | 2 + .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 + .../ergodox/drivers/gdisp/emulator_led/driver.mk | 2 + .../drivers/gdisp/emulator_led/emulator_led.c | 10 + .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 ++++++++ .../ergodox/drivers/gdisp/st7565ergodox/driver.mk | 2 + .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 ++++++++++++++++++ .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 ++ .../ergodox/drivers/gdisp/st7565ergodox/st7565.h | 37 +++ keyboards/ergodox/ergodox.c | 8 - keyboards/ergodox/ergodox.h | 1 - keyboards/ergodox/infinity/Makefile | 4 +- .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 ------- .../infinity/drivers/gdisp/IS31FL3731C/driver.mk | 2 - .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 --------------------- .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 --- .../infinity/drivers/gdisp/emulator_lcd/driver.mk | 2 - .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 - .../infinity/drivers/gdisp/emulator_led/driver.mk | 2 - .../drivers/gdisp/emulator_led/emulator_led.c | 10 - .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 -------- .../infinity/drivers/gdisp/st7565ergodox/driver.mk | 2 - .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 ------------------ .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 -- .../infinity/drivers/gdisp/st7565ergodox/st7565.h | 37 --- keyboards/ergodox/infinity/infinity.c | 21 +- keyboards/ergodox/infinity/infinity.h | 36 +-- keyboards/ergodox/infinity/matrix.c | 3 + quantum/quantum.h | 1 + tmk_core/common/print.h | 4 +- 34 files changed, 1038 insertions(+), 1024 deletions(-) create mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h create mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk create mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c create mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h create mode 100644 keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk create mode 100644 keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c create mode 100644 keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk create mode 100644 keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c create mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h create mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk create mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c create mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h create mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h delete mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h new file mode 100644 index 0000000000..2ea73f1fb3 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h @@ -0,0 +1,113 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +static const I2CConfig i2ccfg = { + 400000 // clock speed (Hz); 400kHz max for IS31 +}; + +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 + +static const uint8_t led_mask[] = { + 0xFF, 0x00, /* C1-1 -> C1-16 */ + 0xFF, 0x00, /* C2-1 -> C2-16 */ + 0xFF, 0x00, /* C3-1 -> C3-16 */ + 0xFF, 0x00, /* C4-1 -> C4-16 */ + 0x3F, 0x00, /* C5-1 -> C5-16 */ + 0x00, 0x00, /* C6-1 -> C6-16 */ + 0x00, 0x00, /* C7-1 -> C7-16 */ + 0x00, 0x00, /* C8-1 -> C8-16 */ + 0x00, 0x00, /* C9-1 -> C9-16 */ +}; + +// The address of the LED +#define LA(c, r) (c + r * 16 ) +// Need to be an address that is not mapped, but inside the range of the controller matrix +#define NA LA(8, 8) + +// The numbers in the comments are the led numbers DXX on the PCB +// The mapping is taken from the schematic of left hand side +static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { +// 45 44 43 42 41 40 39 + { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, +// 52 51 50 49 48 47 46 + { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, +// 58 57 56 55 54 53 N/A + { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, +// 67 66 65 64 63 62 61 + { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, +// 76 75 74 73 72 60 59 + { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, +// N/A N/A N/A N/A N/A N/A 68 + { NA, NA, NA, NA, NA, NA, LA(5, 4) }, +// N/A N/A N/A N/A 71 70 69 + { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, +}; + + +#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND +#define IS31_TIMEOUT 5000 + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + /* I2C pins */ + palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL + palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA + palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); + palClearPad(GPIOB, 16); + /* start I2C */ + i2cStart(&I2CD1, &i2ccfg); + // try high drive (from kiibohd) + I2CD1.i2c->C2 |= I2Cx_C2_HDRS; + // try glitch fixing (from kiibohd) + I2CD1.i2c->FLT = 4; +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { + (void) g; + return led_mask; +} + +static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) +{ + (void) g; + return led_mapping[y][x]; +} + +static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { + (void) g; + if(!shutdown) { + palSetPad(GPIOB, 16); + } + else { + palClearPad(GPIOB, 16); + } +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk new file mode 100644 index 0000000000..f32d0d8685 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/IS31FL3731C +GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c new file mode 100644 index 0000000000..1d21f0c498 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c @@ -0,0 +1,333 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX +#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_IS31FL3731C.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 9 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 16 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#define IS31_ADDR_DEFAULT 0x74 + +#define IS31_REG_CONFIG 0x00 +// bits in reg +#define IS31_REG_CONFIG_PICTUREMODE 0x00 +#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 +#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 +// D2:D0 bits are starting frame for autoplay mode + +#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode + +#define IS31_REG_AUTOPLAYCTRL1 0x02 +// D6:D4 number of loops (000=infty) +// D2:D0 number of frames to be used + +#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) + +#define IS31_REG_DISPLAYOPT 0x05 +#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames +#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 +// D2:D0 bits blink period time (*0.27s) + +#define IS31_REG_AUDIOSYNC 0x06 +#define IS31_REG_AUDIOSYNC_ENABLE 0x1 + +#define IS31_REG_FRAMESTATE 0x07 + +#define IS31_REG_BREATHCTRL1 0x08 +// D6:D4 fade out time (26ms*2^i) +// D2:D0 fade in time (26ms*2^i) + +#define IS31_REG_BREATHCTRL2 0x09 +#define IS31_REG_BREATHCTRL2_ENABLE 0x10 +// D2:D0 extinguish time (3.5ms*2^i) + +#define IS31_REG_SHUTDOWN 0x0A +#define IS31_REG_SHUTDOWN_OFF 0x0 +#define IS31_REG_SHUTDOWN_ON 0x1 + +#define IS31_REG_AGCCTRL 0x0B +#define IS31_REG_ADCRATE 0x0C + +#define IS31_COMMANDREGISTER 0xFD +#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' +#define IS31_FUNCTIONREG_SIZE 0xD + +#define IS31_FRAME_SIZE 0xB4 + +#define IS31_PWM_REG 0x24 +#define IS31_PWM_SIZE 0x90 + +#define IS31_LED_MASK_SIZE 0x12 +#define IS31_SCREEN_WIDTH 16 + +#define IS31 + +//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm +const unsigned char cie[256] = { + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, + 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, + 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, + 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, + 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, + 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, + 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, + 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, + 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, + 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, + 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, + 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, + 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, + 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, + 242, 245, 247, 250, 252, 255, +}; + + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + uint8_t write_buffer_offset; + uint8_t write_buffer[IS31_FRAME_SIZE]; + uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; + uint8_t page; +}__attribute__((__packed__)) PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +static GFXINLINE void write_page(GDisplay* g, uint8_t page) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = IS31_COMMANDREGISTER; + tx[1] = page; + write_data(g, tx, 2); +} + +static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = reg; + tx[1] = data; + write_page(g, page); + write_data(g, tx, 2); +} + +static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { + PRIV(g)->write_buffer_offset = offset; + write_page(g, page); + write_data(g, (uint8_t*)PRIV(g), length + 1); +} + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + __builtin_memset(PRIV(g), 0, sizeof(PrivData)); + PRIV(g)->page = 0; + + // Initialise the board interface + init_board(g); + gfxSleepMilliseconds(10); + + // zero function page, all registers (assuming full_page is all zeroes) + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + set_hardware_shutdown(g, false); + gfxSleepMilliseconds(10); + // software shutdown + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + gfxSleepMilliseconds(10); + // zero function page, all registers + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + gfxSleepMilliseconds(10); + + + // zero all LED registers on all 8 pages, and enable the mask + __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); + for(uint8_t i=0; i<8; i++) { + write_ram(g, i, 0, IS31_FRAME_SIZE); + gfxSleepMilliseconds(1); + } + + // software shutdown disable (i.e. turn stuff on) + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + gfxSleepMilliseconds(10); + + // Finish Init + post_init_board(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + PRIV(g)->page++; + PRIV(g)->page %= 2; + // TODO: some smarter algorithm for this + // We should run only one physical page at a time + // This way we don't need to send so much data, and + // we could use slightly less memory + uint8_t* src = PRIV(g)->frame_buffer; + for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; + ++src; + } + } + write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); + gfxSleepMilliseconds(1); + write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + break; + case powerOn: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h new file mode 100644 index 0000000000..bb28ad775e --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h @@ -0,0 +1,36 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk new file mode 100644 index 0000000000..16c3f80f53 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_lcd +GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c new file mode 100644 index 0000000000..babfe2b367 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 128 +#define GDISP_SCREEN_HEIGHT 32 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk new file mode 100644 index 0000000000..2554344321 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_led +GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c new file mode 100644 index 0000000000..b0ebcdc475 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h new file mode 100644 index 0000000000..290571ce5b --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h @@ -0,0 +1,127 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +#include "print.h" + +#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 +#define ST7565_ADC ST7565_ADC_NORMAL +#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC +#define ST7565_PAGE_ORDER 0,1,2,3 +/* + * Custom page order for several LCD boards, e.g. HEM12864-99 + * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 + */ + +#define ST7565_GPIOPORT GPIOC +#define ST7565_PORT PORTC +#define ST7565_A0_PIN 7 +#define ST7565_RST_PIN 8 +#define ST7565_MOSI_PIN 6 +#define ST7565_SLCK_PIN 5 +#define ST7565_SS_PIN 4 + +#define palSetPadModeRaw(portname, bits) \ + ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits + +#define palSetPadModeNamed(portname, portmode) \ + palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) + +#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) +// DSPI Clock and Transfer Attributes +// Frame Size: 8 bits +// MSB First +// CLK Low by default +static const SPIConfig spi1config = { + NULL, + /* HW dependent part.*/ + ST7565_GPIOPORT, + ST7565_SS_PIN, + SPIx_CTARn_FMSZ(7) + | SPIx_CTARn_ASC(7) + | SPIx_CTARn_DT(7) + | SPIx_CTARn_CSSCK(7) + | SPIx_CTARn_PBR(0) + | SPIx_CTARn_BR(7) + //SPI_CR1_BR_0 +}; + +static bool_t st7565_is_data_mode = 1; + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + st7565_is_data_mode = 1; + palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + palSetPadModeRaw(MOSI, ST7565_SPI_MODE); + palSetPadModeRaw(SLCK, ST7565_SPI_MODE); + palSetPadModeRaw(SS, ST7565_SPI_MODE); + + spiInit(); + spiStart(&SPID1, &spi1config); + spiSelect(&SPID1); +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { + (void) g; + if (state) { + palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } + else { + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } +} + +static GFXINLINE void acquire_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to acquire + // spiAcquireBus(&SPID1); +} + +static GFXINLINE void release_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to release + //spiReleaseBus(&SPID1); +} + +static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { + (void) g; + if (st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 0; + } + spiSend(&SPID1, 1, &cmd); +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + if (!st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 1; + } + spiSend(&SPID1, length, data); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk new file mode 100644 index 0000000000..889a1a0317 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/st7565ergodox +GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c new file mode 100644 index 0000000000..c33aea81a8 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c @@ -0,0 +1,292 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX +#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_ST7565.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 32 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 128 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#include "drivers/gdisp/st7565ergodox/st7565.h" + +/*===========================================================================*/ +/* Driver config defaults for backward compatibility. */ +/*===========================================================================*/ +#ifndef ST7565_LCD_BIAS + #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 +#endif +#ifndef ST7565_ADC + #define ST7565_ADC ST7565_ADC_NORMAL +#endif +#ifndef ST7565_COM_SCAN + #define ST7565_COM_SCAN ST7565_COM_SCAN_INC +#endif +#ifndef ST7565_PAGE_ORDER + #define ST7565_PAGE_ORDER 0,1,2,3 +#endif + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + bool_t buffer2; + uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; +}PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) +#define RAM(g) (PRIV(g)->ram) +#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } +#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } + +// Some common routines and macros +#define delay(us) gfxSleepMicroseconds(us) +#define delay_ms(ms) gfxSleepMilliseconds(ms) + +#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) +#define xybit(y) (1<<((y)&7)) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/* + * As this controller can't update on a pixel boundary we need to maintain the + * the entire display surface in memory so that we can do the necessary bit + * operations. Fortunately it is a small display in monochrome. + * 64 * 128 / 8 = 1024 bytes. + */ + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + PRIV(g)->buffer2 = false; + + // Initialise the board interface + init_board(g); + + // Hardware reset + setpin_reset(g, TRUE); + gfxSleepMilliseconds(20); + setpin_reset(g, FALSE); + gfxSleepMilliseconds(20); + + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + write_cmd(g, ST7565_LCD_BIAS); + write_cmd(g, ST7565_ADC); + write_cmd(g, ST7565_COM_SCAN); + + write_cmd(g, ST7565_START_LINE | 0); + + write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); + + // turn on voltage converter (VC=1, VR=0, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x04); + delay_ms(50); + + // turn on voltage regulator (VC=1, VR=1, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x06); + delay_ms(50); + + // turn on voltage follower (VC=1, VR=1, VF=1) + write_cmd(g, ST7565_POWER_CONTROL | 0x07); + delay_ms(50); + + write_cmd(g, 0xE2); + write_cmd(g, ST7565_COM_SCAN); + write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); + //write_cmd2(g, ST7565_CONTRAST, 0); + write_cmd(g, ST7565_DISPLAY_ON); + write_cmd(g, ST7565_ALLON_NORMAL); + write_cmd(g, ST7565_INVERT_DISPLAY); + + write_cmd(g, ST7565_RMW); + + // Finish Init + post_init_board(g); + + // Release the bus + release_bus(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + unsigned p; + + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + acquire_bus(g); + unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); + for (p = 0; p < 4; p++) { + write_cmd(g, ST7565_PAGE | (p + dstOffset)); + write_cmd(g, ST7565_COLUMN_MSB | 0); + write_cmd(g, ST7565_COLUMN_LSB | 0); + write_cmd(g, ST7565_RMW); + write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); + } + unsigned line = (PRIV(g)->buffer2 ? 32 : 0); + write_cmd(g, ST7565_START_LINE | line); + PRIV(g)->buffer2 = !PRIV(g)->buffer2; + release_bus(g); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + if (gdispColor2Native(g->p.color) != Black) + RAM(g)[xyaddr(x, y)] |= xybit(y); + else + RAM(g)[xyaddr(x, y)] &= ~xybit(y); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + release_bus(g); + break; + case powerOn: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_ON); + release_bus(g); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + if ((unsigned)g->p.ptr > 100) + g->p.ptr = (void *)100; + acquire_bus(g); + write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); + release_bus(g); + g->g.Contrast = (unsigned)g->p.ptr; + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h new file mode 100644 index 0000000000..48587b9e14 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h @@ -0,0 +1,26 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h new file mode 100644 index 0000000000..48636b33d6 --- /dev/null +++ b/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h @@ -0,0 +1,37 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _ST7565_H +#define _ST7565_H + +#define ST7565_CONTRAST 0x81 +#define ST7565_ALLON_NORMAL 0xA4 +#define ST7565_ALLON 0xA5 +#define ST7565_POSITIVE_DISPLAY 0xA6 +#define ST7565_INVERT_DISPLAY 0xA7 +#define ST7565_DISPLAY_OFF 0xAE +#define ST7565_DISPLAY_ON 0xAF + +#define ST7565_LCD_BIAS_7 0xA3 +#define ST7565_LCD_BIAS_9 0xA2 + +#define ST7565_ADC_NORMAL 0xA0 +#define ST7565_ADC_REVERSE 0xA1 + +#define ST7565_COM_SCAN_INC 0xC0 +#define ST7565_COM_SCAN_DEC 0xC8 + +#define ST7565_START_LINE 0x40 +#define ST7565_PAGE 0xB0 +#define ST7565_COLUMN_MSB 0x10 +#define ST7565_COLUMN_LSB 0x00 +#define ST7565_RMW 0xE0 + +#define ST7565_RESISTOR_RATIO 0x20 +#define ST7565_POWER_CONTROL 0x28 + +#endif /* _ST7565_H */ diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c index 992e95d811..e69de29bb2 100644 --- a/keyboards/ergodox/ergodox.c +++ b/keyboards/ergodox/ergodox.c @@ -1,8 +0,0 @@ -/* - * ergodox.c - * - * Created on: 7 jul 2016 - * Author: Fred Wales - */ - - diff --git a/keyboards/ergodox/ergodox.h b/keyboards/ergodox/ergodox.h index fe54e3260f..f8ec8b5bf2 100644 --- a/keyboards/ergodox/ergodox.h +++ b/keyboards/ergodox/ergodox.h @@ -1,6 +1,5 @@ #ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ #define KEYBOARDS_ERGODOX_ERGODOX_H_ - #ifdef SUBPROJECT_ez #include "ez.h" #endif diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile index 942032f83c..22065e4d2d 100644 --- a/keyboards/ergodox/infinity/Makefile +++ b/keyboards/ergodox/infinity/Makefile @@ -52,14 +52,14 @@ ARMV = 7 # Vector table for application # 0x00000000-0x00001000 area is occupied by bootlaoder.*/ # The CORTEX_VTOR... is needed only for MCHCK/Infinity KB -OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000 +OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000 # Build Options # comment out to disable the options. # CUSTOM_MATRIX ?= yes # Custom matrix file SERIAL_LINK_ENABLE = yes -VISUALIZER_ENABLE ?= yes +VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile LCD_ENABLE ?= yes LED_ENABLE ?= yes LCD_BACKLIGHT_ENABLE ?= yes diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h deleted file mode 100644 index 2ea73f1fb3..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -static const I2CConfig i2ccfg = { - 400000 // clock speed (Hz); 400kHz max for IS31 -}; - -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 - -static const uint8_t led_mask[] = { - 0xFF, 0x00, /* C1-1 -> C1-16 */ - 0xFF, 0x00, /* C2-1 -> C2-16 */ - 0xFF, 0x00, /* C3-1 -> C3-16 */ - 0xFF, 0x00, /* C4-1 -> C4-16 */ - 0x3F, 0x00, /* C5-1 -> C5-16 */ - 0x00, 0x00, /* C6-1 -> C6-16 */ - 0x00, 0x00, /* C7-1 -> C7-16 */ - 0x00, 0x00, /* C8-1 -> C8-16 */ - 0x00, 0x00, /* C9-1 -> C9-16 */ -}; - -// The address of the LED -#define LA(c, r) (c + r * 16 ) -// Need to be an address that is not mapped, but inside the range of the controller matrix -#define NA LA(8, 8) - -// The numbers in the comments are the led numbers DXX on the PCB -// The mapping is taken from the schematic of left hand side -static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { -// 45 44 43 42 41 40 39 - { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, -// 52 51 50 49 48 47 46 - { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, -// 58 57 56 55 54 53 N/A - { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, -// 67 66 65 64 63 62 61 - { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, -// 76 75 74 73 72 60 59 - { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, -// N/A N/A N/A N/A N/A N/A 68 - { NA, NA, NA, NA, NA, NA, LA(5, 4) }, -// N/A N/A N/A N/A 71 70 69 - { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, -}; - - -#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND -#define IS31_TIMEOUT 5000 - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - /* I2C pins */ - palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL - palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA - palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); - palClearPad(GPIOB, 16); - /* start I2C */ - i2cStart(&I2CD1, &i2ccfg); - // try high drive (from kiibohd) - I2CD1.i2c->C2 |= I2Cx_C2_HDRS; - // try glitch fixing (from kiibohd) - I2CD1.i2c->FLT = 4; -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { - (void) g; - return led_mask; -} - -static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) -{ - (void) g; - return led_mapping[y][x]; -} - -static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { - (void) g; - if(!shutdown) { - palSetPad(GPIOB, 16); - } - else { - palClearPad(GPIOB, 16); - } -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk deleted file mode 100644 index f32d0d8685..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/IS31FL3731C -GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c deleted file mode 100644 index 1d21f0c498..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX -#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_IS31FL3731C.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 9 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 16 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#define IS31_ADDR_DEFAULT 0x74 - -#define IS31_REG_CONFIG 0x00 -// bits in reg -#define IS31_REG_CONFIG_PICTUREMODE 0x00 -#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 -#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 -// D2:D0 bits are starting frame for autoplay mode - -#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode - -#define IS31_REG_AUTOPLAYCTRL1 0x02 -// D6:D4 number of loops (000=infty) -// D2:D0 number of frames to be used - -#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) - -#define IS31_REG_DISPLAYOPT 0x05 -#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames -#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 -// D2:D0 bits blink period time (*0.27s) - -#define IS31_REG_AUDIOSYNC 0x06 -#define IS31_REG_AUDIOSYNC_ENABLE 0x1 - -#define IS31_REG_FRAMESTATE 0x07 - -#define IS31_REG_BREATHCTRL1 0x08 -// D6:D4 fade out time (26ms*2^i) -// D2:D0 fade in time (26ms*2^i) - -#define IS31_REG_BREATHCTRL2 0x09 -#define IS31_REG_BREATHCTRL2_ENABLE 0x10 -// D2:D0 extinguish time (3.5ms*2^i) - -#define IS31_REG_SHUTDOWN 0x0A -#define IS31_REG_SHUTDOWN_OFF 0x0 -#define IS31_REG_SHUTDOWN_ON 0x1 - -#define IS31_REG_AGCCTRL 0x0B -#define IS31_REG_ADCRATE 0x0C - -#define IS31_COMMANDREGISTER 0xFD -#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' -#define IS31_FUNCTIONREG_SIZE 0xD - -#define IS31_FRAME_SIZE 0xB4 - -#define IS31_PWM_REG 0x24 -#define IS31_PWM_SIZE 0x90 - -#define IS31_LED_MASK_SIZE 0x12 -#define IS31_SCREEN_WIDTH 16 - -#define IS31 - -//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm -const unsigned char cie[256] = { - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, - 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, - 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, - 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, - 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, - 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, - 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, - 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, - 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, - 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, - 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, - 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, - 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, - 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, - 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, - 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, - 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, - 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, - 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, - 242, 245, 247, 250, 252, 255, -}; - - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - uint8_t write_buffer_offset; - uint8_t write_buffer[IS31_FRAME_SIZE]; - uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; - uint8_t page; -}__attribute__((__packed__)) PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -static GFXINLINE void write_page(GDisplay* g, uint8_t page) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = IS31_COMMANDREGISTER; - tx[1] = page; - write_data(g, tx, 2); -} - -static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = reg; - tx[1] = data; - write_page(g, page); - write_data(g, tx, 2); -} - -static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { - PRIV(g)->write_buffer_offset = offset; - write_page(g, page); - write_data(g, (uint8_t*)PRIV(g), length + 1); -} - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - __builtin_memset(PRIV(g), 0, sizeof(PrivData)); - PRIV(g)->page = 0; - - // Initialise the board interface - init_board(g); - gfxSleepMilliseconds(10); - - // zero function page, all registers (assuming full_page is all zeroes) - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - set_hardware_shutdown(g, false); - gfxSleepMilliseconds(10); - // software shutdown - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - gfxSleepMilliseconds(10); - // zero function page, all registers - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - gfxSleepMilliseconds(10); - - - // zero all LED registers on all 8 pages, and enable the mask - __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); - for(uint8_t i=0; i<8; i++) { - write_ram(g, i, 0, IS31_FRAME_SIZE); - gfxSleepMilliseconds(1); - } - - // software shutdown disable (i.e. turn stuff on) - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - gfxSleepMilliseconds(10); - - // Finish Init - post_init_board(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - PRIV(g)->page++; - PRIV(g)->page %= 2; - // TODO: some smarter algorithm for this - // We should run only one physical page at a time - // This way we don't need to send so much data, and - // we could use slightly less memory - uint8_t* src = PRIV(g)->frame_buffer; - for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; - ++src; - } - } - write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); - gfxSleepMilliseconds(1); - write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - break; - case powerOn: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h deleted file mode 100644 index bb28ad775e..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk deleted file mode 100644 index 16c3f80f53..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_lcd -GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c deleted file mode 100644 index babfe2b367..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 128 -#define GDISP_SCREEN_HEIGHT 32 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk deleted file mode 100644 index 2554344321..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_led -GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c deleted file mode 100644 index b0ebcdc475..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h deleted file mode 100644 index 290571ce5b..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -#include "print.h" - -#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 -#define ST7565_ADC ST7565_ADC_NORMAL -#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC -#define ST7565_PAGE_ORDER 0,1,2,3 -/* - * Custom page order for several LCD boards, e.g. HEM12864-99 - * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 - */ - -#define ST7565_GPIOPORT GPIOC -#define ST7565_PORT PORTC -#define ST7565_A0_PIN 7 -#define ST7565_RST_PIN 8 -#define ST7565_MOSI_PIN 6 -#define ST7565_SLCK_PIN 5 -#define ST7565_SS_PIN 4 - -#define palSetPadModeRaw(portname, bits) \ - ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits - -#define palSetPadModeNamed(portname, portmode) \ - palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) - -#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) -// DSPI Clock and Transfer Attributes -// Frame Size: 8 bits -// MSB First -// CLK Low by default -static const SPIConfig spi1config = { - NULL, - /* HW dependent part.*/ - ST7565_GPIOPORT, - ST7565_SS_PIN, - SPIx_CTARn_FMSZ(7) - | SPIx_CTARn_ASC(7) - | SPIx_CTARn_DT(7) - | SPIx_CTARn_CSSCK(7) - | SPIx_CTARn_PBR(0) - | SPIx_CTARn_BR(7) - //SPI_CR1_BR_0 -}; - -static bool_t st7565_is_data_mode = 1; - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - st7565_is_data_mode = 1; - palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - palSetPadModeRaw(MOSI, ST7565_SPI_MODE); - palSetPadModeRaw(SLCK, ST7565_SPI_MODE); - palSetPadModeRaw(SS, ST7565_SPI_MODE); - - spiInit(); - spiStart(&SPID1, &spi1config); - spiSelect(&SPID1); -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { - (void) g; - if (state) { - palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } - else { - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } -} - -static GFXINLINE void acquire_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to acquire - // spiAcquireBus(&SPID1); -} - -static GFXINLINE void release_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to release - //spiReleaseBus(&SPID1); -} - -static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { - (void) g; - if (st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 0; - } - spiSend(&SPID1, 1, &cmd); -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - if (!st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 1; - } - spiSend(&SPID1, length, data); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk deleted file mode 100644 index 889a1a0317..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/st7565ergodox -GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c deleted file mode 100644 index c33aea81a8..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX -#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_ST7565.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 32 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 128 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#include "drivers/gdisp/st7565ergodox/st7565.h" - -/*===========================================================================*/ -/* Driver config defaults for backward compatibility. */ -/*===========================================================================*/ -#ifndef ST7565_LCD_BIAS - #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 -#endif -#ifndef ST7565_ADC - #define ST7565_ADC ST7565_ADC_NORMAL -#endif -#ifndef ST7565_COM_SCAN - #define ST7565_COM_SCAN ST7565_COM_SCAN_INC -#endif -#ifndef ST7565_PAGE_ORDER - #define ST7565_PAGE_ORDER 0,1,2,3 -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - bool_t buffer2; - uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; -}PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) -#define RAM(g) (PRIV(g)->ram) -#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } -#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } - -// Some common routines and macros -#define delay(us) gfxSleepMicroseconds(us) -#define delay_ms(ms) gfxSleepMilliseconds(ms) - -#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) -#define xybit(y) (1<<((y)&7)) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/* - * As this controller can't update on a pixel boundary we need to maintain the - * the entire display surface in memory so that we can do the necessary bit - * operations. Fortunately it is a small display in monochrome. - * 64 * 128 / 8 = 1024 bytes. - */ - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - PRIV(g)->buffer2 = false; - - // Initialise the board interface - init_board(g); - - // Hardware reset - setpin_reset(g, TRUE); - gfxSleepMilliseconds(20); - setpin_reset(g, FALSE); - gfxSleepMilliseconds(20); - - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - write_cmd(g, ST7565_LCD_BIAS); - write_cmd(g, ST7565_ADC); - write_cmd(g, ST7565_COM_SCAN); - - write_cmd(g, ST7565_START_LINE | 0); - - write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); - - // turn on voltage converter (VC=1, VR=0, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x04); - delay_ms(50); - - // turn on voltage regulator (VC=1, VR=1, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x06); - delay_ms(50); - - // turn on voltage follower (VC=1, VR=1, VF=1) - write_cmd(g, ST7565_POWER_CONTROL | 0x07); - delay_ms(50); - - write_cmd(g, 0xE2); - write_cmd(g, ST7565_COM_SCAN); - write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); - //write_cmd2(g, ST7565_CONTRAST, 0); - write_cmd(g, ST7565_DISPLAY_ON); - write_cmd(g, ST7565_ALLON_NORMAL); - write_cmd(g, ST7565_INVERT_DISPLAY); - - write_cmd(g, ST7565_RMW); - - // Finish Init - post_init_board(g); - - // Release the bus - release_bus(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - unsigned p; - - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - acquire_bus(g); - unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); - for (p = 0; p < 4; p++) { - write_cmd(g, ST7565_PAGE | (p + dstOffset)); - write_cmd(g, ST7565_COLUMN_MSB | 0); - write_cmd(g, ST7565_COLUMN_LSB | 0); - write_cmd(g, ST7565_RMW); - write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); - } - unsigned line = (PRIV(g)->buffer2 ? 32 : 0); - write_cmd(g, ST7565_START_LINE | line); - PRIV(g)->buffer2 = !PRIV(g)->buffer2; - release_bus(g); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - if (gdispColor2Native(g->p.color) != Black) - RAM(g)[xyaddr(x, y)] |= xybit(y); - else - RAM(g)[xyaddr(x, y)] &= ~xybit(y); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - release_bus(g); - break; - case powerOn: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_ON); - release_bus(g); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - if ((unsigned)g->p.ptr > 100) - g->p.ptr = (void *)100; - acquire_bus(g); - write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); - release_bus(g); - g->g.Contrast = (unsigned)g->p.ptr; - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h deleted file mode 100644 index 48587b9e14..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h deleted file mode 100644 index 48636b33d6..0000000000 --- a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _ST7565_H -#define _ST7565_H - -#define ST7565_CONTRAST 0x81 -#define ST7565_ALLON_NORMAL 0xA4 -#define ST7565_ALLON 0xA5 -#define ST7565_POSITIVE_DISPLAY 0xA6 -#define ST7565_INVERT_DISPLAY 0xA7 -#define ST7565_DISPLAY_OFF 0xAE -#define ST7565_DISPLAY_ON 0xAF - -#define ST7565_LCD_BIAS_7 0xA3 -#define ST7565_LCD_BIAS_9 0xA2 - -#define ST7565_ADC_NORMAL 0xA0 -#define ST7565_ADC_REVERSE 0xA1 - -#define ST7565_COM_SCAN_INC 0xC0 -#define ST7565_COM_SCAN_DEC 0xC8 - -#define ST7565_START_LINE 0x40 -#define ST7565_PAGE 0xB0 -#define ST7565_COLUMN_MSB 0x10 -#define ST7565_COLUMN_LSB 0x00 -#define ST7565_RMW 0xE0 - -#define ST7565_RESISTOR_RATIO 0x20 -#define ST7565_POWER_CONTROL 0x28 - -#endif /* _ST7565_H */ diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c index 87ed40fabf..85e61e3aa6 100644 --- a/keyboards/ergodox/infinity/infinity.c +++ b/keyboards/ergodox/infinity/infinity.c @@ -1,8 +1,10 @@ -#include "infinity_ergodox.h" +#include "infinity.h" #include "ch.h" #include "hal.h" #include "serial_link/system/serial_link.h" +#ifdef VISUALIZER_ENABLE #include "lcd_backlight.h" +#endif void init_serial_link_hal(void) { PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2); @@ -36,7 +38,7 @@ void init_serial_link_hal(void) { // Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced // Which will reduce the brightness range #define PRESCALAR_DEFINE 0 - +#ifdef VISUALIZER_ENABLE void lcd_backlight_hal_init(void) { // Setup Backlight SIM->SCGC6 |= SIM_SCGC6_FTM0; @@ -74,3 +76,18 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { CHANNEL_GREEN.CnV = g; CHANNEL_BLUE.CnV = b; } +#endif + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h index de72675946..a92aa89bb6 100644 --- a/keyboards/ergodox/infinity/infinity.h +++ b/keyboards/ergodox/infinity/infinity.h @@ -21,24 +21,24 @@ B04, \ B14, B24, B34 \ ) { \ - { KC_NO, KC_NO, KC_NO, KC_##A03, KC_##A04 }, \ - { KC_NO, KC_NO, KC_NO, KC_##A13, KC_##A14 }, \ - { KC_##A20, KC_##A21, KC_NO, KC_##A23, KC_##A24 }, \ - { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \ - { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \ - { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \ - { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \ - { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \ - { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \ - { KC_NO, KC_NO, KC_NO, KC_##B03, KC_##B04 }, \ - { KC_NO, KC_NO, KC_NO, KC_##B13, KC_##B14 }, \ - { KC_##B20, KC_##B21, KC_NO, KC_##B23, KC_##B24 }, \ - { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \ - { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \ - { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \ - { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \ - { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \ - { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 } \ + { KC_NO, KC_NO, KC_NO, A03, A04 }, \ + { KC_NO, KC_NO, KC_NO, A13, A14 }, \ + { A20, A21, KC_NO, A23, A24 }, \ + { A30, A31, A32, A33, A34 }, \ + { A40, A41, A42, A43, A44 }, \ + { A50, A51, A52, A53, A54 }, \ + { A60, A61, A62, A63, A64 }, \ + { A70, A71, A72, A73, A74 }, \ + { A80, A81, A82, A83, A84 }, \ + { KC_NO, KC_NO, KC_NO, B03, B04 }, \ + { KC_NO, KC_NO, KC_NO, B13, B14 }, \ + { B20, B21, KC_NO, B23, B24 }, \ + { B30, B31, B32, B33, B34 }, \ + { B40, B41, B42, B43, B44 }, \ + { B50, B51, B52, B53, B54 }, \ + { B60, B61, B62, B63, B64 }, \ + { B70, B71, B72, B73, B74 }, \ + { B80, B81, B82, B83, B84 } \ } #endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */ diff --git a/keyboards/ergodox/infinity/matrix.c b/keyboards/ergodox/infinity/matrix.c index 2b806cd649..1fda904849 100644 --- a/keyboards/ergodox/infinity/matrix.c +++ b/keyboards/ergodox/infinity/matrix.c @@ -63,6 +63,8 @@ void matrix_init(void) memset(matrix, 0, MATRIX_ROWS); memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS); + + matrix_init_quantum(); } uint8_t matrix_scan(void) @@ -127,6 +129,7 @@ uint8_t matrix_scan(void) } debouncing = false; } + matrix_scan_quantum(); return 1; } diff --git a/quantum/quantum.h b/quantum/quantum.h index 7ebfb24e30..6e3fbcc792 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -25,6 +25,7 @@ #include "led.h" #include "action_util.h" #include +#include "print.h" extern uint32_t default_layer_state; diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index 0368bcd4a1..a1352527fc 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -29,7 +29,9 @@ #include #include "util.h" - +#if defined(PROTOCOL_CHIBIOS) +#define PSTR(x) x +#endif #ifndef NO_PRINT -- cgit v1.2.3 From e0f28c2b1068d8cd218e1450dea97fde946ba87a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 01:38:58 +0300 Subject: Add empty led control functions to Infinity Ergodox So that most keymaps compiles and links --- keyboards/ergodox/infinity/infinity.c | 30 ++++++++++++++++ keyboards/ergodox/infinity/infinity.h | 66 +++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c index 85e61e3aa6..d33c544419 100644 --- a/keyboards/ergodox/infinity/infinity.c +++ b/keyboards/ergodox/infinity/infinity.c @@ -91,3 +91,33 @@ void matrix_scan_kb(void) { matrix_scan_user(); } + +void ergodox_board_led_on(void){ +} + +void ergodox_right_led_1_on(void){ +} + +void ergodox_right_led_2_on(void){ +} + +void ergodox_right_led_3_on(void){ +} + +void ergodox_right_led_on(uint8_t led){ +} + +void ergodox_board_led_off(void){ +} + +void ergodox_right_led_1_off(void){ +} + +void ergodox_right_led_2_off(void){ +} + +void ergodox_right_led_3_off(void){ +} + +void ergodox_right_led_off(uint8_t led){ +} diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h index a92aa89bb6..83ce6444c3 100644 --- a/keyboards/ergodox/infinity/infinity.h +++ b/keyboards/ergodox/infinity/infinity.h @@ -3,6 +3,72 @@ #include "quantum.h" +void ergodox_board_led_on(void); +void ergodox_right_led_1_on(void); +void ergodox_right_led_2_on(void); +void ergodox_right_led_3_on(void); +void ergodox_right_led_on(uint8_t led); + +void ergodox_board_led_off(void); +void ergodox_right_led_1_off(void); +void ergodox_right_led_2_off(void); +void ergodox_right_led_3_off(void); +void ergodox_right_led_off(uint8_t led); + +inline void ergodox_led_all_on(void) +{ + ergodox_board_led_on(); + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); +} + +inline void ergodox_led_all_off(void) +{ + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +} + +inline void ergodox_right_led_1_set(uint8_t n){ + if (n) { + ergodox_right_led_1_on(); + } else { + ergodox_right_led_1_off(); + } +} + +inline void ergodox_right_led_2_set(uint8_t n){ + if (n) { + ergodox_right_led_2_on(); + } else { + ergodox_right_led_2_off(); + } +} + +inline void ergodox_right_led_3_set(uint8_t n){ + if (n) { + ergodox_right_led_3_on(); + } else { + ergodox_right_led_3_off(); + } +} + +inline void ergodox_right_led_set(uint8_t led, uint8_t n){ + if (n) { + ergodox_right_led_on(led); + } else { + ergodox_right_led_off(led); + } +} + +inline void ergodox_led_all_set(uint8_t n) { + ergodox_right_led_1_set(n); + ergodox_right_led_2_set(n); + ergodox_right_led_3_set(n); +} + #define KEYMAP( \ A80, A70, A60, A50, A40, A30, A20, \ A81, A71, A61, A51, A41, A31, A21, \ -- cgit v1.2.3 From e7670f6d19639ba2a0cead228cc58ff58eef5a60 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 11:26:15 +0300 Subject: Move some of the Ergodox config settings to shared --- keyboards/ergodox/config.h | 24 ++++++++++++++++++++++++ keyboards/ergodox/ez/config.h | 29 +++++------------------------ keyboards/ergodox/infinity/config.h | 21 ++++++++------------- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index c37c10e931..edc60caae1 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -1,6 +1,30 @@ #ifndef KEYBOARDS_ERGODOX_CONFIG_H_ #define KEYBOARDS_ERGODOX_CONFIG_H_ +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + #ifdef SUBPROJECT_ez #include "ez/config.h" #endif diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index 2bb56731b2..59fc0fda74 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -19,7 +19,7 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H -#include "config_common.h" +#include "../config.h" /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED @@ -33,34 +33,15 @@ along with this program. If not, see . #define MATRIX_ROWS 14 #define MATRIX_COLS 6 -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 - -#define TAPPING_TOGGLE 1 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - /* number of backlight levels */ #define BACKLIGHT_LEVELS 3 +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + + /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) /* * Feature disable options diff --git a/keyboards/ergodox/infinity/config.h b/keyboards/ergodox/infinity/config.h index d24ee0f056..83d7c58378 100644 --- a/keyboards/ergodox/infinity/config.h +++ b/keyboards/ergodox/infinity/config.h @@ -18,6 +18,8 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H +#include "../config.h" + /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED @@ -35,25 +37,18 @@ along with this program. If not, see . #define MATRIX_COLS 5 #define LOCAL_MATRIX_ROWS 9 +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -//#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -//#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* Keymap for Infiity prototype */ -#define INFINITY_PROTOTYPE - #define SERIAL_LINK_BAUD 562500 #define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1) // The visualizer needs gfx thread priorities -- cgit v1.2.3 From 1641743b9d9800a4a95ad12c77e1e90aa462347e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 11:27:06 +0300 Subject: Change _delay_ms to wait_ms in algernon keymap --- keyboards/ergodox/keymaps/algernon/keymap.c | 2433 ++++++++++++++------------- 1 file changed, 1217 insertions(+), 1216 deletions(-) diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 1ebcf528b4..6a14ef4676 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -1,1216 +1,1217 @@ -/* - * algernon's ErgoDox EZ layout, please see the readme.md file! - */ - -#include "ergodox.h" -#include "led.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "mousekey.h" -#include "timer.h" -#include "keymap_plover.h" -#include "eeconfig.h" - -/* Layers */ - -enum { - BASE = 0, - ADORE, - ARRW, - APPSEL, - HUN, - NMDIA, - OHLFT, - OHRGT, - PLVR, -}; - -/* Macros */ - -enum { - NONE = 0, - // Buttons that do extra stuff - A_GUI, - A_PLVR, - A_ESC, - A_MPN, - - // Function / number keys - KF_1, // 1, F1 - KF_2, // 2, F2 - KF_3, // ... - KF_4, - KF_5, - KF_6, - KF_7, - KF_8, - KF_9, - KF_10, - KF_11, // =, F11 - - // Application select keys - APP_SLK, // Slack - APP_EMCS, // Emacs - APP_TERM, // Terminal - APP_CHRM, // Chrome - APP_MSIC, // Music - - // Diagonal mouse movement - A_MUL, - A_MUR, - A_MDL, - A_MDR, - - // Hungarian layer keys - HU_AA, // Á - HU_OO, // Ó - HU_EE, // É - HU_UU, // Ú - HU_II, // Í - HU_OE, // Ö - HU_UE, // Ü - HU_OEE, // Ő - HU_UEE, // Ű - - // One-handed layout specials - OH_BSSPC, - OH_ENTSFT, - OH_BASE, - OH_LEFT, - OH_RIGHT, -}; - -/* Fn keys */ - -enum { - F_BSE = 0, - F_HUN, - F_GUI, - F_SFT, - F_ALT, - F_CTRL -}; - -/* Custom keycodes */ - -enum { - CT_CLN = 0, - CT_MNS, - CT_TA, -}; - -/* States & timers */ - -uint16_t gui_timer = 0; - -uint16_t kf_timers[12]; - -uint16_t oh_base_timer = 0; -uint16_t oh_bsspc_timer = 0; -uint16_t oh_entsft_timer = 0; - -#define OH_BLINK_INTERVAL 500 - -uint8_t oh_left_blink = 0; -uint16_t oh_left_blink_timer = 0; -uint8_t oh_right_blink = 0; -uint16_t oh_right_blink_timer = 0; - -#if KEYLOGGER_ENABLE -bool log_enable = false; -#endif - -bool time_travel = false; - -/* The Keymap */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Keymap 0: Base Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 1: Adore layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[ADORE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U -,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS - ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 2: Arrow layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | Home | Up | End | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | Left | Down | Rght | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| PgUp | PgDn | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[ARRW] = KEYMAP( -// left 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_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_TRNS - ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_PGUP ,KC_PGDN - ), - -/* Keymap 3: Application select layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[APPSEL] = KEYMAP( -// left hand - KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS - ), - - -/* Keymap 4: Hungarian Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | Ő | | Ű | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | Ö | | Ü | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | BASE | | | - * `--------------------' `--------------------' - */ - -[HUN] = KEYMAP( -// left hand - KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO -,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) -,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS - - // right hand - ,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_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 ,KC_NO ,KC_NO - - ,KC_NO ,KC_NO - ,KC_NO - ,F(F_BSE),KC_TRNS ,KC_TRNS - ), - -/* Keymap 5: Navigation & Media layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| - * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| - * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | - * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| - * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Mute | VlUp | | BASE | MClk | - * ,------|------|------| |------+------+------. - * | | | VlDn | | Prev |Left |Right | - * | SPC | Enter|------| |------| Click| Click| - * | | | ESC | | Next | | | - * `--------------------' `--------------------' - */ -[NMDIA] = KEYMAP( -// left hand - KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) -,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO -,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO -,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_MUTE ,KC_VOLU - ,KC_VOLD - ,KC_SPC,KC_ENTER,M(A_ESC) - - // right hand - ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR - ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO - ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP - ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,KC_TRNS ,KC_MS_BTN3 - ,KC_MPRV - ,KC_MNXT ,KC_BTN1 ,KC_BTN2 - ), - -/* Keymap 6: One-handed, left side - * - * ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| - * |-----------+------+------+------+------+-------------| - * | Tab | ' | , | . | P | Y | [ | - * |-----------+------+------+------+------+------| | - * | - | A | O | E | U | I |------| - * |-----------+------+------+------+------+------| ( | - * | Play/Pause| ; | Q | J | K | X | | - * `-----------+------+------+------+------+-------------' - * | Home | End | Down | Up | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHLFT] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) -,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 7: One-handed, right side - * - * ,-----------------------------------------------------. - * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| - * |-----------+------+------+------+------+-------------| - * | / | L | R | C | G | F | ] | - * |-----------+------+------+------+------+------| | - * | \ | S | N | T | H | D |------| - * |-----------+------+------+------+------+------| ) | - * | Stop | Z | V | W | M | B | | - * `-----------+------+------+------+------+-------------' - * | PgDn | PgUp | Right| Left | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHRGT] = KEYMAP( -// left hand - M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) -,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC -,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D -,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN -,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 8: Steno for Plover - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | BASE | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | T | P | H | |------| |------| | F | P | L | T | D | - * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| - * | | | K | W | R | | | | | | R | B | G | S | Z | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | A | O |------| |------| E | U | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[PLVR] = KEYMAP( -// left hand -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), -KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, -KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, -KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - PV_A, PV_O, KC_NO, - - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, - PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, - PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO,PV_E, PV_U - ), - -}; - -const uint16_t PROGMEM fn_actions[] = { - [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) - ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) - ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) - ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) - ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) - ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) -}; - -void toggle_steno(int pressed) -{ - uint8_t layer = biton32(layer_state); - - if (pressed) { - if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); - - register_code(PV_LP); - register_code(PV_LH); - register_code(PV_LR); - register_code(PV_O); - register_code(PV_RL); - register_code(PV_RG); - } else { - unregister_code(PV_LP); - unregister_code(PV_LH); - unregister_code(PV_LR); - unregister_code(PV_O); - unregister_code(PV_RL); - unregister_code(PV_RG); - } -} - -macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) -{ - uint8_t need_shift = 0; - uint8_t hold_shift = 0; - - if (!record->event.pressed) - return MACRO_NONE; - - layer_off (HUN); - - if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { - hold_shift = 1; - need_shift = 1; - unregister_code (KC_LSFT); - } - if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { - need_shift = 1; - hold_shift = 0; - unregister_code (KC_LSFT); - } - - clear_oneshot_mods (); - - register_code (KC_RALT); - unregister_code (KC_RALT); - if (accent == (KC_DQT)) { - register_code (KC_RSFT); - } - register_code (accent); - unregister_code (accent); - if (need_shift && accent != (KC_DQT)) { - register_code (KC_RSFT); - } else if (accent == (KC_DQT) && !need_shift) { - unregister_code (KC_RSFT); - } - register_code (hun_char); - unregister_code (hun_char); - if (need_shift || accent == (KC_DQT)) - unregister_code (KC_RSFT); - if (hold_shift) - register_code (KC_LSFT); - - return MACRO_NONE; -} - -void ang_handle_kf (keyrecord_t *record, uint8_t id) -{ - uint8_t code = id - KF_1; - - if (record->event.pressed) { - kf_timers[code] = timer_read (); - } else { - uint8_t kc; - - if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc = KC_F1 + code; - } else { - if (id == KF_11) - kc = KC_EQL; - else - kc = KC_1 + code; - } - - register_code (kc); - unregister_code (kc); - } -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case A_ESC: - if (record->event.pressed) { - if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { - clear_oneshot_mods (); - } else { - register_code (KC_ESC); - } - layer_off (HUN); - } else { - unregister_code (KC_ESC); - } - break; - - case A_MPN: - if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); - - if (oneshot) - clear_oneshot_mods (); - unregister_code (KC_LSFT); - - register_code (KC_MPRV); - unregister_code (KC_MPRV); - - if (!oneshot) - register_code (KC_LSFT); - } else { - return MACRO (T(MNXT), END); - } - } - break; - - /* Hungarian layer */ - case HU_AA: - return ang_do_hun (record, KC_QUOT, KC_A); - case HU_OO: - return ang_do_hun (record, KC_QUOT, KC_O); - case HU_EE: - return ang_do_hun (record, KC_QUOT, KC_E); - case HU_UU: - return ang_do_hun (record, KC_QUOT, KC_U); - case HU_II: - return ang_do_hun (record, KC_QUOT, KC_I); - case HU_OE: - return ang_do_hun (record, KC_DQT, KC_O); - case HU_UE: - return ang_do_hun (record, KC_DQT, KC_U); - case HU_OEE: - return ang_do_hun (record, KC_EQL, KC_O); - case HU_UEE: - return ang_do_hun (record, KC_EQL, KC_U); - - /* Mouse movement */ - case A_MUL: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MUR: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_MDL: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MDR: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - /* Plover base */ - case A_PLVR: - toggle_steno(record->event.pressed); - break; - - /* GUI & AppSel */ - case A_GUI: - if (record->event.pressed) { - register_code (KC_LGUI); - if (record->tap.count && !record->tap.interrupted) { - if (record->tap.count >= 2) { - register_code (KC_W); - layer_on (APPSEL); - set_oneshot_layer (APPSEL, ONESHOT_START); - } - } else { - record->tap.count = 0; - } - gui_timer = 0; - } else { - if (record->tap.count >= 2) - { - unregister_code (KC_W); - clear_oneshot_layer_state (ONESHOT_PRESSED); - } - gui_timer = timer_read (); - } - break; - - case APP_SLK: - return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); - - case APP_EMCS: - return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); - - case APP_TERM: - return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); - - case APP_CHRM: - return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); - - case APP_MSIC: - return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); - - /* Function keys */ - case KF_1 ... KF_11: - ang_handle_kf (record, id); - break; - - /* 1HAND layout */ - case OH_BASE: - if (record->event.pressed) { - oh_base_timer = timer_read (); - } else { - if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { - layer_clear (); - } else { - return MACRO (T(APP), END); - } - } - break; - - case OH_BSSPC: - if (record->event.pressed) { - oh_bsspc_timer = timer_read (); - } else { - if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { - return MACRO (T(BSPC), END); - } else { - return MACRO (T(SPC), END); - } - } - break; - - case OH_ENTSFT: - if (record->event.pressed) { - oh_entsft_timer = timer_read (); - } else { - if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT)) - unregister_code (KC_LSFT); - else - register_code (KC_LSFT); - } else { - return MACRO (T(ENT), END); - } - } - break; - - case OH_LEFT: - if (record->event.pressed) { - layer_move (OHLFT); - oh_left_blink = 1; - oh_left_blink_timer = timer_read (); - ergodox_right_led_1_on (); - } - break; - - case OH_RIGHT: - if (record->event.pressed) { - layer_move (OHRGT); - oh_right_blink = 1; - oh_right_blink_timer = timer_read (); - ergodox_right_led_3_on (); - } - break; - } - return MACRO_NONE; -}; - -uint8_t is_adore = 0; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - uint8_t dl; - - ergodox_led_all_on(); - for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { - ergodox_led_all_set (i); - _delay_ms (5); - } - _delay_ms(1000); - for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { - ergodox_led_all_set (i); - _delay_ms (10); - } - ergodox_led_all_off(); - - if (!eeconfig_is_enabled()) - eeconfig_init(); - dl = eeconfig_read_default_layer (); - if (dl == (1UL << ADORE)) - is_adore = 1; -}; - -LEADER_EXTERNS(); - -void ang_do_unicode (void) { - register_code (KC_RCTL); - register_code (KC_RSFT); - register_code (KC_U); - unregister_code (KC_U); - unregister_code (KC_RSFT); - unregister_code (KC_RCTL); - _delay_ms (100); -} - -void ang_tap (uint16_t codes[]) { - for (int i = 0; codes[i] != 0; i++) { - register_code (codes[i]); - unregister_code (codes[i]); - _delay_ms (50); - } -} - -#define TAP_ONCE(code) \ - register_code (code); \ - unregister_code (code) - -void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - } else if (state->count == 2) { - register_code (KC_SCLN); - } -} - -void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (state->count == 2) { - unregister_code (KC_SCLN); - } -} - -void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_MINS); - } else if (state->count == 2) { - register_code (KC_RSFT); - register_code (KC_MINS); - } -} - -void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_MINS); - } else if (state->count == 2) { - unregister_code (KC_RSFT); - unregister_code (KC_MINS); - } -} - -typedef struct { - bool layer_toggle; - bool sticky; - bool finished_once; -} td_ta_state_t; - -void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (td_ta->finished_once) { - return; - } - - if (td_ta->sticky) { - td_ta->sticky = false; - td_ta->layer_toggle = false; - layer_off (ARRW); - return; - } - - td_ta->finished_once = true; - if (state->count == 1 && !state->pressed) { - register_code (KC_TAB); - td_ta->sticky = false; - td_ta->layer_toggle = false; - } else { - td_ta->layer_toggle = true; - layer_on (ARRW); - td_ta->sticky = (state->count == 2); - } -} - -void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (!td_ta->layer_toggle) - unregister_code (KC_TAB); - if (!td_ta->sticky) - layer_off (ARRW); - - td_ta->finished_once = false; -} - -const qk_tap_dance_action_t tap_dance_actions[] = { - [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) - ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) - ,[CT_TA] = { - .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, - .user_data = (void *)&((td_ta_state_t) { false, false, false }) - } -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) - unregister_code (KC_LGUI); - - if (layer != OHLFT) - oh_left_blink = 0; - if (layer != OHRGT) - oh_right_blink = 0; - - if (layer == HUN) { - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - } else if (layer == NMDIA) { - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - } else if (layer == PLVR) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - } else if (layer == ADORE) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - } - - if (layer == OHLFT || layer == OHRGT) { - ergodox_right_led_2_on(); - - if (oh_left_blink) { - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) - ergodox_right_led_1_off (); - } - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_1_on (); - oh_left_blink_timer = timer_read (); - } - } - - if (oh_right_blink) { - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) - ergodox_right_led_3_off (); - } - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_3_on (); - oh_right_blink_timer = timer_read (); - } - } - } - - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_1_set (LED_BRIGHTNESS_HI); - ergodox_right_led_1_on (); - } else { - ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_1_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LALT) || - ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - ergodox_right_led_2_on (); - } else { - ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_2_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || - ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_3_set (LED_BRIGHTNESS_HI); - ergodox_right_led_3_on (); - } else { - ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) - ergodox_right_led_3_off (); - } - - LEADER_DICTIONARY() { - leading = false; - leader_end (); - -#if KEYLOGGER_ENABLE - SEQ_ONE_KEY (KC_D) { - ergodox_led_all_on(); - _delay_ms(100); - ergodox_led_all_off(); - log_enable = !log_enable; - } -#endif - - SEQ_ONE_KEY (KC_T) { - time_travel = !time_travel; - } - - SEQ_ONE_KEY (KC_U) { - ang_do_unicode (); - } - - SEQ_ONE_KEY (KC_V) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); - } - - SEQ_ONE_KEY (KC_L) { - /* λ */ - ang_do_unicode (); - - uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_Y) { - uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_S) { - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - TAP_ONCE (KC_BSLS); - register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); - ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); - register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); - TAP_ONCE (KC_SLSH); - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - } - - SEQ_TWO_KEYS (KC_W, KC_M) { - register_code (KC_LALT); - register_code (KC_F2); - unregister_code (KC_F2); - unregister_code (KC_LALT); - - _delay_ms (1000); - - uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; - ang_tap (codes); - register_code (KC_LGUI); - register_code (KC_UP); - unregister_code (KC_UP); - unregister_code (KC_LGUI); - } - - SEQ_ONE_KEY (KC_A) { - if (is_adore == 0) { - default_layer_and (0); - default_layer_or ((1UL << ADORE)); - eeconfig_update_default_layer ((1UL << ADORE)); - is_adore = 1; - - ergodox_led_all_off (); - ergodox_right_led_3_on (); - _delay_ms (100); - ergodox_right_led_2_on (); - _delay_ms (100); - ergodox_right_led_3_off (); - ergodox_right_led_1_on (); - _delay_ms (100); - ergodox_right_led_2_off (); - _delay_ms (100); - ergodox_right_led_1_off (); - } else { - is_adore = 0; - default_layer_and (0); - default_layer_or (1UL << BASE); - eeconfig_update_default_layer ((1UL << BASE)); - - ergodox_led_all_off (); - ergodox_right_led_1_on (); - _delay_ms (100); - ergodox_right_led_2_on (); - _delay_ms (100); - ergodox_right_led_1_off (); - ergodox_right_led_3_on (); - _delay_ms (100); - ergodox_right_led_2_off (); - _delay_ms (100); - ergodox_right_led_3_off (); - } - } - } -} - -static uint16_t last4[4]; - -bool process_record_user (uint16_t keycode, keyrecord_t *record) { -#if KEYLOGGER_ENABLE - uint8_t layer = biton32(layer_state); - - if (log_enable && layer == BASE) { - xprintf ("KL: col=%d, row=%d\n", record->event.key.col, - record->event.key.row); - } -#endif - - if (time_travel && !record->event.pressed) { - uint8_t p; - - // shift cache one to the left - for (p = 0; p < 3; p++) { - last4[p] = last4[p + 1]; - } - last4[3] = keycode; - - if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { - uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; - ang_tap (codes); - register_code (KC_RSFT); - register_code (KC_EQL); - unregister_code (KC_EQL); - unregister_code (KC_RSFT); - - uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; - ang_tap (codes2); - - return false; - } - } - - return true; -} +/* + * algernon's ErgoDox EZ layout, please see the readme.md file! + */ + +#include "ergodox.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" +#include "timer.h" +#include "keymap_plover.h" +#include "eeconfig.h" +#include "wait.h" + +/* Layers */ + +enum { + BASE = 0, + ADORE, + ARRW, + APPSEL, + HUN, + NMDIA, + OHLFT, + OHRGT, + PLVR, +}; + +/* Macros */ + +enum { + NONE = 0, + // Buttons that do extra stuff + A_GUI, + A_PLVR, + A_ESC, + A_MPN, + + // Function / number keys + KF_1, // 1, F1 + KF_2, // 2, F2 + KF_3, // ... + KF_4, + KF_5, + KF_6, + KF_7, + KF_8, + KF_9, + KF_10, + KF_11, // =, F11 + + // Application select keys + APP_SLK, // Slack + APP_EMCS, // Emacs + APP_TERM, // Terminal + APP_CHRM, // Chrome + APP_MSIC, // Music + + // Diagonal mouse movement + A_MUL, + A_MUR, + A_MDL, + A_MDR, + + // Hungarian layer keys + HU_AA, // Á + HU_OO, // Ó + HU_EE, // É + HU_UU, // Ú + HU_II, // Í + HU_OE, // Ö + HU_UE, // Ü + HU_OEE, // Ő + HU_UEE, // Ű + + // One-handed layout specials + OH_BSSPC, + OH_ENTSFT, + OH_BASE, + OH_LEFT, + OH_RIGHT, +}; + +/* Fn keys */ + +enum { + F_BSE = 0, + F_HUN, + F_GUI, + F_SFT, + F_ALT, + F_CTRL +}; + +/* Custom keycodes */ + +enum { + CT_CLN = 0, + CT_MNS, + CT_TA, +}; + +/* States & timers */ + +uint16_t gui_timer = 0; + +uint16_t kf_timers[12]; + +uint16_t oh_base_timer = 0; +uint16_t oh_bsspc_timer = 0; +uint16_t oh_entsft_timer = 0; + +#define OH_BLINK_INTERVAL 500 + +uint8_t oh_left_blink = 0; +uint16_t oh_left_blink_timer = 0; +uint8_t oh_right_blink = 0; +uint16_t oh_right_blink_timer = 0; + +#if KEYLOGGER_ENABLE +bool log_enable = false; +#endif + +bool time_travel = false; + +/* The Keymap */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | : | | - | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | 1HND | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),M(OH_LEFT) + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 1: Adore layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | : | | - | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | 1HND | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[ADORE] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),M(OH_LEFT) + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 2: Arrow layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | Home | Up | End | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | Left | Down | Rght | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| PgUp | PgDn | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[ARRW] = KEYMAP( +// left 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_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_TRNS + ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_PGUP ,KC_PGDN + ), + +/* Keymap 3: Application select layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[APPSEL] = KEYMAP( +// left hand + KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + ), + + +/* Keymap 4: Hungarian Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | Ő | | Ű | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | Ö | | Ü | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | BASE | | | + * `--------------------' `--------------------' + */ + +[HUN] = KEYMAP( +// left hand + KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO +,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) +,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS + + // right hand + ,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_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 ,KC_NO ,KC_NO + + ,KC_NO ,KC_NO + ,KC_NO + ,F(F_BSE),KC_TRNS ,KC_TRNS + ), + +/* Keymap 5: Navigation & Media layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| + * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| + * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | + * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| + * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Mute | VlUp | | BASE | MClk | + * ,------|------|------| |------+------+------. + * | | | VlDn | | Prev |Left |Right | + * | SPC | Enter|------| |------| Click| Click| + * | | | ESC | | Next | | | + * `--------------------' `--------------------' + */ +[NMDIA] = KEYMAP( +// left hand + KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) +,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO +,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO +,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_MUTE ,KC_VOLU + ,KC_VOLD + ,KC_SPC,KC_ENTER,M(A_ESC) + + // right hand + ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR + ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO + ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,KC_TRNS ,KC_MS_BTN3 + ,KC_MPRV + ,KC_MNXT ,KC_BTN1 ,KC_BTN2 + ), + +/* Keymap 6: One-handed, left side + * + * ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| + * |-----------+------+------+------+------+-------------| + * | Tab | ' | , | . | P | Y | [ | + * |-----------+------+------+------+------+------| | + * | - | A | O | E | U | I |------| + * |-----------+------+------+------+------+------| ( | + * | Play/Pause| ; | Q | J | K | X | | + * `-----------+------+------+------+------+-------------' + * | Home | End | Down | Up | ESC | + * `-----------------------------------' + * ,-------------. + * | LAlt | GUI | + * ,------|------|------| + * |BackSp|LShift| Ctrl | + * | | |------| + * |Space |Enter |OTHER | + * `--------------------' + */ +[OHLFT] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) +,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) + + // right hand + ,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 ,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 ,KC_NO ,KC_NO + ), + +/* Keymap 7: One-handed, right side + * + * ,-----------------------------------------------------. + * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| + * |-----------+------+------+------+------+-------------| + * | / | L | R | C | G | F | ] | + * |-----------+------+------+------+------+------| | + * | \ | S | N | T | H | D |------| + * |-----------+------+------+------+------+------| ) | + * | Stop | Z | V | W | M | B | | + * `-----------+------+------+------+------+-------------' + * | PgDn | PgUp | Right| Left | ESC | + * `-----------------------------------' + * ,-------------. + * | LAlt | GUI | + * ,------|------|------| + * |BackSp|LShift| Ctrl | + * | | |------| + * |Space |Enter |OTHER | + * `--------------------' + */ +[OHRGT] = KEYMAP( +// left hand + M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) +,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC +,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D +,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN +,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) + + // right hand + ,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 ,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 ,KC_NO ,KC_NO + ), + +/* Keymap 8: Steno for Plover + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | BASE | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | T | P | H | |------| |------| | F | P | L | T | D | + * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| + * | | | K | W | R | | | | | | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( +// left hand +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), +KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, +KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, +KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO,PV_E, PV_U + ), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) + ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) + ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) + ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) + ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) + ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) +}; + +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); + + register_code(PV_LP); + register_code(PV_LH); + register_code(PV_LR); + register_code(PV_O); + register_code(PV_RL); + register_code(PV_RG); + } else { + unregister_code(PV_LP); + unregister_code(PV_LH); + unregister_code(PV_LR); + unregister_code(PV_O); + unregister_code(PV_RL); + unregister_code(PV_RG); + } +} + +macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) +{ + uint8_t need_shift = 0; + uint8_t hold_shift = 0; + + if (!record->event.pressed) + return MACRO_NONE; + + layer_off (HUN); + + if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { + hold_shift = 1; + need_shift = 1; + unregister_code (KC_LSFT); + } + if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { + need_shift = 1; + hold_shift = 0; + unregister_code (KC_LSFT); + } + + clear_oneshot_mods (); + + register_code (KC_RALT); + unregister_code (KC_RALT); + if (accent == (KC_DQT)) { + register_code (KC_RSFT); + } + register_code (accent); + unregister_code (accent); + if (need_shift && accent != (KC_DQT)) { + register_code (KC_RSFT); + } else if (accent == (KC_DQT) && !need_shift) { + unregister_code (KC_RSFT); + } + register_code (hun_char); + unregister_code (hun_char); + if (need_shift || accent == (KC_DQT)) + unregister_code (KC_RSFT); + if (hold_shift) + register_code (KC_LSFT); + + return MACRO_NONE; +} + +void ang_handle_kf (keyrecord_t *record, uint8_t id) +{ + uint8_t code = id - KF_1; + + if (record->event.pressed) { + kf_timers[code] = timer_read (); + } else { + uint8_t kc; + + if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { + // Long press + kc = KC_F1 + code; + } else { + if (id == KF_11) + kc = KC_EQL; + else + kc = KC_1 + code; + } + + register_code (kc); + unregister_code (kc); + } +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case A_ESC: + if (record->event.pressed) { + if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { + clear_oneshot_mods (); + } else { + register_code (KC_ESC); + } + layer_off (HUN); + } else { + unregister_code (KC_ESC); + } + break; + + case A_MPN: + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); + + if (oneshot) + clear_oneshot_mods (); + unregister_code (KC_LSFT); + + register_code (KC_MPRV); + unregister_code (KC_MPRV); + + if (!oneshot) + register_code (KC_LSFT); + } else { + return MACRO (T(MNXT), END); + } + } + break; + + /* Hungarian layer */ + case HU_AA: + return ang_do_hun (record, KC_QUOT, KC_A); + case HU_OO: + return ang_do_hun (record, KC_QUOT, KC_O); + case HU_EE: + return ang_do_hun (record, KC_QUOT, KC_E); + case HU_UU: + return ang_do_hun (record, KC_QUOT, KC_U); + case HU_II: + return ang_do_hun (record, KC_QUOT, KC_I); + case HU_OE: + return ang_do_hun (record, KC_DQT, KC_O); + case HU_UE: + return ang_do_hun (record, KC_DQT, KC_U); + case HU_OEE: + return ang_do_hun (record, KC_EQL, KC_O); + case HU_UEE: + return ang_do_hun (record, KC_EQL, KC_U); + + /* Mouse movement */ + case A_MUL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MUR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + case A_MDL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MDR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + /* Plover base */ + case A_PLVR: + toggle_steno(record->event.pressed); + break; + + /* GUI & AppSel */ + case A_GUI: + if (record->event.pressed) { + register_code (KC_LGUI); + if (record->tap.count && !record->tap.interrupted) { + if (record->tap.count >= 2) { + register_code (KC_W); + layer_on (APPSEL); + set_oneshot_layer (APPSEL, ONESHOT_START); + } + } else { + record->tap.count = 0; + } + gui_timer = 0; + } else { + if (record->tap.count >= 2) + { + unregister_code (KC_W); + clear_oneshot_layer_state (ONESHOT_PRESSED); + } + gui_timer = timer_read (); + } + break; + + case APP_SLK: + return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); + + case APP_EMCS: + return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); + + case APP_TERM: + return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); + + case APP_CHRM: + return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); + + case APP_MSIC: + return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); + + /* Function keys */ + case KF_1 ... KF_11: + ang_handle_kf (record, id); + break; + + /* 1HAND layout */ + case OH_BASE: + if (record->event.pressed) { + oh_base_timer = timer_read (); + } else { + if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { + layer_clear (); + } else { + return MACRO (T(APP), END); + } + } + break; + + case OH_BSSPC: + if (record->event.pressed) { + oh_bsspc_timer = timer_read (); + } else { + if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { + return MACRO (T(BSPC), END); + } else { + return MACRO (T(SPC), END); + } + } + break; + + case OH_ENTSFT: + if (record->event.pressed) { + oh_entsft_timer = timer_read (); + } else { + if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT)) + unregister_code (KC_LSFT); + else + register_code (KC_LSFT); + } else { + return MACRO (T(ENT), END); + } + } + break; + + case OH_LEFT: + if (record->event.pressed) { + layer_move (OHLFT); + oh_left_blink = 1; + oh_left_blink_timer = timer_read (); + ergodox_right_led_1_on (); + } + break; + + case OH_RIGHT: + if (record->event.pressed) { + layer_move (OHRGT); + oh_right_blink = 1; + oh_right_blink_timer = timer_read (); + ergodox_right_led_3_on (); + } + break; + } + return MACRO_NONE; +}; + +uint8_t is_adore = 0; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + uint8_t dl; + + ergodox_led_all_on(); + for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { + ergodox_led_all_set (i); + wait_ms (5); + } + wait_ms(1000); + for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { + ergodox_led_all_set (i); + wait_ms (10); + } + ergodox_led_all_off(); + + if (!eeconfig_is_enabled()) + eeconfig_init(); + dl = eeconfig_read_default_layer (); + if (dl == (1UL << ADORE)) + is_adore = 1; +}; + +LEADER_EXTERNS(); + +void ang_do_unicode (void) { + register_code (KC_RCTL); + register_code (KC_RSFT); + register_code (KC_U); + unregister_code (KC_U); + unregister_code (KC_RSFT); + unregister_code (KC_RCTL); + wait_ms (100); +} + +void ang_tap (uint16_t codes[]) { + for (int i = 0; codes[i] != 0; i++) { + register_code (codes[i]); + unregister_code (codes[i]); + wait_ms (50); + } +} + +#define TAP_ONCE(code) \ + register_code (code); \ + unregister_code (code) + +void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + } else if (state->count == 2) { + register_code (KC_SCLN); + } +} + +void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (state->count == 2) { + unregister_code (KC_SCLN); + } +} + +void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_MINS); + } else if (state->count == 2) { + register_code (KC_RSFT); + register_code (KC_MINS); + } +} + +void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_MINS); + } else if (state->count == 2) { + unregister_code (KC_RSFT); + unregister_code (KC_MINS); + } +} + +typedef struct { + bool layer_toggle; + bool sticky; + bool finished_once; +} td_ta_state_t; + +void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (td_ta->finished_once) { + return; + } + + if (td_ta->sticky) { + td_ta->sticky = false; + td_ta->layer_toggle = false; + layer_off (ARRW); + return; + } + + td_ta->finished_once = true; + if (state->count == 1 && !state->pressed) { + register_code (KC_TAB); + td_ta->sticky = false; + td_ta->layer_toggle = false; + } else { + td_ta->layer_toggle = true; + layer_on (ARRW); + td_ta->sticky = (state->count == 2); + } +} + +void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (!td_ta->layer_toggle) + unregister_code (KC_TAB); + if (!td_ta->sticky) + layer_off (ARRW); + + td_ta->finished_once = false; +} + +const qk_tap_dance_action_t tap_dance_actions[] = { + [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) + ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) + ,[CT_TA] = { + .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, + .user_data = (void *)&((td_ta_state_t) { false, false, false }) + } +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) + unregister_code (KC_LGUI); + + if (layer != OHLFT) + oh_left_blink = 0; + if (layer != OHRGT) + oh_right_blink = 0; + + if (layer == HUN) { + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + } else if (layer == NMDIA) { + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + } else if (layer == PLVR) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + } else if (layer == ADORE) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + } + + if (layer == OHLFT || layer == OHRGT) { + ergodox_right_led_2_on(); + + if (oh_left_blink) { + if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { + if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) + ergodox_right_led_1_off (); + } + if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { + ergodox_right_led_1_on (); + oh_left_blink_timer = timer_read (); + } + } + + if (oh_right_blink) { + if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { + if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) + ergodox_right_led_3_off (); + } + if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { + ergodox_right_led_3_on (); + oh_right_blink_timer = timer_read (); + } + } + } + + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_1_set (LED_BRIGHTNESS_HI); + ergodox_right_led_1_on (); + } else { + ergodox_right_led_1_set (LED_BRIGHTNESS_LO); + if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_1_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LALT) || + ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + ergodox_right_led_2_on (); + } else { + ergodox_right_led_2_set (LED_BRIGHTNESS_LO); + if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_2_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || + ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_3_set (LED_BRIGHTNESS_HI); + ergodox_right_led_3_on (); + } else { + ergodox_right_led_3_set (LED_BRIGHTNESS_LO); + if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) + ergodox_right_led_3_off (); + } + + LEADER_DICTIONARY() { + leading = false; + leader_end (); + +#if KEYLOGGER_ENABLE + SEQ_ONE_KEY (KC_D) { + ergodox_led_all_on(); + wait_ms(100); + ergodox_led_all_off(); + log_enable = !log_enable; + } +#endif + + SEQ_ONE_KEY (KC_T) { + time_travel = !time_travel; + } + + SEQ_ONE_KEY (KC_U) { + ang_do_unicode (); + } + + SEQ_ONE_KEY (KC_V) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); + } + + SEQ_ONE_KEY (KC_L) { + /* λ */ + ang_do_unicode (); + + uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_Y) { + uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_S) { + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + TAP_ONCE (KC_BSLS); + register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); + ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); + register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); + TAP_ONCE (KC_SLSH); + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + } + + SEQ_TWO_KEYS (KC_W, KC_M) { + register_code (KC_LALT); + register_code (KC_F2); + unregister_code (KC_F2); + unregister_code (KC_LALT); + + wait_ms (1000); + + uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; + ang_tap (codes); + register_code (KC_LGUI); + register_code (KC_UP); + unregister_code (KC_UP); + unregister_code (KC_LGUI); + } + + SEQ_ONE_KEY (KC_A) { + if (is_adore == 0) { + default_layer_and (0); + default_layer_or ((1UL << ADORE)); + eeconfig_update_default_layer ((1UL << ADORE)); + is_adore = 1; + + ergodox_led_all_off (); + ergodox_right_led_3_on (); + wait_ms (100); + ergodox_right_led_2_on (); + wait_ms (100); + ergodox_right_led_3_off (); + ergodox_right_led_1_on (); + wait_ms (100); + ergodox_right_led_2_off (); + wait_ms (100); + ergodox_right_led_1_off (); + } else { + is_adore = 0; + default_layer_and (0); + default_layer_or (1UL << BASE); + eeconfig_update_default_layer ((1UL << BASE)); + + ergodox_led_all_off (); + ergodox_right_led_1_on (); + wait_ms (100); + ergodox_right_led_2_on (); + wait_ms (100); + ergodox_right_led_1_off (); + ergodox_right_led_3_on (); + wait_ms (100); + ergodox_right_led_2_off (); + wait_ms (100); + ergodox_right_led_3_off (); + } + } + } +} + +static uint16_t last4[4]; + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { +#if KEYLOGGER_ENABLE + uint8_t layer = biton32(layer_state); + + if (log_enable && layer == BASE) { + xprintf ("KL: col=%d, row=%d\n", record->event.key.col, + record->event.key.row); + } +#endif + + if (time_travel && !record->event.pressed) { + uint8_t p; + + // shift cache one to the left + for (p = 0; p < 3; p++) { + last4[p] = last4[p + 1]; + } + last4[3] = keycode; + + if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { + uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; + ang_tap (codes); + register_code (KC_RSFT); + register_code (KC_EQL); + unregister_code (KC_EQL); + unregister_code (KC_RSFT); + + uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; + ang_tap (codes2); + + return false; + } + } + + return true; +} -- cgit v1.2.3 From bf1c865c7a5d21cd7967bf676cafd18fc9f2254d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 20:58:19 +0300 Subject: Speed up ChibiOS keymap compilation By sharing the external library object files between the whole keyboard, instead of re-compiling them for each keymap. --- tmk_core/rules.mk | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 2bf2a109fb..c81fa68541 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -253,6 +253,14 @@ MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) +# The files in the lib folder are shared between all keymaps, so generate that folder name by removing +# the keymap from the name +KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) +# And fixup the object files to match +LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) +NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) +LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) +OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -370,20 +378,35 @@ BEGIN = gccversion check_submodule sizebefore $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) +define GEN_OBJRULE # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) - @$(BUILD_CMD) +$1/%.o : %.c | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@) + @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) +$1/%.o : %.cpp | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$1/%.o : %.S | $(BEGIN) + @mkdir -p $$(@D) + @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) + @$$(BUILD_CMD) + +endef + +# Since the object files could be in two different folders, generate +# separate rules for them, rather than having too generic rules +$(eval $(call GEN_OBJRULE,$(OBJDIR))) +$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) + # Compile: create assembler files from C source files. %.s : %.c | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) @@ -396,13 +419,6 @@ $(OBJDIR)/%.o : %.cpp | $(BEGIN) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) - @$(BUILD_CMD) - # Create preprocessed source for use in sending a bug report. %.i : %.c | $(BEGIN) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ @@ -486,7 +502,7 @@ $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) - +$(shell mkdir $(KBOBJDIR) 2>/dev/null) # Include the dependency files. -include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) -- cgit v1.2.3 From a6577b272e763303fc1a86bd54888e6f2b43cb37 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 21:24:02 +0300 Subject: Define weak matrix user function for Infinity Ergodox So that a few keyboards, which don't use them, links properly. --- keyboards/ergodox/infinity/infinity.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c index d33c544419..f89e046d0d 100644 --- a/keyboards/ergodox/infinity/infinity.c +++ b/keyboards/ergodox/infinity/infinity.c @@ -78,6 +78,15 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { } #endif +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + + void matrix_init_kb(void) { // put your keyboard start-up code here // runs once when the firmware starts up -- cgit v1.2.3 From 426e9ecc6fb8366c1c17af692deddd90df570cd8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 12:01:28 +0300 Subject: Fix config.h include guards --- keyboards/ergodox/ez/config.h | 4 ++-- keyboards/ergodox/infinity/config.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index 59fc0fda74..084a044ee1 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -16,8 +16,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#ifndef ERGODOX_EZ_CONFIG_H +#define ERGODOX_EZ_CONFIG_H #include "../config.h" diff --git a/keyboards/ergodox/infinity/config.h b/keyboards/ergodox/infinity/config.h index 83d7c58378..9e264083be 100644 --- a/keyboards/ergodox/infinity/config.h +++ b/keyboards/ergodox/infinity/config.h @@ -15,8 +15,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#ifndef INFINITY_ERGODOX_CONFIG_H +#define INFINITY_ERGODOX_CONFIG_H #include "../config.h" -- cgit v1.2.3 From fd7f20b029e621942e1c0b342bc852a545305ee0 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 12:02:17 +0300 Subject: Rename supercoder config_user to config.h Also fixup the include path of parent config --- keyboards/ergodox/keymaps/supercoder/config.h | 9 +++++++++ keyboards/ergodox/keymaps/supercoder/config_user.h | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 keyboards/ergodox/keymaps/supercoder/config.h delete mode 100644 keyboards/ergodox/keymaps/supercoder/config_user.h diff --git a/keyboards/ergodox/keymaps/supercoder/config.h b/keyboards/ergodox/keymaps/supercoder/config.h new file mode 100644 index 0000000000..2de3599f87 --- /dev/null +++ b/keyboards/ergodox/keymaps/supercoder/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H 1 + +#include "../../config.h" + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#endif diff --git a/keyboards/ergodox/keymaps/supercoder/config_user.h b/keyboards/ergodox/keymaps/supercoder/config_user.h deleted file mode 100644 index 8da1383726..0000000000 --- a/keyboards/ergodox/keymaps/supercoder/config_user.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H 1 - -#include "config.h" - -#undef LOCKING_SUPPORT_ENABLE -#undef LOCKING_RESYNC_ENABLE - -#endif -- cgit v1.2.3 From 650298cec34f55271f3faaab688d878c3f172e77 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 12:02:56 +0300 Subject: Cleanup the townk_osx config.h and make files --- keyboards/ergodox/keymaps/townk_osx/config.h | 50 +------------------------ keyboards/ergodox/keymaps/townk_osx/makefile.mk | 4 +- 2 files changed, 2 insertions(+), 52 deletions(-) diff --git a/keyboards/ergodox/keymaps/townk_osx/config.h b/keyboards/ergodox/keymaps/townk_osx/config.h index 58ba690afd..72d3e96700 100644 --- a/keyboards/ergodox/keymaps/townk_osx/config.h +++ b/keyboards/ergodox/keymaps/townk_osx/config.h @@ -19,55 +19,7 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION t.m.k. keyboard firmware for Ergodox - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#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 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 2 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - +#include "../../config.h" /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/ergodox/keymaps/townk_osx/makefile.mk b/keyboards/ergodox/keymaps/townk_osx/makefile.mk index e757557bda..c06021b9fb 100644 --- a/keyboards/ergodox/keymaps/townk_osx/makefile.mk +++ b/keyboards/ergodox/keymaps/townk_osx/makefile.mk @@ -1,4 +1,2 @@ # I don't want my keyboard blinking lights when is suppose to be asleep. -SLEEP_LED_ENABLE = no - -CONFIG_H = keymaps/$(KEYMAP)/config.h +SLEEP_LED_ENABLE = no \ No newline at end of file -- cgit v1.2.3 From 37052a53f15ea5540b20e2d81a6992f34ebb84fe Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 12:05:34 +0300 Subject: Remove the Infinity Ergodox default keymap --- .../ergodox/infinity/keymaps/default/keymap.c | 114 -------------- .../ergodox/infinity/keymaps/default/visualizer.c | 168 --------------------- 2 files changed, 282 deletions(-) delete mode 100644 keyboards/ergodox/infinity/keymaps/default/keymap.c delete mode 100644 keyboards/ergodox/infinity/keymaps/default/visualizer.c diff --git a/keyboards/ergodox/infinity/keymaps/default/keymap.c b/keyboards/ergodox/infinity/keymaps/default/keymap.c deleted file mode 100644 index f1e6b1c8ae..0000000000 --- a/keyboards/ergodox/infinity/keymaps/default/keymap.c +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2016 Fred Sundvik -Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "infinity_ergodox.h" - -// Workaround for old keymap format -#define KC_RESET RESET - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( // layer 0 : default - // left hand - EQL, 1, 2, 3, 4, 5, ESC, - BSLS,Q, W, E, R, T, FN1, - TAB, A, S, D, F, G, - LSFT,Z, X, C, V, B, FN0, - LGUI,GRV, BSLS,LEFT,RGHT, - LCTL,LALT, - HOME, - BSPC,DEL, END, - // right hand - FN2, 6, 7, 8, 9, 0, MINS, - LBRC,Y, U, I, O, P, RBRC, - H, J, K, L, SCLN,QUOT, - FN0, N, M, COMM,DOT, SLSH,RSFT, - LEFT,DOWN,UP, RGHT,RGUI, - RALT,RCTL, - PGUP, - PGDN,ENT, SPC - ), - - KEYMAP( // layer 1 : function and symbol keys - // left hand - TRNS,F1, F2, F3, F4, F5, F11, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - F12, F6, F7, F8, F9, F10, TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), - - KEYMAP( // layer 2 : keyboard functions - // left hand - RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), - - KEYMAP( // layer 3: numpad - // left hand - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS, - // right hand - TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC, - TRNS,NO, P7, P8, P9, PMNS,BSPC, - NO, P4, P5, P6, PPLS,PENT, - TRNS,NO, P1, P2, P3, PPLS,PENT, - P0, PDOT,SLSH,PENT,PENT, - TRNS,TRNS, - TRNS, - TRNS,TRNS,TRNS - ), -}; -const uint16_t fn_actions[] = { - ACTION_LAYER_MOMENTARY(1), // FN0 - switch to Layer1 - ACTION_LAYER_SET(2, ON_PRESS), // FN1 - set Layer2 - ACTION_LAYER_TOGGLE(3), // FN2 - toggle Layer3 aka Numpad layer - ACTION_LAYER_SET(0, ON_PRESS), // FN3 - set Layer0 -}; diff --git a/keyboards/ergodox/infinity/keymaps/default/visualizer.c b/keyboards/ergodox/infinity/keymaps/default/visualizer.c deleted file mode 100644 index c0d335ce6a..0000000000 --- a/keyboards/ergodox/infinity/keymaps/default/visualizer.c +++ /dev/null @@ -1,168 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -// Currently we are assuming that both the backlight and LCD are enabled -// But it's entirely possible to write a custom visualizer that use only -// one of them -#ifndef LCD_BACKLIGHT_ENABLE -#error This visualizer needs that LCD backlight is enabled -#endif - -#ifndef LCD_ENABLE -#error This visualizer needs that LCD is enabled -#endif - -#include "visualizer.h" -#include "led_test.h" - -static const char* welcome_text[] = {"TMK", "Infinity Ergodox"}; - -// Just an example how to write custom keyframe functions, we could have moved -// all this into the init function -bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) { - (void)animation; - // Read the uGFX documentation for information how to use the displays - // http://wiki.ugfx.org/index.php/Main_Page - gdispClear(White); - // You can use static variables for things that can't be found in the animation - // or state structs - gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black); - gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black); - // Always remember to flush the display - gdispFlush(); - // you could set the backlight color as well, but we won't do it here, since - // it's part of the following animation - // lcd_backlight_color(hue, saturation, intensity); - // We don't need constant updates, just drawing the screen once is enough - return false; -} - -// Feel free to modify the animations below, or even add new ones if needed - -// Don't worry, if the startup animation is long, you can use the keyboard like normal -// during that time -static keyframe_animation_t startup_animation = { - .num_frames = 4, - .loop = false, - .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, - .frame_functions = { - display_welcome, - keyframe_animate_backlight_color, - keyframe_no_operation, - enable_visualization - }, -}; - -// The color animation animates the LCD color when you change layers -static keyframe_animation_t color_animation = { - .num_frames = 2, - .loop = false, - // Note that there's a 200 ms no-operation frame, - // this prevents the color from changing when activating the layer - // momentarily - .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)}, - .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, -}; - -// The LCD animation alternates between the layer name display and a -// bitmap that displays all active layers -static keyframe_animation_t lcd_animation = { - .num_frames = 2, - .loop = true, - .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)}, - .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap}, -}; - -static keyframe_animation_t suspend_animation = { - .num_frames = 3, - .loop = false, - .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0}, - .frame_functions = { - keyframe_display_layer_text, - keyframe_animate_backlight_color, - keyframe_disable_lcd_and_backlight, - }, -}; - -static keyframe_animation_t resume_animation = { - .num_frames = 5, - .loop = false, - .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, - .frame_functions = { - keyframe_enable_lcd_and_backlight, - display_welcome, - keyframe_animate_backlight_color, - keyframe_no_operation, - enable_visualization, - }, -}; - -void initialize_user_visualizer(visualizer_state_t* state) { - // The brightness will be dynamically adjustable in the future - // But for now, change it here. - lcd_backlight_brightness(0x50); - state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF); - state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); - start_keyframe_animation(&startup_animation); - start_keyframe_animation(&led_test_animation); -} - -void update_user_visualizer_state(visualizer_state_t* state) { - // Add more tests, change the colors and layer texts here - // Usually you want to check the high bits (higher layers first) - // because that's the order layers are processed for keypresses - // You can for check for example: - // state->status.layer - // state->status.default_layer - // state->status.leds (see led.h for available statuses) - if (state->status.layer & 0x8) { - state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF); - state->layer_text = "Numpad"; - } - else if (state->status.layer & 0x4) { - state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF); - state->layer_text = "KBD functions"; - } - else if (state->status.layer & 0x2) { - state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF); - state->layer_text = "Function keys"; - } - else { - state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF); - state->layer_text = "Default"; - } - // You can also stop existing animations, and start your custom ones here - // remember that you should normally have only one animation for the LCD - // and one for the background. But you can also combine them if you want. - start_keyframe_animation(&lcd_animation); - start_keyframe_animation(&color_animation); -} - -void user_visualizer_suspend(visualizer_state_t* state) { - state->layer_text = "Suspending..."; - uint8_t hue = LCD_HUE(state->current_lcd_color); - uint8_t sat = LCD_SAT(state->current_lcd_color); - state->target_lcd_color = LCD_COLOR(hue, sat, 0); - start_keyframe_animation(&suspend_animation); -} - -void user_visualizer_resume(visualizer_state_t* state) { - state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00); - state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); - start_keyframe_animation(&resume_animation); - start_keyframe_animation(&led_test_animation); -} -- cgit v1.2.3 From 592ef7c6f0441216d2dbfb08af4e20ed35581102 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 14:29:00 +0300 Subject: Move Infinity Ergodox drivers to subproject, and fix makefile --- .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 ------- .../ergodox/drivers/gdisp/IS31FL3731C/driver.mk | 2 - .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 --------------------- .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 --- .../ergodox/drivers/gdisp/emulator_lcd/driver.mk | 2 - .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 - .../ergodox/drivers/gdisp/emulator_led/driver.mk | 2 - .../drivers/gdisp/emulator_led/emulator_led.c | 10 - .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 -------- .../ergodox/drivers/gdisp/st7565ergodox/driver.mk | 2 - .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 ------------------ .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 -- .../ergodox/drivers/gdisp/st7565ergodox/st7565.h | 37 --- keyboards/ergodox/infinity/Makefile | 4 +- .../drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 +++++++ .../infinity/drivers/gdisp/IS31FL3731C/driver.mk | 2 + .../drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 +++++++++++++++++++++ .../drivers/gdisp/IS31FL3731C/gdisp_lld_config.h | 36 +++ .../infinity/drivers/gdisp/emulator_lcd/driver.mk | 2 + .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 + .../infinity/drivers/gdisp/emulator_led/driver.mk | 2 + .../drivers/gdisp/emulator_led/emulator_led.c | 10 + .../drivers/gdisp/st7565ergodox/board_ST7565.h | 127 ++++++++ .../infinity/drivers/gdisp/st7565ergodox/driver.mk | 2 + .../drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 ++++++++++++++++++ .../drivers/gdisp/st7565ergodox/gdisp_lld_config.h | 26 ++ .../infinity/drivers/gdisp/st7565ergodox/st7565.h | 37 +++ 27 files changed, 994 insertions(+), 994 deletions(-) delete mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h delete mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk delete mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c delete mode 100644 keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h delete mode 100644 keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk delete mode 100644 keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c delete mode 100644 keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk delete mode 100644 keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c delete mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h delete mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk delete mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c delete mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h delete mode 100644 keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h create mode 100644 keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h deleted file mode 100644 index 2ea73f1fb3..0000000000 --- a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -static const I2CConfig i2ccfg = { - 400000 // clock speed (Hz); 400kHz max for IS31 -}; - -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 - -static const uint8_t led_mask[] = { - 0xFF, 0x00, /* C1-1 -> C1-16 */ - 0xFF, 0x00, /* C2-1 -> C2-16 */ - 0xFF, 0x00, /* C3-1 -> C3-16 */ - 0xFF, 0x00, /* C4-1 -> C4-16 */ - 0x3F, 0x00, /* C5-1 -> C5-16 */ - 0x00, 0x00, /* C6-1 -> C6-16 */ - 0x00, 0x00, /* C7-1 -> C7-16 */ - 0x00, 0x00, /* C8-1 -> C8-16 */ - 0x00, 0x00, /* C9-1 -> C9-16 */ -}; - -// The address of the LED -#define LA(c, r) (c + r * 16 ) -// Need to be an address that is not mapped, but inside the range of the controller matrix -#define NA LA(8, 8) - -// The numbers in the comments are the led numbers DXX on the PCB -// The mapping is taken from the schematic of left hand side -static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { -// 45 44 43 42 41 40 39 - { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, -// 52 51 50 49 48 47 46 - { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, -// 58 57 56 55 54 53 N/A - { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, -// 67 66 65 64 63 62 61 - { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, -// 76 75 74 73 72 60 59 - { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, -// N/A N/A N/A N/A N/A N/A 68 - { NA, NA, NA, NA, NA, NA, LA(5, 4) }, -// N/A N/A N/A N/A 71 70 69 - { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, -}; - - -#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND -#define IS31_TIMEOUT 5000 - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - /* I2C pins */ - palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL - palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA - palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); - palClearPad(GPIOB, 16); - /* start I2C */ - i2cStart(&I2CD1, &i2ccfg); - // try high drive (from kiibohd) - I2CD1.i2c->C2 |= I2Cx_C2_HDRS; - // try glitch fixing (from kiibohd) - I2CD1.i2c->FLT = 4; -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { - (void) g; - return led_mask; -} - -static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) -{ - (void) g; - return led_mapping[y][x]; -} - -static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { - (void) g; - if(!shutdown) { - palSetPad(GPIOB, 16); - } - else { - palClearPad(GPIOB, 16); - } -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk deleted file mode 100644 index f32d0d8685..0000000000 --- a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/IS31FL3731C -GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c deleted file mode 100644 index 1d21f0c498..0000000000 --- a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX -#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_IS31FL3731C.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 9 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 16 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#define IS31_ADDR_DEFAULT 0x74 - -#define IS31_REG_CONFIG 0x00 -// bits in reg -#define IS31_REG_CONFIG_PICTUREMODE 0x00 -#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 -#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 -// D2:D0 bits are starting frame for autoplay mode - -#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode - -#define IS31_REG_AUTOPLAYCTRL1 0x02 -// D6:D4 number of loops (000=infty) -// D2:D0 number of frames to be used - -#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) - -#define IS31_REG_DISPLAYOPT 0x05 -#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames -#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 -// D2:D0 bits blink period time (*0.27s) - -#define IS31_REG_AUDIOSYNC 0x06 -#define IS31_REG_AUDIOSYNC_ENABLE 0x1 - -#define IS31_REG_FRAMESTATE 0x07 - -#define IS31_REG_BREATHCTRL1 0x08 -// D6:D4 fade out time (26ms*2^i) -// D2:D0 fade in time (26ms*2^i) - -#define IS31_REG_BREATHCTRL2 0x09 -#define IS31_REG_BREATHCTRL2_ENABLE 0x10 -// D2:D0 extinguish time (3.5ms*2^i) - -#define IS31_REG_SHUTDOWN 0x0A -#define IS31_REG_SHUTDOWN_OFF 0x0 -#define IS31_REG_SHUTDOWN_ON 0x1 - -#define IS31_REG_AGCCTRL 0x0B -#define IS31_REG_ADCRATE 0x0C - -#define IS31_COMMANDREGISTER 0xFD -#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' -#define IS31_FUNCTIONREG_SIZE 0xD - -#define IS31_FRAME_SIZE 0xB4 - -#define IS31_PWM_REG 0x24 -#define IS31_PWM_SIZE 0x90 - -#define IS31_LED_MASK_SIZE 0x12 -#define IS31_SCREEN_WIDTH 16 - -#define IS31 - -//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm -const unsigned char cie[256] = { - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, - 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, - 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, - 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, - 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, - 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, - 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, - 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, - 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, - 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, - 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, - 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, - 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, - 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, - 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, - 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, - 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, - 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, - 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, - 242, 245, 247, 250, 252, 255, -}; - - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - uint8_t write_buffer_offset; - uint8_t write_buffer[IS31_FRAME_SIZE]; - uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; - uint8_t page; -}__attribute__((__packed__)) PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -static GFXINLINE void write_page(GDisplay* g, uint8_t page) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = IS31_COMMANDREGISTER; - tx[1] = page; - write_data(g, tx, 2); -} - -static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { - uint8_t tx[2] __attribute__((aligned(2))); - tx[0] = reg; - tx[1] = data; - write_page(g, page); - write_data(g, tx, 2); -} - -static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { - PRIV(g)->write_buffer_offset = offset; - write_page(g, page); - write_data(g, (uint8_t*)PRIV(g), length + 1); -} - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - __builtin_memset(PRIV(g), 0, sizeof(PrivData)); - PRIV(g)->page = 0; - - // Initialise the board interface - init_board(g); - gfxSleepMilliseconds(10); - - // zero function page, all registers (assuming full_page is all zeroes) - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - set_hardware_shutdown(g, false); - gfxSleepMilliseconds(10); - // software shutdown - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - gfxSleepMilliseconds(10); - // zero function page, all registers - write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); - gfxSleepMilliseconds(10); - - - // zero all LED registers on all 8 pages, and enable the mask - __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); - for(uint8_t i=0; i<8; i++) { - write_ram(g, i, 0, IS31_FRAME_SIZE); - gfxSleepMilliseconds(1); - } - - // software shutdown disable (i.e. turn stuff on) - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - gfxSleepMilliseconds(10); - - // Finish Init - post_init_board(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - PRIV(g)->page++; - PRIV(g)->page %= 2; - // TODO: some smarter algorithm for this - // We should run only one physical page at a time - // This way we don't need to send so much data, and - // we could use slightly less memory - uint8_t* src = PRIV(g)->frame_buffer; - for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; - ++src; - } - } - write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); - gfxSleepMilliseconds(1); - write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = g->p.y; - break; - } - return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - break; - case powerOn: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h deleted file mode 100644 index bb28ad775e..0000000000 --- a/keyboards/ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2016 Fred Sundvik - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk deleted file mode 100644 index 16c3f80f53..0000000000 --- a/keyboards/ergodox/drivers/gdisp/emulator_lcd/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_lcd -GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c deleted file mode 100644 index babfe2b367..0000000000 --- a/keyboards/ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 128 -#define GDISP_SCREEN_HEIGHT 32 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk deleted file mode 100644 index 2554344321..0000000000 --- a/keyboards/ergodox/drivers/gdisp/emulator_led/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/emulator_led -GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c deleted file mode 100644 index b0ebcdc475..0000000000 --- a/keyboards/ergodox/drivers/gdisp/emulator_led/emulator_led.c +++ /dev/null @@ -1,10 +0,0 @@ -#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#define GDISP_SCREEN_WIDTH 7 -#define GDISP_SCREEN_HEIGHT 7 -#define ROTATE_180_IS_FLIP - -#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h deleted file mode 100644 index 290571ce5b..0000000000 --- a/keyboards/ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_BOARD_H -#define _GDISP_LLD_BOARD_H - -#include "print.h" - -#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 -#define ST7565_ADC ST7565_ADC_NORMAL -#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC -#define ST7565_PAGE_ORDER 0,1,2,3 -/* - * Custom page order for several LCD boards, e.g. HEM12864-99 - * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 - */ - -#define ST7565_GPIOPORT GPIOC -#define ST7565_PORT PORTC -#define ST7565_A0_PIN 7 -#define ST7565_RST_PIN 8 -#define ST7565_MOSI_PIN 6 -#define ST7565_SLCK_PIN 5 -#define ST7565_SS_PIN 4 - -#define palSetPadModeRaw(portname, bits) \ - ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits - -#define palSetPadModeNamed(portname, portmode) \ - palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) - -#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) -// DSPI Clock and Transfer Attributes -// Frame Size: 8 bits -// MSB First -// CLK Low by default -static const SPIConfig spi1config = { - NULL, - /* HW dependent part.*/ - ST7565_GPIOPORT, - ST7565_SS_PIN, - SPIx_CTARn_FMSZ(7) - | SPIx_CTARn_ASC(7) - | SPIx_CTARn_DT(7) - | SPIx_CTARn_CSSCK(7) - | SPIx_CTARn_PBR(0) - | SPIx_CTARn_BR(7) - //SPI_CR1_BR_0 -}; - -static bool_t st7565_is_data_mode = 1; - -static GFXINLINE void init_board(GDisplay *g) { - (void) g; - palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - st7565_is_data_mode = 1; - palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - palSetPadModeRaw(MOSI, ST7565_SPI_MODE); - palSetPadModeRaw(SLCK, ST7565_SPI_MODE); - palSetPadModeRaw(SS, ST7565_SPI_MODE); - - spiInit(); - spiStart(&SPID1, &spi1config); - spiSelect(&SPID1); -} - -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} - -static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { - (void) g; - if (state) { - palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } - else { - palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } -} - -static GFXINLINE void acquire_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to acquire - // spiAcquireBus(&SPID1); -} - -static GFXINLINE void release_bus(GDisplay *g) { - (void) g; - // Only the LCD is using the SPI bus, so no need to release - //spiReleaseBus(&SPID1); -} - -static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { - (void) g; - if (st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 0; - } - spiSend(&SPID1, 1, &cmd); -} - -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - if (!st7565_is_data_mode) { - // The sleeps need to be at lest 10 vs 25 ns respectively - // So let's sleep two ticks, one tick might not be enough - // if we are at the end of the tick - chThdSleep(2); - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); - chThdSleep(2); - st7565_is_data_mode = 1; - } - spiSend(&SPID1, length, data); -} - -#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk deleted file mode 100644 index 889a1a0317..0000000000 --- a/keyboards/ergodox/drivers/gdisp/st7565ergodox/driver.mk +++ /dev/null @@ -1,2 +0,0 @@ -GFXINC += drivers/gdisp/st7565ergodox -GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c deleted file mode 100644 index c33aea81a8..0000000000 --- a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#include "gfx.h" - -#if GFX_USE_GDISP - -#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX -#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_ST7565.h" - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -#ifndef GDISP_SCREEN_HEIGHT - #define GDISP_SCREEN_HEIGHT 32 -#endif -#ifndef GDISP_SCREEN_WIDTH - #define GDISP_SCREEN_WIDTH 128 -#endif -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 100 -#endif - -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) - -#include "drivers/gdisp/st7565ergodox/st7565.h" - -/*===========================================================================*/ -/* Driver config defaults for backward compatibility. */ -/*===========================================================================*/ -#ifndef ST7565_LCD_BIAS - #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 -#endif -#ifndef ST7565_ADC - #define ST7565_ADC ST7565_ADC_NORMAL -#endif -#ifndef ST7565_COM_SCAN - #define ST7565_COM_SCAN ST7565_COM_SCAN_INC -#endif -#ifndef ST7565_PAGE_ORDER - #define ST7565_PAGE_ORDER 0,1,2,3 -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -typedef struct{ - bool_t buffer2; - uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; -}PrivData; - -// Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) -#define RAM(g) (PRIV(g)->ram) -#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } -#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } - -// Some common routines and macros -#define delay(us) gfxSleepMicroseconds(us) -#define delay_ms(ms) gfxSleepMilliseconds(ms) - -#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) -#define xybit(y) (1<<((y)&7)) - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/* - * As this controller can't update on a pixel boundary we need to maintain the - * the entire display surface in memory so that we can do the necessary bit - * operations. Fortunately it is a small display in monochrome. - * 64 * 128 / 8 = 1024 bytes. - */ - -LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { - // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - PRIV(g)->buffer2 = false; - - // Initialise the board interface - init_board(g); - - // Hardware reset - setpin_reset(g, TRUE); - gfxSleepMilliseconds(20); - setpin_reset(g, FALSE); - gfxSleepMilliseconds(20); - - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - write_cmd(g, ST7565_LCD_BIAS); - write_cmd(g, ST7565_ADC); - write_cmd(g, ST7565_COM_SCAN); - - write_cmd(g, ST7565_START_LINE | 0); - - write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); - - // turn on voltage converter (VC=1, VR=0, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x04); - delay_ms(50); - - // turn on voltage regulator (VC=1, VR=1, VF=0) - write_cmd(g, ST7565_POWER_CONTROL | 0x06); - delay_ms(50); - - // turn on voltage follower (VC=1, VR=1, VF=1) - write_cmd(g, ST7565_POWER_CONTROL | 0x07); - delay_ms(50); - - write_cmd(g, 0xE2); - write_cmd(g, ST7565_COM_SCAN); - write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); - //write_cmd2(g, ST7565_CONTRAST, 0); - write_cmd(g, ST7565_DISPLAY_ON); - write_cmd(g, ST7565_ALLON_NORMAL); - write_cmd(g, ST7565_INVERT_DISPLAY); - - write_cmd(g, ST7565_RMW); - - // Finish Init - post_init_board(g); - - // Release the bus - release_bus(g); - - /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOn; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; - return TRUE; -} - -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - unsigned p; - - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - acquire_bus(g); - unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); - for (p = 0; p < 4; p++) { - write_cmd(g, ST7565_PAGE | (p + dstOffset)); - write_cmd(g, ST7565_COLUMN_MSB | 0); - write_cmd(g, ST7565_COLUMN_LSB | 0); - write_cmd(g, ST7565_RMW); - write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); - } - unsigned line = (PRIV(g)->buffer2 ? 32 : 0); - write_cmd(g, ST7565_START_LINE | line); - PRIV(g)->buffer2 = !PRIV(g)->buffer2; - release_bus(g); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - if (gdispColor2Native(g->p.color) != Black) - RAM(g)[xyaddr(x, y)] |= xybit(y); - else - RAM(g)[xyaddr(x, y)] &= ~xybit(y); - g->flags |= GDISP_FLG_NEEDFLUSH; - } -#endif - -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; - } - return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; - } -#endif - -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_OFF); - release_bus(g); - break; - case powerOn: - acquire_bus(g); - write_cmd(g, ST7565_DISPLAY_ON); - release_bus(g); - break; - default: - return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; - - case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; - } - g->g.Orientation = (orientation_t)g->p.ptr; - return; - - case GDISP_CONTROL_CONTRAST: - if ((unsigned)g->p.ptr > 100) - g->p.ptr = (void *)100; - acquire_bus(g); - write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); - release_bus(g); - g->g.Contrast = (unsigned)g->p.ptr; - return; - } - } -#endif // GDISP_NEED_CONTROL - -#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h deleted file mode 100644 index 48587b9e14..0000000000 --- a/keyboards/ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _GDISP_LLD_CONFIG_H -#define _GDISP_LLD_CONFIG_H - -#if GFX_USE_GDISP - -/*===========================================================================*/ -/* Driver hardware support. */ -/*===========================================================================*/ - -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE - -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO - -#endif /* GFX_USE_GDISP */ - -#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h deleted file mode 100644 index 48636b33d6..0000000000 --- a/keyboards/ergodox/drivers/gdisp/st7565ergodox/st7565.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is subject to the terms of the GFX License. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://ugfx.org/license.html - */ - -#ifndef _ST7565_H -#define _ST7565_H - -#define ST7565_CONTRAST 0x81 -#define ST7565_ALLON_NORMAL 0xA4 -#define ST7565_ALLON 0xA5 -#define ST7565_POSITIVE_DISPLAY 0xA6 -#define ST7565_INVERT_DISPLAY 0xA7 -#define ST7565_DISPLAY_OFF 0xAE -#define ST7565_DISPLAY_ON 0xAF - -#define ST7565_LCD_BIAS_7 0xA3 -#define ST7565_LCD_BIAS_9 0xA2 - -#define ST7565_ADC_NORMAL 0xA0 -#define ST7565_ADC_REVERSE 0xA1 - -#define ST7565_COM_SCAN_INC 0xC0 -#define ST7565_COM_SCAN_DEC 0xC8 - -#define ST7565_START_LINE 0x40 -#define ST7565_PAGE 0xB0 -#define ST7565_COLUMN_MSB 0x10 -#define ST7565_COLUMN_LSB 0x00 -#define ST7565_RMW 0xE0 - -#define ST7565_RESISTOR_RATIO 0x20 -#define ST7565_POWER_CONTROL 0x28 - -#endif /* _ST7565_H */ diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile index 22065e4d2d..d1ec266d04 100644 --- a/keyboards/ergodox/infinity/Makefile +++ b/keyboards/ergodox/infinity/Makefile @@ -65,11 +65,11 @@ LED_ENABLE ?= yes LCD_BACKLIGHT_ENABLE ?= yes ifdef LCD_ENABLE -include drivers/gdisp/st7565ergodox/driver.mk +include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk endif ifdef LED_ENABLE -include drivers/gdisp/IS31FL3731C/driver.mk +include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk endif ifndef QUANTUM_DIR diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h new file mode 100644 index 0000000000..2ea73f1fb3 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h @@ -0,0 +1,113 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +static const I2CConfig i2ccfg = { + 400000 // clock speed (Hz); 400kHz max for IS31 +}; + +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 + +static const uint8_t led_mask[] = { + 0xFF, 0x00, /* C1-1 -> C1-16 */ + 0xFF, 0x00, /* C2-1 -> C2-16 */ + 0xFF, 0x00, /* C3-1 -> C3-16 */ + 0xFF, 0x00, /* C4-1 -> C4-16 */ + 0x3F, 0x00, /* C5-1 -> C5-16 */ + 0x00, 0x00, /* C6-1 -> C6-16 */ + 0x00, 0x00, /* C7-1 -> C7-16 */ + 0x00, 0x00, /* C8-1 -> C8-16 */ + 0x00, 0x00, /* C9-1 -> C9-16 */ +}; + +// The address of the LED +#define LA(c, r) (c + r * 16 ) +// Need to be an address that is not mapped, but inside the range of the controller matrix +#define NA LA(8, 8) + +// The numbers in the comments are the led numbers DXX on the PCB +// The mapping is taken from the schematic of left hand side +static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { +// 45 44 43 42 41 40 39 + { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, +// 52 51 50 49 48 47 46 + { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, +// 58 57 56 55 54 53 N/A + { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, +// 67 66 65 64 63 62 61 + { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, +// 76 75 74 73 72 60 59 + { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, +// N/A N/A N/A N/A N/A N/A 68 + { NA, NA, NA, NA, NA, NA, LA(5, 4) }, +// N/A N/A N/A N/A 71 70 69 + { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, +}; + + +#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND +#define IS31_TIMEOUT 5000 + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + /* I2C pins */ + palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL + palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA + palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); + palClearPad(GPIOB, 16); + /* start I2C */ + i2cStart(&I2CD1, &i2ccfg); + // try high drive (from kiibohd) + I2CD1.i2c->C2 |= I2Cx_C2_HDRS; + // try glitch fixing (from kiibohd) + I2CD1.i2c->FLT = 4; +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { + (void) g; + return led_mask; +} + +static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) +{ + (void) g; + return led_mapping[y][x]; +} + +static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { + (void) g; + if(!shutdown) { + palSetPad(GPIOB, 16); + } + else { + palClearPad(GPIOB, 16); + } +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk new file mode 100644 index 0000000000..f32d0d8685 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/IS31FL3731C +GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c new file mode 100644 index 0000000000..1d21f0c498 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c @@ -0,0 +1,333 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX +#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_IS31FL3731C.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 9 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 16 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#define IS31_ADDR_DEFAULT 0x74 + +#define IS31_REG_CONFIG 0x00 +// bits in reg +#define IS31_REG_CONFIG_PICTUREMODE 0x00 +#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 +#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 +// D2:D0 bits are starting frame for autoplay mode + +#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode + +#define IS31_REG_AUTOPLAYCTRL1 0x02 +// D6:D4 number of loops (000=infty) +// D2:D0 number of frames to be used + +#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) + +#define IS31_REG_DISPLAYOPT 0x05 +#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames +#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 +// D2:D0 bits blink period time (*0.27s) + +#define IS31_REG_AUDIOSYNC 0x06 +#define IS31_REG_AUDIOSYNC_ENABLE 0x1 + +#define IS31_REG_FRAMESTATE 0x07 + +#define IS31_REG_BREATHCTRL1 0x08 +// D6:D4 fade out time (26ms*2^i) +// D2:D0 fade in time (26ms*2^i) + +#define IS31_REG_BREATHCTRL2 0x09 +#define IS31_REG_BREATHCTRL2_ENABLE 0x10 +// D2:D0 extinguish time (3.5ms*2^i) + +#define IS31_REG_SHUTDOWN 0x0A +#define IS31_REG_SHUTDOWN_OFF 0x0 +#define IS31_REG_SHUTDOWN_ON 0x1 + +#define IS31_REG_AGCCTRL 0x0B +#define IS31_REG_ADCRATE 0x0C + +#define IS31_COMMANDREGISTER 0xFD +#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' +#define IS31_FUNCTIONREG_SIZE 0xD + +#define IS31_FRAME_SIZE 0xB4 + +#define IS31_PWM_REG 0x24 +#define IS31_PWM_SIZE 0x90 + +#define IS31_LED_MASK_SIZE 0x12 +#define IS31_SCREEN_WIDTH 16 + +#define IS31 + +//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm +const unsigned char cie[256] = { + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, + 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, + 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, + 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, + 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, + 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, + 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, + 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, + 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, + 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, + 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, + 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, + 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, + 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, + 242, 245, 247, 250, 252, 255, +}; + + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + uint8_t write_buffer_offset; + uint8_t write_buffer[IS31_FRAME_SIZE]; + uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; + uint8_t page; +}__attribute__((__packed__)) PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +static GFXINLINE void write_page(GDisplay* g, uint8_t page) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = IS31_COMMANDREGISTER; + tx[1] = page; + write_data(g, tx, 2); +} + +static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = reg; + tx[1] = data; + write_page(g, page); + write_data(g, tx, 2); +} + +static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { + PRIV(g)->write_buffer_offset = offset; + write_page(g, page); + write_data(g, (uint8_t*)PRIV(g), length + 1); +} + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + __builtin_memset(PRIV(g), 0, sizeof(PrivData)); + PRIV(g)->page = 0; + + // Initialise the board interface + init_board(g); + gfxSleepMilliseconds(10); + + // zero function page, all registers (assuming full_page is all zeroes) + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + set_hardware_shutdown(g, false); + gfxSleepMilliseconds(10); + // software shutdown + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + gfxSleepMilliseconds(10); + // zero function page, all registers + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + gfxSleepMilliseconds(10); + + + // zero all LED registers on all 8 pages, and enable the mask + __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); + for(uint8_t i=0; i<8; i++) { + write_ram(g, i, 0, IS31_FRAME_SIZE); + gfxSleepMilliseconds(1); + } + + // software shutdown disable (i.e. turn stuff on) + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + gfxSleepMilliseconds(10); + + // Finish Init + post_init_board(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + PRIV(g)->page++; + PRIV(g)->page %= 2; + // TODO: some smarter algorithm for this + // We should run only one physical page at a time + // This way we don't need to send so much data, and + // we could use slightly less memory + uint8_t* src = PRIV(g)->frame_buffer; + for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; + ++src; + } + } + write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); + gfxSleepMilliseconds(1); + write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + break; + case powerOn: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h new file mode 100644 index 0000000000..bb28ad775e --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h @@ -0,0 +1,36 @@ +/* +Copyright 2016 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk new file mode 100644 index 0000000000..16c3f80f53 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_lcd +GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c new file mode 100644 index 0000000000..babfe2b367 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 128 +#define GDISP_SCREEN_HEIGHT 32 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk new file mode 100644 index 0000000000..2554344321 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_led +GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c new file mode 100644 index 0000000000..b0ebcdc475 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h new file mode 100644 index 0000000000..290571ce5b --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h @@ -0,0 +1,127 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +#include "print.h" + +#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 +#define ST7565_ADC ST7565_ADC_NORMAL +#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC +#define ST7565_PAGE_ORDER 0,1,2,3 +/* + * Custom page order for several LCD boards, e.g. HEM12864-99 + * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 + */ + +#define ST7565_GPIOPORT GPIOC +#define ST7565_PORT PORTC +#define ST7565_A0_PIN 7 +#define ST7565_RST_PIN 8 +#define ST7565_MOSI_PIN 6 +#define ST7565_SLCK_PIN 5 +#define ST7565_SS_PIN 4 + +#define palSetPadModeRaw(portname, bits) \ + ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits + +#define palSetPadModeNamed(portname, portmode) \ + palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) + +#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) +// DSPI Clock and Transfer Attributes +// Frame Size: 8 bits +// MSB First +// CLK Low by default +static const SPIConfig spi1config = { + NULL, + /* HW dependent part.*/ + ST7565_GPIOPORT, + ST7565_SS_PIN, + SPIx_CTARn_FMSZ(7) + | SPIx_CTARn_ASC(7) + | SPIx_CTARn_DT(7) + | SPIx_CTARn_CSSCK(7) + | SPIx_CTARn_PBR(0) + | SPIx_CTARn_BR(7) + //SPI_CR1_BR_0 +}; + +static bool_t st7565_is_data_mode = 1; + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + st7565_is_data_mode = 1; + palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + palSetPadModeRaw(MOSI, ST7565_SPI_MODE); + palSetPadModeRaw(SLCK, ST7565_SPI_MODE); + palSetPadModeRaw(SS, ST7565_SPI_MODE); + + spiInit(); + spiStart(&SPID1, &spi1config); + spiSelect(&SPID1); +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { + (void) g; + if (state) { + palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } + else { + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } +} + +static GFXINLINE void acquire_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to acquire + // spiAcquireBus(&SPID1); +} + +static GFXINLINE void release_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to release + //spiReleaseBus(&SPID1); +} + +static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { + (void) g; + if (st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 0; + } + spiSend(&SPID1, 1, &cmd); +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + if (!st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 1; + } + spiSend(&SPID1, length, data); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk new file mode 100644 index 0000000000..889a1a0317 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/st7565ergodox +GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c new file mode 100644 index 0000000000..c33aea81a8 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c @@ -0,0 +1,292 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX +#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_ST7565.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 32 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 128 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#include "drivers/gdisp/st7565ergodox/st7565.h" + +/*===========================================================================*/ +/* Driver config defaults for backward compatibility. */ +/*===========================================================================*/ +#ifndef ST7565_LCD_BIAS + #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 +#endif +#ifndef ST7565_ADC + #define ST7565_ADC ST7565_ADC_NORMAL +#endif +#ifndef ST7565_COM_SCAN + #define ST7565_COM_SCAN ST7565_COM_SCAN_INC +#endif +#ifndef ST7565_PAGE_ORDER + #define ST7565_PAGE_ORDER 0,1,2,3 +#endif + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + bool_t buffer2; + uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; +}PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) +#define RAM(g) (PRIV(g)->ram) +#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } +#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } + +// Some common routines and macros +#define delay(us) gfxSleepMicroseconds(us) +#define delay_ms(ms) gfxSleepMilliseconds(ms) + +#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) +#define xybit(y) (1<<((y)&7)) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/* + * As this controller can't update on a pixel boundary we need to maintain the + * the entire display surface in memory so that we can do the necessary bit + * operations. Fortunately it is a small display in monochrome. + * 64 * 128 / 8 = 1024 bytes. + */ + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + PRIV(g)->buffer2 = false; + + // Initialise the board interface + init_board(g); + + // Hardware reset + setpin_reset(g, TRUE); + gfxSleepMilliseconds(20); + setpin_reset(g, FALSE); + gfxSleepMilliseconds(20); + + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + write_cmd(g, ST7565_LCD_BIAS); + write_cmd(g, ST7565_ADC); + write_cmd(g, ST7565_COM_SCAN); + + write_cmd(g, ST7565_START_LINE | 0); + + write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); + + // turn on voltage converter (VC=1, VR=0, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x04); + delay_ms(50); + + // turn on voltage regulator (VC=1, VR=1, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x06); + delay_ms(50); + + // turn on voltage follower (VC=1, VR=1, VF=1) + write_cmd(g, ST7565_POWER_CONTROL | 0x07); + delay_ms(50); + + write_cmd(g, 0xE2); + write_cmd(g, ST7565_COM_SCAN); + write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); + //write_cmd2(g, ST7565_CONTRAST, 0); + write_cmd(g, ST7565_DISPLAY_ON); + write_cmd(g, ST7565_ALLON_NORMAL); + write_cmd(g, ST7565_INVERT_DISPLAY); + + write_cmd(g, ST7565_RMW); + + // Finish Init + post_init_board(g); + + // Release the bus + release_bus(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + unsigned p; + + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + acquire_bus(g); + unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); + for (p = 0; p < 4; p++) { + write_cmd(g, ST7565_PAGE | (p + dstOffset)); + write_cmd(g, ST7565_COLUMN_MSB | 0); + write_cmd(g, ST7565_COLUMN_LSB | 0); + write_cmd(g, ST7565_RMW); + write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); + } + unsigned line = (PRIV(g)->buffer2 ? 32 : 0); + write_cmd(g, ST7565_START_LINE | line); + PRIV(g)->buffer2 = !PRIV(g)->buffer2; + release_bus(g); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + if (gdispColor2Native(g->p.color) != Black) + RAM(g)[xyaddr(x, y)] |= xybit(y); + else + RAM(g)[xyaddr(x, y)] &= ~xybit(y); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + release_bus(g); + break; + case powerOn: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_ON); + release_bus(g); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + if ((unsigned)g->p.ptr > 100) + g->p.ptr = (void *)100; + acquire_bus(g); + write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); + release_bus(g); + g->g.Contrast = (unsigned)g->p.ptr; + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h new file mode 100644 index 0000000000..48587b9e14 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h @@ -0,0 +1,26 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h new file mode 100644 index 0000000000..48636b33d6 --- /dev/null +++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h @@ -0,0 +1,37 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _ST7565_H +#define _ST7565_H + +#define ST7565_CONTRAST 0x81 +#define ST7565_ALLON_NORMAL 0xA4 +#define ST7565_ALLON 0xA5 +#define ST7565_POSITIVE_DISPLAY 0xA6 +#define ST7565_INVERT_DISPLAY 0xA7 +#define ST7565_DISPLAY_OFF 0xAE +#define ST7565_DISPLAY_ON 0xAF + +#define ST7565_LCD_BIAS_7 0xA3 +#define ST7565_LCD_BIAS_9 0xA2 + +#define ST7565_ADC_NORMAL 0xA0 +#define ST7565_ADC_REVERSE 0xA1 + +#define ST7565_COM_SCAN_INC 0xC0 +#define ST7565_COM_SCAN_DEC 0xC8 + +#define ST7565_START_LINE 0x40 +#define ST7565_PAGE 0xB0 +#define ST7565_COLUMN_MSB 0x10 +#define ST7565_COLUMN_LSB 0x00 +#define ST7565_RMW 0xE0 + +#define ST7565_RESISTOR_RATIO 0x20 +#define ST7565_POWER_CONTROL 0x28 + +#endif /* _ST7565_H */ -- cgit v1.2.3 From ad416fb1a346ff5ff51ef16ef7aaa63115fe8272 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 14:46:18 +0300 Subject: Include the main Makefile before including Ergodox infinity drivers --- keyboards/ergodox/infinity/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile index d1ec266d04..ccb735a485 100644 --- a/keyboards/ergodox/infinity/Makefile +++ b/keyboards/ergodox/infinity/Makefile @@ -64,6 +64,10 @@ LCD_ENABLE ?= yes LED_ENABLE ?= yes LCD_BACKLIGHT_ENABLE ?= yes +ifndef QUANTUM_DIR + include ../../../Makefile +endif + ifdef LCD_ENABLE include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk endif @@ -71,7 +75,3 @@ endif ifdef LED_ENABLE include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk endif - -ifndef QUANTUM_DIR - include ../../../Makefile -endif \ No newline at end of file -- cgit v1.2.3 From 349f189e83c39dc3387b9358d0d2f372a5bbdf2b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 21:49:48 +0300 Subject: Move Ergodox readme from ez subfolder to parent --- keyboards/ergodox/ez/readme.md | 44 ------------------------------------------ keyboards/ergodox/readme.md | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 44 deletions(-) delete mode 100644 keyboards/ergodox/ez/readme.md create mode 100644 keyboards/ergodox/readme.md diff --git a/keyboards/ergodox/ez/readme.md b/keyboards/ergodox/ez/readme.md deleted file mode 100644 index 67a5fb0951..0000000000 --- a/keyboards/ergodox/ez/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -# Getting started - -There are two main ways you could customize the ErgoDox EZ. - -## The Easy Way: Use an existing firmware file and just flash it - -1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this. -2. Find a firmware file you like. You can find a few if these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. -3. Download the firmware file -4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded. - -## More technical: create your own totally custom firmware by editing the source files. - -This requires a little bit of familiarity with coding. - -1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) -2. Clone the repository (download it) -3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md) - - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc` -4. Copy `keyboards/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) -5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. -6. Compile your firmware by running `make keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`. -6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy keymap=your_name`. -7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. - -Good luck! :) - -## Contributing your keymap - -The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. - -1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). -2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. -3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) -4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. - - -## Finding the keycodes you need - -Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. - -That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot). - -If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md new file mode 100644 index 0000000000..67a5fb0951 --- /dev/null +++ b/keyboards/ergodox/readme.md @@ -0,0 +1,44 @@ +# Getting started + +There are two main ways you could customize the ErgoDox EZ. + +## The Easy Way: Use an existing firmware file and just flash it + +1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this. +2. Find a firmware file you like. You can find a few if these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. +3. Download the firmware file +4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded. + +## More technical: create your own totally custom firmware by editing the source files. + +This requires a little bit of familiarity with coding. + +1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) +2. Clone the repository (download it) +3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md) + - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc` +4. Copy `keyboards/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) +5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. +6. Compile your firmware by running `make keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`. +6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy keymap=your_name`. +7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. + +Good luck! :) + +## Contributing your keymap + +The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. + +1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). +2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. +3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) +4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. + + +## Finding the keycodes you need + +Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. + +That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot). + +If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. -- cgit v1.2.3 From 44cefcb40a8789d8d7965e645d5cd155b6d16370 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 22:08:01 +0300 Subject: Refer to the right path in the readme --- keyboards/ergodox/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 67a5fb0951..c99c8d82ba 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -17,7 +17,7 @@ This requires a little bit of familiarity with coding. 2. Clone the repository (download it) 3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md) - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc` -4. Copy `keyboards/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) +4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. 6. Compile your firmware by running `make keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`. 6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy keymap=your_name`. -- cgit v1.2.3 From c65da1f2089e53b051cd10a240e14d2335c6d8e6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 22:52:26 +0300 Subject: Unify the ErgoDox EZ and Infinity documentation --- keyboards/ergodox/readme.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index c99c8d82ba..8cd553ee11 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,17 +1,20 @@ # Getting started -There are two main ways you could customize the ErgoDox EZ. +There are two main ways you could customize the ErgoDox (EZ and Infinity) ## The Easy Way: Use an existing firmware file and just flash it +This does not work for Infinity ErgoDox yet, you need to compile the firmware according to the instructions below + 1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this. -2. Find a firmware file you like. You can find a few if these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. +2. Find a firmware file you like. You can find a few of these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. 3. Download the firmware file 4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded. -## More technical: create your own totally custom firmware by editing the source files. +## More technical: compile an existing keymap, or create your own totally custom firmware by editing the source files. -This requires a little bit of familiarity with coding. +This requires a little bit of familiarity with coding. +If you are just compiling and existing keymap and don't want to create your own, you can skip step 4, 5 and 8. 1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) 2. Clone the repository (download it) @@ -19,15 +22,17 @@ This requires a little bit of familiarity with coding. - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc` 4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. -6. Compile your firmware by running `make keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`. -6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy keymap=your_name`. -7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. +6. Compile your firmware by running `make keymap=keymap_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `subproject=infinity` to the make command. +7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make teensy keymap=your_name`. + + **Infinity ErgoDox** - Flash the firmware by running `make dfu-util keymap=your_name` +8. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. Good luck! :) ## Contributing your keymap -The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. +The ErgoDox firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. 1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). 2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. -- cgit v1.2.3 From 401dd090772936a75667a5d1510ff580d6d568bd Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 22:55:20 +0300 Subject: A couple of more Ergodox readme fixes --- keyboards/ergodox/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 8cd553ee11..983559c761 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -23,9 +23,9 @@ If you are just compiling and existing keymap and don't want to create your own, 4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. 6. Compile your firmware by running `make keymap=keymap_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `subproject=infinity` to the make command. -7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make teensy keymap=your_name`. +7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make teensy keymap=keymap_name`. - **Infinity ErgoDox** - Flash the firmware by running `make dfu-util keymap=your_name` + **Infinity ErgoDox** - Flash the firmware by running `make dfu-util keymap=keymap_name subproject=infinity` 8. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. Good luck! :) -- cgit v1.2.3 From 6e8a5aca9d7a955a6037a6db8a6e9068354db894 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 10 Jul 2016 23:07:00 +0300 Subject: Fix typo in the readme. --- keyboards/ergodox/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 983559c761..9afa474108 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -14,7 +14,7 @@ This does not work for Infinity ErgoDox yet, you need to compile the firmware ac ## More technical: compile an existing keymap, or create your own totally custom firmware by editing the source files. This requires a little bit of familiarity with coding. -If you are just compiling and existing keymap and don't want to create your own, you can skip step 4, 5 and 8. +If you are just compiling an existing keymap and don't want to create your own, you can skip step 4, 5 and 8. 1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) 2. Clone the repository (download it) -- cgit v1.2.3 From 566c79554ebd6e17d161ad488ce807ea7e8b24db Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 12 Jul 2016 17:50:06 +0300 Subject: Small fix for infinity include guard --- keyboards/ergodox/infinity/infinity.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h index 83ce6444c3..fec9e565cd 100644 --- a/keyboards/ergodox/infinity/infinity.h +++ b/keyboards/ergodox/infinity/infinity.h @@ -1,5 +1,5 @@ -#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ -#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ +#ifndef KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ +#define KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ #include "quantum.h" @@ -107,4 +107,4 @@ inline void ergodox_led_all_set(uint8_t n) { { B80, B81, B82, B83, B84 } \ } -#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */ +#endif /* KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ */ -- cgit v1.2.3 From 7d55951050016f2cd9af80c7129bab3200abc810 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 29 Jul 2016 22:38:06 +0300 Subject: Fix the quick aliases documentation section Also move all keyboard customization documentation under the "Going Beyond the keycodes" heading. --- readme.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/readme.md b/readme.md index f717f8e4c8..45af1b0c3a 100644 --- a/readme.md +++ b/readme.md @@ -229,10 +229,18 @@ For a value of `4` for this imaginary setting. So we `undef` it first, then `def You can then override any settings, rather than having to copy and paste the whole thing. -## Going beyond the keycodes +# Going beyond the keycodes Aside from the [basic keycodes](doc/keycode.txt), your keymap can include shortcuts to common operations. +## Quick aliases to common actions + +Your keymap can include shortcuts to common operations (called "function actions" in tmk). + +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/doc/keymap.md#2-action). + +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. + ### 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. @@ -310,7 +318,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift. -### Space Cadet Shift: The future, built in +## Space Cadet Shift: The future, built in Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. @@ -335,7 +343,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time. -### The Leader key: A new kind of modifier +## The Leader key: A new kind of modifier If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen. @@ -373,7 +381,7 @@ void matrix_scan_user(void) { As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously. -### Tap Dance: A single key can do 3, 5, or 100 different things +## Tap Dance: A single key can do 3, 5, or 100 different things Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how algernon describes the feature: @@ -409,7 +417,7 @@ Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-danc For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. -#### Examples +### Examples Here's a simple example for a single definition: @@ -518,11 +526,11 @@ const qk_tap_dance_action_t tap_dance_actions[] = { }; ``` -### Temporarily setting the default layer +## 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. -### Prevent stuck modifiers +## Prevent stuck modifiers Consider the following scenario: @@ -543,12 +551,6 @@ This option uses 5 bytes of memory per every 8 keys on the keyboard rounded up (5 bits per key). For example on Planck (48 keys) it uses (48/8)\*5 = 30 bytes. -### Remember: These are just aliases - -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/doc/keymap.md#2-action). - -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 keymap_default.c). -- cgit v1.2.3 From 5f2d3f27de2913656176516f437880ec0c296e7d Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Sat, 30 Jul 2016 00:56:43 -0400 Subject: Moved CapsLk, ScrollLk, and NumLk to Adjust layer --- keyboards/planck/keymaps/impossible/keymap.c | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 4ef16aa3a6..bf5588ad55 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -57,19 +57,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Caps | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Tab | Insert| PrtSc | ScrLk | Pause | NumLk | Menu | | PgUp | F1 | F2 | F3 | + * | Tab | Insert| PrtSc | | Pause | | Menu | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_Tab, KC_INS, KC_PSCR, KC_SLCK, KC_PAUSE, KC_NUMLOCK, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {XXXXXXX, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_Tab, KC_INS, KC_PSCR, XXXXXXX, KC_PAUSE, XXXXXXX, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty @@ -99,15 +99,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| | CapsLk| ScrLk | NumLk | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | + * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' */ [_QWERTY_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, KC_CAPSLOCK, KC_SLCK, KC_NLCK, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} }, /* Plover layer (http://opensteno.org) @@ -133,19 +133,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | | | | | | | | | | | | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | | | | | | |Voice +| Audio |MIDIoff| | + * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | | | | | | | | |Voice -| Music |MIDI on| | + * | | | | | | | | ScrLk |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | |Workman| Qwerty| Plover| Adjust| + * | | | | | | | | Numlk |Workman| Qwerty| Plover| Adjust| * `-----------------------------------------------------------------------------------------------' */ [_ADJUST] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, - {_______, _______, _______, _______, _______, _______, _______, _______, MUV_IN, AU_TOG, MI_OFF, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, MU_TOG, MI_ON, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, WORKMAN, QWERTY, PLOVER, _______} + {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} } }; -- cgit v1.2.3 From 8a9bf1f1653a5029ffd8f1e1171cd0b16bc2bc71 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 30 Jul 2016 08:37:30 +0200 Subject: Update some obsolete references Some links were still pointing to `/keyboards/ergodox_ez`, while the directory is `/keyboards/erdogox` now. Not all references have been updated, and some of the text here and there may need updating to mention the ErgoDox Infinity too, but that's out of the scope for this quick fix. Signed-off-by: Gergely Nagy --- Dockerfile | 2 +- Vagrantfile | 2 +- doc/TMK_README.md | 2 +- doc/VAGRANT_GUIDE.md | 4 ++-- keyboards/ergodox/keymaps/supercoder/readme.md | 2 +- keyboards/readme.md | 2 +- readme.md | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96ace4ec6b..578d009dc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get install --no-install-recommends -y build-essential \ RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* -ENV keyboard=ergodox_ez +ENV keyboard=ergodox ENV keymap=default VOLUME /qmk diff --git a/Vagrantfile b/Vagrantfile index 8cadeaddfc..389b688ae7 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -91,7 +91,7 @@ Vagrant.configure(2) do |config| Or you can copy and paste the example line below. - cd /vagrant; cd keyboards; cd ergodox_ez; make clean; make + cd /vagrant; cd keyboards; cd ergodox; make clean; make EOT diff --git a/doc/TMK_README.md b/doc/TMK_README.md index 6164dacd3c..f3d96717a8 100644 --- a/doc/TMK_README.md +++ b/doc/TMK_README.md @@ -34,7 +34,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di * [atomic](keyboards/atomic/) - [Atomic] Ortholinear 60% keyboard ### Ergodox EZ -* [ergodox_ez](keyboards/ergodox_ez) - [Ergodox_EZ] Assembled split keyboard +* [ergodox_ez](keyboards/ergodox/ez) - [Ergodox_EZ] Assembled split keyboard ## Other projects diff --git a/doc/VAGRANT_GUIDE.md b/doc/VAGRANT_GUIDE.md index 62044b7f72..c9958e16b5 100644 --- a/doc/VAGRANT_GUIDE.md +++ b/doc/VAGRANT_GUIDE.md @@ -20,7 +20,7 @@ See [/doc/keymap.md](/doc/keymap.md). ## Flashing the firmware -The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox_ez/readme.md) gives a great example. +The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox/readme.md) gives a great example. If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version. - \ No newline at end of file + diff --git a/keyboards/ergodox/keymaps/supercoder/readme.md b/keyboards/ergodox/keymaps/supercoder/readme.md index 97bf7f5835..8ef96eddf6 100644 --- a/keyboards/ergodox/keymaps/supercoder/readme.md +++ b/keyboards/ergodox/keymaps/supercoder/readme.md @@ -23,7 +23,7 @@ your own: ``` $ git clone https://github.com/jackhumbert/qmk_firmware.git -$ cd qmk_firmware/keyboards/ergodox_ez +$ cd qmk_firmware/keyboards/ergodox $ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder $ make KEYMAP=supercoder ``` diff --git a/keyboards/readme.md b/keyboards/readme.md index e979865467..f6c90b1f63 100644 --- a/keyboards/readme.md +++ b/keyboards/readme.md @@ -17,7 +17,7 @@ What makes OLKB keyboards shine is a combo of lean aesthetics, compact size, and Made in Taiwan using advanced robotic manufacturing, the ErgoDox EZ is a fully-assembled, premium ergonomic keyboard. Its split design allows you to place both halves shoulder width, and its custom-made wrist rests and tilt/tent kit make for incredibly comfortable typing. Available on [ergodox-ez.com](https://ergodox-ez.com). -* [ErgoDox EZ](/keyboards/ergodox_ez/) - Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types. +* [ErgoDox EZ](/keyboards/ergodox/) - Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types. ### Clueboard - Zach White diff --git a/readme.md b/readme.md index 45af1b0c3a..c3d866f36b 100644 --- a/readme.md +++ b/readme.md @@ -82,9 +82,9 @@ If this is a bit complex for you, Docker might be the turn-key solution you need ```bash # You'll run this every time you want to build a keymap # modify the keymap and keyboard assigment to compile what you want -# defaults are ergodox_ez/default +# defaults are ergodox/default -docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware +docker run -e keymap=gwen -e keyboard=ergodox --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware ``` -- cgit v1.2.3 From f78a994355e2fb23555b018fa631778b1b117b7f Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 23 Jul 2016 19:06:19 -0700 Subject: Add "jeebak" keymap folder as a copy of the "default" folder --- keyboards/planck/keymaps/jeebak/Makefile | 25 +++ keyboards/planck/keymaps/jeebak/keymap.c | 314 ++++++++++++++++++++++++++++++ keyboards/planck/keymaps/jeebak/readme.md | 2 + 3 files changed, 341 insertions(+) create mode 100644 keyboards/planck/keymaps/jeebak/Makefile create mode 100644 keyboards/planck/keymaps/jeebak/keymap.c create mode 100644 keyboards/planck/keymaps/jeebak/readme.md diff --git a/keyboards/planck/keymaps/jeebak/Makefile b/keyboards/planck/keymaps/jeebak/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/planck/keymaps/jeebak/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c new file mode 100644 index 0000000000..5f71ae7d19 --- /dev/null +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + -- cgit v1.2.3 From 7d0345ef25b5e1924f1e98c76d78607778e0b17d Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 30 Jul 2016 01:52:33 -0700 Subject: Add IN_LIKE_FLINT song --- quantum/audio/song_list.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h index fc6fcdeef1..8022ca6729 100644 --- a/quantum/audio/song_list.h +++ b/quantum/audio/song_list.h @@ -28,6 +28,14 @@ Q__NOTE(_E4), Q__NOTE(_C4), \ Q__NOTE(_E4), +/* Requires: PLAY_NOTE_ARRAY(..., ..., STACCATO); */ +#define IN_LIKE_FLINT \ + E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4), \ + E__NOTE(_AS4), E__NOTE(_B4), QD_NOTE(_CS4), \ + E__NOTE(_B4), E__NOTE(_CS4), QD_NOTE(_DS4), \ + E__NOTE(_CS4), E__NOTE(_B4), QD_NOTE(_AS4), \ + E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4), + #define GOODBYE_SOUND \ E__NOTE(_E7), \ E__NOTE(_A6), \ -- cgit v1.2.3 From a01d703a58174f4dd67c0cd34e8572244da78efd Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 01:50:46 -0400 Subject: initial commit of sethbc keymap --- keyboards/ergodox_ez/keymaps/sethbc/Makefile | 14 ++++ keyboards/ergodox_ez/keymaps/sethbc/keymap.c | 102 ++++++++++++++++++++++++++ keyboards/ergodox_ez/keymaps/sethbc/readme.md | 3 + 3 files changed, 119 insertions(+) create mode 100644 keyboards/ergodox_ez/keymaps/sethbc/Makefile create mode 100644 keyboards/ergodox_ez/keymaps/sethbc/keymap.c create mode 100644 keyboards/ergodox_ez/keymaps/sethbc/readme.md diff --git a/keyboards/ergodox_ez/keymaps/sethbc/Makefile b/keyboards/ergodox_ez/keymaps/sethbc/Makefile new file mode 100644 index 0000000000..4422ec6b74 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/sethbc/Makefile @@ -0,0 +1,14 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ +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 +MIDI_ENABLE = no # MIDI controls +UNICODE_ENABLE = yes # Unicode + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox_ez/keymaps/sethbc/keymap.c b/keyboards/ergodox_ez/keymaps/sethbc/keymap.c new file mode 100644 index 0000000000..5335190252 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/sethbc/keymap.c @@ -0,0 +1,102 @@ +#include "ergodox_ez.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define FN1 1 // symbols +#define FN2 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(FN2), + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(FN1), + KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_SPC, KC_BSPC, KC_END, + // right hand + MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(FN1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +// FN1 +[FN1] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_F12, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +// FN2 +[FN2] = KEYMAP( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NLCK, KC_PSLS, KC_PAST, KC_PAST, KC_PMNS, KC_BSPC, + KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC, + KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PENT, + KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PENT, + KC_P0, KC_PDOT, KC_SLSH, KC_PENT, KC_PENT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox_ez/keymaps/sethbc/readme.md b/keyboards/ergodox_ez/keymaps/sethbc/readme.md new file mode 100644 index 0000000000..510b2f99c8 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/sethbc/readme.md @@ -0,0 +1,3 @@ +# sethbc's Ergodox EZ keymap + +Largely based on the Ergodox Infinity default keymap -- cgit v1.2.3 From 694567f799b199c26852a0c3d3e0f46e1f646878 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Wed, 27 Jul 2016 01:53:43 -0400 Subject: update makefile --- keyboards/ergodox_ez/keymaps/sethbc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/sethbc/Makefile b/keyboards/ergodox_ez/keymaps/sethbc/Makefile index 4422ec6b74..8c4ff87845 100644 --- a/keyboards/ergodox_ez/keymaps/sethbc/Makefile +++ b/keyboards/ergodox_ez/keymaps/sethbc/Makefile @@ -2,7 +2,7 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ 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 -- cgit v1.2.3 From a6ec5fa74a970d29c6b965fdc2e63846a212882d Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 30 Jul 2016 10:46:13 -0400 Subject: rebase --- keyboards/ergodox/keymaps/sethbc/Makefile | 14 ++++ keyboards/ergodox/keymaps/sethbc/keymap.c | 102 ++++++++++++++++++++++++++ keyboards/ergodox/keymaps/sethbc/readme.md | 3 + keyboards/ergodox_ez/keymaps/sethbc/Makefile | 14 ---- keyboards/ergodox_ez/keymaps/sethbc/keymap.c | 102 -------------------------- keyboards/ergodox_ez/keymaps/sethbc/readme.md | 3 - 6 files changed, 119 insertions(+), 119 deletions(-) create mode 100644 keyboards/ergodox/keymaps/sethbc/Makefile create mode 100644 keyboards/ergodox/keymaps/sethbc/keymap.c create mode 100644 keyboards/ergodox/keymaps/sethbc/readme.md delete mode 100644 keyboards/ergodox_ez/keymaps/sethbc/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/sethbc/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/sethbc/readme.md diff --git a/keyboards/ergodox/keymaps/sethbc/Makefile b/keyboards/ergodox/keymaps/sethbc/Makefile new file mode 100644 index 0000000000..8c4ff87845 --- /dev/null +++ b/keyboards/ergodox/keymaps/sethbc/Makefile @@ -0,0 +1,14 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ +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 +MIDI_ENABLE = no # MIDI controls +UNICODE_ENABLE = yes # Unicode + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/sethbc/keymap.c b/keyboards/ergodox/keymaps/sethbc/keymap.c new file mode 100644 index 0000000000..6846c4d529 --- /dev/null +++ b/keyboards/ergodox/keymaps/sethbc/keymap.c @@ -0,0 +1,102 @@ +#include "ergodox.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define FN1 1 // symbols +#define FN2 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(FN2), + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(FN1), + KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_SPC, KC_BSPC, KC_END, + // right hand + MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(FN1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +// FN1 +[FN1] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_F12, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +// FN2 +[FN2] = KEYMAP( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NLCK, KC_PSLS, KC_PAST, KC_PAST, KC_PMNS, KC_BSPC, + KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC, + KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PENT, + KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PENT, + KC_P0, KC_PDOT, KC_SLSH, KC_PENT, KC_PENT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/sethbc/readme.md b/keyboards/ergodox/keymaps/sethbc/readme.md new file mode 100644 index 0000000000..510b2f99c8 --- /dev/null +++ b/keyboards/ergodox/keymaps/sethbc/readme.md @@ -0,0 +1,3 @@ +# sethbc's Ergodox EZ keymap + +Largely based on the Ergodox Infinity default keymap diff --git a/keyboards/ergodox_ez/keymaps/sethbc/Makefile b/keyboards/ergodox_ez/keymaps/sethbc/Makefile deleted file mode 100644 index 8c4ff87845..0000000000 --- a/keyboards/ergodox_ez/keymaps/sethbc/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE = no # MIDI controls -UNICODE_ENABLE = yes # Unicode - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergodox_ez/keymaps/sethbc/keymap.c b/keyboards/ergodox_ez/keymaps/sethbc/keymap.c deleted file mode 100644 index 5335190252..0000000000 --- a/keyboards/ergodox_ez/keymaps/sethbc/keymap.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "ergodox_ez.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define FN1 1 // symbols -#define FN2 2 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP( // layer 0 : default - // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(FN2), - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(FN1), - KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, - KC_LCTL, KC_LALT, - KC_HOME, - KC_SPC, KC_BSPC, KC_END, - // right hand - MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MO(FN1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RGUI, - KC_RALT, KC_RCTL, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC - ), -// FN1 -[FN1] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_F12, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -// FN2 -[FN2] = KEYMAP( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NLCK, KC_PSLS, KC_PAST, KC_PAST, KC_PMNS, KC_BSPC, - KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC, - KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PENT, - KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PENT, - KC_P0, KC_PDOT, KC_SLSH, KC_PENT, KC_PENT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { -}; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox_ez/keymaps/sethbc/readme.md b/keyboards/ergodox_ez/keymaps/sethbc/readme.md deleted file mode 100644 index 510b2f99c8..0000000000 --- a/keyboards/ergodox_ez/keymaps/sethbc/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# sethbc's Ergodox EZ keymap - -Largely based on the Ergodox Infinity default keymap -- cgit v1.2.3 From eb1a06d3ae585dfe0af2b2809a1b22400fc0387f Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 23 Jul 2016 19:59:22 -0700 Subject: Tap for Esc, hold for Control --- keyboards/planck/keymaps/jeebak/keymap.c | 63 +++++++++++++++++--------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 5f71ae7d19..01f102c71e 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -37,58 +37,61 @@ enum planck_keycodes { #define _______ KC_TRNS #define XXXXXXX KC_NO +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' + * ,---------------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |----------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | + * |----------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `---------------------------------------------------------------------------------------' */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' + * ,---------------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | " | + * |----------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift | Z | X | C | V | B | K | M | , | . | / |Enter | + * |----------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `---------------------------------------------------------------------------------------' */ [_COLEMAK] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' + * ,---------------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | / | + * |----------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |----------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `---------------------------------------------------------------------------------------' */ [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -- cgit v1.2.3 From b5d77440b632ecb637f880d5a7c4362c365fde0d Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Mon, 25 Jul 2016 20:25:03 -0700 Subject: Add personalized TouchCursor layer --- keyboards/planck/keymaps/jeebak/keymap.c | 34 ++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 01f102c71e..84fee80708 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -20,6 +20,7 @@ extern keymap_config_t keymap_config; #define _LOWER 3 #define _RAISE 4 #define _PLOVER 5 +#define _TOUCHCURSOR 6 #define _ADJUST 16 enum planck_keycodes { @@ -39,6 +40,8 @@ enum planck_keycodes { // Custom macros #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor +// ^-- Requires KC_TRNS / _______ for the trigger key in the destination layer const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -50,14 +53,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | * `---------------------------------------------------------------------------------------' */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak @@ -68,14 +71,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+------| * | Shift | Z | X | C | V | B | K | M | , | . | / |Enter | * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | * `---------------------------------------------------------------------------------------' */ [_COLEMAK] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -86,14 +89,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+------| * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Enter | * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | * `---------------------------------------------------------------------------------------' */ [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -132,6 +135,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, +/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations + * ,-----------------------------------------------------------------------------------. + * | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + | | Alt |Space | | | | PgUp | Left | Down |Right | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + | | | | | | ` | PgDn | Del | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_TOUCHCURSOR] = { + {_______, _______, _______, KC_LSFT, KC_LGUI, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, + {_______, KC_LALT, KC_SPC, _______, _______, _______, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, + {_______, _______, _______, _______, _______, KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | -- cgit v1.2.3 From ad7e4af45c103866149e3a66096a1e46d72f1072 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Tue, 26 Jul 2016 13:34:01 -0700 Subject: Tap for Enter, hold for Shift --- keyboards/planck/keymaps/jeebak/keymap.c | 61 ++++++++++++++++---------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 84fee80708..04bc57fa74 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -42,60 +42,61 @@ enum planck_keycodes { #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor // ^-- Requires KC_TRNS / _______ for the trigger key in the destination layer +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty - * ,---------------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |----------+------+------+------+------+-------------+------+------+------+------+------| - * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |----------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift | Z | X | C | V | B | N | M | , | . | / |Enter | - * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | - * `---------------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+--------| + * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |----------+------+------+------+------+------|------+------+------+------+------+--------| + * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | + * |----------+------+------+------+------+------+------+------+------+------+------+--------| + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * `-----------------------------------------------------------------------------------------' */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak - * ,---------------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |----------+------+------+------+------+-------------+------+------+------+------+------| - * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | " | - * |----------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift | Z | X | C | V | B | K | M | , | . | / |Enter | - * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | - * `---------------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+--------| + * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | " | + * |----------+------+------+------+------+------|------+------+------+------+------+--------| + * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent | + * |----------+------+------+------+------+------+------+------+------+------+------+--------| + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * `-----------------------------------------------------------------------------------------' */ [_COLEMAK] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak - * ,---------------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |----------+------+------+------+------+-------------+------+------+------+------+------| - * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | / | - * |----------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |----------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up |Right | - * `---------------------------------------------------------------------------------------' + * ,-----------------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |----------+------+------+------+------+-------------+------+------+------+------+--------| + * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | / | + * |----------+------+------+------+------+------|------+------+------+------+------+--------| + * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent | + * |----------+------+------+------+------+------+------+------+------+------+------+--------| + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * `-----------------------------------------------------------------------------------------' */ [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT}, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -- cgit v1.2.3 From 6baf77d8fbb479df09ab2b96a09d823c76d45b95 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Tue, 26 Jul 2016 20:14:09 -0700 Subject: Move _RAISE symbols to _LOWER --- keyboards/planck/keymaps/jeebak/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 04bc57fa74..d2ae4edb3e 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -122,17 +122,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -- cgit v1.2.3 From a6bae9fb078a35210a1b2eb3dda4db6d63e4c0a5 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Tue, 26 Jul 2016 23:49:11 -0700 Subject: Add numbers to _RAISE --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index d2ae4edb3e..9058098c92 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -122,17 +122,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | 0 |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_0, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -- cgit v1.2.3 From 7209310d1b004de74412ad1806b6f29e90d285d6 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Wed, 27 Jul 2016 22:48:27 -0700 Subject: Add mouse layer, and remove default arrow keys (touchcursor only, now) --- keyboards/planck/keymaps/jeebak/keymap.c | 51 ++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 9058098c92..039a920fb5 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -21,6 +21,7 @@ extern keymap_config_t keymap_config; #define _RAISE 4 #define _PLOVER 5 #define _TOUCHCURSOR 6 +#define _MOUSE 7 #define _ADJUST 16 enum planck_keycodes { @@ -43,6 +44,7 @@ enum planck_keycodes { #define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor // ^-- Requires KC_TRNS / _______ for the trigger key in the destination layer #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define LT_ML LT(_MOUSE, KC_A) // L-ayer T-ap M-ouse C-ursor (on A) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -50,54 +52,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | " | + * | Ctrl/Esc | ML/A | S | D | F | G | H | J | K | L | ; | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | * `-----------------------------------------------------------------------------------------' */ [_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}, - {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {CTL_ESC, LT_ML, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} }, /* Colemak * ,-----------------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | " | + * | Ctrl/Esc | ML/A | R | S | T | D | H | N | E | I | O | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | * `-----------------------------------------------------------------------------------------' */ [_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}, - {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} }, /* Dvorak * ,-----------------------------------------------------------------------------------------. * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | / | + * | Ctrl/Esc | ML/A | O | E | U | I | D | H | T | N | S | / | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Left | Down | Up | Right | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | * `-----------------------------------------------------------------------------------------' */ [_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}, - {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} }, /* Lower @@ -140,11 +142,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | * |------+------+------+------+------+-------------+------+------+------+------+------| - | | Alt |Space | | | | PgUp | Left | Down |Right | | | + * | | Alt |Space | | | | PgUp | Left | Down |Right | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - | | | | | | ` | PgDn | Del | | | | | + * | | | | | | ` | PgDn | Del | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - | | | | | | | | | | | | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ @@ -155,6 +157,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +/* Mouse Layer + * ,-----------------------------------------------------------------------------------. + * | | |ACCL0 |ACCL1 |ACCL2 |ACCL2 | |WHL_L | Up |WHL_R | BTN2 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | BTN3 | BTN1 | BTN4 |WHL_Up| Left | Down |Right | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | BTN2 | BTN5 |WHL_Dn| BTN1 | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_MOUSE] = { + {_______, _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_ACL2, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______}, + {_______, _______, _______, KC_BTN3, KC_BTN1, KC_BTN4, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______}, + {_______, _______, _______, _______, KC_BTN2, KC_BTN5, KC_WH_D, KC_BTN1, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | -- cgit v1.2.3 From 984fc2b630aeb24a1104f2ec6de2a91febed81a9 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Thu, 28 Jul 2016 12:29:06 -0700 Subject: Media keys for all the "regular" layers --- keyboards/planck/keymaps/jeebak/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 039a920fb5..8a04ea7025 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -56,14 +56,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Colemak @@ -74,14 +74,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Dvorak @@ -92,14 +92,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | | | | | + * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, _______, _______, _______, _______} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Lower @@ -110,14 +110,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | + * | | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, /* Raise @@ -128,14 +128,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | 0 |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | + * | | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_0, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, /* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations -- cgit v1.2.3 From 1876e100bea14e87beb7c91df71b980e3b6e670e Mon Sep 17 00:00:00 2001 From: Jonathan Arnett Date: Sat, 30 Jul 2016 14:37:54 -0400 Subject: Updated readme with recent changes --- keyboards/ergodox/keymaps/j3rn/readme.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/j3rn/readme.md b/keyboards/ergodox/keymaps/j3rn/readme.md index fc4b640426..178aba7730 100644 --- a/keyboards/ergodox/keymaps/j3rn/readme.md +++ b/keyboards/ergodox/keymaps/j3rn/readme.md @@ -1,4 +1,4 @@ -# J3RN's Mac-centric ErgoDox EZ keymap +# J3RN's Mac-Centric ErgoDox EZ keymap ## Motivation @@ -14,6 +14,7 @@ This layout more closely resembles that of the Mac keyboard, and has some other - **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately. - **The key to the left of "Q" is Tab instead of Delete.** - **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.** +- **The key to the left of Alt-Shift is an Alt key**. This is close to it's position on the Mac keyboard, though slightly further left. ### Other changes @@ -23,7 +24,9 @@ This layout more closely resembles that of the Mac keyboard, and has some other - **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better. - **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold." - **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful. -- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location. - +- **The Page Up and Page Down buttons have been shifted up on the right thumb.** I don't use either of these keys often, and wanted to free up some real estate. +- **The bottommost-inner keys on the left and right thumb are momentary L2 and momentary L1, respectively**. I have found that both modes are useful, and this seemed like a reasonably accessible place to put these. +- **Traditional numpad layout.** The base of most numpads is a double-wide "0" key to the left of a "." key. This is reflected in my layout by having two "0" keys to the left of a "." key. +- **The function keys (F1-F12) have been moved to L2.** They were in the way in L1. **I'm always open to feedback and/or suggestions!** -- cgit v1.2.3 From eb9416a67d0220bde6993ecb22fe611b312ad47c Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Thu, 28 Jul 2016 15:13:22 -0700 Subject: PrintScreen and RGUI replace BACKLIT and Ctrl. Move BACKLIT to LOWER/RAISE layers --- keyboards/planck/keymaps/jeebak/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 8a04ea7025..3a7384ca8d 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -56,14 +56,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | + * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Colemak @@ -74,14 +74,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | + * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Dvorak @@ -92,14 +92,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| - * | Brite | Ctrl | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | + * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------------' */ [_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}, {CTL_ESC, LT_ML, 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, SFT_ENT}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Lower @@ -110,14 +110,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Prev | Stop | Slct | Mute | + * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, /* Raise @@ -128,14 +128,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | 0 |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Prev | Stop | Slct | Mute | + * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_0, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, /* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations -- cgit v1.2.3 From 6a2c681ae96dfdc9a61591a6f3ded8e7059756a9 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Fri, 29 Jul 2016 10:43:59 -0700 Subject: Change calls from persistant_default_layer_set() to default_layer_set() --- keyboards/planck/keymaps/jeebak/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 3a7384ca8d..35a46e7bf4 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -242,7 +242,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + default_layer_set(1UL<<_QWERTY); } return false; break; @@ -251,7 +251,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -260,7 +260,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + default_layer_set(1UL<<_DVORAK); } return false; break; -- cgit v1.2.3 From e0dd9d6af0dcf3732a7cd1ee6084a61960f015b0 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Fri, 29 Jul 2016 11:21:43 -0700 Subject: Add -, +, and . to RAISE --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 35a46e7bf4..976875e8a7 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -124,17 +124,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | | + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | - | + | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | 0 |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | . |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_0, _______}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_DOT, _______}, {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, -- cgit v1.2.3 From 216efe6c994d8208481138384d432f7a3b9425f1 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Fri, 29 Jul 2016 18:02:31 -0700 Subject: Move reset to a less accessible location --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 976875e8a7..33e0d653ad 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -197,20 +197,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | + * | | | | | | | | | | | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | * |------+------+------+------+------+------|------+------+------+------+------+------| * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' */ [_ADJUST] = { - {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET} } -- cgit v1.2.3 From b54a58859fa37bba78315f316af0bc2269000c1a Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 30 Jul 2016 12:21:04 -0700 Subject: Make RAISE layer an all numbers/arithmatic layer --- keyboards/planck/keymaps/jeebak/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 33e0d653ad..ae7305dabf 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -122,19 +122,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Raise * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | - | + | + * | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | - | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | . |Enter | + * | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | . | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_DOT, _______}, + {KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_MINS, KC_PIPE}, + {KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_DOT, KC_BSLS}, {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, -- cgit v1.2.3 From db8ad8204e66e3c00a74e0efed0b16b5e4a04500 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 30 Jul 2016 12:26:51 -0700 Subject: Add additional maps for [, and ], to LOWER --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index ae7305dabf..3d6523b1ed 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -106,17 +106,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_RBRC, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, -- cgit v1.2.3 From a2ed7ce795d85f48e5c16128d767f27f19835626 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 30 Jul 2016 12:50:13 -0700 Subject: Add additional shortcut keymaps to TOUCHCURSOR layer --- keyboards/planck/keymaps/jeebak/keymap.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 3d6523b1ed..ec142ecbb5 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -142,18 +142,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | Alt |Space | | | | PgUp | Left | Down |Right | | | + * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | ` | PgDn | Del | | | | | + * | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' + * + * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't + * seem to work on Mac. Presumably they'll work under Windows. */ [_TOUCHCURSOR] = { {_______, _______, _______, KC_LSFT, KC_LGUI, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, - {_______, KC_LALT, KC_SPC, _______, _______, _______, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, - {_______, _______, _______, _______, _______, KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______}, + {_______, KC_LALT, KC_SPC, _______, KC_FIND,KC_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, + {_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From 230d313dbd7f09593566ce4f20ea2db974a1fcc4 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 30 Jul 2016 13:09:49 -0700 Subject: Update readme.md --- keyboards/planck/keymaps/jeebak/readme.md | 107 +++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index de9680b498..eb8104379d 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -1,2 +1,107 @@ -# The Default Planck Layout +jeebak's layout +======================= +This WIP keymap attempts to minimize fingers straying away from the home row. +To aid in this endeavor, when additional modifyer keys to switch layers are +needed, they will be mapped to home row keys. The `keymap.c` file will contain +the exact changes. The diagrams in this README shows the highlights of the +changes from the default mappings. +I also decided to change all calls to `persistant_default_layer_set()` to +`update_tri_layer()` since this is my personal perference. + +## Base Layers (Qwerty/Colemak/Dvorak) +These base layers are mostly the same as the default mappings. The interesting +changes are shown below. The `Ctrl/Esc`, mapped using `CTL_T(KC_ESC)` will emit +an `Escape` when tapped, and act as a `Control` key when held. A `TODO` item is +to see if it can also act as a `CapsLock` when double-tapped. The right shift +key acts as `Enter` when tapped, and as a `Shift` key when held. The arrow +keys, which have been moved to the +[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been +replaced with the Media keys as shown. The `ML/A` key activates the Mouse layer +when held, and emits an `A` when tapped. +``` + ,-----------------------------------------------------------------------------------------. + | | | | | | | | | | | | | + |----------+------+------+------+------+-------------+------+------+------+------+--------| + | Ctrl/Esc | ML/A | | | | | | | | | | | + |----------+------+------+------+------+------|------+------+------+------+------+--------| + | | | | | | | | | | | |Sft/Ent | + |----------+------+------+------+------+------+------+------+------+------+------+--------| + | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | + `-----------------------------------------------------------------------------------------' +``` + +## Lower Layer (Symbols and Function Keys) +The symbols and functions keys are essentially the same as the default mapping. +The most notable changes are that the symbol keys from the `RAISE` layer have +been moved here. The remaining Media keys replace those that are now on the +base layers. The `BACKLIT` key has also been moved here. +``` + ,-----------------------------------------------------------------------------------. + | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + |------+------+------+------+------+-------------+------+------+------+------+------| + | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + |------+------+------+------+------+------|------+------+------+------+------+------| + | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + |------+------+------+------+------+------+------+------+------+------+------+------| + |Brite | | | | | | | Prev | Stop | Slct | Mute | + `-----------------------------------------------------------------------------------' +``` + +## Raise Layer (Numbers and Arithmetic Operators) +All of the numbers and arithmetic operators are available on this layer. Some +keys are duplicated for the convenience of their positions. The `0` and `$` +keys at the far left are for quick access to beginning and end of line in vim. +``` + ,-----------------------------------------------------------------------------------. + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + |------+------+------+------+------+-------------+------+------+------+------+------| + | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | - | | | + |------+------+------+------+------+------|------+------+------+------+------+------| + | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | . | \ | + |------+------+------+------+------+------+------+------+------+------+------+------| + |Brite | | | | | | | Prev | Stop | Slct | Mute | + `-----------------------------------------------------------------------------------' +``` + +## TouchCursor layer plus personal customizations +[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key +as the modifier, with the `IJKL` home row keys representing the inverted-T of +the arrow keys. All of the default TouchCursor keymappings for the right hand +are represented below. My personalizations include all of the keys shown for +the left hand. Having the `Alt` and `Shift` keys readily accessible from the +home row allows quick word jumps and highlighting when used in conjunction with +the arrow keys. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and +`KC_AGAIN` keycodes have been mapped but they don't seem to work on Mac. +Presumably they'll work under Windows. +``` + ,-----------------------------------------------------------------------------------. + | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | + |------+------+------+------+------+-------------+------+------+------+------+------| + | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | + |------+------+------+------+------+------|------+------+------+------+------+------| + | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | + |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | | + `-----------------------------------------------------------------------------------' +``` + +## Mouse Layer +The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer. +The `A` key is used to activate this layer. All 16 keycodes for the mouse from +the `doc/keycode.txt` file are represented, and logically located, IMHO. The +left and right click buttons are duplicated; on the right hand side, for a +quick click here and there, and again on the left hand side for when the +buttons need to be held for dragging things or highlighting text, thus allowing +the right hand to be free to use the up/down/left/right actions. +``` + ,-----------------------------------------------------------------------------------. + | | |ACCL0 |ACCL1 |ACCL2 |ACCL2 | |WHL_L | Up |WHL_R | BTN2 | | + |------+------+------+------+------+-------------+------+------+------+------+------| + | | | | BTN3 | BTN1 | BTN4 |WHL_Up| Left | Down |Right | | | + |------+------+------+------+------+------|------+------+------+------+------+------| + | | | | | BTN2 | BTN5 |WHL_Dn| BTN1 | | | | | + |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | | + `-----------------------------------------------------------------------------------' +``` -- cgit v1.2.3 From 79067662c8c71129a84a41b0147edc63b33db709 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:22:18 +0300 Subject: Better "include guards" for the makefiles Checking for ARCH is not good enough, since some subprojects define it. Ergodox Ez for example. The leads to running the make from keyboards/ergodox/ez failing. The keyboard makefile will not be included in that case, and therefore not the CUSTOM_MATRIX either. Furthermore the output files are read from many different .build directories, so it doesn't fail deterministically. For example on the Travis CI the compilation passes, since there's no outdated objects that needs recompilation. --- Makefile | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 980ab26b22..31826f14ac 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,9 @@ endif .DEFAULT_GOAL := all space := $(subst ,, ) -starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST)))) -mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST)))) +ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) +starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) +mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) ifneq (,$(findstring /keyboards/,$(starting_makefile))) @@ -83,10 +84,8 @@ endif ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c - ifndef ARCH - ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","") - include $(KEYBOARD_PATH)/Makefile - endif + ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) + -include $(KEYBOARD_PATH)/Makefile endif else $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) @@ -101,7 +100,9 @@ ifdef SUBPROJECT ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c - -include $(SUBPROJECT_PATH)/Makefile + ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) + -include $(SUBPROJECT_PATH)/Makefile + endif else $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) endif @@ -119,14 +120,18 @@ endif KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c - -include $(KEYMAP_PATH)/Makefile + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif else ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") $(error "$(KEYMAP_PATH)/keymap.c" does not exist) else KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c - -include $(KEYMAP_PATH)/Makefile + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif endif endif -- cgit v1.2.3 From f11a0275a8e11a9e8393d8d64b45b62a1a018512 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:24:25 +0300 Subject: Enable vpath seraching for source files only --- tmk_core/rules.mk | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index c81fa68541..f6819d7c31 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -15,6 +15,16 @@ # Carlos Lamas # +# Enable vpath seraching for source files only +# Without this, output files, could be read from the wrong .build directories +VPATH_SRC := $(VPATH) +vpath %.c $(VPATH_SRC) +vpath %.h $(VPATH_SRC) +vpath %.cpp $(VPATH_SRC) +vpath %.hpp $(VPATH_SRC) +vpath %.S $(VPATH_SRC) +VPATH := + # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -71,7 +81,7 @@ BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH)) +EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) # Compiler flag to set the C Standard level. -- cgit v1.2.3 From abdf42573ac6e01432fdf69847f4259540c1a38d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:25:49 +0300 Subject: Put the build output inside the root/.build directory --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 31826f14ac..60c7a6ef6f 100644 --- a/Makefile +++ b/Makefile @@ -140,7 +140,8 @@ ifdef SUBPROJECT else TARGET ?= $(KEYBOARD)_$(KEYMAP) endif -BUILD_DIR = .build + +BUILD_DIR = $(TOP_DIR)/.build # Object files directory # To put object files in current directory, use a dot (.), do NOT make -- cgit v1.2.3 From e58e9af2ab2c0e66a8456b48d46f4d71a66af27a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 18:16:34 +0300 Subject: More reliable .d file generation Also generated inside the obj dir instead of separate deps folder. --- tmk_core/rules.mk | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f6819d7c31..8acb439321 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -278,7 +278,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d +GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) # Combine all necessary flags and optional flags. @@ -288,6 +288,8 @@ ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) +MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) + # Default target. all: build sizeafter @@ -390,17 +392,17 @@ BEGIN = gccversion check_submodule sizebefore define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c | $(BEGIN) +$1/%.o : %.c $1/%.d | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp | $(BEGIN) +$1/%.o : %.cpp $1/%.d | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. @@ -409,9 +411,15 @@ $1/%.o : %.S | $(BEGIN) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) - endef +# We have to use static rules for the .d files for some reason +DEPS = $(patsubst %.o,%.d,$(OBJ)) +# Keep the .d files +.PRECIOUS: $(DEPS) +# Empty rule to force recompilation if the .d file is missing +$(DEPS): + # Since the object files could be in two different folders, generate # separate rules for them, rather than having too generic rules $(eval $(call GEN_OBJRULE,$(OBJDIR))) @@ -434,7 +442,7 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR))) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: +clean: show_path: @echo VPATH=$(VPATH) @@ -515,7 +523,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Include the dependency files. --include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) +-include $(patsubst %.o,%.d,$(OBJ)) # Listing of phony targets. -- cgit v1.2.3 From 84bfb195545b0ba527f34c386d15d6f732a28de7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 22:07:01 +0300 Subject: Force compilation and linking when options changes --- tmk_core/rules.mk | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8acb439321..ebcd372cac 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -284,8 +284,8 @@ GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) @@ -385,32 +385,51 @@ BEGIN = gccversion check_submodule sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: $(OBJ) | $(BEGIN) +# Note the obj.txt depeendency is there to force linking if a source file is deleted +%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d | $(BEGIN) +$1/%.o : %.c $1/%.d $1/cflags.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d | $(BEGIN) +$1/%.o : %.cpp $1/%.d $1/cppflags.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$1/%.o : %.S | $(BEGIN) +$1/%.o : %.S $1/asflags.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) + +$1/force: + +$1/cflags.txt: $1/force + echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ + +$1/cppflags.txt: $1/force + echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ + +$1/asflags.txt: $1/force + echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ + +$1/ldflags.txt: $1/force + echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ + +$1/obj.txt: $1/force + echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ + endef # We have to use static rules for the .d files for some reason -- cgit v1.2.3 From 97817a773eb667045144ac820df673ed8d3471a0 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 23:41:26 +0300 Subject: Generate version information to version.h So that only the files that really needs a version are recompiled. --- .gitignore | 3 ++- Makefile | 4 +++- keyboards/ergodox/keymaps/algernon/keymap.c | 1 + keyboards/ergodox/keymaps/default/keymap.c | 1 + keyboards/ergodox/keymaps/josh/keymap.c | 1 + keyboards/planck/keymaps/cbbrowne/keymap.c | 1 + keyboards/planck/keymaps/experimental/keymap.c | 1 + 7 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8491433524..8c85d6ffa8 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ build/ .build/ *.bak .vagrant/ +quantum/version.h .idea/ CMakeLists.txt .DS_STORE @@ -26,4 +27,4 @@ CMakeLists.txt .project .settings/ .idea -.browse.VC.db* \ No newline at end of file +.browse.VC.db* diff --git a/Makefile b/Makefile index 60c7a6ef6f..053c8532af 100644 --- a/Makefile +++ b/Makefile @@ -271,4 +271,6 @@ include $(TMK_PATH)/rules.mk GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" -OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\" + +$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 6a14ef4676..c4de53da27 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -12,6 +12,7 @@ #include "keymap_plover.h" #include "eeconfig.h" #include "wait.h" +#include "version.h" /* Layers */ diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c index f1a83f4e79..1b80cb3a23 100644 --- a/keyboards/ergodox/keymaps/default/keymap.c +++ b/keyboards/ergodox/keymaps/default/keymap.c @@ -1,6 +1,7 @@ #include "ergodox.h" #include "debug.h" #include "action_layer.h" +#include "version.h" #define BASE 0 // default layer #define SYMB 1 // symbols diff --git a/keyboards/ergodox/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c index 488b214273..b5463873a9 100644 --- a/keyboards/ergodox/keymaps/josh/keymap.c +++ b/keyboards/ergodox/keymaps/josh/keymap.c @@ -1,6 +1,7 @@ #include "ergodox.h" #include "debug.h" #include "action_layer.h" +#include "version.h" #define BASE 0 // default layer #define SYMB 1 // symbols diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 14a5be1708..70eaefb7be 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -4,6 +4,7 @@ #endif #include "config.h" #include "quantum.h" +#include "version.h" /* Each layer is given a name to aid in readability, which is then used in the keymap matrix below. The underscores do not denote diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c index d9303fcae5..2c12700944 100644 --- a/keyboards/planck/keymaps/experimental/keymap.c +++ b/keyboards/planck/keymaps/experimental/keymap.c @@ -8,6 +8,7 @@ #endif #include "eeconfig.h" +#include "version.h" extern keymap_config_t keymap_config; -- cgit v1.2.3 From d5a947b32495625970d220349ca8f47e4cb2992a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:49:04 +0300 Subject: Also depend on the gcc version --- tmk_core/rules.mk | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index ebcd372cac..69f82dc836 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -393,21 +393,21 @@ BEGIN = gccversion check_submodule sizebefore define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d $1/cflags.txt | $(BEGIN) +$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d $1/cppflags.txt | $(BEGIN) +$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$1/%.o : %.S $1/asflags.txt | $(BEGIN) +$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @@ -430,6 +430,8 @@ $1/ldflags.txt: $1/force $1/obj.txt: $1/force echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ +$1/compiler.txt: $1/force + $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef # We have to use static rules for the .d files for some reason -- cgit v1.2.3 From a0dc6221993b10834dd55f58057d3354ca0910c3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 14:17:32 +0300 Subject: Remove the quick commands and add proper clean --- tmk_core/rules.mk | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 69f82dc836..d2350f27c1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -45,11 +45,6 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -ifdef quick - QUICK = $(quick) -endif - -QUICK ?= false AUTOGEN ?= false ifneq ($(shell awk --version 2>/dev/null),) @@ -293,9 +288,6 @@ MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) # Default target. all: build sizeafter -# Quick make that doesn't clean -quick: build sizeafter - # Change the build target to build a HEX file or a library. build: elf hex #build: elf hex eep lss sym @@ -464,6 +456,9 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR))) # Target: clean project. clean: + $(REMOVE) -r $(OBJDIR) 2>/dev/null + $(REMOVE) -r $(KBOBJDIR) 2>/dev/null + $(REMOVE) $(BUILD_DIR)/$(TARGET).* show_path: @echo VPATH=$(VPATH) @@ -483,7 +478,6 @@ all-keyboards-defaults: all-keyboards-defaults-all KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS)) all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) all-keyboards: all-keyboards-all @@ -500,12 +494,10 @@ done endef define make_keyboard_helper -# Just remove the -quick, -all and so on from the first argument and pass it forward +# Just remove the -all and so on from the first argument and pass it forward $(call make_keyboard,$(subst -$2,,$1),$2) endef -/keyboards/%-quick: - $(call make_keyboard_helper,$@,quick) /keyboards/%-all: $(call make_keyboard_helper,$@,all) /keyboards/%-clean: @@ -523,19 +515,6 @@ all-keymaps-%: all-keymaps: all-keymaps-all -GOAL=$(MAKECMDGOALS) -ifeq ($(MAKECMDGOALS),) -GOAL = all -endif -CLEANING_GOALS=clean clean_list all -ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),) -$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null) -$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR)) -$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR)) -$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi) -$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR)) -endif - # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -548,7 +527,7 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Listing of phony targets. -.PHONY : all quick finish sizebefore sizeafter gccversion \ +.PHONY : all finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -- cgit v1.2.3 From 87a1a095d0b46cb39d3ac627d94650b4e52da19b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 14:18:00 +0300 Subject: Fix the readme for the removed quick target --- readme.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index c3d866f36b..57629f8be2 100644 --- a/readme.md +++ b/readme.md @@ -122,17 +122,16 @@ Below are some definitions that will be useful: Below is a list of the useful `make` commands in QMK: -* `make` - cleans automatically and builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder +* `make` - builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder * `make keyboard=` - specifies the keyboard (only to be used in root) * `make keymap=` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder) -* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles) +* `make clean` - cleans the `.build` folder, ensuring that everything is re-built * `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ. * `keyboard=` and `keymap=` are compatible with this * `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root) * `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root) * `make all-keymaps [keyboard=]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `` -* `make all-keyboards-quick`, `make all-keyboards-default-quick` and `make all-keymaps-quick [keyboard=]` - like the normal "make-all-*" commands, but they skip the clean steps - +* `make all-keyboards-*`, `make all-keyboards-default-*` and `make all-keymaps-* [keyboard=]` - like the normal "make-all-*" commands, but the last string aftter the `-` (for example clean) is passed to the keyboard make command. Other, less useful functionality: * `make COLOR=false` - turns off color output -- cgit v1.2.3 From fda29be3e7e85814344ab188f1b76f994ee8757e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 14:18:51 +0300 Subject: Travis calls the normal build target, instead of quick --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 26deac0ceb..297cf19a68 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ env: global: - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM= script: -- make all-keyboards-quick AUTOGEN=true +- make all-keyboards AUTOGEN=true addons: apt: packages: -- cgit v1.2.3 From d9bef1658e062d76f87a752daa30047d865dca0f Mon Sep 17 00:00:00 2001 From: Jiehong Ma Date: Sun, 31 Jul 2016 16:49:31 +0200 Subject: feature: add basic doc about how a keyboard works on USB This comes from the discussion on #520 --- doc/basic_how_keyboards_work.md | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 doc/basic_how_keyboards_work.md diff --git a/doc/basic_how_keyboards_work.md b/doc/basic_how_keyboards_work.md new file mode 100644 index 0000000000..73c3f5c5fc --- /dev/null +++ b/doc/basic_how_keyboards_work.md @@ -0,0 +1,96 @@ +# How keys are registered, and interpreted by computers + +In this file, you can will learn the concepts of how keyboards work over USB, +and you'll be able to better understand what you can expect from changing your +firmware directly. + +## Schematic view + +Whenever you type on 1 particular key, here is the chain of actions taking +place: + +``` text ++------+ +-----+ +----------+ +----------+ +----+ +| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS | ++------+ +-----+ +----------+ +----------+ |----+ +``` + +This scheme is a very simple view of what's going on, and more details follow +in the next sections. + +## 1. You Press a Key + +Whenever you press a key, the firmware of your keyboard can register this event. +It can register when the key is pressed, held and released. + +This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information). +This speed often is limited by the mechanical key response time, the protocol +to transfer those key presses (here USB HID), and by the software it is used in. + +## 2. What the Firmware Sends + +The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) +tells what a keyboard can actually send through USB to have a chance to be +properly recognised. This includes a pre-defined list of keycodes which are +simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each +key of the keyboard. + +The firmware does not send actually letters or characters, but only keycodes. +Thus, by modifying the firmware, you only can modify what keycode is sent over +USB for a given key. + +## 3. What the Operating System Does + +Once the keycode reaches the operating system, a piece of software has to have +it match an actual character thanks to a keyboard layout. For example, if your +layout is set to QWERTY, a sample of the matching table is as follow: + +``` text +| keycode | character | +|---------+-----------| +| 0x04 | a/A | +| 0x05 | b/B | +| 0x06 | c/C | +| ... | ... | +| 0x1C | y/Y | +| 0x1D | z/Z | +| ... | ... | +|---------+-----------| +``` + +## Back to the firmware + +As the layout is generally fixed (unless you create your own), the firmware can +actually call a keycode by its layout name directly to ease things for you. + +This is exactly what is done here with `KC_A` actually representing `0x04` in +QWERTY. The full list can be found in `keycode.txt`. + +## List of Characters You Can Send + +Putting aside shortcuts, having a limited set of keycodes mapped to a limited +layout means that **the list of characters you can assign to a given key only +is the ones present in the layout**. + +For example, this means that if you have a QWERTY US layout, and you want to +assign 1 key to produce `€` (euro currency symbol), you are unable to do so, +because the QWERTY US layout does not have such mapping. You could fix that by +using a QWERTY UK layout, or a QWERTY US International. + +You may wonder why a keyboard layout containing all of Unicode is not devised +then? The limited number of keycode available through USB simply disallow such +a thing. + +## How to (Maybe) Enter Unicode Characters + +You can have the firmware send *sequences of keys* to use the [software Unicode +Input +Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of +the target operating system, thus effectively entering characters independently +of the layout defined in the OS. + +Yet, it does come with multiple disadvantages: + + - Tied to a specific OS a a time (need recompilation when changing OS); + - Within a given OS, does not work in all software; + - Limited to a subset of Unicode on some systems. -- cgit v1.2.3 From ceecb7c81954254bd0820ea571ee60ab69a43658 Mon Sep 17 00:00:00 2001 From: Depariel Date: Sun, 31 Jul 2016 14:25:25 -0400 Subject: fixed compiling bugs in infinity_chibios.h, updated keymaps, added depariel keymap --- keyboards/infinity_chibios/config.h | 3 +- keyboards/infinity_chibios/infinity_chibios.h | 36 ++--- .../infinity_chibios/keymaps/default/keymap.c | 26 ++-- .../infinity_chibios/keymaps/depariel/keymap.c | 82 ++++++++++++ keyboards/infinity_chibios/keymaps/hasu/keymap.c | 148 +++++---------------- 5 files changed, 146 insertions(+), 149 deletions(-) create mode 100755 keyboards/infinity_chibios/keymaps/depariel/keymap.c diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity_chibios/config.h index cb90222055..bd4becfc54 100644 --- a/keyboards/infinity_chibios/config.h +++ b/keyboards/infinity_chibios/config.h @@ -18,6 +18,7 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H +#define PREVENT_STUCK_MODIFIERS /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED @@ -50,7 +51,7 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* Keymap for Infiity prototype */ +/* Keymap for Infinity prototype */ #define INFINITY_PROTOTYPE diff --git a/keyboards/infinity_chibios/infinity_chibios.h b/keyboards/infinity_chibios/infinity_chibios.h index a44c68b82d..f1ba15e489 100644 --- a/keyboards/infinity_chibios/infinity_chibios.h +++ b/keyboards/infinity_chibios/infinity_chibios.h @@ -29,15 +29,15 @@ along with this program. If not, see . K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \ K06, K16, K26, K36, K46, K56, K66, K76 \ ) { \ - { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \ - { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \ - { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \ - { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \ - { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \ - { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \ - { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \ - { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 } \ + { K00, K01, K02, K03, K04, K05, K06 }, \ + { K10, K11, K12, K13, K14, K15, K16 }, \ + { K20, K21, K22, K23, K24, K25, K26 }, \ + { K30, K31, K32, K33, K34, K35, K36 }, \ + { K40, K41, K42, K43, K44, K45, K46 }, \ + { K50, K51, K52, K53, K54, K55, K56 }, \ + { K60, K61, K62, K63, K64, K65, K66 }, \ + { K70, K71, K72, K73, K74, K75, K76 }, \ + { K80, K81, K82, K83, K84, K85, K86 } \ } #else @@ -50,15 +50,15 @@ along with this program. If not, see . K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \ K16, K26, K36, K46, K56, K66, K76, K86 \ ) { \ - { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \ - { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \ - { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \ - { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \ - { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \ - { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \ - { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \ - { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 } \ + { K00, K01, K02, K03, K04, K05, K06 }, \ + { K10, K11, K12, K13, K14, K15, K16 }, \ + { K20, K21, K22, K23, K24, K25, K26 }, \ + { K30, K31, K32, K33, K34, K35, K36 }, \ + { K40, K41, K42, K43, K44, K45, K46 }, \ + { K50, K51, K52, K53, K54, K55, K56 }, \ + { K60, K61, K62, K63, K64, K65, K66 }, \ + { K70, K71, K72, K73, K74, K75, K76 }, \ + { K80, K81, K82, K83, K84, K85, K86 } \ } #endif diff --git a/keyboards/infinity_chibios/keymaps/default/keymap.c b/keyboards/infinity_chibios/keymaps/default/keymap.c index 2acf728494..5f3b46a367 100644 --- a/keyboards/infinity_chibios/keymaps/default/keymap.c +++ b/keyboards/infinity_chibios/keymaps/default/keymap.c @@ -14,12 +14,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |Gui|Alt | Space |Alt |Gui| | | * `-----------------------------------------------------------' */ - [0] = - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,FN0, \ - NO, LGUI,LALT, SPC, RALT,RGUI,NO, NO), + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_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_ENT, \ + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \ + KC_NO, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_NO, KC_NO), /* Layer 1: HHKB mode (HHKB Fn) * ,-----------------------------------------------------------. @@ -34,15 +34,15 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |Gui|Alt | Space |Alt |Gui| | | * `-----------------------------------------------------------' */ - [1] = - KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC, \ - TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS), + [1] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), }; const uint16_t fn_actions[] = { - [0] = ACTION_LAYER_MOMENTARY(1), + }; diff --git a/keyboards/infinity_chibios/keymaps/depariel/keymap.c b/keyboards/infinity_chibios/keymaps/depariel/keymap.c new file mode 100755 index 0000000000..e68891f79e --- /dev/null +++ b/keyboards/infinity_chibios/keymaps/depariel/keymap.c @@ -0,0 +1,82 @@ +#include "infinity_chibios.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp| + * |-----------------------------------------------------------| + * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| + * |-----------------------------------------------------------' + * |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next| + * `-----------------------------------------------------------' + */ + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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, LT(5, KC_ENT), \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(4), \ + MO(4), KC_LGUI, KC_LALT, LT(3, KC_SPC), KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), + + /* Layer 1: "Toggle" off SpaceFn for League of Legends + */ + [1] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(4), \ + MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), + + /* Layer 2: "Toggle" off SpaceFn for MapleRoyals + */ + [2] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_LSFT, \ + MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Layer 3: FN layer 1 + */ + [3] = KEYMAP( + KC_NO, 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_NO, KC_NO, \ + KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \ + MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \ + LGUI(KC_SPC), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_CALC, KC_MENU, KC_TRNS, TG(4), \ + KC_TRNS, KC_TRNS, KC_TRNS, LT(3, KC_SPC), KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU), + + /* Layer 4: FN layer 2 + */ + [4] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \ + KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \ + KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_RSFT, MO(4), \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PDOT, KC_NO, TG(1)), + + /* Layer 5: FN layer 3 + */ + [5] = KEYMAP( + 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_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_NO, KC_NO, KC_NO), + + /* Layer 6: FN layer 4 + */ + [6] = KEYMAP( + 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, \ + LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), 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_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + diff --git a/keyboards/infinity_chibios/keymaps/hasu/keymap.c b/keyboards/infinity_chibios/keymaps/hasu/keymap.c index e9a212f0eb..4c0e57927b 100644 --- a/keyboards/infinity_chibios/keymaps/hasu/keymap.c +++ b/keyboards/infinity_chibios/keymaps/hasu/keymap.c @@ -14,12 +14,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |Gui|Alt | Space |Alt |Gui| | | * `-----------------------------------------------------------' */ - [0] = - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ - LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN6, \ - FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \ - NO, LGUI,LALT, FN4, FN5, RGUI,NO, NO), + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \ + OSM(LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \ + KC_NO, KC_LGUI,KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI,KC_NO, KC_NO), /* Layer 1: HHKB mode (HHKB Fn) * ,-----------------------------------------------------------. @@ -34,12 +34,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |Gui|Alt | Space |Alt |Gui| | | * `-----------------------------------------------------------' */ - [1] = - KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS,BSPC, \ - LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \ - LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \ - TRNS,LGUI,LALT, TRNS, RALT,RGUI,TRNS,TRNS), + [1] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC, \ + KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \ + KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS, \ + KC_TRNS,KC_LGUI,KC_LALT, KC_TRNS, KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS), /* Layer 2: Vi mode[Slash] * ,-----------------------------------------------------------. @@ -54,12 +54,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Gui|Alt | Space |Alt |Gui| * `-------------------------------------------' */ - [2] = \ - KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \ - LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \ - LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \ - TRNS,LGUI,LALT, SPC, RALT,RGUI,TRNS,TRNS), + [2] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC, \ + KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT, \ + KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS, \ + KC_TRNS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_TRNS, KC_TRNS), /* Layer 3: Mouse mode(IJKL)[Semicolon] * ,-----------------------------------------------------------. @@ -75,12 +75,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------------------------------' * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel */ - [3] = \ - KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \ - LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,FN3, NO, ENT, \ - LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \ - TRNS,LGUI,LALT, BTN1, TRNS,TRNS,TRNS,TRNS), + [3] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \ + KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_TRNS, \ + KC_TRNS, KC_LGUI,KC_LALT, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), /* Layer 4: Mouse mode(IJKL)[Space] * ,-----------------------------------------------------------. @@ -96,104 +96,18 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------------------------------' * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel */ - [4] = \ - KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \ - LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \ - LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \ - TRNS,LGUI,LALT, TRNS, TRNS,TRNS,TRNS,TRNS), + [4] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \ + KC_LCTL, KC_VOLD,KC_VOLU,KC_MUTE,KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, KC_BTN1,KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT),ALT_T(KC_RGHT),KC_NO, KC_RSFT,KC_TRNS, \ + KC_TRNS, KC_LGUI,KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), }; -/* id for user defined functions */ -enum function_id { - LSHIFT_LPAREN, -}; - -enum macro_id { - HELLO, - VOLUP, - ALT_TAB, -}; - /* * Fn action definition */ const uint16_t fn_actions[] = { - [0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used) - [1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps) - [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash* - [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon* - [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space - [5] = ACTION_LAYER_MOMENTARY(4), // Mousekey layer(IJKL) - [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter - [7] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift - [8] = ACTION_MACRO(ALT_TAB), // Application switching - [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT), - [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT), -}; - -/* - * Macro definition - */ -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch (id) { - case HELLO: - return (record->event.pressed ? - MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) : - MACRO_NONE ); - case VOLUP: - return (record->event.pressed ? - MACRO( D(VOLU), U(VOLU), END ) : - MACRO_NONE ); - case ALT_TAB: - return (record->event.pressed ? - MACRO( D(LALT), D(TAB), END ) : - MACRO( U(TAB), END )); - } - return MACRO_NONE; -} - - -/* - * user defined action function - */ -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - if (record->event.pressed) dprint("P"); else dprint("R"); - dprintf("%d", record->tap.count); - if (record->tap.interrupted) dprint("i"); - dprint("\n"); - - switch (id) { - case LSHIFT_LPAREN: - // Shift parentheses example: LShft + tap '(' - // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses - // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899 - if (record->event.pressed) { - if (record->tap.count > 0 && !record->tap.interrupted) { - if (record->tap.interrupted) { - dprint("tap interrupted\n"); - register_mods(MOD_BIT(KC_LSHIFT)); - } - } else { - register_mods(MOD_BIT(KC_LSHIFT)); - } - } else { - if (record->tap.count > 0 && !(record->tap.interrupted)) { - add_weak_mods(MOD_BIT(KC_LSHIFT)); - send_keyboard_report(); - register_code(KC_9); - unregister_code(KC_9); - del_weak_mods(MOD_BIT(KC_LSHIFT)); - send_keyboard_report(); - record->tap.count = 0; // ad hoc: cancel tap - } else { - unregister_mods(MOD_BIT(KC_LSHIFT)); - } - } - break; - } -} +}; -- cgit v1.2.3 From 0c4177e0778d8d1f0f7b66e5f6203289eca154bf Mon Sep 17 00:00:00 2001 From: Depariel Date: Sun, 31 Jul 2016 15:16:55 -0400 Subject: fixed typo in hasu/keymap.c --- keyboards/infinity_chibios/keymaps/hasu/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/infinity_chibios/keymaps/hasu/keymap.c b/keyboards/infinity_chibios/keymaps/hasu/keymap.c index 4c0e57927b..a1954d2587 100644 --- a/keyboards/infinity_chibios/keymaps/hasu/keymap.c +++ b/keyboards/infinity_chibios/keymaps/hasu/keymap.c @@ -18,7 +18,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \ - OSM(LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \ + OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \ KC_NO, KC_LGUI,KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI,KC_NO, KC_NO), /* Layer 1: HHKB mode (HHKB Fn) -- cgit v1.2.3 From c2419ffeccc7916b9bcf8df244a63203aea5a908 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sun, 31 Jul 2016 14:10:03 -0700 Subject: Remove /keyboard/* files --- .../ergodox_ez/keymaps/zweihander-osx/keymap.c | 233 ---- .../ergodox_ez/keymaps/zweihander-osx/makefile.mk | 2 - .../keymaps/zweihander-osx/zweihander-osx.hex | 1159 -------------------- 3 files changed, 1394 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c delete mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk delete mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c deleted file mode 100644 index 69d08d0e17..0000000000 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ /dev/null @@ -1,233 +0,0 @@ -#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 - -#define SGWK 0 // "sagewick", ⌘S ⌘⇥ -#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R -#define BBED 2 // BBEdit -#define TMNL 3 // Terminal -#define SAFA 4 // Safari -#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | L1 | | L1 | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | ⌦ | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ⌫ | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' / L⌘ | - * |--------+------+------+------+------+------| L⌘ | | L⌘ |------+------+------+------+------+--------| - * | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / / ⌃| R⇧ | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | L⌃ | L⌥ | L⌘ | ← | → | | ↑ | ↓ | [ | ] | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,---------------. - * | `~ | '" | | ⎋ | ⌫ | - * ,------|------|------| |------+--------+------. - * | | | PgUp | | PgDn | | | - * | | ⌫ |------| |------| ⇥ |Enter | - * | | | L⌥ | | L⌃ | | | - * `--------------------' `----------------------' - */ -// 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, TG(SYMB), - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(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, - KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, - KC_GRV, KC_QUOT, - KC_PGUP, - KC_SPC,KC_BSPC,KC_LALT, - // right hand - TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC , - KC_ESC, KC_BSPC, - KC_PGDN, - KC_LCTL, KC_TAB, KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | [ | ] | { | } | " | | | | / | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | < | > | ( | ) | ' |------| |------| - | 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_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, - KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,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_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, - KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, - KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | Home | | End | | | - * | | |------| |------| ⌘C | ⌘V | - * | | | | | ⌘X | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS, - KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_HOME, - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , - KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, - LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, - KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_END , - LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) -), -}; - -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 SGWK: - if (record->event.pressed) { - return MACRO( - I(10), - D(LGUI), T(S), U(LGUI), - D(LGUI), T(TAB), U(LGUI), - END); - } - break; - case SGWF: - if (record->event.pressed) { - return MACRO( - I(10), - D(LGUI), T(S), U(LGUI), - D(LGUI), T(TAB), U(LGUI), - D(LGUI), T(R), U(LGUI), - END); - } - break; - case BBED: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(B), T(B), T(E), T(D), T(I), T(T), - T(ENT), - END); - } - break; - case TMNL: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L), - T(ENT), - END); - } - break; - case SAFA: - if (record->event.pressed) { - return MACRO( - I(10), - D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME), - T(S), T(A), T(F), T(A), T(R), T(I), - T(ENT), - 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) { - - 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/zweihander-osx/makefile.mk b/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk deleted file mode 100644 index 6e3d088a43..0000000000 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk +++ /dev/null @@ -1,2 +0,0 @@ -# Don’t do a tricolor wave when the computer is shut down in Windows -SLEEP_LED_ENABLE = no diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex deleted file mode 100644 index 270a197afd..0000000000 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ /dev/null @@ -1,1159 +0,0 @@ -:100000000C94B3020C94F7020C94F7020C94F702D0 -:100010000C94F7020C94F7020C94F7020C94F7027C -:100020000C94F7020C94F7020C94B00D0C94820E11 -:100030000C94E01B0C94F7020C94F7020C94F7025A -:100040000C94F7020C94F7020C94F7020C94F7024C -:100050000C94F7020C94481C0C94F7020C94F702D1 -:100060000C94F7020C94F7020C94F7020C94F7022C -:100070000C94F7020C94F7020C94F7020C94F7021C -:100080000C94F7020C94F7020C94F7020C94F7020C -:100090000C94F7020C94F7020C94F7020C94F702FC -:1000A0000C94F7020C94F7020C94F702EF0E110F68 -:1000B000FF0F110FFF0F560F790FFF0FCE0FE10F3C -:1000C000B012B012DF12DF12151335136614661466 -:1000D00040136614F013F01357146614661460147A -:1000E000FD13FD13FD13FD13FD13FD13FD13FD1390 -:1000F000FD13FD13FD13FD13FD13FD13FD13FD1380 -:100100000F141C1423142A143414750A01E2012C50 -:10011000022C02E274FA011602160104020401091B -:1001200002090104020401150215010C020C012848 -:10013000022800750A01E2012C022C02E274FA0185 -:10014000170217010802080115021501100210011B -:100150000C020C0111021101040204010F020F0133 -:1001600028022800750A01E2012C022C02E274FA2E -:100170000105020501050205010802080107020741 -:10018000010C020C011702170128022800750A0150 -:10019000E30116021602E301E3012B022B02E30145 -:1001A000E30115021502E300750A01E301160216C8 -:1001B00002E301E3012B022B02E3000000F0A12E79 -:1001C000004C002A00E100E00000001E00140004C2 -:1001D000001D00E200E2001F001A0016001B00E3F1 -:1001E000002A00200008000700060050002C002113 -:1001F000001500090019004F004B00220017000AEB -:1002000000050000003500015401520000E3000029 -:10021000003400015401520000E3000000290023D3 -:10022000001C000B00110000002A00240018000D23 -:1002300000100052004E0025000C000E0036005148 -:10024000002800260012000F0037002F002B002787 -:10025000001300334238713000E0002D00310034CB -:1002600078E5002C00000001000100010001000100 -:100270000000003A002F0036020100010001003B9F -:1002800000300037020100010001003C002F02266F -:10029000020100010001003D0030022702010001BF -:1002A0000001003E00340234002E00000001000175 -:1002B0000001000000010000000100010001000039 -:1002C000000100000001003F0038002D0033020053 -:1002D0000001004000240021001E00270001004111 -:1002E00000250022001F00370001004200260023E5 -:1002F00000200050000100430025022E022E004F76 -:10030000000100440045000100010001000000015F -:10031000000100010001000100000069000100016E -:10032000000100010001006A000100043001000129 -:1003300000010001004B004E00010001000100011E -:100340000001300100010001004A000100033001FA -:100350000002300000010001000100000001000067 -:100360000001001408010000000100000001001A53 -:100370000830082F082C0200000100350A520C50EA -:10038000002C00A9004D00350852005100AC00AA15 -:100390000019080100510C4F00AB00A8000608012D -:1003A0000001000100010001001B08A5000100AED2 -:1003B0000001000100000016034500720067006F95 -:1003C0000044006F007800200045005A000000162D -:1003D000034500720067006F0044006F0078002042 -:1003E0000045005A0000000403090409026D0004DE -:1003F0000100A0FA09040000010301010009211114 -:10040000010001223F000705810308000A090401D9 -:10041000000103010200092111010001224D000722 -:1004200005820308000A0904020001030000000914 -:1004300021110100012236000705830308000A0983 -:100440000403000103000000092111010001223909 -:1004500000070584031000011201100100000008CC -:10046000EDFE071301000102000105010906A101CB -:10047000050719E029E71500250195087501810296 -:100480000508190129059505750191029501750366 -:100490009101050719002977150025019578750147 -:1004A0008102C005010980A101850216010026B75D -:1004B000001A01002AB700751095018100C0050CD3 -:1004C0000901A1018503160100269C021A01002AD8 -:1004D0009C02751095018100C005010902A1010966 -:1004E00001A10005091901290515002501950575CA -:1004F000018102950175038101050109300931155A -:1005000081257F95027508810609381581257F951B -:100510000175088106050C0A38021581257F9501B1 -:1005200075088106C0C005010906A101050719E08B -:1005300029E71500250195087501810295017508C7 -:10054000810105081901290595057501910295019B -:10055000750391010507190029FF150025FF950670 -:1005600075088100C00011241FBECFEFDAE0DEBFA6 -:10057000CDBF04B603FE24C08091F9019091FA0129 -:10058000A091FB01B091FC018730904BA740B04B8C -:10059000B9F41092F9011092FA011092FB01109235 -:1005A000FC0114BE84B7877F84BF88E10FB6F8943E -:1005B00080936000109260000FBEE0E0FFE30995B9 -:1005C00011E0A0E0B1E0E0E2F8E402C005900D9295 -:1005D000A433B107D9F711E0A4E3B1E001C01D9243 -:1005E000A93FB107E1F70E94F60A0C940E240C947F -:1005F0000000FC016230B9F028F4662341F061305C -:1006000061F023C06330A9F06430C9F01EC082815C -:100610008823D9F088EA91E0089582818823A9F09F -:100620008DE891E008958281882379F084E691E055 -:1006300008958281882349F083E391E008958281BF -:10064000882319F08AE091E0089580E090E0089511 -:1006500008956091BD017091BE018091BF0190919C -:10066000C0010E94511B56985E9825982D98269897 -:100670002E9827982F98813019F0823021F0089514 -:10068000259A2D9A0895269A2E9A08950C94290356 -:1006900056985E9825982D9826982E9827982F98EA -:1006A0008FEF90E0909389008093880090938B0067 -:1006B00080938A0090938D0080938C00259A2D9AC8 -:1006C0002FEF80E792E0215080409040E1F700C09A -:1006D0000000269A2E9A2FEF80E792E0215080406A -:1006E0009040E1F700C00000279A2F9A2FEF80E793 -:1006F00092E0215080409040E1F700C00000259832 -:100700002D982FEF80E792E0215080409040E1F754 -:1007100000C0000026982E982FEF80E792E021502D -:1007200080409040E1F700C0000027982F9856982D -:100730005E9825982D9826982E9827982F9808959A -:1007400089EA8093800089E08093810024982C9826 -:100750003F988AB18F748AB96E98479A8BB1806B33 -:100760008BB9769A0E9448030C94280380E2809308 -:1007700000018091340181110EC00E94050481E0C6 -:10078000809334012FEF83ED90E32150804090401F -:10079000E1F700C0000080E40E940B048093000198 -:1007A00081112EC00E94350480930001811128C060 -:1007B0000E94350480930001811122C08FE30E94C2 -:1007C00035048093000181111BC00E942D0480E438 -:1007D0000E940B0480930001811112C08CE00E94E2 -:1007E00035048093000181110BC00E943504809371 -:1007F0000001811105C08FE30E9435048093000140 -:100800000E942D048091000108951092B9008AE0A1 -:100810008093B800089594EA9093BC009091BC0036 -:1008200097FFFCCF9091B900987F983021F09031DC -:1008300011F081E008958093BB0084E88093BC00B0 -:100840008091BC0087FFFCCF8091B900887F883100 -:1008500011F0803471F780E0089584E98093BC0042 -:100860008091BC0084FDFCCF08958093BB0084E898 -:100870008093BC008091BC0087FFFCCF9091B900B1 -:10088000987F81E0983209F480E0089584E88093AD -:10089000BC008091BC0087FFFCCF8091BB00089515 -:1008A00080910001811115C080E40E940B048093A7 -:1008B000000181110CC082E10E9435048093000187 -:1008C000811105C08FEF0E943504809300010E94C2 -:1008D0002D0484B1807F84B985B1807F85B98AB1C8 -:1008E000837F8AB98BB1837F8BB93E9846980895F0 -:1008F0000E94B603809300010E94500480B38C7064 -:1009000080BB81B3836F81BBA6E3B1E0E4E4F1E097 -:100910008EE08E0F11921D928E13FCCF0C94A003CB -:10092000BF92CF92DF92EF92FF920F931F93CF93DC -:10093000DF9380910001882379F0809135018F5FEA -:1009400080933501811108C00E94B6038093000195 -:10095000811102C00E94480306E311E0C0E0D0E02C -:10096000DD24D39482E0C82EEE24E394F12CC7302A -:10097000D10500F580910001811164C080E40E94DE -:100980000B0480930001811112C082E10E943504A2 -:100990008093000181110BC0C7010C2E01C0880F8C -:1009A0000A94EAF780950E943504809300010E9422 -:1009B0002D0448C0CA30A1F028F4C83059F0C9301D -:1009C00061F005C0CC3089F070F0CD3089F0209A0C -:1009D000289810C0219A29980DC0229A2A980AC0F6 -:1009E000239A2B9807C0529A01C0539A5B9802C071 -:1009F0003E9A469890EA9A95F1F79FB1799902C08C -:100A000082E001C080E091709D25982B7C9902C006 -:100A100084E001C080E0892B7D9902C038E001C0EC -:100A200030E0832B7E9902C020E101C020E0822BC0 -:100A30009FB19095991F9927991F9295990F907E34 -:100A4000892B0FC080910001811149C080E40E9470 -:100A50000B0480930001882379F1B12C0E942D04AE -:100A60008B2DF8019081981719F08083C0920101B5 -:100A70000E94500421960F5F1F4FCE30D10509F020 -:100A800076CF80910101882361F18150809301012B -:100A9000882339F08FE99FE00197F1F700C000004B -:100AA00020C0A4E4B1E0E6E3F1E0CF01825F9191E0 -:100AB0009D938E13FCCF15C083E10E943504809373 -:100AC00000018111CACF81E40E940B0480930001D0 -:100AD0008111C3CF0E944604B82EB094BFCF80E0EE -:100AE000C0CF0E94460381E0DF91CF911F910F910B -:100AF000FF90EF90DF90CF90BF900895E82FF0E047 -:100B0000EC5BFE4F8081089508950F931F93CF9360 -:100B1000DF93C4E4D1E010E00C2F025F899190E0F4 -:100B20000E94451B180F0C13F9CF812FDF91CF9135 -:100B30001F910F91089581E0089581E008950C942C -:100B40009D0508950F931F93CF93DF938C01FC01B4 -:100B5000C081D181CE010E94CA19BE010E944B06FC -:100B6000EC01B8010E949F05882309F48DC0F801AB -:100B70008281882309F44AC080915D0181111FC0E0 -:100B8000C431F0E5DF0709F051C00E94A10581E002 -:100B900080935D010E94121C90935C0180935B0125 -:100BA0001092540110925601109255011092580162 -:100BB0001092570110925A011092590165C080910C -:100BC0005B0190915C010E941E1C883C910570F4B1 -:100BD00080915401E82FF0E0EE0FFF1FEB5AFE4F1B -:100BE000D183C0838F5F809354014EC0C43880E5A9 -:100BF000D80721F0C538D04501F13AC0F80182810B -:100C0000882341F01092520182E01EC0C438E0E512 -:100C1000DE0759F580915201811106C086E20E94DB -:100C2000541186E20E941C1282E01CC0C438F0E518 -:100C3000DF0741F3C538D045D9F4F8018281882314 -:100C400031F01092530180E20E946B121DC080911E -:100C50005301811106C087E20E94541187E20E946D -:100C60001C1280E20E9472120FC0C538D04529F3D1 -:100C700081E08093520180935301C801DF91CF91AD -:100C80001F910F910C949B0580E0DF91CF911F91F4 -:100C90000F910895089596E0799FF001112494E54D -:100CA000899FE00DF11D1124E60FF11DEE0FFF1FCE -:100CB000E154FE4F859194910895880F991FFC018E -:100CC000E55CFF4F859194910895880F991FFC0171 -:100CD000E554FE4F8591949108950F931F93CF9300 -:100CE000DF93EC018115904350F5C11580E2D807E0 -:100CF00008F0C3C0CB3BD10590F4C83AD10508F049 -:100D00006AC0C53AD10508F05BC0C430D10508F00F -:100D1000D0C1219709F0CAC101E010E00AC2CF3F5B -:100D2000D10511F008F0C5C1C03FD10508F0A2C03F -:100D3000CE01805E9109089708F4BBC1B7C1C130EC -:100D400090E5D90709F4A2C020F5C0318FE4D80797 -:100D500070F4C11590E4D90708F094C0C11521E3DF -:100D6000D20708F0A3C1DD278E01106CE2C1C115C6 -:100D7000D04509F09BC10E94D1148FEF94E32CE081 -:100D8000815090402040E1F700C000000E946D1C9F -:100D9000D0C1C11597E5D90758F4C03121E5D20774 -:100DA00008F01CC1C43180E5D80708F475C07EC1C5 -:100DB000CE0190578115904108F078C1DF7073C162 -:100DC000C53AD10509F477C1C63AD10509F076C113 -:100DD00002E810E4AEC1C83AD10509F472C1C93ABB -:100DE000D10509F471C1CA3AD10509F470C1CB3AF1 -:100DF000D10509F46FC1CC3AD10509F46EC1CD3AE1 -:100E0000D10509F46DC1C03BD10509F46CC1CE3ADE -:100E1000D10509F46BC1CF3AD10509F46AC1C13BD0 -:100E2000D10509F469C1C23BD10509F468C1C33BCE -:100E3000D10509F467C1C43BD10509F466C1C53BBE -:100E4000D10509F465C1C63BD10509F464C1C73BAE -:100E5000D10509F463C1C83BD10509F462C1C93B9E -:100E6000D10509F461C1CA3BD10509F460C100E0B4 -:100E700014E45FC18E0110655CC1CE019F700E94B9 -:100E8000650658C1DF708E01106A53C18091DA0186 -:100E900081608093DA014DC10E94121E811102C04F -:100EA0000E94F81D0E942F1E90E09093F9018093FC -:100EB000F801C23080E5D80721F48091F801816003 -:100EC00086C0C43090E5D90721F48091F801826092 -:100ED0007EC0C63020E5D20721F48091F8018460FD -:100EE00076C0C83080E5D80719F48091F80127C092 -:100EF000CA3090E5D90721F48091F801806167C07C -:100F0000CC3020E5D20721F48091F80180625FC0E7 -:100F1000CE3080E5D80721F48091F801806457C075 -:100F2000C03190E5D90721F48091F80180684FC065 -:100F3000C23120E5D20729F48091F80184608860ED -:100F400046C0C33080E5D80721F48091F8018E7F38 -:100F50003EC0C53090E5D90721F48091F8018D7F1E -:100F600036C0C73020E5D20721F48091F8018B7F8D -:100F70002EC0C93080E5D80719F48091F80126C049 -:100F8000CB3090E5D90721F48091F8018F7E1FC006 -:100F9000CD3020E5D20721F48091F8018F7D17C074 -:100FA000CF3080E5D80721F48091F8018F7B0FC006 -:100FB000C13190E5D90721F48091F8018F7707C0FE -:100FC000C331D04531F48091F8018B7F877F8093C6 -:100FD000F8018091F8010E94331EABC08D2F992734 -:100FE0008F70992781309105D9F49E0123703327A2 -:100FF00002C0880F991F2A95E2F79C688E0144E091 -:10100000000F111F4A95E1F700271370802B912BD9 -:1010100053E0CC0FDD1F5A95E1F7C076DD272FC0D6 -:101020008230910531F4DC2FCC278E01016F106ADC -:1010300080C08330910569F4CE018370992701E067 -:1010400010E002C0000F111F8A95E2F7C8019C68EA -:101050000FC084309105B9F4CE018370992701E067 -:1010600010E002C0000F111F8A95E2F7C8019A68CC -:1010700023E0CC0FDD1F2A95E1F7C07ED7708C01ED -:101080000C2B1D2B56C08530910531F4DC2FCC275D -:101090008E01046F106A4DC0069709F04AC0CF71E7 -:1010A000DD27DC2FCC278E01106243C000E010E06A -:1010B00040C08E013EC001E810E43BC003E810E4EC -:1010C00038C002EE14E435C009EE14E432C00AEE72 -:1010D00014E42FC005EB14E42CC006EB14E429C083 -:1010E00007EB14E426C00CEC14E423C00DEC14E46C -:1010F00020C003E815E41DC00AE815E41AC002E99F -:1011000015E417C004E915E414C001E216E411C0A7 -:1011100003E216E40EC004E216E40BC005E216E496 -:1011200008C006E216E405C007E216E402C00AE2BF -:1011300016E4C801DF91CF911F910F91089596E0B9 -:10114000799FF001112494E5899FE00DF11D112490 -:10115000E60FF11DEE0FFF1FE154FE4F85919491B4 -:10116000803E9105E0F4803C910558F5813391056E -:1011700009F46FC048F48932910509F463C08A32DA -:10118000910509F46DC072C089339105E9F0823888 -:101190009105D1F08533910509F44DC067C0833EB8 -:1011A000910581F138F4803E9105B9F0823E9105B8 -:1011B000D9F05CC0863E910561F1873E9105A1F1B1 -:1011C00055C00E945D0608952091F80120FD02C0DF -:1011D00021FF4CC080EE90E049C08091F80180FF73 -:1011E000F9CF89E390E042C08091F80182FF0EC000 -:1011F0008091F80184FF03C080E090E037C083EE67 -:1012000090E034C08091F80182FFF2CF82EE90E04E -:101210002DC08091F80183FF0BC08091F80184FDFF -:10122000EBCF87EE90E022C08091F80183FFF5CFED -:1012300086EE90E01BC08091F80185FF07C089E22F -:1012400090E014C08091F80185FFF9CF85E390E02C -:101250000DC08091F80186FF07C08AE290E006C0C9 -:101260008091F80186FFF9CF81E390E00E946D063E -:10127000089508950C94390980916E010895CF93D3 -:10128000DF9300D01F92CDB7DEB79C018091EF01B4 -:10129000843019F593E099833B832A839093E90086 -:1012A0008FEF9091E800815095FD06C095ED9A95DD -:1012B000F1F700008111F5CF8091E80085FF0DC0A6 -:1012C00040E050E063E070E0CE0101960E94A00B88 -:1012D0008091E8008E778093E8000F900F900F9038 -:1012E000DF91CF910895CF93DF9300D01F92CDB7B8 -:1012F000DEB72091EF01243021F522E029839B8382 -:101300008A8383E08093E9008FEF9091E800815019 -:1013100095FD06C095ED9A95F1F700008111F5CF86 -:101320008091E80085FF0DC040E050E063E070E090 -:10133000CE0101960E94A00B8091E8008E778093E9 -:10134000E8000F900F900F90DF91CF9108952091BA -:10135000EF012430F1F422E02093E9002FEF3091E7 -:10136000E800215035FD06C035ED3A95F1F7000053 -:101370002111F5CF2091E80025FF0BC040E050E09F -:1013800065E070E00E94A00B8091E8008E7780936A -:10139000E8000895CF93DF93EC019091EF01943032 -:1013A00009F046C080910C018823D9F080910D018D -:1013B0008823B9F09093E9008FEF9091E800815075 -:1013C00095FD06C095E19A95F1F700008111F5CFE2 -:1013D0008091E80085FF2CC040E050E060E170E0C3 -:1013E00017C081E08093E9008FEF9091E800815071 -:1013F00095FD06C095ED9A95F1F700008111F5CFA6 -:101400008091E80085FF14C040E050E068E070E0A3 -:10141000CE010E94A00B8091E8008E778093E800B7 -:1014200080E1FE01AEE5B1E001900D928A95E1F711 -:10143000DF91CF9108958091EE01811109C00E9442 -:10144000350D0E94920D8091E20084608093E2004D -:1014500008951092EE010895089508950C94DA1BF2 -:1014600042E061EC81E00E94AF0C42E061EC82E07E -:101470000E94AF0C42E061EC83E00E94AF0C42E1BD -:1014800061EC84E00C94AF0C8091F101833009F49D -:1014900055C030F4813071F0823009F48EC0089567 -:1014A0008A3009F47AC08B3009F460C0893009F0C1 -:1014B0009CC020C08091F001813A09F096C08091D3 -:1014C000E800877F8093E8008091F4019091F50116 -:1014D000892B21F460E18EE591E003C060E080E0BB -:1014E00090E070E00E94EB0B8091E8008B77809396 -:1014F000E80008958091F001813209F076C0809172 -:10150000F4019091F501009719F0039709F06DC06F -:101510008091E800877F8093E8008091E80082FD59 -:1015200005C08091EF018111F8CF5FC08091F1007B -:1015300080936E018091E8008B7753C08091F00119 -:10154000813A09F052C08091F4019091F501892B04 -:1015500009F04BC08091E800877F8093E80080917C -:10156000E80080FFFCCF80910C0136C08091F00133 -:101570008132D9F58091F4019091F501892BA9F57B -:101580008091E800877F8093E8000E94E40C8091BE -:10159000F20180930C010C94D1148091F0018132FE -:1015A00021F58091E800877F8093E8000E94E40C99 -:1015B0008091F30180936F0108958091F001813A49 -:1015C000A1F48091E800877F8093E8008091E80093 -:1015D00080FFFCCF80916F018093F1008091E80043 -:1015E0008E778093E8000C94E40C089584B7877F8D -:1015F00084BF88E10FB6F894809360001092600079 -:101600000FBE90E080E80FB6F8948093610090934D -:1016100061000FBE0E9487100E94350D0E94920D3E -:101620008091E20084608093E20078940E94181018 -:101630000E94891082E091E00E9433108091EF01B6 -:10164000853069F40E94A11B8091ED018823B1F3DC -:101650000E94CC1B882391F30E948A0BEFCF0E943B -:101660008F10ECCF292F332723303105C9F064F4D4 -:101670002130310581F02230310509F043C08DE67B -:1016800090E02BEE33E042C021323105F1F02232FE -:10169000310541F137C082E190E028E534E036C001 -:1016A00099278130910541F08230910541F0892BD5 -:1016B00049F5E7EEF3E005C0EFECF3E002C0E7EB3D -:1016C000F3E0849190E09F0121C06430D8F4E62FCC -:1016D000F0E0EE0FFF1FEE5DFE4F2081318189E0CB -:1016E00090E014C0643070F470E0FB01EE0FFF1F57 -:1016F000E65EFE4F20813181FB01EA5EFE4F808174 -:1017000090E004C080E090E020E030E0FA01318316 -:101710002083089580E189BD82E189BD09B400FE7E -:10172000FDCF8091D8008F7D8093D8008091E0001C -:1017300082608093E0008091E00081FDFCCF0895FD -:10174000CF92DF92EF92FF920F931F93CF93DF938D -:10175000EC018B016A010E94030D811133C0C11499 -:10176000D10439F0F60180819181081B190BC80F53 -:10177000D91FE12CF12C0115110519F18091E80018 -:1017800085FD16C08091E8008E778093E800C11433 -:10179000D10449F0F60180819181E80EF91EF182B1 -:1017A000E08285E00FC00E94030D882321F30AC068 -:1017B00089918093F10001501109FFEFEF1AFF0AA0 -:1017C000DACF80E0DF91CF911F910F91FF90EF90E2 -:1017D000DF90CF9008952091F6013091F701261700 -:1017E000370748F06115710539F42091E8002E772C -:1017F0002093E80001C0B90140E061157105A9F12D -:101800002091EF01222309F443C0253009F442C09E -:101810002091E80023FD40C02091E80022FD32C065 -:101820002091E80020FFE9CF4091F3002091F200E1 -:1018300030E0342BFC01CF016115710559F02830DF -:10184000310540F481918093F100615071092F5F5F -:101850003F4FF1CF41E02830310509F040E02091C1 -:10186000E8002E772093E800C8CF4111C9CF0AC005 -:101870008091EF01882361F0853061F08091E8006C -:1018800083FD0AC08091E80082FFF2CF80E00895D6 -:1018900082E0089583E0089581E008952091F601A3 -:1018A0003091F7012617370748F06115710539F4B3 -:1018B0002091E8002E772093E80001C0B901FC01D7 -:1018C00020E06115710591F18091EF01882309F401 -:1018D00040C0853009F43FC08091E80083FD3DC0E1 -:1018E0008091E80082FD2FC08091E80080FFE9CF61 -:1018F0002091F3008091F20090E0922B6115710528 -:1019000059F08830910540F424912093F1003196EC -:10191000615071090196F2CF21E0089709F020E0AB -:101920008091E8008E778093E800CBCF2111CCCF57 -:101930000AC08091EF01882361F0853061F08091C9 -:10194000E80083FD0AC08091E80082FFF2CF80E0CA -:10195000089582E0089583E0089581E00895982F26 -:10196000973058F59093E900981739F07091EC0092 -:101970002091ED005091F00003C0242F762F50E00D -:1019800021FF19C03091EB003E7F3093EB00309186 -:10199000ED003D7F3093ED003091EB0031603093EE -:1019A000EB007093EC002093ED005093F000209139 -:1019B000EE0027FF07C09F5FD3CF8F708093E900B1 -:1019C00081E0089580E008958091F00187FF11C0C3 -:1019D0008091E80082FD05C08091EF018111F8CF70 -:1019E00011C08091E8008B770BC08091EF018823B4 -:1019F00049F08091E80080FFF8CF8091E8008E7771 -:101A00008093E80008952091E4003091E50095E688 -:101A10004091EC00842F817040FF22C08091E8004B -:101A200080FD1CC08091EF01882391F0853091F0FA -:101A30008091EB0085FD10C04091E4005091E500DD -:101A40004217530729F39A01915011F784E0089542 -:101A500082E0089583E0089581E0089580E008958C -:101A60004091E80042FFDECF08950E94A30D0E943E -:101A7000AB0DE0EEF0E0808181608083E8EDF0E086 -:101A800080818F77808319BCA7EDB0E08C918E7F29 -:101A90008C9380818F7E80831092EE0108950F9346 -:101AA0001F93CF93DF930E94A30D0E94AB0DC8ED4F -:101AB000D0E088818F778883888180688883888157 -:101AC0008F7D888319BC1092EF011092EB01109268 -:101AD000ED011092EC0100EE10E0F80180818B7FA7 -:101AE000808388818160888342E060E080E00E949A -:101AF000AF0CE1EEF0E080818E7F8083E2EEF0E0DB -:101B0000808181608083808188608083F80180810A -:101B10008E7F8083888180618883DF91CF911F9140 -:101B20000F910895E8EDF0E080818F7E8083E7EDEE -:101B3000F0E080818160808384E082BF81E08093D7 -:101B4000EE010C944F0DE8EDF0E080818E7F8083F4 -:101B50001092E20008951092DA001092E1000895C8 -:101B60001F920F920FB60F9211242F933F934F9312 -:101B70005F936F937F938F939F93AF93BF93EF93F5 -:101B8000FF938091E10082FF0BC08091E20082FF11 -:101B900007C08091E1008B7F8093E1000E941710C5 -:101BA0008091DA0080FF1FC08091D80080FF1BC0A9 -:101BB0008091DA008E7F8093DA008091D90080FFD7 -:101BC0000DC080E189BD82E189BD09B400FEFDCF71 -:101BD00081E08093EF010E941B0A05C019BC10929E -:101BE000EF010E94290A8091E10080FF19C08091D5 -:101BF000E20080FF15C08091E2008E7F8093E200BA -:101C00008091E20080618093E2008091D800806240 -:101C10008093D80019BC85E08093EF010E942D0AC3 -:101C20008091E10084FF30C08091E20084FF2CC0ED -:101C300080E189BD82E189BD09B400FEFDCF8091BC -:101C4000D8008F7D8093D8008091E1008F7E8093B3 -:101C5000E1008091E2008F7E8093E2008091E200BB -:101C600081608093E2008091EB01882311F084E091 -:101C700007C08091E30087FD02C081E001C083E0DE -:101C80008093EF010E942E0A8091E10083FF29C01A -:101C90008091E20083FF25C08091E100877F8093DF -:101CA000E10082E08093EF011092EB018091E1006E -:101CB0008E7F8093E1008091E2008E7F8093E2002E -:101CC0008091E20080618093E20042E060E080E089 -:101CD0000E94AF0C8091F00088608093F0000E9419 -:101CE0002C0AFF91EF91BF91AF919F918F917F91BE -:101CF0006F915F914F913F912F910F900FBE0F9079 -:101D00001F9018951F920F920FB60F9211242F93C8 -:101D10003F934F935F936F937F938F939F93AF9373 -:101D2000BF93CF93DF93EF93FF93C091E900CF7000 -:101D30008091EC00D82FD17080FDD0E81092E9009E -:101D40008091F000877F8093F00078940E94C60E07 -:101D50001092E9008091F00088608093F000CD2B14 -:101D6000CF70C093E900FF91EF91DF91CF91BF91C8 -:101D7000AF919F918F917F916F915F914F913F9123 -:101D80002F910F900FBE0F901F9018951F93CF9318 -:101D9000DF93CDB7DEB7AA970FB6F894DEBF0FBEBC -:101DA000CDBFE0EFF1E088E08E0F9091F1009193CC -:101DB0008E13FBCF0E94440A8091E80083FF1FC16D -:101DC0008091F0019091F101492F50E04A30510586 -:101DD00008F015C1FA01EA5AFF4F0C94BE2380386F -:101DE00081F0823809F00BC18091F4018F708093EB -:101DF000E9008091EB0085FB882780F91092E900CB -:101E000006C08091EC019091ED019111826090915A -:101E1000E800977F9093E8008093F1001092F10022 -:101E2000C8C0282F2D7F09F0EAC0882319F082301E -:101E300061F0E5C08091F201813009F0E0C093309B -:101E400009F080E08093ED012BC08091F2018111B7 -:101E500027C08091F4018F7009F4D1C08093E9000C -:101E60002091EB0020FF1CC0933021F48091EB0007 -:101E7000806214C09091EB0090619093EB0021E0A0 -:101E800030E0A90102C0440F551F8A95E2F7409344 -:101E9000EA001092EA008091EB0088608093EB00EA -:101EA0001092E9008091E800877F86C08111A7C069 -:101EB0001091F2011F778091E3008078812B80934D -:101EC000E3008091E800877F8093E8000E94E40CA3 -:101ED0008091E80080FFFCCF8091E30080688093D0 -:101EE000E300111102C082E001C083E08093EF01A2 -:101EF00086C08058823008F082C08091F2019091B3 -:101F0000F3018C3D53E0950779F583E08A838AE2FB -:101F100089834FB7F894DE01139620E03EE051E24A -:101F2000E32FF0E050935700E49120FF03C0E295C7 -:101F3000EF703F5FEF708E2F90E0EA3010F0C796A1 -:101F400001C0C0968D939D932F5F243149F74FBFF9 -:101F50008091E800877F8093E8006AE270E0CE011C -:101F600001960E94EB0B14C0AE014F5F5F4F609172 -:101F7000F4010E94320BBC01892B09F440C09091FE -:101F8000E800977F9093E80089819A810E944E0C27 -:101F90008091E8008B778093E80031C0803879F534 -:101FA0008091E800877F8093E8008091EB01809327 -:101FB000F1008091E8008E778093E8000E94E40CA5 -:101FC0001EC081111CC09091F2019230C0F480912A -:101FD000E800877F8093E8009093EB010E94E40C77 -:101FE0008091EB01811106C08091E30087FD02C062 -:101FF00081E001C084E08093EF010E94300A80916B -:10200000E80083FF0AC08091E800877F8093E800A2 -:102010008091EB0080628093EB00AA960FB6F89453 -:10202000DEBF0FBECDBFDF91CF911F910895089500 -:10203000CF938091EF018823A1F0C091E900CF7088 -:102040009091EC00892F817090FD80E8C82B109250 -:10205000E9008091E80083FD0E94C60ECF70C09316 -:10206000E900CF91089590937501809374010895CC -:10207000E0917401F0917501309721F00190F081A9 -:10208000E02D099480E00895E0917401F0917501CC -:10209000309721F00280F381E02D09940895E091BA -:1020A0007401F0917501309721F00480F581E02DE5 -:1020B000099408952091720130917301821793075A -:1020C00071F09093730180937201E0917401F0912B -:1020D0007501309721F00680F781E02D099408956D -:1020E00020917001309171018217930771F09093E4 -:1020F000710180937001E0917401F0917501309746 -:1021000021F00084F185E02D0994089508950C9440 -:1021100086100E94091C0E9478040C94CB1C9F928C -:10212000AF92BF92CF92DF92EF92FF920F931F93E5 -:10213000CF93DF9300D000D000D0CDB7DEB70E94A0 -:1021400090040DE010E0AA24A394B12C902E802FCF -:102150000E947E05980129583E4F6901F901F080DF -:10216000F826A1F40150110988F78FEF89838A833B -:102170001B820E94121C8160782F9D838C83498171 -:102180005A816B818D810E9426112FC09091DA01B6 -:1021900091FF04C08E830E9484058E8125E030E08B -:1021A000A501022E01C0440F0A94EAF7E42E4F2144 -:1021B000C1F029839A828E2191E009F490E09B83FB -:1021C0000E94121C8160782F9D838C8349815A81E3 -:1021D0006B818D810E942611F6018081E826E082C4 -:1021E00004C021503109E0F6BDCF0E94B21F10910A -:1021F00076010E9438101817B9F00E9438108093A9 -:10220000760126960FB6F894DEBF0FBECDBFDF91E4 -:10221000CF911F910F91FF90EF90DF90CF90BF90E3 -:10222000AF909F900C943A0926960FB6F894DEBFB3 -:102230000FBECDBFDF91CF911F910F91FF90EF9017 -:10224000DF90CF90BF90AF909F900895CF93DF9392 -:10225000CDB7DEB72B970FB6F894DEBF0FBECDBF5C -:102260004F83588769877A878B87DE01119686E0CE -:10227000FD0111928A95E9F785E0FE0137960190FC -:102280000D928A95E1F749815A816B817C818D811C -:102290009E810E946F172B960FB6F894DEBF0FBE7B -:1022A000CDBFDF91CF910895CF93882309F4C2C0A9 -:1022B000C82F823859F40E94381081FDBBC089E3D1 -:1022C0000E94491A0E94161B89E30CC0833879F4D6 -:1022D0000E94381080FDAEC083E50E94491A0E941A -:1022E000161B83E50E948B1ACF910C94161B843821 -:1022F00059F40E94381082FD9DC087E40E94491A5B -:102300000E94161B87E4EECF8CEF8C0F813A48F4C5 -:102310008C2F0E94ED2181118DC08C2F0E94491AB3 -:10232000E3CF80E28C0F883048F4C77081E001C0B1 -:10233000880FCA95EAF70E94CF1AD6CF8BE58C0F8B -:10234000833078F4C53A29F0C63A31F083E890E05A -:1023500005C081E890E002C082E890E0CF910C9443 -:102360005A1088E58C0F833108F064C0C83A39F1FF -:10237000C93A41F1CA3A49F1CB3A51F1CC3A59F153 -:10238000CD3A61F1C03B69F1CE3A71F1CF3A79F1C2 -:10239000C13B81F1C23B89F1C33B91F1C43B99F14F -:1023A000C53BA1F1C63BA9F1C73BB1F1C83BB9F1AF -:1023B000C93BC1F1CA3BC9F180E090E038C082EE70 -:1023C00090E035C089EE90E032C08AEE90E02FC0F8 -:1023D00085EB90E02CC086EB90E029C087EB90E085 -:1023E00026C08CEC90E023C08DEC90E020C083E808 -:1023F00091E01DC08AE891E01AC082E991E017C01F -:1024000084E991E014C081E292E011C083E292E09D -:102410000EC084E292E00BC085E292E008C086E242 -:1024200092E005C087E292E002C08AE292E0CF919A -:102430000C947010CF910895882309F44BC0823812 -:1024400059F40E94381081FF45C089E30E94491A5F -:102450000E94161B89E30CC0833871F40E94381067 -:1024600080FF38C083E50E94491A0E94161B83E54D -:102470000E948B1A0C94161B843859F40E94381051 -:1024800082FF28C087E40E94491A0E94161B87E435 -:10249000EFCF9CEF980F913A58F390E2980F983055 -:1024A00050F4877091E001C0990F8A95EAF7892F5F -:1024B0000E94D51ADFCF9BE5980F933020F480E07F -:1024C00090E00C945A10885A833120F480E090E018 -:1024D0000C9470100895882321F00E94CF1A0C9458 -:1024E000161B0895882321F00E94D51A0C94161B00 -:1024F00008957F928F929F92AF92BF92CF92DF9278 -:10250000EF92FF920F931F93CF93DF931F92CDB75C -:10251000DEB77C01C62E772EFC01058102950F7077 -:10252000128111110E94EC1A0E94421A882379F03C -:10253000112369F080E28C0D883048F082E00E941F -:102540002B1A0E94421A91E0D82ED92601C0D12C14 -:10255000E72DE295EF70F0E0E05AFF4F0C94BE23B8 -:10256000872D807F072D0F70882311F00295007F43 -:10257000112389F0002309F490C180E28C0D88308A -:1025800020F4802F0E94CF1A03C0802F0E94DF1AF0 -:102590000E94161B82C18C2D0E941C12002309F47C -:1025A00095C180E28C0D883020F4802F0E94D51ACE -:1025B00003C0802F0E94E51A0E94161B87C1972D29 -:1025C000907F872D8F70903211F08295807FCC2084 -:1025D00021F0F1E0CF16B1F01EC0112349F0002325 -:1025E00009F414C1013009F011C10E94FF1A6EC133 -:1025F000002319F0013009F469C189830E94021B8C -:1026000089810AC1112321F0023008F05FC1FEC0A8 -:1026100001115CC101C1112321F0002309F4F6C0AE -:102620003CC1002309F4F8C03EC1872D86958695EC -:10263000837090E0009719F0019761F047C1112372 -:1026400021F08C2D972D937002C080E090E00E94C5 -:102650005A103CC1112321F08C2D972D937002C08C -:1026600080E090E00E94701031C18C2D112319F090 -:102670000E94BA1E02C00E94221F0E94A71F26C1EC -:10268000872D837009F052C0111120C18C2D8295C5 -:1026900086958770880F880F9C2D9F70892E912CAE -:1026A000A12CB12C082E04C0880C991CAA1CBB1CA0 -:1026B0000A94D2F7C4FE14C00FE010E020E030E02E -:1026C000B901A80104C0440F551F661F771F8A95E2 -:1026D000D2F7CB01BA01609570958095909503C0B3 -:1026E00060E070E0CB01272D26952695237030E021 -:1026F0002230310569F02330310589F068297929C4 -:102700008A299B292130310571F00E94B718DEC05B -:10271000682979298A299B290E94D318D7C00E9449 -:10272000B718C501B4010E949B18D0C0112319F03D -:10273000872D817001C08695882309F4C7C08C2D30 -:10274000829586958770880F880F9C2D9F70892EA3 -:10275000912CA12CB12C082E04C0880C991CAA1C09 -:10276000BB1C0A94D2F7C4FE14C00FE010E020E0B6 -:1027700030E0B901A80104C0440F551F661F771F40 -:102780008A95D2F7CB01BA016095709580959095A6 -:1027900003C060E070E0CB01272D269526952370BD -:1027A000422F50E04230510569F04330510589F025 -:1027B000682979298A299B294130510571F00E94A5 -:1027C000911984C0682979298A299B290E94AD1909 -:1027D0007DC00E949119C501B4010E94751976C08F -:1027E0008C2D90E0FC01E05EF109E531F10508F087 -:1027F00050C0E059FF4F0C94BE230C2D0F70872D55 -:102800008F71112331F00E940E19802F0E946B12DC -:102810005DC00E942F19802F0E94721257C0112391 -:1028200039F0011153C0872D8F710E9454194EC089 -:10283000023008F04BC0F7CF112339F0872D8F718C -:102840000E940E1943C01123C9F3872D8F710E9476 -:102850002F193CC0112329F0872D8F710E94F91880 -:1028600035C00E94EF1832C0112351F0172D1F718F -:10287000812F0E940E1963E0812F0E94221A26C028 -:1028800081E00E942B1A023008F182E00E942B1A8C -:102890001DC0112331F0002389F28C2D0E945411A8 -:1028A00015C0002391F28C2D0E941C120FC0472DE1 -:1028B0004F706C2DC7010E94F9020E94131806C0C8 -:1028C000472D4F706C2DC7010E944A06DD20F9F09C -:1028D0000E941E1A80FD1BC0F70112820E94181A66 -:1028E0000E940E19C7010E9496140E94181A0F9098 -:1028F000DF91CF911F910F91FF90EF90DF90CF90DC -:10290000BF90AF909F908F907F900C942F190F9055 -:10291000DF91CF911F910F91FF90EF90DF90CF90BB -:10292000BF90AF909F908F907F9008950F931F93CB -:10293000CF93DF93EC01888199812B813C81232BFC -:10294000B9F09F3F11F48F3F99F0CE010E94A2058C -:10295000882371F0688179818A810E94141A8C0120 -:102960000E94C9190E949018B801CE010E947912E4 -:10297000DF91CF911F910F9108950E94EC1A0E9450 -:10298000FC1A0E94C11A0E94161B0E9458200E9425 -:10299000A71F80E090E00E945A1080E090E00C9425 -:1029A00070100E94DC1A0C94BD140E94091A292F81 -:1029B00022952F7030E02C3031054CF42A3031054F -:1029C0006CF42250310922303105A8F407C02C30B4 -:1029D000310569F02F30310551F00DC0803F69F0AD -:1029E00018F4803E40F409C0843F29F406C093FBEC -:1029F000882780F9089580E0089581E00895CF93B5 -:102A0000DF9300D000D01F92CDB7DEB70F900F90AC -:102A10000F900F900F90DF91CF910895CF93DF9398 -:102A200000D000D000D0CDB7DEB726960FB6F89410 -:102A3000DEBF0FBECDBFDF91CF9108951F93CF931F -:102A4000DF93C091850116E080918601C81799F047 -:102A5000D0E01C9FF0011D9FF00D1124E957FE4F9F -:102A60004081518162817381848195810E940E151C -:102A70002196C770E9CFDF91CF911F9108954091C2 -:102A8000B7015091B8016091B9017091BA0180917C -:102A9000BB019091BC010C940E158091BC018295F4 -:102AA0008F7009F054C08091B901882309F44FC098 -:102AB00080918501A09186016091B7017091B80164 -:102AC0004091BA015091BB01B6E08A1709F43FC0AA -:102AD00090E041155105C1F17F3F11F46F3FA1F125 -:102AE000B89FF001B99FF00D1124E957FE4F2181E5 -:102AF00072132AC02081621327C02281211124C0B1 -:102B0000238134812417350710F421503109241B07 -:102B1000350B283C3105C0F42091BC012F70206199 -:102B20002093BC0126E0289FF001299FF00D11247D -:102B3000E457FE4F80818F708061808387EB91E046 -:102B40000E9496140C941E1501968770BECF0895AE -:102B5000CF92DF92EF92FF920F931F93CF93DF9369 -:102B6000CDB7DEB762970FB6F894DEBF0FBECDBF0C -:102B70008C0185E0F801DE011D9601900D928A9589 -:102B8000E1F7D8014C9111965C91119712966C91D6 -:102B900012971396CD90DC9014973091B7017091F5 -:102BA000B8018091BA019091BB01009709F46BC103 -:102BB0007F3F19F43F3F09F466C1E090B901EE2070 -:102BC00009F4C0C02091BC01C816D90628F0F6014E -:102BD000E81BF90BCF0104C0809590958C0D9D1DCD -:102BE000FF24F394883C910578F0F12C207F09F0C4 -:102BF000C6C07C2DD98AC88A89890E94FF1487EBB8 -:102C000091E00E949614B1C0822F807F09F046C0E7 -:102C1000751314C0341312C0611110C02F702061DD -:102C20002093BC010E943F1587EB91E00E9496140F -:102C30008091BC01D80115968C932EC0CD2819F136 -:102C40005F3F11F44F3FF9F0F62E61111CC08091E7 -:102C500085012091860136E0821709F45AC090E080 -:102C6000389FF001399FF00D1124E957FE4F718113 -:102C7000571306C07081471303C07281711103C0DE -:102C800001968770E9CFF62E662309F418C180916A -:102C9000BC0181608093BC01F12C11C1751308C087 -:102CA000341306C0611104C08091BC01D801C3C0B7 -:102CB0004D875E878D859E856A8B0E94D5146A89B3 -:102CC0008823E1F16623D1F12091BC01822F829506 -:102CD0008F7090E0029774F08091B7019091B801E5 -:102CE00098878F831986DB86CA862C87CE01079644 -:102CF0000E94961486E0F801A7EBB1E001900D92D6 -:102D00008A95E1F70E944D150E943F15FF24F39428 -:102D1000D6C04D875E878D859E850E94091A292F12 -:102D200022952F7030E0223031050CF0BCC09F702E -:102D300009F0B6C0805E883008F4C1C0C8010E94A6 -:102D40009614E4CFC816D90608F453C0F601E81B60 -:102D5000F90BCF01883C910508F450C0F12C7C2D73 -:102D6000D98AC88A89890E94FF14E7EBF1E086E0DE -:102D7000DF011D928A95E9F70E943F15A0C07513E7 -:102D800014C0341312C0611110C08091BC01F8014D -:102D90008583C8010E94961486E0E7EBF1E0DF012D -:102DA0001D928A95E9F7FE2C8AC04D875E878D8536 -:102DB0009E856A8B0E94D5146A89882309F4BECF48 -:102DC000662309F4BBCF2091BC01822F82958F70BE -:102DD00090E002970CF48ECF8091B7019091B801EA -:102DE0009A8389831B82DD82CC822E83CE01019659 -:102DF0007FCF809590958C0D9D1DACCFF62E6623D0 -:102E000009F49CCF75132EC034132CC02091BC0143 -:102E100020FD1FC0822F82958F70D9F0D8011596A2 -:102E20002C9315978F3049F08F5F982F9295907F54 -:102E3000822F8F70892B15968C93C8010E9496144F -:102E400086E0F801A7EBB1E001900D928A95E1F7D9 -:102E500093CF86E0F801A7EBB1E001900D928A953F -:102E6000E1F72DC04D875E878D859E850E94D51424 -:102E7000811140CF8091BC0181608093BC01C80169 -:102E80000E9496141CC0662309F458CF4D875E87B4 -:102E90008D859E850E94D514882309F44FCF2ACFB3 -:102EA000811148CF0CC0243031050CF047CF9F7002 -:102EB00009F440CFF8019581907F09F03BCF8F2D29 -:102EC00062960FB6F894DEBF0FBECDBFDF91CF91F3 -:102ED0001F910F91FF90EF90DF90CF9008951F9377 -:102EE000CF93DF93CDB7DEB72C970FB6F894DEBF44 -:102EF0000FBECDBF4F83588769877A878B879C87A2 -:102F0000CE0107960E94A815882369F08F819885C5 -:102F10002A853B85232BF1F19F3F09F063C08F3F4A -:102F200009F060C037C086E0FE013796DE011196D9 -:102F300001900D928A95E1F76F817885EA85FB858E -:102F4000309741F17F3F11F46F3F21F120918601CD -:102F500030E0C9010196877099274091850150E0C2 -:102F60008417950709F447C069837A83FD83EC834E -:102F700096E0929FD001939FB00D1124A957BE4FA8 -:102F8000FE01319601900D929A95E1F780938601AA -:102F90000E941E1516E08091850190918601891787 -:102FA000C1F1189FC001112489579E4F0E94A81596 -:102FB000882379F1E09185011E9FF0011124E957E2 -:102FC000FE4F4081518162817381848195810E948D -:102FD0000E158091850190E0019687709927809366 -:102FE0008501D9CF4F81588569857A858B859C85E8 -:102FF0000E940E15CFCF0E94D1141092860110921C -:103000008501E7EBF1E086E0DF011D928A95E9F7A3 -:10301000C1CF2C960FB6F894DEBF0FBECDBFDF91A7 -:10302000CF911F910895EF92FF920F931F93CF932B -:10303000DF938C01892B09F46CC0F12CEE24E3940E -:10304000E8012196F8018491843740F4843008F037 -:1030500051C0813081F0823019F15BC0853709F4AD -:1030600044C0A8F19CE7980F903708F052C08F77C2 -:103070000E941C1241C00E5F1F4FFE01C49180E2EE -:103080008C0F883048F4C7708E2D01C0880FCA9508 -:10309000EAF70E94EF1A14C08C2F0E9454112DC021 -:1030A0000E5F1F4FFE01C49180E28C0F883058F4F0 -:1030B000C7708E2D01C0880FCA95EAF70E94F51AD5 -:1030C0000E94161B1AC08C2F0E941C1216C00E5F85 -:1030D0001F4FFE01C491CC2381F08FE99FE001973F -:1030E000F1F700C00000C150F6CF0E5F1F4FFE0188 -:1030F000F49003C00E9454118E018F2D882309F48F -:103100009FCFEFE9FFE03197F1F700C00000815059 -:10311000F5CFDF91CF911F910F91FF90EF90089520 -:1031200008956093C1017093C2018093C30190938D -:10313000C4010C94BD140F931F930091C101109111 -:10314000C2012091C3013091C401DC01CB01802B6D -:10315000912BA22BB32B8093C1019093C201A0931A -:10316000C301B093C4011F910F910C94BD140F9330 -:103170001F930091C1011091C2012091C3013091B0 -:10318000C401DC01CB0180239123A223B3238093CC -:10319000C1019093C201A093C301B093C4011F91D8 -:1031A0000F910C94BD140F931F930091C1011091C6 -:1031B000C2012091C3013091C401DC01CB01802701 -:1031C0009127A227B3278093C1019093C201A093B6 -:1031D000C301B093C4011F910F910C94BD141092C0 -:1031E000BD011092BE011092BF011092C0010C945B -:1031F000BD1441E050E060E070E004C0440F551F92 -:10320000661F771F8A95D2F74093BD015093BE0188 -:103210006093BF017093C0010C94BD1441E050E075 -:1032200060E070E004C0440F551F661F771F8A9549 -:10323000D2F78091BD019091BE01A091BF01B091E4 -:10324000C001482B592B6A2B7B2B4093BD01509317 -:10325000BE016093BF017093C0010C94BD1441E0A6 -:1032600050E060E070E004C0440F551F661F771FF8 -:103270008A95D2F740955095609570958091BD01E3 -:103280009091BE01A091BF01B091C0014823592384 -:103290006A237B234093BD015093BE016093BF011D -:1032A0007093C0010C94BD1441E050E060E070E008 -:1032B00004C0440F551F661F771F8A95D2F780916F -:1032C000BD019091BE01A091BF01B091C0014827FE -:1032D00059276A277B274093BD015093BE01609315 -:1032E000BF017093C0010C94BD140F931F93009104 -:1032F000BD011091BE012091BF013091C001DC01E0 -:10330000CB01802B912BA22BB32B8093BD019093EB -:10331000BE01A093BF01B093C0011F910F910C9407 -:10332000BD140F931F930091BD011091BE01209118 -:10333000BF013091C001DC01CB0180239123A22386 -:10334000B3238093BD019093BE01A093BF01B093BE -:10335000C0011F910F910C94BD140F931F93009106 -:10336000BD011091BE012091BF013091C001DC016F -:10337000CB0180279127A227B3278093BD0190938B -:10338000BE01A093BF01B093C0011F910F910C9497 -:10339000BD140895CF92DF92EF92FF920F931F9387 -:1033A000CF93DF938C01C090C101D090C201E09017 -:1033B000C301F090C4018091BD019091BE01A09124 -:1033C000BF01B091C001C82AD92AEA2AFB2ACFE15D -:1033D000D0E0D701C6010C2E04C0B695A7959795ED -:1033E00087950A94D2F780FF06C0B8018C2F0E94FF -:1033F0009F08019721F4219760F780E001C08C2F8E -:10340000DF91CF911F910F91FF90EF90DF90CF90C0 -:103410000895CF93DF93EC010E94CA19BE010E9468 -:103420009F08DF91CF910895CB010E94091A08955A -:103430008091C50185958595859508958091C501F3 -:103440008770089598E0899F90011124262B20937E -:10345000C5010C940E192091C5018095822380939B -:10346000C501982F977069F430E0482F552747FD24 -:1034700050952417350729F08595859585950C94E9 -:103480002F1908959091C501977081E009F480E0AB -:10349000089590910C01992321F090910D019111C3 -:1034A00009C020910E0130910F01F90132969FEF72 -:1034B00040E01FC0982F9695969596959F3050F5B1 -:1034C000E0910E01F0910F01E90FF11D877021E0ED -:1034D00030E0A90102C0440F551F8A95E2F7CA01E6 -:1034E0009181892B818308959F3F39F04F5F4E3042 -:1034F00041F051915813F8CF0DC05111F7CF942FCF -:10350000F5CF9F3F39F0F901E90FF11D97FDFA95CD -:1035100082830895089590910C01992321F0909150 -:103520000D01911109C020910E0130910F01F90197 -:103530003296205F3F4F1FC0982F9695969596958F -:103540009F30F0F4E0910E01F0910F01E90FF11DB1 -:10355000877021E030E0A90102C0440F551F8A9511 -:10356000E2F7CA018095918189238183089531967C -:10357000E217F30729F090819813F9CF1082F7CF63 -:10358000089581E090E0E0910E01F0910F01E80FC5 -:10359000F91F1082019680319105A9F70895909145 -:1035A000D901892B8093D901089580959091D901F3 -:1035B00089238093D90108951092D901089590919B -:1035C000D801892B8093D801089580959091D801D6 -:1035D00089238093D80108951092D801089590917D -:1035E000D701892B8093D701089580959091D701B9 -:1035F00089238093D70108951092D701089580936D -:10360000C60108951092C601089580910E0190910F -:103610000F01FC0131969C01205F3F4F80E09191AA -:1036200091118F5FE217F307D1F70895E0910E0132 -:10363000F0910F018091D9018083E0910E01F0910A -:103640000F0190818091D801892B8083E0910E0138 -:10365000F0910F0190818091D701892B8083809117 -:10366000C601882361F0E0910E01F0910F01908175 -:10367000892B80830E94051B81111092C6018091C5 -:103680000E0190910F010C94441020E0009739F046 -:10369000AC0141505109842395232F5FF7CF822F2E -:1036A0000895CF92DF92EF92FF926C01EE24FF24F7 -:1036B000C114D104E104F10421F0C701B60120E1F5 -:1036C00001C020E0C72ED82EE92EFF24C114D1045A -:1036D000E104F10419F0285FC701B6016B017C0118 -:1036E00054E0F694E794D794C7945A95D1F7C1144F -:1036F000D104E104F10419F02C5FC701B6016B019C -:103700007C0142E0F694E794D794C7944A95D1F7A8 -:10371000C114D104E104F10419F02E5FC701B60110 -:10372000DC01CB01B695A79597958795892B8A2BB8 -:103730008B2B09F02F5F822FFF90EF90DF90CF90BF -:1037400008958091EF01843021F11092DB0120E493 -:1037500088E190E00FB6F894A895809360000FBEC2 -:103760002093600080E00E943A0983B7817F8460E3 -:1037700083BF83B7816083BF7894889583B78E7F3A -:1037800083BF88E10FB6F8948093600010926000C8 -:103790000FBE0895089508950E94CA1B0E949004C8 -:1037A0000E94CB1B0E94850591E0811101C090E031 -:1037B000892F08950E94D1140E9438100C943A0960 -:1037C0001F920F920FB60F9211248F939F93AF9376 -:1037D000BF938091DB01811113C08091DC01909136 -:1037E000DD01A091DE01B091DF014196A11DB11D67 -:1037F0008093DC019093DD01A093DE01B093DF01A3 -:10380000BF91AF919F918F910F900FBE0F901F901E -:10381000189582E084BD93E095BD9AEF97BD8093A3 -:103820006E0008952FB7F8948091DC019091DD012E -:10383000A091DE01B091DF012FBF0895CF92DF92FA -:10384000EF92FF920F931F932FB7F8944091DC01F2 -:103850005091DD016091DE017091DF012FBF6A019F -:103860007B01EE24FF248C0120E030E0C016D1065D -:10387000E206F30610F4415051099A01281B390B56 -:10388000C9011F910F91FF90EF90DF90CF900895A5 -:103890001F920F920FB60F9211248F939F93AF93A5 -:1038A000BF938091DC019091DD01A091DE01B09188 -:1038B000DF010196A11DB11D8093DC019093DD0114 -:1038C000A093DE01B093DF01BF91AF919F918F91E3 -:1038D0000F900FBE0F901F9018950E94350DF89411 -:1038E0002FEF87EA91E6215080409040E1F700C039 -:1038F000000087E090EBDC018093F9019093FA01DE -:10390000A093FB01B093FC019CE088E10FB6F89412 -:10391000A895809360000FBE90936000FFCFEF9258 -:10392000FF920F931F93CF93DF93D82FCDE08C2F6F -:103930000E947E0505E010E0E82EF12CC701002E64 -:1039400002C0959587950A94E2F780FF09C0602F21 -:103950007C2F80E00E944B06D81302C081E006C095 -:103960000150110958F7C15010F780E0DF91CF9155 -:103970001F910F91FF90EF900895CF93C82F8CE285 -:103980000E948F1C882321F08C2FCF910C948F1CC8 -:1039900080E0CF910895CF930E94121E811102C042 -:1039A0000E94F81DC5E6C15049F00E9490048FE3C3 -:1039B0009CE90197F1F700C00000F5CF89E20E9471 -:1039C000BD1C811113C18AE20E94BD1C81110E949D -:1039D000F81D85E00E94BD1C81110E946D1C0E9493 -:1039E0001D1E8093DA0187E00E94BD1C8823A9F187 -:1039F0008BE10E94BD1C882351F08091DA0181FB8C -:103A0000222720F991E0922790FB81F90EC08EE0E9 -:103A10000E94BD1C882361F08091DA0182FB22277D -:103A200020F991E0922790FB82F98093DA0115C08A -:103A300080E10E94BD1C9091DA01882341F093FB44 -:103A4000222720F981E0822780FB93F904C0892F87 -:103A5000809580FB90F99093DA018091DA010E94C1 -:103A6000211E0E942F1E8093F80180EE0E94BD1C33 -:103A7000882341F08091F801982F909590FB80F970 -:103A80008093F80189E30E94BD1C882359F080913E -:103A9000F80181FB222720F991E0922790FB81F920 -:103AA0008093F80182EE0E94BD1C882359F080911A -:103AB000F80182FB222720F991E0922790FB82F9FE -:103AC0008093F80186EE0E94BD1C882359F08091F6 -:103AD000F80183FB222720F991E0922790FB83F9DC -:103AE0008093F80183EE0E94BD1C882359F08091D9 -:103AF000F80184FB222720F991E0922790FB84F9BA -:103B00008093F80185E30E94BD1C882359F08091C1 -:103B1000F80185FB222720F991E0922790FB85F997 -:103B20008093F80181E30E94BD1C882359F08091A5 -:103B3000F80186FB222720F991E0922790FB86F975 -:103B40008093F80181E10E94BD1C882359F0809187 -:103B5000F80187FB222720F991E0922790FB87F953 -:103B60008093F8018091F8010E94331E8091F80142 -:103B700087FB882780F980930D0187E20E94BD1C96 -:103B8000C82F8EE10E94BD1C8111C2608FE10E948E -:103B9000BD1C8111C46080E20E94BD1C8111C860FF -:103BA00081E20E94BD1C8111C06182E20E94BD1CA5 -:103BB0008111C06283E20E94BD1C8111C06484E255 -:103BC0000E94BD1C882311F0C06802C0CC2329F0DC -:103BD0008C2F0E942A1E6C2F03C00E94261E682F65 -:103BE00070E080E090E0CF910C949118CF9108950F -:103BF0006DEE7EEF80E090E00E94F82360E082E0CE -:103C000090E00E94E62360E083E090E00E94E623DB -:103C100060E084E090E00E94E62360E085E090E0D0 -:103C20000C94E62380E090E00E94E02321E08D3EAA -:103C30009E4F09F020E0822F089582E090E00C94DE -:103C4000D823682F82E090E00C94E62383E090E094 -:103C50000C94D823682F83E090E00C94E62384E052 -:103C600090E00C94D823682F84E090E00C94E62335 -:103C70008091E20180FF0BC06091130185E0689F95 -:103C8000B001112475956795759567952BC081FFD7 -:103C900009C06091130185E0689FB00111247595FA -:103CA000679520C082FF07C06091130185E0689F7F -:103CB000B001112417C09091E3019923D1F06091D4 -:103CC0001201961788F72091130185E0289F900133 -:103CD0001124929FA001939F500D112470E0CA01FE -:103CE0000E94AA236038710540F46115710539F00E -:103CF00002C065E070E0862F08958FE7089581E0A7 -:103D000008958091E20180FF08C06091110170E088 -:103D1000759567957595679521C081FF06C060917F -:103D2000110170E07595679519C082FF04C060911C -:103D3000110170E010C09091E3019923C1F06091EE -:103D400010019617A0F780911101899FC0011124DD -:103D500070E00E94AA236038710528F4611571058E -:103D600021F0862F08958FE7089581E0089561E09E -:103D700070E0F4CF803F21F40E94381E819504C08A -:103D8000813F29F40E94381E8093E6010895823F06 -:103D900021F40E94381E819504C0833F29F40E94BB -:103DA000381E8093E5010895893F19F40E94811E11 -:103DB00005C08A3F31F40E94811E81958093E701FE -:103DC00008958B3F21F40E94811E819504C08C3F91 -:103DD00029F40E94811E8093E8010895843F21F414 -:103DE0008091E401816017C0853F21F48091E40156 -:103DF000826011C0863F21F48091E40184600BC091 -:103E0000873F21F48091E401886005C0883F31F448 -:103E10008091E40180618093E40108958D3F21F455 -:103E20008091E20181600BC08E3F21F48091E2011C -:103E3000826005C08F3F29F48091E2018460809305 -:103E4000E2010895803F39F48091E60187FF6CC05C -:103E50001092E60169C0813F29F48091E6011816AD -:103E6000BCF362C09091E501823F29F497FF5CC0EA -:103E70001092E50159C0833F19F41916CCF354C0D0 -:103E8000893F41F48091E70118160CF04DC0109263 -:103E9000E7014AC08A3F29F48091E70187FF44C0C7 -:103EA000F6CF8B3F39F48091E80187FF3DC0109237 -:103EB000E8013AC08C3F29F48091E8011816BCF360 -:103EC00033C0843F21F48091E4018E7F17C0853F89 -:103ED00021F48091E4018D7F11C0863F21F480910F -:103EE000E4018B7F0BC0873F21F48091E401877F41 -:103EF00005C0883F31F48091E4018F7E8093E40116 -:103F000013C08D3F21F48091E2018E7F0BC08E3F64 -:103F100021F48091E2018D7F05C08F3F29F48091CB -:103F2000E2018B7F8093E2018091E50181110EC057 -:103F30008091E60181110AC08091E701811106C0DC -:103F40008091E801811102C01092E301089584EE8E -:103F500091E00E944F100E94121C9093E101809307 -:103F6000E00108951F93CF93DF938091E00190913A -:103F7000E1010E941E1CAC019091E301992321F004 -:103F80002091140130E006C0209115018AE0289F9D -:103F9000900111244217530708F486C08091E5016F -:103FA000C091E601D091E7011091E801811107C0AD -:103FB000C11176C0D11174C0111172C075C09F3F7C -:103FC00019F09F5F9093E301181624F40E94381EA5 -:103FD0008093E5018091E50187FF05C00E94381EAE -:103FE00081958093E5011C1624F40E94381E80936D -:103FF000E6018091E60187FF05C00E94381E819589 -:104000008093E6016091E501662339F1C091E601F4 -:10401000CC2319F1772767FD7095872F972F0E9482 -:10402000BB2223E333E343E35FE30E941F230E94A9 -:1040300088226093E5016C2F772767FD7095872FA5 -:10404000972F0E94BB2223E333E343E35FE30E9405 -:104050001F230E9488226093E6011D1624F40E940B -:10406000811E8093E7018091E70187FF05C00E94D0 -:10407000811E81958093E701111624F40E94811E10 -:104080008093E8018091E80187FF05C00E94811EAE -:1040900081958093E801DF91CF911F910C94A71F28 -:1040A0009F3F09F08ECF96CFDF91CF911F9108955A -:1040B000E4EEF1E085E0DF011D928A95E9F71092C8 -:1040C000E3011092E2010895833081F128F48130F8 -:1040D00059F08230D1F00895853009F449C0B8F123 -:1040E000863009F456C0089580911501262F30E0DE -:1040F000280F311D2F3F310524F4680F60931501FF -:1041000008958FEF80931501089580911401262F53 -:1041100030E0280F311D2F3F310524F4680F6093E4 -:10412000140108958FEF8093140108958091130175 -:10413000262F30E0280F311D2F3F310524F4680F62 -:104140006093130108958FEF809313010895809178 -:104150001201262F30E0280F311D2F3F310524F4A6 -:10416000680F6093120108958FEF809312010895F4 -:1041700080911101262F30E0280F311D2F3F31058E -:1041800024F4680F6093110108958FEF809311015B -:10419000089580911001262F30E0280F311D2F3F08 -:1041A000310524F4680F6093100108958FEF809318 -:1041B00010010895833011F128F4813049F08230E4 -:1041C00091F00895853081F120F18630C1F1089594 -:1041D00080911501681720F4861B809315010895BE -:1041E00010921501089580911401681720F4861B20 -:1041F0008093140108951092140108958091130181 -:10420000681720F4861B8093130108951092130100 -:10421000089580911201681720F4861B8093120183 -:10422000089510921201089580911101681720F4E9 -:10423000861B8093110108951092110108958091B9 -:104240001001681720F4861B8093100108951092C6 -:10425000100108950F931F938B3109F475C0A0F5D9 -:104260008E3009F484C0C0F4873009F45BC068F470 -:10427000863009F0AAC08091DA01817F8E7F809319 -:10428000DA0181E08093EA01A1C0883009F496C088 -:104290008B3009F493C099C0813109F472C068F47D -:1042A000803109F092C08091DA0183FB222720F946 -:1042B00091E0922790FB83F950C0863109F47EC0CB -:1042C000893109F47BC081C0853309F479C068F471 -:1042D000873209F475C028F48E3108F476C08D5108 -:1042E0005AC0893209F46CC070C0833438F48A3300 -:1042F00008F050C0883309F461C067C0833409F402 -:104300005FC0883409F061C00E94D1140FEF13ED33 -:1043100020E3015010402040E1F700C000000E945F -:104320006D1C4CC09091DA01892F8095817080FBC3 -:1043300090F929F0966098609093DA0147C0997FD0 -:10434000977F9093DA013AC08091DA0181FB2227AE -:1043500020F991E0922790FB81F98093DA0199236B -:1043600069F18091DA0181608093DA0127C0809140 -:10437000DA0182FB222720F991E0922790FB82F953 -:10438000ECCF0E94D11490910D0181E08927809398 -:104390000D0114C0895341E050E060E070E08A01F3 -:1043A0009B0104C0000F111F221F331F8A95D2F7F3 -:1043B000C901B8010E9491180E94D11481E006C081 -:1043C00061E070E080E090E0F5CF80E01F910F9118 -:1043D000089580E0089580E00895CF93C82F8091DC -:1043E000EA01813079F018F08230E9F187C0E0917C -:1043F0000E01F0910F018081813169F0823209F064 -:104400007FC009C0E0910E01F0910F0180818131E0 -:1044100011F0823261F48C2F0E94E921811104C0D5 -:104420008C2F0E942A211DC081E090E01AC08C2FA1 -:104430000E94EB21811114C0C43179F048F4CB30D3 -:1044400079F0C03109F060C082E08093EA0108C0D1 -:10445000C93219F0C83321F057C01092EA0154C094 -:1044600081E0817053C0C93289F118F5C43171F10E -:10447000A8F4C73009F046C08AE08093150194E1A2 -:104480009093140193E0909313018093120188E0BC -:104490008093110188E28093100134C0CE51C63060 -:1044A00088F5EC2FF0E0E65DFE4F80818093E90116 -:1044B00029C0CE34E9F020F4CB3421F56AE013C0F2 -:1044C000C13579F0C235F1F461E00DC08091E901A8 -:1044D000882319F01092E90115C081E08093EA0168 -:1044E00015C061E006C08091E9010E9464200AC005 -:1044F0006AE08091E9010E94DA2004C01092EA018A -:1045000080E004C081E002C080E0ABCFCF9108958D -:1045100004D06894B1118DC0089570D088F09F5771 -:1045200090F0B92F9927B751A0F0D1F0660F771FFF -:10453000881F991F1AF0BA95C9F712C0B13081F0DF -:1045400077D0B1E0089574C0672F782F8827B85FBF -:1045500039F0B93FCCF3869577956795B395D9F740 -:104560003EF490958095709561957F4F8F4F9F4F4A -:104570000895E89409C097FB3EF490958095709556 -:1045800061957F4F8F4F9F4F9923A9F0F92F96E99F -:10459000BB279395F695879577956795B795F11114 -:1045A000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB1 -:1045B0008F4F9F4F16C0882311F096E911C07723C3 -:1045C00021F09EE8872F762F05C0662371F096E8CC -:1045D000862F70E060E02AF09A95660F771F881F9B -:1045E000DAF7880F9695879597F9089557FD9058B3 -:1045F000440F551F59F05F3F71F04795880F97FBA7 -:10460000991F61F09F3F79F0879508951216130660 -:104610001406551FF2CF4695F1DF08C0161617068F -:104620001806991FF1CF86957105610508940895C4 -:10463000E894BB2766277727CB0197F908950BD01D -:1046400078C069D028F06ED018F0952309F05AC0D0 -:104650005FC01124EECFCADFA0F3959FD1F3950F71 -:1046600050E0551F629FF001729FBB27F00DB11DF6 -:10467000639FAA27F00DB11DAA1F649F6627B00D86 -:10468000A11D661F829F2227B00DA11D621F739F6F -:10469000B00DA11D621F839FA00D611D221F749F7D -:1046A0003327A00D611D231F849F600D211D822FC4 -:1046B000762F6A2F11249F5750408AF0E1F088230B -:1046C0004AF0EE0FFF1FBB1F661F771F881F915018 -:1046D0005040A9F79E3F510570F014C0AACF5F3F2C -:1046E000ECF3983EDCF3869577956795B795F7954B -:1046F000E7959F5FC1F7FE2B880F911D96958795D3 -:1047000097F9089597F99F6780E870E060E0089551 -:104710009FEF80EC089500240A94161617061806D9 -:104720000906089500240A941216130614060506B5 -:104730000895092E0394000C11F4882352F0BB0F46 -:1047400040F4BF2B11F460FF04C06F5F7F4F8F4FA9 -:104750009F4F089597FB072E16F4009407D077FD1E -:1047600009D00E94C42307FC05D03EF490958195A2 -:104770009F4F0895709561957F4F0895EE0FFF1F2D -:104780000590F491E02D0994AA1BBB1B51E107C0D1 -:10479000AA1FBB1FA617B70710F0A61BB70B881FD1 -:1047A000991F5A95A9F780959095BC01CD01089560 -:1047B000F999FECF92BD81BDF89A992780B50895E9 -:1047C000A8E1B0E042E050E00C940024262FF999D3 -:1047D000FECF92BD81BDF89A019700B4021639F060 -:1047E0001FBA20BD0FB6F894FA9AF99A0FBE089531 -:1047F0000196272F0E94E7230C94E623DC01CB01CE -:10480000FC01F999FECF06C0F2BDE1BDF89A3196E0 -:1048100000B40D9241505040B8F70895F894FFCF7E -:1048200020023C09CA09A70973093F090101C70110 -:1048300028080A03140A3F4D36392605D904A30473 -:104840006A04FD0316042F0448040102030405064C -:04485000070809004C -:00000001FF -- cgit v1.2.3 From 07a631bd5a116170ebab5688eae9965d8a2231e2 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sun, 31 Jul 2016 14:21:08 -0700 Subject: =?UTF-8?q?Thumb=20=E2=8C=AB=20into=20=E2=87=A5,=20numpad=20&=20in?= =?UTF-8?q?to=20:,=20yank=20home/end?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also: add (back?) in the light-shine disabler --- keyboards/ergodox/keymaps/zweihander-osx/keymap.c | 26 +- .../ergodox/keymaps/zweihander-osx/makefile.mk | 2 + .../keymaps/zweihander-osx/zweihander-osx.hex | 1151 ++++++++++++++++++++ 3 files changed, 1166 insertions(+), 13 deletions(-) create mode 100644 keyboards/ergodox/keymaps/zweihander-osx/makefile.mk create mode 100644 keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c index 40b1d7d6dd..d6d66fd55d 100644 --- a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c +++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c @@ -11,7 +11,7 @@ #define BBED 2 // BBEdit #define TMNL 3 // Terminal #define SAFA 4 // Safari -#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input +#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | `~ | '" | | ⎋ | ⌫ | * ,------|------|------| |------+--------+------. * | | | PgUp | | PgDn | | | - * | | ⌫ |------| |------| ⇥ |Enter | + * | | ⇥ |------| |------| ⇥ |Enter | * | | | L⌥ | | L⌃ | | | * `--------------------' `----------------------' */ @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, KC_GRV, KC_QUOT, KC_PGUP, - KC_SPC,KC_BSPC,KC_LALT, + KC_SPC,KC_TAB ,KC_LALT, // right hand TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -66,25 +66,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | = | | + * | | | | | | = | | | | : | 1 | 2 | 3 | = | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | 0 | . | ← | → | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | Home | | | + * | | | | | | | | * | | |------| |------| | | - * | | | | | End | | | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS [SYMB] = KEYMAP( // left hand KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS, + KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, @@ -93,11 +93,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, + KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, - KC_HOME, - KC_END , KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), /* Keymap 2: Media keys * @@ -131,13 +131,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, KC_TRNS, LSFT(KC_SPC), KC_SPC , 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_END , LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) ), }; diff --git a/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk b/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk new file mode 100644 index 0000000000..6e3d088a43 --- /dev/null +++ b/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk @@ -0,0 +1,2 @@ +# Don’t do a tricolor wave when the computer is shut down in Windows +SLEEP_LED_ENABLE = no diff --git a/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex new file mode 100644 index 0000000000..832504b02a --- /dev/null +++ b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex @@ -0,0 +1,1151 @@ +:100000000C94D3020C941A030C941A030C941A0344 +:100010000C941A030C941A030C941A030C941A03EC +:100020000C941A030C941A030C94B71F0C94892097 +:100030000C941A030C941A030C941A030C941A03CC +:100040000C941A030C94FC1A0C941A030C941A03C3 +:100050000C941A030C9414160C941A030C941A039F +:100060000C941A030C941A030C941A030C941A039C +:100070000C941A030C941A030C941A030C941A038C +:100080000C941A030C941A030C941A030C941A037C +:100090000C941A030C941A030C941A030C941A036C +:1000A0000C941A030C941A030C941A03730C730C1B +:1000B000A20CA20CD80CF80C290E290E030D290E47 +:1000C000B30DB30D1A0E290E290E230EC00DC00D4F +:1000D000C00DC00DC00DC00DC00DC00DC00DC00DB8 +:1000E000C00DC00DC00DC00DC00DC00DD20DDF0D77 +:1000F000E60DED0DF70DF620182106221821062237 +:100100005D2180210622D521E821750A01E2012C1A +:10011000022C02E274FA011602160104020401091B +:1001200002090104020401150215010C020C012848 +:10013000022800750A01E2012C022C02E274FA0185 +:10014000170217010802080115021501100210011B +:100150000C020C0111021101040204010F020F0133 +:1001600028022800750A01E2012C022C02E274FA2E +:100170000105020501050205010802080107020741 +:10018000010C020C011702170128022800750A0150 +:10019000E30116021602E301E3012B022B02E30145 +:1001A000E30115021502E300750A01E301160216C8 +:1001B00002E301E3012B022B02E3000000F0A12E79 +:1001C000004C002A00E100E00000001E00140004C2 +:1001D000001D00E200E2001F001A0016001B00E3F1 +:1001E000002B00200008000700060050002C002112 +:1001F000001500090019004F004B00220017000AEB +:1002000000050000003500015301510000E300002B +:10021000003400015301510000E3000000290023D5 +:10022000001C000B00110000002A00240018000D23 +:1002300000100052004E0025000C000E0036005148 +:10024000002800260012000F0037002F002B002787 +:10025000001300334238613000E0002D00310034DB +:1002600068E5002C00000001000100010001000110 +:100270000000003A002F0036020100010001003B9F +:1002800000300037020100010001003C002F02266F +:10029000020100010001003D0030022702010001BF +:1002A0000001003E00340234002E00000001000175 +:1002B0000001000000010000000100010001000039 +:1002C000000100000001003F0038002D0033020053 +:1002D0000001004000240021001E00270001004111 +:1002E00000250022001F00370001004200260023E5 +:1002F00000200050000100430025022E022E004F76 +:10030000000100440045000100010001000000015F +:10031000000100010001000100000069000100016E +:10032000000100010001006A000100043001000129 +:1003300000010001004B004E00010001000100011E +:100340000001300100010001004A000100033001FA +:100350000002300000010001000100000001000067 +:100360000001001408010000000100000001001A53 +:100370000830082F082C0200000100350A520C50EA +:10038000002C00A9004D00350852005100AC00AA15 +:100390000019080100510C4F00AB00A8000608012D +:1003A0000001000100010001001B08A5000100AED2 +:1003B000000100010000000000000000000000003B +:1003C0000000010204060A0F17202C3A4A5D7187CB +:1003D0009DB3C7DAE9F5FCFFFCF5E9DAC7B39D8701 +:1003E000715D4A3A2C20170F0A0604020100000032 +:1003F0000000000000000016034500720067006F57 +:100400000044006F007800200045005A00000016EC +:10041000034500720067006F0044006F0078002001 +:100420000045005A0000000403090409026D00049D +:100430000100A0FA090400000103010100092111D3 +:100440000100012240000705810308000A09040198 +:10045000000103010200092111010001224D0007E2 +:1004600005820308000A09040200010300000009D4 +:1004700021110100012236000705830308000A0943 +:1004800004030001030000000921110100012239C9 +:10049000000705840310000112011001000000088C +:1004A000EDFE071301000102000105010906A1018B +:1004B000050719E029E71500250195087501810256 +:1004C0000508190129059505750191029501750326 +:1004D0009101050719002977150025019578750107 +:1004E0008102C005010980A101850216810026B79D +:1004F000001A81002AB700751095018100C0050C13 +:100500000901A1018503160100269C021A01002A97 +:100510009C02751095018100C005010902A1010925 +:1005200001A1000509190129051500250195057589 +:100530000181029501750381010501093009311519 +:1005400081257F95027508810609381581257F95DB +:100550000175088106050C0A38021581257F950171 +:1005600075088106C0C005010906A101050719E04B +:1005700029E7150025019508750181029501750887 +:10058000810105081901290595057501910295015B +:10059000750391010507190029FF150026FF009535 +:1005A0000675088100C011241FBECFEFDAE0DEBF60 +:1005B000CDBF04B603FE27C08091010290910202D4 +:1005C000A0910302B09104028730904BA740B04B3A +:1005D000D1F41092010210920202109203021092C2 +:1005E000040214BE84B7877F84BF0FB6F894A89521 +:1005F00080916000886180936000109260000FBE5F +:10060000E0E0FFE3099511E0A0E0B1E0E0EAF7E403 +:1006100002C005900D92A433B107D9F712E0A4E30C +:10062000B1E001C01D92A130B107E1F70E94FC1CAE +:100630000C94CE230C9400001092B9008AE08093B1 +:10064000B800089594EA9093BC009091BC0097FF85 +:10065000FCCF9091B900987F983021F0903111F043 +:1006600081E008958093BB0084E88093BC00809172 +:10067000BC0087FFFCCF8091B900887F883111F0E2 +:10068000803471F780E0089584E98093BC00809104 +:10069000BC0084FDFCCF08958093BB0084E8809368 +:1006A000BC008091BC0087FFFCCF9091B900987F7F +:1006B00081E0983209F480E0089584E88093BC00DA +:1006C0008091BC0087FFFCCF8091BB00089580B370 +:1006D0008C7080BB81B3836F81BB089580910101D1 +:1006E000811115C080E40E942203809301018111D1 +:1006F0000CC082E10E944C0380930101811105C06E +:100700008FEF0E944C03809301010E94440384B147 +:10071000807F84B985B1807F85B98AB1837F8AB9AA +:100720008BB1837F8BB93E98469808950C94E4046E +:100730000E942509809301010E946E030E946703B5 +:10074000A5E3B1E0E3E4F1E08EE08E0F11921D929B +:100750008E13FCCF0C940F090E9425098093010190 +:100760000E946E030E946703A5E3B1E0E3E4F1E0B9 +:100770008EE08E0F11921D928E13FCCF0895BF92C2 +:10078000CF92DF92EF92FF920F931F93CF93DF935D +:1007900080910101882379F0809134018F5F8093EB +:1007A0003401811108C00E94250980930101811143 +:1007B00002C00E94B70805E311E0C0E0D0E0EE24DB +:1007C000E394F12CDD24D39495E0C92EC730D105F4 +:1007D00000F58091010181113CC080E40E94220358 +:1007E00080930101811112C082E10E944C03809329 +:1007F000010181110BC0C7010C2E01C0880F0A94A2 +:10080000EAF780950E944C03809301010E94440303 +:1008100020C0CA30A1F028F4C83059F0C93061F0C6 +:1008200005C0CC3089F070F0CD3089F0209A28983E +:1008300010C0219A29980DC0229A2A980AC0239A9A +:100840002B9807C0529A01C0539A5B9802C03E9AF7 +:10085000469880EA8A95F1F7C730D10518F580915E +:100860000101811144C080E40E94220380930101B0 +:10087000882311F0B12C12C083E10E944C038093B5 +:1008800001018111F7CF81E40E94220380930101CD +:100890008111F0CF0E945D03B82EB0940E944403F2 +:1008A0008B2D26C08FB181708D25799902C092E081 +:1008B00001C090E0892B7C9902C024E001C020E0B7 +:1008C000822B7D9902C028E001C020E0822B7E9916 +:1008D00002C090E101C090E0892B9FB19095991FD3 +:1008E0009927991F9295990F907E892B01C080E0DE +:1008F000F8019081981719F08083C09200010E943E +:100900006E0321960F5F1F4FCE30D10509F05ECFE9 +:10091000809100018823A1F08150809300018823F9 +:1009200029F0F5E0FA95F1F700000AC0A3E4B1E080 +:10093000E5E3F1E0CF01825F91919D938E13FCCFAF +:100940000E94410681E0DF91CF911F910F91FF90AE +:10095000EF90DF90CF90BF900895E82FF0E0ED5B2F +:10096000FE4F808108950895FC016230B9F028F4AB +:10097000662341F0613061F023C06330A9F0643038 +:10098000C9F01EC082818823D9F088EA91E00895D9 +:1009900082818823A9F08DE891E0089582818823DF +:1009A00079F084E691E008958281882349F083E319 +:1009B00091E008958281882319F08AE091E00895FA +:1009C00080E090E0089508956091B0017091B101C8 +:1009D0008091B2019091B3010E94081556985E98DB +:1009E00025982D9826982E9827982F98813019F0C1 +:1009F000823021F00895259A2D9A0895269A2E9AEC +:100A0000089581E0089581E008950C9403050E9403 +:100A1000940E2FEF84E39CE0215080409040E1F75A +:100A200000C000000C9439160F931F93CF93DF93EF +:100A30008C01FC01C081D181CE010E948D13BE01C9 +:100A40000E94D807EC01B8010E940505882309F42B +:100A500012C1B801CE010E946808882309F40BC1B5 +:100A6000B801CE010E948109882309F404C1C43170 +:100A7000F0E7DF0708F0CDC0C23080E7D80708F400 +:100A8000A3C0F8018281882309F4AAC00E947215CC +:100A9000811102C00E9458150E94851590E0909324 +:100AA000F3018093F201C230F0E7DF0721F4809177 +:100AB000F201816082C0C33080E7D80721F48091C1 +:100AC000F20182607AC0C430E0E7DE0721F4809151 +:100AD000F201846072C0C530F0E7DF0719F480913D +:100AE000F20127C0C63080E7D80721F48091F201D7 +:100AF000806163C0C730E0E7DE0721F48091F20136 +:100B000080625BC0C830F0E7DF0721F48091F2011A +:100B1000806453C0C93080E7D80721F48091F20186 +:100B200080684BC0CA30E0E7DE0729F48091F2010B +:100B30008460886042C0CB30F0E7DF0721F4809109 +:100B4000F2018E7F3AC0CC3080E7D80721F4809143 +:100B5000F2018D7F32C0CD30E0E7DE0721F48091D5 +:100B6000F2018B7F2AC0CE30F0E7DF0719F48091C5 +:100B7000F20122C0CF3080E7D80721F48091F20142 +:100B80008F7E1BC0C031E0E7DE0721F48091F201C7 +:100B90008F7D13C0C131F0E7DF0721F48091F201AE +:100BA0008F7B0BC0C231D04721F48091F2018F7747 +:100BB00004C08091F2018B7F877F8093F201809146 +:100BC000F2010E94891557C0C115E0E7DE0779F0F0 +:100BD000C130D047A1F081E0809351018093520150 +:100BE000C801DF91CF911F910F910C940105F8017D +:100BF0008281882309F43FC00E9407053CC0F801A8 +:100C000082818823C1F18091CD0181608093CD01E3 +:100C100032C0CB3380E7D807A1F4F8018281882362 +:100C200021F01092510182E016C080915101811192 +:100C300006C086E20E940C0B86E20E94DF0B82E077 +:100C400018C0CC33D04739F6F8018281882331F0BF +:100C50001092520180E20E942E0C0DC08091520130 +:100C6000811106C087E20E940C0B87E20E94DF0B15 +:100C700080E20E94350C80E0DF91CF911F910F91AF +:100C800008950C94960308950C9443060C9444061E +:100C900026E0729FF001112444E5849FE00DF11DD0 +:100CA0001124E60FF11DEE0FFF1FE154FE4F859159 +:100CB00094910E94EA07811560E49607B0F58115CA +:100CC00070E3970708F0E6C0803E9105D8F4803CB9 +:100CD000910508F06CC0883A910578F4853A910541 +:100CE00008F06BC08130910509F460C108F417C1A8 +:100CF0008430910508F05AC112C18D3B910508F46A +:100D000067C00DC18F3F910509F048F4803F910500 +:100D100008F0B5C0883E910508F448C100C18115AE +:100D200020E2920708F0ADC00895811543E59407CD +:100D300090F4811562E5960708F0D0C0811571E541 +:100D4000970708F0C6C0811520E5920708F0A5C0F6 +:100D50009F70906A0895811545E59407D8F4811530 +:100D600064E5960708F0D0C0482F4695469570E296 +:100D7000479FA00111248370992721E030E0B90139 +:100D800002C0660F771F8A95E2F7CB01842B952B63 +:100D90009A680895811576E5970708F4BAC09C0112 +:100DA00030562115304108F0BAC09F70B6C0FC0122 +:100DB000EE0FFF1FE55CFF4F6AC0853A910509F40D +:100DC000B1C0863A910509F0B0C082E890E4089578 +:100DD000883A910509F4ACC0893A910509F4ABC091 +:100DE0008A3A910509F4AAC08B3A910509F4A9C081 +:100DF0008C3A910509F4A8C08B3B910509F4A7C072 +:100E00008C3B910509F4A6C08D3A910509F4A5C063 +:100E1000803B910509F4A4C08E3A910509F4A3C062 +:100E20008F3A910509F4A2C0813B910509F4A1C054 +:100E3000823B910509F4A0C0833B910509F49FC052 +:100E4000843B910509F49EC0853B910509F49DC042 +:100E5000863B910509F49CC0873B910509F49BC032 +:100E6000883B910509F49AC0893B910509F499C022 +:100E70008A3B910509F498C080E094E40895906558 +:100E80000895FC01FF70EE0FFF1FE554FE4F8591A2 +:100E9000949108959927906C0895482F437021E00C +:100EA00030E002C0220F331F4A95E2F73C68AC01E4 +:100EB00064E0569547956A95E1F74370342B8F703F +:100EC0008695869560E2869FC0011124822B932B24 +:100ED0000895982F8827816F906A0895482F469526 +:100EE000469570E2479FA00111248370992721E065 +:100EF00030E0B90102C0660F771F8A95E2F7CB0197 +:100F0000842B952B9C680895982F8827846F906A6E +:100F100008958F719927982F88279062089580E00F +:100F200090E0089581E890E4089583E890E40895BE +:100F300082EE94E4089589EE94E408958AEE94E4B0 +:100F4000089585EB94E4089586EB94E4089583EB8B +:100F500094E4089584EB94E4089587EB94E4089571 +:100F60008CEC94E408958DEC94E4089583E895E482 +:100F700008958AE895E4089582E995E4089584E95E +:100F800095E4089581E296E4089583E296E4089555 +:100F900084E296E4089585E296E4089586E296E474 +:100FA000089587E296E408958AE296E40895089504 +:100FB00096E0799FF001112494E5899FE00DF11DE1 +:100FC0001124E60FF11DEE0FFF1FE154FE4F859136 +:100FD000949108958238910549F1B0F481339105D7 +:100FE00009F458C048F48932910509F44EC08A3298 +:100FF000910509F454C008958533910509F440C062 +:101000008933910599F00895833E910529F138F4CB +:10101000803E910591F0823E9105A1F00895863EB3 +:101020009105F9F0873E910531F108952091F20183 +:1010300020FD3AC021FD38C008958091F20180FD65 +:1010400035C032C08091F20182FF32C08091F2013E +:1010500084FD30C083EE39C08091F20182FD28C04A +:10106000F5CF8091F20183FF27C08091F20184FDCA +:1010700021C087EE2AC08091F20183FD1DC0F5CF0B +:101080008091F20185FD1AC01BC08091F20185FD9F +:1010900017C014C08091F20186FD14C015C0809164 +:1010A000F20186FD11C00EC080EE0FC089E30DC0B5 +:1010B00082EE0BC080E009C086EE07C089E205C061 +:1010C00085E303C08AE201C081E390E008950895BA +:1010D0000F931F93CF93FB012281211102C0C1E026 +:1010E00041C08C01C0916001C11125C0843190477D +:1010F000B1F70E94670881E0809360010E94DE15CD +:1011000090935F0180935E011092530110925501FC +:1011100010925401109257011092560110925901E9 +:101120001092580110925B0110925A0110925D01C9 +:1011300010925C0117C080915E0190915F010E9446 +:10114000EA15883C910558F690915301E92FF0E09B +:10115000EE0FFF1FEC5AFE4F118300839F5F9093A9 +:101160005301C0E08C2FCF911F910F910895569895 +:101170005E9825982D9826982E9827982F988FEF6F +:1011800090E0909389008093880090938B008093E7 +:101190008A0090938D0080938C00259A2D9A2FEFD2 +:1011A00080E792E0215080409040E1F700C00000CD +:1011B000269A2E9A2FEF80E792E0215080409040AF +:1011C000E1F700C00000279A2F9A2FEF80E792E006 +:1011D000215080409040E1F700C0000025982D98F4 +:1011E0002FEF80E792E0215080409040E1F700C06F +:1011F000000026982E982FEF80E792E02150804043 +:101200009040E1F700C0000027982F9856985E980C +:1012100025982D9826982E9827982F98089589EA32 +:101220008093800089E08093810024982C983F98D7 +:101230008AB18F748AB96E98479A8BB1806B8BB9DB +:10124000769A0E94B7080C94E30480E2809301012F +:101250008091610181110EC00E941C0381E0809386 +:1012600061012FEF83ED90E3215080409040E1F742 +:1012700000C0000080E40E942203809301018111DC +:101280002EC00E944C0380930101811128C00E944E +:101290004C0380930101811122C08FE30E944C0313 +:1012A0008093010181111BC00E94440380E40E94CD +:1012B000220380930101811112C08CE00E944C0333 +:1012C0008093010181110BC00E944C0380930101A6 +:1012D000811105C08FE30E944C03809301010E949D +:1012E0004403809101010895282F882339F090E06C +:1012F0002A3010F44D9608950697089587E290E0FD +:101300000895FF920F931F93CF93DF93813020E8CE +:10131000920708F44DC0FB012281222309F448C042 +:10132000EC01DF7780916201813079F050F08230FA +:10133000C1F482EE0E940C0B87E50E940C0B87E53E +:101340000EC082EE0E940C0B0CC080EE0E940C0BB3 +:1013500081EE0E940C0B88E10E940C0B88E10E9438 +:10136000DF0B0CE010E0CE01002E02C096958795B1 +:101370000A94E2F78F700E947409F82E0E940C0BF9 +:101380008F2D0E94DF0B045011090C3FFFEF1F0748 +:1013900051F780916201813029F010F0823041F4E0 +:1013A00082EE04C080EE0E94DF0B81EE0E94DF0B14 +:1013B00081E0DF91CF911F910F91FF90089590935D +:1013C0006801809367010895E0916701F0916801D9 +:1013D000309721F00190F081E02D099480E008958C +:1013E000E0916701F0916801309721F00280F3816C +:1013F000E02D09940895E0916701F091680130971C +:1014000021F00480F581E02D099408952091650173 +:10141000309166018217930771F090936601809373 +:101420006501E0916701F0916801309721F0068035 +:10143000F781E02D099408952091630130916401B2 +:101440008217930771F09093640180936301E09198 +:101450006701F0916801309721F00084F185E02D5B +:101460000994089508950C94320A0E94D5150E949B +:1014700098030C945B16CF92DF92EF92FF920F933A +:101480001F93CF93DF93CDB7DEB72B970FB6F894AA +:10149000DEBF0FBECDBF0E94BF038AE6C82E81E02B +:1014A000D82E00E010E0E02E802F0E94AD04F6015F +:1014B00041916F01F42EF826B1F40F5F1F4F0E30EB +:1014C000110589F78FEF89838A831B820E94DE15BD +:1014D0008160782F9D838C8349815A816B818D81B6 +:1014E0000E94DE0A40C09091CD0191FF04C08B871D +:1014F0000E94B3048B8520E030E04F2D50E0922F06 +:10150000BA01022E02C0759567950A94E2F760FF52 +:1015100024C02E83EF8221E030E0690102C0CC0CB0 +:10152000DD1C9A95E2F790E08C219D21892B09F42E +:1015300020E028870E94DE158160782F9A878987AE +:101540004E815F8168858A850E94DE0AF801E6592E +:10155000FE4F8081C826C08206C02F5F3F4F2630D5 +:10156000310569F6AACF0E94F317109169010E9414 +:10157000E4091817A1F00E94E409809369012B96F1 +:101580000FB6F894DEBF0FBECDBFDF91CF911F9194 +:101590000F91FF90EF90DF90CF900C9446062B9622 +:1015A0000FB6F894DEBF0FBECDBFDF91CF911F9174 +:1015B0000F91FF90EF90DF90CF900895CF93DF933E +:1015C000CDB7DEB72B970FB6F894DEBF0FBECDBFF9 +:1015D0004F83588769877A878B87DE01119686E06B +:1015E000FD0111928A95E9F785E0FE013796019099 +:1015F0000D928A95E1F749815A816B817C818D81B9 +:101600009E810E9432112B960FB6F894DEBF0FBE5A +:10161000CDBFDF91CF910895CF93882309F4CDC03A +:10162000C82F823859F40E94E40981FDC6C089E3BD +:101630000E940C140E94D91489E30CC0833879F4F9 +:101640000E94E40980FDB9C083E50E940C140E9449 +:10165000D91483E50E944E14CF910C94D914843888 +:1016600059F40E94E40982FDA8C087E40E940C148A +:101670000E94D91487E4EECF8CEF8C0F813A48F4A6 +:101680008C2F0E943D1A811198C08C2F0E940C143F +:10169000E3CF80E28C0F883048F4C77081E001C04E +:1016A000880FCA95EAF70E949214D6CF8BE58C0F6B +:1016B000833078F4C53A29F0C63A31F083E890E0F7 +:1016C00005C081E890E002C082E890E0CF910C94E0 +:1016D000060A88E58C0F853108F06FC0C83A61F1C1 +:1016E000C93A69F1CA3A71F1CB3A79F1CC3A81F150 +:1016F000CB3B89F1CC3B91F1CD3A99F1C03BA1F1C3 +:10170000CE3AA9F1CF3AB1F1C13BB9F1C23BC1F137 +:10171000C33BC9F1C43BD1F1C53BD9F1C63BE1F1B3 +:10172000C73BE9F1C83BF1F1C93BF9F1CA3B09F408 +:101730003FC080E090E03EC082EE90E03BC089EE8A +:1017400090E038C08AEE90E035C085EB90E032C082 +:1017500086EB90E02FC083EB90E02CC084EB90E010 +:1017600029C087EB90E026C08CEC90E023C08DEC84 +:1017700090E020C083E891E01DC08AE891E01AC0A3 +:1017800082E991E017C084E991E014C081E292E01F +:1017900011C083E292E00EC084E292E00BC085E2C9 +:1017A00092E008C086E292E005C087E292E002C0C3 +:1017B0008AE292E0CF910C941C0ACF91089588237D +:1017C00009F44BC0823859F40E94E40981FF45C0F6 +:1017D00089E30E940C140E94D91489E30CC0833859 +:1017E00071F40E94E40980FF38C083E50E940C1464 +:1017F0000E94D91483E50E944E140C94D9148438A5 +:1018000059F40E94E40982FF28C087E40E940C1466 +:101810000E94D91487E4EFCF9CEF980F913A58F3C8 +:1018200090E2980F983050F4877091E001C0990FC2 +:101830008A95EAF7892F0E949814DFCF9BE5980FCD +:10184000933020F480E090E00C94060A885A8531A9 +:1018500020F480E090E00C941C0A0895882321F085 +:101860000E9492140C94D9140895882321F00E94A8 +:1018700098140C94D91408957F928F929F92AF92EE +:10188000BF92CF92DF92EF92FF920F931F93CF936D +:10189000DF931F92CDB7DEB77C01C62E772EFC01F9 +:1018A000058102950F70128111110E94AF140E94E0 +:1018B0000514882379F0112369F080E28C0D8830BB +:1018C00048F082E00E94EE130E94051491E0D82EA9 +:1018D000D92601C0D12CE72DE295EF70F0E0EA5A4D +:1018E000FF4F0C947F23872D807F072D0F70882357 +:1018F00011F00295007F112389F0002309F490C1B3 +:1019000080E28C0D883020F4802F0E94921403C056 +:10191000802F0E94A2140E94D91482C18C2D0E9493 +:10192000DF0B002309F495C180E28C0D883020F490 +:10193000802F0E94981403C0802F0E94A8140E9438 +:10194000D91487C1972D907F872D8F70903211F019 +:101950008295807FCC2021F0F1E0CF16B1F01EC03F +:10196000112349F0002309F414C1013009F011C119 +:101970000E94C2146EC1002319F0013009F469C13C +:1019800089830E94C51489810AC1112321F0023084 +:1019900008F05FC1FEC001115CC101C1112321F03B +:1019A000002309F4F6C03CC1002309F4F8C03EC18D +:1019B000872D86958695837090E0009719F00197A2 +:1019C00061F047C1112321F08C2D972D937002C037 +:1019D00080E090E00E94060A3CC1112321F08C2D8A +:1019E000972D937002C080E090E00E941C0A31C1E4 +:1019F0008C2D112319F00E94FB1602C00E94631760 +:101A00000E94E81726C1872D837009F052C011117A +:101A100020C18C2D829586958770880F880F9C2D0C +:101A20009F70892E912CA12CB12C082E04C0880CFB +:101A3000991CAA1CBB1C0A94D2F7C4FE14C00FE068 +:101A400010E020E030E0B901A80104C0440F551FA8 +:101A5000661F771F8A95D2F7CB01BA016095709502 +:101A60008095909503C060E070E0CB01272D26950E +:101A70002695237030E02230310569F0233031059E +:101A800089F0682979298A299B292130310571F04B +:101A90000E947A12DEC0682979298A299B290E942E +:101AA0009612D7C00E947A12C501B4010E945E123C +:101AB000D0C0112319F0872D817001C0869588232D +:101AC00009F4C7C08C2D829586958770880F880F82 +:101AD0009C2D9F70892E912CA12CB12C082E04C016 +:101AE000880C991CAA1CBB1C0A94D2F7C4FE14C013 +:101AF0000FE010E020E030E0B901A80104C0440F7D +:101B0000551F661F771F8A95D2F7CB01BA016095E2 +:101B100070958095909503C060E070E0CB01272D13 +:101B2000269526952370422F50E04230510569F0EA +:101B30004330510589F0682979298A299B29413048 +:101B4000510571F00E94541384C0682979298A29AB +:101B50009B290E9470137DC00E945413C501B401DB +:101B60000E94381376C08C2D90E0FC01E05EF109F4 +:101B7000E531F10508F050C0EA59FF4F0C947F237E +:101B80000C2D0F70872D8F71112331F00E94D1120F +:101B9000802F0E942E0C5DC00E94F212802F0E94A6 +:101BA000350C57C0112339F0011153C0872D8F71A7 +:101BB0000E9417134EC0023008F04BC0F7CF11231C +:101BC00039F0872D8F710E94D11243C01123C9F3C0 +:101BD000872D8F710E94F2123CC0112329F0872DAE +:101BE0008F710E94BC1235C00E94B21232C0112304 +:101BF00051F0172D1F71812F0E94D11263E0812FA8 +:101C00000E94E51326C081E00E94EE13023008F125 +:101C100082E00E94EE131DC0112331F0002389F2EF +:101C20008C2D0E940C0B15C0002391F28C2D0E946C +:101C3000DF0B0FC0472D4F706C2DC7010E94B404FD +:101C40000E94D61106C0472D4F706C2DC7010E940F +:101C5000D707DD20F9F00E94E11380FD1BC0F701DA +:101C600012820E94DB130E94D112C7010E94590EFA +:101C70000E94DB130F90DF91CF911F910F91FF9086 +:101C8000EF90DF90CF90BF90AF909F908F907F901C +:101C90000C94F2120F90DF91CF911F910F91FF9052 +:101CA000EF90DF90CF90BF90AF909F908F907F90FC +:101CB00008950F931F93CF93DF93EC01888199814F +:101CC0002B813C81232BB9F09F3F11F48F3F99F07A +:101CD000CE010E941405882371F0688179818A8180 +:101CE0000E94D7138C010E948C130E945312B801DA +:101CF000CE010E943C0CDF91CF911F910F9108956E +:101D00000E94AF140E94BF140E9484140E94D91430 +:101D10000E9499180E94E81780E090E00E94060A4D +:101D200080E090E00C941C0A0E949F140C94800E9A +:101D30000E94CC13292F22952F7030E02C303105D2 +:101D40004CF42A3031056CF422503109223031052F +:101D5000A8F407C02C30310569F02F30310551F05F +:101D60000DC0803F69F018F4803E40F409C0843F04 +:101D700029F406C093FB882780F9089580E0089530 +:101D800081E00895CF93DF9300D000D01F92CDB7AC +:101D9000DEB70F900F900F900F900F90DF91CF91C3 +:101DA0000895CF93DF9300D000D000D0CDB7DEB739 +:101DB00026960FB6F894DEBF0FBECDBFDF91CF9150 +:101DC00008951F93CF93DF93C091780116E080911F +:101DD0007901C81799F0D0E01C9FF0011D9FF00D0C +:101DE0001124E658FE4F40815181628173818481C4 +:101DF00095810E94D10E2196C770E9CFDF91CF91D6 +:101E00001F9108954091AA015091AB016091AC01DE +:101E10007091AD018091AE019091AF010C94D10E03 +:101E20008091AF0182958F7009F054C08091AC0110 +:101E3000882309F44FC080917801A09179016091C5 +:101E4000AA017091AB014091AD015091AE01B6E095 +:101E50008A1709F43FC090E041155105C1F17F3F59 +:101E600011F46F3FA1F1B89FF001B99FF00D11245B +:101E7000E658FE4F218172132AC02081621327C0C9 +:101E80002281211124C0238134812417350710F4C5 +:101E900021503109241B350B283C3105C0F4209119 +:101EA000AF012F7020612093AF0126E0289FF00141 +:101EB000299FF00D1124E158FE4F80818F708061C1 +:101EC00080838AEA91E00E94590E0C94E10E0196FB +:101ED0008770BECF0895CF92DF92EF92FF920F935B +:101EE0001F93CF93DF93CDB7DEB762970FB6F89409 +:101EF000DEBF0FBECDBF8C0185E0F801DE011D966F +:101F000001900D928A95E1F7D8014C9111965C9160 +:101F1000119712966C9112971396CD90DC901497AE +:101F20003091AA017091AB018091AD019091AE0109 +:101F3000009709F46BC17F3F19F43F3F09F466C174 +:101F4000E090AC01EE2009F4C0C02091AF01C816AA +:101F5000D90628F0F601E81BF90BCF0104C08095E3 +:101F600090958C0D9D1DFF24F394883C910578F08D +:101F7000F12C207F09F0C6C07C2DD98AC88A8989B6 +:101F80000E94C20E8AEA91E00E94590EB1C0822FCF +:101F9000807F09F046C0751314C0341312C061115C +:101FA00010C02F7020612093AF010E94020F8AEAB7 +:101FB00091E00E94590E8091AF01D80115968C9343 +:101FC0002EC0CD2819F15F3F11F44F3FF9F0F62EE6 +:101FD00061111CC0809178012091790136E082174F +:101FE00009F45AC090E0389FF001399FF00D112498 +:101FF000E658FE4F7181571306C07081471303C026 +:102000007281711103C001968770E9CFF62E6623A5 +:1020100009F418C18091AF0181608093AF01F12C68 +:1020200011C1751308C0341306C0611104C080913A +:10203000AF01D801C3C04D875E878D859E856A8BB1 +:102040000E94980E6A898823E1F16623D1F12091DC +:10205000AF01822F82958F7090E0029774F080918B +:10206000AA019091AB0198878F831986DB86CA8677 +:102070002C87CE0107960E94590E86E0F801AAEA45 +:10208000B1E001900D928A95E1F70E94100F0E9435 +:10209000020FFF24F394D6C04D875E878D859E8501 +:1020A0000E94CC13292F22952F7030E02230310569 +:1020B0000CF0BCC09F7009F0B6C0805E883008F498 +:1020C000C1C0C8010E94590EE4CFC816D90608F451 +:1020D00053C0F601E81BF90BCF01883C910508F4C9 +:1020E00050C0F12C7C2DD98AC88A89890E94C20EE1 +:1020F000EAEAF1E086E0DF011D928A95E9F70E94A5 +:10210000020FA0C0751314C0341312C0611110C0A7 +:102110008091AF01F8018583C8010E94590E86E0C5 +:10212000EAEAF1E0DF011D928A95E9F7FE2C8AC008 +:102130004D875E878D859E856A8B0E94980E6A8981 +:10214000882309F4BECF662309F4BBCF2091AF01E9 +:10215000822F82958F7090E002970CF48ECF809141 +:10216000AA019091AB019A8389831B82DD82CC8284 +:102170002E83CE0101967FCF809590958C0D9D1D6D +:10218000ACCFF62E662309F49CCF75132EC0341302 +:102190002CC02091AF0120FD1FC0822F82958F702F +:1021A000D9F0D80115962C9315978F3049F08F5F91 +:1021B000982F9295907F822F8F70892B15968C93F4 +:1021C000C8010E94590E86E0F801AAEAB1E0019028 +:1021D0000D928A95E1F793CF86E0F801AAEAB1E083 +:1021E00001900D928A95E1F72DC04D875E878D8510 +:1021F0009E850E94980E811140CF8091AF01816031 +:102200008093AF01C8010E94590E1CC0662309F4D7 +:1022100058CF4D875E878D859E850E94980E8823B6 +:1022200009F44FCF2ACF811148CF0CC0243031059B +:102230000CF047CF9F7009F440CFF8019581907F53 +:1022400009F03BCF8F2D62960FB6F894DEBF0FBE1C +:10225000CDBFDF91CF911F910F91FF90EF90DF9055 +:10226000CF9008951F93CF93DF93CDB7DEB72C9710 +:102270000FB6F894DEBF0FBECDBF4F835887698776 +:102280007A878B879C87CE0107960E946B0F8823E5 +:1022900069F08F8198852A853B85232BF1F19F3F3B +:1022A00009F063C08F3F09F060C037C086E0FE01CF +:1022B0003796DE01119601900D928A95E1F76F81B4 +:1022C0007885EA85FB85309741F17F3F11F46F3FB8 +:1022D00021F12091790130E0C90101968770992799 +:1022E0004091780150E08417950709F447C069834D +:1022F0007A83FD83EC8396E0929FD001939FB00D8B +:102300001124A658BE4FFE01319601900D929A9568 +:10231000E1F7809379010E94E10E16E08091780147 +:10232000909179018917C1F1189FC0011124865835 +:102330009E4F0E946B0F882379F1E09178011E9FD8 +:10234000F0011124E658FE4F408151816281738172 +:10235000848195810E94D10E8091780190E0019650 +:102360008770992780937801D9CF4F8158856985E7 +:102370007A858B859C850E94D10ECFCF0E94940ECA +:102380001092790110927801EAEAF1E086E0DF012B +:102390001D928A95E9F7C1CF2C960FB6F894DEBF4F +:1023A0000FBECDBFDF91CF911F910895EF92FF92A5 +:1023B0000F931F93CF93DF938C01892B09F46CC08B +:1023C000F12CEE24E394E8012196F80184918437FE +:1023D00040F4843008F051C0813081F0823019F12E +:1023E0005BC0853709F444C0A8F19CE7980F90378B +:1023F00008F052C08F770E94DF0B41C00E5F1F4F65 +:10240000FE01C49180E28C0F883048F4C7708E2D95 +:1024100001C0880FCA95EAF70E94B21414C08C2F2D +:102420000E940C0B2DC00E5F1F4FFE01C49180E275 +:102430008C0F883058F4C7708E2D01C0880FCA9554 +:10244000EAF70E94B8140E94D9141AC08C2F0E9477 +:10245000DF0B16C00E5F1F4FFE01C491CC2381F02D +:102460008FE99FE00197F1F700C00000C150F6CF5F +:102470000E5F1F4FFE01F49003C00E940C0B8E01F3 +:102480008F2D882309F49FCFEFE9FFE03197F1F713 +:1024900000C000008150F5CFDF91CF911F910F91C7 +:1024A000FF90EF90089508956093B4017093B50183 +:1024B0008093B6019093B7010C94800E0F931F93F5 +:1024C0000091B4011091B5012091B6013091B7018E +:1024D000DC01CB01802B912BA22BB32B8093B40179 +:1024E0009093B501A093B601B093B7011F910F91DE +:1024F0000C94800E0F931F930091B4011091B501BD +:102500002091B6013091B701DC01CB0180239123EA +:10251000A223B3238093B4019093B501A093B60195 +:10252000B093B7011F910F910C94800E0F931F93DE +:102530000091B4011091B5012091B6013091B7011D +:10254000DC01CB0180279127A227B3278093B40118 +:102550009093B501A093B601B093B7011F910F916D +:102560000C94800E1092B0011092B1011092B20141 +:102570001092B3010C94800E41E050E060E070E0F6 +:1025800004C0440F551F661F771F8A95D2F74093EA +:10259000B0015093B1016093B2017093B3010C94F8 +:1025A000800E41E050E060E070E004C0440F551F31 +:1025B000661F771F8A95D2F78091B0019091B10183 +:1025C000A091B201B091B301482B592B6A2B7B2B00 +:1025D0004093B0015093B1016093B2017093B30185 +:1025E0000C94800E41E050E060E070E004C0440FC5 +:1025F000551F661F771F8A95D2F7409550956095B5 +:1026000070958091B0019091B101A091B201B0910B +:10261000B301482359236A237B234093B00150938D +:10262000B1016093B2017093B3010C94800E41E04C +:1026300050E060E070E004C0440F551F661F771F34 +:102640008A95D2F78091B0019091B101A091B20129 +:10265000B091B301482759276A277B274093B001DF +:102660005093B1016093B2017093B3010C94800E4A +:102670000F931F930091B0011091B1012091B2010D +:102680003091B301DC01CB01802B912BA22BB32B1A +:102690008093B0019093B101A093B201B093B301C4 +:1026A0001F910F910C94800E0F931F930091B00116 +:1026B0001091B1012091B2013091B301DC01CB0145 +:1026C00080239123A223B3238093B0019093B1017F +:1026D000A093B201B093B3011F910F910C94800E9F +:1026E0000F931F930091B0011091B1012091B2019D +:1026F0003091B301DC01CB0180279127A227B327BA +:102700008093B0019093B101A093B201B093B30153 +:102710001F910F910C94800E0895CF92DF92EF924B +:10272000FF920F931F93CF93DF938C01C090B4015E +:10273000D090B501E090B601F090B7018091B00162 +:102740009091B101A091B201B091B301C82AD92AE8 +:10275000EA2AFB2ACFE1D0E0D701C6010C2E04C043 +:10276000B695A795979587950A94D2F780FF06C0EE +:10277000B8018C2F0E944806019721F4219760F739 +:1027800080E001C08C2FDF91CF911F910F91FF90BE +:10279000EF90DF90CF900895CF93DF93EC010E94EC +:1027A0008D13BE010E944806DF91CF910895CB01A1 +:1027B0000E94CC1308958091B801859585958595E3 +:1027C00008958091B8018770089598E0899F9001DD +:1027D0001124262B2093B8010C94D1122091B8011A +:1027E000809582238093B801982F977069F430E028 +:1027F000482F552747FD50952417350729F0859513 +:10280000859585950C94F21208959091B801977072 +:1028100081E009F480E0089590911501992321F059 +:1028200090910201911109C020910301309104019E +:10283000F90132969FEF40E01FC0982F969596952C +:1028400096959F3050F5E0910301F0910401E90F56 +:10285000F11D877021E030E0A90102C0440F551F2F +:102860008A95E2F7CA019181892B818308959F3F60 +:1028700039F04F5F4E3041F051915813F8CF0DC0F1 +:102880005111F7CF942FF5CF9F3F39F0F901E90FA0 +:10289000F11D97FDFA958283089508959091150191 +:1028A000992321F090910201911109C02091030117 +:1028B00030910401F9013296205F3F4F1FC0982FDD +:1028C0009695969596959F30F0F4E0910301F091DE +:1028D0000401E90FF11D877021E030E0A90102C079 +:1028E000440F551F8A95E2F7CA018095918189238B +:1028F000818308953196E217F30729F090819813A8 +:10290000F9CF1082F7CF089581E090E0E0910301C4 +:10291000F0910401E80FF91F1082019680319105B2 +:10292000A9F708959091CC01892B8093CC0108954B +:1029300080959091CC0189238093CC0108951092C9 +:10294000CC0108959091CB01892B8093CB01089500 +:1029500080959091CB0189238093CB0108951092AB +:10296000CB0108959091CA01892B8093CA010895E3 +:1029700080959091CA0189238093CA01089510928D +:10298000CA0108958093B90108951092B90108957C +:102990008091030190910401FC0131969C01205F1C +:1029A0003F4F80E0919191118F5FE217F307D1F7CC +:1029B0000895E0910301F09104018091CC0180839E +:1029C000E0910301F091040190818091CB01892B6A +:1029D0008083E0910301F091040190818091CA010C +:1029E000892B80838091B901882361F0E0910301F4 +:1029F000F09104019081892B80830E94C814811179 +:102A00001092B90180910301909104010C94F00996 +:102A1000CF92DF92EF92FF926C01EE24FF24C1145B +:102A2000D104E104F10421F0C701B60120E101C0A5 +:102A300020E0C72ED82EE92EFF24C114D104E104D2 +:102A4000F10419F0285FC701B6016B017C0154E065 +:102A5000F694E794D794C7945A95D1F7C114D1044A +:102A6000E104F10419F02C5FC701B6016B017C0190 +:102A700042E0F694E794D794C7944A95D1F7C114ED +:102A8000D104E104F10419F02E5FC701B601DC01A5 +:102A9000CB01B695A79597958795892B8A2B8B2B7C +:102AA00009F02F5F822FFF90EF90DF90CF90089575 +:102AB0006DEE7EEF80E090E00E94B82360E082E05F +:102AC00090E00E94A72360E083E090E00E94A723AB +:102AD00060E084E090E00E94A72360E085E090E061 +:102AE0000C94A72380E090E00E94A12321E08D3E7A +:102AF0009E4F09F020E0822F089582E090E00C9430 +:102B0000992383E090E00C94992384E090E00C9466 +:102B10009923682F84E090E00C94A7238091F8011A +:102B2000843039F11092CE0120E488E190E00FB6B4 +:102B3000F894A895809360000FBE2093600080E019 +:102B40000E94460683B7817F846083BF83B781601C +:102B500083BF7894889583B78E7F83BF0FB6F89430 +:102B6000A895809160008861809360001092600059 +:102B70000FBE08950895CF930E94AC030E94BF0337 +:102B80000E94BA15C0E08C2F0E94AD04811104C0D0 +:102B9000CF5FCE30C1F701C081E0CF9108950E9490 +:102BA000940E0E94E4090C94460682E084BD93E0F2 +:102BB00095BD9AEF97BD80936E0008952FB7F89456 +:102BC0008091CF019091D001A091D101B091D2011B +:102BD0002FBF0895CF92DF92EF92FF920F931F9332 +:102BE0002FB7F8944091CF015091D0016091D1015D +:102BF0007091D2012FBF6A017B01EE24FF248C016A +:102C000020E030E0C016D106E206F30610F4415091 +:102C100051099A01281B390BC9011F910F91FF908F +:102C2000EF90DF90CF9008951F920F920FB60F9202 +:102C300011248F939F93AF93BF938091CF01909175 +:102C4000D001A091D101B091D2010196A11DB11D79 +:102C50008093CF019093D001A093D101B093D20182 +:102C6000BF91AF919F918F910F900FBE0F901F90CA +:102C700018950E943C1FF8942FEF87EA91E62150A7 +:102C800080409040E1F700C0000087E090EBDC015D +:102C90008093010290930202A0930302B093040276 +:102CA0009CE088E10FB6F894A895809360000FBE71 +:102CB00090936000FFCF0E947215811102C00E94A4 +:102CC00058150E947D158093CD010E94851590E0D6 +:102CD0009093F3018093F20187FB882780F980931A +:102CE00002010E948115682F70E080E090E00C9452 +:102CF00054128091D50180FF0BC06091080185E0DE +:102D0000689FB001112475956795759567952BC0DF +:102D100081FF09C06091080185E0689FB00111241E +:102D20007595679520C082FF07C06091080185E016 +:102D3000689FB001112417C09091D6019923D1F05A +:102D400060910701961788F72091080185E0289F78 +:102D500090011124929FA001939F500D112470E0C7 +:102D6000CA010E946B236038710540F4611571053A +:102D700039F002C065E070E0862F08958FE708956E +:102D800081E008958091D50180FF08C0609106011F +:102D900070E0759567957595679521C081FF06C0B0 +:102DA0006091060170E07595679519C082FF04C0B7 +:102DB0006091060170E010C09091D6019923C1F096 +:102DC000609105019617A0F780910601899FC001C7 +:102DD000112470E00E946B236038710528F461159E +:102DE000710521F0862F08958FE7089581E00895F9 +:102DF00061E070E0F4CF803F21F40E947916819564 +:102E000004C0813F29F40E9479168093D901089566 +:102E1000823F21F40E947916819504C0833F29F4F2 +:102E20000E9479168093D8010895893F19F40E9471 +:102E3000C21605C08A3F31F40E94C2168195809364 +:102E4000DA0108958B3F21F40E94C216819504C0D7 +:102E50008C3F29F40E94C2168093DB010895843FC1 +:102E600021F48091D701816017C0853F21F48091C2 +:102E7000D701826011C0863F21F48091D701846020 +:102E80000BC0873F21F48091D701886005C0883F3F +:102E900031F48091D70180618093D70108958D3FEF +:102EA00021F48091D50181600BC08E3F21F4809187 +:102EB000D501826005C08F3F29F48091D5018460DF +:102EC0008093D5010895803F39F48091D90187FF1F +:102ED0006CC01092D90169C0813F29F48091D90159 +:102EE0001816BCF362C09091D801823F29F497FF75 +:102EF0005CC01092D80159C0833F19F41916CCF365 +:102F000054C0893F41F48091DA0118160CF04DC08D +:102F10001092DA014AC08A3F29F48091DA0187FFD2 +:102F200044C0F6CF8B3F39F48091DB0187FF3DC071 +:102F30001092DB013AC08C3F29F48091DB01181616 +:102F4000BCF333C0843F21F48091D7018E7F17C03A +:102F5000853F21F48091D7018D7F11C0863F21F4F8 +:102F60008091D7018B7F0BC0873F21F48091D701DF +:102F7000877F05C0883F31F48091D7018F7E809391 +:102F8000D70113C08D3F21F48091D5018E7F0BC0F6 +:102F90008E3F21F48091D5018D7F05C08F3F29F4AC +:102FA0008091D5018B7F8093D5018091D8018111CB +:102FB0000EC08091D90181110AC08091DA0181117E +:102FC00006C08091DB01811102C01092D6010895E4 +:102FD00087ED91E00E94FB090E94DE159093D401D9 +:102FE0008093D30108951F93CF93DF938091D301F2 +:102FF0009091D4010E94EA15AC019091D6019923D9 +:1030000021F02091090130E006C020910A018AE0F8 +:10301000289F900111244217530708F486C080911D +:10302000D801C091D901D091DA011091DB01811151 +:1030300007C0C11176C0D11174C0111172C075C022 +:103040009F3F19F09F5F9093D601181624F40E94B9 +:1030500079168093D8018091D80187FF05C00E941E +:10306000791681958093D8011C1624F40E94791654 +:103070008093D9018091D90187FF05C00E947916FC +:1030800081958093D9016091D801662339F1C0916F +:10309000D901CC2319F1772767FD7095872F972FDA +:1030A0000E94722223E333E343E35FE30E94D622CC +:1030B0000E943A226093D8016C2F772767FD7095A4 +:1030C000872F972F0E94722223E333E343E35FE3CA +:1030D0000E94D6220E943A226093D9011D1624F440 +:1030E0000E94C2168093DA018091DA0187FF05C041 +:1030F0000E94C21681958093DA01111624F40E9471 +:10310000C2168093DB018091DB0187FF05C00E941E +:10311000C21681958093DB01DF91CF911F910C94B2 +:10312000E8179F3F09F08ECF96CFDF91CF911F9187 +:103130000895E7EDF1E085E0DF011D928A95E9F75A +:103140001092D6011092D5010895833081F128F4B0 +:10315000813059F08230D1F00895853009F449C0AA +:10316000B8F1863009F456C0089580910A01262FDF +:1031700030E0280F311D2F3F310524F4680F609394 +:103180000A0108958FEF80930A0108958091090143 +:10319000262F30E0280F311D2F3F310524F4680F12 +:1031A0006093090108958FEF80930901089580913C +:1031B0000801262F30E0280F311D2F3F310524F460 +:1031C000680F6093080108958FEF809308010895B8 +:1031D00080910701262F30E0280F311D2F3F310548 +:1031E00024F4680F6093070108958FEF809307011F +:1031F000089580910601262F30E0280F311D2F3FC2 +:10320000310524F4680F6093060108958FEF8093D1 +:103210000601089580910501262F30E0280F311D09 +:103220002F3F310524F4680F6093050108958FEF57 +:10323000809305010895833011F128F4813049F01D +:10324000823091F00895853081F120F18630C1F10E +:10325000089580910A01681720F4861B80930A0163 +:10326000089510920A01089580910901681720F4C9 +:10327000861B809309010895109209010895809199 +:103280000801681720F4861B8093080108951092A6 +:103290000801089580910701681720F4861B809328 +:1032A000070108951092070108958091060168179B +:1032B00020F4861B8093060108951092060108955C +:1032C00080910501681720F4861B809305010895FD +:1032D0001092050108950F931F938D3109F471C069 +:1032E00008F045C0803109F485C008F5873009F43D +:1032F0006FC068F4863009F0ADC08091CD01817F48 +:103300008E7F8093CD0181E08093DD01A4C08B305E +:1033100009F49EC08E3009F09DC08091CD0182FBE2 +:10332000222720F991E0922790FB82F96CC0863128 +:1033300009F48EC060F4813109F08CC00E94940EB3 +:103340009091020181E089278093020181C0893137 +:1033500009F47EC08B3109F07DC08091CD0181FBE5 +:10336000222720F991E0922790FB81F94CC0853308 +:1033700009F466C048F4873209F462C008F44FC00B +:10338000893209F45DC066C0833438F48A3308F0AA +:1033900044C0883309F45CC05DC0833409F450C074 +:1033A000883409F057C00E94940E0FEF13ED20E30C +:1033B000015010402040E1F700C000000E94391683 +:1033C00047C00E94F51A0E94E4090E94460640C0C8 +:1033D0009091CD01892F8095817080FB90F929F023 +:1033E000966098609093CD0136C0997F977F9093B7 +:1033F000CD012EC08091CD0183FB222720F991E0E1 +:10340000922790FB83F98093CD01992309F1809154 +:10341000CD0181608093CD011BC0895301C08D51C6 +:1034200041E050E060E070E08A019B0104C0000FC1 +:10343000111F221F331F8A95D2F7C901B80104C09A +:1034400061E070E080E090E00E9454120E94940ECF +:1034500081E001C080E01F910F91089580E0089500 +:1034600080E008958E518A3030F4E82FF0E0EA5E73 +:10347000FE4F8081089580E00895CF93C82F8091FA +:10348000DD01813079F018F08230E9F186C0E091F9 +:103490000301F09104018081813169F0823209F0E9 +:1034A0007EC009C0E0910301F09104018081813167 +:1034B00011F0823261F48C2F0E942E1A811104C007 +:1034C0008C2F0E946B191DC081E090E01AC08C2FD8 +:1034D0000E94301A811114C0C43179F048F4CB3005 +:1034E00079F0C03109F05FC082E08093DD0108C04F +:1034F000C93219F0C83321F056C01092DD0153C013 +:1035000081E0817052C0C93281F110F5C43169F196 +:10351000A8F4C73009F045C08AE080930A0194E11D +:103520009093090193E0909308018093070188E04C +:103530008093060188E28093050133C082EE8C0FF0 +:10354000863078F58C2F0E94321A8093DC0129C0D6 +:10355000CE34E9F020F4CB3421F56AE013C0C13554 +:1035600079F0C235F1F461E00DC08091DC0188236F +:1035700019F01092DC0115C081E08093DD0115C0C7 +:1035800061E006C08091DC010E94A5180AC06AE0D3 +:103590008091DC010E941B1904C01092DD0180E0C3 +:1035A00004C081E002C080E0ACCFCF910895E1E893 +:1035B000F0E08081886080838081816080838FB724 +:1035C000F89493E09093890090ED909388008FBFDA +:1035D0000895EFE6F0E08081826080830895EFE651 +:1035E000F0E080818D7F80830895EFE6F0E09081A8 +:1035F00082E08927808308951F920F920FB60F9261 +:1036000011242F933F934F935F936F937F938F93E7 +:103610009F93AF93BF93EF93FF938091DE019091BF +:10362000DF0101969093DF018093DE01811103C0D9 +:1036300082E00E944606E091DF01E695E695F0E023 +:10364000E954FC4FE4918091DE018E1303C080E0C9 +:103650000E944606FF91EF91BF91AF919F918F918C +:103660007F916F915F914F913F912F910F900FBE7E +:103670000F901F9018958091F0010895CF93DF93DC +:1036800000D01F92CDB7DEB79C018091F801843045 +:1036900019F593E099833B832A839093E9008FEF98 +:1036A0009091E800815095FD06C095ED9A95F1F74F +:1036B00000008111F5CF8091E80085FF0DC040E04A +:1036C00050E063E070E0CE0101960E94A71D80915A +:1036D000E8008E778093E8000F900F900F90DF91B5 +:1036E000CF910895CF93DF9300D01F92CDB7DEB76F +:1036F0002091F801243021F522E029839B838A83DD +:1037000083E08093E9008FEF9091E800815095FD70 +:1037100006C095ED9A95F1F700008111F5CF8091E3 +:10372000E80085FF0DC040E050E063E070E0CE01AE +:1037300001960E94A71D8091E8008E778093E80093 +:103740000F900F900F90DF91CF9108952091F80185 +:103750002430F1F422E02093E9002FEF3091E800CB +:10376000215035FD06C035ED3A95F1F700002111E5 +:10377000F5CF2091E80025FF0BC040E050E065E068 +:1037800070E00E94A71D8091E8008E778093E8008A +:103790000895CF93DF93EC019091F801943009F0F4 +:1037A00046C0809115018823D9F0809102018823B9 +:1037B000B9F09093E9008FEF9091E800815095FD6A +:1037C00006C095E19A95F1F700008111F5CF80913F +:1037D000E80085FF2CC040E050E060E170E017C0D9 +:1037E00081E08093E9008FEF9091E800815095FD92 +:1037F00006C095ED9A95F1F700008111F5CF809103 +:10380000E80085FF14C040E050E068E070E0CE01C1 +:103810000E94A71D8091E8008E778093E80080E1E8 +:10382000FE01A0EEB1E001900D928A95E1F7DF91E3 +:10383000CF9108958091F701811109C00E943C1F2A +:103840000E94991F8091E20084608093E2000895B5 +:103850001092F701089508950C94E91A0E94CF156B +:103860000E94EF1A0E94E4090C94460642E061ECC3 +:1038700081E00E94B61E42E061EC82E00E94B61E2A +:1038800042E061EC83E00E94B61E42E161EC84E01C +:103890000C94B61E8091FA01833009F455C030F4BF +:1038A000813071F0823009F48EC008958A3009F4B5 +:1038B0007AC08B3009F460C0893009F09CC020C008 +:1038C0008091F901813A09F096C08091E800877FE4 +:1038D0008093E8008091FD019091FE01892B21F4F5 +:1038E00060E180EE91E003C060E080E090E070E095 +:1038F0000E94F21D8091E8008B778093E800089584 +:103900008091F901813209F076C08091FD0190919A +:10391000FE01009719F0039709F06DC08091E8004F +:10392000877F8093E8008091E80082FD05C0809148 +:10393000F8018111F8CF5FC08091F1008093F00110 +:103940008091E8008B7753C08091F901813A09F0AA +:1039500052C08091FD019091FE01892B09F04BC06E +:103960008091E800877F8093E8008091E80080FFE5 +:10397000FCCF8091150136C08091F9018132D9F5D3 +:103980008091FD019091FE01892BA9F58091E800BD +:10399000877F8093E8000E94EB1E8091FB0180935B +:1039A00015010C94940E8091F901813221F58091DA +:1039B000E800877F8093E8000E94EB1E8091FC0165 +:1039C0008093F10108958091F901813AA1F48091E9 +:1039D000E800877F8093E8008091E80080FFFCCFBB +:1039E0008091F1018093F1008091E8008E778093BF +:1039F000E8000C94EB1E089584B7877F84BF0FB650 +:103A0000F894A8958091600088618093600010927E +:103A100060000FBE80E880936100109261000E94F8 +:103A2000330A0E943C1F0E94991F8091E20084602B +:103A30008093E20078940E941F220E94350A8BE056 +:103A400091E00E94DF090E94D71A8091F801853029 +:103A500069F40E948E158091F6018823B1F30E94CB +:103A6000BB15882391F30E94911DEFCF0E943B0A62 +:103A7000ECCF292F332723303105C9F064F42130EE +:103A8000310581F02230310509F043C08DE690E028 +:103A90002BE234E042C021323105F1F0223231050F +:103AA00041F137C082E190E028E934E036C099273F +:103AB0008130910541F08230910541F0892B49F523 +:103AC000E7E2F4E005C0EFE0F4E002C0E7EFF3E086 +:103AD000849190E09F0121C06430D8F4E62FF0E09B +:103AE000EE0FFF1FE45DFE4F2081318189E090E001 +:103AF00014C0643070F470E0FB01EE0FFF1FEC5D4A +:103B0000FE4F20813181FB01E05EFE4F808190E01D +:103B100004C080E090E020E030E0FA0131832083AF +:103B2000089580E189BD82E189BD09B400FEFDCF21 +:103B30008091D8008F7D8093D8008091E0008260D2 +:103B40008093E0008091E00081FDFCCF0895CF924A +:103B5000DF92EF92FF920F931F93CF93DF93EC01CD +:103B60008B016A010E940A1F811133C0C114D10464 +:103B700039F0F60180819181081B190BC80FD91FFC +:103B8000E12CF12C0115110519F18091E80085FD5A +:103B900016C08091E8008E778093E800C114D104AC +:103BA00049F0F60180819181E80EF91EF182E082F0 +:103BB00085E00FC00E940A1F882321F30AC0899163 +:103BC0008093F10001501109FFEFEF1AFF0ADACFDD +:103BD00080E0DF91CF911F910F91FF90EF90DF90E8 +:103BE000CF9008952091FF013091000226173707EA +:103BF00048F06115710539F42091E8002E77209383 +:103C0000E80001C0B90140E061157105A9F12091FA +:103C1000F801222309F443C0253009F442C0209161 +:103C2000E80023FD40C02091E80022FD32C0209131 +:103C3000E80020FFE9CF4091F3002091F20030E04E +:103C4000342BFC01CF016115710559F02830310585 +:103C500040F481918093F100615071092F5F3F4FD3 +:103C6000F1CF41E02830310509F040E02091E80033 +:103C70002E772093E800C8CF4111C9CF0AC08091A8 +:103C8000F801882361F0853061F08091E80083FDC0 +:103C90000AC08091E80082FFF2CF80E0089582E0C0 +:103CA000089583E0089581E008952091FF01309107 +:103CB00000022617370748F06115710539F4209185 +:103CC000E8002E772093E80001C0B901FC0120E054 +:103CD0006115710591F18091F801882309F440C0C4 +:103CE000853009F43FC08091E80083FD3DC080919C +:103CF000E80082FD2FC08091E80080FFE9CF20918D +:103D0000F3008091F20090E0922B6115710559F05B +:103D10008830910540F424912093F1003196615050 +:103D200071090196F2CF21E0089709F020E0809117 +:103D3000E8008E778093E800CBCF2111CCCF0AC06A +:103D40008091F801882361F0853061F08091E8006E +:103D500083FD0AC08091E80082FFF2CF80E00895E1 +:103D600082E0089583E0089581E00895982F9730C8 +:103D700058F59093E900981739F07091EC00209174 +:103D8000ED005091F00003C0242F762F50E021FF6A +:103D900019C03091EB003E7F3093EB003091ED0085 +:103DA0003D7F3093ED003091EB0031603093EB00BC +:103DB0007093EC002093ED005093F0002091EE0002 +:103DC00027FF07C09F5FD3CF8F708093E90081E00A +:103DD000089580E008958091F90187FF11C08091D6 +:103DE000E80082FD05C08091F8018111F8CF11C073 +:103DF0008091E8008B770BC08091F801882349F00F +:103E00008091E80080FFF8CF8091E8008E77809362 +:103E1000E80008952091E4003091E50095E6409196 +:103E2000EC00842F817040FF22C08091E80080FD6B +:103E30001CC08091F801882391F0853091F0809129 +:103E4000EB0085FD10C04091E4005091E500421761 +:103E5000530729F39A01915011F784E0089582E005 +:103E6000089583E0089581E0089580E008954091E9 +:103E7000E80042FFDECF08950E94AA1F0E94B21FF1 +:103E8000E0EEF0E0808181608083E8EDF0E0808109 +:103E90008F77808319BCA7EDB0E08C918E7F8C93D7 +:103EA00080818F7E80831092F70108950F931F9376 +:103EB000CF93DF930E94AA1F0E94B21FC8EDD0E0EB +:103EC00088818F77888388818068888388818F7DC7 +:103ED000888319BC1092F8011092F4011092F60137 +:103EE0001092F50100EE10E0F80180818B7F808355 +:103EF00088818160888342E060E080E00E94B61E95 +:103F0000E1EEF0E080818E7F8083E2EEF0E0808160 +:103F100081608083808188608083F80180818E7FCA +:103F20008083888180618883DF91CF911F910F9179 +:103F30000895E8EDF0E080818F7E8083E7EDF0E08A +:103F400080818160808384E082BF81E08093F7017B +:103F50000C94561FE8EDF0E080818E7F80831092F4 +:103F6000E20008951092DA001092E10008951F9285 +:103F70000F920FB60F9211242F933F934F935F939D +:103F80006F937F938F939F93AF93BF93EF93FF9321 +:103F90008091E10082FF0BC08091E20082FF07C0A8 +:103FA0008091E1008B7F8093E1000E941E2280912E +:103FB000DA0080FF1FC08091D80080FF1BC0809175 +:103FC000DA008E7F8093DA008091D90080FF0DC0E7 +:103FD00080E189BD82E189BD09B400FEFDCF81E0A9 +:103FE0008093F8010E941A1C05C019BC1092F801B8 +:103FF0000E94281C8091E10080FF19C08091E2009E +:1040000080FF15C08091E2008E7F8093E200809156 +:10401000E20080618093E2008091D800806280930A +:10402000D80019BC85E08093F8010E942C1C809177 +:10403000E10084FF30C08091E20084FF2CC080E169 +:1040400089BD82E189BD09B400FEFDCF8091D80011 +:104050008F7D8093D8008091E1008F7E8093E10076 +:104060008091E2008F7E8093E2008091E200816087 +:104070008093E2008091F401882311F084E007C06E +:104080008091E30087FD02C081E001C083E080935E +:10409000F8010E942E1C8091E10083FF29C08091CD +:1040A000E20083FF25C08091E100877F8093E100DB +:1040B00082E08093F8011092F4018091E1008E7FFC +:1040C0008093E1008091E2008E7F8093E2008091F6 +:1040D000E20080618093E20042E060E080E00E94C4 +:1040E000B61E8091F00088608093F0000E942B1C27 +:1040F000FF91EF91BF91AF919F918F917F916F91C0 +:104100005F914F913F912F910F900FBE0F901F9095 +:1041100018951F920F920FB60F9211242F933F9371 +:104120004F935F936F937F938F939F93AF93BF93BF +:10413000CF93DF93EF93FF93C091E900CF7080910D +:10414000EC00D82FD17080FDD0E81092E90080916A +:10415000F000877F8093F00078940E94CD20109229 +:10416000E9008091F00088608093F000CD2BCF7043 +:10417000C093E900FF91EF91DF91CF91BF91AF9193 +:104180009F918F917F916F915F914F913F912F916F +:104190000F900FBE0F901F9018951F93CF93DF9332 +:1041A000CDB7DEB7AA970FB6F894DEBF0FBECDBF6E +:1041B000E9EFF1E088E08E0F9091F10091938E137A +:1041C000FBCF0E944A1C8091E80083FF1FC18091B1 +:1041D000F9019091FA01492F50E04A30510508F059 +:1041E00015C1FA01E558FF4F0C947F23803881F008 +:1041F000823809F00BC18091FD018F708093E90036 +:104200008091EB0085FB882780F91092E90006C0B9 +:104210008091F5019091F601911182609091E800F2 +:10422000977F9093E8008093F1001092F100C8C04E +:10423000282F2D7F09F0EAC0882319F0823061F021 +:10424000E5C08091FB01813009F0E0C0933009F0B6 +:1042500080E08093F6012BC08091FB01811127C083 +:104260008091FD018F7009F4D1C08093E900209105 +:10427000EB0020FF1CC0933021F48091EB008062A2 +:1042800014C09091EB0090619093EB0021E030E03E +:10429000A90102C0440F551F8A95E2F74093EA0036 +:1042A0001092EA008091EB0088608093EB001092FE +:1042B000E9008091E800877F86C08111A7C0109136 +:1042C000FB011F778091E3008078812B8093E300CE +:1042D0008091E800877F8093E8000E94EB1E809128 +:1042E000E80080FFFCCF8091E30080688093E300CA +:1042F000111102C082E001C083E08093F80186C002 +:104300008058823008F082C08091FB019091FC01BE +:104310008C3D53E0950779F583E08A838AE28983AF +:104320004FB7F894DE01139620E03EE051E2E32F10 +:10433000F0E050935700E49120FF03C0E295EF7046 +:104340003F5FEF708E2F90E0EA3010F0C79601C00B +:10435000C0968D939D932F5F243149F74FBF809175 +:10436000E800877F8093E8006AE270E0CE01019662 +:104370000E94F21D14C0AE014F5F5F4F6091FD01BE +:104380000E94391DBC01892B09F440C09091E800BE +:10439000977F9093E80089819A810E94551E8091B1 +:1043A000E8008B778093E80031C0803879F5809100 +:1043B000E800877F8093E8008091F4018093F1000A +:1043C0008091E8008E778093E8000E94EB1E1EC06B +:1043D00081111CC09091FB019230C0F48091E800E3 +:1043E000877F8093E8009093F4010E94EB1E8091F8 +:1043F000F401811106C08091E30087FD02C081E0D5 +:1044000001C084E08093F8010E94361C8091E8008E +:1044100083FF0AC08091E800877F8093E800809145 +:10442000EB0080628093EB00AA960FB6F894DEBF93 +:104430000FBECDBFDF91CF911F9108950895CF9307 +:104440008091F8018823A1F0C091E900CF7090918C +:10445000EC00892F817090FD80E8C82B1092E90054 +:104460008091E80083FD0E94CD20CF70C093E900C9 +:10447000CF9108950E9441226894B1110C94D022EA +:1044800008950E94B52288F09F5798F0B92F992778 +:10449000B751B0F0E1F0660F771F881F991F1AF02F +:1044A000BA95C9F714C0B13091F00E94CF22B1E0A3 +:1044B00008950C94CF22672F782F8827B85F39F0A2 +:1044C000B93FCCF3869577956795B395D9F73EF4C8 +:1044D00090958095709561957F4F8F4F9F4F089570 +:1044E000E89409C097FB3EF490958095709561958E +:1044F0007F4F8F4F9F4F9923A9F0F92F96E9BB2744 +:104500009395F695879577956795B795F111F8CFBF +:10451000FAF4BB0F11F460FF1BC06F5F7F4F8F4F2A +:104520009F4F16C0882311F096E911C0772321F020 +:104530009EE8872F762F05C0662371F096E8862FB8 +:1045400070E060E02AF09A95660F771F881FDAF70F +:10455000880F9695879597F9089557FD9058440FC1 +:10456000551F59F05F3F71F04795880F97FB991FD2 +:1045700061F09F3F79F0879508951216130614068F +:10458000551FF2CF4695F1DF08C01616170618061C +:10459000991FF1CF86957105610508940895E894F7 +:1045A000BB2766277727CB0197F908950E94E92258 +:1045B0000C945A230E944C2338F00E94532320F07D +:1045C000952311F00C9443230C94492311240C944B +:1045D000D0220E94AD2270F3959FC1F3950F50E059 +:1045E000551F629FF001729FBB27F00DB11D639FA5 +:1045F000AA27F00DB11DAA1F649F6627B00DA11D4B +:10460000661F829F2227B00DA11D621F739FB00DF0 +:10461000A11D621F839FA00D611D221F749F332760 +:10462000A00D611D231F849F600D211D822F762FF9 +:104630006A2F11249F5750409AF0F1F088234AF0D6 +:10464000EE0FFF1FBB1F661F771F881F9150504042 +:10465000A9F79E3F510580F00C9443230C94D0227F +:104660005F3FE4F3983ED4F3869577956795B795C9 +:10467000F795E7959F5FC1F7FE2B880F911D9695E3 +:10468000879597F9089597F99F6780E870E060E053 +:1046900008959FEF80EC089500240A9416161706DB +:1046A00018060906089500240A9412161306140623 +:1046B00005060895092E0394000C11F4882352F086 +:1046C000BB0F40F4BF2B11F460FF04C06F5F7F4F3E +:1046D0008F4F9F4F089597FB072E16F4009407D035 +:1046E00077FD09D00E94852307FC05D03EF4909504 +:1046F00081959F4F0895709561957F4F0895EE0FB6 +:10470000FF1F0590F491E02D0994AA1BBB1B51E1FA +:1047100007C0AA1FBB1FA617B70710F0A61BB70B31 +:10472000881F991F5A95A9F780959095BC01CD01D6 +:104730000895F999FECF92BD81BDF89A992780B569 +:104740000895A8E1B0E042E050E00C94C023262F89 +:10475000F999FECF92BD81BDF89A019700B4021677 +:1047600031F020BD0FB6F894FA9AF99A0FBE089569 +:104770000196272F0E94A8230C94A723DC01CB01CC +:10478000FC01F999FECF06C0F2BDE1BDF89A319661 +:1047900000B40D9241505040B8F70895F894FFCFFF +:1047A000052001BA0128080A03140A3B1BC91BA6ED +:1047B0001B721B3E1B0101020304050607080900CA +:1047C000404D363966051905E304AA043D04560434 +:0447D0006F048804E6 +:00000001FF -- cgit v1.2.3 From 4b74c90cdbe820fc662eb183fa3e138f16191437 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Sun, 31 Jul 2016 22:39:25 -0400 Subject: Added quote key. --- keyboards/planck/keymaps/impossible/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index bf5588ad55..b1815e9011 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -57,19 +57,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------------. * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | [ | ] | - | Del | = | ( | ) | F11 | F4 | F5 | F6 | + * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Tab | Insert| PrtSc | | Pause | | Menu | | PgUp | F1 | F2 | F3 | + * | Menu | Insert| PrtSc | = | Pause | / | | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN_FN] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, - {XXXXXXX, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_Tab, KC_INS, KC_PSCR, XXXXXXX, KC_PAUSE, XXXXXXX, KC_MENU, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, + {KC_TAB, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, + {KC_MENU, KC_INS, KC_PSCR, KC_EQUAL, KC_PAUSE, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} }, /* Qwerty @@ -97,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | + * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | * `-----------------------------------------------------------------------------------------------' -- cgit v1.2.3 From a675c1aee028f5ba67b0c64df0fd24e51a92e288 Mon Sep 17 00:00:00 2001 From: Depariel Date: Sun, 31 Jul 2016 23:12:16 -0400 Subject: added support for Infinity 1.1a (4th drop) matrix, no LED support yet --- keyboards/infinity_chibios/config.h | 4 ++- keyboards/infinity_chibios/matrix.c | 51 ++++++++++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity_chibios/config.h index bd4becfc54..452cc2a9fb 100644 --- a/keyboards/infinity_chibios/config.h +++ b/keyboards/infinity_chibios/config.h @@ -52,8 +52,10 @@ along with this program. If not, see . ) /* Keymap for Infinity prototype */ -#define INFINITY_PROTOTYPE +//#define INFINITY_PROTOTYPE +/* Keymap for Infinity 1.1a (first revision with LED support) */ +//#define INFINITY_LED /* * Feature disable options diff --git a/keyboards/infinity_chibios/matrix.c b/keyboards/infinity_chibios/matrix.c index 2c68ea83ab..62c165aa53 100644 --- a/keyboards/infinity_chibios/matrix.c +++ b/keyboards/infinity_chibios/matrix.c @@ -12,9 +12,12 @@ * Infinity Pinusage: * Column pins are input with internal pull-down. Row pins are output and strobe with high. * Key is high or 1 when it turns on. - * + * INFINITY PRODUCTION (NO LED) * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } * row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 } + * INFINITY PRODUCTION (WITH LED) + * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } + * row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 } */ /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; @@ -34,6 +37,18 @@ void matrix_init(void) palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); +#ifdef INFINITY_LED + /* Row(strobe) */ + palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 7, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); +#else /* Row(strobe) */ palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL); @@ -44,7 +59,7 @@ void matrix_init(void) palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); - +#endif memset(matrix, 0, MATRIX_ROWS); memset(matrix_debouncing, 0, MATRIX_ROWS); } @@ -53,7 +68,20 @@ uint8_t matrix_scan(void) { for (int row = 0; row < MATRIX_ROWS; row++) { matrix_row_t data = 0; - + #ifdef INFINITY_LED + // strobe row + switch (row) { + case 0: palSetPad(GPIOC, 0); break; + case 1: palSetPad(GPIOC, 1); break; + case 2: palSetPad(GPIOC, 2); break; + case 3: palSetPad(GPIOC, 3); break; + case 4: palSetPad(GPIOC, 4); break; + case 5: palSetPad(GPIOC, 5); break; + case 6: palSetPad(GPIOC, 6); break; + case 7: palSetPad(GPIOC, 7); break; + case 8: palSetPad(GPIOD, 0); break; + } + #else // strobe row switch (row) { case 0: palSetPad(GPIOB, 0); break; @@ -66,12 +94,26 @@ uint8_t matrix_scan(void) case 7: palSetPad(GPIOC, 5); break; case 8: palSetPad(GPIOD, 0); break; } + #endif wait_us(1); // need wait to settle pin state // read col data data = (palReadPort(GPIOD)>>1); - + #ifdef INFINITY_LED + // un-strobe row + switch (row) { + case 0: palClearPad(GPIOC, 0); break; + case 1: palClearPad(GPIOC, 1); break; + case 2: palClearPad(GPIOC, 2); break; + case 3: palClearPad(GPIOC, 3); break; + case 4: palClearPad(GPIOC, 4); break; + case 5: palClearPad(GPIOC, 5); break; + case 6: palClearPad(GPIOC, 6); break; + case 7: palClearPad(GPIOC, 7); break; + case 8: palClearPad(GPIOD, 0); break; + } + #else // un-strobe row switch (row) { case 0: palClearPad(GPIOB, 0); break; @@ -84,6 +126,7 @@ uint8_t matrix_scan(void) case 7: palClearPad(GPIOC, 5); break; case 8: palClearPad(GPIOD, 0); break; } + #endif if (matrix_debouncing[row] != data) { matrix_debouncing[row] = data; -- cgit v1.2.3 From f422f442cf10b500f5b0b5509d932d72bfcf7f6e Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 1 Aug 2016 14:51:26 -0400 Subject: automatically forward ergodox ez --- util/ergodox_ez.html | 1 + util/travis_compiled_push.sh | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 util/ergodox_ez.html diff --git a/util/ergodox_ez.html b/util/ergodox_ez.html new file mode 100644 index 0000000000..8e92866070 --- /dev/null +++ b/util/ergodox_ez.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index 01317f4be2..dadcbc48f1 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -15,6 +15,8 @@ git submodule update --init --recursive rm -rf keyboard rm -rf keyboards cp -r ../qmk_firmware/keyboards . +mk keyboards/ergodox_ez/ +cp ../qmk_firmware/util/ergodox_ex.html keyboards/ergodox_ez/index.html cp ../qmk_firmware/readme.md qmk_readme.md ./generate.sh -- cgit v1.2.3 From 76ef37e72d0cba9c83775e82c086534e8d45a7b8 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Mon, 1 Aug 2016 18:54:25 -0400 Subject: Corrected Qwerty/Fn Mismatch. --- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index b1815e9011..65d8ac5fd7 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -85,10 +85,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { - {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_QWERTY_FN, KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QWERTY_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, }, /* FN-key held (Qwerty) -- cgit v1.2.3 From 56aa51664e69af93ca3c1f59c760853a24548145 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 1 Aug 2016 21:15:01 -0400 Subject: Updates ErgoDox readme --- keyboards/ergodox/readme.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 9afa474108..f81d7cd8df 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -2,24 +2,21 @@ There are two main ways you could customize the ErgoDox (EZ and Infinity) -## The Easy Way: Use an existing firmware file and just flash it - -This does not work for Infinity ErgoDox yet, you need to compile the firmware according to the instructions below +## The Easy Way: Use an existing firmware file and just flash it (ErgoDox EZ only) 1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this. -2. Find a firmware file you like. You can find a few of these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. +2. Find a firmware file you like. There are [dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) you can browse and download. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. 3. Download the firmware file 4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded. ## More technical: compile an existing keymap, or create your own totally custom firmware by editing the source files. -This requires a little bit of familiarity with coding. +This requires a little bit of familiarity with coding. If you are just compiling an existing keymap and don't want to create your own, you can skip step 4, 5 and 8. 1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) 2. Clone the repository (download it) -3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md) - - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc` +3. Set up a build environment as per the readme. 4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. 6. Compile your firmware by running `make keymap=keymap_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `subproject=infinity` to the make command. @@ -32,12 +29,12 @@ Good luck! :) ## Contributing your keymap -The ErgoDox firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. +The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. 1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). 2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. 3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) -4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. +4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. ## Finding the keycodes you need -- cgit v1.2.3 From 25f138c0d321effdb7dbef8a297b7090dffb90dc Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 1 Aug 2016 22:59:25 -0400 Subject: fix mkdir cmd --- util/travis_compiled_push.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index dadcbc48f1..ddc364cc6e 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -15,7 +15,7 @@ git submodule update --init --recursive rm -rf keyboard rm -rf keyboards cp -r ../qmk_firmware/keyboards . -mk keyboards/ergodox_ez/ +mkdir keyboards/ergodox_ez/ cp ../qmk_firmware/util/ergodox_ex.html keyboards/ergodox_ez/index.html cp ../qmk_firmware/readme.md qmk_readme.md ./generate.sh -- cgit v1.2.3 From 461f973c2b92c05e746a37712fdfbabe82eafa4b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 1 Aug 2016 23:46:50 -0400 Subject: correct file name --- util/travis_compiled_push.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index ddc364cc6e..27ab3cec66 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -16,7 +16,7 @@ rm -rf keyboard rm -rf keyboards cp -r ../qmk_firmware/keyboards . mkdir keyboards/ergodox_ez/ -cp ../qmk_firmware/util/ergodox_ex.html keyboards/ergodox_ez/index.html +cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html cp ../qmk_firmware/readme.md qmk_readme.md ./generate.sh -- cgit v1.2.3 From c70b276b1b29e31945a5a03f560961d8a008176d Mon Sep 17 00:00:00 2001 From: kuel Date: Tue, 2 Aug 2016 14:09:01 -0500 Subject: Add keymap_cyrillic.h, lots of cyrillic characters --- quantum/keymap_extras/keymap_cyrillic.h | 161 ++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 quantum/keymap_extras/keymap_cyrillic.h diff --git a/quantum/keymap_extras/keymap_cyrillic.h b/quantum/keymap_extras/keymap_cyrillic.h new file mode 100644 index 0000000000..d5390afff5 --- /dev/null +++ b/quantum/keymap_extras/keymap_cyrillic.h @@ -0,0 +1,161 @@ +#ifndef KEYMAP_CYRILLIC_H +#define KEYMAP_CYRILLIC_H + +#include "keymap.h" + +/* + * This is based off of + * https://en.wikipedia.org/wiki/Cyrillic_script + */ + +// Capital Char russian/ukrainian/bulgarian +#define CY_A UC(0x0410) // А rus ukr bul +#define CY_BE UC(0x0411) // Б rus ukr bul +#define CY_VE UC(0x0412) // В rus ukr bul +#define CY_GHE UC(0x0413) // Г rus ukr bul +#define CY_GHEUP UC(0x0490) // Ґ ukr +#define CY_DE UC(0x0414) // Д rus ukr bul +#define CY_DJE UC(0x0402) // Ђ +#define CY_GJE UC(0x0403) // Ѓ +#define CY_IE UC(0x0415) // Е rus ukr bul +#define CY_IO UC(0x0401) // Ё rus +#define CY_UIE UC(0x0404) // Є ukr +#define CY_ZHE UC(0x0416) // Ж rus ukr bul +#define CY_ZE UC(0x0417) // З rus ukr bul +#define CY_DZE UC(0x0405) // Ѕ +#define CY_I UC(0x0418) // И rus ukr bul +#define CY_B_U_I UC(0x0406) // І ukr +#define CY_YI UC(0x0407) // Ї ukr +#define CY_SRT_I UC(0x0419) // Й rus ukr bul +#define CY_JE UC(0x0408) // Ј +#define CY_KA UC(0x041a) // К rus ukr bul +#define CY_EL UC(0x041b) // Л rus ukr bul +#define CY_LJE UC(0x0409) // Љ +#define CY_EM UC(0x041c) // М rus ukr bul +#define CY_EN UC(0x041d) // Н rus ukr bul +#define CY_NJE UC(0x040a) // Њ +#define CY_O UC(0x041e) // О rus ukr bul +#define CY_PE UC(0x041f) // П rus ukr bul +#define CY_ER UC(0x0420) // Р rus ukr bul +#define CY_ES UC(0x0421) // С rus ukr bul +#define CY_TE UC(0x0422) // Т rus ukr bul +#define CY_TSHE UC(0x040b) // Ћ +#define CY_KJE UC(0x040c) // Ќ +#define CY_U UC(0x0423) // У rus ukr bul +#define CY_SRT_U UC(0x040e) // Ў +#define CY_EF UC(0x0424) // Ф rus ukr bul +#define CY_HA UC(0x0425) // Х rus bul +#define CY_TSE UC(0x0426) // Ц rus ukr bul +#define CY_CHE UC(0x0427) // Ч rus ukr bul +#define CY_DZHE UC(0x040f) // Џ +#define CY_SHA UC(0x0428) // Ш rus ukr bul +#define CY_SHCHA UC(0x0429) // Щ rus ukr bul +#define CY_HSIGN UC(0x042a) // Ъ rus bul +#define CY_YERU UC(0x042b) // Ы rus +#define CY_SSIGN UC(0x042c) // Ь rus ukr bul +#define CY_E UC(0x042d) // Э rus +#define CY_YU UC(0x042e) // Ю rus ukr bul +#define CY_YA UC(0x042f) // Я rus ukr bul +// Important Cyrillic non-Slavic letters +#define CY_PALOCHKA UC(0x04c0) // Ӏ +#define CY_SCHWA UC(0x04d8) // Ә +#define CY_GHE_S UC(0x0492) // Ғ +#define CY_ZE_D UC(0x0498) // Ҙ +#define CY_ES_D UC(0x04aa) // Ҫ +#define CY_BR_KA UC(0x04a0) // Ҡ +#define CY_ZHE_D UC(0x0496) // Җ +#define CY_KA_D UC(0x049a) // Қ +#define CY_EN_D UC(0x04a2) // Ң +#define CY_ENGHE UC(0x04a4) // Ҥ +#define CY_BRD_O UC(0x04e8) // Ө +#define CY_STR_U UC(0x04ae) // Ү +#define CY_S_U_S UC(0x04b0) // Ұ +#define CY_SHHA UC(0x04ba) // Һ +#define CY_HA_D UC(0x04b2) // Ҳ + + +// Small +#define CY_a UC(0x0430) // a rus ukr bul +#define CY_be UC(0x0431) // б rus ukr bul +#define CY_ve UC(0x0432) // в rus ukr bul +#define CY_ghe UC(0x0433) // г rus ukr bul +#define CY_gheup UC(0x0491) // ґ ukr +#define CY_de UC(0x0434) // д rus ukr bul +#define CY_dje UC(0x0452) // ђ +#define CY_gje UC(0x0453) // ѓ +#define CY_ie UC(0x0435) // е rus ukr bul +#define CY_io UC(0x0451) // ё rus +#define CY_uie UC(0x0454) // є ukr +#define CY_zhe UC(0x0436) // ж rus ukr bul +#define CY_ze UC(0x0437) // з rus ukr bul +#define CY_dze UC(0x0455) // ѕ +#define CY_i UC(0x0438) // и rus ukr bul +#define CY_b_u_i UC(0x0456) // і ukr +#define CY_yi UC(0x0457) // ї ukr +#define CY_srt_i UC(0x0439) // й rus ukr bul +#define CY_je UC(0x0458) // ј +#define CY_ka UC(0x043a) // к rus ukr bul +#define CY_el UC(0x043b) // л rus ukr bul +#define CY_lje UC(0x0459) // љ +#define CY_em UC(0x043c) // м rus ukr bul +#define CY_en UC(0x043d) // н rus ukr bul +#define CY_nje UC(0x045a) // њ +#define CY_o UC(0x043e) // о rus ukr bul +#define CY_pe UC(0x043f) // п rus ukr bul +#define CY_er UC(0x0440) // р rus ukr bul +#define CY_es UC(0x0441) // с rus ukr bul +#define CY_te UC(0x0442) // т rus ukr bul +#define CY_tshe UC(0x045b) // ћ +#define CY_kje UC(0x045c) // ќ +#define CY_u UC(0x0443) // у rus ukr bul +#define CY_srt_u UC(0x045e) // ў +#define CY_ef UC(0x0444) // ф rus ukr bul +#define CY_ha UC(0x0445) // х rus ukr bul +#define CY_tse UC(0x0446) // ц rus ukr bul +#define CY_che UC(0x0447) // ч rus ukr bul +#define CY_dzhe UC(0x045f) // џ +#define CY_sha UC(0x0448) // ш rus ukr bul +#define CY_shcha UC(0x0449) // щ rus ukr bul +#define CY_hsign UC(0x044a) // ъ rus bul +#define CY_yeru UC(0x044b) // ы rus +#define CY_ssign UC(0x044c) // ь rus ukr bul +#define CY_e UC(0x044d) // э rus +#define CY_yu UC(0x044e) // ю rus ukr bul +#define CY_ya UC(0x044f) // я rus ukr bul +// Important Cyrillic non-Slavic letters +#define CY_palochka UC(0x04cf) // ӏ +#define CY_schwa UC(0x04d9) // ә +#define CY_ghe_s UC(0x0493) // ғ +#define CY_ze_d UC(0x0499) // ҙ +#define CY_es_d UC(0x04ab) // ҫ +#define CY_br_ka UC(0x04a1) // ҡ +#define CY_zhe_d UC(0x0497) // җ +#define CY_ka_d UC(0x049b) // қ +#define CY_en_d UC(0x04a3) // ң +#define CY_enghe UC(0x04a5) // ҥ +#define CY_brd_o UC(0x04e9) // ө +#define CY_str_u UC(0x04af) // ү +#define CY_s_u_s UC(0x04b1) // ұ +#define CY_shha UC(0x04bb) // һ +#define CY_ha_d UC(0x04b3) // ҳ + + +// Extra +#define CY_slr_ve UC(0x1c80) // ᲀ CYRILLIC SMALL LETTER ROUNDED VE +#define CY_ll_de UC(0x1c81) // ᲁ CYRILLIC SMALL LETTER LONG-LEGGED DE +#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA +#define CY_zemlya UC(0xa641) // ꙁ CYRILLIC SMALL LETTER ZEMLYA +#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE +#define CY_rv_DZE UC(0xa645) // ꙅ CYRILLIC SMALL LETTER REVERSED DZE +#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES +#define CY_st_te UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE +#define CY_3l_te UC(0x1c85) // ᲅ CYRILLIC SMALL LETTER THREE-LEGGED TE +#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN +#define CY_YERUBY UC(0xa650) // Ꙑ CYRILLIC CAPITAL LETTER YERU WITH BACK YER +#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER +#define CY_RUBLE UC(0x20bd) // ₽ +#define CY_NUMERO UC(0x2116) // № + +// The letters Zje and Sje are made for other letters and accent marks + +#endif -- cgit v1.2.3 From 0acb394ac41f56895d4287d950a79bca5437a45c Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 2 Aug 2016 22:32:27 -0400 Subject: Moved Insert, PrtSc, Pause to Adjust; Corner enter --- keyboards/planck/keymaps/impossible/keymap.c | 70 ++++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 65d8ac5fd7..e816f359a6 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -16,11 +16,11 @@ extern keymap_config_t keymap_config; // entirely and just use numbers. #define _WORKMAN 0 -#define _WORKMAN_FN 1 +#define _FN 1 #define _QWERTY 2 -#define _QWERTY_FN 3 +#define _QW_FN 3 #define _PLOVER 4 -#define _ADJUST 5 +#define _ADJ 5 enum planck_keycodes { WORKMAN = SAFE_RANGE, @@ -42,15 +42,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/ / | + * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_WORKMAN] = { - {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, - {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, - {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_WORKMAN_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJUST, KC_SLASH)} + {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9}, + {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6}, + {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3}, + {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENT), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJ, KC_ENT)} }, /* FN-key held (Workman) @@ -59,55 +59,55 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * | Menu | Insert| PrtSc | = | Pause | / | | | PgUp | F1 | F2 | F3 | + * | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * |Alt/Tab| Gui | ~ |CTL/Bsp|Fn/Ent |SFT/Spc| ; | Home | PgDn | End | F10 | \ | + * |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_WORKMAN_FN] = { +[_FN] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9}, {KC_TAB, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6}, - {KC_MENU, KC_INS, KC_PSCR, KC_EQUAL, KC_PAUSE, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, - {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, KC_BSLASH} + {KC_MENU, _______, _______, KC_EQUAL, KC_BSLS, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3}, + {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, _______} }, /* Qwerty * ,-----------------------------------------------------------------------------------------------. * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | Enter | + * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| * | Shift | A | S | D | F | G | H | J | K | L | ; | " | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/ / | + * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_QWERTY] = { - {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, - {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QWERTY_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJUST, KC_SLASH)}, + {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QW_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJ, KC_ENT)}, }, /* FN-key held (Qwerty) * ,-----------------------------------------------------------------------------------------------. * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | ~ | | PgUp | | | | | Up | - | = | F12 | + * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| - * |Alt/Tab| | | | | Fn/Spc| | Insert| PrtSc | Pause | Menu | \ | + * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_QWERTY_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_INS, KC_PSCR, KC_PAUSE, KC_MENU, KC_BSLASH} +[_QW_FN] = { + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, + {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} }, /* Plover layer (http://opensteno.org) @@ -118,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | # | # | # | # | | # | # | # | # | # | | | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| - * | | | A | O | | E | U | | | | | Adjust| + * | | | A | O | | E | U | | | | |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ @@ -126,26 +126,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, KC_LBRC, XXXXXXX, XXXXXXX}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX}, {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(_ADJUST)} + {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(_ADJ, KC_ENT)} }, /* Adjust * ,-----------------------------------------------------------------------------------------------. - * | | | | | | | | | | | | RESET | + * | | | | | | | | | Insert| PrtSc | Pause | RESET | * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * | | | | | | | | ScrLk |Voice -| Music |MIDI on| | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | Numlk |Workman| Qwerty| Plover| Adjust| + * | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ -[_ADJUST] = { - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}, - {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} +[_ADJ] = { + {_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_PSCR, KC_PAUSE, RESET}, + {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______} } }; -- cgit v1.2.3 From abc3cd4d72ebd7627ebb78a78ad88827fbe4d5f9 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sun, 31 Jul 2016 03:04:37 -0700 Subject: Update readme.md --- keyboards/planck/keymaps/jeebak/readme.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index eb8104379d..25fbc5e67e 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -7,7 +7,7 @@ the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. I also decided to change all calls to `persistant_default_layer_set()` to -`update_tri_layer()` since this is my personal perference. +`default_layer_set()` since this is my personal perference. ## Base Layers (Qwerty/Colemak/Dvorak) These base layers are mostly the same as the default mappings. The interesting @@ -69,11 +69,12 @@ keys at the far left are for quick access to beginning and end of line in vim. as the modifier, with the `IJKL` home row keys representing the inverted-T of the arrow keys. All of the default TouchCursor keymappings for the right hand are represented below. My personalizations include all of the keys shown for -the left hand. Having the `Alt` and `Shift` keys readily accessible from the -home row allows quick word jumps and highlighting when used in conjunction with -the arrow keys. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and -`KC_AGAIN` keycodes have been mapped but they don't seem to work on Mac. -Presumably they'll work under Windows. +the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key +from the base layers) readily accessible from the home row allows quick word +jumps and highlighting when used in conjunction with the arrow keys. The +`KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` keycodes have +been mapped but they don't seem to work on Mac. Presumably they'll work under +Windows. ``` ,-----------------------------------------------------------------------------------. | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | -- cgit v1.2.3 From fdd89e7f0d50f619e8608a4448449a3a627f1da1 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sun, 31 Jul 2016 17:16:25 -0700 Subject: Add Alt-Tab, Cmd-Tab, and Ctl-Tab Macros to TouchCursor layer, swap LGUI and LSFT --- keyboards/planck/keymaps/jeebak/keymap.c | 35 +++++++++++++++++++++++++++---- keyboards/planck/keymaps/jeebak/readme.md | 16 ++++++++++---- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index ec142ecbb5..ef4de074fc 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -24,6 +24,7 @@ extern keymap_config_t keymap_config; #define _MOUSE 7 #define _ADJUST 16 +// Keycodes enum planck_keycodes { QWERTY = SAFE_RANGE, COLEMAK, @@ -35,16 +36,25 @@ enum planck_keycodes { EXT_PLV }; +enum macro_keycodes { + KC_ALT_TAB, + KC_CMD_TAB, + KC_CTL_TAB, +}; + // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO // Custom macros #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl -#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor -// ^-- Requires KC_TRNS / _______ for the trigger key in the destination layer #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +// Requires KC_TRNS/_______ for the trigger key in the destination layer +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor. #define LT_ML LT(_MOUSE, KC_A) // L-ayer T-ap M-ouse C-ursor (on A) +#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab +#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab +#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -140,7 +150,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations * ,-----------------------------------------------------------------------------------. - * | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | + * |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | * |------+------+------+------+------+------|------+------+------+------+------+------| @@ -154,7 +164,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_TOUCHCURSOR] = { - {_______, _______, _______, KC_LSFT, KC_LGUI, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, + {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, {_______, KC_LALT, KC_SPC, _______, KC_FIND,KC_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, {_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} @@ -330,6 +340,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } +/* + * Macro definition + */ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch (id) { + case KC_ALT_TAB: + return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); + case KC_CMD_TAB: + return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); + case KC_CTL_TAB: + return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); + } + + return MACRO_NONE; +} + void matrix_init_user(void) { #ifdef AUDIO_ENABLE startup_user(); diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 25fbc5e67e..f7daf53d84 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -9,6 +9,11 @@ changes from the default mappings. I also decided to change all calls to `persistant_default_layer_set()` to `default_layer_set()` since this is my personal perference. +## Macros +``` +#define ALT_TAB M(KC_ALT_TAB) +``` + ## Base Layers (Qwerty/Colemak/Dvorak) These base layers are mostly the same as the default mappings. The interesting changes are shown below. The `Ctrl/Esc`, mapped using `CTL_T(KC_ESC)` will emit @@ -72,12 +77,15 @@ are represented below. My personalizations include all of the keys shown for the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key from the base layers) readily accessible from the home row allows quick word jumps and highlighting when used in conjunction with the arrow keys. The -`KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` keycodes have -been mapped but they don't seem to work on Mac. Presumably they'll work under -Windows. +`AltTab` macro is not only useful under Windows, but also under Mac when used +with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch). +The `CmdTab` and `CtlTab` sequences are duplicated for easy access while in +this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` +keycodes have been mapped but they don't seem to work on Mac. Presumably +they'll work under Windows. ``` ,-----------------------------------------------------------------------------------. - | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | | + |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | |------+------+------+------+------+------|------+------+------+------+------+------| -- cgit v1.2.3 From 16f4a3178459305fd517d23f028812620e64c18f Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Mon, 1 Aug 2016 15:28:05 -0700 Subject: Number layer tweaks --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- keyboards/planck/keymaps/jeebak/readme.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index ef4de074fc..e39887394e 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -134,17 +134,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | - | | | + * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | . | \ | + * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * |Brite | | | | | | | Prev | Stop | Slct | Mute | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_MINS, KC_PIPE}, - {KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_DOT, KC_BSLS}, + {KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE}, + {KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS}, {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE} }, diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index f7daf53d84..de2096954b 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -61,9 +61,9 @@ keys at the far left are for quick access to beginning and end of line in vim. ,-----------------------------------------------------------------------------------. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |------+------+------+------+------+-------------+------+------+------+------+------| - | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | - | | | + | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | | | |------+------+------+------+------+------|------+------+------+------+------+------| - | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | . | \ | + | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | |------+------+------+------+------+------+------+------+------+------+------+------| |Brite | | | | | | | Prev | Stop | Slct | Mute | `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From 9a4e72fa7175f0ef3b31c6a6036ac1a5010dc6c1 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Mon, 1 Aug 2016 22:02:39 -0700 Subject: Add CmdSlash to TouchCursor Layer --- keyboards/planck/keymaps/jeebak/keymap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index e39887394e..0a6b9cfa0f 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -40,6 +40,7 @@ enum macro_keycodes { KC_ALT_TAB, KC_CMD_TAB, KC_CTL_TAB, + KC_CMD_SLSH, }; // Fillers to make layering more clear @@ -55,6 +56,7 @@ enum macro_keycodes { #define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab #define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab #define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab +#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -166,7 +168,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_TOUCHCURSOR] = { {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, {_______, KC_LALT, KC_SPC, _______, KC_FIND,KC_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, - {_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______}, + {_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, CMD_SLSH,_______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -352,6 +354,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); case KC_CTL_TAB: return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); + case KC_CMD_SLSH: + return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); } return MACRO_NONE; -- cgit v1.2.3 From 7db1d7902bfb7044b899859d95846fa92bad61db Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Wed, 3 Aug 2016 20:00:54 -0700 Subject: Workaround for KC_COPY, etc. based on current AG_NORM/AG_SWAP setting --- keyboards/planck/keymaps/jeebak/keymap.c | 47 ++++++++++++++++++++++++++++--- keyboards/planck/keymaps/jeebak/readme.md | 12 ++++---- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 0a6b9cfa0f..25918dc985 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -41,6 +41,12 @@ enum macro_keycodes { KC_CMD_TAB, KC_CTL_TAB, KC_CMD_SLSH, + KC_AG_FIND, + KC_AG_AGAIN, + KC_AG_UNDO, + KC_AG_CUT, + KC_AG_COPY, + KC_AG_PASTE, }; // Fillers to make layering more clear @@ -57,6 +63,12 @@ enum macro_keycodes { #define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab #define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab #define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) +#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings +#define AG_AGAIN M(KC_AG_AGAIN) +#define AG_UNDO M(KC_AG_UNDO) +#define AG_CUT M(KC_AG_CUT) +#define AG_COPY M(KC_AG_COPY) +#define AG_PASTE M(KC_AG_PASTE) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -167,8 +179,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_TOUCHCURSOR] = { {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, - {_______, KC_LALT, KC_SPC, _______, KC_FIND,KC_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, - {_______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, CMD_SLSH,_______}, + {_______, KC_LALT, KC_SPC, _______, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, + {_______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, CMD_SLSH,_______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -347,15 +359,42 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { */ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. + // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in: + // quantum/quantum.c + if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) { + use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. + } + switch (id) { case KC_ALT_TAB: - return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); + if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } case KC_CMD_TAB: - return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); + if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + case KC_CTL_TAB: return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); case KC_CMD_SLSH: return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); + + case KC_AG_FIND: + return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END ); + case KC_AG_AGAIN: + return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END ); + case KC_AG_UNDO: + return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END ); + case KC_AG_CUT: + return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END ); + case KC_AG_COPY: + return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); + case KC_AG_PASTE: + return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); } return MACRO_NONE; diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index de2096954b..094bc2a0ed 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -77,15 +77,17 @@ are represented below. My personalizations include all of the keys shown for the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key from the base layers) readily accessible from the home row allows quick word jumps and highlighting when used in conjunction with the arrow keys. The -`AltTab` macro is not only useful under Windows, but also under Mac when used +`Alt-Tab` macro is not only useful under Windows, but also under Mac when used with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch). -The `CmdTab` and `CtlTab` sequences are duplicated for easy access while in +The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` -keycodes have been mapped but they don't seem to work on Mac. Presumably -they'll work under Windows. +keycodes do not seem to work. There are macros in place that'll "automatically" +choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`, +etc.) depending on which layout you've currently selected (`AG_NORM` or +`AG_SWAP`) in the `_ADJUST` layer. ``` ,-----------------------------------------------------------------------------------. - |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | + |CmdTab|AltTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | |------+------+------+------+------+------|------+------+------+------+------+------| -- cgit v1.2.3 From 36abd4463fec1623e7eb590bb7960c6655cf2b70 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Thu, 4 Aug 2016 14:26:03 -0700 Subject: Revert swapp of AltTab/CmdTab in readme. Layout did not change --- keyboards/planck/keymaps/jeebak/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 094bc2a0ed..48eb23264f 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -87,7 +87,7 @@ etc.) depending on which layout you've currently selected (`AG_NORM` or `AG_SWAP`) in the `_ADJUST` layer. ``` ,-----------------------------------------------------------------------------------. - |CmdTab|AltTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | + |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | |------+------+------+------+------+------|------+------+------+------+------+------| -- cgit v1.2.3 From dcf672223f20412ae79eb73a58d80ccbb0bd5c31 Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 5 Aug 2016 20:53:58 +0200 Subject: enterfn / enterisctrl on hold added --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 7af7c14bd8..3ee141eb45 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------. * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 !! + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | * |-----------------------------------------------------------| @@ -107,15 +107,15 @@ enum function_id { }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_FUNCTION(LAUNCH), - [2] = ACTION_FUNCTION(RGBLED_TOGGLE), - [3] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [4] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [6] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [8] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [9] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + [1] = ACTION_FUNCTION(LAUNCH), + [2] = ACTION_FUNCTION(RGBLED_TOGGLE), + [3] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [8] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [9] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), }; -- cgit v1.2.3 From 545925fb1b92252fe0bad5a675727d52bea161ef Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Fri, 5 Aug 2016 23:19:12 -0400 Subject: remove orphaned clueboard files --- keyboards/clueboard2/Makefile | 71 --------------------------------------- keyboards/clueboard2/clueboard2.c | 63 ---------------------------------- 2 files changed, 134 deletions(-) delete mode 100644 keyboards/clueboard2/Makefile delete mode 100644 keyboards/clueboard2/clueboard2.c diff --git a/keyboards/clueboard2/Makefile b/keyboards/clueboard2/Makefile deleted file mode 100644 index e9367a90d0..0000000000 --- a/keyboards/clueboard2/Makefile +++ /dev/null @@ -1,71 +0,0 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID - -ifndef QUANTUM_DIR - include ../../Makefile -endif diff --git a/keyboards/clueboard2/clueboard2.c b/keyboards/clueboard2/clueboard2.c deleted file mode 100644 index d78ffed9ba..0000000000 --- a/keyboards/clueboard2/clueboard2.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "clueboard2.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - matrix_init_user(); - led_init_ports(); - - // JTAG disable for PORT F. write JTD bit twice within four cycles. - MCUCR |= (1< Date: Fri, 5 Aug 2016 23:31:35 -0700 Subject: Mouse layer updates - Rename to MOUSECURSOR - Use "d" key, since middle finger is stronger than pinky - Shuffle some mouse buttons around --- keyboards/planck/keymaps/jeebak/keymap.c | 32 +++++++++++++++---------------- keyboards/planck/keymaps/jeebak/readme.md | 14 +++++++------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 25918dc985..4a3cc2d562 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -21,7 +21,7 @@ extern keymap_config_t keymap_config; #define _RAISE 4 #define _PLOVER 5 #define _TOUCHCURSOR 6 -#define _MOUSE 7 +#define _MOUSECURSOR 7 #define _ADJUST 16 // Keycodes @@ -57,8 +57,8 @@ enum macro_keycodes { #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift // Requires KC_TRNS/_______ for the trigger key in the destination layer -#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor. -#define LT_ML LT(_MOUSE, KC_A) // L-ayer T-ap M-ouse C-ursor (on A) +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor +#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor #define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab #define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab #define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab @@ -76,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | ML/A | S | D | F | G | H | J | K | L | ; | " | + * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L | ; | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| @@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {CTL_ESC, LT_ML, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {CTL_ESC, KC_A, KC_S, LT_MC(KC_D),KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | ML/A | R | S | T | D | H | N | E | I | O | " | + * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| @@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_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}, - {CTL_ESC, LT_ML, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {CTL_ESC, KC_A, KC_R, LT_MC(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, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -112,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | ML/A | O | E | U | I | D | H | T | N | S | / | + * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| @@ -121,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_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}, - {CTL_ESC, LT_ML, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {CTL_ESC, KC_A, KC_O, LT_MC(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, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -186,20 +186,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Mouse Layer * ,-----------------------------------------------------------------------------------. - * | | |ACCL0 |ACCL1 |ACCL2 |ACCL2 | |WHL_L | Up |WHL_R | BTN2 | | + * | | |ACCL0 | |ACCL1 | | |WHL_L | Up |WHL_R | BTN2 | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | BTN3 | BTN1 | BTN4 |WHL_Up| Left | Down |Right | | | + * | |ACCL2 | BTN2 | | BTN1 | |WHL_Up| Left | Down |Right | BTN4 | BTN5 | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | BTN2 | BTN5 |WHL_Dn| BTN1 | | | | | + * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[_MOUSE] = { - {_______, _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_ACL2, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______}, - {_______, _______, _______, KC_BTN3, KC_BTN1, KC_BTN4, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______}, - {_______, _______, _______, _______, KC_BTN2, KC_BTN5, KC_WH_D, KC_BTN1, _______, _______, _______, _______}, +[_MOUSECURSOR] = { + {_______, _______, KC_ACL0, _______, KC_ACL1, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______}, + {_______, KC_ACL2, KC_BTN2, _______, KC_BTN1, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5}, + {_______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 48eb23264f..0f2c9e26d2 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -99,19 +99,19 @@ etc.) depending on which layout you've currently selected (`AG_NORM` or ## Mouse Layer The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer. -The `A` key is used to activate this layer. All 16 keycodes for the mouse from -the `doc/keycode.txt` file are represented, and logically located, IMHO. The -left and right click buttons are duplicated; on the right hand side, for a -quick click here and there, and again on the left hand side for when the +The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the +mouse from the `doc/keycode.txt` file are represented, and logically located, +IMHO. The left and right click buttons are duplicated; on the right hand side, +for a quick click here and there, and again on the left hand side for when the buttons need to be held for dragging things or highlighting text, thus allowing the right hand to be free to use the up/down/left/right actions. ``` ,-----------------------------------------------------------------------------------. - | | |ACCL0 |ACCL1 |ACCL2 |ACCL2 | |WHL_L | Up |WHL_R | BTN2 | | + | | |ACCL0 | |ACCL1 | | |WHL_L | Up |WHL_R | BTN2 | | |------+------+------+------+------+-------------+------+------+------+------+------| - | | | | BTN3 | BTN1 | BTN4 |WHL_Up| Left | Down |Right | | | + | |ACCL2 | BTN2 | | BTN1 | |WHL_Up| Left | Down |Right | BTN4 | BTN5 | |------+------+------+------+------+------|------+------+------+------+------+------| - | | | | | BTN2 | BTN5 |WHL_Dn| BTN1 | | | | | + | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From 96ed96f924d7df610465b567e5127e73e99a368d Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 6 Aug 2016 00:01:12 -0700 Subject: Fix KC_ALT_TAB/KC_CMD_TAB logic --- keyboards/planck/keymaps/jeebak/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 4a3cc2d562..3b51e34e38 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -372,11 +372,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch (id) { case KC_ALT_TAB: - if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } - else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } - case KC_CMD_TAB: if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + case KC_CMD_TAB: + if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } case KC_CTL_TAB: return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); -- cgit v1.2.3 From 57218827cbdb6e9510147239f69b8aa62e28cd14 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 6 Aug 2016 00:08:42 -0700 Subject: Move KC_ACL1 button --- keyboards/planck/keymaps/jeebak/keymap.c | 8 ++++---- keyboards/planck/keymaps/jeebak/readme.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 3b51e34e38..c5761b2d1d 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -186,9 +186,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Mouse Layer * ,-----------------------------------------------------------------------------------. - * | | |ACCL0 | |ACCL1 | | |WHL_L | Up |WHL_R | BTN2 | | + * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | |ACCL2 | BTN2 | | BTN1 | |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -197,8 +197,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_MOUSECURSOR] = { - {_______, _______, KC_ACL0, _______, KC_ACL1, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______}, - {_______, KC_ACL2, KC_BTN2, _______, KC_BTN1, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5}, + {_______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______}, + {_______, KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5}, {_______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 0f2c9e26d2..359aacff97 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -107,9 +107,9 @@ buttons need to be held for dragging things or highlighting text, thus allowing the right hand to be free to use the up/down/left/right actions. ``` ,-----------------------------------------------------------------------------------. - | | |ACCL0 | |ACCL1 | | |WHL_L | Up |WHL_R | BTN2 | | + | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | |------+------+------+------+------+-------------+------+------+------+------+------| - | |ACCL2 | BTN2 | | BTN1 | |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | |------+------+------+------+------+------|------+------+------+------+------+------| | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | |------+------+------+------+------+------+------+------+------+------+------+------| -- cgit v1.2.3 From bda4d15ffa5a7390591b2f4edb05ed568a1c708a Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 6 Aug 2016 11:59:57 -0700 Subject: Add Virtual Desktop Switching macros to TouchCursor layer --- keyboards/planck/keymaps/jeebak/keymap.c | 13 +++++++++++-- keyboards/planck/keymaps/jeebak/readme.md | 5 +++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index c5761b2d1d..aa5c415938 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -47,6 +47,8 @@ enum macro_keycodes { KC_AG_CUT, KC_AG_COPY, KC_AG_PASTE, + KC_AG_DESK_L, + KC_AG_DESK_R, }; // Fillers to make layering more clear @@ -69,6 +71,8 @@ enum macro_keycodes { #define AG_CUT M(KC_AG_CUT) #define AG_COPY M(KC_AG_COPY) #define AG_PASTE M(KC_AG_PASTE) +#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and +#define AG_D_R M(KC_AG_DESK_R) // Right const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -166,7 +170,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | + * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| * |------+------+------+------+------+------|------+------+------+------+------+------| * | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -179,7 +183,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_TOUCHCURSOR] = { {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, - {_______, KC_LALT, KC_SPC, _______, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______}, + {_______, KC_LALT, KC_SPC, _______, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R }, {_______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, CMD_SLSH,_______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -395,6 +399,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); case KC_AG_PASTE: return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); + + case KC_AG_DESK_L: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); + case KC_AG_DESK_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); } return MACRO_NONE; diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 359aacff97..28ae34f475 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -84,12 +84,13 @@ this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` keycodes do not seem to work. There are macros in place that'll "automatically" choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`, etc.) depending on which layout you've currently selected (`AG_NORM` or -`AG_SWAP`) in the `_ADJUST` layer. +`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I +use to switch between Virtual Desktops Left/Right. ``` ,-----------------------------------------------------------------------------------. |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| - | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | | + | | Alt |Space | | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| |------+------+------+------+------+------|------+------+------+------+------+------| | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | |------+------+------+------+------+------+------+------+------+------+------+------| -- cgit v1.2.3 From 68e287013b42cea53a1834c141bdf2c0802da3af Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 6 Aug 2016 13:36:26 -0700 Subject: Add Tab Close, New, Reopen macros to TouchCursor layer --- keyboards/planck/keymaps/jeebak/keymap.c | 21 +++++++++++++++++---- keyboards/planck/keymaps/jeebak/readme.md | 8 +++++--- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index aa5c415938..7dc8760ec4 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -49,6 +49,9 @@ enum macro_keycodes { KC_AG_PASTE, KC_AG_DESK_L, KC_AG_DESK_R, + KC_AG_TAB_C, + KC_AG_TAB_N, + KC_AG_TAB_R, }; // Fillers to make layering more clear @@ -73,6 +76,9 @@ enum macro_keycodes { #define AG_PASTE M(KC_AG_PASTE) #define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and #define AG_D_R M(KC_AG_DESK_R) // Right +#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, +#define AG_T_N M(KC_AG_TAB_N) // Tab New, and +#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -170,9 +176,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| + * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | + * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -183,8 +189,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_TOUCHCURSOR] = { {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______}, - {_______, KC_LALT, KC_SPC, _______, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R }, - {_______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, CMD_SLSH,_______}, + {_______, KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R }, + {_______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE,KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R, CMD_SLSH,_______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -404,6 +410,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); case KC_AG_DESK_R: return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); + + case KC_AG_TAB_C: + return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END ); + case KC_AG_TAB_N: + return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END ); + case KC_AG_TAB_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END ); } return MACRO_NONE; diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 28ae34f475..b43f8a2fba 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -85,14 +85,16 @@ keycodes do not seem to work. There are macros in place that'll "automatically" choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`, etc.) depending on which layout you've currently selected (`AG_NORM` or `AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I -use to switch between Virtual Desktops Left/Right. +use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and +`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as +Google Chrome. ``` ,-----------------------------------------------------------------------------------. |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| - | | Alt |Space | | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| + | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R| |------+------+------+------+------+------|------+------+------+------+------+------| - | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | | + | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From b5fcb5a7447424a160b86b4d2c0d2ea29ae1d813 Mon Sep 17 00:00:00 2001 From: Toni Date: Sun, 7 Aug 2016 11:37:28 +0200 Subject: new variant with the curly braces on tab layer --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 48 +++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 3ee141eb45..71c205a489 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -27,11 +27,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' LEFT DWN RIGHT */ [_DEF] = KEYMAP_ISO_SPLITRSHIFT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - LT(_TAB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - CTL_T(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_NUHS, CTL_T(KC_ENT), \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), SFT_T(KC_UP), \ - KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, ALT_T(KC_LEFT), GUI_T(KC_DOWN), CTL_T(KC_RIGHT)), + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + LT(_TAB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + CTL_T(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_NUHS, CTL_T(KC_ENT), \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), SFT_T(KC_UP), \ + KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, ALT_T(KC_LEFT), GUI_T(KC_DOWN), CTL_T(KC_RIGHT)), /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) * ,-----------------------------------------------------------. @@ -39,27 +39,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | |Paus| Up| [ | ] | | | | ( | ) | | | | | * |-----------------------------------------------------------| - * | |Lft|Dwn|Rgt| | | |Left|Down|Right|Up| | PLAY | + * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY | * |-----------------------------------------------------------| - * | | | | | < | > | |M0 | | { | } | | Vol+ | | + * | | | | | < | > | |M0 | | | | | Vol+ | | * |-----------------------------------------------------------| * | | | | |Alt |Prev|Vol-|Next| * `-----------------------------------------------------------' */ [_SPC] = KEYMAP_ISO_SPLITRSHIFT( - KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS, LSFT(KC_8), LSFT(KC_9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), RALT(KC_7), RALT(KC_0), KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), + KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS, LSFT(KC_8), LSFT(KC_9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) * ,-----------------------------------------------------------. * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE * |-----------------------------------------------------------| - * | | | | | | | | | | | | | | | + * | | | | | | | | | { | } | | | | | * |-----------------------------------------------------------| - * | | | | | | | |Pos1|PgDn|PgUp|End| |Retrn | + * | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn | * |-----------------------------------------------------------| * | | | | | | | |AF2| | | | | PgUp | | * |-----------------------------------------------------------| @@ -67,11 +67,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_TAB] = KEYMAP_ISO_SPLITRSHIFT( - KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_7), RALT(KC_0), 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) * ,-----------------------------------------------------------. @@ -87,11 +87,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_SFX] = KEYMAP_ISO_SPLITRSHIFT( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ - KC_TRNS, F(2), F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ - KC_TRNS, F(4), F(5), F(6), F(7), F(8), F(9), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ + KC_TRNS, F(2), F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ + KC_TRNS, F(4), F(5), F(6), F(7), F(8), F(9), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), }; enum function_id { -- cgit v1.2.3 From c5ee24a6c3ea39e9725dfc276c92d5bce726ca78 Mon Sep 17 00:00:00 2001 From: kuel Date: Sun, 7 Aug 2016 11:01:12 -0500 Subject: Add keymap_russian.h, a software implementation of Russian rename keymap_cyrillic.h to keymap_unicode_cyrillic.h changed CY_RUBLE and CY_NUMERO to CY_RUBL and CY_NMRO in keymap_unicode_cyrillic.h --- quantum/keymap_extras/keymap_cyrillic.h | 161 ----------------------- quantum/keymap_extras/keymap_russian.h | 79 ++++++++++++ quantum/keymap_extras/keymap_unicode_cyrillic.h | 163 ++++++++++++++++++++++++ 3 files changed, 242 insertions(+), 161 deletions(-) delete mode 100644 quantum/keymap_extras/keymap_cyrillic.h create mode 100644 quantum/keymap_extras/keymap_russian.h create mode 100644 quantum/keymap_extras/keymap_unicode_cyrillic.h diff --git a/quantum/keymap_extras/keymap_cyrillic.h b/quantum/keymap_extras/keymap_cyrillic.h deleted file mode 100644 index d5390afff5..0000000000 --- a/quantum/keymap_extras/keymap_cyrillic.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef KEYMAP_CYRILLIC_H -#define KEYMAP_CYRILLIC_H - -#include "keymap.h" - -/* - * This is based off of - * https://en.wikipedia.org/wiki/Cyrillic_script - */ - -// Capital Char russian/ukrainian/bulgarian -#define CY_A UC(0x0410) // А rus ukr bul -#define CY_BE UC(0x0411) // Б rus ukr bul -#define CY_VE UC(0x0412) // В rus ukr bul -#define CY_GHE UC(0x0413) // Г rus ukr bul -#define CY_GHEUP UC(0x0490) // Ґ ukr -#define CY_DE UC(0x0414) // Д rus ukr bul -#define CY_DJE UC(0x0402) // Ђ -#define CY_GJE UC(0x0403) // Ѓ -#define CY_IE UC(0x0415) // Е rus ukr bul -#define CY_IO UC(0x0401) // Ё rus -#define CY_UIE UC(0x0404) // Є ukr -#define CY_ZHE UC(0x0416) // Ж rus ukr bul -#define CY_ZE UC(0x0417) // З rus ukr bul -#define CY_DZE UC(0x0405) // Ѕ -#define CY_I UC(0x0418) // И rus ukr bul -#define CY_B_U_I UC(0x0406) // І ukr -#define CY_YI UC(0x0407) // Ї ukr -#define CY_SRT_I UC(0x0419) // Й rus ukr bul -#define CY_JE UC(0x0408) // Ј -#define CY_KA UC(0x041a) // К rus ukr bul -#define CY_EL UC(0x041b) // Л rus ukr bul -#define CY_LJE UC(0x0409) // Љ -#define CY_EM UC(0x041c) // М rus ukr bul -#define CY_EN UC(0x041d) // Н rus ukr bul -#define CY_NJE UC(0x040a) // Њ -#define CY_O UC(0x041e) // О rus ukr bul -#define CY_PE UC(0x041f) // П rus ukr bul -#define CY_ER UC(0x0420) // Р rus ukr bul -#define CY_ES UC(0x0421) // С rus ukr bul -#define CY_TE UC(0x0422) // Т rus ukr bul -#define CY_TSHE UC(0x040b) // Ћ -#define CY_KJE UC(0x040c) // Ќ -#define CY_U UC(0x0423) // У rus ukr bul -#define CY_SRT_U UC(0x040e) // Ў -#define CY_EF UC(0x0424) // Ф rus ukr bul -#define CY_HA UC(0x0425) // Х rus bul -#define CY_TSE UC(0x0426) // Ц rus ukr bul -#define CY_CHE UC(0x0427) // Ч rus ukr bul -#define CY_DZHE UC(0x040f) // Џ -#define CY_SHA UC(0x0428) // Ш rus ukr bul -#define CY_SHCHA UC(0x0429) // Щ rus ukr bul -#define CY_HSIGN UC(0x042a) // Ъ rus bul -#define CY_YERU UC(0x042b) // Ы rus -#define CY_SSIGN UC(0x042c) // Ь rus ukr bul -#define CY_E UC(0x042d) // Э rus -#define CY_YU UC(0x042e) // Ю rus ukr bul -#define CY_YA UC(0x042f) // Я rus ukr bul -// Important Cyrillic non-Slavic letters -#define CY_PALOCHKA UC(0x04c0) // Ӏ -#define CY_SCHWA UC(0x04d8) // Ә -#define CY_GHE_S UC(0x0492) // Ғ -#define CY_ZE_D UC(0x0498) // Ҙ -#define CY_ES_D UC(0x04aa) // Ҫ -#define CY_BR_KA UC(0x04a0) // Ҡ -#define CY_ZHE_D UC(0x0496) // Җ -#define CY_KA_D UC(0x049a) // Қ -#define CY_EN_D UC(0x04a2) // Ң -#define CY_ENGHE UC(0x04a4) // Ҥ -#define CY_BRD_O UC(0x04e8) // Ө -#define CY_STR_U UC(0x04ae) // Ү -#define CY_S_U_S UC(0x04b0) // Ұ -#define CY_SHHA UC(0x04ba) // Һ -#define CY_HA_D UC(0x04b2) // Ҳ - - -// Small -#define CY_a UC(0x0430) // a rus ukr bul -#define CY_be UC(0x0431) // б rus ukr bul -#define CY_ve UC(0x0432) // в rus ukr bul -#define CY_ghe UC(0x0433) // г rus ukr bul -#define CY_gheup UC(0x0491) // ґ ukr -#define CY_de UC(0x0434) // д rus ukr bul -#define CY_dje UC(0x0452) // ђ -#define CY_gje UC(0x0453) // ѓ -#define CY_ie UC(0x0435) // е rus ukr bul -#define CY_io UC(0x0451) // ё rus -#define CY_uie UC(0x0454) // є ukr -#define CY_zhe UC(0x0436) // ж rus ukr bul -#define CY_ze UC(0x0437) // з rus ukr bul -#define CY_dze UC(0x0455) // ѕ -#define CY_i UC(0x0438) // и rus ukr bul -#define CY_b_u_i UC(0x0456) // і ukr -#define CY_yi UC(0x0457) // ї ukr -#define CY_srt_i UC(0x0439) // й rus ukr bul -#define CY_je UC(0x0458) // ј -#define CY_ka UC(0x043a) // к rus ukr bul -#define CY_el UC(0x043b) // л rus ukr bul -#define CY_lje UC(0x0459) // љ -#define CY_em UC(0x043c) // м rus ukr bul -#define CY_en UC(0x043d) // н rus ukr bul -#define CY_nje UC(0x045a) // њ -#define CY_o UC(0x043e) // о rus ukr bul -#define CY_pe UC(0x043f) // п rus ukr bul -#define CY_er UC(0x0440) // р rus ukr bul -#define CY_es UC(0x0441) // с rus ukr bul -#define CY_te UC(0x0442) // т rus ukr bul -#define CY_tshe UC(0x045b) // ћ -#define CY_kje UC(0x045c) // ќ -#define CY_u UC(0x0443) // у rus ukr bul -#define CY_srt_u UC(0x045e) // ў -#define CY_ef UC(0x0444) // ф rus ukr bul -#define CY_ha UC(0x0445) // х rus ukr bul -#define CY_tse UC(0x0446) // ц rus ukr bul -#define CY_che UC(0x0447) // ч rus ukr bul -#define CY_dzhe UC(0x045f) // џ -#define CY_sha UC(0x0448) // ш rus ukr bul -#define CY_shcha UC(0x0449) // щ rus ukr bul -#define CY_hsign UC(0x044a) // ъ rus bul -#define CY_yeru UC(0x044b) // ы rus -#define CY_ssign UC(0x044c) // ь rus ukr bul -#define CY_e UC(0x044d) // э rus -#define CY_yu UC(0x044e) // ю rus ukr bul -#define CY_ya UC(0x044f) // я rus ukr bul -// Important Cyrillic non-Slavic letters -#define CY_palochka UC(0x04cf) // ӏ -#define CY_schwa UC(0x04d9) // ә -#define CY_ghe_s UC(0x0493) // ғ -#define CY_ze_d UC(0x0499) // ҙ -#define CY_es_d UC(0x04ab) // ҫ -#define CY_br_ka UC(0x04a1) // ҡ -#define CY_zhe_d UC(0x0497) // җ -#define CY_ka_d UC(0x049b) // қ -#define CY_en_d UC(0x04a3) // ң -#define CY_enghe UC(0x04a5) // ҥ -#define CY_brd_o UC(0x04e9) // ө -#define CY_str_u UC(0x04af) // ү -#define CY_s_u_s UC(0x04b1) // ұ -#define CY_shha UC(0x04bb) // һ -#define CY_ha_d UC(0x04b3) // ҳ - - -// Extra -#define CY_slr_ve UC(0x1c80) // ᲀ CYRILLIC SMALL LETTER ROUNDED VE -#define CY_ll_de UC(0x1c81) // ᲁ CYRILLIC SMALL LETTER LONG-LEGGED DE -#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA -#define CY_zemlya UC(0xa641) // ꙁ CYRILLIC SMALL LETTER ZEMLYA -#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE -#define CY_rv_DZE UC(0xa645) // ꙅ CYRILLIC SMALL LETTER REVERSED DZE -#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES -#define CY_st_te UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE -#define CY_3l_te UC(0x1c85) // ᲅ CYRILLIC SMALL LETTER THREE-LEGGED TE -#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN -#define CY_YERUBY UC(0xa650) // Ꙑ CYRILLIC CAPITAL LETTER YERU WITH BACK YER -#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER -#define CY_RUBLE UC(0x20bd) // ₽ -#define CY_NUMERO UC(0x2116) // № - -// The letters Zje and Sje are made for other letters and accent marks - -#endif diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h new file mode 100644 index 0000000000..efb63a5cc2 --- /dev/null +++ b/quantum/keymap_extras/keymap_russian.h @@ -0,0 +1,79 @@ +#ifndef KEYMAP_RUSSIAN_H +#define KEYMAP_RUSSIAN_H + +#include "keymap.h" + +// rename ruble and numero in keymap_cyrillic.c + +// Normal Chracters // reg SHIFT +#define RU_A KC_F // а and А +#define RU_BE KC_COMM // б and Б +#define RU_VE KC_D // в and В +#define RU_GHE KC_U // г and Г +#define RU_DE KC_L // д and Д +#define RU_IE KC_T // е and Е +#define RU_IO KC_GRV // ё and Ё +#define RU_ZHE KC_SCLN // ж and Ж +#define RU_ZE KC_P // з and З +#define RU_I KC_B // и and И +#define RU_SRT_I KC_Q // й and Й +#define RU_KA KC_R // к and К +#define RU_EL KC_K // л and Л +#define RU_EM KC_V // м and М +#define RU_EN KC_Y // н and Н +#define RU_O KC_J // о and О +#define RU_PE KC_G // п and П +#define RU_ER KC_H // р and Р +#define RU_ES KC_C // с and С +#define RU_TE KC_N // т and Т +#define RU_U KC_E // у and У +#define RU_EF KC_A // ф and Ф +#define RU_HA KC_LBRC // х and Х +#define RU_TSE KC_W // ц and Ц +#define RU_CHE KC_X // ч and Ч +#define RU_SHA KC_I // ш and Ш +#define RU_SHCHA KC_O // щ and Щ +#define RU_HSIGN KC_RBRC // ъ and Ъ +#define RU_YERU KC_S // ы and Ы +#define RU_SSIGN KC_M // ь and Ь +#define RU_E KC_QUOT // э and Э +#define RU_YU KC_DOT // ю and Ю +#define RU_YA KC_Z // я and Я + +#define RU_1 KC_1 // 1 and ! +#define RU_2 KC_2 // 2 and " +#define RU_3 KC_3 // 3 and № +#define RU_4 KC_4 // 4 and ; +#define RU_5 KC_5 // 5 and % +#define RU_6 KC_6 // 6 and : +#define RU_7 KC_7 // 7 and ? +#define RU_8 KC_8 // 8 and * +#define RU_9 KC_9 // 9 and ( +#define RU_0 KC_0 // 0 and ) + +#define RU_MINS KC_MINS // - and _ +#define RU_EQL KC_EQL // = and + +#define RU_BSLS KC_BSLS // \ and / +#define RU_DOT KC_SLSH // . and , + +// Shifted Chracters +#define RU_EXLM LSFT(RU_1) // ! +#define RU_DQUT LSFT(RU_2) // " +#define RU_NMRO LSFT(RU_3) // № +#define RU_SCLN LSFT(RU_4) // ; +#define RU_PERC LSFT(RU_5) // % +#define RU_COLN LSFT(RU_6) // : +#define RU_QUES LSFT(RU_7) // ? +#define RU_ASTR LSFT(RU_8) // * +#define RU_LPRN LSFT(RU_9) // ( +#define RU_RPRN LSFT(RU_0) // ) + +#define RU_UNDR LSFT(RU_MINS) // _ +#define RU_PLUS LSFT(RU_EQL) // + +#define RU_SLSH LSFT(RU_BSLS) // / +#define RU_COMM LSFT(RU_DOT) // , + +// Alt Gr-ed characters +#define RU_RUBL RALT(RU_8) // ₽ + +#endif diff --git a/quantum/keymap_extras/keymap_unicode_cyrillic.h b/quantum/keymap_extras/keymap_unicode_cyrillic.h new file mode 100644 index 0000000000..a40626d911 --- /dev/null +++ b/quantum/keymap_extras/keymap_unicode_cyrillic.h @@ -0,0 +1,163 @@ +#ifndef KEYMAP_CYRILLIC_H +#define KEYMAP_CYRILLIC_H + +#include "keymap.h" + +/* + * This is based off of + * https://en.wikipedia.org/wiki/Cyrillic_script + * + * Unicode is iffy, a software implementation is preferred + */ + +// Capital Char russian/ukrainian/bulgarian +#define CY_A UC(0x0410) // А rus ukr bul +#define CY_BE UC(0x0411) // Б rus ukr bul +#define CY_VE UC(0x0412) // В rus ukr bul +#define CY_GHE UC(0x0413) // Г rus ukr bul +#define CY_GHEUP UC(0x0490) // Ґ ukr +#define CY_DE UC(0x0414) // Д rus ukr bul +#define CY_DJE UC(0x0402) // Ђ +#define CY_GJE UC(0x0403) // Ѓ +#define CY_IE UC(0x0415) // Е rus ukr bul +#define CY_IO UC(0x0401) // Ё rus +#define CY_UIE UC(0x0404) // Є ukr +#define CY_ZHE UC(0x0416) // Ж rus ukr bul +#define CY_ZE UC(0x0417) // З rus ukr bul +#define CY_DZE UC(0x0405) // Ѕ +#define CY_I UC(0x0418) // И rus ukr bul +#define CY_B_U_I UC(0x0406) // І ukr +#define CY_YI UC(0x0407) // Ї ukr +#define CY_SRT_I UC(0x0419) // Й rus ukr bul +#define CY_JE UC(0x0408) // Ј +#define CY_KA UC(0x041a) // К rus ukr bul +#define CY_EL UC(0x041b) // Л rus ukr bul +#define CY_LJE UC(0x0409) // Љ +#define CY_EM UC(0x041c) // М rus ukr bul +#define CY_EN UC(0x041d) // Н rus ukr bul +#define CY_NJE UC(0x040a) // Њ +#define CY_O UC(0x041e) // О rus ukr bul +#define CY_PE UC(0x041f) // П rus ukr bul +#define CY_ER UC(0x0420) // Р rus ukr bul +#define CY_ES UC(0x0421) // С rus ukr bul +#define CY_TE UC(0x0422) // Т rus ukr bul +#define CY_TSHE UC(0x040b) // Ћ +#define CY_KJE UC(0x040c) // Ќ +#define CY_U UC(0x0423) // У rus ukr bul +#define CY_SRT_U UC(0x040e) // Ў +#define CY_EF UC(0x0424) // Ф rus ukr bul +#define CY_HA UC(0x0425) // Х rus bul +#define CY_TSE UC(0x0426) // Ц rus ukr bul +#define CY_CHE UC(0x0427) // Ч rus ukr bul +#define CY_DZHE UC(0x040f) // Џ +#define CY_SHA UC(0x0428) // Ш rus ukr bul +#define CY_SHCHA UC(0x0429) // Щ rus ukr bul +#define CY_HSIGN UC(0x042a) // Ъ rus bul +#define CY_YERU UC(0x042b) // Ы rus +#define CY_SSIGN UC(0x042c) // Ь rus ukr bul +#define CY_E UC(0x042d) // Э rus +#define CY_YU UC(0x042e) // Ю rus ukr bul +#define CY_YA UC(0x042f) // Я rus ukr bul +// Important Cyrillic non-Slavic letters +#define CY_PALOCHKA UC(0x04c0) // Ӏ +#define CY_SCHWA UC(0x04d8) // Ә +#define CY_GHE_S UC(0x0492) // Ғ +#define CY_ZE_D UC(0x0498) // Ҙ +#define CY_ES_D UC(0x04aa) // Ҫ +#define CY_BR_KA UC(0x04a0) // Ҡ +#define CY_ZHE_D UC(0x0496) // Җ +#define CY_KA_D UC(0x049a) // Қ +#define CY_EN_D UC(0x04a2) // Ң +#define CY_ENGHE UC(0x04a4) // Ҥ +#define CY_BRD_O UC(0x04e8) // Ө +#define CY_STR_U UC(0x04ae) // Ү +#define CY_S_U_S UC(0x04b0) // Ұ +#define CY_SHHA UC(0x04ba) // Һ +#define CY_HA_D UC(0x04b2) // Ҳ + + +// Small +#define CY_a UC(0x0430) // a rus ukr bul +#define CY_be UC(0x0431) // б rus ukr bul +#define CY_ve UC(0x0432) // в rus ukr bul +#define CY_ghe UC(0x0433) // г rus ukr bul +#define CY_gheup UC(0x0491) // ґ ukr +#define CY_de UC(0x0434) // д rus ukr bul +#define CY_dje UC(0x0452) // ђ +#define CY_gje UC(0x0453) // ѓ +#define CY_ie UC(0x0435) // е rus ukr bul +#define CY_io UC(0x0451) // ё rus +#define CY_uie UC(0x0454) // є ukr +#define CY_zhe UC(0x0436) // ж rus ukr bul +#define CY_ze UC(0x0437) // з rus ukr bul +#define CY_dze UC(0x0455) // ѕ +#define CY_i UC(0x0438) // и rus ukr bul +#define CY_b_u_i UC(0x0456) // і ukr +#define CY_yi UC(0x0457) // ї ukr +#define CY_srt_i UC(0x0439) // й rus ukr bul +#define CY_je UC(0x0458) // ј +#define CY_ka UC(0x043a) // к rus ukr bul +#define CY_el UC(0x043b) // л rus ukr bul +#define CY_lje UC(0x0459) // љ +#define CY_em UC(0x043c) // м rus ukr bul +#define CY_en UC(0x043d) // н rus ukr bul +#define CY_nje UC(0x045a) // њ +#define CY_o UC(0x043e) // о rus ukr bul +#define CY_pe UC(0x043f) // п rus ukr bul +#define CY_er UC(0x0440) // р rus ukr bul +#define CY_es UC(0x0441) // с rus ukr bul +#define CY_te UC(0x0442) // т rus ukr bul +#define CY_tshe UC(0x045b) // ћ +#define CY_kje UC(0x045c) // ќ +#define CY_u UC(0x0443) // у rus ukr bul +#define CY_srt_u UC(0x045e) // ў +#define CY_ef UC(0x0444) // ф rus ukr bul +#define CY_ha UC(0x0445) // х rus ukr bul +#define CY_tse UC(0x0446) // ц rus ukr bul +#define CY_che UC(0x0447) // ч rus ukr bul +#define CY_dzhe UC(0x045f) // џ +#define CY_sha UC(0x0448) // ш rus ukr bul +#define CY_shcha UC(0x0449) // щ rus ukr bul +#define CY_hsign UC(0x044a) // ъ rus bul +#define CY_yeru UC(0x044b) // ы rus +#define CY_ssign UC(0x044c) // ь rus ukr bul +#define CY_e UC(0x044d) // э rus +#define CY_yu UC(0x044e) // ю rus ukr bul +#define CY_ya UC(0x044f) // я rus ukr bul +// Important Cyrillic non-Slavic letters +#define CY_palochka UC(0x04cf) // ӏ +#define CY_schwa UC(0x04d9) // ә +#define CY_ghe_s UC(0x0493) // ғ +#define CY_ze_d UC(0x0499) // ҙ +#define CY_es_d UC(0x04ab) // ҫ +#define CY_br_ka UC(0x04a1) // ҡ +#define CY_zhe_d UC(0x0497) // җ +#define CY_ka_d UC(0x049b) // қ +#define CY_en_d UC(0x04a3) // ң +#define CY_enghe UC(0x04a5) // ҥ +#define CY_brd_o UC(0x04e9) // ө +#define CY_str_u UC(0x04af) // ү +#define CY_s_u_s UC(0x04b1) // ұ +#define CY_shha UC(0x04bb) // һ +#define CY_ha_d UC(0x04b3) // ҳ + + +// Extra +#define CY_slr_ve UC(0x1c80) // ᲀ CYRILLIC SMALL LETTER ROUNDED VE +#define CY_ll_de UC(0x1c81) // ᲁ CYRILLIC SMALL LETTER LONG-LEGGED DE +#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA +#define CY_zemlya UC(0xa641) // ꙁ CYRILLIC SMALL LETTER ZEMLYA +#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE +#define CY_rv_DZE UC(0xa645) // ꙅ CYRILLIC SMALL LETTER REVERSED DZE +#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES +#define CY_st_te UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE +#define CY_3l_te UC(0x1c85) // ᲅ CYRILLIC SMALL LETTER THREE-LEGGED TE +#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN +#define CY_YERUBY UC(0xa650) // Ꙑ CYRILLIC CAPITAL LETTER YERU WITH BACK YER +#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER +#define CY_RUBL UC(0x20bd) // ₽ +#define CY_NMRO UC(0x2116) // № + +// The letters Zje and Sje are made for other letters and accent marks + +#endif -- cgit v1.2.3 From 2a0121a78643b1dc774d82352f8c9e246010803e Mon Sep 17 00:00:00 2001 From: kuel Date: Sun, 7 Aug 2016 11:07:38 -0500 Subject: Removed unnecessary comment --- quantum/keymap_extras/keymap_russian.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h index efb63a5cc2..237e9abde3 100644 --- a/quantum/keymap_extras/keymap_russian.h +++ b/quantum/keymap_extras/keymap_russian.h @@ -3,8 +3,6 @@ #include "keymap.h" -// rename ruble and numero in keymap_cyrillic.c - // Normal Chracters // reg SHIFT #define RU_A KC_F // а and А #define RU_BE KC_COMM // б and Б -- cgit v1.2.3 From 3d86e5b7a796e8d574107109708ed873405a77dc Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sun, 7 Aug 2016 11:05:10 -0700 Subject: Tap for Tab, hold for Hyper --- keyboards/planck/keymaps/jeebak/keymap.c | 13 +++++---- keyboards/planck/keymaps/jeebak/readme.md | 46 +++++++++++++++++-------------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 7dc8760ec4..8541ecd8d5 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -61,6 +61,7 @@ enum macro_keycodes { // Custom macros #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper // Requires KC_TRNS/_______ for the trigger key in the destination layer #define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor #define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor @@ -84,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L | ; | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| @@ -94,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {CTL_ESC, KC_A, KC_S, LT_MC(KC_D),KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} @@ -102,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Colemak * ,-----------------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * | Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " | * |----------+------+------+------+------+------|------+------+------+------+------+--------| @@ -112,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ [_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}, + {HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, {CTL_ESC, KC_A, KC_R, LT_MC(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, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} @@ -120,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Dvorak * ,-----------------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * | Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / | * |----------+------+------+------+------+------|------+------+------+------+------+--------| @@ -130,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ [_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}, + {HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, {CTL_ESC, KC_A, KC_O, LT_MC(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, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index b43f8a2fba..8635679047 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -16,32 +16,36 @@ I also decided to change all calls to `persistant_default_layer_set()` to ## Base Layers (Qwerty/Colemak/Dvorak) These base layers are mostly the same as the default mappings. The interesting -changes are shown below. The `Ctrl/Esc`, mapped using `CTL_T(KC_ESC)` will emit -an `Escape` when tapped, and act as a `Control` key when held. A `TODO` item is -to see if it can also act as a `CapsLock` when double-tapped. The right shift -key acts as `Enter` when tapped, and as a `Shift` key when held. The arrow -keys, which have been moved to the +changes are shown below. + +- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held. +- The `Sft/Ent` as `Enter` and `Shift`, and +- The `Hyper/Tab` as `Tab` and `Hyper` + +A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped. +The arrow keys, which have been moved to the [TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been -replaced with the Media keys as shown. The `ML/A` key activates the Mouse layer -when held, and emits an `A` when tapped. +replaced with the Media keys as shown. The `MC/kc` key activates the +`MouseCursor` layer when held, and emits the corresponding `kc` for its layer, +when tapped. ``` ,-----------------------------------------------------------------------------------------. - | | | | | | | | | | | | | + | Hyper/Tab| | | | | | | | | | | | |----------+------+------+------+------+-------------+------+------+------+------+--------| - | Ctrl/Esc | ML/A | | | | | | | | | | | + | Ctrl/Esc | | |MC/kc | | | | | | | | | |----------+------+------+------+------+------|------+------+------+------+------+--------| | | | | | | | | | | | |Sft/Ent | |----------+------+------+------+------+------+------+------+------+------+------+--------| | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play | `-----------------------------------------------------------------------------------------' -``` - +``` + ## Lower Layer (Symbols and Function Keys) The symbols and functions keys are essentially the same as the default mapping. The most notable changes are that the symbol keys from the `RAISE` layer have been moved here. The remaining Media keys replace those that are now on the base layers. The `BACKLIT` key has also been moved here. -``` +``` ,-----------------------------------------------------------------------------------. | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | |------+------+------+------+------+-------------+------+------+------+------+------| @@ -51,13 +55,13 @@ base layers. The `BACKLIT` key has also been moved here. |------+------+------+------+------+------+------+------+------+------+------+------| |Brite | | | | | | | Prev | Stop | Slct | Mute | `-----------------------------------------------------------------------------------' -``` - +``` + ## Raise Layer (Numbers and Arithmetic Operators) All of the numbers and arithmetic operators are available on this layer. Some keys are duplicated for the convenience of their positions. The `0` and `$` keys at the far left are for quick access to beginning and end of line in vim. -``` +``` ,-----------------------------------------------------------------------------------. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |------+------+------+------+------+-------------+------+------+------+------+------| @@ -67,8 +71,8 @@ keys at the far left are for quick access to beginning and end of line in vim. |------+------+------+------+------+------+------+------+------+------+------+------| |Brite | | | | | | | Prev | Stop | Slct | Mute | `-----------------------------------------------------------------------------------' -``` - +``` + ## TouchCursor layer plus personal customizations [TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key as the modifier, with the `IJKL` home row keys representing the inverted-T of @@ -88,7 +92,7 @@ etc.) depending on which layout you've currently selected (`AG_NORM` or use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and `Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as Google Chrome. -``` +``` ,-----------------------------------------------------------------------------------. |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |------+------+------+------+------+-------------+------+------+------+------+------| @@ -98,7 +102,7 @@ Google Chrome. |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | `-----------------------------------------------------------------------------------' -``` +``` ## Mouse Layer The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer. @@ -108,7 +112,7 @@ IMHO. The left and right click buttons are duplicated; on the right hand side, for a quick click here and there, and again on the left hand side for when the buttons need to be held for dragging things or highlighting text, thus allowing the right hand to be free to use the up/down/left/right actions. -``` +``` ,-----------------------------------------------------------------------------------. | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | |------+------+------+------+------+-------------+------+------+------+------+------| @@ -118,4 +122,4 @@ the right hand to be free to use the up/down/left/right actions. |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | `-----------------------------------------------------------------------------------' -``` +``` -- cgit v1.2.3 From ef83f1d04f4cf85c1922632b8a759fe67a5b24cb Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sun, 7 Aug 2016 12:44:45 -0700 Subject: Tap for ;, hold for GUI, tap for ", hold for Alt --- keyboards/planck/keymaps/jeebak/keymap.c | 6 ++++-- keyboards/planck/keymaps/jeebak/readme.md | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index 8541ecd8d5..cb7ccb5884 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -62,6 +62,8 @@ enum macro_keycodes { #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift #define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper +#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI +#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt // Requires KC_TRNS/_______ for the trigger key in the destination layer #define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor #define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor @@ -87,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | * |----------+------+------+------+------+-------------+------+------+------+------+--------| - * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L | ; | " | + * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | * |----------+------+------+------+------+------|------+------+------+------+------+--------| * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent | * |----------+------+------+------+------+------+------+------+------+------+------+--------| @@ -96,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { {HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {CTL_ESC, KC_A, KC_S, LT_MC(KC_D),KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {CTL_ESC, KC_A, KC_S, LT_MC(KC_D),KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT}, {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index 8635679047..e1dd1dca51 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -18,9 +18,11 @@ I also decided to change all calls to `persistant_default_layer_set()` to These base layers are mostly the same as the default mappings. The interesting changes are shown below. -- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held. -- The `Sft/Ent` as `Enter` and `Shift`, and -- The `Hyper/Tab` as `Tab` and `Hyper` +- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held, +- `GUI/;` as `;` and `GUI`, +- `Alt/"` as `"` and `Alt`, +- `Sft/Ent` as `Enter` and `Shift`, and +- `Hyper/Tab` as `Tab` and `Hyper` A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped. The arrow keys, which have been moved to the @@ -32,7 +34,7 @@ when tapped. ,-----------------------------------------------------------------------------------------. | Hyper/Tab| | | | | | | | | | | | |----------+------+------+------+------+-------------+------+------+------+------+--------| - | Ctrl/Esc | | |MC/kc | | | | | | | | | + | Ctrl/Esc | | |MC/kc | | | | | | |GUI/; | Alt/" | |----------+------+------+------+------+------|------+------+------+------+------+--------| | | | | | | | | | | | |Sft/Ent | |----------+------+------+------+------+------+------+------+------+------+------+--------| -- cgit v1.2.3 From 8fab141a024fd55a28366958716f4be1a10f9c03 Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 7 Aug 2016 20:58:59 -1000 Subject: Convert hex to bin For flashing via alternative methods like LUFA MassStorage bootloader. --- tmk_core/avr.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 6c03e1650e..b48173341a 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -138,6 +138,11 @@ else endif dfu-programmer $(MCU) reset +# Convert hex to bin. +flashbin: $(BUILD_DIR)/$(TARGET).hex + $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; + $(COPY) $(BUILD_DIR)/$(TARGET).bin FLASH.bin; # Generate avr-gdb config/init file which does the following: # define the reset signal, load the target file, connect to target, and set -- cgit v1.2.3 From f41c2e6863f2ebf55311051cdead743683846a49 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Mon, 8 Aug 2016 17:53:08 +0200 Subject: Update TMK_README.md updated link to non-existent build.md file --- doc/TMK_README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/TMK_README.md b/doc/TMK_README.md index f3d96717a8..0c75a0e279 100644 --- a/doc/TMK_README.md +++ b/doc/TMK_README.md @@ -113,7 +113,7 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv Build Firmware and Program Controller ------------------------------------- -See [doc/build.md](tmk_core/doc/build.md), or the readme in the particular keyboards/* folder. +See [doc/BUILD_GUIDE.md](tmk_core/doc/BUILD_GUIDE.md), or the readme in the particular keyboards/* folder. -- cgit v1.2.3 From 76cd7c5444471c7fbf0f648088cac13f4c79af57 Mon Sep 17 00:00:00 2001 From: Corey Finley Date: Fri, 5 Aug 2016 09:08:55 -0400 Subject: Adds keymap based on Kinesis advantage --- keyboards/preonic/keymaps/kinesis/Makefile | 27 ++++++ keyboards/preonic/keymaps/kinesis/config.h | 92 ++++++++++++++++++ keyboards/preonic/keymaps/kinesis/keymap.c | 144 ++++++++++++++++++++++++++++ keyboards/preonic/keymaps/kinesis/readme.md | 1 + 4 files changed, 264 insertions(+) create mode 100644 keyboards/preonic/keymaps/kinesis/Makefile create mode 100644 keyboards/preonic/keymaps/kinesis/config.h create mode 100644 keyboards/preonic/keymaps/kinesis/keymap.c create mode 100644 keyboards/preonic/keymaps/kinesis/readme.md diff --git a/keyboards/preonic/keymaps/kinesis/Makefile b/keyboards/preonic/keymaps/kinesis/Makefile new file mode 100644 index 0000000000..6c8d2897cd --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/Makefile @@ -0,0 +1,27 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/kinesis/config.h b/keyboards/preonic/keymaps/kinesis/config.h new file mode 100644 index 0000000000..086baa84ff --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/config.h @@ -0,0 +1,92 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6061 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Preonic Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D1 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +#define TAPPING_TERM 200 + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c new file mode 100644 index 0000000000..1cd6eb9938 --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -0,0 +1,144 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _FN 1 +#define _ULCK 2 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define HYP_TIC ALL_T(KC_GRV) +#define EQ_LOCK TD(TD_EQ_LOCK) +#define MIN_ULK TD(TD_MIN_ULOCK) + +//Tap Dance Declarations +enum { + TD_EQ_LOCK = 0, + TD_MIN_ULOCK +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | FN | ` | Alt | LGUI | Back | ESC |ENTER | SPCE | RGUI | [ | ] | FN | + * `-----------------------------------------------------------------------------------' + */ + [_QWERTY] = { + {EQ_LOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MIN_ULK }, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS }, + {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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC }, + {MO(_FN), HYP_TIC, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, KC_RGUI, KC_LBRC, KC_RBRC, MO(_FN) } + }, + + /* Fn + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | VOL- | VOL+ | MUTE |BLtogg| | LEFT | DOWN | UP | RGHT | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | BL- | BL+ |Aud on|AudOff|AGnorm|AGswap| | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff| | |PLY/PS| | PREV | NEXT | | + * `-----------------------------------------------------------------------------------' + */ + [_FN] = { + {_______, 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_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______ }, + {_______, KC_VOLD, KC_VOLU, KC_MUTE, BL_TOGG, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______ }, + {_______, BL_DEC, BL_INC, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______ }, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, KC_MPLY, _______, KC_MPRV, KC_MNXT, _______ } + } + +}; + +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +/*bool process_record_user(uint16_t keycode, keyrecord_t *record) {*/ + /*return true;*/ + /*[>switch (keycode) {<]*/ + /*[>case QWERTY:<]*/ + /*[>return true;<]*/ + /*[>}<]*/ +/*};*/ + +void matrix_init_user(void) { + startup_user(); +} + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + + +const qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for equal, twice for hyper + X (alfred lock) + [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, HYPR(KC_X)), + //Tap once for minus, twice for time.heals.nothing + [TD_MIN_ULOCK] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, M(_ULCK)) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _ULCK: + if (record->event.pressed) { + /* time.heals.nothing */ + return MACRO( I(220), T(T), T(I), T(M), T(E), T(DOT), T(H), T(E), T(A), T(L), T(S), T(DOT), T(N), T(O), T(T), T(H), T(I), T(N), T(G), END); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/preonic/keymaps/kinesis/readme.md b/keyboards/preonic/keymaps/kinesis/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file -- cgit v1.2.3 From e85bf50e1acb9d5d3117e8b57ab6178eba00debb Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 8 Aug 2016 13:43:24 -0700 Subject: Clueboard: Add some readme.md files and do some minor cleanup. --- keyboards/clueboard/Makefile | 2 +- keyboards/clueboard/config.h | 3 - keyboards/clueboard/keymaps/default/keymap.c | 8 --- keyboards/clueboard/keymaps/skully/readme.md | 5 ++ keyboards/clueboard/readme.md | 95 +++++++++++++++++++++++++++- keyboards/clueboard/rev2/config.h | 2 +- 6 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 keyboards/clueboard/keymaps/skully/readme.md diff --git a/keyboards/clueboard/Makefile b/keyboards/clueboard/Makefile index ccc01ea9a7..e6b13f955a 100644 --- a/keyboards/clueboard/Makefile +++ b/keyboards/clueboard/Makefile @@ -90,7 +90,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options -# comment out to disable the options. +# change to no to disable the options. # BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h index ceac80795b..ad68323856 100644 --- a/keyboards/clueboard/config.h +++ b/keyboards/clueboard/config.h @@ -29,9 +29,6 @@ along with this program. If not, see . /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - /* Set 0 if debouncing isn't needed */ #define DEBOUNCING_DELAY 5 diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard/keymaps/default/keymap.c index 896bc7ebcc..01f158bf0f 100644 --- a/keyboards/clueboard/keymaps/default/keymap.c +++ b/keyboards/clueboard/keymaps/default/keymap.c @@ -66,19 +66,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_RS] = KEYMAP( - #ifdef RGBLIGHT_ENABLE KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI), - #else - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS), - #endif }; enum function_id { diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md new file mode 100644 index 0000000000..20ac1e4f83 --- /dev/null +++ b/keyboards/clueboard/keymaps/skully/readme.md @@ -0,0 +1,5 @@ +# The Maximized Clueboard Layout + +This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing. + +The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day. diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md index aa301f020c..6c29c09eca 100644 --- a/keyboards/clueboard/readme.md +++ b/keyboards/clueboard/readme.md @@ -1,4 +1,97 @@ Clueboard keyboard firmware ====================== -TODO: to be updated. +DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co). + +For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md). + +## First Time Setup + +Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex: + +``` +$ make +``` + +You will see a lot of output and if everything worked correctly you will see something similar to this: + +``` +Size after: + text data bss dec hex filename + 0 19992 0 19992 4e18 clueboard_rev2_default.hex +``` + +At this point you can press RESET on your Clueboard and flash your keyboard with this command: + +``` +$ make dfu +``` + +If you would like to use one of the alternative keymaps, or create your own, see below. + +## Clueboard 1.0 + +If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `SUBPROJECT=rev1` to your make command, like this: + +``` +$ make SUBPROJECT=rev1 +``` + +And when flashing your keyboard: + +``` +$ make SUBPROJECT=rev1 dfu +``` + +If you are flashing an alternative layout to your rev1, include both `SUBPROJECT=rev1` and `KEYMAP=` in your command, for example when flashing max: + +``` +$ make SUBPROJECT=rev1 KEYMAP=max dfu +``` + +## Alternate Keymaps + +There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `KEYMAP=` to your command: + +``` +$ make KEYMAP=skully +``` + +And when flashing your keyboard, put `KEYMAP=` between "make" and "dfu": + +``` +$ make KEYMAP=skully dfu +``` + +### Notable Layouts + +These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first: + +* [keymaps/default](keymaps/default) - The default Clueboard layout +* [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB. +* [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards. + +## Create Your Own Keymap + +There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend: + +* Copy `[keymaps/default](keymaps/default/)` to `keymaps/`. +* Compile the firmware (`$ make KEYMAP=`) +* Flash the firmware (`$ make KEYMAP= dfu`) +* Make sure everything works like the default keyboard +* Modify `keymaps//readme.md` to tell others about your layout. +* Modify `keymaps//keymap.c` to reflect your desired layout. +* Compile your new custom firmware (`$ make KEYMAP=`) +** If you have warnings you may flash without fixing them, but something may not work right. +** If you have any errors you must fix them before continuing. +* Flash the firmware (`$ make KEYMAP= dfu`) + +## Share Your Keymap + +Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request: + +* Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great. +* If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that +* If your layout requires special hardware to be added, please describe that in the readme.md + +TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :) diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard/rev2/config.h index 02982ff299..15ca4ece86 100644 --- a/keyboards/clueboard/rev2/config.h +++ b/keyboards/clueboard/rev2/config.h @@ -36,4 +36,4 @@ #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From d561f63bd14b8ea2e6d8b26a1ba46a1e8503c5bd Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 8 Aug 2016 13:46:55 -0700 Subject: Clueboard: Fix the title in keymaps/skully/readme.md --- keyboards/clueboard/keymaps/skully/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md index 20ac1e4f83..c1182123d9 100644 --- a/keyboards/clueboard/keymaps/skully/readme.md +++ b/keyboards/clueboard/keymaps/skully/readme.md @@ -1,4 +1,4 @@ -# The Maximized Clueboard Layout +# skullY's Clueboard Layout This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing. -- cgit v1.2.3 From adad05c3fbd511e77a77484945fa2f675d6abf8b Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 8 Aug 2016 16:11:54 -0700 Subject: Add support for the cluecard --- keyboards/cluecard/Makefile | 76 ++++++++++++ keyboards/cluecard/cluecard.c | 98 ++++++++++++++++ keyboards/cluecard/cluecard.h | 22 ++++ keyboards/cluecard/config.h | 167 +++++++++++++++++++++++++++ keyboards/cluecard/keymaps/default/Makefile | 21 ++++ keyboards/cluecard/keymaps/default/config.h | 8 ++ keyboards/cluecard/keymaps/default/keymap.c | 63 ++++++++++ keyboards/cluecard/keymaps/default/readme.md | 1 + keyboards/cluecard/readme.md | 28 +++++ 9 files changed, 484 insertions(+) create mode 100644 keyboards/cluecard/Makefile create mode 100644 keyboards/cluecard/cluecard.c create mode 100644 keyboards/cluecard/cluecard.h create mode 100644 keyboards/cluecard/config.h create mode 100644 keyboards/cluecard/keymaps/default/Makefile create mode 100644 keyboards/cluecard/keymaps/default/config.h create mode 100644 keyboards/cluecard/keymaps/default/keymap.c create mode 100644 keyboards/cluecard/keymaps/default/readme.md create mode 100644 keyboards/cluecard/readme.md diff --git a/keyboards/cluecard/Makefile b/keyboards/cluecard/Makefile new file mode 100644 index 0000000000..029d0b9670 --- /dev/null +++ b/keyboards/cluecard/Makefile @@ -0,0 +1,76 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= yes # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/cluecard/cluecard.c b/keyboards/cluecard/cluecard.c new file mode 100644 index 0000000000..81db252d28 --- /dev/null +++ b/keyboards/cluecard/cluecard.c @@ -0,0 +1,98 @@ +#include "cluecard.h" +#define BL_RED OCR1B +#define BL_GREEN OCR1A +#define BL_BLUE OCR1C + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} + +void backlight_init_ports(void) +{ + // Set B5, B6, and B7 as output + DDRB |= (1<<7)|(1<<6)|(1<<5); + + // Setup PWM + ICR1 = 0xFFFF; + TCCR1A = 0b10101010; + TCCR1B = 0b00011001; + + BL_RED = 0xFFFF; + BL_GREEN = 0xFFFF; + BL_BLUE = 0xFFFF; +} + +void backlight_set(uint8_t level) +{ + // Set the RGB color + switch (level) + { + case 0: + // Off + BL_RED = 0xFFFF; + BL_GREEN = 0xFFFF; + BL_BLUE = 0xFFFF; + break; + case 1: + // Red + BL_RED = 0x0000; + BL_GREEN = 0xFFFF; + BL_BLUE = 0xFFFF; + break; + case 2: + // Green + BL_RED = 0xFFFF; + BL_GREEN = 0x0000; + BL_BLUE = 0xFFFF; + break; + case 3: + // Blue + BL_RED = 0xFFFF; + BL_GREEN = 0xFFFF; + BL_BLUE = 0x0000; + break; + case 4: + // Magenta + BL_RED = 0x4000; + BL_GREEN = 0x4000; + BL_BLUE = 0x4000; + break; + case 5: + // Purple + BL_RED = 0x0000; + BL_GREEN = 0xFFFF; + BL_BLUE = 0x0000; + break; + case 6: + // Yellow + BL_RED = 0x0000; + BL_GREEN = 0x0000; + BL_BLUE = 0xFFFF; + break; + default: + xprintf("Unknown level: %d\n", level); + } +} diff --git a/keyboards/cluecard/cluecard.h b/keyboards/cluecard/cluecard.h new file mode 100644 index 0000000000..3342a08233 --- /dev/null +++ b/keyboards/cluecard/cluecard.h @@ -0,0 +1,22 @@ +#ifndef CLUECARD_H +#define CLUECARD_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, \ + k10, k12, \ + k20, k21, k22, \ + k11, \ + k30, k31, k32 \ +) { \ + { k00, k01, k02, }, \ + { k10, k11, k12, }, \ + { k20, k21, k22, }, \ + { k30, k31, k32, } \ +} + +#endif diff --git a/keyboards/cluecard/config.h b/keyboards/cluecard/config.h new file mode 100644 index 0000000000..765347b131 --- /dev/null +++ b/keyboards/cluecard/config.h @@ -0,0 +1,167 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xC1ED +#define PRODUCT_ID 0x2330 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Clueboard +#define PRODUCT ATMEGA32U4 Firmware Dev Kit +#define DESCRIPTION A small board to help you hack on QMK. + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 3 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F0, F5, F4, B4 } +#define MATRIX_COL_PINS { F1, F7, F6 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 20 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 6 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* Underlight configuration + */ +#define RGB_DI_PIN E6 +//#define RGBLIGHT_TIMER +#define RGBLED_NUM 4 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/cluecard/keymaps/default/Makefile b/keyboards/cluecard/keymaps/default/Makefile new file mode 100644 index 0000000000..8ee841da02 --- /dev/null +++ b/keyboards/cluecard/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/cluecard/keymaps/default/config.h b/keyboards/cluecard/keymaps/default/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/cluecard/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/cluecard/keymaps/default/keymap.c b/keyboards/cluecard/keymaps/default/keymap.c new file mode 100644 index 0000000000..517afe867b --- /dev/null +++ b/keyboards/cluecard/keymaps/default/keymap.c @@ -0,0 +1,63 @@ +#include "cluecard.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = KEYMAP( + RGB_TOG, RGB_SAI, RGB_VAI, \ + RGB_HUD, RGB_HUI, \ + RGB_MOD, RGB_SAD, RGB_VAD, \ + BL_STEP, \ + F(0), F(1), F(2) \ + ) +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(0), + [1] = ACTION_FUNCTION(1), + [2] = ACTION_FUNCTION(2) +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + if (record->event.pressed) { + switch (id) { + case 0: + PLAY_NOTE_ARRAY(tone_startup, false, 0); + break; + case 1: + PLAY_NOTE_ARRAY(music_scale, false, 0); + break; + case 2: + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + break; + } + } +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { +} diff --git a/keyboards/cluecard/keymaps/default/readme.md b/keyboards/cluecard/keymaps/default/readme.md new file mode 100644 index 0000000000..9e3b97beac --- /dev/null +++ b/keyboards/cluecard/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for cluecard diff --git a/keyboards/cluecard/readme.md b/keyboards/cluecard/readme.md new file mode 100644 index 0000000000..ae1afbbfdd --- /dev/null +++ b/keyboards/cluecard/readme.md @@ -0,0 +1,28 @@ +cluecard keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/cluecard folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` -- cgit v1.2.3 From 552399df4cef88463ea8ac40822d776d0fb90e18 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Mon, 8 Aug 2016 18:34:08 -0700 Subject: Adding my own keymaps to the following keyboards: Planck, Preonic, Atreus, Ergodox --- keyboards/atreus/keymaps/xyverz/keymap.c | 89 ++++++ keyboards/ergodox/keymaps/xyverz/dvorak.png | Bin 0 -> 87314 bytes keyboards/ergodox/keymaps/xyverz/keymap.c | 184 +++++++++++++ keyboards/ergodox/keymaps/xyverz/old_keymap.c | 311 +++++++++++++++++++++ keyboards/ergodox/keymaps/xyverz/readme.md | 10 + keyboards/planck/keymaps/xyverz/README.md | 2 + keyboards/planck/keymaps/xyverz/keymap.c | 379 ++++++++++++++++++++++++++ keyboards/planck/keymaps/xyverz/makefile.mk | 2 + keyboards/preonic/keymaps/xyverz/README.md | 49 ++++ keyboards/preonic/keymaps/xyverz/keymap.c | 342 +++++++++++++++++++++++ keyboards/preonic/keymaps/xyverz/makefile.mk | 1 + 11 files changed, 1369 insertions(+) create mode 100644 keyboards/atreus/keymaps/xyverz/keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/dvorak.png create mode 100644 keyboards/ergodox/keymaps/xyverz/keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/old_keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/readme.md create mode 100644 keyboards/planck/keymaps/xyverz/README.md create mode 100644 keyboards/planck/keymaps/xyverz/keymap.c create mode 100644 keyboards/planck/keymaps/xyverz/makefile.mk create mode 100644 keyboards/preonic/keymaps/xyverz/README.md create mode 100644 keyboards/preonic/keymaps/xyverz/keymap.c create mode 100644 keyboards/preonic/keymaps/xyverz/makefile.mk diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..447fbcf10f --- /dev/null +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -0,0 +1,89 @@ +// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by +// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and +// Preonic keyboards by Jack Humbert. + +#include "atreus.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DV 0 +#define _QW 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DV] = { /* Dvorak */ + {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L }, + {KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S }, + {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL), KC_B, KC_M, KC_W, KC_V, SFT_T(KC_Z) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL} + }, + [_QW] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_CM] = { /* Colemak */ + {KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O }, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_L1] = { /* LAYER 1 */ + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, + {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, + {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, + {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } + }, + [_L2] = { /* LAYER 2 */ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, + {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, + {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/xyverz/dvorak.png b/keyboards/ergodox/keymaps/xyverz/dvorak.png new file mode 100644 index 0000000000..cb83163095 Binary files /dev/null and b/keyboards/ergodox/keymaps/xyverz/dvorak.png differ diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..dd39dbacb2 --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -0,0 +1,184 @@ +#include "ergodox.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 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1), + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, 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_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, + KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, + MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, + KC_UP, KC_DOWN,KC_SLSH,KC_EQL, 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 +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/keyboards/ergodox/keymaps/xyverz/old_keymap.c b/keyboards/ergodox/keymaps/xyverz/old_keymap.c new file mode 100644 index 0000000000..e082372f9b --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/old_keymap.c @@ -0,0 +1,311 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +extern keymap_config_t keymap_config; + +#define _DVORAK 0 // default layer +#define _QWERTY 1 // symbols +#define _LOWER 2 +#define _RAISE 3 +#define _ADJUST 16 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + * Keymap 0: Dvorak + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ] | 1 | 2 | 3 | 4 | 5 | Esc | | ESC | 6 | 7 | 8 | 9 | 0 | [ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | Y | Y |(Null)| |(Null)| F | G | C | R | L | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| FN1 | | FN2 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtr | LAlt | | Ralt | RCtr | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + * + * + ***************************************************************************************************** + * This Dvorak keyboard layout stems from my early Kinesis years, using the Contour PS/2 with a Dvorak + * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the cor- + * ner keys. I've decided to continue using this layout with my ErgoDox. + */ + + [_DVORAK] = ( + KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, LOWER, + KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, + NO, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + RAISE, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC +), + +/* Keymap 1: QWERTY + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 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|' / Cmd | + * |--------+------+------+------+------+------| 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 | | | + * `--------------------' `----------------------' + */ +[_QWERTY] = ( + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, + 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, + KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + RAISE, KC_N, 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 +), + + +/* Lower 2: 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 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[_LOWER] = ( + // 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 +), + +/* Raise 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[_RAISE] = ( + 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 +), + +/* Adjust 16: Lower + Raise + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | Reset| | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| |Dvorak|Qwerty| | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[_ADJUST] = ( + KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, QWERTY, DVORAK, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DVORAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _QWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + 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/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md new file mode 100644 index 0000000000..8f6dba45e9 --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) diff --git a/keyboards/planck/keymaps/xyverz/README.md b/keyboards/planck/keymaps/xyverz/README.md new file mode 100644 index 0000000000..b0054fc305 --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/README.md @@ -0,0 +1,2 @@ +# Zrevyx's Planck Layout + diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..9ac78ec15d --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -0,0 +1,379 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _PLOVER 6 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) +#define PLOVER M(12) +#define EXT_PLV M(13) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Bksp |Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {440.0*pow(2.0,(31)/12.0), 12}, + {440.0*pow(2.0,(28)/12.0), 8}, + {440.0*pow(2.0,(19)/12.0), 8}, + {440.0*pow(2.0,(24)/12.0), 8}, + {440.0*pow(2.0,(28)/12.0), 20} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 12: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_off(_MUSIC); + stop_all_notes(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + break; + case 13: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + break; + + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} +#endif diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk new file mode 100644 index 0000000000..99fbfbd0bb --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/makefile.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = yes +NKRO_ENABLE = yes \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/README.md b/keyboards/preonic/keymaps/xyverz/README.md new file mode 100644 index 0000000000..9c23c5b9f3 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/README.md @@ -0,0 +1,49 @@ +# The default Preonic layout - largely based on the Planck's + +## QWERTY Layer: + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ + +## LOWER Layer: + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ + +## RAISE Layer: + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..adc7392e5c --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -0,0 +1,342 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_MINS, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, + {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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk new file mode 100644 index 0000000000..628167ff66 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/makefile.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = yes \ No newline at end of file -- cgit v1.2.3 From de1db144d06b488937633110b0598a1cac68f4fc Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:44:09 -0700 Subject: Delete dvorak.png Not reflective of my layout. --- keyboards/ergodox/keymaps/xyverz/dvorak.png | Bin 87314 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/xyverz/dvorak.png diff --git a/keyboards/ergodox/keymaps/xyverz/dvorak.png b/keyboards/ergodox/keymaps/xyverz/dvorak.png deleted file mode 100644 index cb83163095..0000000000 Binary files a/keyboards/ergodox/keymaps/xyverz/dvorak.png and /dev/null differ -- cgit v1.2.3 From bf93fa510bcc5cec84bcd9d81cb8fae6beb1ebb4 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:46:34 -0700 Subject: Delete readme.md file cleanup, removing file that doesn't apply to my layout. --- keyboards/ergodox/keymaps/xyverz/readme.md | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/xyverz/readme.md diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md deleted file mode 100644 index 8f6dba45e9..0000000000 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Default Configuration - -## Changelog - -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: - -![Default](default_highres.png) -- cgit v1.2.3 From c060afe68eb729fd3afcfdb3f16e28730ab868b3 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:47:13 -0700 Subject: Delete old_keymap.c file cleanup --- keyboards/ergodox/keymaps/xyverz/old_keymap.c | 311 -------------------------- 1 file changed, 311 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/xyverz/old_keymap.c diff --git a/keyboards/ergodox/keymaps/xyverz/old_keymap.c b/keyboards/ergodox/keymaps/xyverz/old_keymap.c deleted file mode 100644 index e082372f9b..0000000000 --- a/keyboards/ergodox/keymaps/xyverz/old_keymap.c +++ /dev/null @@ -1,311 +0,0 @@ -#include "ergodox.h" -#include "debug.h" -#include "action_layer.h" - -extern keymap_config_t keymap_config; - -#define _DVORAK 0 // default layer -#define _QWERTY 1 // symbols -#define _LOWER 2 -#define _RAISE 3 -#define _ADJUST 16 - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* - * Keymap 0: Dvorak - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ] | 1 | 2 | 3 | 4 | 5 | Esc | | ESC | 6 | 7 | 8 | 9 | 0 | [ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | ' | , | . | Y | Y |(Null)| |(Null)| F | G | C | R | L | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | - * |--------+------+------+------+------+------| FN1 | | FN2 |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LCtr | LAlt | | Ralt | RCtr | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * | BkSp | Del |------| |------| Enter| Space| - * | | | End | | PgDn | | | - * `--------------------' `--------------------' - * - * - ***************************************************************************************************** - * This Dvorak keyboard layout stems from my early Kinesis years, using the Contour PS/2 with a Dvorak - * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the cor- - * ner keys. I've decided to continue using this layout with my ErgoDox. - */ - - [_DVORAK] = ( - KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, - KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, LOWER, - KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, - KC_LCTL, KC_LALT, - KC_HOME, - KC_BSPC, KC_DEL, KC_END, - // right hand - KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, - NO, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, - KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - RAISE, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, - KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI, - KC_RALT, KC_RCTL, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC -), - -/* Keymap 1: QWERTY - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 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|' / Cmd | - * |--------+------+------+------+------+------| 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 | | | - * `--------------------' `----------------------' - */ -[_QWERTY] = ( - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, - 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, - KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - RAISE, KC_N, 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 -), - - -/* Lower 2: 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 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[_LOWER] = ( - // 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 -), - -/* Raise 3: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[_RAISE] = ( - 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 -), - -/* Adjust 16: Lower + Raise - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | Reset| | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| |Dvorak|Qwerty| | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[_ADJUST] = ( - KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, QWERTY, DVORAK, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) -}; - -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case _DVORAK: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); - } - break; - case _QWERTY: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); - } - break; - case _LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - break; - case _RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - 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 14938367626f0cddba4bc35abe62a9bcc02bee10 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:48:36 -0700 Subject: Delete README.md file clean up. --- keyboards/preonic/keymaps/xyverz/README.md | 49 ------------------------------ 1 file changed, 49 deletions(-) delete mode 100644 keyboards/preonic/keymaps/xyverz/README.md diff --git a/keyboards/preonic/keymaps/xyverz/README.md b/keyboards/preonic/keymaps/xyverz/README.md deleted file mode 100644 index 9c23c5b9f3..0000000000 --- a/keyboards/preonic/keymaps/xyverz/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# The default Preonic layout - largely based on the Planck's - -## QWERTY Layer: - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | - | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | - * `-----------------------------------------------------------------------------------' - */ - -## LOWER Layer: - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | - * `-----------------------------------------------------------------------------------' - */ - -## RAISE Layer: - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | - * `-----------------------------------------------------------------------------------' - */ \ No newline at end of file -- cgit v1.2.3 From 4e030313f7f55be7573eaab0b91e45290dc2d0b3 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:51:34 -0700 Subject: Delete README.md file cleanup --- keyboards/planck/keymaps/xyverz/README.md | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 keyboards/planck/keymaps/xyverz/README.md diff --git a/keyboards/planck/keymaps/xyverz/README.md b/keyboards/planck/keymaps/xyverz/README.md deleted file mode 100644 index b0054fc305..0000000000 --- a/keyboards/planck/keymaps/xyverz/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Zrevyx's Planck Layout - -- cgit v1.2.3 From c062b6a13d7974144b5ab02896d2213051fd91ad Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 8 Aug 2016 18:52:48 -0700 Subject: Delete keymap.c file cleanup --- keyboards/ergodox/keymaps/xyverz/keymap.c | 184 ------------------------------ 1 file changed, 184 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/xyverz/keymap.c diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c deleted file mode 100644 index dd39dbacb2..0000000000 --- a/keyboards/ergodox/keymaps/xyverz/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#include "ergodox.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 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | \ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1), - KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, 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_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, - TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, - KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, - MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, - KC_UP, KC_DOWN,KC_SLSH,KC_EQL, 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 -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 39dd3d674cfb7299ce377f70a678d3613f826e0a Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Mon, 8 Aug 2016 19:35:13 -0700 Subject: Changed behavior of _DVORAK layout's KC_RSFT to SFT_T(KC_ENT) for flexibility's sake. Updated the rest of the keymap to reflect the current (as of 19:37 on 08 Aug 2018) default layout and default makefile. --- keyboards/planck/keymaps/xyverz/README.md | 2 - keyboards/planck/keymaps/xyverz/keymap.c | 335 +++++++++++----------------- keyboards/planck/keymaps/xyverz/makefile.mk | 27 ++- 3 files changed, 160 insertions(+), 204 deletions(-) delete mode 100644 keyboards/planck/keymaps/xyverz/README.md diff --git a/keyboards/planck/keymaps/xyverz/README.md b/keyboards/planck/keymaps/xyverz/README.md deleted file mode 100644 index b0054fc305..0000000000 --- a/keyboards/planck/keymaps/xyverz/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Zrevyx's Planck Layout - diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c index 9ac78ec15d..90529428da 100644 --- a/keyboards/planck/keymaps/xyverz/keymap.c +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -19,25 +19,19 @@ extern keymap_config_t keymap_config; #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 -#define _MUSIC 5 -#define _PLOVER 6 +#define _PLOVER 5 #define _ADJUST 16 -// Macro name shortcuts -#define QWERTY M(_QWERTY) -#define COLEMAK M(_COLEMAK) -#define DVORAK M(_DVORAK) -#define LOWER M(_LOWER) -#define RAISE M(_RAISE) -#define M_BL 5 -#define AUD_OFF M(6) -#define AUD_ON M(7) -#define MUS_OFF M(8) -#define MUS_ON M(9) -#define VC_IN M(10) -#define VC_DE M(11) -#define PLOVER M(12) -#define EXT_PLV M(13) +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; // Fillers to make layering more clear #define _______ KC_TRNS @@ -60,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak @@ -78,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -95,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } }, @@ -114,7 +108,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______}, {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, - {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} + {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} }, /* Raise @@ -132,17 +126,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______}, {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, - {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} -}, - -/* Music (reserved for process_action_user) - * - */ -[_MUSIC] = { - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} + {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} }, /* Plover layer (http://opensteno.org) @@ -151,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | | S | T | P | H | * | * | F | P | L | T | D | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | S | K | W | R | * | * | R | B | G | S | Z | + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Exit | | | A | O | | E | U | | | | * `-----------------------------------------------------------------------------------' @@ -170,42 +154,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, - {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } -}; - -const uint16_t PROGMEM fn_actions[] = { - }; #ifdef AUDIO_ENABLE -float tone_startup[][2] = { - {440.0*pow(2.0,(31)/12.0), 12}, - {440.0*pow(2.0,(28)/12.0), 8}, - {440.0*pow(2.0,(19)/12.0), 8}, - {440.0*pow(2.0,(24)/12.0), 8}, - {440.0*pow(2.0,(28)/12.0), 20} -}; +float tone_startup[][2] = SONG(STARTUP_SOUND); float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float goodbye[][2] = SONG(GOODBYE_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -214,166 +188,127 @@ void persistant_default_layer_set(uint16_t default_layer) { default_layer_set(default_layer); } -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case _QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif - persistant_default_layer_set(1UL<<_QWERTY); - } - break; - case _COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistant_default_layer_set(1UL<<_COLEMAK); - } - break; - case _DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistant_default_layer_set(1UL<<_DVORAK); - } - break; - case _LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - break; - case _RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - break; - case M_BL: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - case 6: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - case 7: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - } - break; - case 8: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - layer_off(_MUSIC); - stop_all_notes(); - #endif - } - break; - case 9: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(music_scale, false, 0); - layer_on(_MUSIC); - #endif - } - break; - case 10: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; - case 11: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; - case 12: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover, false, 0); - #endif - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_off(_MUSIC); - stop_all_notes(); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); - } - break; - case 13: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); - #endif - layer_off(_PLOVER); - } - break; - +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); } - return MACRO_NONE; -}; + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - _delay_ms(20); // stops the tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif + #ifdef AUDIO_ENABLE + startup_user(); + #endif } #ifdef AUDIO_ENABLE -void play_goodbye_tone() + +void startup_user() { - PLAY_NOTE_ARRAY(goodbye, false, 0); - _delay_ms(150); + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); } -uint8_t starting_note = 0x0C; -int offset = 7; - -void process_action_user(keyrecord_t *record) { +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} - if (IS_LAYER_ON(_MUSIC)) { - if (record->event.pressed) { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } else { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } - } +void music_on_user(void) +{ + music_scale_user(); +} +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); } -#endif + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk index 99fbfbd0bb..0f4953888d 100644 --- a/keyboards/planck/keymaps/xyverz/makefile.mk +++ b/keyboards/planck/keymaps/xyverz/makefile.mk @@ -1,2 +1,25 @@ -AUDIO_ENABLE = yes -NKRO_ENABLE = yes \ No newline at end of file + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif -- cgit v1.2.3 From 5f37b11f2c300a95e0e9e34517c5c29a3345be83 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 9 Aug 2016 11:03:12 +0100 Subject: changed order of bottom row of symbol layer to ease acess to brackets --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index a747dcb159..ed187df1da 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | ~ | | | + | [ | { | } | ] | = | \ | ` | | + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMB] = { {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {_______, KC_TILD, KC_PIPE, KC_PLUS, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_EQL, KC_BSLS, KC_GRV, _______}, + {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From 725dd7328f9963959f72318af912ed66f5a5f513 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 9 Aug 2016 11:09:52 +0100 Subject: updated readme.md to reflect keymap changes --- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index d4f3449f15..030def7f77 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -31,9 +31,9 @@ On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ti None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/iuU144Y.png) +![](http://i.imgur.com/thh1ne2.png) -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, with brackets in the centre; then normally shifted symbols to the left, and non shifted to the right, in order of most to least used. +The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. `esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. -- cgit v1.2.3 From ca3278cc356038ecdaf96fe12025b43c18692976 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Tue, 9 Aug 2016 09:31:56 -0700 Subject: adds Xyverz's keymaps (#615) * Adding my own keymaps to the following keyboards: Planck, Preonic, Atreus, Ergodox * Delete dvorak.png Not reflective of my layout. * Delete readme.md file cleanup, removing file that doesn't apply to my layout. * Delete old_keymap.c file cleanup * Delete README.md file clean up. * Delete README.md file cleanup * Delete keymap.c file cleanup * Changed behavior of _DVORAK layout's KC_RSFT to SFT_T(KC_ENT) for flexibility's sake. Updated the rest of the keymap to reflect the current (as of 19:37 on 08 Aug 2018) default layout and default makefile. --- keyboards/atreus/keymaps/xyverz/keymap.c | 89 +++++++ keyboards/planck/keymaps/xyverz/keymap.c | 314 ++++++++++++++++++++++++ keyboards/planck/keymaps/xyverz/makefile.mk | 25 ++ keyboards/preonic/keymaps/xyverz/keymap.c | 342 +++++++++++++++++++++++++++ keyboards/preonic/keymaps/xyverz/makefile.mk | 1 + 5 files changed, 771 insertions(+) create mode 100644 keyboards/atreus/keymaps/xyverz/keymap.c create mode 100644 keyboards/planck/keymaps/xyverz/keymap.c create mode 100644 keyboards/planck/keymaps/xyverz/makefile.mk create mode 100644 keyboards/preonic/keymaps/xyverz/keymap.c create mode 100644 keyboards/preonic/keymaps/xyverz/makefile.mk diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..447fbcf10f --- /dev/null +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -0,0 +1,89 @@ +// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by +// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and +// Preonic keyboards by Jack Humbert. + +#include "atreus.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DV 0 +#define _QW 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DV] = { /* Dvorak */ + {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L }, + {KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S }, + {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL), KC_B, KC_M, KC_W, KC_V, SFT_T(KC_Z) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL} + }, + [_QW] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_CM] = { /* Colemak */ + {KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O }, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_L1] = { /* LAYER 1 */ + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, + {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, + {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, + {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } + }, + [_L2] = { /* LAYER 2 */ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, + {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, + {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..90529428da --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Bksp |Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk new file mode 100644 index 0000000000..0f4953888d --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/makefile.mk @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..adc7392e5c --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -0,0 +1,342 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_MINS, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, + {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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk new file mode 100644 index 0000000000..628167ff66 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/makefile.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = yes \ No newline at end of file -- cgit v1.2.3 From 2a160bbbe3ad496dd688f4399ab2b8d127c0b8a7 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 9 Aug 2016 17:33:07 +0100 Subject: Update keymap. (#616) * changed order of bottom row of symbol layer to ease acess to brackets * updated readme.md to reflect keymap changes --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index a747dcb159..ed187df1da 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | ~ | | | + | [ | { | } | ] | = | \ | ` | | + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMB] = { {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {_______, KC_TILD, KC_PIPE, KC_PLUS, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_EQL, KC_BSLS, KC_GRV, _______}, + {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index d4f3449f15..030def7f77 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -31,9 +31,9 @@ On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ti None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/iuU144Y.png) +![](http://i.imgur.com/thh1ne2.png) -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, with brackets in the centre; then normally shifted symbols to the left, and non shifted to the right, in order of most to least used. +The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. `esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. -- cgit v1.2.3 From 6f700f1eb0c76aa19187efd83ab2b49a0db7f71f Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Tue, 9 Aug 2016 23:49:27 -0700 Subject: Adding my own layouts for the Phantom and Ergodox. My Ergodox layout adds persistent layers based on the Planck and Preonic setup. The layout arrays are pulled directly from the ergodox/ez/ez.h keymap definition starting at line 81. --- keyboards/ergodox/keymaps/xyverz/keymap.c | 311 ++++++++++++++++++++++++++++++ keyboards/phantom/keymaps/xyverz/keymap.c | 67 +++++++ 2 files changed, 378 insertions(+) create mode 100644 keyboards/ergodox/keymaps/xyverz/keymap.c create mode 100644 keyboards/phantom/keymaps/xyverz/keymap.c diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..c5ce99dd22 --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -0,0 +1,311 @@ +/* + * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak + * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner + * keys. I've decided to continue using this layout with my ErgoDox. + * + * The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional + * keys as shown in the diagrams. The Colemak layout is merely an adaptation of that. + * + * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck + * layouts. + * + * For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the + * keymap is defined, beginning on line 81. + * + */ + +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define _DV 0 // Dvorak layer +#define _QW 1 // Qwerty layer +#define _CM 2 // Colemak layer +#define _MD 3 // Media Layer +#define _KP 4 // Keypad Layer + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtr | LAlt | | Ralt | RCtr | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + * + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[_DV] = { // layer 0 : Dvorak + // left hand + {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, + {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, + {KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL }, + {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC}, + {KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME}, + {KC_5, KC_Y, KC_I, KC_X, KC_NO, KC_LCTL}, + {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + + // right hand + {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, + {KC_6, KC_F, KC_D, KC_B, KC_NO, KC_RCTL}, + {KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP}, + {KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC }, + {KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT }, + {KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN}, + {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO } +}, + +/* Keymap 1: QWERTY layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtr | LAlt | | Ralt | RCtr | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[_QW] = { // layer 1 : QWERTY + // left hand + {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, + {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, + {KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL }, + {KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC}, + {KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME}, + {KC_5, KC_T, KC_G, KC_B, KC_NO, KC_LCTL}, + {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + + // right hand + {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, + {KC_6, KC_Y, KC_H, KC_N, KC_NO, KC_RCTL}, + {KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP}, + {KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC }, + {KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT }, + {KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN}, + {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } + }, + +/* Keymap 2: Colemak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtr | LAlt | | Ralt | RCtr | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[_CM] = { // layer 2 : Colemak + // left hand + {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO }, + {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, + {KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL }, + {KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC}, + {KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME}, + {KC_5, KC_G, KC_D, KC_B, KC_NO, KC_LCTL}, + {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + + // right hand + {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, + {KC_6, KC_J, KC_H, KC_K, KC_NO, KC_RCTL}, + {KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP}, + {KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC }, + {KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT }, + {KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN}, + {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } + }, + +/* Keymap 3: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | PrSc | ScLk | Paus | | FN4 | | FN5 | | Mute | Vol- | Vol+ | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | + * |--------+------+------+------+------+------| FN4 | | FN5 |------+------+------+------+------+--------| + * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// Media Layer +[_MD] = { // layer 3 : Media layer + // left hand + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }, + {KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_F2, KC_PSCR, KC_TRNS, DVORAK, KC_TRNS, KC_TRNS}, + {KC_F3, KC_SLCK, KC_TRNS, QWERTY, KC_TRNS, KC_TRNS}, + {KC_F4, KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS}, + {KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, + {KC_F11, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + + // right hand + {KC_F12, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + {KC_F6, KC_TRNS, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS}, + {KC_F7, KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_F8, KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_F9, KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_F10, KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO } + }, + +/* Keymap 4: Keypad layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Sleep | | | | | | FN5 | | FN4 | | KP 7 | KP 8 | KP 9 | KP + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | + * |--------+------+------+------+------+------| FN5 | | FN4 |------+------+------+------+------+--------| + * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | KP 0 | | KP . |KP Ent| | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// Keypad Layer +[_KP] = { // layer 4 : Keypad layer + // left hand + {KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, 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_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, + {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + + // right hand + {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, + {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, KC_TRNS}, + {KC_PSLS, KC_P8, KC_P5, KC_P2, KC_NO, KC_TRNS}, + {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, KC_TRNS}, + {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO } + }, + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + 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/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..5948e4ca54 --- /dev/null +++ b/keyboards/phantom/keymaps/xyverz/keymap.c @@ -0,0 +1,67 @@ +#include "phantom.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------------------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| + * |-----------------------------------------------------------| |--------------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| + * |-----------------------------------------------------------| |--------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| + * |-----------------------------------------------------------| `--------------' + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| ,----. + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | + * |-----------------------------------------------------------| ,-------------. + * |Ctrl|Gui |Alt | Space |ALT |GUI |_FL |CTRL | |Lft| Dn |Rig | + * `-----------------------------------------------------------' `-------------' + */ +[_BL] = KEYMAP( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DELETE, KC_END, KC_PGDN, \ + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------------------------. + * |RESET| | | | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| |--------------| + * | | | | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| |--------------| + * | | | | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| `--------------' + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------| ,----. + * | | F1| F2| F3| F4| F5|F6 |F7 |F8 | | | | | | + * |-----------------------------------------------------------| ,-------------. + * | | | | | | | | | | | | | + * `-----------------------------------------------------------' `-------------' + */ +[_FL] = KEYMAP( + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_SLEP, \ + RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE,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_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,KC_MSEL, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_CAPS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS) +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { +} -- cgit v1.2.3 From 0d6035524173219ced32abbfa2e78171edab17ff Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Tue, 9 Aug 2016 23:56:21 -0700 Subject: Added braces using LSFT(KC_LBRC) and LSFT(KC_RBRC) since the normal RBCR and LBCR didn't work for me. --- keyboards/atreus/keymaps/xyverz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index 447fbcf10f..f4d4a9cf0f 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, - {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } + {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET } } }; -- cgit v1.2.3 From 6975135f545d08955ed26ef046a0333e291af716 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Wed, 10 Aug 2016 11:40:51 +0200 Subject: updated reference Build setup links to main readme now. --- doc/TMK_README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/TMK_README.md b/doc/TMK_README.md index 0c75a0e279..e3438eda2b 100644 --- a/doc/TMK_README.md +++ b/doc/TMK_README.md @@ -113,7 +113,7 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv Build Firmware and Program Controller ------------------------------------- -See [doc/BUILD_GUIDE.md](tmk_core/doc/BUILD_GUIDE.md), or the readme in the particular keyboards/* folder. +See [build environment setup](/readme.md#build-environment-setup), or the readme in the particular keyboards/* folder. -- cgit v1.2.3 From aa1a90af66df6ab12a371416e23094315c4a43b3 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 11 Aug 2016 00:54:55 +0200 Subject: Added S60-X to keyboards with two layouts. --- .gitignore | 1 + keyboards/s60-x/Makefile | 75 ++++++++++++++ keyboards/s60-x/config.h | 164 ++++++++++++++++++++++++++++++ keyboards/s60-x/keymaps/default/Makefile | 21 ++++ keyboards/s60-x/keymaps/default/keymap.c | 92 +++++++++++++++++ keyboards/s60-x/keymaps/default/readme.md | 1 + keyboards/s60-x/keymaps/felix/Makefile | 21 ++++ keyboards/s60-x/keymaps/felix/keymap.c | 110 ++++++++++++++++++++ keyboards/s60-x/keymaps/felix/readme.md | 1 + keyboards/s60-x/readme.md | 32 ++++++ keyboards/s60-x/s60-x.c | 28 +++++ keyboards/s60-x/s60-x.h | 44 ++++++++ 12 files changed, 590 insertions(+) create mode 100644 keyboards/s60-x/Makefile create mode 100644 keyboards/s60-x/config.h create mode 100644 keyboards/s60-x/keymaps/default/Makefile create mode 100644 keyboards/s60-x/keymaps/default/keymap.c create mode 100644 keyboards/s60-x/keymaps/default/readme.md create mode 100644 keyboards/s60-x/keymaps/felix/Makefile create mode 100644 keyboards/s60-x/keymaps/felix/keymap.c create mode 100644 keyboards/s60-x/keymaps/felix/readme.md create mode 100644 keyboards/s60-x/readme.md create mode 100644 keyboards/s60-x/s60-x.c create mode 100644 keyboards/s60-x/s60-x.h diff --git a/.gitignore b/.gitignore index 8c85d6ffa8..07bbf13db1 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ CMakeLists.txt .settings/ .idea .browse.VC.db* +*.stackdump diff --git a/keyboards/s60-x/Makefile b/keyboards/s60-x/Makefile new file mode 100644 index 0000000000..57edd5e036 --- /dev/null +++ b/keyboards/s60-x/Makefile @@ -0,0 +1,75 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/s60-x/config.h b/keyboards/s60-x/config.h new file mode 100644 index 0000000000..d548a99b33 --- /dev/null +++ b/keyboards/s60-x/config.h @@ -0,0 +1,164 @@ +/* +Copyright 2012 Jun Wako +Copyright 2016 Julien Pecqueur +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Massdrop +#define PRODUCT S60-X +#define DESCRIPTION q.m.k. keyboard firmware for S60-X + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B7, B3, B2, B1, B0 } +#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, E6, F1 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/s60-x/keymaps/default/Makefile b/keyboards/s60-x/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/s60-x/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c new file mode 100644 index 0000000000..aa2856525c --- /dev/null +++ b/keyboards/s60-x/keymaps/default/keymap.c @@ -0,0 +1,92 @@ +/* +Copyright 2016 Julien Pecqueur +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "s60-x.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layout 0: Default Layer + * ,-----------------------------------------------------------. + * |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Fn1 |Gui |Alt | SpaceFn |Alt |Gui |App |Ctrl| + * `-----------------------------------------------------------' + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + FN1, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL), + + /* Layout 1: Function Layer + * ,-----------------------------------------------------------. + * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | + * |-----------------------------------------------------------| + * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins | + * |-----------------------------------------------------------| + * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | + * |-----------------------------------------------------------| + * | |Prt|Cut|Cop|Pst|Cal| | | | | |CapsLock | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ + TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP, PGDN, TRNS, SLCK, PAUS, INS, \ + TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END, TRNS, TRNS, PENT, \ + TRNS, TRNS, PSCR, FN2, FN3, FN4, CALC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +/* +* Fn action definition +*/ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), /* SpaceFn layout 1 */ + [1] = ACTION_LAYER_MOMENTARY(1), /* Momentary layout 1 */ + [2] = ACTION_MODS_KEY(MOD_LSFT, KC_DEL), /* Cut */ + [3] = ACTION_MODS_KEY(MOD_LCTL, KC_INS), /* Copy */ + [4] = ACTION_MODS_KEY(MOD_LSFT, KC_INS), /* Paste */ +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60-x/keymaps/default/readme.md new file mode 100644 index 0000000000..73318dad72 --- /dev/null +++ b/keyboards/s60-x/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for s60-x \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/Makefile b/keyboards/s60-x/keymaps/felix/Makefile new file mode 100644 index 0000000000..251e4631d3 --- /dev/null +++ b/keyboards/s60-x/keymaps/felix/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c new file mode 100644 index 0000000000..a5ff1ae4d9 --- /dev/null +++ b/keyboards/s60-x/keymaps/felix/keymap.c @@ -0,0 +1,110 @@ +/* +Copyright 2016 Julien Pecqueur +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "s60-x.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layout 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|BckSp| + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up |Fn1 | + * |-----------------------------------------------------------| + * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| + * `-----------------------------------------------------------' + */ + KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_FN1, \ + KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Layout 1: Gaming Layer, SpaceFn disabled + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | |Fn1 | + * |-----------------------------------------------------------| + * | | NOP| | Space | | | | | + * `-----------------------------------------------------------' + */ + KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN1, \ + KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + /* Layout 2: Function Layer + * ,-----------------------------------------------------------. + * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |RES| + * |-----------------------------------------------------------| + * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins | + * |-----------------------------------------------------------| + * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | + * |-----------------------------------------------------------| + * | |Prt| | | |Cal| | | | |Pau |PUp |Rsft| + * |-----------------------------------------------------------| + * | | | | | |Home|PDn |End | + * `-----------------------------------------------------------' + */ + KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DEBUG, RESET, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_SLCK, KC_PAUS, KC_INS, \ + KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_PENT, \ + KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_RSFT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), +}; + +/* +* Fn action definition +*/ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), /* SpaceFn layout 1 */ + [1] = ACTION_LAYER_TOGGLE(1), /* Disable SpaceFn */ + [2] = ACTION_LAYER_MOMENTARY(2) /* SpaceFn layout 1 */ +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/readme.md b/keyboards/s60-x/keymaps/felix/readme.md new file mode 100644 index 0000000000..73318dad72 --- /dev/null +++ b/keyboards/s60-x/keymaps/felix/readme.md @@ -0,0 +1 @@ +# The default keymap for s60-x \ No newline at end of file diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md new file mode 100644 index 0000000000..34c48b0b7d --- /dev/null +++ b/keyboards/s60-x/readme.md @@ -0,0 +1,32 @@ +S60-x keyboard firmware +====================== +DIY compact keyboard by Massdrop. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/jpec/s60x). + +## S60X Resources +- [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit) + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/s60-x folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file diff --git a/keyboards/s60-x/s60-x.c b/keyboards/s60-x/s60-x.c new file mode 100644 index 0000000000..417358140c --- /dev/null +++ b/keyboards/s60-x/s60-x.c @@ -0,0 +1,28 @@ +#include "s60-x.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h new file mode 100644 index 0000000000..714de30db8 --- /dev/null +++ b/keyboards/s60-x/s60-x.h @@ -0,0 +1,44 @@ +/* +Copyright 2012,2013 Jun Wako +Copyright 2015 Vincius Nery Cordeiro +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef S60X_H +#define S60X_H + +#include "quantum.h" + +/* S60-X keymap definition macro +* K2C, K31 and K3C are extra keys for ISO +* K0D is extra key from split backspace, K3E is extra key from split right shift +*/ + +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO } \ +} + +#endif -- cgit v1.2.3 From a41a53baadf14b50d63fc9424aca67e7bde193f3 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 11 Aug 2016 09:13:38 +0200 Subject: Fix dead link in keycode.txt The link to the HID Usage tables was outdated and dead, so I replaced it. --- doc/keycode.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/keycode.txt b/doc/keycode.txt index c1134f9bf2..5a42c50bfb 100644 --- a/doc/keycode.txt +++ b/doc/keycode.txt @@ -2,7 +2,7 @@ Keycode Symbol Table ==================== Keycodes are defined in `common/keycode.h`. Range of 00-A4 and E0-E7 are identical with HID Usage: - + Virtual keycodes are defined out of above range to support special actions. -- cgit v1.2.3 From 38766dbc82cd0765cd88a47bb88b57d58b4b6723 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 11 Aug 2016 09:36:37 +0200 Subject: Minor changes to keymaps Clarified extra keys Made ISO-keys non-dead in default layout Added non-US backslash on felix layout --- keyboards/s60-x/keymaps/default/keymap.c | 6 +++--- keyboards/s60-x/keymaps/felix/keymap.c | 8 ++++---- keyboards/s60-x/s60-x.h | 7 +++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c index aa2856525c..3b680c3072 100644 --- a/keyboards/s60-x/keymaps/default/keymap.c +++ b/keyboards/s60-x/keymaps/default/keymap.c @@ -31,10 +31,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ KEYMAP( - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ - LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ - LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT, \ + LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ FN1, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL), /* Layout 1: Function Layer diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c index a5ff1ae4d9..3052dd8160 100644 --- a/keyboards/s60-x/keymaps/felix/keymap.c +++ b/keyboards/s60-x/keymaps/felix/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up |Fn1 | + * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up | <> | * |-----------------------------------------------------------| * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| * `-----------------------------------------------------------' @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_FN1, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_NUBS, \ KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), /* Layout 1: Gaming Layer, SpaceFn disabled @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | * |-----------------------------------------------------------| - * | |Prt| | | |Cal| | | | |Pau |PUp |Rsft| + * | |Prt| | | |Cal| | | | |Pau |PUp |Fn1 | * |-----------------------------------------------------------| * | | | | | |Home|PDn |End | * `-----------------------------------------------------------' @@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DEBUG, RESET, \ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_SLCK, KC_PAUS, KC_INS, \ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_PENT, \ - KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_RSFT, \ + KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_FN1, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), }; diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h index 714de30db8..68f2ab22f2 100644 --- a/keyboards/s60-x/s60-x.h +++ b/keyboards/s60-x/s60-x.h @@ -23,8 +23,11 @@ along with this program. If not, see . #include "quantum.h" /* S60-X keymap definition macro -* K2C, K31 and K3C are extra keys for ISO -* K0D is extra key from split backspace, K3E is extra key from split right shift +* K31 is the extra key next to short left ISO shift +* K2C is the moved key next to enter on ISO boards +* K3C is the extra key next to short right JIS shift +* K0D is extra key from split backspace +* K3E is extra key from HHKB-style split right shift */ #define KEYMAP( \ -- cgit v1.2.3 From 56f86413e0d7606030cad68257a5d6287c9fd35f Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 11 Aug 2016 09:54:02 -0600 Subject: Add denolfe satan keymap --- keyboards/satan/keymaps/denolfe/Makefile | 20 +++ keyboards/satan/keymaps/denolfe/README.md | 12 ++ .../satan/keymaps/denolfe/keyboard-layout.png | Bin 0 -> 31762 bytes keyboards/satan/keymaps/denolfe/keymap.c | 171 +++++++++++++++++++++ 4 files changed, 203 insertions(+) create mode 100644 keyboards/satan/keymaps/denolfe/Makefile create mode 100644 keyboards/satan/keymaps/denolfe/README.md create mode 100644 keyboards/satan/keymaps/denolfe/keyboard-layout.png create mode 100644 keyboards/satan/keymaps/denolfe/keymap.c diff --git a/keyboards/satan/keymaps/denolfe/Makefile b/keyboards/satan/keymaps/denolfe/Makefile new file mode 100644 index 0000000000..c4adab737c --- /dev/null +++ b/keyboards/satan/keymaps/denolfe/Makefile @@ -0,0 +1,20 @@ + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/denolfe/README.md b/keyboards/satan/keymaps/denolfe/README.md new file mode 100644 index 0000000000..30b94fcdd2 --- /dev/null +++ b/keyboards/satan/keymaps/denolfe/README.md @@ -0,0 +1,12 @@ +# denolfe's Layout +Customized Satan keymap + +![Layout](keyboard-layout.png "Practical Keymap") + +## Programming Instructions: +`cd` into keymap directory, `make dfu` + +## Features +- Movement keys with CapsLock + h, j, k, l +- Media Keys +- Backlight control diff --git a/keyboards/satan/keymaps/denolfe/keyboard-layout.png b/keyboards/satan/keymaps/denolfe/keyboard-layout.png new file mode 100644 index 0000000000..d6d6ad57fb Binary files /dev/null and b/keyboards/satan/keymaps/denolfe/keyboard-layout.png differ diff --git a/keyboards/satan/keymaps/denolfe/keymap.c b/keyboards/satan/keymaps/denolfe/keymap.c new file mode 100644 index 0000000000..2f6c8d8f4f --- /dev/null +++ b/keyboards/satan/keymaps/denolfe/keymap.c @@ -0,0 +1,171 @@ +#include "satan.h" + +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _SL 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RGUI, KC_RCTL), + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ +[_FL] = KEYMAP( + #ifdef RGBLIGHT_ENABLE + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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), + #else + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + #endif + +[_SL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + +enum function_id { + SHIFT_ESC, + #ifdef RGBLIGHT_ENABLE + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL + #endif +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + #ifdef RGBLIGHT_ENABLE + [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), + #endif + [9] = ACTION_LAYER_MODS(2, MOD_LSFT) +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + //led operations + #ifdef RGBLIGHT_ENABLE + case RGBLED_TOGGLE: + 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; + #endif + } +} -- cgit v1.2.3 From d1f418d85ddb3bc9594ab71267af92ef1a5b7b0c Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 11 Aug 2016 09:46:05 -0700 Subject: Update Makefile Corrected spelling of "ATREUS" in all locations. (ATRUES -> ATREUS) --- keyboards/atreus/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile index 95ee1d4d7b..5894d231f9 100644 --- a/keyboards/atreus/Makefile +++ b/keyboards/atreus/Makefile @@ -2,11 +2,11 @@ ifdef TEENSY2 OPT_DEFS += -DATREUS_TEENSY2 - ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex + ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex else OPT_DEFS += -DATREUS_ASTAR OPT_DEFS += -DCATERINA_BOOTLOADER - ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) endif @@ -84,5 +84,5 @@ endif USB ?= /dev/cu.usbmodem1411 upload: build - $(ATRUES_UPLOAD_COMMAND) - \ No newline at end of file + $(ATREUS_UPLOAD_COMMAND) + -- cgit v1.2.3 From eeade4af84af073479f38de32d97e99203b29350 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 11 Aug 2016 09:48:23 -0700 Subject: Update keymap.c Changed right-hand F-key layout in order to add KC_PLUS to _L2. --- keyboards/atreus/keymaps/xyverz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index f4d4a9cf0f..0238fdbd39 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -51,8 +51,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, [_L2] = { /* LAYER 2 */ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, - {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS}, + {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 }, {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET } } }; -- cgit v1.2.3 From 71e1bb2e1cf5fd87cb9cc6f81b830763b38665d4 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 11 Aug 2016 11:04:57 -0700 Subject: Delete keymap.c Not ready to submit this one just yet. --- keyboards/phantom/keymaps/xyverz/keymap.c | 67 ------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 keyboards/phantom/keymaps/xyverz/keymap.c diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c deleted file mode 100644 index 5948e4ca54..0000000000 --- a/keyboards/phantom/keymaps/xyverz/keymap.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "phantom.h" - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _BL 0 -#define _FL 1 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap _BL: (Base Layer) Default Layer - * ,-----------------------------------------------------------------------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| - * |-----------------------------------------------------------| |--------------| - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| - * |-----------------------------------------------------------| |--------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| - * |-----------------------------------------------------------| `--------------' - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| ,----. - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | - * |-----------------------------------------------------------| ,-------------. - * |Ctrl|Gui |Alt | Space |ALT |GUI |_FL |CTRL | |Lft| Dn |Rig | - * `-----------------------------------------------------------' `-------------' - */ -[_BL] = KEYMAP( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DELETE, KC_END, KC_PGDN, \ - KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), - - /* Keymap _FL: Function Layer - * ,-----------------------------------------------------------------------------. - * |RESET| | | | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| |--------------| - * | | | | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| |--------------| - * | | | | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| `--------------' - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------| ,----. - * | | F1| F2| F3| F4| F5|F6 |F7 |F8 | | | | | | - * |-----------------------------------------------------------| ,-------------. - * | | | | | | | | | | | | | - * `-----------------------------------------------------------' `-------------' - */ -[_FL] = KEYMAP( - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_SLEP, \ - RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE,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_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,KC_MSEL, KC_TRNS,KC_TRNS,KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_CAPS, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS) -}; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { -} -- cgit v1.2.3 From 4725942dc71c2f386d8323865a6255f4dfd2785b Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 11 Aug 2016 21:49:10 +0200 Subject: Small changes Enabled Bootmagic and ISO layouts on felix keymap Added unused pins --- keyboards/s60-x/config.h | 2 +- keyboards/s60-x/keymaps/felix/keymap.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/keyboards/s60-x/config.h b/keyboards/s60-x/config.h index d548a99b33..ac7951c247 100644 --- a/keyboards/s60-x/config.h +++ b/keyboards/s60-x/config.h @@ -46,7 +46,7 @@ along with this program. If not, see . */ #define MATRIX_ROW_PINS { B7, B3, B2, B1, B0 } #define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, E6, F1 } -#define UNUSED_PINS +#define UNUSED_PINS { F0 } /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c index 3052dd8160..7fc0e021c9 100644 --- a/keyboards/s60-x/keymaps/felix/keymap.c +++ b/keyboards/s60-x/keymaps/felix/keymap.c @@ -18,6 +18,7 @@ along with this program. If not, see . const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layout 0: Default Layer + * RSFT will be replaced once a better way to control magic is found. * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del| * |-----------------------------------------------------------| @@ -25,17 +26,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up | <> | + * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up |RSft| * |-----------------------------------------------------------| * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| * `-----------------------------------------------------------' */ KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_NUBS, \ - KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ + KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), /* Layout 1: Gaming Layer, SpaceFn disabled * ,-----------------------------------------------------------. @@ -55,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN1, \ - KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), /* Layout 2: Function Layer * ,-----------------------------------------------------------. @@ -75,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_SLCK, KC_PAUS, KC_INS, \ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_PENT, \ KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_FN1, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), }; /* -- cgit v1.2.3 From e692ebf86a962e90c51302e7b17a953ea2858f79 Mon Sep 17 00:00:00 2001 From: shela Date: Fri, 12 Aug 2016 20:38:26 +0900 Subject: fix typo --- quantum/keymap.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/quantum/keymap.h b/quantum/keymap.h index a158651839..f2d94d75c3 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -156,16 +156,16 @@ enum quantum_keycodes { BL_INC, BL_TOGG, BL_STEP, - - // RGB functionality - RGB_TOG, - RGB_MOD, - RGB_HUI, - RGB_HUD, - RGB_SAI, - RGB_SAD, - RGB_VAI, - RGB_VAD, + + // RGB functionality + RGB_TOG, + RGB_MOD, + RGB_HUI, + RGB_HUD, + RGB_SAI, + RGB_SAD, + RGB_VAI, + RGB_VAD, // Left shift, open paren KC_LSPO, @@ -309,7 +309,7 @@ enum quantum_keycodes { #define OSL(layer) (layer | QK_ONE_SHOT_LAYER) // One-shot mod -#define OSM(layer) (layer | QK_ONE_SHOT_MOD) +#define OSM(mod) (mod | QK_ONE_SHOT_MOD) // M-od, T-ap - 256 keycode max #define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0xF) << 8)) -- cgit v1.2.3 From 1c8d64d3b3664ef7d62ea12f8fd510231a7ec54e Mon Sep 17 00:00:00 2001 From: shela Date: Fri, 12 Aug 2016 21:24:43 +0900 Subject: add my keymap --- keyboards/hhkb/keymaps/shela/Makefile | 1 + keyboards/hhkb/keymaps/shela/action_pseudo_lut.c | 142 ++++++++++++++++++ keyboards/hhkb/keymaps/shela/action_pseudo_lut.h | 15 ++ keyboards/hhkb/keymaps/shela/config.h | 12 ++ keyboards/hhkb/keymaps/shela/keymap.c | 179 +++++++++++++++++++++++ keyboards/hhkb/keymaps/shela/keymap_jis2us.h | 32 ++++ keyboards/hhkb/keymaps/shela/readme.md | 14 ++ 7 files changed, 395 insertions(+) create mode 100644 keyboards/hhkb/keymaps/shela/Makefile create mode 100644 keyboards/hhkb/keymaps/shela/action_pseudo_lut.c create mode 100644 keyboards/hhkb/keymaps/shela/action_pseudo_lut.h create mode 100644 keyboards/hhkb/keymaps/shela/config.h create mode 100644 keyboards/hhkb/keymaps/shela/keymap.c create mode 100644 keyboards/hhkb/keymaps/shela/keymap_jis2us.h create mode 100644 keyboards/hhkb/keymaps/shela/readme.md diff --git a/keyboards/hhkb/keymaps/shela/Makefile b/keyboards/hhkb/keymaps/shela/Makefile new file mode 100644 index 0000000000..d0586bda68 --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/Makefile @@ -0,0 +1 @@ +SRC += action_pseudo_lut.c diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c new file mode 100644 index 0000000000..b205968c7b --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c @@ -0,0 +1,142 @@ +#include "quantum.h" +#include "action_pseudo_lut.h" + +static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE]; + +/* + * Pseudo layout action. + * This action converts a keycode in order to output the character according to the keymap you specified + * still your keyboard layout recognized wrongly on your OS. + * Memo: Using other layer keymap to get keycode + */ +void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) { + static uint8_t prev_shift; + uint16_t keycode; + uint16_t pseudo_keycode; + + /* get keycode from keymap you specified */ + keycode = keymap_key_to_keycode(base_keymap_id, record->event.key); + + prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + + if (record->event.pressed) { + /* when magic commands entered, keycode does not converted */ + if (IS_COMMAND()) { + if (prev_shift) { + add_shift_bit(keycode); + } + register_code(keycode); + return; + } + + if (prev_shift) { + pseudo_keycode = convert_keycode(keymap, keycode, true); + dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); + add_shift_bit(keycode); + + if (IS_LSFT(pseudo_keycode)) { + register_code(QK_LSFT ^ pseudo_keycode); + } else { + /* delete shift mod temporarily */ + del_mods(prev_shift); + send_keyboard_report(); + register_code(pseudo_keycode); + add_mods(prev_shift); + send_keyboard_report(); + } + } else { + pseudo_keycode = convert_keycode(keymap, keycode, false); + dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); + + if (IS_LSFT(pseudo_keycode)) { + add_weak_mods(MOD_BIT(KC_LSFT)); + send_keyboard_report(); + register_code(QK_LSFT ^ pseudo_keycode); + /* on Windows, prevent key repeat to avoid unintended output */ + unregister_code(QK_LSFT ^ pseudo_keycode); + del_weak_mods(MOD_BIT(KC_LSFT)); + send_keyboard_report(); + } else { + register_code(pseudo_keycode); + } + } + } else { + if (get_shift_bit(keycode)) { + del_shift_bit(keycode); + pseudo_keycode = convert_keycode(keymap, keycode, true); + } else { + pseudo_keycode = convert_keycode(keymap, keycode, false); + } + dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode); + + if (IS_LSFT(pseudo_keycode)) { + unregister_code(QK_LSFT ^ pseudo_keycode); + } else { + unregister_code(pseudo_keycode); + } + } +} + +uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded) +{ + uint16_t pseudo_keycode; + + switch (keycode) { + case KC_A ... KC_CAPSLOCK: +#if defined(__AVR__) + if (shift_modded) { + pseudo_keycode = pgm_read_word(&keymap[keycode][1]); + } else { + pseudo_keycode = pgm_read_word(&keymap[keycode][0]); + } +#else + if (shift_modded) { + pseudo_keycode = keymap[keycode][1]; + } else { + pseudo_keycode = keymap[keycode][0]; + } +#endif + /* if undefined, use got keycode as it is */ + if (pseudo_keycode == 0x00) { + if (shift_modded) { + pseudo_keycode = S(keycode); + } else { + pseudo_keycode = keycode; + } + } + break; + default: + if (shift_modded) { + pseudo_keycode = S(keycode); + } else { + pseudo_keycode = keycode; + } + break; + } + return pseudo_keycode; +} + +uint8_t get_shift_bit(uint16_t keycode) { + if ((keycode >> 3) < SHIFT_BIT_SIZE) { + return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7)); + } else { + dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode); + return 0; + } +} + +void add_shift_bit(uint16_t keycode) { + if ((keycode >> 3) < SHIFT_BIT_SIZE) { + send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7)); + } else { + dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode); + } +} + +void del_shift_bit(uint16_t keycode) { + if ((keycode >> 3) < SHIFT_BIT_SIZE) { + send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7)); + } else { + dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode); + } +} diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h new file mode 100644 index 0000000000..681252440f --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h @@ -0,0 +1,15 @@ +#ifndef ACTION_PSEUDO_LUT_H +#define ACTION_PSEUDO_LUT_H + +#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) // 1bit per 1key + +#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT) + +void action_pseudo_lut(keyrecord_t *, uint8_t, const uint16_t (*)[2]); +uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool); + +uint8_t get_shift_bit(uint16_t); +void add_shift_bit(uint16_t); +void del_shift_bit(uint16_t); + +#endif diff --git a/keyboards/hhkb/keymaps/shela/config.h b/keyboards/hhkb/keymaps/shela/config.h new file mode 100644 index 0000000000..08cc1fb46e --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/config.h @@ -0,0 +1,12 @@ +#ifndef CONFIG_SHELA_H +#define CONFIG_SHELA_H + +#include "../../config.h" + +#undef TAPPING_TERM +#define TAPPING_TERM 230 + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 2000 + +#endif diff --git a/keyboards/hhkb/keymaps/shela/keymap.c b/keyboards/hhkb/keymaps/shela/keymap.c new file mode 100644 index 0000000000..c286b99de8 --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/keymap.c @@ -0,0 +1,179 @@ +/* + * HHKB Pro 2 US Layout for shela + */ +#include "hhkb.h" +#include "keymap_jis2us.h" +#include "action_pseudo_lut.h" + +enum keymap_layout { + BASE = 0, + PSEUDO_US, + DVORAK, + MOUSE, + TENKEY, + HHKB, + SPACE_FN, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Layer 0: Default Layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp | + * |-----------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------| + * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------| + * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | + * `-----------------------------------------------------------------------------------------' + * |LAlt | LGui | SpaceFN | RGui |RAlt | + * `-----------------------------------------------------------------' + */ + [BASE] = + KEYMAP(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, \ + KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \ + OSM(MOD_LSFT),KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_FN0, \ + KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT), + + /* Layer 1: Pseudo US Layout Layer */ + [PSEUDO_US] = + KEYMAP(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, \ + KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, \ + KC_LCTL,KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, \ + OSM(MOD_LSFT),KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT,KC_FN0, \ + KC_LGUI,KC_FN3, KC_FN2, KC_FN4 ,KC_RGUI), + + /* Layer 2: Dvorak Layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp | + * |-----------------------------------------------------------------------------------------| + * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | + * |-----------------------------------------------------------------------------------------| + * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter | + * |-----------------------------------------------------------------------------------------| + * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 | + * `-----------------------------------------------------------------------------------------' + * |LAlt | LGui | SpaceFN | RGui |RAlt | + * `-----------------------------------------------------------------' + */ + [DVORAK] = + KEYMAP(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC,KC_RBRC,KC_GRV, KC_BSPC, \ + KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,KC_EQL, KC_BSLS, \ + KC_LCTL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,KC_ENT, \ + KC_LSFT,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,KC_FN0, \ + KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT), + + /* Layer 3: Mouse layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | MwL | MwD | MwU | MwR | | | | | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | McL | McD | McU | McR | | | | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 | + * `-----------------------------------------------------------------------------------------' + * | | | Mb1 | | | + * `-----------------------------------------------------------------' + */ + [MOUSE] = + KEYMAP(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_TRNS, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_NO, KC_NO, KC_TRNS, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1,KC_BTN2,KC_BTN3,KC_NO, KC_NO, KC_TRNS,KC_FN0, \ + KC_TRNS,KC_TRNS, KC_BTN1, KC_TRNS,KC_TRNS), + + /* Layer 4: Tenkey layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | | | | | | | | | | / | * | - | | BSp | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | | | | 7 | 8 | 9 | + | | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | | | | 4 | 5 | 6 | Enter | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | | | 1 | 2 | 3 | + | Fn0 | + * `-----------------------------------------------------------------------------------------' + * | | | SpaceFN | 0 | . | + * `-----------------------------------------------------------------' + */ + [TENKEY] = + KEYMAP(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS,KC_PAST,KC_PMNS,KC_NO, KC_BSPC, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7,KC_KP_8,KC_KP_9,KC_PPLS,KC_NO, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4,KC_KP_5,KC_KP_6,KC_PENT, \ + KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1,KC_KP_2,KC_KP_3,KC_PPLS,KC_FN0, \ + KC_TRNS,KC_TRNS, KC_FN2, KC_KP_0,KC_PDOT), + + /* Layer 5: HHKB mode (HHKB Fn) + * ,-----------------------------------------------------------------------------------------. + * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------| + * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp | + * |-----------------------------------------------------------------------------------------| + * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | + * |-----------------------------------------------------------------------------------------| + * | | | | | | | + | - | End | PgD | Dow | | | + * `-----------------------------------------------------------------------------------------' + * | | | | | | + * `-----------------------------------------------------------------' + */ + [HHKB] = + KEYMAP(KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS,KC_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_UP, KC_TRNS,KC_BSPC, \ + KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), + + /* Layer 6: SpaceFN + * ,-----------------------------------------------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del | + * |-----------------------------------------------------------------------------------------| + * | | End | Up | Hom | | | | Hom | Up | End | Psc | Slk | Pau | Ins | + * |-----------------------------------------------------------------------------------------| + * | | Lef | Dow | Rig | PgU | | PgU | Lef | Dow | Rig | | | | + * |-----------------------------------------------------------------------------------------| + * | | | | PgD | | Spc | PgD | ` | ~ | | | | | + * `-----------------------------------------------------------------------------------------' + * | | | | | | + * `-----------------------------------------------------------------' + */ + [SPACE_FN] = + KEYMAP(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL, \ + KC_TRNS,KC_END, KC_UP, KC_HOME,KC_NO, KC_NO, KC_NO, KC_HOME,KC_UP, KC_END, KC_PSCR,KC_SLCK,KC_PAUS,KC_INS, \ + KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_PGUP,KC_NO, KC_PGUP,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_NO, KC_TRNS, \ + KC_TRNS,KC_NO, KC_NO, KC_PGDN,KC_NO, KC_SPC, KC_PGDN,KC_GRV, KC_TILD,KC_NO, KC_NO, KC_TRNS,KC_NO, \ + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), +}; + +/* + * user defined action function + */ +enum function_id { + PSEUDO_US_FUNCTION, +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + + switch (id) { + case PSEUDO_US_FUNCTION: + action_pseudo_lut(record, BASE, keymap_jis2us); + break; + } +} + +/* + * Fn action definition + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(HHKB), + [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION), + [2] = ACTION_LAYER_TAP_KEY(SPACE_FN, KC_SPACE), + [3] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_MHEN), + [4] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_KANA), + [5] = ACTION_DEFAULT_LAYER_SET(BASE), + [6] = ACTION_DEFAULT_LAYER_SET(PSEUDO_US), + [7] = ACTION_DEFAULT_LAYER_SET(MOUSE), + [8] = ACTION_DEFAULT_LAYER_SET(TENKEY), + [9] = ACTION_DEFAULT_LAYER_SET(DVORAK), +}; diff --git a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h new file mode 100644 index 0000000000..cf2bd4f0e8 --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h @@ -0,0 +1,32 @@ +#ifndef KEYMAP_JIS2US_H +#define KEYMAP_JIS2US_H + +/* keymap for convert from JIS to US */ +const uint16_t PROGMEM keymap_jis2us[][2] = { + [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */ + + [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */ + [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */ + [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */ + [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */ + [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */ + [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */ + [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */ + [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */ + [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */ + [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */ + [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */ + [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */ + [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */ + [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */ + [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */ + [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */ + [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */ + [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */ + [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */ + [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */ + [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */ + [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */ +}; + +#endif diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/keymaps/shela/readme.md new file mode 100644 index 0000000000..cf5f291697 --- /dev/null +++ b/keyboards/hhkb/keymaps/shela/readme.md @@ -0,0 +1,14 @@ +# Shela's HHKB Layout + +Layer 0: US Layout +Layer 1: Pseudo US Layout +Layer 2: Dvorak Layout +Layer 3: Mouse +Layer 4: Tenkey +Layer 5: HHKB Fn Key +Layer 6: SpaceFN + +## Pseudo US Layout + +On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings. +But, you can use HHKB like a US layout keyboard as it is. -- cgit v1.2.3 From c9272fee083d274c11bab0d8ec5520b54961f7fa Mon Sep 17 00:00:00 2001 From: shela Date: Fri, 12 Aug 2016 21:33:32 +0900 Subject: add new line --- keyboards/hhkb/keymaps/shela/readme.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/keymaps/shela/readme.md index cf5f291697..2317e880f2 100644 --- a/keyboards/hhkb/keymaps/shela/readme.md +++ b/keyboards/hhkb/keymaps/shela/readme.md @@ -1,12 +1,12 @@ # Shela's HHKB Layout -Layer 0: US Layout -Layer 1: Pseudo US Layout -Layer 2: Dvorak Layout -Layer 3: Mouse -Layer 4: Tenkey -Layer 5: HHKB Fn Key -Layer 6: SpaceFN +Layer 0: US Layout +Layer 1: Pseudo US Layout +Layer 2: Dvorak Layout +Layer 3: Mouse +Layer 4: Tenkey +Layer 5: HHKB Fn Key +Layer 6: SpaceFN ## Pseudo US Layout -- cgit v1.2.3 From 11e23fd3fdbe86ff85b2be7783c46d4360b07360 Mon Sep 17 00:00:00 2001 From: shela Date: Fri, 12 Aug 2016 21:45:36 +0900 Subject: add new line --- keyboards/hhkb/keymaps/shela/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/keymaps/shela/readme.md index 2317e880f2..5a06a83632 100644 --- a/keyboards/hhkb/keymaps/shela/readme.md +++ b/keyboards/hhkb/keymaps/shela/readme.md @@ -10,5 +10,5 @@ Layer 6: SpaceFN ## Pseudo US Layout -On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings. +On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings. But, you can use HHKB like a US layout keyboard as it is. -- cgit v1.2.3 From b98d47abe544c68ffba745b6643a777f8f61a03c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Fri, 12 Aug 2016 16:36:07 +0200 Subject: ergodox: Update my keymap to v1.5 Major changes include: * The **1HAND** layer has been removed. * A `Delete` key is now available on the right thumb cluster. * The **ADORE** layer received a major update, see the updated layout image. * It is now possible to enable automatic logging for the **ADORE** layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. * The `~` key and the `Media Next/Prev` key have been swapped on the **base** layer. * On the **ARROW** layer, `Backspace` has been replaced by `Enter`. * There is some experimental support for entering Unicode symbols. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/Makefile | 7 + .../keymaps/algernon/images/adore-layer.png | Bin 95615 -> 93748 bytes .../ergodox/keymaps/algernon/images/base-layer.png | Bin 95654 -> 95222 bytes .../keymaps/algernon/images/one-handed-layer.png | Bin 91140 -> 0 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 2422 ++++++++++---------- keyboards/ergodox/keymaps/algernon/readme.md | 52 +- 6 files changed, 1244 insertions(+), 1237 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile index 6bf3976b9d..00194857ac 100644 --- a/keyboards/ergodox/keymaps/algernon/Makefile +++ b/keyboards/ergodox/keymaps/algernon/Makefile @@ -8,10 +8,17 @@ CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes KEYLOGGER_ENABLE ?= yes +ADORE_AUTOLOG ?= no + ifeq (${FORCE_NKRO},yes) OPT_DEFS += -DFORCE_NKRO endif +ifeq (${ADORE_AUTOLOG},yes) +KEYLOGGER_ENABLE = yes +OPT_DEFS += -DADORE_AUTOLOG +endif + ifeq (${KEYLOGGER_ENABLE},yes) OPT_DEFS += -DKEYLOGGER_ENABLE CONSOLE_ENABLE = yes diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index 3df68ea53d..44ad8a1eb7 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png index 7b25a05b3a..da159fbe2e 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png deleted file mode 100644 index 698d11e5f2..0000000000 Binary files a/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png and /dev/null differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index c4de53da27..244bfb51fe 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -1,1218 +1,1206 @@ -/* - * algernon's ErgoDox EZ layout, please see the readme.md file! - */ - -#include "ergodox.h" -#include "led.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "mousekey.h" -#include "timer.h" -#include "keymap_plover.h" -#include "eeconfig.h" -#include "wait.h" +/* + * algernon's ErgoDox EZ layout, please see the readme.md file! + */ + +#include "ergodox.h" +#include "led.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "mousekey.h" +#include "timer.h" +#include "keymap_plover.h" +#include "eeconfig.h" +#include "wait.h" #include "version.h" - -/* Layers */ - -enum { - BASE = 0, - ADORE, - ARRW, - APPSEL, - HUN, - NMDIA, - OHLFT, - OHRGT, - PLVR, -}; - -/* Macros */ - -enum { - NONE = 0, - // Buttons that do extra stuff - A_GUI, - A_PLVR, - A_ESC, - A_MPN, - - // Function / number keys - KF_1, // 1, F1 - KF_2, // 2, F2 - KF_3, // ... - KF_4, - KF_5, - KF_6, - KF_7, - KF_8, - KF_9, - KF_10, - KF_11, // =, F11 - - // Application select keys - APP_SLK, // Slack - APP_EMCS, // Emacs - APP_TERM, // Terminal - APP_CHRM, // Chrome - APP_MSIC, // Music - - // Diagonal mouse movement - A_MUL, - A_MUR, - A_MDL, - A_MDR, - - // Hungarian layer keys - HU_AA, // Á - HU_OO, // Ó - HU_EE, // É - HU_UU, // Ú - HU_II, // Í - HU_OE, // Ö - HU_UE, // Ü - HU_OEE, // Ő - HU_UEE, // Ű - - // One-handed layout specials - OH_BSSPC, - OH_ENTSFT, - OH_BASE, - OH_LEFT, - OH_RIGHT, -}; - -/* Fn keys */ - -enum { - F_BSE = 0, - F_HUN, - F_GUI, - F_SFT, - F_ALT, - F_CTRL -}; - -/* Custom keycodes */ - -enum { - CT_CLN = 0, - CT_MNS, - CT_TA, -}; - -/* States & timers */ - -uint16_t gui_timer = 0; - -uint16_t kf_timers[12]; - -uint16_t oh_base_timer = 0; -uint16_t oh_bsspc_timer = 0; -uint16_t oh_entsft_timer = 0; - -#define OH_BLINK_INTERVAL 500 - -uint8_t oh_left_blink = 0; -uint16_t oh_left_blink_timer = 0; -uint8_t oh_right_blink = 0; -uint16_t oh_right_blink_timer = 0; - -#if KEYLOGGER_ENABLE -bool log_enable = false; -#endif - -bool time_travel = false; - -/* The Keymap */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Keymap 0: Base Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[BASE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 1: Adore layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | : | | - | | | | | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | | MDIA | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[ADORE] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U -,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS - ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,OSL(NMDIA),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN) ,KC_ENT ,KC_SPC - ), - -/* Keymap 2: Arrow layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | Home | Up | End | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | Left | Down | Rght | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| PgUp | PgDn | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[ARRW] = KEYMAP( -// left 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_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_TRNS - ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_PGUP ,KC_PGDN - ), - -/* Keymap 3: Application select layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[APPSEL] = KEYMAP( -// left hand - KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS - ), - - -/* Keymap 4: Hungarian Layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | Ő | | Ű | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | Ö | | Ü | | | | | | | | | | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | BASE | | | - * `--------------------' `--------------------' - */ - -[HUN] = KEYMAP( -// left hand - KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO -,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) -,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS - - // right hand - ,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_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 ,KC_NO ,KC_NO - - ,KC_NO ,KC_NO - ,KC_NO - ,F(F_BSE),KC_TRNS ,KC_TRNS - ), - -/* Keymap 5: Navigation & Media layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| - * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| - * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | - * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| - * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Mute | VlUp | | BASE | MClk | - * ,------|------|------| |------+------+------. - * | | | VlDn | | Prev |Left |Right | - * | SPC | Enter|------| |------| Click| Click| - * | | | ESC | | Next | | | - * `--------------------' `--------------------' - */ -[NMDIA] = KEYMAP( -// left hand - KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) -,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO -,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO -,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_MUTE ,KC_VOLU - ,KC_VOLD - ,KC_SPC,KC_ENTER,M(A_ESC) - - // right hand - ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR - ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO - ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP - ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - - ,KC_TRNS ,KC_MS_BTN3 - ,KC_MPRV - ,KC_MNXT ,KC_BTN1 ,KC_BTN2 - ), - -/* Keymap 6: One-handed, left side - * - * ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| - * |-----------+------+------+------+------+-------------| - * | Tab | ' | , | . | P | Y | [ | - * |-----------+------+------+------+------+------| | - * | - | A | O | E | U | I |------| - * |-----------+------+------+------+------+------| ( | - * | Play/Pause| ; | Q | J | K | X | | - * `-----------+------+------+------+------+-------------' - * | Home | End | Down | Up | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHLFT] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) -,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 7: One-handed, right side - * - * ,-----------------------------------------------------. - * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| - * |-----------+------+------+------+------+-------------| - * | / | L | R | C | G | F | ] | - * |-----------+------+------+------+------+------| | - * | \ | S | N | T | H | D |------| - * |-----------+------+------+------+------+------| ) | - * | Stop | Z | V | W | M | B | | - * `-----------+------+------+------+------+-------------' - * | PgDn | PgUp | Right| Left | ESC | - * `-----------------------------------' - * ,-------------. - * | LAlt | GUI | - * ,------|------|------| - * |BackSp|LShift| Ctrl | - * | | |------| - * |Space |Enter |OTHER | - * `--------------------' - */ -[OHRGT] = KEYMAP( -// left hand - M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) -,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC -,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D -,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN -,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) - - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) - - // right hand - ,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 ,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 ,KC_NO ,KC_NO - ), - -/* Keymap 8: Steno for Plover - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | BASE | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | T | P | H | |------| |------| | F | P | L | T | D | - * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| - * | | | K | W | R | | | | | | R | B | G | S | Z | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | A | O |------| |------| E | U | - * | | | | | | | | - * `--------------------' `--------------------' - */ - -[PLVR] = KEYMAP( -// left hand -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), -KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, -KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, -KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - PV_A, PV_O, KC_NO, - - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, - PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, - PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO,PV_E, PV_U - ), - -}; - -const uint16_t PROGMEM fn_actions[] = { - [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) - ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) - ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) - ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) - ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) - ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) -}; - -void toggle_steno(int pressed) -{ - uint8_t layer = biton32(layer_state); - - if (pressed) { - if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); - - register_code(PV_LP); - register_code(PV_LH); - register_code(PV_LR); - register_code(PV_O); - register_code(PV_RL); - register_code(PV_RG); - } else { - unregister_code(PV_LP); - unregister_code(PV_LH); - unregister_code(PV_LR); - unregister_code(PV_O); - unregister_code(PV_RL); - unregister_code(PV_RG); - } -} - -macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) -{ - uint8_t need_shift = 0; - uint8_t hold_shift = 0; - - if (!record->event.pressed) - return MACRO_NONE; - - layer_off (HUN); - - if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { - hold_shift = 1; - need_shift = 1; - unregister_code (KC_LSFT); - } - if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { - need_shift = 1; - hold_shift = 0; - unregister_code (KC_LSFT); - } - - clear_oneshot_mods (); - - register_code (KC_RALT); - unregister_code (KC_RALT); - if (accent == (KC_DQT)) { - register_code (KC_RSFT); - } - register_code (accent); - unregister_code (accent); - if (need_shift && accent != (KC_DQT)) { - register_code (KC_RSFT); - } else if (accent == (KC_DQT) && !need_shift) { - unregister_code (KC_RSFT); - } - register_code (hun_char); - unregister_code (hun_char); - if (need_shift || accent == (KC_DQT)) - unregister_code (KC_RSFT); - if (hold_shift) - register_code (KC_LSFT); - - return MACRO_NONE; -} - -void ang_handle_kf (keyrecord_t *record, uint8_t id) -{ - uint8_t code = id - KF_1; - - if (record->event.pressed) { - kf_timers[code] = timer_read (); - } else { - uint8_t kc; - - if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc = KC_F1 + code; - } else { - if (id == KF_11) - kc = KC_EQL; - else - kc = KC_1 + code; - } - - register_code (kc); - unregister_code (kc); - } -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case A_ESC: - if (record->event.pressed) { - if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { - clear_oneshot_mods (); - } else { - register_code (KC_ESC); - } - layer_off (HUN); - } else { - unregister_code (KC_ESC); - } - break; - - case A_MPN: - if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); - - if (oneshot) - clear_oneshot_mods (); - unregister_code (KC_LSFT); - - register_code (KC_MPRV); - unregister_code (KC_MPRV); - - if (!oneshot) - register_code (KC_LSFT); - } else { - return MACRO (T(MNXT), END); - } - } - break; - - /* Hungarian layer */ - case HU_AA: - return ang_do_hun (record, KC_QUOT, KC_A); - case HU_OO: - return ang_do_hun (record, KC_QUOT, KC_O); - case HU_EE: - return ang_do_hun (record, KC_QUOT, KC_E); - case HU_UU: - return ang_do_hun (record, KC_QUOT, KC_U); - case HU_II: - return ang_do_hun (record, KC_QUOT, KC_I); - case HU_OE: - return ang_do_hun (record, KC_DQT, KC_O); - case HU_UE: - return ang_do_hun (record, KC_DQT, KC_U); - case HU_OEE: - return ang_do_hun (record, KC_EQL, KC_O); - case HU_UEE: - return ang_do_hun (record, KC_EQL, KC_U); - - /* Mouse movement */ - case A_MUL: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MUR: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_MDL: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MDR: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - /* Plover base */ - case A_PLVR: - toggle_steno(record->event.pressed); - break; - - /* GUI & AppSel */ - case A_GUI: - if (record->event.pressed) { - register_code (KC_LGUI); - if (record->tap.count && !record->tap.interrupted) { - if (record->tap.count >= 2) { - register_code (KC_W); - layer_on (APPSEL); - set_oneshot_layer (APPSEL, ONESHOT_START); - } - } else { - record->tap.count = 0; - } - gui_timer = 0; - } else { - if (record->tap.count >= 2) - { - unregister_code (KC_W); - clear_oneshot_layer_state (ONESHOT_PRESSED); - } - gui_timer = timer_read (); - } - break; - - case APP_SLK: - return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); - - case APP_EMCS: - return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); - - case APP_TERM: - return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); - - case APP_CHRM: - return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); - - case APP_MSIC: - return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); - - /* Function keys */ - case KF_1 ... KF_11: - ang_handle_kf (record, id); - break; - - /* 1HAND layout */ - case OH_BASE: - if (record->event.pressed) { - oh_base_timer = timer_read (); - } else { - if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { - layer_clear (); - } else { - return MACRO (T(APP), END); - } - } - break; - - case OH_BSSPC: - if (record->event.pressed) { - oh_bsspc_timer = timer_read (); - } else { - if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { - return MACRO (T(BSPC), END); - } else { - return MACRO (T(SPC), END); - } - } - break; - - case OH_ENTSFT: - if (record->event.pressed) { - oh_entsft_timer = timer_read (); - } else { - if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT)) - unregister_code (KC_LSFT); - else - register_code (KC_LSFT); - } else { - return MACRO (T(ENT), END); - } - } - break; - - case OH_LEFT: - if (record->event.pressed) { - layer_move (OHLFT); - oh_left_blink = 1; - oh_left_blink_timer = timer_read (); - ergodox_right_led_1_on (); - } - break; - - case OH_RIGHT: - if (record->event.pressed) { - layer_move (OHRGT); - oh_right_blink = 1; - oh_right_blink_timer = timer_read (); - ergodox_right_led_3_on (); - } - break; - } - return MACRO_NONE; -}; - -uint8_t is_adore = 0; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - uint8_t dl; - - ergodox_led_all_on(); - for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { - ergodox_led_all_set (i); - wait_ms (5); - } - wait_ms(1000); - for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { - ergodox_led_all_set (i); - wait_ms (10); - } - ergodox_led_all_off(); - - if (!eeconfig_is_enabled()) - eeconfig_init(); - dl = eeconfig_read_default_layer (); - if (dl == (1UL << ADORE)) - is_adore = 1; -}; - -LEADER_EXTERNS(); - -void ang_do_unicode (void) { - register_code (KC_RCTL); - register_code (KC_RSFT); - register_code (KC_U); - unregister_code (KC_U); - unregister_code (KC_RSFT); - unregister_code (KC_RCTL); - wait_ms (100); -} - -void ang_tap (uint16_t codes[]) { - for (int i = 0; codes[i] != 0; i++) { - register_code (codes[i]); - unregister_code (codes[i]); - wait_ms (50); - } -} - -#define TAP_ONCE(code) \ - register_code (code); \ - unregister_code (code) - -void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - } else if (state->count == 2) { - register_code (KC_SCLN); - } -} - -void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (state->count == 2) { - unregister_code (KC_SCLN); - } -} - -void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_MINS); - } else if (state->count == 2) { - register_code (KC_RSFT); - register_code (KC_MINS); - } -} - -void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_MINS); - } else if (state->count == 2) { - unregister_code (KC_RSFT); - unregister_code (KC_MINS); - } -} - -typedef struct { - bool layer_toggle; - bool sticky; - bool finished_once; -} td_ta_state_t; - -void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (td_ta->finished_once) { - return; - } - - if (td_ta->sticky) { - td_ta->sticky = false; - td_ta->layer_toggle = false; - layer_off (ARRW); - return; - } - - td_ta->finished_once = true; - if (state->count == 1 && !state->pressed) { - register_code (KC_TAB); - td_ta->sticky = false; - td_ta->layer_toggle = false; - } else { - td_ta->layer_toggle = true; - layer_on (ARRW); - td_ta->sticky = (state->count == 2); - } -} - -void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { - td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - - if (!td_ta->layer_toggle) - unregister_code (KC_TAB); - if (!td_ta->sticky) - layer_off (ARRW); - - td_ta->finished_once = false; -} - -const qk_tap_dance_action_t tap_dance_actions[] = { - [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) - ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) - ,[CT_TA] = { - .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, - .user_data = (void *)&((td_ta_state_t) { false, false, false }) - } -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) - unregister_code (KC_LGUI); - - if (layer != OHLFT) - oh_left_blink = 0; - if (layer != OHRGT) - oh_right_blink = 0; - - if (layer == HUN) { - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - } else if (layer == NMDIA) { - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - } else if (layer == PLVR) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - } else if (layer == ADORE) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - } - - if (layer == OHLFT || layer == OHRGT) { - ergodox_right_led_2_on(); - - if (oh_left_blink) { - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) - ergodox_right_led_1_off (); - } - if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_1_on (); - oh_left_blink_timer = timer_read (); - } - } - - if (oh_right_blink) { - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { - if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) - ergodox_right_led_3_off (); - } - if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { - ergodox_right_led_3_on (); - oh_right_blink_timer = timer_read (); - } - } - } - - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_1_set (LED_BRIGHTNESS_HI); - ergodox_right_led_1_on (); - } else { - ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_1_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LALT) || - ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - ergodox_right_led_2_on (); - } else { - ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_2_off (); - } - - if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || - ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_3_set (LED_BRIGHTNESS_HI); - ergodox_right_led_3_on (); - } else { - ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) - ergodox_right_led_3_off (); - } - - LEADER_DICTIONARY() { - leading = false; - leader_end (); - -#if KEYLOGGER_ENABLE - SEQ_ONE_KEY (KC_D) { - ergodox_led_all_on(); - wait_ms(100); - ergodox_led_all_off(); - log_enable = !log_enable; - } -#endif - - SEQ_ONE_KEY (KC_T) { - time_travel = !time_travel; - } - - SEQ_ONE_KEY (KC_U) { - ang_do_unicode (); - } - - SEQ_ONE_KEY (KC_V) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); - } - - SEQ_ONE_KEY (KC_L) { - /* λ */ - ang_do_unicode (); - - uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_Y) { - uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; - ang_tap (codes); - } - - SEQ_ONE_KEY (KC_S) { - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - TAP_ONCE (KC_BSLS); - register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); - ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); - register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); - TAP_ONCE (KC_SLSH); - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); - } - - SEQ_TWO_KEYS (KC_W, KC_M) { - register_code (KC_LALT); - register_code (KC_F2); - unregister_code (KC_F2); - unregister_code (KC_LALT); - - wait_ms (1000); - - uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; - ang_tap (codes); - register_code (KC_LGUI); - register_code (KC_UP); - unregister_code (KC_UP); - unregister_code (KC_LGUI); - } - - SEQ_ONE_KEY (KC_A) { - if (is_adore == 0) { - default_layer_and (0); - default_layer_or ((1UL << ADORE)); - eeconfig_update_default_layer ((1UL << ADORE)); - is_adore = 1; - - ergodox_led_all_off (); - ergodox_right_led_3_on (); - wait_ms (100); - ergodox_right_led_2_on (); - wait_ms (100); - ergodox_right_led_3_off (); - ergodox_right_led_1_on (); - wait_ms (100); - ergodox_right_led_2_off (); - wait_ms (100); - ergodox_right_led_1_off (); - } else { - is_adore = 0; - default_layer_and (0); - default_layer_or (1UL << BASE); - eeconfig_update_default_layer ((1UL << BASE)); - - ergodox_led_all_off (); - ergodox_right_led_1_on (); - wait_ms (100); - ergodox_right_led_2_on (); - wait_ms (100); - ergodox_right_led_1_off (); - ergodox_right_led_3_on (); - wait_ms (100); - ergodox_right_led_2_off (); - wait_ms (100); - ergodox_right_led_3_off (); - } - } - } -} - -static uint16_t last4[4]; - -bool process_record_user (uint16_t keycode, keyrecord_t *record) { -#if KEYLOGGER_ENABLE - uint8_t layer = biton32(layer_state); - - if (log_enable && layer == BASE) { - xprintf ("KL: col=%d, row=%d\n", record->event.key.col, - record->event.key.row); - } -#endif - - if (time_travel && !record->event.pressed) { - uint8_t p; - - // shift cache one to the left - for (p = 0; p < 3; p++) { - last4[p] = last4[p + 1]; - } - last4[3] = keycode; - - if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { - uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; - ang_tap (codes); - register_code (KC_RSFT); - register_code (KC_EQL); - unregister_code (KC_EQL); - unregister_code (KC_RSFT); - - uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; - ang_tap (codes2); - - return false; - } - } - - return true; -} + +/* Layers */ + +enum { + BASE = 0, + ADORE, + ARRW, + APPSEL, + HUN, + NMDIA, + PLVR, +}; + +/* Macros */ + +enum { + NONE = 0, + // Buttons that do extra stuff + A_GUI, + A_PLVR, + A_ESC, + A_MPN, + + // Function / number keys + KF_1, // 1, F1 + KF_2, // 2, F2 + KF_3, // ... + KF_4, + KF_5, + KF_6, + KF_7, + KF_8, + KF_9, + KF_10, + KF_11, // =, F11 + + // Application select keys + APP_SLK, // Slack + APP_EMCS, // Emacs + APP_TERM, // Terminal + APP_CHRM, // Chrome + APP_MSIC, // Music + + // Diagonal mouse movement + A_MUL, + A_MUR, + A_MDL, + A_MDR, + + // Hungarian layer keys + HU_AA, // Á + HU_OO, // Ó + HU_EE, // É + HU_UU, // Ú + HU_II, // Í + HU_OE, // Ö + HU_UE, // Ü + HU_OEE, // Ő + HU_UEE, // Ű +}; + +/* Fn keys */ + +enum { + F_BSE = 0, + F_HUN, + F_GUI, + F_SFT, + F_ALT, + F_CTRL +}; + +/* Custom keycodes */ + +enum { + CT_CLN = 0, + CT_MNS, + CT_TA, + CT_LBP, + CT_RBP +}; + +/* States & timers */ + +uint16_t gui_timer = 0; + +uint16_t kf_timers[12]; + +#if KEYLOGGER_ENABLE +bool log_enable = false; +#endif + +bool time_travel = false; + +/* The Keymap */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | Next/Prev | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | ~ | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | : | | - | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | Del | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( +// left hand + M(A_MPN) ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),KC_DEL + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 1: Adore layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | Play/Pause| 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | `~ | X | W | K | L | M | ( | | ) | F | H | C | P | Y | \ | + * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| + * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | Z | Q | ' | , | . | : | | - | B | G | V | J | / | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | Del | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | HUN | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | LEAD | | | + * `--------------------' `--------------------' + */ +[ADORE] = KEYMAP( +// left hand + KC_MPLY ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,KC_GRV ,KC_X ,KC_W ,KC_K ,KC_L ,KC_M ,TD(CT_LBP) +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,KC_NO ,KC_Z ,KC_Q ,KC_QUOT,KC_COMM,KC_DOT ,TD(CT_CLN) +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL + ,TD(CT_MNS),KC_B ,KC_G ,KC_V ,KC_J ,KC_SLSH ,KC_NO + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,OSL(NMDIA),KC_DEL + ,F(F_HUN) + ,KC_LEAD ,KC_ENT ,KC_SPC + ), + +/* Keymap 2: Arrow layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | Home | Up | End | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | Left | Down | Rght | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | Enter| |------| |------| PgUp | PgDn | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[ARRW] = KEYMAP( +// left 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_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_ENT ,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_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_PGUP ,KC_PGDN + ), + +/* Keymap 3: Application select layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[APPSEL] = KEYMAP( +// left hand + KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + ), + + +/* Keymap 4: Hungarian Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | Ő | | Ű | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | Ö | | Ü | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | BASE | | | + * `--------------------' `--------------------' + */ + +[HUN] = KEYMAP( +// left hand + KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO +,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) +,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,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_TRNS + + // right hand + ,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_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 ,KC_NO ,KC_NO + + ,KC_NO ,KC_NO + ,KC_NO + ,F(F_BSE),KC_TRNS ,KC_TRNS + ), + +/* Keymap 5: Navigation & Media layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| + * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| + * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | + * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| + * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Mute | VlUp | | BASE | MClk | + * ,------|------|------| |------+------+------. + * | | | VlDn | | Prev |Left |Right | + * | SPC | Enter|------| |------| Click| Click| + * | | | ESC | | Next | | | + * `--------------------' `--------------------' + */ +[NMDIA] = KEYMAP( +// left hand + KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) +,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO +,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO +,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_MUTE ,KC_VOLU + ,KC_VOLD + ,KC_SPC,KC_ENTER,M(A_ESC) + + // right hand + ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR + ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO + ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + + ,KC_TRNS ,KC_MS_BTN3 + ,KC_MPRV + ,KC_MNXT ,KC_BTN1 ,KC_BTN2 + ), + +/* Keymap 6: Steno for Plover + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | BASE | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | T | P | H | |------| |------| | F | P | L | T | D | + * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| + * | | | K | W | R | | | | | | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( +// left hand +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), +KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, +KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, +KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO,PV_E, PV_U + ), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) + ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) + ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) + ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) + ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) + ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) +}; + +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); + + register_code(PV_LP); + register_code(PV_LH); + register_code(PV_LR); + register_code(PV_O); + register_code(PV_RL); + register_code(PV_RG); + } else { + unregister_code(PV_LP); + unregister_code(PV_LH); + unregister_code(PV_LR); + unregister_code(PV_O); + unregister_code(PV_RL); + unregister_code(PV_RG); + } +} + +macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) +{ + uint8_t need_shift = 0; + uint8_t hold_shift = 0; + + if (!record->event.pressed) + return MACRO_NONE; + + layer_off (HUN); + + if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { + hold_shift = 1; + need_shift = 1; + unregister_code (KC_LSFT); + } + if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { + need_shift = 1; + hold_shift = 0; + unregister_code (KC_LSFT); + } + + clear_oneshot_mods (); + + register_code (KC_RALT); + unregister_code (KC_RALT); + if (accent == (KC_DQT)) { + register_code (KC_RSFT); + } + register_code (accent); + unregister_code (accent); + if (need_shift && accent != (KC_DQT)) { + register_code (KC_RSFT); + } else if (accent == (KC_DQT) && !need_shift) { + unregister_code (KC_RSFT); + } + register_code (hun_char); + unregister_code (hun_char); + if (need_shift || accent == (KC_DQT)) + unregister_code (KC_RSFT); + if (hold_shift) + register_code (KC_LSFT); + + return MACRO_NONE; +} + +void ang_handle_kf (keyrecord_t *record, uint8_t id) +{ + uint8_t code = id - KF_1; + + if (record->event.pressed) { + kf_timers[code] = timer_read (); + } else { + uint8_t kc; + + if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { + // Long press + kc = KC_F1 + code; + } else { + if (id == KF_11) + kc = KC_EQL; + else + kc = KC_1 + code; + } + + register_code (kc); + unregister_code (kc); + } +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case A_ESC: + if (record->event.pressed) { + if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { + clear_oneshot_mods (); + } else { + register_code (KC_ESC); + } + layer_off (HUN); + } else { + unregister_code (KC_ESC); + } + break; + + case A_MPN: + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); + + if (oneshot) + clear_oneshot_mods (); + unregister_code (KC_LSFT); + + register_code (KC_MPRV); + unregister_code (KC_MPRV); + + if (!oneshot) + register_code (KC_LSFT); + } else { + return MACRO (T(MNXT), END); + } + } + break; + + /* Hungarian layer */ + case HU_AA: + return ang_do_hun (record, KC_QUOT, KC_A); + case HU_OO: + return ang_do_hun (record, KC_QUOT, KC_O); + case HU_EE: + return ang_do_hun (record, KC_QUOT, KC_E); + case HU_UU: + return ang_do_hun (record, KC_QUOT, KC_U); + case HU_II: + return ang_do_hun (record, KC_QUOT, KC_I); + case HU_OE: + return ang_do_hun (record, KC_DQT, KC_O); + case HU_UE: + return ang_do_hun (record, KC_DQT, KC_U); + case HU_OEE: + return ang_do_hun (record, KC_EQL, KC_O); + case HU_UEE: + return ang_do_hun (record, KC_EQL, KC_U); + + /* Mouse movement */ + case A_MUL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MUR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + case A_MDL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + mousekey_send(); + break; + + case A_MDR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + mousekey_send(); + break; + + /* Plover base */ + case A_PLVR: + toggle_steno(record->event.pressed); + break; + + /* GUI & AppSel */ + case A_GUI: + if (record->event.pressed) { + register_code (KC_LGUI); + if (record->tap.count && !record->tap.interrupted) { + if (record->tap.count >= 2) { + register_code (KC_W); + layer_on (APPSEL); + set_oneshot_layer (APPSEL, ONESHOT_START); + } + } else { + record->tap.count = 0; + } + gui_timer = 0; + } else { + if (record->tap.count >= 2) + { + unregister_code (KC_W); + clear_oneshot_layer_state (ONESHOT_PRESSED); + } + gui_timer = timer_read (); + } + break; + + case APP_SLK: + return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); + + case APP_EMCS: + return MACRODOWN(T(G), T(N), T(U), T(SPC), T(E), T(M), T(A), T(C), T(S), T(SPC), T(2), T(4), T(ENT), END); + + case APP_TERM: + return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); + + case APP_CHRM: + return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); + + case APP_MSIC: + return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); + + /* Function keys */ + case KF_1 ... KF_11: + ang_handle_kf (record, id); + break; + } + + return MACRO_NONE; +}; + +uint8_t is_adore = 0; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + uint8_t dl; + + ergodox_led_all_on(); + for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { + ergodox_led_all_set (i); + wait_ms (5); + } + wait_ms(1000); + for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { + ergodox_led_all_set (i); + wait_ms (10); + } + ergodox_led_all_off(); + + if (!eeconfig_is_enabled()) + eeconfig_init(); + dl = eeconfig_read_default_layer (); + if (dl == (1UL << ADORE)) { + is_adore = 1; +#if ADORE_AUTOLOG + log_enable = true; +#endif + } +}; + +LEADER_EXTERNS(); + +void ang_do_unicode (void) { + register_code (KC_RCTL); + register_code (KC_RSFT); + register_code (KC_U); + unregister_code (KC_U); + unregister_code (KC_RSFT); + unregister_code (KC_RCTL); + wait_ms (100); +} + +void ang_tap (uint16_t codes[]) { + for (int i = 0; codes[i] != 0; i++) { + register_code (codes[i]); + unregister_code (codes[i]); + wait_ms (50); + } +} + +#define TAP_ONCE(code) \ + register_code (code); \ + unregister_code (code) + +void ang_tap_dance_bp_finished (qk_tap_dance_state_t *state, void *user_data) { + bool left, parens; + + if (state->count > 2) { + state->count = 0; + return; + } + + if (state->keycode == TD(CT_LBP)) + left = true; + else + left = false; + + if (state->count == 1) + parens = false; + else + parens = true; + + if (parens) { + register_code (KC_RSFT); + if (left) { + TAP_ONCE(KC_9); + } else { + TAP_ONCE(KC_0); + } + unregister_code (KC_RSFT); + } else { + if (left) { + TAP_ONCE (KC_LBRC); + } else { + TAP_ONCE (KC_RBRC); + } + } +} + +void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + } else if (state->count == 2) { + register_code (KC_SCLN); + } +} + +void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (state->count == 2) { + unregister_code (KC_SCLN); + } +} + +void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_MINS); + } else if (state->count == 2) { + register_code (KC_RSFT); + register_code (KC_MINS); + } +} + +void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_MINS); + } else if (state->count == 2) { + unregister_code (KC_RSFT); + unregister_code (KC_MINS); + } +} + +typedef struct { + bool layer_toggle; + bool sticky; + bool finished_once; +} td_ta_state_t; + +void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (td_ta->finished_once) { + return; + } + + if (td_ta->sticky) { + td_ta->sticky = false; + td_ta->layer_toggle = false; + layer_off (ARRW); + return; + } + + td_ta->finished_once = true; + if (state->count == 1 && !state->pressed) { + register_code (KC_TAB); + td_ta->sticky = false; + td_ta->layer_toggle = false; + } else { + td_ta->layer_toggle = true; + layer_on (ARRW); + td_ta->sticky = (state->count == 2); + } +} + +void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { + td_ta_state_t *td_ta = (td_ta_state_t *) user_data; + + if (!td_ta->layer_toggle) + unregister_code (KC_TAB); + if (!td_ta->sticky) + layer_off (ARRW); + + td_ta->finished_once = false; +} + +const qk_tap_dance_action_t tap_dance_actions[] = { + [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) + ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) + ,[CT_TA] = { + .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, + .user_data = (void *)&((td_ta_state_t) { false, false, false }) + } + ,[CT_LBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished) + ,[CT_RBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished) +}; + +static uint16_t uni[32]; +static uint8_t unicnt; +static bool unimagic = false; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) + unregister_code (KC_LGUI); + + if (layer == HUN) { + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + } else if (layer == NMDIA) { + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + } else if (layer == PLVR) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + } else if (layer == ADORE) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + } + + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_1_set (LED_BRIGHTNESS_HI); + ergodox_right_led_1_on (); + } else { + ergodox_right_led_1_set (LED_BRIGHTNESS_LO); + if (layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_1_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LALT) || + ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + ergodox_right_led_2_on (); + } else { + ergodox_right_led_2_set (LED_BRIGHTNESS_LO); + if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_2_off (); + } + + if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || + ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_3_set (LED_BRIGHTNESS_HI); + ergodox_right_led_3_on (); + } else { + ergodox_right_led_3_set (LED_BRIGHTNESS_LO); + if (layer != HUN && layer != PLVR && layer != ADORE) + ergodox_right_led_3_off (); + } + + LEADER_DICTIONARY() { + leading = false; + leader_end (); + +#if KEYLOGGER_ENABLE + SEQ_ONE_KEY (KC_D) { + ergodox_led_all_on(); + wait_ms(100); + ergodox_led_all_off(); + log_enable = !log_enable; + } +#endif + + SEQ_ONE_KEY (KC_T) { + time_travel = !time_travel; + } + + SEQ_ONE_KEY (KC_U) { + ang_do_unicode (); + } + + SEQ_TWO_KEYS (KC_LEAD, KC_U) { + unicnt = 0; + unimagic = true; + register_code(KC_RSFT); + TAP_ONCE(KC_U); + unregister_code(KC_RSFT); + } + + SEQ_ONE_KEY (KC_V) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); + } + + SEQ_ONE_KEY (KC_L) { + /* λ */ + ang_do_unicode (); + + uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_Y) { + uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; + ang_tap (codes); + } + + SEQ_ONE_KEY (KC_S) { + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + TAP_ONCE (KC_BSLS); + register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); + ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); + register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); + TAP_ONCE (KC_SLSH); + ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + } + + SEQ_TWO_KEYS (KC_W, KC_M) { + register_code (KC_LALT); + register_code (KC_F2); + unregister_code (KC_F2); + unregister_code (KC_LALT); + + wait_ms (1000); + + uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; + ang_tap (codes); + register_code (KC_LGUI); + register_code (KC_UP); + unregister_code (KC_UP); + unregister_code (KC_LGUI); + } + + SEQ_ONE_KEY (KC_A) { + if (is_adore == 0) { + default_layer_and (0); + default_layer_or ((1UL << ADORE)); + eeconfig_update_default_layer ((1UL << ADORE)); + is_adore = 1; + + ergodox_led_all_off (); + ergodox_right_led_3_on (); + wait_ms (100); + ergodox_right_led_2_on (); + wait_ms (100); + ergodox_right_led_3_off (); + ergodox_right_led_1_on (); + wait_ms (100); + ergodox_right_led_2_off (); + wait_ms (100); + ergodox_right_led_1_off (); +#if ADORE_AUTOLOG + log_enable = true; +#endif + } else { +#if ADORE_AUTOLOG + log_enable = false; +#endif + is_adore = 0; + default_layer_and (0); + default_layer_or (1UL << BASE); + eeconfig_update_default_layer ((1UL << BASE)); + + ergodox_led_all_off (); + ergodox_right_led_1_on (); + wait_ms (100); + ergodox_right_led_2_on (); + wait_ms (100); + ergodox_right_led_1_off (); + ergodox_right_led_3_on (); + wait_ms (100); + ergodox_right_led_2_off (); + wait_ms (100); + ergodox_right_led_3_off (); + } + } + } +} + +static uint16_t last4[4]; + +bool is_uni_seq(char *seq) { + uint8_t i; + + for (i = 0; seq[i]; i++) { + uint16_t code; + if (('1' <= seq[i]) && (seq[i] <= '9')) + code = seq[i] - '1' + KC_1; + else if (seq[i] == '0') + code = KC_0; + else + code = seq[i] - 'a' + KC_A; + + if (i > unicnt) + return false; + if (uni[i] != code) + return false; + } + + if (uni[i] == KC_ENT || uni[i] == KC_SPC) + return true; + + return false; +} + +uint16_t hex_to_keycode(uint8_t hex) +{ + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +void register_hex(uint16_t hex) { + bool leading_zeros = true; + + for(int i = 3; i >= 0; i--) { + uint8_t digit = ((hex >> (i*4)) & 0xF); + if (digit != 0) + leading_zeros = false; + else if (leading_zeros) + continue; + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + wait_ms(10); + } +} + +typedef struct { + char *symbol; + uint16_t codes[4]; +} qk_ucis_symbol_t; + +static qk_ucis_symbol_t ucis_symbol_table[] = { + {"poop", {0x1, 0xf4a9, 0}}, + {"rofl", {0x1, 0xf923, 0}}, + {"kiss", {0x1, 0xf619, 0}}, + {"snowman", {0x2603, 0}}, + {NULL, {}} +}; + +bool process_record_ucis (uint16_t keycode, keyrecord_t *record) { + uint8_t i; + + if (!unimagic) + return true; + + if (!record->event.pressed) + return true; + + uni[unicnt] = keycode; + unicnt++; + + if (keycode == KC_BSPC) { + if (unicnt >= 2) { + unicnt-= 2; + return true; + } else { + unicnt--; + return false; + } + } + + if (keycode == KC_ENT || keycode == KC_SPC) { + bool symbol_found = false; + + for (i = unicnt; i > 0; i--) { + register_code (KC_BSPC); + unregister_code (KC_BSPC); + wait_ms(10); + } + + ang_do_unicode(); + wait_ms(10); + for (i = 0; ucis_symbol_table[i].symbol; i++) { + if (is_uni_seq (ucis_symbol_table[i].symbol)) { + symbol_found = true; + for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) { + register_hex(ucis_symbol_table[i].codes[j]); + } + break; + } + } + if (!symbol_found) { + for (i = 0; i < unicnt - 1; i++) { + uint8_t code; + + if (uni[i] > KF_1) + code = uni[i] - KF_1 + KC_1; + else + code = uni[i]; + TAP_ONCE(code); + wait_ms (10); + } + } + + unimagic = false; + return true; + } + return true; +} + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { +#if KEYLOGGER_ENABLE + if (log_enable) { + xprintf ("KL: col=%d, row=%d\n", record->event.key.col, + record->event.key.row); + } +#endif + + if (!process_record_ucis (keycode, record)) + return false; + + if (time_travel && !record->event.pressed) { + uint8_t p; + + // shift cache one to the left + for (p = 0; p < 3; p++) { + last4[p] = last4[p + 1]; + } + last4[3] = keycode; + + if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { + uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; + ang_tap (codes); + register_code (KC_RSFT); + register_code (KC_EQL); + unregister_code (KC_EQL); + unregister_code (KC_RSFT); + + uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; + ang_tap (codes2); + + return false; + } + } + + return true; +} diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index 6fe1775111..26dfddbe6a 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -16,11 +16,12 @@ Some of the things in the layout only work when one uses Spacemacs and GNOME und - [ADORE layer](#adore-layer) - [Hungarian layer](#hungarian-layer) - [Navigation and media layer](#navigation-and-media-layer) - - [One-handed layer](#one-handed-layer) - [Steno layer](#steno-layer) - [LED states](#led-states) * [Tools](#tools) - [Heatmap](#heatmap) +* [Special features](#special-features) + - [Unicode Symbol Input](#unicode-symbol-input) * [Building](#building) - [Using on Windows](#using-on-windows) * [Changelog](#changelog) @@ -38,7 +39,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest * The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. * The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. -* The **Media** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** keys are toggles. +* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle. * When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. * Tapping the `:` key once yields `:`, tapping it twice yields `;`. * The **Lead** key allows me to type in a sequence of keys, and trigger some actions: @@ -51,6 +52,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest - `LEAD v` prints the firmware version, the keyboard and the keymap. - `LEAD d` toggles logging keypress positions to the HID console. - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. + - `LEAD LEAD u` enters the [Unicode symbol input][#unicode-symbol-input] mode. ## ADORE layer @@ -74,20 +76,6 @@ On this layer, the accented characters are at the same position as their base va This layer is primarily for navigating with the cursor or the mouse, and some media things. -## One-handed layer - -[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) - -The one-handed layer is used in situations where the right hand is occupied, by mousing around, for example. Tapping the `OTHER` key switches which side is active. For the most part, keys remain in their usual position. When the right half is active, keys are mirrored to the left half. - -The differences are as follows: - -* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier to tap. -* Most keys on the thumb cluster now have dual uses, and these do not change when switching sides: - - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held for longer than a normal tap. - - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. -* The `Apps`/`BASE` key can be used to go back to the base layer, by long-tapping it. A short-tap will send the `App` key, as usual. - ## Steno layer [![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) @@ -103,11 +91,25 @@ For the layers, the following rules apply: * When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. * When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. * When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. -* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is on and bright, and either the *red* or the *blue* one is going to slowly blink, depending on the currently active side. * For the [Steno layer](#steno-layer), all LEDs will be turned on. Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. +# Special features + +## Unicode Symbol Input + +Once in the Unicode Symbol Input mode, one is able to type in symbol names, press `Enter` or `Space`, and get the Unicode symbol itself back. When in the mode, a capital `U` is printed first. Once the sequence is finished, all of it is erased by sending enough `Backspace` taps, and the firmware starts the OS-specific unicode input sequence. Then, it looks up the symbol name, and enters the associated code. If it is not found, it will just replay the pressed keycodes. + +The currently supported symbols are: + +- `snowman`: ☃ +- `kiss`: 😙 +- `rofl`: 🤣 +- `poop`: 💩 + +This is an experimental feature, and may or may not work reliably. + # Tools ## Heatmap @@ -133,14 +135,14 @@ To make my workflow easier, this layout is maintained in [its own repository][al $ git clone https://github.com/jackhumbert/qmk_firmware.git $ cd qmk_firmware $ git clone https://github.com/algernon/ergodox-layout.git \ - keyboards/ergodox_ez/keymaps/algernon-master -$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master + keyboards/ergodox/keymaps/algernon-master +$ make keyboard=ergodox keymap=algernon-master ``` From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): ``` -$ make KEYBOARD=ergodox_ez KEYMAP=algernon +$ make keyboard=ergodox keymap=algernon ``` ## Using on Windows @@ -149,6 +151,16 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the # Changelog +## v1.5 - 2016-08-12 + +* The **1HAND** layer has been removed. +* A `Delete` key is now available on the right thumb cluster. +* The [ADORE](#adore-layer) layer received a major update, see the layout image above. +* It is now possible to enable automatic logging for the [ADORE](#adore-layer) layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. +* The `~` key and the `Media Next/Prev` key have been swapped on the [base layer](#base-layer). +* On the **ARROW** layer, `Backspace` has been replaced by `Enter`. +* There is some experimental support for entering Unicode symbols. + ## v1.4 - 2016-07-29 * When toggling the key logging on or off, the LEDs will do a little dance. -- cgit v1.2.3 From cafa528b88c097f02ae92a5b15b015f5653cefe7 Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 12 Aug 2016 19:14:48 +0200 Subject: only aesthetics --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 71c205a489..9f838ba617 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -67,10 +67,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_TAB] = KEYMAP_ISO_SPLITRSHIFT( - KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_7), RALT(KC_0), 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ + KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_7), RALT(KC_0), 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) -- cgit v1.2.3 From 993d72b11fca8d50296570dc85e9354f8045c4a6 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Fri, 12 Aug 2016 21:05:52 +0100 Subject: added a lock screen key --- keyboards/planck/keymaps/callum/keymap.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index ed187df1da..494ed30b06 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -20,7 +20,8 @@ enum planck_keycodes { BASE = SAFE_RANGE, MOVE, SYMB, - FUNC + FUNC, + LOCK }; // Fillers to make layering more clear @@ -87,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | | | | | | + * | | Play | Prev | Next | BL+ | | | Lock | | | | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | Mute | Vol- | Vol+ | BL- | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -96,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, _______, _______}, {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } @@ -133,6 +134,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case LOCK: + if (record->event.pressed) { + register_code(KC_RSFT); + register_code(KC_RGUI); + register_code(KC_POWER); + } else { + unregister_code(KC_POWER); + unregister_code(KC_RGUI); + unregister_code(KC_RSFT); + } + return false; + break; } return true; } -- cgit v1.2.3 From 098951905d527c19043de75ef262ac9679ec452b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 12 Aug 2016 20:45:43 -0400 Subject: forces all ergodox keymaps to be ez on qmk.fm (were infinity) --- util/travis_compiled_push.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index 27ab3cec66..c2a994ef02 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -7,6 +7,8 @@ rev=$(git rev-parse --short HEAD) git config --global user.name "Travis CI" git config --global user.email "jack.humb+travis.ci@gmail.com" +make all-keymaps keyboard=ergodox/ez AUTOGEN=true + find . -name ".build" | xargs rm -rf cd .. git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git -- cgit v1.2.3 From 477f1ad0c8e360880d2b2db9abe4b000940a56bf Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Fri, 12 Aug 2016 19:07:44 -0700 Subject: fix link to ErgoDox EZ This just fixes the readme link to the ErgoDox EZ directory --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 57629f8be2..e2221e7496 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http * [Planck](/keyboards/planck/) * [Preonic](/keyboards/preonic/) * [Atomic](/keyboards/atomic/) -* [ErgoDox EZ](/keyboards/ergodox_ez/) +* [ErgoDox EZ](/keyboards/ergodox/ez/) * [Clueboard](/keyboards/clueboard/) * [Cluepad](/keyboards/cluepad/) @@ -31,7 +31,7 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: -* The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox EZ, it's [here](keyboards/ergodox_ez/); for the Planck, it's [here](keyboards/planck/) and so on. +* The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on. * The list of possible keycodes you can use in your keymap is actually spread out in a few different places: * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined. -- cgit v1.2.3 From 458607ee5eafe1cc095b258cac014c334d8e7b72 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Fri, 12 Aug 2016 22:26:30 -0700 Subject: Corrections to the Atreus Makefile and updates to my keymap --- keyboards/atreus/keymaps/xyverz/keymap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index 0238fdbd39..02a661c8e3 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -46,14 +46,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_L1] = { /* LAYER 1 */ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, - {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, + {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } }, [_L2] = { /* LAYER 2 */ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS}, {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 }, +<<<<<<< HEAD {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET } +======= + {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET} +>>>>>>> e1abe4c... Corrections to the Atreus Makefile and updates to my keymap } }; -- cgit v1.2.3 From 3bae791372e2090b30647d431c70c233caaef26f Mon Sep 17 00:00:00 2001 From: Xyverz Date: Fri, 12 Aug 2016 22:30:01 -0700 Subject: Update keymap.c --- keyboards/atreus/keymaps/xyverz/keymap.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index 02a661c8e3..b418cc9b5e 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -53,11 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS}, {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 }, -<<<<<<< HEAD - {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET } -======= {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET} ->>>>>>> e1abe4c... Corrections to the Atreus Makefile and updates to my keymap } }; -- cgit v1.2.3 From c07fe96581f02d0ea14c50cda7565aa52406c122 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Fri, 12 Aug 2016 23:45:40 -0700 Subject: Adding the MiniVan44 aka TheVan 44 by u/evangs to the repo. Initial Commit. --- keyboards/minivan44/Makefile | 75 ++++++++++++ keyboards/minivan44/config.h | 162 ++++++++++++++++++++++++++ keyboards/minivan44/keymaps/default/Makefile | 21 ++++ keyboards/minivan44/keymaps/default/config.h | 8 ++ keyboards/minivan44/keymaps/default/keymap.c | 97 +++++++++++++++ keyboards/minivan44/keymaps/default/readme.md | 1 + keyboards/minivan44/keymaps/xyverz/Makefile | 21 ++++ keyboards/minivan44/keymaps/xyverz/config.h | 8 ++ keyboards/minivan44/keymaps/xyverz/keymap.c | 92 +++++++++++++++ keyboards/minivan44/keymaps/xyverz/readme.md | 1 + keyboards/minivan44/minivan44.c | 28 +++++ keyboards/minivan44/minivan44.h | 22 ++++ keyboards/minivan44/readme.md | 28 +++++ 13 files changed, 564 insertions(+) create mode 100644 keyboards/minivan44/Makefile create mode 100644 keyboards/minivan44/config.h create mode 100644 keyboards/minivan44/keymaps/default/Makefile create mode 100644 keyboards/minivan44/keymaps/default/config.h create mode 100644 keyboards/minivan44/keymaps/default/keymap.c create mode 100644 keyboards/minivan44/keymaps/default/readme.md create mode 100644 keyboards/minivan44/keymaps/xyverz/Makefile create mode 100644 keyboards/minivan44/keymaps/xyverz/config.h create mode 100644 keyboards/minivan44/keymaps/xyverz/keymap.c create mode 100644 keyboards/minivan44/keymaps/xyverz/readme.md create mode 100644 keyboards/minivan44/minivan44.c create mode 100644 keyboards/minivan44/minivan44.h create mode 100644 keyboards/minivan44/readme.md diff --git a/keyboards/minivan44/Makefile b/keyboards/minivan44/Makefile new file mode 100644 index 0000000000..45ca127807 --- /dev/null +++ b/keyboards/minivan44/Makefile @@ -0,0 +1,75 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= yes # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/minivan44/config.h b/keyboards/minivan44/config.h new file mode 100644 index 0000000000..0ae93c0957 --- /dev/null +++ b/keyboards/minivan44/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEAE +#define PRODUCT_ID 0x8844 +#define DEVICE_VER 0x0002 +#define MANUFACTURER Evan Sailer +#define PRODUCT TheVan 44 +#define DESCRIPTION keyboard firmware for TV44 + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D7, B5, F7, D4 } +#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/minivan44/keymaps/default/Makefile b/keyboards/minivan44/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/minivan44/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/default/config.h b/keyboards/minivan44/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/minivan44/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/default/keymap.c b/keyboards/minivan44/keymaps/default/keymap.c new file mode 100644 index 0000000000..d559a4b1c7 --- /dev/null +++ b/keyboards/minivan44/keymaps/default/keymap.c @@ -0,0 +1,97 @@ +#include "minivan44.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +#define _QW 0 +#define _DV 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 +#define _L3 5 + +// Macro name shortcuts +#define QWERTY M(_QW) +#define DVORAK M(_DV) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +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 }, + {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_DV] = { /* Dvorak */ + {KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, + {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_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 }, + {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_L1] = { /* LAYER 1 */ + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, + {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, + {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L2] = { /* LAYER 2 */ + {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, + {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, + {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, + {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L3] = { /* LAYER 3 */ + {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, + {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, + {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, + {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/minivan44/keymaps/default/readme.md b/keyboards/minivan44/keymaps/default/readme.md new file mode 100644 index 0000000000..189a9c0ff8 --- /dev/null +++ b/keyboards/minivan44/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for minivan44 \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/Makefile b/keyboards/minivan44/keymaps/xyverz/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/minivan44/keymaps/xyverz/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/config.h b/keyboards/minivan44/keymaps/xyverz/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/minivan44/keymaps/xyverz/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/keymap.c b/keyboards/minivan44/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..f995da0e7e --- /dev/null +++ b/keyboards/minivan44/keymaps/xyverz/keymap.c @@ -0,0 +1,92 @@ +#include "minivan44.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define _DV 0 +#define _QW 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DV] = { /* 0: 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 }, + {MO(_L1), 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_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_QW] = { /* 1: 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 }, + {MO(_L1), 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_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_CM] = { /* 2: 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 }, + {MO(_L1), 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_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_L1] = {/* 1: FN 1 */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, + {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, + {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ } + }, + + [_L2] = { /* 2: FN 2 */ + {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC }, + {_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT }, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ }, + {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ } + } + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; + + diff --git a/keyboards/minivan44/keymaps/xyverz/readme.md b/keyboards/minivan44/keymaps/xyverz/readme.md new file mode 100644 index 0000000000..189a9c0ff8 --- /dev/null +++ b/keyboards/minivan44/keymaps/xyverz/readme.md @@ -0,0 +1 @@ +# The default keymap for minivan44 \ No newline at end of file diff --git a/keyboards/minivan44/minivan44.c b/keyboards/minivan44/minivan44.c new file mode 100644 index 0000000000..be8214fd5d --- /dev/null +++ b/keyboards/minivan44/minivan44.c @@ -0,0 +1,28 @@ +#include "minivan44.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/minivan44/minivan44.h b/keyboards/minivan44/minivan44.h new file mode 100644 index 0000000000..c6119c2e16 --- /dev/null +++ b/keyboards/minivan44/minivan44.h @@ -0,0 +1,22 @@ +#ifndef MINIVAN44_H +#define MINIVAN44_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ + K30, K31, K32, K33, K37, K38, K39, K3B \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \ + { K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \ + +#endif diff --git a/keyboards/minivan44/readme.md b/keyboards/minivan44/readme.md new file mode 100644 index 0000000000..59b62b0e66 --- /dev/null +++ b/keyboards/minivan44/readme.md @@ -0,0 +1,28 @@ +minivan44 keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/minivan44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file -- cgit v1.2.3 From 8bdf745909bc2581491acce11225f56a85bc8f24 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 10:33:47 +0200 Subject: process_unicode: Fix set_unicode_input_mode() In the header, this was defined as `set_unicode_input_mode`, but the implementation had `set_unicode_mode` for a name. Changed the implementation to match the header. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index ad5d7f86b7..3fcac15ce3 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -13,7 +13,7 @@ uint16_t hex_to_keycode(uint8_t hex) } } -void set_unicode_mode(uint8_t os_target) +void set_unicode_input_mode(uint8_t os_target) { input_mode = os_target; } -- cgit v1.2.3 From 2d0f585e426084b13fecc642cdda77506e2bfbf9 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Sat, 13 Aug 2016 10:36:08 -0700 Subject: Renamed minivan44 to tv44 in all occurrences per wishes of Jack and Evan. --- keyboards/tv44/Makefile | 75 ++++++++++++++ keyboards/tv44/config.h | 162 +++++++++++++++++++++++++++++++ keyboards/tv44/keymaps/default/Makefile | 21 ++++ keyboards/tv44/keymaps/default/config.h | 8 ++ keyboards/tv44/keymaps/default/keymap.c | 97 ++++++++++++++++++ keyboards/tv44/keymaps/default/readme.md | 1 + keyboards/tv44/keymaps/xyverz/Makefile | 21 ++++ keyboards/tv44/keymaps/xyverz/config.h | 8 ++ keyboards/tv44/keymaps/xyverz/keymap.c | 92 ++++++++++++++++++ keyboards/tv44/keymaps/xyverz/readme.md | 1 + keyboards/tv44/readme.md | 28 ++++++ keyboards/tv44/tv44.c | 28 ++++++ keyboards/tv44/tv44.h | 22 +++++ 13 files changed, 564 insertions(+) create mode 100644 keyboards/tv44/Makefile create mode 100644 keyboards/tv44/config.h create mode 100644 keyboards/tv44/keymaps/default/Makefile create mode 100644 keyboards/tv44/keymaps/default/config.h create mode 100644 keyboards/tv44/keymaps/default/keymap.c create mode 100644 keyboards/tv44/keymaps/default/readme.md create mode 100644 keyboards/tv44/keymaps/xyverz/Makefile create mode 100644 keyboards/tv44/keymaps/xyverz/config.h create mode 100644 keyboards/tv44/keymaps/xyverz/keymap.c create mode 100644 keyboards/tv44/keymaps/xyverz/readme.md create mode 100644 keyboards/tv44/readme.md create mode 100644 keyboards/tv44/tv44.c create mode 100644 keyboards/tv44/tv44.h diff --git a/keyboards/tv44/Makefile b/keyboards/tv44/Makefile new file mode 100644 index 0000000000..45ca127807 --- /dev/null +++ b/keyboards/tv44/Makefile @@ -0,0 +1,75 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= yes # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/tv44/config.h b/keyboards/tv44/config.h new file mode 100644 index 0000000000..0ae93c0957 --- /dev/null +++ b/keyboards/tv44/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEAE +#define PRODUCT_ID 0x8844 +#define DEVICE_VER 0x0002 +#define MANUFACTURER Evan Sailer +#define PRODUCT TheVan 44 +#define DESCRIPTION keyboard firmware for TV44 + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D7, B5, F7, D4 } +#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tv44/keymaps/default/Makefile b/keyboards/tv44/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/tv44/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/default/config.h b/keyboards/tv44/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/tv44/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c new file mode 100644 index 0000000000..6a4fef3da2 --- /dev/null +++ b/keyboards/tv44/keymaps/default/keymap.c @@ -0,0 +1,97 @@ +#include "tv44.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +#define _QW 0 +#define _DV 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 +#define _L3 5 + +// Macro name shortcuts +#define QWERTY M(_QW) +#define DVORAK M(_DV) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +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 }, + {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_DV] = { /* Dvorak */ + {KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, + {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_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 }, + {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_L1] = { /* LAYER 1 */ + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, + {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, + {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L2] = { /* LAYER 2 */ + {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, + {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, + {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, + {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L3] = { /* LAYER 3 */ + {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, + {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, + {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, + {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/tv44/keymaps/default/readme.md b/keyboards/tv44/keymaps/default/readme.md new file mode 100644 index 0000000000..ac84c08cfa --- /dev/null +++ b/keyboards/tv44/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for tv44 \ No newline at end of file diff --git a/keyboards/tv44/keymaps/xyverz/Makefile b/keyboards/tv44/keymaps/xyverz/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/tv44/keymaps/xyverz/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/xyverz/config.h b/keyboards/tv44/keymaps/xyverz/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/tv44/keymaps/xyverz/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..8cbcf8d35a --- /dev/null +++ b/keyboards/tv44/keymaps/xyverz/keymap.c @@ -0,0 +1,92 @@ +#include "tv44.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define _DV 0 +#define _QW 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DV] = { /* 0: 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 }, + {MO(_L1), 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_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_QW] = { /* 1: 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 }, + {MO(_L1), 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_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_CM] = { /* 2: 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 }, + {MO(_L1), 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_RSFT }, + {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } + }, + + [_L1] = {/* 1: FN 1 */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, + {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, + {KC_ESC, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ } + }, + + [_L2] = { /* 2: FN 2 */ + {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC }, + {_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT }, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ }, + {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ } + } + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; + + diff --git a/keyboards/tv44/keymaps/xyverz/readme.md b/keyboards/tv44/keymaps/xyverz/readme.md new file mode 100644 index 0000000000..ac84c08cfa --- /dev/null +++ b/keyboards/tv44/keymaps/xyverz/readme.md @@ -0,0 +1 @@ +# The default keymap for tv44 \ No newline at end of file diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md new file mode 100644 index 0000000000..e3b557fe2d --- /dev/null +++ b/keyboards/tv44/readme.md @@ -0,0 +1,28 @@ +tv44 keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/tv44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file diff --git a/keyboards/tv44/tv44.c b/keyboards/tv44/tv44.c new file mode 100644 index 0000000000..6dc0efd28e --- /dev/null +++ b/keyboards/tv44/tv44.c @@ -0,0 +1,28 @@ +#include "tv44.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h new file mode 100644 index 0000000000..4c30174acc --- /dev/null +++ b/keyboards/tv44/tv44.h @@ -0,0 +1,22 @@ +#ifndef TV44_H +#define TV44_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ + K30, K31, K32, K33, K37, K38, K39, K3B \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \ + { K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \ + +#endif -- cgit v1.2.3 From e87506767cec6410d1a93c15d68452815c9c3553 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Sat, 13 Aug 2016 10:44:42 -0700 Subject: Removal of old minivan44 folder. --- keyboards/minivan44/Makefile | 75 ------------ keyboards/minivan44/config.h | 162 -------------------------- keyboards/minivan44/keymaps/default/Makefile | 21 ---- keyboards/minivan44/keymaps/default/config.h | 8 -- keyboards/minivan44/keymaps/default/keymap.c | 97 --------------- keyboards/minivan44/keymaps/default/readme.md | 1 - keyboards/minivan44/keymaps/xyverz/Makefile | 21 ---- keyboards/minivan44/keymaps/xyverz/config.h | 8 -- keyboards/minivan44/keymaps/xyverz/keymap.c | 92 --------------- keyboards/minivan44/keymaps/xyverz/readme.md | 1 - keyboards/minivan44/minivan44.c | 28 ----- keyboards/minivan44/minivan44.h | 22 ---- keyboards/minivan44/readme.md | 28 ----- 13 files changed, 564 deletions(-) delete mode 100644 keyboards/minivan44/Makefile delete mode 100644 keyboards/minivan44/config.h delete mode 100644 keyboards/minivan44/keymaps/default/Makefile delete mode 100644 keyboards/minivan44/keymaps/default/config.h delete mode 100644 keyboards/minivan44/keymaps/default/keymap.c delete mode 100644 keyboards/minivan44/keymaps/default/readme.md delete mode 100644 keyboards/minivan44/keymaps/xyverz/Makefile delete mode 100644 keyboards/minivan44/keymaps/xyverz/config.h delete mode 100644 keyboards/minivan44/keymaps/xyverz/keymap.c delete mode 100644 keyboards/minivan44/keymaps/xyverz/readme.md delete mode 100644 keyboards/minivan44/minivan44.c delete mode 100644 keyboards/minivan44/minivan44.h delete mode 100644 keyboards/minivan44/readme.md diff --git a/keyboards/minivan44/Makefile b/keyboards/minivan44/Makefile deleted file mode 100644 index 45ca127807..0000000000 --- a/keyboards/minivan44/Makefile +++ /dev/null @@ -1,75 +0,0 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= yes # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR - include ../../Makefile -endif - - diff --git a/keyboards/minivan44/config.h b/keyboards/minivan44/config.h deleted file mode 100644 index 0ae93c0957..0000000000 --- a/keyboards/minivan44/config.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEAE -#define PRODUCT_ID 0x8844 -#define DEVICE_VER 0x0002 -#define MANUFACTURER Evan Sailer -#define PRODUCT TheVan 44 -#define DESCRIPTION keyboard firmware for TV44 - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { D7, B5, F7, D4 } -#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/minivan44/keymaps/default/Makefile b/keyboards/minivan44/keymaps/default/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/minivan44/keymaps/default/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/default/config.h b/keyboards/minivan44/keymaps/default/config.h deleted file mode 100644 index df06a26206..0000000000 --- a/keyboards/minivan44/keymaps/default/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/default/keymap.c b/keyboards/minivan44/keymaps/default/keymap.c deleted file mode 100644 index d559a4b1c7..0000000000 --- a/keyboards/minivan44/keymaps/default/keymap.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "minivan44.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. - -#define _QW 0 -#define _DV 1 -#define _CM 2 -#define _L1 3 -#define _L2 4 -#define _L3 5 - -// Macro name shortcuts -#define QWERTY M(_QW) -#define DVORAK M(_DV) -#define COLEMAK M(_CM) - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - - -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 }, - {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_DV] = { /* Dvorak */ - {KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, - {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_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 }, - {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_L1] = { /* LAYER 1 */ - {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, - {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, - {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } - }, - [_L2] = { /* LAYER 2 */ - {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, - {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, - {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, - {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } - }, - [_L3] = { /* LAYER 3 */ - {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, - {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, - {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, - {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } - } -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case _DV: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); - } - break; - case _QW: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); - } - break; - case _CM: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboards/minivan44/keymaps/default/readme.md b/keyboards/minivan44/keymaps/default/readme.md deleted file mode 100644 index 189a9c0ff8..0000000000 --- a/keyboards/minivan44/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for minivan44 \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/Makefile b/keyboards/minivan44/keymaps/xyverz/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/minivan44/keymaps/xyverz/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/config.h b/keyboards/minivan44/keymaps/xyverz/config.h deleted file mode 100644 index df06a26206..0000000000 --- a/keyboards/minivan44/keymaps/xyverz/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/minivan44/keymaps/xyverz/keymap.c b/keyboards/minivan44/keymaps/xyverz/keymap.c deleted file mode 100644 index f995da0e7e..0000000000 --- a/keyboards/minivan44/keymaps/xyverz/keymap.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "minivan44.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -#define _DV 0 -#define _QW 1 -#define _CM 2 -#define _L1 3 -#define _L2 4 - -// Macro name shortcuts -#define DVORAK M(_DV) -#define QWERTY M(_QW) -#define COLEMAK M(_CM) - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_DV] = { /* 0: 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 }, - {MO(_L1), 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_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT }, - {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } - }, - - [_QW] = { /* 1: 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 }, - {MO(_L1), 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_RSFT }, - {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } - }, - - [_CM] = { /* 2: 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 }, - {MO(_L1), 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_RSFT }, - {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } - }, - - [_L1] = {/* 1: FN 1 */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, - {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, - {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, - {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ } - }, - - [_L2] = { /* 2: FN 2 */ - {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC }, - {_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT }, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ }, - {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ } - } - -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case _DV: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); - } - break; - case _QW: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); - } - break; - case _CM: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); - } - break; - } - return MACRO_NONE; -}; - - diff --git a/keyboards/minivan44/keymaps/xyverz/readme.md b/keyboards/minivan44/keymaps/xyverz/readme.md deleted file mode 100644 index 189a9c0ff8..0000000000 --- a/keyboards/minivan44/keymaps/xyverz/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for minivan44 \ No newline at end of file diff --git a/keyboards/minivan44/minivan44.c b/keyboards/minivan44/minivan44.c deleted file mode 100644 index be8214fd5d..0000000000 --- a/keyboards/minivan44/minivan44.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "minivan44.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} diff --git a/keyboards/minivan44/minivan44.h b/keyboards/minivan44/minivan44.h deleted file mode 100644 index c6119c2e16..0000000000 --- a/keyboards/minivan44/minivan44.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef MINIVAN44_H -#define MINIVAN44_H - -#include "quantum.h" - -// This a shortcut to help you visually see your layout. -// The following is an example using the Planck MIT layout -// The first section contains all of the arguements -// The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ - K30, K31, K32, K33, K37, K38, K39, K3B \ -) \ -{ \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \ - { K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \ - -#endif diff --git a/keyboards/minivan44/readme.md b/keyboards/minivan44/readme.md deleted file mode 100644 index 59b62b0e66..0000000000 --- a/keyboards/minivan44/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -minivan44 keyboard firmware -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/minivan44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default - -To build with the default keymap, simply run `make`. - -### Other Keymaps - -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. - -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: - -``` -$ make keymap=[default|jack|] -``` - -Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file -- cgit v1.2.3 From ba7f2b1d3f350b72236a19440ec7026fa0cfd2ba Mon Sep 17 00:00:00 2001 From: Nicholas Keene Date: Sat, 13 Aug 2016 15:53:03 -0500 Subject: The Ordinary Layout is the unsurprising layout --- keyboards/ergodox/keymaps/ordinary/keymap.c | 241 +++++++++------------ .../ergodox/keymaps/ordinary/ordinary-base.png | Bin 99605 -> 76549 bytes .../ergodox/keymaps/ordinary/ordinary-base.txt | 16 +- .../ergodox/keymaps/ordinary/ordinary-media.png | Bin 124144 -> 96205 bytes .../ergodox/keymaps/ordinary/ordinary-media.txt | 36 +-- .../ergodox/keymaps/ordinary/ordinary-special.png | Bin 63065 -> 68418 bytes .../ergodox/keymaps/ordinary/ordinary-special.txt | 20 +- .../ergodox/keymaps/ordinary/ordinary-symbol.png | Bin 103735 -> 73009 bytes .../ergodox/keymaps/ordinary/ordinary-symbol.txt | 20 +- keyboards/ergodox/keymaps/ordinary/readme.md | 8 +- 10 files changed, 158 insertions(+), 183 deletions(-) diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c index bf0574ea2c..eda45b7cb3 100644 --- a/keyboards/ergodox/keymaps/ordinary/keymap.c +++ b/keyboards/ergodox/keymaps/ordinary/keymap.c @@ -1,23 +1,20 @@ -#include "ergodox.h" +#include "ergodox_ez.h" #include "led.h" #include "debug.h" #include "action_layer.h" #include "action_util.h" -#include "mousekey.h" #define BASE 0 // default layer #define SYMB 1 // symbols layer #define MDIA 2 // media layer #define SPEC 3 // special layer -#define LCaps 10 // left caps-shift key -#define LSymb 11 // left symbol-shift key -#define LMdia 12 // left media-shift key -#define LSpec 13 // left special-shift key -#define RCaps 14 // right caps-shift key -#define RSymb 15 // right symbol-shift key -#define RMdia 16 // right media-shift key -#define RSpec 17 // right special-shift key +#define LSymb 10 // left symbol-shift key +#define LMdia 11 // left media-shift key +#define LSpec 12 // left special-shift key +#define RSymb 13 // right symbol-shift key +#define RMdia 14 // right media-shift key +#define RSpec 15 // right special-shift key #define MUL 20 // mouse up left #define MUR 21 // mouse up right @@ -25,13 +22,14 @@ #define MDR 23 // mouse down right /* - * The Ordinary Layout for the Ergodox EZ keyboard, v4 - * + * The Ordinary Layout for the Ergodox EZ keyboard, v4.20 + * * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com * * No rights reserved. This software is in the public domain. * Credit me if you are friendly but if you're a jerk don't bother. - * + * If you use or modify this layout I would love to hear from you. + * * Details: readme.md * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary */ @@ -61,10 +59,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [BASE] = KEYMAP( // left hand - F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC + F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC ,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC ,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G -,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) +,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) ,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI ,KC_HOME,KC_END ,KC_PGUP @@ -73,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) - ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) + ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL ,KC_LEFT ,KC_RGHT ,KC_UP @@ -91,8 +89,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| - * `-----------------------------------' `-------------------------------------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent | + * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | Left | Right| | Home | End | * ,------|------|------| |------+------+------. @@ -105,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) -,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV +,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_TAB ,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI ,KC_LEFT ,KC_RGHT @@ -116,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS - ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) + ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT ,KC_HOME ,KC_END ,KC_PGUP ,KC_PGDN ,KC_BSPC ,KC_DEL @@ -124,24 +122,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /******* Media Layer ******************************************************************************************************* * - * ,---------------------------------------------------------------. ,---------------------------------------------------------------. - * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | - * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| - * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | - * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| - * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | - * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| - * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | - * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' - * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| - * `---------------------------------------------' `---------------------------------------------' - * ,-------------. ,-------------. - * | Stop |Refrsh| | Prev | Next | - * ,------|------|------| |------+------+------. - * |Brwser|Brwser|Search| |VolUp | | | - * |Back | Fwd |------| |------| Stop | Play-| - * | | | Home | |VolDn | | Pause| - * `--------------------' `--------------------' + * ,---------------------------------------------------------------. ,---------------------------------------------------------------. + * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | + * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| + * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | + * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| + * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | + * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| + * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | + * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' + * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| + * `---------------------------------------------' `---------------------------------------------' + * ,-------------. ,-------------. + * | Stop |Refrsh| | Prev | Next | + * ,------|------|------| |------+------+------. + * |Brwser|Brwser|Search| |VolUp | | | + * |Back | Fwd |------| |------| Stop | Play-| + * | | | Home | |VolDn | | Pause| + * `--------------------' `--------------------' */ [MDIA] = KEYMAP( // left hand @@ -166,67 +164,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /******* Special Layer ***************************************************************************************************** * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | Bspc | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | | | | | | | | | | RShift | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * | | Esc | | | | | | | | | | | - | Bspc | | + * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------| + * | Media Lock | | | | | | | | | | | | [ | ] | Media Lock | + * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| + * | Symbol Lock | | | | | |------| |------| | | | | | Symbol Lock | + * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| + * | Caps Lock | | | | | | | | | | | | | | Caps Lock | + * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------' + * | | | | | | | | | | | | + * `------------------------------------' `------------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' */ [SPEC] = KEYMAP( // left hand KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS,KC_TRNS ,KC_TRNS - // right hand - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT - ,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_MINS ,KC_BSPC ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ) }; const uint16_t PROGMEM fn_actions[] = { // the faux shift keys are implemented as macro taps - [LCaps] = ACTION_MACRO_TAP(LCaps) - ,[LSymb] = ACTION_MACRO_TAP(LSymb) + [LSymb] = ACTION_MACRO_TAP(LSymb) ,[LMdia] = ACTION_MACRO_TAP(LMdia) ,[LSpec] = ACTION_MACRO_TAP(LSpec) - ,[RCaps] = ACTION_MACRO_TAP(RCaps) ,[RSymb] = ACTION_MACRO_TAP(RSymb) ,[RMdia] = ACTION_MACRO_TAP(RMdia) ,[RSpec] = ACTION_MACRO_TAP(RSpec) }; -uint16_t caps_shift = 0; uint16_t symb_shift = 0; uint16_t mdia_shift = 0; +uint16_t spec_shift = 0; -bool symb_lock = false; bool mdia_lock = false; +bool symb_lock = false; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -237,50 +231,28 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // only because sometimes rapid pressing led to irregular events; this way the states // are self healing during use. - case LCaps: // both caps-shift keys trigger Left Shift - case RCaps: // so they don't interfere with the magic combo - if (record->event.pressed && !record->tap.count) { - if(++caps_shift > 2) caps_shift = 2; - if(caps_shift == 2) { - register_code(KC_CAPS); - unregister_code(KC_CAPS); - } else if(caps_shift == 1) { - register_code(KC_LSFT); - } - } else { - if(--caps_shift < 0) caps_shift = 0; - if(caps_shift == 0) unregister_code(KC_LSFT); - } - break; - - case LSymb: - if (record->event.pressed) { - if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } - } else { - if(--symb_shift < 0) symb_shift = 0; - if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); + case LSymb: // + if (record->event.pressed) { // when the LSymb button is pressed + if(++symb_shift > 2) mdia_shift = 2; // increment the symb shift count, max two + if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock + layer_on(SYMB); // in any case, turn on the Symbols layer + } else { // when the LSymb button is released + if(--symb_shift < 0) symb_shift = 0; // decrement the shift count, minimum zero + if((!symb_shift) && (!symb_lock)) layer_off(SYMB); // if both shifts are released and the lock is off, turn off the Symbols layer } break; case LMdia: if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { register_code(KC_TAB); } else { + if(spec_shift) mdia_lock = !mdia_lock; if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } + layer_on(MDIA); } } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { unregister_code(KC_TAB); } else { if(--mdia_shift < 0) mdia_shift = 0; @@ -290,35 +262,36 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case LSpec: - if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_GRV); + if (record->event.pressed) { // when the LSpec button is pressed + if(symb_shift) symb_lock == !symb_lock; // if another layer button is engaged, then + else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia + else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { + register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char } else { - layer_on(SPEC); + if(++spec_shift > 2) spec_shift = 2; + layer_on(SPEC); // otherwise, turn on the Special layer } } else { - if(record->tap.count && !record->tap.interrupted) { + if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { unregister_code(KC_GRV); } else { - layer_off(SPEC); + if(--spec_shift < 0) spec_shift = 0; + if(!spec_shift) layer_off(SPEC); } } break; case RSymb: if (record->event.pressed) { - if (record->tap.count && (!symb_shift) && (!symb_lock)) { + if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { register_code(KC_QUOT); } else { if(++symb_shift > 2) symb_shift = 2; - if(symb_shift == 2) { - symb_lock = !symb_lock; - } else if(symb_shift == 1) { - layer_on(SYMB); - } + if(spec_shift) symb_lock = !symb_lock; + layer_on(SYMB); } } else { - if(record->tap.count && symb_shift == 0) { + if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { unregister_code(KC_QUOT); } else { if(--symb_shift < 0) symb_shift = 0; @@ -329,18 +302,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case RMdia: if (record->event.pressed) { - if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { + if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { register_code(KC_BSLS); } else { if(++mdia_shift > 2) mdia_shift = 2; - if(mdia_shift == 2) { - mdia_lock = !mdia_lock; - } else if(mdia_shift == 1) { - layer_on(MDIA); - } + if(spec_shift) mdia_lock = !mdia_lock; + layer_on(MDIA); } } else { - if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { + if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { unregister_code(KC_BSLS); } else { if(--mdia_shift < 0) mdia_shift = 0; @@ -351,16 +321,20 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case RSpec: if (record->event.pressed) { - if (record->tap.count && !record->tap.interrupted) { + if(symb_shift) symb_lock = !symb_lock; + else if(mdia_shift) mdia_lock = !mdia_lock; + else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { register_code(KC_EQL); } else { + if(++spec_shift > 2) spec_shift = 2; layer_on(SPEC); } } else { - if(record->tap.count && !record->tap.interrupted) { + if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { unregister_code(KC_EQL); } else { - layer_off(SPEC); + if(--spec_shift < 0) spec_shift = 0; + if(!spec_shift) layer_off(SPEC); } } break; @@ -419,7 +393,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // none break; } - + return MACRO_NONE; }; @@ -431,7 +405,9 @@ void matrix_init_user(void) { // Runs constantly in the background, in a loop. void matrix_scan_user(void) { // shift or caps lock turns on red light - if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<mods & MOD_BIT(KC_LSFT)) + || (keyboard_report->mods & MOD_BIT(KC_RSFT)) + || (host_keyboard_leds() & (1<\n\n\nTab"], +[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A",{x:14.5},":\n;",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"], [{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], [{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], [{y:-0.875,x:5.5},"B",{x:6.5},"N"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], +[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Z",{x:14.5},"?\n/",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], [{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], [{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Home","End"], [{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], [{x:2},"Page\n\n\n\n\n\nDown"], [{r:-30,rx:13,y:-1,x:-3},"Left","Right"], diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png index 99e5ed80b1..bb78b7c7a8 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt index 4eccc9f350..e1467b22e1 100644 --- a/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt @@ -1,27 +1,27 @@ [{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], [{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], [{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"], +[{y:-0.375,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#1e8fff"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], +[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#1e8fff",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#9977ee"},"Print\n\n\n\n\n\nScreen"], +[{y:-0.875,c:"#000000",t:"#3f68ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#3f68ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], [{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], -[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], -[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], -[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], -[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], +[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], +[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#c6c600",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#1e8fff",t:"#000000",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], +[{y:-0.75,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], +[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"], +[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""], +[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"], [{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], [{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], [{x:2},"Home\n\n\nBrowser"], [{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] +[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#6633ee",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], +[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nDown"] diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png index 6eecf447ee..399c5fc754 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt index a08827c6de..6f9d8ef047 100644 --- a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt @@ -1,21 +1,21 @@ [{x:3.5,a:7},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"_\n\n\n\n\n\n-"], +[{y:-0.875,x:5.5,a:7},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], [{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], [{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], -[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], -[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], -[{y:-0.375,x:3.5},"",{x:10.5},""], +[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"{\n["], +[{y:-0.875,x:5.5,a:7},"",{h:1.5},"",{x:4.5,h:1.5},"",""], +[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nLock"], +[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], -[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], +[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"], +[{y:-0.625,x:6.5,c:"#cccccc",a:7,h:1.5},"",{x:4.5,h:1.5},""], [{y:-0.75,x:3.5},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], -[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], +[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"], +[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.75,x:0.5},"","",{x:14.5},"",""], [{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png index e4de64a96f..48cda5f6b6 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt index e199f5c59f..5c5bc155aa 100644 --- a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt @@ -1,24 +1,24 @@ [{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], [{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], [{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], -[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.875,c:"#dddd77",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#dddd77",w:1.5},"\n\nShift\n\n\n\n\nLock"], [{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], [{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], [{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], -[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], +[{y:-0.875,c:"#dddd77",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#dddd77",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"(",{x:10.5,c:"#89b087"},"5"], [{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], [{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], -[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], +[{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], [{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], [{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], [{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], -[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], -[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], -[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], -[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], +[{y:-0.875,c:"#dddd77",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#dddd77",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#c6c600",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."], +[{y:-0.875,x:2.5,c:"#c6c600"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="], +[{y:-0.75,x:0.5,c:"#c6c600"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"], +[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"], [{h:2},"Space",{h:2},"Enter","Up"], [{x:2},"Down"], [{r:-30,rx:13,y:-1,x:-3},"Home","End"], diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md index 6465cd79e0..21d40477ca 100644 --- a/keyboards/ergodox/keymaps/ordinary/readme.md +++ b/keyboards/ergodox/keymaps/ordinary/readme.md @@ -69,7 +69,7 @@ Alas, the yellow keys have at best spotty success with common software. Good luc In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. -Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. +Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button. You can press the shift and shift-lock buttons in either order. Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. @@ -79,7 +79,7 @@ Multiple layers can be turned on at once. The Capitals layer will affect charact ### Escape ### -The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. +The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. @@ -87,9 +87,9 @@ The Ordinary layout offers as a consolation prize a Special sequence for Escape: At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. -### RShift ### +### Other Characters ### -The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. +The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout. **** -- cgit v1.2.3 From 911cc6832598ac9b637fdb11448354d418c197c4 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Sun, 14 Aug 2016 00:41:09 +0200 Subject: Added all original S60-X keymaps All keymaps that were included in VinnyCordeiro's repository were ported to QMK. Main Readme was copied over from VC's repo, slightly altered. Main Makefile was updated to reflect VC's original configuration. Small changes in felix keymap. --- keyboards/s60-x/Makefile | 2 +- keyboards/s60-x/keymaps/custom/keymap.c | 28 ++++ keyboards/s60-x/keymaps/custom/readme.md | 15 ++ keyboards/s60-x/keymaps/default/Makefile | 21 --- keyboards/s60-x/keymaps/default/keymap.c | 128 +++++--------- keyboards/s60-x/keymaps/default/readme.md | 28 +++- keyboards/s60-x/keymaps/felix/keymap.c | 127 +++++++++++--- keyboards/s60-x/keymaps/felix/readme.md | 10 +- keyboards/s60-x/keymaps/hasu/keymap.c | 182 ++++++++++++++++++++ keyboards/s60-x/keymaps/hasu/readme.md | 4 + keyboards/s60-x/keymaps/hhkb/keymap.c | 52 ++++++ keyboards/s60-x/keymaps/hhkb/readme.md | 26 +++ keyboards/s60-x/keymaps/iso/keymap.c | 48 ++++++ keyboards/s60-x/keymaps/iso/readme.md | 28 ++++ keyboards/s60-x/keymaps/jpec/keymap.c | 92 +++++++++++ keyboards/s60-x/keymaps/jpec/readme.md | 1 + keyboards/s60-x/keymaps/plain/keymap.c | 25 +++ keyboards/s60-x/keymaps/plain/readme.md | 16 ++ keyboards/s60-x/keymaps/poker/keymap.c | 180 ++++++++++++++++++++ keyboards/s60-x/keymaps/poker/readme.md | 31 ++++ keyboards/s60-x/keymaps/poker_bit/keymap.c | 110 ++++++++++++ keyboards/s60-x/keymaps/poker_bit/readme.md | 31 ++++ keyboards/s60-x/keymaps/poker_set/keymap.c | 178 ++++++++++++++++++++ keyboards/s60-x/keymaps/poker_set/readme.md | 31 ++++ keyboards/s60-x/keymaps/spacefn/keymap.c | 55 ++++++ keyboards/s60-x/keymaps/spacefn/readme.md | 27 +++ keyboards/s60-x/readme.md | 248 ++++++++++++++++++++++++++-- keyboards/s60-x/s60-x.h | 5 + 28 files changed, 1579 insertions(+), 150 deletions(-) create mode 100644 keyboards/s60-x/keymaps/custom/keymap.c create mode 100644 keyboards/s60-x/keymaps/custom/readme.md delete mode 100644 keyboards/s60-x/keymaps/default/Makefile create mode 100644 keyboards/s60-x/keymaps/hasu/keymap.c create mode 100644 keyboards/s60-x/keymaps/hasu/readme.md create mode 100644 keyboards/s60-x/keymaps/hhkb/keymap.c create mode 100644 keyboards/s60-x/keymaps/hhkb/readme.md create mode 100644 keyboards/s60-x/keymaps/iso/keymap.c create mode 100644 keyboards/s60-x/keymaps/iso/readme.md create mode 100644 keyboards/s60-x/keymaps/jpec/keymap.c create mode 100644 keyboards/s60-x/keymaps/jpec/readme.md create mode 100644 keyboards/s60-x/keymaps/plain/keymap.c create mode 100644 keyboards/s60-x/keymaps/plain/readme.md create mode 100644 keyboards/s60-x/keymaps/poker/keymap.c create mode 100644 keyboards/s60-x/keymaps/poker/readme.md create mode 100644 keyboards/s60-x/keymaps/poker_bit/keymap.c create mode 100644 keyboards/s60-x/keymaps/poker_bit/readme.md create mode 100644 keyboards/s60-x/keymaps/poker_set/keymap.c create mode 100644 keyboards/s60-x/keymaps/poker_set/readme.md create mode 100644 keyboards/s60-x/keymaps/spacefn/keymap.c create mode 100644 keyboards/s60-x/keymaps/spacefn/readme.md diff --git a/keyboards/s60-x/Makefile b/keyboards/s60-x/Makefile index 57edd5e036..8b51d4609f 100644 --- a/keyboards/s60-x/Makefile +++ b/keyboards/s60-x/Makefile @@ -53,7 +53,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60-x/keymaps/custom/keymap.c new file mode 100644 index 0000000000..59361241fa --- /dev/null +++ b/keyboards/s60-x/keymaps/custom/keymap.c @@ -0,0 +1,28 @@ +#include "keymap_common.h" + +/* Main layer: Test layout, using all keys. + + 0 1 2 3 4 5 6 7 8 9 A B C D E + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + 0 │GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PGUP │BKSPC│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + 1 │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + 2 │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PGDN │ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + 3 │LSHFT│HOME │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ END │RSHFT│ UP │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + 4 │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +*/ + +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: ANSI qwerty */ + KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, PGUP, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, PGDN, ENT , \ + LSFT, HOME, Z, X, C, V, B, N, M, COMM, DOT, SLSH, END, RSFT, UP, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL), +}; +const uint16_t PROGMEM fn_actions[] = {}; + diff --git a/keyboards/s60-x/keymaps/custom/readme.md b/keyboards/s60-x/keymaps/custom/readme.md new file mode 100644 index 0000000000..cf87bd915f --- /dev/null +++ b/keyboards/s60-x/keymaps/custom/readme.md @@ -0,0 +1,15 @@ +### 8 Custom +The custom keymap - [keymap_custom.c](keymap_custom.c) - is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys. + +#### 8.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PgUp │BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PgDwn│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│Home │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ End │Shift│ Up │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/default/Makefile b/keyboards/s60-x/keymaps/default/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/s60-x/keymaps/default/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c index 3b680c3072..be7a71aff0 100644 --- a/keyboards/s60-x/keymaps/default/keymap.c +++ b/keyboards/s60-x/keymaps/default/keymap.c @@ -1,92 +1,48 @@ -/* -Copyright 2016 Julien Pecqueur -Copyright 2016 Felix Uhl - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . +#include "keymap_common.h" + +/* 0: Main layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -#include "s60-x.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layout 0: Default Layer - * ,-----------------------------------------------------------. - * |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| - * |-----------------------------------------------------------| - * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | - * |-----------------------------------------------------------| - * |Fn1 |Gui |Alt | SpaceFn |Alt |Gui |App |Ctrl| - * `-----------------------------------------------------------' - */ - KEYMAP( - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, BSPC, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ - LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT, \ - LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ - FN1, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL), - - /* Layout 1: Function Layer - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | - * |-----------------------------------------------------------| - * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins | - * |-----------------------------------------------------------| - * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | - * |-----------------------------------------------------------| - * | |Prt|Cut|Cop|Pst|Cal| | | | | |CapsLock | - * |-----------------------------------------------------------| - * | | | | | | | | | - * `-----------------------------------------------------------' - */ - KEYMAP( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ - TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP, PGDN, TRNS, SLCK, PAUS, INS, \ - TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END, TRNS, TRNS, PENT, \ - TRNS, TRNS, PSCR, FN2, FN3, FN4, CALC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), -}; - -/* -* Fn action definition +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: ANSI qwerty */ + KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT , \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, FN0, APP, RCTL), + +/* 1: Fn layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), /* SpaceFn layout 1 */ - [1] = ACTION_LAYER_MOMENTARY(1), /* Momentary layout 1 */ - [2] = ACTION_MODS_KEY(MOD_LSFT, KC_DEL), /* Cut */ - [3] = ACTION_MODS_KEY(MOD_LCTL, KC_INS), /* Copy */ - [4] = ACTION_MODS_KEY(MOD_LSFT, KC_INS), /* Paste */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - return MACRO_NONE; +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay }; - - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60-x/keymaps/default/readme.md index 73318dad72..01cda9df9b 100644 --- a/keyboards/s60-x/keymaps/default/readme.md +++ b/keyboards/s60-x/keymaps/default/readme.md @@ -1 +1,27 @@ -# The default keymap for s60-x \ No newline at end of file +### 1 Standard - ANSI +The standard keymap is the one that is pre-flashed on the S60-X. + +#### 1.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 1.1 Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c index 7fc0e021c9..9c620527b0 100644 --- a/keyboards/s60-x/keymaps/felix/keymap.c +++ b/keyboards/s60-x/keymaps/felix/keymap.c @@ -16,26 +16,52 @@ along with this program. If not, see . #include "s60-x.h" +//make keymap a little easier to read +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +enum layer_names { + DEFAULT, + GAMING, + FUNCTION +}; + +enum languages { + GERMAN +}; + +#define LANGUAGE GERMAN + +enum custom_keycodes { + KC_C_AM = SAFE_RANGE, + KC_C_EM, + KC_C_IM, + KC_C_OM, + KC_C_UM, + KC_C_SM, + KC_C_YM, + KC_C_WM +}; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layout 0: Default Layer - * RSFT will be replaced once a better way to control magic is found. * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del| * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|BckSp| + * |Tab | Q| W| E| R| T| Z| U| I| O| P| [| ]|BckSp| * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up |RSft| + * |Shift | Y| X| C| V| B| N| M| ,| .| /| Up |RSft| * |-----------------------------------------------------------| - * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| + * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| * `-----------------------------------------------------------' */ - KEYMAP( + [DEFAULT] = KEYMAP( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, 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_NUHS, KC_ENT, \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ + KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), /* Layout 1: Gaming Layer, SpaceFn disabled @@ -51,32 +77,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | NOP| | Space | | | | | * `-----------------------------------------------------------' */ - KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN1, \ - KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [GAMING] = KEYMAP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_FN1, \ + _______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______), /* Layout 2: Function Layer * ,-----------------------------------------------------------. - * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |RES| + * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES| * |-----------------------------------------------------------| - * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins | + * | | | | |Prv|Ply|Nxt| | | | |Prt|Slk|Pau | * |-----------------------------------------------------------| - * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | + * | | | | |Vl-|Mut|Vl+| | | | | |PEnt | * |-----------------------------------------------------------| - * | |Prt| | | |Cal| | | | |Pau |PUp |Fn1 | + * | | | | | |Cal| | | | |Pau |PUp |Fn1 | * |-----------------------------------------------------------| * | | | | | |Home|PDn |End | * `-----------------------------------------------------------' */ - KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DEBUG, RESET, \ - KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_SLCK, KC_PAUS, KC_INS, \ - KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_PENT, \ - KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_FN1, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + [FUNCTION] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \ + _______, _______, KC_C_WM, KC_C_EM, KC_MPRV, KC_MPLY, KC_MNXT, KC_C_UM, KC_C_IM, KC_C_OM, _______, KC_PSCR, KC_SLCK, KC_PAUS, \ + _______, KC_C_AM, KC_C_SM, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_PENT, \ + _______, KC_C_YM, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_FN1, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), }; /* @@ -102,8 +128,61 @@ void matrix_scan_user(void) { } +bool process_german(uint16_t keycode, keyrecord_t *record) { + uint16_t send_code = 0; + switch (keycode) { + case KC_C_AM: + if (record->event.pressed) { + send_code = KC_Q; + } + break; + + case KC_C_OM: + if (record->event.pressed) { + send_code = KC_P; + } + break; + + case KC_C_UM: + if (record->event.pressed) { + send_code = KC_Y; + } + break; + + case KC_C_SM: + if (record->event.pressed) { + send_code = KC_S; + } + break; + } + + if (send_code == 0) { + return true; + } + else { + register_code(KC_RALT); + register_code(send_code); + unregister_code(send_code); + unregister_code(KC_RALT); + return false; + } +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; + if (keycode == KC_QUOT) { + if (record->event.pressed) { + register_code(KC_QUOT); + unregister_code(KC_QUOT); + register_code(KC_SPACE); + unregister_code(KC_SPACE); + } + return false; + } +#if LANGUAGE == GERMAN + return process_german(keycode, record); +#else + return true; +#endif } void led_set_user(uint8_t usb_led) { diff --git a/keyboards/s60-x/keymaps/felix/readme.md b/keyboards/s60-x/keymaps/felix/readme.md index 73318dad72..7f083dfd08 100644 --- a/keyboards/s60-x/keymaps/felix/readme.md +++ b/keyboards/s60-x/keymaps/felix/readme.md @@ -1 +1,9 @@ -# The default keymap for s60-x \ No newline at end of file +# A non-US ANSI QWERTZ keymap + +This keymap was specifically designed to support ANSI keycaps while retaining the possibility of inputting characters with diacritics that are normally not used in the english language. + +It relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware. + +Currently, it explicitly supports the following languages, though other languages are readily useable using the AltGr modifier. +- German + diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60-x/keymaps/hasu/keymap.c new file mode 100644 index 0000000000..46ea81fea2 --- /dev/null +++ b/keyboards/s60-x/keymaps/hasu/keymap.c @@ -0,0 +1,182 @@ +#include "keymap_common.h" + +/* + * Hasu + */ +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap 0: Default Layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn2 │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Fn1 │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ Fn3 │ Fn3 │ Fn0 │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, FN2, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, FN1, NO, FN9, NO, \ + LCTL, LGUI, LALT, SPC, RALT, FN3, FN3, FN0), + /* Keymap 1: colemak +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│BKSPC│ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ Fn0 │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \ + BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, K, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0), + /* Keymap 2: dvorak +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \ + TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \ + CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \ + LSFT, NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0), + /* Keymap 3: workman +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ D │ E │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│BKSPC│ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \ + BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \ + LSFT, NO, Z, X, M, C, V, K, L, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0), + /* Overlay 4: HHKB mode +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│Caps │ │ │ │ │ │ │ │ Psc │ Slk │Pause│ Up │ │ Ins │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│ VoD │ VoU │Mute │ │ │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ │ │ │ │ │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ App │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ + CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, INS, \ + LCTL, VOLD, VOLU, MUTE, TRNS, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, TRNS, ENT, \ + LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, TRNS, RSFT, TRNS, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, FN4, TRNS), + /* Overlay 5: Vi mode (Slash) +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ Tab │Home │PgDwn│ Up │PgUp │ End │Home │PgDwn│PgUp │ End │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│ │Left │Down │Right│ │Left │Down │ Up │Right│ │ │▒▒▒▒▒│Enter│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ │ │ │ │ │Home │PgDwn│PgUp │ End │ │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \ + TAB, HOME, PGDN, UP, PGUP, END, HOME, PGDN, PGUP, END, TRNS, TRNS, TRNS, TRNS, \ + LCTL, TRNS, LEFT, DOWN, RGHT, TRNS, LEFT, DOWN, UP, RGHT, TRNS, TRNS, TRNS, ENT, \ + LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END, TRNS, TRNS, RSFT, TRNS, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL), + /* Overlay 6: Mouse mode (Semicolon/App) +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ Tab │ │ │ │ │ │ MwL │ MwD │ MwU │ MwR │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│ │ Ac0 │ Ac1 │ Ac2 │ │ McL │ McD │ McU │ McR │ │ │▒▒▒▒▒│Enter│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSFHT│▒▒▒▒▒│ │ │ │ │ Mb3 │ Mb2 │ Mb1 │ Mb4 │ Mb5 │ │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│ Mb1 │█████│█████│█████│ │ │ │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \ + TAB, TRNS, TRNS, TRNS, TRNS, TRNS, WH_L, WH_D, WH_U, WH_R, TRNS, TRNS, TRNS, TRNS, \ + LCTL, TRNS, ACL0, ACL1, ACL2, TRNS, MS_L, MS_D, MS_U, MS_R, TRNS, TRNS, TRNS, ENT, \ + LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, BTN3, BTN2, BTN1, BTN4, BTN5, TRNS, TRNS, RSFT, TRNS, \ + LCTL, LGUI, LALT, BTN1, TRNS, TRNS, TRNS, RCTL), + /* Overlay 7: Layout selector +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Lq │ Lc │ Ld │ Lw │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Lq │ Lw │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ Ld │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ Lc │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + +Lq: set Qwerty layout +Lc: set Colemak layout +Ld: set Dvorak layout +Lw: set Workman layout + + */ + KEYMAP( + FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +/* + * Fn action definition + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(4), + [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH), + [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN), + [3] = ACTION_LAYER_MOMENTARY(6), + [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector + [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout + [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout + [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout + [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout + [9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRV), +}; diff --git a/keyboards/s60-x/keymaps/hasu/readme.md b/keyboards/s60-x/keymaps/hasu/readme.md new file mode 100644 index 0000000000..64969b616d --- /dev/null +++ b/keyboards/s60-x/keymaps/hasu/readme.md @@ -0,0 +1,4 @@ +### 5. Hasu +This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail. + +(Hasu is the initial creator of the TMK firmware, in case you weren't aware.) \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60-x/keymaps/hhkb/keymap.c new file mode 100644 index 0000000000..a6e5b3279a --- /dev/null +++ b/keyboards/s60-x/keymaps/hhkb/keymap.c @@ -0,0 +1,52 @@ +#include "keymap_common.h" + +/* + * HHKB Layout + */ +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: Default layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BkSpc│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSLS, GRV, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSPC, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, FN0, \ + NO, LGUI, LALT, SPC, NO, RALT, RGUI, NO), + /* 1: HHKB Fn layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ VoD │ VoU │ Mut │ Ejc │ │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│NPEnt│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│ │ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ + CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, TRNS, \ + TRNS, VOLD, VOLU, MUTE, EJCT, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, NO, PENT, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, NO, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +/* + * Fn action definition + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), +}; diff --git a/keyboards/s60-x/keymaps/hhkb/readme.md b/keyboards/s60-x/keymaps/hhkb/readme.md new file mode 100644 index 0000000000..2bceb26dd5 --- /dev/null +++ b/keyboards/s60-x/keymaps/hhkb/readme.md @@ -0,0 +1,26 @@ +### 7. HHKB +[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers. +#### 7.0: Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BkSpc│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 7.1: HHKB Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ VoD │ VoU │ Mut │ Ejc │ │ * │ / │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │ + │ - │ End │PgDwn│Down │▒▒▒▒▒│ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60-x/keymaps/iso/keymap.c new file mode 100644 index 0000000000..ad597cd7d4 --- /dev/null +++ b/keyboards/s60-x/keymaps/iso/keymap.c @@ -0,0 +1,48 @@ +#include "keymap_common.h" + +/* 0: Main layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +*/ + +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: ANSI qwerty */ + KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, NO, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT , \ + LSFT, BSLS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, FN0, APP, RCTL), + +/* 1: Fn layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +*/ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay +}; diff --git a/keyboards/s60-x/keymaps/iso/readme.md b/keyboards/s60-x/keymaps/iso/readme.md new file mode 100644 index 0000000000..2c06bf86f0 --- /dev/null +++ b/keyboards/s60-x/keymaps/iso/readme.md @@ -0,0 +1,28 @@ +### 2 Standard - ISO +The same as the standard keymap, but with additional ISO keys. + + +#### 2.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 2.1 Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60-x/keymaps/jpec/keymap.c new file mode 100644 index 0000000000..3b680c3072 --- /dev/null +++ b/keyboards/s60-x/keymaps/jpec/keymap.c @@ -0,0 +1,92 @@ +/* +Copyright 2016 Julien Pecqueur +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "s60-x.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layout 0: Default Layer + * ,-----------------------------------------------------------. + * |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Fn1 |Gui |Alt | SpaceFn |Alt |Gui |App |Ctrl| + * `-----------------------------------------------------------' + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT, \ + LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + FN1, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL), + + /* Layout 1: Function Layer + * ,-----------------------------------------------------------. + * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | + * |-----------------------------------------------------------| + * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins | + * |-----------------------------------------------------------| + * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt | + * |-----------------------------------------------------------| + * | |Prt|Cut|Cop|Pst|Cal| | | | | |CapsLock | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ + TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP, PGDN, TRNS, SLCK, PAUS, INS, \ + TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END, TRNS, TRNS, PENT, \ + TRNS, TRNS, PSCR, FN2, FN3, FN4, CALC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +/* +* Fn action definition +*/ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), /* SpaceFn layout 1 */ + [1] = ACTION_LAYER_MOMENTARY(1), /* Momentary layout 1 */ + [2] = ACTION_MODS_KEY(MOD_LSFT, KC_DEL), /* Cut */ + [3] = ACTION_MODS_KEY(MOD_LCTL, KC_INS), /* Copy */ + [4] = ACTION_MODS_KEY(MOD_LSFT, KC_INS), /* Paste */ +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/jpec/readme.md b/keyboards/s60-x/keymaps/jpec/readme.md new file mode 100644 index 0000000000..73318dad72 --- /dev/null +++ b/keyboards/s60-x/keymaps/jpec/readme.md @@ -0,0 +1 @@ +# The default keymap for s60-x \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60-x/keymaps/plain/keymap.c new file mode 100644 index 0000000000..0f0cdee2a4 --- /dev/null +++ b/keyboards/s60-x/keymaps/plain/keymap.c @@ -0,0 +1,25 @@ +#include "keymap_common.h" + +/* Main layer: +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +*/ + +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty */ + KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL), +}; +const uint16_t PROGMEM fn_actions[] = {}; diff --git a/keyboards/s60-x/keymaps/plain/readme.md b/keyboards/s60-x/keymaps/plain/readme.md new file mode 100644 index 0000000000..ab13323e3b --- /dev/null +++ b/keyboards/s60-x/keymaps/plain/readme.md @@ -0,0 +1,16 @@ +### 4. Plain +Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host. +See [keymap_plain.c](keymap_plain.c) for detail. + +#### 4.0 Plain Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60-x/keymaps/poker/keymap.c new file mode 100644 index 0000000000..5fc970a040 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker/keymap.c @@ -0,0 +1,180 @@ +#include "keymap_common.h" + +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 1: colemak +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│BKSPC│ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \ + BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, K, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 2: dvorak +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \ + TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \ + CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \ + LSFT, NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 3: workman +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ D │ E │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│BKSPC│ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \ + BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \ + LSFT, NO, Z, X, M, C, V, K, L, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 4: Poker with Arrow +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, RGHT), + /* 5: Poker with Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + /* 6: Poker Fn +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ FnL │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + +Fn: to Fn overlay +FnL: to Layout selector overaly +FnQ: toggle Esc overlay +FnS: toggle Arrow overlay + + */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, FN4, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN3, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS), + /* 7: Layout selector +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Lq │ Lc │ Ld │ Lw │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Lq │ Lw │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ Ld │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ Lc │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + +Lq: set Qwerty layout +Lc: set Colemak layout +Ld: set Dvorak layout +Lw: set Workman layout + + */ + KEYMAP( + FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; +const uint16_t PROGMEM fn_actions[] = { + /* Poker Layout */ + [0] = ACTION_LAYER_MOMENTARY(6), // to Fn overlay + [1] = ACTION_LAYER_TOGGLE(4), // toggle arrow overlay + [2] = ACTION_LAYER_TOGGLE(5), // toggle Esc overlay + [3] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // Task(RControl,RShift+Esc) + [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector + [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout + [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout + [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout + [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout +}; diff --git a/keyboards/s60-x/keymaps/poker/readme.md b/keyboards/s60-x/keymaps/poker/readme.md new file mode 100644 index 0000000000..0d8be9d0f8 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker/readme.md @@ -0,0 +1,31 @@ +### 3 Poker +[keymap_poker.c](keymap_poker.c) emulates original Poker layers +while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. + + Fn + Esc = ` + Fn + {left, down, up, right} = {home, pgdown, pgup, end} + +#### 3.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 3.1 Poker Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60-x/keymaps/poker_bit/keymap.c new file mode 100644 index 0000000000..4a4cfd1be8 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker_bit/keymap.c @@ -0,0 +1,110 @@ +#include "keymap_common.h" + +// Poker fix with toggle and bit operation +// Fn + Esc = ` +// Fn + {left, down, up, right} = {home, pgdown, pgup, end} +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 4: Poker Default + Fn'd +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│Caps │ Fn2 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn4 │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ Fn1 │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + [4] = KEYMAP( + TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + CAPS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN4, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS), + /* 5: Poker with Arrow +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│PgUp │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Home │PgDwn│ End │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN3, HOME, PGDN, END), + /* 6: Poker with Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + /* 7: Poker with Arrow + Fn'd +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, RGHT), +}; +const uint16_t PROGMEM fn_actions[] = { + /* Poker Layout */ + [0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH), // Poker Fn(with fix for Esc) + [1] = ACTION_LAYER_TOGGLE(5), // Poker Arrow toggle + [2] = ACTION_LAYER_TOGGLE(6), // Poker Esc toggle + [3] = ACTION_LAYER_BIT_XOR(1, 0b1101, ON_BOTH), // Poker Fn(with fix for Arrow) + [4] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN3 Task(RControl,RShift+Esc) +}; diff --git a/keyboards/s60-x/keymaps/poker_bit/readme.md b/keyboards/s60-x/keymaps/poker_bit/readme.md new file mode 100644 index 0000000000..0d8be9d0f8 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker_bit/readme.md @@ -0,0 +1,31 @@ +### 3 Poker +[keymap_poker.c](keymap_poker.c) emulates original Poker layers +while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. + + Fn + Esc = ` + Fn + {left, down, up, right} = {home, pgdown, pgup, end} + +#### 3.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 3.1 Poker Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60-x/keymaps/poker_set/keymap.c new file mode 100644 index 0000000000..0c1ef1a9b9 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker_set/keymap.c @@ -0,0 +1,178 @@ +#include "keymap_common.h" + +// Poker fix with set(state transition) +// Fn + Esc = ` +// Fn + {left, down, up, right} = {home, pgdown, pgup, end} +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL), + /* 1: Poker with Arrow +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn1 │Left │Down │Right│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN1, LEFT, DOWN, RGHT), + /* 2: Poker with Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn2 │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS), + /* 3: Poker with Arrow and Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Left │Down │Right│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN3, LEFT, DOWN, RGHT), + /* 4: Poker Fn'd +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Fn6 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ Fn5 │█████│█████│█████│ Fn4 │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, FN6, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN5, FN4, TRNS, TRNS, TRNS), + /* 5: Poker Fn'd arrow +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Fn7 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ Fn4 │█████│█████│█████│ Fn5 │Home │PgDwn│ End │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, FN7, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, PGUP, TRNS, \ + TRNS, TRNS, TRNS, FN4, FN5, HOME, PGDN, END), + /* 6: Poker Fn'd Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Fn4 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ Fn7 │█████│█████│█████│ Fn6 │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, FN4, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN7, FN6, TRNS, TRNS, TRNS), + /* 7: Poker Fn'd Arrow + Esc +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ Fn5 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ Fn6 │█████│█████│█████│ Fn7 │Home │PgDwn│ End │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + TRNS, FN5, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ + TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ + TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, PGUP, TRNS, \ + TRNS, TRNS, TRNS, FN6, FN7, HOME, PGDN, END), +}; + +/* + * Fn action definition + */ +const uint16_t PROGMEM fn_actions[] = { + /* Poker Layout */ + [0] = ACTION_LAYER_SET(4, ON_PRESS), // FN0 move to Fn'd when press + [1] = ACTION_LAYER_SET(5, ON_PRESS), // FN1 move to Fn'd arrow when press + [2] = ACTION_LAYER_SET(6, ON_PRESS), // FN2 move to Fn'd Esc when press + [3] = ACTION_LAYER_SET(7, ON_PRESS), // FN3 move to Fn'd arrow + Esc when press + + //[4] = ACTION_LAYER_CLEAR(ON_RELEASE), // FN4 clear overlay when release + [4] = ACTION_LAYER_SET(0, ON_RELEASE), // FN4 clear overlay when release + [5] = ACTION_LAYER_SET(1, ON_RELEASE), // FN5 move to arrow when release + [6] = ACTION_LAYER_SET(2, ON_RELEASE), // FN6 move to Esc when release + [7] = ACTION_LAYER_SET(3, ON_RELEASE), // FN7 move to arrow + Esc when release + + [8] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN8 Task(RControl,RShift+Esc) +}; diff --git a/keyboards/s60-x/keymaps/poker_set/readme.md b/keyboards/s60-x/keymaps/poker_set/readme.md new file mode 100644 index 0000000000..0d8be9d0f8 --- /dev/null +++ b/keyboards/s60-x/keymaps/poker_set/readme.md @@ -0,0 +1,31 @@ +### 3 Poker +[keymap_poker.c](keymap_poker.c) emulates original Poker layers +while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. + + Fn + Esc = ` + Fn + {left, down, up, right} = {home, pgdown, pgup, end} + +#### 3.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 3.1 Poker Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60-x/keymaps/spacefn/keymap.c new file mode 100644 index 0000000000..c930705320 --- /dev/null +++ b/keyboards/s60-x/keymaps/spacefn/keymap.c @@ -0,0 +1,55 @@ +#include "keymap_common.h" + +/* + * SpaceFN + * http://geekhack.org/index.php?topic=51069.0 + */ +const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap 0: Default Layer +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│LCTRL│L_GUI│L_ALT│█████│█████│█████Spc/Fn0█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ + CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ + LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ + LCTL, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL), + + /* Overlay 1: SpaceFN +┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ Esc │ │ │ │Home │ Up │ End │Pscr │Slck │Pause│ Ins │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │▒▒▒▒▒│ │ │ │Space│PgDwn│ ` │ ~ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ +├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ +└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + KEYMAP( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ + TRNS, TRNS, TRNS, ESC, TRNS, TRNS, TRNS, HOME, UP, END, PSCR, SLCK, PAUS, INS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, SPC, PGDN, GRV, FN1, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +}; + +/* + * Fn action definition + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), + [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde +}; diff --git a/keyboards/s60-x/keymaps/spacefn/readme.md b/keyboards/s60-x/keymaps/spacefn/readme.md new file mode 100644 index 0000000000..d04bd94865 --- /dev/null +++ b/keyboards/s60-x/keymaps/spacefn/readme.md @@ -0,0 +1,27 @@ +### 6. SpaceFN +This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0). + +#### 6.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 6.1 SpaceFN layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │Home │ Up │ End │ Psc │ Slk │Pause│ Ins │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │Space│PgDwn│ ` │ ~ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ Fn │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 34c48b0b7d..0872c2e018 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -1,32 +1,248 @@ -S60-x keyboard firmware +S60-x keyboard firmware ====================== -DIY compact keyboard by Massdrop. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/jpec/s60x). +DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps are based on GH60 code. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/VinnyCordeiro/tmk_keyboard). ## S60X Resources -- [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit) +- [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open) ## Quantum MK Firmware -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). +For the full Quantum feature list, see [the parent readme.md](/readme.md). -## Building +## Keymap +Several versions of keymaps 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. -Download or clone the whole firmware and navigate to the keyboards/s60-x folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. +To build firmware binary hex file with a certain keymap just run `make` with the `keymap` option like: -Depending on which keymap you would like to use, you will have to compile slightly differently. + $ make keymap=[custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|] -### Default +File [S60-X_pre-compiled_firmwares.zip](S60-X_pre-compiled_firmwares.zip) contains pre-compiled firmwares for all keymaps available. Not all of them are tested. -To build with the default keymap, simply run `make`. -### Other Keymaps +## Flashing your keyboard +The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows). -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. +[QMK Firmware Flasher](https://github.com/jackhumbert/qmk_firmware_flasher/releases) may work, as the S60-X keyboard uses the ATMega32U4 microcontroller, but it is untested. Use at your own risk. -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: +[Easy AVR USB Keyboard Firmware](https://deskthority.net/wiki/Easy_AVR_USB_Keyboard_Firmware) also supports S60-X, but it is completely unrelated to TMK firmware. Use at your own risk. -``` -$ make keymap=[default|] -``` +**Programming the firmware (Windows)** -Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file +1. download and install FLIP (http://www.atmel.com/tools/FLIP.aspx) +2. connect the keyboard, press the program button (S1) and wait until it enumerates +3. go to device manager, find the atmega32u4 chip and click "update driver" +4. choose location manually: folder named "usb" inside the installation directory of FLIP +5. once the driver is installed, run flip +6. Device -> Select: choose ATMega32U4 +7. Settings -> Communication -> USB, FLIP should show the signature at this point (58 1E 95 87) +8. File -> Load HEX file: choose the hex firmware: .hex +9. click "Run" +10. after programming is done, disconnect the device from USB and connect again. + + +**Programming the firmware (Linux)** + +1. Download and install/compile/unpack dfu-programmer from http://dfu-programmer.sourceforge.net/. +2. Issue the following commands in the command prompt after connecting the device and pressing the programming button (S1). You may need root permissions or udev rules to do that. + 1. `sudo dfu-programmer atmega32u4 erase` + 2. `sudo dfu-programmer atmega32u4 flash .hex` + 3. `sudo dfu-programmer atmega32u4 start` +3. The keyboard should start working. If it doesn't, reconnect the cable. + + +### 0 Initial explanations +The █████ blocks on the layouts hides the switch positions that do not exist physically on the PCB. If you feel like hacking the keyboard and adding new keys, those are the positions that can be used. You'll have to modify the [keymap_common.h](keymap_common.h) file for that. + +The ▒▒▒▒▒ blocks hides switch positions not used on this particular layout, but they do exist on the PCB. + +There is no LED support on the PCB at the moment, but I'll let the code for that untouched. + + +### 1 Standard - ANSI +The standard keymap is the one that is pre-flashed on the S60-X. + +#### 1.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 1.1 Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 2 Standard - ISO +The same as the standard keymap, but with additional ISO keys. + + +#### 2.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 2.1 Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 3 Poker +[keymap_poker.c](keymap_poker.c) emulates original Poker layers +while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. + + Fn + Esc = ` + Fn + {left, down, up, right} = {home, pgdown, pgup, end} + +#### 3.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 3.1 Poker Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 4. Plain +Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host. +See [keymap_plain.c](keymap_plain.c) for detail. + +#### 4.0 Plain Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 5. Hasu +This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail. + +(Hasu is the creator of the TMK firmware, for those who do not know that.) + + +### 6. SpaceFN +This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0). + +#### 6.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 6.1 SpaceFN layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │Home │ Up │ End │ Psc │ Slk │Pause│ Ins │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │Space│PgDwn│ ` │ ~ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ Fn │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 7. HHKB +[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers. +#### 7.0: Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BkSpc│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ +#### 7.1: HHKB Fn layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ VoD │ VoU │ Mut │ Ejc │ │ * │ / │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │ + │ - │ End │PgDwn│Down │▒▒▒▒▒│ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + + +### 8 Custom +The custom keymap - [keymap_custom.c](keymap_custom.c) - is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys. + +#### 8.0 Default layer + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PgUp │BkSpc│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PgDwn│Enter│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Shift│Home │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ End │Shift│ Up │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h index 68f2ab22f2..91e7b67f31 100644 --- a/keyboards/s60-x/s60-x.h +++ b/keyboards/s60-x/s60-x.h @@ -22,6 +22,11 @@ along with this program. If not, see . #include "quantum.h" +#ifdef __INTELLISENSE__ +#define PROGMEM +#include "config.h" +#endif + /* S60-X keymap definition macro * K31 is the extra key next to short left ISO shift * K2C is the moved key next to enter on ISO boards -- cgit v1.2.3 From 97fca1efff37f749fae8d53bb5ee4da9f8a898c5 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Sat, 13 Aug 2016 20:14:27 -0700 Subject: Fixing a mixup. Tidying up the keymap. --- keyboards/atreus/keymaps/xyverz/keymap.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index 1ce92b4f22..b418cc9b5e 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -46,24 +46,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_L1] = { /* LAYER 1 */ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, -<<<<<<< HEAD {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, -======= - {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, ->>>>>>> upstream/master {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } }, [_L2] = { /* LAYER 2 */ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, -<<<<<<< HEAD {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS}, {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 }, {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET} -======= - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, - {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, - {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } ->>>>>>> upstream/master } }; -- cgit v1.2.3 From 049343e523857eef6fe03bfd5ec73d830639e0b6 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Sun, 14 Aug 2016 00:33:11 -0700 Subject: Added my own layout to the Phantom. --- keyboards/phantom/keymaps/xyverz/keymap.c | 104 ++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 keyboards/phantom/keymaps/xyverz/keymap.c diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..aa6af18b1d --- /dev/null +++ b/keyboards/phantom/keymaps/xyverz/keymap.c @@ -0,0 +1,104 @@ +#include "phantom.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QW 0 +#define _DV 1 +#define _CM 2 +#define _FL 3 + +// Macro name shortcuts +#define QWERTY M(_QW) +#define DVORAK M(_DV) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QW] = { /* Layer 0: Qwerty */ + {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, + {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, + {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + }, + +[_DV] = { /* Layer 1: Dvorak */ + {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, + {KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, + {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + }, + +[_CM] = { /* Layer 2: Colemak */ + {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, + {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + }, + +[_FL] = { /* Layer 3: Functions */ + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, RESET, KC_MPRV, KC_MPLY, KC_MNXT}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX}, + {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______}, + }, + + +}; + +enum function_id { + SHIFT_ESC, +}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; -- cgit v1.2.3 From 880486bd247b93800f9d007f0ba90d38d5397b41 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:46:40 +0200 Subject: Jack's keymap. --- keyboards/preonic/keymaps/jacwib/Makefile | 25 ++++ keyboards/preonic/keymaps/jacwib/config.h | 9 ++ keyboards/preonic/keymaps/jacwib/keymap.c | 215 +++++++++++++++++++++++++++++ keyboards/preonic/keymaps/jacwib/readme.md | 2 + 4 files changed, 251 insertions(+) create mode 100644 keyboards/preonic/keymaps/jacwib/Makefile create mode 100644 keyboards/preonic/keymaps/jacwib/config.h create mode 100644 keyboards/preonic/keymaps/jacwib/keymap.c create mode 100644 keyboards/preonic/keymaps/jacwib/readme.md diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile new file mode 100644 index 0000000000..1743c64878 --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h new file mode 100644 index 0000000000..330686559f --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here +#define FORCE_NKRO 1 + +#endif diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c new file mode 100644 index 0000000000..1d5e0a7771 --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -0,0 +1,215 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "keymap_nordic.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + BACKLIT +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Å | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| < | Z | X | C | V | B | N | M | . | , | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},//Done + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },//Done + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},//Done + {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},//Done + {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}//Done +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | | @ | £ | $ | | | { | [ | ] | } | \ | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | |VolUp | | | ~ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | |LastS |PauseP|NextS | | * | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | |VolDwn| | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | |Bspc | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},//Done + {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},//Done + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN},//Done + {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},//Done + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______}//Done +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Mouse^| | | | |ScrlUp| | | ^ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | > | | | | | | |ScrlDown| : | ; | _ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | |Bspc | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},//Done + {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},//Done + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},//Done + {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},//Done + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______}//Done +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Reset| | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | |Rsft | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |MusOn |MusOff| | | | | | | | | Reset| + * |------+------+------+------+------+------+------+------+------+------+--,----+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},//Done + {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______},//Done + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},//Done + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET },//Done + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}//Done +} + + +}; + +#ifdef AUDIO_ENABLE //Mario theme song: E5 E5 E5 C5 E5 G5 G4 +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md new file mode 100644 index 0000000000..e81c62f76e --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -0,0 +1,2 @@ +# Jack's preonic keymap. +Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. \ No newline at end of file -- cgit v1.2.3 From 1ab78110bd21b32a59eea46558ab4d83c5658cdb Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:48:22 +0200 Subject: Update readme.md --- keyboards/preonic/keymaps/jacwib/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index e81c62f76e..838af399cf 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -1,2 +1,2 @@ -# Jack's preonic keymap. -Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. \ No newline at end of file +# Jacwib's preonic keymap. +Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. -- cgit v1.2.3 From cf91aa416a6c32e2fa02d3ad31605ff1f24aab5e Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:48:52 +0200 Subject: Update keymap.c --- keyboards/preonic/keymaps/jacwib/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 1d5e0a7771..4ddaa962e1 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | |Rsft | * |------+------+------+------+------+------|------+------+------+------+------+------| * | |MusOn |MusOff| | | | | | | | | Reset| - * |------+------+------+------+------+------+------+------+------+------+--,----+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -- cgit v1.2.3 From 62004866b3eee07a39a6caa0f6f3a2df0d5b2ef5 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:49:06 +0200 Subject: Update config.h --- keyboards/preonic/keymaps/jacwib/config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h index 330686559f..23e9e0ed28 100644 --- a/keyboards/preonic/keymaps/jacwib/config.h +++ b/keyboards/preonic/keymaps/jacwib/config.h @@ -3,7 +3,6 @@ #include "../../config.h" -// place overrides here #define FORCE_NKRO 1 #endif -- cgit v1.2.3 From 26f4a0cf04cc11690abc80f644b5fbdc869cf056 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:49:26 +0200 Subject: Update Makefile --- keyboards/preonic/keymaps/jacwib/Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile index 1743c64878..3e87d41d36 100644 --- a/keyboards/preonic/keymaps/jacwib/Makefile +++ b/keyboards/preonic/keymaps/jacwib/Makefile @@ -1,9 +1,5 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) @@ -17,7 +13,6 @@ UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR -- cgit v1.2.3 From e4e13ddc54d90b41a882c76a2d28f28763117763 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:57:47 +0200 Subject: Update readme.md --- keyboards/preonic/keymaps/jacwib/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index 838af399cf..0660312353 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -1,2 +1,3 @@ # Jacwib's preonic keymap. -Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. + +Designed for use with a swedish language. -- cgit v1.2.3 From 6ba27ea31883d52b3e023681edc344cc95e90317 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 11:02:46 +0200 Subject: Remove pointless comments --- keyboards/preonic/keymaps/jacwib/keymap.c | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 4ddaa962e1..53604ef018 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -42,11 +42,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},//Done - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },//Done - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},//Done - {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},//Done - {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}//Done + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC}, + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM }, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH}, + {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS}, + {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -63,11 +63,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},//Done - {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},//Done - {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN},//Done - {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},//Done - {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______}//Done + {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN}, + {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} }, /* Raise @@ -84,11 +84,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_RAISE] = { - {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},//Done - {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},//Done - {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},//Done - {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},//Done - {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______}//Done + {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS}, + {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC}, + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT}, + {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS}, + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______} }, /* Adjust (Lower + Raise) @@ -105,17 +105,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_ADJUST] = { - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},//Done - {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______},//Done - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},//Done - {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET },//Done - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}//Done + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT}, + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } }; -#ifdef AUDIO_ENABLE //Mario theme song: E5 E5 E5 C5 E5 G5 G4 +#ifdef AUDIO_ENABLE float tone_startup[][2] = { {NOTE_B5, 20}, {NOTE_B6, 8}, -- cgit v1.2.3 From 54e37fd2d10f91b1b77cee263c1e3a2b3552cbd9 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 11:08:01 +0200 Subject: Fix bug --- keyboards/preonic/keymaps/jacwib/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 53604ef018..cf441bf309 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, - {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN}, + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)}, {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From ec75c04663e9e8cc4682f8e1239dafd6816e2cf3 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Sun, 14 Aug 2016 11:44:43 +0200 Subject: Fixed links to keymap sources --- keyboards/s60-x/readme.md | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 0872c2e018..d01e1a12eb 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -58,7 +58,7 @@ The ▒▒▒▒▒ blocks hides switch positions not used on this particular la There is no LED support on the PCB at the moment, but I'll let the code for that untouched. -### 1 Standard - ANSI +### 1 [Standard - ANSI (default layout)](keymaps/default/keymap.c) The standard keymap is the one that is pre-flashed on the S60-X. #### 1.0 Default layer @@ -87,7 +87,7 @@ The standard keymap is the one that is pre-flashed on the S60-X. └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 2 Standard - ISO +### 2 [Standard - ISO](keymaps/iso/keymap.c) The same as the standard keymap, but with additional ISO keys. @@ -118,8 +118,8 @@ The same as the standard keymap, but with additional ISO keys. ### 3 Poker -[keymap_poker.c](keymap_poker.c) emulates original Poker layers -while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. +[The poker keymap](keymaps/poker/keymap.c) emulates original Vortex Poker layers +while both [poker_bit](keymaps/poker_bit/keymap.c) and [poker_set](keymap/poker_set/keymap.c) implement the same layout in a slightly different way, fix a minor issue of the original poker Layout and enhance arrow keys. Fn + Esc = ` Fn + {left, down, up, right} = {home, pgdown, pgup, end} @@ -150,9 +150,8 @@ while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](key └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 4. Plain +### 4. [Plain](keymaps/plain/keymap.c) Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host. -See [keymap_plain.c](keymap_plain.c) for detail. #### 4.0 Plain Default layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -168,14 +167,14 @@ See [keymap_plain.c](keymap_plain.c) for detail. └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 5. Hasu -This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail. +### 5. [Hasu](keymaps/hasu/keymap.c) +This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. (Hasu is the creator of the TMK firmware, for those who do not know that.) -### 6. SpaceFN -This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0). +### 6. [SpaceFN](keymaps/spacefn/keymap.c) +This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. Check the sourcefile and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0) for more information. #### 6.0 Default layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -203,8 +202,8 @@ This layout proposed by spiceBar uses space bar to change layer with using Dual └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 7. HHKB -[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers. +### 7. [HHKB](keymap/hhkb/keymap.c) +The HHKB keymap emulates original HHKB layers. #### 7.0: Default layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ @@ -231,8 +230,8 @@ This layout proposed by spiceBar uses space bar to change layer with using Dual └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 8 Custom -The custom keymap - [keymap_custom.c](keymap_custom.c) - is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys. +### 8 [Custom](keymaps/custom/keymap.c] +The custom keymap is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys. #### 8.0 Default layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ -- cgit v1.2.3 From 6774f300da7954e3009d6c9b1ee7611327e7378a Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Sun, 14 Aug 2016 11:48:59 +0200 Subject: Update readme.md --- keyboards/s60-x/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index d01e1a12eb..1509625651 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -230,7 +230,7 @@ The HHKB keymap emulates original HHKB layers. └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 8 [Custom](keymaps/custom/keymap.c] +### 8 [Custom](keymaps/custom/keymap.c) The custom keymap is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys. #### 8.0 Default layer -- cgit v1.2.3 From df01d502d4b531cc29b3277e093dcf3b63150647 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Sun, 14 Aug 2016 13:07:03 +0200 Subject: Ported all keymaps Old TMK keymaps were ported and confirmed to compile All keymaps compiled and added to zip-archive. Documentation was updated. --- keyboards/s60-x/keymaps/custom/keymap.c | 6 ++--- keyboards/s60-x/keymaps/default/keymap.c | 8 +++--- keyboards/s60-x/keymaps/hasu/keymap.c | 20 +++++++-------- keyboards/s60-x/keymaps/hhkb/keymap.c | 24 ++++++++--------- keyboards/s60-x/keymaps/iso/keymap.c | 8 +++--- keyboards/s60-x/keymaps/jpec/keymap.c | 4 +-- keyboards/s60-x/keymaps/plain/keymap.c | 6 ++--- keyboards/s60-x/keymaps/poker/keymap.c | 40 ++++++++++++++--------------- keyboards/s60-x/keymaps/poker_bit/keymap.c | 14 +++++----- keyboards/s60-x/keymaps/poker_set/keymap.c | 20 +++++++-------- keyboards/s60-x/keymaps/spacefn/keymap.c | 8 +++--- keyboards/s60-x/readme.md | 32 +++++++++++++---------- keyboards/s60-x/s60-x.h | 17 ++++++++++++ keyboards/s60-x/s60-x_precompiled.zip | Bin 0 -> 276106 bytes 14 files changed, 115 insertions(+), 92 deletions(-) create mode 100644 keyboards/s60-x/s60-x_precompiled.zip diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60-x/keymaps/custom/keymap.c index 59361241fa..fb2a40b85e 100644 --- a/keyboards/s60-x/keymaps/custom/keymap.c +++ b/keyboards/s60-x/keymaps/custom/keymap.c @@ -1,4 +1,4 @@ -#include "keymap_common.h" +#include "s60-x.h" /* Main layer: Test layout, using all keys. @@ -16,9 +16,9 @@ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: ANSI qwerty */ - KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, PGUP, BSPC, \ + LEGACY_KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, PGUP, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, PGDN, ENT , \ LSFT, HOME, Z, X, C, V, B, N, M, COMM, DOT, SLSH, END, RSFT, UP, \ diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c index be7a71aff0..eb0c6b056e 100644 --- a/keyboards/s60-x/keymaps/default/keymap.c +++ b/keyboards/s60-x/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "keymap_common.h" +#include "s60-x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -14,9 +14,9 @@ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: ANSI qwerty */ - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT , \ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ @@ -35,7 +35,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60-x/keymaps/hasu/keymap.c index 46ea81fea2..cbeaae0281 100644 --- a/keyboards/s60-x/keymaps/hasu/keymap.c +++ b/keyboards/s60-x/keymaps/hasu/keymap.c @@ -1,9 +1,9 @@ -#include "keymap_common.h" +#include "s60-x.h" /* * Hasu */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Default Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ @@ -17,7 +17,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ Fn3 │ Fn3 │ Fn0 │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, FN2, QUOT, NO, ENT, \ @@ -36,7 +36,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ Fn0 │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \ BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \ @@ -55,7 +55,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \ CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \ @@ -74,7 +74,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \ BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \ @@ -93,7 +93,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ App │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, INS, \ LCTL, VOLD, VOLU, MUTE, TRNS, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, TRNS, ENT, \ @@ -112,7 +112,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \ TAB, HOME, PGDN, UP, PGUP, END, HOME, PGDN, PGUP, END, TRNS, TRNS, TRNS, TRNS, \ LCTL, TRNS, LEFT, DOWN, RGHT, TRNS, LEFT, DOWN, UP, RGHT, TRNS, TRNS, TRNS, ENT, \ @@ -132,7 +132,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \ TAB, TRNS, TRNS, TRNS, TRNS, TRNS, WH_L, WH_D, WH_U, WH_R, TRNS, TRNS, TRNS, TRNS, \ LCTL, TRNS, ACL0, ACL1, ACL2, TRNS, MS_L, MS_D, MS_U, MS_R, TRNS, TRNS, TRNS, ENT, \ @@ -157,7 +157,7 @@ Ld: set Dvorak layout Lw: set Workman layout */ - KEYMAP( + LEGACY_KEYMAP( FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60-x/keymaps/hhkb/keymap.c index a6e5b3279a..9afd1247f8 100644 --- a/keyboards/s60-x/keymaps/hhkb/keymap.c +++ b/keyboards/s60-x/keymaps/hhkb/keymap.c @@ -1,9 +1,9 @@ -#include "keymap_common.h" +#include "s60-x.h" /* * HHKB Layout */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: Default layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ @@ -17,12 +17,12 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( - ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSLS, GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSPC, \ + LEGACY_KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSLS, GRV, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSPC, \ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, FN0, \ - NO, LGUI, LALT, SPC, NO, RALT, RGUI, NO), + NO, LGUI, LALT, SPC, NO, RALT, RGUI, NO), /* 1: HHKB Fn layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │ @@ -36,12 +36,12 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( - PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, TRNS, \ - TRNS, VOLD, VOLU, MUTE, EJCT, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, NO, PENT, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, NO, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + LEGACY_KEYMAP( + PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ + CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, TRNS, \ + TRNS, VOLD, VOLU, MUTE, EJCT, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, NO, PENT, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, NO, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), }; /* diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60-x/keymaps/iso/keymap.c index ad597cd7d4..43a9c48b05 100644 --- a/keyboards/s60-x/keymaps/iso/keymap.c +++ b/keyboards/s60-x/keymaps/iso/keymap.c @@ -1,4 +1,4 @@ -#include "keymap_common.h" +#include "s60-x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -14,9 +14,9 @@ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: ANSI qwerty */ - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, NO, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT , \ LSFT, BSLS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ @@ -35,7 +35,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60-x/keymaps/jpec/keymap.c index 3b680c3072..c8fc133288 100644 --- a/keyboards/s60-x/keymaps/jpec/keymap.c +++ b/keyboards/s60-x/keymaps/jpec/keymap.c @@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Fn1 |Gui |Alt | SpaceFn |Alt |Gui |App |Ctrl| * `-----------------------------------------------------------' */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT, \ @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - KEYMAP( + LEGACY_KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP, PGDN, TRNS, SLCK, PAUS, INS, \ TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END, TRNS, TRNS, PENT, \ diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60-x/keymaps/plain/keymap.c index 0f0cdee2a4..790ac88e73 100644 --- a/keyboards/s60-x/keymaps/plain/keymap.c +++ b/keyboards/s60-x/keymaps/plain/keymap.c @@ -1,4 +1,4 @@ -#include "keymap_common.h" +#include "s60-x.h" /* Main layer: ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -14,9 +14,9 @@ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ + LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \ diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60-x/keymaps/poker/keymap.c index 5fc970a040..0a8691792a 100644 --- a/keyboards/s60-x/keymaps/poker/keymap.c +++ b/keyboards/s60-x/keymaps/poker/keymap.c @@ -1,6 +1,6 @@ -#include "keymap_common.h" +#include "s60-x.h" -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ @@ -14,7 +14,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ @@ -33,7 +33,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \ BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \ @@ -52,7 +52,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \ CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \ @@ -71,7 +71,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \ BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \ @@ -90,7 +90,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -109,12 +109,12 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), /* 6: Poker Fn ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │ @@ -134,8 +134,8 @@ FnQ: toggle Esc overlay FnS: toggle Arrow overlay */ - KEYMAP( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + LEGACY_KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, FN4, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN3, END, TRNS, TRNS, \ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \ @@ -159,12 +159,12 @@ Ld: set Dvorak layout Lw: set Workman layout */ - KEYMAP( - FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + LEGACY_KEYMAP( + FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), }; const uint16_t PROGMEM fn_actions[] = { /* Poker Layout */ diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60-x/keymaps/poker_bit/keymap.c index 4a4cfd1be8..7626038f42 100644 --- a/keyboards/s60-x/keymaps/poker_bit/keymap.c +++ b/keyboards/s60-x/keymaps/poker_bit/keymap.c @@ -1,9 +1,9 @@ -#include "keymap_common.h" +#include "s60-x.h" // Poker fix with toggle and bit operation // Fn + Esc = ` // Fn + {left, down, up, right} = {home, pgdown, pgup, end} -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ @@ -17,7 +17,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ @@ -36,7 +36,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ Fn1 │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - [4] = KEYMAP( + [4] = LEGACY_KEYMAP( TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ CAPS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN4, END, TRNS, TRNS, \ @@ -55,7 +55,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Home │PgDwn│ End │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -74,7 +74,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -93,7 +93,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60-x/keymaps/poker_set/keymap.c index 0c1ef1a9b9..09423e75b3 100644 --- a/keyboards/s60-x/keymaps/poker_set/keymap.c +++ b/keyboards/s60-x/keymaps/poker_set/keymap.c @@ -1,9 +1,9 @@ -#include "keymap_common.h" +#include "s60-x.h" // Poker fix with set(state transition) // Fn + Esc = ` // Fn + {left, down, up, right} = {home, pgdown, pgup, end} -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ @@ -17,7 +17,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ @@ -36,7 +36,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn1 │Left │Down │Right│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -55,7 +55,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn2 │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -74,7 +74,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Left │Down │Right│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \ @@ -93,7 +93,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ Fn5 │█████│█████│█████│ Fn4 │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, FN6, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ @@ -112,7 +112,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ Fn4 │█████│█████│█████│ Fn5 │Home │PgDwn│ End │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, FN7, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ @@ -131,7 +131,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ Fn7 │█████│█████│█████│ Fn6 │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, FN4, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ @@ -150,7 +150,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ Fn6 │█████│█████│█████│ Fn7 │Home │PgDwn│ End │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ TRNS, FN5, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \ diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60-x/keymaps/spacefn/keymap.c index c930705320..b6dc7ca7eb 100644 --- a/keyboards/s60-x/keymaps/spacefn/keymap.c +++ b/keyboards/s60-x/keymaps/spacefn/keymap.c @@ -1,10 +1,10 @@ -#include "keymap_common.h" +#include "s60-x.h" /* * SpaceFN * http://geekhack.org/index.php?topic=51069.0 */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Default Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ @@ -18,7 +18,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │LCTRL│L_GUI│L_ALT│█████│█████│█████Spc/Fn0█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \ @@ -38,7 +38,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - KEYMAP( + LEGACY_KEYMAP( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \ TRNS, TRNS, TRNS, ESC, TRNS, TRNS, TRNS, HOME, UP, END, PSCR, SLCK, PAUS, INS, \ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, \ diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 1509625651..4bba4b68fa 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -5,19 +5,10 @@ DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps ## S60X Resources - [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open) -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Keymap -Several versions of keymaps 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. - -To build firmware binary hex file with a certain keymap just run `make` with the `keymap` option like: - - $ make keymap=[custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|] - -File [S60-X_pre-compiled_firmwares.zip](S60-X_pre-compiled_firmwares.zip) contains pre-compiled firmwares for all keymaps available. Not all of them are tested. +## Quickstart +If you just want to test a few layouts, the archive [s60-x_precompiled.zip](s60-x_precompiled.zip) contains pre-compiled .hex-files for all available keymaps. Not all of them are tested. +You only need to flash them onto your keyboard, which is explained below, there's no need to setup a build environment. For a full list ## Flashing your keyboard The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows). @@ -29,7 +20,7 @@ The recommended programs for flashing your keyboard are [Atmel FLIP](http://www. **Programming the firmware (Windows)** 1. download and install FLIP (http://www.atmel.com/tools/FLIP.aspx) -2. connect the keyboard, press the program button (S1) and wait until it enumerates +2. connect the keyboard, press the program button on the underside of the board (S1) and wait until it enumerates (you'll hear the "disconnect" and "connect" sound) 3. go to device manager, find the atmega32u4 chip and click "update driver" 4. choose location manually: folder named "usb" inside the installation directory of FLIP 5. once the driver is installed, run flip @@ -49,6 +40,21 @@ The recommended programs for flashing your keyboard are [Atmel FLIP](http://www. 3. `sudo dfu-programmer atmega32u4 start` 3. The keyboard should start working. If it doesn't, reconnect the cable. +## Building the firmware + +To build firmware binary hex file with a certain keymap just run `make` with the `keymap` option like: + + $ make keymap=[custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|] + +For a more detailed explanation of the build process and the environment setup, see the ["Getting Started" section](/readme.md#getting-started). + +## List of included Keymaps + +Several versions of keymaps are available in advance but you are recommended to define your favorite layout yourself. +To define your own keymap, copy the [default keymap template](/quantum/template/keymaps/default) directory into the `keymaps` directory and start modifying the `keymap.c` file. Some options might require you to change the `config.h` or `Makefile` as well, refer to the main documentation for more information on those. +If you want to later merge your finalised keymap into this repository to make it available for everyone, make sure to also modify the `readme.md` in your keymap directory to show a visual version of your keymap. + +Here's a list of the standard layouts that are provided with the precompiled .hex-files. ### 0 Initial explanations The █████ blocks on the layouts hides the switch positions that do not exist physically on the PCB. If you feel like hacking the keyboard and adding new keys, those are the positions that can be used. You'll have to modify the [keymap_common.h](keymap_common.h) file for that. diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h index 91e7b67f31..29a2a27b22 100644 --- a/keyboards/s60-x/s60-x.h +++ b/keyboards/s60-x/s60-x.h @@ -49,4 +49,21 @@ along with this program. If not, see . { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO } \ } +/*This special definition is used for S60-X keymaps that were ported from TMK + * QMK has a lot of keycodes that don't start with KC_, so using the regular KEYMAP macro is recommended + */ +#define LEGACY_KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K40, K41, K42, K46, K4A, K4B, K4C, K4D \ +) { \ + { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E }, \ + { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO }, \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO }, \ + { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E }, \ + { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_NO } \ +} + #endif diff --git a/keyboards/s60-x/s60-x_precompiled.zip b/keyboards/s60-x/s60-x_precompiled.zip new file mode 100644 index 0000000000..00d99ca8a1 Binary files /dev/null and b/keyboards/s60-x/s60-x_precompiled.zip differ -- cgit v1.2.3 From 5705a403205c0c1e7c585e1a2edda21e79134ee6 Mon Sep 17 00:00:00 2001 From: Toni Date: Sun, 14 Aug 2016 20:06:47 +0200 Subject: increased readability with a defince --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 32 +++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 9f838ba617..68cc6755e1 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -2,6 +2,7 @@ // this is the style you want to emulate. #include "satan.h" +// TODO: replace your ugly german brckets with #defines // 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. @@ -12,6 +13,9 @@ #define _TAB 2 #define _SFX 3 +// increase readability +#define _______ KC_TRNS + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _DEF: Default Layer * ,-----------------------------------------------------------. @@ -48,10 +52,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_SPC] = KEYMAP_ISO_SPLITRSHIFT( KC_PSCR, 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_TRNS, KC_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS, LSFT(KC_8), LSFT(KC_9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), + _______, KC_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), _______, _______, LSFT(KC_8), LSFT(KC_9), _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ + _______, _______, _______, _______, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), _______, _______, _______, _______, _______, KC_VOLU, \ + _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) * ,-----------------------------------------------------------. @@ -67,11 +71,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_TAB] = KEYMAP_ISO_SPLITRSHIFT( - KC_WAKE, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_7), RALT(KC_0), 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ + _______, _______, _______, _______, _______, _______, _______, RALT(KC_7), RALT(KC_0), _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, _______, KC_PGUP, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) * ,-----------------------------------------------------------. @@ -87,11 +91,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_SFX] = KEYMAP_ISO_SPLITRSHIFT( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, \ - KC_TRNS, F(2), F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, KC_NO, KC_ENT, \ - KC_TRNS, F(4), F(5), F(6), F(7), F(8), F(9), KC_TRNS, KC_TRNS, KC_0, KC_TRNS, KC_SLSH, KC_TRNS, KC_UP, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT), + RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \ + _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \ + _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, KC_NO, KC_ENT, \ + _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, _______, KC_UP, \ + _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), }; enum function_id { -- cgit v1.2.3 From c6c2c3fc14736e4d226c5f410d8c3faf3d36629f Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 10:58:10 -1000 Subject: minorca minirca with RGB keymap --- keyboards/minorca/Makefile | 71 ++++++++++++++++++++++++ keyboards/minorca/config.h | 80 ++++++++++++++++++++++++++++ keyboards/minorca/keymaps/default/Makefile | 25 +++++++++ keyboards/minorca/keymaps/default/config.h | 12 +++++ keyboards/minorca/keymaps/default/keymap.c | 44 +++++++++++++++ keyboards/minorca/keymaps/default/readme.md | 5 ++ keyboards/minorca/keymaps/readme.md | 23 ++++++++ keyboards/minorca/keymaps/rgb/Makefile | 25 +++++++++ keyboards/minorca/keymaps/rgb/config.h | 20 +++++++ keyboards/minorca/keymaps/rgb/example.jpg | Bin 0 -> 72737 bytes keyboards/minorca/keymaps/rgb/keymap.c | 65 ++++++++++++++++++++++ keyboards/minorca/keymaps/rgb/readme.md | 23 ++++++++ keyboards/minorca/keymaps/rgb/wiring1.jpg | Bin 0 -> 119547 bytes keyboards/minorca/keymaps/rgb/wiring2.jpg | Bin 0 -> 94987 bytes keyboards/minorca/minorca.c | 6 +++ keyboards/minorca/minorca.h | 6 +++ keyboards/minorca/readme.md | 31 +++++++++++ 17 files changed, 436 insertions(+) create mode 100644 keyboards/minorca/Makefile create mode 100644 keyboards/minorca/config.h create mode 100644 keyboards/minorca/keymaps/default/Makefile create mode 100644 keyboards/minorca/keymaps/default/config.h create mode 100644 keyboards/minorca/keymaps/default/keymap.c create mode 100644 keyboards/minorca/keymaps/default/readme.md create mode 100644 keyboards/minorca/keymaps/readme.md create mode 100644 keyboards/minorca/keymaps/rgb/Makefile create mode 100644 keyboards/minorca/keymaps/rgb/config.h create mode 100644 keyboards/minorca/keymaps/rgb/example.jpg create mode 100644 keyboards/minorca/keymaps/rgb/keymap.c create mode 100644 keyboards/minorca/keymaps/rgb/readme.md create mode 100644 keyboards/minorca/keymaps/rgb/wiring1.jpg create mode 100644 keyboards/minorca/keymaps/rgb/wiring2.jpg create mode 100644 keyboards/minorca/minorca.c create mode 100644 keyboards/minorca/minorca.h create mode 100644 keyboards/minorca/readme.md diff --git a/keyboards/minorca/Makefile b/keyboards/minorca/Makefile new file mode 100644 index 0000000000..8cff000493 --- /dev/null +++ b/keyboards/minorca/Makefile @@ -0,0 +1,71 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/minorca/config.h b/keyboards/minorca/config.h new file mode 100644 index 0000000000..4cdafcbd2e --- /dev/null +++ b/keyboards/minorca/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6660 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ME +#define PRODUCT MinOrca +#define DESCRIPTION Tiny Whale + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* MinOrca PCB default pin-out */ +#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } +#define MATRIX_ROW_PINS { B0, B1, B2, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/minorca/keymaps/default/Makefile b/keyboards/minorca/keymaps/default/Makefile new file mode 100644 index 0000000000..8dc851fddf --- /dev/null +++ b/keyboards/minorca/keymaps/default/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/minorca/keymaps/default/config.h b/keyboards/minorca/keymaps/default/config.h new file mode 100644 index 0000000000..bf40376c19 --- /dev/null +++ b/keyboards/minorca/keymaps/default/config.h @@ -0,0 +1,12 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* bootmagic salt key */ +#define BOOTMAGIC_KEY_SALT KC_ESC + +/* skip bootmagic and eeconfig */ +#define BOOTMAGIC_KEY_SKIP KC_SPACE + +#endif diff --git a/keyboards/minorca/keymaps/default/keymap.c b/keyboards/minorca/keymaps/default/keymap.c new file mode 100644 index 0000000000..a55d578e44 --- /dev/null +++ b/keyboards/minorca/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +// 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 "minorca.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Base */ + {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, XXXXXXX, KC_ENT }, + {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO } + }, + [1] = { /* First */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT }, + {KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI }, + {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } + }, + [2] = { /* Second */ + {KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT }, + {KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT }, + {KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } + }, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to First overlay + [1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay + +}; \ No newline at end of file diff --git a/keyboards/minorca/keymaps/default/readme.md b/keyboards/minorca/keymaps/default/readme.md new file mode 100644 index 0000000000..6ed31f82b3 --- /dev/null +++ b/keyboards/minorca/keymaps/default/readme.md @@ -0,0 +1,5 @@ +# The Default Minorca Layout + +Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c + +It looks incomplete. \ No newline at end of file diff --git a/keyboards/minorca/keymaps/readme.md b/keyboards/minorca/keymaps/readme.md new file mode 100644 index 0000000000..54fb5f6d9e --- /dev/null +++ b/keyboards/minorca/keymaps/readme.md @@ -0,0 +1,23 @@ +# How to add your own keymap + +Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`: + + _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author] + +\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements + +and contain the following files: + +* `keymap.c` +* `readme.md` *recommended* +* `config.h` *optional*, found automatically when compiling +* `Makefile` *optional*, found automatically when compling + +When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format: + + * **folder_name** description + +# List of Planck keymaps + +* **default** default Planck layout +* **cbbrowne** cbbrowne's Planck layout \ No newline at end of file diff --git a/keyboards/minorca/keymaps/rgb/Makefile b/keyboards/minorca/keymaps/rgb/Makefile new file mode 100644 index 0000000000..230f75a628 --- /dev/null +++ b/keyboards/minorca/keymaps/rgb/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/minorca/keymaps/rgb/config.h b/keyboards/minorca/keymaps/rgb/config.h new file mode 100644 index 0000000000..deaac2e26f --- /dev/null +++ b/keyboards/minorca/keymaps/rgb/config.h @@ -0,0 +1,20 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* bootmagic salt key */ +#define BOOTMAGIC_KEY_SALT KC_ESC + +/* skip bootmagic and eeconfig */ +#define BOOTMAGIC_KEY_SKIP KC_SPACE + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D5 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 13 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#endif diff --git a/keyboards/minorca/keymaps/rgb/example.jpg b/keyboards/minorca/keymaps/rgb/example.jpg new file mode 100644 index 0000000000..a04c8d37d6 Binary files /dev/null and b/keyboards/minorca/keymaps/rgb/example.jpg differ diff --git a/keyboards/minorca/keymaps/rgb/keymap.c b/keyboards/minorca/keymaps/rgb/keymap.c new file mode 100644 index 0000000000..9002afbb88 --- /dev/null +++ b/keyboards/minorca/keymaps/rgb/keymap.c @@ -0,0 +1,65 @@ +// 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 "minorca.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _TB 3 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = { /* 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}, + {FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT}, + {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)}, + {KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL} +}, + +[_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_BSPC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)}, + {KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT}, + {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY} +}, + +[_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS}, + {KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT}, + {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END} +}, + +[_TB] = { /* Tab */ + {KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS}, + {KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT}, + {BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB), + [1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), + [2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC), + [3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), +}; diff --git a/keyboards/minorca/keymaps/rgb/readme.md b/keyboards/minorca/keymaps/rgb/readme.md new file mode 100644 index 0000000000..50806068ce --- /dev/null +++ b/keyboards/minorca/keymaps/rgb/readme.md @@ -0,0 +1,23 @@ +#RGB backlight for MinOrca + +![wiring](example.jpg) + +Exmaple of adding WS2812b LEDs to a MinOrca. + +http://www.40percent.club/2016/08/tiny-whale.html + +The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. + +Tab + Z Toggle on/off +Tab + X Mode +Tab + C Hue+ +Tab + V Hue- +Tab + B Saturation+ +Tab + N Saturation- +Tab + M Brightness+ +Tab + , Brightness- + +Example wiring: + +![wiring](wiring1.jpg) +![wiring closeup](wiring2.jpg) diff --git a/keyboards/minorca/keymaps/rgb/wiring1.jpg b/keyboards/minorca/keymaps/rgb/wiring1.jpg new file mode 100644 index 0000000000..7dcbe80c5e Binary files /dev/null and b/keyboards/minorca/keymaps/rgb/wiring1.jpg differ diff --git a/keyboards/minorca/keymaps/rgb/wiring2.jpg b/keyboards/minorca/keymaps/rgb/wiring2.jpg new file mode 100644 index 0000000000..fd91d3e1c9 Binary files /dev/null and b/keyboards/minorca/keymaps/rgb/wiring2.jpg differ diff --git a/keyboards/minorca/minorca.c b/keyboards/minorca/minorca.c new file mode 100644 index 0000000000..24e72c2a5c --- /dev/null +++ b/keyboards/minorca/minorca.c @@ -0,0 +1,6 @@ +#include "minorca.h" + +void matrix_init_kb(void) { + + matrix_init_user(); +} \ No newline at end of file diff --git a/keyboards/minorca/minorca.h b/keyboards/minorca/minorca.h new file mode 100644 index 0000000000..158e5b4c55 --- /dev/null +++ b/keyboards/minorca/minorca.h @@ -0,0 +1,6 @@ +#ifndef MINORCA_H +#define MINORCA_H + +#include "quantum.h" + +#endif diff --git a/keyboards/minorca/readme.md b/keyboards/minorca/readme.md new file mode 100644 index 0000000000..1d655dfe48 --- /dev/null +++ b/keyboards/minorca/readme.md @@ -0,0 +1,31 @@ +minorca keyboard firmware +====================== +Handwired 40% keyboard + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. + +### Notable forks (which some of the keymap files are from) +- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) +- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) +- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) +- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) -- cgit v1.2.3 From dde9ee572cf01609aaebbc6cbe1f326e7f89b7f4 Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 11:06:46 -1000 Subject: clean up readnme --- keyboards/minorca/keymaps/rgb/readme.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/keyboards/minorca/keymaps/rgb/readme.md b/keyboards/minorca/keymaps/rgb/readme.md index 50806068ce..051ffe3c64 100644 --- a/keyboards/minorca/keymaps/rgb/readme.md +++ b/keyboards/minorca/keymaps/rgb/readme.md @@ -8,16 +8,18 @@ http://www.40percent.club/2016/08/tiny-whale.html The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. -Tab + Z Toggle on/off -Tab + X Mode -Tab + C Hue+ -Tab + V Hue- -Tab + B Saturation+ -Tab + N Saturation- -Tab + M Brightness+ -Tab + , Brightness- +*Tab + Z Toggle on/off +*Tab + X Mode +*Tab + C Hue+ +*Tab + V Hue- +*Tab + B Saturation+ +*Tab + N Saturation- +*Tab + M Brightness+ +*Tab + , Brightness- Example wiring: +WS2812 data pin is connected to D2 + ![wiring](wiring1.jpg) ![wiring closeup](wiring2.jpg) -- cgit v1.2.3 From 65060ad000930b4d735760cd8951ae0f462d5f14 Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 11:07:35 -1000 Subject: Fix list --- keyboards/minorca/keymaps/rgb/readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/minorca/keymaps/rgb/readme.md b/keyboards/minorca/keymaps/rgb/readme.md index 051ffe3c64..00b6d6cd8c 100644 --- a/keyboards/minorca/keymaps/rgb/readme.md +++ b/keyboards/minorca/keymaps/rgb/readme.md @@ -2,20 +2,20 @@ ![wiring](example.jpg) -Exmaple of adding WS2812b LEDs to a MinOrca. +Example of adding WS2812b LEDs to a MinOrca. http://www.40percent.club/2016/08/tiny-whale.html The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. -*Tab + Z Toggle on/off -*Tab + X Mode -*Tab + C Hue+ -*Tab + V Hue- -*Tab + B Saturation+ -*Tab + N Saturation- -*Tab + M Brightness+ -*Tab + , Brightness- +* Tab + Z Toggle on/off +* Tab + X Mode +* Tab + C Hue+ +* Tab + V Hue- +* Tab + B Saturation+ +* Tab + N Saturation- +* Tab + M Brightness+ +* Tab + , Brightness- Example wiring: -- cgit v1.2.3 From 1eaa685872745d3ae01afb79bad8f25a4fd1029d Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 11:08:15 -1000 Subject: Correct data pin to D5 --- keyboards/minorca/keymaps/rgb/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/minorca/keymaps/rgb/readme.md b/keyboards/minorca/keymaps/rgb/readme.md index 00b6d6cd8c..f50dfa546f 100644 --- a/keyboards/minorca/keymaps/rgb/readme.md +++ b/keyboards/minorca/keymaps/rgb/readme.md @@ -19,7 +19,7 @@ The keymap is a work in progress. The RGB functions are accessed by holding down Example wiring: -WS2812 data pin is connected to D2 +WS2812 data pin is connected to D5 ![wiring](wiring1.jpg) ![wiring closeup](wiring2.jpg) -- cgit v1.2.3 From f58a67c991fa15f6177ebb9ec74e831b851bb38e Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 11:10:12 -1000 Subject: cleanup readme --- keyboards/minorca/keymaps/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/minorca/keymaps/readme.md b/keyboards/minorca/keymaps/readme.md index 54fb5f6d9e..058923ba25 100644 --- a/keyboards/minorca/keymaps/readme.md +++ b/keyboards/minorca/keymaps/readme.md @@ -17,7 +17,7 @@ When adding your keymap to this list, keep it organised alphabetically (select l * **folder_name** description -# List of Planck keymaps +# List of Minorca keymaps -* **default** default Planck layout -* **cbbrowne** cbbrowne's Planck layout \ No newline at end of file +* **default** default Minorca layout +* **rgb** layout with WS2812b control -- cgit v1.2.3 From 503ec7f9f6f9c15049f02c3753afdfe2d0db629b Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 11:15:46 -1000 Subject: Updated readme Added link to Minorca/Sebright blog. --- keyboards/minorca/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/minorca/readme.md b/keyboards/minorca/readme.md index 1d655dfe48..93c767954d 100644 --- a/keyboards/minorca/readme.md +++ b/keyboards/minorca/readme.md @@ -2,6 +2,8 @@ minorca keyboard firmware ====================== Handwired 40% keyboard +http://www.panc.co/blog/minorcasebright-information-page + ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/readme.md). -- cgit v1.2.3 From 959c48e146ec3c2192e8d261d78d27b80342ad30 Mon Sep 17 00:00:00 2001 From: di0ib Date: Sun, 14 Aug 2016 14:13:58 -1000 Subject: moved to handwired folder --- keyboards/handwired/minorca/Makefile | 71 ++++++++++++++++++ keyboards/handwired/minorca/config.h | 80 +++++++++++++++++++++ .../handwired/minorca/keymaps/default/Makefile | 25 +++++++ .../handwired/minorca/keymaps/default/config.h | 12 ++++ .../handwired/minorca/keymaps/default/keymap.c | 44 ++++++++++++ .../handwired/minorca/keymaps/default/readme.md | 5 ++ keyboards/handwired/minorca/keymaps/readme.md | 23 ++++++ keyboards/handwired/minorca/keymaps/rgb/Makefile | 25 +++++++ keyboards/handwired/minorca/keymaps/rgb/config.h | 20 ++++++ .../handwired/minorca/keymaps/rgb/example.jpg | Bin 0 -> 72737 bytes keyboards/handwired/minorca/keymaps/rgb/keymap.c | 65 +++++++++++++++++ keyboards/handwired/minorca/keymaps/rgb/readme.md | 25 +++++++ .../handwired/minorca/keymaps/rgb/wiring1.jpg | Bin 0 -> 119547 bytes .../handwired/minorca/keymaps/rgb/wiring2.jpg | Bin 0 -> 94987 bytes keyboards/handwired/minorca/minorca.c | 6 ++ keyboards/handwired/minorca/minorca.h | 6 ++ keyboards/handwired/minorca/readme.md | 33 +++++++++ keyboards/minorca/Makefile | 71 ------------------ keyboards/minorca/config.h | 80 --------------------- keyboards/minorca/keymaps/default/Makefile | 25 ------- keyboards/minorca/keymaps/default/config.h | 12 ---- keyboards/minorca/keymaps/default/keymap.c | 44 ------------ keyboards/minorca/keymaps/default/readme.md | 5 -- keyboards/minorca/keymaps/readme.md | 23 ------ keyboards/minorca/keymaps/rgb/Makefile | 25 ------- keyboards/minorca/keymaps/rgb/config.h | 20 ------ keyboards/minorca/keymaps/rgb/example.jpg | Bin 72737 -> 0 bytes keyboards/minorca/keymaps/rgb/keymap.c | 65 ----------------- keyboards/minorca/keymaps/rgb/readme.md | 25 ------- keyboards/minorca/keymaps/rgb/wiring1.jpg | Bin 119547 -> 0 bytes keyboards/minorca/keymaps/rgb/wiring2.jpg | Bin 94987 -> 0 bytes keyboards/minorca/minorca.c | 6 -- keyboards/minorca/minorca.h | 6 -- keyboards/minorca/readme.md | 33 --------- 34 files changed, 440 insertions(+), 440 deletions(-) create mode 100644 keyboards/handwired/minorca/Makefile create mode 100644 keyboards/handwired/minorca/config.h create mode 100644 keyboards/handwired/minorca/keymaps/default/Makefile create mode 100644 keyboards/handwired/minorca/keymaps/default/config.h create mode 100644 keyboards/handwired/minorca/keymaps/default/keymap.c create mode 100644 keyboards/handwired/minorca/keymaps/default/readme.md create mode 100644 keyboards/handwired/minorca/keymaps/readme.md create mode 100644 keyboards/handwired/minorca/keymaps/rgb/Makefile create mode 100644 keyboards/handwired/minorca/keymaps/rgb/config.h create mode 100644 keyboards/handwired/minorca/keymaps/rgb/example.jpg create mode 100644 keyboards/handwired/minorca/keymaps/rgb/keymap.c create mode 100644 keyboards/handwired/minorca/keymaps/rgb/readme.md create mode 100644 keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg create mode 100644 keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg create mode 100644 keyboards/handwired/minorca/minorca.c create mode 100644 keyboards/handwired/minorca/minorca.h create mode 100644 keyboards/handwired/minorca/readme.md delete mode 100644 keyboards/minorca/Makefile delete mode 100644 keyboards/minorca/config.h delete mode 100644 keyboards/minorca/keymaps/default/Makefile delete mode 100644 keyboards/minorca/keymaps/default/config.h delete mode 100644 keyboards/minorca/keymaps/default/keymap.c delete mode 100644 keyboards/minorca/keymaps/default/readme.md delete mode 100644 keyboards/minorca/keymaps/readme.md delete mode 100644 keyboards/minorca/keymaps/rgb/Makefile delete mode 100644 keyboards/minorca/keymaps/rgb/config.h delete mode 100644 keyboards/minorca/keymaps/rgb/example.jpg delete mode 100644 keyboards/minorca/keymaps/rgb/keymap.c delete mode 100644 keyboards/minorca/keymaps/rgb/readme.md delete mode 100644 keyboards/minorca/keymaps/rgb/wiring1.jpg delete mode 100644 keyboards/minorca/keymaps/rgb/wiring2.jpg delete mode 100644 keyboards/minorca/minorca.c delete mode 100644 keyboards/minorca/minorca.h delete mode 100644 keyboards/minorca/readme.md diff --git a/keyboards/handwired/minorca/Makefile b/keyboards/handwired/minorca/Makefile new file mode 100644 index 0000000000..155c1f9a29 --- /dev/null +++ b/keyboards/handwired/minorca/Makefile @@ -0,0 +1,71 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/minorca/config.h b/keyboards/handwired/minorca/config.h new file mode 100644 index 0000000000..4cdafcbd2e --- /dev/null +++ b/keyboards/handwired/minorca/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6660 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ME +#define PRODUCT MinOrca +#define DESCRIPTION Tiny Whale + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* MinOrca PCB default pin-out */ +#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } +#define MATRIX_ROW_PINS { B0, B1, B2, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/handwired/minorca/keymaps/default/Makefile b/keyboards/handwired/minorca/keymaps/default/Makefile new file mode 100644 index 0000000000..a573488a5e --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/default/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../../Makefile +endif diff --git a/keyboards/handwired/minorca/keymaps/default/config.h b/keyboards/handwired/minorca/keymaps/default/config.h new file mode 100644 index 0000000000..bf40376c19 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/default/config.h @@ -0,0 +1,12 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* bootmagic salt key */ +#define BOOTMAGIC_KEY_SALT KC_ESC + +/* skip bootmagic and eeconfig */ +#define BOOTMAGIC_KEY_SKIP KC_SPACE + +#endif diff --git a/keyboards/handwired/minorca/keymaps/default/keymap.c b/keyboards/handwired/minorca/keymaps/default/keymap.c new file mode 100644 index 0000000000..a55d578e44 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +// 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 "minorca.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Base */ + {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, XXXXXXX, KC_ENT }, + {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO } + }, + [1] = { /* First */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT }, + {KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI }, + {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } + }, + [2] = { /* Second */ + {KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT }, + {KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT }, + {KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 }, + {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } + }, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to First overlay + [1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay + +}; \ No newline at end of file diff --git a/keyboards/handwired/minorca/keymaps/default/readme.md b/keyboards/handwired/minorca/keymaps/default/readme.md new file mode 100644 index 0000000000..6ed31f82b3 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/default/readme.md @@ -0,0 +1,5 @@ +# The Default Minorca Layout + +Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c + +It looks incomplete. \ No newline at end of file diff --git a/keyboards/handwired/minorca/keymaps/readme.md b/keyboards/handwired/minorca/keymaps/readme.md new file mode 100644 index 0000000000..058923ba25 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/readme.md @@ -0,0 +1,23 @@ +# How to add your own keymap + +Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`: + + _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author] + +\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements + +and contain the following files: + +* `keymap.c` +* `readme.md` *recommended* +* `config.h` *optional*, found automatically when compiling +* `Makefile` *optional*, found automatically when compling + +When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format: + + * **folder_name** description + +# List of Minorca keymaps + +* **default** default Minorca layout +* **rgb** layout with WS2812b control diff --git a/keyboards/handwired/minorca/keymaps/rgb/Makefile b/keyboards/handwired/minorca/keymaps/rgb/Makefile new file mode 100644 index 0000000000..2b2af13358 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/rgb/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../../Makefile +endif diff --git a/keyboards/handwired/minorca/keymaps/rgb/config.h b/keyboards/handwired/minorca/keymaps/rgb/config.h new file mode 100644 index 0000000000..deaac2e26f --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/rgb/config.h @@ -0,0 +1,20 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* bootmagic salt key */ +#define BOOTMAGIC_KEY_SALT KC_ESC + +/* skip bootmagic and eeconfig */ +#define BOOTMAGIC_KEY_SKIP KC_SPACE + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D5 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 13 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#endif diff --git a/keyboards/handwired/minorca/keymaps/rgb/example.jpg b/keyboards/handwired/minorca/keymaps/rgb/example.jpg new file mode 100644 index 0000000000..a04c8d37d6 Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/example.jpg differ diff --git a/keyboards/handwired/minorca/keymaps/rgb/keymap.c b/keyboards/handwired/minorca/keymaps/rgb/keymap.c new file mode 100644 index 0000000000..9002afbb88 --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/rgb/keymap.c @@ -0,0 +1,65 @@ +// 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 "minorca.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _TB 3 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = { /* 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}, + {FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT}, + {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)}, + {KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL} +}, + +[_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_BSPC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)}, + {KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT}, + {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY} +}, + +[_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS}, + {KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT}, + {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END} +}, + +[_TB] = { /* Tab */ + {KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS}, + {KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT}, + {BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB), + [1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), + [2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC), + [3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), +}; diff --git a/keyboards/handwired/minorca/keymaps/rgb/readme.md b/keyboards/handwired/minorca/keymaps/rgb/readme.md new file mode 100644 index 0000000000..f50dfa546f --- /dev/null +++ b/keyboards/handwired/minorca/keymaps/rgb/readme.md @@ -0,0 +1,25 @@ +#RGB backlight for MinOrca + +![wiring](example.jpg) + +Example of adding WS2812b LEDs to a MinOrca. + +http://www.40percent.club/2016/08/tiny-whale.html + +The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. + +* Tab + Z Toggle on/off +* Tab + X Mode +* Tab + C Hue+ +* Tab + V Hue- +* Tab + B Saturation+ +* Tab + N Saturation- +* Tab + M Brightness+ +* Tab + , Brightness- + +Example wiring: + +WS2812 data pin is connected to D5 + +![wiring](wiring1.jpg) +![wiring closeup](wiring2.jpg) diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg new file mode 100644 index 0000000000..7dcbe80c5e Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg differ diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg new file mode 100644 index 0000000000..fd91d3e1c9 Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg differ diff --git a/keyboards/handwired/minorca/minorca.c b/keyboards/handwired/minorca/minorca.c new file mode 100644 index 0000000000..24e72c2a5c --- /dev/null +++ b/keyboards/handwired/minorca/minorca.c @@ -0,0 +1,6 @@ +#include "minorca.h" + +void matrix_init_kb(void) { + + matrix_init_user(); +} \ No newline at end of file diff --git a/keyboards/handwired/minorca/minorca.h b/keyboards/handwired/minorca/minorca.h new file mode 100644 index 0000000000..158e5b4c55 --- /dev/null +++ b/keyboards/handwired/minorca/minorca.h @@ -0,0 +1,6 @@ +#ifndef MINORCA_H +#define MINORCA_H + +#include "quantum.h" + +#endif diff --git a/keyboards/handwired/minorca/readme.md b/keyboards/handwired/minorca/readme.md new file mode 100644 index 0000000000..93c767954d --- /dev/null +++ b/keyboards/handwired/minorca/readme.md @@ -0,0 +1,33 @@ +minorca keyboard firmware +====================== +Handwired 40% keyboard + +http://www.panc.co/blog/minorcasebright-information-page + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. + +### Notable forks (which some of the keymap files are from) +- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) +- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) +- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) +- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) diff --git a/keyboards/minorca/Makefile b/keyboards/minorca/Makefile deleted file mode 100644 index 8cff000493..0000000000 --- a/keyboards/minorca/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../Makefile -endif \ No newline at end of file diff --git a/keyboards/minorca/config.h b/keyboards/minorca/config.h deleted file mode 100644 index 4cdafcbd2e..0000000000 --- a/keyboards/minorca/config.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6660 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ME -#define PRODUCT MinOrca -#define DESCRIPTION Tiny Whale - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 - -/* MinOrca PCB default pin-out */ -#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } -#define MATRIX_ROW_PINS { B0, B1, B2, B3 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/minorca/keymaps/default/Makefile b/keyboards/minorca/keymaps/default/Makefile deleted file mode 100644 index 8dc851fddf..0000000000 --- a/keyboards/minorca/keymaps/default/Makefile +++ /dev/null @@ -1,25 +0,0 @@ - - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/minorca/keymaps/default/config.h b/keyboards/minorca/keymaps/default/config.h deleted file mode 100644 index bf40376c19..0000000000 --- a/keyboards/minorca/keymaps/default/config.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* bootmagic salt key */ -#define BOOTMAGIC_KEY_SALT KC_ESC - -/* skip bootmagic and eeconfig */ -#define BOOTMAGIC_KEY_SKIP KC_SPACE - -#endif diff --git a/keyboards/minorca/keymaps/default/keymap.c b/keyboards/minorca/keymaps/default/keymap.c deleted file mode 100644 index a55d578e44..0000000000 --- a/keyboards/minorca/keymaps/default/keymap.c +++ /dev/null @@ -1,44 +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 "minorca.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Base */ - {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, XXXXXXX, KC_ENT }, - {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 }, - {KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO } - }, - [1] = { /* First */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT }, - {KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI }, - {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 }, - {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } - }, - [2] = { /* Second */ - {KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT }, - {KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT }, - {KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 }, - {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } - }, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_MOMENTARY(1), // to First overlay - [1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay - -}; \ No newline at end of file diff --git a/keyboards/minorca/keymaps/default/readme.md b/keyboards/minorca/keymaps/default/readme.md deleted file mode 100644 index 6ed31f82b3..0000000000 --- a/keyboards/minorca/keymaps/default/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# The Default Minorca Layout - -Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c - -It looks incomplete. \ No newline at end of file diff --git a/keyboards/minorca/keymaps/readme.md b/keyboards/minorca/keymaps/readme.md deleted file mode 100644 index 058923ba25..0000000000 --- a/keyboards/minorca/keymaps/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -# How to add your own keymap - -Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`: - - _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author] - -\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements - -and contain the following files: - -* `keymap.c` -* `readme.md` *recommended* -* `config.h` *optional*, found automatically when compiling -* `Makefile` *optional*, found automatically when compling - -When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format: - - * **folder_name** description - -# List of Minorca keymaps - -* **default** default Minorca layout -* **rgb** layout with WS2812b control diff --git a/keyboards/minorca/keymaps/rgb/Makefile b/keyboards/minorca/keymaps/rgb/Makefile deleted file mode 100644 index 230f75a628..0000000000 --- a/keyboards/minorca/keymaps/rgb/Makefile +++ /dev/null @@ -1,25 +0,0 @@ - - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/minorca/keymaps/rgb/config.h b/keyboards/minorca/keymaps/rgb/config.h deleted file mode 100644 index deaac2e26f..0000000000 --- a/keyboards/minorca/keymaps/rgb/config.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* bootmagic salt key */ -#define BOOTMAGIC_KEY_SALT KC_ESC - -/* skip bootmagic and eeconfig */ -#define BOOTMAGIC_KEY_SKIP KC_SPACE - -/* ws2812 RGB LED */ -#define RGB_DI_PIN D5 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 13 // Number of LEDs -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 - -#endif diff --git a/keyboards/minorca/keymaps/rgb/example.jpg b/keyboards/minorca/keymaps/rgb/example.jpg deleted file mode 100644 index a04c8d37d6..0000000000 Binary files a/keyboards/minorca/keymaps/rgb/example.jpg and /dev/null differ diff --git a/keyboards/minorca/keymaps/rgb/keymap.c b/keyboards/minorca/keymaps/rgb/keymap.c deleted file mode 100644 index 9002afbb88..0000000000 --- a/keyboards/minorca/keymaps/rgb/keymap.c +++ /dev/null @@ -1,65 +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 "minorca.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QWERTY 0 -#define _LOWER 1 -#define _RAISE 2 -#define _TB 3 - -// Macro name shortcuts -#define QWERTY M(_QWERTY) -#define LOWER M(_LOWER) -#define RAISE M(_RAISE) - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[_QWERTY] = { /* 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}, - {FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT}, - {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)}, - {KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL} -}, - -[_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_BSPC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)}, - {KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT}, - {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY} -}, - -[_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS}, - {KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT}, - {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END} -}, - -[_TB] = { /* Tab */ - {KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS}, - {KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT}, - {BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB), - [1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), - [2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC), - [3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), -}; diff --git a/keyboards/minorca/keymaps/rgb/readme.md b/keyboards/minorca/keymaps/rgb/readme.md deleted file mode 100644 index f50dfa546f..0000000000 --- a/keyboards/minorca/keymaps/rgb/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -#RGB backlight for MinOrca - -![wiring](example.jpg) - -Example of adding WS2812b LEDs to a MinOrca. - -http://www.40percent.club/2016/08/tiny-whale.html - -The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. - -* Tab + Z Toggle on/off -* Tab + X Mode -* Tab + C Hue+ -* Tab + V Hue- -* Tab + B Saturation+ -* Tab + N Saturation- -* Tab + M Brightness+ -* Tab + , Brightness- - -Example wiring: - -WS2812 data pin is connected to D5 - -![wiring](wiring1.jpg) -![wiring closeup](wiring2.jpg) diff --git a/keyboards/minorca/keymaps/rgb/wiring1.jpg b/keyboards/minorca/keymaps/rgb/wiring1.jpg deleted file mode 100644 index 7dcbe80c5e..0000000000 Binary files a/keyboards/minorca/keymaps/rgb/wiring1.jpg and /dev/null differ diff --git a/keyboards/minorca/keymaps/rgb/wiring2.jpg b/keyboards/minorca/keymaps/rgb/wiring2.jpg deleted file mode 100644 index fd91d3e1c9..0000000000 Binary files a/keyboards/minorca/keymaps/rgb/wiring2.jpg and /dev/null differ diff --git a/keyboards/minorca/minorca.c b/keyboards/minorca/minorca.c deleted file mode 100644 index 24e72c2a5c..0000000000 --- a/keyboards/minorca/minorca.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "minorca.h" - -void matrix_init_kb(void) { - - matrix_init_user(); -} \ No newline at end of file diff --git a/keyboards/minorca/minorca.h b/keyboards/minorca/minorca.h deleted file mode 100644 index 158e5b4c55..0000000000 --- a/keyboards/minorca/minorca.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef MINORCA_H -#define MINORCA_H - -#include "quantum.h" - -#endif diff --git a/keyboards/minorca/readme.md b/keyboards/minorca/readme.md deleted file mode 100644 index 93c767954d..0000000000 --- a/keyboards/minorca/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -minorca keyboard firmware -====================== -Handwired 40% keyboard - -http://www.panc.co/blog/minorcasebright-information-page - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default -To build with the default keymap, simply run `make`. - -### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. - -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: -``` -$ make KEYMAP=[default|jack|] -``` -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. - -### Notable forks (which some of the keymap files are from) -- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) -- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) -- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) -- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) -- cgit v1.2.3 From 055b887b0dd7f64bf7d134df3e13cbe1f2a069c2 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Sun, 14 Aug 2016 20:25:52 -0700 Subject: Setup the bottom-row modifiers to be mac-like in their arrangement. --- keyboards/phantom/keymaps/xyverz/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c index aa6af18b1d..4a15226386 100644 --- a/keyboards/phantom/keymaps/xyverz/keymap.c +++ b/keyboards/phantom/keymaps/xyverz/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, - {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT} }, [_DV] = { /* Layer 1: Dvorak */ @@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, {KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, {KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, - {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT} }, [_CM] = { /* Layer 2: Colemak */ @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, - {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} + {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT} }, [_FL] = { /* Layer 3: Functions */ -- cgit v1.2.3 From 63e5782d2cdf0ee282ad434c773463d9da9db6b3 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 10:43:22 +0200 Subject: process_unicode: Small refactor & linux fix This moves the unicode input start / end sequences into their own functions, so keymaps and other functionality can build on it too. At the same time, it changes how the Linux variant works, to match reality: CTRL+SHIFT must be unregistered too, and we close the thing with a Space instead. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 76 ++++++++++++++++++------------- quantum/process_keycode/process_unicode.h | 3 ++ 2 files changed, 48 insertions(+), 31 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 3fcac15ce3..55e47f1794 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -18,40 +18,54 @@ void set_unicode_input_mode(uint8_t os_target) input_mode = os_target; } +void unicode_input_start (void) { + switch(input_mode) { + case UC_OSX: + register_code(KC_LALT); + break; + case UC_LNX: + register_code(KC_LCTL); + register_code(KC_LSFT); + register_code(KC_U); + unregister_code(KC_U); + unregister_code(KC_LSFT); + unregister_code(KC_LCTL); + break; + case UC_WIN: + register_code(KC_LALT); + register_code(KC_PPLS); + unregister_code(KC_PPLS); + break; + } +} + +void unicode_input_finish (void) { + switch(input_mode) { + case UC_OSX: + case UC_WIN: + unregister_code(KC_LALT); + break; + case UC_LNX: + register_code(KC_SPC); + unregister_code(KC_SPC); + break; + } +} + +void register_hex(uint16_t hex) { + for(int i = 3; i >= 0; i--) { + uint8_t digit = ((hex >> (i*4)) & 0xF); + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + } +} + bool process_unicode(uint16_t keycode, keyrecord_t *record) { if (keycode > QK_UNICODE && record->event.pressed) { uint16_t unicode = keycode & 0x7FFF; - switch(input_mode) { - case UC_OSX: - register_code(KC_LALT); - break; - case UC_LNX: - register_code(KC_LCTL); - register_code(KC_LSFT); - register_code(KC_U); - unregister_code(KC_U); - break; - case UC_WIN: - register_code(KC_LALT); - register_code(KC_PPLS); - unregister_code(KC_PPLS); - break; - } - for(int i = 3; i >= 0; i--) { - uint8_t digit = ((unicode >> (i*4)) & 0xF); - register_code(hex_to_keycode(digit)); - unregister_code(hex_to_keycode(digit)); - } - switch(input_mode) { - case UC_OSX: - case UC_WIN: - unregister_code(KC_LALT); - break; - case UC_LNX: - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - } + unicode_input_start(); + register_hex(unicode); + unicode_input_finish(); } return true; } \ No newline at end of file diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index ca17f8f669..f719a12261 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -9,6 +9,9 @@ #define UC_BSD 3 void set_unicode_input_mode(uint8_t os_target); +void unicode_input_start(void); +void unicode_input_finish(void); +void register_hex(uint16_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); -- cgit v1.2.3 From fa06a163607e8c6c4bd0968c2de96a9a298b777c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 10:46:38 +0200 Subject: process_unicode: Add a way to enter unicode symbols by name The purpose of this change is to allow keymaps to specify a dictionary of unicode symbol name to code mappings, and let the person at the keyboard enter unicode symbols by name. This is done by having a way to trigger unicode symbol input mode, when all keys are cached until Esc, Enter or Space are pressed. Once that happens, we try to look up the symbol from our lookup table. If found, we erase back, and type the unicode magic in to get that symbol. If not found, we still erase back, start unicode input mode, and replay what the user typed in. Signed-off-by: Gergely Nagy --- Makefile | 7 ++- quantum/process_keycode/process_unicode.c | 93 ++++++++++++++++++++++++++++++- quantum/process_keycode/process_unicode.h | 29 +++++++++- 3 files changed, 126 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 053c8532af..693edc9f06 100644 --- a/Makefile +++ b/Makefile @@ -198,6 +198,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/luts.c endif +ifeq ($(strip $(UCIS_ENABLE)), yes) + OPT_DEFS += -DUCIS_ENABLE + UNICODE_ENABLE = yes +endif + ifeq ($(strip $(UNICODE_ENABLE)), yes) OPT_DEFS += -DUNICODE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c @@ -273,4 +278,4 @@ BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 55e47f1794..8a65093008 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -68,4 +68,95 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) { unicode_input_finish(); } return true; -} \ No newline at end of file +} + +#ifdef UCIS_ENABLE +void qk_ucis_start(void) { + qk_ucis_state.count = 0; + qk_ucis_state.in_progress = true; + + unicode_input_start(); + register_hex(0x2328); + unicode_input_finish(); +} + +static bool is_uni_seq(char *seq) { + uint8_t i; + + for (i = 0; seq[i]; i++) { + uint16_t code; + if (('1' <= seq[i]) && (seq[i] <= '0')) + code = seq[i] - '1' + KC_1; + else + code = seq[i] - 'a' + KC_A; + + if (i > qk_ucis_state.count || qk_ucis_state.codes[i] != code) + return false; + } + + return (qk_ucis_state.codes[i] == KC_ENT || + qk_ucis_state.codes[i] == KC_SPC); +} + +__attribute__((weak)) +void qk_ucis_symbol_fallback (void) { + for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) { + uint8_t code = qk_ucis_state.codes[i]; + register_code(code); + unregister_code(code); + } +} + +bool process_record_ucis (uint16_t keycode, keyrecord_t *record) { + uint8_t i; + + if (!qk_ucis_state.in_progress || !record->event.pressed) + return true; + + qk_ucis_state.codes[qk_ucis_state.count] = keycode; + qk_ucis_state.count++; + + if (keycode == KC_BSPC) { + if (qk_ucis_state.count >= 2) { + qk_ucis_state.count -= 2; + return true; + } else { + qk_ucis_state.count--; + return false; + } + } + + if (keycode == KC_ENT || keycode == KC_SPC || keycode == KC_ESC) { + bool symbol_found = false; + + for (i = qk_ucis_state.count; i > 0; i--) { + register_code (KC_BSPC); + unregister_code (KC_BSPC); + } + + if (keycode == KC_ESC) { + qk_ucis_state.in_progress = false; + return false; + } + + unicode_input_start(); + for (i = 0; ucis_symbol_table[i].symbol; i++) { + if (is_uni_seq (ucis_symbol_table[i].symbol)) { + symbol_found = true; + for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) { + register_hex(ucis_symbol_table[i].codes[j]); + } + break; + } + } + if (!symbol_found) { + qk_ucis_symbol_fallback(); + } + unicode_input_finish(); + + qk_ucis_state.in_progress = false; + return false; + } + return true; +} +#endif diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index f719a12261..372ea2f0df 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -15,6 +15,33 @@ void register_hex(uint16_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); +#ifdef UCIS_ENABLE +#ifndef UCIS_MAX_SYMBOL_LENGTH +#define UCIS_MAX_SYMBOL_LENGTH 32 +#endif + +typedef struct { + char *symbol; + uint16_t codes[4]; +} qk_ucis_symbol_t; + +struct { + uint8_t count; + uint16_t codes[UCIS_MAX_SYMBOL_LENGTH]; + bool in_progress:1; +} qk_ucis_state; + +#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, {}}} +#define UCIS_SYM(name, ...) {name, {__VA_ARGS__, 0}} + +extern const qk_ucis_symbol_t ucis_symbol_table[]; + +void qk_ucis_start(void); +void qk_ucis_symbol_fallback (void); +bool process_record_ucis (uint16_t keycode, keyrecord_t *record); + +#endif + #define UC_BSPC UC(0x0008) #define UC_SPC UC(0x0020) @@ -122,4 +149,4 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record); #define UC_TILD UC(0x007E) #define UC_DEL UC(0x007F) -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 0b6861827faea747345ea38202d64c8004ab128c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 11:11:22 +0200 Subject: process_unicode: Handle too long UCIS symbol names If the symbol name being entered is longer than the max, stop recording it, and stop processing keycodes apart from the ones that can delete, finish or cancel the sequence. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 8a65093008..851a96eaab 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -110,7 +110,15 @@ void qk_ucis_symbol_fallback (void) { bool process_record_ucis (uint16_t keycode, keyrecord_t *record) { uint8_t i; - if (!qk_ucis_state.in_progress || !record->event.pressed) + if (!qk_ucis_state.in_progress) + return true; + + if (qk_ucis_state.count >= UCIS_MAX_SYMBOL_LENGTH && + !(keycode == KC_BSPC || keycode == KC_ESC || keycode == KC_SPC || keycode == KC_ENT)) { + return false; + } + + if (!record->event.pressed) return true; qk_ucis_state.codes[qk_ucis_state.count] = keycode; -- cgit v1.2.3 From 857aa5bef6a74f8785a7039feea5286c07bf7067 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 11:14:42 +0200 Subject: process_unicode: Call process_ucis() automatically If UCIS is enabled, call process_ucis() automatically from process_record_quantum(). Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 2 +- quantum/process_keycode/process_unicode.h | 2 +- quantum/quantum.c | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 851a96eaab..d714344117 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -107,7 +107,7 @@ void qk_ucis_symbol_fallback (void) { } } -bool process_record_ucis (uint16_t keycode, keyrecord_t *record) { +bool process_ucis (uint16_t keycode, keyrecord_t *record) { uint8_t i; if (!qk_ucis_state.in_progress) diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 372ea2f0df..c5005897e0 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -38,7 +38,7 @@ extern const qk_ucis_symbol_t ucis_symbol_table[]; void qk_ucis_start(void); void qk_ucis_symbol_fallback (void); -bool process_record_ucis (uint16_t keycode, keyrecord_t *record); +bool process_ucis (uint16_t keycode, keyrecord_t *record); #endif diff --git a/quantum/quantum.c b/quantum/quantum.c index bc2da510f2..a4c5c2ddbc 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -86,6 +86,9 @@ bool process_record_quantum(keyrecord_t *record) { #endif #ifdef UNICODE_ENABLE process_unicode(keycode, record) && + #endif + #ifdef UCIS_ENABLE + process_ucis(keycode, record) && #endif true)) { return false; -- cgit v1.2.3 From 234dd276cf03be6fd6961473e9d9c8f35deec682 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 14 Aug 2016 10:37:51 +0200 Subject: process_unicode: Make the startup overridable Extract out the part of `qk_ucis_start` that inputs the placeholder symbol, and make it weak, so it can be overridden. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 5 +++++ quantum/process_keycode/process_unicode.h | 1 + 2 files changed, 6 insertions(+) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index d714344117..c474483e7f 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -75,6 +75,11 @@ void qk_ucis_start(void) { qk_ucis_state.count = 0; qk_ucis_state.in_progress = true; + qk_ucis_start_user(); +} + +__attribute__((weak)) +void qk_ucis_start_user(void) { unicode_input_start(); register_hex(0x2328); unicode_input_finish(); diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index c5005897e0..75607e40e8 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -37,6 +37,7 @@ struct { extern const qk_ucis_symbol_t ucis_symbol_table[]; void qk_ucis_start(void); +void qk_ucis_start_user(void); void qk_ucis_symbol_fallback (void); bool process_ucis (uint16_t keycode, keyrecord_t *record); -- cgit v1.2.3 From a312cbf712764277e0dbbbb99410c2f6fc6c7484 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 14 Aug 2016 14:34:52 +0200 Subject: process_unicode: Use uint32_t for UCIS purposes Use a single uint32_t to store the unicode of a symbol, instead of an array of uint16_ts. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 12 +++++++++--- quantum/process_keycode/process_unicode.h | 7 ++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index c474483e7f..698cc3c025 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -60,6 +60,14 @@ void register_hex(uint16_t hex) { } } +void register_hex32(uint32_t hex) { + for(int i = 7; i >= 0; i--) { + uint8_t digit = ((hex >> (i*8)) & 0xF); + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + } +} + bool process_unicode(uint16_t keycode, keyrecord_t *record) { if (keycode > QK_UNICODE && record->event.pressed) { uint16_t unicode = keycode & 0x7FFF; @@ -156,9 +164,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { for (i = 0; ucis_symbol_table[i].symbol; i++) { if (is_uni_seq (ucis_symbol_table[i].symbol)) { symbol_found = true; - for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) { - register_hex(ucis_symbol_table[i].codes[j]); - } + register_hex32(ucis_symbol_table[i].code); break; } } diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 75607e40e8..dd6dd71384 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -12,6 +12,7 @@ void set_unicode_input_mode(uint8_t os_target); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); +void register_hex32(uint32_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); @@ -22,7 +23,7 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record); typedef struct { char *symbol; - uint16_t codes[4]; + uint32_t code; } qk_ucis_symbol_t; struct { @@ -31,8 +32,8 @@ struct { bool in_progress:1; } qk_ucis_state; -#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, {}}} -#define UCIS_SYM(name, ...) {name, {__VA_ARGS__, 0}} +#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, 0}} +#define UCIS_SYM(name, code) {name, code} extern const qk_ucis_symbol_t ucis_symbol_table[]; -- cgit v1.2.3 From 43d08629cf275d0b32281ffe8785258fff226b49 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Mon, 15 Aug 2016 10:02:05 +0200 Subject: process_unicode: Replace register_hex32 It turns out that register_hex32 did not work reliably, and some systems only allow 7 chars after the unicode magic sequence, while others allow 8. To remedy the situation, store the codes as strings, and type those in instead of doing bit shifting magic. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 37 +++++++++++++++++++++++-------- quantum/process_keycode/process_unicode.h | 8 +++---- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 698cc3c025..d8a0f667cd 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -60,14 +60,6 @@ void register_hex(uint16_t hex) { } } -void register_hex32(uint32_t hex) { - for(int i = 7; i >= 0; i--) { - uint8_t digit = ((hex >> (i*8)) & 0xF); - register_code(hex_to_keycode(digit)); - unregister_code(hex_to_keycode(digit)); - } -} - bool process_unicode(uint16_t keycode, keyrecord_t *record) { if (keycode > QK_UNICODE && record->event.pressed) { uint16_t unicode = keycode & 0x7FFF; @@ -120,6 +112,33 @@ void qk_ucis_symbol_fallback (void) { } } +void register_ucis(const char *hex) { + for(int i = 0; hex[i]; i++) { + uint8_t kc = 0; + char c = hex[i]; + + switch (c) { + case '0': + kc = KC_0; + break; + case '1' ... '9': + kc = c - '1' + KC_1; + break; + case 'a' ... 'f': + kc = c - 'a' + KC_A; + break; + case 'A' ... 'F': + kc = c - 'A' + KC_A; + break; + } + + if (kc) { + register_code (kc); + unregister_code (kc); + } + } +} + bool process_ucis (uint16_t keycode, keyrecord_t *record) { uint8_t i; @@ -164,7 +183,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { for (i = 0; ucis_symbol_table[i].symbol; i++) { if (is_uni_seq (ucis_symbol_table[i].symbol)) { symbol_found = true; - register_hex32(ucis_symbol_table[i].code); + register_ucis(ucis_symbol_table[i].code + 2); break; } } diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index dd6dd71384..be24ddc2bb 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -12,7 +12,6 @@ void set_unicode_input_mode(uint8_t os_target); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); -void register_hex32(uint32_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); @@ -23,7 +22,7 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record); typedef struct { char *symbol; - uint32_t code; + char *code; } qk_ucis_symbol_t; struct { @@ -32,14 +31,15 @@ struct { bool in_progress:1; } qk_ucis_state; -#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, 0}} -#define UCIS_SYM(name, code) {name, code} +#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, NULL}} +#define UCIS_SYM(name, code) {name, #code} extern const qk_ucis_symbol_t ucis_symbol_table[]; void qk_ucis_start(void); void qk_ucis_start_user(void); void qk_ucis_symbol_fallback (void); +void register_ucis(const char *hex); bool process_ucis (uint16_t keycode, keyrecord_t *record); #endif -- cgit v1.2.3 From e8845f0daf8dc7a7674dc5420cc5a684bbbea09b Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Mon, 15 Aug 2016 10:07:13 +0200 Subject: process_unicode: Introduce a slight delay When entering unicode codes, use some delay, so the OS has time to process the information. This is not needed on all systems, but some seem to require it. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 4 ++++ quantum/process_keycode/process_unicode.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index d8a0f667cd..72c809c30e 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -37,6 +37,7 @@ void unicode_input_start (void) { unregister_code(KC_PPLS); break; } + wait_ms(UNICODE_TYPE_DELAY); } void unicode_input_finish (void) { @@ -109,6 +110,7 @@ void qk_ucis_symbol_fallback (void) { uint8_t code = qk_ucis_state.codes[i]; register_code(code); unregister_code(code); + wait_ms(UNICODE_TYPE_DELAY); } } @@ -135,6 +137,7 @@ void register_ucis(const char *hex) { if (kc) { register_code (kc); unregister_code (kc); + wait_ms (UNICODE_TYPE_DELAY); } } } @@ -172,6 +175,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { for (i = qk_ucis_state.count; i > 0; i--) { register_code (KC_BSPC); unregister_code (KC_BSPC); + wait_ms(UNICODE_TYPE_DELAY); } if (keycode == KC_ESC) { diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index be24ddc2bb..85364e8eb3 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -8,6 +8,10 @@ #define UC_WIN 2 #define UC_BSD 3 +#ifndef UNICODE_TYPE_DELAY +#define UNICODE_TYPE_DELAY 10 +#endif + void set_unicode_input_mode(uint8_t os_target); void unicode_input_start(void); void unicode_input_finish(void); -- cgit v1.2.3 From 8e2d69d5a27adfb3ec1e288e8099a408ac72bc84 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 15 Aug 2016 06:28:39 -0700 Subject: Adding u/treasuredfrog's hack to use LT() with the RAISE and LOWER macros. --- keyboards/planck/keymaps/xyverz/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c index 90529428da..6d10083fee 100644 --- a/keyboards/planck/keymaps/xyverz/keymap.c +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -27,8 +27,8 @@ enum planck_keycodes { COLEMAK, DVORAK, PLOVER, - LOWER, - RAISE, + LOWER = LT(_LOWER, KC_BSPC), + RAISE = LT(_RAISE, KC_ENT), BACKLIT, EXT_PLV }; @@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } }, @@ -225,7 +225,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - return false; + //return false; break; case RAISE: if (record->event.pressed) { @@ -235,7 +235,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - return false; + //return false; break; case BACKLIT: if (record->event.pressed) { @@ -311,4 +311,4 @@ void music_scale_user(void) PLAY_NOTE_ARRAY(music_scale, false, 0); } -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 5c5c3e626b7f2e4a5835988c069c7154f347c4ca Mon Sep 17 00:00:00 2001 From: Xyverz Date: Mon, 15 Aug 2016 06:57:24 -0700 Subject: Adding KC_BSPC to the LT() macro for LOWER resulted in a backspace stroke being sent if the LOWER key was used too quickly. Switching back to original LOWER macro, but keeping the new RAISE macro. --- keyboards/planck/keymaps/xyverz/keymap.c | 62 +++-------------------------- keyboards/planck/keymaps/xyverz/makefile.mk | 4 +- 2 files changed, 7 insertions(+), 59 deletions(-) diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c index 6d10083fee..e57746e6ac 100644 --- a/keyboards/planck/keymaps/xyverz/keymap.c +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -19,18 +19,15 @@ extern keymap_config_t keymap_config; #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 -#define _PLOVER 5 #define _ADJUST 16 enum planck_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, - PLOVER, - LOWER = LT(_LOWER, KC_BSPC), + LOWER, RAISE = LT(_RAISE, KC_ENT), - BACKLIT, - EXT_PLV + BACKLIT }; // Fillers to make layering more clear @@ -129,30 +126,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} }, -/* Plover layer (http://opensteno.org) - * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | - * `-----------------------------------------------------------------------------------' - */ - -[_PLOVER] = { - {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, - {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, - {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} -}, - /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. * | | Reset| | | | | | | | | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -161,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -175,8 +153,6 @@ float tone_startup[][2] = SONG(STARTUP_SOUND); float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); -float tone_plover[][2] = SONG(PLOVER_SOUND); -float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float tone_goodbye[][2] = SONG(GOODBYE_SOUND); @@ -225,7 +201,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - //return false; + return false; break; case RAISE: if (record->event.pressed) { @@ -248,34 +224,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case PLOVER: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - stop_all_notes(); - PLAY_NOTE_ARRAY(tone_plover, false, 0); - #endif - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; - case EXT_PLV: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); - #endif - layer_off(_PLOVER); - } - return false; - break; } return true; } diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk index 0f4953888d..93a89bb4ab 100644 --- a/keyboards/planck/keymaps/xyverz/makefile.mk +++ b/keyboards/planck/keymaps/xyverz/makefile.mk @@ -9,10 +9,10 @@ MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = yes # Audio output on port C6 +AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -- cgit v1.2.3 From f89aec98aebc3831e4c51acd5990b2025efc7758 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 20:32:45 +0200 Subject: removed my personal stuff --- keyboards/satan/keymaps/iso_split_rshift/.gitignore | 3 +++ keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 keyboards/satan/keymaps/iso_split_rshift/.gitignore delete mode 100755 keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh diff --git a/keyboards/satan/keymaps/iso_split_rshift/.gitignore b/keyboards/satan/keymaps/iso_split_rshift/.gitignore new file mode 100644 index 0000000000..4d652661c6 --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/.gitignore @@ -0,0 +1,3 @@ +updatemerge.sh +clear_flash.hex +resetboard.sh diff --git a/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh b/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh deleted file mode 100755 index d17ec76ecd..0000000000 --- a/keyboards/satan/keymaps/iso_split_rshift/updatemerge.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -git checkout iso_split_rshift # gets you "on branch dmgr2" -git fetch origin # gets you up to date with origin -git merge origin/master -- cgit v1.2.3 From ca4968bc44c39eb50752a289224568e27fce8281 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 20:46:38 +0200 Subject: readme.md added --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 keyboards/satan/keymaps/iso_split_rshift/readme.md diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md new file mode 100644 index 0000000000..25ef62b57c --- /dev/null +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -0,0 +1,16 @@ +toneman77's Satan Layout +===================== + +##Quantum MK Firmware +For the full Quantum feature list, see the parent readme.md. + +* heavily modified ISO (!) layout with split right shift key +* spaceFn +* Dual-Role keys: +* Lockable layer for LED functions and numpad +* WS2812 RGB Underglow Support (not needed anymore to solder directly to the atmega) + + +### Additional Credits +Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) + -- cgit v1.2.3 From 77f3efbef6cc19ffd1b0b4cd3813285a18031de1 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 20:59:50 +0200 Subject: more information. first steps in markdown --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 25ef62b57c..411dbce32c 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -7,10 +7,24 @@ For the full Quantum feature list, see the parent readme.md. * heavily modified ISO (!) layout with split right shift key * spaceFn * Dual-Role keys: + | Original key | when tapped | when held | + | ---------------- | ------------- | ------------- | + | Space | Space | layer change | + | Caps lock | Escape | Control | + | Tab | Tab | layer change | + | Enter | Enter | Control | * Lockable layer for LED functions and numpad +* vim-style arrow keys on hjkl (spacefn layer) +* corresponding Home/PgDn/PgUp/End on hjkl (tab layer) +* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift +* more bonus arrow keys on wasd (spacefn layer) +* media keys prev/next/play/vol+/vol- (spacefn layer) +* formware bootloader button * WS2812 RGB Underglow Support (not needed anymore to solder directly to the atmega) +* additional brackets that only work in german layout due to horrible placement +in the default qwertz layout ### Additional Credits Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) - +ce visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) -- cgit v1.2.3 From 5cf5e27dcd908ca538208292491e11cd00e38c57 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:02:07 +0200 Subject: Update readme.md attempt to prettify the table --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 411dbce32c..862b44eb1c 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -7,12 +7,14 @@ For the full Quantum feature list, see the parent readme.md. * heavily modified ISO (!) layout with split right shift key * spaceFn * Dual-Role keys: +* | Original key | when tapped | when held | | ---------------- | ------------- | ------------- | | Space | Space | layer change | | Caps lock | Escape | Control | | Tab | Tab | layer change | | Enter | Enter | Control | + * Lockable layer for LED functions and numpad * vim-style arrow keys on hjkl (spacefn layer) * corresponding Home/PgDn/PgUp/End on hjkl (tab layer) -- cgit v1.2.3 From 14de76ea8079321ab97f0f187d6f598886171540 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:02:40 +0200 Subject: Update readme.md typo --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 862b44eb1c..65dd26bbef 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -29,4 +29,4 @@ in the default qwertz layout ### Additional Credits Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) -ce visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) +nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) -- cgit v1.2.3 From 94ff9c9fa54749ebcf6eb06f9c1b27076c7e23b4 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:04:11 +0200 Subject: more prettyness --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 65dd26bbef..53db781881 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -28,5 +28,5 @@ in the default qwertz layout ### Additional Credits -Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) -nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) +* Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) +* nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) -- cgit v1.2.3 From 396b59f256d8cbf77d359a2b9677f9f7b1d0a021 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:12:49 +0200 Subject: readme now with picture --- .../satan/keymaps/iso_split_rshift/LEDpinSatan.jpg | Bin 0 -> 793980 bytes keyboards/satan/keymaps/iso_split_rshift/readme.md | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg diff --git a/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg new file mode 100644 index 0000000000..7616693f9d Binary files /dev/null and b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg differ diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 53db781881..c08cddba23 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -30,3 +30,5 @@ in the default qwertz layout ### Additional Credits * Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan) * nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) +* no-need-to-solder-on-chip picture: +![no need to solder directly on the chip anymore](LEDpinSatan.jpg) -- cgit v1.2.3 From b8cbf7c9c0766b1f51373368bc3644b2c48c598f Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:18:25 +0200 Subject: script now waits for the user to press the button --- keyboards/satan/keymaps/iso_split_rshift/build.sh | 28 +++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh index 9523f6716f..6b4b4568f5 100755 --- a/keyboards/satan/keymaps/iso_split_rshift/build.sh +++ b/keyboards/satan/keymaps/iso_split_rshift/build.sh @@ -1,16 +1,40 @@ #!/bin/bash # adjust for cpu # -j 16 gave best result on a hyperthreaded quad core core i7 + +LIMIT=10 THREADS="-j 16" KMAP=iso_split_rshift + echo "We need sudo later" sudo ls 2>&1 /dev/null + +function wait_bootloader { + echo "Waiting for Bootloader..." + local STARTTIME=$(date +"%s") + local REMIND=0 + local EXEC=dfu-programmer + local TARGET=atmega32u4 + while true + do + sudo $EXEC $TARGET get > /dev/null 2>&1 + [ $? -eq 0 ] && break + ENDTIME=$(date +"%s") + DURATION=$(($ENDTIME-$STARTTIME)) + if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ] + then + echo "Did you forget to press the reset button?" + REMIND=1 + fi + sleep 1 + done +} make clean make KEYMAP=${KMAP} ${THREADS} if [[ $? -eq 0 ]] then - echo "please trigger flashing! you have 5 seconds" - sleep 5 + echo "please trigger flashing!" + wait_bootloader sudo make KEYMAP=${KMAP} dfu ${THREADS} else echo "make failed" -- cgit v1.2.3 From 7e1be3ae7c5b1839ce03fcedcc180e19836d3200 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:44:20 +0200 Subject: reference to reddit post and Terry Mathews --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index c08cddba23..1eec0e13eb 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -32,3 +32,5 @@ in the default qwertz layout * nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) * no-need-to-solder-on-chip picture: ![no need to solder directly on the chip anymore](LEDpinSatan.jpg) +* special thanks to /u/TerryMathews who suggested the pin PB2 so soldering +directly on the atmega is not needed anymore [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra) -- cgit v1.2.3 From 68005ce60232c487a6b2ff78925c070881c240b5 Mon Sep 17 00:00:00 2001 From: Toni Date: Mon, 15 Aug 2016 21:47:07 +0200 Subject: grammar --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 1eec0e13eb..116ae9160a 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -33,4 +33,4 @@ in the default qwertz layout * no-need-to-solder-on-chip picture: ![no need to solder directly on the chip anymore](LEDpinSatan.jpg) * special thanks to /u/TerryMathews who suggested the pin PB2 so soldering -directly on the atmega is not needed anymore [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra) +directly on the atmega is not needed anymore. Happened on [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra) -- cgit v1.2.3 From faa3fd48aefb6b9386852b23eb433bafb413755b Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Mon, 15 Aug 2016 22:57:26 +0200 Subject: Minor changes to felix keymap --- keyboards/s60-x/keymaps/felix/Makefile | 8 +++--- keyboards/s60-x/keymaps/felix/config.h | 14 ++++++++++ keyboards/s60-x/keymaps/felix/keymap.c | 49 +++++++++++++++++++++++++--------- 3 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 keyboards/s60-x/keymaps/felix/config.h diff --git a/keyboards/s60-x/keymaps/felix/Makefile b/keyboards/s60-x/keymaps/felix/Makefile index 251e4631d3..6a078bcc3f 100644 --- a/keyboards/s60-x/keymaps/felix/Makefile +++ b/keyboards/s60-x/keymaps/felix/Makefile @@ -2,12 +2,12 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) +CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 diff --git a/keyboards/s60-x/keymaps/felix/config.h b/keyboards/s60-x/keymaps/felix/config.h new file mode 100644 index 0000000000..6c01d579f8 --- /dev/null +++ b/keyboards/s60-x/keymaps/felix/config.h @@ -0,0 +1,14 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// keymap needs oneshot functionality +#undef NO_ACTION_ONESHOT + +#undef IS_COMMAND +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c index 9c620527b0..6e40d4839f 100644 --- a/keyboards/s60-x/keymaps/felix/keymap.c +++ b/keyboards/s60-x/keymaps/felix/keymap.c @@ -20,6 +20,26 @@ along with this program. If not, see . #define _______ KC_TRNS #define XXXXXXX KC_NO +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 1 + +//Special keycodes for better readability +//SpaceFN +//OneShot LeftShift +//GamingMode Lock (disables SpaceFn and OneShot LShift) +//Function +#define KC_SPACEFN KC_FN0 +#define KC_OSLS KC_FN3 +#define KC_GMLK KC_FN1 +#define KC_FUNC KC_FN2 + +enum function_codes { + F_SPACEFN = 0, + F_OSLS = 3, + F_GMLK = 1, + F_FUNC = 2 +}; + enum layer_names { DEFAULT, GAMING, @@ -52,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | * |-----------------------------------------------------------| - * |Shift | Y| X| C| V| B| N| M| ,| .| /| Up |RSft| + * |Shift OS| Y| X| C| V| B| N| M| ,| .| /| Up |RSft| * |-----------------------------------------------------------| * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| * `-----------------------------------------------------------' @@ -61,8 +81,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, 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_NUHS, KC_ENT, \ - KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ - KC_FN2, KC_LGUI, KC_LALT, KC_FN0, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), + KC_OSLS, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ + KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT + ), /* Layout 1: Gaming Layer, SpaceFn disabled * ,-----------------------------------------------------------. @@ -72,7 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | | | | | | | | | | | | | | * |-----------------------------------------------------------| - * | | | | | | | | | | | | |Fn1 | + * |SFTnonOS| | | | | | | | | | | |Fn1 | * |-----------------------------------------------------------| * | | NOP| | Space | | | | | * `-----------------------------------------------------------' @@ -81,8 +102,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_FN1, \ - _______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______), + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \ + _______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______ + ), /* Layout 2: Function Layer * ,-----------------------------------------------------------. @@ -92,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * | | | | |Vl-|Mut|Vl+| | | | | |PEnt | * |-----------------------------------------------------------| - * | | | | | |Cal| | | | |Pau |PUp |Fn1 | + * | CpsLck | | | | |Cal| | | | |Pau |PUp |Fn1 | * |-----------------------------------------------------------| * | | | | | |Home|PDn |End | * `-----------------------------------------------------------' @@ -101,17 +123,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \ _______, _______, KC_C_WM, KC_C_EM, KC_MPRV, KC_MPLY, KC_MNXT, KC_C_UM, KC_C_IM, KC_C_OM, _______, KC_PSCR, KC_SLCK, KC_PAUS, \ _______, KC_C_AM, KC_C_SM, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_PENT, \ - _______, KC_C_YM, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_FN1, \ - _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + KC_CAPS, KC_C_YM, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), }; /* * Fn action definition */ const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), /* SpaceFn layout 1 */ - [1] = ACTION_LAYER_TOGGLE(1), /* Disable SpaceFn */ - [2] = ACTION_LAYER_MOMENTARY(2) /* SpaceFn layout 1 */ + [F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), // SpaceFn layout 1 + [F_GMLK] = ACTION_LAYER_TOGGLE(1), // Disable SpaceFn and Oneshot Shift + [F_FUNC] = ACTION_LAYER_MOMENTARY(2), // SpaceFn layout 1 + [F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -119,7 +143,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; - void matrix_init_user(void) { } -- cgit v1.2.3 From f5ed3e5155474e1fefee41374dc8b09ed114a67e Mon Sep 17 00:00:00 2001 From: Matt <7395051@gmail.com> Date: Mon, 15 Aug 2016 17:26:01 -0500 Subject: Added my custom Planck layout called Circuit. * Layout has image and readme, as well as documentation in the code. --- keyboards/planck/keymaps/circuit/Makefile | 25 ++ keyboards/planck/keymaps/circuit/Readme.md | 44 ++++ keyboards/planck/keymaps/circuit/config.h | 91 ++++++++ .../planck/keymaps/circuit/keyboard-layout.png | Bin 0 -> 154368 bytes keyboards/planck/keymaps/circuit/keymap.c | 258 +++++++++++++++++++++ 5 files changed, 418 insertions(+) create mode 100644 keyboards/planck/keymaps/circuit/Makefile create mode 100644 keyboards/planck/keymaps/circuit/Readme.md create mode 100644 keyboards/planck/keymaps/circuit/config.h create mode 100644 keyboards/planck/keymaps/circuit/keyboard-layout.png create mode 100644 keyboards/planck/keymaps/circuit/keymap.c diff --git a/keyboards/planck/keymaps/circuit/Makefile b/keyboards/planck/keymaps/circuit/Makefile new file mode 100644 index 0000000000..1ed0ff9568 --- /dev/null +++ b/keyboards/planck/keymaps/circuit/Makefile @@ -0,0 +1,25 @@ + +# Build Options +# change to "no" to disable the options, or define them in the makefile.mk in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/circuit/Readme.md b/keyboards/planck/keymaps/circuit/Readme.md new file mode 100644 index 0000000000..cbdf5de4e5 --- /dev/null +++ b/keyboards/planck/keymaps/circuit/Readme.md @@ -0,0 +1,44 @@ +##Design goals: +1. Arrow keys always available. +2. As close to a to my US layout 107-key QWERTY keyboard as I could manage, (i.e. as few arbitrary decisions as possible). +3. Togglable DVORAK keyboard. +4. most frequently used things in the easiest to reach places. +5. Ability to game on it, just for fun. + +My layout differs from most in the placement the ARROW keys, `ESC`, VOL keys, use of double-tap `CAPS`, and the GAME LOCK function. + +I put the layer buttons in the usual spots. I originally wanted only function/symbols layer, but that proved detrimental. I use some timed press actions to save some space, but this has been accounted for, (see GAME LOCK below). I'm not fully satisfied with the current product (see NOTES below), so it may change in the future. + +##Effective layers: +* Default later is obviously your letters and modifiers. +* Lower layer [NUMBER] is your numbers and punctuation. +* Upper layer [ACTION] is your symbols and actions. +* Function layer is the infrequently used function keys, layout toggle, game lock, and reset. + +There is also a toggle for the DVORAK/QWERTY layers, but in normal typing this is not of concern. + +###Special keys: +* `RSHFT` and `ENTER` are combined. Tap once for `ENTER` and hold for `RSHFT`. `ENTER` will be registered on release if released within 200 ms, else `RSHFT` is registered starting at 201 ms until release. +* If for some reason, this interferes with the normal usage of the `ENTER` key in any way, (some problem that may never happen), I have added a regular non-modified `ENTER` key on the same key in the [ACTION] layer. +* `LSHFT` and `CAPS` are also combined. The key works like a normal `LSHFT` unless double-tapped, in which case it counts as `CAPS`. This functionality unfortunately delays all key presses by at most 200 ms, but I have added ways to disable this both temporarily or permanently, described below. +* A failsafe `CAPS` key is on the same key in the [ACTION] layer. +* There are `UNDO`, `CUT`, `COPY`, and `PASTE` keys. This was intended to be a universal way to use these commands since in macOS cut is `⌘ + C` but in Windows it is `⌃ + C`. Unfortunately these special keys only work in Windows. ¯\\\_(ツ)\_/¯ + +##Game lock: +**TL;DR** the game lock toggle disables the double-tap `CAPS`, and disables `GUI` keys (WINDOWS key). + +I wished for this keyboard to be fully usable in the most demanding of games. The most demanding game I know of is ARMA 3 which has a binding to practically every individual key of a 107-key keyboard. This means I need to have pretty much every key possible somewhere. I also wanted the keyboard to be responsive in games for every critical keypress. This means having a way to disable features that introduce an inherent delay to registering keys, such as double-tap. + +I do not expect to see this used by the pros, but I enjoyed making it. As for use in ARMA 3, I got a little ways into the APEX campaign, but I found a few flaws. For Example, I cannot enable my HUD GPS since that requires `RCTRL`+`M` but `RCTRL` is not bound. The obvious fix is to rebind the action to a new key, but I still take this as a shortcoming of my layout. + +###If you wish to disable double-tap +####Disable it temporarily +Turn on the game lock. While on, it registers as normal `LSHFT` and has no delay. Whether in game mode or not, `CAPS` is on the same key in the [ACTION] layer. + +####Disable it permanently +Open the `Makefile` and set `TAP_DANCE_ENABLE = no`. I wrote the layout to compensate for this change, and no further changes to the code should be necessary. Whether or not it's disabled, `CAPS` is on the same key in the [ACTION] layer. + +##Notes: +* `ALT` and `GUI` are reversed compared to the normal US layout. I will also be using my Planck on my mac, and that's the standard in the Apple ecosystem. I may add a special compiler flag in the future to swap the two. +* The DVORAK `Z` key is to the right of the `S` key instead of under it as part of a compromise I made to keep the ARROW keys available on the default layer. I prioritize the ARROW keys, so the DVORAK layout is the one to suffer. +* I also support the little tones that the default Planck layout features, identical to them too, (minus those for layouts I don't support). To enable it, open the `Makefile` and set `AUDIO_ENABLE = yes`. diff --git a/keyboards/planck/keymaps/circuit/config.h b/keyboards/planck/keymaps/circuit/config.h new file mode 100644 index 0000000000..22244f4a7f --- /dev/null +++ b/keyboards/planck/keymaps/circuit/config.h @@ -0,0 +1,91 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* Tap-dance interval definition */ +#define TAPPING_TERM 200 + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Planck Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#ifdef SUBPROJECT_rev3 + #include "rev3/config.h" +#endif +#ifdef SUBPROJECT_rev4 + #include "rev4/config.h" +#endif + +#endif diff --git a/keyboards/planck/keymaps/circuit/keyboard-layout.png b/keyboards/planck/keymaps/circuit/keyboard-layout.png new file mode 100644 index 0000000000..e9296a6d97 Binary files /dev/null and b/keyboards/planck/keymaps/circuit/keyboard-layout.png differ diff --git a/keyboards/planck/keymaps/circuit/keymap.c b/keyboards/planck/keymaps/circuit/keymap.c new file mode 100644 index 0000000000..5096decb9b --- /dev/null +++ b/keyboards/planck/keymaps/circuit/keymap.c @@ -0,0 +1,258 @@ +// Layout picture at http://www.keyboard-layout-editor.com/#/gists/125febfad6960add078e6f14256539b6 + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _DVORAK 1 +#define _LOCKED 2 +#define _NUMBER 3 +#define _ACTION 4 +#define _FUNCTN 5 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + DVORAK, + NUMBER, + ACTION +}; + +// Key code names +#define SFT_ENT FUNC(0) // Tap for enter, hold for right shift +#define LOCK FUNC(1) +#define KC_PSTE KC_PASTE +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#ifdef TAP_DANCE_ENABLE +#define SFT_CAP TD(0) // Left shift, double tap for caps +#endif +#ifndef TAP_DANCE_ENABLE +#define SFT_CAP KC_LSFT // Regular left shift +#endif + +// Tap Dance Definitions +#ifdef TAP_DANCE_ENABLE +const qk_tap_dance_action_t tap_dance_actions[] = { + [0] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) +}; +#endif + +// Function definitions +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), + [1] = ACTION_LAYER_TOGGLE(_LOCKED) +}; + +// Layout definitions +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | BKSP | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |*Shift| Z | X | C | V | B | N | M | , | . | Up |SftEnt| + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl | Alt | Cmd | Vol- | ACTN | Space | NUMS | Vol+ | Left | Down | Left | + * `-----------------------------------------------------------------------------------' + */ +[_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}, + {SFT_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SFT_ENT}, + {KC_LCTL, KC_LALT, KC_LGUI, KC_VOLD, ACTION, KC_SPC, KC_SPC, NUMBER, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT} +}, + +/* DVORAK + * ,-----------------------------------------------------------------------------------. + * | | ' | , | . | P | Y | F | G | C | R | L | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | A | O | E | U | I | D | H | T | N | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ; | Q | J | K | X | B | M | W | V | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______}, + {_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_Z }, + {_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* LOCK + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| | | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | NULL | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_LOCKED] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* NUMBERS + * ,-----------------------------------------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ~ | NULL | NULL | NULL | | | _ | + | { | } | ? | / | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ` | NULL | NULL | NULL | \ | - | = | [ | ] | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | NULL | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_NUMBER] = { + {_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______}, + {_______, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_QUES, KC_SLSH}, + {_______, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, _______}, + {_______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______} +}, + +/* ACTIONS + * ,-----------------------------------------------------------------------------------. + * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CAPS | Undo | Cut | Copy | Paste| NULL | NULL | NULL | NULL | NULL | PgUp | Enter| + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | Mute | | NULL | | NULL | Home | PgDn | End | + * `-----------------------------------------------------------------------------------' + */ +[_ACTION] = { + {_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_CAPS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_ENT }, + {_______, _______, _______, KC_MUTE, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_HOME, KC_PGDN, KC_END } +}, + +/* FUNCTIONS + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | NULL | NULL | NULL | NULL | NULL |QWERTY|DVORAK| NULL | NULL | NULL | NULL | NULL | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Reset| NULL | Lock | NULL | | NULL | | NULL | NULL | NULL | NULL | + * `-----------------------------------------------------------------------------------' + */ +[_FUNCTN] = { + {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_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24 }, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY, DVORAK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {RESET, XXXXXXX, LOCK, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +} + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + if (IS_LAYER_ON(_DVORAK)) { +#ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); +#endif + layer_off(_DVORAK); + } + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + if (!IS_LAYER_ON(_DVORAK)) { +#ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); +#endif + layer_on(_DVORAK); + } + } + return false; + break; + case NUMBER: + if (record->event.pressed) { + layer_on(_NUMBER); + update_tri_layer(_NUMBER, _ACTION, _FUNCTN); + } else { + layer_off(_NUMBER); + update_tri_layer(_NUMBER, _ACTION, _FUNCTN); + } + return false; + break; + case ACTION: + if (record->event.pressed) { + layer_on(_ACTION); + update_tri_layer(_NUMBER, _ACTION, _FUNCTN); + } else { + layer_off(_ACTION); + update_tri_layer(_NUMBER, _ACTION, _FUNCTN); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { +#ifdef AUDIO_ENABLE + startup_user(); +#endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif -- cgit v1.2.3 From 5abb05ca402a3ffbce1d4a0a7e3e4eba1ebc9d1b Mon Sep 17 00:00:00 2001 From: premek Date: Tue, 16 Aug 2016 00:44:58 +0200 Subject: premek split layout --- keyboards/planck/keymaps/premek/Makefile | 25 ++++ keyboards/planck/keymaps/premek/keymap.c | 231 ++++++++++++++++++++++++++++++ keyboards/planck/keymaps/premek/readme.md | 2 + 3 files changed, 258 insertions(+) create mode 100644 keyboards/planck/keymaps/premek/Makefile create mode 100644 keyboards/planck/keymaps/premek/keymap.c create mode 100644 keyboards/planck/keymaps/premek/readme.md diff --git a/keyboards/planck/keymaps/premek/Makefile b/keyboards/planck/keymaps/premek/Makefile new file mode 100644 index 0000000000..0f4953888d --- /dev/null +++ b/keyboards/planck/keymaps/premek/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/premek/keymap.c b/keyboards/planck/keymaps/premek/keymap.c new file mode 100644 index 0000000000..9b212ab259 --- /dev/null +++ b/keyboards/planck/keymaps/premek/keymap.c @@ -0,0 +1,231 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = { + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DEL, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_LGUI, _______, _______, KC_LALT, LOWER, KC_SPC, KC_ENT, KC_SPC, RAISE, KC_RALT, _______, KC_RGUI} +}, +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_LOWER] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_6, KC_7, KC_8, KC_9, KC_0}, + {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END }, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F12, KC_PLUS, KC_PIPE, KC_LCBR, KC_RCBR}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, +[_RAISE] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {_______, _______, _______, KC_QUOT, KC_MINS, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}, + {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, _______, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/premek/readme.md b/keyboards/planck/keymaps/premek/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/premek/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + -- cgit v1.2.3 From a75d4bd593491ea628a271aaddfc4268a241a68f Mon Sep 17 00:00:00 2001 From: premek Date: Tue, 16 Aug 2016 00:50:35 +0200 Subject: premek split layout --- keyboards/planck/keymaps/premek/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/premek/readme.md b/keyboards/planck/keymaps/premek/readme.md index de9680b498..df6053d6f8 100644 --- a/keyboards/planck/keymaps/premek/readme.md +++ b/keyboards/planck/keymaps/premek/readme.md @@ -1,2 +1,3 @@ -# The Default Planck Layout +# Split Layout +Inspired by TECK -- cgit v1.2.3 From 2ebfdcac404e4898110da40c4d2f86394595246d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vyhnal?= Date: Tue, 16 Aug 2016 01:07:34 +0200 Subject: Update readme.md --- keyboards/planck/keymaps/premek/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/planck/keymaps/premek/readme.md b/keyboards/planck/keymaps/premek/readme.md index df6053d6f8..16debdd632 100644 --- a/keyboards/planck/keymaps/premek/readme.md +++ b/keyboards/planck/keymaps/premek/readme.md @@ -1,3 +1,4 @@ # Split Layout Inspired by TECK +[Layout](http://www.keyboard-layout-editor.com/##@_switchMount=cherry&switchBrand=gateron&switchType=KS-3-Tea&pcb:true%3B&@_c=%23e6e6e6&t=%23757575&a:7&fa@:5%3B%3B&=Esc&_a:4&fa@:5&:0&:0&:0&:0&:0&:0&:0&:0&:5%3B%3B&=%0A%0A!%0A1%0A%0A%0A%0A%0A%0AQ&=%0A%0A%2F@%0A2%0A%0A%0A%0A%0A%0AW&=%0A%0A%23%0A3%0A%0A%0A%0A%0A%0AE&=%0A%0A$%0A4%0A%0A%0A%0A%0A%0AR&=%0A%0A%25%0A5%0A%0A%0A%0A%0A%0AT&_c=%23e3b02d&a:7%3B&=Del&_c=%23e6e6e6&a:4%3B&=%0A%0A%5E%0A6%0A%0A%0A%0A%0A%0AY&=%0A%0A%2F&%0A7%0A%0A%0A%0A%0A%0AU&=%0A%0A*%0A8%0A%0A%0A%0A%0A%0AI&=%0A%0A(%0A9%0A%0A%0A%0A%0A%0AO&=%0A%0A)%0A0%0A%0A%0A%0A%0A%0AP%3B&@_a:7%3B&=Shift&_a:4%3B&=%0A%0A%0AF1%0A%0A%0A%0A%0A%0AA&=%0A%0A%0AF2%0A%0A%0A%0A%0A%0AS&=%0A%0A'%0AF3%0A%0A%0A%0A%0A%0AD&_c=%23e3b02d&n:true%3B&=%0A%0A-%0AF4%0A%0A%0A%0A%0A%0AF&_c=%23e6e6e6%3B&=%0A%0A%0AF5%0A%0A%0A%0A%0A%0AG&_c=%23e3b02d&a:7%3B&=Tab&_c=%23e6e6e6&a:4%3B&=%0A%0A%0AF6%0A%0A%0A%0A%0A%0AH&_c=%23e3b02d&n:true%3B&=%0A%0A%2F&larr%2F%3B%0AHom%0A%0A%0A%0A%0A%0AJ&_c=%23e6e6e6%3B&=%0A%0A%2F&darr%2F%3B%0APgD%0A%0A%0A%0A%0A%0AK&=%0A%0A%2F&uarr%2F%3B%0APgU%0A%0A%0A%0A%0A%0AL&=%0A%0A%2F&rarr%2F%3B%0AEnd%0A%0A%0A%0A%0A%0A%2F%3B%3B&@_a:7%3B&=Ctrl&_a:4%3B&=%0A%0A~%0AF7%0A%0A%0A%0A%0A%0AZ&=%0A%0A%60%0AF8%0A%0A%0A%0A%0A%0AX&=%0A%0A+%0AF9%0A%0A%0A%0A%0A%0AC&=%0A%0A%2F=%0AF10%0A%0A%0A%0A%0A%0AV&=%0A%0A%7C%0AF11%0A%0A%0A%0A%0A%0AB&_c=%23e3b02d&a:7%3B&=BSp&_c=%23e6e6e6&a:4%3B&=%0A%0A%5C%0AF12%0A%0A%0A%0A%0A%0AN&=%0A%0A%5B%0A%0A%0A%0A%0A%0A%0AM&=%0A%0A%5D%0A%0A%0A%0A%0A%0A%0A,&=%0A%0A%7B%0A%0A%0A%0A%0A%0A%0A.&=%0A%0A%7D%0A%0A%0A%0A%0A%0A%0A%2F%2F%3B&@_a:7%3B&=&=&=&=Alt&_c=%23e3b02d%3B&=%2F&dArr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&crarr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&uArr%2F%3B&_c=%23e6e6e6%3B&=Alt&=&=) -- cgit v1.2.3 From b1ac91a040a464b595b819417fb1a04c5f9d8926 Mon Sep 17 00:00:00 2001 From: Toni Date: Tue, 16 Aug 2016 16:32:42 +0200 Subject: big cleanup and minor refactoring. thanks iFreilicht. --- keyboards/satan/keymaps/iso_split_rshift/Makefile | 27 +++---- keyboards/satan/keymaps/iso_split_rshift/config.h | 7 +- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 53 +++++++++---- keyboards/satan/keymaps/iso_split_rshift/satan.c | 30 ------- keyboards/satan/keymaps/iso_split_rshift/satan.h | 96 ----------------------- keyboards/satan/satan.h | 27 +++++++ 6 files changed, 77 insertions(+), 163 deletions(-) delete mode 100644 keyboards/satan/keymaps/iso_split_rshift/satan.c delete mode 100644 keyboards/satan/keymaps/iso_split_rshift/satan.h diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile index e25515b692..9187df44c8 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/Makefile +++ b/keyboards/satan/keymaps/iso_split_rshift/Makefile @@ -1,18 +1,15 @@ -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE = no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/satan/keymaps/iso_split_rshift/config.h b/keyboards/satan/keymaps/iso_split_rshift/config.h index 39eec4b597..5e79e07f51 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/config.h +++ b/keyboards/satan/keymaps/iso_split_rshift/config.h @@ -20,12 +20,7 @@ along with this program. If not, see . #include "../../config.h" - +// only change #define RGB_DI_PIN B2 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 8 // Number of LEDs -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 #endif diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index 68cc6755e1..f04036d103 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -13,8 +13,29 @@ #define _TAB 2 #define _SFX 3 +// dual-role shortcuts +#define TABDUAL LT(_TAB, KC_TAB) +#define CAPSDUAL CTL_T(KC_ESC) +#define SPACEDUAL LT(_SPC, KC_SPACE) +#define ENTERDUAL CTL_T(KC_ENT) +// arrow cluster duality bottom right corner +#define ARRLEFT ALT_T(KC_LEFT) +#define ARRDOWN GUI_T(KC_DOWN) +#define ARRUP SFT_T(KC_UP) +#define ARRRIGHT CTL_T(KC_RIGHT) +// german brackets +#define GER_CUR_L RALT(KC_7) // [ +#define GER_CUR_R RALT(KC_9) // ] +#define GER_PAR_L LSFT(KC_8) // ( +#define GER_PAR_R LSFT(KC_9) // ) +#define GER_ANG_L KC_NUBS // < +#define GER_ANG_R LSFT(KC_NUBS) // > +#define GER_BRC_L RALT(KC_8) // [ +#define GER_BRC_R RALT(KC_9) // ] + // increase readability #define _______ KC_TRNS +#define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _DEF: Default Layer @@ -31,11 +52,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' LEFT DWN RIGHT */ [_DEF] = KEYMAP_ISO_SPLITRSHIFT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - LT(_TAB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - CTL_T(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_NUHS, CTL_T(KC_ENT), \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), SFT_T(KC_UP), \ - KC_LCTL, KC_LGUI, KC_LALT, LT(_SPC,KC_SPACE), KC_RALT, ALT_T(KC_LEFT), GUI_T(KC_DOWN), CTL_T(KC_RIGHT)), + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), ARRUP, \ + KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) * ,-----------------------------------------------------------. @@ -51,11 +72,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_SPC] = KEYMAP_ISO_SPLITRSHIFT( - KC_PSCR, 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_PAUS, KC_UP, RALT(KC_8), RALT(KC_9), _______, _______, LSFT(KC_8), LSFT(KC_9), _______, _______, _______, _______, _______, \ - _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ - _______, _______, _______, _______, KC_NUBS, LSFT(KC_NUBS), KC_SPACE,M(0), _______, _______, _______, _______, _______, KC_VOLU, \ - _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + KC_PSCR, 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_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ + _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, _______, KC_VOLU, \ + _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) * ,-----------------------------------------------------------. @@ -71,11 +92,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_TAB] = KEYMAP_ISO_SPLITRSHIFT( - KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ - _______, _______, _______, _______, _______, _______, _______, RALT(KC_7), RALT(KC_0), _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ - _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, _______, KC_PGUP, \ - _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ + _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, _______, KC_PGUP, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) * ,-----------------------------------------------------------. @@ -93,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SFX] = KEYMAP_ISO_SPLITRSHIFT( RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \ - _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, KC_NO, KC_ENT, \ + _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \ _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, _______, KC_UP, \ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), }; diff --git a/keyboards/satan/keymaps/iso_split_rshift/satan.c b/keyboards/satan/keymaps/iso_split_rshift/satan.c deleted file mode 100644 index d2c5d5c205..0000000000 --- a/keyboards/satan/keymaps/iso_split_rshift/satan.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "satan.h" -#include "led.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - matrix_init_user(); - led_init_ports(); -}; - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - matrix_scan_user(); -}; - -void led_init_ports(void) { - // * Set our LED pins as output - DDRB |= (1<<2); -} - -void led_set_kb(uint8_t usb_led) { - if (usb_led & (1< Date: Tue, 16 Aug 2016 16:35:57 +0200 Subject: minor grammer fixes --- keyboards/satan/keymaps/iso_split_rshift/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md index 116ae9160a..ec6123d8a7 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/readme.md +++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md @@ -21,7 +21,7 @@ For the full Quantum feature list, see the parent readme.md. * bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift * more bonus arrow keys on wasd (spacefn layer) * media keys prev/next/play/vol+/vol- (spacefn layer) -* formware bootloader button +* firmware bootloader button * WS2812 RGB Underglow Support (not needed anymore to solder directly to the atmega) * additional brackets that only work in german layout due to horrible placement in the default qwertz layout @@ -32,5 +32,5 @@ in the default qwertz layout * nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) * no-need-to-solder-on-chip picture: ![no need to solder directly on the chip anymore](LEDpinSatan.jpg) -* special thanks to /u/TerryMathews who suggested the pin PB2 so soldering +* special thanks to /u/TerryMathews who suggested the pin PB2, so soldering directly on the atmega is not needed anymore. Happened on [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra) -- cgit v1.2.3 From deedd2f40890807931d45422aab2beef702925c4 Mon Sep 17 00:00:00 2001 From: Toni Date: Tue, 16 Aug 2016 16:44:12 +0200 Subject: in accordance to keymap_makefile_example.mk --- keyboards/satan/keymaps/iso_split_rshift/Makefile | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile index 9187df44c8..d1e07da3fc 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/Makefile +++ b/keyboards/satan/keymaps/iso_split_rshift/Makefile @@ -1,15 +1,15 @@ -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID ifndef QUANTUM_DIR include ../../../../Makefile -- cgit v1.2.3 From 8e142d8cbe8a749878d6b8ee5b6316341f1dfbb6 Mon Sep 17 00:00:00 2001 From: Toni Date: Tue, 16 Aug 2016 17:35:03 +0200 Subject: no more warning thanks to iFreilicht's tip with undef --- keyboards/satan/keymaps/iso_split_rshift/config.h | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/satan/keymaps/iso_split_rshift/config.h b/keyboards/satan/keymaps/iso_split_rshift/config.h index 5e79e07f51..27c1372da1 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/config.h +++ b/keyboards/satan/keymaps/iso_split_rshift/config.h @@ -21,6 +21,7 @@ along with this program. If not, see . #include "../../config.h" // only change +#undef RGB_DI_PIN #define RGB_DI_PIN B2 #endif -- cgit v1.2.3 From d78058cc75a9b05a6885991506d5f807ebb2a9f9 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 17 Aug 2016 10:28:08 +0200 Subject: tap-dance: Include action_tapping.h for TAPPING_TERM Include `action_tapping.h`, so the keymap does not have to define a `TAPPING_TERM` for us, and we can use the default. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 5429e34383..bab5c4dbd8 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -1,4 +1,5 @@ #include "quantum.h" +#include "action_tapping.h" static qk_tap_dance_state_t qk_tap_dance_state; bool td_debug_enable = false; -- cgit v1.2.3 From 29f64d7a93d941167c6c6e95f893ab84586b2205 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 17 Aug 2016 13:04:50 +0200 Subject: tap-dance: Major rework, to make it more reliable This reworks how the tap-dance feature works: instead of one global state, we have a state for each tap-dance key, so we can cancel them when another tap-dance key is in flight. This fixes #527. Since we have a state for each key, we can avoid situation where a keyup would mess with our global state. This fixes #563. And while here, we also make sure to fire events only once, and this fixes #574. There is one breaking change, though: tap-dance debugging support was removed, because dumping the whole state would increase the firmware size too much. Any keymap that made use of this, will have to be updated (but there's no such keymap in the repo). Also, there's a nice trick used in this rework: we need to iterate through tap_dance_actions in a few places, to check for timeouts, and so on. For this, we'd need to know the size of the array. We can't discover that at compile-time, because tap-dance gets compiled separately. We'd like to avoid having to terminate the list with a sentinel value, because that would require updates to all keymaps that use the feature. So, we keep track of the highest tap-dance code seen so far, and iterate until that index. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/keymap.c | 2 +- keyboards/preonic/keymaps/kinesis/keymap.c | 2 +- quantum/process_keycode/process_tap_dance.c | 121 ++++++++++++++-------------- quantum/process_keycode/process_tap_dance.h | 9 ++- readme.md | 4 +- 5 files changed, 70 insertions(+), 68 deletions(-) diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 244bfb51fe..144030e2e9 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -853,7 +853,7 @@ void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { td_ta->finished_once = false; } -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) ,[CT_TA] = { diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c index 1cd6eb9938..9691be91d9 100644 --- a/keyboards/preonic/keymaps/kinesis/keymap.c +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -123,7 +123,7 @@ void music_scale_user(void) } -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { //Tap once for equal, twice for hyper + X (alfred lock) [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, HYPR(KC_X)), //Tap once for minus, twice for time.heals.nothing diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index bab5c4dbd8..e152f23508 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -1,19 +1,8 @@ #include "quantum.h" #include "action_tapping.h" -static qk_tap_dance_state_t qk_tap_dance_state; -bool td_debug_enable = false; - -#if CONSOLE_ENABLE -#define td_debug(s) if (td_debug_enable) \ - { \ - xprintf ("D:tap_dance:%s:%s = { keycode = %d, count = %d, active = %d, pressed = %d }\n", __FUNCTION__, s, \ - qk_tap_dance_state.keycode, qk_tap_dance_state.count, \ - qk_tap_dance_state.active, qk_tap_dance_state.pressed); \ - } -#else -#define td_debug(s) -#endif +static uint16_t last_td; +static int8_t highest_td = -1; void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) { qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; @@ -36,98 +25,110 @@ void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) { } static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, - void *user_data, - qk_tap_dance_user_fn_t fn) + void *user_data, + qk_tap_dance_user_fn_t fn) { if (fn) { fn(state, user_data); } } -static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t action) +static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t *action) { - td_debug("trigger"); - _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_each_tap); + _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_each_tap); } -static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t action) +static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t *action) { - td_debug("trigger"); - _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_dance_finished); + if (action->state.finished) + return; + action->state.finished = true; + _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished); } -static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t action) +static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action) { - td_debug("trigger") - _process_tap_dance_action_fn (&qk_tap_dance_state, action.user_data, action.fn.on_reset); + _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset); } bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { - bool r = true; uint16_t idx = keycode - QK_TAP_DANCE; - qk_tap_dance_action_t action; + qk_tap_dance_action_t *action; + + if (last_td && last_td != keycode) { + (&tap_dance_actions[last_td - QK_TAP_DANCE])->state.interrupted = true; + } switch(keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - action = tap_dance_actions[idx]; - - process_tap_dance_action_on_each_tap (action); - if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { - process_tap_dance_action_on_dance_finished (action); - } else if (qk_tap_dance_state.active && qk_tap_dance_state.pressed) { - reset_tap_dance (&qk_tap_dance_state); - } else { - r = false; - } + if ((int16_t)idx > highest_td) + highest_td = idx; + action = &tap_dance_actions[idx]; - qk_tap_dance_state.active = true; - qk_tap_dance_state.pressed = record->event.pressed; + action->state.keycode = keycode; + action->state.pressed = record->event.pressed; if (record->event.pressed) { - qk_tap_dance_state.keycode = keycode; - qk_tap_dance_state.timer = timer_read (); - qk_tap_dance_state.count++; + action->state.count++; + action->state.timer = timer_read(); + + if (last_td && last_td != keycode) { + qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE]; + paction->state.interrupted = true; + process_tap_dance_action_on_dance_finished (paction); + reset_tap_dance (&paction->state); + } } + last_td = keycode; + break; default: - if (qk_tap_dance_state.keycode) { - // if we are here, the tap dance was interrupted by a different key - idx = qk_tap_dance_state.keycode - QK_TAP_DANCE; - action = tap_dance_actions[idx]; + if (!record->event.pressed) + return true; + + if (highest_td == -1) + return true; - process_tap_dance_action_on_each_tap (action); + for (int i = 0; i <= highest_td; i++) { + action = &tap_dance_actions[i]; + if (action->state.count == 0) + continue; + action->state.interrupted = true; process_tap_dance_action_on_dance_finished (action); - reset_tap_dance (&qk_tap_dance_state); - qk_tap_dance_state.active = false; + reset_tap_dance (&action->state); } break; } - return r; + return true; } void matrix_scan_tap_dance () { - if (qk_tap_dance_state.active && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { - // if we are here, the tap dance was timed out - uint16_t idx = qk_tap_dance_state.keycode - QK_TAP_DANCE; - qk_tap_dance_action_t action = tap_dance_actions[idx]; + if (highest_td == -1) + return; + + for (int i = 0; i <= highest_td; i++) { + qk_tap_dance_action_t *action = &tap_dance_actions[i]; - process_tap_dance_action_on_dance_finished (action); - reset_tap_dance (&qk_tap_dance_state); + if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) { + process_tap_dance_action_on_dance_finished (action); + reset_tap_dance (&action->state); + } } } void reset_tap_dance (qk_tap_dance_state_t *state) { - uint16_t idx = state->keycode - QK_TAP_DANCE; - qk_tap_dance_action_t action; + qk_tap_dance_action_t *action; if (state->pressed) return; - action = tap_dance_actions[idx]; + action = &tap_dance_actions[state->keycode - QK_TAP_DANCE]; + process_tap_dance_action_on_reset (action); - state->keycode = 0; state->count = 0; - state->active = false; + state->interrupted = false; + state->finished = false; + last_td = 0; } diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 6a1258067e..d7b857bdc6 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -11,8 +11,9 @@ typedef struct uint8_t count; uint16_t keycode; uint16_t timer; - bool active:1; - bool pressed:1; + bool interrupted; + bool pressed; + bool finished; } qk_tap_dance_state_t; #define TD(n) (QK_TAP_DANCE + n) @@ -26,6 +27,7 @@ typedef struct qk_tap_dance_user_fn_t on_dance_finished; qk_tap_dance_user_fn_t on_reset; } fn; + qk_tap_dance_state_t state; void *user_data; } qk_tap_dance_action_t; @@ -48,8 +50,7 @@ typedef struct .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ } -extern const qk_tap_dance_action_t tap_dance_actions[]; -extern bool td_debug_enable; +extern qk_tap_dance_action_t tap_dance_actions[]; /* To be used internally */ diff --git a/readme.md b/readme.md index e2221e7496..8c07a5d1fa 100644 --- a/readme.md +++ b/readme.md @@ -431,7 +431,7 @@ enum { }; //Tap Dance Definitions -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { //Tap once for Esc, twice for Caps Lock [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) // Other declarations would go here, separated by commas, if you have them @@ -517,7 +517,7 @@ void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) { ergodox_right_led_3_off(); } -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) ,[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset) ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) -- cgit v1.2.3 From c024de4a879cdab04f0473c29c6e9c4f6f28cbae Mon Sep 17 00:00:00 2001 From: Toni Date: Wed, 17 Aug 2016 15:33:14 +0200 Subject: wring keypress for german iso fixed. prettified --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index f04036d103..bc5bfe2e63 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -14,18 +14,18 @@ #define _SFX 3 // dual-role shortcuts -#define TABDUAL LT(_TAB, KC_TAB) -#define CAPSDUAL CTL_T(KC_ESC) +#define TABDUAL LT(_TAB, KC_TAB) +#define CAPSDUAL CTL_T(KC_ESC) #define SPACEDUAL LT(_SPC, KC_SPACE) #define ENTERDUAL CTL_T(KC_ENT) // arrow cluster duality bottom right corner -#define ARRLEFT ALT_T(KC_LEFT) -#define ARRDOWN GUI_T(KC_DOWN) -#define ARRUP SFT_T(KC_UP) +#define ARRLEFT ALT_T(KC_LEFT) +#define ARRDOWN GUI_T(KC_DOWN) +#define ARRUP SFT_T(KC_UP) #define ARRRIGHT CTL_T(KC_RIGHT) // german brackets #define GER_CUR_L RALT(KC_7) // [ -#define GER_CUR_R RALT(KC_9) // ] +#define GER_CUR_R RALT(KC_0) // ] #define GER_PAR_L LSFT(KC_8) // ( #define GER_PAR_R LSFT(KC_9) // ) #define GER_ANG_L KC_NUBS // < -- cgit v1.2.3 From 6bafafc18db88cf6e3f04449bc1b63ba81d90e3c Mon Sep 17 00:00:00 2001 From: Nigel Lundsten Date: Wed, 17 Aug 2016 14:00:47 -0700 Subject: fix ergodox link (again?) /ergodox/ez is a broken link, seems like the ez stuff is at /ergodox --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e2221e7496..c4f3a9fe2d 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http * [Planck](/keyboards/planck/) * [Preonic](/keyboards/preonic/) * [Atomic](/keyboards/atomic/) -* [ErgoDox EZ](/keyboards/ergodox/ez/) +* [ErgoDox EZ](/keyboards/ergodox) * [Clueboard](/keyboards/clueboard/) * [Cluepad](/keyboards/cluepad/) -- cgit v1.2.3 From 3e1d1420186277237b872574164d38d264644ebe Mon Sep 17 00:00:00 2001 From: Nigel Lundsten Date: Wed, 17 Aug 2016 14:01:27 -0700 Subject: trailing slash --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c4f3a9fe2d..353c74611e 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http * [Planck](/keyboards/planck/) * [Preonic](/keyboards/preonic/) * [Atomic](/keyboards/atomic/) -* [ErgoDox EZ](/keyboards/ergodox) +* [ErgoDox EZ](/keyboards/ergodox/) * [Clueboard](/keyboards/clueboard/) * [Cluepad](/keyboards/cluepad/) -- cgit v1.2.3 From e3486caf870b4e4adf915f490e3905d4e24ce2ac Mon Sep 17 00:00:00 2001 From: Xyverz Date: Wed, 17 Aug 2016 14:54:05 -0700 Subject: Create readme.md --- keyboards/ergodox/keymaps/xyverz/readme.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 keyboards/ergodox/keymaps/xyverz/readme.md diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md new file mode 100644 index 0000000000..9cb22bde6a --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -0,0 +1,5 @@ +# PLEASE NOTE + +## This keymap is optomised for the EZ and Original ergodox. + +It will need modification in order to work on the Infinity. -- cgit v1.2.3 From ef95c10c6659ecc5e23b126d9ac4f3b2d169efb2 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Wed, 17 Aug 2016 14:55:01 -0700 Subject: Update readme.md --- keyboards/ergodox/keymaps/xyverz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 9cb22bde6a..22e771b091 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -2,4 +2,4 @@ ## This keymap is optomised for the EZ and Original ergodox. -It will need modification in order to work on the Infinity. +It will need **substantial** modification in order to work on the Infinity. -- cgit v1.2.3 From 644c8c79271db8cf1bd934b9a80a0215585e46e7 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 18 Aug 2016 01:34:05 +0200 Subject: Fix the process_record_nocache function This function relies on checking the disable_action_cache static variable before accessing the layer cache. --- quantum/quantum.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index a4c5c2ddbc..cb1ba04ffb 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -46,18 +46,20 @@ bool process_record_quantum(keyrecord_t *record) { uint16_t keycode; #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) - uint8_t layer; + /* TODO: Use store_or_get_action() or a similar function. */ + if (!disable_action_cache) { + uint8_t layer; - if (record->event.pressed) { - layer = layer_switch_get_layer(key); - update_source_layers_cache(key, layer); - } else { - layer = read_source_layers_cache(key); - } - keycode = keymap_key_to_keycode(layer, key); - #else - keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key); + if (record->event.pressed) { + layer = layer_switch_get_layer(key); + update_source_layers_cache(key, layer); + } else { + layer = read_source_layers_cache(key); + } + keycode = keymap_key_to_keycode(layer, key); + } else #endif + keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key); // This is how you use actions here // if (keycode == KC_LEAD) { -- cgit v1.2.3 From 39e8e61258b51a2c33a94dd877e983f0b1dae0c1 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 18 Aug 2016 01:37:13 +0200 Subject: Implement the dynamic macros that are recorded in runtime --- quantum/dynamic_macro.h | 226 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 quantum/dynamic_macro.h diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h new file mode 100644 index 0000000000..a3ad61bc7e --- /dev/null +++ b/quantum/dynamic_macro.h @@ -0,0 +1,226 @@ +/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */ +#ifndef DYNAMIC_MACROS_H +#define DYNAMIC_MACROS_H + +#include "action_layer.h" + +#ifndef DYNAMIC_MACRO_SIZE +/* May be overridden with a custom value. Be aware that the effective + * macro length is half of this value: each keypress is recorded twice + * because of the down-event and up-event. This is not a bug, it's the + * intended behavior. */ +#define DYNAMIC_MACRO_SIZE 256 +#endif + +/* DYNAMIC_MACRO_RANGE must be set as the last element of user's + * "planck_keycodes" enum prior to including this header. This allows + * us to 'extend' it. + */ +enum dynamic_macro_keycodes { + DYN_REC_START1 = DYNAMIC_MACRO_RANGE, + DYN_REC_START2, + DYN_MACRO_PLAY1, + DYN_MACRO_PLAY2, +}; + +/* Blink the LEDs to notify the user about some event. */ +void dynamic_macro_led_blink(void) +{ + backlight_toggle(); + _delay_ms(100); + backlight_toggle(); +} + +/** + * Start recording of the dynamic macro. + * + * @param[out] macro_pointer The new macro buffer iterator. + * @param[in] macro_buffer The macro buffer used to initialize macro_pointer. + */ +void dynamic_macro_record_start( + keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) +{ + dynamic_macro_led_blink(); + + clear_keyboard(); + layer_clear(); + *macro_pointer = macro_buffer; +} + +/** + * Play the dynamic macro. + * + * @param macro_buffer[in] The beginning of the macro buffer being played. + * @param macro_end[in] The element after the last macro buffer element. + * @param direction[in] Either +1 or -1, which way to iterate the buffer. + */ +void dynamic_macro_play( + keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) +{ + uint32_t saved_layer_state = layer_state; + + clear_keyboard(); + layer_clear(); + + while (macro_buffer != macro_end) { + process_record(macro_buffer); + macro_buffer += direction; + } + + clear_keyboard(); + + layer_state = saved_layer_state; +} + +/** + * Record a single key in a dynamic macro. + * + * @param macro_pointer[in,out] The current buffer position. + * @param macro_end2[in] The end of the other macro which shouldn't be overwritten. + * @param direction[in] Either +1 or -1, which way to iterate the buffer. + * @param record[in] The current keypress. + */ +void dynamic_macro_record_key( + keyrecord_t **macro_pointer, + keyrecord_t *macro_end2, + int8_t direction, + keyrecord_t *record) +{ + if (*macro_pointer + direction != macro_end2) { + **macro_pointer = *record; + *macro_pointer += direction; + } else { + /* Notify about the end of buffer. The blinks are paired + * because they should happen on both down and up events. */ + backlight_toggle(); + } +} + +/** + * End recording of the dynamic macro. Essentially just update the + * pointer to the end of the macro. + */ +void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end) +{ + dynamic_macro_led_blink(); + + *macro_end = macro_pointer; +} + +/* Handle the key events related to the dynamic macros. Should be + * called from process_record_user() like this: + * + * bool process_record_user(uint16_t keycode, keyrecord_t *record) { + * if (!process_record_dynamic_macro(keycode, record)) { + * return false; + * } + * <...THE REST OF THE FUNCTION...> + * } + */ +bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) +{ + /* Both macros use the same buffer but read/write on different + * ends of it. + * + * Macro1 is written left-to-right starting from the beginning of + * the buffer. + * + * Macro2 is written right-to-left starting from the end of the + * buffer. + * + * ¯o_buffer macro_end + * v v + * +------------------------------------------------------------+ + * |>>>>>> MACRO1 >>>>>>| |<<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<| + * +------------------------------------------------------------+ + * ^ ^ + * r_macro_end r_macro_buffer + * + * During the recording when one macro encounters the end of the + * other macro, the recording is stopped. Apart from this, there + * are no arbitrary limits for the macros' length in relation to + * each other: for example one can either have two medium sized + * macros or one long macro and one short macro. Or even one empty + * and one using the whole buffer. + */ + static keyrecord_t macro_buffer[DYNAMIC_MACRO_SIZE]; + + /* Pointer to the first buffer element after the first macro. + * Initially points to the very beginning of the buffer since the + * macro is empty. */ + static keyrecord_t *macro_end = macro_buffer; + + /* The other end of the macro buffer. Serves as the beginning of + * the second macro. */ + static keyrecord_t *const r_macro_buffer = macro_buffer + DYNAMIC_MACRO_SIZE - 1; + + /* Like macro_end but for the second macro. */ + static keyrecord_t *r_macro_end = r_macro_buffer; + + /* A persistent pointer to the current macro position (iterator) + * used during the recording. */ + static keyrecord_t *macro_pointer = NULL; + + /* 0 - no macro is being recorded right now + * 1,2 - either macro 1 or 2 is being recorded */ + static uint8_t macro_id = 0; + + if (macro_id == 0) { + /* No macro recording in progress. */ + if (!record->event.pressed) { + switch (keycode) { + case DYN_REC_START1: + dynamic_macro_record_start(¯o_pointer, macro_buffer); + macro_id = 1; + return false; + case DYN_REC_START2: + dynamic_macro_record_start(¯o_pointer, r_macro_buffer); + macro_id = 2; + return false; + case DYN_MACRO_PLAY1: + dynamic_macro_play(macro_buffer, macro_end, +1); + return false; + case DYN_MACRO_PLAY2: + dynamic_macro_play(r_macro_buffer, r_macro_end, -1); + return false; + } + } + } else { + /* A macro is being recorded right now. */ + switch (keycode) { + case MO(_DYN): + /* Use the layer key used to access the macro recording as + * a stop button. */ + if (record->event.pressed) { /* Ignore the initial release + * just after the recoding + * starts. */ + switch (macro_id) { + case 1: + dynamic_macro_record_end(macro_pointer, ¯o_end); + break; + case 2: + dynamic_macro_record_end(macro_pointer, &r_macro_end); + break; + } + macro_id = 0; + } + return false; + default: + /* Store the key in the macro buffer and process it normally. */ + switch (macro_id) { + case 1: + dynamic_macro_record_key(¯o_pointer, r_macro_end, +1, record); + break; + case 2: + dynamic_macro_record_key(¯o_pointer, macro_end, -1, record); + break; + } + return true; + break; + } + } + + return true; +} + +#endif -- cgit v1.2.3 From 950755edaf766a420376f8d11ac47ab087e7fa99 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 18 Aug 2016 01:40:54 +0200 Subject: Add the dynamic macros documentation to the readme --- readme.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/readme.md b/readme.md index e2221e7496..5252de5dff 100644 --- a/readme.md +++ b/readme.md @@ -695,6 +695,49 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste. +## Dynamic macros: record and replay macros in runtime + +In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 128 keypresses. + +To enable them, first add a new element to the `planck_keycodes` enum -- `DYNAMIC_MACRO_RANGE`: + + enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV, + DYNAMIC_MACRO_RANGE, + }; + +Afterwards create a new layer called `_DYN`: + + #define _DYN 6 /* almost any other free number should be ok */ + +Below these two modifications include the `dynamic_macro.h` header: + + #include "dynamic_macro.h"` + +Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_REC_PLAY1`,`DYN_REC_START2` and `DYN_REC_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. + + [_DYN]= { + {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + }, + +Add the following code to the very beginning of your `process_record_user()` function: + + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + +The usage should be pretty self-explanatory. For the details, please read the comments in the `dynamic_macro.h` header. + ## 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: -- cgit v1.2.3 From 47beb763e824341c82ad2f9e23b57ecbd4e38308 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:05:24 -0700 Subject: Returned RAISE and LOWER buttons to their original functions - too many inopportune ENTER inputs. :-( --- keyboards/planck/keymaps/xyverz/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c index e57746e6ac..192933b181 100644 --- a/keyboards/planck/keymaps/xyverz/keymap.c +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -26,7 +26,7 @@ enum planck_keycodes { COLEMAK, DVORAK, LOWER, - RAISE = LT(_RAISE, KC_ENT), + RAISE, BACKLIT }; @@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DVORAK] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } }, @@ -211,7 +211,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - //return false; + return false; break; case BACKLIT: if (record->event.pressed) { -- cgit v1.2.3 From 035290b7d84e1f2c4d473d585b66e1dde9b3bdee Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:22:56 -0700 Subject: Added a readme, tidied up comments in the keymap. --- keyboards/ergodox/keymaps/xyverz/keymap.c | 53 ++++++------- keyboards/ergodox/keymaps/xyverz/readme.md | 123 ++++++++++++++++++++++++++++- 2 files changed, 147 insertions(+), 29 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c index c5ce99dd22..7a16367bfa 100644 --- a/keyboards/ergodox/keymaps/xyverz/keymap.c +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -1,4 +1,10 @@ /* + * PLEASE NOTE: This keymap will NOT work with the Infinity ErgoDox due to the fact that the mappings are + * based on the Matrix Layout in the ez.h file. If you want to use this for the infinity, you'll need to + * figure out where the keys are in the matrix and redo the layout arrays below. + * + * About this keymap: + * * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner * keys. I've decided to continue using this layout with my ErgoDox. @@ -33,8 +39,9 @@ extern keymap_config_t keymap_config; #define COLEMAK M(_CM) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Dvorak layer - * + +[_DV] = { // layer 0 : Dvorak +/* * ,--------------------------------------------------. ,--------------------------------------------------. * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| @@ -55,9 +62,6 @@ 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_* -[_DV] = { // layer 0 : Dvorak // left hand {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, @@ -77,8 +81,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO } }, -/* Keymap 1: QWERTY layer - * + +[_QW] = { // layer 1 : QWERTY +/* * ,--------------------------------------------------. ,--------------------------------------------------. * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| @@ -98,9 +103,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | End | | PgDn | | | * `--------------------' `--------------------' */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[_QW] = { // layer 1 : QWERTY // left hand {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, @@ -120,8 +122,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } }, -/* Keymap 2: Colemak layer - * + +[_CM] = { // layer 2 : Colemak +/* * ,--------------------------------------------------. ,--------------------------------------------------. * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| @@ -141,9 +144,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | End | | PgDn | | | * `--------------------' `--------------------' */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[_CM] = { // layer 2 : Colemak // left hand {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO }, {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, @@ -163,15 +163,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } }, -/* Keymap 3: Symbol Layer - * + +[_MD] = { // layer 3 : Media layer +/* * ,--------------------------------------------------. ,--------------------------------------------------. * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | PrSc | ScLk | Paus | | FN4 | | FN5 | | Mute | Vol- | Vol+ | | | + * | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | - * |--------+------+------+------+------+------| FN4 | | FN5 |------+------+------+------+------+--------| + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | | | | @@ -184,8 +185,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ -// Media Layer -[_MD] = { // layer 3 : Media layer // left hand {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }, {KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, @@ -205,15 +204,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO } }, -/* Keymap 4: Keypad layer - * + +[_KP] = { // layer 4 : Keypad layer +/* * ,--------------------------------------------------. ,--------------------------------------------------. * | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Sleep | | | | | | FN5 | | FN4 | | KP 7 | KP 8 | KP 9 | KP + | | + * | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | - * |--------+------+------+------+------+------| FN5 | | FN4 |------+------+------+------+------+--------| + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | KP 0 | | KP . |KP Ent| | @@ -226,8 +226,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ -// Keypad Layer -[_KP] = { // layer 4 : Keypad layer // left hand {KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, KC_TRNS, KC_NO }, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, @@ -247,6 +245,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO } }, + }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 22e771b091..42ae8fe539 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -1,5 +1,124 @@ -# PLEASE NOTE +# Xyverz's ErgoDox EZ Keymap -## This keymap is optomised for the EZ and Original ergodox. +## Please Note: It will need **substantial** modification in order to work on the Infinity. + +PLEASE NOTE: This keymap will NOT work with the Infinity ErgoDox due to the fact that the mappings are based on the Matrix Layout in the ez.h file. If you want to use this for the infinity, you'll need to figure out where the keys are in the matrix and redo the layout arrays below. + +## About this keymap: + +The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox. + +The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional keys as shown in the diagrams. The Colemak layout is merely an adaptation of that. + +I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts. + +For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the keymap is defined, beginning on line 81. + +### Layer 0: Dvorak layer + +,--------------------------------------------------. ,--------------------------------------------------. +| ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | +|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| +| LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' + +### Layer 1: QWERTY layer + +,--------------------------------------------------. ,--------------------------------------------------. +| = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | +|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' + +### Keymap 2: Colemak layer + +,--------------------------------------------------. ,--------------------------------------------------. +| = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | +|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' + +### layer 3 : Media layer + +,--------------------------------------------------. ,--------------------------------------------------. +| TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | |Dvorak|Qwerty|Colemk| | | | | | | | | | | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' + + + +### Keymap 4: Keypad layer + +,--------------------------------------------------. ,--------------------------------------------------. +| Power | | | | | | | | | | NmLk | KP / | KP| KP - | | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | KP 0 | | KP . |KP Ent| | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' -- cgit v1.2.3 From 4dd641a128aa93f9decec3387b7c34a01007eb4a Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:27:54 -0700 Subject: Hopefully this fixes the layout diagrams. --- keyboards/ergodox/keymaps/xyverz/readme.md | 182 ++++++++++++++--------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 42ae8fe539..8bcf5b3035 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -18,107 +18,107 @@ For a better explanation of the layout matrices shown below, take a look at ../. ### Layer 0: Dvorak layer -,--------------------------------------------------. ,--------------------------------------------------. -| ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | -|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| -| LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | + |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' ### Layer 1: QWERTY layer -,--------------------------------------------------. ,--------------------------------------------------. -| = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | -|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| -| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' - + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' + ### Keymap 2: Colemak layer -,--------------------------------------------------. ,--------------------------------------------------. -| = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | -|--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| -| LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | + |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | LCtr | LAlt | | Ralt | RCtr | + ,------|------|------| |------+------+------. + | | | Home | | PgUp | | | + | BkSp | Del |------| |------| Enter| Space| + | | | End | | PgDn | | | + `--------------------' `--------------------' ### layer 3 : Media layer -,--------------------------------------------------. ,--------------------------------------------------. -| TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | |Dvorak|Qwerty|Colemk| | | | | | | | | | | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' ### Keymap 4: Keypad layer -,--------------------------------------------------. ,--------------------------------------------------. -| Power | | | | | | | | | | NmLk | KP / | KP| KP - | | -|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | -`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | KP 0 | | KP . |KP Ent| | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' + ,--------------------------------------------------. ,--------------------------------------------------. + | Power | | | | | | | | | | NmLk | KP / | KP| KP - | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | KP 0 | | KP . |KP Ent| | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' -- cgit v1.2.3 From 118ad691c46454df8d8aa810190cfa4e21f8952b Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:34:22 -0700 Subject: more formatting changes --- keyboards/ergodox/keymaps/xyverz/readme.md | 180 ++++++++++++++--------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 8bcf5b3035..32e569b38c 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -18,107 +18,107 @@ For a better explanation of the layout matrices shown below, take a look at ../. ### Layer 0: Dvorak layer - ,--------------------------------------------------. ,--------------------------------------------------. - | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | - |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' + ,--------------------------------------------------.,--------------------------------------------------. + | ] | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | [ | + |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| + | Tab | ' | , | . | Y | Y | || | F | G | C | R | L | \ | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | CapsLk | A | O | E | U | I |------||------| D | H | T | N | S | - | + |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | X | || | B | M | W | V | Z | RShift | + `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + `----------------------------------' `----------------------------------' + ,-------------.,-------------. + | LCtr | LAlt || Ralt | RCtr | + ,------|------|------||------+------+------. + | | | Home || PgUp | | | + | BkSp | Del |------||------| Enter| Space| + | | | End || PgDn | | | + `--------------------'`--------------------' ### Layer 1: QWERTY layer - ,--------------------------------------------------. ,--------------------------------------------------. - | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' + ,--------------------------------------------------.,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | || | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | CapsLk | A | S | D | F | G |------||------| H | J | K | L | ; | ' | + |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | || | N | M | , | . | / | RShift | + `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------.,-------------. + | LCtr | LAlt || Ralt | RCtr | + ,------|------|------||------+------+------. + | | | Home || PgUp | | | + | BkSp | Del |------||------| Enter| Space| + | | | End || PgDn | | | + `--------------------'`--------------------' ### Keymap 2: Colemak layer - ,--------------------------------------------------. ,--------------------------------------------------. - | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | - |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | LCtr | LAlt | | Ralt | RCtr | - ,------|------|------| |------+------+------. - | | | Home | | PgUp | | | - | BkSp | Del |------| |------| Enter| Space| - | | | End | | PgDn | | | - `--------------------' `--------------------' + ,--------------------------------------------------.,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| + | Tab | Q | W | F | P | G | || | J | L | U | Y | ; | \ | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | BkSpc | A | R | S | T | D |------||------| H | N | E | I | O | ' | + |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | || | K | M | , | . | / | RShift | + `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------' + | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | + `----------------------------------' `----------------------------------' + ,-------------.,-------------. + | LCtr | LAlt || Ralt | RCtr | + ,------|------|------||------+------+------. + | | | Home || PgUp | | | + | BkSp | Del |------||------| Enter| Space| + | | | End || PgDn | | | + `--------------------'`--------------------' ### layer 3 : Media layer - ,--------------------------------------------------. ,--------------------------------------------------. - | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | | | | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' + ,--------------------------------------------------.,--------------------------------------------------. + | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 || F12 | F6 | F7 | F8 | F9 | F10 | | + |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| + | | | PrSc | ScLk | Paus | | || | | Mute | Vol- | Vol+ | | | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | | | | | | |------||------| Stop | Prev | Play | Next | Sel | | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | | |Dvorak|Qwerty|Colemk| | || | | | | | | | + `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------.,-------------. + | | || | | + ,------|------|------||------+------+------. + | | | || | | | + | | |------||------| | | + | | | || | | | + `--------------------'`--------------------' ### Keymap 4: Keypad layer - ,--------------------------------------------------. ,--------------------------------------------------. - | Power | | | | | | | | | | NmLk | KP / | KP| KP - | | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | - |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | KP 0 | | KP . |KP Ent| | - `----------------------------------' `----------------------------------' - ,-------------. ,-------------. - | | | | | | - ,------|------|------| |------+------+------. - | | | | | | | | - | | |------| |------| | | - | | | | | | | | - `--------------------' `--------------------' + ,--------------------------------------------------.,--------------------------------------------------. + | Power | | | | | | || | | NmLk | KP / | KP| KP - | | + |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| + | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP + | | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | Wake | | | | | |------||------| | KP 4 | KP 5 | KP 6 | KP + | | + |--------+------+------+------+------+------| || |------+------+------+------+------+--------| + | | | | | | | || | | KP 1 | KP 2 | KP 3 |KP Ent| | + `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------' + | | | | | | | KP 0 | | KP . |KP Ent| | + `----------------------------------' `----------------------------------' + ,-------------.,-------------. + | | || | | + ,------|------|------||------+------+------. + | | | || | | | + | | |------||------| | | + | | | || | | | + `--------------------'`--------------------' \ No newline at end of file -- cgit v1.2.3 From eb81978ecbeaa203c20df70c0c4fc56cb816ab6c Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:35:32 -0700 Subject: One last formatting change --- keyboards/ergodox/keymaps/xyverz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 32e569b38c..89ac8cb044 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -105,7 +105,7 @@ For a better explanation of the layout matrices shown below, take a look at ../. ### Keymap 4: Keypad layer ,--------------------------------------------------.,--------------------------------------------------. - | Power | | | | | | || | | NmLk | KP / | KP| KP - | | + | Power | | | | | | || | | NmLk | KP / | KP * | KP - | | |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP + | | |--------+------+------+------+------+------| || |------+------+------+------+------+--------| -- cgit v1.2.3 From aa37a57e0f55694291290f9db61d8ff352d42454 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 00:38:25 -0700 Subject: One last change to the readme. --- keyboards/ergodox/keymaps/xyverz/readme.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 89ac8cb044..2557493239 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -2,9 +2,7 @@ ## Please Note: -It will need **substantial** modification in order to work on the Infinity. - -PLEASE NOTE: This keymap will NOT work with the Infinity ErgoDox due to the fact that the mappings are based on the Matrix Layout in the ez.h file. If you want to use this for the infinity, you'll need to figure out where the keys are in the matrix and redo the layout arrays below. +This keymap will probably **not** work with the Infinity ErgoDox. It will need **substantial** modification in order to work on the Infinity. This is due to the fact that the mappings are based on the matrix positions in the keymap definition in the ez.h file. If you want to use this for the infinity, you'll need to figure out where the keys are in the matrix and redo the layout arrays below. ## About this keymap: -- cgit v1.2.3 From 64ecb1531067f7711a8c48e821eab546f1129757 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 09:56:11 +0200 Subject: corrected the split rshift key to reality fixed my keymap in the process to adjust to that --- keyboards/satan/keymaps/iso_split_rshift/keymap.c | 16 ++++++++-------- keyboards/satan/satan.h | 4 +++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c index bc5bfe2e63..cf938e07d5 100644 --- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c +++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c @@ -52,11 +52,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' LEFT DWN RIGHT */ [_DEF] = KEYMAP_ISO_SPLITRSHIFT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), ARRUP, \ - KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \ + KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) * ,-----------------------------------------------------------. @@ -75,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_PSCR, 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_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ - _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, _______, KC_VOLU, \ + _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \ _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) @@ -95,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ - _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, _______, KC_PGUP, \ + _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) @@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \ _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \ - _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, _______, KC_UP, \ + _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), }; diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index cbc8c91bd3..6b45c955b8 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -74,12 +74,14 @@ * |-----------------------------------------------------------| * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | * `-----------------------------------------------------------' + + swap 3c and 3d. 3c is right of 3d in reality */ #define KEYMAP_ISO_SPLITRSHIFT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ -- cgit v1.2.3 From 07924511f33599267209b1f0d1ebddf400f7987d Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 10:01:46 +0200 Subject: Small changes, renamed keymap Added MicMute Revived all dead keys Removed OS Shift --- keyboards/s60-x/keymaps/ansi_qwertz/Makefile | 21 +++ keyboards/s60-x/keymaps/ansi_qwertz/config.h | 14 ++ keyboards/s60-x/keymaps/ansi_qwertz/keymap.c | 236 +++++++++++++++++++++++++++ keyboards/s60-x/keymaps/felix/Makefile | 21 --- keyboards/s60-x/keymaps/felix/config.h | 14 -- keyboards/s60-x/keymaps/felix/keymap.c | 213 ------------------------ 6 files changed, 271 insertions(+), 248 deletions(-) create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/Makefile create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/config.h create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/keymap.c delete mode 100644 keyboards/s60-x/keymaps/felix/Makefile delete mode 100644 keyboards/s60-x/keymaps/felix/config.h delete mode 100644 keyboards/s60-x/keymaps/felix/keymap.c diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/Makefile b/keyboards/s60-x/keymaps/ansi_qwertz/Makefile new file mode 100644 index 0000000000..6a078bcc3f --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/config.h b/keyboards/s60-x/keymaps/ansi_qwertz/config.h new file mode 100644 index 0000000000..6c01d579f8 --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/config.h @@ -0,0 +1,14 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// keymap needs oneshot functionality +#undef NO_ACTION_ONESHOT + +#undef IS_COMMAND +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c new file mode 100644 index 0000000000..9f59f12fa8 --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c @@ -0,0 +1,236 @@ +/* +Copyright 2016 Julien Pecqueur +Copyright 2016 Felix Uhl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "s60-x.h" + +//make keymap a little easier to read +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 1 + +//uncomment to activate dead keys +//#define DONT_REVIVE_DEADKEYS 1 + +//Function keycodes for better readability +//SpaceFN +//OneShot LeftShift +//GamingMode Lock (disables SpaceFn and OneShot LShift) +//Function +//Mute microphone +#define KC_SPACEFN KC_FN0 +#define KC_OSLS KC_FN3 +#define KC_GMLK KC_FN1 +#define KC_FUNC KC_FN2 +#define MICMUTE RCTL(KC_LCTL) + +enum function_codes { + F_SPACEFN = 0, + F_OSLS = 3, + F_GMLK = 1, + F_FUNC = 2 +}; + +enum layer_names { + DEFAULT, + GAMING, + FUNCTION +}; + +enum languages { + GERMAN +}; + +#define LANGUAGE GERMAN + +enum custom_keycodes { + KC_CM_A = SAFE_RANGE, +// KC_CM_B, + KC_CM_C, +// KC_CM_D, + KC_CM_E, +// KC_CM_F, + KC_CM_G, +// KC_CM_H, + KC_CM_I, +// KC_CM_J, + KC_CM_K, + KC_CM_L, + KC_CM_M, + KC_CM_N, + KC_CM_O, + KC_CM_P, +// KC_CM_Q, + KC_CM_R, + KC_CM_S, +// KC_CM_T, + KC_CM_U, +// KC_CM_V, + KC_CM_W, +// KC_CM_X, +// KC_CM_Y, + KC_CM_Z +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layout 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Z| U| I| O| P| [| ]|BckSp| + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Y| X| C| V| B| N| M| ,| .| /| Up |RSft| + * |-----------------------------------------------------------| + * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| + * `-----------------------------------------------------------' + */ + [DEFAULT] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, 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_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ + KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Layout 1: Gaming Layer, SpaceFn disabled + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | |Fn1 | + * |-----------------------------------------------------------| + * | |RSft| | Space | | | | | + * `-----------------------------------------------------------' + */ + [GAMING] = KEYMAP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \ + _______, KC_RSFT, _______, KC_SPC, _______, _______, _______, _______ + ), + + /* Layout 2: Function Layer + * MicMute requires special software to be installed. Check readme.md for more information + * ,-----------------------------------------------------------. + * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES| + * |-----------------------------------------------------------| + * | | | | |Prv|Ply|Nxt| | | | |Prt|Slk|Pau | + * |-----------------------------------------------------------| + * | | | | |Vl-|Mut|Vl+| | | | | |PEnt | + * |-----------------------------------------------------------| + * | | | | |MicMut|Cal| | | | |Pau |PUp |Fn1 | + * |-----------------------------------------------------------| + * | | | | | |Home|PDn |End | + * `-----------------------------------------------------------' + */ + [FUNCTION] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \ + _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P KC_PSCR, KC_SLCK, KC_PAUS, \ + _______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT, \ + _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), +}; + +/* +* Fn action definition +*/ +const uint16_t PROGMEM fn_actions[] = { + [F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), // SpaceFn layout 1 + [F_GMLK] = ACTION_LAYER_TOGGLE(1), // Disable SpaceFn and Oneshot Shift + [F_FUNC] = ACTION_LAYER_MOMENTARY(2), // SpaceFn layout 1 + [F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +}; + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_german(uint16_t keycode, keyrecord_t *record) { + uint16_t send_code = 0; + if (record->event.pressed) { + switch (keycode) { + case KC_C_AM: + send_code = KC_Q; + break; + case KC_C_OM: + send_code = KC_P; + break; + case KC_C_UM: + send_code = KC_Y; + break; + case KC_C_SM: + send_code = KC_S; + break; + } + + if (send_code == 0) { + return true; + } + else { + register_code(KC_RALT); + register_code(send_code); + unregister_code(send_code); + unregister_code(KC_RALT); + return false; + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + //revive dead keys +#ifndef DONT_REVIVE_DEADKEYS + bool shift_active = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_LSFT)); + bool altgr_active = keyboard_report->mods & (MOD_BIT(KC_RALT)); + if ((keycode == KC_QUOT && !altgr_active) || + keycode == KC_GRV || + (keycode == KC_6 && shift_active)) + { + if (record->event.pressed) { + register_code(keycode); + unregister_code(keycode); + register_code(KC_SPACE); + unregister_code(KC_SPACE); + } + return false; + } +#endif +#if LANGUAGE == GERMAN + return process_german(keycode, record); +#else + return true; +#endif +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/Makefile b/keyboards/s60-x/keymaps/felix/Makefile deleted file mode 100644 index 6a078bcc3f..0000000000 --- a/keyboards/s60-x/keymaps/felix/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/config.h b/keyboards/s60-x/keymaps/felix/config.h deleted file mode 100644 index 6c01d579f8..0000000000 --- a/keyboards/s60-x/keymaps/felix/config.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// keymap needs oneshot functionality -#undef NO_ACTION_ONESHOT - -#undef IS_COMMAND -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -#endif \ No newline at end of file diff --git a/keyboards/s60-x/keymaps/felix/keymap.c b/keyboards/s60-x/keymaps/felix/keymap.c deleted file mode 100644 index 6e40d4839f..0000000000 --- a/keyboards/s60-x/keymaps/felix/keymap.c +++ /dev/null @@ -1,213 +0,0 @@ -/* -Copyright 2016 Julien Pecqueur -Copyright 2016 Felix Uhl - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "s60-x.h" - -//make keymap a little easier to read -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 1 - -//Special keycodes for better readability -//SpaceFN -//OneShot LeftShift -//GamingMode Lock (disables SpaceFn and OneShot LShift) -//Function -#define KC_SPACEFN KC_FN0 -#define KC_OSLS KC_FN3 -#define KC_GMLK KC_FN1 -#define KC_FUNC KC_FN2 - -enum function_codes { - F_SPACEFN = 0, - F_OSLS = 3, - F_GMLK = 1, - F_FUNC = 2 -}; - -enum layer_names { - DEFAULT, - GAMING, - FUNCTION -}; - -enum languages { - GERMAN -}; - -#define LANGUAGE GERMAN - -enum custom_keycodes { - KC_C_AM = SAFE_RANGE, - KC_C_EM, - KC_C_IM, - KC_C_OM, - KC_C_UM, - KC_C_SM, - KC_C_YM, - KC_C_WM -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layout 0: Default Layer - * ,-----------------------------------------------------------. - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del| - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Z| U| I| O| P| [| ]|BckSp| - * |-----------------------------------------------------------| - * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| - * |Shift OS| Y| X| C| V| B| N| M| ,| .| /| Up |RSft| - * |-----------------------------------------------------------| - * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right| - * `-----------------------------------------------------------' - */ - [DEFAULT] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, 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_NUHS, KC_ENT, \ - KC_OSLS, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ - KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT - ), - - /* Layout 1: Gaming Layer, SpaceFn disabled - * ,-----------------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------| - * |SFTnonOS| | | | | | | | | | | |Fn1 | - * |-----------------------------------------------------------| - * | | NOP| | Space | | | | | - * `-----------------------------------------------------------' - */ - [GAMING] = KEYMAP( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \ - _______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______ - ), - - /* Layout 2: Function Layer - * ,-----------------------------------------------------------. - * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES| - * |-----------------------------------------------------------| - * | | | | |Prv|Ply|Nxt| | | | |Prt|Slk|Pau | - * |-----------------------------------------------------------| - * | | | | |Vl-|Mut|Vl+| | | | | |PEnt | - * |-----------------------------------------------------------| - * | CpsLck | | | | |Cal| | | | |Pau |PUp |Fn1 | - * |-----------------------------------------------------------| - * | | | | | |Home|PDn |End | - * `-----------------------------------------------------------' - */ - [FUNCTION] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \ - _______, _______, KC_C_WM, KC_C_EM, KC_MPRV, KC_MPLY, KC_MNXT, KC_C_UM, KC_C_IM, KC_C_OM, _______, KC_PSCR, KC_SLCK, KC_PAUS, \ - _______, KC_C_AM, KC_C_SM, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_PENT, \ - KC_CAPS, KC_C_YM, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \ - _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END - ), -}; - -/* -* Fn action definition -*/ -const uint16_t PROGMEM fn_actions[] = { - [F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), // SpaceFn layout 1 - [F_GMLK] = ACTION_LAYER_TOGGLE(1), // Disable SpaceFn and Oneshot Shift - [F_FUNC] = ACTION_LAYER_MOMENTARY(2), // SpaceFn layout 1 - [F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - return MACRO_NONE; -}; - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_german(uint16_t keycode, keyrecord_t *record) { - uint16_t send_code = 0; - switch (keycode) { - case KC_C_AM: - if (record->event.pressed) { - send_code = KC_Q; - } - break; - - case KC_C_OM: - if (record->event.pressed) { - send_code = KC_P; - } - break; - - case KC_C_UM: - if (record->event.pressed) { - send_code = KC_Y; - } - break; - - case KC_C_SM: - if (record->event.pressed) { - send_code = KC_S; - } - break; - } - - if (send_code == 0) { - return true; - } - else { - register_code(KC_RALT); - register_code(send_code); - unregister_code(send_code); - unregister_code(KC_RALT); - return false; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (keycode == KC_QUOT) { - if (record->event.pressed) { - register_code(KC_QUOT); - unregister_code(KC_QUOT); - register_code(KC_SPACE); - unregister_code(KC_SPACE); - } - return false; - } -#if LANGUAGE == GERMAN - return process_german(keycode, record); -#else - return true; -#endif -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file -- cgit v1.2.3 From 864e26f4399e3531f3672b6494d4f47548829b88 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 10:06:13 +0200 Subject: cleanup, readability , shift swap in ISO_SPLIT_RSHIFT --- keyboards/satan/satan.h | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index 6b45c955b8..33a10292c4 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -3,6 +3,9 @@ #include "quantum.h" +// readability +#define XXX KC_NO + /* Satan GH60 matrix layout * ,-----------------------------------------------------------. * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | @@ -26,11 +29,11 @@ k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \ - {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d}, \ - {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } /* Satan HHKB matrix layout @@ -51,15 +54,15 @@ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ - k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \ - {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ } /* ISO w/ split right shift key matrix layout @@ -70,7 +73,7 @@ * |-----------------------------------------------------------| * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d | * |-----------------------------------------------------------| - * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d | + * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c| * |-----------------------------------------------------------| * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | * `-----------------------------------------------------------' @@ -85,11 +88,11 @@ k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } void matrix_init_user(void); -- cgit v1.2.3 From 2618260b34acade9e3239e6116a94bcfc726c00a Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 10:37:32 +0200 Subject: Documentation overhaul. --- .../docs/KB_US-International-Alternative.png | Bin 0 -> 54748 bytes .../docs/KB_US-International-Alternative.svg | 1046 +++++++++++++++++++ ...ional-Alternative.svg.2016_08_18_09_06_36.0.svg | 1049 ++++++++++++++++++++ .../ansi_qwertz/docs/KB_US-International.png | Bin 0 -> 54041 bytes .../ansi_qwertz/docs/KB_US-International.svg | 935 +++++++++++++++++ .../s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG | Bin 0 -> 29411 bytes .../keymaps/ansi_qwertz/docs/function_layer.PNG | Bin 0 -> 25567 bytes .../keymaps/ansi_qwertz/docs/gaming_layer.PNG | Bin 0 -> 17895 bytes keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 108 ++ keyboards/s60-x/keymaps/felix/readme.md | 9 - 10 files changed, 3138 insertions(+), 9 deletions(-) create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG create mode 100644 keyboards/s60-x/keymaps/ansi_qwertz/readme.md delete mode 100644 keyboards/s60-x/keymaps/felix/readme.md diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png new file mode 100644 index 0000000000..168780c824 Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png differ diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg new file mode 100644 index 0000000000..f03858993e --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg @@ -0,0 +1,1046 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ˝ + ¯ + ˛ + ˘ + o + . + ˇ + ˙ + + + diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg new file mode 100644 index 0000000000..2304b2a4c3 --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg @@ -0,0 +1,1049 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ˝ + ¯ + ˛ + ˘ + o + . + ˇ + ˙ + + + diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png new file mode 100644 index 0000000000..875eb3652f Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png differ diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg new file mode 100644 index 0000000000..1ca6a9c872 --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg @@ -0,0 +1,935 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG new file mode 100644 index 0000000000..c730c2d65a Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG differ diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG new file mode 100644 index 0000000000..fae2439cab Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG differ diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG new file mode 100644 index 0000000000..59b202be2b Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG differ diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md new file mode 100644 index 0000000000..050040e23c --- /dev/null +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -0,0 +1,108 @@ +# ANSI_QWERTZ + +This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters +with diacritics that are normally not used in the english language. + +It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware. + +##Features + +* Input of letters with diacritics on familiar QWERTZ layout +* Support for ANSI-legend keycaps +* Option to "revive" all dead keys +* SpaceFN for easy access to Function keys and diacritic input +* Locking "Gaming Mode" that disables SpaceFN and allows to bind GUI key in Games +* Reset key binding, no need to press hardware reset button to program +* Microphone Mute key (requires 3rd-party software, see below) + +###Languages + +The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters. +All diacritic characters are input by either holding the Spacebar or the Fn key and pressing the corresponding key. For languages that aren't yet supported explicitly, +one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](#Revive-Dead-Keys). + +The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS. + +![KB_US-International](docs/KB_US-International.png) + +Not all languages are supported by this layout. Linux also offers the "US International Alternative" layout, +which contains more dead keys to input pretty much every diacritic character in a language using latin letters. + +![KB_US-International-Alternative](docs/KB_US-International-Alternative.png) + +####Explicitly Supported Languages + +* German + +####Implicitly Supported Languages + +This list only applys to Windows. Linux systems support all languages, see above. + +This list might be incomplete! Please add your language if you find it's supported. + +* French + +###SpaceFN + +SpaceFN basically means that Space acts as a normal spacebar when tapped, but acts as a layer-key when held down. +This means that you can't hold space to output multiple spaces consecutively and that space only registers once released. +The advantage is that the spacebar is easier to reach than any other Fn-key could be. + +###"Gaming Mode" + +To alleviate the problems SpaceFN would cause when gaming, the Gaming Mode is pretty much a layer that can be turned on by pressing Fn+RShift. +This will turn the double-role Spacebar into a normal one, so the Fn-layer (and thus function and media keys) can only be accessed with the Fn-key. +It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it can be bound in Games. This is especially useful when playing with ESDF instead of WASD. + +###Mute Microphone + +The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function, +you need to set this up in software before using it, see below. This key is bound to `Right Control` + `Left Control`, a keycombination that +no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way. + +####Linux + +Follow [these instructions](http://askubuntu.com/a/13364). + +#####Windows (Requires 3rd Party Software) + +*DISCLAIMER: I take no responsibility for any potential harm caused by third party applications!* + +You'll need a utility called "MicMute". It is available on [Sourceforge](https://sourceforge.net/projects/micmute/). +After installing and running the tool, you only need to use the "Setup Shortcut" option to bind the key to muting the microphone +and check whether your microphone is selected under "Devices". + +###Revive Dead Keys + +Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`. +The dead keys on the regular international layout (shown in red [here](#Languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. +If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling: + +``` +//#define DONT_REVIVE_DEADKEYS 1 +``` + +##Layers + +###Base Layer + +The base layer is shown here for ANSI keys and an HHKB-style right shift. +Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout. + +![base_layer](docs/base_layer.png) + +###Gaming layer + +To turn this layer on, please use the combination Fn+RShift, not Space+Rshift. If you do the latter, the Function layer + +![gaming_layer](docs/gaming_layer.png) + +###Function Layer + +This is the function layer for German diacritics. It can be accessed via the Fn-key or by holding space on the base layer. + +![function_layer](docs/function_layer.png) + + + + diff --git a/keyboards/s60-x/keymaps/felix/readme.md b/keyboards/s60-x/keymaps/felix/readme.md deleted file mode 100644 index 7f083dfd08..0000000000 --- a/keyboards/s60-x/keymaps/felix/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -# A non-US ANSI QWERTZ keymap - -This keymap was specifically designed to support ANSI keycaps while retaining the possibility of inputting characters with diacritics that are normally not used in the english language. - -It relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware. - -Currently, it explicitly supports the following languages, though other languages are readily useable using the AltGr modifier. -- German - -- cgit v1.2.3 From a8659955958a0a7eb94c904469767b6cf5241ccc Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:11:42 +0200 Subject: Fixed pictures and links --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 28 +++++++++++++-------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index 050040e23c..f46c28795b 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -17,9 +17,9 @@ It currently relies on the US-International keyboard layout, which can be instal ###Languages -The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters. -All diacritic characters are input by either holding the Spacebar or the Fn key and pressing the corresponding key. For languages that aren't yet supported explicitly, -one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](#Revive-Dead-Keys). +The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout. +All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly, +one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#Revive-Dead-Keys). The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS. @@ -36,17 +36,15 @@ which contains more dead keys to input pretty much every diacritic character in ####Implicitly Supported Languages -This list only applys to Windows. Linux systems support all languages, see above. - -This list might be incomplete! Please add your language if you find it's supported. +This list only applies to Windows. Linux systems support all languages, see above. This list might be incomplete! Please add your language if you find it's supported. * French ###SpaceFN -SpaceFN basically means that Space acts as a normal spacebar when tapped, but acts as a layer-key when held down. +SpaceFN basically means that `Space` acts as a normal spacebar when tapped, but acts as a layer-key when held down. This means that you can't hold space to output multiple spaces consecutively and that space only registers once released. -The advantage is that the spacebar is easier to reach than any other Fn-key could be. +The advantage is that the spacebar is easier to reach than any other `Fn`-key could be. ###"Gaming Mode" @@ -75,7 +73,7 @@ and check whether your microphone is selected under "Devices". ###Revive Dead Keys Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`. -The dead keys on the regular international layout (shown in red [here](#Languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. +The dead keys on the regular international layout (shown in red [here](readme.md#Languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling: ``` @@ -86,22 +84,22 @@ If you don't want this to be the case, uncomment the following line in `keymap.c ###Base Layer -The base layer is shown here for ANSI keys and an HHKB-style right shift. +The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available. Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout. -![base_layer](docs/base_layer.png) +![base_layer](docs/base_layer.PNG) ###Gaming layer -To turn this layer on, please use the combination Fn+RShift, not Space+Rshift. If you do the latter, the Function layer +To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on. -![gaming_layer](docs/gaming_layer.png) +![gaming_layer](docs/gaming_layer.PNG) ###Function Layer -This is the function layer for German diacritics. It can be accessed via the Fn-key or by holding space on the base layer. +This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer. -![function_layer](docs/function_layer.png) +![function_layer](docs/function_layer.PNG) -- cgit v1.2.3 From c5f13e5836563dc546edea1f14ea74dc3b94fa3f Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:16:10 +0200 Subject: Fixed links again --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index f46c28795b..0938e49c81 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -1,5 +1,7 @@ # ANSI_QWERTZ +[Click here to go to the layers directly.](readme.md#layers) + This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters with diacritics that are normally not used in the english language. @@ -19,7 +21,7 @@ It currently relies on the US-International keyboard layout, which can be instal The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout. All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly, -one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#Revive-Dead-Keys). +one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#revive-dead-keys). The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS. @@ -55,7 +57,7 @@ It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it ca ###Mute Microphone The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function, -you need to set this up in software before using it, see below. This key is bound to `Right Control` + `Left Control`, a keycombination that +you need to set this up in software before using it, see below. This key is bound to `RCtrl+LCtrl`, a keycombination that no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way. ####Linux @@ -73,7 +75,7 @@ and check whether your microphone is selected under "Devices". ###Revive Dead Keys Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`. -The dead keys on the regular international layout (shown in red [here](readme.md#Languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. +The dead keys on the regular international layout (shown in red [here](readme.md#languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling: ``` -- cgit v1.2.3 From 0d28787c5cf2173d12f57b397515f91cffaa820a Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 18 Aug 2016 11:29:53 +0200 Subject: Add a register/unregister_code16 pair of functions These functions register not only the 8bit keycode, but the modifiers too. It doesn't handle the full range of the upper 8bits, just the mods, but that's a good start. Changed the tap-dance pair functions to use these, so one can do: `ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)` ...and that will do the right thing. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 8 +++---- quantum/quantum.c | 37 +++++++++++++++++++++++++++++ quantum/quantum.h | 3 +++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index e152f23508..07de3ecb8f 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -8,9 +8,9 @@ void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) { qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; if (state->count == 1) { - register_code (pair->kc1); + register_code16 (pair->kc1); } else if (state->count == 2) { - register_code (pair->kc2); + register_code16 (pair->kc2); } } @@ -18,9 +18,9 @@ void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) { qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; if (state->count == 1) { - unregister_code (pair->kc1); + unregister_code16 (pair->kc1); } else if (state->count == 2) { - unregister_code (pair->kc2); + unregister_code16 (pair->kc2); } } diff --git a/quantum/quantum.c b/quantum/quantum.c index cb1ba04ffb..e3a20f43e0 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -1,5 +1,42 @@ #include "quantum.h" +static void do_code16 (uint16_t code, void (*f) (uint8_t)) { + switch (code) { + case QK_MODS ... QK_MODS_MAX: + break; + default: + return; + } + + if (code & QK_LCTL) + f(KC_LCTL); + if (code & QK_LSFT) + f(KC_LSFT); + if (code & QK_LALT) + f(KC_LALT); + if (code & QK_LGUI) + f(KC_LGUI); + + if (code & QK_RCTL) + f(KC_RCTL); + if (code & QK_RSFT) + f(KC_RSFT); + if (code & QK_RALT) + f(KC_RALT); + if (code & QK_RGUI) + f(KC_RGUI); +} + +void register_code16 (uint16_t code) { + do_code16 (code, register_code); + register_code (code); +} + +void unregister_code16 (uint16_t code) { + unregister_code (code); + do_code16 (code, unregister_code); +} + __attribute__ ((weak)) bool process_action_kb(keyrecord_t *record) { return true; diff --git a/quantum/quantum.h b/quantum/quantum.h index 6e3fbcc792..0c60466495 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -83,6 +83,9 @@ void reset_keyboard(void); void startup_user(void); void shutdown_user(void); +void register_code16 (uint16_t code); +void unregister_code16 (uint16_t code); + #ifdef BACKLIGHT_ENABLE void backlight_init_ports(void); -- cgit v1.2.3 From 738151d12a6fe947096b974b34e70a8ab62f953c Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:38:04 +0200 Subject: Minor documentation changes --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 42 +++++++++------------------ keyboards/s60-x/readme.md | 7 +++++ 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index 0938e49c81..50651896fd 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -1,27 +1,26 @@ # ANSI_QWERTZ -[Click here to go to the layers directly.](readme.md#layers) +[Click here to go to the layers directly.](readme.md#1.0-layers) This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters with diacritics that are normally not used in the english language. It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware. -##Features - +##0. Features * Input of letters with diacritics on familiar QWERTZ layout * Support for ANSI-legend keycaps * Option to "revive" all dead keys +* Dedicated arrow cluster * SpaceFN for easy access to Function keys and diacritic input * Locking "Gaming Mode" that disables SpaceFN and allows to bind GUI key in Games * Reset key binding, no need to press hardware reset button to program * Microphone Mute key (requires 3rd-party software, see below) -###Languages - +###0.0 Languages The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout. All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly, -one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#revive-dead-keys). +one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#0.4-revive-dead-keys). The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS. @@ -32,73 +31,60 @@ which contains more dead keys to input pretty much every diacritic character in ![KB_US-International-Alternative](docs/KB_US-International-Alternative.png) -####Explicitly Supported Languages - +####0.0.0 Explicitly Supported Languages * German -####Implicitly Supported Languages - +####0.0.1 Implicitly Supported Languages This list only applies to Windows. Linux systems support all languages, see above. This list might be incomplete! Please add your language if you find it's supported. * French -###SpaceFN - +###0.1 SpaceFN SpaceFN basically means that `Space` acts as a normal spacebar when tapped, but acts as a layer-key when held down. This means that you can't hold space to output multiple spaces consecutively and that space only registers once released. The advantage is that the spacebar is easier to reach than any other `Fn`-key could be. -###"Gaming Mode" - +###0.2 "Gaming Mode" To alleviate the problems SpaceFN would cause when gaming, the Gaming Mode is pretty much a layer that can be turned on by pressing Fn+RShift. This will turn the double-role Spacebar into a normal one, so the Fn-layer (and thus function and media keys) can only be accessed with the Fn-key. It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it can be bound in Games. This is especially useful when playing with ESDF instead of WASD. -###Mute Microphone - +###0.3 Mute Microphone The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function, you need to set this up in software before using it, see below. This key is bound to `RCtrl+LCtrl`, a keycombination that no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way. -####Linux - +####0.3.0 Linux Follow [these instructions](http://askubuntu.com/a/13364). -#####Windows (Requires 3rd Party Software) - +#####0.3.1 Windows (Requires 3rd Party Software) *DISCLAIMER: I take no responsibility for any potential harm caused by third party applications!* You'll need a utility called "MicMute". It is available on [Sourceforge](https://sourceforge.net/projects/micmute/). After installing and running the tool, you only need to use the "Setup Shortcut" option to bind the key to muting the microphone and check whether your microphone is selected under "Devices". -###Revive Dead Keys - +###0.4 Revive Dead Keys Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`. -The dead keys on the regular international layout (shown in red [here](readme.md#languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. +The dead keys on the regular international layout (shown in red [here](readme.md#0.1-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling: - ``` //#define DONT_REVIVE_DEADKEYS 1 ``` ##Layers - ###Base Layer - The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available. Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout. ![base_layer](docs/base_layer.PNG) ###Gaming layer - To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on. ![gaming_layer](docs/gaming_layer.PNG) ###Function Layer - This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer. ![function_layer](docs/function_layer.PNG) diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 4bba4b68fa..0c4dc10f80 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -251,3 +251,10 @@ The custom keymap is where I tested all the switches, not being concerned with a ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + +### 9. [ANSI_QWERTZ](keymap/ansi_qwertz/keymap.c) + +This keymap was designed for inputting characters with diacritics with ANSI keycaps. +It provides toggleable SpaceFn functionality, a dedicated arrow cluster and a microphone mute key on the function layer as well as a bootloader reset key. + +For more info, [check here](keymap/ansi_qwertz). \ No newline at end of file -- cgit v1.2.3 From d34c0a2fc1f4da162a06afa76d98e57d864da22c Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:40:05 +0200 Subject: Fixed dead link --- keyboards/s60-x/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 0c4dc10f80..4bf0930e70 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -257,4 +257,4 @@ The custom keymap is where I tested all the switches, not being concerned with a This keymap was designed for inputting characters with diacritics with ANSI keycaps. It provides toggleable SpaceFn functionality, a dedicated arrow cluster and a microphone mute key on the function layer as well as a bootloader reset key. -For more info, [check here](keymap/ansi_qwertz). \ No newline at end of file +For more info, [check here](keymap/ansi_qwertz/readme.md). -- cgit v1.2.3 From aa71ebfbba49727bed275ba07d09f74917a2a6ca Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:41:52 +0200 Subject: Fixed links again Note to self: check before commiting. --- keyboards/s60-x/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 4bf0930e70..099d586991 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -252,9 +252,9 @@ The custom keymap is where I tested all the switches, not being concerned with a │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ -### 9. [ANSI_QWERTZ](keymap/ansi_qwertz/keymap.c) +### 9. [ANSI_QWERTZ](keymaps/ansi_qwertz/keymap.c) This keymap was designed for inputting characters with diacritics with ANSI keycaps. It provides toggleable SpaceFn functionality, a dedicated arrow cluster and a microphone mute key on the function layer as well as a bootloader reset key. -For more info, [check here](keymap/ansi_qwertz/readme.md). +For more info, [check here](keymaps/ansi_qwertz/readme.md). -- cgit v1.2.3 From 406ae1a2eb8ee6e90c2585c522d4fbf26d94e363 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:43:32 +0200 Subject: More link fixing --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index 50651896fd..47e4049c38 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -1,13 +1,13 @@ # ANSI_QWERTZ -[Click here to go to the layers directly.](readme.md#1.0-layers) +[Click here to go to the layers directly.](readme.md#1-layers) This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters with diacritics that are normally not used in the english language. It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware. -##0. Features +##0 Features * Input of letters with diacritics on familiar QWERTZ layout * Support for ANSI-legend keycaps * Option to "revive" all dead keys @@ -72,19 +72,19 @@ If you don't want this to be the case, uncomment the following line in `keymap.c //#define DONT_REVIVE_DEADKEYS 1 ``` -##Layers -###Base Layer +##1 Layers +###1.0 Base Layer The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available. Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout. ![base_layer](docs/base_layer.PNG) -###Gaming layer +###1.1 Gaming layer To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on. ![gaming_layer](docs/gaming_layer.PNG) -###Function Layer +###1.2 Function Layer This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer. ![function_layer](docs/function_layer.PNG) -- cgit v1.2.3 From a72dc6da70923aa6f5127e719529e9631bce20f0 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:45:56 +0200 Subject: Final link fix --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index 47e4049c38..2ed1af1e06 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -20,7 +20,7 @@ It currently relies on the US-International keyboard layout, which can be instal ###0.0 Languages The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout. All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly, -one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#0.4-revive-dead-keys). +one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#04-revive-dead-keys). The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS. @@ -66,7 +66,7 @@ and check whether your microphone is selected under "Devices". ###0.4 Revive Dead Keys Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`. -The dead keys on the regular international layout (shown in red [here](readme.md#0.1-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. +The dead keys on the regular international layout (shown in red [here](readme.md#00-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed. If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling: ``` //#define DONT_REVIVE_DEADKEYS 1 -- cgit v1.2.3 From 73f13c8f26f7f3777cec9d3036628a7dd6021ee9 Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 11:56:44 +0200 Subject: Bugfixes --- keyboards/s60-x/keymaps/ansi_qwertz/keymap.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c index 9f59f12fa8..317a245bef 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c +++ b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c @@ -82,7 +82,7 @@ enum custom_keycodes { // KC_CM_V, KC_CM_W, // KC_CM_X, -// KC_CM_Y, + KC_CM_Y, KC_CM_Z }; @@ -145,7 +145,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [FUNCTION] = KEYMAP( KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \ - _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P KC_PSCR, KC_SLCK, KC_PAUS, \ + _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P, KC_PSCR, KC_SLCK, KC_PAUS, \ _______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT, \ _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END @@ -179,16 +179,16 @@ bool process_german(uint16_t keycode, keyrecord_t *record) { uint16_t send_code = 0; if (record->event.pressed) { switch (keycode) { - case KC_C_AM: + case KC_CM_A: send_code = KC_Q; break; - case KC_C_OM: + case KC_CM_O: send_code = KC_P; break; - case KC_C_UM: + case KC_CM_U: send_code = KC_Y; break; - case KC_C_SM: + case KC_CM_S: send_code = KC_S; break; } @@ -204,6 +204,7 @@ bool process_german(uint16_t keycode, keyrecord_t *record) { return false; } } + return true; } bool process_record_user(uint16_t keycode, keyrecord_t *record) { -- cgit v1.2.3 From dbfb27326bce824ea922410ab02f9f7f54a639ba Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Thu, 18 Aug 2016 12:15:10 +0200 Subject: Added info to docs --- keyboards/s60-x/keymaps/ansi_qwertz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md index 2ed1af1e06..b220106121 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md +++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md @@ -27,7 +27,7 @@ The illustration below shows the "US International" layout available in the Lang ![KB_US-International](docs/KB_US-International.png) Not all languages are supported by this layout. Linux also offers the "US International Alternative" layout, -which contains more dead keys to input pretty much every diacritic character in a language using latin letters. +which contains more dead keys to input pretty much every diacritic character in a language using latin letters. More information can be found [here](http://web.archive.org/web/20160818101234/http://dry.sailingissues.com/us-international-keyboard-layout.html). ![KB_US-International-Alternative](docs/KB_US-International-Alternative.png) -- cgit v1.2.3 From 387bd772e1a6f24be2239b910979c0a309425400 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 13:06:16 +0200 Subject: initial commit for the AMJ60 PCB --- keyboards/amj60/Makefile | 70 ++++++++++ keyboards/amj60/amj60.c | 30 ++++ keyboards/amj60/amj60.h | 153 +++++++++++++++++++++ keyboards/amj60/config.h | 94 +++++++++++++ keyboards/amj60/keymaps/iso_split_rshift/Makefile | 23 ++++ keyboards/amj60/keymaps/iso_split_rshift/build.sh | 42 ++++++ keyboards/amj60/keymaps/iso_split_rshift/keymap.c | 147 ++++++++++++++++++++ .../amj60/keymaps/iso_split_rshift/updatemerge.sh | 4 + 8 files changed, 563 insertions(+) create mode 100644 keyboards/amj60/Makefile create mode 100644 keyboards/amj60/amj60.c create mode 100644 keyboards/amj60/amj60.h create mode 100644 keyboards/amj60/config.h create mode 100644 keyboards/amj60/keymaps/iso_split_rshift/Makefile create mode 100755 keyboards/amj60/keymaps/iso_split_rshift/build.sh create mode 100644 keyboards/amj60/keymaps/iso_split_rshift/keymap.c create mode 100755 keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh diff --git a/keyboards/amj60/Makefile b/keyboards/amj60/Makefile new file mode 100644 index 0000000000..1f695aa4d8 --- /dev/null +++ b/keyboards/amj60/Makefile @@ -0,0 +1,70 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID + +ifndef QUANTUM_DIR + include ../../Makefile +endif diff --git a/keyboards/amj60/amj60.c b/keyboards/amj60/amj60.c new file mode 100644 index 0000000000..993a5917db --- /dev/null +++ b/keyboards/amj60/amj60.c @@ -0,0 +1,30 @@ +#include "amj60.h" +#include "led.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + matrix_init_user(); + led_init_ports(); +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + matrix_scan_user(); +}; + +void led_init_ports(void) { + // * Set our LED pins as output + DDRB |= (1<<2); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6066 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Han Chen +#define PRODUCT AMJ60 +#define DESCRIPTION qmk port of AMJ60 PCB + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5} +#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3} +#define UNUSED_PINS + +#define BACKLIGHT_PIN B6 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 4 + +/* Underlight configuration + */ + +#define RGB_DI_PIN E2 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/amj60/keymaps/iso_split_rshift/Makefile b/keyboards/amj60/keymaps/iso_split_rshift/Makefile new file mode 100644 index 0000000000..0d8416bbce --- /dev/null +++ b/keyboards/amj60/keymaps/iso_split_rshift/Makefile @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/amj60/keymaps/iso_split_rshift/build.sh b/keyboards/amj60/keymaps/iso_split_rshift/build.sh new file mode 100755 index 0000000000..6b4b4568f5 --- /dev/null +++ b/keyboards/amj60/keymaps/iso_split_rshift/build.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# adjust for cpu +# -j 16 gave best result on a hyperthreaded quad core core i7 + +LIMIT=10 +THREADS="-j 16" +KMAP=iso_split_rshift + +echo "We need sudo later" +sudo ls 2>&1 /dev/null + +function wait_bootloader { + echo "Waiting for Bootloader..." + local STARTTIME=$(date +"%s") + local REMIND=0 + local EXEC=dfu-programmer + local TARGET=atmega32u4 + while true + do + sudo $EXEC $TARGET get > /dev/null 2>&1 + [ $? -eq 0 ] && break + ENDTIME=$(date +"%s") + DURATION=$(($ENDTIME-$STARTTIME)) + if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ] + then + echo "Did you forget to press the reset button?" + REMIND=1 + fi + sleep 1 + done +} +make clean +make KEYMAP=${KMAP} ${THREADS} +if [[ $? -eq 0 ]] +then + echo "please trigger flashing!" + wait_bootloader + sudo make KEYMAP=${KMAP} dfu ${THREADS} +else + echo "make failed" + exit 77 +fi diff --git a/keyboards/amj60/keymaps/iso_split_rshift/keymap.c b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c new file mode 100644 index 0000000000..60fb0bfb0b --- /dev/null +++ b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c @@ -0,0 +1,147 @@ +// 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 "amj60.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 _DEF 0 +#define _SPC 1 +#define _TAB 2 +#define _SFX 3 + +// dual-role shortcuts +#define TABDUAL LT(_TAB, KC_TAB) +#define CAPSDUAL CTL_T(KC_ESC) +#define SPACEDUAL LT(_SPC, KC_SPACE) +#define ENTERDUAL CTL_T(KC_ENT) +// arrow cluster duality bottom right corner +#define ARRLEFT ALT_T(KC_LEFT) +#define ARRDOWN GUI_T(KC_DOWN) +#define ARRUP SFT_T(KC_UP) +#define ARRRIGHT CTL_T(KC_RIGHT) +// german brackets +#define GER_CUR_L RALT(KC_7) // [ +#define GER_CUR_R RALT(KC_0) // ] +#define GER_PAR_L LSFT(KC_8) // ( +#define GER_PAR_R LSFT(KC_9) // ) +#define GER_ANG_L KC_NUBS // < +#define GER_ANG_R LSFT(KC_NUBS) // > +#define GER_BRC_L RALT(KC_8) // [ +#define GER_BRC_R RALT(KC_9) // ] + +// increase readability +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _DEF: Default Layer + * ,-----------------------------------------------------------. + * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 + * |-----------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | + * |-----------------------------------------------------------| + * |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP + * |-----------------------------------------------------------| + * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is + * `-----------------------------------------------------------' LEFT DWN RIGHT + */ + [_DEF] = KEYMAP_ISO_SPLITRSHIFT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \ + KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), + + /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) + * ,-----------------------------------------------------------. + * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| + * |-----------------------------------------------------------| + * | |Paus| Up| [ | ] | | | | ( | ) | | | | | + * |-----------------------------------------------------------| + * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY | + * |-----------------------------------------------------------| + * | | | | | < | > | |M0 | | | | | Vol+ | | + * |-----------------------------------------------------------| + * | | | | |Alt |Prev|Vol-|Next| + * `-----------------------------------------------------------' + */ + [_SPC] = KEYMAP_ISO_SPLITRSHIFT( + KC_PSCR, 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_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ + _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \ + _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + + /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) + * ,-----------------------------------------------------------. + * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE + * |-----------------------------------------------------------| + * | | | | | | | | | { | } | | | | | + * |-----------------------------------------------------------| + * | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn | + * |-----------------------------------------------------------| + * | | | | | | | |AF2| | | | | PgUp | | + * |-----------------------------------------------------------| + * | | | | |Alt |Pos1|PgDn|End | + * `-----------------------------------------------------------' + */ + [_TAB] = KEYMAP_ISO_SPLITRSHIFT( + KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ + _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \ + _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + + /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) + * ,-----------------------------------------------------------. + * |RSET| | | | | | | 7| 8| 9| | | |Backsp | + * |-----------------------------------------------------------| + * | | | | | | | | 4 | 5 | 6 | | | | \ | + * |-----------------------------------------------------------| + * | | L | L | | | | | 1 | 2 | 3 | | | Return | + * |-----------------------------------------------------------| + * | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent + * |-----------------------------------------------------------| LED controlling + * |Ctrl|Win |Alt | |Alt |Left|Down|Right| + * `-----------------------------------------------------------' + */ + [_SFX] = KEYMAP_ISO_SPLITRSHIFT( + RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \ + _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \ + _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \ + _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \ + _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), +}; + +enum function_id { + LAUNCH, + RGBLED_TOGGLE, +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_FUNCTION(LAUNCH), + [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), +}; + +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 (record->event.pressed ? + MACRO( D(RALT), T(SPC), U(RALT), END ) + :MACRO( END )); + break; + case 1: + return (record->event.pressed ? + MACRO( D(LALT), T(F2), U(LALT), END ) + :MACRO( END )); + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh b/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh new file mode 100755 index 0000000000..da5457e195 --- /dev/null +++ b/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh @@ -0,0 +1,4 @@ +#!/bin/bash +git checkout amj60 # gets you on branch amj60 +git fetch origin # gets you up to date with origin +git merge origin/master -- cgit v1.2.3 From 068e76bbf048236aa4b48adefe979024b39b6a65 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 13:10:02 +0200 Subject: uniform whitespace --- keyboards/amj60/amj60.h | 90 ++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h index f966a2ba01..a0cb473310 100644 --- a/keyboards/amj60/amj60.h +++ b/keyboards/amj60/amj60.h @@ -21,17 +21,17 @@ */ #define KEYMAP( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \ - k40, k41, k42, k45, k4a, k4b, k4c, k4d \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ } /* @@ -50,17 +50,17 @@ */ #define KEYMAP_ANSI( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ - k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ - k40, k41, k42, k45, k4a, k4b, k4c, k4d \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ - {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \ - {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } /* AMJ60 HHKB matrix layout @@ -79,17 +79,17 @@ #define KEYMAP_HHKB( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ - k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ - k40, k41, k42, k45, k4a, k4b, k4c, k4d \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ - {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ } /* ISO @@ -107,17 +107,17 @@ */ #define KEYMAP_ISO( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ - k40, k41, k42, k45, k4a, k4b, k4c, k4d \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \ - {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } /* ISO w/ split right shift key matrix layout * ,-----------------------------------------------------------. @@ -134,17 +134,17 @@ */ #define KEYMAP_ISO_SPLITRSHIFT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ - k40, k41, k42, k45, k4a, k4b, k4c, k4d \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ - {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } void matrix_init_user(void); -- cgit v1.2.3 From 0d9d4b8658e27f54188bfd9952b43b384f53a257 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 18 Aug 2016 13:20:25 +0200 Subject: planck/circuit: Update after the latest tap-dance change Fixes #653. Signed-off-by: Gergely Nagy --- keyboards/planck/keymaps/circuit/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/circuit/keymap.c b/keyboards/planck/keymaps/circuit/keymap.c index 5096decb9b..63e01f389a 100644 --- a/keyboards/planck/keymaps/circuit/keymap.c +++ b/keyboards/planck/keymaps/circuit/keymap.c @@ -43,7 +43,7 @@ enum planck_keycodes { // Tap Dance Definitions #ifdef TAP_DANCE_ENABLE -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { [0] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) }; #endif -- cgit v1.2.3 From 0edf7c7cad356e85cae2d91b8811216006f0be14 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 15:22:34 +0200 Subject: first attempt at documentation for the amj60 board --- keyboards/amj60/readme.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 keyboards/amj60/readme.md diff --git a/keyboards/amj60/readme.md b/keyboards/amj60/readme.md new file mode 100644 index 0000000000..6c9c634b19 --- /dev/null +++ b/keyboards/amj60/readme.md @@ -0,0 +1,57 @@ +AMJ60 keyboard firmware +====================== +DIY/Assembled compact 60% keyboard. + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/amj60 +folder. Once your dev env is setup, you'll be able to type `make` to generate +your .hex - you can then use `make dfu` to program your PCB once you hit the +reset button. + +Depending on which keymap you would like to use, you will have to compile +slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to +define your favorite layout yourself. To define your own keymap create file +named `.c` in the keymaps folder, and see keymap document (you can find +in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with +`KEYMAP` option like: +`` +$ make KEYMAP=[default|jack|] +`` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` +folder. + +## Variations +KEYMAP macros for the following layouts are available: + +* default, for all the available, possible keys +* ANSI, for 60% ANSI keyboard +* ISO +* ISO w/ split right shift key +* HHKB + +Remark: all but "ISO w/ split tight shift key" are untested and were done to the best of my knowledge. + +### Original tmk firmware +The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60). + +## Further information +Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found + +* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0) +* [chinese discussion](https://www.v2ex.com/t/161887) +* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module +* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1). +* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/) -- cgit v1.2.3 From 0e86c852412030eaba16b2eaab65a6827d150119 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 15:30:52 +0200 Subject: amj60 variant of the readme --- keyboards/amj60/keymaps/iso_split_rshift/readme.md | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 keyboards/amj60/keymaps/iso_split_rshift/readme.md diff --git a/keyboards/amj60/keymaps/iso_split_rshift/readme.md b/keyboards/amj60/keymaps/iso_split_rshift/readme.md new file mode 100644 index 0000000000..2113d93e4d --- /dev/null +++ b/keyboards/amj60/keymaps/iso_split_rshift/readme.md @@ -0,0 +1,30 @@ +toneman77's custom spacefn Layout +===================== + +##Quantum MK Firmware +For the full Quantum feature list, see the parent readme.md. + +# Features +* heavily modified ISO (!) layout with split right shift key +* spaceFn +* Dual-Role keys: +* + | Original key | when tapped | when held | + | ---------------- | ------------- | ------------- | + | Space | Space | layer change | + | Caps lock | Escape | Control | + | Tab | Tab | layer change | + | Enter | Enter | Control | + +* vim-style arrow keys on hjkl (spacefn layer) +* corresponding Home/PgDn/PgUp/End on hjkl (tab layer) +* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift +* more bonus arrow keys on wasd (spacefn layer) +* media keys prev/next/play/vol+/vol- (spacefn layer) +* firmware bootloader button +* additional brackets that only work in german layout due to horrible placement +in the default qwertz layout + + +### Additional Credits +* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys) -- cgit v1.2.3 From fe906538861c5ee30a75d6f955e611dd38d93977 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 15:32:06 +0200 Subject: smyll typo fixed --- keyboards/amj60/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/amj60/readme.md b/keyboards/amj60/readme.md index 6c9c634b19..0896134e0c 100644 --- a/keyboards/amj60/readme.md +++ b/keyboards/amj60/readme.md @@ -42,7 +42,7 @@ KEYMAP macros for the following layouts are available: * ISO w/ split right shift key * HHKB -Remark: all but "ISO w/ split tight shift key" are untested and were done to the best of my knowledge. +Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge. ### Original tmk firmware The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60). -- cgit v1.2.3 From 21dc8381d1d428f7b0f6eb4ebe5c6536e3bd2b57 Mon Sep 17 00:00:00 2001 From: Toni Date: Thu, 18 Aug 2016 15:57:17 +0200 Subject: made a correct default KEYMAP. moved the old one to KEYMAP_ANSI fixed all layouts that were referencing KEYMAP to KEYMAP_ANSI whitespace prettyfying --- keyboards/satan/keymaps/default/keymap.c | 4 +-- keyboards/satan/keymaps/denolfe/keymap.c | 36 +++++++++++----------- keyboards/satan/keymaps/poker/keymap.c | 46 ++++++++++++++--------------- keyboards/satan/keymaps/stanleylai/keymap.c | 22 +++++++------- keyboards/satan/satan.h | 37 +++++++++++++++++++---- 5 files changed, 86 insertions(+), 59 deletions(-) diff --git a/keyboards/satan/keymaps/default/keymap.c b/keyboards/satan/keymaps/default/keymap.c index 3806137e78..2bf49d2e65 100644 --- a/keyboards/satan/keymaps/default/keymap.c +++ b/keyboards/satan/keymaps/default/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * `-----------------------------------------------------------' */ -[_BL] = KEYMAP( +[_BL] = KEYMAP_ANSI( F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ -[_FL] = KEYMAP( +[_FL] = KEYMAP_ANSI( #ifdef RGBLIGHT_ENABLE KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \ diff --git a/keyboards/satan/keymaps/denolfe/keymap.c b/keyboards/satan/keymaps/denolfe/keymap.c index 2f6c8d8f4f..5f189d78a3 100644 --- a/keyboards/satan/keymaps/denolfe/keymap.c +++ b/keyboards/satan/keymaps/denolfe/keymap.c @@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * `-----------------------------------------------------------' */ -[_BL] = KEYMAP( +[_BL] = KEYMAP_ANSI( F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ @@ -49,27 +49,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ -[_FL] = KEYMAP( +[_FL] = KEYMAP_ANSI( #ifdef RGBLIGHT_ENABLE - KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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), #else - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \ - KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #endif -[_SL] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +[_SL] = KEYMAP_ANSI( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; enum function_id { diff --git a/keyboards/satan/keymaps/poker/keymap.c b/keyboards/satan/keymaps/poker/keymap.c index 8181955cf9..9da7d29b78 100644 --- a/keyboards/satan/keymaps/poker/keymap.c +++ b/keyboards/satan/keymaps/poker/keymap.c @@ -25,12 +25,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * `-----------------------------------------------------------' */ -[_BL] = KEYMAP( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ - KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL), +[_BL] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL), /* Keymap _FL: Function Layer * ,-----------------------------------------------------------. @@ -45,12 +45,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ -[_FL] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ - KC_TRNS,KC_TRNS, KC_UP, KC_TRNS,KC_TRNS,KC_TRNS, KC_CALC,KC_TRNS,KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ - KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +[_FL] = KEYMAP_ANSI( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), /* Keymap _RL: Function Layer * ,-----------------------------------------------------------. @@ -65,19 +65,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ -[_RL] = KEYMAP( +[_RL] = KEYMAP_ANSI( #ifdef RGBLIGHT_ENABLE - KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #else - KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #endif }; diff --git a/keyboards/satan/keymaps/stanleylai/keymap.c b/keyboards/satan/keymaps/stanleylai/keymap.c index 623427e97c..979c122e55 100644 --- a/keyboards/satan/keymaps/stanleylai/keymap.c +++ b/keyboards/satan/keymaps/stanleylai/keymap.c @@ -26,25 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Function layer [_FL] = KEYMAP_HHKB( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \ - KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \ + KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END), // RGB Layer [_RGBL] = KEYMAP_HHKB( #ifdef RGBLIGHT_ENABLE 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, 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, 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_NO, KC_NO, KC_NO, \ + KC_NO, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #else 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, 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, BL_TOGG, BL_STEP, 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_TRNS,\ + 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, BL_TOGG, BL_STEP, 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_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #endif }; diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index 33a10292c4..f3cbd5305e 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -6,15 +6,15 @@ // readability #define XXX KC_NO -/* Satan GH60 matrix layout +/* Satan GH60 matrix layout (3c is right of 3d, 3d is shift) * ,-----------------------------------------------------------. - * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | + * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49| * |-----------------------------------------------------------| * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | * |-----------------------------------------------------------| - * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d | * |-----------------------------------------------------------| - * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | + * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c | * |-----------------------------------------------------------| * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | * `-----------------------------------------------------------' @@ -22,10 +22,37 @@ // The first section contains all of the arguments // The second converts the arguments into a two-dimensional array #define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ +} +/* Satan GH60 ANSI layout + * ,-----------------------------------------------------------. + * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | + * |-----------------------------------------------------------| + * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | + * |-----------------------------------------------------------| + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | + * |-----------------------------------------------------------| + * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | + * |-----------------------------------------------------------| + * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | + * `-----------------------------------------------------------' + */ +#define KEYMAP_ANSI( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ - k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \ ) \ { \ -- cgit v1.2.3 From a5e6da7aa8173bb4cac8569d01b64ea2839474af Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 18 Aug 2016 22:25:13 +0200 Subject: Added dbroqua layout for planck keyboard --- keyboards/planck/keymaps/dbroqua/keymap.c | 314 ++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 keyboards/planck/keymaps/dbroqua/keymap.c diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c new file mode 100644 index 0000000000..775f1d56fa --- /dev/null +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | | Alt |Lower | Space |Raise |AltGr | [ | ] | \ | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LGUI, _______, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, KC_LBRC, KC_RBRC, KC_BSLS} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | Home | PgDwn| PgUp | End | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | |Insert| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | | | | | | | | | Del | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {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_HOME,KC_PGDN,KC_PGUP,KC_END,_______,_______}, + {_______, _______, _______, _______, _______, _______, _______,_______,_______,_______, _______, KC_INS}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | = | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | Left | Down | Up | Right| | ` | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | Mute | Vol+ | Vol- | | | |Insert| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Prev | Play | Next | Del | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, + {_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_GRV}, + {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif -- cgit v1.2.3 From ea7115534afb23571f11af38c19b4835e1699c7e Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Fri, 19 Aug 2016 00:17:57 +0200 Subject: Improve the dynamic macro documentation --- readme.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 119995a5cb..37f140839d 100644 --- a/readme.md +++ b/readme.md @@ -721,7 +721,7 @@ Below these two modifications include the `dynamic_macro.h` header: #include "dynamic_macro.h"` -Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_REC_PLAY1`,`DYN_REC_START2` and `DYN_REC_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. +Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_MACRO_PLAY1`,`DYN_REC_START2` and `DYN_MACRO_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. [_DYN]= { {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, _______, _______, _______, _______}, @@ -736,7 +736,11 @@ Add the following code to the very beginning of your `process_record_user()` fun return false; } -The usage should be pretty self-explanatory. For the details, please read the comments in the `dynamic_macro.h` header. +To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `_DYN` layer button. The handler awaits specifically for the `MO(_DYN)` keycode as the "stop signal" so please don't use any fancy ways to access this layer, use the regular `MO()` modifier. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`. + +If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 256; please read the comments for it in the header). + +For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header. ## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) -- cgit v1.2.3 From ed1291bfbddc19c410e9c6d7bc4775b638b3e316 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Thu, 18 Aug 2016 22:43:31 -0700 Subject: Added compatibility for the Infinity ErgoDox to my Ergodox keymap. Updated readme.md to reflect this change. --- keyboards/ergodox/keymaps/xyverz/keymap.c | 225 ++++++++++++++++++++++------- keyboards/ergodox/keymaps/xyverz/readme.md | 6 +- 2 files changed, 178 insertions(+), 53 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c index 7a16367bfa..397c8566f5 100644 --- a/keyboards/ergodox/keymaps/xyverz/keymap.c +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -1,7 +1,7 @@ /* - * PLEASE NOTE: This keymap will NOT work with the Infinity ErgoDox due to the fact that the mappings are - * based on the Matrix Layout in the ez.h file. If you want to use this for the infinity, you'll need to - * figure out where the keys are in the matrix and redo the layout arrays below. + * PLEASE NOTE: This keymap has been updated to work with the Infinity ErgoDox. To build for the Infinity, + * simply append `SUBPROJECT=infinity` to the end of your `make` statement. This keymap file is untested + * on the Infinity ErgoDox. * * About this keymap: * @@ -38,6 +38,11 @@ extern keymap_config_t keymap_config; #define QWERTY M(_QW) #define COLEMAK M(_CM) +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DV] = { // layer 0 : Dvorak @@ -62,24 +67,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' * */ +#ifdef SUBPROJECT_infinity // Infinity Ergodox + // left hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, + {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, + {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, + {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, + {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, + {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, + {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, + {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, + + //Right Hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, + {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, + {KC_6, KC_F, KC_D, KC_B, KC_SPC }, + {KC_7, KC_G, KC_H, KC_M, KC_UP }, + {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, + {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, + {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, + {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} +#else // Ergodox and Ergodox EZ // left hand - {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, + {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, XXXXXXX}, {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, {KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL }, {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC}, {KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME}, - {KC_5, KC_Y, KC_I, KC_X, KC_NO, KC_LCTL}, - {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + {KC_5, KC_Y, KC_I, KC_X, XXXXXXX, KC_LCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, // right hand - {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, - {KC_6, KC_F, KC_D, KC_B, KC_NO, KC_RCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, + {KC_6, KC_F, KC_D, KC_B, XXXXXXX, KC_RCTL}, {KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP}, {KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC }, {KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT }, {KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN}, - {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO } -}, + {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, XXXXXXX} +#endif + }, [_QW] = { // layer 1 : QWERTY @@ -103,23 +132,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | End | | PgDn | | | * `--------------------' `--------------------' */ +#ifdef SUBPROJECT_infinity // Infinity Ergodox + // left hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, + {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, + {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, + {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, + {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, + {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, + {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, + {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, + + //Right Hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, + {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, + {KC_6, KC_F, KC_D, KC_B, KC_SPC }, + {KC_7, KC_G, KC_H, KC_M, KC_UP }, + {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, + {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, + {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, + {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} +#else // Ergodox and Ergodox EZ // left hand - {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, + {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, XXXXXXX}, {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, {KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL }, {KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC}, {KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME}, - {KC_5, KC_T, KC_G, KC_B, KC_NO, KC_LCTL}, - {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + {KC_5, KC_T, KC_G, KC_B, XXXXXXX, KC_LCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, // right hand - {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, - {KC_6, KC_Y, KC_H, KC_N, KC_NO, KC_RCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, + {KC_6, KC_Y, KC_H, KC_N, XXXXXXX, KC_RCTL}, {KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP}, {KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC }, {KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT }, {KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN}, - {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } + {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, XXXXXXX} +#endif }, @@ -144,23 +197,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | End | | PgDn | | | * `--------------------' `--------------------' */ +#ifdef SUBPROJECT_infinity // Infinity Ergodox + // left hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, + {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, + {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, + {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, + {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, + {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, + {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, + {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, + + //Right Hand + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, + {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, + {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, + {KC_6, KC_F, KC_D, KC_B, KC_SPC }, + {KC_7, KC_G, KC_H, KC_M, KC_UP }, + {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, + {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, + {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, + {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} +#else // Ergodox and Ergodox EZ // left hand - {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO }, + {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, XXXXXXX}, {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, {KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL }, {KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC}, {KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME}, - {KC_5, KC_G, KC_D, KC_B, KC_NO, KC_LCTL}, - {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, + {KC_5, KC_G, KC_D, KC_B, XXXXXXX, KC_LCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, // right hand - {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, - {KC_6, KC_J, KC_H, KC_K, KC_NO, KC_RCTL}, + {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, + {KC_6, KC_J, KC_H, KC_K, XXXXXXX, KC_RCTL}, {KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP}, {KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC }, {KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT }, {KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN}, - {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } + {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, XXXXXXX} +#endif }, @@ -185,23 +262,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ +#ifdef SUBPROJECT_infinity // Infinity Ergodox + // left hand + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {KC_F11, _______, XXXXXXX, _______, _______}, + {KC_F5, _______, _______, _______, _______}, + {KC_F4, KC_PAUS, _______, COLEMAK, _______}, + {KC_F3, KC_SLCK, _______, QWERTY, _______}, + {KC_F2, KC_PSCR, _______, DVORAK, _______}, + {KC_F1, _______, _______, _______, _______}, + {RESET, _______, _______, _______, _______}, + + //Right Hand + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {KC_F12, _______, XXXXXXX, _______, _______}, + {KC_F6, _______, KC_MSTP, _______, _______}, + {KC_F7, KC_VOLU, KC_MPRV, _______, _______}, + {KC_F8, KC_VOLD, KC_MPLY, _______, _______}, + {KC_F9, KC_MUTE, KC_MNXT, _______, _______}, + {KC_F10, _______, KC_MSEL, _______, _______}, + {_______, _______, _______, _______, _______}, +#else // Ergodox and Ergodox EZ // left hand - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }, - {KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_F2, KC_PSCR, KC_TRNS, DVORAK, KC_TRNS, KC_TRNS}, - {KC_F3, KC_SLCK, KC_TRNS, QWERTY, KC_TRNS, KC_TRNS}, - {KC_F4, KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS}, - {KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, - {KC_F11, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + {RESET, _______, _______, _______, _______, XXXXXXX}, + {KC_F1, _______, _______, _______, _______, _______}, + {KC_F2, KC_PSCR, _______, DVORAK, _______, _______}, + {KC_F3, KC_SLCK, _______, QWERTY, _______, _______}, + {KC_F4, KC_PAUS, _______, COLEMAK, _______, _______}, + {KC_F5, _______, _______, _______, XXXXXXX, _______}, + {KC_F11, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, // right hand - {KC_F12, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, - {KC_F6, KC_TRNS, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS}, - {KC_F7, KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_F8, KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_F9, KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_F10, KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO } + {KC_F12, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, + {KC_F6, _______, KC_MSTP, _______, XXXXXXX, _______}, + {KC_F7, KC_MUTE, KC_MPRV, _______, _______, _______}, + {KC_F8, KC_VOLD, KC_MPLY, _______, _______, _______}, + {KC_F9, KC_VOLU, KC_MNXT, _______, _______, _______}, + {KC_F10, _______, KC_MSEL, _______, _______, _______}, + {_______, _______, _______, _______, _______, XXXXXXX} +#endif }, @@ -226,23 +327,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ +#ifdef SUBPROJECT_infinity // Infinity Ergodox + // left hand + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {_______, _______, XXXXXXX, _______, _______}, + {_______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______}, + {KC_PWR, KC_SLEP, KC_WAKE, _______, _______}, + + //Right Hand + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, + {_______, _______, XXXXXXX, _______, _______}, + {_______, _______, KC_MSTP, _______, _______}, + {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0 }, + {KC_PSLS, KC_P8, KC_P5, KC_P2, _______}, + {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT}, + {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT}, + {_______, _______, _______, _______, _______}, +#else // Ergodox and Ergodox EZ // left hand - {KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, 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_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, - {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, + {KC_PWR, KC_SLEP, KC_WAKE, _______, _______, XXXXXXX}, + {_______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, XXXXXXX, _______}, + {_______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, // right hand - {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, - {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, KC_TRNS}, - {KC_PSLS, KC_P8, KC_P5, KC_P2, KC_NO, KC_TRNS}, - {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, KC_TRNS}, - {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO } + {_______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, + {_______, _______, _______, _______, XXXXXXX, _______}, + {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, _______}, + {KC_PSLS, KC_P8, KC_P5, KC_P2, XXXXXXX, _______}, + {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, _______}, + {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, _______}, + {_______, _______, _______, _______, XXXXXXX, XXXXXXX} +#endif }, diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index 2557493239..e6cb582c5c 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -2,7 +2,7 @@ ## Please Note: -This keymap will probably **not** work with the Infinity ErgoDox. It will need **substantial** modification in order to work on the Infinity. This is due to the fact that the mappings are based on the matrix positions in the keymap definition in the ez.h file. If you want to use this for the infinity, you'll need to figure out where the keys are in the matrix and redo the layout arrays below. +This keymap has been updated to work with the Infinity ErgoDox. To build for the Infinity, simply append `SUBPROJECT=infinity` to the end of your `make` statement. This keymap file builds cleanly as is but as of this writing has not been tested on the Infinity ErgoDox. YMMV. ## About this keymap: @@ -12,7 +12,7 @@ The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts. -For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the keymap is defined, beginning on line 81. +For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the keymap is defined beginning on line 81, or in ../../infinity/infinity.h beginning at line 72. ### Layer 0: Dvorak layer @@ -119,4 +119,4 @@ For a better explanation of the layout matrices shown below, take a look at ../. | | | || | | | | | |------||------| | | | | | || | | | - `--------------------'`--------------------' \ No newline at end of file + `--------------------'`--------------------' -- cgit v1.2.3 From 578b7e969ea93f1f07ea2dde9c986101e97a9e2d Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 09:19:55 +0200 Subject: - Updated dbroqua layout for planck keyboard --- keyboards/planck/keymaps/dbroqua/keymap.c | 314 ++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 keyboards/planck/keymaps/dbroqua/keymap.c diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c new file mode 100644 index 0000000000..e183582cfd --- /dev/null +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Lower| Raise| Alt | Space |AltGr | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LGUI, LOWER, RAISE, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | Home | PgDwn| PgUp | End | [ | ] | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | \ |Insert| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | | | | | | | | | Del | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {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_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LBRC, KC_RBRC}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,KC_BSLS, KC_INS}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_DEL} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | = | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | Left | Down | Up | Right| | ` | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | Mute | Vol+ | Vol- | | | |Insert| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Prev | Play | Next | Del | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, + {_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_GRV}, + {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif \ No newline at end of file -- cgit v1.2.3 From 31120ed16690ff784d8ddc40a11b2fa5ebe9e717 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 09:39:25 +0200 Subject: - Moved Brite function on esc to avoid conflict with ctrl key. --- keyboards/planck/keymaps/dbroqua/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index e183582cfd..70bac391b0 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -97,18 +97,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | | | | Home | PgDwn| PgUp | End | [ | ] | + * | Brite| | | | | | Home | PgDwn| PgUp | End | [ | ] | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | | | | \ |Insert| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| | | | | | | | | | Del | + * | | | | | | | | | | | Del | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { {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_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LBRC, KC_RBRC}, + {BACKLIT, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LBRC, KC_RBRC}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,KC_BSLS, KC_INS}, - {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_DEL} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_DEL} }, /* Raise -- cgit v1.2.3 From bc0bd11430d09423208d5df17dec21e64854cb9a Mon Sep 17 00:00:00 2001 From: Toni Date: Fri, 19 Aug 2016 10:24:48 +0200 Subject: forgot media keys --- keyboards/amj60/keymaps/iso_split_rshift/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/amj60/keymaps/iso_split_rshift/Makefile b/keyboards/amj60/keymaps/iso_split_rshift/Makefile index 0d8416bbce..2969ed8aec 100644 --- a/keyboards/amj60/keymaps/iso_split_rshift/Makefile +++ b/keyboards/amj60/keymaps/iso_split_rshift/Makefile @@ -4,7 +4,7 @@ # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = no # Audio control and System control(+450) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -- cgit v1.2.3 From b4f23b146f05aac1def181a3f4dd4fb0479d15e8 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 14:01:37 +0200 Subject: - Moved Home/End/PgUp/PgDn on arrow keys --- keyboards/planck/keymaps/dbroqua/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index 70bac391b0..a0517ced7d 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -97,25 +97,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Brite| | | | | | Home | PgDwn| PgUp | End | [ | ] | + * | Brite| | | | | | | | | | [ | ] | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | \ |Insert| + * | | | | | | | | | | | \ | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | Del | + * | | | | | | | | Home | PgDwn| PgUp | End | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {BACKLIT, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LBRC, KC_RBRC}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,KC_BSLS, KC_INS}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_DEL} + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} }, /* Raise * ,-----------------------------------------------------------------------------------. * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | = | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | | | | Left | Down | Up | Right| | ` | + * | | | | | | | | | | | | ` | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | Mute | Vol+ | Vol- | | | |Insert| * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -124,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_RAISE] = { {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, - {_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_GRV}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV}, {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} }, -- cgit v1.2.3 From c6e733afce48871c1787912c08c6eb6a44f13291 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 14:17:07 +0200 Subject: - Added readme file and layout preview --- keyboards/planck/keymaps/dbroqua/layout.png | Bin 0 -> 21465 bytes keyboards/planck/keymaps/dbroqua/readme.md | 11 +++++++++++ 2 files changed, 11 insertions(+) create mode 100644 keyboards/planck/keymaps/dbroqua/layout.png create mode 100644 keyboards/planck/keymaps/dbroqua/readme.md diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png new file mode 100644 index 0000000000..bab28a7c7c Binary files /dev/null and b/keyboards/planck/keymaps/dbroqua/layout.png differ diff --git a/keyboards/planck/keymaps/dbroqua/readme.md b/keyboards/planck/keymaps/dbroqua/readme.md new file mode 100644 index 0000000000..b3b64c325f --- /dev/null +++ b/keyboards/planck/keymaps/dbroqua/readme.md @@ -0,0 +1,11 @@ +# Dbroqua Layout + +![Layout](layout.png "Dbroqua Keymap") + +* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/e77306f9d14cc93fa26123b93b106474 + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua make dfu +``` -- cgit v1.2.3 From 11aa19a6264c3ca3151143db4b790db89791beee Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 21:00:24 +0200 Subject: - Updated lower and raise layer --- keyboards/planck/keymaps/dbroqua/keymap.c | 172 ++++++++-------------------- keyboards/planck/keymaps/dbroqua/layout.png | Bin 21465 -> 20569 bytes 2 files changed, 46 insertions(+), 126 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index a0517ced7d..56d4cf22dd 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -15,36 +15,38 @@ extern keymap_config_t keymap_config; // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. #define _QWERTY 0 -#define _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _PLOVER 5 -#define _ADJUST 16 +#define _LOWER 1 +#define _RAISE 2 +#define _ESC 3 +#define _ADJUST 4 enum planck_keycodes { QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - PLOVER, LOWER, RAISE, - BACKLIT, - EXT_PLV + BACKLIT }; // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO +// Func macro definitions. +#define SFT_ESC FUNC(0) // Tap for Enter, hold for Shift + +// Enable these functions using FUNC(n) macro. +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(_ESC, KC_ESC) + }; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | GUI | Lower| Raise| Alt | Space |AltGr | Left | Down | Up |Right | @@ -52,108 +54,72 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {SFT_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {KC_LCTL, KC_LGUI, LOWER, RAISE, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, -/* Colemak +/* Lower * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * | | | | | | | | | | | ( | ) | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * | Brite| | | | | | | | | | { | } | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = { - {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Brite| | | | | | | | | | [ | ] | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | \ | | + * | | | | | | | | | | | [ | ] | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Home | PgDwn| PgUp | End | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} }, /* Raise * ,-----------------------------------------------------------------------------------. * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | = | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | ` | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | Mute | Vol+ | Vol- | | | |Insert| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Prev | Play | Next | Del | + * | | | | | | | | | | | \ |Insert| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | Del | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV}, - {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_INS}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL} }, -/* Plover layer (http://opensteno.org) +/* Esc * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | + * | | | | | | Mute | Vol+ | Vol- | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Prev | Play | Next | | * `-----------------------------------------------------------------------------------' */ - -[_PLOVER] = { - {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, - {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, - {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +[_ESC] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} }, + /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | @@ -161,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______}, {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -199,24 +165,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistant_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistant_default_layer_set(1UL<<_DVORAK); - } - return false; - break; case LOWER: if (record->event.pressed) { layer_on(_LOWER); @@ -248,34 +196,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case PLOVER: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - stop_all_notes(); - PLAY_NOTE_ARRAY(tone_plover, false, 0); - #endif - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; - case EXT_PLV: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); - #endif - layer_off(_PLOVER); - } - return false; - break; } return true; } diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png index bab28a7c7c..d8aaf6fa64 100644 Binary files a/keyboards/planck/keymaps/dbroqua/layout.png and b/keyboards/planck/keymaps/dbroqua/layout.png differ -- cgit v1.2.3 From b9a284352e9066127f00bc2b992c6cbd7757f6f3 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 19 Aug 2016 21:10:07 +0200 Subject: - Moved Insert/Del in Esc layer --- keyboards/planck/keymaps/dbroqua/keymap.c | 12 ++++++------ keyboards/planck/keymaps/dbroqua/layout.png | Bin 20569 -> 20479 bytes keyboards/planck/keymaps/dbroqua/readme.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index 56d4cf22dd..3d89ff1d34 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -83,16 +83,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | ` | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | \ |Insert| + * | | | | | | | | | | | \ | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | Del | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_INS}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* Esc @@ -101,9 +101,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | Mute | Vol+ | Vol- | | | | | + * | | | | | | Mute | Vol+ | Vol- | | | |Insert| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Prev | Play | Next | | + * | | | | | | | | Prev | Play | Next | Del | * `-----------------------------------------------------------------------------------' */ [_ESC] = { diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png index d8aaf6fa64..0deafefe27 100644 Binary files a/keyboards/planck/keymaps/dbroqua/layout.png and b/keyboards/planck/keymaps/dbroqua/layout.png differ diff --git a/keyboards/planck/keymaps/dbroqua/readme.md b/keyboards/planck/keymaps/dbroqua/readme.md index b3b64c325f..b5cdb9f65d 100644 --- a/keyboards/planck/keymaps/dbroqua/readme.md +++ b/keyboards/planck/keymaps/dbroqua/readme.md @@ -8,4 +8,4 @@ Enter into programming mode and run the following command. ``` $ sudo KEYMAP=dbroqua make dfu -``` +``` \ No newline at end of file -- cgit v1.2.3 From a1da23d827df80de1771dc7277dbba803507dabf Mon Sep 17 00:00:00 2001 From: zs Date: Fri, 19 Aug 2016 21:59:08 +0200 Subject: Add the workman-dead layout for kc60 --- keyboards/kc60/keymaps/workman-dead/README.md | 17 ++ .../kc60/keymaps/workman-dead/kc60-wm-dead.png | Bin 0 -> 117155 bytes keyboards/kc60/keymaps/workman-dead/keymap.c | 183 +++++++++++++++++++++ 3 files changed, 200 insertions(+) create mode 100644 keyboards/kc60/keymaps/workman-dead/README.md create mode 100644 keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png create mode 100644 keyboards/kc60/keymaps/workman-dead/keymap.c diff --git a/keyboards/kc60/keymaps/workman-dead/README.md b/keyboards/kc60/keymaps/workman-dead/README.md new file mode 100644 index 0000000000..f1fcdc9606 --- /dev/null +++ b/keyboards/kc60/keymaps/workman-dead/README.md @@ -0,0 +1,17 @@ +# Workman dead with spacefn (kc60 @ QMK) + +## Layout reference +![workman dead with spacefn](./kc60-wm-dead.png) + +## Build + +To build this keymap, simply run `make KEYMAP=workman-dead`. + +## Notes + +* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though) +* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference) +* hold `space` to access the `function` layer (marked blue in the reference) +* hold `tab` to activate the mouse layer +* the `function` layer contains mostly osx specific shortcuts +* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout diff --git a/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png new file mode 100644 index 0000000000..cc6a630a59 Binary files /dev/null and b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png differ diff --git a/keyboards/kc60/keymaps/workman-dead/keymap.c b/keyboards/kc60/keymaps/workman-dead/keymap.c new file mode 100644 index 0000000000..103adeef61 --- /dev/null +++ b/keyboards/kc60/keymaps/workman-dead/keymap.c @@ -0,0 +1,183 @@ +#include "kc60.h" + +#define _WM 0 +#define _QW 1 +#define _DK 2 +#define _FUN 3 +#define _MS 4 + +#define _______ KC_NO +#define XXXXXXX KC_TRNS + +#define _DK_ACT 0 +#define _DK_REL 1 +#define _KC_COMS 2 +#define _KC_CENT 3 + +#define DK_ACT M(_DK_ACT) // activate dead key layer +#define DK_REL M(_DK_REL) // release dead key layer +#define KC_COMS M(_KC_COMS) // comma + space +#define KC_CENT M(_KC_CENT) // comma + enter +#define KC_TABM LT(_MS, KC_TAB) // press for tab, hold for mouse layer +#define KC_SPFN LT(_FUN, KC_SPC) // press for space, hold for function layer (aka spacefn) +#define KC_DFQW DF(_QW) // set default layer to qwerty +#define KC_DFWM DF(_WM) // set default layer to workman +#define KC_CMDQ LGUI(KC_Q) // command + q +#define KC_CMDD LGUI(KC_D) // command + d +#define KC_CMDA LGUI(KC_A) // command + a +#define KC_CMDS LGUI(KC_S) // command + s +#define KC_CMDZ LGUI(KC_Z) // command + z +#define KC_CMDX LGUI(KC_X) // command + x +#define KC_CMDC LGUI(KC_C) // command + c +#define KC_CMDV LGUI(KC_V) // command + v +#define KC_CSTB S(RCTL(KC_TAB)) // shift + control + tab +#define KC_C_TB RCTL(KC_TAB) // control + tab +#define KC_C_LF RCTL(KC_LEFT) // control + left +#define KC_C_RT RCTL(KC_RGHT) // control + right + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// Workman +/* +* ,-----------------------------------------------------------. +* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp | +* |-----------------------------------------------------------| +* |Tab/M| Q| D| R| W| B| J| F| U| P| ;| [| ]| \ | +* |-----------------------------------------------------------| +* |Ctrl | A| S| H| T| G| Y| N| E| O| I| '| Return | +* |-----------------------------------------------------------| +* |Shift | Z| X| M| C| V| K| L| ,| .| /| Shift | +* |-----------------------------------------------------------| +* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | qwerty | +* `-----------------------------------------------------------' +*/ +[_WM] = KEYMAP( /* Workman */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \ + KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), + +// QWERTY +/* +* ,-----------------------------------------------------------. +* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp | +* |-----------------------------------------------------------| +* |Tab/M| Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | +* |-----------------------------------------------------------| +* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | +* |-----------------------------------------------------------| +* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | +* |-----------------------------------------------------------| +* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | workman | +* `-----------------------------------------------------------' +*/ +[_QW] = KEYMAP( /* QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \ + KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN), + +// dead key layer +/* +* ,-----------------------------------------------------------. +* | | | | | | | | | | | | | | Bsp | +* |-----------------------------------------------------------| +* | | %| &| ?| +| @| $| _| [| ]| !| ~| ^| | +* |-----------------------------------------------------------| +* | | #| (| =| 0| {| }| 1| *| )| -| `| Return | +* |-----------------------------------------------------------| +* | | 6| 7| 8| 9| || \| 2| 3| 4| 5| | +* |-----------------------------------------------------------| +* |Ctrl | Alt | GUI | , | Alt | GUI | Ctrl | | +* `-----------------------------------------------------------' +*/ +[_DK] = KEYMAP( /* dead key layer */ + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, \ + XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \ + _______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \ + _______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_RALT, KC_RGUI, KC_RCTL, _______), + +// function layer +/* +* ,-----------------------------------------------------------. +* | | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|Del | +* |-----------------------------------------------------------| +* |Esc | Cq| Cd|cstb|ctb| | |pgd| up|pgu| | | |ins | +* |-----------------------------------------------------------| +* |Shift | Ca| Cs|clt|crt| | | lt| dw| rt|home|end| Bsp | +* |-----------------------------------------------------------| +* |Shift | Cz| Cx| | Cc| Cv| V-| V+|mute| | | | +* |-----------------------------------------------------------| +* |Ctrl | Alt | GUI | | Alt | GUI | Ctrl | Reset | +* `-----------------------------------------------------------' +*/ +[_FUN] = KEYMAP( /* function layer */ + KC_TRNS, 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_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \ + KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \ + KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_RALT, KC_RGUI, KC_RCTL, RESET), + +// mouse layer +/* +* ,-----------------------------------------------------------. +* | | | | | | | | | | | | | | | +* |-----------------------------------------------------------| +* | |fast|med|slow| | | | | up| | | | | | +* |-----------------------------------------------------------| +* | | | | | | | | lt| dw| rt| rc| | | +* |-----------------------------------------------------------| +* | | | | | | | | | | | | | +* |-----------------------------------------------------------| +* | | | | lc | | | | | +* `-----------------------------------------------------------' +*/ +[_MS] = KEYMAP( /* mouse layer */ + XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, KC_BTN1, _______, _______, _______, _______), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _KC_COMS: + if (record->event.pressed) { + return MACRO(T(COMM), T(SPC), END); // comma + space + } + break; + case _KC_CENT: + if (record->event.pressed) { + return MACRO(T(COMM), T(ENT), END); // comma + enter + } + break; + case _DK_ACT: + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <) + register_code(KC_COMM); + } else { // activate oneshot dead key layer otherwise + layer_on(_DK); + set_oneshot_layer(_DK, ONESHOT_START); + } + } else { // make sure to deactive dead key layer on key release + clear_oneshot_layer_state(ONESHOT_PRESSED); + unregister_code(KC_COMM); + } + break; + case _DK_REL: + if (record->event.pressed) { // act as 3 on keypress + register_code(KC_3); + } else { // make sure to deactive dead key layer on key release + clear_oneshot_layer_state(ONESHOT_PRESSED); + unregister_code(KC_3); + } + break; + } + + return MACRO_NONE; +}; -- cgit v1.2.3 From 32216066e7a6881378f7f46995a00da36c0d34f3 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 14:36:41 -0600 Subject: Adding nicer Infinity build instructions. --- keyboards/ergodox/readme.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index f81d7cd8df..9f89418634 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,3 +1,14 @@ +# Infinity on Ubuntu Quickstart + +To build an Infinity firmware under Ubuntu (tested on 15.10): + + - Run the `util/install_dependencies.sh` script as root. + - Build the firmware with `make keymap=keymapname subproject=infinity` + - Plug in the left hand keyboard only. + - Press the program button (back of keyboard, above thumb pad). + - Install the firmware with `sudo make dfu-util keymap=keymapname subproject=infinity` + - Install the right hand firmware, but I haven't figured this out yet. + # Getting started There are two main ways you could customize the ErgoDox (EZ and Infinity) -- cgit v1.2.3 From 50531068b3aa1b4aced20a1488e3ae052925f651 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 14:42:41 -0600 Subject: Adding jafo layout. --- keyboards/ergodox/keymaps/jafo/jafo-Notes | 10 ++ keyboards/ergodox/keymaps/jafo/jafo-layout.pdf | Bin 0 -> 185426 bytes keyboards/ergodox/keymaps/jafo/jafo_highres.png | Bin 0 -> 179460 bytes keyboards/ergodox/keymaps/jafo/keymap.c | 184 ++++++++++++++++++++++++ keyboards/ergodox/keymaps/jafo/readme.md | 20 +++ 5 files changed, 214 insertions(+) create mode 100644 keyboards/ergodox/keymaps/jafo/jafo-Notes create mode 100644 keyboards/ergodox/keymaps/jafo/jafo-layout.pdf create mode 100644 keyboards/ergodox/keymaps/jafo/jafo_highres.png create mode 100644 keyboards/ergodox/keymaps/jafo/keymap.c create mode 100644 keyboards/ergodox/keymaps/jafo/readme.md diff --git a/keyboards/ergodox/keymaps/jafo/jafo-Notes b/keyboards/ergodox/keymaps/jafo/jafo-Notes new file mode 100644 index 0000000000..9376125e90 --- /dev/null +++ b/keyboards/ergodox/keymaps/jafo/jafo-Notes @@ -0,0 +1,10 @@ +These are notes on how to build and deploy the firmware to Ez, but they are +from before the qmk restructuring. + +cd qmk_firmware/keyboard/ergodox_ez +make KEYMAP=jafo +cp ergodox_ez.hex keymaps/jafo/ +/tmp/teensy.64bit +Open hex keymap file +Program +Upload diff --git a/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf new file mode 100644 index 0000000000..189b49b128 Binary files /dev/null and b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf differ diff --git a/keyboards/ergodox/keymaps/jafo/jafo_highres.png b/keyboards/ergodox/keymaps/jafo/jafo_highres.png new file mode 100644 index 0000000000..e3d7cef858 Binary files /dev/null and b/keyboards/ergodox/keymaps/jafo/jafo_highres.png differ diff --git a/keyboards/ergodox/keymaps/jafo/keymap.c b/keyboards/ergodox/keymaps/jafo/keymap.c new file mode 100644 index 0000000000..c5f21bd82e --- /dev/null +++ b/keyboards/ergodox/keymaps/jafo/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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Grv | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | = | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Esc/Cmd| A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" | Del | Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |Ctrl/Esc| Alt| | 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(MDIA), + LT(SYMB,KC_GRV),KC_QUOT, KC_DELT, KC_LEFT,KC_RGHT, + CTL_T(KC_ESC), KC_LALT, + 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + TG(MDIA), KC_N, 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| |------| |------| LEFT | DOWN | UP | RIGHT| | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Lclk | Mclk | 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_BTN1, KC_BTN3, 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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/keyboards/ergodox/keymaps/jafo/readme.md b/keyboards/ergodox/keymaps/jafo/readme.md new file mode 100644 index 0000000000..c870dfd050 --- /dev/null +++ b/keyboards/ergodox/keymaps/jafo/readme.md @@ -0,0 +1,20 @@ +# ErgoDox EZ "jafo" Configuration + +This is a layout based on the ErgoDox Ez default layout, but with some +customizations I made for my use-case. I use Linux, vi and the i3 window +manager, so I made these changes: + +- Arrow keys laid out in vi positions in media layer. + +- Esc (tap) and Win (held) to the left of A. i3 uses Win key for navigation + and having that be symmetric on the left and right makes it easier. + +- Grave accent below equals, I was having a hard time using ~ + +- Layer 2 switch below the L1 switch, so I can go into a mode where I get + arrow keys under my vi motion fingers. + +- Making the Ctrl (held) and Esc (tap) on my thumbs symmetric. Not sure I + need that with the Esc left of A and Ctrl on the Z and / keys when held... + +![Jafo](jafo_highres.png) -- cgit v1.2.3 From b918aa6bab85e7dba586a9ee2bde650b721113c2 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 14:49:29 -0600 Subject: Adding submodule note. --- keyboards/ergodox/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 9f89418634..c3aa6c9da2 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -3,6 +3,7 @@ To build an Infinity firmware under Ubuntu (tested on 15.10): - Run the `util/install_dependencies.sh` script as root. + - Check out the submodules with `git submodule update --init --recursive` - Build the firmware with `make keymap=keymapname subproject=infinity` - Plug in the left hand keyboard only. - Press the program button (back of keyboard, above thumb pad). -- cgit v1.2.3 From 30c63b1495ac49cf4f7ea9e6271ade53496f7770 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 14:52:05 -0600 Subject: Noting the change directory. --- keyboards/ergodox/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index c3aa6c9da2..1c1181dbae 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -4,6 +4,7 @@ To build an Infinity firmware under Ubuntu (tested on 15.10): - Run the `util/install_dependencies.sh` script as root. - Check out the submodules with `git submodule update --init --recursive` + - Go into the ErgoDox directory with `cd keyboards/ergodox` - Build the firmware with `make keymap=keymapname subproject=infinity` - Plug in the left hand keyboard only. - Press the program button (back of keyboard, above thumb pad). -- cgit v1.2.3 From 86706de036cf7ad52b679b259ca8f980057d0da5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 1 Aug 2016 09:23:37 +0300 Subject: Parsing of makefile variables from starting dir --- Makefile | 322 +++++++----------------------------------------------- build_keyboard.mk | 276 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 317 insertions(+), 281 deletions(-) create mode 100644 build_keyboard.mk diff --git a/Makefile b/Makefile index 693edc9f06..fcd57754b5 100644 --- a/Makefile +++ b/Makefile @@ -1,281 +1,41 @@ -ifndef VERBOSE -.SILENT: -endif - -.DEFAULT_GOAL := all - -space := $(subst ,, ) -ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) -starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) -mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) -abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) - -ifneq (,$(findstring /keyboards/,$(starting_makefile))) - possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) - ifneq (,$(findstring /keymaps/,$(possible_keyboard))) - KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) - KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard))) - ifneq (,$(findstring /,$(KEYBOARD_DIR))) - # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) - # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) - tmk_root = ../../.. - else - tmk_root = ../../../.. - endif - else - KEYMAP_DIR:=default - KEYBOARD_DIR:=$(possible_keyboard) - ifneq (,$(findstring /,$(KEYBOARD_DIR))) - # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) - # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) - tmk_root = ../../.. - else - tmk_root = ../.. - endif - endif -else - tmk_root = . -endif -# $(info $(KEYBOARD_DIR)) -# $(info $(KEYMAP_DIR)) -# $(info $(SUBPROJECT_DIR)) - -# Directory common source filess exist -TOP_DIR = $(tmk_root) -TMK_DIR = tmk_core -TMK_PATH = $(TOP_DIR)/$(TMK_DIR) -LIB_PATH = $(TOP_DIR)/lib - -QUANTUM_DIR = quantum -QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) - - -ifdef keyboard - KEYBOARD ?= $(keyboard) -endif -ifdef KEYBOARD_DIR - KEYBOARD ?= $(KEYBOARD_DIR) -endif -ifndef KEYBOARD - KEYBOARD=planck -endif - -MASTER ?= left -ifdef master - MASTER = $(master) -endif - - -# converts things to keyboards/subproject -ifneq (,$(findstring /,$(KEYBOARD))) - TEMP:=$(KEYBOARD) - KEYBOARD:=$(firstword $(subst /, ,$(TEMP))) - SUBPROJECT:=$(lastword $(subst /, ,$(TEMP))) -endif - -KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD) - -ifdef sub - SUBPROJECT=$(sub) -endif -ifdef subproject - SUBPROJECT=$(subproject) -endif - -ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") - KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) - -include $(KEYBOARD_PATH)/Makefile - endif -else -$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) -endif - -ifdef SUBPROJECT_DEFAULT - SUBPROJECT?=$(SUBPROJECT_DEFAULT) -endif - -ifdef SUBPROJECT - SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT) - ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") - OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) - SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c - ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) - -include $(SUBPROJECT_PATH)/Makefile - endif - else -$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) - endif -endif - -ifdef keymap - KEYMAP ?= $(keymap) -endif -ifdef KEYMAP_DIR - KEYMAP ?= $(KEYMAP_DIR) -endif -ifndef KEYMAP - KEYMAP = default -endif -KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) -ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") - KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif -else - ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") -$(error "$(KEYMAP_PATH)/keymap.c" does not exist) - else - KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) - KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif - endif -endif - -ifdef SUBPROJECT - TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) -else - TARGET ?= $(KEYBOARD)_$(KEYMAP) -endif - -BUILD_DIR = $(TOP_DIR)/.build - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = $(BUILD_DIR)/obj_$(TARGET) - - - -ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") - CONFIG_H = $(KEYMAP_PATH)/config.h -else - CONFIG_H = $(KEYBOARD_PATH)/config.h - ifdef SUBPROJECT - ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") - CONFIG_H = $(SUBPROJECT_PATH)/config.h - endif - endif -endif - -# # project specific files -SRC += $(KEYBOARD_FILE) \ - $(KEYMAP_FILE) \ - $(QUANTUM_DIR)/quantum.c \ - $(QUANTUM_DIR)/keymap_common.c \ - $(QUANTUM_DIR)/keycode_config.c \ - $(QUANTUM_DIR)/process_keycode/process_leader.c - -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) -endif - -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) -endif - -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) -endif - -ifndef CUSTOM_MATRIX - SRC += $(QUANTUM_DIR)/matrix.c -endif - -ifeq ($(strip $(MIDI_ENABLE)), yes) - OPT_DEFS += -DMIDI_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c -endif - -ifeq ($(strip $(AUDIO_ENABLE)), yes) - OPT_DEFS += -DAUDIO_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_music.c - SRC += $(QUANTUM_DIR)/audio/audio.c - SRC += $(QUANTUM_DIR)/audio/voices.c - SRC += $(QUANTUM_DIR)/audio/luts.c -endif - -ifeq ($(strip $(UCIS_ENABLE)), yes) - OPT_DEFS += -DUCIS_ENABLE - UNICODE_ENABLE = yes -endif - -ifeq ($(strip $(UNICODE_ENABLE)), yes) - OPT_DEFS += -DUNICODE_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c -endif - -ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) - OPT_DEFS += -DRGBLIGHT_ENABLE - SRC += $(QUANTUM_DIR)/light_ws2812.c - SRC += $(QUANTUM_DIR)/rgblight.c -endif - -ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) - OPT_DEFS += -DTAP_DANCE_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c -endif - -ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) - SERIAL_DIR = $(QUANTUM_DIR)/serial_link - SERIAL_PATH = $(QUANTUM_PATH)/serial_link - SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) - SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) - SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) - OPT_DEFS += -DSERIAL_LINK_ENABLE - VAPTH += $(SERIAL_PATH) -endif - -# Optimize size but this may cause error "relocation truncated to fit" -#EXTRALDFLAGS = -Wl,--relax - -# Search Path -VPATH += $(KEYMAP_PATH) -ifdef SUBPROJECT - VPATH += $(SUBPROJECT_PATH) -endif -VPATH += $(KEYBOARD_PATH) -VPATH += $(TOP_DIR) -VPATH += $(TMK_PATH) -VPATH += $(QUANTUM_PATH) -VPATH += $(QUANTUM_PATH)/keymap_extras -VPATH += $(QUANTUM_PATH)/audio -VPATH += $(QUANTUM_PATH)/process_keycode - - -# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA -ifdef MCU_FAMILY - PLATFORM=CHIBIOS -else - PLATFORM=AVR -endif - -include $(TMK_PATH)/common.mk -ifeq ($(PLATFORM),AVR) - include $(TMK_PATH)/protocol/lufa.mk - include $(TMK_PATH)/avr.mk -else ifeq ($(PLATFORM),CHIBIOS) - include $(TMK_PATH)/protocol/chibios.mk - include $(TMK_PATH)/chibios.mk - OPT_OS = chibios -else - $(error Unknown platform) -endif - -ifeq ($(strip $(VISUALIZER_ENABLE)), yes) - VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer - VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer - include $(VISUALIZER_PATH)/visualizer.mk -endif - -include $(TMK_PATH)/rules.mk - -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") -BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") -OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" - -$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) +STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) +ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) +ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE)) +ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) +ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) +ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE)) +STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) + +PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) + +define NEXT_PATH_ELEMENT + $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) + $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) +endef + +$(eval $(call NEXT_PATH_ELEMENT)) + +ifeq ($(CURRENT_PATH_ELEMENT),keyboards) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYBOARD := $(CURRENT_PATH_ELEMENT) + $(eval $(call NEXT_PATH_ELEMENT)) + ifeq ($(CURRENT_PATH_ELEMENT),keymaps) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYMAP := $(CURRENT_PATH_ELEMENT) + else ifneq ($(CURRENT_PATH_ELEMENT),) + SUBPROJECT := $(CURRENT_PATH_ELEMENT) + $(eval $(call NEXT_PATH_ELEMENT)) + ifeq ($(CURRENT_PATH_ELEMENT),keymaps) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYMAP := $(CURRENT_PATH_ELEMENT) + endif + endif +endif + +$(info Keyboard: $(KEYBOARD)) +$(info Keymap: $(KEYMAP)) +$(info Subproject: $(SUBPROJECT)) + + +all: + echo "Compiling" \ No newline at end of file diff --git a/build_keyboard.mk b/build_keyboard.mk new file mode 100644 index 0000000000..053c8532af --- /dev/null +++ b/build_keyboard.mk @@ -0,0 +1,276 @@ +ifndef VERBOSE +.SILENT: +endif + +.DEFAULT_GOAL := all + +space := $(subst ,, ) +ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) +starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) +mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) +abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) + +ifneq (,$(findstring /keyboards/,$(starting_makefile))) + possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) + ifneq (,$(findstring /keymaps/,$(possible_keyboard))) + KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) + KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard))) + ifneq (,$(findstring /,$(KEYBOARD_DIR))) + # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) + # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) + tmk_root = ../../.. + else + tmk_root = ../../../.. + endif + else + KEYMAP_DIR:=default + KEYBOARD_DIR:=$(possible_keyboard) + ifneq (,$(findstring /,$(KEYBOARD_DIR))) + # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) + # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) + tmk_root = ../../.. + else + tmk_root = ../.. + endif + endif +else + tmk_root = . +endif +# $(info $(KEYBOARD_DIR)) +# $(info $(KEYMAP_DIR)) +# $(info $(SUBPROJECT_DIR)) + +# Directory common source filess exist +TOP_DIR = $(tmk_root) +TMK_DIR = tmk_core +TMK_PATH = $(TOP_DIR)/$(TMK_DIR) +LIB_PATH = $(TOP_DIR)/lib + +QUANTUM_DIR = quantum +QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) + + +ifdef keyboard + KEYBOARD ?= $(keyboard) +endif +ifdef KEYBOARD_DIR + KEYBOARD ?= $(KEYBOARD_DIR) +endif +ifndef KEYBOARD + KEYBOARD=planck +endif + +MASTER ?= left +ifdef master + MASTER = $(master) +endif + + +# converts things to keyboards/subproject +ifneq (,$(findstring /,$(KEYBOARD))) + TEMP:=$(KEYBOARD) + KEYBOARD:=$(firstword $(subst /, ,$(TEMP))) + SUBPROJECT:=$(lastword $(subst /, ,$(TEMP))) +endif + +KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD) + +ifdef sub + SUBPROJECT=$(sub) +endif +ifdef subproject + SUBPROJECT=$(subproject) +endif + +ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") + KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c + ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) + -include $(KEYBOARD_PATH)/Makefile + endif +else +$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) +endif + +ifdef SUBPROJECT_DEFAULT + SUBPROJECT?=$(SUBPROJECT_DEFAULT) +endif + +ifdef SUBPROJECT + SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT) + ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") + OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) + SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c + ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) + -include $(SUBPROJECT_PATH)/Makefile + endif + else +$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) + endif +endif + +ifdef keymap + KEYMAP ?= $(keymap) +endif +ifdef KEYMAP_DIR + KEYMAP ?= $(KEYMAP_DIR) +endif +ifndef KEYMAP + KEYMAP = default +endif +KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) +ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") + KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif +else + ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") +$(error "$(KEYMAP_PATH)/keymap.c" does not exist) + else + KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) + KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif + endif +endif + +ifdef SUBPROJECT + TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) +else + TARGET ?= $(KEYBOARD)_$(KEYMAP) +endif + +BUILD_DIR = $(TOP_DIR)/.build + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) + + + +ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") + CONFIG_H = $(KEYMAP_PATH)/config.h +else + CONFIG_H = $(KEYBOARD_PATH)/config.h + ifdef SUBPROJECT + ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") + CONFIG_H = $(SUBPROJECT_PATH)/config.h + endif + endif +endif + +# # project specific files +SRC += $(KEYBOARD_FILE) \ + $(KEYMAP_FILE) \ + $(QUANTUM_DIR)/quantum.c \ + $(QUANTUM_DIR)/keymap_common.c \ + $(QUANTUM_DIR)/keycode_config.c \ + $(QUANTUM_DIR)/process_keycode/process_leader.c + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif + +ifndef CUSTOM_MATRIX + SRC += $(QUANTUM_DIR)/matrix.c +endif + +ifeq ($(strip $(MIDI_ENABLE)), yes) + OPT_DEFS += -DMIDI_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c +endif + +ifeq ($(strip $(AUDIO_ENABLE)), yes) + OPT_DEFS += -DAUDIO_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_music.c + SRC += $(QUANTUM_DIR)/audio/audio.c + SRC += $(QUANTUM_DIR)/audio/voices.c + SRC += $(QUANTUM_DIR)/audio/luts.c +endif + +ifeq ($(strip $(UNICODE_ENABLE)), yes) + OPT_DEFS += -DUNICODE_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c +endif + +ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) + OPT_DEFS += -DRGBLIGHT_ENABLE + SRC += $(QUANTUM_DIR)/light_ws2812.c + SRC += $(QUANTUM_DIR)/rgblight.c +endif + +ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) + OPT_DEFS += -DTAP_DANCE_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c +endif + +ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) + SERIAL_DIR = $(QUANTUM_DIR)/serial_link + SERIAL_PATH = $(QUANTUM_PATH)/serial_link + SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) + SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) + SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) + OPT_DEFS += -DSERIAL_LINK_ENABLE + VAPTH += $(SERIAL_PATH) +endif + +# Optimize size but this may cause error "relocation truncated to fit" +#EXTRALDFLAGS = -Wl,--relax + +# Search Path +VPATH += $(KEYMAP_PATH) +ifdef SUBPROJECT + VPATH += $(SUBPROJECT_PATH) +endif +VPATH += $(KEYBOARD_PATH) +VPATH += $(TOP_DIR) +VPATH += $(TMK_PATH) +VPATH += $(QUANTUM_PATH) +VPATH += $(QUANTUM_PATH)/keymap_extras +VPATH += $(QUANTUM_PATH)/audio +VPATH += $(QUANTUM_PATH)/process_keycode + + +# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA +ifdef MCU_FAMILY + PLATFORM=CHIBIOS +else + PLATFORM=AVR +endif + +include $(TMK_PATH)/common.mk +ifeq ($(PLATFORM),AVR) + include $(TMK_PATH)/protocol/lufa.mk + include $(TMK_PATH)/avr.mk +else ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/protocol/chibios.mk + include $(TMK_PATH)/chibios.mk + OPT_OS = chibios +else + $(error Unknown platform) +endif + +ifeq ($(strip $(VISUALIZER_ENABLE)), yes) + VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer + VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer + include $(VISUALIZER_PATH)/visualizer.mk +endif + +include $(TMK_PATH)/rules.mk + +GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") +OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" + +$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file -- cgit v1.2.3 From e6e675335dbaa6bd175be7aaee829c717e572488 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 3 Aug 2016 08:44:11 +0300 Subject: First version of rule parsing Only handles allkb at the moment. --- Makefile | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/Makefile b/Makefile index fcd57754b5..f0d5c05ccc 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,54 @@ $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) +# Compare the start of the RULE_VARIABLE with the first argument($1) +# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true +# and $1 is removed from the RULE variable +# Otherwise the RULE_FOUND variable is set to false +# The function is a bit tricky, since there's no built in $(startswith) function +define COMPARE_AND_REMOVE_FROM_RULE + ifeq ($1,$$(RULE)) + RULE:= + RULE_FOUND := true + else + STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE)) + ifneq ($$(STARTDASH_REMOVED),START$$(RULE)) + RULE_FOUND := true + RULE := $$(STARTDASH_REMOVED) + else + RULE_FOUND := false + endif + endif +endef + +define PARSE_ALL_KEYBOARDS + COMMANDS += allkb + #$$(info $$(RULE)) + COMMAND_allkb := "All keyboards with $$(RULE)" +endef + +define PARSE_RULE + RULE := $1 + COMMANDS := + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_KEYBOARDS)) + endif +endef + +RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); + +.PHONY: % +%: + $(eval $(call PARSE_RULE,$@)) + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +.PHONY: all-keyboards +all-keyboards: allkb + +.PHONY: all-keyboards-defaults +all-keyboards-defaults: allkb-default-default +.PHONY: all all: echo "Compiling" \ No newline at end of file -- cgit v1.2.3 From f97ae2b199df087f4b48c7019c2d887089d81614 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 3 Aug 2016 09:28:47 +0300 Subject: Rule parsing to match kebyoards --- Makefile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Makefile b/Makefile index f0d5c05ccc..b24270ad1b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,9 @@ STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) +ROOT_DIR := $(dir, $(ROOT_MAKEFILE)) +ifeq ($(ROOT_DIR),) + ROOT_DIR := . +endif ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE)) ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) @@ -32,9 +36,14 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif endif +$(info $(ROOT_DIR)/keyboards) +KEYBOARDS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/*/.))) + $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) +$(info Keyboards: $(KEYBOARDS)) + # Compare the start of the RULE_VARIABLE with the first argument($1) # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true @@ -62,12 +71,34 @@ define PARSE_ALL_KEYBOARDS COMMAND_allkb := "All keyboards with $$(RULE)" endef +define PARSE_KEYBOARD + COMMANDS += $1 + #$$(info $$(RULE)) + COMMAND_$1 := "Keyboard $1 with $$(RULE)" +endef + + +# Recursively try to find a matching keyboard +# During the first call $1 contains a list of all keyboards +# One keyboard is checked and removed at a time +define TRY_PARSE_KEYBOARD + CURRENT_KB := $$(firstword $1) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KB))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYBOARD,$$(CURRENT_KB))) + else ifneq ($1,) + $$(eval $$(call TRY_PARSE_KEYBOARD,$$(wordlist 2,9999,$1))) + endif +endef + define PARSE_RULE RULE := $1 COMMANDS := $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) + else + $$(eval $$(call TRY_PARSE_KEYBOARD,$(KEYBOARDS))) endif endef -- cgit v1.2.3 From 9b02e66ce0f703480e42038a5084174a45b54b1d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 08:49:44 +0300 Subject: Add keymap parsing --- Makefile | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b24270ad1b..b4204478e1 100644 --- a/Makefile +++ b/Makefile @@ -71,12 +71,28 @@ define PARSE_ALL_KEYBOARDS COMMAND_allkb := "All keyboards with $$(RULE)" endef +# $1 = Keyboard define PARSE_KEYBOARD - COMMANDS += $1 - #$$(info $$(RULE)) - COMMAND_$1 := "Keyboard $1 with $$(RULE)" + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_KEYMAPS, $1)) + else + KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) + $$(eval $$(call TRY_PARSE_KEYMAP,$$(KEYMAPS),$1)) + endif +endef + +define PARSE_ALL_KEYMAPS + COMMANDS += ALL_KEYMAPS + COMMAND_ALL_KEYMAPS := All keymaps in $1 endef +# $1 Keyboard +# $2 Keymap +define PARSE_KEYMAP + COMMANDS += KEYBOARD_$1_KEYMAP_$2 + COMMAND_KEYBOARD_$1_KEYMAP_$2 := Keyboard $1, Keymap $2 +endef # Recursively try to find a matching keyboard # During the first call $1 contains a list of all keyboards @@ -91,6 +107,18 @@ define TRY_PARSE_KEYBOARD endif endef +# $1 list of keymaps +# $2 keyboard +define TRY_PARSE_KEYMAP + CURRENT_KM := $$(firstword $1) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KM))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYMAP,$2,$$(CURRENT_KM))) + else ifneq ($1,) + $$(eval $$(call TRY_PARSE_KEYMAP,$$(wordlist 2,9999,$1),$2)) + endif +endef + define PARSE_RULE RULE := $1 COMMANDS := -- cgit v1.2.3 From dfe510d5b8f83c9977b507ed204632c2f22c5d24 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 09:17:02 +0300 Subject: Refactor common rule list parsing into own function --- Makefile | 61 +++++++++++++++++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index b4204478e1..e88eeefee4 100644 --- a/Makefile +++ b/Makefile @@ -65,6 +65,20 @@ define COMPARE_AND_REMOVE_FROM_RULE endif endef +# Recursively try to find a match +# $1 The list to be checked +# If a match is found, then RULE_FOUND is set to true +# and MATCHED_ITEM to the item that was matched +define TRY_TO_MATCH_RULE_FROM_LIST + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) + ifeq ($$(RULE_FOUND),true) + MATCHED_ITEM := $$(firstword $1) + else ifneq ($1,) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + endif +endef + + define PARSE_ALL_KEYBOARDS COMMANDS += allkb #$$(info $$(RULE)) @@ -73,51 +87,31 @@ endef # $1 = Keyboard define PARSE_KEYBOARD + CURRENT_KB := $1 $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_ALL_KEYMAPS, $1)) + $$(eval $$(call PARSE_ALL_KEYMAPS)) else KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) - $$(eval $$(call TRY_PARSE_KEYMAP,$$(KEYMAPS),$1)) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + endif endif endef define PARSE_ALL_KEYMAPS COMMANDS += ALL_KEYMAPS - COMMAND_ALL_KEYMAPS := All keymaps in $1 + COMMAND_ALL_KEYMAPS := All keymaps in $(CURRENT_KB) endef -# $1 Keyboard -# $2 Keymap +# $1 Keymap define PARSE_KEYMAP - COMMANDS += KEYBOARD_$1_KEYMAP_$2 - COMMAND_KEYBOARD_$1_KEYMAP_$2 := Keyboard $1, Keymap $2 + CURRENT_KM = $1 + COMMANDS += KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) + COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) endef -# Recursively try to find a matching keyboard -# During the first call $1 contains a list of all keyboards -# One keyboard is checked and removed at a time -define TRY_PARSE_KEYBOARD - CURRENT_KB := $$(firstword $1) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KB))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYBOARD,$$(CURRENT_KB))) - else ifneq ($1,) - $$(eval $$(call TRY_PARSE_KEYBOARD,$$(wordlist 2,9999,$1))) - endif -endef - -# $1 list of keymaps -# $2 keyboard -define TRY_PARSE_KEYMAP - CURRENT_KM := $$(firstword $1) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KM))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYMAP,$2,$$(CURRENT_KM))) - else ifneq ($1,) - $$(eval $$(call TRY_PARSE_KEYMAP,$$(wordlist 2,9999,$1),$2)) - endif -endef define PARSE_RULE RULE := $1 @@ -126,7 +120,10 @@ define PARSE_RULE ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else - $$(eval $$(call TRY_PARSE_KEYBOARD,$(KEYBOARDS))) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + endif endif endef -- cgit v1.2.3 From 9ee6d4a23d9a1bdc019fc9968a909866ffeda905 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 09:56:03 +0300 Subject: Proper looping for allkb and allkm --- Makefile | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index e88eeefee4..57cf3f523a 100644 --- a/Makefile +++ b/Makefile @@ -78,21 +78,32 @@ define TRY_TO_MATCH_RULE_FROM_LIST endif endef +define ALL_IN_LIST_LOOP + OLD_RULE$1 := $$(RULE) + $$(eval $$(call $1,$$(ITEM$1))) + RULE := $$(OLD_RULE$1) +endef + +define PARSE_ALL_IN_LIST + $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1))) +endef define PARSE_ALL_KEYBOARDS - COMMANDS += allkb - #$$(info $$(RULE)) - COMMAND_allkb := "All keyboards with $$(RULE)" + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) +endef + +define PARSE_ALL_KEYMAPS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef # $1 = Keyboard define PARSE_KEYBOARD CURRENT_KB := $1 + KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) else - KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) @@ -100,11 +111,6 @@ define PARSE_KEYBOARD endif endef -define PARSE_ALL_KEYMAPS - COMMANDS += ALL_KEYMAPS - COMMAND_ALL_KEYMAPS := All keymaps in $(CURRENT_KB) -endef - # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 @@ -112,7 +118,6 @@ define PARSE_KEYMAP COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) endef - define PARSE_RULE RULE := $1 COMMANDS := -- cgit v1.2.3 From 1df6498721e989f1b3b10ba4b1b03d0ba54e9204 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 14:33:49 +0300 Subject: Subproject parsing Does not handle keyboards without subprojects correctly yet. --- Makefile | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 57cf3f523a..e9e95569c4 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ $(info Keyboards: $(KEYBOARDS)) # Otherwise the RULE_FOUND variable is set to false # The function is a bit tricky, since there's no built in $(startswith) function define COMPARE_AND_REMOVE_FROM_RULE + RULE_FOUND := false ifeq ($1,$$(RULE)) RULE:= RULE_FOUND := true @@ -70,11 +71,13 @@ endef # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched define TRY_TO_MATCH_RULE_FROM_LIST - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) - ifeq ($$(RULE_FOUND),true) - MATCHED_ITEM := $$(firstword $1) - else ifneq ($1,) - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + ifneq ($1,) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) + ifeq ($$(RULE_FOUND),true) + MATCHED_ITEM := $$(firstword $1) + else + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + endif endif endef @@ -96,10 +99,18 @@ define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef -# $1 = Keyboard -define PARSE_KEYBOARD - CURRENT_KB := $1 - KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) +define PARSE_ALL_SUBPROJECTS + ifeq ($$(SUBPROJECTS),) + $$(eval $$(call PARSE_SUBPROJECT,)) + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) + endif +endef + +# $1 Subproject +define PARSE_SUBPROJECT + CURRENT_SP := $1 + KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) @@ -111,11 +122,27 @@ define PARSE_KEYBOARD endif endef +# $1 = Keyboard +define PARSE_KEYBOARD + CURRENT_KB := $1 + # A subproject is any keyboard subfolder with a makefile + SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allsp)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + endif + endif +endef + # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 - COMMANDS += KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) - COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) + COMMANDS += KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) + COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) endef define PARSE_RULE -- cgit v1.2.3 From 286b3b8057630bf9ce78d3a0aaa24f4841b37b3e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 15:56:41 +0300 Subject: Slight refactoring to remove some verbosity --- Makefile | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index e9e95569c4..8f7dbb9e6c 100644 --- a/Makefile +++ b/Makefile @@ -50,8 +50,7 @@ $(info Keyboards: $(KEYBOARDS)) # and $1 is removed from the RULE variable # Otherwise the RULE_FOUND variable is set to false # The function is a bit tricky, since there's no built in $(startswith) function -define COMPARE_AND_REMOVE_FROM_RULE - RULE_FOUND := false +define COMPARE_AND_REMOVE_FROM_RULE_HELPER ifeq ($1,$$(RULE)) RULE:= RULE_FOUND := true @@ -66,21 +65,25 @@ define COMPARE_AND_REMOVE_FROM_RULE endif endef +COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND) + + # Recursively try to find a match # $1 The list to be checked # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched -define TRY_TO_MATCH_RULE_FROM_LIST +define TRY_TO_MATCH_RULE_FROM_LIST_HELPER ifneq ($1,) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) MATCHED_ITEM := $$(firstword $1) else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$$(wordlist 2,9999,$1))) endif endif endef +TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) + define ALL_IN_LIST_LOOP OLD_RULE$1 := $$(RULE) $$(eval $$(call $1,$$(ITEM$1))) @@ -111,14 +114,10 @@ endef define PARSE_SUBPROJECT CURRENT_SP := $1 KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) endif endef @@ -127,14 +126,10 @@ define PARSE_KEYBOARD CURRENT_KB := $1 # A subproject is any keyboard subfolder with a makefile SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allsp)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) $$(eval $$(call PARSE_ALL_SUBPROJECTS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) endif endef @@ -148,14 +143,10 @@ endef define PARSE_RULE RULE := $1 COMMANDS := - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) endif endef -- cgit v1.2.3 From 091fab5103bd896f1b36094a7337dbe2f9d2ad59 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 16:02:14 +0300 Subject: Slight rearrange of the Makefile for easier readability --- Makefile | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 8f7dbb9e6c..a034213653 100644 --- a/Makefile +++ b/Makefile @@ -94,20 +94,30 @@ define PARSE_ALL_IN_LIST $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1))) endef -define PARSE_ALL_KEYBOARDS - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) +define PARSE_RULE + RULE := $1 + COMMANDS := + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) + $$(eval $$(call PARSE_ALL_KEYBOARDS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + endif endef -define PARSE_ALL_KEYMAPS - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) +# $1 = Keyboard +define PARSE_KEYBOARD + CURRENT_KB := $1 + # A subproject is any keyboard subfolder with a makefile + SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) + $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + endif endef -define PARSE_ALL_SUBPROJECTS - ifeq ($$(SUBPROJECTS),) - $$(eval $$(call PARSE_SUBPROJECT,)) - else - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) - endif +define PARSE_ALL_KEYBOARDS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) endef # $1 Subproject @@ -121,15 +131,11 @@ define PARSE_SUBPROJECT endif endef -# $1 = Keyboard -define PARSE_KEYBOARD - CURRENT_KB := $1 - # A subproject is any keyboard subfolder with a makefile - SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) - $$(eval $$(call PARSE_ALL_SUBPROJECTS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) - $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) +define PARSE_ALL_SUBPROJECTS + ifeq ($$(SUBPROJECTS),) + $$(eval $$(call PARSE_SUBPROJECT,)) + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) endif endef @@ -140,14 +146,8 @@ define PARSE_KEYMAP COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) endef -define PARSE_RULE - RULE := $1 - COMMANDS := - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) - $$(eval $$(call PARSE_ALL_KEYBOARDS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) - $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) - endif +define PARSE_ALL_KEYMAPS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); -- cgit v1.2.3 From 0d5caead5ad0edc06aedda06814da05815fc177e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 16:45:33 +0300 Subject: Add default subproject parsing --- Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a034213653..1e11dd5ff8 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) +QUANTUM_DIR:=$(ROOT_DIR)/quantum + define NEXT_PATH_ELEMENT $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) @@ -111,8 +113,14 @@ define PARSE_KEYBOARD SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true) + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + else + # If there's no matching subproject, we assume it's the default + # This will allow you to leave the subproject part of the target out + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) endif endef @@ -122,7 +130,12 @@ endef # $1 Subproject define PARSE_SUBPROJECT - CURRENT_SP := $1 + ifeq ($1,defaultsp) + $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) + CURRENT_SP := $$(SUBPROJECT_DEFAULT) + else + CURRENT_SP := $1 + endif KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) @@ -133,7 +146,7 @@ endef define PARSE_ALL_SUBPROJECTS ifeq ($$(SUBPROJECTS),) - $$(eval $$(call PARSE_SUBPROJECT,)) + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) endif -- cgit v1.2.3 From 44441de8cad7255fd0637459ed39b89e34751b78 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 17:04:39 +0300 Subject: Split keyboard makefiles into rules and Makefile --- Makefile | 2 +- keyboards/alps64/Makefile | 69 +---------------------- keyboards/alps64/rules.mk | 66 ++++++++++++++++++++++ keyboards/amj60/Makefile | 71 +----------------------- keyboards/amj60/rules.mk | 66 ++++++++++++++++++++++ keyboards/arrow_pad/Makefile | 73 +----------------------- keyboards/arrow_pad/rules.mk | 70 +++++++++++++++++++++++ keyboards/atomic/Makefile | 72 +----------------------- keyboards/atomic/rules.mk | 69 +++++++++++++++++++++++ keyboards/atreus/Makefile | 89 +---------------------------- keyboards/atreus/rules.mk | 82 +++++++++++++++++++++++++++ keyboards/bantam44/Makefile | 73 +----------------------- keyboards/bantam44/rules.mk | 67 ++++++++++++++++++++++ keyboards/chibios_test/Makefile | 11 +--- keyboards/chibios_test/rules.mk | 8 +++ keyboards/clueboard/Makefile | 108 +----------------------------------- keyboards/clueboard/rules.mk | 103 ++++++++++++++++++++++++++++++++++ keyboards/cluecard/Makefile | 77 +------------------------ keyboards/cluecard/rules.mk | 70 +++++++++++++++++++++++ keyboards/cluepad/Makefile | 71 +----------------------- keyboards/cluepad/rules.mk | 65 ++++++++++++++++++++++ keyboards/ergodox/Makefile | 33 +---------- keyboards/ergodox/rules.mk | 28 ++++++++++ keyboards/gh60/Makefile | 77 +------------------------ keyboards/gh60/rules.mk | 68 +++++++++++++++++++++++ keyboards/handwired/Makefile | 2 +- keyboards/handwired/onekey/Makefile | 66 +--------------------- keyboards/handwired/rules.mk | 0 keyboards/hhkb/Makefile | 91 +----------------------------- keyboards/hhkb/rules.mk | 84 ++++++++++++++++++++++++++++ keyboards/infinity_chibios/Makefile | 69 +---------------------- keyboards/infinity_chibios/rules.mk | 66 ++++++++++++++++++++++ keyboards/jd45/Makefile | 72 +----------------------- keyboards/jd45/rules.mk | 67 ++++++++++++++++++++++ keyboards/kc60/Makefile | 77 +------------------------ keyboards/kc60/rules.mk | 70 +++++++++++++++++++++++ keyboards/kinesis/Makefile | 80 +------------------------- keyboards/kinesis/rules.mk | 73 ++++++++++++++++++++++++ keyboards/lets_split/Makefile | 77 +------------------------ keyboards/lets_split/rules.mk | 74 ++++++++++++++++++++++++ keyboards/phantom/Makefile | 75 +------------------------ keyboards/phantom/rules.mk | 69 +++++++++++++++++++++++ keyboards/planck/Makefile | 71 +----------------------- keyboards/planck/rules.mk | 67 ++++++++++++++++++++++ keyboards/preonic/Makefile | 72 +----------------------- keyboards/preonic/rules.mk | 69 +++++++++++++++++++++++ keyboards/retro_refit/Makefile | 75 +------------------------ keyboards/retro_refit/rules.mk | 68 +++++++++++++++++++++++ keyboards/s60-x/Makefile | 76 +------------------------ keyboards/s60-x/rules.mk | 69 +++++++++++++++++++++++ keyboards/satan/Makefile | 71 +----------------------- keyboards/satan/rules.mk | 66 ++++++++++++++++++++++ keyboards/sixkeyboard/Makefile | 76 +------------------------ keyboards/sixkeyboard/rules.mk | 70 +++++++++++++++++++++++ keyboards/tv44/Makefile | 76 +------------------------ keyboards/tv44/rules.mk | 69 +++++++++++++++++++++++ 56 files changed, 1792 insertions(+), 1903 deletions(-) create mode 100644 keyboards/alps64/rules.mk create mode 100644 keyboards/amj60/rules.mk create mode 100644 keyboards/arrow_pad/rules.mk create mode 100644 keyboards/atomic/rules.mk create mode 100644 keyboards/atreus/rules.mk create mode 100644 keyboards/bantam44/rules.mk create mode 100644 keyboards/chibios_test/rules.mk create mode 100644 keyboards/clueboard/rules.mk create mode 100644 keyboards/cluecard/rules.mk create mode 100644 keyboards/cluepad/rules.mk create mode 100644 keyboards/ergodox/rules.mk create mode 100644 keyboards/gh60/rules.mk create mode 100644 keyboards/handwired/rules.mk create mode 100644 keyboards/hhkb/rules.mk create mode 100644 keyboards/infinity_chibios/rules.mk create mode 100644 keyboards/jd45/rules.mk create mode 100644 keyboards/kc60/rules.mk create mode 100644 keyboards/kinesis/rules.mk create mode 100644 keyboards/lets_split/rules.mk create mode 100644 keyboards/phantom/rules.mk create mode 100644 keyboards/planck/rules.mk create mode 100644 keyboards/preonic/rules.mk create mode 100644 keyboards/retro_refit/rules.mk create mode 100644 keyboards/s60-x/rules.mk create mode 100644 keyboards/satan/rules.mk create mode 100644 keyboards/sixkeyboard/rules.mk create mode 100644 keyboards/tv44/rules.mk diff --git a/Makefile b/Makefile index 1e11dd5ff8..b2a8735320 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) -QUANTUM_DIR:=$(ROOT_DIR)/quantum +MAKEFILE_INCLUDED=yes define NEXT_PATH_ELEMENT $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) diff --git a/keyboards/alps64/Makefile b/keyboards/alps64/Makefile index d8325e6c89..4e2a6f00fd 100644 --- a/keyboards/alps64/Makefile +++ b/keyboards/alps64/Makefile @@ -1,70 +1,3 @@ - - -# Target file name (without extension). - -# project specific files -SRC = led.c - -# MCU name -MCU = atmega32u2 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/alps64/rules.mk b/keyboards/alps64/rules.mk new file mode 100644 index 0000000000..c326d3e26c --- /dev/null +++ b/keyboards/alps64/rules.mk @@ -0,0 +1,66 @@ + + +# Target file name (without extension). + +# project specific files +SRC = led.c + +# MCU name +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA \ No newline at end of file diff --git a/keyboards/amj60/Makefile b/keyboards/amj60/Makefile index 1f695aa4d8..4e2a6f00fd 100644 --- a/keyboards/amj60/Makefile +++ b/keyboards/amj60/Makefile @@ -1,70 +1,3 @@ - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/amj60/rules.mk b/keyboards/amj60/rules.mk new file mode 100644 index 0000000000..18403ac328 --- /dev/null +++ b/keyboards/amj60/rules.mk @@ -0,0 +1,66 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/arrow_pad/Makefile b/keyboards/arrow_pad/Makefile index 09fcf3e7a0..4e2a6f00fd 100644 --- a/keyboards/arrow_pad/Makefile +++ b/keyboards/arrow_pad/Makefile @@ -1,74 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= yes # USB Nkey Rollover -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/arrow_pad/rules.mk b/keyboards/arrow_pad/rules.mk new file mode 100644 index 0000000000..3dca9b6ea7 --- /dev/null +++ b/keyboards/arrow_pad/rules.mk @@ -0,0 +1,70 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= yes # USB Nkey Rollover +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 \ No newline at end of file diff --git a/keyboards/atomic/Makefile b/keyboards/atomic/Makefile index 08e9205cbf..4e2a6f00fd 100644 --- a/keyboards/atomic/Makefile +++ b/keyboards/atomic/Makefile @@ -1,73 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk new file mode 100644 index 0000000000..d0f3a3a1c0 --- /dev/null +++ b/keyboards/atomic/rules.mk @@ -0,0 +1,69 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile index 5894d231f9..4e2a6f00fd 100644 --- a/keyboards/atreus/Makefile +++ b/keyboards/atreus/Makefile @@ -1,88 +1,3 @@ - - -ifdef TEENSY2 - OPT_DEFS += -DATREUS_TEENSY2 - ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex -else - OPT_DEFS += -DATREUS_ASTAR - OPT_DEFS += -DCATERINA_BOOTLOADER - ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ - avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) -endif - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -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 - not yet supported in LUFA -# 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 - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - -USB ?= /dev/cu.usbmodem1411 - -upload: build - $(ATREUS_UPLOAD_COMMAND) - +endif \ No newline at end of file diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk new file mode 100644 index 0000000000..d71f50bb2b --- /dev/null +++ b/keyboards/atreus/rules.mk @@ -0,0 +1,82 @@ + + +ifdef TEENSY2 + OPT_DEFS += -DATREUS_TEENSY2 + ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +else + OPT_DEFS += -DATREUS_ASTAR + OPT_DEFS += -DCATERINA_BOOTLOADER + ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) +endif + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +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 - not yet supported in LUFA +# 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 + +USB ?= /dev/cu.usbmodem1411 + +upload: build + $(ATRUES_UPLOAD_COMMAND) \ No newline at end of file diff --git a/keyboards/bantam44/Makefile b/keyboards/bantam44/Makefile index 03893dbf89..4e2a6f00fd 100644 --- a/keyboards/bantam44/Makefile +++ b/keyboards/bantam44/Makefile @@ -1,72 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - +endif \ No newline at end of file diff --git a/keyboards/bantam44/rules.mk b/keyboards/bantam44/rules.mk new file mode 100644 index 0000000000..baa0e9e7a2 --- /dev/null +++ b/keyboards/bantam44/rules.mk @@ -0,0 +1,67 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/chibios_test/Makefile b/keyboards/chibios_test/Makefile index d9f2b8b83b..4b07a62343 100644 --- a/keyboards/chibios_test/Makefile +++ b/keyboards/chibios_test/Makefile @@ -1,14 +1,5 @@ SUBPROJECT_DEFAULT = stm32_f072_onekey -#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/chibios_test/rules.mk b/keyboards/chibios_test/rules.mk new file mode 100644 index 0000000000..4b5a845356 --- /dev/null +++ b/keyboards/chibios_test/rules.mk @@ -0,0 +1,8 @@ +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +MOUSEKEY_ENABLE ?= yes # Mouse keys +EXTRAKEY_ENABLE ?= yes # Audio control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= yes # Commands for debug and configuration +SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover +CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file diff --git a/keyboards/clueboard/Makefile b/keyboards/clueboard/Makefile index e6b13f955a..b9bada8f8d 100644 --- a/keyboards/clueboard/Makefile +++ b/keyboards/clueboard/Makefile @@ -1,109 +1,5 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device. -# Please customize your programmer settings(PROGRAM_CMD) -# -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# 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, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - SUBPROJECT_DEFAULT = rev2 -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change to no to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -AUDIO_ENABLE ?= no -RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard/rules.mk new file mode 100644 index 0000000000..3909fbd5cb --- /dev/null +++ b/keyboards/clueboard/rules.mk @@ -0,0 +1,103 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# 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, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +AUDIO_ENABLE ?= no +RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file diff --git a/keyboards/cluecard/Makefile b/keyboards/cluecard/Makefile index 029d0b9670..4e2a6f00fd 100644 --- a/keyboards/cluecard/Makefile +++ b/keyboards/cluecard/Makefile @@ -1,76 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= yes # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/cluecard/rules.mk b/keyboards/cluecard/rules.mk new file mode 100644 index 0000000000..454235877d --- /dev/null +++ b/keyboards/cluecard/rules.mk @@ -0,0 +1,70 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= yes # Audio output on port C6 diff --git a/keyboards/cluepad/Makefile b/keyboards/cluepad/Makefile index a331ff4dcd..4e2a6f00fd 100644 --- a/keyboards/cluepad/Makefile +++ b/keyboards/cluepad/Makefile @@ -1,70 +1,3 @@ - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -# CONSOLE_ENABLE ?= yes # Console for debug(+400) -# 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 numpad's backlight functionality -RGBLIGHT_ENABLE ?= yes -# MIDI_ENABLE ?= YES # MIDI controls -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/cluepad/rules.mk b/keyboards/cluepad/rules.mk new file mode 100644 index 0000000000..19b16b95a9 --- /dev/null +++ b/keyboards/cluepad/rules.mk @@ -0,0 +1,65 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# 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 numpad's backlight functionality +RGBLIGHT_ENABLE ?= yes +# MIDI_ENABLE ?= YES # MIDI controls +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file diff --git a/keyboards/ergodox/Makefile b/keyboards/ergodox/Makefile index 05fb588d11..7165350050 100644 --- a/keyboards/ergodox/Makefile +++ b/keyboards/ergodox/Makefile @@ -1,34 +1,5 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make = Make software. -# -# make clean = Clean out built project files. -# -# That's pretty much all you need. To compile, always go make clean, -# followed by make. -# -# For advanced users only: -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -#---------------------------------------------------------------------------- SUBPROJECT_DEFAULT = ez -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= yes # Unicode - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk new file mode 100644 index 0000000000..ac63d4eff2 --- /dev/null +++ b/keyboards/ergodox/rules.mk @@ -0,0 +1,28 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make = Make software. +# +# make clean = Clean out built project files. +# +# That's pretty much all you need. To compile, always go make clean, +# followed by make. +# +# For advanced users only: +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +#---------------------------------------------------------------------------- +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ +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 +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= yes # Unicode diff --git a/keyboards/gh60/Makefile b/keyboards/gh60/Makefile index 39a9cc0ae1..4e2a6f00fd 100644 --- a/keyboards/gh60/Makefile +++ b/keyboards/gh60/Makefile @@ -1,74 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -# CONSOLE_ENABLE ?= yes # Console for debug(+400) -# COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - - -ifndef QUANTUM_DIR - include ../../Makefile -endif - +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/gh60/rules.mk b/keyboards/gh60/rules.mk new file mode 100644 index 0000000000..73f4bd76e8 --- /dev/null +++ b/keyboards/gh60/rules.mk @@ -0,0 +1,68 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/handwired/Makefile b/keyboards/handwired/Makefile index 57493a47ca..4e2a6f00fd 100644 --- a/keyboards/handwired/Makefile +++ b/keyboards/handwired/Makefile @@ -1,3 +1,3 @@ -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/handwired/onekey/Makefile b/keyboards/handwired/onekey/Makefile index c6d10856a1..4e2a6f00fd 100644 --- a/keyboards/handwired/onekey/Makefile +++ b/keyboards/handwired/onekey/Makefile @@ -1,65 +1,3 @@ - - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA - -ifndef QUANTUM_DIR - include ../../../Makefile +ifndef MAKEFILE_INCLUDED + include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/handwired/rules.mk b/keyboards/handwired/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/hhkb/Makefile b/keyboards/hhkb/Makefile index 6fe973e1eb..4e2a6f00fd 100644 --- a/keyboards/hhkb/Makefile +++ b/keyboards/hhkb/Makefile @@ -1,90 +1,3 @@ - - -# project specific files -SRC = matrix.c - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -#OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# as per original hasu settings -OPT_DEFS += -DBOOTLOADER_SIZE=512 - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB -# 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - -ifneq (, $(findstring yes, $(HHKB_JP))) - OPT_DEFS += -DHHKB_JP -endif - -debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION -debug-on: all - -debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT -debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS)) -debug-off: all +endif \ No newline at end of file diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk new file mode 100644 index 0000000000..b43b5e23f1 --- /dev/null +++ b/keyboards/hhkb/rules.mk @@ -0,0 +1,84 @@ + + +# project specific files +SRC = matrix.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +#OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# as per original hasu settings +OPT_DEFS += -DBOOTLOADER_SIZE=512 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID + +ifneq (, $(findstring yes, $(HHKB_JP))) + OPT_DEFS += -DHHKB_JP +endif + +debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION +debug-on: all + +debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT +debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS)) +debug-off: all diff --git a/keyboards/infinity_chibios/Makefile b/keyboards/infinity_chibios/Makefile index 649b43e64d..4e2a6f00fd 100644 --- a/keyboards/infinity_chibios/Makefile +++ b/keyboards/infinity_chibios/Makefile @@ -1,70 +1,3 @@ -# project specific files -SRC = matrix.c \ - led.c - -## chip/board settings -# - the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -# - For Teensies, FAMILY = KINETIS and SERIES is either -# KL2x (LC) or K20x (3.0,3.1,3.2). -# - For Infinity KB, SERIES = K20x -MCU_FAMILY = KINETIS -MCU_SERIES = K20x - -# Linker script to use -# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# - NOTE: a custom ld script is needed for EEPROM on Teensy LC -# - LDSCRIPT = -# - MKL26Z64 for Teensy LC -# - MK20DX128 for Teensy 3.0 -# - MK20DX256 for Teensy 3.1 and 3.2 -# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader -MCU_LDSCRIPT = MK20DX128BLDR4 - -# Startup code to use -# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -# - STARTUP = -# - kl2x for Teensy LC -# - k20x5 for Teensy 3.0 and Infinity KB -# - k20x7 for Teensy 3.1 and 3.2 -MCU_STARTUP = k20x5 - -# Board: it should exist either in /os/hal/boards/ -# or /boards -# - BOARD = -# - PJRC_TEENSY_LC for Teensy LC -# - PJRC_TEENSY_3 for Teensy 3.0 -# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 -# - MCHCK_K20 for Infinity KB -BOARD = MCHCK_K20 - -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m4 - -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -# I.e. 6 for Teensy LC; 7 for Teensy 3.x -ARMV = 7 - -# Vector table for application -# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ -# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB -OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000 - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration -## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/infinity_chibios/rules.mk b/keyboards/infinity_chibios/rules.mk new file mode 100644 index 0000000000..56d6470b59 --- /dev/null +++ b/keyboards/infinity_chibios/rules.mk @@ -0,0 +1,66 @@ +# project specific files +SRC = matrix.c \ + led.c + +## chip/board settings +# - the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +# - For Infinity KB, SERIES = K20x +MCU_FAMILY = KINETIS +MCU_SERIES = K20x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader +MCU_LDSCRIPT = MK20DX128BLDR4 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 and Infinity KB +# - k20x7 for Teensy 3.1 and 3.2 +MCU_STARTUP = k20x5 + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +# - MCHCK_K20 for Infinity KB +BOARD = MCHCK_K20 + +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m4 + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 7 + +# Vector table for application +# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ +# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB +OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration +## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) +MOUSEKEY_ENABLE ?= yes # Mouse keys +EXTRAKEY_ENABLE ?= yes # Audio control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= yes # Commands for debug and configuration +SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover +CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file diff --git a/keyboards/jd45/Makefile b/keyboards/jd45/Makefile index 75d544f16a..4e2a6f00fd 100644 --- a/keyboards/jd45/Makefile +++ b/keyboards/jd45/Makefile @@ -1,71 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -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 - not yet supported in LUFA -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 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/jd45/rules.mk b/keyboards/jd45/rules.mk new file mode 100644 index 0000000000..2f1e266a14 --- /dev/null +++ b/keyboards/jd45/rules.mk @@ -0,0 +1,67 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +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 - not yet supported in LUFA +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 \ No newline at end of file diff --git a/keyboards/kc60/Makefile b/keyboards/kc60/Makefile index b00a488b91..4e2a6f00fd 100644 --- a/keyboards/kc60/Makefile +++ b/keyboards/kc60/Makefile @@ -1,76 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - +endif \ No newline at end of file diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk new file mode 100644 index 0000000000..4efd6f9887 --- /dev/null +++ b/keyboards/kc60/rules.mk @@ -0,0 +1,70 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile index ca077e6366..4e2a6f00fd 100644 --- a/keyboards/kinesis/Makefile +++ b/keyboards/kinesis/Makefile @@ -1,79 +1,3 @@ - -## Project specific files - -SRC= matrix.c - -# MCU name -MCU = at90usb1286 -#MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=1024 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= no -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming -CUSTOM_MATRIX=yes # need to do our own thing with the matrix - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk new file mode 100644 index 0000000000..a4a2b7d156 --- /dev/null +++ b/keyboards/kinesis/rules.mk @@ -0,0 +1,73 @@ + +## Project specific files + +SRC= matrix.c + +# MCU name +MCU = at90usb1286 +#MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=1024 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming +CUSTOM_MATRIX=yes # need to do our own thing with the matrix diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index b9f07636be..4e2a6f00fd 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -1,78 +1,3 @@ -SRC += matrix.c \ - i2c.c \ - split_util.c \ - serial.c - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= yes # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -CUSTOM_MATRIX = yes - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk new file mode 100644 index 0000000000..6961fbd556 --- /dev/null +++ b/keyboards/lets_split/rules.mk @@ -0,0 +1,74 @@ +SRC += matrix.c \ + i2c.c \ + split_util.c \ + serial.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= yes # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +CUSTOM_MATRIX = yes \ No newline at end of file diff --git a/keyboards/phantom/Makefile b/keyboards/phantom/Makefile index 3a71fd0ee3..4e2a6f00fd 100644 --- a/keyboards/phantom/Makefile +++ b/keyboards/phantom/Makefile @@ -1,74 +1,3 @@ - - -SRC = led.c - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE ?=yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk new file mode 100644 index 0000000000..c6b8ca6c35 --- /dev/null +++ b/keyboards/phantom/rules.mk @@ -0,0 +1,69 @@ + + +SRC = led.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?=yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/planck/Makefile b/keyboards/planck/Makefile index 23944f92ea..7d49c5ef96 100644 --- a/keyboards/planck/Makefile +++ b/keyboards/planck/Makefile @@ -1,74 +1,5 @@ - SUBPROJECT_DEFAULT = rev4 -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk new file mode 100644 index 0000000000..25db53a315 --- /dev/null +++ b/keyboards/planck/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile index 08e9205cbf..4e2a6f00fd 100644 --- a/keyboards/preonic/Makefile +++ b/keyboards/preonic/Makefile @@ -1,73 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk new file mode 100644 index 0000000000..d0f3a3a1c0 --- /dev/null +++ b/keyboards/preonic/rules.mk @@ -0,0 +1,69 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/retro_refit/Makefile b/keyboards/retro_refit/Makefile index 2dd8cc5f79..4e2a6f00fd 100644 --- a/keyboards/retro_refit/Makefile +++ b/keyboards/retro_refit/Makefile @@ -1,74 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - +endif \ No newline at end of file diff --git a/keyboards/retro_refit/rules.mk b/keyboards/retro_refit/rules.mk new file mode 100644 index 0000000000..10fbfa5c9d --- /dev/null +++ b/keyboards/retro_refit/rules.mk @@ -0,0 +1,68 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/s60-x/Makefile b/keyboards/s60-x/Makefile index 8b51d4609f..4e2a6f00fd 100644 --- a/keyboards/s60-x/Makefile +++ b/keyboards/s60-x/Makefile @@ -1,75 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/s60-x/rules.mk b/keyboards/s60-x/rules.mk new file mode 100644 index 0000000000..7ec93933a9 --- /dev/null +++ b/keyboards/s60-x/rules.mk @@ -0,0 +1,69 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 \ No newline at end of file diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile index a0879fc9c9..4e2a6f00fd 100644 --- a/keyboards/satan/Makefile +++ b/keyboards/satan/Makefile @@ -1,70 +1,3 @@ - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/satan/rules.mk b/keyboards/satan/rules.mk new file mode 100644 index 0000000000..1102584d8a --- /dev/null +++ b/keyboards/satan/rules.mk @@ -0,0 +1,66 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/sixkeyboard/Makefile b/keyboards/sixkeyboard/Makefile index 6f273064a7..4e2a6f00fd 100644 --- a/keyboards/sixkeyboard/Makefile +++ b/keyboards/sixkeyboard/Makefile @@ -1,75 +1,3 @@ - - -SRC = matrix.c - -# MCU name -#MCU = at90usb1287 -MCU = atmega16u2 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= no # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= no # Commands for debug and configuration -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -CUSTOM_MATRIX = yes - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - +endif \ No newline at end of file diff --git a/keyboards/sixkeyboard/rules.mk b/keyboards/sixkeyboard/rules.mk new file mode 100644 index 0000000000..2c99985a97 --- /dev/null +++ b/keyboards/sixkeyboard/rules.mk @@ -0,0 +1,70 @@ + + +SRC = matrix.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega16u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= no # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +CUSTOM_MATRIX = yes \ No newline at end of file diff --git a/keyboards/tv44/Makefile b/keyboards/tv44/Makefile index 45ca127807..4e2a6f00fd 100644 --- a/keyboards/tv44/Makefile +++ b/keyboards/tv44/Makefile @@ -1,75 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= yes # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/tv44/rules.mk b/keyboards/tv44/rules.mk new file mode 100644 index 0000000000..dbba6bace6 --- /dev/null +++ b/keyboards/tv44/rules.mk @@ -0,0 +1,69 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= yes # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 -- cgit v1.2.3 From 2dd9c1edcdcc3fc579e6109daf9012f9a82b7435 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 17:48:59 +0300 Subject: Proper parsing of keymaps inside subprojects --- Makefile | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index b2a8735320..028d143930 100644 --- a/Makefile +++ b/Makefile @@ -131,16 +131,32 @@ endef # $1 Subproject define PARSE_SUBPROJECT ifeq ($1,defaultsp) + SUBPROJECT_DEFAULT= $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) CURRENT_SP := $$(SUBPROJECT_DEFAULT) else CURRENT_SP := $1 endif - KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) - $$(eval $$(call PARSE_ALL_KEYMAPS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) - $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + # If current subproject is empty (the default was not defined), and we have a list of subproject + # then make all + ifeq ($$(CURRENT_SP),) + ifneq ($$(SUBPROJECTS),) + CURRENT_SP := allsp + endif + endif + ifneq ($$(CURRENT_SP),allsp) + KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) + ifneq ($$(CURRENT_SP),) + SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.))) + KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS)) + endif + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) + $$(eval $$(call PARSE_ALL_KEYMAPS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + endif + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS))) endif endef -- cgit v1.2.3 From a6d35000241e20df32b34498a3a9622bde6f0062 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:12:45 +0300 Subject: Print error message when trying to build non-existing keymap --- Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 028d143930..a9a2d98fcb 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,8 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif $(info $(ROOT_DIR)/keyboards) -KEYBOARDS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/*/.))) +# Only consider folders with makefiles, to prevent errors in case there are extra folders +KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) @@ -154,6 +155,13 @@ define PARSE_SUBPROJECT $$(eval $$(call PARSE_ALL_KEYMAPS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + else + ifeq ($$(CURRENT_SP),) + $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) + else + $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(CURRENT_SP)-$$(RULE)'. Stop.) + endif + exit 1 endif else $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS))) -- cgit v1.2.3 From 1ad5578d11b0b4a7288c3fd0748de3a57f4180f2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:15:45 +0300 Subject: Print error when building non-existing keyboard --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index a9a2d98fcb..623e4b064d 100644 --- a/Makefile +++ b/Makefile @@ -104,6 +104,9 @@ define PARSE_RULE $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + else + $$(info make: *** No rule to make target '$1'. Stop.) + exit 1 endif endef -- cgit v1.2.3 From c83af5451349e6160a2ee220e7b45bb974be5c64 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:30:58 +0300 Subject: Support for running from keyboard directory --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 623e4b064d..7180b41476 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) -ROOT_DIR := $(dir, $(ROOT_MAKEFILE)) +ROOT_DIR := $(dir $(ROOT_MAKEFILE)) ifeq ($(ROOT_DIR),) ROOT_DIR := . endif @@ -104,6 +104,8 @@ define PARSE_RULE $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + else ifneq ($$(KEYBOARD),) + $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) exit 1 -- cgit v1.2.3 From 051017c3129a17a1f4c610f19067c60bf0a49da9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:38:03 +0300 Subject: Split subproject make files into Makefile and rules.mk --- keyboards/chibios_test/stm32_f072_onekey/Makefile | 42 +---------- keyboards/chibios_test/stm32_f072_onekey/rules.mk | 41 +++++++++++ keyboards/chibios_test/stm32_f103_onekey/Makefile | 53 +------------ keyboards/chibios_test/stm32_f103_onekey/rules.mk | 52 +++++++++++++ keyboards/chibios_test/teensy_lc_onekey/Makefile | 48 +----------- keyboards/chibios_test/teensy_lc_onekey/rules.mk | 49 ++++++++++++ keyboards/clueboard/rev1/Makefile | 6 +- keyboards/clueboard/rev1/rules.mk | 5 ++ keyboards/clueboard/rev2/Makefile | 6 +- keyboards/clueboard/rev2/rules.mk | 5 ++ keyboards/ergodox/ez/Makefile | 77 +------------------ keyboards/ergodox/ez/rules.mk | 76 +++++++++++++++++++ keyboards/ergodox/infinity/Makefile | 78 +------------------- keyboards/ergodox/infinity/rules.mk | 77 +++++++++++++++++++ keyboards/handwired/CMD60/Makefile | 74 +------------------ keyboards/handwired/CMD60/rules.mk | 73 ++++++++++++++++++ keyboards/handwired/fivethirteen/Makefile | 74 +------------------ keyboards/handwired/fivethirteen/rules.mk | 73 ++++++++++++++++++ keyboards/handwired/minorca/Makefile | 70 +----------------- keyboards/handwired/minorca/rules.mk | 67 +++++++++++++++++ keyboards/handwired/onekey/Makefile | 2 +- keyboards/handwired/onekey/rules.mk | 65 ++++++++++++++++ keyboards/handwired/traveller/Makefile | 90 +---------------------- keyboards/handwired/traveller/rules.mk | 89 ++++++++++++++++++++++ keyboards/planck/rev3/Makefile | 4 +- keyboards/planck/rev3/rules.mk | 5 ++ keyboards/planck/rev4/Makefile | 4 +- keyboards/planck/rev4/rules.mk | 5 ++ 28 files changed, 705 insertions(+), 605 deletions(-) create mode 100644 keyboards/chibios_test/stm32_f072_onekey/rules.mk create mode 100644 keyboards/chibios_test/stm32_f103_onekey/rules.mk create mode 100644 keyboards/chibios_test/teensy_lc_onekey/rules.mk create mode 100644 keyboards/clueboard/rev1/rules.mk create mode 100644 keyboards/clueboard/rev2/rules.mk create mode 100644 keyboards/ergodox/ez/rules.mk create mode 100644 keyboards/ergodox/infinity/rules.mk create mode 100644 keyboards/handwired/CMD60/rules.mk create mode 100644 keyboards/handwired/fivethirteen/rules.mk create mode 100644 keyboards/handwired/minorca/rules.mk create mode 100644 keyboards/handwired/onekey/rules.mk create mode 100644 keyboards/handwired/traveller/rules.mk create mode 100644 keyboards/planck/rev3/rules.mk create mode 100644 keyboards/planck/rev4/rules.mk diff --git a/keyboards/chibios_test/stm32_f072_onekey/Makefile b/keyboards/chibios_test/stm32_f072_onekey/Makefile index eae38c4b2b..191c6bb664 100644 --- a/keyboards/chibios_test/stm32_f072_onekey/Makefile +++ b/keyboards/chibios_test/stm32_f072_onekey/Makefile @@ -1,41 +1,3 @@ -# project specific files -SRC = matrix.c \ - led.c - -## chip/board settings -# the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -MCU_FAMILY = STM32 -MCU_SERIES = STM32F0xx -# linker script to use -# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -MCU_LDSCRIPT = STM32F072xB -# startup code to use -# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -MCU_STARTUP = stm32f0xx -# it should exist either in /os/hal/boards/ -# or /boards -BOARD = ST_STM32F072B_DISCOVERY -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m0 -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -ARMV = 6 -# If you want to be able to jump to bootloader from firmware on STM32 MCUs, -# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in -# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have -# a custom board definition that you plan to reuse). -# If you're not setting it here, leave it commented out. -# It is chip dependent, the correct number can be looked up here (page 175): -# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf -# This also requires a patch to chibios: -# /tmk_core/tool/chibios/ch-bootloader-jump.patch -#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 - -# Build Options -# comment out to disable the options. -# -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/chibios_test/stm32_f072_onekey/rules.mk b/keyboards/chibios_test/stm32_f072_onekey/rules.mk new file mode 100644 index 0000000000..eae38c4b2b --- /dev/null +++ b/keyboards/chibios_test/stm32_f072_onekey/rules.mk @@ -0,0 +1,41 @@ +# project specific files +SRC = matrix.c \ + led.c + +## chip/board settings +# the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +MCU_FAMILY = STM32 +MCU_SERIES = STM32F0xx +# linker script to use +# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +MCU_LDSCRIPT = STM32F072xB +# startup code to use +# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +MCU_STARTUP = stm32f0xx +# it should exist either in /os/hal/boards/ +# or /boards +BOARD = ST_STM32F072B_DISCOVERY +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m0 +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +ARMV = 6 +# If you want to be able to jump to bootloader from firmware on STM32 MCUs, +# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in +# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have +# a custom board definition that you plan to reuse). +# If you're not setting it here, leave it commented out. +# It is chip dependent, the correct number can be looked up here (page 175): +# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf +# This also requires a patch to chibios: +# /tmk_core/tool/chibios/ch-bootloader-jump.patch +#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 + +# Build Options +# comment out to disable the options. +# +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/chibios_test/stm32_f103_onekey/Makefile b/keyboards/chibios_test/stm32_f103_onekey/Makefile index 307ca5b198..191c6bb664 100644 --- a/keyboards/chibios_test/stm32_f103_onekey/Makefile +++ b/keyboards/chibios_test/stm32_f103_onekey/Makefile @@ -1,52 +1,3 @@ -# project specific files -SRC = matrix.c \ - led.c - -# GENERIC STM32F103C8T6 board - stm32duino bootloader -OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000 -MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader -BOARD = GENERIC_STM32_F103 - -# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD) -# OPT_DEFS = -# MCU_LDSCRIPT = STM32F103x8 -# BOARD = GENERIC_STM32_F103 - -# MAPLE MINI -# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000 -# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader -# BOARD = MAPLEMINI_STM32_F103 - -## chip/board settings -# the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -MCU_FAMILY = STM32 -MCU_SERIES = STM32F1xx -# linker script to use -# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# startup code to use -# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -MCU_STARTUP = stm32f1xx -# it should exist either in /os/hal/boards/ -# or /boards -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m3 -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -ARMV = 7 -# If you want to be able to jump to bootloader from firmware on STM32 MCUs, -# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in -# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have -# a custom board definition that you plan to reuse). -# If you're not setting it here, leave it commented out. -# It is chip dependent, the correct number can be looked up here (page 175): -# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf -# This also requires a patch to chibios: -# /tmk_core/tool/chibios/ch-bootloader-jump.patch -#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 - - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/chibios_test/stm32_f103_onekey/rules.mk b/keyboards/chibios_test/stm32_f103_onekey/rules.mk new file mode 100644 index 0000000000..307ca5b198 --- /dev/null +++ b/keyboards/chibios_test/stm32_f103_onekey/rules.mk @@ -0,0 +1,52 @@ +# project specific files +SRC = matrix.c \ + led.c + +# GENERIC STM32F103C8T6 board - stm32duino bootloader +OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000 +MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader +BOARD = GENERIC_STM32_F103 + +# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD) +# OPT_DEFS = +# MCU_LDSCRIPT = STM32F103x8 +# BOARD = GENERIC_STM32_F103 + +# MAPLE MINI +# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000 +# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader +# BOARD = MAPLEMINI_STM32_F103 + +## chip/board settings +# the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +MCU_FAMILY = STM32 +MCU_SERIES = STM32F1xx +# linker script to use +# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# startup code to use +# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +MCU_STARTUP = stm32f1xx +# it should exist either in /os/hal/boards/ +# or /boards +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m3 +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +ARMV = 7 +# If you want to be able to jump to bootloader from firmware on STM32 MCUs, +# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in +# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have +# a custom board definition that you plan to reuse). +# If you're not setting it here, leave it commented out. +# It is chip dependent, the correct number can be looked up here (page 175): +# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf +# This also requires a patch to chibios: +# /tmk_core/tool/chibios/ch-bootloader-jump.patch +#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 + + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/chibios_test/teensy_lc_onekey/Makefile b/keyboards/chibios_test/teensy_lc_onekey/Makefile index 43ea9d82d9..191c6bb664 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/Makefile +++ b/keyboards/chibios_test/teensy_lc_onekey/Makefile @@ -1,49 +1,3 @@ -# project specific files -SRC = matrix.c \ - led.c - -## chip/board settings -# - the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -# - For Teensies, FAMILY = KINETIS and SERIES is either -# KL2x (LC) or K20x (3.0,3.1,3.2). -MCU_FAMILY = KINETIS -MCU_SERIES = KL2x - -# Linker script to use -# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# - NOTE: a custom ld script is needed for EEPROM on Teensy LC -# - LDSCRIPT = -# - MKL26Z64 for Teensy LC -# - MK20DX128 for Teensy 3.0 -# - MK20DX256 for Teensy 3.1 and 3.2 -MCU_LDSCRIPT = MKL26Z64 - -# Startup code to use -# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -# - STARTUP = -# - kl2x for Teensy LC -# - k20x5 for Teensy 3.0 -# - k20x7 for Teensy 3.1 and 3.2 -MCU_STARTUP = kl2x - -# Board: it should exist either in /os/hal/boards/ -# or /boards -# - BOARD = -# - PJRC_TEENSY_LC for Teensy LC -# - PJRC_TEENSY_3 for Teensy 3.0 -# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 -BOARD = PJRC_TEENSY_LC - -# Cortex version -# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4 -MCU = cortex-m0plus - -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -# I.e. 6 for Teensy LC; 7 for Teensy 3.x -ARMV = 6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/chibios_test/teensy_lc_onekey/rules.mk b/keyboards/chibios_test/teensy_lc_onekey/rules.mk new file mode 100644 index 0000000000..43ea9d82d9 --- /dev/null +++ b/keyboards/chibios_test/teensy_lc_onekey/rules.mk @@ -0,0 +1,49 @@ +# project specific files +SRC = matrix.c \ + led.c + +## chip/board settings +# - the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +MCU_FAMILY = KINETIS +MCU_SERIES = KL2x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +MCU_LDSCRIPT = MKL26Z64 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 +# - k20x7 for Teensy 3.1 and 3.2 +MCU_STARTUP = kl2x + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +BOARD = PJRC_TEENSY_LC + +# Cortex version +# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4 +MCU = cortex-m0plus + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/clueboard/rev1/Makefile b/keyboards/clueboard/rev1/Makefile index 80a942d06f..191c6bb664 100644 --- a/keyboards/clueboard/rev1/Makefile +++ b/keyboards/clueboard/rev1/Makefile @@ -1,5 +1,3 @@ -BACKLIGHT_ENABLE = no - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/clueboard/rev1/rules.mk b/keyboards/clueboard/rev1/rules.mk new file mode 100644 index 0000000000..80a942d06f --- /dev/null +++ b/keyboards/clueboard/rev1/rules.mk @@ -0,0 +1,5 @@ +BACKLIGHT_ENABLE = no + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/clueboard/rev2/Makefile b/keyboards/clueboard/rev2/Makefile index cea967b795..191c6bb664 100644 --- a/keyboards/clueboard/rev2/Makefile +++ b/keyboards/clueboard/rev2/Makefile @@ -1,5 +1,3 @@ -BACKLIGHT_ENABLE = yes - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/clueboard/rev2/rules.mk b/keyboards/clueboard/rev2/rules.mk new file mode 100644 index 0000000000..cea967b795 --- /dev/null +++ b/keyboards/clueboard/rev2/rules.mk @@ -0,0 +1,5 @@ +BACKLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/ergodox/ez/Makefile b/keyboards/ergodox/ez/Makefile index 37e554b304..191c6bb664 100644 --- a/keyboards/ergodox/ez/Makefile +++ b/keyboards/ergodox/ez/Makefile @@ -1,76 +1,3 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make = Make software. -# -# make clean = Clean out built project files. -# -# That's pretty much all you need. To compile, always go make clean, -# followed by make. -# -# For advanced users only: -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -#---------------------------------------------------------------------------- - -# # project specific files -SRC = twimaster.c \ - matrix.c - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# comment out to disable the options. -# - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk new file mode 100644 index 0000000000..37e554b304 --- /dev/null +++ b/keyboards/ergodox/ez/rules.mk @@ -0,0 +1,76 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make = Make software. +# +# make clean = Clean out built project files. +# +# That's pretty much all you need. To compile, always go make clean, +# followed by make. +# +# For advanced users only: +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +#---------------------------------------------------------------------------- + +# # project specific files +SRC = twimaster.c \ + matrix.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# comment out to disable the options. +# + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile index ccb735a485..191c6bb664 100644 --- a/keyboards/ergodox/infinity/Makefile +++ b/keyboards/ergodox/infinity/Makefile @@ -1,77 +1,3 @@ -# project specific files -SRC = matrix.c \ - led.c - -## chip/board settings -# - the next two should match the directories in -# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -# - For Teensies, FAMILY = KINETIS and SERIES is either -# KL2x (LC) or K20x (3.0,3.1,3.2). -# - For Infinity KB, SERIES = K20x -MCU_FAMILY = KINETIS -MCU_SERIES = K20x - -# Linker script to use -# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# - NOTE: a custom ld script is needed for EEPROM on Teensy LC -# - LDSCRIPT = -# - MKL26Z64 for Teensy LC -# - MK20DX128 for Teensy 3.0 -# - MK20DX256 for Teensy 3.1 and 3.2 -# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader -# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader -MCU_LDSCRIPT = MK20DX256BLDR8 - -# Startup code to use -# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -# - STARTUP = -# - kl2x for Teensy LC -# - k20x5 for Teensy 3.0 and Infinity 60% -# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox -MCU_STARTUP = k20x7 - -# Board: it should exist either in /os/hal/boards/ -# or /boards -# - BOARD = -# - PJRC_TEENSY_LC for Teensy LC -# - PJRC_TEENSY_3 for Teensy 3.0 -# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 -# - MCHCK_K20 for Infinity KB -#BOARD = MCHCK_K20 -BOARD = PJRC_TEENSY_3_1 - -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m4 - -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -# I.e. 6 for Teensy LC; 7 for Teensy 3.x -ARMV = 7 - -# Vector table for application -# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ -# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB -OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000 - -# Build Options -# comment out to disable the options. -# -CUSTOM_MATRIX ?= yes # Custom matrix file -SERIAL_LINK_ENABLE = yes -VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile -LCD_ENABLE ?= yes -LED_ENABLE ?= yes -LCD_BACKLIGHT_ENABLE ?= yes - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif - -ifdef LCD_ENABLE -include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk -endif - -ifdef LED_ENABLE -include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk -endif +endif \ No newline at end of file diff --git a/keyboards/ergodox/infinity/rules.mk b/keyboards/ergodox/infinity/rules.mk new file mode 100644 index 0000000000..ccb735a485 --- /dev/null +++ b/keyboards/ergodox/infinity/rules.mk @@ -0,0 +1,77 @@ +# project specific files +SRC = matrix.c \ + led.c + +## chip/board settings +# - the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +# - For Infinity KB, SERIES = K20x +MCU_FAMILY = KINETIS +MCU_SERIES = K20x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader +# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader +MCU_LDSCRIPT = MK20DX256BLDR8 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 and Infinity 60% +# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox +MCU_STARTUP = k20x7 + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +# - MCHCK_K20 for Infinity KB +#BOARD = MCHCK_K20 +BOARD = PJRC_TEENSY_3_1 + +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m4 + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 7 + +# Vector table for application +# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ +# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB +OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000 + +# Build Options +# comment out to disable the options. +# +CUSTOM_MATRIX ?= yes # Custom matrix file +SERIAL_LINK_ENABLE = yes +VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile +LCD_ENABLE ?= yes +LED_ENABLE ?= yes +LCD_BACKLIGHT_ENABLE ?= yes + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + +ifdef LCD_ENABLE +include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk +endif + +ifdef LED_ENABLE +include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk +endif diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile index 7117599173..191c6bb664 100644 --- a/keyboards/handwired/CMD60/Makefile +++ b/keyboards/handwired/CMD60/Makefile @@ -1,73 +1,3 @@ - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/handwired/CMD60/rules.mk b/keyboards/handwired/CMD60/rules.mk new file mode 100644 index 0000000000..7117599173 --- /dev/null +++ b/keyboards/handwired/CMD60/rules.mk @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + + diff --git a/keyboards/handwired/fivethirteen/Makefile b/keyboards/handwired/fivethirteen/Makefile index 7117599173..191c6bb664 100644 --- a/keyboards/handwired/fivethirteen/Makefile +++ b/keyboards/handwired/fivethirteen/Makefile @@ -1,73 +1,3 @@ - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/handwired/fivethirteen/rules.mk b/keyboards/handwired/fivethirteen/rules.mk new file mode 100644 index 0000000000..7117599173 --- /dev/null +++ b/keyboards/handwired/fivethirteen/rules.mk @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + + diff --git a/keyboards/handwired/minorca/Makefile b/keyboards/handwired/minorca/Makefile index 155c1f9a29..191c6bb664 100644 --- a/keyboards/handwired/minorca/Makefile +++ b/keyboards/handwired/minorca/Makefile @@ -1,71 +1,3 @@ -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk new file mode 100644 index 0000000000..c51371a781 --- /dev/null +++ b/keyboards/handwired/minorca/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/handwired/onekey/Makefile b/keyboards/handwired/onekey/Makefile index 4e2a6f00fd..191c6bb664 100644 --- a/keyboards/handwired/onekey/Makefile +++ b/keyboards/handwired/onekey/Makefile @@ -1,3 +1,3 @@ ifndef MAKEFILE_INCLUDED - include ../../Makefile + include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/handwired/onekey/rules.mk b/keyboards/handwired/onekey/rules.mk new file mode 100644 index 0000000000..c6d10856a1 --- /dev/null +++ b/keyboards/handwired/onekey/rules.mk @@ -0,0 +1,65 @@ + + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile index 12a4b71f4e..191c6bb664 100644 --- a/keyboards/handwired/traveller/Makefile +++ b/keyboards/handwired/traveller/Makefile @@ -1,89 +1,3 @@ - -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# for avr upload -USB ?= /dev/cu.usbmodem1421 -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - - -ifdef TEENSY2 - OPT_DEFS += -DATREUS_TEENSY2 - ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex -else - OPT_DEFS += -DATREUS_ASTAR - OPT_DEFS += -DCATERINA_BOOTLOADER - ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ - avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) -endif -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# MCU name - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 -RGBLIGHT_ENABLE = yes - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif - -upload: build - $(ATREUS_UPLOAD_COMMAND) - +endif \ No newline at end of file diff --git a/keyboards/handwired/traveller/rules.mk b/keyboards/handwired/traveller/rules.mk new file mode 100644 index 0000000000..12a4b71f4e --- /dev/null +++ b/keyboards/handwired/traveller/rules.mk @@ -0,0 +1,89 @@ + +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# for avr upload +USB ?= /dev/cu.usbmodem1421 +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + + +ifdef TEENSY2 + OPT_DEFS += -DATREUS_TEENSY2 + ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +else + OPT_DEFS += -DATREUS_ASTAR + OPT_DEFS += -DCATERINA_BOOTLOADER + ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) +endif +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# MCU name + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../Makefile +endif + +upload: build + $(ATREUS_UPLOAD_COMMAND) + diff --git a/keyboards/planck/rev3/Makefile b/keyboards/planck/rev3/Makefile index 3ed1445e43..191c6bb664 100644 --- a/keyboards/planck/rev3/Makefile +++ b/keyboards/planck/rev3/Makefile @@ -1,5 +1,3 @@ -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/planck/rev3/rules.mk b/keyboards/planck/rev3/rules.mk new file mode 100644 index 0000000000..3ed1445e43 --- /dev/null +++ b/keyboards/planck/rev3/rules.mk @@ -0,0 +1,5 @@ +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/rev4/Makefile b/keyboards/planck/rev4/Makefile index ed09f85a4d..191c6bb664 100644 --- a/keyboards/planck/rev4/Makefile +++ b/keyboards/planck/rev4/Makefile @@ -1,5 +1,3 @@ -AUDIO_ENABLE ?= yes # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../../Makefile endif \ No newline at end of file diff --git a/keyboards/planck/rev4/rules.mk b/keyboards/planck/rev4/rules.mk new file mode 100644 index 0000000000..ed09f85a4d --- /dev/null +++ b/keyboards/planck/rev4/rules.mk @@ -0,0 +1,5 @@ +AUDIO_ENABLE ?= yes # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file -- cgit v1.2.3 From 4f20061f6619f632c28518979d17a51674a3f2c9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:44:57 +0300 Subject: Proper handling for running make from a subproject or keymap dir --- Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Makefile b/Makefile index 7180b41476..a14642af6c 100644 --- a/Makefile +++ b/Makefile @@ -105,6 +105,15 @@ define PARSE_RULE else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) + # If there's no match in the beginning, then use the working directory instead + # First add the keymap to the commandline if we are in a keymap subdirectory + ifneq ($$(KEYMAP),) + RULE := $$(KEYMAP)-$$(RULE) + endif + # If we are in a subproject subdirectory add the subproject + ifneq ($$(SUBPROJECT),) + RULE := $$(SUBPROJECT)-$$(RULE) + endif $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) -- cgit v1.2.3 From 459ddaceda252a7d8614c43f17cd4c8c14712d5f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:54:12 +0300 Subject: Add backwards compability with makefile variables --- Makefile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Makefile b/Makefile index a14642af6c..cf0a12f695 100644 --- a/Makefile +++ b/Makefile @@ -42,6 +42,20 @@ $(info $(ROOT_DIR)/keyboards) # Only consider folders with makefiles, to prevent errors in case there are extra folders KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) +#Compability with the old make variables +ifdef keyboard + KEYBOARD := $(keyboard) +endif +ifdef sub + SUBPROJECT := $(sub) +endif +ifdef subproject + SUBPROJECT := $(subproject) +endif +ifdef keymap + KEYMAP := $(keymap) +endif + $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) -- cgit v1.2.3 From 3fa6625869b1bc1a2050a7e5edc6228a926536fc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 19:16:44 +0300 Subject: Proper default goals when inside keyboard fodlers --- Makefile | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index cf0a12f695..38bead90a5 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,18 @@ $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) $(info Keyboards: $(KEYBOARDS)) +ifneq ($(KEYMAP),) + ifeq ($(SUBPROJECT),) + .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) + else + .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP) + endif +else ifneq ($(SUBPROJECT),) + .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm +else ifneq ($(KEYBOARD),) + .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm +endif + # Compare the start of the RULE_VARIABLE with the first argument($1) # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true @@ -114,9 +126,11 @@ endef define PARSE_RULE RULE := $1 COMMANDS := + $$(info $$(RULE)) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(info $$(MATCHED_ITEM)) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) # If there's no match in the beginning, then use the working directory instead @@ -222,12 +236,13 @@ RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +.PHONY: all +all: + echo "Compiling" + .PHONY: all-keyboards all-keyboards: allkb .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-default-default - -.PHONY: all -all: - echo "Compiling" \ No newline at end of file -- cgit v1.2.3 From a04bb3a3bae456a0744cf2f6dde326d9a24ebcee Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 19:22:21 +0300 Subject: Fixed the shortcut targets --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 38bead90a5..d59da0b635 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,7 @@ $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) $(info Keyboards: $(KEYBOARDS)) +.DEFAULT_GOAL := all ifneq ($(KEYMAP),) ifeq ($(SUBPROJECT),) .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) @@ -238,11 +239,10 @@ RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); .PHONY: all -all: - echo "Compiling" +all: all-keyboards .PHONY: all-keyboards -all-keyboards: allkb +all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults -all-keyboards-defaults: allkb-default-default +all-keyboards-defaults: allkb-allsp-default -- cgit v1.2.3 From 0dd629a990e1546614dfa2b430489571c2550f7a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 21:28:14 +0300 Subject: Fix running make from various subfolders --- Makefile | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index d59da0b635..a02fa24a2b 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,6 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif endif -$(info $(ROOT_DIR)/keyboards) # Only consider folders with makefiles, to prevent errors in case there are extra folders KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) @@ -127,22 +126,11 @@ endef define PARSE_RULE RULE := $1 COMMANDS := - $$(info $$(RULE)) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) - $$(info $$(MATCHED_ITEM)) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) - # If there's no match in the beginning, then use the working directory instead - # First add the keymap to the commandline if we are in a keymap subdirectory - ifneq ($$(KEYMAP),) - RULE := $$(KEYMAP)-$$(RULE) - endif - # If we are in a subproject subdirectory add the subproject - ifneq ($$(SUBPROJECT),) - RULE := $$(SUBPROJECT)-$$(RULE) - endif $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) @@ -161,6 +149,8 @@ define PARSE_KEYBOARD $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + else ifneq ($$(SUBPROJECT),) + $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) else # If there's no matching subproject, we assume it's the default # This will allow you to leave the subproject part of the target out @@ -194,10 +184,14 @@ define PARSE_SUBPROJECT SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.))) KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS)) endif - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) + ifeq ($$(RULE),) + $$(eval $$(call PARSE_ALL_KEYMAPS)) + else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + else ifneq ($$(KEYMAP),) + $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP))) else ifeq ($$(CURRENT_SP),) $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) @@ -232,12 +226,16 @@ endef RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps +SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) +.PHONY: $(SUBPROJECTS) +$(SUBPROJECTS): %: %-allkm + .PHONY: % %: $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) - .PHONY: all all: all-keyboards -- cgit v1.2.3 From db5c3b74fb6541879bfad9930d2a659b1d89cd83 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 01:16:06 +0300 Subject: Add color output --- Makefile | 33 ++++++++++++++++++++++++++++++--- message.mk | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 message.mk diff --git a/Makefile b/Makefile index a02fa24a2b..e5becd7ad7 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +ifndef VERBOSE +.SILENT: +endif + STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) ROOT_DIR := $(dir $(ROOT_MAKEFILE)) @@ -216,15 +220,37 @@ endef # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 - COMMANDS += KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) - COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) + COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) + COMMANDS += $$(COMMAND) + ifeq ($$(CURRENT_SP),) + KB_SP := $(CURRENT_KB) + else + KB_SP := $(CURRENT_KB)/$$(CURRENT_SP) + endif + KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) + COMMAND_$$(COMMAND) := \ + printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ + $(AWK) '{ printf "%-118s", $$$$0;}'; \ + LOG=$$$$(echo "$$(MAKE) -c $(ROOT_DIR) -f build_keyboard.mk VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true" 2>&1) ; \ + if [ $$$$? -gt 0 ]; \ + then $$(PRINT_ERROR_PLAIN); \ + elif [ "$$$$LOG" != "" ] ; \ + then $$(PRINT_WARNING_PLAIN); \ + else \ + $$(PRINT_OK); \ + fi; endef define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef -RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +include $(ROOT_DIR)/message.mk + +#RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +RUN_COMMAND = \ +$(COMMAND_$(COMMAND)) +#LOG=$$(echo $(COMMAND) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) @@ -244,3 +270,4 @@ all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-allsp-default + diff --git a/message.mk b/message.mk new file mode 100644 index 0000000000..2ebf76a58c --- /dev/null +++ b/message.mk @@ -0,0 +1,35 @@ +COLOR ?= true + +ifeq ($(COLOR),true) + NO_COLOR=\033[0m + OK_COLOR=\033[32;01m + ERROR_COLOR=\033[31;01m + WARN_COLOR=\033[33;01m + BLUE=\033[0;34m + BOLD=\033[1m +endif + +ifneq ($(shell awk --version 2>/dev/null),) + AWK=awk +else + AWK=cat && test +endif + +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n + +ifndef $(SILENT) + SILENT = false +endif + +TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' +TAB_LOG_PLAIN = printf "$$LOG\n" +AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' +AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 +PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 +PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) +BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; \ No newline at end of file -- cgit v1.2.3 From 67b294ca66fd9da341ab93019a380d91ac589c96 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 10:26:23 +0300 Subject: Actual compilation --- Makefile | 26 +++++---- build_keyboard.mk | 171 ++++++++++++++---------------------------------------- message.mk | 3 +- 3 files changed, 59 insertions(+), 141 deletions(-) diff --git a/Makefile b/Makefile index e5becd7ad7..fc61572094 100644 --- a/Makefile +++ b/Makefile @@ -228,17 +228,19 @@ define PARSE_KEYMAP KB_SP := $(CURRENT_KB)/$$(CURRENT_SP) endif KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) + MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) + MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=false COMMAND_$$(COMMAND) := \ - printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ - $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$(echo "$$(MAKE) -c $(ROOT_DIR) -f build_keyboard.mk VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true" 2>&1) ; \ - if [ $$$$? -gt 0 ]; \ - then $$(PRINT_ERROR_PLAIN); \ - elif [ "$$$$LOG" != "" ] ; \ - then $$(PRINT_WARNING_PLAIN); \ - else \ - $$(PRINT_OK); \ - fi; + printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ + $(AWK) '{ printf "%-118s", $$$$0;}'; \ + LOG=$$$$($$(MAKE) -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + if [ $$$$? -gt 0 ]; \ + then $$(PRINT_ERROR_PLAIN); \ + elif [ "$$$$LOG" != "" ] ; \ + then $$(PRINT_WARNING_PLAIN); \ + else \ + $$(PRINT_OK); \ + fi; endef define PARSE_ALL_KEYMAPS @@ -258,9 +260,11 @@ SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) $(SUBPROJECTS): %: %-allkm .PHONY: % -%: +%: + cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + .PHONY: all all: all-keyboards diff --git a/build_keyboard.mk b/build_keyboard.mk index 053c8532af..b0cb22e6ac 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -4,44 +4,9 @@ endif .DEFAULT_GOAL := all -space := $(subst ,, ) -ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) -starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) -mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) -abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) - -ifneq (,$(findstring /keyboards/,$(starting_makefile))) - possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) - ifneq (,$(findstring /keymaps/,$(possible_keyboard))) - KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) - KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard))) - ifneq (,$(findstring /,$(KEYBOARD_DIR))) - # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) - # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) - tmk_root = ../../.. - else - tmk_root = ../../../.. - endif - else - KEYMAP_DIR:=default - KEYBOARD_DIR:=$(possible_keyboard) - ifneq (,$(findstring /,$(KEYBOARD_DIR))) - # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) - # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) - tmk_root = ../../.. - else - tmk_root = ../.. - endif - endif -else - tmk_root = . -endif -# $(info $(KEYBOARD_DIR)) -# $(info $(KEYMAP_DIR)) -# $(info $(SUBPROJECT_DIR)) # Directory common source filess exist -TOP_DIR = $(tmk_root) +TOP_DIR = . TMK_DIR = tmk_core TMK_PATH = $(TOP_DIR)/$(TMK_DIR) LIB_PATH = $(TOP_DIR)/lib @@ -50,92 +15,49 @@ QUANTUM_DIR = quantum QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) -ifdef keyboard - KEYBOARD ?= $(keyboard) -endif -ifdef KEYBOARD_DIR - KEYBOARD ?= $(KEYBOARD_DIR) -endif -ifndef KEYBOARD - KEYBOARD=planck -endif - MASTER ?= left ifdef master MASTER = $(master) endif +KEYBOARD_PATH := keyboards/$(KEYBOARD) +KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c -# converts things to keyboards/subproject -ifneq (,$(findstring /,$(KEYBOARD))) - TEMP:=$(KEYBOARD) - KEYBOARD:=$(firstword $(subst /, ,$(TEMP))) - SUBPROJECT:=$(lastword $(subst /, ,$(TEMP))) -endif - -KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD) - -ifdef sub - SUBPROJECT=$(sub) -endif -ifdef subproject - SUBPROJECT=$(subproject) -endif - -ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") - KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) - -include $(KEYBOARD_PATH)/Makefile - endif +ifneq ("$(wildcard $(KEYBOARD_C))","") + include $(KEYBOARD_PATH)/rules.mk else -$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) -endif - -ifdef SUBPROJECT_DEFAULT - SUBPROJECT?=$(SUBPROJECT_DEFAULT) -endif - -ifdef SUBPROJECT - SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT) - ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") - OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) - SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c - ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) - -include $(SUBPROJECT_PATH)/Makefile - endif - else -$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) - endif -endif - -ifdef keymap - KEYMAP ?= $(keymap) -endif -ifdef KEYMAP_DIR - KEYMAP ?= $(KEYMAP_DIR) -endif -ifndef KEYMAP - KEYMAP = default -endif -KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) -ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") - KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif -else - ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") -$(error "$(KEYMAP_PATH)/keymap.c" does not exist) - else - KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) - KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif - endif + $(error "$(KEYBOARD_C)" does not exist) +endif + + +ifneq ($(SUBPROJECT),) + SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT) + SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c + ifneq ("$(wildcard $(SUBPROJECT_C))","") + OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) + include $(SUBPROJECT_PATH)/rules.mk + else + $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) + endif +endif + +MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) +MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c +SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) +SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c +ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","") + -include $(SUBPROJ_KEYMAP_PATH)/Makefile + KEYMAP_C := $(SUBPROJ_KEYMAP_C) + KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH) +else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","") + -include $(MAIN_KEYMAP_PATH)/Makefile + KEYMAP_C := $(MAIN_KEYMAP_C) + KEYMAP_PATH := $(MAIN_KEYMAP_PATH) +else + $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) endif -ifdef SUBPROJECT +ifneq ($(SUBPROJECT),) TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) else TARGET ?= $(KEYBOARD)_$(KEYMAP) @@ -149,36 +71,27 @@ BUILD_DIR = $(TOP_DIR)/.build OBJDIR = $(BUILD_DIR)/obj_$(TARGET) - ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") CONFIG_H = $(KEYMAP_PATH)/config.h else CONFIG_H = $(KEYBOARD_PATH)/config.h - ifdef SUBPROJECT - ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") + ifneq ($(SUBPROJECT),) + ifneq ("$(wildcard $(SUBPROJECT_C))","") CONFIG_H = $(SUBPROJECT_PATH)/config.h endif endif endif # # project specific files -SRC += $(KEYBOARD_FILE) \ - $(KEYMAP_FILE) \ +SRC += $(KEYBOARD_C) \ + $(KEYMAP_C) \ $(QUANTUM_DIR)/quantum.c \ $(QUANTUM_DIR)/keymap_common.c \ $(QUANTUM_DIR)/keycode_config.c \ $(QUANTUM_DIR)/process_keycode/process_leader.c -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) -endif - -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) -endif - -ifdef SUBPROJECT - SRC += $(SUBPROJECT_FILE) +ifneq ($(SUBPROJECT),) + SRC += $(SUBPROJECT_C) endif ifndef CUSTOM_MATRIX @@ -229,7 +142,7 @@ endif # Search Path VPATH += $(KEYMAP_PATH) -ifdef SUBPROJECT +ifneq ($(SUBPROJECT),) VPATH += $(SUBPROJECT_PATH) endif VPATH += $(KEYBOARD_PATH) diff --git a/message.mk b/message.mk index 2ebf76a58c..08a4e02ab6 100644 --- a/message.mk +++ b/message.mk @@ -32,4 +32,5 @@ PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) -BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; \ No newline at end of file +BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; +MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) \ No newline at end of file -- cgit v1.2.3 From cc2df445ab3b0fd3998de7861b1c9ba0ad64aa8a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:06:47 +0300 Subject: Remove unneded code from tmk_core/rules.mk --- build_keyboard.mk | 4 ++- tmk_core/rules.mk | 91 ++----------------------------------------------------- 2 files changed, 5 insertions(+), 90 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index b0cb22e6ac..7493c13285 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -4,6 +4,8 @@ endif .DEFAULT_GOAL := all +include message.mk + # Directory common source filess exist TOP_DIR = . @@ -68,7 +70,7 @@ BUILD_DIR = $(TOP_DIR)/.build # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! -OBJDIR = $(BUILD_DIR)/obj_$(TARGET) +OBJDIR := $(BUILD_DIR)/obj_$(TARGET) ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d2350f27c1..9aa4ac8cf8 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -34,43 +34,8 @@ FORMAT = ihex # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s -COLOR ?= true - -ifeq ($(COLOR),true) - NO_COLOR=\033[0m - OK_COLOR=\033[32;01m - ERROR_COLOR=\033[31;01m - WARN_COLOR=\033[33;01m - BLUE=\033[0;34m - BOLD=\033[1m -endif - AUTOGEN ?= false -ifneq ($(shell awk --version 2>/dev/null),) - AWK=awk -else - AWK=cat && test -endif - -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n - -ifndef $(SILENT) - SILENT = false -endif - -TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' -TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 -PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) -BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. @@ -432,6 +397,7 @@ DEPS = $(patsubst %.o,%.d,$(OBJ)) .PRECIOUS: $(DEPS) # Empty rule to force recompilation if the .d file is missing $(DEPS): + # Since the object files could be in two different folders, generate # separate rules for them, rather than having too generic rules @@ -464,57 +430,6 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) -SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) -SUBDIRS := $(sort $(SUBDIRS)) -# $(error $(SUBDIRS)) -all-keyboards-defaults-%: - @for x in $(SUBDIRS) ; do \ - printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done - -all-keyboards-defaults: all-keyboards-defaults-all - -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) -all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) -all-keyboards: all-keyboards-all - -define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) -$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) -$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) -@for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -done -endef - -define make_keyboard_helper -# Just remove the -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-all: - $(call make_keyboard_helper,$@,all) -/keyboards/%-clean: - $(call make_keyboard_helper,$@,clean) -/keyboards/%: - $(call make_keyboard_helper,$@,all) - -all-keymaps-%: - $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) - @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done - -all-keymaps: all-keymaps-all - # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -530,6 +445,4 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) .PHONY : all finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ -program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% +program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file -- cgit v1.2.3 From 60c6e79ecb032e9726809a295ab3e0011e6b2fb4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:19:29 +0300 Subject: Move git submodule check and version generation to main Makefile --- Makefile | 12 ++++++++++++ build_keyboard.mk | 5 ----- tmk_core/rules.mk | 13 ++----------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index fc61572094..caa8f2de1c 100644 --- a/Makefile +++ b/Makefile @@ -262,6 +262,13 @@ $(SUBPROJECTS): %: %-allkm .PHONY: % %: cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; + git submodule status --recursive 2>/dev/null | \ + while IFS= read -r x; do \ + case "$$x" in \ + \ *) ;; \ + *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ + esac \ + done $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) @@ -275,3 +282,8 @@ all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-allsp-default + +GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") +$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) \ No newline at end of file diff --git a/build_keyboard.mk b/build_keyboard.mk index 7493c13285..7d284cfa7b 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -183,9 +183,4 @@ endif include $(TMK_PATH)/rules.mk -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") -BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" - -$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 9aa4ac8cf8..e8e3de5719 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -267,15 +267,6 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) -check_submodule: - git submodule status --recursive | \ - while IFS= read -r x; do \ - case "$$x" in \ - \ *) ;; \ - *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ - esac \ - done - # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf @@ -337,7 +328,7 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) -BEGIN = gccversion check_submodule sizebefore +BEGIN = gccversion sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf @@ -443,6 +434,6 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Listing of phony targets. .PHONY : all finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file -- cgit v1.2.3 From dd8c1a7659fec4fe3211682864fc4c50d4a61f85 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:27:15 +0300 Subject: Don't add VERSION as a define To avoid full recompilation when the git commit hash changes. --- tmk_core/common.mk | 3 --- tmk_core/common/command.c | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index aa05b9491d..21b894e2be 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -106,9 +106,6 @@ $(error MASTER does not have a valid value(left/right)) endif -# Version string -OPT_DEFS += -DVERSION=$(GIT_VERSION) - # Bootloader address ifdef STM32_BOOTLOADER_ADDRESS OPT_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS) diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 084c9fe155..476fc6fe3c 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -34,6 +34,7 @@ along with this program. If not, see . #include "command.h" #include "backlight.h" #include "quantum.h" +#include "version.h" #ifdef MOUSEKEY_ENABLE #include "mousekey.h" @@ -180,7 +181,7 @@ static void print_version(void) print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") " "PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") " "VER: " STR(DEVICE_VER) "\n"); - print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n"); + print("BUILD: " STR(QMK_VERSION) " (" __TIME__ " " __DATE__ ")\n"); /* build options */ print("OPTIONS:" -- cgit v1.2.3 From 881bde8258e077500a99fd670633e79ecd074832 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 08:30:21 +0300 Subject: Fix running make in parallel --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index caa8f2de1c..b39e9dded1 100644 --- a/Makefile +++ b/Makefile @@ -270,7 +270,7 @@ $(SUBPROJECTS): %: %-allkm esac \ done $(eval $(call PARSE_RULE,$@)) - $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) .PHONY: all -- cgit v1.2.3 From e4c842de02d95e98f65c7bb4a8406ec6df4944fe Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 08:31:04 +0300 Subject: Don't run builtin rules for submake To speed up the compilation --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b39e9dded1..9b534e897b 100644 --- a/Makefile +++ b/Makefile @@ -233,7 +233,7 @@ define PARSE_KEYMAP COMMAND_$$(COMMAND) := \ printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$($$(MAKE) -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + LOG=$$$$($$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ if [ $$$$? -gt 0 ]; \ then $$(PRINT_ERROR_PLAIN); \ elif [ "$$$$LOG" != "" ] ; \ -- cgit v1.2.3 From 8732265928818dd0b8797fb271e7c7fa9346d025 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 09:52:01 +0300 Subject: Options for silent compilation A single keyboard is always by default compiled in verbose mode. While multiple keyboards are compiled in silent mode. This can be overriden by the silent variable from the command line --- Makefile | 50 ++++++++++++++++++++++++++++++++++++++------------ message.mk | 4 ---- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 9b534e897b..3d4bd589f3 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,16 @@ ifndef VERBOSE .SILENT: endif +ifdef silent + SILENT = $(silent) +endif + +ifdef SILENT + SUB_IS_SILENT := $(silent) +endif + +override SILENT = false + STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) ROOT_DIR := $(dir $(ROOT_MAKEFILE)) @@ -59,10 +69,10 @@ ifdef keymap KEYMAP := $(keymap) endif -$(info Keyboard: $(KEYBOARD)) -$(info Keymap: $(KEYMAP)) -$(info Subproject: $(SUBPROJECT)) -$(info Keyboards: $(KEYBOARDS)) +#$(info Keyboard: $(KEYBOARD)) +#$(info Keymap: $(KEYMAP)) +#$(info Subproject: $(SUBPROJECT)) +#$(info Keyboards: $(KEYBOARDS)) .DEFAULT_GOAL := all ifneq ($(KEYMAP),) @@ -229,11 +239,14 @@ define PARSE_KEYMAP endif KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) - MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=false - COMMAND_$$(COMMAND) := \ - printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ - $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$($$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) + MAKE_COMMAND := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk + MAKE_MSG := Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR) + MAKE_MSG_FORMAT := $(AWK) '{ printf "%-118s", $$$$0;}' + COMMAND_true_$$(COMMAND) := \ + printf "$$(MAKE_MSG)" | \ + $$(MAKE_MSG_FORMAT); \ + LOG=$$$$($$(MAKE_COMMAND) $$(MAKE_VARS) SILENT=true 2>&1) ; \ if [ $$$$? -gt 0 ]; \ then $$(PRINT_ERROR_PLAIN); \ elif [ "$$$$LOG" != "" ] ; \ @@ -241,18 +254,30 @@ define PARSE_KEYMAP else \ $$(PRINT_OK); \ fi; + COMMAND_false_$$(COMMAND) := \ + printf "$$(MAKE_MSG)\n" | \ + $$(MAKE_MSG_FORMAT); \ + $$(MAKE_COMMAND) $$(MAKE_VARS) SILENT=false; endef define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef +define SET_SILENT_MODE + ifdef SUB_IS_SILENT + SILENT_MODE := $(SUB_IS_SILENT) + else ifeq ($$(words $$(COMMANDS)),1) + SILENT_MODE := false + else + SILENT_MODE := true + endif +endef + include $(ROOT_DIR)/message.mk -#RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); RUN_COMMAND = \ -$(COMMAND_$(COMMAND)) -#LOG=$$(echo $(COMMAND) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ +$(COMMAND_$(SILENT_MODE)_$(COMMAND)) # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) @@ -270,6 +295,7 @@ $(SUBPROJECTS): %: %-allkm esac \ done $(eval $(call PARSE_RULE,$@)) + $(eval $(call SET_SILENT_MODE)) +$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) diff --git a/message.mk b/message.mk index 08a4e02ab6..aefb46de84 100644 --- a/message.mk +++ b/message.mk @@ -19,10 +19,6 @@ OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n -ifndef $(SILENT) - SILENT = false -endif - TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -- cgit v1.2.3 From d924eb591ebcfb603f8941763de9616ce4b1554c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 11 Aug 2016 09:34:23 +0300 Subject: Fix variable name clash with builtin This caused the submake to be called several times, messing up the build. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 3d4bd589f3..319684c83e 100644 --- a/Makefile +++ b/Makefile @@ -240,13 +240,13 @@ define PARSE_KEYMAP KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) - MAKE_COMMAND := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk + MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk MAKE_MSG := Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR) MAKE_MSG_FORMAT := $(AWK) '{ printf "%-118s", $$$$0;}' COMMAND_true_$$(COMMAND) := \ printf "$$(MAKE_MSG)" | \ $$(MAKE_MSG_FORMAT); \ - LOG=$$$$($$(MAKE_COMMAND) $$(MAKE_VARS) SILENT=true 2>&1) ; \ + LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \ if [ $$$$? -gt 0 ]; \ then $$(PRINT_ERROR_PLAIN); \ elif [ "$$$$LOG" != "" ] ; \ @@ -257,7 +257,7 @@ define PARSE_KEYMAP COMMAND_false_$$(COMMAND) := \ printf "$$(MAKE_MSG)\n" | \ $$(MAKE_MSG_FORMAT); \ - $$(MAKE_COMMAND) $$(MAKE_VARS) SILENT=false; + $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; endef define PARSE_ALL_KEYMAPS -- cgit v1.2.3 From 87bf34a5d341c3a2381f57c19fcb94c21c8d0122 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Aug 2016 12:25:23 +0300 Subject: Pass the target to submake --- Makefile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 319684c83e..ed89b07337 100644 --- a/Makefile +++ b/Makefile @@ -230,6 +230,9 @@ endef # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 + # The rest of the rule is the target + # Remove the leading "-" from the target, as it acts as a separator + MAKE_TARGET := $$(patsubst -%,%,$$(RULE)) COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) COMMANDS += $$(COMMAND) ifeq ($$(CURRENT_SP),) @@ -240,8 +243,11 @@ define PARSE_KEYMAP KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) - MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk - MAKE_MSG := Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR) + MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET) + MAKE_MSG := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR) + ifneq ($$(MAKE_TARGET),) + MAKE_MSG += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR) + endif MAKE_MSG_FORMAT := $(AWK) '{ printf "%-118s", $$$$0;}' COMMAND_true_$$(COMMAND) := \ printf "$$(MAKE_MSG)" | \ -- cgit v1.2.3 From 3aac4e95c91be3244d68f27159c2667904c8fddd Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:20:16 +0300 Subject: More general system for generating several outputs --- build_keyboard.mk | 44 +++++++++++------- message.mk | 29 +++++++++++- tmk_core/chibios.mk | 4 +- tmk_core/rules.mk | 125 +++++++++++++++++----------------------------------- 4 files changed, 98 insertions(+), 104 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 7d284cfa7b..d10412ea57 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -43,6 +43,9 @@ ifneq ($(SUBPROJECT),) endif endif +# Save the defs here, so we don't include any keymap specific ones +PROJECT_DEFS := $(OPT_DEFS) + MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) @@ -59,18 +62,33 @@ else $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) endif +BUILD_DIR = $(TOP_DIR)/.build + ifneq ($(SUBPROJECT),) TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) + KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT) else TARGET ?= $(KEYBOARD)_$(KEYMAP) + KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) endif -BUILD_DIR = $(TOP_DIR)/.build +# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA +ifdef MCU_FAMILY + PLATFORM=CHIBIOS +else + PLATFORM=AVR +endif + +ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/protocol/chibios.mk + include $(TMK_PATH)/chibios.mk + OPT_OS = chibios +endif # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! -OBJDIR := $(BUILD_DIR)/obj_$(TARGET) +KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") @@ -156,23 +174,10 @@ VPATH += $(QUANTUM_PATH)/audio VPATH += $(QUANTUM_PATH)/process_keycode -# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA -ifdef MCU_FAMILY - PLATFORM=CHIBIOS -else - PLATFORM=AVR -endif - include $(TMK_PATH)/common.mk ifeq ($(PLATFORM),AVR) include $(TMK_PATH)/protocol/lufa.mk include $(TMK_PATH)/avr.mk -else ifeq ($(PLATFORM),CHIBIOS) - include $(TMK_PATH)/protocol/chibios.mk - include $(TMK_PATH)/chibios.mk - OPT_OS = chibios -else - $(error Unknown platform) endif ifeq ($(strip $(VISUALIZER_ENABLE)), yes) @@ -181,6 +186,13 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes) include $(VISUALIZER_PATH)/visualizer.mk endif + +OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) +$(KEYMAP_OUTPUT)_SRC := $(SRC) +$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" +$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) +$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) + + include $(TMK_PATH)/rules.mk -OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" diff --git a/message.mk b/message.mk index aefb46de84..6abc782152 100644 --- a/message.mk +++ b/message.mk @@ -29,4 +29,31 @@ PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $ PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; -MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) \ No newline at end of file +MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_BIN = Creating binary load file for Flash: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_COMPILING_CPP = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: +MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ + Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ + git submodule sync --recursive\n\ + git submodule update --init --recursive$(NO_COLOR)\n\n\ + You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ + or if you have modified the ChibiOS libraries yourself. \n\n \ No newline at end of file diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index cb67ac6f25..b05d59ee89 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -89,9 +89,9 @@ CHIBISRC = $(STARTUPSRC) \ $(STARTUPASM) \ $(PORTASM) \ $(OSALASM) - -SRC += $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC)) +CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC)) + EXTRAINCDIRS += $(CHIBIOS)/os/license \ $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index e8e3de5719..9f6d8d9dfd 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -25,6 +25,18 @@ vpath %.hpp $(VPATH_SRC) vpath %.S $(VPATH_SRC) VPATH := +# Convert all SRC to OBJ +define OBJ_FROM_SRC +$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))) +endef +$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT)))) + +# Define a list of all objects +OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ)) + +MASTER_OUTPUT := $(firstword $(OUTPUTS)) + + # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -53,17 +65,18 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources -CDEFS += $(OPT_DEFS) +#CDEFS += # Place -D or -U options here for ASM sources -ADEFS += $(OPT_DEFS) +#ADEFS += # Place -D or -U options here for C++ sources #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS -CPPDEFS += $(OPT_DEFS) +#CPPDEFS += + @@ -134,7 +147,8 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS += $(ADEFS) +ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -193,48 +207,6 @@ COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_BIN = Creating binary load file for Flash: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling: -MSG_COMPILING_CPP = Compiling: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: -MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ - Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ - git submodule sync --recursive\n\ - git submodule update --init --recursive$(NO_COLOR)\n\n\ - You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n - - -# Define all object files. -OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) -# The files in the lib folder are shared between all keymaps, so generate that folder name by removing -# the keymap from the name -KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) -# And fixup the object files to match -LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) -NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) -LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) -OBJ := $(LIBOBJ) $(NONLIBOBJ) - -# Define all listing files. -LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) - # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d @@ -320,68 +292,66 @@ gccversion : $(eval CMD=$(BIN) $< $@ || exit 0) @$(BUILD_CMD) -# Create library from object files. -.SECONDARY : $(BUILD_DIR)/$(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD) - $(eval CMD=$(AR) $@ $(OBJ) ) - @$(BUILD_CMD) - BEGIN = gccversion sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) # Note the obj.txt depeendency is there to force linking if a source file is deleted -%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) +%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) + define GEN_OBJRULE +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) + # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. $1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. $1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) $1/force: $1/cflags.txt: $1/force - echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ + echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@ $1/cppflags.txt: $1/force - echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ + echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@ $1/asflags.txt: $1/force - echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ - -$1/ldflags.txt: $1/force - echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ - -$1/obj.txt: $1/force - echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ + echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@ $1/compiler.txt: $1/force $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef +$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force + echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@ + +$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force + echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@ + + # We have to use static rules for the .d files for some reason DEPS = $(patsubst %.o,%.d,$(OBJ)) # Keep the .d files @@ -390,22 +360,7 @@ DEPS = $(patsubst %.o,%.d,$(OBJ)) $(DEPS): -# Since the object files could be in two different folders, generate -# separate rules for them, rather than having too generic rules -$(eval $(call GEN_OBJRULE,$(OBJDIR))) -$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) - -# Compile: create assembler files from C source files. -%.s : %.c | $(BEGIN) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) - @$(BUILD_CMD) - -# Compile: create assembler files from C++ source files. -%.s : %.cpp | $(BEGIN) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) - @$(BUILD_CMD) +$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT)))) # Create preprocessed source for use in sending a bug report. %.i : %.c | $(BEGIN) @@ -420,13 +375,13 @@ clean: show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) + @echo OBJ=$(OBJ) # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) -$(shell mkdir $(KBOBJDIR) 2>/dev/null) +$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir $(OUTPUT) 2>/dev/null))) # Include the dependency files. -include $(patsubst %.o,%.d,$(OBJ)) -- cgit v1.2.3 From 33fbd3be36bf58c6a02fb6b4ae99dc5bca7c8e58 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:45:36 +0300 Subject: Output specific include paths --- build_keyboard.mk | 31 +++++++++++++++++-------------- tmk_core/rules.mk | 18 +++++------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index d10412ea57..0debc49259 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -43,8 +43,22 @@ ifneq ($(SUBPROJECT),) endif endif -# Save the defs here, so we don't include any keymap specific ones +# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA +ifdef MCU_FAMILY + PLATFORM=CHIBIOS +else + PLATFORM=AVR +endif + +ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/protocol/chibios.mk + include $(TMK_PATH)/chibios.mk + OPT_OS = chibios +endif + +# Save the defines and includes here, so we don't include any keymap specific ones PROJECT_DEFS := $(OPT_DEFS) +PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH) MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c @@ -72,19 +86,6 @@ else KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) endif -# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA -ifdef MCU_FAMILY - PLATFORM=CHIBIOS -else - PLATFORM=AVR -endif - -ifeq ($(PLATFORM),CHIBIOS) - include $(TMK_PATH)/protocol/chibios.mk - include $(TMK_PATH)/chibios.mk - OPT_OS = chibios -endif - # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! @@ -190,8 +191,10 @@ endif OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" +$(KEYMAP_OUTPUT)_INC := $(EXTRAINCDIRS) $(VPATH) $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) +$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) include $(TMK_PATH)/rules.mk diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 9f6d8d9dfd..7b2c842ed6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -49,13 +49,6 @@ OPT = s AUTOGEN ?= false -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) - - # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions @@ -104,7 +97,6 @@ CFLAGS += -Wstrict-prototypes #CFLAGS += -Wunreachable-code #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) CFLAGS += $(CSTANDARD) ifdef CONFIG_H CFLAGS += -include $(CONFIG_H) @@ -131,7 +123,6 @@ CPPFLAGS += -Wundef #CPPFLAGS += -Wunreachable-code #CPPFLAGS += -Wsign-compare CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) #CPPFLAGS += $(CSTANDARD) ifdef CONFIG_H CPPFLAGS += -include $(CONFIG_H) @@ -149,7 +140,6 @@ endif # dump that will be displayed for a given single line of source input. ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 -ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) endif @@ -305,9 +295,11 @@ BEGIN = gccversion sizebefore define GEN_OBJRULE -$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) -$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) -$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) +$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC)) +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$$(info $$($1_INCFLAGS)) # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 9028a412eaf95e37e98a9f2e4573653ec70d7e18 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:58:05 +0300 Subject: Add output specific config file --- build_keyboard.mk | 17 ++++++++++------- tmk_core/rules.mk | 20 ++++++-------------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 0debc49259..a6b578efbc 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -56,9 +56,17 @@ ifeq ($(PLATFORM),CHIBIOS) OPT_OS = chibios endif +CONFIG_H = $(KEYBOARD_PATH)/config.h +ifneq ($(SUBPROJECT),) + ifneq ("$(wildcard $(SUBPROJECT_C))","") + CONFIG_H = $(SUBPROJECT_PATH)/config.h + endif +endif + # Save the defines and includes here, so we don't include any keymap specific ones PROJECT_DEFS := $(OPT_DEFS) PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH) +PROJECT_CONFIG := $(CONFIG_H) MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c @@ -94,13 +102,6 @@ KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") CONFIG_H = $(KEYMAP_PATH)/config.h -else - CONFIG_H = $(KEYBOARD_PATH)/config.h - ifneq ($(SUBPROJECT),) - ifneq ("$(wildcard $(SUBPROJECT_C))","") - CONFIG_H = $(SUBPROJECT_PATH)/config.h - endif - endif endif # # project specific files @@ -192,9 +193,11 @@ OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" $(KEYMAP_OUTPUT)_INC := $(EXTRAINCDIRS) $(VPATH) +$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) +$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) include $(TMK_PATH)/rules.mk diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 7b2c842ed6..977a2d0e53 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -98,9 +98,6 @@ CFLAGS += -Wstrict-prototypes #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) CFLAGS += $(CSTANDARD) -ifdef CONFIG_H - CFLAGS += -include $(CONFIG_H) -endif #---------------- Compiler Options C++ ---------------- @@ -124,10 +121,6 @@ CPPFLAGS += -Wundef #CPPFLAGS += -Wsign-compare CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) #CPPFLAGS += $(CSTANDARD) -ifdef CONFIG_H - CPPFLAGS += -include $(CONFIG_H) -endif - #---------------- Assembler Options ---------------- # -Wa,...: tell GCC to pass this to the assembler. @@ -140,9 +133,6 @@ endif # dump that will be displayed for a given single line of source input. ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 -ifdef CONFIG_H - ASFLAGS += -include $(CONFIG_H) -endif #---------------- Library Options ---------------- # Minimalistic printf version @@ -296,10 +286,12 @@ BEGIN = gccversion sizebefore define GEN_OBJRULE $1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC)) -$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$$(info $$($1_INCFLAGS)) +ifdef $1_CONFIG +$1_CONFIG_FLAGS += -include $$($1_CONFIG) +endif +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 3442e216dcec3ce6c8ba1c755b0d647a7f384f01 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 09:07:32 +0300 Subject: Move bootloader_defs include to build_keyboard Also fix it for subprojects --- build_keyboard.mk | 9 +++++++++ tmk_core/chibios.mk | 8 -------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index a6b578efbc..e8d8f3572b 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -54,6 +54,15 @@ ifeq ($(PLATFORM),CHIBIOS) include $(TMK_PATH)/protocol/chibios.mk include $(TMK_PATH)/chibios.mk OPT_OS = chibios + ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","") + OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h + else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h + endif endif CONFIG_H = $(KEYBOARD_PATH)/config.h diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index b05d59ee89..062a712bd1 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -143,14 +143,6 @@ MCUFLAGS = -mcpu=$(MCU) DEBUG = gdb -# Define ASM defines here -# bootloader definitions may be used in the startup .s file -ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","") - OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h -else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","") - OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h -endif - # List any extra directories to look for libraries here. EXTRALIBDIRS = $(RULESPATH)/ld -- cgit v1.2.3 From 03e31ef8b9752220d092a1950030cf7942e002eb Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 16 Aug 2016 08:42:08 +0300 Subject: Continue on error --- Makefile | 6 +++++- message.mk | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ed89b07337..f80d4e99c8 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ endif override SILENT = false +ON_ERROR := error_occured=1 + STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) ROOT_DIR := $(dir $(ROOT_MAKEFILE)) @@ -302,7 +304,9 @@ $(SUBPROJECTS): %: %-allkm done $(eval $(call PARSE_RULE,$@)) $(eval $(call SET_SILENT_MODE)) - +$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +error_occured=0; \ + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ + if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi .PHONY: all diff --git a/message.mk b/message.mk index 6abc782152..f8fd387121 100644 --- a/message.mk +++ b/message.mk @@ -15,6 +15,8 @@ else AWK=cat && test endif +ON_ERROR ?= exit 1 + OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n @@ -23,9 +25,9 @@ TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR) PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && $(ON_ERROR) PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; @@ -34,6 +36,7 @@ MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, pleas # Define Messages # English MSG_ERRORS_NONE = Errors: none +MSG_ERRORS = $(ERROR_COLOR)Make finished with errors\n$(NO_COLOR) MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- MSG_SIZE_BEFORE = Size before: -- cgit v1.2.3 From f29730da36cb2e036c5878327f567532d2533ff1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 16 Aug 2016 08:57:10 +0300 Subject: Better format for non-silent output --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f80d4e99c8..9ca73b4ad7 100644 --- a/Makefile +++ b/Makefile @@ -263,8 +263,7 @@ define PARSE_KEYMAP $$(PRINT_OK); \ fi; COMMAND_false_$$(COMMAND) := \ - printf "$$(MAKE_MSG)\n" | \ - $$(MAKE_MSG_FORMAT); \ + printf "$$(MAKE_MSG)\n\n"; \ $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; endef -- cgit v1.2.3 From ab4d7adbb96fa034fd20364247d615f527661594 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 19 Aug 2016 09:06:28 +0300 Subject: Fix the template for the Makefile/rules.mk split --- quantum/template/Makefile | 76 ++--------------------------------------------- quantum/template/rules.mk | 67 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 74 deletions(-) create mode 100644 quantum/template/rules.mk diff --git a/quantum/template/Makefile b/quantum/template/Makefile index 3f6d133c9b..4e2a6f00fd 100644 --- a/quantum/template/Makefile +++ b/quantum/template/Makefile @@ -1,75 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk new file mode 100644 index 0000000000..55898147dd --- /dev/null +++ b/quantum/template/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 -- cgit v1.2.3 From e1243339ca4dd0629ef7ae6a38b0852aa709620b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 19 Aug 2016 09:37:39 +0300 Subject: Add diffutils to travis.yml and install_dependencies It has been required for a while now, and now actually checked in the makefiles. Before, if you didn't have it installed it would just recompile everything. The readme hasn't been updated to reflect this, I think we need to go through that separately, and see what's really needed. Or just instruct people to run the batch scripts. --- .travis.yml | 1 + util/install_dependencies.sh | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 297cf19a68..138a2c5532 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,4 +21,5 @@ addons: - gcc-arm-none-eabi - binutils-arm-none-eabi - libnewlib-arm-none-eabi + - diffutils after_success: bash util/travis_compiled_push.sh diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh index 24564a2ac5..49ac86e072 100644 --- a/util/install_dependencies.sh +++ b/util/install_dependencies.sh @@ -20,7 +20,8 @@ if [[ -n "$(type -P pacman )" ]]; then arm-none-eabi-gcc \ arm-none-eabi-binutils \ arm-none-eabi-newlib \ - git + git \ + diffutils elif [[ -n "$(type -P apt-get)" ]]; then # Debian and derivatives @@ -47,7 +48,8 @@ elif [[ -n "$(type -P apt-get)" ]]; then gcc-arm-none-eabi \ binutils-arm-none-eabi \ libnewlib-arm-none-eabi \ - git + git \ + diffutils elif [[ -n "$(type -P yum)" ]]; then # Fedora, CentOS or RHEL and derivatives @@ -69,7 +71,8 @@ elif [[ -n "$(type -P yum)" ]]; then gcc-arm-none-eabi \ binutils-arm-none-eabi \ libnewlib-arm-none-eabi \ - git + git \ + diffutils # The listed eabi pacackes do unfortunately not exist for CentOS, # But at least in Fedora they do, so try to install them anyway # TODO: Build them from sources, if the installation fails @@ -85,7 +88,8 @@ elif [[ -n "$(type -P zypper)" ]]; then patch \ wget \ dfu-programmer \ - git + git \ + diffutils # TODO: The avr and eabi tools are not available as default packages, so we need # another way to install them -- cgit v1.2.3 From b4c75569b0bc2f3ba9a7766ab64ff504fad3836e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 02:42:38 +0300 Subject: Update readme with new instructions for make --- readme.md | 102 +++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 21 deletions(-) diff --git a/readme.md b/readme.md index 37f140839d..c66efadca5 100644 --- a/readme.md +++ b/readme.md @@ -110,43 +110,103 @@ In every keymap folder, the following files are recommended: ## The `make` command -The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards//`), or your keymap folder (`/keyboards//keymaps//`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)). +The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). -By default, this will generate a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. +**NOTE:** To abort a make command press `Ctrl-c` -Below are some definitions that will be useful: +The following instruction refers to these folders. -* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. -* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`. -* The "keymap" folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. +* The `root` (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. +* The `keyboard` folder is any keyboard project's folder, like `/keyboards/planck`. +* The `keymap` folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. +* The `subproject` folder is the subproject folder of a keyboard, like `/keyboards/ergodox/ez` -Below is a list of the useful `make` commands in QMK: +### Simple instructions for building and uploading a keyboard -* `make` - builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder - * `make keyboard=` - specifies the keyboard (only to be used in root) - * `make keymap=` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder) -* `make clean` - cleans the `.build` folder, ensuring that everything is re-built -* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ. - * `keyboard=` and `keymap=` are compatible with this -* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root) -* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root) -* `make all-keymaps [keyboard=]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `` -* `make all-keyboards-*`, `make all-keyboards-default-*` and `make all-keymaps-* [keyboard=]` - like the normal "make-all-*" commands, but the last string aftter the `-` (for example clean) is passed to the keyboard make command. -Other, less useful functionality: +**Most keyboards have more specific instructions in the keyboard specific readme.md file, so please check that first** + +If the `keymap` folder contains a file name `Makefile` + +1. Change the directory to the `keymap` folder +2. Run `make -` + +Otherwise, if there's no `Makefile` in the `keymap` folder + +1. Enter the `keyboard` folder +2. Run `make --` + +In the above commands, replace: + +* `` with the name of your keymap +* `` with the name of the subproject (revision or sub-model of your keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. + * If the keyboard doesn't have a subproject, or if you are happy with the default (defined in `rules.mk` file of the `keyboard` folder), you can leave it out. But remember to also remove the dash (`-`) from the command. +* `` The programmer to use. Most keyboards use `dfu`, but some use `teensy`. Infinity keyboards use `dfu-util`. Check the readme file in the keyboard folder to find out which programmer to use. + * If you don't add `----`, where: + +* `` is the name of the keyboard, for example `planck` + * Use `allkb` to compile all keyboards +* `` is the name of the subproject (revision or sub-model of the keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. + * If the keyboard doesn't have any subprojects, it can be left out + * To compile the default subproject, you can leave it out, or specify `defaultsp` + * Use `allsp` to compile all subprojects +* `` is the name of the keymap, for example `algernon` + * Use `allkm` to compile all keymaps +* `` will be explained in more detail below. + +**Note:** When you leave some parts of the command out, you should also remove the dash (`-`). + +As mentioned above, there are some shortcuts, when you are in a: + +* `keyboard` folder, the command will automatically fill the `` part. So you only need to type `--` +* `subproject` folder, it will fill in both `` and `` +* `keymap` folder, then `` and `` will be filled in. If you need to specify the `` use the following syntax `-` + * Note in order to support this shortcut, the keymap needs its own Makefile (see the example [here](/doc/keymap_makefile_example.mk)) +* `keymap` folder of a `subproject`, then everything except the `` will be filled in + +The `` means the following +* If no target is given, then it's the same as `all` below +* `all` compiles the keyboard and generates a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. +* `dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for Infinity keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme. **Note** that some operating systems needs root access for these commands to work, so in that case you need to run for example `sudo make dfu`. +* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems. + +Some other targets are supported but, but not important enough to be documented here. Check the source code of the make files for more information. + +You can also add extra options at the end of the make command line, after the target * `make COLOR=false` - turns off color output * `make SILENT=true` - turns off output besides errors/warnings -* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting) +* `make VERBOSE=true` - outputs all of the gcc stuff (not interesting, unless you need to debug) + +The make command itself also has some additional options, type `make --help` for more information. The most useful is probably `-jx`, which specifies that you want to compile using more than one CPU, the `x` represents the number of CPUs that you want to use. Setting that can greatly reduce the compile times, especially if you are compiling many keyboards/keymaps. I usually set it to one less than the number of CPUs that I have, so that I have some left for doing other things while it's compiling. Note that not all operating systems and make versions supports that option. + +Here are some examples commands + +* `make allkb-allsp-allkm` builds everything (all keyboards, all subprojects, all keymaps). Running just `make` from the `root` will also run this. +* `make` from within a `keyboard` directory, is the same as `make keyboard-allsp-allkm`, which compiles all subprojects and keymaps of the keyboard. **NOTE** that this behaviour has changed. Previously it compiled just the default keymap. +* `make ergodox-infinity-algernon-clean` will clean the build output of the Ergodox Infinity keyboard. This example uses the full syntax and can be run from any folder with a `Makefile` +* `make dfu COLOR=false` from within a keymap folder, builds and uploads the keymap, but without color output. ## The `Makefile` -There are 3 different `make` and `Makefile` locations: +There are 5 different `make` and `Makefile` locations: * root (`/`) * keyboard (`/keyboards//`) * keymap (`/keyboards//keymaps//`) +* subproject (`/keyboards//`) +* subproject keymap (`/keyboards///keymaps/`) + +The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **The file is required if you want to run `make` in the keymap folder.** -The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.** +For keyboards and subprojects, the make files are split in two parts `Makefile` and `rules.mk`. All settings can be found in the `rules.mk` file, while the `Makefile` is just there for support and including the root `Makefile`. Keymaps contain just one `Makefile` for simplicity. ### Makefile options -- cgit v1.2.3 From da226e61261e0c11e678d2086c00b2a45726083e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 03:22:16 +0300 Subject: Update keyboard readme files with new makefile instructions --- keyboards/arrow_pad/readme.md | 8 +++++--- keyboards/atomic/readme.md | 7 ++++--- keyboards/atreus/readme.md | 7 ++++--- keyboards/bantam44/readme.md | 7 ++++--- keyboards/clueboard/readme.md | 26 +++++++++++++------------- keyboards/cluecard/readme.md | 6 +++--- keyboards/ergodox/readme.md | 6 +++--- keyboards/gh60/readme.md | 8 +++++--- keyboards/hhkb/readme.md | 8 +++++--- keyboards/kc60/readme.md | 10 ++++++---- keyboards/kinesis/readme.md | 6 +++--- keyboards/planck/readme.md | 8 +++++--- keyboards/preonic/readme.md | 8 +++++--- keyboards/retro_refit/readme.md | 8 +++++--- keyboards/s60-x/readme.md | 4 ++-- keyboards/tv44/readme.md | 6 +++--- 16 files changed, 75 insertions(+), 58 deletions(-) diff --git a/keyboards/arrow_pad/readme.md b/keyboards/arrow_pad/readme.md index 5aa44cce54..2e9a64f2ef 100644 --- a/keyboards/arrow_pad/readme.md +++ b/keyboards/arrow_pad/readme.md @@ -12,13 +12,15 @@ Download or clone the whole firmware and navigate to the keyboards/arrow_pad fol Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/atomic/readme.md b/keyboards/atomic/readme.md index ab1e7ba1ff..674dcf113b 100644 --- a/keyboards/atomic/readme.md +++ b/keyboards/atomic/readme.md @@ -13,13 +13,14 @@ Download or clone the whole firmware and navigate to the keyboards/atomic folder Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/atreus/readme.md b/keyboards/atreus/readme.md index 734f58f0f0..a4077668e3 100644 --- a/keyboards/atreus/readme.md +++ b/keyboards/atreus/readme.md @@ -174,13 +174,14 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/bantam44/readme.md b/keyboards/bantam44/readme.md index 89d7f9d053..462f67c124 100644 --- a/keyboards/bantam44/readme.md +++ b/keyboards/bantam44/readme.md @@ -12,13 +12,14 @@ Download or clone the whole firmware and navigate to the keyboards/Bantam44 fold Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md index 6c29c09eca..4a76e2908c 100644 --- a/keyboards/clueboard/readme.md +++ b/keyboards/clueboard/readme.md @@ -31,36 +31,36 @@ If you would like to use one of the alternative keymaps, or create your own, see ## Clueboard 1.0 -If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `SUBPROJECT=rev1` to your make command, like this: +If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this: ``` -$ make SUBPROJECT=rev1 +$ make rev1 ``` And when flashing your keyboard: ``` -$ make SUBPROJECT=rev1 dfu +$ make rev1-dfu ``` -If you are flashing an alternative layout to your rev1, include both `SUBPROJECT=rev1` and `KEYMAP=` in your command, for example when flashing max: +If you are flashing an alternative layout to your rev1, include both `rev1` and `` in your command, for example when flashing max: ``` -$ make SUBPROJECT=rev1 KEYMAP=max dfu +$ make rev1-max-dfu ``` ## Alternate Keymaps -There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `KEYMAP=` to your command: +There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `` to your command: ``` -$ make KEYMAP=skully +$ make skully ``` -And when flashing your keyboard, put `KEYMAP=` between "make" and "dfu": +And when flashing your keyboard, put `` between "make" and "dfu": ``` -$ make KEYMAP=skully dfu +$ make skully-dfu ``` ### Notable Layouts @@ -76,15 +76,15 @@ These layouts are notable for one reason or another. If you are looking for idea There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend: * Copy `[keymaps/default](keymaps/default/)` to `keymaps/`. -* Compile the firmware (`$ make KEYMAP=`) -* Flash the firmware (`$ make KEYMAP= dfu`) +* Compile the firmware (`$ make `) +* Flash the firmware (`$ make -dfu`) * Make sure everything works like the default keyboard * Modify `keymaps//readme.md` to tell others about your layout. * Modify `keymaps//keymap.c` to reflect your desired layout. -* Compile your new custom firmware (`$ make KEYMAP=`) +* Compile your new custom firmware (`$ make `) ** If you have warnings you may flash without fixing them, but something may not work right. ** If you have any errors you must fix them before continuing. -* Flash the firmware (`$ make KEYMAP= dfu`) +* Flash the firmware (`$ make -dfu`) ## Share Your Keymap diff --git a/keyboards/cluecard/readme.md b/keyboards/cluecard/readme.md index ae1afbbfdd..be13fc0171 100644 --- a/keyboards/cluecard/readme.md +++ b/keyboards/cluecard/readme.md @@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make keymap=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index f81d7cd8df..a96e415def 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -19,10 +19,10 @@ If you are just compiling an existing keymap and don't want to create your own, 3. Set up a build environment as per the readme. 4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. -6. Compile your firmware by running `make keymap=keymap_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `subproject=infinity` to the make command. -7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make teensy keymap=keymap_name`. +6. Compile your firmware by running `make keymap_name`. For example, `make german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `infinity` to the make command like this `make infinity-german`. +7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make keymap_name-teensy`. - **Infinity ErgoDox** - Flash the firmware by running `make dfu-util keymap=keymap_name subproject=infinity` + **Infinity ErgoDox** - Flash the firmware by running `make infinity-keymap_name-dfu-util` 8. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. Good luck! :) diff --git a/keyboards/gh60/readme.md b/keyboards/gh60/readme.md index 92302d507c..20afb0db07 100644 --- a/keyboards/gh60/readme.md +++ b/keyboards/gh60/readme.md @@ -48,13 +48,15 @@ Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c fo Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/hhkb/readme.md b/keyboards/hhkb/readme.md index 39d49b32a1..367c0a08f7 100644 --- a/keyboards/hhkb/readme.md +++ b/keyboards/hhkb/readme.md @@ -168,13 +168,15 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/kc60/readme.md b/keyboards/kc60/readme.md index acc0df68dc..0639512dd3 100644 --- a/keyboards/kc60/readme.md +++ b/keyboards/kc60/readme.md @@ -10,18 +10,20 @@ Download or clone the whole firmware and navigate to the keyboards/kc60 folder. Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. ## WS2812 Support ![Image of KC60 with RGB Underglow](keymaps/ws2812/ws2812_example.jpg) -Build with WS2812 Support by running `make KEYMAP=ws2812`. +Build with WS2812 Support by running `make ws2812`. diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md index a990f9cb99..79c86581e6 100644 --- a/keyboards/kinesis/readme.md +++ b/keyboards/kinesis/readme.md @@ -27,16 +27,16 @@ Depending on which keymap you would like to use, you will have to compile slight ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make keymap=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/planck/readme.md b/keyboards/planck/readme.md index f89fdeb931..4b24a690e0 100644 --- a/keyboards/planck/readme.md +++ b/keyboards/planck/readme.md @@ -13,15 +13,17 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. ### Notable forks (which some of the keymap files are from) diff --git a/keyboards/preonic/readme.md b/keyboards/preonic/readme.md index f0be255a09..10763ee97a 100644 --- a/keyboards/preonic/readme.md +++ b/keyboards/preonic/readme.md @@ -13,13 +13,15 @@ Download or clone the whole firmware and navigate to the keyboards/preonic folde Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/retro_refit/readme.md b/keyboards/retro_refit/readme.md index b01a1a9ca9..77df861cef 100644 --- a/keyboards/retro_refit/readme.md +++ b/keyboards/retro_refit/readme.md @@ -12,13 +12,15 @@ Download or clone the whole firmware and navigate to the keyboards/retro_refit f Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md index 099d586991..94ce829223 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60-x/readme.md @@ -42,9 +42,9 @@ The recommended programs for flashing your keyboard are [Atmel FLIP](http://www. ## Building the firmware -To build firmware binary hex file with a certain keymap just run `make` with the `keymap` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: - $ make keymap=[custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|] + $ make [custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|] For a more detailed explanation of the build process and the environment setup, see the ["Getting Started" section](/readme.md#getting-started). diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md index e3b557fe2d..4f691a4ca0 100644 --- a/keyboards/tv44/readme.md +++ b/keyboards/tv44/readme.md @@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make keymap=[default|jack|] +$ make [default|jack|] ``` Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file -- cgit v1.2.3 From a25480b3b58f1fb779fe6d441023eeb3c72811f5 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 20:55:50 -0600 Subject: Bringing over changes from default map. --- keyboards/ergodox/keymaps/jafo/keymap.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox/keymaps/jafo/keymap.c b/keyboards/ergodox/keymaps/jafo/keymap.c index c5f21bd82e..4f1428f2ba 100644 --- a/keyboards/ergodox/keymaps/jafo/keymap.c +++ b/keyboards/ergodox/keymaps/jafo/keymap.c @@ -1,6 +1,7 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" +#include "version.h" #define BASE 0 // default layer #define SYMB 1 // symbols @@ -145,9 +146,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case 0: if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; } -- cgit v1.2.3 From 9e03517ae51ff30d332accae27469ae3b1b25e73 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 21:47:00 -0600 Subject: Restructuring of the ergodox README. --- keyboards/ergodox/readme.md | 134 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 105 insertions(+), 29 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 1c1181dbae..1627883c91 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,44 +1,121 @@ -# Infinity on Ubuntu Quickstart +# Customizing Keymap -To build an Infinity firmware under Ubuntu (tested on 15.10): +There are external tools for customizing the layout, but those do not use +the featurs of this qmk firmware. These sites include: + + - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez + - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files + +You can also find an existing firmware that you like, for example from: + + - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) + +This qmk firmware also provides the ability to customize keymaps, but requires +a toolchain to build the firmware. See below for instructions on building +firmware and customizing keymaps. + +# Customizing Keymaps + +There are many existing keymaps in the "keymaps" directory. If you just want +to use one of them, you don't need to modify keymaps and can just build and +flash the firmware as described below. These directories each have a +"readme.md" file which describe them. + +If none of the existing keymaps suit you, you can create your own custom +keymap. This will require some experience with coding. Follow these steps +to customize a keymap: + + - Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom. Then come back here. :) + + - Clone the qmk_firmware repository + + - Set up your build environment (see below). + + - Make a new directory under "keymaps" to hold your customizations. + + - Copy an existing keymap that is close to what you want, such as + "keymaps/default/keymap.c". + + - Use an editor to modify the new "keymap.c". See "Finding the keycodes you + need" below). Try to edit the comments as well, so the "text graphics" + represent your layout correctly. + + - Compile your new firmware (see below) + + - Flash your firmware (see below) + + - Test the changes. + + - Submit your keymap as a pull request to the qmk_firmware repository so + others can use it. You will want to add a "readme.md" that describes the + keymap. + +# Build Dependencies + +Before you can build, you will need the build dependencies. There is a script +to try to do this for Linux: - Run the `util/install_dependencies.sh` script as root. - - Check out the submodules with `git submodule update --init --recursive` - - Go into the ErgoDox directory with `cd keyboards/ergodox` + +For the Infinity, you need the chibios submodules to be checked out or you +will receive errors about the build process being unable to find the chibios +files. Check them out with: + + - Go to the top level repo directory and run: `git submodule update --init --recursive` + +# Flashing Firmware + +## ErgoDox Ez + +The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). + +Linux users need to modify udev rules as described on the Teensy Linux page. +Some distributions provide a binary, maybe called `teensy-loader-cli`). + +To flash the firmware: + + - Build the firmware with `make keymap=keymapname`, for example `make + keymap=default` + + - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g. + `ergodox_ez_default.hex` + + - Start the teensy loader. + + - Load the .hex file into it. + + - Press the Reset button by inserting a paperclip gently into the reset hole + in the top right corder. + + - Click the button in the Teensy app to download the firmware. + +## ErgoDox Infinity + +The Infinity is two completely independent keyboards, and needs to be flashed +for the left and right halves seperately. To flash them: + + - Remove the build directory with `rm -rf ../../.build` + - Build the firmware with `make keymap=keymapname subproject=infinity` - - Plug in the left hand keyboard only. - - Press the program button (back of keyboard, above thumb pad). - - Install the firmware with `sudo make dfu-util keymap=keymapname subproject=infinity` - - Install the right hand firmware, but I haven't figured this out yet. -# Getting started + - Plug in the left hand keyboard only. -There are two main ways you could customize the ErgoDox (EZ and Infinity) + - Press the program button (back of keyboard, above thumb pad). -## The Easy Way: Use an existing firmware file and just flash it (ErgoDox EZ only) + - Install the firmware with `sudo make dfu-util keymap=keymapname subproject=infinity` -1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this. -2. Find a firmware file you like. There are [dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) you can browse and download. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like. -3. Download the firmware file -4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded. + - Remove the left-hand build with `rm -rf ../../.build` -## More technical: compile an existing keymap, or create your own totally custom firmware by editing the source files. + - Build left hand firmware with `make keymap=keymapname subproject=infinity MASTER=right` -This requires a little bit of familiarity with coding. -If you are just compiling an existing keymap and don't want to create your own, you can skip step 4, 5 and 8. + - Plug in the right hand keyboard only. -1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :) -2. Clone the repository (download it) -3. Set up a build environment as per the readme. -4. Copy `keyboards/ergodox/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`) -5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work. -6. Compile your firmware by running `make keymap=keymap_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_keymap_name.hex`, e.g. `ergodox_ez_german.hex`. For **Infinity ErgoDox** you need to add `subproject=infinity` to the make command. -7. **ErgoDox EZ** - Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successful build by running `make teensy keymap=keymap_name`. + - Press the program button (back of keyboard, above thumb pad). - **Infinity ErgoDox** - Flash the firmware by running `make dfu-util keymap=keymap_name subproject=infinity` -8. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics. + - Install the firmware with `sudo make dfu-util keymap=keymapname subproject=infinity MASTER=right` -Good luck! :) +More information on the Infinity firmware is available in the [TMK/chibios for +Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md) ## Contributing your keymap @@ -49,7 +126,6 @@ The QMK firmware is open-source, so it would be wonderful to have your contribut 3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) 4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. - ## Finding the keycodes you need Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. -- cgit v1.2.3 From d98e5ddf30e6ced925e3d4fa705ae5449808074b Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Fri, 19 Aug 2016 21:50:04 -0600 Subject: Tweaks after review. --- keyboards/ergodox/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 1627883c91..349a0ce40c 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,4 +1,4 @@ -# Customizing Keymap +# Keymap Options There are external tools for customizing the layout, but those do not use the featurs of this qmk firmware. These sites include: @@ -117,7 +117,7 @@ for the left and right halves seperately. To flash them: More information on the Infinity firmware is available in the [TMK/chibios for Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md) -## Contributing your keymap +# Contributing your keymap The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. @@ -126,7 +126,7 @@ The QMK firmware is open-source, so it would be wonderful to have your contribut 3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) 4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. -## Finding the keycodes you need +# Finding the keycodes you need Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. -- cgit v1.2.3 From fdaae7ec8836ffa47949bde0d5dd865acb3016e8 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 11 Jun 2016 17:24:28 -0500 Subject: fixed color detection routine in makefile --- tmk_core/rules.mk | 550 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 356 insertions(+), 194 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d2350f27c1..8563f1e072 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -14,27 +14,71 @@ # Frederik Rouleau # Carlos Lamas # - -# Enable vpath seraching for source files only -# Without this, output files, could be read from the wrong .build directories -VPATH_SRC := $(VPATH) -vpath %.c $(VPATH_SRC) -vpath %.h $(VPATH_SRC) -vpath %.cpp $(VPATH_SRC) -vpath %.hpp $(VPATH_SRC) -vpath %.S $(VPATH_SRC) -VPATH := +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# 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, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- # Output format. (can be srec, ihex, binary) FORMAT = ihex -# Optimization level, can be [0, 1, 2, 3, s]. +BUILD_DIR = .build + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) + + +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s -COLOR ?= true + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + +COLOR?=true ifeq ($(COLOR),true) NO_COLOR=\033[0m @@ -45,38 +89,30 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -AUTOGEN ?= false - -ifneq ($(shell awk --version 2>/dev/null),) - AWK=awk -else - AWK=cat && test -endif - -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) ifndef $(SILENT) SILENT = false endif -TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' +TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 -PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) +AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' +AWK_CMD = awk '{ printf "%-69s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) +EXTRAINCDIRS = $(subst :, ,$(VPATH)) # Compiler flag to set the C Standard level. @@ -88,14 +124,17 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL CDEFS += $(OPT_DEFS) # Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) ADEFS += $(OPT_DEFS) # Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS CPPDEFS += $(OPT_DEFS) @@ -109,12 +148,20 @@ CPPDEFS += $(OPT_DEFS) # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CFLAGS += -g$(DEBUG) +CFLAGS = -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fdata-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color endif endif @@ -140,9 +187,16 @@ endif # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CPPFLAGS += -g$(DEBUG) +CPPFLAGS = -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -ffunction-sections +CPPFLAGS += -fdata-sections # to supress "warning: only initialized variables can be placed into program memory area" CPPFLAGS += -w CPPFLAGS += -Wall @@ -169,7 +223,7 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -203,6 +257,28 @@ SCANF_LIB = MATH_LIB = -lm +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + #---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file @@ -211,8 +287,9 @@ MATH_LIB = -lm # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) @@ -220,13 +297,59 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # You can give EXTRALDFLAGS at 'make' command line. LDFLAGS += $(EXTRALDFLAGS) + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + # Define programs and commands. SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo +# Autodecct teensy loader +ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) + TEENSY_LOADER_CLI = teensy-loader-cli +else + TEENSY_LOADER_CLI = teensy_loader_cli +endif # Define Messages # English @@ -239,7 +362,6 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: -MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -248,24 +370,12 @@ MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: -MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ - Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ - git submodule sync --recursive\n\ - git submodule update --init --recursive$(NO_COLOR)\n\n\ - You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n + + # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) -# The files in the lib folder are shared between all keymaps, so generate that folder name by removing -# the keymap from the name -KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) -# And fixup the object files to match -LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) -NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) -LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) -OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -273,20 +383,34 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) -ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) - -MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) +ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: build sizeafter +all: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) clean_list # force clean each time + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end + +# Quick make that doesn't clean +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end # Change the build target to build a HEX file or a library. build: elf hex @@ -302,14 +426,17 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) -check_submodule: - git submodule status --recursive | \ - while IFS= read -r x; do \ - case "$$x" in \ - \ *) ;; \ - *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ - esac \ - done + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @$(SECHO) $(MSG_BEGIN) + +end: + @$(SECHO) $(MSG_END) + # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex @@ -320,31 +447,134 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: $(BUILD_DIR)/$(TARGET).hex +sizeafter: @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually - # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : @$(SILENT) || $(CC) --version + + +# Program the device. +program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(PROGRAM_CMD) + +teensy: $(BUILD_DIR)/$(TARGET).hex + $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex + +flip: $(BUILD_DIR)/$(TARGET).hex + batchisp -hardware usb -device $(MCU) -operation erase f + batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + +dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + dfu-programmer $(MCU) reset + +dfu-no-build: +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex + dfu-programmer $(MCU) reset + +dfu-start: + dfu-programmer $(MCU) reset + dfu-programmer $(MCU) start + +flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex + batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase + batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex + +dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep +else + dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep +endif + dfu-programmer $(MCU) reset + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(BUILD_DIR)/$(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof + + +extcoff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof + + + # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) - $(eval CMD=$(HEX) $< $@) + $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) + @$(BUILD_CMD) + @$(COPY) $@ $(TARGET).hex + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) + $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) @$(BUILD_CMD) - @if $(AUTOGEN); then \ - $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ - $(COPY) $@ $(KEYMAP_PATH)/$(KEYBOARD)_$(KEYMAP).hex; \ - else \ - $(COPY) $@ $(TARGET).hex; \ - fi %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) - $(eval CMD=$(EEP) $< $@ || exit 0) + $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) @$(BUILD_CMD) # Create extended listing file from ELF output file. @@ -359,11 +589,6 @@ gccversion : $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) -%.bin: %.elf - @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) - $(eval CMD=$(BIN) $< $@ || exit 0) - @$(BUILD_CMD) - # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) @@ -372,164 +597,101 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) -BEGIN = gccversion check_submodule sizebefore - # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -# Note the obj.txt depeendency is there to force linking if a source file is deleted -%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) +%.elf: $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) -define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) - @$$(BUILD_CMD) +$(OBJDIR)/%.o : %.c + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) + @$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) +$(OBJDIR)/%.o : %.cpp + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) - @$$(BUILD_CMD) - -$1/force: - -$1/cflags.txt: $1/force - echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ - -$1/cppflags.txt: $1/force - echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ - -$1/asflags.txt: $1/force - echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ - -$1/ldflags.txt: $1/force - echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ - -$1/obj.txt: $1/force - echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ - -$1/compiler.txt: $1/force - $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ -endef - -# We have to use static rules for the .d files for some reason -DEPS = $(patsubst %.o,%.d,$(OBJ)) -# Keep the .d files -.PRECIOUS: $(DEPS) -# Empty rule to force recompilation if the .d file is missing -$(DEPS): - -# Since the object files could be in two different folders, generate -# separate rules for them, rather than having too generic rules -$(eval $(call GEN_OBJRULE,$(OBJDIR))) -$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) - # Compile: create assembler files from C source files. -%.s : %.c | $(BEGIN) +%.s : %.c @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp | $(BEGIN) +%.s : %.cpp @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) + @$(BUILD_CMD) + # Create preprocessed source for use in sending a bug report. -%.i : %.c | $(BEGIN) - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ +%.i : %.c + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: - $(REMOVE) -r $(OBJDIR) 2>/dev/null - $(REMOVE) -r $(KBOBJDIR) 2>/dev/null - $(REMOVE) $(BUILD_DIR)/$(TARGET).* +clean: begin clean_list end + +clean_list : + $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) + $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) + $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) -SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) -SUBDIRS := $(sort $(SUBDIRS)) -# $(error $(SUBDIRS)) -all-keyboards-defaults-%: +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) +all-keyboards-defaults: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keyboards-defaults: all-keyboards-defaults-all - -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) -all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) -all-keyboards: all-keyboards-all - -define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) -$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) -$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) -@for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -done -endef - -define make_keyboard_helper -# Just remove the -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-all: - $(call make_keyboard_helper,$@,all) -/keyboards/%-clean: - $(call make_keyboard_helper,$@,clean) -/keyboards/%: - $(call make_keyboard_helper,$@,all) - -all-keymaps-%: - $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) +all-keyboards: $(KEYBOARDS) +/keyboard/%: + $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keymaps: all-keymaps-all +all-keymaps: + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) + @for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) -$(shell mkdir $(KBOBJDIR) 2>/dev/null) + # Include the dependency files. --include $(patsubst %.o,%.d,$(OBJ)) +-include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) # Listing of phony targets. -.PHONY : all finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% +all-keyboards-defaults all-keyboards all-keymaps -- cgit v1.2.3 From 8f78ba1f739ac585d7b211bab473f6820452bc45 Mon Sep 17 00:00:00 2001 From: Nicholas Keene Date: Fri, 19 Aug 2016 23:38:13 -0500 Subject: The Ordinary Layout is boring because all the keys are where you expect them to be --- keyboards/ergodox/keymaps/ordinary/keymap.c | 118 ++++++++++----------- .../ergodox/keymaps/ordinary/ordinary-base.png | Bin 76549 -> 98200 bytes .../ergodox/keymaps/ordinary/ordinary-media.png | Bin 96205 -> 123435 bytes .../ergodox/keymaps/ordinary/ordinary-special.png | Bin 68418 -> 68292 bytes .../ergodox/keymaps/ordinary/ordinary-special.txt | 14 +-- .../ergodox/keymaps/ordinary/ordinary-symbol.png | Bin 73009 -> 101255 bytes .../ergodox/keymaps/ordinary/ordinary-symbol.txt | 12 +-- keyboards/ergodox/keymaps/ordinary/readme.md | 65 +++++------- 8 files changed, 98 insertions(+), 111 deletions(-) diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c index eda45b7cb3..302c41cc8d 100644 --- a/keyboards/ergodox/keymaps/ordinary/keymap.c +++ b/keyboards/ergodox/keymaps/ordinary/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "led.h" #include "debug.h" #include "action_layer.h" @@ -31,31 +31,31 @@ * If you use or modify this layout I would love to hear from you. * * Details: readme.md - * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary + * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/******* Base Layer ******************************************************************************************************** +/******* Base Layer **************************************************************************************************** * - * ,------------------------------------------------------. ,------------------------------------------------------. - * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | - * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| - * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | - * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| - * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | - * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| - * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | - * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' - * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | Home | End | | Left | Right| - * ,------|------|------| |------+------+------. - * | | | PgUp | | Up | | | - * |Backsp| Del |------| |------| Enter| Space| - * | | | PgDn | | Down | | | - * `--------------------' `--------------------' + * ,------------------------------------------------------. ,------------------------------------------------------. + * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | + * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| + * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | + * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| + * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | + * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Home | End | | Left | Right| + * ,------|------|------| |------+------+------. + * | | | PgUp | | Up | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | PgDn | | Down | | | + * `--------------------' `--------------------' */ [BASE] = KEYMAP( // left hand @@ -67,37 +67,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_HOME,KC_END ,KC_PGUP ,KC_BSPC,KC_DEL ,KC_PGDN - // right hand - ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) - ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) - ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) - ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT - ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_DOWN ,KC_ENT ,KC_SPC + // right hand + ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) + ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT + ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_DOWN ,KC_ENT ,KC_SPC ), -/******* Symbols Layer ***************************************************************************************************** +/******* Symbols Layer ************************************************************************************************* * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | - * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| - * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | Left | Right| | Home | End | - * ,------|------|------| |------+------+------. - * | | | Up | | PgUp | | | - * |Space |Enter |------| |------|BackSp| Del | - * | | | Down | | PgDn | | | - * `--------------------' `--------------------' + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | + * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| + * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Left | Right| | Home | End | + * ,------|------|------| |------+------+------. + * | | | Up | | PgUp | | | + * |Space |Enter |------| |------|BackSp| Del | + * | | | Down | | PgDn | | | + * `--------------------' `--------------------' */ [SYMB] = KEYMAP( // left hand @@ -105,19 +105,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) ,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_TAB -,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI +,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI ,KC_LEFT ,KC_RGHT ,KC_UP ,KC_SPC ,KC_ENT ,KC_DOWN - // right hand - ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS - ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS - ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS - ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS - ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT - ,KC_HOME ,KC_END - ,KC_PGUP - ,KC_PGDN ,KC_BSPC ,KC_DEL + // right hand + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS + ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS + ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS + ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT + ,KC_HOME ,KC_END + ,KC_PGUP + ,KC_PGDN ,KC_BSPC ,KC_DEL ), /******* Media Layer ******************************************************************************************************* diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-base.png b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png index 7f8c1b5c1f..831db4f5d3 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-base.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png index bb78b7c7a8..5ff3f53385 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png index 399c5fc754..4fb9d1d166 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt index 6f9d8ef047..97f40f9dbc 100644 --- a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt @@ -1,21 +1,21 @@ [{x:3.5,a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"_\n\n\n\n\n\n-"], [{y:-0.875,x:5.5,a:7},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], -[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], +[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#ff8500"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], [{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"{\n["], [{y:-0.875,x:5.5,a:7},"",{h:1.5},"",{x:4.5,h:1.5},"",""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nLock"], -[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5},""], +[{y:-0.875,c:"#c6c600",t:"#002299",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nLock"], +[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"], -[{y:-0.625,x:6.5,c:"#cccccc",a:7,h:1.5},"",{x:4.5,h:1.5},""], +[{y:-0.875,c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"], +[{y:-0.625,x:6.5,c:"#cccccc",t:"#000000",a:7,h:1.5},"",{x:4.5,h:1.5},""], [{y:-0.75,x:3.5},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:5.5},"",{x:6.5},""], -[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"], -[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5},""], +[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"], +[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.75,x:0.5},"","",{x:14.5},"",""], [{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png index 48cda5f6b6..dd90863295 100644 Binary files a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png and b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png differ diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt index 5c5bc155aa..001bf370d8 100644 --- a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt +++ b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt @@ -1,11 +1,11 @@ [{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], [{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], [{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], -[{y:-0.875,c:"#dddd77",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#dddd77",w:1.5},"\n\nShift\n\n\n\n\nLock"], +[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"], [{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], [{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], [{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], -[{y:-0.875,c:"#dddd77",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#dddd77",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#c6c600",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"], [{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"(",{x:10.5,c:"#89b087"},"5"], [{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], [{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], @@ -14,10 +14,10 @@ [{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], [{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], [{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], -[{y:-0.875,c:"#dddd77",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#dddd77",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#c6c600",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."], -[{y:-0.875,x:2.5,c:"#c6c600"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="], -[{y:-0.75,x:0.5,c:"#c6c600"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"], +[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."], +[{y:-0.875,x:2.5,c:"#dddd77"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="], +[{y:-0.75,x:0.5,c:"#dddd77"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"], [{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"], [{h:2},"Space",{h:2},"Enter","Up"], [{x:2},"Down"], diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md index 21d40477ca..9c5294c5be 100644 --- a/keyboards/ergodox/keymaps/ordinary/readme.md +++ b/keyboards/ergodox/keymaps/ordinary/readme.md @@ -10,66 +10,51 @@ no rights reserved, use for any purposes, credit me if you are a nice person ## The Base Layout ## -* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh -* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key -* Several dark blue keys double for entry of characters which would typically be in those locations -* The turquoise keys are text navigation and manipulation -* The red keys is Escape and it is always found in that location no matter what +* *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets). +* *Modifier Keys* are light yellow and in the traditional location: Control, Option, Command, plus Hyper and Meh. +* *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional shift) is found in the usual place and above that is found Symbol Shift, Media Shift, and Special Shift (Shift Lock). +* Several of the shift keys double for entry of characters which would typically be in those locations. +* *Thumb Keys* shown in orange are for text navigation and manipulation. +* *Escape* is red and it is always found in that location no matter what. ![Ordinary base layout](ordinary-base.png) -This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. - -Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. - -The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. +The four big orane keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. ## The Symbols Layer ## -* The light green keys are the eponymous symbols -* The bright green keys are F-Keys -* The dark green keys constitute a number pad -* The turquoise keys are the *reverse* of the turquoise keys on the base layer +* *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe justapose each other. Pipe, slash, and backslash are arranged in a column. +* *F-Keys* are bright green and overlay the row of numerals. +* *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed. +* *Thumb keys* on this layer are the *reverse* of the orange keys on the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. ![Ordinary symbol layout](ordinary-symbol.png) -The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. - -The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements: - -* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers. -* The slash, backslash, and pipe characters are grouped together as a memory aid. -* The & and | symbols are juxtaposed as a memory aid - -The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. - -Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. +The Symbols Layer is based on the Coder Layer from the default Ergodox EZ layout. I slightly rearranged the symbols, added some symbols, expanded the number pad, and straightened out the F-Keys. It's very handy to have the symbols directly underneath the normal typing keys. ## The Media Layer ## -* The dark orange keys on the left move the mouse cursor -* The dark orange keys on the right move the text cursor -* The light orange keys are for scrolling and paging -* The bright green keys are more F-keys -* The dark yellow keys signal Web and Audio applications -* The light yellow keys signal the operating system +* *Mouse Cursor Keys* are under the left hand, shown in dark blue. Diagonal keys won't automatically repeat unless combined with other keys. Buttons to left- middle- and right-click the mouse are also featured. +* *Text Cursor Keys* are under the right hand, shown in dark blue. They overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. +* *Scrolling and Paging* keys are shown in light blue and have some useful redundancy across the layout. +* Higher-order *F-Keys* are shown in bright green overylaying the numerals. +* *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck. +* The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir). * The dark gray keys do nothing in case you bump them by accident ![Ordinary media layout](ordinary-media.png) -This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. +This layer is a substantial extension of the Media layer on the Ergodox EZ default layout. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. -Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. - -Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. +Keys to directly interact with the operating system are also found on this layer, such as volume and shutdown. ## Switching Between Layers ## In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. -Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button. You can press the shift and shift-lock buttons in either order. +Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button. Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. @@ -77,6 +62,8 @@ Multiple layers can be turned on at once. The Capitals layer will affect charact ![Ordinary special layout](ordinary-special.png) +The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations. + ### Escape ### The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. @@ -85,7 +72,7 @@ The Ordinary layout offers as a consolation prize a Special sequence for Escape: ### Backspace ### -At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. +At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence using the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. ### Other Characters ### @@ -93,11 +80,11 @@ The Escape and Backspace special sequences are so useful why not have a few more **** -The Ordinary Layout for the Ergodox EZ keyboard, v4 +The Ordinary Layout for the Ergodox EZ keyboard, v4.20 Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. Details: readme.md - https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary + https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary -- cgit v1.2.3 From 6a9a6b9477749d9fc80cad8f026140b52715b5ec Mon Sep 17 00:00:00 2001 From: Nicholas Keene Date: Fri, 19 Aug 2016 23:44:08 -0500 Subject: The Ordinary Layout is boring because all the keys are where you expect them to be --- keyboards/ergodox/keymaps/ordinary/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md index 9c5294c5be..820b80b454 100644 --- a/keyboards/ergodox/keymaps/ordinary/readme.md +++ b/keyboards/ergodox/keymaps/ordinary/readme.md @@ -19,7 +19,7 @@ no rights reserved, use for any purposes, credit me if you are a nice person ![Ordinary base layout](ordinary-base.png) -The four big orane keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. +The four big orange keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another. The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. -- cgit v1.2.3 From dd553d460e280298839bddd66fca36ecdf64f721 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 11 Jun 2016 17:24:28 -0500 Subject: fixed color detection routine in makefile --- tmk_core/rules.mk | 550 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 356 insertions(+), 194 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d2350f27c1..8563f1e072 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -14,27 +14,71 @@ # Frederik Rouleau # Carlos Lamas # - -# Enable vpath seraching for source files only -# Without this, output files, could be read from the wrong .build directories -VPATH_SRC := $(VPATH) -vpath %.c $(VPATH_SRC) -vpath %.h $(VPATH_SRC) -vpath %.cpp $(VPATH_SRC) -vpath %.hpp $(VPATH_SRC) -vpath %.S $(VPATH_SRC) -VPATH := +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# 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, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- # Output format. (can be srec, ihex, binary) FORMAT = ihex -# Optimization level, can be [0, 1, 2, 3, s]. +BUILD_DIR = .build + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) + + +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s -COLOR ?= true + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + +COLOR?=true ifeq ($(COLOR),true) NO_COLOR=\033[0m @@ -45,38 +89,30 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -AUTOGEN ?= false - -ifneq ($(shell awk --version 2>/dev/null),) - AWK=awk -else - AWK=cat && test -endif - -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) ifndef $(SILENT) SILENT = false endif -TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' +TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 -PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) +AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' +AWK_CMD = awk '{ printf "%-69s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) +EXTRAINCDIRS = $(subst :, ,$(VPATH)) # Compiler flag to set the C Standard level. @@ -88,14 +124,17 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL CDEFS += $(OPT_DEFS) # Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) ADEFS += $(OPT_DEFS) # Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS CPPDEFS += $(OPT_DEFS) @@ -109,12 +148,20 @@ CPPDEFS += $(OPT_DEFS) # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CFLAGS += -g$(DEBUG) +CFLAGS = -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fdata-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color endif endif @@ -140,9 +187,16 @@ endif # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CPPFLAGS += -g$(DEBUG) +CPPFLAGS = -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -ffunction-sections +CPPFLAGS += -fdata-sections # to supress "warning: only initialized variables can be placed into program memory area" CPPFLAGS += -w CPPFLAGS += -Wall @@ -169,7 +223,7 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -203,6 +257,28 @@ SCANF_LIB = MATH_LIB = -lm +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + #---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file @@ -211,8 +287,9 @@ MATH_LIB = -lm # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) @@ -220,13 +297,59 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # You can give EXTRALDFLAGS at 'make' command line. LDFLAGS += $(EXTRALDFLAGS) + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + # Define programs and commands. SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo +# Autodecct teensy loader +ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) + TEENSY_LOADER_CLI = teensy-loader-cli +else + TEENSY_LOADER_CLI = teensy_loader_cli +endif # Define Messages # English @@ -239,7 +362,6 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: -MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -248,24 +370,12 @@ MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: -MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ - Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ - git submodule sync --recursive\n\ - git submodule update --init --recursive$(NO_COLOR)\n\n\ - You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n + + # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) -# The files in the lib folder are shared between all keymaps, so generate that folder name by removing -# the keymap from the name -KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) -# And fixup the object files to match -LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) -NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) -LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) -OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -273,20 +383,34 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) -ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) - -MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) +ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: build sizeafter +all: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) clean_list # force clean each time + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end + +# Quick make that doesn't clean +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end # Change the build target to build a HEX file or a library. build: elf hex @@ -302,14 +426,17 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) -check_submodule: - git submodule status --recursive | \ - while IFS= read -r x; do \ - case "$$x" in \ - \ *) ;; \ - *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ - esac \ - done + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @$(SECHO) $(MSG_BEGIN) + +end: + @$(SECHO) $(MSG_END) + # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex @@ -320,31 +447,134 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: $(BUILD_DIR)/$(TARGET).hex +sizeafter: @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually - # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : @$(SILENT) || $(CC) --version + + +# Program the device. +program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(PROGRAM_CMD) + +teensy: $(BUILD_DIR)/$(TARGET).hex + $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex + +flip: $(BUILD_DIR)/$(TARGET).hex + batchisp -hardware usb -device $(MCU) -operation erase f + batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + +dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + dfu-programmer $(MCU) reset + +dfu-no-build: +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex + dfu-programmer $(MCU) reset + +dfu-start: + dfu-programmer $(MCU) reset + dfu-programmer $(MCU) start + +flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex + batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase + batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex + +dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep +else + dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep +endif + dfu-programmer $(MCU) reset + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(BUILD_DIR)/$(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof + + +extcoff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof + + + # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) - $(eval CMD=$(HEX) $< $@) + $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) + @$(BUILD_CMD) + @$(COPY) $@ $(TARGET).hex + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) + $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) @$(BUILD_CMD) - @if $(AUTOGEN); then \ - $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ - $(COPY) $@ $(KEYMAP_PATH)/$(KEYBOARD)_$(KEYMAP).hex; \ - else \ - $(COPY) $@ $(TARGET).hex; \ - fi %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) - $(eval CMD=$(EEP) $< $@ || exit 0) + $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) @$(BUILD_CMD) # Create extended listing file from ELF output file. @@ -359,11 +589,6 @@ gccversion : $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) -%.bin: %.elf - @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) - $(eval CMD=$(BIN) $< $@ || exit 0) - @$(BUILD_CMD) - # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) @@ -372,164 +597,101 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) -BEGIN = gccversion check_submodule sizebefore - # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -# Note the obj.txt depeendency is there to force linking if a source file is deleted -%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) +%.elf: $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) -define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) - @$$(BUILD_CMD) +$(OBJDIR)/%.o : %.c + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) + @$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) +$(OBJDIR)/%.o : %.cpp + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) - @$$(BUILD_CMD) - -$1/force: - -$1/cflags.txt: $1/force - echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ - -$1/cppflags.txt: $1/force - echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ - -$1/asflags.txt: $1/force - echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ - -$1/ldflags.txt: $1/force - echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ - -$1/obj.txt: $1/force - echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ - -$1/compiler.txt: $1/force - $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ -endef - -# We have to use static rules for the .d files for some reason -DEPS = $(patsubst %.o,%.d,$(OBJ)) -# Keep the .d files -.PRECIOUS: $(DEPS) -# Empty rule to force recompilation if the .d file is missing -$(DEPS): - -# Since the object files could be in two different folders, generate -# separate rules for them, rather than having too generic rules -$(eval $(call GEN_OBJRULE,$(OBJDIR))) -$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) - # Compile: create assembler files from C source files. -%.s : %.c | $(BEGIN) +%.s : %.c @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp | $(BEGIN) +%.s : %.cpp @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) + @$(BUILD_CMD) + # Create preprocessed source for use in sending a bug report. -%.i : %.c | $(BEGIN) - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ +%.i : %.c + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: - $(REMOVE) -r $(OBJDIR) 2>/dev/null - $(REMOVE) -r $(KBOBJDIR) 2>/dev/null - $(REMOVE) $(BUILD_DIR)/$(TARGET).* +clean: begin clean_list end + +clean_list : + $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) + $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) + $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) -SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) -SUBDIRS := $(sort $(SUBDIRS)) -# $(error $(SUBDIRS)) -all-keyboards-defaults-%: +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) +all-keyboards-defaults: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keyboards-defaults: all-keyboards-defaults-all - -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) -all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) -all-keyboards: all-keyboards-all - -define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) -$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) -$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) -@for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -done -endef - -define make_keyboard_helper -# Just remove the -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-all: - $(call make_keyboard_helper,$@,all) -/keyboards/%-clean: - $(call make_keyboard_helper,$@,clean) -/keyboards/%: - $(call make_keyboard_helper,$@,all) - -all-keymaps-%: - $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) +all-keyboards: $(KEYBOARDS) +/keyboard/%: + $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keymaps: all-keymaps-all +all-keymaps: + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) + @for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) -$(shell mkdir $(KBOBJDIR) 2>/dev/null) + # Include the dependency files. --include $(patsubst %.o,%.d,$(OBJ)) +-include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) # Listing of phony targets. -.PHONY : all finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% +all-keyboards-defaults all-keyboards all-keymaps -- cgit v1.2.3 From aff792545d70fbf281e64757b74d0ed776187bb2 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Fri, 19 Aug 2016 22:30:34 -0700 Subject: Changed my keymap to match normal keymaps. --- keyboards/ergodox/keymaps/xyverz/keymap.c | 512 ++++++++++++------------------ 1 file changed, 198 insertions(+), 314 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c index 397c8566f5..5927de33fb 100644 --- a/keyboards/ergodox/keymaps/xyverz/keymap.c +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -45,331 +45,215 @@ extern keymap_config_t keymap_config; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_DV] = { // layer 0 : Dvorak -/* - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | - * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LCtr | LAlt | | Ralt | RCtr | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * | BkSp | Del |------| |------| Enter| Space| - * | | | End | | PgDn | | | - * `--------------------' `--------------------' +/* Layer 0 : Dvorak + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y | | | | F | G | C | R | L | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCTL | LALT | | RALT | RCTL | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' * */ -#ifdef SUBPROJECT_infinity // Infinity Ergodox - // left hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, - {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, - {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, - {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, - {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, - {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, - {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, - {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, - - //Right Hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, - {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, - {KC_6, KC_F, KC_D, KC_B, KC_SPC }, - {KC_7, KC_G, KC_H, KC_M, KC_UP }, - {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, - {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, - {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, - {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} -#else // Ergodox and Ergodox EZ +[_DV] = KEYMAP( // left hand - {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, XXXXXXX}, - {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, - {KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL }, - {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC}, - {KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME}, - {KC_5, KC_Y, KC_I, KC_X, XXXXXXX, KC_LCTL}, - {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, - - // right hand - {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, - {KC_6, KC_F, KC_D, KC_B, XXXXXXX, KC_RCTL}, - {KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP}, - {KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC }, - {KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT }, - {KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN}, - {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, XXXXXXX} -#endif - }, - - -[_QW] = { // layer 1 : QWERTY -/* - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LCtr | LAlt | | Ralt | RCtr | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * | BkSp | Del |------| |------| Enter| Space| - * | | | End | | PgDn | | | - * `--------------------' `--------------------' + KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(_MD), + KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, + XXXXXXX, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + MO(_KP), KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), + + +/* Layer 1: QWERTY + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCTL | LALT | | RALT | RCTL | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' */ -#ifdef SUBPROJECT_infinity // Infinity Ergodox - // left hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, - {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, - {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, - {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, - {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, - {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, - {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, - {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, - - //Right Hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, - {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, - {KC_6, KC_F, KC_D, KC_B, KC_SPC }, - {KC_7, KC_G, KC_H, KC_M, KC_UP }, - {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, - {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, - {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, - {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} -#else // Ergodox and Ergodox EZ +[_QW] = KEYMAP( // left hand - {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, XXXXXXX}, - {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, - {KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL }, - {KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC}, - {KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME}, - {KC_5, KC_T, KC_G, KC_B, XXXXXXX, KC_LCTL}, - {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, - - // right hand - {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, - {KC_6, KC_Y, KC_H, KC_N, XXXXXXX, KC_RCTL}, - {KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP}, - {KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC }, - {KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT }, - {KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN}, - {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, XXXXXXX} -#endif - }, - - -[_CM] = { // layer 2 : Colemak -/* - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | - * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | LCtr | LAlt | | Ralt | RCtr | - * ,------|------|------| |------+------+------. - * | | | Home | | PgUp | | | - * | BkSp | Del |------| |------| Enter| Space| - * | | | End | | PgDn | | | - * `--------------------' `--------------------' + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD), + KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(_KP), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI, + KC_LALT, KC_LCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), + + +/* Layer 2 : Colemak + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | + * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCTL | LALT | | RALT | RCTL | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' */ -#ifdef SUBPROJECT_infinity // Infinity Ergodox - // left hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_HOME}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_LCTL, KC_END }, - {KC_6, MO(_KP), XXXXXXX, MO(_MD), KC_DEL }, - {KC_5, KC_Y, KC_I, KC_X, KC_BSPC}, - {KC_4, KC_P, KC_U, KC_K, KC_RGHT}, - {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT}, - {KC_2, KC_COMM, KC_O, KC_Q, KC_INS }, - {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV }, - {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI}, - - //Right Hand - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_PGUP}, - {XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL, KC_PGDN}, - {KC_ESC, MO(_MD), XXXXXXX, MO(_KP), KC_ENT }, - {KC_6, KC_F, KC_D, KC_B, KC_SPC }, - {KC_7, KC_G, KC_H, KC_M, KC_UP }, - {KC_8, KC_C, KC_T, KC_W, KC_DOWN}, - {KC_9, KC_R, KC_N, KC_V, KC_SLSH}, - {KC_0, KC_L, KC_S, KC_Z, KC_EQL }, - {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI} -#else // Ergodox and Ergodox EZ +[_CM] = KEYMAP( // left hand - {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, XXXXXXX}, - {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, - {KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL }, - {KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC}, - {KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME}, - {KC_5, KC_G, KC_D, KC_B, XXXXXXX, KC_LCTL}, - {KC_ESC, XXXXXXX, XXXXXXX, MO(_MD), XXXXXXX, KC_LALT}, - - // right hand - {KC_ESC, XXXXXXX, XXXXXXX, MO(_KP), XXXXXXX, KC_RALT}, - {KC_6, KC_J, KC_H, KC_K, XXXXXXX, KC_RCTL}, - {KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP}, - {KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC }, - {KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT }, - {KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN}, - {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, XXXXXXX} -#endif - }, - - -[_MD] = { // layer 3 : Media layer -/* - * ,--------------------------------------------------. ,--------------------------------------------------. - * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' + 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, XXXXXXX, + KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD), + KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + MO(_KP), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI, + KC_LALT, KC_LCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), + + +/* Layer 3 : Media layer + * ,--------------------------------------------------. ,--------------------------------------------------. + * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' */ -#ifdef SUBPROJECT_infinity // Infinity Ergodox - // left hand - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {KC_F11, _______, XXXXXXX, _______, _______}, - {KC_F5, _______, _______, _______, _______}, - {KC_F4, KC_PAUS, _______, COLEMAK, _______}, - {KC_F3, KC_SLCK, _______, QWERTY, _______}, - {KC_F2, KC_PSCR, _______, DVORAK, _______}, - {KC_F1, _______, _______, _______, _______}, - {RESET, _______, _______, _______, _______}, - - //Right Hand - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {KC_F12, _______, XXXXXXX, _______, _______}, - {KC_F6, _______, KC_MSTP, _______, _______}, - {KC_F7, KC_VOLU, KC_MPRV, _______, _______}, - {KC_F8, KC_VOLD, KC_MPLY, _______, _______}, - {KC_F9, KC_MUTE, KC_MNXT, _______, _______}, - {KC_F10, _______, KC_MSEL, _______, _______}, - {_______, _______, _______, _______, _______}, -#else // Ergodox and Ergodox EZ +[_MD] = KEYMAP( // left hand - {RESET, _______, _______, _______, _______, XXXXXXX}, - {KC_F1, _______, _______, _______, _______, _______}, - {KC_F2, KC_PSCR, _______, DVORAK, _______, _______}, - {KC_F3, KC_SLCK, _______, QWERTY, _______, _______}, - {KC_F4, KC_PAUS, _______, COLEMAK, _______, _______}, - {KC_F5, _______, _______, _______, XXXXXXX, _______}, - {KC_F11, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, - - // right hand - {KC_F12, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, - {KC_F6, _______, KC_MSTP, _______, XXXXXXX, _______}, - {KC_F7, KC_MUTE, KC_MPRV, _______, _______, _______}, - {KC_F8, KC_VOLD, KC_MPLY, _______, _______, _______}, - {KC_F9, KC_VOLU, KC_MNXT, _______, _______, _______}, - {KC_F10, _______, KC_MSEL, _______, _______, _______}, - {_______, _______, _______, _______, _______, XXXXXXX} -#endif - }, - - -[_KP] = { // layer 4 : Keypad layer -/* - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | KP 0 | | KP . |KP Ent| | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + // right hand + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, + KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______ + ), + + +/* Layer 4 : Keypad layer + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Power | | | | | | | | | | NmLk | KP = | KP / | KP * | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP - | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | KP 0 | | |KP Ent| | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' */ -#ifdef SUBPROJECT_infinity // Infinity Ergodox - // left hand - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {_______, _______, XXXXXXX, _______, _______}, - {_______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______}, - {KC_PWR, KC_SLEP, KC_WAKE, _______, _______}, - - //Right Hand - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______}, - {_______, _______, XXXXXXX, _______, _______}, - {_______, _______, KC_MSTP, _______, _______}, - {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0 }, - {KC_PSLS, KC_P8, KC_P5, KC_P2, _______}, - {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT}, - {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT}, - {_______, _______, _______, _______, _______}, -#else // Ergodox and Ergodox EZ +[_KP] = KEYMAP( // left hand - {KC_PWR, KC_SLEP, KC_WAKE, _______, _______, XXXXXXX}, - {_______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, XXXXXXX, _______}, - {_______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, - - // right hand - {_______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______}, - {_______, _______, _______, _______, XXXXXXX, _______}, - {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, _______}, - {KC_PSLS, KC_P8, KC_P5, KC_P2, XXXXXXX, _______}, - {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, _______}, - {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, _______}, - {_______, _______, _______, _______, XXXXXXX, XXXXXXX} -#endif - }, - + KC_PWR, _______, _______, _______, _______, _______, _______, + KC_SLEP, _______, _______, _______, _______, _______, _______, + KC_WAKE, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + // right hand + _______, _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______, + _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, + _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, + _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______ + ), }; -- cgit v1.2.3 From e4984f65decbd005d147d29b56d7a0c7d7a8dafd Mon Sep 17 00:00:00 2001 From: Xyverz Date: Fri, 19 Aug 2016 22:45:20 -0700 Subject: Changed the Ergodox keymap to use the KEYMAP() macro, updated readme.md. --- keyboards/ergodox/keymaps/xyverz/keymap.c | 13 +++---------- keyboards/ergodox/keymaps/xyverz/readme.md | 14 +++++++------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c index 5927de33fb..08ee5aeda5 100644 --- a/keyboards/ergodox/keymaps/xyverz/keymap.c +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -1,8 +1,4 @@ /* - * PLEASE NOTE: This keymap has been updated to work with the Infinity ErgoDox. To build for the Infinity, - * simply append `SUBPROJECT=infinity` to the end of your `make` statement. This keymap file is untested - * on the Infinity ErgoDox. - * * About this keymap: * * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak @@ -14,9 +10,6 @@ * * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck * layouts. - * - * For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the - * keymap is defined, beginning on line 81. * */ @@ -197,7 +190,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, + _______, _______, DVORAK, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -224,7 +217,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | KP 0 | | |KP Ent| | + * | | | | | | | KP 0 | | KP . |KP Ent| | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -249,7 +242,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, - _______, _______, _______, _______, _______, + KC_P0, _______, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______ diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md index e6cb582c5c..6ecdabc9ed 100644 --- a/keyboards/ergodox/keymaps/xyverz/readme.md +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -1,9 +1,5 @@ # Xyverz's ErgoDox EZ Keymap -## Please Note: - -This keymap has been updated to work with the Infinity ErgoDox. To build for the Infinity, simply append `SUBPROJECT=infinity` to the end of your `make` statement. This keymap file builds cleanly as is but as of this writing has not been tested on the Infinity ErgoDox. YMMV. - ## About this keymap: The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox. @@ -12,7 +8,11 @@ The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts. -For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the keymap is defined beginning on line 81, or in ../../infinity/infinity.h beginning at line 72. +## Still to do: + + * Need to figure out a better position for the ESC key. + * Come up with a function for the empty keys shown in the alpha layers below. + * Fix the CapsLock, NumLock, and ScrLck LEDs. ### Layer 0: Dvorak layer @@ -103,9 +103,9 @@ For a better explanation of the layout matrices shown below, take a look at ../. ### Keymap 4: Keypad layer ,--------------------------------------------------.,--------------------------------------------------. - | Power | | | | | | || | | NmLk | KP / | KP * | KP - | | + | Power | | | | | | || | | NmLk | KP = | KP / | KP * | | |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| - | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP + | | + | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP - | | |--------+------+------+------+------+------| || |------+------+------+------+------+--------| | Wake | | | | | |------||------| | KP 4 | KP 5 | KP 6 | KP + | | |--------+------+------+------+------+------| || |------+------+------+------+------+--------| -- cgit v1.2.3 From 48f8ab1ae2612960cbd82c1f9967fd118aae4c67 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 12:44:04 +0300 Subject: Fix the clean target It now properly cleans all the outputs --- tmk_core/rules.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 977a2d0e53..21011c2808 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -352,8 +352,7 @@ $(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT)))) # Target: clean project. clean: - $(REMOVE) -r $(OBJDIR) 2>/dev/null - $(REMOVE) -r $(KBOBJDIR) 2>/dev/null + $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null) $(REMOVE) $(BUILD_DIR)/$(TARGET).* show_path: -- cgit v1.2.3 From b26ded3ab1c09e2a127feb5f4e22e97242ce77d7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 14:53:29 +0300 Subject: Comment the Makefile Also move some messages to message.mk --- Makefile | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- message.mk | 13 ++++++- 2 files changed, 124 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 9ca73b4ad7..d70ac9a3b8 100644 --- a/Makefile +++ b/Makefile @@ -2,15 +2,18 @@ ifndef VERBOSE .SILENT: endif +# Allow the silent with lower caps to work the same way as upper caps ifdef silent SILENT = $(silent) endif ifdef SILENT - SUB_IS_SILENT := $(silent) + SUB_IS_SILENT := $(SILENT) endif -override SILENT = false +# We need to make sure that silent is always turned off at the top level +# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly +override SILENT := false ON_ERROR := error_occured=1 @@ -26,27 +29,44 @@ ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE)) STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) -PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) - MAKEFILE_INCLUDED=yes +# Helper function to process the newt element of a space separated path +# It works a bit like the traditional functional head tail +# so the CURRENT_PATH_ELEMENT will beome the new head +# and the PATH_ELEMENTS are the rest that are still unprocessed define NEXT_PATH_ELEMENT $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) endef +# We change the / to spaces so that we more easily can work with the elements +# separately +PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) +# Initialize the path elements list for further processing $(eval $(call NEXT_PATH_ELEMENT)) +# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct +# variables depending on which directory you stand in. +# It's really a very simple if else chain, if you squint enough, +# but the makefile syntax makes it very verbose. +# If we are in a subfolder of keyboards ifeq ($(CURRENT_PATH_ELEMENT),keyboards) $(eval $(call NEXT_PATH_ELEMENT)) KEYBOARD := $(CURRENT_PATH_ELEMENT) $(eval $(call NEXT_PATH_ELEMENT)) + # If we are in a subfolder of keymaps, or in other words in a keymap + # folder ifeq ($(CURRENT_PATH_ELEMENT),keymaps) $(eval $(call NEXT_PATH_ELEMENT)) KEYMAP := $(CURRENT_PATH_ELEMENT) + # else if we are not in the keyboard folder itself else ifneq ($(CURRENT_PATH_ELEMENT),) + # the we can assume it's a subproject, as no other folders + # should have make files in them SUBPROJECT := $(CURRENT_PATH_ELEMENT) $(eval $(call NEXT_PATH_ELEMENT)) + # if we are inside a keymap folder of a subproject ifeq ($(CURRENT_PATH_ELEMENT),keymaps) $(eval $(call NEXT_PATH_ELEMENT)) KEYMAP := $(CURRENT_PATH_ELEMENT) @@ -57,7 +77,8 @@ endif # Only consider folders with makefiles, to prevent errors in case there are extra folders KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) -#Compability with the old make variables +#Compability with the old make variables, anything you specify directly on the command line +# always overrides the detected folders ifdef keyboard KEYBOARD := $(keyboard) endif @@ -71,29 +92,41 @@ ifdef keymap KEYMAP := $(keymap) endif +# Uncomment these for debugging #$(info Keyboard: $(KEYBOARD)) #$(info Keymap: $(KEYMAP)) #$(info Subproject: $(SUBPROJECT)) #$(info Keyboards: $(KEYBOARDS)) + +# Set the default goal depening on where we are running make from +# this handles the case where you run make without any arguments .DEFAULT_GOAL := all ifneq ($(KEYMAP),) ifeq ($(SUBPROJECT),) + # Inside a keymap folder, just build the keymap, with the + # default subproject .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) else + # Inside a subproject keyamp folder, build the keymap + # for that subproject .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP) endif else ifneq ($(SUBPROJECT),) + # Inside a subproject folder, build all keymaps for that subproject .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm else ifneq ($(KEYBOARD),) + # Inside a keyboard folder, build all keymaps for all subprojects + # Note that this is different from the old behaviour, which would + # build only the default keymap of the default keyboard .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm endif -# Compare the start of the RULE_VARIABLE with the first argument($1) +# Compare the start of the RULE variable with the first argument($1) # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true # and $1 is removed from the RULE variable -# Otherwise the RULE_FOUND variable is set to false +# Otherwise the RULE_FOUND variable is set to false, and RULE left as it was # The function is a bit tricky, since there's no built in $(startswith) function define COMPARE_AND_REMOVE_FROM_RULE_HELPER ifeq ($1,$$(RULE)) @@ -110,10 +143,12 @@ define COMPARE_AND_REMOVE_FROM_RULE_HELPER endif endef +# This makes it easier to call COMPARE_AND_REMOVE_FROM_RULE, since it makes it behave like +# a function that returns the value COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND) -# Recursively try to find a match +# Recursively try to find a match for the start of the rule to be checked # $1 The list to be checked # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched @@ -127,6 +162,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER endif endef +# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) define ALL_IN_LIST_LOOP @@ -139,47 +175,70 @@ define PARSE_ALL_IN_LIST $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1))) endef +# The entry point for rule parsing +# parses a rule in the format --- +# but this particular function only deals with the first part define PARSE_RULE RULE := $1 COMMANDS := + # If the rule starts with allkb, then continue the parsing from + # PARSE_ALL_KEYBOARDS ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) + # If the rule starts with the name of a known keyboard, then continue + # the parsing from PARSE_KEYBOARD else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + # Otherwise use the KEYBOARD variable, which is determined either by + # the current directory you run make from, or passed in as an argument else ifneq ($$(KEYBOARD),) $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) + # Notice the tab instead of spaces below! exit 1 endif endef # $1 = Keyboard +# Parses a rule in the format -- +# the keyboard is already known when entering this function define PARSE_KEYBOARD CURRENT_KB := $1 # A subproject is any keyboard subfolder with a makefile SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) + # if the rule starts with allsp, then continue with looping over all subprojects ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + # A special case for matching the defaultsp (default subproject) else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true) $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) + # If the rule starts with the name of a known subproject else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + # Try to use the SUBPROJECT variable, which is either determined by the + # directory which invoked make, or passed as an argument to make else ifneq ($$(SUBPROJECT),) $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) + # If there's no matching subproject, we assume it's the default + # This will allow you to leave the subproject part of the target out else - # If there's no matching subproject, we assume it's the default - # This will allow you to leave the subproject part of the target out $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) endif endef +# if we are going to compile all keyboards, match the rest of the rule +# for each of them define PARSE_ALL_KEYBOARDS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) endef # $1 Subproject +# When entering this, the keyboard and subproject are known, so now we need +# to determine which keymaps are going to get compiled define PARSE_SUBPROJECT + # If we want to compile the default subproject, then we need to + # include the correct makefile to determine the actual name of it ifeq ($1,defaultsp) SUBPROJECT_DEFAULT= $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) @@ -188,39 +247,54 @@ define PARSE_SUBPROJECT CURRENT_SP := $1 endif # If current subproject is empty (the default was not defined), and we have a list of subproject - # then make all + # then make all of them ifeq ($$(CURRENT_SP),) ifneq ($$(SUBPROJECTS),) CURRENT_SP := allsp endif endif + # The special allsp is handled later ifneq ($$(CURRENT_SP),allsp) + # get a list of all keymaps KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) ifneq ($$(CURRENT_SP),) + # if the subproject is defined, then also look for keymaps inside the subproject folder SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.))) KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS)) endif + # if the rule after removing the start of it is empty (we haven't specified a kemap or target) + # compile all the keymaps ifeq ($$(RULE),) $$(eval $$(call PARSE_ALL_KEYMAPS)) + # The same if allkm was specified else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) + # Try to match the specified keyamp with the list of known keymaps else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + # Otherwise try to match the keymap from the current folder, or arguments to the make command else ifneq ($$(KEYMAP),) $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP))) else + # Otherwise something is wrong with the target + # Try to give as much information as possible of what it it was trying to do ifeq ($$(CURRENT_SP),) $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) else $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(CURRENT_SP)-$$(RULE)'. Stop.) endif + # Notice the tab instead of spaces below! exit 1 endif else + # As earlier mentione,d when allsb is specified, we call our self recursively + # for all of the subprojects $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS))) endif endef +# If we want to parse all subprojects, but the keyboard doesn't have any, +# then use defaultsp instead define PARSE_ALL_SUBPROJECTS ifeq ($$(SUBPROJECTS),) $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) @@ -230,27 +304,36 @@ define PARSE_ALL_SUBPROJECTS endef # $1 Keymap +# This is the meat of compiling a keyboard, when entering this, everything is known +# keyboard, subproject, and keymap +# Note that we are not directly calling the command here, but instead building a list, +# which will later be processed define PARSE_KEYMAP CURRENT_KM = $1 # The rest of the rule is the target # Remove the leading "-" from the target, as it acts as a separator MAKE_TARGET := $$(patsubst -%,%,$$(RULE)) + # We need to generate an unique indentifer to append to the COMMANDS list COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) COMMANDS += $$(COMMAND) + # If we are compiling a keyboard without a subproject, we want to display just the name + # of the keyboard, otherwise keyboard/subproject ifeq ($$(CURRENT_SP),) KB_SP := $(CURRENT_KB) else KB_SP := $(CURRENT_KB)/$$(CURRENT_SP) endif + # Format it in bold KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) + # Specify the variables that we are passing forward to submake MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) + # And the first part of the make command MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET) - MAKE_MSG := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR) - ifneq ($$(MAKE_TARGET),) - MAKE_MSG += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR) - endif - MAKE_MSG_FORMAT := $(AWK) '{ printf "%-118s", $$$$0;}' + # The message to display + MAKE_MSG := $$(MSG_MAKE_KB) + # We run the command differently, depending on if we want more output or not + # The true version for silent output and the false version otherwise COMMAND_true_$$(COMMAND) := \ printf "$$(MAKE_MSG)" | \ $$(MAKE_MSG_FORMAT); \ @@ -267,10 +350,14 @@ define PARSE_KEYMAP $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; endef +# Just parse all the keymaps for a specifc keyboard define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef +# Set the silent mode depending on if we are trying to compile multiple keyboards or not +# By default it's on in that case, but it can be overriden by specifying silent=false +# from the command line define SET_SILENT_MODE ifdef SUB_IS_SILENT SILENT_MODE := $(SUB_IS_SILENT) @@ -291,9 +378,12 @@ SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) .PHONY: $(SUBPROJECTS) $(SUBPROJECTS): %: %-allkm +# Let's match everything, we handle all the rule parsing ourselves .PHONY: % %: + # Check if we have the CMP tool installed cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; + # Check if the submodules are dirty, and display a warning if they are git submodule status --recursive 2>/dev/null | \ while IFS= read -r x; do \ case "$$x" in \ @@ -303,14 +393,20 @@ $(SUBPROJECTS): %: %-allkm done $(eval $(call PARSE_RULE,$@)) $(eval $(call SET_SILENT_MODE)) + # Run all the commands in the same shell, notice the + at the first line + # it has to be there to allow parallel execution of the submake + # This always tries to compile everything, even if error occurs in the middle + # But we return the error code at the end, to trigger travis failures +error_occured=0; \ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi +# All should compile everything .PHONY: all all: all-keyboards +# Define some shortcuts, mostly for compability with the old syntax .PHONY: all-keyboards all-keyboards: allkb-allsp-allkm @@ -318,6 +414,7 @@ all-keyboards: allkb-allsp-allkm all-keyboards-defaults: allkb-allsp-default +# Generate the version.h file GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) diff --git a/message.mk b/message.mk index f8fd387121..fb1a7a1f9a 100644 --- a/message.mk +++ b/message.mk @@ -31,7 +31,7 @@ PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $ PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; -MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) +MAKE_MSG_FORMAT = $(AWK) '{ printf "%-118s", $$0;}' # Define Messages # English @@ -59,4 +59,13 @@ MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ git submodule sync --recursive\n\ git submodule update --init --recursive$(NO_COLOR)\n\n\ You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n \ No newline at end of file + or if you have modified the ChibiOS libraries yourself. \n\n +MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) + +define GENERATE_MSG_MAKE_KB + MSG_MAKE_KB_ACTUAL := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR) + ifneq ($$(MAKE_TARGET),) + MSG_MAKE_KB_ACTUAL += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR) + endif +endef +MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL) -- cgit v1.2.3 From e1590abea9c8d0fbfcd4c4e71f0758709f975d08 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 11 Jun 2016 17:24:28 -0500 Subject: fixed color detection routine in makefile --- tmk_core/rules.mk | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d2350f27c1..f97c5cb49d 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -203,6 +203,28 @@ SCANF_LIB = MATH_LIB = -lm +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + #---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file @@ -220,6 +242,40 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # You can give EXTRALDFLAGS at 'make' command line. LDFLAGS += $(EXTRALDFLAGS) + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + # Define programs and commands. SHELL = sh REMOVE = rm -f @@ -330,6 +386,111 @@ sizeafter: $(BUILD_DIR)/$(TARGET).hex gccversion : @$(SILENT) || $(CC) --version + + +# Program the device. +program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(PROGRAM_CMD) + +teensy: $(BUILD_DIR)/$(TARGET).hex + $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex + +flip: $(BUILD_DIR)/$(TARGET).hex + batchisp -hardware usb -device $(MCU) -operation erase f + batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + +dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + dfu-programmer $(MCU) reset + +dfu-no-build: +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex + dfu-programmer $(MCU) reset + +dfu-start: + dfu-programmer $(MCU) reset + dfu-programmer $(MCU) start + +flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex + batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase + batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex + +dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep +else + dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep +endif + dfu-programmer $(MCU) reset + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(BUILD_DIR)/$(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof + + +extcoff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof + + + # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) -- cgit v1.2.3 From 2dfe13ac6d12fb2a8e46061cf81ba223adf0550d Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 11 Jun 2016 17:24:28 -0500 Subject: fixed color detection routine in makefile --- tmk_core/rules.mk | 389 +++++++++++++++++++++++++++--------------------------- 1 file changed, 195 insertions(+), 194 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f97c5cb49d..8563f1e072 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -14,27 +14,71 @@ # Frederik Rouleau # Carlos Lamas # - -# Enable vpath seraching for source files only -# Without this, output files, could be read from the wrong .build directories -VPATH_SRC := $(VPATH) -vpath %.c $(VPATH_SRC) -vpath %.h $(VPATH_SRC) -vpath %.cpp $(VPATH_SRC) -vpath %.hpp $(VPATH_SRC) -vpath %.S $(VPATH_SRC) -VPATH := +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# 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, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- # Output format. (can be srec, ihex, binary) FORMAT = ihex -# Optimization level, can be [0, 1, 2, 3, s]. +BUILD_DIR = .build + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) + + +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s -COLOR ?= true + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + +COLOR?=true ifeq ($(COLOR),true) NO_COLOR=\033[0m @@ -45,38 +89,30 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -AUTOGEN ?= false - -ifneq ($(shell awk --version 2>/dev/null),) - AWK=awk -else - AWK=cat && test -endif - -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) ifndef $(SILENT) SILENT = false endif -TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' +TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 -PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) +AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' +AWK_CMD = awk '{ printf "%-69s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) +EXTRAINCDIRS = $(subst :, ,$(VPATH)) # Compiler flag to set the C Standard level. @@ -88,14 +124,17 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL CDEFS += $(OPT_DEFS) # Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) ADEFS += $(OPT_DEFS) # Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS CPPDEFS += $(OPT_DEFS) @@ -109,12 +148,20 @@ CPPDEFS += $(OPT_DEFS) # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CFLAGS += -g$(DEBUG) +CFLAGS = -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fdata-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color endif endif @@ -140,9 +187,16 @@ endif # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CPPFLAGS += -g$(DEBUG) +CPPFLAGS = -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -ffunction-sections +CPPFLAGS += -fdata-sections # to supress "warning: only initialized variables can be placed into program memory area" CPPFLAGS += -w CPPFLAGS += -Wall @@ -169,7 +223,7 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -233,8 +287,9 @@ EXTMEMOPTS = # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) @@ -278,11 +333,23 @@ DEBUG_HOST = localhost # Define programs and commands. SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo +# Autodecct teensy loader +ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) + TEENSY_LOADER_CLI = teensy-loader-cli +else + TEENSY_LOADER_CLI = teensy_loader_cli +endif # Define Messages # English @@ -295,7 +362,6 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: -MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -304,24 +370,12 @@ MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: -MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ - Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ - git submodule sync --recursive\n\ - git submodule update --init --recursive$(NO_COLOR)\n\n\ - You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n + + # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) -# The files in the lib folder are shared between all keymaps, so generate that folder name by removing -# the keymap from the name -KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) -# And fixup the object files to match -LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) -NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) -LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) -OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -329,20 +383,34 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) -ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) - -MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) +ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: build sizeafter +all: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) clean_list # force clean each time + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end + +# Quick make that doesn't clean +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end # Change the build target to build a HEX file or a library. build: elf hex @@ -358,14 +426,17 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) -check_submodule: - git submodule status --recursive | \ - while IFS= read -r x; do \ - case "$$x" in \ - \ *) ;; \ - *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ - esac \ - done + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @$(SECHO) $(MSG_BEGIN) + +end: + @$(SECHO) $(MSG_END) + # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex @@ -376,11 +447,11 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: $(BUILD_DIR)/$(TARGET).hex +sizeafter: @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually - # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : @@ -494,18 +565,16 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) - $(eval CMD=$(HEX) $< $@) + $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) + @$(BUILD_CMD) + @$(COPY) $@ $(TARGET).hex + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) + $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) @$(BUILD_CMD) - @if $(AUTOGEN); then \ - $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ - $(COPY) $@ $(KEYMAP_PATH)/$(KEYBOARD)_$(KEYMAP).hex; \ - else \ - $(COPY) $@ $(TARGET).hex; \ - fi %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) - $(eval CMD=$(EEP) $< $@ || exit 0) + $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) @$(BUILD_CMD) # Create extended listing file from ELF output file. @@ -520,11 +589,6 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) -%.bin: %.elf - @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) - $(eval CMD=$(BIN) $< $@ || exit 0) - @$(BUILD_CMD) - # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) @@ -533,164 +597,101 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) -BEGIN = gccversion check_submodule sizebefore - # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -# Note the obj.txt depeendency is there to force linking if a source file is deleted -%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) +%.elf: $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) -define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) - @$$(BUILD_CMD) +$(OBJDIR)/%.o : %.c + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) + @$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) +$(OBJDIR)/%.o : %.cpp + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) - @mkdir -p $$(@D) - @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) - @$$(BUILD_CMD) - -$1/force: - -$1/cflags.txt: $1/force - echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ - -$1/cppflags.txt: $1/force - echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ - -$1/asflags.txt: $1/force - echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ - -$1/ldflags.txt: $1/force - echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ - -$1/obj.txt: $1/force - echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ - -$1/compiler.txt: $1/force - $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ -endef - -# We have to use static rules for the .d files for some reason -DEPS = $(patsubst %.o,%.d,$(OBJ)) -# Keep the .d files -.PRECIOUS: $(DEPS) -# Empty rule to force recompilation if the .d file is missing -$(DEPS): - -# Since the object files could be in two different folders, generate -# separate rules for them, rather than having too generic rules -$(eval $(call GEN_OBJRULE,$(OBJDIR))) -$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) - # Compile: create assembler files from C source files. -%.s : %.c | $(BEGIN) +%.s : %.c @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp | $(BEGIN) +%.s : %.cpp @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) + @$(BUILD_CMD) + # Create preprocessed source for use in sending a bug report. -%.i : %.c | $(BEGIN) - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ +%.i : %.c + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: - $(REMOVE) -r $(OBJDIR) 2>/dev/null - $(REMOVE) -r $(KBOBJDIR) 2>/dev/null - $(REMOVE) $(BUILD_DIR)/$(TARGET).* +clean: begin clean_list end + +clean_list : + $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) + $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) + $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) -SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) -SUBDIRS := $(sort $(SUBDIRS)) -# $(error $(SUBDIRS)) -all-keyboards-defaults-%: +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) +all-keyboards-defaults: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keyboards-defaults: all-keyboards-defaults-all - -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) -all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) -all-keyboards: all-keyboards-all - -define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) -$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) -$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) -@for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -done -endef - -define make_keyboard_helper -# Just remove the -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-all: - $(call make_keyboard_helper,$@,all) -/keyboards/%-clean: - $(call make_keyboard_helper,$@,clean) -/keyboards/%: - $(call make_keyboard_helper,$@,all) - -all-keymaps-%: - $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) +all-keyboards: $(KEYBOARDS) +/keyboard/%: + $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keymaps: all-keymaps-all +all-keymaps: + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) + @for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) -$(shell mkdir $(KBOBJDIR) 2>/dev/null) + # Include the dependency files. --include $(patsubst %.o,%.d,$(OBJ)) +-include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) # Listing of phony targets. -.PHONY : all finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% +all-keyboards-defaults all-keyboards all-keymaps -- cgit v1.2.3 From 462e516ad9afb3540b70597afffed4fe77ae8988 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 20 Aug 2016 08:34:42 -0500 Subject: Merge --- tmk_core/rules.mk | 550 +++++++++++++++++++----------------------------------- 1 file changed, 194 insertions(+), 356 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8563f1e072..86ad90f5d1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -14,71 +14,27 @@ # Frederik Rouleau # Carlos Lamas # -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device. -# Please customize your programmer settings(PROGRAM_CMD) -# -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# 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, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- + +# Enable vpath seraching for source files only +# Without this, output files, could be read from the wrong .build directories +VPATH_SRC := $(VPATH) +vpath %.c $(VPATH_SRC) +vpath %.h $(VPATH_SRC) +vpath %.cpp $(VPATH_SRC) +vpath %.hpp $(VPATH_SRC) +vpath %.S $(VPATH_SRC) +VPATH := # Output format. (can be srec, ihex, binary) FORMAT = ihex -BUILD_DIR = .build - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = $(BUILD_DIR)/obj_$(TARGET) - - -# Optimization level, can be [0, 1, 2, 3, s]. +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - -COLOR?=true +COLOR ?= true ifeq ($(COLOR),true) NO_COLOR=\033[0m @@ -89,30 +45,38 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) +AUTOGEN ?= false + +ifneq ($(shell awk --version 2>/dev/null),) + AWK=awk +else + AWK=cat && test +endif + +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n ifndef $(SILENT) SILENT = false endif -TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' +TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' -AWK_CMD = awk '{ printf "%-69s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false -PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false -PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) +AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' +AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 +PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 +PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = $(subst :, ,$(VPATH)) +EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) # Compiler flag to set the C Standard level. @@ -124,17 +88,14 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL CDEFS += $(OPT_DEFS) # Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) ADEFS += $(OPT_DEFS) # Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS CPPDEFS += $(OPT_DEFS) @@ -148,20 +109,12 @@ CPPDEFS += $(OPT_DEFS) # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) +CFLAGS += -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -ffunction-sections -CFLAGS += -fdata-sections -CFLAGS += -fno-inline-small-functions -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color endif endif @@ -187,16 +140,9 @@ endif # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) +CPPFLAGS += -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -CPPFLAGS += -ffunction-sections -CPPFLAGS += -fdata-sections # to supress "warning: only initialized variables can be placed into program memory area" CPPFLAGS += -w CPPFLAGS += -Wall @@ -223,7 +169,7 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -257,28 +203,6 @@ SCANF_LIB = MATH_LIB = -lm -# List any extra directories to look for libraries here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - #---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file @@ -287,9 +211,8 @@ EXTMEMOPTS = # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax -LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) @@ -297,59 +220,13 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # You can give EXTRALDFLAGS at 'make' command line. LDFLAGS += $(EXTRALDFLAGS) - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - # Define programs and commands. SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -AR = avr-ar rcs -NM = avr-nm REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo -# Autodecct teensy loader -ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) - TEENSY_LOADER_CLI = teensy-loader-cli -else - TEENSY_LOADER_CLI = teensy_loader_cli -endif # Define Messages # English @@ -362,6 +239,7 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: +MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -370,12 +248,24 @@ MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: - - +MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ + Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ + git submodule sync --recursive\n\ + git submodule update --init --recursive$(NO_COLOR)\n\n\ + You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ + or if you have modified the ChibiOS libraries yourself. \n\n # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) +# The files in the lib folder are shared between all keymaps, so generate that folder name by removing +# the keymap from the name +KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) +# And fixup the object files to match +LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) +NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) +LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) +OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -383,34 +273,20 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d +GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) +ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) +ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) + +MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) # Default target. -all: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) clean_list # force clean each time - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end - -# Quick make that doesn't clean -quick: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end +all: build sizeafter # Change the build target to build a HEX file or a library. build: elf hex @@ -426,17 +302,14 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @$(SECHO) $(MSG_BEGIN) - -end: - @$(SECHO) $(MSG_END) - +check_submodule: + git submodule status --recursive | \ + while IFS= read -r x; do \ + case "$$x" in \ + \ *) ;; \ + *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ + esac \ + done # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex @@ -447,134 +320,31 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: +sizeafter: $(BUILD_DIR)/$(TARGET).hex @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually - # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : @$(SILENT) || $(CC) --version - - -# Program the device. -program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep - $(PROGRAM_CMD) - -teensy: $(BUILD_DIR)/$(TARGET).hex - $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex - -flip: $(BUILD_DIR)/$(TARGET).hex - batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - -dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force -else - dfu-programmer $(MCU) erase -endif - dfu-programmer $(MCU) erase - dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex - dfu-programmer $(MCU) reset - -dfu-no-build: -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force -else - dfu-programmer $(MCU) erase -endif - dfu-programmer $(MCU) erase - dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex - dfu-programmer $(MCU) reset - -dfu-start: - dfu-programmer $(MCU) reset - dfu-programmer $(MCU) start - -flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep - $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex - batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex - -dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep -else - dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep -endif - dfu-programmer $(MCU) reset - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(BUILD_DIR)/$(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT = $(OBJCOPY) --debugging -COFFCONVERT += --change-section-address .data-0x800000 -COFFCONVERT += --change-section-address .bss-0x800000 -COFFCONVERT += --change-section-address .noinit-0x800000 -COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(BUILD_DIR)/$(TARGET).elf - @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof - - -extcoff: $(BUILD_DIR)/$(TARGET).elf - @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof - - - # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) - $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) - @$(BUILD_CMD) - @$(COPY) $@ $(TARGET).hex - $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) - $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) + $(eval CMD=$(HEX) $< $@) @$(BUILD_CMD) + @if $(AUTOGEN); then \ + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ + $(COPY) $@ $(KEYMAP_PATH)/$(KEYBOARD)_$(KEYMAP).hex; \ + else \ + $(COPY) $@ $(TARGET).hex; \ + fi %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) - $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) + $(eval CMD=$(EEP) $< $@ || exit 0) @$(BUILD_CMD) # Create extended listing file from ELF output file. @@ -589,6 +359,11 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) +%.bin: %.elf + @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) + $(eval CMD=$(BIN) $< $@ || exit 0) + @$(BUILD_CMD) + # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) @@ -597,101 +372,164 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) +BEGIN = gccversion check_submodule sizebefore + # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: $(OBJ) +# Note the obj.txt depeendency is there to force linking if a source file is deleted +%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) +define GEN_OBJRULE # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) - @$(BUILD_CMD) +$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ +$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) + @mkdir -p $$(@D) + @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) + @$$(BUILD_CMD) + +$1/force: + +$1/cflags.txt: $1/force + echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ + +$1/cppflags.txt: $1/force + echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ + +$1/asflags.txt: $1/force + echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ + +$1/ldflags.txt: $1/force + echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ + +$1/obj.txt: $1/force + echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ + +$1/compiler.txt: $1/force + $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ +endef + +# We have to use static rules for the .d files for some reason +DEPS = $(patsubst %.o,%.d,$(OBJ)) +# Keep the .d files +.PRECIOUS: $(DEPS) +# Empty rule to force recompilation if the .d file is missing +$(DEPS): + +# Since the object files could be in two different folders, generate +# separate rules for them, rather than having too generic rules +$(eval $(call GEN_OBJRULE,$(OBJDIR))) +$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) + # Compile: create assembler files from C source files. -%.s : %.c +%.s : %.c | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp +%.s : %.cpp | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) - @$(BUILD_CMD) - # Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ +%.i : %.c | $(BEGIN) + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: begin clean_list end - -clean_list : - $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) - $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) - $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) +clean: + $(REMOVE) -r $(OBJDIR) 2>/dev/null + $(REMOVE) -r $(KBOBJDIR) 2>/dev/null + $(REMOVE) $(BUILD_DIR)/$(TARGET).* show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) -all-keyboards-defaults: +SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) +SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) +SUBDIRS := $(sort $(SUBDIRS)) +# $(error $(SUBDIRS)) +all-keyboards-defaults-%: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) -all-keyboards: $(KEYBOARDS) -/keyboard/%: - $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) +all-keyboards-defaults: all-keyboards-defaults-all + +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) +all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) +all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) +all-keyboards: all-keyboards-all + +define make_keyboard +$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) +$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) +$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) +$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) +$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) +@for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ +done +endef + +define make_keyboard_helper +# Just remove the -all and so on from the first argument and pass it forward +$(call make_keyboard,$(subst -$2,,$1),$2) +endef + +/keyboards/%-all: + $(call make_keyboard_helper,$@,all) +/keyboards/%-clean: + $(call make_keyboard_helper,$@,clean) +/keyboards/%: + $(call make_keyboard_helper,$@,all) + +all-keymaps-%: + $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ + LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keymaps: - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) - @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ - LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done +all-keymaps: all-keymaps-all # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) - +$(shell mkdir $(KBOBJDIR) 2>/dev/null) # Include the dependency files. --include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) +-include $(patsubst %.o,%.d,$(OBJ)) # Listing of phony targets. -.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ +.PHONY : all finish sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps +all-keyboards-defaults all-keyboards all-keymaps \ +all-keyboards-defaults-% all-keyboards-% all-keymaps-% \ No newline at end of file -- cgit v1.2.3 From f0fd840a578752bdd820c302f58e406849f2b55c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 17:21:28 +0300 Subject: Add .gitattributes to ensure correct line endings It also ensures that make files and shell script are checked out with lf endings, for compability with the Windows 10 bash --- .gitattributes | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..8fd1fd7525 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,93 @@ +# auto for anything unspecified +* text=auto + +# sources +*.c text +*.cc text +*.cxx text +*.cpp text +*.c++ text +*.hpp text +*.h text +*.h++ text +*.hh text +*.bat text +*.coffee text +*.css text +*.htm text +*.html text +*.inc text +*.ini text +*.js text +*.jsx text +*.json text +*.less text +*.php text +*.pl text +*.py text +*.rb text +*.sass text +*.scm text +*.scss text +*.sh text +*.sql text +*.styl text +*.ts text +*.xml text +*.xhtml text + +# make files (need to always use lf for compatibility with Windows 10 bash) +Makefile eol=lf +*.mk eol=lf + +# make files (need to always use lf for compatibility with Windows 10 bash) +*.sh eol=lf + +# documentation +*.markdown text +*.md text +*.mdwn text +*.mdown text +*.mkd text +*.mkdn text +*.mdtxt text +*.mdtext text +*.txt text +AUTHORS text +CHANGELOG text +CHANGES text +CONTRIBUTING text +COPYING text +INSTALL text +license text +LICENSE text +NEWS text +readme text +*README* text +TODO text + +GRAPHICS +*.ai binary +*.bmp binary +*.eps binary +*.gif binary +*.ico binary +*.jng binary +*.jp2 binary +*.jpg binary +*.jpeg binary +*.jpx binary +*.jxr binary +*.pdf binary +*.png binary +*.psb binary +*.psd binary +*.svg text +*.svgz binary +*.tif binary +*.tiff binary +*.wbmp binary +*.webp binary + +# hex files +*.hex binary -- cgit v1.2.3 From fd2f957a1aeefa523c33c709365fd2f2928fd2d2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 17:59:18 +0300 Subject: Normalize line endings --- .../Docbook/mshelp/placeholder.txt | 2 +- .../LUFA/StudioIntegration/Docbook/placeholder.txt | 2 +- .../StudioIntegration/HV1/lufa_hv1_transform.xslt | 90 +- .../HV1/lufa_studio_help_styling.css | 106 +- .../StudioIntegration/VSIX/[Content_Types].xml | 26 +- .../LUFA/StudioIntegration/VSIX/asf-manifest.xml | 36 +- .../StudioIntegration/VSIX/extension.vsixmanifest | 66 +- .../LUFA/StudioIntegration/VSIX/generate_caches.py | 76 +- .../lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml | 192 +-- .../LUFA/StudioIntegration/lufa_common.xml | 68 +- .../LUFA/StudioIntegration/lufa_drivers_board.xml | 228 +-- .../StudioIntegration/lufa_drivers_board_names.xml | 1706 ++++++++++---------- .../LUFA/StudioIntegration/lufa_drivers_misc.xml | 112 +- .../StudioIntegration/lufa_drivers_peripheral.xml | 396 ++--- .../LUFA/StudioIntegration/lufa_drivers_usb.xml | 62 +- .../StudioIntegration/lufa_drivers_usb_class.xml | 64 +- .../StudioIntegration/lufa_drivers_usb_core.xml | 170 +- .../lufa_drivers_usb_core_avr8.xml | 86 +- .../lufa_drivers_usb_core_uc3.xml | 84 +- .../lufa_drivers_usb_core_xmega.xml | 72 +- .../LUFA/StudioIntegration/lufa_platform.xml | 120 +- .../LUFA/StudioIntegration/lufa_platform_uc3.xml | 52 +- .../LUFA/StudioIntegration/lufa_platform_xmega.xml | 46 +- .../LUFA/StudioIntegration/lufa_toolchain.xml | 86 +- tmk_core/protocol/midi/Config/LUFAConfig.h | 186 +-- tmk_core/tool/chibios/ch-bootloader-jump.patch | 204 +-- 26 files changed, 2169 insertions(+), 2169 deletions(-) diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt index 486e9a4270..a34fd58dfa 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt @@ -1 +1 @@ -Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 . +Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 . diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt index c017acfd75..dd69b7e0bd 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt @@ -1 +1 @@ -Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ . +Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ . diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt index ee8a38340d..8aa4a9413e 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt @@ -1,45 +1,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css index 49eb7e9706..0b6ccbd8c1 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css @@ -1,53 +1,53 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2013. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -.programlisting { - display: block; - margin-left: 15px; - padding: 10px; - background-color: #f4f4f4; - border: 1px solid #aaaaaa; - font-family: "Consolas", "Courier New", sans-serif; - } - - code { - background-color: #f4f4f4; - font-family: "Consolas", "Courier New", sans-serif; - } - -.note, .warning, .tip { - display: block; - margin-left: 15px; - padding-left: 10px; - padding-bottom: 5px; - background-color: #f4f4f4; - border: 1px solid #aaaaaa; -} - -table { - border: 1px solid #aaaaaa; - border-collapse: collapse; - margin-left: 15px; - font-size: 10pt; -} - -table thead { - background-color: #f4f4f4; -} - -table thead th { - padding: 5px; -} - -table tbody td { - padding: 5px; -} - -ul { - padding-left: 20px; -} +/* + LUFA Library + Copyright (C) Dean Camera, 2013. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +.programlisting { + display: block; + margin-left: 15px; + padding: 10px; + background-color: #f4f4f4; + border: 1px solid #aaaaaa; + font-family: "Consolas", "Courier New", sans-serif; + } + + code { + background-color: #f4f4f4; + font-family: "Consolas", "Courier New", sans-serif; + } + +.note, .warning, .tip { + display: block; + margin-left: 15px; + padding-left: 10px; + padding-bottom: 5px; + background-color: #f4f4f4; + border: 1px solid #aaaaaa; +} + +table { + border: 1px solid #aaaaaa; + border-collapse: collapse; + margin-left: 15px; + font-size: 10pt; +} + +table thead { + background-color: #f4f4f4; +} + +table thead th { + padding: 5px; +} + +table tbody td { + padding: 5px; +} + +ul { + padding-left: 20px; +} diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml index 05ef8b6ba4..112d169942 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml index 794fd689e1..bd969518a1 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml @@ -1,18 +1,18 @@ - - - FourWalledCubicle - LUFA - Dean Camera - - True - - - - 0 - - - content.xml.cache - - - - + + + FourWalledCubicle + LUFA + Dean Camera + + True + + + + 0 + + + content.xml.cache + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest index ea6edeb258..8475017443 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest @@ -1,33 +1,33 @@ - - - - - LUFA Library - Dean Camera - 0 - http://www.lufa-lib.org - LUFA, the Lightweight USB Framework for AVRs. - - License.txt - LUFA_thumb.png - LUFA.png - - - AtmelStudio - AtmelStudio - - - - 1033 - - false - - - - - - LUFA.pkgdef - helpcontentsetup.msha - asf-manifest.xml - - + + + + + LUFA Library + Dean Camera + 0 + http://www.lufa-lib.org + LUFA, the Lightweight USB Framework for AVRs. + + License.txt + LUFA_thumb.png + LUFA.png + + + AtmelStudio + AtmelStudio + + + + 1033 + + false + + + + + + LUFA.pkgdef + helpcontentsetup.msha + asf-manifest.xml + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py index c51cff400d..eb4b71efdf 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py @@ -1,38 +1,38 @@ -""" - LUFA Library - Copyright (C) Dean Camera, 2013. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -""" - -import sys -sys.path.append("ProjectGenerator") - - -def show_message(message): - print("[Project Generator] %s" % message) - sys.stdout.flush() - - -def main(lufa_root_path): - try: - from asf_avrstudio5_interface import PythonFacade - except ImportError: - print("Fatal Error: The ASF project generator is missing.") - return 1 - - p = PythonFacade(lufa_root_path) - - show_message("Checking database sanity...") - p.check_extension_database_sanity(lufa_root_path) - - show_message("Building cache files...") - p.generate_extension_cache_files(lufa_root_path) - - show_message("Cache files created.") - return 0 - - -if __name__ == "__main__": - sys.exit(main(sys.argv[1])) +""" + LUFA Library + Copyright (C) Dean Camera, 2013. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +""" + +import sys +sys.path.append("ProjectGenerator") + + +def show_message(message): + print("[Project Generator] %s" % message) + sys.stdout.flush() + + +def main(lufa_root_path): + try: + from asf_avrstudio5_interface import PythonFacade + except ImportError: + print("Fatal Error: The ASF project generator is missing.") + return 1 + + p = PythonFacade(lufa_root_path) + + show_message("Checking database sanity...") + p.check_extension_database_sanity(lufa_root_path) + + show_message("Building cache files...") + p.generate_extension_cache_files(lufa_root_path) + + show_message("Cache files created.") + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1])) diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml index 28afdda587..86cfc0409d 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml @@ -1,96 +1,96 @@ - - - - - - - - - Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml index 9e17b188be..c2ef7af4c7 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml @@ -1,34 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml index 3677d20036..e150aa6458 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml @@ -1,114 +1,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml index 4b099920b7..ab7e03e4e9 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml @@ -1,853 +1,853 @@ - - - - - - - - - Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards - compatible with the currently selected device will be shown. - - To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards + compatible with the currently selected device will be shown. + + To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml index 8680ca2dff..4311ae87b7 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml @@ -1,57 +1,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml index 3a982e565f..76ea516dbc 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml @@ -1,198 +1,198 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml index 7ff4b39492..263c411dff 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml index cd18bf10e7..67ab760d33 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml index 58f8917ef4..58a0b388f6 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml @@ -1,85 +1,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml index 166b9257aa..4688f05f91 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml @@ -1,43 +1,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml index 7e0540cda7..2e7185f24a 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml @@ -1,42 +1,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml index 9e9f4f6a1d..c79a0f5b52 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml @@ -1,36 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml index 02c7463ee5..4ee51f6ee0 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml @@ -1,60 +1,60 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml index a488c4b83d..98017b08ad 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml index 1674a77b02..e613fe5206 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml @@ -1,23 +1,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml index 031c8a2be6..a76b6d0d3b 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml @@ -1,43 +1,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/midi/Config/LUFAConfig.h b/tmk_core/protocol/midi/Config/LUFAConfig.h index fa9404498f..a1d7482672 100755 --- a/tmk_core/protocol/midi/Config/LUFAConfig.h +++ b/tmk_core/protocol/midi/Config/LUFAConfig.h @@ -1,93 +1,93 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2012. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * \brief LUFA Library Configuration Header File - * - * This header file is used to configure LUFA's compile time options, - * as an alternative to the compile time constants supplied through - * a makefile. - * - * For information on what each token does, refer to the LUFA - * manual section "Summary of Compile Tokens". - */ - -#ifndef _LUFA_CONFIG_H_ -#define _LUFA_CONFIG_H_ - - #if (ARCH == ARCH_AVR8) - - /* Non-USB Related Configuration Tokens: */ -// #define DISABLE_TERMINAL_CODES - - /* USB Class Driver Related Tokens: */ -// #define HID_HOST_BOOT_PROTOCOL_ONLY -// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} -// #define HID_USAGE_STACK_DEPTH {Insert Value Here} -// #define HID_MAX_COLLECTIONS {Insert Value Here} -// #define HID_MAX_REPORTITEMS {Insert Value Here} -// #define HID_MAX_REPORT_IDS {Insert Value Here} -// #define NO_CLASS_DRIVER_AUTOFLUSH - - /* General USB Driver Related Tokens: */ -// #define ORDERED_EP_CONFIG - #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) - #define USB_DEVICE_ONLY -// #define USB_HOST_ONLY -// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} -// #define NO_LIMITED_CONTROLLER_CONNECT -// #define NO_SOF_EVENTS - - /* USB Device Mode Driver Related Tokens: */ -// #define USE_RAM_DESCRIPTORS - #define USE_FLASH_DESCRIPTORS -// #define USE_EEPROM_DESCRIPTORS -// #define NO_INTERNAL_SERIAL - #define FIXED_CONTROL_ENDPOINT_SIZE 8 -// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} - #define FIXED_NUM_CONFIGURATIONS 1 -// #define CONTROL_ONLY_DEVICE -// #define INTERRUPT_CONTROL_ENDPOINT -// #define NO_DEVICE_REMOTE_WAKEUP -// #define NO_DEVICE_SELF_POWER - - /* USB Host Mode Driver Related Tokens: */ -// #define HOST_STATE_AS_GPIOR {Insert Value Here} -// #define USB_HOST_TIMEOUT_MS {Insert Value Here} -// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} -// #define NO_AUTO_VBUS_MANAGEMENT -// #define INVERTED_VBUS_ENABLE_LINE - - #else - - #error Unsupported architecture for this LUFA configuration file. - - #endif -#endif +/* + LUFA Library + Copyright (C) Dean Camera, 2012. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * \brief LUFA Library Configuration Header File + * + * This header file is used to configure LUFA's compile time options, + * as an alternative to the compile time constants supplied through + * a makefile. + * + * For information on what each token does, refer to the LUFA + * manual section "Summary of Compile Tokens". + */ + +#ifndef _LUFA_CONFIG_H_ +#define _LUFA_CONFIG_H_ + + #if (ARCH == ARCH_AVR8) + + /* Non-USB Related Configuration Tokens: */ +// #define DISABLE_TERMINAL_CODES + + /* USB Class Driver Related Tokens: */ +// #define HID_HOST_BOOT_PROTOCOL_ONLY +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} +// #define HID_USAGE_STACK_DEPTH {Insert Value Here} +// #define HID_MAX_COLLECTIONS {Insert Value Here} +// #define HID_MAX_REPORTITEMS {Insert Value Here} +// #define HID_MAX_REPORT_IDS {Insert Value Here} +// #define NO_CLASS_DRIVER_AUTOFLUSH + + /* General USB Driver Related Tokens: */ +// #define ORDERED_EP_CONFIG + #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) + #define USB_DEVICE_ONLY +// #define USB_HOST_ONLY +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} +// #define NO_LIMITED_CONTROLLER_CONNECT +// #define NO_SOF_EVENTS + + /* USB Device Mode Driver Related Tokens: */ +// #define USE_RAM_DESCRIPTORS + #define USE_FLASH_DESCRIPTORS +// #define USE_EEPROM_DESCRIPTORS +// #define NO_INTERNAL_SERIAL + #define FIXED_CONTROL_ENDPOINT_SIZE 8 +// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} + #define FIXED_NUM_CONFIGURATIONS 1 +// #define CONTROL_ONLY_DEVICE +// #define INTERRUPT_CONTROL_ENDPOINT +// #define NO_DEVICE_REMOTE_WAKEUP +// #define NO_DEVICE_SELF_POWER + + /* USB Host Mode Driver Related Tokens: */ +// #define HOST_STATE_AS_GPIOR {Insert Value Here} +// #define USB_HOST_TIMEOUT_MS {Insert Value Here} +// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} +// #define NO_AUTO_VBUS_MANAGEMENT +// #define INVERTED_VBUS_ENABLE_LINE + + #else + + #error Unsupported architecture for this LUFA configuration file. + + #endif +#endif diff --git a/tmk_core/tool/chibios/ch-bootloader-jump.patch b/tmk_core/tool/chibios/ch-bootloader-jump.patch index d886576214..c6eb2405c9 100644 --- a/tmk_core/tool/chibios/ch-bootloader-jump.patch +++ b/tmk_core/tool/chibios/ch-bootloader-jump.patch @@ -3,114 +3,114 @@ index 51a79bb..42d07bd 100644 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s @@ -105,6 +105,13 @@ - #define CRT0_CALL_DESTRUCTORS TRUE - #endif - -+/** -+ * @brief Magic number for jumping to bootloader. -+ */ -+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) -+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF -+#endif -+ - /*===========================================================================*/ - /* Code section. */ - /*===========================================================================*/ + #define CRT0_CALL_DESTRUCTORS TRUE + #endif + ++/** ++ * @brief Magic number for jumping to bootloader. ++ */ ++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) ++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF ++#endif ++ + /*===========================================================================*/ + /* Code section. */ + /*===========================================================================*/ @@ -124,6 +131,17 @@ - .thumb_func - .global Reset_Handler - Reset_Handler: -+ -+#ifdef STM32_BOOTLOADER_ADDRESS -+ /* jump to bootloader code */ -+ ldr r0, =__ram0_end__-4 -+ ldr r1, =MAGIC_BOOTLOADER_NUMBER -+ ldr r2, [r0, #0] -+ str r0, [r0, #0] /* erase stored magic */ -+ cmp r2, r1 -+ beq Bootloader_Jump -+#endif /* STM32_BOOTLOADER_ADDRESS */ -+ - /* Interrupts are globally masked initially.*/ - cpsid i - + .thumb_func + .global Reset_Handler + Reset_Handler: ++ ++#ifdef STM32_BOOTLOADER_ADDRESS ++ /* jump to bootloader code */ ++ ldr r0, =__ram0_end__-4 ++ ldr r1, =MAGIC_BOOTLOADER_NUMBER ++ ldr r2, [r0, #0] ++ str r0, [r0, #0] /* erase stored magic */ ++ cmp r2, r1 ++ beq Bootloader_Jump ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + /* Interrupts are globally masked initially.*/ + cpsid i + @@ -242,6 +260,21 @@ endfiniloop: - ldr r1, =__default_exit - bx r1 - -+#ifdef STM32_BOOTLOADER_ADDRESS -+/* -+ * Jump-to-bootloader function. -+ */ -+ -+ .align 2 -+ .thumb_func -+Bootloader_Jump: -+ ldr r0, =STM32_BOOTLOADER_ADDRESS -+ ldr r1, [r0, #0] -+ mov sp, r1 -+ ldr r0, [r0, #4] -+ bx r0 -+#endif /* STM32_BOOTLOADER_ADDRESS */ -+ - #endif - - /** @} */ + ldr r1, =__default_exit + bx r1 + ++#ifdef STM32_BOOTLOADER_ADDRESS ++/* ++ * Jump-to-bootloader function. ++ */ ++ ++ .align 2 ++ .thumb_func ++Bootloader_Jump: ++ ldr r0, =STM32_BOOTLOADER_ADDRESS ++ ldr r1, [r0, #0] ++ mov sp, r1 ++ ldr r0, [r0, #4] ++ bx r0 ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + #endif + + /** @} */ diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s index 4812a29..dca9f88 100644 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s @@ -140,6 +140,13 @@ - #define CRT0_CPACR_INIT 0x00F00000 - #endif - -+/** -+ * @brief Magic number for jumping to bootloader. -+ */ -+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) -+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF -+#endif -+ - /*===========================================================================*/ - /* Code section. */ - /*===========================================================================*/ + #define CRT0_CPACR_INIT 0x00F00000 + #endif + ++/** ++ * @brief Magic number for jumping to bootloader. ++ */ ++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) ++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF ++#endif ++ + /*===========================================================================*/ + /* Code section. */ + /*===========================================================================*/ @@ -164,6 +171,17 @@ - .thumb_func - .global Reset_Handler - Reset_Handler: -+ -+#ifdef STM32_BOOTLOADER_ADDRESS -+ /* jump to bootloader code */ -+ ldr r0, =__ram0_end__-4 -+ ldr r1, =MAGIC_BOOTLOADER_NUMBER -+ ldr r2, [r0, #0] -+ str r0, [r0, #0] /* erase stored magic */ -+ cmp r2, r1 -+ beq Bootloader_Jump -+#endif /* STM32_BOOTLOADER_ADDRESS */ -+ - /* Interrupts are globally masked initially.*/ - cpsid i - + .thumb_func + .global Reset_Handler + Reset_Handler: ++ ++#ifdef STM32_BOOTLOADER_ADDRESS ++ /* jump to bootloader code */ ++ ldr r0, =__ram0_end__-4 ++ ldr r1, =MAGIC_BOOTLOADER_NUMBER ++ ldr r2, [r0, #0] ++ str r0, [r0, #0] /* erase stored magic */ ++ cmp r2, r1 ++ beq Bootloader_Jump ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + /* Interrupts are globally masked initially.*/ + cpsid i + @@ -305,6 +323,21 @@ endfiniloop: - /* Branching to the defined exit handler.*/ - b __default_exit - -+#ifdef STM32_BOOTLOADER_ADDRESS -+/* -+ * Jump-to-bootloader function. -+ */ -+ -+ .align 2 -+ .thumb_func -+Bootloader_Jump: -+ ldr r0, =STM32_BOOTLOADER_ADDRESS -+ ldr r1, [r0, #0] -+ mov sp, r1 -+ ldr r0, [r0, #4] -+ bx r0 -+#endif /* STM32_BOOTLOADER_ADDRESS */ -+ - #endif /* !defined(__DOXYGEN__) */ - - /** @} */ + /* Branching to the defined exit handler.*/ + b __default_exit + ++#ifdef STM32_BOOTLOADER_ADDRESS ++/* ++ * Jump-to-bootloader function. ++ */ ++ ++ .align 2 ++ .thumb_func ++Bootloader_Jump: ++ ldr r0, =STM32_BOOTLOADER_ADDRESS ++ ldr r1, [r0, #0] ++ mov sp, r1 ++ ldr r0, [r0, #4] ++ bx r0 ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + #endif /* !defined(__DOXYGEN__) */ + + /** @} */ -- cgit v1.2.3 From 5febdb0a3c9e63d79d6695ebc1f58259669dd168 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 20 Aug 2016 10:26:36 -0500 Subject: Initial Commmit --- keyboards/vision_division/Makefile | 75 ++++++++++ keyboards/vision_division/config.h | 162 +++++++++++++++++++++ keyboards/vision_division/keymaps/default/Makefile | 21 +++ keyboards/vision_division/keymaps/default/config.h | 8 + keyboards/vision_division/keymaps/default/keymap.c | 44 ++++++ .../vision_division/keymaps/default/readme.md | 1 + keyboards/vision_division/readme.md | 28 ++++ keyboards/vision_division/vision_division.c | 28 ++++ keyboards/vision_division/vision_division.h | 19 +++ tmk_core/rules.mk | 2 +- 10 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 keyboards/vision_division/Makefile create mode 100644 keyboards/vision_division/config.h create mode 100644 keyboards/vision_division/keymaps/default/Makefile create mode 100644 keyboards/vision_division/keymaps/default/config.h create mode 100644 keyboards/vision_division/keymaps/default/keymap.c create mode 100644 keyboards/vision_division/keymaps/default/readme.md create mode 100644 keyboards/vision_division/readme.md create mode 100644 keyboards/vision_division/vision_division.c create mode 100644 keyboards/vision_division/vision_division.h diff --git a/keyboards/vision_division/Makefile b/keyboards/vision_division/Makefile new file mode 100644 index 0000000000..3f6d133c9b --- /dev/null +++ b/keyboards/vision_division/Makefile @@ -0,0 +1,75 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h new file mode 100644 index 0000000000..106cf384c3 --- /dev/null +++ b/keyboards/vision_division/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT vision_division +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 2 +#define MATRIX_COLS 3 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D0, D5 } +#define MATRIX_COL_PINS { F1, F0, B0 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/vision_division/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c new file mode 100644 index 0000000000..599c2cb522 --- /dev/null +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +#include "vision_division.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( /* Base */ + KC_A, KC_1, KC_H, \ + KC_TAB, KC_SPC \ +), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/readme.md b/keyboards/vision_division/keymaps/default/readme.md new file mode 100644 index 0000000000..bb0ed38622 --- /dev/null +++ b/keyboards/vision_division/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for vision_division \ No newline at end of file diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md new file mode 100644 index 0000000000..0a637fd068 --- /dev/null +++ b/keyboards/vision_division/readme.md @@ -0,0 +1,28 @@ +vision_division keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/vision_division folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file diff --git a/keyboards/vision_division/vision_division.c b/keyboards/vision_division/vision_division.c new file mode 100644 index 0000000000..eb9336fa33 --- /dev/null +++ b/keyboards/vision_division/vision_division.c @@ -0,0 +1,28 @@ +#include "vision_division.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/vision_division/vision_division.h b/keyboards/vision_division/vision_division.h new file mode 100644 index 0000000000..d30fc84998 --- /dev/null +++ b/keyboards/vision_division/vision_division.h @@ -0,0 +1,19 @@ +#ifndef VISION_DIVISION_H +#define VISION_DIVISION_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, \ + k10, k11 \ +) \ +{ \ + { k00, k01, k02 }, \ + { k10, KC_NO, k11 }, \ +} + +#endif diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 86ad90f5d1..d2350f27c1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -532,4 +532,4 @@ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% \ No newline at end of file +all-keyboards-defaults-% all-keyboards-% all-keymaps-% -- cgit v1.2.3 From 704cbd1d2b7e6361faf88272b6c4423ee43aeb81 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 18:59:01 +0300 Subject: Add instructions for Windows 10 subsystem for Linux Also simplify the linux instructions --- readme.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 37f140839d..2a5354d7f2 100644 --- a/readme.md +++ b/readme.md @@ -43,6 +43,27 @@ Before you are able to compile, you'll need to install an environment for AVR de ## Build Environment Setup +### Windows 10 + +It's still recommended to use the method for Vista and later below. The reason for this is that the Windows 10 Subsystem for Linux lacks [USB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it's not possible to flash the firmware to the keyboard. Please add your vote to the link! + +That said, it's still possible to use it for compilation. And recommended, if you need to compile much, since it's much faster than at least Cygwin (which is also supported, but currently lacking documentation). I haven't tried the method below, so I'm unable to tell. + +Here are the steps + +1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). +2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following + 1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first + 2. From within the Git bash run git rm --cached -r .` + 3. Followed by `git reset --hard` +3. Start the "Bash On Ubuntu On Windows" from the start menu +4. With the bash open, navigate to your git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. +5. Run `sudo util/install_dependencies.sh`. +6. After a while the installation will finish, and you are good to go + +**Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working. + + ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. 2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. @@ -68,12 +89,36 @@ You can also try these instructions: 3. Install [DFU-Programmer][dfu-prog]. ### Linux -Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager. + +To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. + +You can also install things manually, but this documentation might not be always up to date with all requirements. + +The current requirements are the following, but not all might be needed depending on what you do. Also note that some systems might not have all the dependencies available as packages, or they might be named differently. + +``` +build-essential +gcc +unzip +wget +zip +gcc-avr +binutils-avr +avr-libc +dfu-programmer +dfu-util +gcc-arm-none-eabi +binutils-arm-none-eabi +libnewlib-arm-none-eabi +git +``` + +Install the dependencies with your favorite package manager. Debian/Ubuntu example: sudo apt-get update - sudo apt-get install gcc-avr avr-libc dfu-programmer + sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi ### Docker -- cgit v1.2.3 From 2a5bdd81d45c5578fd84c0792e77af5991d2a4b8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 19:11:22 +0300 Subject: Add warning about line endings --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 2a5354d7f2..05c5511090 100644 --- a/readme.md +++ b/readme.md @@ -63,6 +63,8 @@ Here are the steps **Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working. +**Warning:** If you edit Makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work. + ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. -- cgit v1.2.3 From b5172e3afab515b1f93cd09c51b4c6c1b5174dc7 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sat, 20 Aug 2016 18:19:03 +0200 Subject: Rename file following upstream folder rename. --- keyboards/ergodox/keymaps/bepo/Makefile | 9 +++++++++ keyboards/ergodox_ez/keymaps/bepo/Makefile | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 keyboards/ergodox/keymaps/bepo/Makefile delete mode 100644 keyboards/ergodox_ez/keymaps/bepo/Makefile diff --git a/keyboards/ergodox/keymaps/bepo/Makefile b/keyboards/ergodox/keymaps/bepo/Makefile new file mode 100644 index 0000000000..b673c5ce52 --- /dev/null +++ b/keyboards/ergodox/keymaps/bepo/Makefile @@ -0,0 +1,9 @@ +# Having a file like this allows you to override Makefile definitions +# for your own particular keymap + +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +COMMAND_ENABLE = no # Commands for debug and configuration + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox_ez/keymaps/bepo/Makefile b/keyboards/ergodox_ez/keymaps/bepo/Makefile deleted file mode 100644 index b673c5ce52..0000000000 --- a/keyboards/ergodox_ez/keymaps/bepo/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# Having a file like this allows you to override Makefile definitions -# for your own particular keymap - -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -COMMAND_ENABLE = no # Commands for debug and configuration - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif -- cgit v1.2.3 From 4807feec8a8ea51db40b881b5057784b2b00310b Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 20 Aug 2016 14:49:16 -0500 Subject: In Progress Merge --- keyboards/vision_division/Makefile | 11 +- keyboards/vision_division/config.h | 31 ++++-- keyboards/vision_division/keymaps/default/Makefile | 2 +- keyboards/vision_division/vision_division.h | 111 ++++++++++++++++++++- 4 files changed, 137 insertions(+), 18 deletions(-) diff --git a/keyboards/vision_division/Makefile b/keyboards/vision_division/Makefile index 3f6d133c9b..4f3130c483 100644 --- a/keyboards/vision_division/Makefile +++ b/keyboards/vision_division/Makefile @@ -1,8 +1,9 @@ # MCU name -#MCU = at90usb1287 -MCU = atmega32u4 +MCU = at90usb1286 +# MCU = at90usb1287 +# MCU = atmega32u4 # Processor frequency. # This will define a symbol, F_CPU, in all source code files equal to the @@ -47,13 +48,13 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 +OPT_DEFS += -DBOOTLOADER_SIZE=1024 # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) @@ -61,7 +62,7 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover +NKRO_ENABLE ?= yes # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index 106cf384c3..1faea335ad 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -22,15 +22,21 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 +#define PRODUCT_ID 0x2525 #define DEVICE_VER 0x0001 #define MANUFACTURER You -#define PRODUCT vision_division -#define DESCRIPTION A custom keyboard +#define PRODUCT Vision Division +#define DESCRIPTION Split or Full Keyboard +#define MATRIX_EXTENDED /* key matrix size */ -#define MATRIX_ROWS 2 -#define MATRIX_COLS 3 +#ifdef MATRIX_EXTENDED + #define MATRIX_ROWS 6 + #define MATRIX_COLS 24 +#else + #define MATRIX_ROWS 6 + #define MATRIX_COLS 12 +#endif /* * Keyboard Matrix Assignments @@ -42,8 +48,19 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { D0, D5 } -#define MATRIX_COL_PINS { F1, F0, B0 } + +#ifdef MATRIX_EXTENDED + // Note that the extended colums are reversed because the second PCB has col 1 on the far right. + #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } + #define MATRIX_COL_PINS { C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3, E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7} +#else #ifdef MATRIX_LEFT + #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } + #define MATRIX_COL_PINS { C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3 } + + + #define MATRIX_COL_PINS { B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1 } +#endif + #define UNUSED_PINS /* COL2ROW or ROW2COL */ diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index f4671a9d11..43fee26686 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -2,7 +2,7 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) diff --git a/keyboards/vision_division/vision_division.h b/keyboards/vision_division/vision_division.h index d30fc84998..deeb85c1fb 100644 --- a/keyboards/vision_division/vision_division.h +++ b/keyboards/vision_division/vision_division.h @@ -7,13 +7,114 @@ // The following is an example using the Planck MIT layout // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - k00, k01, k02, \ - k10, k11 \ +#define KEYMAP_EXTENDED( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +{ \ + { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C },\ + { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C },\ + { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C },\ + { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C },\ + { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C },\ + { k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C },\ +} + +#define KEYMAP_LEFT( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +{ \ + { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C },\ + { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C },\ + { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C },\ + { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C },\ + { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C },\ + { k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C },\ +} + +#define KEYMAP_RIGHT( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ ) \ { \ - { k00, k01, k02 }, \ - { k10, KC_NO, k11 }, \ + { k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C },\ + { k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C },\ + { k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C },\ + { k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C },\ + { k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C },\ + { k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C },\ } +#ifdef MATRIX_EXTENDED +#define KEYMAP( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +KEYMAP_EXTENDED( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) +#endif + +#ifdef MATRIX_LEFT +#define KEYMAP( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +KEYMAP_LEFT( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) +#endif + +#ifdef MATRIX_RIGHT +#define KEYMAP( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +KEYMAP_RIGHT( \ + k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ + k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ + k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ + k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ + k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ + k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) + +#endif + + #endif -- cgit v1.2.3 From dd378601608849679ead6e2cccb74f7f29c131dc Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Wed, 27 Jul 2016 08:43:02 -0700 Subject: Add one-hand support. This adds an action, `ACTION_SWAP_HANDS`, that swaps the the keys on the keyboard across a keymap-defined hemisphere in order to support one-hand typing without requiring a separate one-handed layer. See updated `doc/keymap.md` for more information. --- doc/keymap.md | 18 ++++++++++++++++++ tmk_core/common.mk | 4 ++++ tmk_core/common/action.c | 33 +++++++++++++++++++++++++++++++++ tmk_core/common/action.h | 18 ++++++++++++++++++ tmk_core/common/action_code.h | 8 +++++++- 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/doc/keymap.md b/doc/keymap.md index d1985e567c..1285ad6cd1 100644 --- a/doc/keymap.md +++ b/doc/keymap.md @@ -455,6 +455,24 @@ Turn the backlight on and off without changing level. +### 2.6 Swap-Hands Action +The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command is executed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd` + +The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck: + +``` +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, + {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, + {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, + {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, +}; +``` + +Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return {7, 2} (third row, eighth column). + + + ## 3. Layer switching Example There are some ways to switch layer with 'Layer' actions. diff --git a/tmk_core/common.mk b/tmk_core/common.mk index aa05b9491d..429c571435 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -85,6 +85,10 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) OPT_DEFS += -DBLUETOOTH_ENABLE endif +ifeq ($(strip $(ONEHAND_ENABLE)), yes) + OPT_DEFS += -DONEHAND_ENABLE +endif + ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) OPT_DEFS += -DKEYMAP_SECTION_ENABLE diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index be6dea2b79..0413b1a997 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -41,6 +41,12 @@ void action_exec(keyevent_t event) dprint("EVENT: "); debug_event(event); dprintln(); } +#ifdef ONEHAND_ENABLE + if (!IS_NOEVENT(event)) { + process_hand_swap(&event); + } +#endif + keyrecord_t record = { .event = event }; #ifndef NO_ACTION_TAPPING @@ -53,6 +59,26 @@ void action_exec(keyevent_t event) #endif } +#ifdef ONEHAND_ENABLE +bool swap_hands = false; + +void process_hand_swap(keyevent_t *event) { + static swap_state_row_t swap_state[MATRIX_ROWS]; + + keypos_t pos = event->key; + swap_state_row_t col_bit = (swap_state_row_t)1<pressed ? swap_hands : + swap_state[pos.row] & (col_bit); + + if (do_swap) { + event->key = hand_swap_config[pos.row][pos.col]; + swap_state[pos.row] |= col_bit; + } else { + swap_state[pos.row] &= ~(col_bit); + } +} +#endif + #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) bool disable_action_cache = false; @@ -439,6 +465,13 @@ void process_action(keyrecord_t *record, action_t action) break; #endif case ACT_COMMAND: + switch (action.command.id) { +#ifdef ONEHAND_ENABLE + case CMD_SWAP_HANDS: + swap_hands = event.pressed; + break; +#endif + } break; #ifndef NO_ACTION_FUNCTION case ACT_FUNCTION: diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index e8aa12a7cb..b9bdfe642c 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -65,6 +65,24 @@ bool process_record_quantum(keyrecord_t *record); #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) extern bool disable_action_cache; #endif + +/* Code for handling one-handed key modifiers. */ +#ifdef ONEHAND_ENABLE +extern bool swap_hands; +extern const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS]; +#if (MATRIX_COLS <= 8) +typedef uint8_t swap_state_row_t; +#elif (MATRIX_COLS <= 16) +typedef uint16_t swap_state_row_t; +#elif (MATRIX_COLS <= 32) +typedef uint32_t swap_state_row_t; +#else +#error "MATRIX_COLS: invalid value" +#endif + +void process_hand_swap(keyevent_t *record); +#endif + void process_record_nocache(keyrecord_t *record); void process_record(keyrecord_t *record); void process_action(keyrecord_t *record, action_t action); diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index ca729aaece..95d2cbf3e4 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -295,6 +295,10 @@ enum backlight_opt { BACKLIGHT_STEP = 3, BACKLIGHT_LEVEL = 4, }; + +enum command_id { + CMD_SWAP_HANDS = 0x14, +}; /* Macro */ #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) @@ -306,7 +310,7 @@ enum backlight_opt { #define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8) #define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level)) /* Command */ -#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) +#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (id)) /* Function */ enum function_opts { FUNC_TAP = 0x8, /* indciates function is tappable */ @@ -314,5 +318,7 @@ enum function_opts { #define ACTION_FUNCTION(id) ACTION(ACT_FUNCTION, (id)) #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id)) #define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | (id)) +/* OneHand Support */ +#define ACTION_SWAP_HANDS() ACTION_COMMAND(CMD_SWAP_HANDS, 0) #endif /* ACTION_CODE_H */ -- cgit v1.2.3 From 8090f6b499fd87ddeb7a191f7bc3dace9d03be23 Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Thu, 28 Jul 2016 01:24:06 -0700 Subject: Improve one-hand support by adding more actions and tap keys. --- doc/keymap.md | 13 +++++++++- tmk_core/common/action.c | 57 ++++++++++++++++++++++++++++++++++++++++--- tmk_core/common/action_code.h | 28 ++++++++++++++++++--- 3 files changed, 89 insertions(+), 9 deletions(-) diff --git a/doc/keymap.md b/doc/keymap.md index 1285ad6cd1..6f2a663fc8 100644 --- a/doc/keymap.md +++ b/doc/keymap.md @@ -456,8 +456,9 @@ Turn the backlight on and off without changing level. ### 2.6 Swap-Hands Action -The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command is executed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd` +The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command key is pressed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd` +### 2.6.1 Configuration The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck: ``` @@ -471,6 +472,16 @@ const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return {7, 2} (third row, eighth column). +### 2.6.2 Advanced Swap Commands +- **`ACTION_SWAP_HANDS()`** Swaps hands when pressed, returns to normal when released (momentary). +- **`ACTION_SWAP_HANDS_TOGGLE()`** Toggles swap on and off with every keypress. +- **`ACTION_SWAP_HANDS_TAP_TOGGLE()`** Toggles with a tap; momentary when held. +- **`ACTION_SWAP_HANDS_TAP_KEY(key)`** Sends `key` with a tap; momentary swap when held. +- **`ACTION_SWAP_HANDS_ON_OFF()`** Alias for `ACTION_SWAP_HANDS()` +- **`ACTION_SWAP_HANDS_OFF_ON()`** Momentarily turns off swap. +- **`ACTION_SWAP_HANDS_ON()`** Turns on swapping and leaves it on. +- **`ACTION_SWAP_HANDS_OFF()`** Turn off swapping and leaves it off. Good for returning to a known state. + ## 3. Layer switching Example diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 0413b1a997..08ef22eb97 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -465,14 +465,55 @@ void process_action(keyrecord_t *record, action_t action) break; #endif case ACT_COMMAND: - switch (action.command.id) { + break; #ifdef ONEHAND_ENABLE - case CMD_SWAP_HANDS: + case ACT_SWAP_HANDS: + switch (action.swap.code) { + case OP_SH_TOGGLE: + if (event.pressed) { + swap_hands = !swap_hands; + } + break; + case OP_SH_ON_OFF: swap_hands = event.pressed; break; -#endif + case OP_SH_OFF_ON: + swap_hands = !event.pressed; + break; + case OP_SH_ON: + if (!event.pressed) { + swap_hands = true; + } + break; + case OP_SH_OFF: + if (!event.pressed) { + swap_hands = false; + } + break; + #ifndef NO_ACTION_TAPPING + case OP_SH_TAP_TOGGLE: + /* tap toggle */ + if (tap_count > 0) { + if (!event.pressed) { + swap_hands = !swap_hands; + } + } else { + swap_hands = event.pressed; + } + break; + default: + if (tap_count > 0) { + if (event.pressed) { + register_code(action.swap.code); + } else { + unregister_code(action.swap.code); + } + } else { + swap_hands = event.pressed; + } + #endif } - break; +#endif #ifndef NO_ACTION_FUNCTION case ACT_FUNCTION: action_function(record, action.func.id, action.func.opt); @@ -685,6 +726,13 @@ bool is_tap_key(keypos_t key) return true; } return false; + case ACT_SWAP_HANDS: + switch (action.swap.code) { + case 0x00 ... 0xdf: + case OP_SH_TAP_TOGGLE: + return true; + } + return false; case ACT_MACRO: case ACT_FUNCTION: if (action.func.opt & FUNC_TAP) { return true; } @@ -725,6 +773,7 @@ void debug_action(action_t action) case ACT_MACRO: dprint("ACT_MACRO"); break; case ACT_COMMAND: dprint("ACT_COMMAND"); break; case ACT_FUNCTION: dprint("ACT_FUNCTION"); break; + case ACT_SWAP_HANDS: dprint("ACT_SWAP_HANDS"); break; default: dprint("UNKNOWN"); break; } dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff); diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index 95d2cbf3e4..33da35f35f 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -108,6 +108,8 @@ enum action_kind_id { /* Other Keys */ ACT_USAGE = 0b0100, ACT_MOUSEKEY = 0b0101, + /* One-hand Support */ + ACT_SWAP_HANDS = 0b0110, /* Layer Actions */ ACT_LAYER = 0b1000, ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */ @@ -178,6 +180,11 @@ typedef union { uint8_t opt :4; uint8_t kind :4; } func; + struct action_swap { + uint8_t code :8; + uint8_t opt :4; + uint8_t kind :4; + } swap; } action_t; @@ -296,9 +303,6 @@ enum backlight_opt { BACKLIGHT_LEVEL = 4, }; -enum command_id { - CMD_SWAP_HANDS = 0x14, -}; /* Macro */ #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) @@ -319,6 +323,22 @@ enum function_opts { #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id)) #define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | (id)) /* OneHand Support */ -#define ACTION_SWAP_HANDS() ACTION_COMMAND(CMD_SWAP_HANDS, 0) +enum swap_hands_pram_tap_op { + OP_SH_TOGGLE = 0xF0, + OP_SH_TAP_TOGGLE, + OP_SH_ON_OFF, + OP_SH_OFF_ON, + OP_SH_OFF, + OP_SH_ON, +}; + +#define ACTION_SWAP_HANDS() ACTION_SWAP_HANDS_ON_OFF() +#define ACTION_SWAP_HANDS_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE) +#define ACTION_SWAP_HANDS_TAP_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE) +#define ACTION_SWAP_HANDS_TAP_KEY(key) ACTION(ACT_SWAP_HANDS, key) +#define ACTION_SWAP_HANDS_ON_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF) +#define ACTION_SWAP_HANDS_OFF_ON() ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON) +#define ACTION_SWAP_HANDS_ON() ACTION(ACT_SWAP_HANDS, OP_SH_ON) +#define ACTION_SWAP_HANDS_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_OFF) #endif /* ACTION_CODE_H */ -- cgit v1.2.3 From 66adbfcab5c197f01ead2c07a79b25d2f2b93b1a Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Thu, 28 Jul 2016 01:25:29 -0700 Subject: Add default swap configs for a couple of boards. --- keyboards/ergodox/infinity/infinity.c | 24 ++++++++++++++++++++++++ keyboards/planck/planck.c | 10 ++++++++++ keyboards/preonic/preonic.c | 11 +++++++++++ 3 files changed, 45 insertions(+) diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c index f89e046d0d..c5793385fe 100644 --- a/keyboards/ergodox/infinity/infinity.c +++ b/keyboards/ergodox/infinity/infinity.c @@ -130,3 +130,27 @@ void ergodox_right_led_3_off(void){ void ergodox_right_led_off(uint8_t led){ } + +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}}, + {{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}}, + {{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}}, + {{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}}, + {{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}}, + {{0, 14}, {1, 14}, {2, 14}, {3, 14}, {4, 14}}, + {{0, 15}, {1, 15}, {2, 15}, {3, 15}, {4, 15}}, + {{0, 16}, {1, 16}, {2, 16}, {3, 16}, {4, 16}}, + {{0, 17}, {1, 17}, {2, 17}, {3, 17}, {4, 17}}, + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}}, + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}}, + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}}, + {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}}, +}; +#endif diff --git a/keyboards/planck/planck.c b/keyboards/planck/planck.c index 8d70bb4e5a..645b450d1d 100644 --- a/keyboards/planck/planck.c +++ b/keyboards/planck/planck.c @@ -1,5 +1,15 @@ #include "planck.h" +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, + {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, + {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, + {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, +}; +#endif + void matrix_init_kb(void) { // Turn status LED on DDRE |= (1<<6); diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c index 889c3fc8fd..d9c119b8da 100644 --- a/keyboards/preonic/preonic.c +++ b/keyboards/preonic/preonic.c @@ -1,5 +1,16 @@ #include "preonic.h" +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, + {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, + {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, + {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, + {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}}, +}; +#endif + void matrix_init_kb(void) { // Turn status LED on -- cgit v1.2.3 From c20bf83afd698a4535fa1b8df901f6ab1e3cb532 Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Sat, 20 Aug 2016 18:32:13 -0700 Subject: Add one-hand key to planck/experimental keymap. --- keyboards/planck/keymaps/experimental/Makefile | 1 + keyboards/planck/keymaps/experimental/keymap.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/experimental/Makefile b/keyboards/planck/keymaps/experimental/Makefile index 877c4aed0e..3a8250a9b5 100644 --- a/keyboards/planck/keymaps/experimental/Makefile +++ b/keyboards/planck/keymaps/experimental/Makefile @@ -16,6 +16,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +ONEHAND_ENABLE = yes # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c index 2c12700944..569dbcc8aa 100644 --- a/keyboards/planck/keymaps/experimental/keymap.c +++ b/keyboards/planck/keymaps/experimental/keymap.c @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak @@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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 }, - {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -186,7 +186,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; const uint16_t PROGMEM fn_actions[] = { - + ACTION_SWAP_HANDS_TAP_KEY(KC_SPC), }; #ifdef AUDIO_ENABLE -- cgit v1.2.3 From 1c69acb7d518893ee77e326342d4603da87470e5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Aug 2016 13:10:34 +0300 Subject: Add longest match to the rule-checking This fixes cases where you have several keyboards with a common prefix, like algernon, and algernon-master --- Makefile | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index d70ac9a3b8..c8122e5765 100644 --- a/Makefile +++ b/Makefile @@ -152,13 +152,52 @@ COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER # $1 The list to be checked # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched -define TRY_TO_MATCH_RULE_FROM_LIST_HELPER +define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3 ifneq ($1,) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) MATCHED_ITEM := $$(firstword $1) else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$$(wordlist 2,9999,$1))) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1))) + endif + endif +endef + +# A recursive helper function for finding the longest match +# $1 The list to be checed +# It works by always removing the currently matched item from the list +# and call itself recursively, until a match is found +define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2 + # Stop the recursion when the list is empty + ifneq ($1,) + RULE_BEFORE := $$(RULE) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1)) + # If a match is found in the current list, otherwise just return what we had before + ifeq ($$(RULE_FOUND),true) + # Save the best match so far and call itself recursivel + BEST_MATCH := $$(MATCHED_ITEM) + BEST_MATCH_RULE := $$(RULE) + RULE_FOUND := false + RULE := $$(RULE_BEFORE) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1))) endif + endif +endef + + +# Recursively try to find the longest match for the start of the rule to be checked +# $1 The list to be checked +# If a match is found, then RULE_FOUND is set to true +# and MATCHED_ITEM to the item that was matched +define TRY_TO_MATCH_RULE_FROM_LIST_HELPER + BEST_MATCH := + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1)) + ifneq ($$(BEST_MATCH),) + RULE_FOUND := true + RULE := $$(BEST_MATCH_RULE) + MATCHED_ITEM := $$(BEST_MATCH) + else + RULE_FOUND := false + MATCHED_ITEM := endif endef -- cgit v1.2.3 From 8f16403179dde51af1826fbc9b65ce0e29fd33ad Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Aug 2016 13:53:36 +0300 Subject: Change order of variable assignment BUILD_DIR and TARGET was assigned too late, so the dfu-util target, which depends on them did not work. --- build_keyboard.mk | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index e8d8f3572b..a2a2871e6e 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -16,6 +16,19 @@ LIB_PATH = $(TOP_DIR)/lib QUANTUM_DIR = quantum QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) +BUILD_DIR := $(TOP_DIR)/.build + +ifneq ($(SUBPROJECT),) + TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) + KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT) +else + TARGET ?= $(KEYBOARD)_$(KEYMAP) + KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) +endif + +# Force expansion +TARGET := $(TARGET) + MASTER ?= left ifdef master @@ -93,15 +106,6 @@ else $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) endif -BUILD_DIR = $(TOP_DIR)/.build - -ifneq ($(SUBPROJECT),) - TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) - KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT) -else - TARGET ?= $(KEYBOARD)_$(KEYMAP) - KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) -endif # Object files directory # To put object files in current directory, use a dot (.), do NOT make -- cgit v1.2.3 From dffdeb50b79d3c623e2ed9fd1c1d82d6d0ae7bf0 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 21 Aug 2016 20:25:19 +0200 Subject: Add method to set Unicode input key for ISO 14755 https://github.com/jackhumbert/qmk_firmware/issues/672 --- quantum/process_keycode/process_unicode.c | 10 ++++++++-- quantum/process_keycode/process_unicode.h | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 72c809c30e..422217b6d1 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -1,6 +1,7 @@ #include "process_unicode.h" static uint8_t input_mode; +static uint16_t linux_key = UNICODE_LNX_KEY; uint16_t hex_to_keycode(uint8_t hex) { @@ -18,6 +19,11 @@ void set_unicode_input_mode(uint8_t os_target) input_mode = os_target; } +void set_unicode_input_key_lnx(uint16_t key) +{ + linux_key = key; +} + void unicode_input_start (void) { switch(input_mode) { case UC_OSX: @@ -26,8 +32,8 @@ void unicode_input_start (void) { case UC_LNX: register_code(KC_LCTL); register_code(KC_LSFT); - register_code(KC_U); - unregister_code(KC_U); + register_code(linux_key); + unregister_code(linux_key); unregister_code(KC_LSFT); unregister_code(KC_LCTL); break; diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 85364e8eb3..60a116ab74 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -8,11 +8,16 @@ #define UC_WIN 2 #define UC_BSD 3 +#ifndef UNICODE_LNX_KEY +#define UNICODE_LNX_KEY KC_A +#endif + #ifndef UNICODE_TYPE_DELAY #define UNICODE_TYPE_DELAY 10 #endif void set_unicode_input_mode(uint8_t os_target); +void set_unicode_input_key_lnx(uint16_t linux_key); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); -- cgit v1.2.3 From 81594c7883deefedbcd317c72c1b1f1d32e65cd7 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 21 Aug 2016 21:02:18 +0200 Subject: =?UTF-8?q?Drop=20method=20to=20set=20Unicode=20input=20key=20and?= =?UTF-8?q?=20declare=20start=20and=20finish=20methods=20as=20=E2=80=9Cwea?= =?UTF-8?q?k=E2=80=9D=20instead?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quantum/process_keycode/process_unicode.c | 12 ++++-------- quantum/process_keycode/process_unicode.h | 5 ----- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 422217b6d1..a1be8d2fc3 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -1,7 +1,6 @@ #include "process_unicode.h" static uint8_t input_mode; -static uint16_t linux_key = UNICODE_LNX_KEY; uint16_t hex_to_keycode(uint8_t hex) { @@ -19,11 +18,7 @@ void set_unicode_input_mode(uint8_t os_target) input_mode = os_target; } -void set_unicode_input_key_lnx(uint16_t key) -{ - linux_key = key; -} - +__attribute__((weak)) void unicode_input_start (void) { switch(input_mode) { case UC_OSX: @@ -32,8 +27,8 @@ void unicode_input_start (void) { case UC_LNX: register_code(KC_LCTL); register_code(KC_LSFT); - register_code(linux_key); - unregister_code(linux_key); + register_code(KC_U); + unregister_code(KC_U); unregister_code(KC_LSFT); unregister_code(KC_LCTL); break; @@ -46,6 +41,7 @@ void unicode_input_start (void) { wait_ms(UNICODE_TYPE_DELAY); } +__attribute__((weak)) void unicode_input_finish (void) { switch(input_mode) { case UC_OSX: diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 60a116ab74..85364e8eb3 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -8,16 +8,11 @@ #define UC_WIN 2 #define UC_BSD 3 -#ifndef UNICODE_LNX_KEY -#define UNICODE_LNX_KEY KC_A -#endif - #ifndef UNICODE_TYPE_DELAY #define UNICODE_TYPE_DELAY 10 #endif void set_unicode_input_mode(uint8_t os_target); -void set_unicode_input_key_lnx(uint16_t linux_key); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); -- cgit v1.2.3 From 30de8663a9fbf5b751bd68598479256c956f7eae Mon Sep 17 00:00:00 2001 From: Kyle Berry Date: Sun, 21 Aug 2016 14:01:43 -0700 Subject: Fixing Dvorak Updating with proper Dvorak layout. --- keyboards/tv44/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c index 6a4fef3da2..f3f989f2d1 100644 --- a/keyboards/tv44/keymaps/default/keymap.c +++ b/keyboards/tv44/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } }, [_DV] = { /* Dvorak */ - {KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, + {KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC }, {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } -- cgit v1.2.3 From d7b6d74842cb8c0406996e1a890c40c23b063bb6 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 21 Aug 2016 23:20:24 +0200 Subject: - Inverted key Tab and Esc - Reorganised bottom row --- keyboards/planck/keymaps/dbroqua/keymap.c | 24 ++++++++++++------------ keyboards/planck/keymaps/dbroqua/layout.png | Bin 20479 -> 21724 bytes 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index 3d89ff1d34..e02d98f6ae 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -17,7 +17,7 @@ extern keymap_config_t keymap_config; #define _QWERTY 0 #define _LOWER 1 #define _RAISE 2 -#define _ESC 3 +#define _MULTIMEDIA 3 #define _ADJUST 4 enum planck_keycodes { @@ -32,31 +32,31 @@ enum planck_keycodes { #define XXXXXXX KC_NO // Func macro definitions. -#define SFT_ESC FUNC(0) // Tap for Enter, hold for Shift +#define SFT_TAB FUNC(0) // Tap for Enter, hold for Shift // Enable these functions using FUNC(n) macro. const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(_ESC, KC_ESC) + [0] = ACTION_LAYER_TAP_KEY(_MULTIMEDIA, KC_TAB) }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Lower| Raise| Alt | Space |AltGr | Left | Down | Up |Right | + * | Ctrl | GUI | AltGr| Alt | Lower| Space | Raise| Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {SFT_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {KC_LCTL, KC_LGUI, LOWER, RAISE, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {SFT_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_LCTL, KC_LGUI, KC_RALT, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, /* Lower @@ -95,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -/* Esc +/* _MULTIMEDIA * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Prev | Play | Next | Del | * `-----------------------------------------------------------------------------------' */ -[_ESC] = { +[_MULTIMEDIA] = { {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_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png index 0deafefe27..846a385f0a 100644 Binary files a/keyboards/planck/keymaps/dbroqua/layout.png and b/keyboards/planck/keymaps/dbroqua/layout.png differ -- cgit v1.2.3 From 364b77563c5056eae8177aeac169dae87cb06228 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Sun, 21 Aug 2016 18:59:10 -0700 Subject: Added missing key K3A to KEYMAP() macro in tv44.h --- keyboards/tv44/tv44.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h index 4c30174acc..65c0b45939 100644 --- a/keyboards/tv44/tv44.h +++ b/keyboards/tv44/tv44.h @@ -11,7 +11,7 @@ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ - K30, K31, K32, K33, K37, K38, K39, K3B \ + K30, K31, K32, K33, K37, K38, K39, K3A, K3B \ ) \ { \ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \ -- cgit v1.2.3 From 705c775a4a433249081321cea0c2def2627817dc Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sun, 21 Aug 2016 22:05:55 -0500 Subject: Nightly Only major change to qmk was the addition of A0-A7 pins for the AT90USB --- keyboards/vision_division/Potential Layouts.txt | 84 +++++++++++ keyboards/vision_division/config.h | 44 +----- keyboards/vision_division/keymaps/default/config.h | 36 ++++- keyboards/vision_division/keymaps/default/keymap.c | 28 +++- keyboards/vision_division/matrix_types.h | 167 +++++++++++++++++++++ keyboards/vision_division/vision_division.h | 114 -------------- quantum/config_common.h | 9 ++ 7 files changed, 321 insertions(+), 161 deletions(-) create mode 100644 keyboards/vision_division/Potential Layouts.txt create mode 100644 keyboards/vision_division/matrix_types.h diff --git a/keyboards/vision_division/Potential Layouts.txt b/keyboards/vision_division/Potential Layouts.txt new file mode 100644 index 0000000000..f715ac8c65 --- /dev/null +++ b/keyboards/vision_division/Potential Layouts.txt @@ -0,0 +1,84 @@ +/* Numeric Max / Numeric Normal - Full Grid + * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .-----------------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | | | | | o | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + */ + +//* Numeric Max / Homing Normal - Full Grid + * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .--------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' + * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| + * | | | | | o | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' + */ + +//* Numeric Max / Homing Normal - Traditional + * .-----------------------------------. .-----------------------------------. .-----------------_-----------------. .-----------------------------------. .--------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------' '-----------------------------------' '-----------------------------------' '--------------------------' + * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| + * | | | | | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+ | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| '--------+--------+--------' + * | | | | | o | | | | | | | | | | | | | | | + * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| .--------. + * | | | | | | | | | | | | | | | | | | | | + * |--------+--------+--------+ | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| .--------+--------+--------. + * | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' + */ + +/* Numeric Max / Numeric Normal + * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .-----------------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + * | | | | | | 1U / 2U | | | | | | | | | | | 1U / 2U | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | 1U | | | 1U | | | | | | | | | | | | | | | | | 1U | | | 1U | + * | / +--------+--------+ / | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | / +--------+--------+ / | + * | 2U | | | 2U | o | 1U / 2U | | | | | | | | | | | | | 2U | | | 2U | + * |--------+--------+--------+--------| o |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| |--------+--------+--------+--------| + * | | | | | | 1U / 2U | | | | | | | | | | | 1U / 2U | | | | | | + * | '--------+--------' | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | '--------+--------' | + * | 1U / 2UH / 2UV | 1U / 2UH / 2UV | | | | | | | | 1U / 2U | | | | | | | | 1U / 2UH / 2UV | 1U / 2UH / 2UV | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + */ + +/* Numeric Max / Numeric Max + * .-----------------------------------. .-----------------------------------------------------------------------_-----------------------------------------------------------------------. .-----------------------------------. + * | | | | | | | | | | | | | | | | | | | | | | | | | | | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + * | | | | | | 1U / 2U | | | | | | | | | | | | | 1U / 2U | | | | | | + * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------| + * | 1U | | | 1U | | | | | | | | | | | | | | | | | | | 1U | | | 1U | + * | / +--------+--------+ / | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | / +--------+--------+ / | + * | 2U | | | 2U | o | 1U / 2U | | | | | | | | | | | | | | | 2U | | | 2U | + * |--------+--------+--------+--------| o |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| |--------+--------+--------+--------| + * | | | | | | 1U / 2U | | | | | | | | | | | | | 1U / 2U | | | | | | + * | '--------+--------' | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | '--------+--------' | + * | 1U / 2UH / 2UV | 1U / 2UH / 2UV | | | | | | | | 1U / 2U | 1U / 2U | | | | | | | | 1U / 2UH / 2UV | 1U / 2UH / 2UV | + * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + */ diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index 1faea335ad..37b834973c 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -20,52 +20,12 @@ along with this program. If not, see . #include "config_common.h" -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x2525 -#define DEVICE_VER 0x0001 -#define MANUFACTURER You -#define PRODUCT Vision Division -#define DESCRIPTION Split or Full Keyboard -#define MATRIX_EXTENDED - -/* key matrix size */ -#ifdef MATRIX_EXTENDED - #define MATRIX_ROWS 6 - #define MATRIX_COLS 24 -#else - #define MATRIX_ROWS 6 - #define MATRIX_COLS 12 -#endif - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ +// Due to the configurability of this keyboard, matrix sizes are determined in the keymap's config.h -#ifdef MATRIX_EXTENDED - // Note that the extended colums are reversed because the second PCB has col 1 on the far right. - #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } - #define MATRIX_COL_PINS { C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3, E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7} -#else #ifdef MATRIX_LEFT - #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } - #define MATRIX_COL_PINS { C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3 } - - - #define MATRIX_COL_PINS { B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1 } -#endif - -#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW - + // #define BACKLIGHT_PIN B7 // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h index df06a26206..c005aa8c5a 100644 --- a/keyboards/vision_division/keymaps/default/config.h +++ b/keyboards/vision_division/keymaps/default/config.h @@ -2,7 +2,41 @@ #define CONFIG_USER_H #include "../../config.h" +#include "matrix_types.h" -// place overrides here + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID GET_PID(NUMERIC_MAX_TEENSY, NUMERIC_MAX) +#define DEVICE_VER 0x0001 +#define MANUFACTURER IBNobody +#define PRODUCT Vision Division +#define DESCRIPTION Full / Split Keyboard + + +#define MATRIX_ROWS 6 +#define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } + +#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_MAX_TEENSY, NUMERIC_MAX) +#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_MAX_TEENSY, NUMERIC_MAX) + +#define UNUSED_PINS + +#define KEYMAP( \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) \ +KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) \ #endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 599c2cb522..3fddee78b7 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -1,10 +1,30 @@ #include "vision_division.h" + + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( /* Base */ - KC_A, KC_1, KC_H, \ - KC_TAB, KC_SPC \ -), + + [0] = KEYMAP( \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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_VOLU, KC_MUTE, KC_VOLU, KC_F24, KC_F20, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 k119, k11A, k11B, k11C, \ + KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, k219, k21A, k21B, k21C, \ + KC_KP_7, KC_KP_8, KC_KP_9, KC_F23, KC_F19, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, k319, k31A, k31B, k31C, \ + KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_F18, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, k419, k41A, k41B, k41C, \ + KC_KP_1, KC_KP_2, KC_KP_3, KC_F22, KC_F17, 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_RSFT, KC_UP, KC_PGDN, k519, k51A, k51B, k51C. \ + KC_KP_0, KC_F21, KC_PDOT, KC_PENT, KC_F16, KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, k619, k61A, k61B, k61C \ + + ) //-----, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, + +*/ }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/vision_division/matrix_types.h b/keyboards/vision_division/matrix_types.h new file mode 100644 index 0000000000..d40b2079a6 --- /dev/null +++ b/keyboards/vision_division/matrix_types.h @@ -0,0 +1,167 @@ +#ifndef MATRIX_TYPES_H +#define MATRIX_TYPES_H + +// Because the vision/division keyboard allows for multiple PCB configurations, the configuration +// can get tricky. The PCB itself has 12 columns, but to achieve a full sized 14-column keyboard +// with a 4-column numeric pad on the left and a 3-column homing key cluster on the right, the +// right PCB must have its rightmost column cut off. Also either the rightmost two columns on the +// left PCB or the leftmost two columns on the right PCB need to be cut away. +// +// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +// Left Numeric Max = 1 2 3 4 _ 5 6 7 8 9 0 A B C +// Left Homing Max = 2 3 4 _ 5 6 7 8 9 0 A B C +// Left Numeric Extended = 1 2 3 4 _ 5 6 7 8 9 0 A B +// Left Homing Extended = 2 3 4 _ 5 6 7 8 9 0 A B +// Left Numeric Normal = 1 2 3 4 _ 5 6 7 8 9 0 A +// Left Homing Normal = 2 3 4 _ 5 6 7 8 9 0 A +// Right Numeric Max = 1 2 3 4 5 6 7 8 _ 9 A B C +// Right Homing Max = 1 2 3 4 5 6 7 8 _ 9 A B +// Right Numeric Extended = 2 3 4 5 6 7 8 _ 9 A B C +// Right Homing Extended = 2 3 4 5 6 7 8 _ 9 A B +// Right Numeric Normal = 3 4 5 6 7 8 _ 9 A B C +// Right Homing Normal = 3 4 5 6 7 8 _ 9 A B +// +// +// A full keyboard would look like this: +// +// _Left_Numeric_Max__________|_Right_Homing_Normal +// 1 2 3 4 _ 5 6 7 8 9 0 A B C|3 4 5 6 7 8 _ 9 A B +// +// The ideal full keyboard would use a normal and max rather than two extended because the max +// size allows for a centered 2U space key. + + +#define MATRIX_TYPE_ABSENT 0 +#define MATRIX_TYPE_NUMERIC_MAX 1 +#define MATRIX_TYPE_HOMING_MAX 2 +#define MATRIX_TYPE_NUMERIC_EXTENDED 3 +#define MATRIX_TYPE_HOMING_EXTENDED 4 +#define MATRIX_TYPE_NUMERIC_NORMAL 5 +#define MATRIX_TYPE_HOMING_NORMAL 6 +#define MATRIX_TYPE_NUMERIC_MAX_TEENSY 7 +#define MATRIX_TYPE_HOMING_MAX_TEENSY 8 +#define MATRIX_TYPE_NUMERIC_EXTENDED_TEENSY 9 +#define MATRIX_TYPE_HOMING_EXTENDED_TEENSY 10 +#define MATRIX_TYPE_NUMERIC_NORMAL_TEENSY 11 +#define MATRIX_TYPE_HOMING_NORMAL_TEENSY 12 + + +// Column Length + +#define MATRIX_COLS_ABSENT 0 +#define MATRIX_COLS_NUMERIC_MAX 12 +#define MATRIX_COLS_HOMING_MAX 11 +#define MATRIX_COLS_NUMERIC_EXTENDED 11 +#define MATRIX_COLS_HOMING_EXTENDED 10 +#define MATRIX_COLS_NUMERIC_NORMAL 10 +#define MATRIX_COLS_HOMING_NORMAL 9 +#define MATRIX_COLS_NUMERIC_MAX_TEENSY 12 +#define MATRIX_COLS_HOMING_MAX_TEENSY 11 +#define MATRIX_COLS_NUMERIC_EXTENDED_TEENSY 11 +#define MATRIX_COLS_HOMING_EXTENDED_TEENSY 10 +#define MATRIX_COLS_NUMERIC_NORMAL_TEENSY 10 +#define MATRIX_COLS_HOMING_NORMAL_TEENSY 9 + +// Left PCB Pin assignments + +#define MATRIX_COL_PINS_LEFT_ABSENT + +#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6 +#define MATRIX_COL_PINS_LEFT_HOMING_MAX C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6 +#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4 +#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED C5, C4, A7, A3, A6, A2, A5, A1, A0, A4 +#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL C7, C5, C4, A7, A3, A6, A2, A5, A1, A0 +#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL C5, C4, A7, A3, A6, A2, A5, A1, A0 + +#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3 +#define MATRIX_COL_PINS_LEFT_HOMING_MAX_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3 +#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2 +#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1, B2 +#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1 +#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1 + +// Right PCB Pin assignments + +#define MATRIX_COL_PINS_RIGHT_ABSENT + +#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7 +#define MATRIX_COL_PINS_RIGHT_HOMING_MAX E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5 +#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7 +#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED A4, A0, A1, A5, A2, A6, A3, A7, C4, C5 +#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL A0, A1, A5, A2, A6, A3, A7, C4, C5, C7 +#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL A0, A1, A5, A2, A6, A3, A7, C4, C5 + +#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX_TEENSY B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1 +#define MATRIX_COL_PINS_RIGHT_HOMING_MAX_TEENSY B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0 +#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED_TEENSY B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1 +#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED_TEENSY B2, B1, B0, F0, F1, F2, F3, E0, E1, C0 +#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL_TEENSY B1, B0, F0, F1, F2, F3, E0, E1, C0, C1 +#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL_TEENSY B1, B0, F0, F1, F2, F3, E0, E1, C0 + +// Fetch Macros + +#define GET_PID(LEFT_TYPE, RIGHT_TYPE) ( ( ( MATRIX_TYPE_ ## LEFT_TYPE ) << 8 ) + ( MATRIX_TYPE_ ## RIGHT_TYPE ) ) +#define GET_MATRIX_COL(TYPE) MATRIX_COLS_ ## TYPE +#define GET_MATRIX_COLS(LEFT_TYPE, RIGHT_TYPE) ( ( GET_MATRIX_COL(LEFT_TYPE) ) + ( GET_MATRIX_COL(RIGHT_TYPE) ) ) +#define GET_MATRIX_COL_PINS(LEFT_TYPE, RIGHT_TYPE) { MATRIX_COL_PINS_LEFT_ ## LEFT_TYPE, MATRIX_COL_PINS_RIGHT_ ## RIGHT_TYPE } + +// Specialized Row Macros + +#define KEYMAP_ROW_LEFT_ABSENT( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) + +#define KEYMAP_ROW_LEFT_NUMERIC_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_LEFT_HOMING_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_LEFT_HOMING_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A +#define KEYMAP_ROW_LEFT_HOMING_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A +#define KEYMAP_ROW_LEFT_NUMERIC_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_LEFT_HOMING_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_LEFT_HOMING_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A +#define KEYMAP_ROW_LEFT_HOMING_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A + +#define KEYMAP_ROW_RIGHT_ABSENT( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) + +#define KEYMAP_ROW_RIGHT_NUMERIC_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_RIGHT_NUMERIC_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B +#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C +#define KEYMAP_ROW_RIGHT_HOMING_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B + +// Changable Row Macro + +#define KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, \ + k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ +) \ +KEYMAP_ROW_LEFT_ ## LEFT_TYPE(k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C), KEYMAP_ROW_RIGHT_ ## RIGHT_TYPE(k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C) + +// Changable Master Macro + +#define KEYMAP_MASTER(LEFT_TYPE, RIGHT_TYPE, \ + k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ +) \ +{ \ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C ) },\ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C ) },\ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C ) },\ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C ) },\ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C ) },\ + { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C ) },\ +} + + +#endif // MATRIX_TYPES_H \ No newline at end of file diff --git a/keyboards/vision_division/vision_division.h b/keyboards/vision_division/vision_division.h index deeb85c1fb..a1f3195e9e 100644 --- a/keyboards/vision_division/vision_division.h +++ b/keyboards/vision_division/vision_division.h @@ -3,118 +3,4 @@ #include "quantum.h" -// This a shortcut to help you visually see your layout. -// The following is an example using the Planck MIT layout -// The first section contains all of the arguements -// The second converts the arguments into a two-dimensional array -#define KEYMAP_EXTENDED( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -{ \ - { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C },\ - { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C },\ - { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C },\ - { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C },\ - { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C },\ - { k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C },\ -} - -#define KEYMAP_LEFT( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -{ \ - { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C },\ - { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C },\ - { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C },\ - { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C },\ - { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C },\ - { k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C },\ -} - -#define KEYMAP_RIGHT( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -{ \ - { k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C },\ - { k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C },\ - { k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C },\ - { k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C },\ - { k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C },\ - { k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C },\ -} - -#ifdef MATRIX_EXTENDED -#define KEYMAP( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -KEYMAP_EXTENDED( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) -#endif - -#ifdef MATRIX_LEFT -#define KEYMAP( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -KEYMAP_LEFT( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) -#endif - -#ifdef MATRIX_RIGHT -#define KEYMAP( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) \ -KEYMAP_RIGHT( \ - k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \ - k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C \ - k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C \ - k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k310, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C \ - k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k410, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C \ - k500, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k510, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \ -) - -#endif - - #endif diff --git a/quantum/config_common.h b/quantum/config_common.h index 09a4fe7010..7ef4b23d48 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -45,6 +45,15 @@ #define F5 0xF5 #define F6 0xF6 #define F7 0xF7 +#define A0 0xA0 +#define A1 0xA1 +#define A2 0xA2 +#define A3 0xA3 +#define A4 0xA4 +#define A5 0xA5 +#define A6 0xA6 +#define A7 0xA7 + /* USART configuration */ #ifdef BLUETOOTH_ENABLE -- cgit v1.2.3 From 0418ecc073d420fff3be2603bfb7a6fa234bd357 Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Mon, 22 Aug 2016 10:26:18 -0600 Subject: Changes from review by @fredizzimo and @Xyverz --- keyboards/ergodox/readme.md | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 349a0ce40c..304f2b01f2 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,18 +1,3 @@ -# Keymap Options - -There are external tools for customizing the layout, but those do not use -the featurs of this qmk firmware. These sites include: - - - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez - - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files - -You can also find an existing firmware that you like, for example from: - - - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) - -This qmk firmware also provides the ability to customize keymaps, but requires -a toolchain to build the firmware. See below for instructions on building -firmware and customizing keymaps. # Customizing Keymaps @@ -94,8 +79,6 @@ To flash the firmware: The Infinity is two completely independent keyboards, and needs to be flashed for the left and right halves seperately. To flash them: - - Remove the build directory with `rm -rf ../../.build` - - Build the firmware with `make keymap=keymapname subproject=infinity` - Plug in the left hand keyboard only. @@ -104,8 +87,6 @@ for the left and right halves seperately. To flash them: - Install the firmware with `sudo make dfu-util keymap=keymapname subproject=infinity` - - Remove the left-hand build with `rm -rf ../../.build` - - Build left hand firmware with `make keymap=keymapname subproject=infinity MASTER=right` - Plug in the right hand keyboard only. @@ -133,3 +114,19 @@ Let's say you want a certain key in your layout to send a colon; to figure out w That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot). If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. + +# Other Firmware Options + +There are external tools for customizing the layout, but those do not use +the featurs of this qmk firmware. These sites include: + + - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez + - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files + +You can also find an existing firmware that you like, for example from: + + - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) + +This qmk firmware also provides the ability to customize keymaps, but requires +a toolchain to build the firmware. See below for instructions on building +firmware and customizing keymaps. -- cgit v1.2.3 From a26ee57eb8202e7da31049b1761ca74be5184414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Werner?= Date: Mon, 22 Aug 2016 20:34:29 +0200 Subject: Added support for the Kitten Paw controller This adds support for the 2016 revision of the Kitten Paw [1] replacement controller by Bathroom Epiphanies. [1] http://bathroomepiphanies.com/controllers/ --- keyboards/kitten_paw/Makefile | 77 ++++++++++++ keyboards/kitten_paw/config.h | 162 +++++++++++++++++++++++++ keyboards/kitten_paw/keymaps/default/keymap.c | 51 ++++++++ keyboards/kitten_paw/kitten_paw.c | 30 +++++ keyboards/kitten_paw/kitten_paw.h | 47 ++++++++ keyboards/kitten_paw/led.c | 47 ++++++++ keyboards/kitten_paw/matrix.c | 164 ++++++++++++++++++++++++++ keyboards/kitten_paw/readme.md | 32 +++++ keyboards/readme.md | 1 + 9 files changed, 611 insertions(+) create mode 100644 keyboards/kitten_paw/Makefile create mode 100644 keyboards/kitten_paw/config.h create mode 100644 keyboards/kitten_paw/keymaps/default/keymap.c create mode 100644 keyboards/kitten_paw/kitten_paw.c create mode 100644 keyboards/kitten_paw/kitten_paw.h create mode 100644 keyboards/kitten_paw/led.c create mode 100644 keyboards/kitten_paw/matrix.c create mode 100644 keyboards/kitten_paw/readme.md diff --git a/keyboards/kitten_paw/Makefile b/keyboards/kitten_paw/Makefile new file mode 100644 index 0000000000..9122921737 --- /dev/null +++ b/keyboards/kitten_paw/Makefile @@ -0,0 +1,77 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 + OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +CUSTOM_MATRIX = yes +SRC += matrix.c led.c + +ifndef QUANTUM_DIR + include ../../Makefile +endif + diff --git a/keyboards/kitten_paw/config.h b/keyboards/kitten_paw/config.h new file mode 100644 index 0000000000..d7089734aa --- /dev/null +++ b/keyboards/kitten_paw/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6050 +#define DEVICE_VER 0x0104 +#define MANUFACTURER Costar +#define PRODUCT Majestouch + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 18 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +//#define MATRIX_ROW_PINS { D0, D5 } +//#define MATRIX_COL_PINS { F1, F0, B0 } +//#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/kitten_paw/keymaps/default/keymap.c new file mode 100644 index 0000000000..f672357455 --- /dev/null +++ b/keyboards/kitten_paw/keymaps/default/keymap.c @@ -0,0 +1,51 @@ +#include "kitten_paw.h" + +enum layers { + DEFAULT, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [DEFAULT] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/kitten_paw/kitten_paw.c new file mode 100644 index 0000000000..8713baf433 --- /dev/null +++ b/keyboards/kitten_paw/kitten_paw.c @@ -0,0 +1,30 @@ +#include "kitten_paw.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_quantum(); + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_quantum(); + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/kitten_paw/kitten_paw.h b/keyboards/kitten_paw/kitten_paw.h new file mode 100644 index 0000000000..a6c1d27de7 --- /dev/null +++ b/keyboards/kitten_paw/kitten_paw.h @@ -0,0 +1,47 @@ +#ifndef KITTEN_PAW_H +#define KITTEN_PAW_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +/* + Matrix col/row mapping + + ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------. + | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 | + `----' `-------------------' `-------------------' `-------------------' `--------------' + ,-------------------------------------------------------------------------. ,--------------. ,-------------------. + | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 | + |-------------------------------------------------------------------------| |--------------| |-------------------| + | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 | + |-------------------------------------------------------------------------| '--------------' |-------------- | + | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | | + |-------------------------------------------------------------------------| ,----. |-------------------| + | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 | + |-------------------------------------------------------------------------| ,--------------. |-------------- | + | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | | + `-------------------------------------------------------------------------' `--------------' `-------------------' +*/ + +#define KEYMAP( \ + KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ + KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \ + KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \ + KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \ + KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \ + KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \ +) \ +{ \ + {KC_NO, KB0, KC0, KD0,KC_NO, KF0, KG0,KC_NO,KC_NO,KC_NO, KK0, KL0,KC_NO,KC_NO, KO0,KC_NO, KQ0, KR0}, \ + { KA1, KB1,KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1,KC_NO,KC_NO,KC_NO,KC_NO, KQ1,KC_NO}, \ + {KC_NO, KB2,KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2,KC_NO, KN2,KC_NO, KP2, KQ2, KR2}, \ + {KC_NO, KB3,KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3,KC_NO, KQ3, KR3}, \ + { KA4, KB4,KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4,KC_NO,KC_NO, KO4,KC_NO, KQ4, KR4}, \ + { KA5,KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5,KC_NO,KC_NO, KO5,KC_NO, KQ5, KR5}, \ + {KC_NO, KB6, KC6,KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6,KC_NO,KC_NO, KO6,KC_NO, KQ6, KR6}, \ + { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7,KC_NO,KC_NO,KC_NO,KC_NO, KO7,KC_NO, KQ7, KR7} \ +} + +#endif diff --git a/keyboards/kitten_paw/led.c b/keyboards/kitten_paw/led.c new file mode 100644 index 0000000000..a1bf057c4c --- /dev/null +++ b/keyboards/kitten_paw/led.c @@ -0,0 +1,47 @@ +/* + Copyright 2014 Ralf Schmitt + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "stdint.h" +#include "led.h" + +/* LED pin configuration + * + * Scroll Lock PC5 + * Caps Lock PC6 + * Num Lock PB7 + * + */ +void led_set(uint8_t usb_led) { + DDRB |= (1<<7); + DDRC |= (1<<5) | (1<<6); + + if (usb_led & (1< + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif +static uint8_t debouncing = DEBOUNCING_DELAY; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static uint8_t read_rows(void); +static void select_col(uint8_t col); + +inline uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +/* Column pin configuration + * + * col: 0 1 2 3 4 5 6 7 + * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2 + * + * Rrr pin configuration + * + * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low + * active), together with 2 rrrs driven directly from the micro + * controller, to control the 18 rrrs. The rrrs are driven from + * pins B6,5,4,3,2,1,0. + */ +void matrix_init(void) { + DDRC &= ~0b10000100; // Row input pins + DDRD &= ~0b01111110; + PORTC |= 0b10000100; + PORTD |= 0b01111110; + + DDRB |= 0b01111111; // Column output pins + + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } +} + +uint8_t matrix_scan(void) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); + _delay_us(3); + uint8_t rows = read_rows(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/readme.md b/keyboards/readme.md index f6c90b1f63..4f17962191 100644 --- a/keyboards/readme.md +++ b/keyboards/readme.md @@ -39,6 +39,7 @@ These keyboards are part of the QMK repository, but their manufacturers are not * [hhkb](/keyboards/hhkb) — The Happy Hacking keyboard can be hacked with a custom controller to run QMK. * [jd45](/keyboards/jd45) — Another Geekhack community project, designed by jdcarpe. * [kc60](/keyboards/kc60) — A programmable Chinese-made keyboard, lost in the mists of time. +* [kitten_paw](/keyboards/kitten_paw) — A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies) * [phantom](/keyboards/phantom) — A tenkeyless kit by Teel, also from Geekhack. * [retro_refit](/keyboards/retro_refit) — Another creation by IBNobody. * [satan](/keyboards/satan) — A GH60 variant. -- cgit v1.2.3 From 92fe78a5ea98cc8ca36d74ce86c24fe284729c39 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 22 Aug 2016 21:19:03 +0200 Subject: - Added PrintScreen key on multimedia layer --- keyboards/planck/keymaps/dbroqua/keymap.c | 4 ++-- keyboards/planck/keymaps/dbroqua/layout.png | Bin 21724 -> 21895 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index e02d98f6ae..33929cb3af 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -99,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | Psc | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | Mute | Vol+ | Vol- | | | |Insert| * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -108,7 +108,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_MULTIMEDIA] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL} }, diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png index 846a385f0a..37b74cdc5e 100644 Binary files a/keyboards/planck/keymaps/dbroqua/layout.png and b/keyboards/planck/keymaps/dbroqua/layout.png differ -- cgit v1.2.3 From 80d10bef073e3d32149aa4a137d8016ac999dffc Mon Sep 17 00:00:00 2001 From: Jason Green Date: Mon, 1 Aug 2016 05:02:52 +0000 Subject: Added USB Virtual Serial support --- Makefile | 4 ++ tmk_core/common/virtser.h | 10 ++++ tmk_core/protocol/lufa.mk | 4 ++ tmk_core/protocol/lufa/descriptor.c | 112 +++++++++++++++++++++++++++++++++++- tmk_core/protocol/lufa/descriptor.h | 43 +++++++++++++- tmk_core/protocol/lufa/lufa.c | 107 ++++++++++++++++++++++++++++++++++ 6 files changed, 276 insertions(+), 4 deletions(-) create mode 100644 tmk_core/common/virtser.h diff --git a/Makefile b/Makefile index 693edc9f06..331badcf84 100644 --- a/Makefile +++ b/Makefile @@ -190,6 +190,10 @@ ifeq ($(strip $(MIDI_ENABLE)), yes) SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c endif +ifeq ($(strip $(VIRTSER_ENABLE)), yes) + OPT_DEFS += -DVIRTSER_ENABLE +endif + ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_music.c diff --git a/tmk_core/common/virtser.h b/tmk_core/common/virtser.h new file mode 100644 index 0000000000..74891b6ae0 --- /dev/null +++ b/tmk_core/common/virtser.h @@ -0,0 +1,10 @@ +#ifndef _VIRTSER_H_ +#define _VIRTSER_H_ + +/* Define this function in your code to process incoming bytes */ +void virtser_recv(const uint8_t ch); + +/* Call this to send a character over the Virtual Serial Device */ +void virtser_send(const uint8_t byte); + +#endif diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk index 0eeace44ec..5b1e3d19d0 100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@ -26,6 +26,10 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) $(TMK_DIR)/protocol/serial_uart.c endif +ifeq ($(strip $(VIRTSER_ENABLE)), yes) + LUFA_SRC += $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c +endif + SRC += $(LUFA_SRC) # Search Path diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 539a58d66b..6f2407f580 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -231,9 +231,15 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, .USBSpecification = VERSION_BCD(1,1,0), +#if VIRTSER_ENABLE + .Class = USB_CSCP_IADDeviceClass, + .SubClass = USB_CSCP_IADDeviceSubclass, + .Protocol = USB_CSCP_IADDeviceProtocol, +#else .Class = USB_CSCP_NoDeviceClass, .SubClass = USB_CSCP_NoDeviceSubclass, .Protocol = USB_CSCP_NoDeviceProtocol, +#endif .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, @@ -643,8 +649,112 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .TotalEmbeddedJacks = 0x01, .AssociatedJackID = {0x03} - } + }, #endif + +#ifdef VIRTSER_ENABLE + .CDC_Interface_Association = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, + + .FirstInterfaceIndex = CCI_INTERFACE, + .TotalInterfaces = 2, + + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_ACMSubclass, + .Protocol = CDC_CSCP_ATCommandProtocol, + + .IADStrIndex = NO_DESCRIPTOR, + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = CCI_INTERFACE, + .AlternateSetting = 0, + + .TotalEndpoints = 1, + + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_ACMSubclass, + .Protocol = CDC_CSCP_ATCommandProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_Functional_Header = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x00, + + .CDCSpecification = VERSION_BCD(1,1,0), + }, + + .CDC_Functional_ACM = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x02, + + .Capabilities = 0x02, + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x06, + + .MasterInterfaceNumber = CCI_INTERFACE, + .SlaveInterfaceNumber = CDI_INTERFACE, + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = CDC_NOTIFICATION_EPADDR, + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_NOTIFICATION_EPSIZE, + .PollingIntervalMS = 0xFF + }, + + .CDC_DCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = CDI_INTERFACE, + .AlternateSetting = 0, + + .TotalEndpoints = 2, + + .Class = CDC_CSCP_CDCDataClass, + .SubClass = CDC_CSCP_NoDataSubclass, + .Protocol = CDC_CSCP_NoDataProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_DataOutEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = CDC_OUT_EPADDR, + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_EPSIZE, + .PollingIntervalMS = 0x05 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = CDC_IN_EPADDR, + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_EPSIZE, + .PollingIntervalMS = 0x05 + }, +#endif + }; diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h index 4fd81a0e87..316650a7b1 100644 --- a/tmk_core/protocol/lufa/descriptor.h +++ b/tmk_core/protocol/lufa/descriptor.h @@ -104,6 +104,21 @@ typedef struct USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC; #endif +#ifdef VIRTSER_ENABLE + USB_Descriptor_Interface_Association_t CDC_Interface_Association; + + // CDC Control Interface + USB_Descriptor_Interface_t CDC_CCI_Interface; + USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; + USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; + USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; + USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; + + // CDC Data Interface + USB_Descriptor_Interface_t CDC_DCI_Interface; + USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; + USB_Descriptor_Endpoint_t CDC_DataInEndpoint; +#endif } USB_Descriptor_Configuration_t; @@ -141,8 +156,15 @@ typedef struct # define AS_INTERFACE NKRO_INTERFACE #endif +#ifdef VIRTSER_ENABLE +# define CCI_INTERFACE (AS_INTERFACE + 1) +# define CDI_INTERFACE (AS_INTERFACE + 2) +#else +# define CDI_INTERFACE AS_INTERFACE +#endif + /* nubmer of interfaces */ -#define TOTAL_INTERFACES AS_INTERFACE + 1 +#define TOTAL_INTERFACES (CDI_INTERFACE + 1) // Endopoint number and size @@ -180,11 +202,24 @@ typedef struct # define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 2) # define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM) # define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM) +#else +# define MIDI_STREAM_OUT_EPNUM NKRO_IN_EPNUM +#endif + +#ifdef VIRTSER_ENABLE +# define CDC_NOTIFICATION_EPNUM (MIDI_STREAM_OUT_EPNUM + 1) +# define CDC_IN_EPNUM (MIDI_STREAM_OUT_EPNUM + 2) +# define CDC_OUT_EPNUM (MIDI_STREAM_OUT_EPNUM + 3) +# define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM) +# define CDC_IN_EPADDR (ENDPOINT_DIR_IN | CDC_IN_EPNUM) +# define CDC_OUT_EPADDR (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM) +#else +# define CDC_OUT_EPNUM MIDI_STREAM_OUT_EPNUM #endif -#if defined(__AVR_ATmega32U2__) && MIDI_STREAM_OUT_EPADDR > 4 -# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI)" +#if defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4 +# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)" #endif #define KEYBOARD_EPSIZE 8 @@ -193,6 +228,8 @@ typedef struct #define CONSOLE_EPSIZE 32 #define NKRO_EPSIZE 16 #define MIDI_STREAM_EPSIZE 64 +#define CDC_NOTIFICATION_EPSIZE 8 +#define CDC_EPSIZE 16 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 9ca55dbc9d..af73f34d7b 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -60,6 +60,10 @@ #include "bluetooth.h" #endif +#ifdef VIRTSER_ENABLE + #include "virtser.h" +#endif + uint8_t keyboard_idle = 0; /* 0: Boot Protocol, 1: Report Protocol(default) */ uint8_t keyboard_protocol = 1; @@ -127,6 +131,34 @@ USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface = #define SYS_COMMON_3 0x30 #endif +#ifdef VIRTSER_ENABLE +USB_ClassInfo_CDC_Device_t cdc_device = +{ + .Config = + { + .ControlInterfaceNumber = CCI_INTERFACE, + .DataINEndpoint = + { + .Address = CDC_IN_EPADDR, + .Size = CDC_EPSIZE, + .Banks = 1, + }, + .DataOUTEndpoint = + { + .Address = CDC_OUT_EPADDR, + .Size = CDC_EPSIZE, + .Banks = 1, + }, + .NotificationEndpoint = + { + .Address = CDC_NOTIFICATION_EPADDR, + .Size = CDC_NOTIFICATION_EPSIZE, + .Banks = 1, + }, + }, +}; +#endif + /******************************************************************************* * Console @@ -311,6 +343,12 @@ void EVENT_USB_Device_ConfigurationChanged(void) ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); #endif + +#ifdef VIRTSER_ENABLE + ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, ENDPOINT_BANK_SINGLE); + ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_OUT_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE); + ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_IN_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE); +#endif } /* @@ -432,10 +470,15 @@ void EVENT_USB_Device_ControlRequest(void) break; } + +#ifdef VIRTSER_ENABLE + CDC_Device_ProcessControlRequest(&cdc_device); +#endif } /******************************************************************************* * Host driver +p ******************************************************************************/ static uint8_t keyboard_leds(void) { @@ -827,6 +870,61 @@ void MIDI_Task(void) #endif +/******************************************************************************* + * VIRTUAL SERIAL + ******************************************************************************/ + +#ifdef VIRTSER_ENABLE +void virtser_init(void) +{ + cdc_device.State.ControlLineStates.DeviceToHost = CDC_CONTROL_LINE_IN_DSR ; + CDC_Device_SendControlLineStateChange(&cdc_device); +} + +__attribute__ ((weak)) +void virtser_recv(uint8_t c) +{ + // Ignore by default +} + +void virtser_task(void) +{ + uint16_t count = CDC_Device_BytesReceived(&cdc_device); + uint8_t ch; + if (count) + { + ch = CDC_Device_ReceiveByte(&cdc_device); + virtser_recv(ch); + } +} +void virtser_send(const uint8_t byte) +{ + uint8_t timeout = 255; + uint8_t ep = Endpoint_GetCurrentEndpoint(); + + if (cdc_device.State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) + { + /* IN packet */ + Endpoint_SelectEndpoint(cdc_device.Config.DataINEndpoint.Address); + + if (!Endpoint_IsEnabled() || !Endpoint_IsConfigured()) { + Endpoint_SelectEndpoint(ep); + return; + } + + while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); + + Endpoint_Write_8(byte); + CDC_Device_Flush(&cdc_device); + + if (Endpoint_IsINReady()) { + Endpoint_ClearIN(); + } + + Endpoint_SelectEndpoint(ep); + } +} +#endif /******************************************************************************* * main @@ -918,6 +1016,10 @@ int main(void) sleep_led_init(); #endif +#ifdef VIRTSER_ENABLE + virtser_init(); +#endif + print("Keyboard start.\n"); while (1) { #ifndef BLUETOOTH_ENABLE @@ -936,6 +1038,11 @@ int main(void) #endif keyboard_task(); +#ifdef VIRTSER_ENABLE + virtser_task(); + CDC_Device_USBTask(&cdc_device); +#endif + #if !defined(INTERRUPT_CONTROL_ENDPOINT) USB_USBTask(); #endif -- cgit v1.2.3 From 86656690f12e98f7aa6c2faddbcef3b9bcdad35b Mon Sep 17 00:00:00 2001 From: Jason Green Date: Mon, 1 Aug 2016 18:28:21 +0000 Subject: TxBolt (Steno) Serial protocol for Ergodox Ez --- keyboards/ergodox/keymaps/steno/Makefile | 3 + keyboards/ergodox/keymaps/steno/keymap.c | 324 ++++++++++++++++++++++++++++++ keyboards/ergodox/keymaps/steno/readme.md | 92 +++++++++ 3 files changed, 419 insertions(+) create mode 100644 keyboards/ergodox/keymaps/steno/Makefile create mode 100644 keyboards/ergodox/keymaps/steno/keymap.c create mode 100644 keyboards/ergodox/keymaps/steno/readme.md diff --git a/keyboards/ergodox/keymaps/steno/Makefile b/keyboards/ergodox/keymaps/steno/Makefile new file mode 100644 index 0000000000..b6fb9b1a80 --- /dev/null +++ b/keyboards/ergodox/keymaps/steno/Makefile @@ -0,0 +1,3 @@ +VIRTSER_ENABLE = yes +# Not enough interupts, so something has to go +MOUSEKEY_ENABLE = no diff --git a/keyboards/ergodox/keymaps/steno/keymap.c b/keyboards/ergodox/keymaps/steno/keymap.c new file mode 100644 index 0000000000..f885ac575a --- /dev/null +++ b/keyboards/ergodox/keymaps/steno/keymap.c @@ -0,0 +1,324 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "lufa.h" +#include "sendchar.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define TXBOLT 3 // TxBolt Steno Virtual Serial +#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout + +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 | | TX | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, 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, 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(TXBOLT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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 + M(0), 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | RESET | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + RESET, 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 +), +// TxBolt Codes +#define Sl 0b00000001 +#define Tl 0b00000010 +#define Kl 0b00000100 +#define Pl 0b00001000 +#define Wl 0b00010000 +#define Hl 0b00100000 +#define Rl 0b01000001 +#define Al 0b01000010 +#define Ol 0b01000100 +#define X 0b01001000 +#define Er 0b01010000 +#define Ur 0b01100000 +#define Fr 0b10000001 +#define Rr 0b10000010 +#define Pr 0b10000100 +#define Br 0b10001000 +#define Lr 0b10010000 +#define Gr 0b10100000 +#define Tr 0b11000001 +#define Sr 0b11000010 +#define Dr 0b11000100 +#define Zr 0b11001000 +#define NM 0b11010000 +#define GRPMASK 0b11000000 +#define GRP0 0b00000000 +#define GRP1 0b01000000 +#define GRP2 0b10000000 +#define GRP3 0b11000000 +/* Keymap 3: TxBolt (Serial) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | BKSPC | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | T | P | H | * |------| |------| * | F | P | L | T | D | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | K | W | R | * | | | | * | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// TxBolt over Serial +[TXBOLT] = KEYMAP( + KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, + KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), + KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + M(Al), M(Ol), KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), + M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), + KC_NO, M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, M(Er), M(Ur) +), +/* Keymap 4: TxBolt (Serial) Alternative + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | S | T | P | H | * | | | | * | F | P | L | T | D | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | K | W | R | * |------| |------| * | R | B | G | S | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | A | O | | E | U | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// TxBolt over Serial +[TXBOLT2] = KEYMAP( + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, + KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), KC_NO, + KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, M(Al), M(Ol), + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + // right hand + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), + KC_TRNS, M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), + M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + M(Er), M(Ur), KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +uint8_t chord[4] = {0,0,0,0}; +uint8_t pressed_count = 0; + +void send_chord(void) +{ + for(uint8_t i = 0; i < 4; i++) + { + if(chord[i]) + virtser_send(chord[i]); + } + virtser_send(0); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + // We need to track keypresses in all modes, in case the user + // changes mode whilst pressing other keys. + if (record->event.pressed) + pressed_count++; + else + pressed_count--; + return true; +} + +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) { + uint8_t grp = (id & GRPMASK) >> 6; + chord[grp] |= id; + } + else { + if (pressed_count == 0) { + send_chord(); + chord[0] = chord[1] = chord[2] = chord[3] = 0; + } + } + 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/keyboards/ergodox/keymaps/steno/readme.md b/keyboards/ergodox/keymaps/steno/readme.md new file mode 100644 index 0000000000..d67cde2a3c --- /dev/null +++ b/keyboards/ergodox/keymaps/steno/readme.md @@ -0,0 +1,92 @@ +# ErgoDox EZ Steno Configuration + +This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function. + +In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers. + +

+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  TX  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           | BOLT |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| 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 |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | BKSPC  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   T  |   P  |   H  |   *  |------|           |------|   *  |   F  |   P  |   L  |   T  |   D    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   K  |   W  |   R  |   *  |      |           |      |   *  |   R  |   B  |   G  |   S  |   Z    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   A  |   O  |------|       |------|   E  |   U  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
-- cgit v1.2.3 From ec62cbe384c7366b90e913d83bed3ba3325406df Mon Sep 17 00:00:00 2001 From: Jason Green Date: Tue, 23 Aug 2016 04:32:40 +0000 Subject: add missing #include --- keyboards/ergodox/keymaps/steno/keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/keymaps/steno/keymap.c b/keyboards/ergodox/keymaps/steno/keymap.c index f885ac575a..399059d5f4 100644 --- a/keyboards/ergodox/keymaps/steno/keymap.c +++ b/keyboards/ergodox/keymaps/steno/keymap.c @@ -3,6 +3,7 @@ #include "action_layer.h" #include "lufa.h" #include "sendchar.h" +#include "virtser.h" #define BASE 0 // default layer #define SYMB 1 // symbols -- cgit v1.2.3 From 104ca8a5e1a9f3a30c0fa149556b5424684905dd Mon Sep 17 00:00:00 2001 From: Jason Green Date: Tue, 23 Aug 2016 04:49:05 +0000 Subject: Remove unneeded include --- keyboards/ergodox/keymaps/steno/keymap.c | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/steno/keymap.c b/keyboards/ergodox/keymaps/steno/keymap.c index 399059d5f4..3e9830905c 100644 --- a/keyboards/ergodox/keymaps/steno/keymap.c +++ b/keyboards/ergodox/keymaps/steno/keymap.c @@ -1,7 +1,6 @@ #include "ergodox.h" #include "debug.h" #include "action_layer.h" -#include "lufa.h" #include "sendchar.h" #include "virtser.h" -- cgit v1.2.3 From feebc58d327b969fe1ef11cd5b5989a60c51ac87 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 23 Aug 2016 09:42:11 +0300 Subject: Split kitten_paw into Makefile/rules.mk --- keyboards/kitten_paw/Makefile | 76 +------------------------------------------ keyboards/kitten_paw/rules.mk | 72 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 75 deletions(-) create mode 100644 keyboards/kitten_paw/rules.mk diff --git a/keyboards/kitten_paw/Makefile b/keyboards/kitten_paw/Makefile index 9122921737..57b2ef62e5 100644 --- a/keyboards/kitten_paw/Makefile +++ b/keyboards/kitten_paw/Makefile @@ -1,77 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u2 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 - OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -CUSTOM_MATRIX = yes -SRC += matrix.c led.c - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif - diff --git a/keyboards/kitten_paw/rules.mk b/keyboards/kitten_paw/rules.mk new file mode 100644 index 0000000000..dab7cabc52 --- /dev/null +++ b/keyboards/kitten_paw/rules.mk @@ -0,0 +1,72 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 + OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +CUSTOM_MATRIX = yes +SRC += matrix.c led.c -- cgit v1.2.3 From 7009112752ed0729b9c20382c936a8d373062ada Mon Sep 17 00:00:00 2001 From: Jason Green Date: Tue, 23 Aug 2016 07:02:44 +0000 Subject: move to ergodox-ez only --- keyboards/ergodox/ez/keymaps/steno/Makefile | 3 + keyboards/ergodox/ez/keymaps/steno/keymap.c | 324 +++++++++++++++++++++++++++ keyboards/ergodox/ez/keymaps/steno/readme.md | 92 ++++++++ keyboards/ergodox/keymaps/steno/Makefile | 3 - keyboards/ergodox/keymaps/steno/keymap.c | 324 --------------------------- keyboards/ergodox/keymaps/steno/readme.md | 92 -------- tmk_core/protocol/lufa/lufa.c | 2 +- 7 files changed, 420 insertions(+), 420 deletions(-) create mode 100644 keyboards/ergodox/ez/keymaps/steno/Makefile create mode 100644 keyboards/ergodox/ez/keymaps/steno/keymap.c create mode 100644 keyboards/ergodox/ez/keymaps/steno/readme.md delete mode 100644 keyboards/ergodox/keymaps/steno/Makefile delete mode 100644 keyboards/ergodox/keymaps/steno/keymap.c delete mode 100644 keyboards/ergodox/keymaps/steno/readme.md diff --git a/keyboards/ergodox/ez/keymaps/steno/Makefile b/keyboards/ergodox/ez/keymaps/steno/Makefile new file mode 100644 index 0000000000..b6fb9b1a80 --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/steno/Makefile @@ -0,0 +1,3 @@ +VIRTSER_ENABLE = yes +# Not enough interupts, so something has to go +MOUSEKEY_ENABLE = no diff --git a/keyboards/ergodox/ez/keymaps/steno/keymap.c b/keyboards/ergodox/ez/keymaps/steno/keymap.c new file mode 100644 index 0000000000..3e9830905c --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/steno/keymap.c @@ -0,0 +1,324 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "sendchar.h" +#include "virtser.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define TXBOLT 3 // TxBolt Steno Virtual Serial +#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout + +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 | | TX | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, 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, 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(TXBOLT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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 + M(0), 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | RESET | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + RESET, 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 +), +// TxBolt Codes +#define Sl 0b00000001 +#define Tl 0b00000010 +#define Kl 0b00000100 +#define Pl 0b00001000 +#define Wl 0b00010000 +#define Hl 0b00100000 +#define Rl 0b01000001 +#define Al 0b01000010 +#define Ol 0b01000100 +#define X 0b01001000 +#define Er 0b01010000 +#define Ur 0b01100000 +#define Fr 0b10000001 +#define Rr 0b10000010 +#define Pr 0b10000100 +#define Br 0b10001000 +#define Lr 0b10010000 +#define Gr 0b10100000 +#define Tr 0b11000001 +#define Sr 0b11000010 +#define Dr 0b11000100 +#define Zr 0b11001000 +#define NM 0b11010000 +#define GRPMASK 0b11000000 +#define GRP0 0b00000000 +#define GRP1 0b01000000 +#define GRP2 0b10000000 +#define GRP3 0b11000000 +/* Keymap 3: TxBolt (Serial) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | BKSPC | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | T | P | H | * |------| |------| * | F | P | L | T | D | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | K | W | R | * | | | | * | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// TxBolt over Serial +[TXBOLT] = KEYMAP( + KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, + KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), + KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + M(Al), M(Ol), KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), + M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), + KC_NO, M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, M(Er), M(Ur) +), +/* Keymap 4: TxBolt (Serial) Alternative + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | S | T | P | H | * | | | | * | F | P | L | T | D | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | S | K | W | R | * |------| |------| * | R | B | G | S | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | A | O | | E | U | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// TxBolt over Serial +[TXBOLT2] = KEYMAP( + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, + KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), KC_NO, + KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, M(Al), M(Ol), + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + // right hand + KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), + KC_TRNS, M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), + M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + M(Er), M(Ur), KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +uint8_t chord[4] = {0,0,0,0}; +uint8_t pressed_count = 0; + +void send_chord(void) +{ + for(uint8_t i = 0; i < 4; i++) + { + if(chord[i]) + virtser_send(chord[i]); + } + virtser_send(0); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + // We need to track keypresses in all modes, in case the user + // changes mode whilst pressing other keys. + if (record->event.pressed) + pressed_count++; + else + pressed_count--; + return true; +} + +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) { + uint8_t grp = (id & GRPMASK) >> 6; + chord[grp] |= id; + } + else { + if (pressed_count == 0) { + send_chord(); + chord[0] = chord[1] = chord[2] = chord[3] = 0; + } + } + 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/keyboards/ergodox/ez/keymaps/steno/readme.md b/keyboards/ergodox/ez/keymaps/steno/readme.md new file mode 100644 index 0000000000..d67cde2a3c --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/steno/readme.md @@ -0,0 +1,92 @@ +# ErgoDox EZ Steno Configuration + +This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function. + +In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers. + +

+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  TX  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           | BOLT |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| 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 |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | BKSPC  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   T  |   P  |   H  |   *  |------|           |------|   *  |   F  |   P  |   L  |   T  |   D    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   K  |   W  |   R  |   *  |      |           |      |   *  |   R  |   B  |   G  |   S  |   Z    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   A  |   O  |------|       |------|   E  |   U  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
diff --git a/keyboards/ergodox/keymaps/steno/Makefile b/keyboards/ergodox/keymaps/steno/Makefile deleted file mode 100644 index b6fb9b1a80..0000000000 --- a/keyboards/ergodox/keymaps/steno/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -VIRTSER_ENABLE = yes -# Not enough interupts, so something has to go -MOUSEKEY_ENABLE = no diff --git a/keyboards/ergodox/keymaps/steno/keymap.c b/keyboards/ergodox/keymaps/steno/keymap.c deleted file mode 100644 index 3e9830905c..0000000000 --- a/keyboards/ergodox/keymaps/steno/keymap.c +++ /dev/null @@ -1,324 +0,0 @@ -#include "ergodox.h" -#include "debug.h" -#include "action_layer.h" -#include "sendchar.h" -#include "virtser.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys -#define TXBOLT 3 // TxBolt Steno Virtual Serial -#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout - -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 | | TX | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | - * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, 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, 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(TXBOLT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | 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 - M(0), 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | RESET | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - RESET, 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 -), -// TxBolt Codes -#define Sl 0b00000001 -#define Tl 0b00000010 -#define Kl 0b00000100 -#define Pl 0b00001000 -#define Wl 0b00010000 -#define Hl 0b00100000 -#define Rl 0b01000001 -#define Al 0b01000010 -#define Ol 0b01000100 -#define X 0b01001000 -#define Er 0b01010000 -#define Ur 0b01100000 -#define Fr 0b10000001 -#define Rr 0b10000010 -#define Pr 0b10000100 -#define Br 0b10001000 -#define Lr 0b10010000 -#define Gr 0b10100000 -#define Tr 0b11000001 -#define Sr 0b11000010 -#define Dr 0b11000100 -#define Zr 0b11001000 -#define NM 0b11010000 -#define GRPMASK 0b11000000 -#define GRP0 0b00000000 -#define GRP1 0b01000000 -#define GRP2 0b10000000 -#define GRP3 0b11000000 -/* Keymap 3: TxBolt (Serial) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | BKSPC | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | # | # | # | # | # | | | | # | # | # | # | # | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | S | T | P | H | * |------| |------| * | F | P | L | T | D | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | S | K | W | R | * | | | | * | R | B | G | S | Z | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | A | O |------| |------| E | U | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// TxBolt over Serial -[TXBOLT] = KEYMAP( - KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, - KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), - KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - M(Al), M(Ol), KC_NO, - // right hand - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TRNS, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), - M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), - KC_NO, M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO, M(Er), M(Ur) -), -/* Keymap 4: TxBolt (Serial) Alternative - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | # | # | # | # | # | | | | # | # | # | # | # | # | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | S | T | P | H | * | | | | * | F | P | L | T | D | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | S | K | W | R | * |------| |------| * | R | B | G | S | Z | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | A | O | | E | U | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// TxBolt over Serial -[TXBOLT2] = KEYMAP( - KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO, - KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), KC_NO, - KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, M(Al), M(Ol), - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO, - // right hand - KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM), - KC_TRNS, M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr), - M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr), - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - M(Er), M(Ur), KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, - KC_NO, - KC_NO, KC_NO, KC_NO -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) -}; - -uint8_t chord[4] = {0,0,0,0}; -uint8_t pressed_count = 0; - -void send_chord(void) -{ - for(uint8_t i = 0; i < 4; i++) - { - if(chord[i]) - virtser_send(chord[i]); - } - virtser_send(0); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) -{ - // We need to track keypresses in all modes, in case the user - // changes mode whilst pressing other keys. - if (record->event.pressed) - pressed_count++; - else - pressed_count--; - return true; -} - -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) { - uint8_t grp = (id & GRPMASK) >> 6; - chord[grp] |= id; - } - else { - if (pressed_count == 0) { - send_chord(); - chord[0] = chord[1] = chord[2] = chord[3] = 0; - } - } - 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/keyboards/ergodox/keymaps/steno/readme.md b/keyboards/ergodox/keymaps/steno/readme.md deleted file mode 100644 index d67cde2a3c..0000000000 --- a/keyboards/ergodox/keymaps/steno/readme.md +++ /dev/null @@ -1,92 +0,0 @@ -# ErgoDox EZ Steno Configuration - -This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function. - -In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers. - -

-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  TX  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           | BOLT |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
- * |--------+------+------+------+------+------| 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 |        |      |
- *                                 `--------------------'       `----------------------'
- */
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-/* Keymap 2: Media keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-/* Keymap 3: TxBolt (Serial)
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | BKSPC  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   S  |   T  |   P  |   H  |   *  |------|           |------|   *  |   F  |   P  |   L  |   T  |   D    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   S  |   K  |   W  |   R  |   *  |      |           |      |   *  |   R  |   B  |   G  |   S  |   Z    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |   A  |   O  |------|       |------|   E  |   U  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index af73f34d7b..9b201374a2 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -881,7 +881,7 @@ void virtser_init(void) CDC_Device_SendControlLineStateChange(&cdc_device); } -__attribute__ ((weak)) +void virtser_recv(uint8_t c) __attribute__ ((weak)); void virtser_recv(uint8_t c) { // Ignore by default -- cgit v1.2.3 From 06c82a063bd668cb0b5b80d455c6fd7384131c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Werner?= Date: Tue, 23 Aug 2016 12:15:29 +0200 Subject: Fixed wrong keycode in default keymap Where I used KC_MENU I should have used KC_APP instead. --- keyboards/kitten_paw/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/kitten_paw/keymaps/default/keymap.c index f672357455..64aa672d0a 100644 --- a/keyboards/kitten_paw/keymaps/default/keymap.c +++ b/keyboards/kitten_paw/keymaps/default/keymap.c @@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) }; const uint16_t PROGMEM fn_actions[] = { -- cgit v1.2.3 From 6a61c89477678e3df9aba9189b3dd67fc24e94ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Werner?= Date: Tue, 23 Aug 2016 13:20:59 +0200 Subject: added my personal keymap I ported my keymap from tmk to QMK. --- keyboards/kitten_paw/keymaps/ickerwx/config.h | 31 ++++ keyboards/kitten_paw/keymaps/ickerwx/keymap.c | 220 ++++++++++++++++++++++++++ 2 files changed, 251 insertions(+) create mode 100644 keyboards/kitten_paw/keymaps/ickerwx/config.h create mode 100644 keyboards/kitten_paw/keymaps/ickerwx/keymap.c diff --git a/keyboards/kitten_paw/keymaps/ickerwx/config.h b/keyboards/kitten_paw/keymaps/ickerwx/config.h new file mode 100644 index 0000000000..04a2d253c7 --- /dev/null +++ b/keyboards/kitten_paw/keymaps/ickerwx/config.h @@ -0,0 +1,31 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#undef MOUSEKEY_MOVE_MAX +#define MOUSEKEY_MOVE_MAX 127 +#undef MOUSEKEY_WHEEL_MAX +#define MOUSEKEY_WHEEL_MAX 110 +#undef MOUSEKEY_MOVE_DELTA +#define MOUSEKEY_MOVE_DELTA 5 +#undef MOUSEKEY_WHEEL_DELTA +#define MOUSEKEY_WHEEL_DELTA 1 +#undef MOUSEKEY_DELAY +#define MOUSEKEY_DELAY 50 +#undef MOUSEKEY_INTERVAL +#define MOUSEKEY_INTERVAL 20 +#undef MOUSEKEY_MAX_SPEED +#define MOUSEKEY_MAX_SPEED 4 +#undef MOUSEKEY_TIME_TO_MAX +#define MOUSEKEY_TIME_TO_MAX 30 +#undef MOUSEKEY_WHEEL_MAX_SPEED +#define MOUSEKEY_WHEEL_MAX_SPEED 3 +#undef MOUSEKEY_WHEEL_TIME_TO_MAX +#define MOUSEKEY_WHEEL_TIME_TO_MAX 1000 +#undef ONESHOT_TIMEOUT +#define ONESHOT_TIMEOUT 500 +#undef TAPPING_TOGGLE +#define TAPPING_TOGGLE 2 + +#endif diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c new file mode 100644 index 0000000000..276fc30a80 --- /dev/null +++ b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c @@ -0,0 +1,220 @@ +#include "kitten_paw.h" +#include "mousekey.h" + +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define LC LCTL +#define KC_SLCT KC_SELECT + +enum layers { + DEFAULT, + PROG1, + PROG2, + MEDIA, + MOUSE1, + MOUSE2, + MISC, +}; + +enum function_id { + LSHFT_PAREN, + RSHFT_PAREN, + LCTRL_BRACKET, + RCTRL_BRACKET, + LALT_CURLY, + RALT_CURLY, + CTRL_CLICK +}; + +enum macro_id { + GRV, + CFLEX +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [DEFAULT] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + F(8),KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT, KC_SLSH, F(9), KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + F(1),KC_LGUI, F(3), LT(MISC, KC_SPC), F(4), F(5), LT(MEDIA, KC_APP), F(2), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), + /* Layer 1: Programming Layer 1, emulating US layout */ + [PROG1] = KEYMAP(\ + KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,_______,_______, \ + M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_SLSH, S(KC_0), _______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______, KC_Z,_______,_______,_______, _______,RALT(KC_8),RALT(KC_9),RALT(KC_MINS), _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(KC_COMM),S(KC_BSLS), _______, _______,_______,_______, \ + MO(PROG2),_______, KC_Y,_______,_______,_______,_______,_______,_______,_______, _______, S(KC_7), MO(PROG2), _______, _______,_______,_______,_______, \ + _______,_______,_______, _______, _______, _______, _______, _______, _______,_______,_______, _______,_______), + /* Layer 2: programming layer 2 + all keys that are not FN keys are sent as LSFT+key on this layer + */ + [PROG2] = KEYMAP(\ + _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, _______, _______, _______, _______,_______,_______, \ +RALT(KC_RBRC), _______,RALT(KC_Q),KC_BSLS,_______,_______,M(CFLEX),S(KC_6),S(KC_RBRC),S(KC_8), S(KC_9), S(KC_SLSH), KC_RBRC, _______, _______,_______,_______, _______,_______,_______,_______, \ + _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, _______, RALT(KC_7),RALT(KC_0),RALT(KC_NUBS), _______,_______,_______, _______,_______,_______,_______, \ + _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, S(KC_DOT), S(KC_2), _______, _______,_______,_______, \ + _______,S(KC_NUBS), _______,_______,_______,_______, _______,_______, _______,KC_NUBS,S(KC_NUBS), S(KC_MINS), _______, _______, _______,_______,_______,_______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, _______,_______), \ + /* Layer 3: media layer */ + [MEDIA] = KEYMAP(\ + KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_MPRV,KC_MPLY,KC_MNXT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_VOLD,KC_MUTE,KC_VOLU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, KC_EJCT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,_______,XXXXXXX, KC_MRWD,KC_MSTP,KC_MFFD, XXXXXXX,XXXXXXX), + /* Layer 4: Mouse layer */ + [MOUSE1] = KEYMAP(\ + F(6),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,KC_BTN4, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, KC_Y,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_DEL, KC_END,KC_PGDN, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + F(0),KC_BTN5, KC_MS_L, KC_MS_D, KC_MS_R, F(7),KC_WH_L,KC_WH_D,KC_WH_U, KC_WH_R, XXXXXXX,XXXXXXX, KC_BTN1, XXXXXXX,XXXXXXX,XXXXXXX, \ + MO(MOUSE2),XXXXXXX,LC(KC_Y),LC(KC_X),LC(KC_C),LC(KC_V),XXXXXXX,KC_BTN2,KC_BTN3,LC(KC_PGUP),LC(KC_PGDN),XXXXXXX, KC_RSFT, KC_UP, XXXXXXX,XXXXXXX,XXXXXXX,KC_PENT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_BTN1, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, XXXXXXX,XXXXXXX), + /* Layer 5: Mouse layer 2*/ + [MOUSE2] = KEYMAP(\ + _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______,_______, _______,_______,_______, \ + _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,KC_BTN2, KC_WH_U, KC_BTN3, _______,_______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,KC_WH_L, KC_WH_D, KC_WH_R, _______,KC_MS_L,KC_MS_D,KC_MS_U, KC_MS_R, _______,_______, _______, _______,_______,_______, \ + _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______, _______, _______, _______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______), + /* Layer 6: Misc layer */ + [MISC] = KEYMAP(\ + XXXXXXX, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,KC_SLCT,LC(KC_W), KC_UP, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,KC_BSPC, KC_DEL, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX,KC_HOME,KC_PGDN,KC_PGUP, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + KC_LSFT,XXXXXXX,LC(KC_Y),LC(KC_X),LC(KC_C),LC(KC_V), KC_SPC, KC_END,XXXXXXX,LC(KC_PGUP),LC(KC_PGDN),XXXXXXX, KC_RSFT, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + KC_LCTL,KC_LGUI, KC_LALT, LT(MISC, KC_SPC), KC_RALT,KC_RGUI, KC_APP,KC_RCTL, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1), // toggle enable mouse layer (4) + [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET), // tap to print [ + [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET), // tap to print ] + [3] = ACTION_FUNCTION_TAP(LALT_CURLY), // tap to print { + [4] = ACTION_FUNCTION_TAP(RALT_CURLY), // tap to print } + [5] = ACTION_LAYER_TAP_TOGGLE(PROG1), // toggle programming layer 1 (1) + [6] = ACTION_LAYER_SET_CLEAR(DEFAULT), + [7] = ACTION_FUNCTION_TAP(CTRL_CLICK), + [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN), // tap to print ( + [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN), // tap to print ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case GRV: // macro to print accent grave + return (record->event.pressed ? + MACRO( D(LSFT), T(EQL), U(RALT), T(SPC), END) : + MACRO_NONE ); + case CFLEX: // print accent circonflex + return (record->event.pressed ? + MACRO( T(GRV), T(SPC), END ) : + MACRO_NONE ); + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} + +void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_mod, uint16_t macro_kc ) { + if (record->event.pressed) { + if (record->tap.count > 0 && !record->tap.interrupted) { + if (record->tap.interrupted) { + register_mods(MOD_BIT(orig_mod)); + } + } else { + register_mods(MOD_BIT(orig_mod)); + } + } else { + if (record->tap.count > 0 && !(record->tap.interrupted)) { + add_weak_mods(MOD_BIT(macro_mod)); + send_keyboard_report(); + register_code(macro_kc); + unregister_code(macro_kc); + del_weak_mods(MOD_BIT(macro_mod)); + send_keyboard_report(); + record->tap.count = 0; // ad hoc: cancel tap + } else { + unregister_mods(MOD_BIT(orig_mod)); + } + } +} + +/* if LCTRL is tabbed, print (, or ) if RCTRL is tabbed, same for LALT/RALT and [/] */ +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + // The code is copied from keymap_hasu.c in the tmk keyboards hhkb folder + switch (id) { + case LCTRL_BRACKET: + tap_helper(record, KC_LCTL, KC_RALT, KC_8); + break; + case RCTRL_BRACKET: + tap_helper(record, KC_RCTL, KC_RALT, KC_9); + break; + case LALT_CURLY: + tap_helper(record, KC_LALT, KC_RALT, KC_7); + break; + case RALT_CURLY: + tap_helper(record, KC_RALT, KC_RALT, KC_0); + break; + case LSHFT_PAREN: + tap_helper(record, KC_LSFT, KC_LSFT, KC_8); + break; + case RSHFT_PAREN: + tap_helper(record, KC_RSFT, KC_LSFT, KC_9); + break; + case CTRL_CLICK: + if (record->event.pressed) { + mousekey_clear(); + register_mods(MOD_BIT(KC_LCTL)); + send_keyboard_report(); + wait_ms(5); + mousekey_on(KC_BTN1); + mousekey_send(); + wait_ms(10); + mousekey_off(KC_BTN1); + mousekey_send(); + wait_ms(5); + unregister_mods(MOD_BIT(KC_LCTL)); + send_keyboard_report(); + } + break; + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint8_t layer; + layer = biton32(layer_state); + if (layer == PROG2) { + if (keycode >= KC_A && keycode <= KC_EXSEL && \ + !( // do not send LSFT + these keycodes, they are needed for emulating the US layout + keycode == KC_NONUS_BSLASH || + keycode == KC_RBRC || + keycode == KC_BSLS || + keycode == KC_GRV + )) { + if (record->event.pressed) { + register_mods(MOD_LSFT); + } else { + unregister_mods(MOD_LSFT); + } + } + } + return true; +} -- cgit v1.2.3 From 6c2b7f359cfe5122631d8772f8766c08465949c8 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 23 Aug 2016 20:47:35 -0500 Subject: Fixed line ending --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 86ad90f5d1..d2350f27c1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -532,4 +532,4 @@ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% \ No newline at end of file +all-keyboards-defaults-% all-keyboards-% all-keymaps-% -- cgit v1.2.3 From a902206735972a15063d8d9852a87041d82d6e7b Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 23 Aug 2016 23:05:35 -0500 Subject: Nightly Prep for Vision build --- keyboards/atomic/keymaps/pvc/keymap.c | 32 +- keyboards/planck/keymaps/pvc/keymap.c | 20 +- keyboards/vision_division/keymaps/default/Makefile | 4 +- keyboards/vision_division/keymaps/default/config.h | 19 +- keyboards/vision_division/keymaps/default/keymap.c | 632 +++++++++++++++++++-- 5 files changed, 652 insertions(+), 55 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index f16ec8a6ec..b02e89d2c7 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -154,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* UPPER * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | + * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| @@ -180,9 +180,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | | ^ | * | + | - | ; | : | _ | ' | " | ` | | XXXXXX . | HOME | + * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | | | & | ! | ~ | / | \ | = | < | > | ? | XXXXXX . | | END | + * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| * | | | | | | | | | | | | | | | * '--------------------------------------------------------------------------------------------------------------------------------------' @@ -191,16 +191,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_LOWER] = { // LOWER { _______, 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_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, - { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, + { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, }, +/* FUNCTION + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | NUM LK | | | | | | | | | | | | | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_FUNCTION] = { // FUNCTION - { KC_NLCK, 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_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS }, - { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE }, + { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, + { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, + { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, }, diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c index 2fc5f0da16..0bb7f0def2 100644 --- a/keyboards/planck/keymaps/pvc/keymap.c +++ b/keyboards/planck/keymaps/pvc/keymap.c @@ -166,9 +166,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * .-----------------------------------------------------------------------------------------------------------. * | | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | ^ | * | + | - | ; | : | _ | ' | " | ` | PG DN | + * | | ^ | * | + | - | / | \ | _ | ' | " | ` | PG DN | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | & | ! | ~ | / | \ | = | < | > | ? | HOME | + * | | | | & | ! | ~ | ; | : | = | < | > | ? | HOME | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| * | | | | | | | | | | | | END | * '-----------------------------------------------------------------------------------------------------------' @@ -176,27 +176,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_LOWER] = { // LOWER { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, KC_PGUP }, - { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, KC_PGDN }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_HOME }, + { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, KC_PGDN }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_HOME }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END }, }, /* FUNCTION * .-----------------------------------------------------------------------------------------------------------. - * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE | + * | NUM LK | F13 | F14 | F15 | F16 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PAUSE | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | CAP LK | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | PRINT | + * | CAP LK | F17 | F18 | F19 | F20 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PRINT | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE | + * | SCR LK | F21 | F22 | F23 | F24 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | LCTRL | LWIN | FN | LALT | UPPER | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV | * '-----------------------------------------------------------------------------------------------------------' */ [LAYER_FUNCTION] = { // FUNCTION - { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS }, - { KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR }, - { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE }, + { KC_NLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS }, + { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR }, + { KC_SLCK, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE }, { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT }, }, diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index 43fee26686..393a9e23a6 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -1,11 +1,11 @@ # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h index c005aa8c5a..34eaaff5b7 100644 --- a/keyboards/vision_division/keymaps/default/config.h +++ b/keyboards/vision_division/keymaps/default/config.h @@ -22,7 +22,7 @@ #define UNUSED_PINS -#define KEYMAP( \ +/*#define KEYMAP( \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ @@ -37,6 +37,23 @@ KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +)*/ + +#define KEYMAP( \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B \ ) \ +KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, KC_NO, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO \ +) #endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 3fddee78b7..b8cef9c759 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -1,64 +1,630 @@ #include "vision_division.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "led.h" +#ifdef AUDIO_ENABLE + #include "audio.h" + #include "song_list.h" +#endif +#define LAYER_QWERTY 0 +#define LAYER_COLEMAK 1 +#define LAYER_DVORAK 2 +#define LAYER_UPPER 3 +#define LAYER_LOWER 4 +#define LAYER_FUNCTION 5 +#define LAYER_MOUSE 6 +#define LAYER_ADJUST 7 +#define MACRO_QWERTY 0 +#define MACRO_COLEMAK 1 +#define MACRO_DVORAK 2 +#define MACRO_UPPER 3 +#define MACRO_LOWER 4 +#define MACRO_FUNCTION 5 +#define MACRO_MOUSE 6 +#define MACRO_TIMBRE_1 7 +#define MACRO_TIMBRE_2 8 +#define MACRO_TIMBRE_3 9 +#define MACRO_TIMBRE_4 10 +#define MACRO_TEMPO_U 11 +#define MACRO_TEMPO_D 12 +#define MACRO_TONE_DEFAULT 13 +#define MACRO_MUSIC_TOGGLE 14 +#define MACRO_AUDIO_TOGGLE 16 +#define MACRO_INC_VOICE 18 +#define MACRO_DEC_VOICE 19 +#define MACRO_BACKLIGHT 20 +#define MACRO_BREATH_TOGGLE 21 +#define MACRO_BREATH_SPEED_INC 23 +#define MACRO_BREATH_SPEED_DEC 24 +#define MACRO_BREATH_DEFAULT 25 + +#define M_QWRTY M(MACRO_QWERTY) +#define M_COLMK M(MACRO_COLEMAK) +#define M_DVORK M(MACRO_DVORAK) +#define M_UPPER M(MACRO_UPPER) +#define M_LOWER M(MACRO_LOWER) +#define M_FUNCT M(MACRO_FUNCTION) +#define M_MOUSE M(MACRO_MOUSE) +#define TIMBR_1 M(MACRO_TIMBRE_1) +#define TIMBR_2 M(MACRO_TIMBRE_2) +#define TIMBR_3 M(MACRO_TIMBRE_3) +#define TIMBR_4 M(MACRO_TIMBRE_4) +#define TMPO_UP M(MACRO_TEMPO_U) +#define TMPO_DN M(MACRO_TEMPO_D) +#define TMPO_DF M(MACRO_TONE_DEFAULT) +#define M_BACKL M(MACRO_BACKLIGHT) +#define M_BRTOG M(MACRO_BREATH_TOGGLE) +#define M_BSPDU M(MACRO_BREATH_SPEED_INC) +#define M_BSPDD M(MACRO_BREATH_SPEED_DEC) +#define M_BDFLT M(MACRO_BREATH_DEFAULT) + + +#define VC_UP M(MACRO_INC_VOICE) +#define VC_DOWN M(MACRO_DEC_VOICE) + + +#define SC_UNDO LCTL(KC_Z) +#define SC_REDO LCTL(KC_Y) +#define SC_CUT LCTL(KC_X) +#define SC_COPY LCTL(KC_C) +#define SC_PSTE LCTL(KC_V) +#define SC_SELA LCTL(KC_A) +#define SC_SAVE LCTL(KC_S) +#define SC_OPEN LCTL(KC_O) +#define SC_ACLS LALT(KC_F4) +#define SC_CCLS LCTL(KC_F4) + +#define OS_SHFT KC_FN0 + +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define ________________ _______, _______ +#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( \ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_A, KC_B, KC_C, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, 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 \ + +KEYMAP( \ + KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ + KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ + KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, 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_ENT, XXXXXXX, XXXXXXX, XXXXXXX, \ + KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, 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_RSFT, XXXXXXX, KC_UP, XXXXXXX, \ + KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, KC_LCTL, KC_LCTL, XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ ) -/* - KC_VOLU, KC_MUTE, KC_VOLU, KC_F24, KC_F20, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 k119, k11A, k11B, k11C, \ - KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, k219, k21A, k21B, k21C, \ - KC_KP_7, KC_KP_8, KC_KP_9, KC_F23, KC_F19, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, k319, k31A, k31B, k31C, \ - KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_F18, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, k419, k41A, k41B, k41C, \ - KC_KP_1, KC_KP_2, KC_KP_3, KC_F22, KC_F17, 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_RSFT, KC_UP, KC_PGDN, k519, k51A, k51B, k51C. \ - KC_KP_0, KC_F21, KC_PDOT, KC_PENT, KC_F16, KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, k619, k61A, k61B, k61C \ - ) //-----, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, -------, +// [LAYER_QWERTY] = { // QWERTY +// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, +// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, +// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, +// { 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_RSFT, KC_UP, KC_PGDN }, +// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +// }, + + +// /* Numeric Max / Homing Normal - Traditional +// * .-----------------------------------. .-----------------------------------. .-----------------_-----------------. .-----------------------------------. .--------------------------. +// * | | | | | | | | | | | | | | | | | | | | | | | | +// * '-----------------------------------' '-----------------------------------' '-----------------------------------' '-----------------------------------' '--------------------------' +// * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------. +// * | | | | | | ESC | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | | | | | | +// * |--------+--------+--------+--------| | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| +// * | | | | | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | | | | | | +// * |--------+--------+--------+ | o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| '--------+--------+--------' +// * | | | | | o | CAPS | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | | +// * |--------+--------+--------+--------| o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---+--------| .--------. +// * | | | | | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX | | | | +// * |--------+--------+--------+ | | -------+ -------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+--------+--------| .--------+--------+--------. +// * | | | | | LCTRL | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | | | | | | +// * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' +// */ + + +// /* QWERTY +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_QWERTY] = { // QWERTY +// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, +// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, +// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, +// { 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_RSFT, KC_UP, KC_PGDN }, +// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +// }, + +// /* COLEMAK +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_COLEMAK] = { // COLEMAK +// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, +// { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, +// { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, +// { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, +// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +// }, + +// /* DVORAK +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_DVORAK] = { // DVORAK +// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, +// { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, +// { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, +// { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, +// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +// }, + +// /* UPPER +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | | | | | | 0 | | RALT | . | ENTER | | | | | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_UPPER] = { // UPPER +// { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, +// { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, +// { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, +// { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, +// { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, +// }, + +// /* LOWER +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | | | | | | | | | | | | | | | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_LOWER] = { // LOWER +// { _______, 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_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, +// { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, +// { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, +// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, +// }, + +// /* FUNCTION +// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. +// * | NUM LK | | | | | | | | | | | | | XXXXXX . | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| +// * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| +// * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | +// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| +// * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | +// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| +// * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | +// * '--------------------------------------------------------------------------------------------------------------------------------------' +// */ + +// [LAYER_FUNCTION] = { // FUNCTION +// { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, +// { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, +// { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, +// { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, +// { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, +// }, + +// #ifdef MOUSEKEY_ENABLE + +// [LAYER_MOUSE] = { // MOUSE +// { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, +// { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, +// { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, +// { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, +// { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, +// }, + +// #endif + +// [LAYER_ADJUST] = { // ADJUST +// { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, +// { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, +// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, +// { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, +// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, +// }, + + +// /* +// [LAYER_EMPTY] = { // LAYER +// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, +// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, +// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, +// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, +// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, +// }, +// */ -*/ }; -const uint16_t PROGMEM fn_actions[] = { +#ifdef AUDIO_ENABLE + +float tone_my_startup[][2] = SONG(ODE_TO_JOY); +float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY); + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); +float tone_music_on[][2] = SONG(DOE_A_DEER); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); +float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); +float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); + +#endif /* AUDIO_ENABLE */ + +void persistant_default_layer_set(uint16_t default_layer) +{ + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; 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; - } + + // MACRODOWN only works in this function + switch(id) + { + + // case MACRO_BREATH_TOGGLE: + // if (record->event.pressed) + // { + // breathing_toggle(); + // } + // break; + + // case MACRO_BREATH_SPEED_INC: + // if (record->event.pressed) + // { + // breathing_speed_inc(1); + // } + // break; + + // case MACRO_BREATH_SPEED_DEC: + // if (record->event.pressed) + // { + // breathing_speed_dec(1); + // } + // break; + + // case MACRO_BREATH_DEFAULT: + // if (record->event.pressed) + // { + // breathing_defaults(); + // } + // break; + + case MACRO_QWERTY: + if (record->event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + layer_on(LAYER_UPPER); + // breathing_speed_set(2); + // breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; + + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(LAYER_LOWER); + // breathing_speed_set(2); + // breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; + + case MACRO_FUNCTION: + if (record->event.pressed) + { + // breathing_speed_set(3); + // breathing_enable(); + layer_on(LAYER_FUNCTION); + } + else + { + // breathing_speed_set(1); + // breathing_self_disable(); + layer_off(LAYER_FUNCTION); + } + break; + +#ifdef MOUSEKEY_ENABLE + + case MACRO_MOUSE: + if (record->event.pressed) + { + layer_invert(LAYER_MOUSE); + } + break; + +#endif /* MOUSEKEY_ENABLE */ + +#ifdef AUDIO_ENABLE + + case MACRO_TIMBRE_1: + if (record->event.pressed) set_timbre(TIMBRE_12); + break; + + case MACRO_TIMBRE_2: + if (record->event.pressed) set_timbre(TIMBRE_25); + break; + + case MACRO_TIMBRE_3: + if (record->event.pressed) set_timbre(TIMBRE_50); + break; + + case MACRO_TIMBRE_4: + if (record->event.pressed) set_timbre(TIMBRE_75); + break; + + case MACRO_TEMPO_U: + if (record->event.pressed) increase_tempo(10); + break; + + case MACRO_TEMPO_D: + if (record->event.pressed) decrease_tempo(10); + break; + + case MACRO_TONE_DEFAULT: + if (record->event.pressed) + { + set_timbre(TIMBRE_DEFAULT); + set_tempo(TEMPO_DEFAULT); + } + break; + +/* + case MACRO_AUDIO_TOGGLE: + if (record->event.pressed) + { + if (is_audio_on()) + { + audio_off(); + } + else + { + audio_on(); + PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); + } + } + break; + + case MACRO_MUSIC_TOGGLE: + if (record->event.pressed) + { + if (IS_LAYER_ON(LAYER_MUSIC)) + { + layer_off(LAYER_MUSIC); + stop_all_notes(); + } + else + { + PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); + layer_on(LAYER_MUSIC); + } + } + break; + case MACRO_INC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; + + case MACRO_DEC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; +*/ + +#endif /* AUDIO_ENABLE */ + +#ifdef BACKLIGHT_ENABLE + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); + } +#endif + + default: + break; + + } return MACRO_NONE; }; -void matrix_init_user(void) { +#ifdef AUDIO_ENABLE + +void matrix_init_user(void) +{ + set_voice(default_voice); + startup_user(); + println("Matrix Init"); +} + +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + + _delay_ms(10); // gets rid of tick + + if (!is_playing_notes()) + { + if ((usb_led & (1< Date: Wed, 24 Aug 2016 10:29:01 +0300 Subject: Fix slight inconsistency When running make from either a keyboard folder or a subproject it runs all keymaps for all subprojects and the selected subproject respectively. Without this fix, the same doesn't happen if your run make clean for example. As it would just provide you with an error message. Now this will work as expected. --- Makefile | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index c8122e5765..f78cca6c6f 100644 --- a/Makefile +++ b/Makefile @@ -262,7 +262,7 @@ define PARSE_KEYBOARD # If there's no matching subproject, we assume it's the default # This will allow you to leave the subproject part of the target out else - $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) + $$(eval $$(call PARSE_SUBPROJECT,)) endif endef @@ -278,12 +278,14 @@ endef define PARSE_SUBPROJECT # If we want to compile the default subproject, then we need to # include the correct makefile to determine the actual name of it - ifeq ($1,defaultsp) + CURRENT_SP := $1 + ifeq ($$(CURRENT_SP),) + CURRENT_SP := defaultsp + endif + ifeq ($$(CURRENT_SP),defaultsp) SUBPROJECT_DEFAULT= $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) CURRENT_SP := $$(SUBPROJECT_DEFAULT) - else - CURRENT_SP := $1 endif # If current subproject is empty (the default was not defined), and we have a list of subproject # then make all of them @@ -314,16 +316,16 @@ define PARSE_SUBPROJECT # Otherwise try to match the keymap from the current folder, or arguments to the make command else ifneq ($$(KEYMAP),) $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP))) + # No matching keymap found, so we assume that the rest of the rule is the target + # If we haven't been able to parse out a subproject, then make all of them + # This is consistent with running make without any arguments from the keyboard + # folder + else ifeq ($1,) + $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + # Otherwise, make all keymaps, again this is consistent with how it works without + # any arguments else - # Otherwise something is wrong with the target - # Try to give as much information as possible of what it it was trying to do - ifeq ($$(CURRENT_SP),) - $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) - else - $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(CURRENT_SP)-$$(RULE)'. Stop.) - endif - # Notice the tab instead of spaces below! - exit 1 + $$(eval $$(call PARSE_ALL_KEYMAPS)) endif else # As earlier mentione,d when allsb is specified, we call our self recursively -- cgit v1.2.3 From 235d47e747465000dc2725acff4796a933c2fcea Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 24 Aug 2016 12:57:32 +0200 Subject: - Updated readme by adding link on kle for each layer --- keyboards/planck/keymaps/dbroqua/readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/planck/keymaps/dbroqua/readme.md b/keyboards/planck/keymaps/dbroqua/readme.md index b5cdb9f65d..777c76abd4 100644 --- a/keyboards/planck/keymaps/dbroqua/readme.md +++ b/keyboards/planck/keymaps/dbroqua/readme.md @@ -3,6 +3,9 @@ ![Layout](layout.png "Dbroqua Keymap") * Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/e77306f9d14cc93fa26123b93b106474 +* Online keyboard layout editor (lower layer): http://www.keyboard-layout-editor.com/#/gists/786e03f6fbd274cb4f4e77a3d67f85fa +* Online keyboard layout editor (raise layer): http://www.keyboard-layout-editor.com/#/gists/2e22c71f6910103c20d595d1caa713d6 +* Online keyboard layout editor (multimedia layer): http://www.keyboard-layout-editor.com/#/gists/132ebf8053508a7a81dfa8e0756edb40 # Programming Instructions: Enter into programming mode and run the following command. -- cgit v1.2.3 From a058ae40e268b34ba5db45f5fd5d557d50fa5437 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 24 Aug 2016 15:39:23 +0200 Subject: quantum: Move qk_ucis_state to process_unicode.c In order to not declare the same variable in multiple objects (which happens when building UCIS-enabled keymap for both the ErgoDox EZ and the ErgoDox Infinity), move the declaration to the .c file, and keep only an extern reference in the header. Many thanks to @fredizzimo for spotting the error in Travis, and suggesting the fix. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 2 ++ quantum/process_keycode/process_unicode.h | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index a1be8d2fc3..06c1694f2e 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -74,6 +74,8 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) { } #ifdef UCIS_ENABLE +qk_ucis_state_t qk_ucis_state; + void qk_ucis_start(void) { qk_ucis_state.count = 0; qk_ucis_state.in_progress = true; diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 85364e8eb3..02ce3dd7e0 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -29,11 +29,13 @@ typedef struct { char *code; } qk_ucis_symbol_t; -struct { +typedef struct { uint8_t count; uint16_t codes[UCIS_MAX_SYMBOL_LENGTH]; bool in_progress:1; -} qk_ucis_state; +} qk_ucis_state_t; + +extern qk_ucis_state_t qk_ucis_state; #define UCIS_TABLE(...) {__VA_ARGS__, {NULL, NULL}} #define UCIS_SYM(name, code) {name, #code} -- cgit v1.2.3 From 7debe7cd777f50ef0adf4d3b4623946232f1eccf Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Wed, 24 Aug 2016 09:26:41 -0600 Subject: Changes based on @fredizzimo review, flashing Infinity details --- keyboards/ergodox/readme.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 304f2b01f2..4730de36f6 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -1,3 +1,15 @@ +# The Easy Way + +If you can find firmware someone else has made that does what you want, that +is the easiest way to customize your ErgoDox. It requires no programming +experience or the setup of a build environment. + +Quickstart: + + - Find and download an [existing firmware](#other-firmware-options) + + - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez) + or [ErgoDox Infinity](#ergodox-infinity) # Customizing Keymaps @@ -98,6 +110,28 @@ for the left and right halves seperately. To flash them: More information on the Infinity firmware is available in the [TMK/chibios for Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md) +### Infinity Master/Two Halves + +The Infinity is two completely independent keyboards, that can connect together. +You have a few options in how you flash the firmware: + +- Flash the left half, rebuild the firmware with "MASTER=right" and then flash + the right half. This allows you to plug in either half directly to the + computer and is what the above instructions do. + +- Flash the left half, then flash the same firmware on the right. This only + works when the left half is plugged directly to the computer and the keymap + is mirrored. It saves the small extra step of rebuilding with + "MASTER=right". + +- The same as the previous one but with "MASTER=right" when you build the + firmware, then flash the same firmware to both halves. You just have to + directly connect the right half to the computer. + +- For minor changes such as changing only the keymap without having updated + any part of the firmware code itself, you can program only the MASTER half. + It is safest to program both halves though. + # Contributing your keymap The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. -- cgit v1.2.3 From 0dfd1712bb22be9fe63b8754eb8fe72675906c6f Mon Sep 17 00:00:00 2001 From: Sean Reifschneider Date: Wed, 24 Aug 2016 09:30:29 -0600 Subject: Making the existing firmware link better --- keyboards/ergodox/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 4730de36f6..b113ca7dd2 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -6,7 +6,8 @@ experience or the setup of a build environment. Quickstart: - - Find and download an [existing firmware](#other-firmware-options) + - Find and download an existing firmware + [from Other Firmware Options](#other-firmware-options) - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez) or [ErgoDox Infinity](#ergodox-infinity) -- cgit v1.2.3 From 5979051de339d0b064aaaeb59948df00aa7c3951 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 24 Aug 2016 21:53:49 +0200 Subject: - Updated kc60.h for 2x 1u backspace (K49) - Added dbroqua layout --- keyboards/kc60/kc60.h | 8 ++- keyboards/kc60/keymaps/dbroqua/keymap.c | 103 +++++++++++++++++++++++++++++++ keyboards/kc60/keymaps/dbroqua/readme.md | 11 ++++ 3 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 keyboards/kc60/keymaps/dbroqua/keymap.c create mode 100644 keyboards/kc60/keymaps/dbroqua/readme.md diff --git a/keyboards/kc60/kc60.h b/keyboards/kc60/kc60.h index 34eab4b2a0..f11d3435c9 100644 --- a/keyboards/kc60/kc60.h +++ b/keyboards/kc60/kc60.h @@ -3,6 +3,8 @@ #include "quantum.h" +// K49 key is for the key at row 1 and column 15 when you split the backspace in 2 1U key. + // This a shortcut to help you visually see your layout. // The first section contains all of the arguements // The second converts the arguments into a multi-dimensional array @@ -11,13 +13,13 @@ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ - K40, K41, K42, K45, K4A, K4B, K4C, K4D \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ ) { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, }, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ - { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \ + { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ } #endif diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c new file mode 100644 index 0000000000..e17827fad9 --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua/keymap.c @@ -0,0 +1,103 @@ +// 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 "kc60.h" + +#define _QWERTY 0 +#define _FNCAPS 1 +#define _FNRIGHTSHIFT 2 + +// Fillers to make layering more clear +#define ______ KC_TRNS +#define XXXXXXX KC_NO + +// Func macro definitions. +#define S_LED FUNC(0) +#define S_LEDI FUNC(1) +#define S_LEDD FUNC(2) + +// Enable these functions using FUNC(n) macro. +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_BACKLIGHT_TOGGLE(), + [1] = ACTION_BACKLIGHT_INCREASE(), + [2] = ACTION_BACKLIGHT_DECREASE() + }; + +/* + * | | | + * | | | + * | | | + * | | | + * | | + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | Bksp| + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Caps/FN1| A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Gui | Alt | Space | AltGr | Left | Down | Right | + * `-----------------------------------------------------------------------------------------' + */ + [0] = KEYMAP( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + LT(_FNCAPS, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ + ), + +/* Layer 1 + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | Psc | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Prev | Stop | Next | + * `-----------------------------------------------------------------------------------------' + */ + [_FNCAPS] = KEYMAP( /* Layer 1 */ + ______, 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_INS, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \ + ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \ + ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \ + ), + +/* Layer 2 + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | PgUp | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Home | PgDown| End | + * `-----------------------------------------------------------------------------------------' + */ + [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \ + ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \ + ), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + return MACRO_NONE; +}; diff --git a/keyboards/kc60/keymaps/dbroqua/readme.md b/keyboards/kc60/keymaps/dbroqua/readme.md new file mode 100644 index 0000000000..b71d10ab04 --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua/readme.md @@ -0,0 +1,11 @@ +# Dbroqua Layout + +* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/24fa7821d4955ec3c76037c8e159a199 +* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37 +* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua make dfu +``` \ No newline at end of file -- cgit v1.2.3 From e6dcb8de8ce1a051b3c34c3e61fac4f2d6af8773 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 24 Aug 2016 22:22:14 +0200 Subject: - Fixed layout for kc60 --- keyboards/kc60/keymaps/default/keymap.c | 2 +- keyboards/kc60/keymaps/sgoodwin/keymap.c | 6 +++--- keyboards/kc60/keymaps/stanleylai/keymap.c | 8 ++++---- keyboards/kc60/keymaps/wigguno/keymap.c | 4 ++-- keyboards/kc60/keymaps/workman-dead/keymap.c | 10 +++++----- keyboards/kc60/keymaps/ws2812/keymap.c | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/keyboards/kc60/keymaps/default/keymap.c b/keyboards/kc60/keymaps/default/keymap.c index 6f8352c695..293ff3ab46 100644 --- a/keyboards/kc60/keymaps/default/keymap.c +++ b/keyboards/kc60/keymaps/default/keymap.c @@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, RESET \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, RESET \ ), }; diff --git a/keyboards/kc60/keymaps/sgoodwin/keymap.c b/keyboards/kc60/keymaps/sgoodwin/keymap.c index 99e95c2326..3192b25142 100644 --- a/keyboards/kc60/keymaps/sgoodwin/keymap.c +++ b/keyboards/kc60/keymaps/sgoodwin/keymap.c @@ -13,21 +13,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ MO(2), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, DF(1) \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, DF(1) \ ), [1] = KEYMAP( /* Basic QWERTY */ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ MO(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, DF(0) \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, DF(0) \ ), [2] = KEYMAP( /* KBP v60-like arrows, media keys, etc */ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, BL_INC, BL_DEC, BL_STEP, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_TRNS, \ KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, DEBUG, RESET, KC_TRNS, KC_NO \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_NO, DEBUG, RESET, KC_TRNS, KC_NO \ ), }; diff --git a/keyboards/kc60/keymaps/stanleylai/keymap.c b/keyboards/kc60/keymaps/stanleylai/keymap.c index 057c73bf4d..212fa88bd0 100644 --- a/keyboards/kc60/keymaps/stanleylai/keymap.c +++ b/keyboards/kc60/keymaps/stanleylai/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ LT(_FL, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, MO(_FL), KC_UP, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI,KC_LEFT, KC_DOWN, KC_RGHT), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI,KC_LEFT, KC_DOWN, KC_RGHT), // Function layer [_FL] = KEYMAP( @@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_MPRV,KC_UP, KC_MNXT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR,KC_SLCK, KC_PAUS, KC_INS, \ KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,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_MUTE,KC_VOLD,KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, LT(_RGBL, KC_PGUP),\ - KC_TRNS,KC_TRNS,KC_TRNS, KC_MPLY, KC_TRNS,KC_HOME, KC_PGDN, KC_END), + KC_TRNS,KC_TRNS,KC_TRNS, KC_MPLY, KC_NO, KC_TRNS,KC_HOME, KC_PGDN, KC_END), // RGB Layer [_RGBL] = KEYMAP( @@ -39,13 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TRNS,KC_NO, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS), #else 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, 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, 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, BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS), #endif }; diff --git a/keyboards/kc60/keymaps/wigguno/keymap.c b/keyboards/kc60/keymaps/wigguno/keymap.c index 50b1d0f981..dca2826eb1 100644 --- a/keyboards/kc60/keymaps/wigguno/keymap.c +++ b/keyboards/kc60/keymaps/wigguno/keymap.c @@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, MO(1), KC_RGUI, KC_RCTL \ ), /* @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, \ - RESET, KC_TRNS, KC_TRNS, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + RESET, KC_TRNS, KC_TRNS, BL_TOGG, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), }; diff --git a/keyboards/kc60/keymaps/workman-dead/keymap.c b/keyboards/kc60/keymaps/workman-dead/keymap.c index 103adeef61..9786e37d8c 100644 --- a/keyboards/kc60/keymaps/workman-dead/keymap.c +++ b/keyboards/kc60/keymaps/workman-dead/keymap.c @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \ KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), // QWERTY /* @@ -77,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \ KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN), // dead key layer /* @@ -98,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \ _______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \ _______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_RALT, KC_RGUI, KC_RCTL, _______), + KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, _______), // function layer /* @@ -119,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \ KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \ KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_RALT, KC_RGUI, KC_RCTL, RESET), + KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, RESET), // mouse layer /* @@ -140,7 +140,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, KC_BTN1, _______, _______, _______, _______), + _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) diff --git a/keyboards/kc60/keymaps/ws2812/keymap.c b/keyboards/kc60/keymaps/ws2812/keymap.c index 1c0574df09..ae11ebf91c 100644 --- a/keyboards/kc60/keymaps/ws2812/keymap.c +++ b/keyboards/kc60/keymaps/ws2812/keymap.c @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, MO(_FL), KC_RCTL), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT,KC_RGUI, MO(_FL), KC_RCTL), /* Keymap _FL: Function Layer * ,-----------------------------------------------------------. @@ -53,13 +53,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, RESET), #else KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, RESET), #endif }; -- cgit v1.2.3 From f512179e66e4d4dfbcc92c6ba1aaa1b6cf1ef12b Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 24 Aug 2016 13:17:01 +0200 Subject: ergodox: Update algernon's keymap to v1.6 Major changes include: Base layer changes ------------------ * The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`. * The `:;` and `-_` keys are now available on the base layer, on their **ADORE** location, too, just below `[{(`/`]})`. * The `Apps` key has been replaced by `F12`. * The `-`/`_` is no longer a tap-dance key. ADORE layer changes ------------------- * Adjustments were made to the **ADORE** layer, to separate some inconvenient combinations. Miscellaneous changes --------------------- * `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. * The mouse acceleration keys on the **Navigation and Media* layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. * When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. Heatmap ------- * The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off. * The heatmap generator received a lot of updates. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/Makefile | 9 +- .../keymaps/algernon/images/adore-layer.png | Bin 93748 -> 93893 bytes .../ergodox/keymaps/algernon/images/base-layer.png | Bin 95222 -> 95204 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 494 +++++++----------- keyboards/ergodox/keymaps/algernon/readme.md | 67 ++- .../algernon/tools/heatmap-adore-layout.json | 533 -------------------- .../algernon/tools/heatmap-base-layout.json | 533 -------------------- .../algernon/tools/heatmap-layout.ADORE.json | 553 +++++++++++++++++++++ .../algernon/tools/heatmap-layout.Dvorak.json | 542 ++++++++++++++++++++ .../keymaps/algernon/tools/log-to-heatmap.py | 368 +++++++++----- 10 files changed, 1564 insertions(+), 1535 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json delete mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json create mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json create mode 100644 keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile index 00194857ac..7c2b3ad97c 100644 --- a/keyboards/ergodox/keymaps/algernon/Makefile +++ b/keyboards/ergodox/keymaps/algernon/Makefile @@ -1,22 +1,23 @@ BOOTMAGIC_ENABLE=no COMMAND_ENABLE=no SLEEP_LED_ENABLE=no -UNICODE_ENABLE=no FORCE_NKRO ?= yes DEBUG_ENABLE = no CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes KEYLOGGER_ENABLE ?= yes +UCIS_ENABLE = yes +MOUSEKEY_ENABLE ?= yes -ADORE_AUTOLOG ?= no +AUTOLOG_ENABLE ?= no ifeq (${FORCE_NKRO},yes) OPT_DEFS += -DFORCE_NKRO endif -ifeq (${ADORE_AUTOLOG},yes) +ifeq (${AUTOLOG_ENABLE},yes) KEYLOGGER_ENABLE = yes -OPT_DEFS += -DADORE_AUTOLOG +OPT_DEFS += -DAUTOLOG_ENABLE endif ifeq (${KEYLOGGER_ENABLE},yes) diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index 44ad8a1eb7..3d0a5fb20c 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png index da159fbe2e..7ea57aae38 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 144030e2e9..9f476d8a6b 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -2,6 +2,7 @@ * algernon's ErgoDox EZ layout, please see the readme.md file! */ +#include #include "ergodox.h" #include "led.h" #include "debug.h" @@ -33,7 +34,6 @@ enum { // Buttons that do extra stuff A_GUI, A_PLVR, - A_ESC, A_MPN, // Function / number keys @@ -47,7 +47,6 @@ enum { KF_8, KF_9, KF_10, - KF_11, // =, F11 // Application select keys APP_SLK, // Slack @@ -62,6 +61,11 @@ enum { A_MDL, A_MDR, + // Mouse acceleration + A_ACL0, + A_ACL1, + A_ACL2, + // Hungarian layer keys HU_AA, // Á HU_OO, // Ó @@ -89,7 +93,6 @@ enum { enum { CT_CLN = 0, - CT_MNS, CT_TA, CT_LBP, CT_RBP @@ -102,7 +105,11 @@ uint16_t gui_timer = 0; uint16_t kf_timers[12]; #if KEYLOGGER_ENABLE +# ifdef AUTOLOG_ENABLE +bool log_enable = true; +# else bool log_enable = false; +# endif #endif bool time_travel = false; @@ -114,12 +121,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Next/Prev | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | Next/Prev | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | F12 | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | ~ | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ | + * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * |-----------+------+------+------+------+------| : | | - |------+------+------+------+------+-----------| * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | : | | - | | | | | @@ -135,21 +142,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( // left hand M(A_MPN) ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP) ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_CLN) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) + ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_F12 ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_MINS ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL ,KC_LEAD @@ -159,13 +166,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Adore layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Play/Pause| 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | Play/Pause| 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | F12 | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | `~ | X | W | K | L | M | ( | | ) | F | H | C | P | Y | \ | + * | `~ | Y | W | G | L | M | ( | | ) | F | H | C | P | X | \ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Z | Q | ' | , | . | : | | - | B | G | V | J | / | | + * | | Z | Q | ' | , | . | : | | - | B | K | V | J | / | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | | | | | | | | * `-----------------------------------' `-----------------------------------' @@ -180,20 +187,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [ADORE] = KEYMAP( // left hand KC_MPLY ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,KC_GRV ,KC_X ,KC_W ,KC_K ,KC_L ,KC_M ,TD(CT_LBP) +,KC_GRV ,KC_Y ,KC_W ,KC_G ,KC_L ,KC_M ,TD(CT_LBP) ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U ,KC_NO ,KC_Z ,KC_Q ,KC_QUOT,KC_COMM,KC_DOT ,TD(CT_CLN) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,F(F_ALT),F(F_GUI) ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) + ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_F12 ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_X ,KC_BSLS ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,TD(CT_MNS),KC_B ,KC_G ,KC_V ,KC_J ,KC_SLSH ,KC_NO + ,KC_MINS ,KC_B ,KC_K ,KC_V ,KC_J ,KC_SLSH ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL @@ -363,14 +370,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [NMDIA] = KEYMAP( // left hand - KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) -,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO -,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO + M(A_ACL0) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) +,M(A_ACL1) ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO +,M(A_ACL2) ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_MUTE ,KC_VOLU ,KC_VOLD - ,KC_SPC,KC_ENTER,M(A_ESC) + ,KC_SPC,KC_ENTER,KC_ESC // right hand ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO @@ -439,7 +446,7 @@ const uint16_t PROGMEM fn_actions[] = { ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) }; -void toggle_steno(int pressed) +static void toggle_steno(int pressed) { uint8_t layer = biton32(layer_state); @@ -462,7 +469,7 @@ void toggle_steno(int pressed) } } -macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) +static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) { uint8_t need_shift = 0; uint8_t hold_shift = 0; @@ -507,46 +514,43 @@ macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) return MACRO_NONE; } -void ang_handle_kf (keyrecord_t *record, uint8_t id) +static bool from_appsel; + +static void ang_handle_kf (keyrecord_t *record, uint8_t id) { uint8_t code = id - KF_1; if (record->event.pressed) { kf_timers[code] = timer_read (); } else { - uint8_t kc; + uint8_t kc_base; - if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { + if (from_appsel) { + from_appsel = false; + return; + } + + if (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM) { // Long press - kc = KC_F1 + code; + kc_base = KC_F1; } else { - if (id == KF_11) - kc = KC_EQL; - else - kc = KC_1 + code; + kc_base = KC_1; } + kf_timers[code] = 0; + code += kc_base; - register_code (kc); - unregister_code (kc); + register_code (code); + unregister_code (code); } } +static struct { + uint8_t idx; +} m_accel_state; + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { - case A_ESC: - if (record->event.pressed) { - if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { - clear_oneshot_mods (); - } else { - register_code (KC_ESC); - } - layer_off (HUN); - } else { - unregister_code (KC_ESC); - } - break; - case A_MPN: if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || @@ -588,6 +592,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case HU_UEE: return ang_do_hun (record, KC_EQL, KC_U); +#if MOUSEKEY_ENABLE /* Mouse movement */ case A_MUL: if (record->event.pressed) { @@ -633,6 +638,24 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) mousekey_send(); break; + case A_ACL0 ... A_ACL2: + if (record->event.pressed) { + uint8_t idx = id - A_ACL0; + if (m_accel_state.idx == id) { + mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); + m_accel_state.idx = 0; + } else { + if (m_accel_state.idx) { + mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); + m_accel_state.idx = 0; + } + mousekey_on(KC_ACL0 + idx); + m_accel_state.idx = id; + } + } + break; +#endif + /* Plover base */ case A_PLVR: toggle_steno(record->event.pressed); @@ -663,22 +686,34 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case APP_SLK: + from_appsel = true; return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); case APP_EMCS: + from_appsel = true; return MACRODOWN(T(G), T(N), T(U), T(SPC), T(E), T(M), T(A), T(C), T(S), T(SPC), T(2), T(4), T(ENT), END); case APP_TERM: - return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); + from_appsel = true; + if (!record->event.pressed) { + register_code(KC_ESC); + unregister_code(KC_ESC); + wait_ms(TAPPING_TERM + 25); + register_code(KC_DEL); + unregister_code(KC_DEL); + } + break; case APP_CHRM: + from_appsel = true; return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); case APP_MSIC: + from_appsel = true; return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); /* Function keys */ - case KF_1 ... KF_11: + case KF_1 ... KF_10: ang_handle_kf (record, id); break; } @@ -686,12 +721,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; -uint8_t is_adore = 0; +static uint8_t is_adore = 0; // Runs just one time when the keyboard initializes. void matrix_init_user(void) { uint8_t dl; + set_unicode_input_mode(UC_LNX); + ergodox_led_all_on(); for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { ergodox_led_all_set (i); @@ -709,120 +746,38 @@ void matrix_init_user(void) { dl = eeconfig_read_default_layer (); if (dl == (1UL << ADORE)) { is_adore = 1; -#if ADORE_AUTOLOG - log_enable = true; -#endif } }; LEADER_EXTERNS(); -void ang_do_unicode (void) { - register_code (KC_RCTL); - register_code (KC_RSFT); - register_code (KC_U); - unregister_code (KC_U); - unregister_code (KC_RSFT); - unregister_code (KC_RCTL); - wait_ms (100); -} +static void ang_tap (uint8_t code, ...) { + uint8_t kc = code; + va_list ap; -void ang_tap (uint16_t codes[]) { - for (int i = 0; codes[i] != 0; i++) { - register_code (codes[i]); - unregister_code (codes[i]); - wait_ms (50); - } + va_start(ap, code); + + do { + register_code(kc); + unregister_code(kc); + wait_ms(50); + kc = va_arg(ap, int); + } while (kc != 0); + va_end(ap); } #define TAP_ONCE(code) \ register_code (code); \ unregister_code (code) -void ang_tap_dance_bp_finished (qk_tap_dance_state_t *state, void *user_data) { - bool left, parens; - - if (state->count > 2) { - state->count = 0; - return; - } - - if (state->keycode == TD(CT_LBP)) - left = true; - else - left = false; - - if (state->count == 1) - parens = false; - else - parens = true; - - if (parens) { - register_code (KC_RSFT); - if (left) { - TAP_ONCE(KC_9); - } else { - TAP_ONCE(KC_0); - } - unregister_code (KC_RSFT); - } else { - if (left) { - TAP_ONCE (KC_LBRC); - } else { - TAP_ONCE (KC_RBRC); - } - } -} - -void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - } else if (state->count == 2) { - register_code (KC_SCLN); - } -} - -void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_SCLN); - unregister_code (KC_RSFT); - } else if (state->count == 2) { - unregister_code (KC_SCLN); - } -} - -void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_MINS); - } else if (state->count == 2) { - register_code (KC_RSFT); - register_code (KC_MINS); - } -} - -void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_MINS); - } else if (state->count == 2) { - unregister_code (KC_RSFT); - unregister_code (KC_MINS); - } -} - typedef struct { bool layer_toggle; bool sticky; - bool finished_once; } td_ta_state_t; -void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { +static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { td_ta_state_t *td_ta = (td_ta_state_t *) user_data; - if (td_ta->finished_once) { - return; - } - if (td_ta->sticky) { td_ta->sticky = false; td_ta->layer_toggle = false; @@ -830,7 +785,6 @@ void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { return; } - td_ta->finished_once = true; if (state->count == 1 && !state->pressed) { register_code (KC_TAB); td_ta->sticky = false; @@ -842,35 +796,29 @@ void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { } } -void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { +static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { td_ta_state_t *td_ta = (td_ta_state_t *) user_data; if (!td_ta->layer_toggle) unregister_code (KC_TAB); if (!td_ta->sticky) layer_off (ARRW); - - td_ta->finished_once = false; } qk_tap_dance_action_t tap_dance_actions[] = { - [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) - ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) + [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN) ,[CT_TA] = { .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, - .user_data = (void *)&((td_ta_state_t) { false, false, false }) + .user_data = (void *)&((td_ta_state_t) { false, false }) } - ,[CT_LBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished) - ,[CT_RBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished) + ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN) + ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN) }; -static uint16_t uni[32]; -static uint8_t unicnt; -static bool unimagic = false; - // Runs constantly in the background, in a loop. void matrix_scan_user(void) { uint8_t layer = biton32(layer_state); + bool is_arrow = false; if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) unregister_code (KC_LGUI); @@ -893,13 +841,19 @@ void matrix_scan_user(void) { ergodox_right_led_2_set (LED_BRIGHTNESS_HI); } + if (layer_state & (1UL << ARRW)) { + ergodox_right_led_1_on (); + ergodox_right_led_3_on (); + is_arrow = true; + } + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { ergodox_right_led_1_set (LED_BRIGHTNESS_HI); ergodox_right_led_1_on (); } else { ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != NMDIA && layer != PLVR && layer != ADORE) + if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow) ergodox_right_led_1_off (); } @@ -919,7 +873,7 @@ void matrix_scan_user(void) { ergodox_right_led_3_on (); } else { ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != HUN && layer != PLVR && layer != ADORE) + if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow) ergodox_right_led_3_off (); } @@ -936,20 +890,17 @@ void matrix_scan_user(void) { } #endif + SEQ_ONE_KEY (KC_Q) { + register_code16 (LCTL(KC_1)); + unregister_code16 (LCTL(KC_1)); + } + SEQ_ONE_KEY (KC_T) { time_travel = !time_travel; } SEQ_ONE_KEY (KC_U) { - ang_do_unicode (); - } - - SEQ_TWO_KEYS (KC_LEAD, KC_U) { - unicnt = 0; - unimagic = true; - register_code(KC_RSFT); - TAP_ONCE(KC_U); - unregister_code(KC_RSFT); + qk_ucis_start(); } SEQ_ONE_KEY (KC_V) { @@ -958,25 +909,23 @@ void matrix_scan_user(void) { SEQ_ONE_KEY (KC_L) { /* λ */ - ang_do_unicode (); - - uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; - ang_tap (codes); + unicode_input_start(); + register_hex(0x03bb); + unicode_input_finish(); } SEQ_ONE_KEY (KC_Y) { - uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; - ang_tap (codes); + ang_tap (KC_BSLS, KC_O, KC_SLSH, 0); } SEQ_ONE_KEY (KC_S) { - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + unicode_input_start(); register_hex(0xaf); unicode_input_finish(); TAP_ONCE (KC_BSLS); register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); - ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); + unicode_input_start (); register_hex(0x30c4); unicode_input_finish(); register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); TAP_ONCE (KC_SLSH); - ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); + unicode_input_start (); register_hex(0xaf); unicode_input_finish(); } SEQ_TWO_KEYS (KC_W, KC_M) { @@ -987,8 +936,7 @@ void matrix_scan_user(void) { wait_ms (1000); - uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; - ang_tap (codes); + ang_tap (KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0); register_code (KC_LGUI); register_code (KC_UP); unregister_code (KC_UP); @@ -1013,13 +961,7 @@ void matrix_scan_user(void) { ergodox_right_led_2_off (); wait_ms (100); ergodox_right_led_1_off (); -#if ADORE_AUTOLOG - log_enable = true; -#endif } else { -#if ADORE_AUTOLOG - log_enable = false; -#endif is_adore = 0; default_layer_and (0); default_layer_or (1UL << BASE); @@ -1043,140 +985,38 @@ void matrix_scan_user(void) { static uint16_t last4[4]; -bool is_uni_seq(char *seq) { - uint8_t i; - - for (i = 0; seq[i]; i++) { - uint16_t code; - if (('1' <= seq[i]) && (seq[i] <= '9')) - code = seq[i] - '1' + KC_1; - else if (seq[i] == '0') - code = KC_0; - else - code = seq[i] - 'a' + KC_A; - - if (i > unicnt) - return false; - if (uni[i] != code) - return false; - } - - if (uni[i] == KC_ENT || uni[i] == KC_SPC) - return true; - - return false; -} - -uint16_t hex_to_keycode(uint8_t hex) -{ - if (hex == 0x0) { - return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -void register_hex(uint16_t hex) { - bool leading_zeros = true; - - for(int i = 3; i >= 0; i--) { - uint8_t digit = ((hex >> (i*4)) & 0xF); - if (digit != 0) - leading_zeros = false; - else if (leading_zeros) - continue; - register_code(hex_to_keycode(digit)); - unregister_code(hex_to_keycode(digit)); - wait_ms(10); - } -} - -typedef struct { - char *symbol; - uint16_t codes[4]; -} qk_ucis_symbol_t; - -static qk_ucis_symbol_t ucis_symbol_table[] = { - {"poop", {0x1, 0xf4a9, 0}}, - {"rofl", {0x1, 0xf923, 0}}, - {"kiss", {0x1, 0xf619, 0}}, - {"snowman", {0x2603, 0}}, - {NULL, {}} -}; - -bool process_record_ucis (uint16_t keycode, keyrecord_t *record) { - uint8_t i; - - if (!unimagic) - return true; - - if (!record->event.pressed) - return true; - - uni[unicnt] = keycode; - unicnt++; - - if (keycode == KC_BSPC) { - if (unicnt >= 2) { - unicnt-= 2; - return true; - } else { - unicnt--; - return false; - } - } - - if (keycode == KC_ENT || keycode == KC_SPC) { - bool symbol_found = false; - - for (i = unicnt; i > 0; i--) { - register_code (KC_BSPC); - unregister_code (KC_BSPC); - wait_ms(10); - } - - ang_do_unicode(); - wait_ms(10); - for (i = 0; ucis_symbol_table[i].symbol; i++) { - if (is_uni_seq (ucis_symbol_table[i].symbol)) { - symbol_found = true; - for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) { - register_hex(ucis_symbol_table[i].codes[j]); - } - break; - } - } - if (!symbol_found) { - for (i = 0; i < unicnt - 1; i++) { - uint8_t code; - - if (uni[i] > KF_1) - code = uni[i] - KF_1 + KC_1; - else - code = uni[i]; - TAP_ONCE(code); - wait_ms (10); - } - } - - unimagic = false; - return true; - } - return true; -} +const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE +( + UCIS_SYM("poop", 0x1f4a9), + UCIS_SYM("rofl", 0x1f923), + UCIS_SYM("kiss", 0x1f619), + UCIS_SYM("snowman", 0x2603), + UCIS_SYM("coffee", 0x2615), + UCIS_SYM("heart", 0x2764), + UCIS_SYM("bolt", 0x26a1) +); bool process_record_user (uint16_t keycode, keyrecord_t *record) { #if KEYLOGGER_ENABLE if (log_enable) { - xprintf ("KL: col=%d, row=%d\n", record->event.key.col, - record->event.key.row); + xprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col, + record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak"); } #endif - if (!process_record_ucis (keycode, record)) - return false; + if (keycode == KC_ESC && record->event.pressed) { + bool queue = true; + + if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { + clear_oneshot_mods (); + queue = false; + } + if (layer_state & (1UL<event.pressed) { uint8_t p; @@ -1188,15 +1028,13 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) { last4[3] = keycode; if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { - uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; - ang_tap (codes); + ang_tap (KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0); register_code (KC_RSFT); register_code (KC_EQL); unregister_code (KC_EQL); unregister_code (KC_RSFT); - uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0}; - ang_tap (codes2); + ang_tap (KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0); return false; } @@ -1204,3 +1042,17 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) { return true; } + +void qk_ucis_symbol_fallback (void) { + for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) { + uint8_t code; + + if (qk_ucis_state.codes[i] > KF_1) + code = qk_ucis_state.codes[i] - KF_1 + KC_1; + else + code = qk_ucis_state.codes[i]; + register_code(code); + unregister_code(code); + wait_ms (10); + } +} diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index 26dfddbe6a..5e7adb3320 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -3,11 +3,15 @@ algernon's layout ======================= -This is an unconventional layout for the ErgoDox EZ. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox]. +This is an unconventional layout for the [ErgoDox EZ][ez]. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox]. + [ez]: https://ergodox-ez.com/ [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ -Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary. +Some of the things in the layout only work when one uses [Spacemacs][spacemacs] and [GNOME][gnome] under Linux. Your mileage may vary. + + [spacemacs]: http://spacemacs.org/ + [gnome]: https://www.gnome.org/ ## Table of Contents @@ -40,10 +44,10 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest * The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. * The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle. -* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. +* When holding the `Tab`/**Arrow** key, the arrow layer activates while the key is held. Tapping the key produces the normal, `Tab` key. Double-tapping it toggles the **Arrow** layer on until a third tap. * Tapping the `:` key once yields `:`, tapping it twice yields `;`. +* Tapping the `[{(`/`)}]` keys once yields `[` (or `{` when shifted), tapping them twice yields `(`. * The **Lead** key allows me to type in a sequence of keys, and trigger some actions: - - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that does this. - `LEAD l` uses the unicode input method to enter a `λ`. - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` - `LEAD y` types `\o/`. @@ -52,7 +56,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest - `LEAD v` prints the firmware version, the keyboard and the keymap. - `LEAD d` toggles logging keypress positions to the HID console. - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. - - `LEAD LEAD u` enters the [Unicode symbol input][#unicode-symbol-input] mode. + - `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode. ## ADORE layer @@ -91,6 +95,7 @@ For the layers, the following rules apply: * When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. * When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. * When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. +* When the **ARROW** layer is active, the *red* and *blue* ones are on. * For the [Steno layer](#steno-layer), all LEDs will be turned on. Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. @@ -116,7 +121,7 @@ This is an experimental feature, and may or may not work reliably. When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too. -Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, simply point `tools/log-to-heatmap.py` to a base layout file (one is included in the `tools/` directory), and the key position log. The latter one can create by running `hid-listen`, and redirecting its output to a file. +Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, either pipe the output of `hid_listen` into it, or pipe it an already saved log, and it will save the results into files in an output directory (given on the command-line). See the output of `tools/log-to-heatmap.py --help` for more information. [kle]: http://www.keyboard-layout-editor.com/ @@ -151,7 +156,35 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the # Changelog -## v1.5 - 2016-08-12 +## v1.6 + +*2016-08-24* + +### Base layer changes + +* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`. +* The `:;` and `-_` keys are now available on the base layer, on their [ADORE](#adore-layer) location, too, just below `[{(`/`]})`. +* The `Apps` key has been replaced by `F12`. +* The `-`/`_` is no longer a tap-dance key. + +### ADORE layer changes + +* Adjustments were made to the [ADORE](#adore-layer) layer, to separate some inconvenient combinations. + +### Miscellaneous changes + +* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. +* The mouse acceleration keys on the [Navigation and Media](#navigation-and-media-layer) layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. +* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. + +### Heatmap + +* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off. +* The heatmap generator received a lot of updates. + +## v1.5 + +*2016-08-12* * The **1HAND** layer has been removed. * A `Delete` key is now available on the right thumb cluster. @@ -161,7 +194,9 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the * On the **ARROW** layer, `Backspace` has been replaced by `Enter`. * There is some experimental support for entering Unicode symbols. -## v1.4 - 2016-07-29 +## v1.4 + +*2016-07-29* * When toggling the key logging on or off, the LEDs will do a little dance. * The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. @@ -169,14 +204,18 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the * The `-`/`_` key was turned into a tap-dance key too. * There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. -## v1.3 - 2016-07-06 +## v1.3 + +*2016-07-06* * Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. * The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. * The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. * Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. -## v1.2 - 2016-06-22 +## v1.2 + +*2016-06-22* * The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). * The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. @@ -187,7 +226,9 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the * On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. * The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. -## v1.1 - 2016-06-14 +## v1.1 + +*2016-06-14* * The keyboard starts in NKRO mode, bootmagic and other things are disabled. * A [Steno](#steno-layer) layer was added, to be used with Plover. @@ -201,7 +242,9 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the - `:` now inputs `;` when shifted. * `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. -## v1.0 - 2016-05-26 +## v1.0 + +*2016-05-26* Initial version. diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json deleted file mode 100644 index 544f61ce87..0000000000 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-adore-layout.json +++ /dev/null @@ -1,533 +0,0 @@ -[ - { - "backcolor": "#ffffff", - "name": "ErgoDox - algernon's layout: Heatmap", - "author": "Gergely Nagy ", - "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea", - "pcb": true, - "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" - }, - [ - { - "x": 3.5, - "c": "#a7d0db", - "fa": [ - 0, - 0, - 2 - ] - }, - "#\n3\nF3", - { - "x": 10.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4, - "fa": [ - 0, - 0, - 2 - ] - }, - "*\n8\nF8" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "@\n2\nF2", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "$\n4\nF4", - { - "x": 8.5 - }, - "&\n7\nF7", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "(\n9\nF9" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "%\n5\nF5", - { - "c": "#f9cd31", - "a": 7, - "f": 2 - }, - "STENO", - { - "x": 4.5, - "f": 6 - }, - "", - { - "c": "#7adabd", - "a": 4, - "f": 3, - "fa": [ - 0, - 0, - 2 - ] - }, - "^\n6\nF6" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "f": 3, - "w": 1.5 - }, - "\n\n~\n`", - { - "t": "#0d0d0b" - }, - "!\n1\nF1", - { - "x": 14.5 - }, - ")\n0\nF10", - { - "a": 7, - "w": 1.5 - }, - "F11" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "L", - { - "x": 10.5 - }, - "C" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", - "a": 4 - }, - ">\n.", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "a": 6 - }, - "W", - { - "x": 8.5 - }, - "H", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "P" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "M", - { - "c": "#93c9b7", - "a": 4, - "h": 1.5 - }, - "{\n[", - { - "x": 4.5, - "h": 1.5 - }, - "}\n]", - { - "c": "#7adabd", - "a": 6 - }, - "F" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", - "f": 6, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "a": 4, - "f": 3 - }, - "<\n,", - { - "x": 14.5, - "a": 6 - }, - "Y", - { - "a": 4, - "w": 1.5 - }, - "|\n\\" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "E", - { - "x": 10.5 - }, - "T" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "O", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "n": true - }, - "I", - { - "x": 8.5, - "n": true - }, - "R", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "N" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "U", - { - "x": 6.5 - }, - "D" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", - "fa": [ - 6 - ], - "w": 1.5 - }, - "\n\nTab", - { - "f": 3 - }, - "A", - { - "x": 14.5, - "f": 3 - }, - "S", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6 - ], - "w": 1.5 - }, - "+\n=" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#93c9b7", - "t": "#000000", - "a": 7, - "h": 1.5 - }, - "(", - { - "x": 4.5, - "h": 1.5 - }, - ")" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#a7d0db", - "a": 4, - "f": 3 - }, - "\"\n'", - { - "x": 10.5 - }, - "V" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "Z", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "K", - { - "x": 8.5 - }, - "G", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "J" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "X", - { - "x": 6.5 - }, - "B" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "f": 9, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "t": "#0d0d0b", - "a": 4, - "f": 3 - }, - "?\n/", - { - "x": 14.5, - "a": 6 - }, - "Q", - { - "c": "#ffb07b", - "t": "#000000", - "f": 9, - "w": 1.5 - }, - "" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#d9dae0", - "g": true, - "a": 7, - "f": 3 - }, - "", - { - "x": 10.5 - }, - "" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "", - { - "x": 1, - "c": "#d4872a", - "g": false, - "a": 5 - }, - ";\n:", - { - "x": 8.5 - }, - "_\n-", - { - "x": 1, - "c": "#d9dae0", - "g": true, - "a": 7 - }, - "" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "", - {}, - "", - { - "x": 14.5 - }, - "", - {}, - "" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#f9cd31", - "g": false - }, - "Alt", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 9 - ] - }, - "\n\n\n" - ], - [ - { - "c": "#d4872a", - "a": 7, - "f": 9, - "h": 2 - }, - "", - { - "h": 2 - }, - "", - { - "c": "#f9cd31", - "f": 3 - }, - "Ctrl" - ], - [ - { - "x": 2, - "c": "#e26757" - }, - "ESC" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "MEDIA", - {}, - "1HAND" - ], - [ - { - "x": -3 - }, - "LEAD", - { - "c": "#d4872a", - "f": 9, - "h": 2 - }, - "", - { - "f": 3, - "h": 2 - }, - "SPC" - ], - [ - { - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "HUN" - ] -] diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json deleted file mode 100644 index 148bb1f23b..0000000000 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-base-layout.json +++ /dev/null @@ -1,533 +0,0 @@ -[ - { - "backcolor": "#ffffff", - "name": "ErgoDox - algernon's layout: Heatmap", - "author": "Gergely Nagy ", - "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", - "switchMount": "cherry", - "switchBrand": "gateron", - "switchType": "KS-3-Tea", - "pcb": true, - "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" - }, - [ - { - "x": 3.5, - "c": "#a7d0db", - "fa": [ - 0, - 0, - 2 - ] - }, - "#\n3\nF3", - { - "x": 10.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4, - "fa": [ - 0, - 0, - 2 - ] - }, - "*\n8\nF8" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "@\n2\nF2", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "$\n4\nF4", - { - "x": 8.5 - }, - "&\n7\nF7", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "(\n9\nF9" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "%\n5\nF5", - { - "c": "#f9cd31", - "a": 7, - "f": 2 - }, - "STENO", - { - "x": 4.5, - "f": 6 - }, - "", - { - "c": "#7adabd", - "a": 4, - "f": 3, - "fa": [ - 0, - 0, - 2 - ] - }, - "^\n6\nF6" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "f": 3, - "w": 1.5 - }, - "\n\n~\n`", - { - "t": "#0d0d0b" - }, - "!\n1\nF1", - { - "x": 14.5 - }, - ")\n0\nF10", - { - "a": 7, - "w": 1.5 - }, - "F11" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 4 - }, - ">\n.", - { - "x": 10.5, - "a": 6 - }, - "C" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", - "a": 4 - }, - "<\n,", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "a": 6 - }, - "P", - { - "x": 8.5 - }, - "G", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "R" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "Y", - { - "c": "#93c9b7", - "a": 4, - "h": 1.5 - }, - "{\n[", - { - "x": 4.5, - "h": 1.5 - }, - "}\n]", - { - "c": "#7adabd", - "a": 6 - }, - "F" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", - "f": 6, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "a": 4, - "f": 3 - }, - "\"\n'", - { - "x": 14.5, - "a": 6 - }, - "L", - { - "a": 4, - "w": 1.5 - }, - "|\n\\" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#a7d0db", - "t": "#000000", - "a": 6 - }, - "E", - { - "x": 10.5 - }, - "T" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "O", - { - "x": 1, - "c": "#7adabd", - "t": "#000000", - "n": true - }, - "U", - { - "x": 8.5, - "n": true - }, - "H", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "N" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "I", - { - "x": 6.5 - }, - "D" - ], - [ - { - "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", - "fa": [ - 6 - ], - "w": 1.5 - }, - "\n\nTab", - { - "f": 3 - }, - "A", - { - "x": 14.5, - "f": 3 - }, - "S", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6 - ], - "w": 1.5 - }, - "+\n=" - ], - [ - { - "y": -0.625, - "x": 6.5, - "c": "#93c9b7", - "t": "#000000", - "a": 7, - "h": 1.5 - }, - "(", - { - "x": 4.5, - "h": 1.5 - }, - ")" - ], - [ - { - "y": -0.75, - "x": 3.5, - "c": "#a7d0db", - "a": 6 - }, - "J", - { - "x": 10.5 - }, - "W" - ], - [ - { - "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "Q", - { - "x": 1, - "c": "#7adabd", - "t": "#000000" - }, - "K", - { - "x": 8.5 - }, - "M", - { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" - }, - "V" - ], - [ - { - "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" - }, - "X", - { - "x": 6.5 - }, - "B" - ], - [ - { - "y": -0.875, - "c": "#ffb07b", - "f": 9, - "w": 1.5 - }, - "\n\n", - { - "c": "#ffb2d2", - "t": "#0d0d0b", - "a": 4, - "f": 3 - }, - "?\n/", - { - "x": 14.5, - "a": 6 - }, - "Z", - { - "c": "#ffb07b", - "t": "#000000", - "f": 9, - "w": 1.5 - }, - "" - ], - [ - { - "y": -0.375, - "x": 3.5, - "c": "#d9dae0", - "g": true, - "a": 7, - "f": 3 - }, - "", - { - "x": 10.5 - }, - "" - ], - [ - { - "y": -0.875, - "x": 2.5 - }, - "", - { - "x": 1, - "c": "#d4872a", - "g": false, - "a": 5 - }, - ";\n:", - { - "x": 8.5 - }, - "_\n-", - { - "x": 1, - "c": "#d9dae0", - "g": true, - "a": 7 - }, - "" - ], - [ - { - "y": -0.75, - "x": 0.5 - }, - "", - {}, - "", - { - "x": 14.5 - }, - "", - {}, - "" - ], - [ - { - "r": 30, - "rx": 6.5, - "ry": 4.25, - "y": -1, - "x": 1, - "c": "#f9cd31", - "g": false - }, - "Alt", - { - "a": 4, - "fa": [ - 0, - 0, - 0, - 9 - ] - }, - "\n\n\n" - ], - [ - { - "c": "#d4872a", - "a": 7, - "f": 9, - "h": 2 - }, - "", - { - "h": 2 - }, - "", - { - "c": "#f9cd31", - "f": 3 - }, - "Ctrl" - ], - [ - { - "x": 2, - "c": "#e26757" - }, - "ESC" - ], - [ - { - "r": -30, - "rx": 13, - "y": -1, - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "MEDIA", - {}, - "1HAND" - ], - [ - { - "x": -3 - }, - "LEAD", - { - "c": "#d4872a", - "f": 9, - "h": 2 - }, - "", - { - "f": 3, - "h": 2 - }, - "SPC" - ], - [ - { - "x": -3, - "c": "#f9cd31", - "f": 2 - }, - "HUN" - ] -] diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json new file mode 100644 index 0000000000..4dfa877a78 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json @@ -0,0 +1,553 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 3 + }, + "F12", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 9, + "a": 6, + "w": 1.5 + }, + "\n\n", + { + "t": "#0d0d0b", + "f": 3, + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "G", + { + "x": 10.5 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 6 + }, + "W", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "L", + { + "x": 8.5 + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "P" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "M", + { + "c": "#93c9b7", + "a": 4, + "fa": [0, 0, 0], + "h": 1.5 + }, + "{\n(\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n)\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 3, + "a": 4, + "w": 1.5 + }, + "\n\n~\n`", + { + "c": "#ffb2d2", + "a": 6, + "f": 3 + }, + "Y", + { + "x": 14.5, + "a": 6 + }, + "X", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "I", + { + "x": 8.5, + "n": true + }, + "R", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "U", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "h": 1.5 + }, + ";\n:", + { + "x": 4.5, + "h": 1.5 + }, + "_\n-" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 10.5, + "a": 6, + "f": 3 + }, + "V" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 6 + }, + "Q", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 4 + }, + "<\n,", + { + "x": 8.5, + "a": 6 + }, + "K", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "J" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000", + "a": 4 + }, + ">\n.", + { + "x": 6.5, + "a": 6 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5, + "g": true + }, + "", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 6, + "f": 3, + "g": false + }, + "Z", + { + "x": 14.5, + "a": 4 + }, + "?\n/", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "g": true, + "w": 1.5, + "a": 4 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": true, + "a": 5 + }, + "", + { + "x": 8.5 + }, + "", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "DEL" + ], + [ + { + "x": -3 + }, + "HUN", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "LEAD" + ] +] diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json new file mode 100644 index 0000000000..1248d36af7 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json @@ -0,0 +1,542 @@ +[ + { + "backcolor": "#ffffff", + "name": "ErgoDox - algernon's layout: Heatmap", + "author": "Gergely Nagy ", + "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Tea", + "pcb": true, + "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" + }, + [ + { + "x": 3.5, + "c": "#a7d0db", + "fa": [ + 0, + 0, + 2 + ] + }, + "#\n3\nF3", + { + "x": 10.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + }, + "*\n8\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "@\n2\nF2", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "$\n4\nF4", + { + "x": 8.5 + }, + "&\n7\nF7", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "(\n9\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "%\n5\nF5", + { + "c": "#f9cd31", + "a": 7, + "f": 2 + }, + "STENO", + { + "x": 4.5, + "f": 3 + }, + "F12", + { + "c": "#7adabd", + "a": 4, + "f": 3, + "fa": [ + 0, + 0, + 2 + ] + }, + "^\n6\nF6" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "f": 6, + "a": 6, + "w": 1.5 + }, + "\n\n", + { + "f": 3, + "t": "#0d0d0b", + "a": 4, + "fa": [ + 0, + 0, + 2 + ] + + }, + "!\n1\nF1", + { + "x": 14.5 + }, + ")\n0\nF10", + { + "a": 7, + "w": 1.5 + }, + "F11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 4 + }, + ">\n.", + { + "x": 10.5, + "a": 6 + }, + "C" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b", + "a": 4 + }, + "<\n,", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "a": 6 + }, + "P", + { + "x": 8.5 + }, + "G", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "R" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "Y", + { + "c": "#93c9b7", + "a": 4, + "h": 1.5 + }, + "{\n(\n[", + { + "x": 4.5, + "h": 1.5 + }, + "}\n)\n]", + { + "c": "#7adabd", + "a": 6 + }, + "F" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "t": "#0d0d0b", + "f": 3, + "w": 1.5 + }, + "\n\n~\n`", + { + "c": "#ffb2d2", + "a": 4, + "f": 3 + }, + "\"\n'", + { + "x": 14.5, + "a": 6 + }, + "L", + { + "a": 4, + "w": 1.5 + }, + "|\n\\" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#a7d0db", + "t": "#000000", + "a": 6 + }, + "E", + { + "x": 10.5 + }, + "T" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "O", + { + "x": 1, + "c": "#7adabd", + "t": "#000000", + "n": true + }, + "U", + { + "x": 8.5, + "n": true + }, + "H", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "N" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "I", + { + "x": 6.5 + }, + "D" + ], + [ + { + "y": -0.875, + "c": "#ffb2d2", + "t": "#0d0d0b", + "fa": [ + 6 + ], + "w": 1.5 + }, + "\n\nTab", + { + "f": 3 + }, + "A", + { + "x": 14.5, + "f": 3 + }, + "S", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + "w": 1.5 + }, + "+\n=" + ], + [ + { + "y": -0.625, + "x": 6.5, + "c": "#93c9b7", + "t": "#000000", + "a": 7, + "h": 1.5 + }, + "(", + { + "x": 4.5, + "h": 1.5 + }, + ")" + ], + [ + { + "y": -0.75, + "x": 3.5, + "c": "#a7d0db", + "a": 6 + }, + "J", + { + "x": 10.5 + }, + "W" + ], + [ + { + "y": -0.875, + "x": 2.5, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "Q", + { + "x": 1, + "c": "#7adabd", + "t": "#000000" + }, + "K", + { + "x": 8.5 + }, + "M", + { + "x": 1, + "c": "#bfbad1", + "t": "#0d0d0b" + }, + "V" + ], + [ + { + "y": -0.875, + "x": 5.5, + "c": "#7adabd", + "t": "#000000" + }, + "X", + { + "x": 6.5 + }, + "B" + ], + [ + { + "y": -0.875, + "c": "#ffb07b", + "f": 9, + "w": 1.5 + }, + "\n\n", + { + "c": "#ffb2d2", + "t": "#0d0d0b", + "a": 4, + "f": 3 + }, + "?\n/", + { + "x": 14.5, + "a": 6 + }, + "Z", + { + "c": "#ffb07b", + "t": "#000000", + "f": 9, + "w": 1.5 + }, + "" + ], + [ + { + "y": -0.375, + "x": 3.5, + "c": "#d9dae0", + "g": true, + "a": 7, + "f": 3 + }, + "", + { + "x": 10.5 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "", + { + "x": 1, + "c": "#d4872a", + "g": false, + "a": 5 + }, + ";\n:", + { + "x": 8.5 + }, + "_\n-", + { + "x": 1, + "c": "#d9dae0", + "g": true, + "a": 7 + }, + "" + ], + [ + { + "y": -0.75, + "x": 0.5 + }, + "", + {}, + "", + { + "x": 14.5 + }, + "", + {}, + "" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "c": "#f9cd31", + "g": false + }, + "Alt", + { + "a": 4, + "fa": [ + 0, + 0, + 0, + 9 + ] + }, + "\n\n\n" + ], + [ + { + "c": "#d4872a", + "a": 7, + "f": 9, + "h": 2 + }, + "", + { + "h": 2 + }, + "", + { + "c": "#f9cd31", + "f": 3 + }, + "Ctrl" + ], + [ + { + "x": 2, + "c": "#e26757" + }, + "ESC" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "MEDIA", + {}, + "DEL" + ], + [ + { + "x": -3 + }, + "LEAD", + { + "c": "#d4872a", + "f": 9, + "h": 2 + }, + "", + { + "f": 3, + "h": 2 + }, + "SPC" + ], + [ + { + "x": -3, + "c": "#f9cd31", + "f": 2 + }, + "HUN" + ] +] diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py index a13d12e81a..68585843be 100755 --- a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py +++ b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py @@ -3,143 +3,247 @@ import json import os import sys import re +import argparse from math import floor +from os.path import dirname + +class Heatmap(object): + coords = [ + [ + # Row 0 + [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], + [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], + ], + [ + # Row 1 + [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], + [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], + ], + [ + # Row 2 + [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], + [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], + ], + [ + # Row 3 + [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], + [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], + ], + [ + # Row 4 + [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], + [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], + ], + [ + # Row 5 + [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], + [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], + ], + ] + + def set_attr_at(self, block, n, attr, fn, val): + blk = self.heatmap[block][n] + if attr in blk: + blk[attr] = fn(blk[attr], val) + else: + blk[attr] = fn(None, val) + + def coord(self, col, row): + return self.coords[row][col] + + @staticmethod + def set_attr(orig, new): + return new + + def set_bg(self, (block, n), color): + self.set_attr_at(block, n, "c", self.set_attr, color) + #self.set_attr_at(block, n, "g", self.set_attr, False) + + def set_tap_info(self, (block, n), count, cap): + def _set_tap_info(o, _count, _cap): + ns = 4 - o.count ("\n") + return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100) + + if not cap: + cap = 1 + self.heatmap[block][n + 1] = _set_tap_info (self.heatmap[block][n + 1], count, cap) + + @staticmethod + def heatmap_color (v): + colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] + fb = 0 + if v <= 0: + idx1, idx2 = 0, 0 + elif v >= 1: + idx1, idx2 = len(colors) - 1, len(colors) - 1 + else: + val = v * (len(colors) - 1) + idx1 = int(floor(val)) + idx2 = idx1 + 1 + fb = val - float(idx1) + + r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] + g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] + b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] + + r, g, b = [x * 255 for x in r, g, b] + return "#%02x%02x%02x" % (r, g, b) + + def __init__(self, layout): + self.log = {} + self.total = 0 + self.max_cnt = 0 + self.layout = layout + + def update_log(self, (c, r)): + if not (c, r) in self.log: + self.log[(c, r)] = 0 + self.log[(c, r)] = self.log[(c, r)] + 1 + self.total = self.total + 1 + if self.max_cnt < self.log[(c, r)]: + self.max_cnt = self.log[(c, r)] + + def get_heatmap(self): + with open("%s/heatmap-layout.%s.json" % (dirname(sys.argv[0]), self.layout), "r") as f: + self.heatmap = json.load (f) + + ## Reset colors + for row in self.coords: + for coord in row: + if coord != []: + self.set_bg (coord, "#d9dae0") + + for (c, r) in self.log: + coords = self.coord(c, r) + b, n = coords + cap = self.max_cnt + if cap == 0: + cap = 1 + v = float(self.log[(c, r)]) / cap + self.set_bg (coords, self.heatmap_color (v)) + self.set_tap_info (coords, self.log[(c, r)], self.total) + return self.heatmap + + def get_stats(self): + usage = [ + # left hand + [0, 0, 0, 0, 0], + # right hand + [0, 0, 0, 0, 0] + ] + finger_map = [0, 0, 1, 2, 3, 4, 4] + for (c, r) in self.log: + if r == 5: # thumb cluster + if c <= 6: # left side + usage[0][4] = usage[0][4] + self.log[(c, r)] + else: + usage[1][4] = usage[1][4] + self.log[(c, r)] + else: + fc = c + hand = 0 + if fc >= 7: + fc = fc - 7 + hand = 1 + fm = finger_map[fc] + usage[hand][fm] = usage[hand][fm] + self.log[(c, r)] + hand_usage = [0, 0] + for f in usage[0]: + hand_usage[0] = hand_usage[0] + f + for f in usage[1]: + hand_usage[1] = hand_usage[1] + f + + total = self.total + if total == 0: + total = 1 + stats = { + "hands": { + "left": { + "usage": float(hand_usage[0]) / total * 100, + "fingers": { + "0 - pinky": 0, + "1 - ring": 0, + "2 - middle": 0, + "3 - index": 0, + "4 - thumb": 0, + } + }, + "right": { + "usage": float(hand_usage[1]) / total * 100, + "fingers": { + "0 - thumb": 0, + "1 - index": 0, + "2 - middle": 0, + "3 - ring": 0, + "4 - pinky": 0, + } + }, + } + } + + hmap = ['left', 'right'] + fmap = ['0 - pinky', '1 - ring', '2 - middle', '3 - index', '4 - thumb', + '0 - thumb', '1 - index', '2 - middle', '3 - ring', '4 - pinky'] + for hand_idx in range(len(usage)): + hand = usage[hand_idx] + for finger_idx in range(len(hand)): + stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = float(hand[finger_idx]) / total * 100 + return stats + +def dump_all(out_dir, heatmaps): + for layer in heatmaps.keys(): + if len(heatmaps[layer].log) == 0: + continue -cr_coord_map = [ - [ - # Row 0 - [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], - [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], - ], - [ - # Row 1 - [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], - [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], - ], - [ - # Row 2 - [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], - [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], - ], - [ - # Row 3 - [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], - [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], - ], - [ - # Row 4 - [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], - [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], - ], - [ - # Row 5 - [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], - [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], - ], -] - -def set_attr_at(j, b, n, attr, fn, val): - blk = j[b][n] - if attr in blk: - blk[attr] = fn(blk[attr], val) - else: - blk[attr] = fn(None, val) - -def coord(col, row): - return cr_coord_map[row][col] - -def set_attr(orig, new): - return new - -def set_bg(j, (b, n), color): - set_attr_at(j, b, n, "c", set_attr, color) - #set_attr_at(j, b, n, "g", set_attr, False) - -def _set_tap_info(o, count, cap): - ns = 4 - o.count ("\n") - return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100) - -def set_tap_info(j, (b, n), count, cap): - j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap) - -def heatmap_color (v): - colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] - fb = 0 - if v <= 0: - idx1, idx2 = 0, 0 - elif v >= 1: - idx1, idx2 = len(colors) - 1, len(colors) - 1 - else: - val = v * (len(colors) - 1) - idx1 = int(floor(val)) - idx2 = idx1 + 1 - fb = val - float(idx1) - - r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] - g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] - b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] - - r, g, b = [x * 255 for x in r, g, b] - return "#%02x%02x%02x" % (r, g, b) - -# Load the keylog -def load_keylog(fname, restrict_row): - keylog = {} - total = 0 - with open(fname, "r") as f: - lines = f.readlines() - for line in lines: - m = re.search ('KL: col=(\d+), row=(\d+)', line) + with open ("%s/%s.json" % (out_dir, layer), "w") as f: + json.dump(heatmaps[layer].get_heatmap(), f) + print >>sys.stderr, "%s stats:" % (layer) + json.dump (heatmaps[layer].get_stats(), sys.stderr, + indent = 4, sort_keys = True) + print >>sys.stderr, "" + print >>sys.stderr, "" + +def main(opts): + + heatmaps = {"Dvorak": Heatmap("Dvorak"), + "ADORE": Heatmap("ADORE") + } + cnt = 0 + restrict_row = opts.restrict_row + out_dir = opts.outdir + + while True: + line = sys.stdin.readline() + if not line: + break + m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line) if not m: continue - (c, r) = (int(m.group (2)), int(m.group (1))) - if restrict_row != None and r != int(restrict_row): + + cnt = cnt + 1 + (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4)) + if restrict_row != -1 and r != restrict_row: + continue + if c in opts.ignore_columns: continue - if (c, r) in keylog: - keylog[(c, r)] = keylog[(c, r)] + 1 - else: - keylog[(c, r)] = 1 - total = total + 1 - return total / 2, keylog - -def l_flat(s): - f = s.split("\n") - return ", ".join (f) - -def main(base_fn, log_fn, restrict_row = None): - - with open(base_fn, "r") as f: - layout = json.load (f) - - ## Reset colors - for row in cr_coord_map: - for col in row: - if col != []: - set_bg (layout, col, "#d9dae0") - #set_attr_at (layout, col[0], col[1], "g", set_attr, True) - - total, log = load_keylog (log_fn, restrict_row) - max_cnt = 0 - for (c, r) in log: - max_cnt = max(max_cnt, log[(c, r)]) - - # Create the heatmap - for (c, r) in log: - coords = coord(c, r) - b, n = coords - cap = max_cnt - v = float(log[(c, r)]) / cap - print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v)) - set_bg (layout, coord(c, r), heatmap_color (v)) - set_tap_info (layout, coord (c, r), log[(c, r)], total) - - print json.dumps(layout) -if __name__ == "__main__": - if len(sys.argv) < 3: - print """Log to Heatmap -- creates a heatmap out of keyboard logs + heatmaps[l].update_log ((c, r)) + + if opts.dump_interval != -1 and cnt >= opts.dump_interval: + cnt = 0 + dump_all(out_dir, heatmaps) -Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json""" - sys.exit (1) - main(*sys.argv[1:]) + dump_all (out_dir, heatmaps) + +if __name__ == "__main__": + parser = argparse.ArgumentParser (description = "keylog to heatmap processor") + parser.add_argument ('outdir', action = 'store', + help = 'Output directory') + parser.add_argument ('--row', dest = 'restrict_row', action = 'store', type = int, + default = -1, help = 'Restrict processing to this row only') + parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int, + default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only') + parser.add_argument ('--ignore-column', dest = 'ignore_columns', action = 'append', type = int, + default = [], help = 'Ignore the specified columns') + args = parser.parse_args() + main(args) -- cgit v1.2.3 From 9778349c4bfb6723ef056eb3473a7fc15c45c435 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Wed, 24 Aug 2016 17:47:01 -0400 Subject: More notes --- keyboards/planck/keymaps/cbbrowne/readme.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index fdb0997001..5af688bb17 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -67,12 +67,13 @@ doing sundry experimentation: * I use tmux quite a lot; the mollat keymap seems to have some interesting helpers. It might be interesting to add a "tmux - layer" + layer," or to have a few keys in a layer oriented towards that * The mollat tmux layer also suggests some thoughts about Emacs helpers. * I do not presently have anything that handles X11 screen switching, as with Control-Alt-various * I ought to probably look into KC_LEAD, to have some key combos that do not need to be concurrent - - + * The jeebak keymap seems to have some neat ideas: + - Number layer which is aggressive about having numbers in several places + - Touch layer seems interesting -- cgit v1.2.3 From a72d46d1ecf7c317830aca91aadc3fae01f00bca Mon Sep 17 00:00:00 2001 From: Joshua T Date: Wed, 24 Aug 2016 23:58:59 -0500 Subject: Added replicaJunction keymap --- .../atreus-replica-base-colemakdh.png | Bin 0 -> 76319 bytes .../replicaJunction/atreus-replica-extend.png | Bin 0 -> 91555 bytes .../replicaJunction/atreus-replica-function.png | Bin 0 -> 92516 bytes .../replicaJunction/atreus-replica-game.png | Bin 0 -> 72509 bytes .../keymaps/replicaJunction/atreus-replica-num.png | Bin 0 -> 73171 bytes keyboards/atreus/keymaps/replicaJunction/config.h | 94 ++++++++++++++++++ keyboards/atreus/keymaps/replicaJunction/keymap.c | 107 +++++++++++++++++++++ keyboards/atreus/keymaps/replicaJunction/readme.md | 57 +++++++++++ 8 files changed, 258 insertions(+) create mode 100644 keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png create mode 100644 keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png create mode 100644 keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png create mode 100644 keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png create mode 100644 keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png create mode 100644 keyboards/atreus/keymaps/replicaJunction/config.h create mode 100644 keyboards/atreus/keymaps/replicaJunction/keymap.c create mode 100644 keyboards/atreus/keymaps/replicaJunction/readme.md diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png new file mode 100644 index 0000000000..4640f9f529 Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png differ diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png new file mode 100644 index 0000000000..08c2e6140c Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png differ diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png new file mode 100644 index 0000000000..34ad03decd Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png differ diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png new file mode 100644 index 0000000000..14ae35b54e Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png differ diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png new file mode 100644 index 0000000000..6598acb27b Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png differ diff --git a/keyboards/atreus/keymaps/replicaJunction/config.h b/keyboards/atreus/keymaps/replicaJunction/config.h new file mode 100644 index 0000000000..437aa662c8 --- /dev/null +++ b/keyboards/atreus/keymaps/replicaJunction/config.h @@ -0,0 +1,94 @@ +/* +Config file - Atreus QMK with replicaJunction layout + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Technomancy +#define PRODUCT Atreus +#define DESCRIPTION q.m.k. keyboard firmware for Atreus + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#if defined(ATREUS_ASTAR) +# define MATRIX_ROW_PINS { D0, D1, D3, D2 } +# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +# define UNUSED_PINS +#elif defined(ATREUS_TEENSY2) +# define MATRIX_ROW_PINS { D0, D1, D2, D3 } +# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 } +# define UNUSED_PINS +#endif + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +//#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +// Default: 5 +#define DEBOUNCING_DELAY 6 + +// I don't have any locking keys, so I don't need these features + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Prevent modifiers from sticking when switching layers */ +#define PREVENT_STUCK_MODIFIERS + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c new file mode 100644 index 0000000000..52d3677fa7 --- /dev/null +++ b/keyboards/atreus/keymaps/replicaJunction/keymap.c @@ -0,0 +1,107 @@ +/* + * Keyboard: Atreus + * Keymap: replicaJunction + * Version: 0.3 + * + * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez. + * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now + * have both keyboards, so I've designed these layouts in an effort to make switching between the + * two as easy as possible. + * + * Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of + * function and dual-role keys. + * + * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found + * here: https://colemakmods.github.io/mod-dh/ + */ + +#include "atreus.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. + +// Note that whatever is set as layer 0 will be the default layer of the keyboard. + +#define _CO 0 // Colemak +#define _QW 1 // QWERTY +#define _GA 2 // Gaming +#define _EX 3 // Extend +#define _NU 4 // Numpad +#define _FN 5 // Function + +// Some quick aliases, just to make it look pretty +#define _______ KC_TRNS +#define KCX_CA LCTL(KC_LALT) +#define KCX_CS LCTL(KC_LSFT) +#define KCX_CSA LCTL(LSFT(KC_LALT)) +#define KCX_LST LSFT(KC_TAB) +#define KX_COPY LCTL(KC_C) +#define KX_CUT LCTL(KC_X) +#define KX_PAST LCTL(KC_V) +#define KX_UNDO LCTL(KC_Z) + +; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements. + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_CO] = KEYMAP( + KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, + SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH), + KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL +), + +[_QW] = KEYMAP( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), + KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL +), + +[_EX] = KEYMAP( /* Extend */ + KC_CAPS, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, + _______, KC_LGUI, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, + _______, KX_CUT, KX_COPY, _______, KX_PAST, _______, KC_TAB, KCX_LST, _______, KC_INSERT, + _______, _______, _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, KC_PSCR +), + +[_NU] = KEYMAP( /* Numbers and symbols */ + KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, + KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS, + KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS, + _______, TG(_GA), _______, MO(_FN), _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______ +), + +[_FN] = KEYMAP( /* Functions */ + KC_DEL, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_F7, KC_F8, KC_F9, KC_F10, + KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, _______, KC_F4, KC_F5, KC_F6, KC_F11, + _______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, + _______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO, DF(_CO), DF(_QW), RESET +), + +[_GA] = KEYMAP( /* Gaming */ + _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, + _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, + KC_Z, _______, _______, _______, _______, KC_BTN3, _______, KC_MS_D, _______, _______, + _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______ +)}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/atreus/keymaps/replicaJunction/readme.md b/keyboards/atreus/keymaps/replicaJunction/readme.md new file mode 100644 index 0000000000..21af48e8fd --- /dev/null +++ b/keyboards/atreus/keymaps/replicaJunction/readme.md @@ -0,0 +1,57 @@ +# replicaJunction - Atreus Layout # + +This layout is designed to make the absolute most out of the Atreus 40% keyboard. + +I was enchanted with the idea of the Atreus keyboard after using my Ergodox for several months. I wanted something of a similar form factor that was easily portable, so I could bring and transport a keyboard to my workplace without much hassle. After building the Atreus keyboard, though, I realized very quickly that the 40% form factor requires a lot more creativity than a full-size keyboard (even one as strangely-shaped as the Ergodox). + +The default Atreus keyboard layout provides all the necessary keys in order to function with the keyboard, but as a programmer, I needed quicker access to just about everything. I noticed that the default layer didn't include any dual-role keys, and so I started on my journey to build my perfect layout for the Atreus. + +I won't claim that this layout is perfect for everyone. It does make several significant changes from the "normal" Atreus layout. In my own use, though, I've found this keyboard turbocharges my Atreus, and gives it the power of a full-size keyboard without the size. + +## Base Layer ## + +![Atreus base layout](atreus-replica-base-colemakdh.png) + +The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/). + +Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead. + +The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise. + +## Extend Layer ## + +![Atreus extend layer](atreus-replica-extend.png) + +This layout is designed primarily for keyboard navigation. Arrow keys are easily accessible under the right hand (a welcome change from the original Atreus layout, which places them under the left hand), along with Home/End and PgUp/PgDn. + +Modifiers are also placed under the home row of the left hand. One of the single keyboard actions I use most is Shift+Ctrl+Left/Right to select a whole word; this layer makes those keypresses simple by adding the Ctrl key in an easy-to-reach location. + +For the common Ctrl shortcuts, I also added some hotkeys to this layer over the letter keys they are associated with. This gives the Extend key some extra utility by letting it "feel" like a Ctrl key in some cases. + +The Space key exists to prevent going from this layer directly into the Number layer. Similarly, the Shift key on the left pinky helps make sure that the normal letter (Z) doesn't fire. + +## Number and Symbol Layer ## + +![Atreus number and symbol layer](atreus-replica-num.png) + +This layer provides the only way of accessing number keys on this keyboard, since it's too small for its own number row. Note that even though they are laid out in the number pad fashion, they send the "regular" number keystrokes. Games and programs that specifically use NumPad keys are not supported in this layout at the moment. + +This layer also provides plenty of symbol shortcuts. Most of these can be accessed through other means (like Shift+8 for the asterisk), but having shortcut keys to them makes for one less keypress, which adds up quickly when using these symbols on a regular basis. I've been through many revisions of this concept on my Ergodox as well as the Atreus, and I've finally arrived at this layout as the one that provides the symbols I need most frequently in places I can think to expect them. The Ordinary layout from the Ergodox-EZ keyboard in this repository was a large influence in this design. + +## Function Layer ## + +![Atreus function layer](atreus-replica-function.png) + +Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often. + +The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions. + +## Gaming Layer ## + +![Atreus gaming layer](atreus-replica-game.png) + +This is a small layer developed to allow some simple gameplay without a mouse. This layer is a toggle (from the Number layer), so it is designed to stay on while in use. + +The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games. + +I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it. \ No newline at end of file -- cgit v1.2.3 From 936a26d04ffa12801031c058f27e221174e3fabd Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 25 Aug 2016 00:15:41 -0500 Subject: Added pin support for A0-A7 Vision Division - It works! --- keyboards/vision_division/config.h | 2 +- keyboards/vision_division/keymaps/default/Makefile | 2 +- keyboards/vision_division/keymaps/default/config.h | 6 +++--- quantum/config_common.h | 16 ++++++++-------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index 37b834973c..f50378ffa8 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . /* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL // #define BACKLIGHT_PIN B7 // #define BACKLIGHT_BREATHING diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index 393a9e23a6..ecbe7e1ab2 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -10,7 +10,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 +AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h index 34eaaff5b7..16740fb15b 100644 --- a/keyboards/vision_division/keymaps/default/config.h +++ b/keyboards/vision_division/keymaps/default/config.h @@ -7,7 +7,7 @@ /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID GET_PID(NUMERIC_MAX_TEENSY, NUMERIC_MAX) +#define PRODUCT_ID GET_PID(NUMERIC_NORMAL, HOMING_MAX_TEENSY) #define DEVICE_VER 0x0001 #define MANUFACTURER IBNobody #define PRODUCT Vision Division @@ -17,8 +17,8 @@ #define MATRIX_ROWS 6 #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } -#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_MAX_TEENSY, NUMERIC_MAX) -#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_MAX_TEENSY, NUMERIC_MAX) +#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) +#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) #define UNUSED_PINS diff --git a/quantum/config_common.h b/quantum/config_common.h index 7ef4b23d48..8ed5f4a106 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -45,14 +45,14 @@ #define F5 0xF5 #define F6 0xF6 #define F7 0xF7 -#define A0 0xA0 -#define A1 0xA1 -#define A2 0xA2 -#define A3 0xA3 -#define A4 0xA4 -#define A5 0xA5 -#define A6 0xA6 -#define A7 0xA7 +#define A0 0x00 +#define A1 0x01 +#define A2 0x02 +#define A3 0x03 +#define A4 0x04 +#define A5 0x05 +#define A6 0x06 +#define A7 0x07 /* USART configuration */ -- cgit v1.2.3 From 601feed87e3ab303fbc7b5987dd6d451b6fa3453 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Tue, 23 Aug 2016 20:08:06 -0700 Subject: [jd45] Add "jeebak" keymap folder as a copy of the "default" folder --- keyboards/jd45/keymaps/jeebak/keymap.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 keyboards/jd45/keymaps/jeebak/keymap.c diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c new file mode 100644 index 0000000000..95abb1505c --- /dev/null +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -0,0 +1,17 @@ +#include "jd45.h" + +/* this keymap is to provide a basic keyboard layout for testing the matrix + * for more practical and complicated keymap refer to other keymaps in the same folder + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( + ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC, + TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT, + LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, + PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT ), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; -- cgit v1.2.3 From 9c0c8c307d36aa7a1909718e5da58a0eb8fcedb6 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Tue, 23 Aug 2016 20:56:19 -0700 Subject: [jd45] Port jeebak's planck keymap to jd45 --- keyboards/jd45/keymaps/jeebak/config.h | 16 ++ keyboards/jd45/keymaps/jeebak/keymap.c | 424 +++++++++++++++++++++++++++++++- keyboards/jd45/keymaps/jeebak/readme.md | 129 ++++++++++ 3 files changed, 560 insertions(+), 9 deletions(-) create mode 100644 keyboards/jd45/keymaps/jeebak/config.h create mode 100644 keyboards/jd45/keymaps/jeebak/readme.md diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h new file mode 100644 index 0000000000..53a1f0a307 --- /dev/null +++ b/keyboards/jd45/keymaps/jeebak/config.h @@ -0,0 +1,16 @@ +#include "../../config.h" + +/** + *JD45 keymap definition macro + */ +#define KEYMAP_JD45( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ + K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ + K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ + K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ +) { \ + { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13 }, \ + { K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, KC_NO }, \ + { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \ + { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \ +} diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index 95abb1505c..ac3e010a91 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -1,17 +1,423 @@ #include "jd45.h" -/* this keymap is to provide a basic keyboard layout for testing the matrix - * for more practical and complicated keymap refer to other keymaps in the same folder +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _TOUCHCURSOR 6 +#define _MOUSECURSOR 7 +#define _ADJUST 16 + +// Keycodes +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +enum macro_keycodes { + KC_ALT_TAB, + KC_CMD_TAB, + KC_CTL_TAB, + KC_CMD_SLSH, + KC_AG_FIND, + KC_AG_AGAIN, + KC_AG_UNDO, + KC_AG_CUT, + KC_AG_COPY, + KC_AG_PASTE, + KC_AG_DESK_L, + KC_AG_DESK_R, + KC_AG_TAB_C, + KC_AG_TAB_N, + KC_AG_TAB_R, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper +#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI +#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt +// Requires KC_TRNS/_______ for the trigger key in the destination layer +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor +#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor +#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab +#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab +#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab +#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) +#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings +#define AG_AGAIN M(KC_AG_AGAIN) +#define AG_UNDO M(KC_AG_UNDO) +#define AG_CUT M(KC_AG_CUT) +#define AG_COPY M(KC_AG_COPY) +#define AG_PASTE M(KC_AG_PASTE) +#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and +#define AG_D_R M(KC_AG_DESK_R) // Right +#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, +#define AG_T_N M(KC_AG_TAB_N) // Tab New, and +#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed + +/* Qwerty + * + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | [ | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( - ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC, - TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT, - LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, - PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT ), -}; +[_QWERTY] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Colemak + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | [ | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ +[_COLEMAK] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_BSPC, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC , KC_A, KC_R,LT_MC(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, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Dvorak + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | / | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ +[_DVORAK] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_BSPC, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC , KC_A, KC_O,LT_MC(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, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Lower + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Brite | | | | | | | Prev | Next | Mute | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ +[_LOWER] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + 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_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Raise + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Brite | | | | | | | Prev | Next | Mute | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ +[_RAISE] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_BSPC, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | | | | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + * + * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't + * seem to work on Mac. Presumably they'll work under Windows. + */ -const uint16_t PROGMEM fn_actions[] = { +[_TOUCHCURSOR] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, _______), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ +/* Mouse Layer + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | | | | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ + +[_MOUSECURSOR] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______, +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Plover layer (http://opensteno.org) + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | # | # | # | # | # | # | # | # | # | # | # | # | # | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | TogOut | S | K | W | R | * | * | R | B | G | S | Z | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Exit | | A | O | | | E | U | | | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ + +[_PLOVER] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + EXT_PLV , XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX , KC_N, KC_M, XXXXXXX, XXXXXXX), +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + +/* Adjust (Lower + Raise) + * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + * | | | | | | | | | | | | | Del | + * |---------`------`------`------`------`------`------`------`------`------`------`------`------| + * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | | | | | | | | | | | | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | | | Reset | + * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' + */ +[_ADJUST] = KEYMAP_JD45( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, RESET) +/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ }; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +/* + * Macro definition + */ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. + // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in: + // quantum/quantum.c + if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) { + use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. + } + + switch (id) { + case KC_ALT_TAB: + if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + case KC_CMD_TAB: + if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + + case KC_CTL_TAB: + return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); + case KC_CMD_SLSH: + return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); + + case KC_AG_FIND: + return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END ); + case KC_AG_AGAIN: + return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END ); + case KC_AG_UNDO: + return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END ); + case KC_AG_CUT: + return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END ); + case KC_AG_COPY: + return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); + case KC_AG_PASTE: + return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); + + case KC_AG_DESK_L: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); + case KC_AG_DESK_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); + + case KC_AG_TAB_C: + return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END ); + case KC_AG_TAB_N: + return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END ); + case KC_AG_TAB_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END ); + } + + return MACRO_NONE; +} diff --git a/keyboards/jd45/keymaps/jeebak/readme.md b/keyboards/jd45/keymaps/jeebak/readme.md new file mode 100644 index 0000000000..2e45a46d9b --- /dev/null +++ b/keyboards/jd45/keymaps/jeebak/readme.md @@ -0,0 +1,129 @@ +jeebak's JD45 layout +======================= +NOTE: This is a port of jeebak's planck layout, for jd45. + +This WIP keymap attempts to minimize fingers straying away from the home row. +To aid in this endeavor, when additional modifyer keys to switch layers are +needed, they will be mapped to home row keys. The `keymap.c` file will contain +the exact changes. The diagrams in this README shows the highlights of the +changes from the default mappings. + +I also decided to change all calls to `persistant_default_layer_set()` to +`default_layer_set()` since this is my personal perference. + +## Macros +``` +#define ALT_TAB M(KC_ALT_TAB) +``` + +## Base Layers (Qwerty/Colemak/Dvorak) +These base layers are mostly the same as the default mappings. The interesting +changes are shown below. + +- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held, +- `GUI/;` as `;` and `GUI`, +- `Alt/"` as `"` and `Alt`, +- `Sft/Ent` as `Enter` and `Shift`, and +- `Hyper/Tab` as `Tab` and `Hyper` + +A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped. +The arrow keys, which have been moved to the +[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been +replaced with the Media keys as shown. The `MC/kc` key activates the +`MouseCursor` layer when held, and emits the corresponding `kc` for its layer, +when tapped. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | [ | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`------`------| + | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | + `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' +``` + +## Lower Layer (Symbols and Function Keys) +The symbols and functions keys are essentially the same as the default mapping. +The most notable changes are that the symbol keys from the `RAISE` layer have +been moved here. The remaining Media keys replace those that are now on the +base layers. The `BACKLIT` key has also been moved here. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`------`------| + | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | Brite | | | | | | | Prev | Next | Mute | + `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' +``` + +## Raise Layer (Numbers and Arithmetic Operators) +All of the numbers and arithmetic operators are available on this layer. Some +keys are duplicated for the convenience of their positions. The `0` and `$` +keys at the far left are for quick access to beginning and end of line in vim. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`------`------| + | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | Brite | | | | | | | Prev | Next | Mute | + `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' +``` + +## TouchCursor layer plus personal customizations +[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key +as the modifier, with the `IJKL` home row keys representing the inverted-T of +the arrow keys. All of the default TouchCursor keymappings for the right hand +are represented below. My personalizations include all of the keys shown for +the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key +from the base layers) readily accessible from the home row allows quick word +jumps and highlighting when used in conjunction with the arrow keys. The +`Alt-Tab` macro is not only useful under Windows, but also under Mac when used +with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch). +The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in +this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` +keycodes do not seem to work. There are macros in place that'll "automatically" +choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`, +etc.) depending on which layout you've currently selected (`AG_NORM` or +`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I +use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and +`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as +Google Chrome. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | | + |---------`------`------`------`------`------`------`------`------`------`------`------`------| + | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | | | | | | | | | | | + `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' +``` + +## Mouse Layer +The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer. +The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the +mouse from the `doc/keycode.txt` file are represented, and logically located, +IMHO. The left and right click buttons are duplicated; on the right hand side, +for a quick click here and there, and again on the left hand side for when the +buttons need to be held for dragging things or highlighting text, thus allowing +the right hand to be free to use the up/down/left/right actions. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+------+------. + | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | | + |---------`------`------`------`------`------`------`------`------`------`------`------`------| + | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | | | | | | | | | | | + `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' +``` -- cgit v1.2.3 From c34399c5924c321d037e154bb3d5781dcc5c433a Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 25 Aug 2016 08:29:30 +0200 Subject: - Updated kc60/readme - Added layout examples for kc60 --- keyboards/kc60/kc60.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ keyboards/kc60/readme.md | 7 +++++ 2 files changed, 76 insertions(+) diff --git a/keyboards/kc60/kc60.h b/keyboards/kc60/kc60.h index f11d3435c9..c3a0165c09 100644 --- a/keyboards/kc60/kc60.h +++ b/keyboards/kc60/kc60.h @@ -8,6 +8,19 @@ // This a shortcut to help you visually see your layout. // The first section contains all of the arguements // The second converts the arguments into a multi-dimensional array +/* + * ,-----------------------------------------------------------------------------------------. + * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 | + * |-----------------------------------------------------------------------------------------+ + * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D | + * |-----------------------------------------------------------------------------------------+ + * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | + * |-----------------------------------------------------------------------------------------+ + * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3D | K3C | + * |-----------------------------------------------------------------------------------------+ + * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D | + * `-----------------------------------------------------------------------------------------' + */ #define KEYMAP( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ @@ -23,3 +36,59 @@ } #endif + +/* Default layout + * ,-----------------------------------------------------------------------------------------. + * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | + * |-----------------------------------------------------------------------------------------+ + * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D | + * |-----------------------------------------------------------------------------------------+ + * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | + * |-----------------------------------------------------------------------------------------+ + * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | + * |-----------------------------------------------------------------------------------------+ + * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D | + * `-----------------------------------------------------------------------------------------' + */ + +/* Mini Lshift + * ,-----------------------------------------------------------------------------------------. + * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | + * |-----------------------------------------------------------------------------------------+ + * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D | + * |-----------------------------------------------------------------------------------------+ + * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | + * |-----------------------------------------------------------------------------------------+ + * | K30 |K31| K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | + * |-----------------------------------------------------------------------------------------+ + * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D | + * `-----------------------------------------------------------------------------------------' + */ + +/* Mini Rshift + * ,-----------------------------------------------------------------------------------------. + * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | + * |-----------------------------------------------------------------------------------------+ + * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D | + * |-----------------------------------------------------------------------------------------+ + * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | + * |-----------------------------------------------------------------------------------------+ + * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | K3D | + * |-----------------------------------------------------------------------------------------+ + * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D | + * `-----------------------------------------------------------------------------------------' + */ + +/* Mini Enter + * ,-----------------------------------------------------------------------------------------. + * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | + * |-----------------------------------------------------------------------------------------+ + * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D | + * |-----------------------------------------------------------------------------------------+ + * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | K2D | + * |-----------------------------------------------------------------------------------------+ + * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | + * |-----------------------------------------------------------------------------------------+ + * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D | + * `-----------------------------------------------------------------------------------------' + */ \ No newline at end of file diff --git a/keyboards/kc60/readme.md b/keyboards/kc60/readme.md index acc0df68dc..b29c6be302 100644 --- a/keyboards/kc60/readme.md +++ b/keyboards/kc60/readme.md @@ -25,3 +25,10 @@ Keymaps follow the format **__\.c__** and are stored in the `keymaps` fol ![Image of KC60 with RGB Underglow](keymaps/ws2812/ws2812_example.jpg) Build with WS2812 Support by running `make KEYMAP=ws2812`. + +## Warning +For those who want to use 2x1U instead of classic backspace you need to use K0D and K49 like this: +* K0D represents the key at the right of =. +* K49 represents the last key of the row (is wired at the right of the space key on the PCB) + +In kc60.h I've put several definitions' examples of possible layouts proposed by online editor (http://123.57.250.164:9128/). \ No newline at end of file -- cgit v1.2.3 From 94597a27c5d138eb269d864c57e2de89207f7f91 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Thu, 25 Aug 2016 03:06:42 -0700 Subject: Make the "extra" key in the top row another backspace --- keyboards/jd45/keymaps/jeebak/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index ac3e010a91..8d26cbde12 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -78,7 +78,7 @@ enum macro_keycodes { /* Qwerty * * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. - * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | [ | Bksp | + * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | * |----------`------`------`------`------`------`------`------`------`------`------`------------| @@ -91,7 +91,7 @@ enum macro_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = KEYMAP_JD45( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO , /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Colemak * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. - * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | [ | Bksp | + * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " | * |----------`------`------`------`------`------`------`------`------`------`------`------------| @@ -113,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_COLEMAK] = KEYMAP_JD45( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_BSPC, + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT , /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ @@ -124,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Dvorak * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. - * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | / | Bksp | + * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / | * |----------`------`------`------`------`------`------`------`------`------`------`------------| @@ -135,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_DVORAK] = KEYMAP_JD45( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_BSPC, + HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH , /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ @@ -146,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Lower * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | Bksp | + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" | * |----------`------`------`------`------`------`------`------`------`------`------`------------| @@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_LOWER] = KEYMAP_JD45( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - 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_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ @@ -168,7 +168,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Raise * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Bksp | + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" | * |----------`------`------`------`------`------`------`------`------`------`------`------------| @@ -179,7 +179,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_RAISE] = KEYMAP_JD45( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_BSPC, + KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE , /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ -- cgit v1.2.3 From 1bbd3c1eea78abf0b36a289fb37f80dfc4f9c8bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Werner?= Date: Thu, 25 Aug 2016 12:25:57 +0200 Subject: fixed defaulf keymap, added my own keymap now the LEDs are working like they should --- keyboards/kitten_paw/Makefile | 2 +- keyboards/kitten_paw/keymaps/ickerwx/keymap.c | 128 +++++++++++++++---------- keyboards/kitten_paw/keymaps/ickerwx/readme.md | 18 ++++ keyboards/kitten_paw/kitten_paw.c | 19 +++- keyboards/kitten_paw/kitten_paw.h | 11 +++ keyboards/kitten_paw/led.c | 47 --------- keyboards/kitten_paw/matrix.c | 3 +- 7 files changed, 123 insertions(+), 105 deletions(-) create mode 100644 keyboards/kitten_paw/keymaps/ickerwx/readme.md delete mode 100644 keyboards/kitten_paw/led.c diff --git a/keyboards/kitten_paw/Makefile b/keyboards/kitten_paw/Makefile index 9122921737..3b5585ed6f 100644 --- a/keyboards/kitten_paw/Makefile +++ b/keyboards/kitten_paw/Makefile @@ -69,7 +69,7 @@ BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 CUSTOM_MATRIX = yes -SRC += matrix.c led.c +SRC += matrix.c ifndef QUANTUM_DIR include ../../Makefile diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c index 276fc30a80..9a00c80dc8 100644 --- a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c +++ b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c @@ -3,8 +3,14 @@ #define _______ KC_TRNS #define XXXXXXX KC_NO -#define LC LCTL +#define C(kc) LCTL(KC_##kc) +#define RA(kc) RALT(KC_##kc) #define KC_SLCT KC_SELECT +#define MEDAPP LT(MEDIA, KC_APP) +#undef S +#define S(kc) LSFT(KC_##kc) + +uint8_t current_layer_global = 255; enum layers { DEFAULT, @@ -33,75 +39,75 @@ enum macro_id { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [DEFAULT] = KEYMAP(\ - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - F(8),KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT, KC_SLSH, F(9), KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ - F(1),KC_LGUI, F(3), LT(MISC, KC_SPC), F(4), F(5), LT(MEDIA, KC_APP), F(2), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), - /* Layer 1: Programming Layer 1, emulating US layout */ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + F(8),KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, F(9), KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + F(1),KC_LGUI, F(3), LT(MISC, KC_SPC), F(4), F(5), MEDAPP, F(2), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), + /* Layer 1: Programming Layer 1, emulating US l ayout */ [PROG1] = KEYMAP(\ - KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,_______,_______, \ - M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_SLSH, S(KC_0), _______, _______,_______,_______, _______,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______, KC_Z,_______,_______,_______, _______,RALT(KC_8),RALT(KC_9),RALT(KC_MINS), _______,_______,_______, _______,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(KC_COMM),S(KC_BSLS), _______, _______,_______,_______, \ - MO(PROG2),_______, KC_Y,_______,_______,_______,_______,_______,_______,_______, _______, S(KC_7), MO(PROG2), _______, _______,_______,_______,_______, \ - _______,_______,_______, _______, _______, _______, _______, _______, _______,_______,_______, _______,_______), + KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH, S(0),_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______, KC_Z,_______,_______,_______,_______, RA(8), RA(9),RA(MINS), _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(COMM),S(BSLS), _______, _______,_______,_______, \ + MO(PROG2),_______, KC_Y,_______,_______,_______,_______,_______,_______,_______,_______, S(7), MO(PROG2), _______, _______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______), /* Layer 2: programming layer 2 all keys that are not FN keys are sent as LSFT+key on this layer */ [PROG2] = KEYMAP(\ - _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, _______, _______, _______, _______,_______,_______, \ -RALT(KC_RBRC), _______,RALT(KC_Q),KC_BSLS,_______,_______,M(CFLEX),S(KC_6),S(KC_RBRC),S(KC_8), S(KC_9), S(KC_SLSH), KC_RBRC, _______, _______,_______,_______, _______,_______,_______,_______, \ - _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, _______, RALT(KC_7),RALT(KC_0),RALT(KC_NUBS), _______,_______,_______, _______,_______,_______,_______, \ - _______, _______, _______,_______,_______,_______, _______,_______, _______,_______, S(KC_DOT), S(KC_2), _______, _______,_______,_______, \ - _______,S(KC_NUBS), _______,_______,_______,_______, _______,_______, _______,KC_NUBS,S(KC_NUBS), S(KC_MINS), _______, _______, _______,_______,_______,_______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, _______,_______), \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + RA(RBRC),_______, RA(Q),KC_BSLS,_______,_______,M(CFLEX), S(6),S(RBRC), S(8), S(9),S(SLSH),KC_RBRC,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RA(7), RA(0),RA(NUBS), _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, S(DOT), S(2), _______, _______,_______,_______, \ + _______,S(NUBS),_______,_______,_______,_______,_______,_______,_______,KC_NUBS,S(NUBS),S(MINS), _______, _______, _______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______), /* Layer 3: media layer */ - [MEDIA] = KEYMAP(\ - KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_MPRV,KC_MPLY,KC_MNXT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_VOLD,KC_MUTE,KC_VOLU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, KC_EJCT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,_______,XXXXXXX, KC_MRWD,KC_MSTP,KC_MFFD, XXXXXXX,XXXXXXX), + [MEDIA] = KEYMAP(\ + KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_MPRV,KC_MPLY,KC_MNXT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_VOLD,KC_MUTE,KC_VOLU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, KC_EJCT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ + XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,_______,XXXXXXX, KC_MRWD,KC_MSTP,KC_MFFD, XXXXXXX,XXXXXXX), /* Layer 4: Mouse layer */ [MOUSE1] = KEYMAP(\ - F(6),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,KC_BTN4, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, KC_Y,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_DEL, KC_END,KC_PGDN, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - F(0),KC_BTN5, KC_MS_L, KC_MS_D, KC_MS_R, F(7),KC_WH_L,KC_WH_D,KC_WH_U, KC_WH_R, XXXXXXX,XXXXXXX, KC_BTN1, XXXXXXX,XXXXXXX,XXXXXXX, \ - MO(MOUSE2),XXXXXXX,LC(KC_Y),LC(KC_X),LC(KC_C),LC(KC_V),XXXXXXX,KC_BTN2,KC_BTN3,LC(KC_PGUP),LC(KC_PGDN),XXXXXXX, KC_RSFT, KC_UP, XXXXXXX,XXXXXXX,XXXXXXX,KC_PENT, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_BTN1, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, XXXXXXX,XXXXXXX), + F(6),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + _______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,KC_BTN4,KC_WH_D,KC_MS_U,KC_WH_U,_______, C(Z),_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,KC_BTN5,KC_MS_L,KC_MS_D,KC_MS_R, F(7),KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,_______,_______, _______, _______,_______,_______, \ + MO(MOUSE2),_______, C(Y), C(X), C(C), C(V),_______,KC_BTN2,KC_BTN3,C(PGUP),C(PGDN),_______, KC_RSFT, _______, _______,_______,_______,_______, \ + KC_LCTL,_______,KC_LALT, KC_BTN1, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, _______,_______,_______, _______,_______), /* Layer 5: Mouse layer 2*/ [MOUSE2] = KEYMAP(\ - _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______,_______, _______,_______,_______, \ - _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ - _______,_______,KC_BTN2, KC_WH_U, KC_BTN3, _______,_______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ - _______,_______,KC_WH_L, KC_WH_D, KC_WH_R, _______,KC_MS_L,KC_MS_D,KC_MS_U, KC_MS_R, _______,_______, _______, _______,_______,_______, \ - _______,_______,_______, _______, _______, _______,_______,_______,_______, _______, _______,_______, _______, _______, _______,_______,_______,_______, \ - _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______), + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,KC_BTN2,KC_WH_U,KC_BTN3,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,KC_WH_L,KC_WH_D,KC_WH_R,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______, _______, _______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______), /* Layer 6: Misc layer */ [MISC] = KEYMAP(\ - XXXXXXX, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,KC_SLCT,LC(KC_W), KC_UP, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,KC_BSPC, KC_DEL, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - XXXXXXX,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX,KC_HOME,KC_PGDN,KC_PGUP, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \ - KC_LSFT,XXXXXXX,LC(KC_Y),LC(KC_X),LC(KC_C),LC(KC_V), KC_SPC, KC_END,XXXXXXX,LC(KC_PGUP),LC(KC_PGDN),XXXXXXX, KC_RSFT, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \ - KC_LCTL,KC_LGUI, KC_LALT, LT(MISC, KC_SPC), KC_RALT,KC_RGUI, KC_APP,KC_RCTL, XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX), + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,KC_SLCT, C(W), KC_UP,_______,_______,_______,_______,KC_BSPC, KC_DEL,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \ + _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_HOME,KC_PGDN,KC_PGUP,_______,_______,_______, _______, _______,_______,_______, \ + KC_LSFT,_______, C(Y), C(X), C(C), C(V), KC_SPC, KC_END,_______,C(PGUP),C(PGDN),_______, _______, _______, _______,_______,_______,_______, \ + _______,_______,_______, LT(MISC, KC_SPC), _______,_______,_______,_______, _______,_______,_______, _______,_______), }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1), // toggle enable mouse layer (4) - [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET), // tap to print [ - [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET), // tap to print ] - [3] = ACTION_FUNCTION_TAP(LALT_CURLY), // tap to print { - [4] = ACTION_FUNCTION_TAP(RALT_CURLY), // tap to print } - [5] = ACTION_LAYER_TAP_TOGGLE(PROG1), // toggle programming layer 1 (1) + [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1), // tap-toggle mouse layer (4) + [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET), // tap to print [ + [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET), // tap to print ] + [3] = ACTION_FUNCTION_TAP(LALT_CURLY), // tap to print { + [4] = ACTION_FUNCTION_TAP(RALT_CURLY), // tap to print } + [5] = ACTION_LAYER_TAP_TOGGLE(PROG1), // tap-toggle programming layer 1 [6] = ACTION_LAYER_SET_CLEAR(DEFAULT), [7] = ACTION_FUNCTION_TAP(CTRL_CLICK), - [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN), // tap to print ( - [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN), // tap to print ) + [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN), // tap to print ( + [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN), // tap to print ) }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -126,7 +132,22 @@ void matrix_init_user(void) { } void matrix_scan_user(void) { + uint8_t layer; + layer = biton32(layer_state); + if (current_layer_global != layer) { + current_layer_global = layer; + + // unset CAPSLOCK and SCROLL LOCK LEDs + led_set_kb(host_keyboard_leds() & ~(1<event.pressed) { register_mods(MOD_LSFT); } else { diff --git a/keyboards/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/kitten_paw/keymaps/ickerwx/readme.md new file mode 100644 index 0000000000..0d23be4eac --- /dev/null +++ b/keyboards/kitten_paw/keymaps/ickerwx/readme.md @@ -0,0 +1,18 @@ +# My personal keymap for the Kitten Paw controller + +This keymap only works correctly when you have your OS configured with a German keymap. Use the keymap however you like. It's most likely a living thing that will never be quite finished. + +## Description of the layers +Layer 0 (DEFAULT) works just like you would expect a keyboard to work, mostly, except: +Caps Lock switches to the mouse layer, RGUI and APP are switches to the programming layer and media layer. +Mouse and programming layer switches can be held or double-tapped to lock. +Holding space switches to the MISC layer where I currently accumulate useful shortcuts. +Tapping left and right Shift, Ctrl and Alt will send (), [] and {} respectively. + +Layers 1 and 2 (PROG1 and PROG2) emulate the US layout while still using a German OS keymap setting. I was annoyed of having to change the OS settings every time I wanted to use the US layout for coding, so I made these layers to behave just like the US layout even though the OS still uses German. The shift keys were a bit tricky, I had to use them as MO(PROG2) switches, so to get the actual expected behavior I enable LSFT for almost every keypress on PROG2 in ```process_record_user```. Since the shift keys are MO() function keys, they do not print () at the moment, which sucks. I'm working on it. + +Layer 3 (MEDIA) just has a couple of media keys on it, mainly around the cursor keys and nav key cluster. + +Layers 4 and 5 (MOUSE1 and MOUSE2) are mouse layers. Move the cursor using ESDF, scroll using HJKL, Space for left click, N and M for right and middle click. There's more, look at the keymap. + +Layer 6 is a layer I don't have a good name for, so I call it MISC. You'll find cursor keys at ESDF, other navigation keys around the HJKL cluster and F12 to F24 on the F-keys. For now. \ No newline at end of file diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/kitten_paw/kitten_paw.c index 8713baf433..92f64b06b4 100644 --- a/keyboards/kitten_paw/kitten_paw.c +++ b/keyboards/kitten_paw/kitten_paw.c @@ -4,7 +4,6 @@ void matrix_init_kb(void) { // put your keyboard start-up code here // runs once when the firmware starts up - matrix_init_quantum(); matrix_init_user(); } @@ -12,7 +11,6 @@ void matrix_scan_kb(void) { // put your looping keyboard code here // runs every cycle (a lot) - matrix_scan_quantum(); matrix_scan_user(); } @@ -25,6 +23,21 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) { void led_set_kb(uint8_t usb_led) { // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - + CONFIG_LED_IO; + CONFIG_LED_IO; + print_dec(usb_led); + if (usb_led & (1< - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -#include "stdint.h" -#include "led.h" - -/* LED pin configuration - * - * Scroll Lock PC5 - * Caps Lock PC6 - * Num Lock PB7 - * - */ -void led_set(uint8_t usb_led) { - DDRB |= (1<<7); - DDRC |= (1<<5) | (1<<6); - - if (usb_led & (1< Date: Thu, 25 Aug 2016 08:16:18 -0500 Subject: Fixed naming of Analog pins to differentiate them from DIO pins used by Quantum Matrix --- keyboards/lets_split/pro_micro.h | 64 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/keyboards/lets_split/pro_micro.h b/keyboards/lets_split/pro_micro.h index 09e219b7b1..f9e7ed75d9 100644 --- a/keyboards/lets_split/pro_micro.h +++ b/keyboards/lets_split/pro_micro.h @@ -111,18 +111,18 @@ static const uint8_t SCK = 15; // Mapping of analog pins as digital I/O // A6-A11 share with digital pins -static const uint8_t A0 = 18; -static const uint8_t A1 = 19; -static const uint8_t A2 = 20; -static const uint8_t A3 = 21; -static const uint8_t A4 = 22; -static const uint8_t A5 = 23; -static const uint8_t A6 = 24; // D4 -static const uint8_t A7 = 25; // D6 -static const uint8_t A8 = 26; // D8 -static const uint8_t A9 = 27; // D9 -static const uint8_t A10 = 28; // D10 -static const uint8_t A11 = 29; // D12 +static const uint8_t ADC0 = 18; +static const uint8_t ADC1 = 19; +static const uint8_t ADC2 = 20; +static const uint8_t ADC3 = 21; +static const uint8_t ADC4 = 22; +static const uint8_t ADC5 = 23; +static const uint8_t ADC6 = 24; // D4 +static const uint8_t ADC7 = 25; // D6 +static const uint8_t ADC8 = 26; // D8 +static const uint8_t ADC9 = 27; // D9 +static const uint8_t ADC10 = 28; // D10 +static const uint8_t ADC11 = 29; // D12 #define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) #define digitalPinToPCICRbit(p) 0 @@ -220,26 +220,26 @@ const uint8_t PROGMEM digital_pin_to_port_PGM[] = { PC, // D5 - PC6 PD, // D6 - PD7 PE, // D7 - PE6 - + PB, // D8 - PB4 PB, // D9 - PB5 PB, // D10 - PB6 PB, // D11 - PB7 PD, // D12 - PD6 PC, // D13 - PC7 - + PB, // D14 - MISO - PB3 PB, // D15 - SCK - PB1 PB, // D16 - MOSI - PB2 PB, // D17 - SS - PB0 - + PF, // D18 - A0 - PF7 PF, // D19 - A1 - PF6 PF, // D20 - A2 - PF5 PF, // D21 - A3 - PF4 PF, // D22 - A4 - PF1 PF, // D23 - A5 - PF0 - + PD, // D24 - PD5 PD, // D25 / D6 - A7 - PD7 PB, // D26 / D8 - A8 - PB4 @@ -257,26 +257,26 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { _BV(6), // D5 - PC6 _BV(7), // D6 - PD7 _BV(6), // D7 - PE6 - + _BV(4), // D8 - PB4 _BV(5), // D9 - PB5 _BV(6), // D10 - PB6 _BV(7), // D11 - PB7 _BV(6), // D12 - PD6 _BV(7), // D13 - PC7 - + _BV(3), // D14 - MISO - PB3 _BV(1), // D15 - SCK - PB1 _BV(2), // D16 - MOSI - PB2 _BV(0), // D17 - SS - PB0 - + _BV(7), // D18 - A0 - PF7 _BV(6), // D19 - A1 - PF6 _BV(5), // D20 - A2 - PF5 _BV(4), // D21 - A3 - PF4 _BV(1), // D22 - A4 - PF1 _BV(0), // D23 - A5 - PF0 - + _BV(5), // D24 - PD5 _BV(7), // D25 / D6 - A7 - PD7 _BV(4), // D26 / D8 - A8 - PB4 @@ -286,24 +286,24 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { }; const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { - NOT_ON_TIMER, + NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, TIMER0B, /* 3 */ NOT_ON_TIMER, TIMER3A, /* 5 */ TIMER4D, /* 6 */ - NOT_ON_TIMER, - - NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, TIMER1A, /* 9 */ TIMER1B, /* 10 */ TIMER0A, /* 11 */ - - NOT_ON_TIMER, + + NOT_ON_TIMER, TIMER4A, /* 13 */ - - NOT_ON_TIMER, + + NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, @@ -324,11 +324,11 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { 7, // A0 PF7 ADC7 - 6, // A1 PF6 ADC6 - 5, // A2 PF5 ADC5 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 4, // A3 PF4 ADC4 - 1, // A4 PF1 ADC1 - 0, // A5 PF0 ADC0 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 8, // A6 D4 PD4 ADC8 10, // A7 D6 PD7 ADC10 11, // A8 D8 PB4 ADC11 -- cgit v1.2.3 From 8d0aed39d11efaf51a0831e78b5641b4b5686197 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 25 Aug 2016 20:39:55 +0200 Subject: - Added capslock led for KC60 keyboard (based on gitbug.com/jpec/kc60 works) --- keyboards/kc60/Makefile | 3 ++- keyboards/kc60/led.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 keyboards/kc60/led.c diff --git a/keyboards/kc60/Makefile b/keyboards/kc60/Makefile index b00a488b91..0d17d32dac 100644 --- a/keyboards/kc60/Makefile +++ b/keyboards/kc60/Makefile @@ -1,4 +1,5 @@ - +# project specific files +SRC = led.c # MCU name #MCU = at90usb1287 diff --git a/keyboards/kc60/led.c b/keyboards/kc60/led.c new file mode 100644 index 0000000000..50659d7247 --- /dev/null +++ b/keyboards/kc60/led.c @@ -0,0 +1,31 @@ +/* +Copyright 2012 Jun Wako +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include "stdint.h" +#include "led.h" + + +void led_set(uint8_t usb_led) +{ + if (usb_led & (1< Date: Thu, 25 Aug 2016 23:28:10 +0300 Subject: Split vision_division into Makefile/rules.mk --- keyboards/vision_division/Makefile | 77 +------------------------------------- keyboards/vision_division/rules.mk | 70 ++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 75 deletions(-) create mode 100644 keyboards/vision_division/rules.mk diff --git a/keyboards/vision_division/Makefile b/keyboards/vision_division/Makefile index 4f3130c483..4e2a6f00fd 100644 --- a/keyboards/vision_division/Makefile +++ b/keyboards/vision_division/Makefile @@ -1,76 +1,3 @@ - - -# MCU name -MCU = at90usb1286 -# MCU = at90usb1287 -# MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=1024 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= yes # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile -endif - - +endif \ No newline at end of file diff --git a/keyboards/vision_division/rules.mk b/keyboards/vision_division/rules.mk new file mode 100644 index 0000000000..063fba29bd --- /dev/null +++ b/keyboards/vision_division/rules.mk @@ -0,0 +1,70 @@ + + +# MCU name +MCU = at90usb1286 +# MCU = at90usb1287 +# MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=1024 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= yes # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 \ No newline at end of file -- cgit v1.2.3 From 3300203157e8c0fe9004e759aa5c18f1a1996e7e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 25 Aug 2016 23:37:18 +0300 Subject: Remove google test submodule It had been added for some strange reason, allthough it's supposed to be there only in another branch. --- lib/googletest | 1 - 1 file changed, 1 deletion(-) delete mode 160000 lib/googletest diff --git a/lib/googletest b/lib/googletest deleted file mode 160000 index ec44c6c167..0000000000 --- a/lib/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ec44c6c1675c25b9827aacd08c02433cccde7780 -- cgit v1.2.3 From 86ece6417644d2e9b5ea2548ff1dd4aa2ee8e354 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 25 Aug 2016 23:54:05 +0300 Subject: Fix minor typo in the readme --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b1808b6d13..db0bf87837 100644 --- a/readme.md +++ b/readme.md @@ -54,10 +54,10 @@ Here are the steps 1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). 2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following 1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first - 2. From within the Git bash run git rm --cached -r .` + 2. From within the Git bash run `git rm --cached -r .` 3. Followed by `git reset --hard` 3. Start the "Bash On Ubuntu On Windows" from the start menu -4. With the bash open, navigate to your git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. +4. With the bash open, navigate to your Git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. 5. Run `sudo util/install_dependencies.sh`. 6. After a while the installation will finish, and you are good to go -- cgit v1.2.3 From 6cfdd077b5bcdcfe8b390e4c07965eaf6c081c76 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 26 Aug 2016 00:05:58 +0300 Subject: Fix bad merge Led should have been added to KC60, not GH60 --- keyboards/gh60/rules.mk | 3 --- keyboards/kc60/rules.mk | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/keyboards/gh60/rules.mk b/keyboards/gh60/rules.mk index b3c5c7271c..aba680e45b 100644 --- a/keyboards/gh60/rules.mk +++ b/keyboards/gh60/rules.mk @@ -1,6 +1,3 @@ -# project specific files -SRC = led.c - # MCU name #MCU = at90usb1287 MCU = atmega32u4 diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk index 4efd6f9887..a935ed19ee 100644 --- a/keyboards/kc60/rules.mk +++ b/keyboards/kc60/rules.mk @@ -1,4 +1,5 @@ - +# project specific files +SRC = led.c # MCU name #MCU = at90usb1287 -- cgit v1.2.3 From 3f0e1b3a8ea2e8013a77a8ce948d2f69bbdcd869 Mon Sep 17 00:00:00 2001 From: zs Date: Thu, 25 Aug 2016 20:56:15 +0200 Subject: Correct typo in kc60 workman-dead keymap and rename README.md to readme.md --- keyboards/kc60/keymaps/workman-dead/README.md | 17 ----------------- keyboards/kc60/keymaps/workman-dead/keymap.c | 8 ++++---- keyboards/kc60/keymaps/workman-dead/readme.md | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 keyboards/kc60/keymaps/workman-dead/README.md create mode 100644 keyboards/kc60/keymaps/workman-dead/readme.md diff --git a/keyboards/kc60/keymaps/workman-dead/README.md b/keyboards/kc60/keymaps/workman-dead/README.md deleted file mode 100644 index f1fcdc9606..0000000000 --- a/keyboards/kc60/keymaps/workman-dead/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Workman dead with spacefn (kc60 @ QMK) - -## Layout reference -![workman dead with spacefn](./kc60-wm-dead.png) - -## Build - -To build this keymap, simply run `make KEYMAP=workman-dead`. - -## Notes - -* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though) -* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference) -* hold `space` to access the `function` layer (marked blue in the reference) -* hold `tab` to activate the mouse layer -* the `function` layer contains mostly osx specific shortcuts -* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout diff --git a/keyboards/kc60/keymaps/workman-dead/keymap.c b/keyboards/kc60/keymaps/workman-dead/keymap.c index 9786e37d8c..9e3b9bb656 100644 --- a/keyboards/kc60/keymaps/workman-dead/keymap.c +++ b/keyboards/kc60/keymaps/workman-dead/keymap.c @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \ KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), // QWERTY /* @@ -77,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \ KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFWM), // dead key layer /* @@ -98,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \ _______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \ _______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, _______), + KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, _______, KC_RALT, KC_RGUI, KC_RCTL, _______), // function layer /* @@ -119,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \ KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \ KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_NO, KC_RALT, KC_RGUI, KC_RCTL, RESET), + KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, _______, KC_RALT, KC_RGUI, KC_RCTL, RESET), // mouse layer /* diff --git a/keyboards/kc60/keymaps/workman-dead/readme.md b/keyboards/kc60/keymaps/workman-dead/readme.md new file mode 100644 index 0000000000..f1fcdc9606 --- /dev/null +++ b/keyboards/kc60/keymaps/workman-dead/readme.md @@ -0,0 +1,17 @@ +# Workman dead with spacefn (kc60 @ QMK) + +## Layout reference +![workman dead with spacefn](./kc60-wm-dead.png) + +## Build + +To build this keymap, simply run `make KEYMAP=workman-dead`. + +## Notes + +* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though) +* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference) +* hold `space` to access the `function` layer (marked blue in the reference) +* hold `tab` to activate the mouse layer +* the `function` layer contains mostly osx specific shortcuts +* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout -- cgit v1.2.3 From 5b58d7d1458502ad52b7a8e2be52afab17dc51a5 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 21 Aug 2016 19:31:34 +0200 Subject: =?UTF-8?q?Disable=20debugging=20for=20Ergodox=20keymap=20?= =?UTF-8?q?=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/Makefile | 1 + keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile index 6c0a79b110..b0fe90ab1d 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/Makefile +++ b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile @@ -1,2 +1,3 @@ SLEEP_LED_ENABLE = no UNICODE_ENABLE = yes +COMMAND_ENABLE = no diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 2ac06eef85..90651956af 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -1,5 +1,4 @@ #include "ergodox.h" -#include "debug.h" #include "action_layer.h" #include "led.h" #include "keymap_extras/keymap_neo2.h" -- cgit v1.2.3 From c78b44fb18194fb130ec3c49c38abc5afb6fee34 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 21 Aug 2016 20:39:09 +0200 Subject: =?UTF-8?q?Set=20Unicode=20input=20mode=20and=20override=20unicode?= =?UTF-8?q?=5Finput=5Fstart()=20method=20to=20keymap=20=E2=80=9Ccoderkun?= =?UTF-8?q?=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 90651956af..b665a5f3ae 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -155,8 +155,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [FMU] = KEYMAP( // left hand KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_MS_L, KC_MS_U, @@ -244,6 +244,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // Runs just one time when the keyboard initializes. void matrix_init_user(void) { + set_unicode_input_mode(UC_LNX); }; @@ -278,3 +279,14 @@ void matrix_scan_user(void) } }; + + +// Override Unicode start method to use NEO_U instead of KC_U +void unicode_input_start (void) { + register_code(KC_LCTL); + register_code(KC_LSFT); + register_code(NEO_U); + unregister_code(NEO_U); + unregister_code(KC_LSFT); + unregister_code(KC_LCTL); +}; -- cgit v1.2.3 From 137eb118e352201f7d324743e34ed57e6885b689 Mon Sep 17 00:00:00 2001 From: coderkun Date: Fri, 26 Aug 2016 13:26:16 +0200 Subject: =?UTF-8?q?Add=20box-drawing=20Unicode=20characters=20to=20keymap?= =?UTF-8?q?=20=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index b665a5f3ae..0eedecf3dd 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -137,11 +137,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + * │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + * │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + * │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ @@ -155,9 +155,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [FMU] = KEYMAP( // left hand KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS, + KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715), + KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_MS_L, KC_MS_U, KC_BTN1, -- cgit v1.2.3 From ff0e0ee4595cb6d9cfa5a742c58b8f7705d9a3f3 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Fri, 26 Aug 2016 14:48:03 -0700 Subject: [tv44] Add "jeebak" keymap folder as a copy of the "default" folder --- keyboards/tv44/keymaps/jeebak/Makefile | 21 +++++++ keyboards/tv44/keymaps/jeebak/config.h | 8 +++ keyboards/tv44/keymaps/jeebak/keymap.c | 97 +++++++++++++++++++++++++++++++++ keyboards/tv44/keymaps/jeebak/readme.md | 1 + 4 files changed, 127 insertions(+) create mode 100644 keyboards/tv44/keymaps/jeebak/Makefile create mode 100644 keyboards/tv44/keymaps/jeebak/config.h create mode 100644 keyboards/tv44/keymaps/jeebak/keymap.c create mode 100644 keyboards/tv44/keymaps/jeebak/readme.md diff --git a/keyboards/tv44/keymaps/jeebak/Makefile b/keyboards/tv44/keymaps/jeebak/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/tv44/keymaps/jeebak/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/jeebak/config.h b/keyboards/tv44/keymaps/jeebak/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/tv44/keymaps/jeebak/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c new file mode 100644 index 0000000000..f3f989f2d1 --- /dev/null +++ b/keyboards/tv44/keymaps/jeebak/keymap.c @@ -0,0 +1,97 @@ +#include "tv44.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +#define _QW 0 +#define _DV 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 +#define _L3 5 + +// Macro name shortcuts +#define QWERTY M(_QW) +#define DVORAK M(_DV) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +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 }, + {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_DV] = { /* Dvorak */ + {KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC }, + {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_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 }, + {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, + {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } + }, + [_L1] = { /* LAYER 1 */ + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, + {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, + {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L2] = { /* LAYER 2 */ + {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, + {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, + {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, + {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } + }, + [_L3] = { /* LAYER 3 */ + {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, + {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, + {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, + {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md new file mode 100644 index 0000000000..ac84c08cfa --- /dev/null +++ b/keyboards/tv44/keymaps/jeebak/readme.md @@ -0,0 +1 @@ +# The default keymap for tv44 \ No newline at end of file -- cgit v1.2.3 From 5fe883e74b7f8a1265c2069d16e8dcbd25fab18b Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Fri, 26 Aug 2016 15:05:51 -0700 Subject: [tv44] Port jeebak's planck keymap to tv44 --- keyboards/tv44/keymaps/jeebak/config.h | 17 +- keyboards/tv44/keymaps/jeebak/keymap.c | 460 +++++++++++++++++++++++++++----- keyboards/tv44/keymaps/jeebak/readme.md | 130 ++++++++- 3 files changed, 538 insertions(+), 69 deletions(-) diff --git a/keyboards/tv44/keymaps/jeebak/config.h b/keyboards/tv44/keymaps/jeebak/config.h index df06a26206..a59ef2b70a 100644 --- a/keyboards/tv44/keymaps/jeebak/config.h +++ b/keyboards/tv44/keymaps/jeebak/config.h @@ -3,6 +3,19 @@ #include "../../config.h" -// place overrides here +/** + *TV44 keymap definition macro + */ +#define KEYMAP_TV44( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \ + K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \ + K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \ + K37, K38, K39, K40, K41, K42, K43, K44 \ +) { \ + { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \ + { K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \ + { K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \ + { K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, KC_NO, K44 } \ +} -#endif \ No newline at end of file +#endif diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c index f3f989f2d1..1bb1015c36 100644 --- a/keyboards/tv44/keymaps/jeebak/keymap.c +++ b/keyboards/tv44/keymaps/jeebak/keymap.c @@ -8,65 +8,281 @@ extern keymap_config_t keymap_config; // The underscores don't mean anything - you can have a layer called STUFF or any other name. // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _TOUCHCURSOR 6 +#define _MOUSECURSOR 7 +#define _ADJUST 16 -#define _QW 0 -#define _DV 1 -#define _CM 2 -#define _L1 3 -#define _L2 4 -#define _L3 5 +// Keycodes +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; -// Macro name shortcuts -#define QWERTY M(_QW) -#define DVORAK M(_DV) -#define COLEMAK M(_CM) +enum macro_keycodes { + KC_ALT_TAB, + KC_CMD_TAB, + KC_CTL_TAB, + KC_CMD_SLSH, + KC_AG_FIND, + KC_AG_AGAIN, + KC_AG_UNDO, + KC_AG_CUT, + KC_AG_COPY, + KC_AG_PASTE, + KC_AG_DESK_L, + KC_AG_DESK_R, + KC_AG_TAB_C, + KC_AG_TAB_N, + KC_AG_TAB_R, +}; // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper +#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI +#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt +// Requires KC_TRNS/_______ for the trigger key in the destination layer +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor +#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor +#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab +#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab +#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab +#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) +#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings +#define AG_AGAIN M(KC_AG_AGAIN) +#define AG_UNDO M(KC_AG_UNDO) +#define AG_CUT M(KC_AG_CUT) +#define AG_COPY M(KC_AG_COPY) +#define AG_PASTE M(KC_AG_PASTE) +#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and +#define AG_D_R M(KC_AG_DESK_R) // Right +#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, +#define AG_T_N M(KC_AG_TAB_N) // Tab New, and +#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed 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 }, - {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_DV] = { /* Dvorak */ - {KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC }, - {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_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 }, - {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, - {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } - }, - [_L1] = { /* LAYER 1 */ - {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, - {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, - {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } - }, - [_L2] = { /* LAYER 2 */ - {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, - {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, - {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, - {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } - }, - [_L3] = { /* LAYER 3 */ - {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, - {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, - {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, - {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } - } -}; -const uint16_t PROGMEM fn_actions[] = { +/* Qwerty + * + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_QWERTY] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Colemak + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_COLEMAK] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + CTL_ESC , KC_A, KC_R,LT_MC(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, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Dvorak + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_DVORAK] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + CTL_ESC , KC_A, KC_O,LT_MC(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, SFT_ENT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Lower + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Brite | | | | | | Vol- | Mute | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_LOWER] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + 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_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Raise + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Brite | | | | | | Vol- | Mute | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_RAISE] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + * + * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't + * seem to work on Mac. Presumably they'll work under Windows. + */ +[_TOUCHCURSOR] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Mouse Layer + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ + +[_MOUSECURSOR] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Plover layer (http://opensteno.org) + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | TogOut | S | K | W | R | * | * | R | B | G | S | Z | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | Exit | A | O | | | E | U | | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ + +[_PLOVER] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + EXT_PLV , KC_C , KC_V , XXXXXXX , XXXXXXX , KC_N , KC_M , XXXXXXX ), +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ + +/* Adjust (Lower + Raise) + * ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + * | | | | | | | | | | | | Del | + * |---------`------`------`------`------`------`------`------`------`------`------`-------------| + * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |----------`------`------`------`------`------`------`------`------`------`------`------------| + * | | | | | | | | | | | | | + * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + * | | | | | | | | Reset | + * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' + */ +[_ADJUST] = KEYMAP_TV44( +/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ + _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , +/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ + _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ , +/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , +/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET ) +/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ }; void persistant_default_layer_set(uint16_t default_layer) { @@ -74,24 +290,136 @@ void persistant_default_layer_set(uint16_t default_layer) { default_layer_set(default_layer); } +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +/* + * Macro definition + */ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch(id) { - case _DV: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); - } - break; - case _QW: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); - } - break; - case _CM: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); - } - break; - } + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. + // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in: + // quantum/quantum.c + if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) { + use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. + } + + switch (id) { + case KC_ALT_TAB: + if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + case KC_CMD_TAB: + if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } + else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + + case KC_CTL_TAB: + return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); + case KC_CMD_SLSH: + return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); + + case KC_AG_FIND: + return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END ); + case KC_AG_AGAIN: + return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END ); + case KC_AG_UNDO: + return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END ); + case KC_AG_CUT: + return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END ); + case KC_AG_COPY: + return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); + case KC_AG_PASTE: + return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); + + case KC_AG_DESK_L: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); + case KC_AG_DESK_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); + + case KC_AG_TAB_C: + return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END ); + case KC_AG_TAB_N: + return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END ); + case KC_AG_TAB_R: + return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END ); + } + return MACRO_NONE; -}; +} diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md index ac84c08cfa..43d20958a6 100644 --- a/keyboards/tv44/keymaps/jeebak/readme.md +++ b/keyboards/tv44/keymaps/jeebak/readme.md @@ -1 +1,129 @@ -# The default keymap for tv44 \ No newline at end of file +jeebak's TV44 layout +======================= +NOTE: This is a port of jeebak's planck layout, for tv44. + +This WIP keymap attempts to minimize fingers straying away from the home row. +To aid in this endeavor, when additional modifyer keys to switch layers are +needed, they will be mapped to home row keys. The `keymap.c` file will contain +the exact changes. The diagrams in this README shows the highlights of the +changes from the default mappings. + +I also decided to change all calls to `persistant_default_layer_set()` to +`default_layer_set()` since this is my personal perference. + +## Macros +``` +#define ALT_TAB M(KC_ALT_TAB) +``` + +## Base Layers (Qwerty/Colemak/Dvorak) +These base layers are mostly the same as the default mappings. The interesting +changes are shown below. + +- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held, +- `GUI/;` as `;` and `GUI`, +- `Alt/"` as `"` and `Alt`, +- `Sft/Ent` as `Enter` and `Shift`, and +- `Hyper/Tab` as `Tab` and `Hyper` + +A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped. +The arrow keys, which have been moved to the +[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been +replaced with the Media keys as shown. The `MC/kc` key activates the +`MouseCursor` layer when held, and emits the corresponding `kc` for its layer, +when tapped. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`-------------| + | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play | + `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' +``` + +## Lower Layer (Symbols and Function Keys) +The symbols and functions keys are essentially the same as the default mapping. +The most notable changes are that the symbol keys from the `RAISE` layer have +been moved here. The remaining Media keys replace those that are now on the +base layers. The `BACKLIT` key has also been moved here. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`-------------| + | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | Brite | | | | | | Vol- | Mute | + `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' +``` + +## Raise Layer (Numbers and Arithmetic Operators) +All of the numbers and arithmetic operators are available on this layer. Some +keys are duplicated for the convenience of their positions. The `0` and `$` +keys at the far left are for quick access to beginning and end of line in vim. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + |---------`------`------`------`------`------`------`------`------`------`------`-------------| + | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | Brite | | | | | | Vol- | Mute | + `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' +``` + +## TouchCursor layer plus personal customizations +[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key +as the modifier, with the `IJKL` home row keys representing the inverted-T of +the arrow keys. All of the default TouchCursor keymappings for the right hand +are represented below. My personalizations include all of the keys shown for +the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key +from the base layers) readily accessible from the home row allows quick word +jumps and highlighting when used in conjunction with the arrow keys. The +`Alt-Tab` macro is not only useful under Windows, but also under Mac when used +with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch). +The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in +this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN` +keycodes do not seem to work. There are macros in place that'll "automatically" +choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`, +etc.) depending on which layout you've currently selected (`AG_NORM` or +`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I +use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and +`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as +Google Chrome. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | + |---------`------`------`------`------`------`------`------`------`------`------`-------------| + | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | | | | | | | | | + `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' +``` + +## Mouse Layer +The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer. +The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the +mouse from the `doc/keycode.txt` file are represented, and logically located, +IMHO. The left and right click buttons are duplicated; on the right hand side, +for a quick click here and there, and again on the left hand side for when the +buttons need to be held for dragging things or highlighting text, thus allowing +the right hand to be free to use the up/down/left/right actions. +``` + ,---------+------+------+------+------+------+------+------+------+------+------+-------------. + | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | + |---------`------`------`------`------`------`------`------`------`------`------`-------------| + | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 | + |----------`------`------`------`------`------`------`------`------`------`------`------------| + | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | | + |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------| + | | | | | | | | | + `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------' +``` -- cgit v1.2.3 From de58ec9738deebe73a43b9511c8df441c6f81efa Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:37:28 +0300 Subject: Set eep files to binary mode --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 8fd1fd7525..92dfc3c617 100644 --- a/.gitattributes +++ b/.gitattributes @@ -91,3 +91,4 @@ GRAPHICS # hex files *.hex binary +*.eep binary -- cgit v1.2.3 From a5b1af4999345239df5086351b52a5b4d2daa97e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:40:50 +0300 Subject: Normalize line endings --- .../chibios_test/boards/GENERIC_STM32_F103/board.c | 98 +- .../chibios_test/boards/GENERIC_STM32_F103/board.h | 332 ++-- .../boards/GENERIC_STM32_F103/board.mk | 10 +- keyboards/chibios_test/ld/MKL26Z64.ld | 210 +-- .../ld/STM32F103x8_stm32duino_bootloader.ld | 176 +- keyboards/chibios_test/stm32_f072_onekey/mcuconf.h | 342 ++-- keyboards/chibios_test/stm32_f103_onekey/mcuconf.h | 418 ++--- keyboards/chibios_test/teensy_lc_onekey/chconf.h | 1048 +++++------ keyboards/chibios_test/teensy_lc_onekey/halconf.h | 374 ++-- keyboards/chibios_test/teensy_lc_onekey/mcuconf.h | 110 +- keyboards/gh60/Makefile | 148 +- keyboards/gh60/config.h | 322 ++-- keyboards/gh60/gh60.c | 50 +- keyboards/gh60/gh60.h | 148 +- keyboards/gh60/keymaps/robotmaxtron/Makefile | 224 +-- keyboards/gh60/keymaps/robotmaxtron/config.h | 380 ++-- keyboards/gh60/pinout.txt | 34 +- keyboards/gh60/readme.md | 120 +- keyboards/infinity_chibios/chconf.h | 1048 +++++------ keyboards/infinity_chibios/halconf.h | 706 +++---- keyboards/infinity_chibios/mcuconf.h | 110 +- tmk_core/common/avr/xprintf.S | 1000 +++++----- tmk_core/common/avr/xprintf.h | 222 +-- tmk_core/protocol/iwrap/suart.S | 312 ++-- tmk_core/protocol/iwrap/suart.h | 16 +- tmk_core/protocol/iwrap/wd.h | 318 ++-- .../protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml | 322 ++-- .../protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml | 312 ++-- .../protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml | 246 +-- .../Bootloaders/MassStorage/BootloaderAPITable.S | 204 +- .../lufa/LUFA-git/Bootloaders/MassStorage/asf.xml | 312 ++-- .../lufa/LUFA-git/Bootloaders/MassStorage/makefile | 136 +- .../Bootloaders/Printer/BootloaderAPITable.S | 182 +- .../lufa/LUFA-git/Bootloaders/Printer/asf.xml | 318 ++-- .../lufa/LUFA-git/Bootloaders/Printer/makefile | 110 +- .../LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile | 84 +- .../LUFA/CodeTemplates/DeviceTemplate/asf.xml | 110 +- .../LUFA/CodeTemplates/HostTemplate/asf.xml | 82 +- .../LUFA-git/LUFA/DoxygenPages/BuildSystem.txt | 1950 ++++++++++---------- 39 files changed, 6322 insertions(+), 6322 deletions(-) diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c index 31319ef575..2809c9d184 100644 --- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c +++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c @@ -1,49 +1,49 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "hal.h" - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - * This variable is used by the HAL when initializing the PAL driver. - */ -#if HAL_USE_PAL || defined(__DOXYGEN__) -const PALConfig pal_default_config = -{ - {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH}, - {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH}, - {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH}, - {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH}, - {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH}, -}; -#endif - -/* - * Early initialization code. - * This initialization must be performed just after stack setup and before - * any other initialization. - */ -void __early_init(void) { - - stm32_clock_init(); -} - -/* - * Board-specific initialization code. - */ -void boardInit(void) { -} +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "hal.h" + +/** + * @brief PAL setup. + * @details Digital I/O ports static configuration as defined in @p board.h. + * This variable is used by the HAL when initializing the PAL driver. + */ +#if HAL_USE_PAL || defined(__DOXYGEN__) +const PALConfig pal_default_config = +{ + {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH}, + {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH}, + {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH}, + {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH}, + {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH}, +}; +#endif + +/* + * Early initialization code. + * This initialization must be performed just after stack setup and before + * any other initialization. + */ +void __early_init(void) { + + stm32_clock_init(); +} + +/* + * Board-specific initialization code. + */ +void boardInit(void) { +} diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h index 7253e77826..b31d74307b 100644 --- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h +++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h @@ -1,166 +1,166 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for a Generic STM32F103 board. - */ - -/* - * Board identifier. - */ -#define BOARD_GENERIC_STM32_F103 -#define BOARD_NAME "Generic STM32F103x board" - -/* - * Board frequencies. - */ -#define STM32_LSECLK 32768 -#define STM32_HSECLK 8000000 - -/* - * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h. - */ -#define STM32F103xB - -/* - * IO pins assignments - */ - -/* on-board */ - -#define GPIOC_LED 13 -#define GPIOD_OSC_IN 0 -#define GPIOD_OSC_OUT 1 - -/* In case your board has a "USB enable" hardware - controlled by a pin, define it here. (It could be just - a 1.5k resistor connected to D+ line.) -*/ -/* -#define GPIOB_USB_DISC 10 -*/ - -/* - * I/O ports initial setup, this configuration is established soon after reset - * in the initialization code. - * - * The digits have the following meaning: - * 0 - Analog input. - * 1 - Push Pull output 10MHz. - * 2 - Push Pull output 2MHz. - * 3 - Push Pull output 50MHz. - * 4 - Digital input. - * 5 - Open Drain output 10MHz. - * 6 - Open Drain output 2MHz. - * 7 - Open Drain output 50MHz. - * 8 - Digital input with PullUp or PullDown resistor depending on ODR. - * 9 - Alternate Push Pull output 10MHz. - * A - Alternate Push Pull output 2MHz. - * B - Alternate Push Pull output 50MHz. - * C - Reserved. - * D - Alternate Open Drain output 10MHz. - * E - Alternate Open Drain output 2MHz. - * F - Alternate Open Drain output 50MHz. - * Please refer to the STM32 Reference Manual for details. - */ - -/* - * Port A setup. - * Everything input with pull-up except: - * PA2 - Alternate output (USART2 TX). - * PA3 - Normal input (USART2 RX). - * PA9 - Alternate output (USART1 TX). - * PA10 - Normal input (USART1 RX). - */ -#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */ -#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */ -#define VAL_GPIOAODR 0xFFFFFFFF - -/* - * Port B setup. - * Everything input with pull-up except: - * PB10 - Push Pull output (USB switch). - */ -#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ -#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */ -#define VAL_GPIOBODR 0xFFFFFFFF - -/* - * Port C setup. - * Everything input with pull-up except: - * PC13 - Push Pull output (LED). - */ -#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */ -#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */ -#define VAL_GPIOCODR 0xFFFFFFFF - -/* - * Port D setup. - * Everything input with pull-up except: - * PD0 - Normal input (XTAL). - * PD1 - Normal input (XTAL). - */ -#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ -#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ -#define VAL_GPIODODR 0xFFFFFFFF - -/* - * Port E setup. - * Everything input with pull-up except: - */ -#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ -#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ -#define VAL_GPIOEODR 0xFFFFFFFF - -/* - * USB bus activation macro, required by the USB driver. - */ -/* The point is that most of the generic STM32F103* boards - have a 1.5k resistor connected on one end to the D+ line - and on the other end to some pin. Or even a slightly more - complicated "USB enable" circuit, controlled by a pin. - That should go here. - - However on some boards (e.g. one that I have), there's no - such hardware. In which case it's better to not do anything. -*/ -/* -#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC) -*/ -#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT); - -/* - * USB bus de-activation macro, required by the USB driver. - */ -/* -#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC) -*/ -#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12); - -#if !defined(_FROM_ASM_) -#ifdef __cplusplus -extern "C" { -#endif - void boardInit(void); -#ifdef __cplusplus -} -#endif -#endif /* _FROM_ASM_ */ - -#endif /* _BOARD_H_ */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for a Generic STM32F103 board. + */ + +/* + * Board identifier. + */ +#define BOARD_GENERIC_STM32_F103 +#define BOARD_NAME "Generic STM32F103x board" + +/* + * Board frequencies. + */ +#define STM32_LSECLK 32768 +#define STM32_HSECLK 8000000 + +/* + * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h. + */ +#define STM32F103xB + +/* + * IO pins assignments + */ + +/* on-board */ + +#define GPIOC_LED 13 +#define GPIOD_OSC_IN 0 +#define GPIOD_OSC_OUT 1 + +/* In case your board has a "USB enable" hardware + controlled by a pin, define it here. (It could be just + a 1.5k resistor connected to D+ line.) +*/ +/* +#define GPIOB_USB_DISC 10 +*/ + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * + * The digits have the following meaning: + * 0 - Analog input. + * 1 - Push Pull output 10MHz. + * 2 - Push Pull output 2MHz. + * 3 - Push Pull output 50MHz. + * 4 - Digital input. + * 5 - Open Drain output 10MHz. + * 6 - Open Drain output 2MHz. + * 7 - Open Drain output 50MHz. + * 8 - Digital input with PullUp or PullDown resistor depending on ODR. + * 9 - Alternate Push Pull output 10MHz. + * A - Alternate Push Pull output 2MHz. + * B - Alternate Push Pull output 50MHz. + * C - Reserved. + * D - Alternate Open Drain output 10MHz. + * E - Alternate Open Drain output 2MHz. + * F - Alternate Open Drain output 50MHz. + * Please refer to the STM32 Reference Manual for details. + */ + +/* + * Port A setup. + * Everything input with pull-up except: + * PA2 - Alternate output (USART2 TX). + * PA3 - Normal input (USART2 RX). + * PA9 - Alternate output (USART1 TX). + * PA10 - Normal input (USART1 RX). + */ +#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFFFF + +/* + * Port B setup. + * Everything input with pull-up except: + * PB10 - Push Pull output (USB switch). + */ +#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ +#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */ +#define VAL_GPIOBODR 0xFFFFFFFF + +/* + * Port C setup. + * Everything input with pull-up except: + * PC13 - Push Pull output (LED). + */ +#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */ +#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */ +#define VAL_GPIOCODR 0xFFFFFFFF + +/* + * Port D setup. + * Everything input with pull-up except: + * PD0 - Normal input (XTAL). + * PD1 - Normal input (XTAL). + */ +#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ +#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ +#define VAL_GPIODODR 0xFFFFFFFF + +/* + * Port E setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ +#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ +#define VAL_GPIOEODR 0xFFFFFFFF + +/* + * USB bus activation macro, required by the USB driver. + */ +/* The point is that most of the generic STM32F103* boards + have a 1.5k resistor connected on one end to the D+ line + and on the other end to some pin. Or even a slightly more + complicated "USB enable" circuit, controlled by a pin. + That should go here. + + However on some boards (e.g. one that I have), there's no + such hardware. In which case it's better to not do anything. +*/ +/* +#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT); + +/* + * USB bus de-activation macro, required by the USB driver. + */ +/* +#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12); + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* _BOARD_H_ */ diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk index d692c0ee46..48e0e51fe6 100644 --- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk +++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk @@ -1,5 +1,5 @@ -# List of all the board related files. -BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c - -# Required include directories -BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103 +# List of all the board related files. +BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c + +# Required include directories +BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103 diff --git a/keyboards/chibios_test/ld/MKL26Z64.ld b/keyboards/chibios_test/ld/MKL26Z64.ld index fb141f888c..c4ca8b874c 100644 --- a/keyboards/chibios_test/ld/MKL26Z64.ld +++ b/keyboards/chibios_test/ld/MKL26Z64.ld @@ -1,105 +1,105 @@ -/* - * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com - * (C) 2016 flabbergast - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -/* - * KL26Z64 memory setup. - */ -MEMORY -{ - flash0 : org = 0x00000000, len = 0x100 - flash1 : org = 0x00000400, len = 0x10 - flash2 : org = 0x00000410, len = 62k - 0x410 - flash3 : org = 0x0000F800, len = 2k - flash4 : org = 0x00000000, len = 0 - flash5 : org = 0x00000000, len = 0 - flash6 : org = 0x00000000, len = 0 - flash7 : org = 0x00000000, len = 0 - ram0 : org = 0x1FFFF800, len = 8k - ram1 : org = 0x00000000, len = 0 - ram2 : org = 0x00000000, len = 0 - ram3 : org = 0x00000000, len = 0 - ram4 : org = 0x00000000, len = 0 - ram5 : org = 0x00000000, len = 0 - ram6 : org = 0x00000000, len = 0 - ram7 : org = 0x00000000, len = 0 -} - -/* Flash region for the configuration bytes.*/ -SECTIONS -{ - .cfmprotect : ALIGN(4) SUBALIGN(4) - { - KEEP(*(.cfmconfig)) - } > flash1 -} - -/* For each data/text section two region are defined, a virtual region - and a load region (_LMA suffix).*/ - -/* Flash region to be used for exception vectors.*/ -REGION_ALIAS("VECTORS_FLASH", flash0); -REGION_ALIAS("VECTORS_FLASH_LMA", flash0); - -/* Flash region to be used for constructors and destructors.*/ -REGION_ALIAS("XTORS_FLASH", flash2); -REGION_ALIAS("XTORS_FLASH_LMA", flash2); - -/* Flash region to be used for code text.*/ -REGION_ALIAS("TEXT_FLASH", flash2); -REGION_ALIAS("TEXT_FLASH_LMA", flash2); - -/* Flash region to be used for read only data.*/ -REGION_ALIAS("RODATA_FLASH", flash2); -REGION_ALIAS("RODATA_FLASH_LMA", flash2); - -/* Flash region to be used for various.*/ -REGION_ALIAS("VARIOUS_FLASH", flash2); -REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); - -/* Flash region to be used for RAM(n) initialization data.*/ -REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); - -/* RAM region to be used for Main stack. This stack accommodates the processing - of all exceptions and interrupts.*/ -REGION_ALIAS("MAIN_STACK_RAM", ram0); - -/* RAM region to be used for the process stack. This is the stack used by - the main() function.*/ -REGION_ALIAS("PROCESS_STACK_RAM", ram0); - -/* RAM region to be used for data segment.*/ -REGION_ALIAS("DATA_RAM", ram0); -REGION_ALIAS("DATA_RAM_LMA", flash2); - -/* RAM region to be used for BSS segment.*/ -REGION_ALIAS("BSS_RAM", ram0); - -/* RAM region to be used for the default heap.*/ -REGION_ALIAS("HEAP_RAM", ram0); - -__eeprom_workarea_start__ = ORIGIN(flash3); -__eeprom_workarea_size__ = LENGTH(flash3); -__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; - -/* Generic rules inclusion.*/ -INCLUDE rules.ld +/* + * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com + * (C) 2016 flabbergast + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * KL26Z64 memory setup. + */ +MEMORY +{ + flash0 : org = 0x00000000, len = 0x100 + flash1 : org = 0x00000400, len = 0x10 + flash2 : org = 0x00000410, len = 62k - 0x410 + flash3 : org = 0x0000F800, len = 2k + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x1FFFF800, len = 8k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* Flash region for the configuration bytes.*/ +SECTIONS +{ + .cfmprotect : ALIGN(4) SUBALIGN(4) + { + KEEP(*(.cfmconfig)) + } > flash1 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash2); +REGION_ALIAS("XTORS_FLASH_LMA", flash2); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash2); +REGION_ALIAS("TEXT_FLASH_LMA", flash2); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash2); +REGION_ALIAS("RODATA_FLASH_LMA", flash2); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash2); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash2); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +__eeprom_workarea_start__ = ORIGIN(flash3); +__eeprom_workarea_size__ = LENGTH(flash3); +__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld index 00613328ed..f9bfe9c005 100644 --- a/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld +++ b/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld @@ -1,88 +1,88 @@ -/* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* - * ST32F103xB memory setup for use with the maplemini bootloader. - * You will have to - * #define CORTEX_VTOR_INIT 0x5000 - * in your projects chconf.h - */ -MEMORY -{ - flash0 : org = 0x08002000, len = 128k - 0x2000 - flash1 : org = 0x00000000, len = 0 - flash2 : org = 0x00000000, len = 0 - flash3 : org = 0x00000000, len = 0 - flash4 : org = 0x00000000, len = 0 - flash5 : org = 0x00000000, len = 0 - flash6 : org = 0x00000000, len = 0 - flash7 : org = 0x00000000, len = 0 - ram0 : org = 0x20000000, len = 20k - ram1 : org = 0x00000000, len = 0 - ram2 : org = 0x00000000, len = 0 - ram3 : org = 0x00000000, len = 0 - ram4 : org = 0x00000000, len = 0 - ram5 : org = 0x00000000, len = 0 - ram6 : org = 0x00000000, len = 0 - ram7 : org = 0x00000000, len = 0 -} - -/* For each data/text section two region are defined, a virtual region - and a load region (_LMA suffix).*/ - -/* Flash region to be used for exception vectors.*/ -REGION_ALIAS("VECTORS_FLASH", flash0); -REGION_ALIAS("VECTORS_FLASH_LMA", flash0); - -/* Flash region to be used for constructors and destructors.*/ -REGION_ALIAS("XTORS_FLASH", flash0); -REGION_ALIAS("XTORS_FLASH_LMA", flash0); - -/* Flash region to be used for code text.*/ -REGION_ALIAS("TEXT_FLASH", flash0); -REGION_ALIAS("TEXT_FLASH_LMA", flash0); - -/* Flash region to be used for read only data.*/ -REGION_ALIAS("RODATA_FLASH", flash0); -REGION_ALIAS("RODATA_FLASH_LMA", flash0); - -/* Flash region to be used for various.*/ -REGION_ALIAS("VARIOUS_FLASH", flash0); -REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); - -/* Flash region to be used for RAM(n) initialization data.*/ -REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); - -/* RAM region to be used for Main stack. This stack accommodates the processing - of all exceptions and interrupts.*/ -REGION_ALIAS("MAIN_STACK_RAM", ram0); - -/* RAM region to be used for the process stack. This is the stack used by - the main() function.*/ -REGION_ALIAS("PROCESS_STACK_RAM", ram0); - -/* RAM region to be used for data segment.*/ -REGION_ALIAS("DATA_RAM", ram0); -REGION_ALIAS("DATA_RAM_LMA", flash0); - -/* RAM region to be used for BSS segment.*/ -REGION_ALIAS("BSS_RAM", ram0); - -/* RAM region to be used for the default heap.*/ -REGION_ALIAS("HEAP_RAM", ram0); - -/* Generic rules inclusion.*/ -INCLUDE rules.ld +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * ST32F103xB memory setup for use with the maplemini bootloader. + * You will have to + * #define CORTEX_VTOR_INIT 0x5000 + * in your projects chconf.h + */ +MEMORY +{ + flash0 : org = 0x08002000, len = 128k - 0x2000 + flash1 : org = 0x00000000, len = 0 + flash2 : org = 0x00000000, len = 0 + flash3 : org = 0x00000000, len = 0 + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x20000000, len = 20k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h index 3d877aaa2b..faca3defdf 100644 --- a/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h +++ b/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h @@ -1,171 +1,171 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MCUCONF_H_ -#define _MCUCONF_H_ - -/* - * STM32F0xx drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. - * - * IRQ priorities: - * 3...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -#define STM32F0xx_MCUCONF - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT FALSE -#define STM32_PVD_ENABLE FALSE -#define STM32_PLS STM32_PLS_LEV0 -#define STM32_HSI_ENABLED TRUE -#define STM32_HSI14_ENABLED TRUE -#define STM32_HSI48_ENABLED FALSE -#define STM32_LSI_ENABLED TRUE -#define STM32_HSE_ENABLED FALSE -#define STM32_LSE_ENABLED FALSE -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2 -#define STM32_PREDIV_VALUE 1 -#define STM32_PLLMUL_VALUE 12 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE STM32_PPRE_DIV1 -#define STM32_ADCSW STM32_ADCSW_HSI14 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_ADCSW STM32_ADCSW_HSI14 -#define STM32_USBSW STM32_USBSW_HSI48 -#define STM32_CECSW STM32_CECSW_HSI -#define STM32_I2C1SW STM32_I2C1SW_HSI -#define STM32_USART1SW STM32_USART1SW_PCLK -#define STM32_RTCSEL STM32_RTCSEL_LSI - -/* - * ADC driver system settings. - */ -#define STM32_ADC_USE_ADC1 FALSE -#define STM32_ADC_ADC1_DMA_PRIORITY 2 -#define STM32_ADC_IRQ_PRIORITY 2 -#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2 - -/* - * EXT driver system settings. - */ -#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 3 - -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 FALSE -#define STM32_GPT_USE_TIM2 FALSE -#define STM32_GPT_USE_TIM3 FALSE -#define STM32_GPT_USE_TIM14 FALSE -#define STM32_GPT_TIM1_IRQ_PRIORITY 2 -#define STM32_GPT_TIM2_IRQ_PRIORITY 2 -#define STM32_GPT_TIM3_IRQ_PRIORITY 2 -#define STM32_GPT_TIM14_IRQ_PRIORITY 2 - -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 FALSE -#define STM32_I2C_USE_I2C2 FALSE -#define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_IRQ_PRIORITY 3 -#define STM32_I2C_I2C2_IRQ_PRIORITY 3 -#define STM32_I2C_USE_DMA TRUE -#define STM32_I2C_I2C1_DMA_PRIORITY 1 -#define STM32_I2C_I2C2_DMA_PRIORITY 1 -#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") - -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 FALSE -#define STM32_ICU_USE_TIM2 FALSE -#define STM32_ICU_USE_TIM3 FALSE -#define STM32_ICU_TIM1_IRQ_PRIORITY 3 -#define STM32_ICU_TIM2_IRQ_PRIORITY 3 -#define STM32_ICU_TIM3_IRQ_PRIORITY 3 - -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_ADVANCED FALSE -#define STM32_PWM_USE_TIM1 FALSE -#define STM32_PWM_USE_TIM2 FALSE -#define STM32_PWM_USE_TIM3 FALSE -#define STM32_PWM_TIM1_IRQ_PRIORITY 3 -#define STM32_PWM_TIM2_IRQ_PRIORITY 3 -#define STM32_PWM_TIM3_IRQ_PRIORITY 3 - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 FALSE -#define STM32_SERIAL_USE_USART2 FALSE -#define STM32_SERIAL_USART1_PRIORITY 3 -#define STM32_SERIAL_USART2_PRIORITY 3 - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 FALSE -#define STM32_SPI_USE_SPI2 FALSE -#define STM32_SPI_SPI1_DMA_PRIORITY 1 -#define STM32_SPI_SPI2_DMA_PRIORITY 1 -#define STM32_SPI_SPI1_IRQ_PRIORITY 2 -#define STM32_SPI_SPI2_IRQ_PRIORITY 2 -#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") - -/* - * ST driver system settings. - */ -#define STM32_ST_IRQ_PRIORITY 2 -#define STM32_ST_USE_TIMER 2 - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 FALSE -#define STM32_UART_USE_USART2 FALSE -#define STM32_UART_USART1_IRQ_PRIORITY 3 -#define STM32_UART_USART2_IRQ_PRIORITY 3 -#define STM32_UART_USART1_DMA_PRIORITY 0 -#define STM32_UART_USART2_DMA_PRIORITY 0 -#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") - -/* - * USB driver system settings. - */ -#define STM32_USB_USE_USB1 TRUE -#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE -#define STM32_USB_USB1_LP_IRQ_PRIORITY 3 - -#endif /* _MCUCONF_H_ */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _MCUCONF_H_ +#define _MCUCONF_H_ + +/* + * STM32F0xx drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 3...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +#define STM32F0xx_MCUCONF + +/* + * HAL driver system settings. + */ +#define STM32_NO_INIT FALSE +#define STM32_PVD_ENABLE FALSE +#define STM32_PLS STM32_PLS_LEV0 +#define STM32_HSI_ENABLED TRUE +#define STM32_HSI14_ENABLED TRUE +#define STM32_HSI48_ENABLED FALSE +#define STM32_LSI_ENABLED TRUE +#define STM32_HSE_ENABLED FALSE +#define STM32_LSE_ENABLED FALSE +#define STM32_SW STM32_SW_PLL +#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2 +#define STM32_PREDIV_VALUE 1 +#define STM32_PLLMUL_VALUE 12 +#define STM32_HPRE STM32_HPRE_DIV1 +#define STM32_PPRE STM32_PPRE_DIV1 +#define STM32_ADCSW STM32_ADCSW_HSI14 +#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK +#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_ADCSW STM32_ADCSW_HSI14 +#define STM32_USBSW STM32_USBSW_HSI48 +#define STM32_CECSW STM32_CECSW_HSI +#define STM32_I2C1SW STM32_I2C1SW_HSI +#define STM32_USART1SW STM32_USART1SW_PCLK +#define STM32_RTCSEL STM32_RTCSEL_LSI + +/* + * ADC driver system settings. + */ +#define STM32_ADC_USE_ADC1 FALSE +#define STM32_ADC_ADC1_DMA_PRIORITY 2 +#define STM32_ADC_IRQ_PRIORITY 2 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2 + +/* + * EXT driver system settings. + */ +#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3 +#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3 +#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3 +#define STM32_EXT_EXTI16_IRQ_PRIORITY 3 +#define STM32_EXT_EXTI17_IRQ_PRIORITY 3 + +/* + * GPT driver system settings. + */ +#define STM32_GPT_USE_TIM1 FALSE +#define STM32_GPT_USE_TIM2 FALSE +#define STM32_GPT_USE_TIM3 FALSE +#define STM32_GPT_USE_TIM14 FALSE +#define STM32_GPT_TIM1_IRQ_PRIORITY 2 +#define STM32_GPT_TIM2_IRQ_PRIORITY 2 +#define STM32_GPT_TIM3_IRQ_PRIORITY 2 +#define STM32_GPT_TIM14_IRQ_PRIORITY 2 + +/* + * I2C driver system settings. + */ +#define STM32_I2C_USE_I2C1 FALSE +#define STM32_I2C_USE_I2C2 FALSE +#define STM32_I2C_BUSY_TIMEOUT 50 +#define STM32_I2C_I2C1_IRQ_PRIORITY 3 +#define STM32_I2C_I2C2_IRQ_PRIORITY 3 +#define STM32_I2C_USE_DMA TRUE +#define STM32_I2C_I2C1_DMA_PRIORITY 1 +#define STM32_I2C_I2C2_DMA_PRIORITY 1 +#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") + +/* + * ICU driver system settings. + */ +#define STM32_ICU_USE_TIM1 FALSE +#define STM32_ICU_USE_TIM2 FALSE +#define STM32_ICU_USE_TIM3 FALSE +#define STM32_ICU_TIM1_IRQ_PRIORITY 3 +#define STM32_ICU_TIM2_IRQ_PRIORITY 3 +#define STM32_ICU_TIM3_IRQ_PRIORITY 3 + +/* + * PWM driver system settings. + */ +#define STM32_PWM_USE_ADVANCED FALSE +#define STM32_PWM_USE_TIM1 FALSE +#define STM32_PWM_USE_TIM2 FALSE +#define STM32_PWM_USE_TIM3 FALSE +#define STM32_PWM_TIM1_IRQ_PRIORITY 3 +#define STM32_PWM_TIM2_IRQ_PRIORITY 3 +#define STM32_PWM_TIM3_IRQ_PRIORITY 3 + +/* + * SERIAL driver system settings. + */ +#define STM32_SERIAL_USE_USART1 FALSE +#define STM32_SERIAL_USE_USART2 FALSE +#define STM32_SERIAL_USART1_PRIORITY 3 +#define STM32_SERIAL_USART2_PRIORITY 3 + +/* + * SPI driver system settings. + */ +#define STM32_SPI_USE_SPI1 FALSE +#define STM32_SPI_USE_SPI2 FALSE +#define STM32_SPI_SPI1_DMA_PRIORITY 1 +#define STM32_SPI_SPI2_DMA_PRIORITY 1 +#define STM32_SPI_SPI1_IRQ_PRIORITY 2 +#define STM32_SPI_SPI2_IRQ_PRIORITY 2 +#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") + +/* + * ST driver system settings. + */ +#define STM32_ST_IRQ_PRIORITY 2 +#define STM32_ST_USE_TIMER 2 + +/* + * UART driver system settings. + */ +#define STM32_UART_USE_USART1 FALSE +#define STM32_UART_USE_USART2 FALSE +#define STM32_UART_USART1_IRQ_PRIORITY 3 +#define STM32_UART_USART2_IRQ_PRIORITY 3 +#define STM32_UART_USART1_DMA_PRIORITY 0 +#define STM32_UART_USART2_DMA_PRIORITY 0 +#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") + +/* + * USB driver system settings. + */ +#define STM32_USB_USE_USB1 TRUE +#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE +#define STM32_USB_USB1_LP_IRQ_PRIORITY 3 + +#endif /* _MCUCONF_H_ */ diff --git a/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h index 626332a6aa..276829216e 100644 --- a/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h +++ b/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h @@ -1,209 +1,209 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MCUCONF_H_ -#define _MCUCONF_H_ - -#define STM32F103_MCUCONF - -/* - * STM32F103 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT FALSE -#define STM32_HSI_ENABLED TRUE -#define STM32_LSI_ENABLED FALSE -#define STM32_HSE_ENABLED TRUE -#define STM32_LSE_ENABLED FALSE -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 9 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_USB_CLOCK_REQUIRED TRUE -#define STM32_USBPRE STM32_USBPRE_DIV1P5 -#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK -#define STM32_RTCSEL STM32_RTCSEL_HSEDIV -#define STM32_PVD_ENABLE FALSE -#define STM32_PLS STM32_PLS_LEV0 - -/* - * ADC driver system settings. - */ -#define STM32_ADC_USE_ADC1 FALSE -#define STM32_ADC_ADC1_DMA_PRIORITY 2 -#define STM32_ADC_ADC1_IRQ_PRIORITY 6 - -/* - * CAN driver system settings. - */ -#define STM32_CAN_USE_CAN1 FALSE -#define STM32_CAN_CAN1_IRQ_PRIORITY 11 - -/* - * EXT driver system settings. - */ -#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 - -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 FALSE -#define STM32_GPT_USE_TIM2 FALSE -#define STM32_GPT_USE_TIM3 FALSE -#define STM32_GPT_USE_TIM4 FALSE -#define STM32_GPT_USE_TIM5 FALSE -#define STM32_GPT_USE_TIM8 FALSE -#define STM32_GPT_TIM1_IRQ_PRIORITY 7 -#define STM32_GPT_TIM2_IRQ_PRIORITY 7 -#define STM32_GPT_TIM3_IRQ_PRIORITY 7 -#define STM32_GPT_TIM4_IRQ_PRIORITY 7 -#define STM32_GPT_TIM5_IRQ_PRIORITY 7 -#define STM32_GPT_TIM8_IRQ_PRIORITY 7 - -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 FALSE -#define STM32_I2C_USE_I2C2 FALSE -#define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C1_DMA_PRIORITY 3 -#define STM32_I2C_I2C2_DMA_PRIORITY 3 -#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") - -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 FALSE -#define STM32_ICU_USE_TIM2 FALSE -#define STM32_ICU_USE_TIM3 FALSE -#define STM32_ICU_USE_TIM4 FALSE -#define STM32_ICU_USE_TIM5 FALSE -#define STM32_ICU_USE_TIM8 FALSE -#define STM32_ICU_TIM1_IRQ_PRIORITY 7 -#define STM32_ICU_TIM2_IRQ_PRIORITY 7 -#define STM32_ICU_TIM3_IRQ_PRIORITY 7 -#define STM32_ICU_TIM4_IRQ_PRIORITY 7 -#define STM32_ICU_TIM5_IRQ_PRIORITY 7 -#define STM32_ICU_TIM8_IRQ_PRIORITY 7 - -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_ADVANCED FALSE -#define STM32_PWM_USE_TIM1 FALSE -#define STM32_PWM_USE_TIM2 FALSE -#define STM32_PWM_USE_TIM3 FALSE -#define STM32_PWM_USE_TIM4 FALSE -#define STM32_PWM_USE_TIM5 FALSE -#define STM32_PWM_USE_TIM8 FALSE -#define STM32_PWM_TIM1_IRQ_PRIORITY 7 -#define STM32_PWM_TIM2_IRQ_PRIORITY 7 -#define STM32_PWM_TIM3_IRQ_PRIORITY 7 -#define STM32_PWM_TIM4_IRQ_PRIORITY 7 -#define STM32_PWM_TIM5_IRQ_PRIORITY 7 -#define STM32_PWM_TIM8_IRQ_PRIORITY 7 - -/* - * RTC driver system settings. - */ -#define STM32_RTC_IRQ_PRIORITY 15 - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 FALSE -#define STM32_SERIAL_USE_USART2 FALSE -#define STM32_SERIAL_USE_USART3 FALSE -#define STM32_SERIAL_USE_UART4 FALSE -#define STM32_SERIAL_USE_UART5 FALSE -#define STM32_SERIAL_USART1_PRIORITY 12 -#define STM32_SERIAL_USART2_PRIORITY 12 -#define STM32_SERIAL_USART3_PRIORITY 12 -#define STM32_SERIAL_UART4_PRIORITY 12 -#define STM32_SERIAL_UART5_PRIORITY 12 - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 FALSE -#define STM32_SPI_USE_SPI2 FALSE -#define STM32_SPI_USE_SPI3 FALSE -#define STM32_SPI_SPI1_DMA_PRIORITY 1 -#define STM32_SPI_SPI2_DMA_PRIORITY 1 -#define STM32_SPI_SPI3_DMA_PRIORITY 1 -#define STM32_SPI_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI_SPI3_IRQ_PRIORITY 10 -#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") - -/* - * ST driver system settings. - */ -#define STM32_ST_IRQ_PRIORITY 8 -#define STM32_ST_USE_TIMER 2 - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 FALSE -#define STM32_UART_USE_USART2 FALSE -#define STM32_UART_USE_USART3 FALSE -#define STM32_UART_USART1_IRQ_PRIORITY 12 -#define STM32_UART_USART2_IRQ_PRIORITY 12 -#define STM32_UART_USART3_IRQ_PRIORITY 12 -#define STM32_UART_USART1_DMA_PRIORITY 0 -#define STM32_UART_USART2_DMA_PRIORITY 0 -#define STM32_UART_USART3_DMA_PRIORITY 0 -#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") - -/* - * USB driver system settings. - */ -#define STM32_USB_USE_USB1 TRUE -#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE -#define STM32_USB_USB1_HP_IRQ_PRIORITY 13 -#define STM32_USB_USB1_LP_IRQ_PRIORITY 14 - -#endif /* _MCUCONF_H_ */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _MCUCONF_H_ +#define _MCUCONF_H_ + +#define STM32F103_MCUCONF + +/* + * STM32F103 drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 15...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +/* + * HAL driver system settings. + */ +#define STM32_NO_INIT FALSE +#define STM32_HSI_ENABLED TRUE +#define STM32_LSI_ENABLED FALSE +#define STM32_HSE_ENABLED TRUE +#define STM32_LSE_ENABLED FALSE +#define STM32_SW STM32_SW_PLL +#define STM32_PLLSRC STM32_PLLSRC_HSE +#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 +#define STM32_PLLMUL_VALUE 9 +#define STM32_HPRE STM32_HPRE_DIV1 +#define STM32_PPRE1 STM32_PPRE1_DIV2 +#define STM32_PPRE2 STM32_PPRE2_DIV2 +#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_USB_CLOCK_REQUIRED TRUE +#define STM32_USBPRE STM32_USBPRE_DIV1P5 +#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK +#define STM32_RTCSEL STM32_RTCSEL_HSEDIV +#define STM32_PVD_ENABLE FALSE +#define STM32_PLS STM32_PLS_LEV0 + +/* + * ADC driver system settings. + */ +#define STM32_ADC_USE_ADC1 FALSE +#define STM32_ADC_ADC1_DMA_PRIORITY 2 +#define STM32_ADC_ADC1_IRQ_PRIORITY 6 + +/* + * CAN driver system settings. + */ +#define STM32_CAN_USE_CAN1 FALSE +#define STM32_CAN_CAN1_IRQ_PRIORITY 11 + +/* + * EXT driver system settings. + */ +#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 + +/* + * GPT driver system settings. + */ +#define STM32_GPT_USE_TIM1 FALSE +#define STM32_GPT_USE_TIM2 FALSE +#define STM32_GPT_USE_TIM3 FALSE +#define STM32_GPT_USE_TIM4 FALSE +#define STM32_GPT_USE_TIM5 FALSE +#define STM32_GPT_USE_TIM8 FALSE +#define STM32_GPT_TIM1_IRQ_PRIORITY 7 +#define STM32_GPT_TIM2_IRQ_PRIORITY 7 +#define STM32_GPT_TIM3_IRQ_PRIORITY 7 +#define STM32_GPT_TIM4_IRQ_PRIORITY 7 +#define STM32_GPT_TIM5_IRQ_PRIORITY 7 +#define STM32_GPT_TIM8_IRQ_PRIORITY 7 + +/* + * I2C driver system settings. + */ +#define STM32_I2C_USE_I2C1 FALSE +#define STM32_I2C_USE_I2C2 FALSE +#define STM32_I2C_BUSY_TIMEOUT 50 +#define STM32_I2C_I2C1_IRQ_PRIORITY 5 +#define STM32_I2C_I2C2_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_PRIORITY 3 +#define STM32_I2C_I2C2_DMA_PRIORITY 3 +#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") + +/* + * ICU driver system settings. + */ +#define STM32_ICU_USE_TIM1 FALSE +#define STM32_ICU_USE_TIM2 FALSE +#define STM32_ICU_USE_TIM3 FALSE +#define STM32_ICU_USE_TIM4 FALSE +#define STM32_ICU_USE_TIM5 FALSE +#define STM32_ICU_USE_TIM8 FALSE +#define STM32_ICU_TIM1_IRQ_PRIORITY 7 +#define STM32_ICU_TIM2_IRQ_PRIORITY 7 +#define STM32_ICU_TIM3_IRQ_PRIORITY 7 +#define STM32_ICU_TIM4_IRQ_PRIORITY 7 +#define STM32_ICU_TIM5_IRQ_PRIORITY 7 +#define STM32_ICU_TIM8_IRQ_PRIORITY 7 + +/* + * PWM driver system settings. + */ +#define STM32_PWM_USE_ADVANCED FALSE +#define STM32_PWM_USE_TIM1 FALSE +#define STM32_PWM_USE_TIM2 FALSE +#define STM32_PWM_USE_TIM3 FALSE +#define STM32_PWM_USE_TIM4 FALSE +#define STM32_PWM_USE_TIM5 FALSE +#define STM32_PWM_USE_TIM8 FALSE +#define STM32_PWM_TIM1_IRQ_PRIORITY 7 +#define STM32_PWM_TIM2_IRQ_PRIORITY 7 +#define STM32_PWM_TIM3_IRQ_PRIORITY 7 +#define STM32_PWM_TIM4_IRQ_PRIORITY 7 +#define STM32_PWM_TIM5_IRQ_PRIORITY 7 +#define STM32_PWM_TIM8_IRQ_PRIORITY 7 + +/* + * RTC driver system settings. + */ +#define STM32_RTC_IRQ_PRIORITY 15 + +/* + * SERIAL driver system settings. + */ +#define STM32_SERIAL_USE_USART1 FALSE +#define STM32_SERIAL_USE_USART2 FALSE +#define STM32_SERIAL_USE_USART3 FALSE +#define STM32_SERIAL_USE_UART4 FALSE +#define STM32_SERIAL_USE_UART5 FALSE +#define STM32_SERIAL_USART1_PRIORITY 12 +#define STM32_SERIAL_USART2_PRIORITY 12 +#define STM32_SERIAL_USART3_PRIORITY 12 +#define STM32_SERIAL_UART4_PRIORITY 12 +#define STM32_SERIAL_UART5_PRIORITY 12 + +/* + * SPI driver system settings. + */ +#define STM32_SPI_USE_SPI1 FALSE +#define STM32_SPI_USE_SPI2 FALSE +#define STM32_SPI_USE_SPI3 FALSE +#define STM32_SPI_SPI1_DMA_PRIORITY 1 +#define STM32_SPI_SPI2_DMA_PRIORITY 1 +#define STM32_SPI_SPI3_DMA_PRIORITY 1 +#define STM32_SPI_SPI1_IRQ_PRIORITY 10 +#define STM32_SPI_SPI2_IRQ_PRIORITY 10 +#define STM32_SPI_SPI3_IRQ_PRIORITY 10 +#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") + +/* + * ST driver system settings. + */ +#define STM32_ST_IRQ_PRIORITY 8 +#define STM32_ST_USE_TIMER 2 + +/* + * UART driver system settings. + */ +#define STM32_UART_USE_USART1 FALSE +#define STM32_UART_USE_USART2 FALSE +#define STM32_UART_USE_USART3 FALSE +#define STM32_UART_USART1_IRQ_PRIORITY 12 +#define STM32_UART_USART2_IRQ_PRIORITY 12 +#define STM32_UART_USART3_IRQ_PRIORITY 12 +#define STM32_UART_USART1_DMA_PRIORITY 0 +#define STM32_UART_USART2_DMA_PRIORITY 0 +#define STM32_UART_USART3_DMA_PRIORITY 0 +#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") + +/* + * USB driver system settings. + */ +#define STM32_USB_USE_USB1 TRUE +#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE +#define STM32_USB_USB1_HP_IRQ_PRIORITY 13 +#define STM32_USB_USB1_LP_IRQ_PRIORITY 14 + +#endif /* _MCUCONF_H_ */ diff --git a/keyboards/chibios_test/teensy_lc_onekey/chconf.h b/keyboards/chibios_test/teensy_lc_onekey/chconf.h index cb36996c33..3294ac7eee 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/chconf.h +++ b/keyboards/chibios_test/teensy_lc_onekey/chconf.h @@ -1,524 +1,524 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef CHCONF_H -#define CHCONF_H - -#define _CHIBIOS_RT_CONF_ - -/*===========================================================================*/ -/** - * @name System timers settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System time counter resolution. - * @note Allowed values are 16 or 32 bits. - */ -#define CH_CFG_ST_RESOLUTION 32 - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#define CH_CFG_ST_FREQUENCY 1000 - -/** - * @brief Time delta constant for the tick-less mode. - * @note If this value is zero then the system uses the classic - * periodic tick. This value represents the minimum number - * of ticks that is safe to specify in a timeout directive. - * The value one is not valid, timeouts are rounded up to - * this value. - */ -#define CH_CFG_ST_TIMEDELTA 0 - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - * @note The round robin preemption is not supported in tickless mode and - * must be set to zero in that case. - */ -#define CH_CFG_TIME_QUANTUM 20 - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_CFG_USE_MEMCORE. - */ -#define CH_CFG_MEMCORE_SIZE 0 - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread. The application @p main() - * function becomes the idle thread and must implement an - * infinite loop. - */ -#define CH_CFG_NO_IDLE_THREAD FALSE - -/* Use __WFI in the idle thread for waiting. Does lower the power - * consumption. */ -#define CORTEX_ENABLE_WFI_IDLE TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#define CH_CFG_OPTIMIZE_SPEED TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Time Measurement APIs. - * @details If enabled then the time measurement APIs are included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_TM FALSE - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_REGISTRY TRUE - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_WAITEXIT TRUE - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_SEMAPHORES TRUE - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MUTEXES TRUE - -/** - * @brief Enables recursive behavior on mutexes. - * @note Recursive mutexes are heavier and have an increased - * memory footprint. - * - * @note The default is @p FALSE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_CONDVARS TRUE - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_CONDVARS. - */ -#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_EVENTS TRUE - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_EVENTS. - */ -#define CH_CFG_USE_EVENTS_TIMEOUT TRUE - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MESSAGES TRUE - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_MESSAGES. - */ -#define CH_CFG_USE_MESSAGES_PRIORITY FALSE - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_MAILBOXES TRUE - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMCORE TRUE - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or - * @p CH_CFG_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#define CH_CFG_USE_HEAP TRUE - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMPOOLS TRUE - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_WAITEXIT. - * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. - */ -#define CH_CFG_USE_DYNAMIC TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, kernel statistics. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_STATISTICS FALSE - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_SYSTEM_STATE_CHECK TRUE - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_CHECKS TRUE - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_ASSERTS TRUE - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the trace buffer is activated. - * - * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED - -/** - * @brief Trace buffer entries. - * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is - * different from @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_BUFFER_SIZE 128 - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#define CH_DBG_ENABLE_STACK_CHECK TRUE - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_FILL_THREADS TRUE - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p thread_t structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p FALSE. - * @note This debug option is not currently compatible with the - * tickless mode. - */ -#define CH_DBG_THREADS_PROFILING FALSE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p thread_t structure. - */ -#define CH_CFG_THREAD_EXTRA_FIELDS \ - /* Add threads custom fields here.*/ - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#define CH_CFG_THREAD_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - */ -#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* Context switch code here.*/ \ -} - -/** - * @brief ISR enter hook. - */ -#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ - /* IRQ prologue code here.*/ \ -} - -/** - * @brief ISR exit hook. - */ -#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ - /* IRQ epilogue code here.*/ \ -} - -/** - * @brief Idle thread enter hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to activate a power saving mode. - */ -#define CH_CFG_IDLE_ENTER_HOOK() { \ - /* Idle-enter code here.*/ \ -} - -/** - * @brief Idle thread leave hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to deactivate a power saving mode. - */ -#define CH_CFG_IDLE_LEAVE_HOOK() { \ - /* Idle-leave code here.*/ \ -} - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#define CH_CFG_IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#define CH_CFG_SYSTEM_TICK_HOOK() { \ - /* System tick event code here.*/ \ -} - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ - /* System halt code here.*/ \ -} - -/** - * @brief Trace hook. - * @details This hook is invoked each time a new record is written in the - * trace buffer. - */ -#define CH_CFG_TRACE_HOOK(tep) { \ - /* Trace code here.*/ \ -} - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* CHCONF_H */ - -/** @} */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 32 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 1000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 0 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 20 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/* Use __WFI in the idle thread for waiting. Does lower the power + * consumption. */ +#define CORTEX_ENABLE_WFI_IDLE TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS TRUE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK TRUE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS TRUE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS TRUE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_BUFFER_SIZE 128 + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK TRUE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS TRUE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/keyboards/chibios_test/teensy_lc_onekey/halconf.h b/keyboards/chibios_test/teensy_lc_onekey/halconf.h index b1d2cd5502..0436408b09 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/halconf.h +++ b/keyboards/chibios_test/teensy_lc_onekey/halconf.h @@ -1,187 +1,187 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the DAC subsystem. - */ -#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -#define HAL_USE_DAC FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C FALSE -#endif - -/** - * @brief Enables the I2S subsystem. - */ -#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) -#define HAL_USE_I2S FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL FALSE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB FALSE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI FALSE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE -#endif - -/** - * @brief Enables the WDG subsystem. - */ -#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) -#define HAL_USE_WDG FALSE -#endif - -/*===========================================================================*/ -/* USB driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) -#define USB_USE_WAIT TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h b/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h index c636590197..2764e88989 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h +++ b/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h @@ -1,55 +1,55 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MCUCONF_H_ -#define _MCUCONF_H_ - -#define KL2x_MCUCONF - -/* - * HAL driver system settings. - */ -#if 1 -/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */ -#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE -#define KINETIS_PLLCLK_FREQUENCY 96000000UL -#define KINETIS_SYSCLK_FREQUENCY 48000000UL -#endif - -#if 0 -/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */ -#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI -#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */ -#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */ -#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */ -#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */ -#endif - -/* - * SERIAL driver system settings. - */ -#define KINETIS_SERIAL_USE_UART0 TRUE - -/* - * USB driver settings - */ -#define KINETIS_USB_USE_USB0 TRUE -/* Need to redefine this, since the default is for K20x */ -/* This is for Teensy LC; you should comment it out (or change to 5) - * for Teensy 3.x */ -#define KINETIS_USB_USB0_IRQ_PRIORITY 2 - -#endif /* _MCUCONF_H_ */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _MCUCONF_H_ +#define _MCUCONF_H_ + +#define KL2x_MCUCONF + +/* + * HAL driver system settings. + */ +#if 1 +/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */ +#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE +#define KINETIS_PLLCLK_FREQUENCY 96000000UL +#define KINETIS_SYSCLK_FREQUENCY 48000000UL +#endif + +#if 0 +/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */ +#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI +#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */ +#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */ +#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */ +#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */ +#endif + +/* + * SERIAL driver system settings. + */ +#define KINETIS_SERIAL_USE_UART0 TRUE + +/* + * USB driver settings + */ +#define KINETIS_USB_USE_USB0 TRUE +/* Need to redefine this, since the default is for K20x */ +/* This is for Teensy LC; you should comment it out (or change to 5) + * for Teensy 3.x */ +#define KINETIS_USB_USB0_IRQ_PRIORITY 2 + +#endif /* _MCUCONF_H_ */ diff --git a/keyboards/gh60/Makefile b/keyboards/gh60/Makefile index 39a9cc0ae1..075b77256f 100644 --- a/keyboards/gh60/Makefile +++ b/keyboards/gh60/Makefile @@ -1,74 +1,74 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -# CONSOLE_ENABLE ?= yes # Console for debug(+400) -# COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID - - -ifndef QUANTUM_DIR - include ../../Makefile -endif - + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID + + +ifndef QUANTUM_DIR + include ../../Makefile +endif + diff --git a/keyboards/gh60/config.h b/keyboards/gh60/config.h index 4813c4e786..97753bc069 100644 --- a/keyboards/gh60/config.h +++ b/keyboards/gh60/config.h @@ -1,161 +1,161 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER geekhack -#define PRODUCT GH60 -#define DESCRIPTION t.m.k. keyboard firmware for GH60 - -/* key matrix size */ -#define MATRIX_ROWS 5 -#define MATRIX_COLS 14 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ - #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } -// Rev A -// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 } -// Rev B/C - #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER geekhack +#define PRODUCT GH60 +#define DESCRIPTION t.m.k. keyboard firmware for GH60 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ + #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +// Rev A +// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 } +// Rev B/C + #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/gh60/gh60.c b/keyboards/gh60/gh60.c index 255d87de99..f5a158e12f 100644 --- a/keyboards/gh60/gh60.c +++ b/keyboards/gh60/gh60.c @@ -1,25 +1,25 @@ -#include "gh60.h" - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - if (usb_led & (1< - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER geekhack -#define PRODUCT GH60 -#define DESCRIPTION t.m.k. keyboard firmware for GH60 - -/* key matrix size */ -#define MATRIX_ROWS 5 -#define MATRIX_COLS 14 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ - #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } -// Rev A -// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 } -// Rev B/C - #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -/* - * RGB Underglow - * These settings are for the F4 by default: - * - * - * #define ws2812_PORTREG PORTF - * #define ws2812_DDRREG DDRF - * #define ws2812_pin PF4 - * #define RGBLED_NUM 14 // Number of LEDs - * #define RGBLIGHT_HUE_STEP 10 - * #define RGBLIGHT_SAT_STEP 17 - * #define RGBLIGHT_VAL_STEP 17 - * - * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. - * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. - * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c -*/ - -/* Deprecated code below -#define ws2812_PORTREG PORTF -#define ws2812_DDRREG DDRF -#define ws2812_pin PF4 -*/ -#define RGB_DI_PIN F4 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 8 // Number of LEDs -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#endif +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER geekhack +#define PRODUCT GH60 +#define DESCRIPTION t.m.k. keyboard firmware for GH60 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ + #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +// Rev A +// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 } +// Rev B/C + #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * RGB Underglow + * These settings are for the F4 by default: + * + * + * #define ws2812_PORTREG PORTF + * #define ws2812_DDRREG DDRF + * #define ws2812_pin PF4 + * #define RGBLED_NUM 14 // Number of LEDs + * #define RGBLIGHT_HUE_STEP 10 + * #define RGBLIGHT_SAT_STEP 17 + * #define RGBLIGHT_VAL_STEP 17 + * + * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. + * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. + * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c +*/ + +/* Deprecated code below +#define ws2812_PORTREG PORTF +#define ws2812_DDRREG DDRF +#define ws2812_pin PF4 +*/ +#define RGB_DI_PIN F4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif diff --git a/keyboards/gh60/pinout.txt b/keyboards/gh60/pinout.txt index 3787f938e7..e9bf1983a5 100644 --- a/keyboards/gh60/pinout.txt +++ b/keyboards/gh60/pinout.txt @@ -1,18 +1,18 @@ - /* Column pin configuration - * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 - * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) - */ - - /* Row pin configuration - * row: 0 1 2 3 4 - * pin: D0 D1 D2 D3 D5 - */ - - GPIO pads - 0 F7 WASD LEDs - 1 F6 ESC LED - 2 F5 FN LED - 3 F4 POKER Arrow LEDs - - B2 Capslock LED + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED B0 not connected \ No newline at end of file diff --git a/keyboards/gh60/readme.md b/keyboards/gh60/readme.md index 92302d507c..ad042483d8 100644 --- a/keyboards/gh60/readme.md +++ b/keyboards/gh60/readme.md @@ -1,60 +1,60 @@ -## gh60 Rev C keyboard firmware - -![gh60 Rev C PCB](gh60revc.jpg) - - /* Column pin configuration - * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 - * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) - */ - - /* Row pin configuration - * row: 0 1 2 3 4 - * pin: D0 D1 D2 D3 D5 - */ - - GPIO pads - 0 F7 WASD LEDs - 1 F6 ESC LED - 2 F5 FN LED - 3 F4 POKER Arrow LEDs - - B2 Capslock LED - B0 not connected - -Functions to controls LED clusters - - gh60_caps_led_on() - gh60_poker_leds_on() - gh60_fn_led_on() - gh60_esc_led_on() - gh60_wasd_leds_on() - - gh60_caps_led_off() - gh60_poker_leds_off() - gh60_fn_led_off() - gh60_esc_led_off() - gh60_wasd_leds_off() - -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default -To build with the default keymap, simply run `make`. - -### 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 `.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. - -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: -``` -$ make KEYMAP=[default|jack|] -``` -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. +## gh60 Rev C keyboard firmware + +![gh60 Rev C PCB](gh60revc.jpg) + + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED + B0 not connected + +Functions to controls LED clusters + + gh60_caps_led_on() + gh60_poker_leds_on() + gh60_fn_led_on() + gh60_esc_led_on() + gh60_wasd_leds_on() + + gh60_caps_led_off() + gh60_poker_leds_off() + gh60_fn_led_off() + gh60_esc_led_off() + gh60_wasd_leds_off() + +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### 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 `.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/infinity_chibios/chconf.h b/keyboards/infinity_chibios/chconf.h index b886c383bb..43c845739a 100644 --- a/keyboards/infinity_chibios/chconf.h +++ b/keyboards/infinity_chibios/chconf.h @@ -1,524 +1,524 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef CHCONF_H -#define CHCONF_H - -#define _CHIBIOS_RT_CONF_ - -/*===========================================================================*/ -/** - * @name System timers settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System time counter resolution. - * @note Allowed values are 16 or 32 bits. - */ -#define CH_CFG_ST_RESOLUTION 32 - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#define CH_CFG_ST_FREQUENCY 1000 - -/** - * @brief Time delta constant for the tick-less mode. - * @note If this value is zero then the system uses the classic - * periodic tick. This value represents the minimum number - * of ticks that is safe to specify in a timeout directive. - * The value one is not valid, timeouts are rounded up to - * this value. - */ -#define CH_CFG_ST_TIMEDELTA 0 - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - * @note The round robin preemption is not supported in tickless mode and - * must be set to zero in that case. - */ -#define CH_CFG_TIME_QUANTUM 20 - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_CFG_USE_MEMCORE. - */ -#define CH_CFG_MEMCORE_SIZE 0 - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread. The application @p main() - * function becomes the idle thread and must implement an - * infinite loop. - */ -#define CH_CFG_NO_IDLE_THREAD FALSE - -/* Use __WFI in the idle thread for waiting. Does lower the power - * consumption. */ -#define CORTEX_ENABLE_WFI_IDLE TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#define CH_CFG_OPTIMIZE_SPEED TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Time Measurement APIs. - * @details If enabled then the time measurement APIs are included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_TM FALSE - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_REGISTRY TRUE - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_WAITEXIT TRUE - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_SEMAPHORES TRUE - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MUTEXES TRUE - -/** - * @brief Enables recursive behavior on mutexes. - * @note Recursive mutexes are heavier and have an increased - * memory footprint. - * - * @note The default is @p FALSE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_CONDVARS TRUE - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_CONDVARS. - */ -#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_EVENTS TRUE - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_EVENTS. - */ -#define CH_CFG_USE_EVENTS_TIMEOUT TRUE - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MESSAGES TRUE - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_MESSAGES. - */ -#define CH_CFG_USE_MESSAGES_PRIORITY FALSE - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_MAILBOXES TRUE - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMCORE TRUE - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or - * @p CH_CFG_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#define CH_CFG_USE_HEAP TRUE - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMPOOLS TRUE - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_WAITEXIT. - * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. - */ -#define CH_CFG_USE_DYNAMIC TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, kernel statistics. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_STATISTICS FALSE - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_SYSTEM_STATE_CHECK FALSE - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_CHECKS FALSE - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_ASSERTS FALSE - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the trace buffer is activated. - * - * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED - -/** - * @brief Trace buffer entries. - * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is - * different from @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_BUFFER_SIZE 128 - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#define CH_DBG_ENABLE_STACK_CHECK FALSE - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_FILL_THREADS FALSE - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p thread_t structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p FALSE. - * @note This debug option is not currently compatible with the - * tickless mode. - */ -#define CH_DBG_THREADS_PROFILING FALSE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p thread_t structure. - */ -#define CH_CFG_THREAD_EXTRA_FIELDS \ - /* Add threads custom fields here.*/ - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#define CH_CFG_THREAD_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - */ -#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* Context switch code here.*/ \ -} - -/** - * @brief ISR enter hook. - */ -#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ - /* IRQ prologue code here.*/ \ -} - -/** - * @brief ISR exit hook. - */ -#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ - /* IRQ epilogue code here.*/ \ -} - -/** - * @brief Idle thread enter hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to activate a power saving mode. - */ -#define CH_CFG_IDLE_ENTER_HOOK() { \ - /* Idle-enter code here.*/ \ -} - -/** - * @brief Idle thread leave hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to deactivate a power saving mode. - */ -#define CH_CFG_IDLE_LEAVE_HOOK() { \ - /* Idle-leave code here.*/ \ -} - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#define CH_CFG_IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#define CH_CFG_SYSTEM_TICK_HOOK() { \ - /* System tick event code here.*/ \ -} - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ - /* System halt code here.*/ \ -} - -/** - * @brief Trace hook. - * @details This hook is invoked each time a new record is written in the - * trace buffer. - */ -#define CH_CFG_TRACE_HOOK(tep) { \ - /* Trace code here.*/ \ -} - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* CHCONF_H */ - -/** @} */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 32 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 1000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 0 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 20 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/* Use __WFI in the idle thread for waiting. Does lower the power + * consumption. */ +#define CORTEX_ENABLE_WFI_IDLE TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS TRUE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK FALSE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS FALSE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS FALSE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_BUFFER_SIZE 128 + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK FALSE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS FALSE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/keyboards/infinity_chibios/halconf.h b/keyboards/infinity_chibios/halconf.h index 53538de149..46b37a4f46 100644 --- a/keyboards/infinity_chibios/halconf.h +++ b/keyboards/infinity_chibios/halconf.h @@ -1,353 +1,353 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the DAC subsystem. - */ -#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -#define HAL_USE_DAC FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C FALSE -#endif - -/** - * @brief Enables the I2S subsystem. - */ -#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) -#define HAL_USE_I2S FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL FALSE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB TRUE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI FALSE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE -#endif - -/** - * @brief Enables the WDG subsystem. - */ -#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) -#define HAL_USE_WDG FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) -#define ADC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define ADC_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* I2C driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the I2C bus. - */ -#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define I2C_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) -#define MAC_USE_ZERO_COPY FALSE -#endif - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) -#define MAC_USE_EVENTS TRUE -#endif - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SDC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Number of initialization attempts before rejecting the card. - * @note Attempts are performed at 10mS intervals. - */ -#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) -#define SDC_INIT_RETRY 100 -#endif - -/** - * @brief Include support for MMC cards. - * @note MMC support is not yet implemented so this option must be kept - * at @p FALSE. - */ -#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) -#define SDC_MMC_SUPPORT FALSE -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - */ -#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) -#define SDC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 16 -#endif - -/*===========================================================================*/ -/* SERIAL_USB driver related setting. */ -/*===========================================================================*/ - -/** - * @brief Serial over USB buffers size. - * @details Configuration parameter, the buffer size must be a multiple of - * the USB data endpoint maximum packet size. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_SIZE 256 -#endif - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) -#define SPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* USB driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) -#define USB_USE_WAIT TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB TRUE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/infinity_chibios/mcuconf.h b/keyboards/infinity_chibios/mcuconf.h index 66b6ce25de..f453304b75 100644 --- a/keyboards/infinity_chibios/mcuconf.h +++ b/keyboards/infinity_chibios/mcuconf.h @@ -1,55 +1,55 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef _MCUCONF_H_ -#define _MCUCONF_H_ - -#define K20x_MCUCONF - -/* - * HAL driver system settings. - */ - -/* Select the MCU clocking mode below by enabling the appropriate block. */ - -#define KINETIS_NO_INIT FALSE - -/* FEI mode - 48 MHz with internal 32.768 kHz crystal */ -#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI -#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */ -#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */ -#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */ -#define KINETIS_CLKDIV1_OUTDIV1 1 -#define KINETIS_CLKDIV1_OUTDIV2 1 -#define KINETIS_CLKDIV1_OUTDIV4 2 -#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY -#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2 - -/* - * SERIAL driver system settings. - */ -#define KINETIS_SERIAL_USE_UART0 TRUE - -/* - * USB driver settings - */ -#define KINETIS_USB_USE_USB0 TRUE -/* Need to redefine this, since the default is for K20x */ -/* This is for Teensy LC; you should comment it out (or change to 5) - * for Teensy 3.x */ -#define KINETIS_USB_USB0_IRQ_PRIORITY 2 - -#endif /* _MCUCONF_H_ */ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _MCUCONF_H_ +#define _MCUCONF_H_ + +#define K20x_MCUCONF + +/* + * HAL driver system settings. + */ + +/* Select the MCU clocking mode below by enabling the appropriate block. */ + +#define KINETIS_NO_INIT FALSE + +/* FEI mode - 48 MHz with internal 32.768 kHz crystal */ +#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI +#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */ +#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */ +#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */ +#define KINETIS_CLKDIV1_OUTDIV1 1 +#define KINETIS_CLKDIV1_OUTDIV2 1 +#define KINETIS_CLKDIV1_OUTDIV4 2 +#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY +#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2 + +/* + * SERIAL driver system settings. + */ +#define KINETIS_SERIAL_USE_UART0 TRUE + +/* + * USB driver settings + */ +#define KINETIS_USB_USE_USB0 TRUE +/* Need to redefine this, since the default is for K20x */ +/* This is for Teensy LC; you should comment it out (or change to 5) + * for Teensy 3.x */ +#define KINETIS_USB_USB0_IRQ_PRIORITY 2 + +#endif /* _MCUCONF_H_ */ diff --git a/tmk_core/common/avr/xprintf.S b/tmk_core/common/avr/xprintf.S index 0cec70ce22..06434b98d9 100644 --- a/tmk_core/common/avr/xprintf.S +++ b/tmk_core/common/avr/xprintf.S @@ -1,500 +1,500 @@ -;---------------------------------------------------------------------------; -; Extended itoa, puts, printf and atoi (C)ChaN, 2011 -;---------------------------------------------------------------------------; - - // Base size is 152 bytes -#define CR_CRLF 0 // Convert \n to \r\n (+10 bytes) -#define USE_XPRINTF 1 // Enable xprintf function (+194 bytes) -#define USE_XSPRINTF 0 // Add xsprintf function (+78 bytes) -#define USE_XFPRINTF 0 // Add xfprintf function (+54 bytes) -#define USE_XATOI 0 // Enable xatoi function (+182 bytes) - - -#if FLASHEND > 0x1FFFF -#error xitoa module does not support 256K devices -#endif - -.nolist -#include // Include device specific definitions. -.list - -#ifdef SPM_PAGESIZE // Recent devices have "lpm Rd,Z+" and "movw". -.macro _LPMI reg - lpm \reg, Z+ -.endm -.macro _MOVW dh,dl, sh,sl - movw \dl, \sl -.endm -#else // Earlier devices do not have "lpm Rd,Z+" nor "movw". -.macro _LPMI reg - lpm - mov \reg, r0 - adiw ZL, 1 -.endm -.macro _MOVW dh,dl, sh,sl - mov \dl, \sl - mov \dh, \sh -.endm -#endif - - - -;--------------------------------------------------------------------------- -; Stub function to forward to user output function -; -;Prototype: void xputc (char chr // a character to be output -; ); -;Size: 12/12 words - -.section .bss -.global xfunc_out ; xfunc_out must be initialized before using this module. -xfunc_out: .ds.w 1 -.section .text - - -.func xputc -.global xputc -xputc: -#if CR_CRLF - cpi r24, 10 ;LF --> CRLF - brne 1f ; - ldi r24, 13 ; - rcall 1f ; - ldi r24, 10 ;/ -1: -#endif - push ZH - push ZL - lds ZL, xfunc_out+0 ;Pointer to the registered output function. - lds ZH, xfunc_out+1 ;/ - sbiw ZL, 0 ;Skip if null - breq 2f ;/ - icall -2: pop ZL - pop ZH - ret -.endfunc - - - -;--------------------------------------------------------------------------- -; Direct ROM string output -; -;Prototype: void xputs (const char *str_p // rom string to be output -; ); - -.func xputs -.global xputs -xputs: - _MOVW ZH,ZL, r25,r24 ; Z = pointer to rom string -1: _LPMI r24 - cpi r24, 0 - breq 2f - rcall xputc - rjmp 1b -2: ret -.endfunc - - -;--------------------------------------------------------------------------- -; Extended direct numeral string output (32bit version) -; -;Prototype: void xitoa (long value, // value to be output -; char radix, // radix -; char width); // minimum width -; - -.func xitoa -.global xitoa -xitoa: - ;r25:r22 = value, r20 = base, r18 = digits - clr r31 ;r31 = stack level - ldi r30, ' ' ;r30 = sign - ldi r19, ' ' ;r19 = filler - sbrs r20, 7 ;When base indicates signd format and the value - rjmp 0f ;is minus, add a '-'. - neg r20 ; - sbrs r25, 7 ; - rjmp 0f ; - ldi r30, '-' ; - com r22 ; - com r23 ; - com r24 ; - com r25 ; - adc r22, r1 ; - adc r23, r1 ; - adc r24, r1 ; - adc r25, r1 ;/ -0: sbrs r18, 7 ;When digits indicates zero filled, - rjmp 1f ;filler is '0'. - neg r18 ; - ldi r19, '0' ;/ - ;----- string conversion loop -1: ldi r21, 32 ;r26 = r25:r22 % r20 - clr r26 ;r25:r22 /= r20 -2: lsl r22 ; - rol r23 ; - rol r24 ; - rol r25 ; - rol r26 ; - cp r26, r20 ; - brcs 3f ; - sub r26, r20 ; - inc r22 ; -3: dec r21 ; - brne 2b ;/ - cpi r26, 10 ;r26 is a numeral digit '0'-'F' - brcs 4f ; - subi r26, -7 ; -4: subi r26, -'0' ;/ - push r26 ;Stack it - inc r31 ;/ - cp r22, r1 ;Repeat until r25:r22 gets zero - cpc r23, r1 ; - cpc r24, r1 ; - cpc r25, r1 ; - brne 1b ;/ - - cpi r30, '-' ;Minus sign if needed - brne 5f ; - push r30 ; - inc r31 ;/ -5: cp r31, r18 ;Filler - brcc 6f ; - push r19 ; - inc r31 ; - rjmp 5b ;/ - -6: pop r24 ;Flush stacked digits and exit - rcall xputc ; - dec r31 ; - brne 6b ;/ - - ret -.endfunc - - - -;---------------------------------------------------------------------------; -; Formatted string output (16/32bit version) -; -;Prototype: -; void __xprintf (const char *format_p, ...); -; void __xsprintf(char*, const char *format_p, ...); -; void __xfprintf(void(*func)(char), const char *format_p, ...); -; - -#if USE_XPRINTF - -.func xvprintf -xvprintf: - ld ZL, Y+ ;Z = pointer to format string - ld ZH, Y+ ;/ - -0: _LPMI r24 ;Get a format char - cpi r24, 0 ;End of format string? - breq 90f ;/ - cpi r24, '%' ;Is format? - breq 20f ;/ -1: rcall xputc ;Put a normal character - rjmp 0b ;/ -90: ret - -20: ldi r18, 0 ;r18: digits - clt ;T: filler - _LPMI r21 ;Get flags - cpi r21, '%' ;Is a %? - breq 1b ;/ - cpi r21, '0' ;Zero filled? - brne 23f ; - set ;/ -22: _LPMI r21 ;Get width -23: cpi r21, '9'+1 ; - brcc 24f ; - subi r21, '0' ; - brcs 90b ; - lsl r18 ; - mov r0, r18 ; - lsl r18 ; - lsl r18 ; - add r18, r0 ; - add r18, r21 ; - rjmp 22b ;/ - -24: brtc 25f ;get value (low word) - neg r18 ; -25: ld r24, Y+ ; - ld r25, Y+ ;/ - cpi r21, 'c' ;Is type character? - breq 1b ;/ - cpi r21, 's' ;Is type RAM string? - breq 50f ;/ - cpi r21, 'S' ;Is type ROM string? - breq 60f ;/ - _MOVW r23,r22,r25,r24 ;r25:r22 = value - clr r24 ; - clr r25 ; - clt ;/ - cpi r21, 'l' ;Is long int? - brne 26f ; - ld r24, Y+ ;get value (high word) - ld r25, Y+ ; - set ; - _LPMI r21 ;/ -26: cpi r21, 'd' ;Is type signed decimal? - brne 27f ;/ - ldi r20, -10 ; - brts 40f ; - sbrs r23, 7 ; - rjmp 40f ; - ldi r24, -1 ; - ldi r25, -1 ; - rjmp 40f ;/ -27: cpi r21, 'u' ;Is type unsigned decimal? - ldi r20, 10 ; - breq 40f ;/ - cpi r21, 'X' ;Is type hexdecimal? - ldi r20, 16 ; - breq 40f ;/ - cpi r21, 'b' ;Is type binary? - ldi r20, 2 ; - breq 40f ;/ - ret ;abort -40: push ZH ;Output the value - push ZL ; - rcall xitoa ; -42: pop ZL ; - pop ZH ; - rjmp 0b ;/ - -50: push ZH ;Put a string on the RAM - push ZL - _MOVW ZH,ZL, r25,r24 -51: ld r24, Z+ - cpi r24, 0 - breq 42b - rcall xputc - rjmp 51b - -60: push ZH ;Put a string on the ROM - push ZL - rcall xputs - rjmp 42b -.endfunc - - -.func __xprintf -.global __xprintf -__xprintf: - push YH - push YL - in YL, _SFR_IO_ADDR(SPL) -#ifdef SPH - in YH, _SFR_IO_ADDR(SPH) -#else - clr YH -#endif - adiw YL, 5 ;Y = pointer to arguments - rcall xvprintf - pop YL - pop YH - ret -.endfunc - - -#if USE_XSPRINTF - -.func __xsprintf -putram: - _MOVW ZH,ZL, r15,r14 - st Z+, r24 - _MOVW r15,r14, ZH,ZL - ret -.global __xsprintf -__xsprintf: - push YH - push YL - in YL, _SFR_IO_ADDR(SPL) -#ifdef SPH - in YH, _SFR_IO_ADDR(SPH) -#else - clr YH -#endif - adiw YL, 5 ;Y = pointer to arguments - lds ZL, xfunc_out+0 ;Save registered output function - lds ZH, xfunc_out+1 ; - push ZL ; - push ZH ;/ - ldi ZL, lo8(pm(putram));Set local output function - ldi ZH, hi8(pm(putram)); - sts xfunc_out+0, ZL ; - sts xfunc_out+1, ZH ;/ - push r15 ;Initialize pointer to string buffer - push r14 ; - ld r14, Y+ ; - ld r15, Y+ ;/ - rcall xvprintf - _MOVW ZH,ZL, r15,r14 ;Terminate string - st Z, r1 ; - pop r14 ; - pop r15 ;/ - pop ZH ;Restore registered output function - pop ZL ; - sts xfunc_out+0, ZL ; - sts xfunc_out+1, ZH ;/ - pop YL - pop YH - ret -.endfunc -#endif - - -#if USE_XFPRINTF -.func __xfprintf -.global __xfprintf -__xfprintf: - push YH - push YL - in YL, _SFR_IO_ADDR(SPL) -#ifdef SPH - in YH, _SFR_IO_ADDR(SPH) -#else - clr YH -#endif - adiw YL, 5 ;Y = pointer to arguments - lds ZL, xfunc_out+0 ;Save registered output function - lds ZH, xfunc_out+1 ; - push ZL ; - push ZH ;/ - ld ZL, Y+ ;Set output function - ld ZH, Y+ ; - sts xfunc_out+0, ZL ; - sts xfunc_out+1, ZH ;/ - rcall xvprintf - pop ZH ;Restore registered output function - pop ZL ; - sts xfunc_out+0, ZL ; - sts xfunc_out+1, ZH ;/ - pop YL - pop YH - ret -.endfunc -#endif - -#endif - - - -;--------------------------------------------------------------------------- -; Extended numeral string input -; -;Prototype: -; char xatoi ( /* 1: Successful, 0: Failed */ -; const char **str, /* pointer to pointer to source string */ -; long *res /* result */ -; ); -; - - -#if USE_XATOI -.func xatoi -.global xatoi -xatoi: - _MOVW r1, r0, r23, r22 - _MOVW XH, XL, r25, r24 - ld ZL, X+ - ld ZH, X+ - clr r18 ;r21:r18 = 0; - clr r19 ; - clr r20 ; - clr r21 ;/ - clt ;T = 0; - - ldi r25, 10 ;r25 = 10; - rjmp 41f ;/ -40: adiw ZL, 1 ;Z++; -41: ld r22, Z ;r22 = *Z; - cpi r22, ' ' ;if(r22 == ' ') continue - breq 40b ;/ - brcs 70f ;if(r22 < ' ') error; - cpi r22, '-' ;if(r22 == '-') { - brne 42f ; T = 1; - set ; continue; - rjmp 40b ;} -42: cpi r22, '9'+1 ;if(r22 > '9') error; - brcc 70f ;/ - cpi r22, '0' ;if(r22 < '0') error; - brcs 70f ;/ - brne 51f ;if(r22 > '0') cv_start; - ldi r25, 8 ;r25 = 8; - adiw ZL, 1 ;r22 = *(++Z); - ld r22, Z ;/ - cpi r22, ' '+1 ;if(r22 <= ' ') exit; - brcs 80f ;/ - cpi r22, 'b' ;if(r22 == 'b') { - brne 43f ; r25 = 2; - ldi r25, 2 ; cv_start; - rjmp 50f ;} -43: cpi r22, 'x' ;if(r22 != 'x') error; - brne 51f ;/ - ldi r25, 16 ;r25 = 16; - -50: adiw ZL, 1 ;Z++; - ld r22, Z ;r22 = *Z; -51: cpi r22, ' '+1 ;if(r22 <= ' ') break; - brcs 80f ;/ - cpi r22, 'a' ;if(r22 >= 'a') r22 =- 0x20; - brcs 52f ; - subi r22, 0x20 ;/ -52: subi r22, '0' ;if((r22 -= '0') < 0) error; - brcs 70f ;/ - cpi r22, 10 ;if(r22 >= 10) { - brcs 53f ; r22 -= 7; - subi r22, 7 ; if(r22 < 10) - cpi r22, 10 ; - brcs 70f ;} -53: cp r22, r25 ;if(r22 >= r25) error; - brcc 70f ;/ -60: ldi r24, 33 ;r21:r18 *= r25; - sub r23, r23 ; -61: brcc 62f ; - add r23, r25 ; -62: lsr r23 ; - ror r21 ; - ror r20 ; - ror r19 ; - ror r18 ; - dec r24 ; - brne 61b ;/ - add r18, r22 ;r21:r18 += r22; - adc r19, r24 ; - adc r20, r24 ; - adc r21, r24 ;/ - rjmp 50b ;repeat - -70: ldi r24, 0 - rjmp 81f -80: ldi r24, 1 -81: brtc 82f - clr r22 - com r18 - com r19 - com r20 - com r21 - adc r18, r22 - adc r19, r22 - adc r20, r22 - adc r21, r22 -82: st -X, ZH - st -X, ZL - _MOVW XH, XL, r1, r0 - st X+, r18 - st X+, r19 - st X+, r20 - st X+, r21 - clr r1 - ret -.endfunc -#endif - - +;---------------------------------------------------------------------------; +; Extended itoa, puts, printf and atoi (C)ChaN, 2011 +;---------------------------------------------------------------------------; + + // Base size is 152 bytes +#define CR_CRLF 0 // Convert \n to \r\n (+10 bytes) +#define USE_XPRINTF 1 // Enable xprintf function (+194 bytes) +#define USE_XSPRINTF 0 // Add xsprintf function (+78 bytes) +#define USE_XFPRINTF 0 // Add xfprintf function (+54 bytes) +#define USE_XATOI 0 // Enable xatoi function (+182 bytes) + + +#if FLASHEND > 0x1FFFF +#error xitoa module does not support 256K devices +#endif + +.nolist +#include // Include device specific definitions. +.list + +#ifdef SPM_PAGESIZE // Recent devices have "lpm Rd,Z+" and "movw". +.macro _LPMI reg + lpm \reg, Z+ +.endm +.macro _MOVW dh,dl, sh,sl + movw \dl, \sl +.endm +#else // Earlier devices do not have "lpm Rd,Z+" nor "movw". +.macro _LPMI reg + lpm + mov \reg, r0 + adiw ZL, 1 +.endm +.macro _MOVW dh,dl, sh,sl + mov \dl, \sl + mov \dh, \sh +.endm +#endif + + + +;--------------------------------------------------------------------------- +; Stub function to forward to user output function +; +;Prototype: void xputc (char chr // a character to be output +; ); +;Size: 12/12 words + +.section .bss +.global xfunc_out ; xfunc_out must be initialized before using this module. +xfunc_out: .ds.w 1 +.section .text + + +.func xputc +.global xputc +xputc: +#if CR_CRLF + cpi r24, 10 ;LF --> CRLF + brne 1f ; + ldi r24, 13 ; + rcall 1f ; + ldi r24, 10 ;/ +1: +#endif + push ZH + push ZL + lds ZL, xfunc_out+0 ;Pointer to the registered output function. + lds ZH, xfunc_out+1 ;/ + sbiw ZL, 0 ;Skip if null + breq 2f ;/ + icall +2: pop ZL + pop ZH + ret +.endfunc + + + +;--------------------------------------------------------------------------- +; Direct ROM string output +; +;Prototype: void xputs (const char *str_p // rom string to be output +; ); + +.func xputs +.global xputs +xputs: + _MOVW ZH,ZL, r25,r24 ; Z = pointer to rom string +1: _LPMI r24 + cpi r24, 0 + breq 2f + rcall xputc + rjmp 1b +2: ret +.endfunc + + +;--------------------------------------------------------------------------- +; Extended direct numeral string output (32bit version) +; +;Prototype: void xitoa (long value, // value to be output +; char radix, // radix +; char width); // minimum width +; + +.func xitoa +.global xitoa +xitoa: + ;r25:r22 = value, r20 = base, r18 = digits + clr r31 ;r31 = stack level + ldi r30, ' ' ;r30 = sign + ldi r19, ' ' ;r19 = filler + sbrs r20, 7 ;When base indicates signd format and the value + rjmp 0f ;is minus, add a '-'. + neg r20 ; + sbrs r25, 7 ; + rjmp 0f ; + ldi r30, '-' ; + com r22 ; + com r23 ; + com r24 ; + com r25 ; + adc r22, r1 ; + adc r23, r1 ; + adc r24, r1 ; + adc r25, r1 ;/ +0: sbrs r18, 7 ;When digits indicates zero filled, + rjmp 1f ;filler is '0'. + neg r18 ; + ldi r19, '0' ;/ + ;----- string conversion loop +1: ldi r21, 32 ;r26 = r25:r22 % r20 + clr r26 ;r25:r22 /= r20 +2: lsl r22 ; + rol r23 ; + rol r24 ; + rol r25 ; + rol r26 ; + cp r26, r20 ; + brcs 3f ; + sub r26, r20 ; + inc r22 ; +3: dec r21 ; + brne 2b ;/ + cpi r26, 10 ;r26 is a numeral digit '0'-'F' + brcs 4f ; + subi r26, -7 ; +4: subi r26, -'0' ;/ + push r26 ;Stack it + inc r31 ;/ + cp r22, r1 ;Repeat until r25:r22 gets zero + cpc r23, r1 ; + cpc r24, r1 ; + cpc r25, r1 ; + brne 1b ;/ + + cpi r30, '-' ;Minus sign if needed + brne 5f ; + push r30 ; + inc r31 ;/ +5: cp r31, r18 ;Filler + brcc 6f ; + push r19 ; + inc r31 ; + rjmp 5b ;/ + +6: pop r24 ;Flush stacked digits and exit + rcall xputc ; + dec r31 ; + brne 6b ;/ + + ret +.endfunc + + + +;---------------------------------------------------------------------------; +; Formatted string output (16/32bit version) +; +;Prototype: +; void __xprintf (const char *format_p, ...); +; void __xsprintf(char*, const char *format_p, ...); +; void __xfprintf(void(*func)(char), const char *format_p, ...); +; + +#if USE_XPRINTF + +.func xvprintf +xvprintf: + ld ZL, Y+ ;Z = pointer to format string + ld ZH, Y+ ;/ + +0: _LPMI r24 ;Get a format char + cpi r24, 0 ;End of format string? + breq 90f ;/ + cpi r24, '%' ;Is format? + breq 20f ;/ +1: rcall xputc ;Put a normal character + rjmp 0b ;/ +90: ret + +20: ldi r18, 0 ;r18: digits + clt ;T: filler + _LPMI r21 ;Get flags + cpi r21, '%' ;Is a %? + breq 1b ;/ + cpi r21, '0' ;Zero filled? + brne 23f ; + set ;/ +22: _LPMI r21 ;Get width +23: cpi r21, '9'+1 ; + brcc 24f ; + subi r21, '0' ; + brcs 90b ; + lsl r18 ; + mov r0, r18 ; + lsl r18 ; + lsl r18 ; + add r18, r0 ; + add r18, r21 ; + rjmp 22b ;/ + +24: brtc 25f ;get value (low word) + neg r18 ; +25: ld r24, Y+ ; + ld r25, Y+ ;/ + cpi r21, 'c' ;Is type character? + breq 1b ;/ + cpi r21, 's' ;Is type RAM string? + breq 50f ;/ + cpi r21, 'S' ;Is type ROM string? + breq 60f ;/ + _MOVW r23,r22,r25,r24 ;r25:r22 = value + clr r24 ; + clr r25 ; + clt ;/ + cpi r21, 'l' ;Is long int? + brne 26f ; + ld r24, Y+ ;get value (high word) + ld r25, Y+ ; + set ; + _LPMI r21 ;/ +26: cpi r21, 'd' ;Is type signed decimal? + brne 27f ;/ + ldi r20, -10 ; + brts 40f ; + sbrs r23, 7 ; + rjmp 40f ; + ldi r24, -1 ; + ldi r25, -1 ; + rjmp 40f ;/ +27: cpi r21, 'u' ;Is type unsigned decimal? + ldi r20, 10 ; + breq 40f ;/ + cpi r21, 'X' ;Is type hexdecimal? + ldi r20, 16 ; + breq 40f ;/ + cpi r21, 'b' ;Is type binary? + ldi r20, 2 ; + breq 40f ;/ + ret ;abort +40: push ZH ;Output the value + push ZL ; + rcall xitoa ; +42: pop ZL ; + pop ZH ; + rjmp 0b ;/ + +50: push ZH ;Put a string on the RAM + push ZL + _MOVW ZH,ZL, r25,r24 +51: ld r24, Z+ + cpi r24, 0 + breq 42b + rcall xputc + rjmp 51b + +60: push ZH ;Put a string on the ROM + push ZL + rcall xputs + rjmp 42b +.endfunc + + +.func __xprintf +.global __xprintf +__xprintf: + push YH + push YL + in YL, _SFR_IO_ADDR(SPL) +#ifdef SPH + in YH, _SFR_IO_ADDR(SPH) +#else + clr YH +#endif + adiw YL, 5 ;Y = pointer to arguments + rcall xvprintf + pop YL + pop YH + ret +.endfunc + + +#if USE_XSPRINTF + +.func __xsprintf +putram: + _MOVW ZH,ZL, r15,r14 + st Z+, r24 + _MOVW r15,r14, ZH,ZL + ret +.global __xsprintf +__xsprintf: + push YH + push YL + in YL, _SFR_IO_ADDR(SPL) +#ifdef SPH + in YH, _SFR_IO_ADDR(SPH) +#else + clr YH +#endif + adiw YL, 5 ;Y = pointer to arguments + lds ZL, xfunc_out+0 ;Save registered output function + lds ZH, xfunc_out+1 ; + push ZL ; + push ZH ;/ + ldi ZL, lo8(pm(putram));Set local output function + ldi ZH, hi8(pm(putram)); + sts xfunc_out+0, ZL ; + sts xfunc_out+1, ZH ;/ + push r15 ;Initialize pointer to string buffer + push r14 ; + ld r14, Y+ ; + ld r15, Y+ ;/ + rcall xvprintf + _MOVW ZH,ZL, r15,r14 ;Terminate string + st Z, r1 ; + pop r14 ; + pop r15 ;/ + pop ZH ;Restore registered output function + pop ZL ; + sts xfunc_out+0, ZL ; + sts xfunc_out+1, ZH ;/ + pop YL + pop YH + ret +.endfunc +#endif + + +#if USE_XFPRINTF +.func __xfprintf +.global __xfprintf +__xfprintf: + push YH + push YL + in YL, _SFR_IO_ADDR(SPL) +#ifdef SPH + in YH, _SFR_IO_ADDR(SPH) +#else + clr YH +#endif + adiw YL, 5 ;Y = pointer to arguments + lds ZL, xfunc_out+0 ;Save registered output function + lds ZH, xfunc_out+1 ; + push ZL ; + push ZH ;/ + ld ZL, Y+ ;Set output function + ld ZH, Y+ ; + sts xfunc_out+0, ZL ; + sts xfunc_out+1, ZH ;/ + rcall xvprintf + pop ZH ;Restore registered output function + pop ZL ; + sts xfunc_out+0, ZL ; + sts xfunc_out+1, ZH ;/ + pop YL + pop YH + ret +.endfunc +#endif + +#endif + + + +;--------------------------------------------------------------------------- +; Extended numeral string input +; +;Prototype: +; char xatoi ( /* 1: Successful, 0: Failed */ +; const char **str, /* pointer to pointer to source string */ +; long *res /* result */ +; ); +; + + +#if USE_XATOI +.func xatoi +.global xatoi +xatoi: + _MOVW r1, r0, r23, r22 + _MOVW XH, XL, r25, r24 + ld ZL, X+ + ld ZH, X+ + clr r18 ;r21:r18 = 0; + clr r19 ; + clr r20 ; + clr r21 ;/ + clt ;T = 0; + + ldi r25, 10 ;r25 = 10; + rjmp 41f ;/ +40: adiw ZL, 1 ;Z++; +41: ld r22, Z ;r22 = *Z; + cpi r22, ' ' ;if(r22 == ' ') continue + breq 40b ;/ + brcs 70f ;if(r22 < ' ') error; + cpi r22, '-' ;if(r22 == '-') { + brne 42f ; T = 1; + set ; continue; + rjmp 40b ;} +42: cpi r22, '9'+1 ;if(r22 > '9') error; + brcc 70f ;/ + cpi r22, '0' ;if(r22 < '0') error; + brcs 70f ;/ + brne 51f ;if(r22 > '0') cv_start; + ldi r25, 8 ;r25 = 8; + adiw ZL, 1 ;r22 = *(++Z); + ld r22, Z ;/ + cpi r22, ' '+1 ;if(r22 <= ' ') exit; + brcs 80f ;/ + cpi r22, 'b' ;if(r22 == 'b') { + brne 43f ; r25 = 2; + ldi r25, 2 ; cv_start; + rjmp 50f ;} +43: cpi r22, 'x' ;if(r22 != 'x') error; + brne 51f ;/ + ldi r25, 16 ;r25 = 16; + +50: adiw ZL, 1 ;Z++; + ld r22, Z ;r22 = *Z; +51: cpi r22, ' '+1 ;if(r22 <= ' ') break; + brcs 80f ;/ + cpi r22, 'a' ;if(r22 >= 'a') r22 =- 0x20; + brcs 52f ; + subi r22, 0x20 ;/ +52: subi r22, '0' ;if((r22 -= '0') < 0) error; + brcs 70f ;/ + cpi r22, 10 ;if(r22 >= 10) { + brcs 53f ; r22 -= 7; + subi r22, 7 ; if(r22 < 10) + cpi r22, 10 ; + brcs 70f ;} +53: cp r22, r25 ;if(r22 >= r25) error; + brcc 70f ;/ +60: ldi r24, 33 ;r21:r18 *= r25; + sub r23, r23 ; +61: brcc 62f ; + add r23, r25 ; +62: lsr r23 ; + ror r21 ; + ror r20 ; + ror r19 ; + ror r18 ; + dec r24 ; + brne 61b ;/ + add r18, r22 ;r21:r18 += r22; + adc r19, r24 ; + adc r20, r24 ; + adc r21, r24 ;/ + rjmp 50b ;repeat + +70: ldi r24, 0 + rjmp 81f +80: ldi r24, 1 +81: brtc 82f + clr r22 + com r18 + com r19 + com r20 + com r21 + adc r18, r22 + adc r19, r22 + adc r20, r22 + adc r21, r22 +82: st -X, ZH + st -X, ZL + _MOVW XH, XL, r1, r0 + st X+, r18 + st X+, r19 + st X+, r20 + st X+, r21 + clr r1 + ret +.endfunc +#endif + + diff --git a/tmk_core/common/avr/xprintf.h b/tmk_core/common/avr/xprintf.h index 59c6f25312..e53c0dd8e0 100644 --- a/tmk_core/common/avr/xprintf.h +++ b/tmk_core/common/avr/xprintf.h @@ -1,111 +1,111 @@ -/*--------------------------------------------------------------------------- - Extended itoa, puts and printf (C)ChaN, 2011 ------------------------------------------------------------------------------*/ - -#ifndef XPRINTF_H -#define XPRINTF_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern void (*xfunc_out)(uint8_t); -#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func) - -/* This is a pointer to user defined output function. It must be initialized - before using this modle. -*/ - -void xputc(char chr); - -/* This is a stub function to forward outputs to user defined output function. - All outputs from this module are output via this function. -*/ - - -/*-----------------------------------------------------------------------------*/ -void xputs(const char *string_p); - -/* The string placed in the ROM is forwarded to xputc() directly. -*/ - - -/*-----------------------------------------------------------------------------*/ -void xitoa(long value, char radix, char width); - -/* Extended itoa(). - - value radix width output - 100 10 6 " 100" - 100 10 -6 "000100" - 100 10 0 "100" - 4294967295 10 0 "4294967295" - 4294967295 -10 0 "-1" - 655360 16 -8 "000A0000" - 1024 16 0 "400" - 0x55 2 -8 "01010101" -*/ - - -/*-----------------------------------------------------------------------------*/ -#define xprintf(format, ...) __xprintf(PSTR(format), ##__VA_ARGS__) -#define xsprintf(str, format, ...) __xsprintf(str, PSTR(format), ##__VA_ARGS__) -#define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__) - -void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */ -void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */ -void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */ - -/* Format string is placed in the ROM. The format flags is similar to printf(). - - %[flag][width][size]type - - flag - A '0' means filled with '0' when output is shorter than width. - ' ' is used in default. This is effective only numeral type. - width - Minimum width in decimal number. This is effective only numeral type. - Default width is zero. - size - A 'l' means the argument is long(32bit). Default is short(16bit). - This is effective only numeral type. - type - 'c' : Character, argument is the value - 's' : String placed on the RAM, argument is the pointer - 'S' : String placed on the ROM, argument is the pointer - 'd' : Signed decimal, argument is the value - 'u' : Unsigned decimal, argument is the value - 'X' : Hexdecimal, argument is the value - 'b' : Binary, argument is the value - '%' : '%' - -*/ - - -/*-----------------------------------------------------------------------------*/ -char xatoi(char **str, long *ret); - -/* Get value of the numeral string. - - str - Pointer to pointer to source string - - "0b11001010" binary - "0377" octal - "0xff800" hexdecimal - "1250000" decimal - "-25000" decimal - - ret - Pointer to return value -*/ - -#ifdef __cplusplus -} -#endif - -#endif - +/*--------------------------------------------------------------------------- + Extended itoa, puts and printf (C)ChaN, 2011 +-----------------------------------------------------------------------------*/ + +#ifndef XPRINTF_H +#define XPRINTF_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern void (*xfunc_out)(uint8_t); +#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func) + +/* This is a pointer to user defined output function. It must be initialized + before using this modle. +*/ + +void xputc(char chr); + +/* This is a stub function to forward outputs to user defined output function. + All outputs from this module are output via this function. +*/ + + +/*-----------------------------------------------------------------------------*/ +void xputs(const char *string_p); + +/* The string placed in the ROM is forwarded to xputc() directly. +*/ + + +/*-----------------------------------------------------------------------------*/ +void xitoa(long value, char radix, char width); + +/* Extended itoa(). + + value radix width output + 100 10 6 " 100" + 100 10 -6 "000100" + 100 10 0 "100" + 4294967295 10 0 "4294967295" + 4294967295 -10 0 "-1" + 655360 16 -8 "000A0000" + 1024 16 0 "400" + 0x55 2 -8 "01010101" +*/ + + +/*-----------------------------------------------------------------------------*/ +#define xprintf(format, ...) __xprintf(PSTR(format), ##__VA_ARGS__) +#define xsprintf(str, format, ...) __xsprintf(str, PSTR(format), ##__VA_ARGS__) +#define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__) + +void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */ +void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */ +void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */ + +/* Format string is placed in the ROM. The format flags is similar to printf(). + + %[flag][width][size]type + + flag + A '0' means filled with '0' when output is shorter than width. + ' ' is used in default. This is effective only numeral type. + width + Minimum width in decimal number. This is effective only numeral type. + Default width is zero. + size + A 'l' means the argument is long(32bit). Default is short(16bit). + This is effective only numeral type. + type + 'c' : Character, argument is the value + 's' : String placed on the RAM, argument is the pointer + 'S' : String placed on the ROM, argument is the pointer + 'd' : Signed decimal, argument is the value + 'u' : Unsigned decimal, argument is the value + 'X' : Hexdecimal, argument is the value + 'b' : Binary, argument is the value + '%' : '%' + +*/ + + +/*-----------------------------------------------------------------------------*/ +char xatoi(char **str, long *ret); + +/* Get value of the numeral string. + + str + Pointer to pointer to source string + + "0b11001010" binary + "0377" octal + "0xff800" hexdecimal + "1250000" decimal + "-25000" decimal + + ret + Pointer to return value +*/ + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/tmk_core/protocol/iwrap/suart.S b/tmk_core/protocol/iwrap/suart.S index 1b02909638..a873515e10 100644 --- a/tmk_core/protocol/iwrap/suart.S +++ b/tmk_core/protocol/iwrap/suart.S @@ -1,156 +1,156 @@ -;---------------------------------------------------------------------------; -; Software implemented UART module ; -; (C)ChaN, 2005 (http://elm-chan.org/) ; -;---------------------------------------------------------------------------; -; Bit rate settings: -; -; 1MHz 2MHz 4MHz 6MHz 8MHz 10MHz 12MHz 16MHz 20MHz -; 2.4kbps 138 - - - - - - - - -; 4.8kbps 68 138 - - - - - - - -; 9.6kbps 33 68 138 208 - - - - - -; 19.2kbps - 33 68 102 138 173 208 - - -; 38.4kbps - - 33 50 68 85 102 138 172 -; 57.6kbps - - 21 33 44 56 68 91 114 -; 115.2kbps - - - - 21 27 33 44 56 - -.nolist -#include -.list - -#define BPS 102 /* Bit delay. (see above table) */ -#define BIDIR 0 /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */ - -#define OUT_1 sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */ -#define OUT_0 cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */ -#define SKIP_IN_1 sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 1 */ -#define SKIP_IN_0 sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 0 */ - - - -#ifdef SPM_PAGESIZE -.macro _LPMI reg - lpm \reg, Z+ -.endm -.macro _MOVW dh,dl, sh,sl - movw \dl, \sl -.endm -#else -.macro _LPMI reg - lpm - mov \reg, r0 - adiw ZL, 1 -.endm -.macro _MOVW dh,dl, sh,sl - mov \dl, \sl - mov \dh, \sh -.endm -#endif - - - -;---------------------------------------------------------------------------; -; Transmit a byte in serial format of N81 -; -;Prototype: void xmit (uint8_t data); -;Size: 16 words - -.global xmit -.func xmit -xmit: -#if BIDIR - ldi r23, BPS-1 ;Pre-idle time for bidirectional data line -5: dec r23 ; - brne 5b ;/ -#endif - in r0, _SFR_IO_ADDR(SREG) ;Save flags - - com r24 ;C = start bit - ldi r25, 10 ;Bit counter - cli ;Start critical section - -1: ldi r23, BPS-1 ;----- Bit transferring loop -2: dec r23 ;Wait for a bit time - brne 2b ;/ - brcs 3f ;MISO = bit to be sent - OUT_1 ; -3: brcc 4f ; - OUT_0 ;/ -4: lsr r24 ;Get next bit into C - dec r25 ;All bits sent? - brne 1b ; no, coutinue - - out _SFR_IO_ADDR(SREG), r0 ;End of critical section - ret -.endfunc - - - -;---------------------------------------------------------------------------; -; Receive a byte -; -;Prototype: uint8_t rcvr (void); -;Size: 19 words - -.global rcvr -.func rcvr -rcvr: - in r0, _SFR_IO_ADDR(SREG) ;Save flags - - ldi r24, 0x80 ;Receiving shift reg - cli ;Start critical section - -1: SKIP_IN_1 ;Wait for idle - rjmp 1b -2: SKIP_IN_0 ;Wait for start bit - rjmp 2b - ldi r25, BPS/2 ;Wait for half bit time -3: dec r25 - brne 3b - -4: ldi r25, BPS ;----- Bit receiving loop -5: dec r25 ;Wait for a bit time - brne 5b ;/ - lsr r24 ;Next bit - SKIP_IN_0 ;Get a data bit into r24.7 - ori r24, 0x80 - brcc 4b ;All bits received? no, continue - - out _SFR_IO_ADDR(SREG), r0 ;End of critical section - ret -.endfunc - - -; Not wait for start bit. This should be called after detecting start bit. -.global recv -.func recv -recv: - in r0, _SFR_IO_ADDR(SREG) ;Save flags - - ldi r24, 0x80 ;Receiving shift reg - cli ;Start critical section - -;1: SKIP_IN_1 ;Wait for idle -; rjmp 1b -;2: SKIP_IN_0 ;Wait for start bit -; rjmp 2b - ldi r25, BPS/2 ;Wait for half bit time -3: dec r25 - brne 3b - -4: ldi r25, BPS ;----- Bit receiving loop -5: dec r25 ;Wait for a bit time - brne 5b ;/ - lsr r24 ;Next bit - SKIP_IN_0 ;Get a data bit into r24.7 - ori r24, 0x80 - brcc 4b ;All bits received? no, continue - - ldi r25, BPS/2 ;Wait for half bit time -6: dec r25 - brne 6b -7: SKIP_IN_1 ;Wait for stop bit - rjmp 7b - - out _SFR_IO_ADDR(SREG), r0 ;End of critical section - ret -.endfunc +;---------------------------------------------------------------------------; +; Software implemented UART module ; +; (C)ChaN, 2005 (http://elm-chan.org/) ; +;---------------------------------------------------------------------------; +; Bit rate settings: +; +; 1MHz 2MHz 4MHz 6MHz 8MHz 10MHz 12MHz 16MHz 20MHz +; 2.4kbps 138 - - - - - - - - +; 4.8kbps 68 138 - - - - - - - +; 9.6kbps 33 68 138 208 - - - - - +; 19.2kbps - 33 68 102 138 173 208 - - +; 38.4kbps - - 33 50 68 85 102 138 172 +; 57.6kbps - - 21 33 44 56 68 91 114 +; 115.2kbps - - - - 21 27 33 44 56 + +.nolist +#include +.list + +#define BPS 102 /* Bit delay. (see above table) */ +#define BIDIR 0 /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */ + +#define OUT_1 sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */ +#define OUT_0 cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */ +#define SKIP_IN_1 sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 1 */ +#define SKIP_IN_0 sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 0 */ + + + +#ifdef SPM_PAGESIZE +.macro _LPMI reg + lpm \reg, Z+ +.endm +.macro _MOVW dh,dl, sh,sl + movw \dl, \sl +.endm +#else +.macro _LPMI reg + lpm + mov \reg, r0 + adiw ZL, 1 +.endm +.macro _MOVW dh,dl, sh,sl + mov \dl, \sl + mov \dh, \sh +.endm +#endif + + + +;---------------------------------------------------------------------------; +; Transmit a byte in serial format of N81 +; +;Prototype: void xmit (uint8_t data); +;Size: 16 words + +.global xmit +.func xmit +xmit: +#if BIDIR + ldi r23, BPS-1 ;Pre-idle time for bidirectional data line +5: dec r23 ; + brne 5b ;/ +#endif + in r0, _SFR_IO_ADDR(SREG) ;Save flags + + com r24 ;C = start bit + ldi r25, 10 ;Bit counter + cli ;Start critical section + +1: ldi r23, BPS-1 ;----- Bit transferring loop +2: dec r23 ;Wait for a bit time + brne 2b ;/ + brcs 3f ;MISO = bit to be sent + OUT_1 ; +3: brcc 4f ; + OUT_0 ;/ +4: lsr r24 ;Get next bit into C + dec r25 ;All bits sent? + brne 1b ; no, coutinue + + out _SFR_IO_ADDR(SREG), r0 ;End of critical section + ret +.endfunc + + + +;---------------------------------------------------------------------------; +; Receive a byte +; +;Prototype: uint8_t rcvr (void); +;Size: 19 words + +.global rcvr +.func rcvr +rcvr: + in r0, _SFR_IO_ADDR(SREG) ;Save flags + + ldi r24, 0x80 ;Receiving shift reg + cli ;Start critical section + +1: SKIP_IN_1 ;Wait for idle + rjmp 1b +2: SKIP_IN_0 ;Wait for start bit + rjmp 2b + ldi r25, BPS/2 ;Wait for half bit time +3: dec r25 + brne 3b + +4: ldi r25, BPS ;----- Bit receiving loop +5: dec r25 ;Wait for a bit time + brne 5b ;/ + lsr r24 ;Next bit + SKIP_IN_0 ;Get a data bit into r24.7 + ori r24, 0x80 + brcc 4b ;All bits received? no, continue + + out _SFR_IO_ADDR(SREG), r0 ;End of critical section + ret +.endfunc + + +; Not wait for start bit. This should be called after detecting start bit. +.global recv +.func recv +recv: + in r0, _SFR_IO_ADDR(SREG) ;Save flags + + ldi r24, 0x80 ;Receiving shift reg + cli ;Start critical section + +;1: SKIP_IN_1 ;Wait for idle +; rjmp 1b +;2: SKIP_IN_0 ;Wait for start bit +; rjmp 2b + ldi r25, BPS/2 ;Wait for half bit time +3: dec r25 + brne 3b + +4: ldi r25, BPS ;----- Bit receiving loop +5: dec r25 ;Wait for a bit time + brne 5b ;/ + lsr r24 ;Next bit + SKIP_IN_0 ;Get a data bit into r24.7 + ori r24, 0x80 + brcc 4b ;All bits received? no, continue + + ldi r25, BPS/2 ;Wait for half bit time +6: dec r25 + brne 6b +7: SKIP_IN_1 ;Wait for stop bit + rjmp 7b + + out _SFR_IO_ADDR(SREG), r0 ;End of critical section + ret +.endfunc diff --git a/tmk_core/protocol/iwrap/suart.h b/tmk_core/protocol/iwrap/suart.h index 72725b998f..7d92be0692 100644 --- a/tmk_core/protocol/iwrap/suart.h +++ b/tmk_core/protocol/iwrap/suart.h @@ -1,8 +1,8 @@ -#ifndef SUART -#define SUART - -void xmit(uint8_t); -uint8_t rcvr(void); -uint8_t recv(void); - -#endif /* SUART */ +#ifndef SUART +#define SUART + +void xmit(uint8_t); +uint8_t rcvr(void); +uint8_t recv(void); + +#endif /* SUART */ diff --git a/tmk_core/protocol/iwrap/wd.h b/tmk_core/protocol/iwrap/wd.h index 99058f0331..12395bf696 100644 --- a/tmk_core/protocol/iwrap/wd.h +++ b/tmk_core/protocol/iwrap/wd.h @@ -1,159 +1,159 @@ -/* This is from http://www.mtcnet.net/~henryvm/wdt/ */ -#ifndef _AVR_WD_H_ -#define _AVR_WD_H_ - -#include - -/* -Copyright (c) 2009, Curt Van Maanen - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -include usage- - #include "wd.h" //if in same directory as project - #include //if wd.h is in avr directory - -set watchdog modes and prescale - -usage- - WD_SET(mode,[timeout]); //prescale always set - -modes- - WD_OFF disabled - WD_RST normal reset mode - WD_IRQ interrupt only mode (if supported) - WD_RST_IRQ interrupt+reset mode (if supported) - -timeout- - WDTO_15MS default if no timeout provided - WDTO_30MS - WDTO_60MS - WDTO_120MS - WDTO_250MS - WDTO_500MS - WDTO_1S - WDTO_2S - WDTO_4S (if supported) - WDTO_8S (if supported) - -examples- - WD_SET(WD_RST,WDTO_1S); //reset mode, 1s timeout - WD_SET(WD_OFF); //watchdog disabled (if not fused on) - WD_SET(WD_RST); //reset mode, 15ms (default timeout) - WD_SET(WD_IRQ,WDTO_120MS); //interrupt only mode, 120ms timeout - WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout - - -for enhanced watchdogs, if the watchdog is not being used WDRF should be -cleared on every power up or reset, along with disabling the watchdog- - WD_DISABLE(); //clear WDRF, then turn off watchdog - -*/ - -//reset registers to the same name (MCUCSR) -#if !defined(MCUCSR) -#define MCUCSR MCUSR -#endif - -//watchdog registers to the same name (WDTCSR) -#if !defined(WDTCSR) -#define WDTCSR WDTCR -#endif - -//if enhanced watchdog, define irq values, create disable macro -#if defined(WDIF) -#define WD_IRQ 0xC0 -#define WD_RST_IRQ 0xC8 -#define WD_DISABLE() do{ \ - MCUCSR &= ~(1< + +/* +Copyright (c) 2009, Curt Van Maanen + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +include usage- + #include "wd.h" //if in same directory as project + #include //if wd.h is in avr directory + +set watchdog modes and prescale + +usage- + WD_SET(mode,[timeout]); //prescale always set + +modes- + WD_OFF disabled + WD_RST normal reset mode + WD_IRQ interrupt only mode (if supported) + WD_RST_IRQ interrupt+reset mode (if supported) + +timeout- + WDTO_15MS default if no timeout provided + WDTO_30MS + WDTO_60MS + WDTO_120MS + WDTO_250MS + WDTO_500MS + WDTO_1S + WDTO_2S + WDTO_4S (if supported) + WDTO_8S (if supported) + +examples- + WD_SET(WD_RST,WDTO_1S); //reset mode, 1s timeout + WD_SET(WD_OFF); //watchdog disabled (if not fused on) + WD_SET(WD_RST); //reset mode, 15ms (default timeout) + WD_SET(WD_IRQ,WDTO_120MS); //interrupt only mode, 120ms timeout + WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout + + +for enhanced watchdogs, if the watchdog is not being used WDRF should be +cleared on every power up or reset, along with disabling the watchdog- + WD_DISABLE(); //clear WDRF, then turn off watchdog + +*/ + +//reset registers to the same name (MCUCSR) +#if !defined(MCUCSR) +#define MCUCSR MCUSR +#endif + +//watchdog registers to the same name (WDTCSR) +#if !defined(WDTCSR) +#define WDTCSR WDTCR +#endif + +//if enhanced watchdog, define irq values, create disable macro +#if defined(WDIF) +#define WD_IRQ 0xC0 +#define WD_RST_IRQ 0xC8 +#define WD_DISABLE() do{ \ + MCUCSR &= ~(1< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml index 6f3312b764..f56aba69f5 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml @@ -1,156 +1,156 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml index 9394b13530..c67b9419ed 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S index 6844d4b01c..91fc949666 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S @@ -1,102 +1,102 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2014. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -#if AUX_BOOT_SECTION_SIZE > 0 -#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation). - -; Trampoline to jump over the AUX bootloader section to the start of the bootloader, -; on devices where an AUX bootloader section is used. -.section .boot_aux_trampoline, "ax" -.global Boot_AUX_Trampoline -Boot_AUX_Trampoline: - jmp BOOT_START_ADDR -#endif - -; Trampolines to actual API implementations if the target address is outside the -; range of a rjmp instruction (can happen with large bootloader sections) -.section .apitable_trampolines, "ax" -.global BootloaderAPI_Trampolines -BootloaderAPI_Trampolines: - - BootloaderAPI_ErasePage_Trampoline: - jmp BootloaderAPI_ErasePage - BootloaderAPI_WritePage_Trampoline: - jmp BootloaderAPI_WritePage - BootloaderAPI_FillWord_Trampoline: - jmp BootloaderAPI_FillWord - BootloaderAPI_ReadSignature_Trampoline: - jmp BootloaderAPI_ReadSignature - BootloaderAPI_ReadFuse_Trampoline: - jmp BootloaderAPI_ReadFuse - BootloaderAPI_ReadLock_Trampoline: - jmp BootloaderAPI_ReadLock - BootloaderAPI_WriteLock_Trampoline: - jmp BootloaderAPI_WriteLock - BootloaderAPI_UNUSED1: - ret - BootloaderAPI_UNUSED2: - ret - BootloaderAPI_UNUSED3: - ret - BootloaderAPI_UNUSED4: - ret - BootloaderAPI_UNUSED5: - ret - - - -; API function jump table -.section .apitable_jumptable, "ax" -.global BootloaderAPI_JumpTable -BootloaderAPI_JumpTable: - - rjmp BootloaderAPI_ErasePage_Trampoline - rjmp BootloaderAPI_WritePage_Trampoline - rjmp BootloaderAPI_FillWord_Trampoline - rjmp BootloaderAPI_ReadSignature_Trampoline - rjmp BootloaderAPI_ReadFuse_Trampoline - rjmp BootloaderAPI_ReadLock_Trampoline - rjmp BootloaderAPI_WriteLock_Trampoline - rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 - rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 - rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 - rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 - rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 - - - -; Bootloader table signatures and information -.section .apitable_signatures, "ax" -.global BootloaderAPI_Signatures -BootloaderAPI_Signatures: - - .long BOOT_START_ADDR ; Start address of the bootloader - .word 0xDF30 ; Signature for the MS class bootloader, V1 - .word 0xDCFB ; Signature for a LUFA class bootloader +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaims all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +#if AUX_BOOT_SECTION_SIZE > 0 +#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation). + +; Trampoline to jump over the AUX bootloader section to the start of the bootloader, +; on devices where an AUX bootloader section is used. +.section .boot_aux_trampoline, "ax" +.global Boot_AUX_Trampoline +Boot_AUX_Trampoline: + jmp BOOT_START_ADDR +#endif + +; Trampolines to actual API implementations if the target address is outside the +; range of a rjmp instruction (can happen with large bootloader sections) +.section .apitable_trampolines, "ax" +.global BootloaderAPI_Trampolines +BootloaderAPI_Trampolines: + + BootloaderAPI_ErasePage_Trampoline: + jmp BootloaderAPI_ErasePage + BootloaderAPI_WritePage_Trampoline: + jmp BootloaderAPI_WritePage + BootloaderAPI_FillWord_Trampoline: + jmp BootloaderAPI_FillWord + BootloaderAPI_ReadSignature_Trampoline: + jmp BootloaderAPI_ReadSignature + BootloaderAPI_ReadFuse_Trampoline: + jmp BootloaderAPI_ReadFuse + BootloaderAPI_ReadLock_Trampoline: + jmp BootloaderAPI_ReadLock + BootloaderAPI_WriteLock_Trampoline: + jmp BootloaderAPI_WriteLock + BootloaderAPI_UNUSED1: + ret + BootloaderAPI_UNUSED2: + ret + BootloaderAPI_UNUSED3: + ret + BootloaderAPI_UNUSED4: + ret + BootloaderAPI_UNUSED5: + ret + + + +; API function jump table +.section .apitable_jumptable, "ax" +.global BootloaderAPI_JumpTable +BootloaderAPI_JumpTable: + + rjmp BootloaderAPI_ErasePage_Trampoline + rjmp BootloaderAPI_WritePage_Trampoline + rjmp BootloaderAPI_FillWord_Trampoline + rjmp BootloaderAPI_ReadSignature_Trampoline + rjmp BootloaderAPI_ReadFuse_Trampoline + rjmp BootloaderAPI_ReadLock_Trampoline + rjmp BootloaderAPI_WriteLock_Trampoline + rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 + rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 + rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 + rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 + rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 + + + +; Bootloader table signatures and information +.section .apitable_signatures, "ax" +.global BootloaderAPI_Signatures +BootloaderAPI_Signatures: + + .long BOOT_START_ADDR ; Start address of the bootloader + .word 0xDF30 ; Signature for the MS class bootloader, V1 + .word 0xDCFB ; Signature for a LUFA class bootloader diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml index f1d550d1eb..700ffa26ff 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml @@ -1,156 +1,156 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile index 91bb4038e8..a0edb2c4f5 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile @@ -1,68 +1,68 @@ -# -# LUFA Library -# Copyright (C) Dean Camera, 2014. -# -# dean [at] fourwalledcubicle [dot] com -# www.lufa-lib.org -# -# -------------------------------------- -# LUFA Project Makefile. -# -------------------------------------- - -# Run "make help" for target help. - -MCU = at90usb1287 -ARCH = AVR8 -BOARD = USBKEY -F_CPU = 8000000 -F_USB = $(F_CPU) -OPTIMIZATION = s -TARGET = BootloaderMassStorage -SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) -LUFA_PATH = ../../LUFA -CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) -LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) - -# Flash size and bootloader section sizes of the target, in KB. These must -# match the target's total FLASH size and the bootloader size set in the -# device's fuses. -FLASH_SIZE_KB = 128 -BOOT_SECTION_SIZE_KB = 8 - -# Bootloader address calculation formulas -# Do not modify these macros, but rather modify the dependent values above. -CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) -BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) -BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) - -# Bootloader linker section flags for relocating the API table sections to -# known FLASH addresses - these should not normally be user-edited. -BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) -BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) -BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) -BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) - -# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the -# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum -# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices. -ifeq ($(BOOT_SECTION_SIZE_KB),8) - CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0 -else - AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB)) - - CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)' - LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16)) - LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024) -endif - -# Default target -all: - -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# +# LUFA Library +# Copyright (C) Dean Camera, 2014. +# +# dean [at] fourwalledcubicle [dot] com +# www.lufa-lib.org +# +# -------------------------------------- +# LUFA Project Makefile. +# -------------------------------------- + +# Run "make help" for target help. + +MCU = at90usb1287 +ARCH = AVR8 +BOARD = USBKEY +F_CPU = 8000000 +F_USB = $(F_CPU) +OPTIMIZATION = s +TARGET = BootloaderMassStorage +SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) +LUFA_PATH = ../../LUFA +CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) +LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) + +# Flash size and bootloader section sizes of the target, in KB. These must +# match the target's total FLASH size and the bootloader size set in the +# device's fuses. +FLASH_SIZE_KB = 128 +BOOT_SECTION_SIZE_KB = 8 + +# Bootloader address calculation formulas +# Do not modify these macros, but rather modify the dependent values above. +CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) +BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) +BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) + +# Bootloader linker section flags for relocating the API table sections to +# known FLASH addresses - these should not normally be user-edited. +BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) +BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) +BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) +BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) + +# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the +# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum +# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices. +ifeq ($(BOOT_SECTION_SIZE_KB),8) + CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0 +else + AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB)) + + CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)' + LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16)) + LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024) +endif + +# Default target +all: + +# Include LUFA build script makefiles +include $(LUFA_PATH)/Build/lufa_core.mk +include $(LUFA_PATH)/Build/lufa_sources.mk +include $(LUFA_PATH)/Build/lufa_build.mk +include $(LUFA_PATH)/Build/lufa_cppcheck.mk +include $(LUFA_PATH)/Build/lufa_doxygen.mk +include $(LUFA_PATH)/Build/lufa_avrdude.mk +include $(LUFA_PATH)/Build/lufa_atprogram.mk diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S index ec499b74e5..88c51da825 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S @@ -1,91 +1,91 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2014. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -; Trampolines to actual API implementations if the target address is outside the -; range of a rjmp instruction (can happen with large bootloader sections) -.section .apitable_trampolines, "ax" -.global BootloaderAPI_Trampolines -BootloaderAPI_Trampolines: - - BootloaderAPI_ErasePage_Trampoline: - jmp BootloaderAPI_ErasePage - BootloaderAPI_WritePage_Trampoline: - jmp BootloaderAPI_WritePage - BootloaderAPI_FillWord_Trampoline: - jmp BootloaderAPI_FillWord - BootloaderAPI_ReadSignature_Trampoline: - jmp BootloaderAPI_ReadSignature - BootloaderAPI_ReadFuse_Trampoline: - jmp BootloaderAPI_ReadFuse - BootloaderAPI_ReadLock_Trampoline: - jmp BootloaderAPI_ReadLock - BootloaderAPI_WriteLock_Trampoline: - jmp BootloaderAPI_WriteLock - BootloaderAPI_UNUSED1: - ret - BootloaderAPI_UNUSED2: - ret - BootloaderAPI_UNUSED3: - ret - BootloaderAPI_UNUSED4: - ret - BootloaderAPI_UNUSED5: - ret - - - -; API function jump table -.section .apitable_jumptable, "ax" -.global BootloaderAPI_JumpTable -BootloaderAPI_JumpTable: - - rjmp BootloaderAPI_ErasePage_Trampoline - rjmp BootloaderAPI_WritePage_Trampoline - rjmp BootloaderAPI_FillWord_Trampoline - rjmp BootloaderAPI_ReadSignature_Trampoline - rjmp BootloaderAPI_ReadFuse_Trampoline - rjmp BootloaderAPI_ReadLock_Trampoline - rjmp BootloaderAPI_WriteLock_Trampoline - rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 - rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 - rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 - rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 - rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 - - - -; Bootloader table signatures and information -.section .apitable_signatures, "ax" -.global BootloaderAPI_Signatures -BootloaderAPI_Signatures: - - .long BOOT_START_ADDR ; Start address of the bootloader - .word 0xDF20 ; Signature for the Printer class bootloader - .word 0xDCFB ; Signature for a LUFA class bootloader +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaims all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +; Trampolines to actual API implementations if the target address is outside the +; range of a rjmp instruction (can happen with large bootloader sections) +.section .apitable_trampolines, "ax" +.global BootloaderAPI_Trampolines +BootloaderAPI_Trampolines: + + BootloaderAPI_ErasePage_Trampoline: + jmp BootloaderAPI_ErasePage + BootloaderAPI_WritePage_Trampoline: + jmp BootloaderAPI_WritePage + BootloaderAPI_FillWord_Trampoline: + jmp BootloaderAPI_FillWord + BootloaderAPI_ReadSignature_Trampoline: + jmp BootloaderAPI_ReadSignature + BootloaderAPI_ReadFuse_Trampoline: + jmp BootloaderAPI_ReadFuse + BootloaderAPI_ReadLock_Trampoline: + jmp BootloaderAPI_ReadLock + BootloaderAPI_WriteLock_Trampoline: + jmp BootloaderAPI_WriteLock + BootloaderAPI_UNUSED1: + ret + BootloaderAPI_UNUSED2: + ret + BootloaderAPI_UNUSED3: + ret + BootloaderAPI_UNUSED4: + ret + BootloaderAPI_UNUSED5: + ret + + + +; API function jump table +.section .apitable_jumptable, "ax" +.global BootloaderAPI_JumpTable +BootloaderAPI_JumpTable: + + rjmp BootloaderAPI_ErasePage_Trampoline + rjmp BootloaderAPI_WritePage_Trampoline + rjmp BootloaderAPI_FillWord_Trampoline + rjmp BootloaderAPI_ReadSignature_Trampoline + rjmp BootloaderAPI_ReadFuse_Trampoline + rjmp BootloaderAPI_ReadLock_Trampoline + rjmp BootloaderAPI_WriteLock_Trampoline + rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 + rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 + rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 + rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 + rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 + + + +; Bootloader table signatures and information +.section .apitable_signatures, "ax" +.global BootloaderAPI_Signatures +BootloaderAPI_Signatures: + + .long BOOT_START_ADDR ; Start address of the bootloader + .word 0xDF20 ; Signature for the Printer class bootloader + .word 0xDCFB ; Signature for a LUFA class bootloader diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml index 86a56911ed..b5c0c6b3a5 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml @@ -1,159 +1,159 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile index 0716c3bbe8..0db035de3b 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile @@ -1,55 +1,55 @@ -# -# LUFA Library -# Copyright (C) Dean Camera, 2014. -# -# dean [at] fourwalledcubicle [dot] com -# www.lufa-lib.org -# -# -------------------------------------- -# LUFA Project Makefile. -# -------------------------------------- - -# Run "make help" for target help. - -MCU = at90usb1287 -ARCH = AVR8 -BOARD = USBKEY -F_CPU = 8000000 -F_USB = $(F_CPU) -OPTIMIZATION = s -TARGET = BootloaderPrinter -SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) -LUFA_PATH = ../../LUFA -CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) -LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) - -# Flash size and bootloader section sizes of the target, in KB. These must -# match the target's total FLASH size and the bootloader size set in the -# device's fuses. -FLASH_SIZE_KB = 128 -BOOT_SECTION_SIZE_KB = 8 - -# Bootloader address calculation formulas -# Do not modify these macros, but rather modify the dependent values above. -CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) -BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) -BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) - -# Bootloader linker section flags for relocating the API table sections to -# known FLASH addresses - these should not normally be user-edited. -BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) -BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) -BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) -BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) - -# Default target -all: - -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# +# LUFA Library +# Copyright (C) Dean Camera, 2014. +# +# dean [at] fourwalledcubicle [dot] com +# www.lufa-lib.org +# +# -------------------------------------- +# LUFA Project Makefile. +# -------------------------------------- + +# Run "make help" for target help. + +MCU = at90usb1287 +ARCH = AVR8 +BOARD = USBKEY +F_CPU = 8000000 +F_USB = $(F_CPU) +OPTIMIZATION = s +TARGET = BootloaderPrinter +SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) +LUFA_PATH = ../../LUFA +CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) +LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) + +# Flash size and bootloader section sizes of the target, in KB. These must +# match the target's total FLASH size and the bootloader size set in the +# device's fuses. +FLASH_SIZE_KB = 128 +BOOT_SECTION_SIZE_KB = 8 + +# Bootloader address calculation formulas +# Do not modify these macros, but rather modify the dependent values above. +CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) +BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) +BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) + +# Bootloader linker section flags for relocating the API table sections to +# known FLASH addresses - these should not normally be user-edited. +BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) +BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) +BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) +BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) + +# Default target +all: + +# Include LUFA build script makefiles +include $(LUFA_PATH)/Build/lufa_core.mk +include $(LUFA_PATH)/Build/lufa_sources.mk +include $(LUFA_PATH)/Build/lufa_build.mk +include $(LUFA_PATH)/Build/lufa_cppcheck.mk +include $(LUFA_PATH)/Build/lufa_doxygen.mk +include $(LUFA_PATH)/Build/lufa_avrdude.mk +include $(LUFA_PATH)/Build/lufa_atprogram.mk diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile index 9fd188c936..e839ba6b1d 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile @@ -1,42 +1,42 @@ -# -# LUFA Library -# Copyright (C) Dean Camera, 2014. -# -# dean [at] fourwalledcubicle [dot] com -# www.lufa-lib.org -# -# -------------------------------------- -# LUFA Project Makefile. -# -------------------------------------- - -# Run "make help" for target help. - -MCU = at90usb1287 -ARCH = AVR8 -F_CPU = 1000000 -F_USB = $(F_CPU) -OPTIMIZATION = s -TARGET = HID_EEPROM_Loader -SRC = $(TARGET).c -LUFA_PATH = ../../../LUFA -CC_FLAGS = -LD_FLAGS = -OBJECT_FILES = InputEEData.o - -# Default target -all: - -# Determine the AVR sub-architecture of the build main application object file -FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1) - -# Create a linkable object file with the input binary EEPROM data stored in the FLASH section -InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST) - @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\" - avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@ - -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_hid.mk +# +# LUFA Library +# Copyright (C) Dean Camera, 2014. +# +# dean [at] fourwalledcubicle [dot] com +# www.lufa-lib.org +# +# -------------------------------------- +# LUFA Project Makefile. +# -------------------------------------- + +# Run "make help" for target help. + +MCU = at90usb1287 +ARCH = AVR8 +F_CPU = 1000000 +F_USB = $(F_CPU) +OPTIMIZATION = s +TARGET = HID_EEPROM_Loader +SRC = $(TARGET).c +LUFA_PATH = ../../../LUFA +CC_FLAGS = +LD_FLAGS = +OBJECT_FILES = InputEEData.o + +# Default target +all: + +# Determine the AVR sub-architecture of the build main application object file +FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1) + +# Create a linkable object file with the input binary EEPROM data stored in the FLASH section +InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST) + @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\" + avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@ + +# Include LUFA build script makefiles +include $(LUFA_PATH)/Build/lufa_core.mk +include $(LUFA_PATH)/Build/lufa_build.mk +include $(LUFA_PATH)/Build/lufa_cppcheck.mk +include $(LUFA_PATH)/Build/lufa_doxygen.mk +include $(LUFA_PATH)/Build/lufa_hid.mk diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml index fd65db283f..e952714e16 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Template for a LUFA USB device mode application. - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + Template for a LUFA USB device mode application. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml index c1996ec711..c3860c056d 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml @@ -1,41 +1,41 @@ - - - - - - - - - - - - - - - - Template for a LUFA USB host mode application. - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + Template for a LUFA USB host mode application. + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt index 7ddfa1be3f..0ae1dd678f 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt @@ -1,975 +1,975 @@ -/** \file - * - * This file contains special DoxyGen information for the generation of the main page and other special - * documentation pages. It is not a project source file. - */ - -/** \page Page_BuildSystem The LUFA Build System - * - * \section Sec_BuildSystem_Overview Overview of the LUFA Build System - * The LUFA build system is an attempt at making a set of re-usable, modular build make files which - * can be referenced in a LUFA powered project, to minimize the amount of code required in an - * application makefile. The system is written in GNU Make, and each module is independent of - * one-another. - * - * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA - * build system, see \ref Sec_CompilingApps_Prerequisites. - * - * To use a LUFA build system module, simply add an include to your project makefile. All user projects - * should at a minimum include \ref Page_BuildModule_CORE for base functionality: - * \code - * include $(LUFA_PATH)/Build/lufa_core.mk - * \endcode - * - * Once included in your project makefile, the associated build module targets will be added to your - * project's build makefile targets automatically. To call a build target, run make {TARGET_NAME} - * from the command line, substituting in the appropriate target name. - * - * \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile. - * - * Each build module may have one or more mandatory parameters (GNU Make variables) which must - * be supplied in the project makefile for the module to work, and one or more optional parameters which - * may be defined and which will assume a sensible default if not. - * - * \section SSec_BuildSystem_Modules Available Modules - * - * The following modules are included in this LUFA release: - * - * \li \subpage Page_BuildModule_ATPROGRAM - Device Programming - * \li \subpage Page_BuildModule_AVRDUDE - Device Programming - * \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking - * \li \subpage Page_BuildModule_CORE - Core Build System Functions - * \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis - * \li \subpage Page_BuildModule_DFU - Device Programming - * \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation - * \li \subpage Page_BuildModule_HID - Device Programming - * \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables - * - * If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps. - */ - - /** \page Page_BuildModule_BUILD The BUILD build module - * - * The BUILD LUFA build system module, providing targets for the compilation, - * assembling and linking of an application from source code into binary files - * suitable for programming into a target device, using the GCC compiler. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_build.mk - * \endcode - * - * \section SSec_BuildModule_BUILD_Requirements Requirements - * This module requires the the architecture appropriate binaries of the GCC compiler are available in your - * system's PATH variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio - * 5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages. - * - * \section SSec_BuildModule_BUILD_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
sizeDisplay size of the compiled application FLASH and SRAM segments.
symbol-sizesDisplay a size-sorted list of symbols from the compiled application, in decimal bytes.
libBuild and archive all source files into a library A binary file.
allBuild and link the application into ELF debug and HEX binary files.
elfBuild and link the application into an ELF debug file.
binBuild and link the application and produce a BIN binary file.
hexBuild and link the application and produce HEX and EEP binary files.
lssBuild and link the application and produce a LSS source code/assembly code mixed listing file.
cleanRemove all intermediary files and binary output files.
mostlycleanRemove all intermediary files but preserve any binary output files.
<filename>.sCreate an assembly listing of a given input C/C++ source file.
- * - * \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
TARGETName of the application output file prefix (e.g. TestApplication).
ARCHArchitecture of the target processor (see \ref Page_DeviceSupport).
MCUName of the Atmel processor model (e.g. at90usb1287).
SRCList of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.
F_USBSpeed in Hz of the input clock frequency to the target's USB controller.
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
- * - * \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
BOARDLUFA board hardware drivers to use (see \ref Page_DeviceSupport).
OPTIMIZATIONOptimization level to use when compiling source files (see GCC manual).
C_STANDARDVersion of the C standard to apply when compiling C++ source files (see GCC manual).
CPP_STANDARDVersion of the C++ standard to apply when compiling C++ source files (see GCC manual).
DEBUG_FORMATFormat of the debug information to embed in the generated object files (see GCC manual).
DEBUG_LEVELLevel of the debugging information to embed in the generated object files (see GCC manual).
F_CPUSpeed of the processor CPU clock, in Hz.
C_FLAGSFlags to pass to the C compiler only, after the automatically generated flags.
CPP_FLAGSFlags to pass to the C++ compiler only, after the automatically generated flags.
ASM_FLAGSFlags to pass to the assembler only, after the automatically generated flags.
CC_FLAGSCommon flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.
COMPILER_PATHDirectory where the C/C++ toolchain is located, if not available in the system PATH.
LD_FLAGSFlags to pass to the linker, after the automatically generated flags.
LINKER_RELAXATIONSEnables or disables linker relaxations when linking the application binary. This can reduce the total size - * of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible. - * \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you - * receive a link error relocation truncated to fit: R_AVR_13_PCREL, disable this setting.
OBJDIRDirectory to place the generated object and dependency files. If set to "." the same folder as the source file will be used. - * \note When this option is enabled, all source filenames must be unique.
OBJECT_FILESList of additional object files that should be linked into the resulting binary.
- * - * \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_CORE The CORE build module - * - * The core LUFA build system module, providing common build system help and information targets. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_core.mk - * \endcode - * - * \section SSec_BuildModule_CORE_Requirements Requirements - * This module has no requirements outside a standard *nix shell like environment; the sh - * shell, GNU make and *nix CoreUtils (echo, printf, etc.). - * - * \section SSec_BuildModule_CORE_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
helpDisplay build system help and configuration information.
list_targetsList all available build targets from the build system.
list_modulesList all available build modules from the build system.
list_mandatoryList all mandatory parameters required by the included modules.
list_optionalList all optional parameters required by the included modules.
list_providedList all variables provided by the included modules.
list_macrosList all macros provided by the included modules.
- * - * \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module - * - * The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_atprogram.mk - * \endcode - * - * \section SSec_BuildModule_ATPROGRAM_Requirements Requirements - * This module requires the atprogram.exe utility to be available in your system's PATH - * variable. The atprogram.exe utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x - * inside the application install folder's "\atbackend" subdirectory. - * - * \section SSec_BuildModule_ATPROGRAM_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
atprogramProgram the device FLASH memory with the application's executable data.
atprogram-eeProgram the device EEPROM memory with the application's EEPROM data.
- * - * \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
ATPROGRAM_PROGRAMMERName of the Atmel programmer or debugger tool to communicate with (e.g. jtagice3).
ATPROGRAM_INTERFACEName of the programming interface to use when programming the target (e.g. spi).
ATPROGRAM_PORTName of the communication port to use when when programming with a serially connected tool (e.g. COM2).
- * - * \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module - * - * The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_avrdude.mk - * \endcode - * - * \section SSec_BuildModule_AVRDUDE_Requirements Requirements - * This module requires the avrdude utility to be available in your system's PATH - * variable. The avrdude utility is distributed in the old WinAVR project releases for - * Windows (http://winavr.sourceforge.net) or can be installed on *nix systems via the project's - * source code (https://savannah.nongnu.org/projects/avrdude) or through the package manager. - * - * \section SSec_BuildModule_AVRDUDE_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
avrdudeProgram the device FLASH memory with the application's executable data.
avrdude-eeProgram the device EEPROM memory with the application's EEPROM data.
- * - * \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
AVRDUDE_PROGRAMMERName of the programmer or debugger tool to communicate with (e.g. jtagicemkii).
AVRDUDE_PORTName of the communication port to use when when programming with the connected tool (e.g. COM2, /dev/ttyUSB0 or usb).
AVRDUDE_FLAGSAdditional flags to pass to avrdude when programming, applied after the automatically generated flags.
- * - * \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module - * - * The CPPCHECK programming utility LUFA build system module, providing targets to statically - * analyze C and C++ source code for errors and performance/style issues. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_cppcheck.mk - * \endcode - * - * \section SSec_BuildModule_CPPCHECK_Requirements Requirements - * This module requires the cppcheck utility to be available in your system's PATH - * variable. The cppcheck utility is distributed through the project's home page - * (http://cppcheck.sourceforge.net) for Windows, and can be installed on *nix systems via - * the project's source code or through the package manager. - * - * \section SSec_BuildModule_CPPCHECK_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
cppcheckStatically analyze the project source code for issues.
cppcheck-configCheck the cppcheck configuration - scan source code and warn about missing header files and other issues.
- * - * \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - *
SRCList of source files to statically analyze.
- * - * \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
CPPCHECK_INCLUDESPath of extra directories to check when attemting to resolve C/C++ header file includes.
CPPCHECK_EXCLUDESPaths or path fragments to exclude when analyzing.
CPPCHECK_MSG_TEMPLATEOutput message template to use when printing errors, warnings and information (see cppcheck documentation).
CPPCHECK_ENABLEAnalysis rule categories to enable (see cppcheck documentation).
CPPCHECK_SUPPRESSSpecific analysis rules to suppress (see cppcheck documentation).
CPPCHECK_FAIL_ON_WARNINGSet to Y to fail the analysis job with an error exit code if warnings are found, N to continue without failing.
CPPCHECK_QUIETSet to Y to suppress all output except warnings and errors, N to show verbose output information.
CPPCHECK_FLAGSExtra flags to pass to cppcheck, after the automatically generated flags.
- * - * \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_DFU The DFU build module - * - * The DFU programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * This module requires a DFU class bootloader to be running in the target, compatible with - * the DFU bootloader protocol as published by Atmel. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_dfu.mk - * \endcode - * - * \section SSec_BuildModule_DFU_Requirements Requirements - * This module requires either the batchisp utility from Atmel's FLIP utility, or the open - * source dfu-programmer utility (http://dfu-programmer.sourceforge.net/) to be - * available in your system's PATH variable. On *nix systems the dfu-programmer utility - * can be installed via the project's source code or through the package manager. - * - * \section SSec_BuildModule_DFU_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
dfuProgram the device FLASH memory with the application's executable data using dfu-programmer.
dfu-eeProgram the device EEPROM memory with the application's EEPROM data using dfu-programmer.
flipProgram the device FLASH memory with the application's executable data using batchisp.
flip-eeProgram the device EEPROM memory with the application's EEPROM data using batchisp.
- * - * \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_DFU_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module - * - * The DOXYGEN code documentation utility LUFA build system module, providing targets to generate - * project HTML and other format documentation from a set of source files that include special - * Doxygen comments. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_doxygen.mk - * \endcode - * - * \section SSec_BuildModule_DOXYGEN_Requirements Requirements - * This module requires the doxygen utility from the Doxygen website - * (http://www.doxygen.org/) to be available in your system's PATH variable. On *nix - * systems the doxygen utility can be installed via the project's source code or through - * the package manager. - * - * \section SSec_BuildModule_DOXYGEN_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
doxygenGenerate project documentation.
doxygen_createCreate a new Doxygen configuration file using the latest template.
doxygen_upgradeUpgrade an existing Doxygen configuration file to the latest template
- * - * \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
- * - * \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
DOXYGEN_CONFName and path of the base Doxygen configuration file for the project.
DOXYGEN_FAIL_ON_WARNINGSet to Y to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, N to continue without failing.
DOXYGEN_OVERRIDE_PARAMSExtra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. QUIET=YES).
- * - * \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_HID The HID build module - * - * The HID programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor's FLASH memory with a project's compiled binary output file. This module - * requires a HID class bootloader to be running in the target, using a protocol compatible - * with the PJRC "HalfKay" protocol (http://www.pjrc.com/teensy/halfkay_protocol.html). - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_hid.mk - * \endcode - * - * \section SSec_BuildModule_HID_Requirements Requirements - * This module requires either the hid_bootloader_cli utility from the included LUFA HID - * class bootloader API subdirectory, or the teensy_loader_cli utility from PJRC - * (http://www.pjrc.com/teensy/loader_cli.html) to be available in your system's PATH - * variable. - * - * \section SSec_BuildModule_HID_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
hidProgram the device FLASH memory with the application's executable data using hid_bootloader_cli.
hid-eeProgram the device EEPROM memory with the application's EEPROM data using hid_bootloader_cli and - * a temporary AVR application programmed into the target's FLASH. - * \note This will erase the currently loaded application in the target.
teensyProgram the device FLASH memory with the application's executable data using teensy_loader_cli.
teensy-eeProgram the device EEPROM memory with the application's EEPROM data using teensy_loader_cli and - * a temporary AVR application programmed into the target's FLASH. - * \note This will erase the currently loaded application in the target.
- * - * \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_HID_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_SOURCES The SOURCES build module - * - * The SOURCES LUFA build system module, providing variables listing the various LUFA source files - * required to be build by a project for a given LUFA module. This module gives a way to reference - * LUFA source files symbolically, so that changes to the library structure do not break the library - * makefile. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_sources.mk - * \endcode - * - * \section SSec_BuildModule_SOURCES_Requirements Requirements - * None. - * - * \section SSec_BuildModule_SOURCES_Targets Targets - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
ARCHArchitecture of the target processor (see \ref Page_DeviceSupport).
- * - * \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
LUFA_SRC_USBList of LUFA USB driver source files.
LUFA_SRC_USBCLASSList of LUFA USB Class driver source files.
LUFA_SRC_TEMPERATUREList of LUFA temperature sensor driver source files.
LUFA_SRC_SERIALList of LUFA Serial U(S)ART driver source files.
LUFA_SRC_TWIList of LUFA TWI driver source files.
LUFA_SRC_PLATFORMList of LUFA architecture specific platform management source files.
- * - * \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildTroubleshooting Troubleshooting Information - * - * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these - * features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different - * errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
ProblemResolution
Error "relocation truncated to fit: R_AVR_13_PCREL against symbol {X}" shown when compiling.Try compiling with the setting LINKER_RELAXATIONS=N in your LUFA Build System 2.0 makefile, or remove the line -Wl,--relax - * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.
Error "error: ld terminated with signal 11 [Segmentation fault]" shown when compiling.Try compiling with the setting DEBUG_LEVEL=2 in your LUFA Build System 2.0 makefile, or make sure you are using binutils version 2.22 or later.
Error "EMERGENCY ABORT: INFINITE RECURSION DETECTED" shown when compiling.Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with - * GNU make or other variants of Make causing an infinitely recursive build.
Error "Unsupported architecture "{X}"" shown when compiling.Ensure your makefile's ARCH setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.
Error "Makefile {X} value not set" shown when compiling.The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA - * build system modules. Define the value in your project makefile and try again.
Error "Makefile {X} option cannot be blank" shown when compiling.The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration - * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.
Error "Makefile {X} option must be Y or N" shown when compiling.The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No"). - * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.
Error "Unknown input source file formats: {X}" shown when compiling.The nominated source files, specified in your project's makefile in the SRC configuration option, has an extension that the LUFA build system does not - * recognise. The file extensions are case sensitive, and must be one of the supported formats (*.c, *.cpp or *.S).
Error "Cannot build with OBJDIR parameter set - one or more object file name is not unique" shown when compiling.When a project is built with a non-empty OBJDIR object directory name set, all input source files must have unique names, excluding extension and path. - * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.
Error "Source file does not exist: {X}" shown when compiling.The nominated input source file, specified in the user project's SRC parameter, could not be found. Ensure the source file exists and the absolute or - * relative path given in the user project makefile is correct and try again.
Error "Doxygen configuration file {X} does not exist" shown when upgrading a Doxygen configuration file.The nominated Doxygen configuration file, specified in the user project's DOXYGEN_CONF parameter, could not be found. Ensure the configuration file exists - * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration - * file.
Error "avr-gcc: error: unrecognized option '{X}'" shown when compiling.An unrecognised option was supplied to the compiler, usually in the C_FLAGS, CPP_FLAGS, ASM_FLAGS or CC_FLAGS configuration - * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or - * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.
Error "makefile:{X}: {Y}.mk: No such file or directory" shown when make is invoked.The path to the nominated makefile module was incorrect. This usually indicates that the makefile LUFA_PATH option is not set to a valid relative or - * absolute path to the LUFA library core.
Error "fatal error: LUFAConfig.h: No such file or directory" shown when compiling.The USE_LUFA_CONFIG_HEADER compile time option was set in the user project makefile, but the user supplied LUFAConfig.h header could not be - * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile CC_FLAGS - * parameter.
Error "ld.exe: section .apitable_trampolines loaded at {X} overlaps section .text" shown when compiling a bootloader.The bootloader is compiling too large for the given FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB parameters set in the bootloader makefile. This - * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the - * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.
Error "unknown MCU '{X}' specified" shown when compiling.The specified microcontroller device model name set in the user application's makefile as the MCU parameter is incorrect, or unsupported by the - * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.
Error "undefined reference to `{X}'" shown when compiling.This is usually caused by a missing source file in the user application's SRC configuration parameter. If the indicated symbol is one from the LUFA - * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).
- * - * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp. - */ +/** \file + * + * This file contains special DoxyGen information for the generation of the main page and other special + * documentation pages. It is not a project source file. + */ + +/** \page Page_BuildSystem The LUFA Build System + * + * \section Sec_BuildSystem_Overview Overview of the LUFA Build System + * The LUFA build system is an attempt at making a set of re-usable, modular build make files which + * can be referenced in a LUFA powered project, to minimize the amount of code required in an + * application makefile. The system is written in GNU Make, and each module is independent of + * one-another. + * + * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA + * build system, see \ref Sec_CompilingApps_Prerequisites. + * + * To use a LUFA build system module, simply add an include to your project makefile. All user projects + * should at a minimum include \ref Page_BuildModule_CORE for base functionality: + * \code + * include $(LUFA_PATH)/Build/lufa_core.mk + * \endcode + * + * Once included in your project makefile, the associated build module targets will be added to your + * project's build makefile targets automatically. To call a build target, run make {TARGET_NAME} + * from the command line, substituting in the appropriate target name. + * + * \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile. + * + * Each build module may have one or more mandatory parameters (GNU Make variables) which must + * be supplied in the project makefile for the module to work, and one or more optional parameters which + * may be defined and which will assume a sensible default if not. + * + * \section SSec_BuildSystem_Modules Available Modules + * + * The following modules are included in this LUFA release: + * + * \li \subpage Page_BuildModule_ATPROGRAM - Device Programming + * \li \subpage Page_BuildModule_AVRDUDE - Device Programming + * \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking + * \li \subpage Page_BuildModule_CORE - Core Build System Functions + * \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis + * \li \subpage Page_BuildModule_DFU - Device Programming + * \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation + * \li \subpage Page_BuildModule_HID - Device Programming + * \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables + * + * If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps. + */ + + /** \page Page_BuildModule_BUILD The BUILD build module + * + * The BUILD LUFA build system module, providing targets for the compilation, + * assembling and linking of an application from source code into binary files + * suitable for programming into a target device, using the GCC compiler. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_build.mk + * \endcode + * + * \section SSec_BuildModule_BUILD_Requirements Requirements + * This module requires the the architecture appropriate binaries of the GCC compiler are available in your + * system's PATH variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio + * 5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages. + * + * \section SSec_BuildModule_BUILD_Targets Targets + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
sizeDisplay size of the compiled application FLASH and SRAM segments.
symbol-sizesDisplay a size-sorted list of symbols from the compiled application, in decimal bytes.
libBuild and archive all source files into a library A binary file.
allBuild and link the application into ELF debug and HEX binary files.
elfBuild and link the application into an ELF debug file.
binBuild and link the application and produce a BIN binary file.
hexBuild and link the application and produce HEX and EEP binary files.
lssBuild and link the application and produce a LSS source code/assembly code mixed listing file.
cleanRemove all intermediary files and binary output files.
mostlycleanRemove all intermediary files but preserve any binary output files.
<filename>.sCreate an assembly listing of a given input C/C++ source file.
+ * + * \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
TARGETName of the application output file prefix (e.g. TestApplication).
ARCHArchitecture of the target processor (see \ref Page_DeviceSupport).
MCUName of the Atmel processor model (e.g. at90usb1287).
SRCList of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.
F_USBSpeed in Hz of the input clock frequency to the target's USB controller.
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
+ * + * \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
BOARDLUFA board hardware drivers to use (see \ref Page_DeviceSupport).
OPTIMIZATIONOptimization level to use when compiling source files (see GCC manual).
C_STANDARDVersion of the C standard to apply when compiling C++ source files (see GCC manual).
CPP_STANDARDVersion of the C++ standard to apply when compiling C++ source files (see GCC manual).
DEBUG_FORMATFormat of the debug information to embed in the generated object files (see GCC manual).
DEBUG_LEVELLevel of the debugging information to embed in the generated object files (see GCC manual).
F_CPUSpeed of the processor CPU clock, in Hz.
C_FLAGSFlags to pass to the C compiler only, after the automatically generated flags.
CPP_FLAGSFlags to pass to the C++ compiler only, after the automatically generated flags.
ASM_FLAGSFlags to pass to the assembler only, after the automatically generated flags.
CC_FLAGSCommon flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.
COMPILER_PATHDirectory where the C/C++ toolchain is located, if not available in the system PATH.
LD_FLAGSFlags to pass to the linker, after the automatically generated flags.
LINKER_RELAXATIONSEnables or disables linker relaxations when linking the application binary. This can reduce the total size + * of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible. + * \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you + * receive a link error relocation truncated to fit: R_AVR_13_PCREL, disable this setting.
OBJDIRDirectory to place the generated object and dependency files. If set to "." the same folder as the source file will be used. + * \note When this option is enabled, all source filenames must be unique.
OBJECT_FILESList of additional object files that should be linked into the resulting binary.
+ * + * \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + +/** \page Page_BuildModule_CORE The CORE build module + * + * The core LUFA build system module, providing common build system help and information targets. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_core.mk + * \endcode + * + * \section SSec_BuildModule_CORE_Requirements Requirements + * This module has no requirements outside a standard *nix shell like environment; the sh + * shell, GNU make and *nix CoreUtils (echo, printf, etc.). + * + * \section SSec_BuildModule_CORE_Targets Targets + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
helpDisplay build system help and configuration information.
list_targetsList all available build targets from the build system.
list_modulesList all available build modules from the build system.
list_mandatoryList all mandatory parameters required by the included modules.
list_optionalList all optional parameters required by the included modules.
list_providedList all variables provided by the included modules.
list_macrosList all macros provided by the included modules.
+ * + * \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_CORE_OptionalParams Optional Parameters + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + +/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module + * + * The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an + * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_atprogram.mk + * \endcode + * + * \section SSec_BuildModule_ATPROGRAM_Requirements Requirements + * This module requires the atprogram.exe utility to be available in your system's PATH + * variable. The atprogram.exe utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x + * inside the application install folder's "\atbackend" subdirectory. + * + * \section SSec_BuildModule_ATPROGRAM_Targets Targets + * + * + * + * + * + * + * + * + * + * + *
atprogramProgram the device FLASH memory with the application's executable data.
atprogram-eeProgram the device EEPROM memory with the application's EEPROM data.
+ * + * \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
+ * + * \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
ATPROGRAM_PROGRAMMERName of the Atmel programmer or debugger tool to communicate with (e.g. jtagice3).
ATPROGRAM_INTERFACEName of the programming interface to use when programming the target (e.g. spi).
ATPROGRAM_PORTName of the communication port to use when when programming with a serially connected tool (e.g. COM2).
+ * + * \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + +/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module + * + * The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an + * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_avrdude.mk + * \endcode + * + * \section SSec_BuildModule_AVRDUDE_Requirements Requirements + * This module requires the avrdude utility to be available in your system's PATH + * variable. The avrdude utility is distributed in the old WinAVR project releases for + * Windows (http://winavr.sourceforge.net) or can be installed on *nix systems via the project's + * source code (https://savannah.nongnu.org/projects/avrdude) or through the package manager. + * + * \section SSec_BuildModule_AVRDUDE_Targets Targets + * + * + * + * + * + * + * + * + * + * + *
avrdudeProgram the device FLASH memory with the application's executable data.
avrdude-eeProgram the device EEPROM memory with the application's EEPROM data.
+ * + * \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
+ * + * \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
AVRDUDE_PROGRAMMERName of the programmer or debugger tool to communicate with (e.g. jtagicemkii).
AVRDUDE_PORTName of the communication port to use when when programming with the connected tool (e.g. COM2, /dev/ttyUSB0 or usb).
AVRDUDE_FLAGSAdditional flags to pass to avrdude when programming, applied after the automatically generated flags.
+ * + * \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + + /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module + * + * The CPPCHECK programming utility LUFA build system module, providing targets to statically + * analyze C and C++ source code for errors and performance/style issues. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_cppcheck.mk + * \endcode + * + * \section SSec_BuildModule_CPPCHECK_Requirements Requirements + * This module requires the cppcheck utility to be available in your system's PATH + * variable. The cppcheck utility is distributed through the project's home page + * (http://cppcheck.sourceforge.net) for Windows, and can be installed on *nix systems via + * the project's source code or through the package manager. + * + * \section SSec_BuildModule_CPPCHECK_Targets Targets + * + * + * + * + * + * + * + * + * + * + *
cppcheckStatically analyze the project source code for issues.
cppcheck-configCheck the cppcheck configuration - scan source code and warn about missing header files and other issues.
+ * + * \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + *
SRCList of source files to statically analyze.
+ * + * \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
CPPCHECK_INCLUDESPath of extra directories to check when attemting to resolve C/C++ header file includes.
CPPCHECK_EXCLUDESPaths or path fragments to exclude when analyzing.
CPPCHECK_MSG_TEMPLATEOutput message template to use when printing errors, warnings and information (see cppcheck documentation).
CPPCHECK_ENABLEAnalysis rule categories to enable (see cppcheck documentation).
CPPCHECK_SUPPRESSSpecific analysis rules to suppress (see cppcheck documentation).
CPPCHECK_FAIL_ON_WARNINGSet to Y to fail the analysis job with an error exit code if warnings are found, N to continue without failing.
CPPCHECK_QUIETSet to Y to suppress all output except warnings and errors, N to show verbose output information.
CPPCHECK_FLAGSExtra flags to pass to cppcheck, after the automatically generated flags.
+ * + * \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + + /** \page Page_BuildModule_DFU The DFU build module + * + * The DFU programming utility LUFA build system module, providing targets to reprogram an + * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. + * This module requires a DFU class bootloader to be running in the target, compatible with + * the DFU bootloader protocol as published by Atmel. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_dfu.mk + * \endcode + * + * \section SSec_BuildModule_DFU_Requirements Requirements + * This module requires either the batchisp utility from Atmel's FLIP utility, or the open + * source dfu-programmer utility (http://dfu-programmer.sourceforge.net/) to be + * available in your system's PATH variable. On *nix systems the dfu-programmer utility + * can be installed via the project's source code or through the package manager. + * + * \section SSec_BuildModule_DFU_Targets Targets + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
dfuProgram the device FLASH memory with the application's executable data using dfu-programmer.
dfu-eeProgram the device EEPROM memory with the application's EEPROM data using dfu-programmer.
flipProgram the device FLASH memory with the application's executable data using batchisp.
flip-eeProgram the device EEPROM memory with the application's EEPROM data using batchisp.
+ * + * \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
+ * + * \section SSec_BuildModule_DFU_OptionalParams Optional Parameters + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + + /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module + * + * The DOXYGEN code documentation utility LUFA build system module, providing targets to generate + * project HTML and other format documentation from a set of source files that include special + * Doxygen comments. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_doxygen.mk + * \endcode + * + * \section SSec_BuildModule_DOXYGEN_Requirements Requirements + * This module requires the doxygen utility from the Doxygen website + * (http://www.doxygen.org/) to be available in your system's PATH variable. On *nix + * systems the doxygen utility can be installed via the project's source code or through + * the package manager. + * + * \section SSec_BuildModule_DOXYGEN_Targets Targets + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
doxygenGenerate project documentation.
doxygen_createCreate a new Doxygen configuration file using the latest template.
doxygen_upgradeUpgrade an existing Doxygen configuration file to the latest template
+ * + * \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
+ * + * \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
DOXYGEN_CONFName and path of the base Doxygen configuration file for the project.
DOXYGEN_FAIL_ON_WARNINGSet to Y to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, N to continue without failing.
DOXYGEN_OVERRIDE_PARAMSExtra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. QUIET=YES).
+ * + * \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + + /** \page Page_BuildModule_HID The HID build module + * + * The HID programming utility LUFA build system module, providing targets to reprogram an + * Atmel processor's FLASH memory with a project's compiled binary output file. This module + * requires a HID class bootloader to be running in the target, using a protocol compatible + * with the PJRC "HalfKay" protocol (http://www.pjrc.com/teensy/halfkay_protocol.html). + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_hid.mk + * \endcode + * + * \section SSec_BuildModule_HID_Requirements Requirements + * This module requires either the hid_bootloader_cli utility from the included LUFA HID + * class bootloader API subdirectory, or the teensy_loader_cli utility from PJRC + * (http://www.pjrc.com/teensy/loader_cli.html) to be available in your system's PATH + * variable. + * + * \section SSec_BuildModule_HID_Targets Targets + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
hidProgram the device FLASH memory with the application's executable data using hid_bootloader_cli.
hid-eeProgram the device EEPROM memory with the application's EEPROM data using hid_bootloader_cli and + * a temporary AVR application programmed into the target's FLASH. + * \note This will erase the currently loaded application in the target.
teensyProgram the device FLASH memory with the application's executable data using teensy_loader_cli.
teensy-eeProgram the device EEPROM memory with the application's EEPROM data using teensy_loader_cli and + * a temporary AVR application programmed into the target's FLASH. + * \note This will erase the currently loaded application in the target.
+ * + * \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
+ * + * \section SSec_BuildModule_HID_OptionalParams Optional Parameters + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + + /** \page Page_BuildModule_SOURCES The SOURCES build module + * + * The SOURCES LUFA build system module, providing variables listing the various LUFA source files + * required to be build by a project for a given LUFA module. This module gives a way to reference + * LUFA source files symbolically, so that changes to the library structure do not break the library + * makefile. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/lufa_sources.mk + * \endcode + * + * \section SSec_BuildModule_SOURCES_Requirements Requirements + * None. + * + * \section SSec_BuildModule_SOURCES_Targets Targets + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + * + * + * + * + *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
ARCHArchitecture of the target processor (see \ref Page_DeviceSupport).
+ * + * \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
LUFA_SRC_USBList of LUFA USB driver source files.
LUFA_SRC_USBCLASSList of LUFA USB Class driver source files.
LUFA_SRC_TEMPERATUREList of LUFA temperature sensor driver source files.
LUFA_SRC_SERIALList of LUFA Serial U(S)ART driver source files.
LUFA_SRC_TWIList of LUFA TWI driver source files.
LUFA_SRC_PLATFORMList of LUFA architecture specific platform management source files.
+ * + * \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + +/** \page Page_BuildTroubleshooting Troubleshooting Information + * + * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these + * features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different + * errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
ProblemResolution
Error "relocation truncated to fit: R_AVR_13_PCREL against symbol {X}" shown when compiling.Try compiling with the setting LINKER_RELAXATIONS=N in your LUFA Build System 2.0 makefile, or remove the line -Wl,--relax + * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.
Error "error: ld terminated with signal 11 [Segmentation fault]" shown when compiling.Try compiling with the setting DEBUG_LEVEL=2 in your LUFA Build System 2.0 makefile, or make sure you are using binutils version 2.22 or later.
Error "EMERGENCY ABORT: INFINITE RECURSION DETECTED" shown when compiling.Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with + * GNU make or other variants of Make causing an infinitely recursive build.
Error "Unsupported architecture "{X}"" shown when compiling.Ensure your makefile's ARCH setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.
Error "Makefile {X} value not set" shown when compiling.The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA + * build system modules. Define the value in your project makefile and try again.
Error "Makefile {X} option cannot be blank" shown when compiling.The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration + * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.
Error "Makefile {X} option must be Y or N" shown when compiling.The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No"). + * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.
Error "Unknown input source file formats: {X}" shown when compiling.The nominated source files, specified in your project's makefile in the SRC configuration option, has an extension that the LUFA build system does not + * recognise. The file extensions are case sensitive, and must be one of the supported formats (*.c, *.cpp or *.S).
Error "Cannot build with OBJDIR parameter set - one or more object file name is not unique" shown when compiling.When a project is built with a non-empty OBJDIR object directory name set, all input source files must have unique names, excluding extension and path. + * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.
Error "Source file does not exist: {X}" shown when compiling.The nominated input source file, specified in the user project's SRC parameter, could not be found. Ensure the source file exists and the absolute or + * relative path given in the user project makefile is correct and try again.
Error "Doxygen configuration file {X} does not exist" shown when upgrading a Doxygen configuration file.The nominated Doxygen configuration file, specified in the user project's DOXYGEN_CONF parameter, could not be found. Ensure the configuration file exists + * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration + * file.
Error "avr-gcc: error: unrecognized option '{X}'" shown when compiling.An unrecognised option was supplied to the compiler, usually in the C_FLAGS, CPP_FLAGS, ASM_FLAGS or CC_FLAGS configuration + * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or + * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.
Error "makefile:{X}: {Y}.mk: No such file or directory" shown when make is invoked.The path to the nominated makefile module was incorrect. This usually indicates that the makefile LUFA_PATH option is not set to a valid relative or + * absolute path to the LUFA library core.
Error "fatal error: LUFAConfig.h: No such file or directory" shown when compiling.The USE_LUFA_CONFIG_HEADER compile time option was set in the user project makefile, but the user supplied LUFAConfig.h header could not be + * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile CC_FLAGS + * parameter.
Error "ld.exe: section .apitable_trampolines loaded at {X} overlaps section .text" shown when compiling a bootloader.The bootloader is compiling too large for the given FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB parameters set in the bootloader makefile. This + * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the + * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.
Error "unknown MCU '{X}' specified" shown when compiling.The specified microcontroller device model name set in the user application's makefile as the MCU parameter is incorrect, or unsupported by the + * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.
Error "undefined reference to `{X}'" shown when compiling.This is usually caused by a missing source file in the user application's SRC configuration parameter. If the indicated symbol is one from the LUFA + * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).
+ * + * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp. + */ -- cgit v1.2.3 From 265df7d5da5ead27bef3d00fce7d0f2bf133e9cc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 20:18:26 +0300 Subject: Fix travis_compiled_push --- util/travis_compiled_push.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index c2a994ef02..f432976d03 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -7,7 +7,7 @@ rev=$(git rev-parse --short HEAD) git config --global user.name "Travis CI" git config --global user.email "jack.humb+travis.ci@gmail.com" -make all-keymaps keyboard=ergodox/ez AUTOGEN=true +make ergodox-ez AUTOGEN=true find . -name ".build" | xargs rm -rf cd .. @@ -24,4 +24,4 @@ cp ../qmk_firmware/readme.md qmk_readme.md git add -A git commit -m "generated from qmk_firmware/$TRAVIS_BRANCH@${rev}" -git push \ No newline at end of file +git push -- cgit v1.2.3 From cfddec17d5a4ea2c3ce9afe0f15de3fa604dee63 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 23 Jul 2016 13:27:23 +0300 Subject: Add Google Test submodule --- .gitmodules | 3 +++ lib/googletest | 1 + 2 files changed, 4 insertions(+) create mode 160000 lib/googletest diff --git a/.gitmodules b/.gitmodules index 7e3c92d031..12b7cb918f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "lib/ugfx"] path = lib/ugfx url = https://bitbucket.org/Tectu/ugfx +[submodule "lib/googletest"] + path = lib/googletest + url = https://github.com/google/googletest diff --git a/lib/googletest b/lib/googletest new file mode 160000 index 0000000000..ec44c6c167 --- /dev/null +++ b/lib/googletest @@ -0,0 +1 @@ +Subproject commit ec44c6c1675c25b9827aacd08c02433cccde7780 -- cgit v1.2.3 From 6d7cd639a5e4503f00162c7cfa4bc7302b82c71c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Aug 2016 16:29:54 +0300 Subject: Basic framework for parsing test targets --- Makefile | 16 +++++++++++++++- quantum/serial_link/tests/testlist.mk | 6 ++++++ testlist.mk | 13 +++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 quantum/serial_link/tests/testlist.mk create mode 100644 testlist.mk diff --git a/Makefile b/Makefile index f78cca6c6f..16e90f8e49 100644 --- a/Makefile +++ b/Makefile @@ -224,6 +224,8 @@ define PARSE_RULE # PARSE_ALL_KEYBOARDS ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) + else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true) + $$(eval $$(call PARSE_TEST)) # If the rule starts with the name of a known keyboard, then continue # the parsing from PARSE_KEYBOARD else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) @@ -396,6 +398,16 @@ define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef +define PARSE_TEST + TEST_NAME := $$(firstword $$(subst -, ,$$(RULE))) + TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE))) + MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),)) + $$(info Test name $$(TEST_NAME)) + $$(info Test target $$(TEST_TARGET)) + $$(info $$(MATCHED_TESTS)) +endef + + # Set the silent mode depending on if we are trying to compile multiple keyboards or not # By default it's on in that case, but it can be overriden by specifying silent=false # from the command line @@ -459,4 +471,6 @@ all-keyboards-defaults: allkb-allsp-default GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) \ No newline at end of file +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) + +include $(ROOT_DIR)/testlist.mk \ No newline at end of file diff --git a/quantum/serial_link/tests/testlist.mk b/quantum/serial_link/tests/testlist.mk new file mode 100644 index 0000000000..4a734b1e1c --- /dev/null +++ b/quantum/serial_link/tests/testlist.mk @@ -0,0 +1,6 @@ +TEST_LIST +=\ + serial_link_byte_stuffer\ + serial_link_frame_router\ + serial_link_frame_validator\ + serial_link_transport\ + serial_link_triple_buffered_object \ No newline at end of file diff --git a/testlist.mk b/testlist.mk new file mode 100644 index 0000000000..1884d6d3f6 --- /dev/null +++ b/testlist.mk @@ -0,0 +1,13 @@ +include $(ROOT_DIR)/quantum/serial_link/tests/testlist.mk + +define VALIDATE_TEST_LIST + ifneq ($1,) + ifeq ($$(findstring -,$1),-) + $$(error Test names can't contain '-', but '$1' does) + else + $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2))) + endif + endif +endef + +$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST)))) \ No newline at end of file -- cgit v1.2.3 From 27a673f5cf75747fe73641059aae60e9b53a1c78 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Aug 2016 17:14:38 +0300 Subject: The makefile actually calls build_test --- Makefile | 22 +++++++++++++++++----- build_keyboard.mk | 14 +------------- build_test.mk | 5 +++++ common.mk | 12 ++++++++++++ message.mk | 7 +++++++ 5 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 build_test.mk create mode 100644 common.mk diff --git a/Makefile b/Makefile index 16e90f8e49..67b981d51e 100644 --- a/Makefile +++ b/Makefile @@ -358,7 +358,6 @@ define PARSE_KEYMAP MAKE_TARGET := $$(patsubst -%,%,$$(RULE)) # We need to generate an unique indentifer to append to the COMMANDS list COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) - COMMANDS += $$(COMMAND) # If we are compiling a keyboard without a subproject, we want to display just the name # of the keyboard, otherwise keyboard/subproject ifeq ($$(CURRENT_SP),) @@ -370,13 +369,18 @@ define PARSE_KEYMAP KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) # Specify the variables that we are passing forward to submake MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) - MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) # And the first part of the make command MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET) # The message to display MAKE_MSG := $$(MSG_MAKE_KB) # We run the command differently, depending on if we want more output or not # The true version for silent output and the false version otherwise + $$(eval $$(call BUILD)) +endef + +define BUILD + MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) + COMMANDS += $$(COMMAND) COMMAND_true_$$(COMMAND) := \ printf "$$(MAKE_MSG)" | \ $$(MAKE_MSG_FORMAT); \ @@ -398,13 +402,21 @@ define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef +define BUILD_TEST + TEST_NAME := $1 + MAKE_TARGET := $2 + COMMAND := $1 + MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET) + MAKE_VARS := TEST=$$(TEST_NAME) + MAKE_MSG := $$(MSG_MAKE_TEST) + $$(eval $$(call BUILD)) +endef + define PARSE_TEST TEST_NAME := $$(firstword $$(subst -, ,$$(RULE))) TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE))) MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),)) - $$(info Test name $$(TEST_NAME)) - $$(info Test target $$(TEST_TARGET)) - $$(info $$(MATCHED_TESTS)) + $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET)))) endef diff --git a/build_keyboard.mk b/build_keyboard.mk index f843572f66..bbe5718459 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -4,19 +4,7 @@ endif .DEFAULT_GOAL := all -include message.mk - - -# Directory common source filess exist -TOP_DIR = . -TMK_DIR = tmk_core -TMK_PATH = $(TOP_DIR)/$(TMK_DIR) -LIB_PATH = $(TOP_DIR)/lib - -QUANTUM_DIR = quantum -QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) - -BUILD_DIR := $(TOP_DIR)/.build +include common.mk ifneq ($(SUBPROJECT),) TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) diff --git a/build_test.mk b/build_test.mk new file mode 100644 index 0000000000..37ed8b5683 --- /dev/null +++ b/build_test.mk @@ -0,0 +1,5 @@ +include common.mk + + +all: + echo Done $(TEST) \ No newline at end of file diff --git a/common.mk b/common.mk new file mode 100644 index 0000000000..689fdf5a50 --- /dev/null +++ b/common.mk @@ -0,0 +1,12 @@ +include message.mk + +# Directory common source files exist +TOP_DIR = . +TMK_DIR = tmk_core +TMK_PATH = $(TOP_DIR)/$(TMK_DIR) +LIB_PATH = $(TOP_DIR)/lib + +QUANTUM_DIR = quantum +QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) + +BUILD_DIR := $(TOP_DIR)/.build \ No newline at end of file diff --git a/message.mk b/message.mk index fb1a7a1f9a..96814986b5 100644 --- a/message.mk +++ b/message.mk @@ -69,3 +69,10 @@ define GENERATE_MSG_MAKE_KB endif endef MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL) +define GENERATE_MSG_MAKE_TEST + MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR) + ifneq ($$(MAKE_TARGET),) + MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR) + endif +endef +MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL) -- cgit v1.2.3 From 8a9aac6e3237a505682cc7249a8dfff6cb964343 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 22 Aug 2016 09:16:08 +0300 Subject: Rules for compiling and linking google test --- build_keyboard.mk | 8 ++++++++ build_test.mk | 42 ++++++++++++++++++++++++++++++++++++++++-- tmk_core/native.mk | 24 ++++++++++++++++++++++++ tmk_core/rules.mk | 19 +++++++++---------- 4 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 tmk_core/native.mk diff --git a/build_keyboard.mk b/build_keyboard.mk index bbe5718459..869d672b01 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -204,6 +204,14 @@ $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) +# Default target. +all: build sizeafter + +# Change the build target to build a HEX file or a library. +build: elf hex +#build: elf hex eep lss sym +#build: lib + include $(TMK_PATH)/rules.mk diff --git a/build_test.mk b/build_test.mk index 37ed8b5683..dac59a8f48 100644 --- a/build_test.mk +++ b/build_test.mk @@ -1,5 +1,43 @@ +ifndef VERBOSE +.SILENT: +endif + +.DEFAULT_GOAL := all + include common.mk +TARGET=test/$(TEST) + +GTEST_OUTPUT = $(BUILD_DIR)/gtest + +OUTPUTS := $(GTEST_OUTPUT) + +GTEST_INC := \ + $(LIB_PATH)/googletest/googletest/include\ + $(LIB_PATH)/googletest/googlemock/include\ + +GTEST_INTERNAL_INC :=\ + $(LIB_PATH)/googletest/googletest\ + $(LIB_PATH)/googletest/googlemock + +$(GTEST_OUTPUT)_SRC :=\ + googletest/src/gtest-all.cc\ + googletest/src/gtest_main.cc\ + googlemock/src/gmock-all.cc + +$(GTEST_OUTPUT)_DEFS := +$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC) + +LDFLAGS += -lstdc++ -lpthread -shared-libgcc + +VPATH +=\ + $(LIB_PATH)/googletest\ + $(LIB_PATH)/googlemock + +all: elf + +include $(TMK_PATH)/native.mk +include $(TMK_PATH)/rules.mk + +$(shell mkdir $(BUILD_DIR)/test 2>/dev/null) -all: - echo Done $(TEST) \ No newline at end of file diff --git a/tmk_core/native.mk b/tmk_core/native.mk new file mode 100644 index 0000000000..50232ee9b7 --- /dev/null +++ b/tmk_core/native.mk @@ -0,0 +1,24 @@ +CC = gcc +OBJCOPY = +OBJDUMP = +SIZE = +AR = +NM = +HEX = +EEP = +BIN = + + +COMPILEFLAGS += -funsigned-char +COMPILEFLAGS += -funsigned-bitfields +COMPILEFLAGS += -ffunction-sections +COMPILEFLAGS += -fdata-sections +COMPILEFLAGS += -fshort-enums + +CFLAGS += $(COMPILEFLAGS) +CFLAGS += -fno-inline-small-functions +CFLAGS += -fno-strict-aliasing + +CPPFLAGS += $(COMPILEFLAGS) +CPPFLAGS += -fno-exceptions +CPPFLAGS += -std=gnu++11 \ No newline at end of file diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 21011c2808..317f55e083 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -21,13 +21,14 @@ VPATH_SRC := $(VPATH) vpath %.c $(VPATH_SRC) vpath %.h $(VPATH_SRC) vpath %.cpp $(VPATH_SRC) +vpath %.cc $(VPATH_SRC) vpath %.hpp $(VPATH_SRC) vpath %.S $(VPATH_SRC) VPATH := # Convert all SRC to OBJ define OBJ_FROM_SRC -$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))) +$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC))))) endef $(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT)))) @@ -202,14 +203,6 @@ ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) -# Default target. -all: build sizeafter - -# Change the build target to build a HEX file or a library. -build: elf hex -#build: elf hex eep lss sym -#build: lib - elf: $(BUILD_DIR)/$(TARGET).elf hex: $(BUILD_DIR)/$(TARGET).hex @@ -305,7 +298,13 @@ $1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) - @$(BUILD_CMD) + @$$(BUILD_CMD) + +$1/%.o : %.cc $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + @$$(BUILD_CMD) # Assemble: create object files from assembler source files. $1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 0a11460175d6a838c71343c19eb4ce4699936247 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 24 Aug 2016 22:23:17 +0300 Subject: Build actual tests, convert byte_stuffer_tests --- build_keyboard.mk | 6 +- build_test.mk | 14 +- common.mk | 16 +- quantum/serial_link/protocol/byte_stuffer.c | 3 - quantum/serial_link/protocol/byte_stuffer.h | 3 + quantum/serial_link/tests/byte_stuffer_tests.c | 506 ----------------------- quantum/serial_link/tests/byte_stuffer_tests.cpp | 483 ++++++++++++++++++++++ quantum/serial_link/tests/rules.mk | 3 + 8 files changed, 517 insertions(+), 517 deletions(-) delete mode 100644 quantum/serial_link/tests/byte_stuffer_tests.c create mode 100644 quantum/serial_link/tests/byte_stuffer_tests.cpp create mode 100644 quantum/serial_link/tests/rules.mk diff --git a/build_keyboard.mk b/build_keyboard.mk index 869d672b01..164794c634 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -155,12 +155,8 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) endif ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) - SERIAL_DIR = $(QUANTUM_DIR)/serial_link - SERIAL_PATH = $(QUANTUM_PATH)/serial_link - SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) - SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) - OPT_DEFS += -DSERIAL_LINK_ENABLE + OPT_DEFS += $(SERIAL_DEFS) VAPTH += $(SERIAL_PATH) endif diff --git a/build_test.mk b/build_test.mk index dac59a8f48..1d8cb08b15 100644 --- a/build_test.mk +++ b/build_test.mk @@ -10,7 +10,9 @@ TARGET=test/$(TEST) GTEST_OUTPUT = $(BUILD_DIR)/gtest -OUTPUTS := $(GTEST_OUTPUT) +TEST_OBJ = $(BUILD_DIR)/test_obj + +OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT) GTEST_INC := \ $(LIB_PATH)/googletest/googletest/include\ @@ -36,8 +38,16 @@ VPATH +=\ all: elf +include $(QUANTUM_PATH)/serial_link/tests/rules.mk + +$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC) +$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC) +$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS) + include $(TMK_PATH)/native.mk include $(TMK_PATH)/rules.mk -$(shell mkdir $(BUILD_DIR)/test 2>/dev/null) + +$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null) +$(shell mkdir -p $(TEST_OBJ) 2>/dev/null) diff --git a/common.mk b/common.mk index 689fdf5a50..f9b0773a86 100644 --- a/common.mk +++ b/common.mk @@ -9,4 +9,18 @@ LIB_PATH = $(TOP_DIR)/lib QUANTUM_DIR = quantum QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) -BUILD_DIR := $(TOP_DIR)/.build \ No newline at end of file +BUILD_DIR := $(TOP_DIR)/.build + +SERIAL_DIR := $(QUANTUM_DIR)/serial_link +SERIAL_PATH := $(QUANTUM_PATH)/serial_link +SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c) +SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) +SERIAL_DEFS += -DSERIAL_LINK_ENABLE + +VPATH += $(TOP_DIR) +VPATH += $(TMK_PATH) +VPATH += $(QUANTUM_PATH) +VPATH += $(QUANTUM_PATH)/keymap_extras +VPATH += $(QUANTUM_PATH)/audio +VPATH += $(QUANTUM_PATH)/process_keycode +VPATH += $(SERIAL_PATH) \ No newline at end of file diff --git a/quantum/serial_link/protocol/byte_stuffer.c b/quantum/serial_link/protocol/byte_stuffer.c index fb4c45a8dc..2c87d64c29 100644 --- a/quantum/serial_link/protocol/byte_stuffer.c +++ b/quantum/serial_link/protocol/byte_stuffer.c @@ -31,9 +31,6 @@ SOFTWARE. // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing // http://www.stuartcheshire.org/papers/COBSforToN.pdf -#define MAX_FRAME_SIZE 1024 -#define NUM_LINKS 2 - typedef struct byte_stuffer_state { uint16_t next_zero; uint16_t data_pos; diff --git a/quantum/serial_link/protocol/byte_stuffer.h b/quantum/serial_link/protocol/byte_stuffer.h index 2cc88beb42..97e8968564 100644 --- a/quantum/serial_link/protocol/byte_stuffer.h +++ b/quantum/serial_link/protocol/byte_stuffer.h @@ -27,6 +27,9 @@ SOFTWARE. #include +#define MAX_FRAME_SIZE 1024 +#define NUM_LINKS 2 + void init_byte_stuffer(void); void byte_stuffer_recv_byte(uint8_t link, uint8_t data); void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size); diff --git a/quantum/serial_link/tests/byte_stuffer_tests.c b/quantum/serial_link/tests/byte_stuffer_tests.c deleted file mode 100644 index 64b170e8c1..0000000000 --- a/quantum/serial_link/tests/byte_stuffer_tests.c +++ /dev/null @@ -1,506 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include "serial_link/protocol/byte_stuffer.h" -#include "serial_link/protocol/byte_stuffer.c" -#include "serial_link/protocol/frame_validator.h" -#include "serial_link/protocol/physical.h" - -static uint8_t sent_data[MAX_FRAME_SIZE*2]; -static uint16_t sent_data_size; - -Describe(ByteStuffer); -BeforeEach(ByteStuffer) { - init_byte_stuffer(); - sent_data_size = 0; -} -AfterEach(ByteStuffer) {} - -void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { - mock(data, size); -} - -void send_data(uint8_t link, const uint8_t* data, uint16_t size) { - memcpy(sent_data + sent_data_size, data, size); - sent_data_size += size; -} - -Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { - never_expect(validator_recv_frame); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { - never_expect(validator_recv_frame); - byte_stuffer_recv_byte(0, 0xFF); -} - -Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { - never_expect(validator_recv_frame); - byte_stuffer_recv_byte(0, 0x4A); -} - -Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { - never_expect(validator_recv_frame); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_single_byte_valid_frame) { - uint8_t expected[] = {0x37}; - expect(validator_recv_frame, - when(size, is_equal_to(1)), - when(data, is_equal_to_contents_of(expected, 1)) - ); - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 0x37); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_three_bytes_valid_frame) { - uint8_t expected[] = {0x37, 0x99, 0xFF}; - expect(validator_recv_frame, - when(size, is_equal_to(3)), - when(data, is_equal_to_contents_of(expected, 3)) - ); - byte_stuffer_recv_byte(0, 4); - byte_stuffer_recv_byte(0, 0x37); - byte_stuffer_recv_byte(0, 0x99); - byte_stuffer_recv_byte(0, 0xFF); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_single_zero_valid_frame) { - uint8_t expected[] = {0}; - expect(validator_recv_frame, - when(size, is_equal_to(1)), - when(data, is_equal_to_contents_of(expected, 1)) - ); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { - uint8_t expected[] = {5, 0, 3, 0}; - expect(validator_recv_frame, - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(expected, 4)) - ); - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 5); - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 3); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_two_valid_frames) { - uint8_t expected1[] = {5, 0}; - uint8_t expected2[] = {3}; - expect(validator_recv_frame, - when(size, is_equal_to(2)), - when(data, is_equal_to_contents_of(expected1, 2)) - ); - expect(validator_recv_frame, - when(size, is_equal_to(1)), - when(data, is_equal_to_contents_of(expected2, 1)) - ); - byte_stuffer_recv_byte(1, 2); - byte_stuffer_recv_byte(1, 5); - byte_stuffer_recv_byte(1, 1); - byte_stuffer_recv_byte(1, 0); - byte_stuffer_recv_byte(1, 2); - byte_stuffer_recv_byte(1, 3); - byte_stuffer_recv_byte(1, 0); -} - -Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { - uint8_t expected[] = {5, 7}; - expect(validator_recv_frame, - when(size, is_equal_to(2)), - when(data, is_equal_to_contents_of(expected, 2)) - ); - byte_stuffer_recv_byte(1, 3); - byte_stuffer_recv_byte(1, 1); - byte_stuffer_recv_byte(1, 0); - byte_stuffer_recv_byte(1, 3); - byte_stuffer_recv_byte(1, 5); - byte_stuffer_recv_byte(1, 7); - byte_stuffer_recv_byte(1, 0); -} - -Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { - uint8_t expected[] = {5, 7}; - expect(validator_recv_frame, - when(size, is_equal_to(2)), - when(data, is_equal_to_contents_of(expected, 2)) - ); - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 9); - byte_stuffer_recv_byte(0, 4); // This should have been zero - byte_stuffer_recv_byte(0, 0); - byte_stuffer_recv_byte(0, 3); - byte_stuffer_recv_byte(0, 5); - byte_stuffer_recv_byte(0, 7); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { - uint8_t expected[254]; - int i; - for (i=0;i<254;i++) { - expected[i] = i + 1; - } - expect(validator_recv_frame, - when(size, is_equal_to(254)), - when(data, is_equal_to_contents_of(expected, 254)) - ); - byte_stuffer_recv_byte(0, 0xFF); - for (i=0;i<254;i++) { - byte_stuffer_recv_byte(0, i+1); - } - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { - uint8_t expected[255]; - int i; - for (i=0;i<254;i++) { - expected[i] = i + 1; - } - expected[254] = 7; - expect(validator_recv_frame, - when(size, is_equal_to(255)), - when(data, is_equal_to_contents_of(expected, 255)) - ); - byte_stuffer_recv_byte(0, 0xFF); - for (i=0;i<254;i++) { - byte_stuffer_recv_byte(0, i+1); - } - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 7); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { - uint8_t expected[255]; - int i; - for (i=0;i<254;i++) { - expected[i] = i + 1; - } - expected[254] = 0; - expect(validator_recv_frame, - when(size, is_equal_to(255)), - when(data, is_equal_to_contents_of(expected, 255)) - ); - byte_stuffer_recv_byte(0, 0xFF); - for (i=0;i<254;i++) { - byte_stuffer_recv_byte(0, i+1); - } - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { - uint8_t expected[515]; - int i; - int j; - for (j=0;j<2;j++) { - for (i=0;i<254;i++) { - expected[i+254*j] = i + 1; - } - } - for (i=0;i<7;i++) { - expected[254*2+i] = i + 1; - } - expect(validator_recv_frame, - when(size, is_equal_to(515)), - when(data, is_equal_to_contents_of(expected, 510)) - ); - byte_stuffer_recv_byte(0, 0xFF); - for (i=0;i<254;i++) { - byte_stuffer_recv_byte(0, i+1); - } - byte_stuffer_recv_byte(0, 0xFF); - for (i=0;i<254;i++) { - byte_stuffer_recv_byte(0, i+1); - } - byte_stuffer_recv_byte(0, 8); - byte_stuffer_recv_byte(0, 1); - byte_stuffer_recv_byte(0, 2); - byte_stuffer_recv_byte(0, 3); - byte_stuffer_recv_byte(0, 4); - byte_stuffer_recv_byte(0, 5); - byte_stuffer_recv_byte(0, 6); - byte_stuffer_recv_byte(0, 7); - byte_stuffer_recv_byte(0, 0); -} - -Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { - uint8_t expected[MAX_FRAME_SIZE] = {}; - expect(validator_recv_frame, - when(size, is_equal_to(MAX_FRAME_SIZE)), - when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) - ); - int i; - byte_stuffer_recv_byte(0, 1); - for(i=0;i +#include +extern "C" { +#include "serial_link/protocol/byte_stuffer.h" +#include "serial_link/protocol/frame_validator.h" +#include "serial_link/protocol/physical.h" +} + +using testing::_; +using testing::ElementsAreArray; +using testing::Args; + +class ByteStuffer : public ::testing::Test{ +public: + ByteStuffer() { + Instance = this; + init_byte_stuffer(); + } + + ~ByteStuffer() { + Instance = nullptr; + } + + MOCK_METHOD3(validator_recv_frame, void (uint8_t link, uint8_t* data, uint16_t size)); + + void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + std::copy(data, data + size, std::back_inserter(sent_data)); + } + std::vector sent_data; + + static ByteStuffer* Instance; +}; + +ByteStuffer* ByteStuffer::Instance = nullptr; + +extern "C" { + void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { + ByteStuffer::Instance->validator_recv_frame(link, data, size); + } + + void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + ByteStuffer::Instance->send_data(link, data, size); + } +} + +TEST_F(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .Times(0); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .Times(0); + byte_stuffer_recv_byte(0, 0xFF); +} + +TEST_F(ByteStuffer, receives_no_frame_for_a_single_random_byte) { + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .Times(0); + byte_stuffer_recv_byte(0, 0x4A); +} + +TEST_F(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .Times(0); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_single_byte_valid_frame) { + uint8_t expected[] = {0x37}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 0x37); + byte_stuffer_recv_byte(0, 0); +} +TEST_F(ByteStuffer, receives_three_bytes_valid_frame) { + uint8_t expected[] = {0x37, 0x99, 0xFF}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 4); + byte_stuffer_recv_byte(0, 0x37); + byte_stuffer_recv_byte(0, 0x99); + byte_stuffer_recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_single_zero_valid_frame) { + uint8_t expected[] = {0}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_valid_frame_with_zeroes) { + uint8_t expected[] = {5, 0, 3, 0}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); +} + + +TEST_F(ByteStuffer, receives_two_valid_frames) { + uint8_t expected1[] = {5, 0}; + uint8_t expected2[] = {3}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected1))); + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected2))); + byte_stuffer_recv_byte(1, 2); + byte_stuffer_recv_byte(1, 5); + byte_stuffer_recv_byte(1, 1); + byte_stuffer_recv_byte(1, 0); + byte_stuffer_recv_byte(1, 2); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 0); +} + +TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_zero) { + uint8_t expected[] = {5, 7}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 1); + byte_stuffer_recv_byte(1, 0); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 5); + byte_stuffer_recv_byte(1, 7); + byte_stuffer_recv_byte(1, 0); +} + +TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { + uint8_t expected[] = {5, 7}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 9); + byte_stuffer_recv_byte(0, 4); // This should have been zero + byte_stuffer_recv_byte(0, 0); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { + uint8_t expected[254]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 0xFF); + for (i=0;i<254;i++) { + byte_stuffer_recv_byte(0, i+1); + } + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { + uint8_t expected[255]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + expected[254] = 7; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 0xFF); + for (i=0;i<254;i++) { + byte_stuffer_recv_byte(0, i+1); + } + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { + uint8_t expected[255]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + expected[254] = 0; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 0xFF); + for (i=0;i<254;i++) { + byte_stuffer_recv_byte(0, i+1); + } + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_two_long_frames_and_some_more) { + uint8_t expected[515]; + int i; + int j; + for (j=0;j<2;j++) { + for (i=0;i<254;i++) { + expected[i+254*j] = i + 1; + } + } + for (i=0;i<7;i++) { + expected[254*2+i] = i + 1; + } + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + byte_stuffer_recv_byte(0, 0xFF); + for (i=0;i<254;i++) { + byte_stuffer_recv_byte(0, i+1); + } + byte_stuffer_recv_byte(0, 0xFF); + for (i=0;i<254;i++) { + byte_stuffer_recv_byte(0, i+1); + } + byte_stuffer_recv_byte(0, 8); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 4); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 6); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); +} + +TEST_F(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { + uint8_t expected[MAX_FRAME_SIZE] = {}; + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + int i; + byte_stuffer_recv_byte(0, 1); + for(i=0;i(ElementsAreArray(expected))); + int i; + byte_stuffer_recv_byte(0, 1); + for(i=0;i(ElementsAreArray(original_data))); + int i; + for(auto& d : sent_data) { + byte_stuffer_recv_byte(1, d); + } +} + +TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) { + uint8_t original_data[] = { 1, 0, 3, 0, 0, 9}; + byte_stuffer_send_frame(1, original_data, sizeof(original_data)); + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(original_data))); + int i; + for(auto& d : sent_data) { + byte_stuffer_recv_byte(1, d); + } +} + +TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) { + uint8_t original_data[254]; + int i; + for(i=0;i<254;i++) { + original_data[i] = i + 1; + } + byte_stuffer_send_frame(0, original_data, sizeof(original_data)); + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(original_data))); + for(auto& d : sent_data) { + byte_stuffer_recv_byte(1, d); + } +} + +TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) { + uint8_t original_data[256]; + int i; + for(i=0;i<254;i++) { + original_data[i] = i + 1; + } + original_data[254] = 22; + original_data[255] = 23; + byte_stuffer_send_frame(0, original_data, sizeof(original_data)); + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(original_data))); + for(auto& d : sent_data) { + byte_stuffer_recv_byte(1, d); + } +} + +TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) { + uint8_t original_data[255]; + int i; + for(i=0;i<254;i++) { + original_data[i] = i + 1; + } + original_data[254] = 0; + byte_stuffer_send_frame(0, original_data, sizeof(original_data)); + EXPECT_CALL(*this, validator_recv_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(original_data))); + for(auto& d : sent_data) { + byte_stuffer_recv_byte(1, d); + } +} diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk new file mode 100644 index 0000000000..651f56b950 --- /dev/null +++ b/quantum/serial_link/tests/rules.mk @@ -0,0 +1,3 @@ +serial_link_byte_stuffer_SRC :=\ + $(SERIAL_PATH)/tests/byte_stuffer_tests.cpp \ + $(SERIAL_PATH)/protocol/byte_stuffer.c \ No newline at end of file -- cgit v1.2.3 From f4429ba48ca8346a208b711cd63e7413ac3efeff Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 25 Aug 2016 11:25:27 +0300 Subject: Running of unit tests But only if the compilation has succeeded --- Makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 67b981d51e..054aa31ec5 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE)) STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) +TEST_DIR := $(ROOT_DIR)/.build/test MAKEFILE_INCLUDED=yes @@ -394,7 +395,10 @@ define BUILD fi; COMMAND_false_$$(COMMAND) := \ printf "$$(MAKE_MSG)\n\n"; \ - $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; + $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \ + if [ $$$$? -gt 0 ]; \ + then error_occured=1; \ + fi; endef # Just parse all the keymaps for a specifc keyboard @@ -410,6 +414,7 @@ define BUILD_TEST MAKE_VARS := TEST=$$(TEST_NAME) MAKE_MSG := $$(MSG_MAKE_TEST) $$(eval $$(call BUILD)) + TESTS += $$(TEST_DIR)/$$(TEST_NAME).elf endef define PARSE_TEST @@ -464,8 +469,8 @@ $(SUBPROJECTS): %: %-allkm # But we return the error code at the end, to trigger travis failures +error_occured=0; \ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ - if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi - + if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ + $(foreach TEST,$(TESTS),$(TEST)) # All should compile everything .PHONY: all -- cgit v1.2.3 From fc855cb30e86aadee7b1d9ee62f83d85cc0447ea Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 13:29:54 +0300 Subject: Fix running multiple tests --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 054aa31ec5..5f5c46860c 100644 --- a/Makefile +++ b/Makefile @@ -414,10 +414,12 @@ define BUILD_TEST MAKE_VARS := TEST=$$(TEST_NAME) MAKE_MSG := $$(MSG_MAKE_TEST) $$(eval $$(call BUILD)) - TESTS += $$(TEST_DIR)/$$(TEST_NAME).elf + TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf + TESTS += $$(TEST_EXECUTABLE) endef define PARSE_TEST + TESTS := TEST_NAME := $$(firstword $$(subst -, ,$$(RULE))) TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE))) MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),)) @@ -470,7 +472,7 @@ $(SUBPROJECTS): %: %-allkm +error_occured=0; \ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ - $(foreach TEST,$(TESTS),$(TEST)) + $(foreach TEST,$(TESTS),$(TEST);) # All should compile everything .PHONY: all -- cgit v1.2.3 From c692fd1d55cb2103e9f7c40c8953ec92b5178c52 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 13:43:12 +0300 Subject: More common settings for unit tests and keyboards --- build_keyboard.mk | 25 +++++++++++++------ build_test.mk | 3 +++ common.mk | 14 +++++------ tmk_core/common.mk | 71 ++++++++++++++++++++++++------------------------------ 4 files changed, 59 insertions(+), 54 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 164794c634..5bec4ecf66 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -23,6 +23,16 @@ ifdef master MASTER = $(master) endif +ifeq ($(MASTER),right) + OPT_DEFS += -DMASTER_IS_ON_RIGHT +else + ifneq ($(MASTER),left) +$(error MASTER does not have a valid value(left/right)) + endif +endif + + + KEYBOARD_PATH := keyboards/$(KEYBOARD) KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c @@ -169,15 +179,14 @@ ifneq ($(SUBPROJECT),) VPATH += $(SUBPROJECT_PATH) endif VPATH += $(KEYBOARD_PATH) -VPATH += $(TOP_DIR) -VPATH += $(TMK_PATH) -VPATH += $(QUANTUM_PATH) -VPATH += $(QUANTUM_PATH)/keymap_extras -VPATH += $(QUANTUM_PATH)/audio -VPATH += $(QUANTUM_PATH)/process_keycode +VPATH += $(COMMON_VPATH) include $(TMK_PATH)/common.mk +SRC += $(TMK_COMMON_SRC) +OPT_DEFS += $(TMK_COMMON_DEFS) +EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS) + ifeq ($(PLATFORM),AVR) include $(TMK_PATH)/protocol/lufa.mk include $(TMK_PATH)/avr.mk @@ -189,11 +198,13 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes) include $(VISUALIZER_PATH)/visualizer.mk endif +$(info $(VPATH)) + OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" -$(KEYMAP_OUTPUT)_INC := $(EXTRAINCDIRS) $(VPATH) +$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) diff --git a/build_test.mk b/build_test.mk index 1d8cb08b15..9f5d6e0af2 100644 --- a/build_test.mk +++ b/build_test.mk @@ -38,6 +38,9 @@ VPATH +=\ all: elf +VPATH += $(COMMON_VPATH) + +include $(TMK_PATH)/common.mk include $(QUANTUM_PATH)/serial_link/tests/rules.mk $(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC) diff --git a/common.mk b/common.mk index f9b0773a86..18751cd5ac 100644 --- a/common.mk +++ b/common.mk @@ -17,10 +17,10 @@ SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c) SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) SERIAL_DEFS += -DSERIAL_LINK_ENABLE -VPATH += $(TOP_DIR) -VPATH += $(TMK_PATH) -VPATH += $(QUANTUM_PATH) -VPATH += $(QUANTUM_PATH)/keymap_extras -VPATH += $(QUANTUM_PATH)/audio -VPATH += $(QUANTUM_PATH)/process_keycode -VPATH += $(SERIAL_PATH) \ No newline at end of file +COMMON_VPATH := $(TOP_DIR) +COMMON_VPATH += $(TMK_PATH) +COMMON_VPATH += $(QUANTUM_PATH) +COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras +COMMON_VPATH += $(QUANTUM_PATH)/audio +COMMON_VPATH += $(QUANTUM_PATH)/process_keycode +COMMON_VPATH += $(SERIAL_PATH) \ No newline at end of file diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 0b767eb047..f826a7b540 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -5,7 +5,7 @@ else ifeq ($(PLATFORM),CHIBIOS) PLATFORM_COMMON_DIR = $(COMMON_DIR)/chibios endif -SRC += $(COMMON_DIR)/host.c \ +TMK_COMMON_SRC += $(COMMON_DIR)/host.c \ $(COMMON_DIR)/keyboard.c \ $(COMMON_DIR)/action.c \ $(COMMON_DIR)/action_tapping.c \ @@ -21,98 +21,89 @@ SRC += $(COMMON_DIR)/host.c \ $(PLATFORM_COMMON_DIR)/bootloader.c \ ifeq ($(PLATFORM),AVR) - SRC += $(PLATFORM_COMMON_DIR)/xprintf.S + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/xprintf.S endif ifeq ($(PLATFORM),CHIBIOS) - SRC += $(PLATFORM_COMMON_DIR)/printf.c - SRC += $(PLATFORM_COMMON_DIR)/eeprom.c + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/printf.c + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c endif # Option modules ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes) - OPT_DEFS += -DBOOTMAGIC_ENABLE - SRC += $(COMMON_DIR)/bootmagic.c + TMK_COMMON_DEFS += -DBOOTMAGIC_ENABLE + TMK_COMMON_SRC += $(COMMON_DIR)/bootmagic.c else - OPT_DEFS += -DMAGIC_ENABLE - SRC += $(COMMON_DIR)/magic.c + TMK_COMMON_DEFS += -DMAGIC_ENABLE + TMK_COMMON_SRC += $(COMMON_DIR)/magic.c endif ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) - SRC += $(COMMON_DIR)/mousekey.c - OPT_DEFS += -DMOUSEKEY_ENABLE - OPT_DEFS += -DMOUSE_ENABLE + TMK_COMMON_SRC += $(COMMON_DIR)/mousekey.c + TMK_COMMON_DEFS += -DMOUSEKEY_ENABLE + TMK_COMMON_DEFS += -DMOUSE_ENABLE endif ifeq ($(strip $(EXTRAKEY_ENABLE)), yes) - OPT_DEFS += -DEXTRAKEY_ENABLE + TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE endif ifeq ($(strip $(CONSOLE_ENABLE)), yes) - OPT_DEFS += -DCONSOLE_ENABLE + TMK_COMMON_DEFS += -DCONSOLE_ENABLE else - OPT_DEFS += -DNO_PRINT - OPT_DEFS += -DNO_DEBUG + TMK_COMMON_DEFS += -DNO_PRINT + TMK_COMMON_DEFS += -DNO_DEBUG endif ifeq ($(strip $(COMMAND_ENABLE)), yes) - SRC += $(COMMON_DIR)/command.c - OPT_DEFS += -DCOMMAND_ENABLE + TMK_COMMON_SRC += $(COMMON_DIR)/command.c + TMK_COMMON_DEFS += -DCOMMAND_ENABLE endif ifeq ($(strip $(NKRO_ENABLE)), yes) - OPT_DEFS += -DNKRO_ENABLE + TMK_COMMON_DEFS += -DNKRO_ENABLE endif ifeq ($(strip $(USB_6KRO_ENABLE)), yes) - OPT_DEFS += -DUSB_6KRO_ENABLE + TMK_COMMON_DEFS += -DUSB_6KRO_ENABLE endif ifeq ($(strip $(SLEEP_LED_ENABLE)), yes) - SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c - OPT_DEFS += -DSLEEP_LED_ENABLE - OPT_DEFS += -DNO_SUSPEND_POWER_DOWN + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c + TMK_COMMON_DEFS += -DSLEEP_LED_ENABLE + TMK_COMMON_DEFS += -DNO_SUSPEND_POWER_DOWN endif ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) - SRC += $(COMMON_DIR)/backlight.c - OPT_DEFS += -DBACKLIGHT_ENABLE + TMK_COMMON_SRC += $(COMMON_DIR)/backlight.c + TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE endif ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) - OPT_DEFS += -DBLUETOOTH_ENABLE + TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE endif ifeq ($(strip $(ONEHAND_ENABLE)), yes) - OPT_DEFS += -DONEHAND_ENABLE + TMK_COMMON_DEFS += -DONEHAND_ENABLE endif ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) - OPT_DEFS += -DKEYMAP_SECTION_ENABLE + TMK_COMMON_DEFS += -DKEYMAP_SECTION_ENABLE ifeq ($(strip $(MCU)),atmega32u2) - EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x + TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x else ifeq ($(strip $(MCU)),atmega32u4) - EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x + TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x else - EXTRALDFLAGS = $(error no ldscript for keymap section) + TMK_COMMON_LDFLAGS = $(error no ldscript for keymap section) endif endif -ifeq ($(MASTER),right) - OPT_DEFS += -DMASTER_IS_ON_RIGHT -else - ifneq ($(MASTER),left) -$(error MASTER does not have a valid value(left/right)) - endif -endif - - # Bootloader address ifdef STM32_BOOTLOADER_ADDRESS - OPT_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS) + TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS) endif # Search Path -- cgit v1.2.3 From cdd0913bcc63334fa20f1a7bd46bdce4d4f2843b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 13:43:46 +0300 Subject: Convert frame_router_tests to GTest --- quantum/serial_link/tests/frame_router_tests.c | 231 ----------------------- quantum/serial_link/tests/frame_router_tests.cpp | 229 ++++++++++++++++++++++ quantum/serial_link/tests/rules.mk | 8 +- 3 files changed, 236 insertions(+), 232 deletions(-) delete mode 100644 quantum/serial_link/tests/frame_router_tests.c create mode 100644 quantum/serial_link/tests/frame_router_tests.cpp diff --git a/quantum/serial_link/tests/frame_router_tests.c b/quantum/serial_link/tests/frame_router_tests.c deleted file mode 100644 index 6c806fa939..0000000000 --- a/quantum/serial_link/tests/frame_router_tests.c +++ /dev/null @@ -1,231 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include "serial_link/protocol/byte_stuffer.c" -#include "serial_link/protocol/frame_validator.c" -#include "serial_link/protocol/frame_router.c" -#include "serial_link/protocol/transport.h" - -static uint8_t received_data[256]; -static uint16_t received_data_size; - -typedef struct { - uint8_t sent_data[256]; - uint16_t sent_data_size; -} receive_buffer_t; - -typedef struct { - receive_buffer_t send_buffers[2]; -} router_buffer_t; - -router_buffer_t router_buffers[8]; - -router_buffer_t* current_router_buffer; - - -Describe(FrameRouter); -BeforeEach(FrameRouter) { - init_byte_stuffer(); - memset(router_buffers, 0, sizeof(router_buffers)); - current_router_buffer = 0; -} -AfterEach(FrameRouter) {} - -typedef struct { - uint32_t data; - uint8_t extra[16]; -} frame_buffer_t; - - -void send_data(uint8_t link, const uint8_t* data, uint16_t size) { - receive_buffer_t* buffer = ¤t_router_buffer->send_buffers[link]; - memcpy(buffer->sent_data + buffer->sent_data_size, data, size); - buffer->sent_data_size += size; -} - -static void receive_data(uint8_t link, uint8_t* data, uint16_t size) { - int i; - for(i=0;i to) { - receive_data(DOWN_LINK, - router_buffers[from].send_buffers[UP_LINK].sent_data, - router_buffers[from].send_buffers[UP_LINK].sent_data_size); - } - else if(to > from) { - receive_data(UP_LINK, - router_buffers[from].send_buffers[DOWN_LINK].sent_data, - router_buffers[from].send_buffers[DOWN_LINK].sent_data_size); - } -} - -void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { - mock(from, data, size); -} - - -Ensure(FrameRouter, master_broadcast_is_received_by_everyone) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(0); - router_send_frame(0xFF, (uint8_t*)&data, 4); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(0)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(0, 1); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(0)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(1, 2); - assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, master_send_is_received_by_targets) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(0); - router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - - simulate_transport(0, 1); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(0)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(1, 2); - assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(0)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(2, 3); - assert_that(router_buffers[3].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, first_link_sends_to_master) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(1); - router_send_frame(0, (uint8_t*)&data, 4); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(1)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(1, 0); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, second_link_sends_to_master) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(2); - router_send_frame(0, (uint8_t*)&data, 4); - assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - - simulate_transport(2, 1); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - - expect(transport_recv_frame, - when(from, is_equal_to(2)), - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(&data.data, 4)) - ); - simulate_transport(1, 0); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, master_sends_to_master_does_nothing) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(0); - router_send_frame(0, (uint8_t*)&data, 4); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, link_sends_to_other_link_does_nothing) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(1); - router_send_frame(2, (uint8_t*)&data, 4); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); -} - -Ensure(FrameRouter, master_receives_on_uplink_does_nothing) { - frame_buffer_t data; - data.data = 0xAB7055BB; - activate_router(1); - router_send_frame(0, (uint8_t*)&data, 4); - assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); - assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); - - never_expect(transport_recv_frame); - activate_router(0); - receive_data(UP_LINK, - router_buffers[1].send_buffers[UP_LINK].sent_data, - router_buffers[1].send_buffers[UP_LINK].sent_data_size); - assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); -} diff --git a/quantum/serial_link/tests/frame_router_tests.cpp b/quantum/serial_link/tests/frame_router_tests.cpp new file mode 100644 index 0000000000..2bd5bf830d --- /dev/null +++ b/quantum/serial_link/tests/frame_router_tests.cpp @@ -0,0 +1,229 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "gtest/gtest.h" +#include "gmock/gmock.h" +#include +extern "C" { + #include "serial_link/protocol/transport.h" + #include "serial_link/protocol/byte_stuffer.h" + #include "serial_link/protocol/frame_router.h" +} + +using testing::_; +using testing::ElementsAreArray; +using testing::Args; + +class FrameRouter : public testing::Test { +public: + FrameRouter() : + current_router_buffer(nullptr) + { + Instance = this; + init_byte_stuffer(); + } + + ~FrameRouter() { + Instance = nullptr; + } + + void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + auto& buffer = current_router_buffer->send_buffers[link]; + std::copy(data, data + size, std::back_inserter(buffer)); + } + + void receive_data(uint8_t link, uint8_t* data, uint16_t size) { + int i; + for(i=0;i to) { + receive_data(DOWN_LINK, + router_buffers[from].send_buffers[UP_LINK].data(), + router_buffers[from].send_buffers[UP_LINK].size()); + } + else if(to > from) { + receive_data(UP_LINK, + router_buffers[from].send_buffers[DOWN_LINK].data(), + router_buffers[from].send_buffers[DOWN_LINK].size()); + } + } + + MOCK_METHOD3(transport_recv_frame, void (uint8_t from, uint8_t* data, uint16_t size)); + + std::vector received_data; + + struct router_buffer { + std::vector send_buffers[2]; + }; + + router_buffer router_buffers[8]; + router_buffer* current_router_buffer; + + static FrameRouter* Instance; +}; + +FrameRouter* FrameRouter::Instance = nullptr; + + +typedef struct { + std::array data; + uint8_t extra[16]; +} frame_buffer_t; + + +extern "C" { + void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + FrameRouter::Instance->send_data(link, data, size); + } + + + void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { + FrameRouter::Instance->transport_recv_frame(from, data, size); + } +} + +TEST_F(FrameRouter, master_broadcast_is_received_by_everyone) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(0); + router_send_frame(0xFF, (uint8_t*)&data, 4); + EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); + EXPECT_CALL(*this, transport_recv_frame(0, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(0, 1); + EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(0, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(1, 2); + EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0); +} + +TEST_F(FrameRouter, master_send_is_received_by_targets) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(0); + router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4); + EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); + + simulate_transport(0, 1); + EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(0, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(1, 2); + EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(0, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(2, 3); + EXPECT_GT(router_buffers[3].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[3].send_buffers[UP_LINK].size(), 0); +} + +TEST_F(FrameRouter, first_link_sends_to_master) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(1); + router_send_frame(0, (uint8_t*)&data, 4); + EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(1, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(1, 0); + EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); +} + +TEST_F(FrameRouter, second_link_sends_to_master) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(2); + router_send_frame(0, (uint8_t*)&data, 4); + EXPECT_GT(router_buffers[2].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[2].send_buffers[DOWN_LINK].size(), 0); + + simulate_transport(2, 1); + EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(2, _, _)) + .With(Args<1, 2>(ElementsAreArray(data.data))); + simulate_transport(1, 0); + EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); +} + +TEST_F(FrameRouter, master_sends_to_master_does_nothing) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(0); + router_send_frame(0, (uint8_t*)&data, 4); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); +} + +TEST_F(FrameRouter, link_sends_to_other_link_does_nothing) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(1); + router_send_frame(2, (uint8_t*)&data, 4); + EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); +} + +TEST_F(FrameRouter, master_receives_on_uplink_does_nothing) { + frame_buffer_t data; + data.data = {0xAB, 0x70, 0x55, 0xBB}; + activate_router(1); + router_send_frame(0, (uint8_t*)&data, 4); + EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0); + + EXPECT_CALL(*this, transport_recv_frame(_, _, _)) + .Times(0); + activate_router(0); + receive_data(UP_LINK, + router_buffers[1].send_buffers[UP_LINK].data(), + router_buffers[1].send_buffers[UP_LINK].size()); + EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0); + EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0); +} diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk index 651f56b950..7d0d6c0d02 100644 --- a/quantum/serial_link/tests/rules.mk +++ b/quantum/serial_link/tests/rules.mk @@ -1,3 +1,9 @@ serial_link_byte_stuffer_SRC :=\ $(SERIAL_PATH)/tests/byte_stuffer_tests.cpp \ - $(SERIAL_PATH)/protocol/byte_stuffer.c \ No newline at end of file + $(SERIAL_PATH)/protocol/byte_stuffer.c + +serial_link_frame_router_SRC := \ + $(SERIAL_PATH)/tests/frame_router_tests.cpp \ + $(SERIAL_PATH)/protocol/byte_stuffer.c \ + $(SERIAL_PATH)/protocol/frame_validator.c \ + $(SERIAL_PATH)/protocol/frame_router.c \ No newline at end of file -- cgit v1.2.3 From b3eba797af74ace19b9f2e762bdd33d9449e3f94 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 13:54:16 +0300 Subject: Convert frame_validator_tests to GTest --- quantum/serial_link/tests/frame_validator_tests.c | 101 ------------------ .../serial_link/tests/frame_validator_tests.cpp | 115 +++++++++++++++++++++ quantum/serial_link/tests/rules.mk | 8 +- 3 files changed, 121 insertions(+), 103 deletions(-) delete mode 100644 quantum/serial_link/tests/frame_validator_tests.c create mode 100644 quantum/serial_link/tests/frame_validator_tests.cpp diff --git a/quantum/serial_link/tests/frame_validator_tests.c b/quantum/serial_link/tests/frame_validator_tests.c deleted file mode 100644 index d20947e2c9..0000000000 --- a/quantum/serial_link/tests/frame_validator_tests.c +++ /dev/null @@ -1,101 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include "serial_link/protocol/frame_validator.c" - -void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) { - mock(data, size); -} - -void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) { - mock(data, size); -} - -Describe(FrameValidator); -BeforeEach(FrameValidator) {} -AfterEach(FrameValidator) {} - -Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { - never_expect(route_incoming_frame); - uint8_t data[] = {1, 2}; - validator_recv_frame(0, 0, 1); - validator_recv_frame(0, data, 2); - validator_recv_frame(0, data, 3); - validator_recv_frame(0, data, 4); -} - -Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { - uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; - expect(route_incoming_frame, - when(size, is_equal_to(1)), - when(data, is_equal_to_contents_of(data, 1)) - ); - validator_recv_frame(0, data, 5); -} - -Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) { - uint8_t data[] = {0x44, 0, 0, 0, 0}; - never_expect(route_incoming_frame); - validator_recv_frame(1, data, 5); -} - -Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { - uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA}; - expect(route_incoming_frame, - when(size, is_equal_to(4)), - when(data, is_equal_to_contents_of(data, 4)) - ); - validator_recv_frame(1, data, 8); -} - -Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { - uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; - expect(route_incoming_frame, - when(size, is_equal_to(5)), - when(data, is_equal_to_contents_of(data, 5)) - ); - validator_recv_frame(0, data, 9); -} - -Ensure(FrameValidator, sends_one_byte_with_correct_crc) { - uint8_t original[] = {0x44, 0, 0, 0, 0}; - uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; - expect(byte_stuffer_send_frame, - when(size, is_equal_to(sizeof(expected))), - when(data, is_equal_to_contents_of(expected, sizeof(expected))) - ); - validator_send_frame(0, original, 1); -} - -Ensure(FrameValidator, sends_five_bytes_with_correct_crc) { - uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0}; - uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; - expect(byte_stuffer_send_frame, - when(size, is_equal_to(sizeof(expected))), - when(data, is_equal_to_contents_of(expected, sizeof(expected))) - ); - validator_send_frame(0, original, 5); -} diff --git a/quantum/serial_link/tests/frame_validator_tests.cpp b/quantum/serial_link/tests/frame_validator_tests.cpp new file mode 100644 index 0000000000..9223af83b0 --- /dev/null +++ b/quantum/serial_link/tests/frame_validator_tests.cpp @@ -0,0 +1,115 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "gtest/gtest.h" +#include "gmock/gmock.h" +extern "C" { +#include "serial_link/protocol/frame_validator.h" +} + +using testing::_; +using testing::ElementsAreArray; +using testing::Args; + +class FrameValidator : public testing::Test { +public: + FrameValidator() { + Instance = this; + } + + ~FrameValidator() { + Instance = nullptr; + } + + MOCK_METHOD3(route_incoming_frame, void (uint8_t link, uint8_t* data, uint16_t size)); + MOCK_METHOD3(byte_stuffer_send_frame, void (uint8_t link, uint8_t* data, uint16_t size)); + + static FrameValidator* Instance; +}; + +FrameValidator* FrameValidator::Instance = nullptr; + +extern "C" { +void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) { + FrameValidator::Instance->route_incoming_frame(link, data, size); +} + +void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) { + FrameValidator::Instance->byte_stuffer_send_frame(link, data, size); +} +} + +TEST_F(FrameValidator, doesnt_validate_frames_under_5_bytes) { + EXPECT_CALL(*this, route_incoming_frame(_, _, _)) + .Times(0); + uint8_t data[] = {1, 2}; + validator_recv_frame(0, 0, 1); + validator_recv_frame(0, data, 2); + validator_recv_frame(0, data, 3); + validator_recv_frame(0, data, 4); +} + +TEST_F(FrameValidator, validates_one_byte_frame_with_correct_crc) { + uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; + EXPECT_CALL(*this, route_incoming_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(data, 1))); + validator_recv_frame(0, data, 5); +} + +TEST_F(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) { + uint8_t data[] = {0x44, 0, 0, 0, 0}; + EXPECT_CALL(*this, route_incoming_frame(_, _, _)) + .Times(0); + validator_recv_frame(1, data, 5); +} + +TEST_F(FrameValidator, validates_four_byte_frame_with_correct_crc) { + uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA}; + EXPECT_CALL(*this, route_incoming_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(data, 4))); + validator_recv_frame(1, data, 8); +} + +TEST_F(FrameValidator, validates_five_byte_frame_with_correct_crc) { + uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; + EXPECT_CALL(*this, route_incoming_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(data, 5))); + validator_recv_frame(0, data, 9); +} + +TEST_F(FrameValidator, sends_one_byte_with_correct_crc) { + uint8_t original[] = {0x44, 0, 0, 0, 0}; + uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; + EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + validator_send_frame(0, original, 1); +} + +TEST_F(FrameValidator, sends_five_bytes_with_correct_crc) { + uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0}; + uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; + EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _)) + .With(Args<1, 2>(ElementsAreArray(expected))); + validator_send_frame(0, original, 5); +} diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk index 7d0d6c0d02..7f2a8f457c 100644 --- a/quantum/serial_link/tests/rules.mk +++ b/quantum/serial_link/tests/rules.mk @@ -5,5 +5,9 @@ serial_link_byte_stuffer_SRC :=\ serial_link_frame_router_SRC := \ $(SERIAL_PATH)/tests/frame_router_tests.cpp \ $(SERIAL_PATH)/protocol/byte_stuffer.c \ - $(SERIAL_PATH)/protocol/frame_validator.c \ - $(SERIAL_PATH)/protocol/frame_router.c \ No newline at end of file + $(SERIAL_PATH)/protocol/frame_validator.c \ + $(SERIAL_PATH)/protocol/frame_router.c + +serial_link_frame_validator_SRC := \ + $(SERIAL_PATH)/tests/frame_validator_tests.cpp \ + $(SERIAL_PATH)/protocol/frame_validator.c \ No newline at end of file -- cgit v1.2.3 From bcdf9ab76bf3723e6015d4255d53e7c1e7259b61 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 14:18:49 +0300 Subject: Convert transport_tests to GTest --- quantum/serial_link/protocol/transport.c | 4 + quantum/serial_link/protocol/transport.h | 7 +- quantum/serial_link/tests/rules.mk | 7 +- quantum/serial_link/tests/transport_tests.c | 168 ----------------------- quantum/serial_link/tests/transport_tests.cpp | 188 ++++++++++++++++++++++++++ 5 files changed, 202 insertions(+), 172 deletions(-) delete mode 100644 quantum/serial_link/tests/transport_tests.c create mode 100644 quantum/serial_link/tests/transport_tests.cpp diff --git a/quantum/serial_link/protocol/transport.c b/quantum/serial_link/protocol/transport.c index f418d11ceb..ff795fe201 100644 --- a/quantum/serial_link/protocol/transport.c +++ b/quantum/serial_link/protocol/transport.c @@ -31,6 +31,10 @@ SOFTWARE. static remote_object_t* remote_objects[MAX_REMOTE_OBJECTS]; static uint32_t num_remote_objects = 0; +void reinitialize_serial_link_transport(void) { + num_remote_objects = 0; +} + void add_remote_objects(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { unsigned int i; for(i=0;i<_num_remote_objects;i++) { diff --git a/quantum/serial_link/protocol/transport.h b/quantum/serial_link/protocol/transport.h index 9a052d8809..2c5d890b21 100644 --- a/quantum/serial_link/protocol/transport.h +++ b/quantum/serial_link/protocol/transport.h @@ -82,7 +82,7 @@ typedef struct { \ remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\ triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ - return triple_buffer_read_internal(obj->object_size, tb); \ + return (type*)triple_buffer_read_internal(obj->object_size, tb); \ } #define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \ @@ -112,7 +112,7 @@ typedef struct { \ remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ uint8_t* start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size);\ triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ - return triple_buffer_read_internal(obj->object_size, tb); \ + return (type*)triple_buffer_read_internal(obj->object_size, tb); \ } #define SLAVE_TO_MASTER_OBJECT(name, type) \ @@ -139,12 +139,13 @@ typedef struct { \ uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\ start+=slave * REMOTE_OBJECT_SIZE(obj->object_size); \ triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ - return triple_buffer_read_internal(obj->object_size, tb); \ + return (type*)triple_buffer_read_internal(obj->object_size, tb); \ } #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name void add_remote_objects(remote_object_t** remote_objects, uint32_t num_remote_objects); +void reinitialize_serial_link_transport(void); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); void update_transport(void); diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk index 7f2a8f457c..bf342c9d26 100644 --- a/quantum/serial_link/tests/rules.mk +++ b/quantum/serial_link/tests/rules.mk @@ -10,4 +10,9 @@ serial_link_frame_router_SRC := \ serial_link_frame_validator_SRC := \ $(SERIAL_PATH)/tests/frame_validator_tests.cpp \ - $(SERIAL_PATH)/protocol/frame_validator.c \ No newline at end of file + $(SERIAL_PATH)/protocol/frame_validator.c + +serial_link_transport_SRC := \ + $(SERIAL_PATH)/tests/transport_tests.cpp \ + $(SERIAL_PATH)/protocol/transport.c \ + $(SERIAL_PATH)/protocol/triple_buffered_object.c \ No newline at end of file diff --git a/quantum/serial_link/tests/transport_tests.c b/quantum/serial_link/tests/transport_tests.c deleted file mode 100644 index 358e1b9fd4..0000000000 --- a/quantum/serial_link/tests/transport_tests.c +++ /dev/null @@ -1,168 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include "serial_link/protocol/transport.c" -#include "serial_link/protocol/triple_buffered_object.c" - -void signal_data_written(void) { - mock(); -} - -static uint8_t sent_data[2048]; -static uint16_t sent_data_size; - -void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { - mock(destination); - memcpy(sent_data + sent_data_size, data, size); - sent_data_size += size; -} - -typedef struct { - uint32_t test; -} test_object1_t; - -typedef struct { - uint32_t test1; - uint32_t test2; -} test_object2_t; - -MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1_t); -MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1_t); -SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t); - -static remote_object_t* test_remote_objects[] = { - REMOTE_OBJECT(master_to_slave), - REMOTE_OBJECT(master_to_single_slave), - REMOTE_OBJECT(slave_to_master), -}; - -Describe(Transport); -BeforeEach(Transport) { - add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*)); - sent_data_size = 0; -} -AfterEach(Transport) {} - -Ensure(Transport, write_to_local_signals_an_event) { - begin_write_master_to_slave(); - expect(signal_data_written); - end_write_master_to_slave(); - begin_write_slave_to_master(); - expect(signal_data_written); - end_write_slave_to_master(); - begin_write_master_to_single_slave(1); - expect(signal_data_written); - end_write_master_to_single_slave(1); -} - -Ensure(Transport, writes_from_master_to_all_slaves) { - update_transport(); - test_object1_t* obj = begin_write_master_to_slave(); - obj->test = 5; - expect(signal_data_written); - end_write_master_to_slave(); - expect(router_send_frame, - when(destination, is_equal_to(0xFF))); - update_transport(); - transport_recv_frame(0, sent_data, sent_data_size); - test_object1_t* obj2 = read_master_to_slave(); - assert_that(obj2, is_not_equal_to(NULL)); - assert_that(obj2->test, is_equal_to(5)); -} - -Ensure(Transport, writes_from_slave_to_master) { - update_transport(); - test_object1_t* obj = begin_write_slave_to_master(); - obj->test = 7; - expect(signal_data_written); - end_write_slave_to_master(); - expect(router_send_frame, - when(destination, is_equal_to(0))); - update_transport(); - transport_recv_frame(3, sent_data, sent_data_size); - test_object1_t* obj2 = read_slave_to_master(2); - assert_that(read_slave_to_master(0), is_equal_to(NULL)); - assert_that(obj2, is_not_equal_to(NULL)); - assert_that(obj2->test, is_equal_to(7)); -} - -Ensure(Transport, writes_from_master_to_single_slave) { - update_transport(); - test_object1_t* obj = begin_write_master_to_single_slave(3); - obj->test = 7; - expect(signal_data_written); - end_write_master_to_single_slave(3); - expect(router_send_frame, - when(destination, is_equal_to(4))); - update_transport(); - transport_recv_frame(0, sent_data, sent_data_size); - test_object1_t* obj2 = read_master_to_single_slave(); - assert_that(obj2, is_not_equal_to(NULL)); - assert_that(obj2->test, is_equal_to(7)); -} - -Ensure(Transport, ignores_object_with_invalid_id) { - update_transport(); - test_object1_t* obj = begin_write_master_to_single_slave(3); - obj->test = 7; - expect(signal_data_written); - end_write_master_to_single_slave(3); - expect(router_send_frame, - when(destination, is_equal_to(4))); - update_transport(); - sent_data[sent_data_size - 1] = 44; - transport_recv_frame(0, sent_data, sent_data_size); - test_object1_t* obj2 = read_master_to_single_slave(); - assert_that(obj2, is_equal_to(NULL)); -} - -Ensure(Transport, ignores_object_with_size_too_small) { - update_transport(); - test_object1_t* obj = begin_write_master_to_slave(); - obj->test = 7; - expect(signal_data_written); - end_write_master_to_slave(); - expect(router_send_frame); - update_transport(); - sent_data[sent_data_size - 2] = 0; - transport_recv_frame(0, sent_data, sent_data_size - 1); - test_object1_t* obj2 = read_master_to_slave(); - assert_that(obj2, is_equal_to(NULL)); -} - -Ensure(Transport, ignores_object_with_size_too_big) { - update_transport(); - test_object1_t* obj = begin_write_master_to_slave(); - obj->test = 7; - expect(signal_data_written); - end_write_master_to_slave(); - expect(router_send_frame); - update_transport(); - sent_data[sent_data_size + 21] = 0; - transport_recv_frame(0, sent_data, sent_data_size + 22); - test_object1_t* obj2 = read_master_to_slave(); - assert_that(obj2, is_equal_to(NULL)); -} diff --git a/quantum/serial_link/tests/transport_tests.cpp b/quantum/serial_link/tests/transport_tests.cpp new file mode 100644 index 0000000000..21b7b165f6 --- /dev/null +++ b/quantum/serial_link/tests/transport_tests.cpp @@ -0,0 +1,188 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "gtest/gtest.h" +#include "gmock/gmock.h" + +using testing::_; +using testing::ElementsAreArray; +using testing::Args; + +extern "C" { +#include "serial_link/protocol/transport.h" +} + +struct test_object1 { + uint32_t test; +}; + +struct test_object2 { + uint32_t test1; + uint32_t test2; +}; + +MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1); +MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1); +SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1); + +static remote_object_t* test_remote_objects[] = { + REMOTE_OBJECT(master_to_slave), + REMOTE_OBJECT(master_to_single_slave), + REMOTE_OBJECT(slave_to_master), +}; + +class Transport : public testing::Test { +public: + Transport() { + Instance = this; + add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*)); + } + + ~Transport() { + Instance = nullptr; + reinitialize_serial_link_transport(); + } + + MOCK_METHOD0(signal_data_written, void ()); + MOCK_METHOD1(router_send_frame, void (uint8_t destination)); + + void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { + router_send_frame(destination); + std::copy(data, data + size, std::back_inserter(sent_data)); + } + + static Transport* Instance; + + std::vector sent_data; +}; + +Transport* Transport::Instance = nullptr; + +extern "C" { +void signal_data_written(void) { + Transport::Instance->signal_data_written(); +} + +void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { + Transport::Instance->router_send_frame(destination, data, size); +} +} + +TEST_F(Transport, write_to_local_signals_an_event) { + begin_write_master_to_slave(); + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_slave(); + begin_write_slave_to_master(); + EXPECT_CALL(*this, signal_data_written()); + end_write_slave_to_master(); + begin_write_master_to_single_slave(1); + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_single_slave(1); +} + +TEST_F(Transport, writes_from_master_to_all_slaves) { + update_transport(); + test_object1* obj = begin_write_master_to_slave(); + obj->test = 5; + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_slave(); + EXPECT_CALL(*this, router_send_frame(0xFF)); + update_transport(); + transport_recv_frame(0, sent_data.data(), sent_data.size()); + test_object1* obj2 = read_master_to_slave(); + EXPECT_NE(obj2, nullptr); + EXPECT_EQ(obj2->test, 5); +} + +TEST_F(Transport, writes_from_slave_to_master) { + update_transport(); + test_object1* obj = begin_write_slave_to_master(); + obj->test = 7; + EXPECT_CALL(*this, signal_data_written()); + end_write_slave_to_master(); + EXPECT_CALL(*this, router_send_frame(0)); + update_transport(); + transport_recv_frame(3, sent_data.data(), sent_data.size()); + test_object1* obj2 = read_slave_to_master(2); + EXPECT_EQ(read_slave_to_master(0), nullptr); + EXPECT_NE(obj2, nullptr); + EXPECT_EQ(obj2->test, 7); +} + +TEST_F(Transport, writes_from_master_to_single_slave) { + update_transport(); + test_object1* obj = begin_write_master_to_single_slave(3); + obj->test = 7; + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_single_slave(3); + EXPECT_CALL(*this, router_send_frame(4)); + update_transport(); + transport_recv_frame(0, sent_data.data(), sent_data.size()); + test_object1* obj2 = read_master_to_single_slave(); + EXPECT_NE(obj2, nullptr); + EXPECT_EQ(obj2->test, 7); +} + +TEST_F(Transport, ignores_object_with_invalid_id) { + update_transport(); + test_object1* obj = begin_write_master_to_single_slave(3); + obj->test = 7; + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_single_slave(3); + EXPECT_CALL(*this, router_send_frame(4)); + update_transport(); + sent_data[sent_data.size() - 1] = 44; + transport_recv_frame(0, sent_data.data(), sent_data.size()); + test_object1* obj2 = read_master_to_single_slave(); + EXPECT_EQ(obj2, nullptr); +} + +TEST_F(Transport, ignores_object_with_size_too_small) { + update_transport(); + test_object1* obj = begin_write_master_to_slave(); + obj->test = 7; + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_slave(); + EXPECT_CALL(*this, router_send_frame(_)); + update_transport(); + sent_data[sent_data.size() - 2] = 0; + transport_recv_frame(0, sent_data.data(), sent_data.size() - 1); + test_object1* obj2 = read_master_to_slave(); + EXPECT_EQ(obj2, nullptr); +} + +TEST_F(Transport, ignores_object_with_size_too_big) { + update_transport(); + test_object1* obj = begin_write_master_to_slave(); + obj->test = 7; + EXPECT_CALL(*this, signal_data_written()); + end_write_master_to_slave(); + EXPECT_CALL(*this, router_send_frame(_)); + update_transport(); + sent_data.resize(sent_data.size() + 22); + sent_data[sent_data.size() - 1] = 0; + transport_recv_frame(0, sent_data.data(), sent_data.size()); + test_object1* obj2 = read_master_to_slave(); + EXPECT_EQ(obj2, nullptr); +} -- cgit v1.2.3 From ffb0a126f5b2484eda7f6b1c62ea61924eec6521 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 14:25:52 +0300 Subject: Convert tirple_buffered_object_tests to GTest --- quantum/serial_link/tests/rules.mk | 12 ++-- quantum/serial_link/tests/testlist.mk | 6 +- .../tests/triple_buffered_object_tests.c | 82 --------------------- .../tests/triple_buffered_object_tests.cpp | 84 ++++++++++++++++++++++ 4 files changed, 95 insertions(+), 89 deletions(-) delete mode 100644 quantum/serial_link/tests/triple_buffered_object_tests.c create mode 100644 quantum/serial_link/tests/triple_buffered_object_tests.cpp diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk index bf342c9d26..b81515bc55 100644 --- a/quantum/serial_link/tests/rules.mk +++ b/quantum/serial_link/tests/rules.mk @@ -2,17 +2,21 @@ serial_link_byte_stuffer_SRC :=\ $(SERIAL_PATH)/tests/byte_stuffer_tests.cpp \ $(SERIAL_PATH)/protocol/byte_stuffer.c +serial_link_frame_validator_SRC := \ + $(SERIAL_PATH)/tests/frame_validator_tests.cpp \ + $(SERIAL_PATH)/protocol/frame_validator.c + serial_link_frame_router_SRC := \ $(SERIAL_PATH)/tests/frame_router_tests.cpp \ $(SERIAL_PATH)/protocol/byte_stuffer.c \ $(SERIAL_PATH)/protocol/frame_validator.c \ $(SERIAL_PATH)/protocol/frame_router.c -serial_link_frame_validator_SRC := \ - $(SERIAL_PATH)/tests/frame_validator_tests.cpp \ - $(SERIAL_PATH)/protocol/frame_validator.c +serial_link_triple_buffered_object_SRC := \ + $(SERIAL_PATH)/tests/triple_buffered_object_tests.cpp \ + $(SERIAL_PATH)/protocol/triple_buffered_object.c serial_link_transport_SRC := \ $(SERIAL_PATH)/tests/transport_tests.cpp \ $(SERIAL_PATH)/protocol/transport.c \ - $(SERIAL_PATH)/protocol/triple_buffered_object.c \ No newline at end of file + $(SERIAL_PATH)/protocol/triple_buffered_object.c diff --git a/quantum/serial_link/tests/testlist.mk b/quantum/serial_link/tests/testlist.mk index 4a734b1e1c..a80e888849 100644 --- a/quantum/serial_link/tests/testlist.mk +++ b/quantum/serial_link/tests/testlist.mk @@ -1,6 +1,6 @@ TEST_LIST +=\ serial_link_byte_stuffer\ - serial_link_frame_router\ serial_link_frame_validator\ - serial_link_transport\ - serial_link_triple_buffered_object \ No newline at end of file + serial_link_frame_router\ + serial_link_triple_buffered_object\ + serial_link_transport \ No newline at end of file diff --git a/quantum/serial_link/tests/triple_buffered_object_tests.c b/quantum/serial_link/tests/triple_buffered_object_tests.c deleted file mode 100644 index 6f7c82b468..0000000000 --- a/quantum/serial_link/tests/triple_buffered_object_tests.c +++ /dev/null @@ -1,82 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include "serial_link/protocol/triple_buffered_object.c" - -typedef struct { - uint8_t state; - uint32_t buffer[3]; -}test_object_t; - -test_object_t test_object; - -Describe(TripleBufferedObject); -BeforeEach(TripleBufferedObject) { - triple_buffer_init((triple_buffer_object_t*)&test_object); -} -AfterEach(TripleBufferedObject) {} - - -Ensure(TripleBufferedObject, writes_and_reads_object) { - *triple_buffer_begin_write(&test_object) = 0x3456ABCC; - triple_buffer_end_write(&test_object); - assert_that(*triple_buffer_read(&test_object), is_equal_to(0x3456ABCC)); -} - -Ensure(TripleBufferedObject, does_not_read_empty) { - assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); -} - -Ensure(TripleBufferedObject, writes_twice_and_reads_object) { - *triple_buffer_begin_write(&test_object) = 0x3456ABCC; - triple_buffer_end_write(&test_object); - *triple_buffer_begin_write(&test_object) = 0x44778899; - triple_buffer_end_write(&test_object); - assert_that(*triple_buffer_read(&test_object), is_equal_to(0x44778899)); -} - -Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { - *triple_buffer_begin_write(&test_object) = 1; - triple_buffer_end_write(&test_object); - uint32_t* read = triple_buffer_read(&test_object); - *triple_buffer_begin_write(&test_object) = 2; - triple_buffer_end_write(&test_object); - assert_that(*read, is_equal_to(1)); - assert_that(*triple_buffer_read(&test_object), is_equal_to(2)); - assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); -} - -Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { - *triple_buffer_begin_write(&test_object) = 1; - triple_buffer_end_write(&test_object); - uint32_t* read = triple_buffer_read(&test_object); - *triple_buffer_begin_write(&test_object) = 2; - triple_buffer_end_write(&test_object); - *triple_buffer_begin_write(&test_object) = 3; - triple_buffer_end_write(&test_object); - assert_that(*read, is_equal_to(1)); - assert_that(*triple_buffer_read(&test_object), is_equal_to(3)); - assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); -} diff --git a/quantum/serial_link/tests/triple_buffered_object_tests.cpp b/quantum/serial_link/tests/triple_buffered_object_tests.cpp new file mode 100644 index 0000000000..7724bbee9c --- /dev/null +++ b/quantum/serial_link/tests/triple_buffered_object_tests.cpp @@ -0,0 +1,84 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "gtest/gtest.h" +extern "C" { +#include "serial_link/protocol/triple_buffered_object.h" +} + +struct test_object{ + uint8_t state; + uint32_t buffer[3]; +}; + +test_object test_object; + +class TripleBufferedObject : public testing::Test { +public: + TripleBufferedObject() { + triple_buffer_init((triple_buffer_object_t*)&test_object); + } +}; + +TEST_F(TripleBufferedObject, writes_and_reads_object) { + *triple_buffer_begin_write(&test_object) = 0x3456ABCC; + triple_buffer_end_write(&test_object); + EXPECT_EQ(*triple_buffer_read(&test_object), 0x3456ABCC); +} + +TEST_F(TripleBufferedObject, does_not_read_empty) { + EXPECT_EQ(triple_buffer_read(&test_object), nullptr); +} + +TEST_F(TripleBufferedObject, writes_twice_and_reads_object) { + *triple_buffer_begin_write(&test_object) = 0x3456ABCC; + triple_buffer_end_write(&test_object); + *triple_buffer_begin_write(&test_object) = 0x44778899; + triple_buffer_end_write(&test_object); + EXPECT_EQ(*triple_buffer_read(&test_object), 0x44778899); +} + +TEST_F(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { + *triple_buffer_begin_write(&test_object) = 1; + triple_buffer_end_write(&test_object); + uint32_t* read = triple_buffer_read(&test_object); + *triple_buffer_begin_write(&test_object) = 2; + triple_buffer_end_write(&test_object); + EXPECT_EQ(*read, 1); + EXPECT_EQ(*triple_buffer_read(&test_object), 2); + EXPECT_EQ(triple_buffer_read(&test_object), nullptr); +} + +TEST_F(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { + *triple_buffer_begin_write(&test_object) = 1; + triple_buffer_end_write(&test_object); + uint32_t* read = triple_buffer_read(&test_object); + *triple_buffer_begin_write(&test_object) = 2; + triple_buffer_end_write(&test_object); + *triple_buffer_begin_write(&test_object) = 3; + triple_buffer_end_write(&test_object); + EXPECT_EQ(*read, 1); + EXPECT_EQ(*triple_buffer_read(&test_object), 3); + EXPECT_EQ(triple_buffer_read(&test_object), nullptr); +} -- cgit v1.2.3 From 7eefb34e7c4f162b9568ff880d0e4e5214e1b9c9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 14:53:57 +0300 Subject: Detect failures when running multiple tests Also add better output. --- Makefile | 13 +++++++++++-- message.mk | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5f5c46860c..b7ef5f92a3 100644 --- a/Makefile +++ b/Makefile @@ -415,7 +415,15 @@ define BUILD_TEST MAKE_MSG := $$(MSG_MAKE_TEST) $$(eval $$(call BUILD)) TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf - TESTS += $$(TEST_EXECUTABLE) + TESTS += $$(TEST_NAME) + TEST_MSG := $$(MSG_TEST) + $$(TEST_NAME)_COMMAND := \ + printf "$$(TEST_MSG)\n"; \ + $$(TEST_EXECUTABLE); \ + if [ $$$$? -gt 0 ]; \ + then error_occured=1; \ + fi; \ + printf "\n"; endef define PARSE_TEST @@ -472,7 +480,8 @@ $(SUBPROJECTS): %: %-allkm +error_occured=0; \ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ - $(foreach TEST,$(TESTS),$(TEST);) + $(foreach TEST,$(TESTS),$($(TEST)_COMMAND)) \ + if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ # All should compile everything .PHONY: all diff --git a/message.mk b/message.mk index 96814986b5..fa051fd712 100644 --- a/message.mk +++ b/message.mk @@ -76,3 +76,4 @@ define GENERATE_MSG_MAKE_TEST endif endef MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL) +MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR) -- cgit v1.2.3 From 42baa6cf43ab1da79887e74b9ad71379c13094f9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 17:43:35 +0300 Subject: Disable map file creation when building tests It causes strange linker warnings on cygwin. --- build_test.mk | 1 + tmk_core/rules.mk | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/build_test.mk b/build_test.mk index 9f5d6e0af2..ee15a45726 100644 --- a/build_test.mk +++ b/build_test.mk @@ -31,6 +31,7 @@ $(GTEST_OUTPUT)_DEFS := $(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC) LDFLAGS += -lstdc++ -lpthread -shared-libgcc +CREATE_MAP := no VPATH +=\ $(LIB_PATH)/googletest\ diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 317f55e083..695fe0badf 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -161,6 +161,7 @@ SCANF_LIB = MATH_LIB = -lm +CREATE_MAP ?= yes #---------------- Linker Options ---------------- @@ -171,7 +172,10 @@ MATH_LIB = -lm # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref + +ifeq ($(CREATE_MAP),yes) + LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +endif #LDFLAGS += -Wl,--relax LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) -- cgit v1.2.3 From 1b963117fedf91e4bef97d75eb4e3e0b3b1e1dfd Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:01:59 +0300 Subject: Support for running and cleaning all tests --- Makefile | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index b7ef5f92a3..78bf50ed41 100644 --- a/Makefile +++ b/Makefile @@ -414,23 +414,29 @@ define BUILD_TEST MAKE_VARS := TEST=$$(TEST_NAME) MAKE_MSG := $$(MSG_MAKE_TEST) $$(eval $$(call BUILD)) - TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf - TESTS += $$(TEST_NAME) - TEST_MSG := $$(MSG_TEST) - $$(TEST_NAME)_COMMAND := \ - printf "$$(TEST_MSG)\n"; \ - $$(TEST_EXECUTABLE); \ - if [ $$$$? -gt 0 ]; \ - then error_occured=1; \ - fi; \ - printf "\n"; + ifneq ($$(MAKE_TARGET),clean) + TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf + TESTS += $$(TEST_NAME) + TEST_MSG := $$(MSG_TEST) + $$(TEST_NAME)_COMMAND := \ + printf "$$(TEST_MSG)\n"; \ + $$(TEST_EXECUTABLE); \ + if [ $$$$? -gt 0 ]; \ + then error_occured=1; \ + fi; \ + printf "\n"; + endif endef define PARSE_TEST TESTS := TEST_NAME := $$(firstword $$(subst -, ,$$(RULE))) TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE))) - MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),)) + ifeq ($$(TEST_NAME),all) + MATCHED_TESTS := $$(TEST_LIST) + else + MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),)) + endif $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET)))) endef @@ -494,6 +500,11 @@ all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-allsp-default +.PHONY: test +test: test-all + +.PHONY: test-clean +test-clean: test-all-clean # Generate the version.h file GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") -- cgit v1.2.3 From 6410f0c021792ebbbd279fc6150f197274e914c8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:13:01 +0300 Subject: The all target makes all keyboards and all tests --- Makefile | 6 +++++- build_keyboard.mk | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 78bf50ed41..0aaf585786 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,10 @@ ifndef VERBOSE .SILENT: endif +# Never run this makefile in parallel, as it could screw things up +# It won't affect the submakes, so you still get the speedup from specifying -jx +.NOTPARALLEL: + # Allow the silent with lower caps to work the same way as upper caps ifdef silent SILENT = $(silent) @@ -491,7 +495,7 @@ $(SUBPROJECTS): %: %-allkm # All should compile everything .PHONY: all -all: all-keyboards +all: all-keyboards test-all # Define some shortcuts, mostly for compability with the old syntax .PHONY: all-keyboards diff --git a/build_keyboard.mk b/build_keyboard.mk index 5bec4ecf66..04632c1c94 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -198,9 +198,6 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes) include $(VISUALIZER_PATH)/visualizer.mk endif -$(info $(VPATH)) - - OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" -- cgit v1.2.3 From 6b92b6280290d87d1c54555652dbc4d7fb7414d1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:13:52 +0300 Subject: Travis builds the default all target --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 138a2c5532..ebeabc8296 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ env: global: - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM= script: -- make all-keyboards AUTOGEN=true +- make AUTOGEN=true addons: apt: packages: -- cgit v1.2.3 From 03b1d142f2df39a98fd8013f364580c8534d044c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:59:22 +0300 Subject: Add -p parameter to mkdir So that it's created even when there's a deeper structure --- tmk_core/rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 695fe0badf..79fc7119a6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -364,10 +364,10 @@ show_path: @echo OBJ=$(OBJ) # Create build directory -$(shell mkdir $(BUILD_DIR) 2>/dev/null) +$(shell mkdir -p $(BUILD_DIR) 2>/dev/null) # Create object files directory -$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir $(OUTPUT) 2>/dev/null))) +$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null))) # Include the dependency files. -include $(patsubst %.o,%.d,$(OBJ)) -- cgit v1.2.3 From fd93a9bb2969f8779a4d10d1190ab2a29128cd66 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 19:03:24 +0300 Subject: Make tests and keyboards in two different jobs --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ebeabc8296..3a68139eb8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,8 @@ env: global: - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM= script: -- make AUTOGEN=true +- make all-keyboards AUTOGEN=true +- make test addons: apt: packages: -- cgit v1.2.3 From ca5145732777ee4ca6cd607fc426fe15a1c3de51 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 19:36:14 +0300 Subject: Another attempt to make keyboards and tests in parallel --- .travis.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3a68139eb8..f4c918a5ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,10 @@ env: global: - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM= script: -- make all-keyboards AUTOGEN=true -- make test +- make $TARGET AUTOGEN=$AUTOGEN +env: +- TARGET=all-keyboards AUTOGEN=true +- TARGET=test AUTOGEN=false addons: apt: packages: @@ -23,4 +25,7 @@ addons: - binutils-arm-none-eabi - libnewlib-arm-none-eabi - diffutils -after_success: bash util/travis_compiled_push.sh +after_success: + if [ "$AUTOGEN" == "true" ]; then + bash util/travis_compiled_push.sh; + fi -- cgit v1.2.3 From 922c4ea3bc46f6246d9f67ead11bcf53ff947ef3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 20:09:01 +0300 Subject: Add unit test documentation --- readme.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/readme.md b/readme.md index 473fd6a7cf..762c39aa92 100644 --- a/readme.md +++ b/readme.md @@ -1137,3 +1137,54 @@ Here is where you can (optionally) define your `KEYMAP` function to remap your m ``` Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. + +# Unit Testing + +If you are new to unit testing, then you can find many good resources on internet. However most of it is scattered around in small pieces here and there, and there's also many different opinions, so I won't give any recommendations. + +Instead I recommend these two books, explaining two different styles of Unit Testing in detail. + +* "Test Driven Development: By Example: Kent Beck" +* "Growing Object-Oriented Software, Guided By Tests: Steve Freeman, Nat Pryce" + +If you prefer videos there are Uncle Bob's [Clean Coders Videos](https://cleancoders.com/), which unfortunately cost quite a bit, especially if you want to watch many of them. But James Shore has a free [Let's Play](http://www.jamesshore.com/Blog/Lets-Play) video series. + +## Google Test and Google Mock +It's possible to Unit Test your code using [Google Test](https://github.com/google/googletest). The Google Test framework also includes another component for writing testing mocks and stubs, called "Google Mock". For information how to write the actual tests, please refer to the documentation on that site. + +## Use of C++ + +Note that Google Test and therefore any test has to be written in C++, even if the rest of the QMK codebases is written in C. This should hopefully not be a problem even if you don't know any C++, since there's quite clear documentation and examples of the required C++ features, and you can write the rest of the test code almost as you would write normal C. Note that some compiler errors which you might get can look quite scary, but just read carefully what it says, and you should be ok. + +One thing to remember, is that you have to append `extern "C"` around all of your C file includes. + +## Adding tests for new or existing features + +If you want to unit test some feature, then take a look at the existing serial_link tests, in the `quantum/serial_link/tests folder`, and follow the steps below to create a similar structure. + +1. If it doesn't already exist, add a test subfolder to the folder containing the feature. +2. Create a `testlist.mk` and a `rules.mk` file in that folder. +3. Include those files from the root folder `testlist.mk`and `build_test.mk` respectively. +4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the serial_link tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests. +5. Define the source files and required options in the `rules.mk` file. + * `_SRC` for source files + * `_DEFS` for additional defines + * `_INC` for additional include folders +6. Write the tests in a new cpp file inside the test folder you created. That file has to be one of the files included from the `rules.mk` file. + +Note how there's several different tests, each mocking out a separate part. Also note that each of them only compiles the very minimum that's needed for the tests. It's recommend that you try to do the same. For a relevant video check out [Matt Hargett "Advanced Unit Testing in C & C++](https://www.youtube.com/watch?v=Wmy6g-aVgZI) + +## Running the tests + +To run all the tests in the codebase, type `make test`. You can also run test matching a substring by typing `make test-matchingsubstring` Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer. + +## Debugging the tests + +If there are problems with the tests, you can find the executable in the `./build/test` folder. You should be able to run those with GDB or a similar debugger. + +## Full Integration tests + +It's not yet possible to do a full integration test, where you would compile the whole firmware and define a keymap that you are going to test. However there are plans for doing that, because writing tests that way would probably be easier, at least for people that are not used to unit testing. + +In that model you would emulate the input, and expect a certain output from the emulated keyboard. + -- cgit v1.2.3 From 1f5838a28679975f689e35471a35720ed5c7e7c5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 23:29:37 +0300 Subject: Fix the keyboard template with new make syntax Also add proper link to the parent --- quantum/template/readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/quantum/template/readme.md b/quantum/template/readme.md index b2fb4dd98d..b16f4cd768 100644 --- a/quantum/template/readme.md +++ b/quantum/template/readme.md @@ -3,7 +3,7 @@ ## Quantum MK Firmware -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). +For the full Quantum feature list, see [the parent readme](/). ## Building @@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight ### Default -To build with the default keymap, simply run `make`. +To build with the default keymap, simply run `make default`. ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. -To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make keymap=[default|jack|] +$ make [default|jack|] ``` -Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. -- cgit v1.2.3 From 53302328d0425bacdf4b0a763699308b9179f5ff Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 23:43:49 +0300 Subject: Add dfu-util to the instructions --- readme.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 473fd6a7cf..e905fb6b70 100644 --- a/readme.md +++ b/readme.md @@ -69,11 +69,12 @@ Here are the steps ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. 2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. -3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. -4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! -7. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. +3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). +4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. +5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. +6. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. +7. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! +8. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. ### Mac If you're using [homebrew,](http://brew.sh/) you can use the following commands: @@ -90,6 +91,10 @@ You can also try these instructions: 2. Install the Command Line Tools from `Xcode->Preferences->Downloads`. 3. Install [DFU-Programmer][dfu-prog]. +If you are going to flash Infinity based keyboards you will also need dfu-util + + brew install dfu-util + ### Linux To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. -- cgit v1.2.3 From 8ab9c5c55a0f90266b1c70e40fc034065ad027de Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 23:14:27 +0300 Subject: Rename infinity_chibios to infinity60, and add readme --- keyboards/infinity60/MEMO.txt | 385 +++++++++++++++ keyboards/infinity60/Makefile | 3 + keyboards/infinity60/bootloader_defs.h | 1 + keyboards/infinity60/chconf.h | 524 +++++++++++++++++++++ keyboards/infinity60/config.h | 77 +++ keyboards/infinity60/halconf.h | 353 ++++++++++++++ keyboards/infinity60/infinity60.c | 17 + keyboards/infinity60/infinity60.h | 66 +++ keyboards/infinity60/keymaps/default/keymap.c | 48 ++ keyboards/infinity60/keymaps/depariel/keymap.c | 82 ++++ keyboards/infinity60/keymaps/hasu/keymap.c | 113 +++++ keyboards/infinity60/led.c | 24 + keyboards/infinity60/matrix.c | 171 +++++++ keyboards/infinity60/mcuconf.h | 55 +++ keyboards/infinity60/readme.md | 29 ++ keyboards/infinity60/rules.mk | 66 +++ keyboards/infinity_chibios/MEMO.txt | 385 --------------- keyboards/infinity_chibios/Makefile | 3 - keyboards/infinity_chibios/bootloader_defs.h | 1 - keyboards/infinity_chibios/chconf.h | 524 --------------------- keyboards/infinity_chibios/config.h | 78 --- keyboards/infinity_chibios/halconf.h | 353 -------------- keyboards/infinity_chibios/infinity_chibios.c | 17 - keyboards/infinity_chibios/infinity_chibios.h | 66 --- .../infinity_chibios/keymaps/default/keymap.c | 48 -- .../infinity_chibios/keymaps/depariel/keymap.c | 82 ---- keyboards/infinity_chibios/keymaps/hasu/keymap.c | 113 ----- keyboards/infinity_chibios/led.c | 24 - keyboards/infinity_chibios/matrix.c | 171 ------- keyboards/infinity_chibios/mcuconf.h | 55 --- keyboards/infinity_chibios/rules.mk | 66 --- 31 files changed, 2014 insertions(+), 1986 deletions(-) create mode 100644 keyboards/infinity60/MEMO.txt create mode 100644 keyboards/infinity60/Makefile create mode 100644 keyboards/infinity60/bootloader_defs.h create mode 100644 keyboards/infinity60/chconf.h create mode 100644 keyboards/infinity60/config.h create mode 100644 keyboards/infinity60/halconf.h create mode 100644 keyboards/infinity60/infinity60.c create mode 100644 keyboards/infinity60/infinity60.h create mode 100644 keyboards/infinity60/keymaps/default/keymap.c create mode 100755 keyboards/infinity60/keymaps/depariel/keymap.c create mode 100644 keyboards/infinity60/keymaps/hasu/keymap.c create mode 100644 keyboards/infinity60/led.c create mode 100644 keyboards/infinity60/matrix.c create mode 100644 keyboards/infinity60/mcuconf.h create mode 100644 keyboards/infinity60/readme.md create mode 100644 keyboards/infinity60/rules.mk delete mode 100644 keyboards/infinity_chibios/MEMO.txt delete mode 100644 keyboards/infinity_chibios/Makefile delete mode 100644 keyboards/infinity_chibios/bootloader_defs.h delete mode 100644 keyboards/infinity_chibios/chconf.h delete mode 100644 keyboards/infinity_chibios/config.h delete mode 100644 keyboards/infinity_chibios/halconf.h delete mode 100644 keyboards/infinity_chibios/infinity_chibios.c delete mode 100644 keyboards/infinity_chibios/infinity_chibios.h delete mode 100644 keyboards/infinity_chibios/keymaps/default/keymap.c delete mode 100755 keyboards/infinity_chibios/keymaps/depariel/keymap.c delete mode 100644 keyboards/infinity_chibios/keymaps/hasu/keymap.c delete mode 100644 keyboards/infinity_chibios/led.c delete mode 100644 keyboards/infinity_chibios/matrix.c delete mode 100644 keyboards/infinity_chibios/mcuconf.h delete mode 100644 keyboards/infinity_chibios/rules.mk diff --git a/keyboards/infinity60/MEMO.txt b/keyboards/infinity60/MEMO.txt new file mode 100644 index 0000000000..e2886aa002 --- /dev/null +++ b/keyboards/infinity60/MEMO.txt @@ -0,0 +1,385 @@ +flabbergast's TMK/ChibiOS port +============================== +2015/10/16 + + +Build +----- +$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git + +$ cd tmk_keyboard +$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios +or +$ cd tmk_keyboard/tmk_core/tool/chibios +$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios + +$ cd tmk_keyboard/keyboard/infinity_chibios +$ make + + + + +Chibios Configuration +--------------------- +halconf.h: for HAL configuration + placed in project directory + read in chibios/os/hal/hal.mk + included in chibios/os/hal/include/hal.h +mcuconf.h: for MCU configuration + placed in project directory + included in halconf.h + + +Chibios Term +------------ +PAL = Port Abstraction Layer + palWritePad + palReadPad + palSetPad + chibios/os/hal/include/pal.h + +LLD = Low Level Driver + + +Makefile +-------- + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = KINETIS + MCU_SERIES = KL2x + + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT = MKL26Z64 + + # - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP = kl2x + + # Board: it should exist either in /os/hal/boards/ + # or /boards + BOARD = PJRC_TEENSY_LC + + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + +halconf.h +--------- + + +mcuconf.h +--------- + + +chconf.h +-------- + + +ld script +--------- +--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900 ++++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900 +@@ -27,7 +27,8 @@ + { + flash0 : org = 0x00000000, len = 0xc0 + flashcfg : org = 0x00000400, len = 0x10 +- flash : org = 0x00000410, len = 64k - 0x410 ++ flash : org = 0x00000410, len = 62k - 0x410 ++ eeprom_emu : org = 0x0000F800, len = 2k + ram : org = 0x1FFFF800, len = 8k + } + +@@ -35,6 +36,10 @@ + __ram_size__ = LENGTH(ram); + __ram_end__ = __ram_start__ + __ram_size__; + ++__eeprom_workarea_start__ = ORIGIN(eeprom_emu); ++__eeprom_workarea_size__ = LENGTH(eeprom_emu); ++__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; ++ + SECTIONS + { + . = 0; + + + +Configuration/Startup for Infinity 60% +-------------------------------------- +Configuration: + + +Clock: +Inifinity + FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz + Clock dividor: + SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock + SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock + SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock + Internal reference clock: + MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL + MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable + FLL multipilication: + MCG_C4[DMX32] = 1 + MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz + +chibios/os/hal/ports/KINETIS/K20x/hal_lld.c + k20x_clock_init(): called in __early_init() defined in board.c + disable watchdog and configure clock + + configurable macros: + KINETIS_NO_INIT: whether init or not + KINETIS_MCG_MODE: clock mode + KINETIS_MCG_MODE_FEI + KINETIS_MCG_MODE_PEE + hal/ports/KINETIS/K20x/hal_lld.h + + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h + PALConfig pal_default_config + boardInit() + __early_init() + macro definitions for board infos, freq and mcu type + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c + +USB + + +Startup +------- + common/ports/ARMCMx/GCC/crt0_v[67]m.s + Reset_Handler: startup code + common/ports/ARMCMx/GCC/crt1.c + __core_init(): weak + __early_init(): weak + __late_init(): weak + __default_exit(): weak + called from Reset_Handler of crt0 + common/ports/ARMCMx/GCC/vector.c + common/ports/ARMCMx/GCC/ld/*.ld + +chibios/os/common/ports/ARMCMx/compilers/GCC/ +├── crt0_v6m.s +├── crt0_v7m.s +├── crt1.c +├── ld +│   ├── MK20DX128BLDR3.ld +│   ├── MK20DX128BLDR4.ld +│   ├── MK20DX128.ld +│   ├── MK20DX256.ld +│   ├── MKL25Z128.ld +│   ├── MKL26Z128.ld +│   ├── MKL26Z64.ld +│   └── STM32L476xG.ld +├── mk +│   ├── startup_k20x5.mk +│   ├── startup_k20x7.mk +│   ├── startup_k20x.mk +│   ├── startup_kl2x.mk +│   └── startup_stm32l4xx.mk +├── rules.ld +├── rules.mk +└── vectors.c + +chibios/os/hal/ +├── boards +│   ├── FREESCALE_FREEDOM_K20D50M +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── MCHCK_K20 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3_1 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_LC +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── readme.txt +│   ├── simulator +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── ST_NUCLEO_F030R8 +│   │   ├── board.c +│   │   ├── board.h +│   │   ├── board.mk +│   │   └── cfg +│   │   └── board.chcfg +├── hal.mk +├── include +│   ├── adc.h +│   ├── can.h +│   ├── dac.h +│   ├── ext.h +│   ├── gpt.h +│   ├── hal_channels.h +│   ├── hal_files.h +│   ├── hal.h +│   ├── hal_ioblock.h +│   ├── hal_mmcsd.h +│   ├── hal_queues.h +│   ├── hal_streams.h +│   ├── i2c.h +│   ├── i2s.h +│   ├── icu.h +│   ├── mac.h +│   ├── mii.h +│   ├── mmc_spi.h +│   ├── pal.h +│   ├── pwm.h +│   ├── rtc.h +│   ├── sdc.h +│   ├── serial.h +│   ├── serial_usb.h +│   ├── spi.h +│   ├── st.h +│   ├── uart.h +│   └── usb.h +├── lib +│   └── streams +│   ├── chprintf.c +│   ├── chprintf.h +│   ├── memstreams.c +│   ├── memstreams.h +│   ├── nullstreams.c +│   └── nullstreams.h +├── osal +│   ├── nil +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   ├── os-less +│   │   └── ARMCMx +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   └── rt +│   ├── osal.c +│   ├── osal.h +│   └── osal.mk +├── ports +│   ├── AVR +│   ├── common +│   │   └── ARMCMx +│   │   ├── mpu.h +│   │   ├── nvic.c +│   │   └── nvic.h +│   ├── KINETIS +│   │   ├── K20x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.dox +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   ├── pwm_lld.h +│   │   │   ├── spi_lld.c +│   │   │   └── spi_lld.h +│   │   ├── KL2x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   └── pwm_lld.h +│   │   ├── LLD +│   │   │   ├── adc_lld.c +│   │   │   ├── adc_lld.h +│   │   │   ├── ext_lld.c +│   │   │   ├── ext_lld.h +│   │   │   ├── gpt_lld.c +│   │   │   ├── gpt_lld.h +│   │   │   ├── i2c_lld.c +│   │   │   ├── i2c_lld.h +│   │   │   ├── pal_lld.c +│   │   │   ├── pal_lld.h +│   │   │   ├── serial_lld.c +│   │   │   ├── serial_lld.h +│   │   │   ├── st_lld.c +│   │   │   ├── st_lld.h +│   │   │   ├── usb_lld.c +│   │   │   └── usb_lld.h +│   │   └── README.md +│   ├── LPC +│   ├── simulator +│   └── STM32 +├── src +│   ├── adc.c +│   ├── can.c +│   ├── dac.c +│   ├── ext.c +│   ├── gpt.c +│   ├── hal.c +│   ├── hal_mmcsd.c +│   ├── hal_queues.c +│   ├── i2c.c +│   ├── i2s.c +│   ├── icu.c +│   ├── mac.c +│   ├── mmc_spi.c +│   ├── pal.c +│   ├── pwm.c +│   ├── rtc.c +│   ├── sdc.c +│   ├── serial.c +│   ├── serial_usb.c +│   ├── spi.c +│   ├── st.c +│   ├── uart.c +│   └── usb.c +└── templates + ├── adc_lld.c + ├── adc_lld.h + ├── can_lld.c + ├── can_lld.h + ├── dac_lld.c + ├── dac_lld.h + ├── ext_lld.c + ├── ext_lld.h + ├── gpt_lld.c + ├── gpt_lld.h + ├── halconf.h + ├── hal_lld.c + ├── hal_lld.h + ├── i2c_lld.c + ├── i2c_lld.h + ├── i2s_lld.c + ├── i2s_lld.h + ├── icu_lld.c + ├── icu_lld.h + ├── mac_lld.c + ├── mac_lld.h + ├── mcuconf.h + ├── osal + │   ├── osal.c + │   ├── osal.h + │   └── osal.mk + ├── pal_lld.c + ├── pal_lld.h + ├── platform.mk + ├── pwm_lld.c + ├── pwm_lld.h + ├── rtc_lld.c + ├── rtc_lld.h + ├── sdc_lld.c + ├── sdc_lld.h + ├── serial_lld.c + ├── serial_lld.h + ├── spi_lld.c + ├── spi_lld.h + ├── st_lld.c + ├── st_lld.h + ├── uart_lld.c + ├── uart_lld.h + ├── usb_lld.c + └── usb_lld.h diff --git a/keyboards/infinity60/Makefile b/keyboards/infinity60/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/infinity60/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/infinity60/bootloader_defs.h b/keyboards/infinity60/bootloader_defs.h new file mode 100644 index 0000000000..c67153be60 --- /dev/null +++ b/keyboards/infinity60/bootloader_defs.h @@ -0,0 +1 @@ +#define KIIBOHD_BOOTLOADER diff --git a/keyboards/infinity60/chconf.h b/keyboards/infinity60/chconf.h new file mode 100644 index 0000000000..43c845739a --- /dev/null +++ b/keyboards/infinity60/chconf.h @@ -0,0 +1,524 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 32 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 1000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 0 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 20 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/* Use __WFI in the idle thread for waiting. Does lower the power + * consumption. */ +#define CORTEX_ENABLE_WFI_IDLE TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS TRUE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK FALSE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS FALSE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS FALSE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_BUFFER_SIZE 128 + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK FALSE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS FALSE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/keyboards/infinity60/config.h b/keyboards/infinity60/config.h new file mode 100644 index 0000000000..f8346fe165 --- /dev/null +++ b/keyboards/infinity60/config.h @@ -0,0 +1,77 @@ +/* +Copyright 2015 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#define PREVENT_STUCK_MODIFIERS + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c borks */ +#define MANUFACTURER "Input Club" +#define USBSTR_MANUFACTURER 'I', '\x00', 'n', '\x00', 'p', '\x00', 'u', '\x00', 't', '\x00', ' ', '\x00', 'C', '\x00', 'l', '\x00', 'u', '\x00', 'b', '\x00' +#define PRODUCT "Infinity keyboard/QMK" +#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00' +/* key matrix size */ +#define MATRIX_ROWS 9 +#define MATRIX_COLS 7 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Keymap for Infinity prototype */ +//#define INFINITY_PROTOTYPE + +/* Keymap for Infinity 1.1a (first revision with LED support) */ +//#define INFINITY_LED + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/infinity60/halconf.h b/keyboards/infinity60/halconf.h new file mode 100644 index 0000000000..46b37a4f46 --- /dev/null +++ b/keyboards/infinity60/halconf.h @@ -0,0 +1,353 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB TRUE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/infinity60/infinity60.c b/keyboards/infinity60/infinity60.c new file mode 100644 index 0000000000..e471250feb --- /dev/null +++ b/keyboards/infinity60/infinity60.c @@ -0,0 +1,17 @@ +/* +Copyright 2012,2013 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#include "infinity60.h" diff --git a/keyboards/infinity60/infinity60.h b/keyboards/infinity60/infinity60.h new file mode 100644 index 0000000000..f1ba15e489 --- /dev/null +++ b/keyboards/infinity60/infinity60.h @@ -0,0 +1,66 @@ +/* +Copyright 2014 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#ifndef KEYMAP_COMMON_H +#define KEYMAP_COMMON_H + +#include "quantum.h" + +#ifdef INFINITY_PROTOTYPE + +/* Infinity prototype */ +#define KEYMAP( \ + K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \ + K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \ + K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \ + K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \ + K06, K16, K26, K36, K46, K56, K66, K76 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06 }, \ + { K10, K11, K12, K13, K14, K15, K16 }, \ + { K20, K21, K22, K23, K24, K25, K26 }, \ + { K30, K31, K32, K33, K34, K35, K36 }, \ + { K40, K41, K42, K43, K44, K45, K46 }, \ + { K50, K51, K52, K53, K54, K55, K56 }, \ + { K60, K61, K62, K63, K64, K65, K66 }, \ + { K70, K71, K72, K73, K74, K75, K76 }, \ + { K80, K81, K82, K83, K84, K85, K86 } \ +} + +#else + +/* Infinity production */ +#define KEYMAP( \ + K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \ + K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \ + K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \ + K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \ + K16, K26, K36, K46, K56, K66, K76, K86 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06 }, \ + { K10, K11, K12, K13, K14, K15, K16 }, \ + { K20, K21, K22, K23, K24, K25, K26 }, \ + { K30, K31, K32, K33, K34, K35, K36 }, \ + { K40, K41, K42, K43, K44, K45, K46 }, \ + { K50, K51, K52, K53, K54, K55, K56 }, \ + { K60, K61, K62, K63, K64, K65, K66 }, \ + { K70, K71, K72, K73, K74, K75, K76 }, \ + { K80, K81, K82, K83, K84, K85, K86 } \ +} + +#endif + +#endif diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c new file mode 100644 index 0000000000..4434128579 --- /dev/null +++ b/keyboards/infinity60/keymaps/default/keymap.c @@ -0,0 +1,48 @@ +#include "infinity60.h" + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |-----------------------------------------------------------| + * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| + * |-----------------------------------------------------------' + * | |Gui|Alt | Space |Alt |Gui| | | + * `-----------------------------------------------------------' + */ + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_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_ENT, \ + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \ + KC_NO, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_NO, KC_NO), + + /* Layer 1: HHKB mode (HHKB Fn) + * ,-----------------------------------------------------------. + * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| + * |-----------------------------------------------------------| + * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | + * |-----------------------------------------------------------| + * | | | | | | | +| -|End|PgD|Dow| | | + * `-----------------------------------------------------------' + * | |Gui|Alt | Space |Alt |Gui| | | + * `-----------------------------------------------------------' + */ + [1] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), +}; + +const uint16_t fn_actions[] = { + +}; + diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/infinity60/keymaps/depariel/keymap.c new file mode 100755 index 0000000000..7412b9b9dd --- /dev/null +++ b/keyboards/infinity60/keymaps/depariel/keymap.c @@ -0,0 +1,82 @@ +#include "infinity60.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp| + * |-----------------------------------------------------------| + * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| + * |-----------------------------------------------------------' + * |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next| + * `-----------------------------------------------------------' + */ + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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, LT(5, KC_ENT), \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(4), \ + MO(4), KC_LGUI, KC_LALT, LT(3, KC_SPC), KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), + + /* Layer 1: "Toggle" off SpaceFn for League of Legends + */ + [1] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(4), \ + MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), + + /* Layer 2: "Toggle" off SpaceFn for MapleRoyals + */ + [2] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_LSFT, \ + MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Layer 3: FN layer 1 + */ + [3] = KEYMAP( + KC_NO, 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_NO, KC_NO, \ + KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \ + MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \ + LGUI(KC_SPC), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_CALC, KC_MENU, KC_TRNS, TG(4), \ + KC_TRNS, KC_TRNS, KC_TRNS, LT(3, KC_SPC), KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU), + + /* Layer 4: FN layer 2 + */ + [4] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \ + KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \ + KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_RSFT, MO(4), \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PDOT, KC_NO, TG(1)), + + /* Layer 5: FN layer 3 + */ + [5] = KEYMAP( + 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_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_NO, KC_NO, KC_NO), + + /* Layer 6: FN layer 4 + */ + [6] = KEYMAP( + 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, \ + LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), 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_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/infinity60/keymaps/hasu/keymap.c new file mode 100644 index 0000000000..d3728869ab --- /dev/null +++ b/keyboards/infinity60/keymaps/hasu/keymap.c @@ -0,0 +1,113 @@ +#include "infinity60.h" + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |-----------------------------------------------------------| + * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| + * |-----------------------------------------------------------' + * | |Gui|Alt | Space |Alt |Gui| | | + * `-----------------------------------------------------------' + */ + [0] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \ + OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \ + KC_NO, KC_LGUI,KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI,KC_NO, KC_NO), + + /* Layer 1: HHKB mode (HHKB Fn) + * ,-----------------------------------------------------------. + * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| + * |-----------------------------------------------------------| + * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | + * |-----------------------------------------------------------| + * | | | | | | | +| -|End|PgD|Dow| | | + * `-----------------------------------------------------------' + * | |Gui|Alt | Space |Alt |Gui| | | + * `-----------------------------------------------------------' + */ + [1] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC, \ + KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \ + KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS, \ + KC_TRNS,KC_LGUI,KC_LALT, KC_TRNS, KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS), + + /* Layer 2: Vi mode[Slash] + * ,-----------------------------------------------------------. + * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs| + * |-----------------------------------------------------------| + * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return | + * |-----------------------------------------------------------| + * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | | + * `-----------------------------------------------------------' + * |Gui|Alt | Space |Alt |Gui| + * `-------------------------------------------' + */ + [2] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC, \ + KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT, \ + KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS, \ + KC_TRNS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_TRNS, KC_TRNS), + + /* Layer 3: Mouse mode(IJKL)[Semicolon] + * ,-----------------------------------------------------------. + * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T| + * |-----------------------------------------------------------| + * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return | + * |-----------------------------------------------------------| + * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | | + * `-----------------------------------------------------------' + * |Gui |Alt | Mb1 |Fn |Fn | + * `--------------------------------------------' + * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel + */ + [3] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \ + KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_TRNS, \ + KC_TRNS, KC_LGUI,KC_LALT, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + /* Layer 4: Mouse mode(IJKL)[Space] + * ,-----------------------------------------------------------. + * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T| + * |-----------------------------------------------------------| + * |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return | + * |-----------------------------------------------------------| + * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | | + * `-----------------------------------------------------------' + * |Gui |Alt | Mb1 |Fn |Fn | + * `--------------------------------------------' + * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel + */ + [4] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \ + KC_LCTL, KC_VOLD,KC_VOLU,KC_MUTE,KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, KC_BTN1,KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT),ALT_T(KC_RGHT),KC_NO, KC_RSFT,KC_TRNS, \ + KC_TRNS, KC_LGUI,KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), + +}; + +/* + * Fn action definition + */ +const uint16_t fn_actions[] = { + +}; diff --git a/keyboards/infinity60/led.c b/keyboards/infinity60/led.c new file mode 100644 index 0000000000..aed66c7c03 --- /dev/null +++ b/keyboards/infinity60/led.c @@ -0,0 +1,24 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "hal.h" + +#include "led.h" + + +void led_set(uint8_t usb_led) { +} diff --git a/keyboards/infinity60/matrix.c b/keyboards/infinity60/matrix.c new file mode 100644 index 0000000000..62c165aa53 --- /dev/null +++ b/keyboards/infinity60/matrix.c @@ -0,0 +1,171 @@ +#include +#include +#include +#include "hal.h" +#include "timer.h" +#include "wait.h" +#include "print.h" +#include "matrix.h" + + +/* + * Infinity Pinusage: + * Column pins are input with internal pull-down. Row pins are output and strobe with high. + * Key is high or 1 when it turns on. + * INFINITY PRODUCTION (NO LED) + * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } + * row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 } + * INFINITY PRODUCTION (WITH LED) + * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } + * row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 } + */ +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; +static bool debouncing = false; +static uint16_t debouncing_time = 0; + + +void matrix_init(void) +{ + /* Column(sense) */ + palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 2, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 3, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); + +#ifdef INFINITY_LED + /* Row(strobe) */ + palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 7, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); +#else + /* Row(strobe) */ + palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 17, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); +#endif + memset(matrix, 0, MATRIX_ROWS); + memset(matrix_debouncing, 0, MATRIX_ROWS); +} + +uint8_t matrix_scan(void) +{ + for (int row = 0; row < MATRIX_ROWS; row++) { + matrix_row_t data = 0; + #ifdef INFINITY_LED + // strobe row + switch (row) { + case 0: palSetPad(GPIOC, 0); break; + case 1: palSetPad(GPIOC, 1); break; + case 2: palSetPad(GPIOC, 2); break; + case 3: palSetPad(GPIOC, 3); break; + case 4: palSetPad(GPIOC, 4); break; + case 5: palSetPad(GPIOC, 5); break; + case 6: palSetPad(GPIOC, 6); break; + case 7: palSetPad(GPIOC, 7); break; + case 8: palSetPad(GPIOD, 0); break; + } + #else + // strobe row + switch (row) { + case 0: palSetPad(GPIOB, 0); break; + case 1: palSetPad(GPIOB, 1); break; + case 2: palSetPad(GPIOB, 2); break; + case 3: palSetPad(GPIOB, 3); break; + case 4: palSetPad(GPIOB, 16); break; + case 5: palSetPad(GPIOB, 17); break; + case 6: palSetPad(GPIOC, 4); break; + case 7: palSetPad(GPIOC, 5); break; + case 8: palSetPad(GPIOD, 0); break; + } + #endif + + wait_us(1); // need wait to settle pin state + + // read col data + data = (palReadPort(GPIOD)>>1); + #ifdef INFINITY_LED + // un-strobe row + switch (row) { + case 0: palClearPad(GPIOC, 0); break; + case 1: palClearPad(GPIOC, 1); break; + case 2: palClearPad(GPIOC, 2); break; + case 3: palClearPad(GPIOC, 3); break; + case 4: palClearPad(GPIOC, 4); break; + case 5: palClearPad(GPIOC, 5); break; + case 6: palClearPad(GPIOC, 6); break; + case 7: palClearPad(GPIOC, 7); break; + case 8: palClearPad(GPIOD, 0); break; + } + #else + // un-strobe row + switch (row) { + case 0: palClearPad(GPIOB, 0); break; + case 1: palClearPad(GPIOB, 1); break; + case 2: palClearPad(GPIOB, 2); break; + case 3: palClearPad(GPIOB, 3); break; + case 4: palClearPad(GPIOB, 16); break; + case 5: palClearPad(GPIOB, 17); break; + case 6: palClearPad(GPIOC, 4); break; + case 7: palClearPad(GPIOC, 5); break; + case 8: palClearPad(GPIOD, 0); break; + } + #endif + + if (matrix_debouncing[row] != data) { + matrix_debouncing[row] = data; + debouncing = true; + debouncing_time = timer_read(); + } + } + + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int row = 0; row < MATRIX_ROWS; row++) { + matrix[row] = matrix_debouncing[row]; + } + debouncing = false; + } + return 1; +} + +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & (1</os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +# - For Infinity KB, SERIES = K20x +MCU_FAMILY = KINETIS +MCU_SERIES = K20x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader +MCU_LDSCRIPT = MK20DX128BLDR4 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 and Infinity KB +# - k20x7 for Teensy 3.1 and 3.2 +MCU_STARTUP = k20x5 + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +# - MCHCK_K20 for Infinity KB +BOARD = MCHCK_K20 + +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m4 + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 7 + +# Vector table for application +# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ +# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB +OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration +## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) +MOUSEKEY_ENABLE ?= yes # Mouse keys +EXTRAKEY_ENABLE ?= yes # Audio control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= yes # Commands for debug and configuration +SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover +CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file diff --git a/keyboards/infinity_chibios/MEMO.txt b/keyboards/infinity_chibios/MEMO.txt deleted file mode 100644 index e2886aa002..0000000000 --- a/keyboards/infinity_chibios/MEMO.txt +++ /dev/null @@ -1,385 +0,0 @@ -flabbergast's TMK/ChibiOS port -============================== -2015/10/16 - - -Build ------ -$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git - -$ cd tmk_keyboard -$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios -or -$ cd tmk_keyboard/tmk_core/tool/chibios -$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios - -$ cd tmk_keyboard/keyboard/infinity_chibios -$ make - - - - -Chibios Configuration ---------------------- -halconf.h: for HAL configuration - placed in project directory - read in chibios/os/hal/hal.mk - included in chibios/os/hal/include/hal.h -mcuconf.h: for MCU configuration - placed in project directory - included in halconf.h - - -Chibios Term ------------- -PAL = Port Abstraction Layer - palWritePad - palReadPad - palSetPad - chibios/os/hal/include/pal.h - -LLD = Low Level Driver - - -Makefile --------- - # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) - MCU_FAMILY = KINETIS - MCU_SERIES = KL2x - - # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ - # or /ld/ - MCU_LDSCRIPT = MKL26Z64 - - # - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ - MCU_STARTUP = kl2x - - # Board: it should exist either in /os/hal/boards/ - # or /boards - BOARD = PJRC_TEENSY_LC - - MCU = cortex-m0 - - # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 - ARMV = 6 - - -halconf.h ---------- - - -mcuconf.h ---------- - - -chconf.h --------- - - -ld script ---------- ---- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900 -+++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900 -@@ -27,7 +27,8 @@ - { - flash0 : org = 0x00000000, len = 0xc0 - flashcfg : org = 0x00000400, len = 0x10 -- flash : org = 0x00000410, len = 64k - 0x410 -+ flash : org = 0x00000410, len = 62k - 0x410 -+ eeprom_emu : org = 0x0000F800, len = 2k - ram : org = 0x1FFFF800, len = 8k - } - -@@ -35,6 +36,10 @@ - __ram_size__ = LENGTH(ram); - __ram_end__ = __ram_start__ + __ram_size__; - -+__eeprom_workarea_start__ = ORIGIN(eeprom_emu); -+__eeprom_workarea_size__ = LENGTH(eeprom_emu); -+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; -+ - SECTIONS - { - . = 0; - - - -Configuration/Startup for Infinity 60% --------------------------------------- -Configuration: - - -Clock: -Inifinity - FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz - Clock dividor: - SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock - SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock - SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock - Internal reference clock: - MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL - MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable - FLL multipilication: - MCG_C4[DMX32] = 1 - MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz - -chibios/os/hal/ports/KINETIS/K20x/hal_lld.c - k20x_clock_init(): called in __early_init() defined in board.c - disable watchdog and configure clock - - configurable macros: - KINETIS_NO_INIT: whether init or not - KINETIS_MCG_MODE: clock mode - KINETIS_MCG_MODE_FEI - KINETIS_MCG_MODE_PEE - hal/ports/KINETIS/K20x/hal_lld.h - - -chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h - PALConfig pal_default_config - boardInit() - __early_init() - macro definitions for board infos, freq and mcu type - -chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c - -USB - - -Startup -------- - common/ports/ARMCMx/GCC/crt0_v[67]m.s - Reset_Handler: startup code - common/ports/ARMCMx/GCC/crt1.c - __core_init(): weak - __early_init(): weak - __late_init(): weak - __default_exit(): weak - called from Reset_Handler of crt0 - common/ports/ARMCMx/GCC/vector.c - common/ports/ARMCMx/GCC/ld/*.ld - -chibios/os/common/ports/ARMCMx/compilers/GCC/ -├── crt0_v6m.s -├── crt0_v7m.s -├── crt1.c -├── ld -│   ├── MK20DX128BLDR3.ld -│   ├── MK20DX128BLDR4.ld -│   ├── MK20DX128.ld -│   ├── MK20DX256.ld -│   ├── MKL25Z128.ld -│   ├── MKL26Z128.ld -│   ├── MKL26Z64.ld -│   └── STM32L476xG.ld -├── mk -│   ├── startup_k20x5.mk -│   ├── startup_k20x7.mk -│   ├── startup_k20x.mk -│   ├── startup_kl2x.mk -│   └── startup_stm32l4xx.mk -├── rules.ld -├── rules.mk -└── vectors.c - -chibios/os/hal/ -├── boards -│   ├── FREESCALE_FREEDOM_K20D50M -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── MCHCK_K20 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_3 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_3_1 -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── PJRC_TEENSY_LC -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── readme.txt -│   ├── simulator -│   │   ├── board.c -│   │   ├── board.h -│   │   └── board.mk -│   ├── ST_NUCLEO_F030R8 -│   │   ├── board.c -│   │   ├── board.h -│   │   ├── board.mk -│   │   └── cfg -│   │   └── board.chcfg -├── hal.mk -├── include -│   ├── adc.h -│   ├── can.h -│   ├── dac.h -│   ├── ext.h -│   ├── gpt.h -│   ├── hal_channels.h -│   ├── hal_files.h -│   ├── hal.h -│   ├── hal_ioblock.h -│   ├── hal_mmcsd.h -│   ├── hal_queues.h -│   ├── hal_streams.h -│   ├── i2c.h -│   ├── i2s.h -│   ├── icu.h -│   ├── mac.h -│   ├── mii.h -│   ├── mmc_spi.h -│   ├── pal.h -│   ├── pwm.h -│   ├── rtc.h -│   ├── sdc.h -│   ├── serial.h -│   ├── serial_usb.h -│   ├── spi.h -│   ├── st.h -│   ├── uart.h -│   └── usb.h -├── lib -│   └── streams -│   ├── chprintf.c -│   ├── chprintf.h -│   ├── memstreams.c -│   ├── memstreams.h -│   ├── nullstreams.c -│   └── nullstreams.h -├── osal -│   ├── nil -│   │   ├── osal.c -│   │   ├── osal.h -│   │   └── osal.mk -│   ├── os-less -│   │   └── ARMCMx -│   │   ├── osal.c -│   │   ├── osal.h -│   │   └── osal.mk -│   └── rt -│   ├── osal.c -│   ├── osal.h -│   └── osal.mk -├── ports -│   ├── AVR -│   ├── common -│   │   └── ARMCMx -│   │   ├── mpu.h -│   │   ├── nvic.c -│   │   └── nvic.h -│   ├── KINETIS -│   │   ├── K20x -│   │   │   ├── hal_lld.c -│   │   │   ├── hal_lld.h -│   │   │   ├── kinetis_registry.h -│   │   │   ├── platform.dox -│   │   │   ├── platform.mk -│   │   │   ├── pwm_lld.c -│   │   │   ├── pwm_lld.h -│   │   │   ├── spi_lld.c -│   │   │   └── spi_lld.h -│   │   ├── KL2x -│   │   │   ├── hal_lld.c -│   │   │   ├── hal_lld.h -│   │   │   ├── kinetis_registry.h -│   │   │   ├── platform.mk -│   │   │   ├── pwm_lld.c -│   │   │   └── pwm_lld.h -│   │   ├── LLD -│   │   │   ├── adc_lld.c -│   │   │   ├── adc_lld.h -│   │   │   ├── ext_lld.c -│   │   │   ├── ext_lld.h -│   │   │   ├── gpt_lld.c -│   │   │   ├── gpt_lld.h -│   │   │   ├── i2c_lld.c -│   │   │   ├── i2c_lld.h -│   │   │   ├── pal_lld.c -│   │   │   ├── pal_lld.h -│   │   │   ├── serial_lld.c -│   │   │   ├── serial_lld.h -│   │   │   ├── st_lld.c -│   │   │   ├── st_lld.h -│   │   │   ├── usb_lld.c -│   │   │   └── usb_lld.h -│   │   └── README.md -│   ├── LPC -│   ├── simulator -│   └── STM32 -├── src -│   ├── adc.c -│   ├── can.c -│   ├── dac.c -│   ├── ext.c -│   ├── gpt.c -│   ├── hal.c -│   ├── hal_mmcsd.c -│   ├── hal_queues.c -│   ├── i2c.c -│   ├── i2s.c -│   ├── icu.c -│   ├── mac.c -│   ├── mmc_spi.c -│   ├── pal.c -│   ├── pwm.c -│   ├── rtc.c -│   ├── sdc.c -│   ├── serial.c -│   ├── serial_usb.c -│   ├── spi.c -│   ├── st.c -│   ├── uart.c -│   └── usb.c -└── templates - ├── adc_lld.c - ├── adc_lld.h - ├── can_lld.c - ├── can_lld.h - ├── dac_lld.c - ├── dac_lld.h - ├── ext_lld.c - ├── ext_lld.h - ├── gpt_lld.c - ├── gpt_lld.h - ├── halconf.h - ├── hal_lld.c - ├── hal_lld.h - ├── i2c_lld.c - ├── i2c_lld.h - ├── i2s_lld.c - ├── i2s_lld.h - ├── icu_lld.c - ├── icu_lld.h - ├── mac_lld.c - ├── mac_lld.h - ├── mcuconf.h - ├── osal - │   ├── osal.c - │   ├── osal.h - │   └── osal.mk - ├── pal_lld.c - ├── pal_lld.h - ├── platform.mk - ├── pwm_lld.c - ├── pwm_lld.h - ├── rtc_lld.c - ├── rtc_lld.h - ├── sdc_lld.c - ├── sdc_lld.h - ├── serial_lld.c - ├── serial_lld.h - ├── spi_lld.c - ├── spi_lld.h - ├── st_lld.c - ├── st_lld.h - ├── uart_lld.c - ├── uart_lld.h - ├── usb_lld.c - └── usb_lld.h diff --git a/keyboards/infinity_chibios/Makefile b/keyboards/infinity_chibios/Makefile deleted file mode 100644 index 4e2a6f00fd..0000000000 --- a/keyboards/infinity_chibios/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif \ No newline at end of file diff --git a/keyboards/infinity_chibios/bootloader_defs.h b/keyboards/infinity_chibios/bootloader_defs.h deleted file mode 100644 index c67153be60..0000000000 --- a/keyboards/infinity_chibios/bootloader_defs.h +++ /dev/null @@ -1 +0,0 @@ -#define KIIBOHD_BOOTLOADER diff --git a/keyboards/infinity_chibios/chconf.h b/keyboards/infinity_chibios/chconf.h deleted file mode 100644 index 43c845739a..0000000000 --- a/keyboards/infinity_chibios/chconf.h +++ /dev/null @@ -1,524 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef CHCONF_H -#define CHCONF_H - -#define _CHIBIOS_RT_CONF_ - -/*===========================================================================*/ -/** - * @name System timers settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System time counter resolution. - * @note Allowed values are 16 or 32 bits. - */ -#define CH_CFG_ST_RESOLUTION 32 - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#define CH_CFG_ST_FREQUENCY 1000 - -/** - * @brief Time delta constant for the tick-less mode. - * @note If this value is zero then the system uses the classic - * periodic tick. This value represents the minimum number - * of ticks that is safe to specify in a timeout directive. - * The value one is not valid, timeouts are rounded up to - * this value. - */ -#define CH_CFG_ST_TIMEDELTA 0 - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - * @note The round robin preemption is not supported in tickless mode and - * must be set to zero in that case. - */ -#define CH_CFG_TIME_QUANTUM 20 - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_CFG_USE_MEMCORE. - */ -#define CH_CFG_MEMCORE_SIZE 0 - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread. The application @p main() - * function becomes the idle thread and must implement an - * infinite loop. - */ -#define CH_CFG_NO_IDLE_THREAD FALSE - -/* Use __WFI in the idle thread for waiting. Does lower the power - * consumption. */ -#define CORTEX_ENABLE_WFI_IDLE TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#define CH_CFG_OPTIMIZE_SPEED TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Time Measurement APIs. - * @details If enabled then the time measurement APIs are included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_TM FALSE - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_REGISTRY TRUE - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_WAITEXIT TRUE - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_SEMAPHORES TRUE - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MUTEXES TRUE - -/** - * @brief Enables recursive behavior on mutexes. - * @note Recursive mutexes are heavier and have an increased - * memory footprint. - * - * @note The default is @p FALSE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MUTEXES. - */ -#define CH_CFG_USE_CONDVARS TRUE - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_CONDVARS. - */ -#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_EVENTS TRUE - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_EVENTS. - */ -#define CH_CFG_USE_EVENTS_TIMEOUT TRUE - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MESSAGES TRUE - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special - * requirements. - * @note Requires @p CH_CFG_USE_MESSAGES. - */ -#define CH_CFG_USE_MESSAGES_PRIORITY FALSE - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_SEMAPHORES. - */ -#define CH_CFG_USE_MAILBOXES TRUE - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMCORE TRUE - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or - * @p CH_CFG_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#define CH_CFG_USE_HEAP TRUE - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#define CH_CFG_USE_MEMPOOLS TRUE - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_CFG_USE_WAITEXIT. - * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. - */ -#define CH_CFG_USE_DYNAMIC TRUE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, kernel statistics. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_STATISTICS FALSE - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_SYSTEM_STATE_CHECK FALSE - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_CHECKS FALSE - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_ENABLE_ASSERTS FALSE - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the trace buffer is activated. - * - * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED - -/** - * @brief Trace buffer entries. - * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is - * different from @p CH_DBG_TRACE_MASK_DISABLED. - */ -#define CH_DBG_TRACE_BUFFER_SIZE 128 - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#define CH_DBG_ENABLE_STACK_CHECK FALSE - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#define CH_DBG_FILL_THREADS FALSE - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p thread_t structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p FALSE. - * @note This debug option is not currently compatible with the - * tickless mode. - */ -#define CH_DBG_THREADS_PROFILING FALSE - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p thread_t structure. - */ -#define CH_CFG_THREAD_EXTRA_FIELDS \ - /* Add threads custom fields here.*/ - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#define CH_CFG_THREAD_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - */ -#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* Context switch code here.*/ \ -} - -/** - * @brief ISR enter hook. - */ -#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ - /* IRQ prologue code here.*/ \ -} - -/** - * @brief ISR exit hook. - */ -#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ - /* IRQ epilogue code here.*/ \ -} - -/** - * @brief Idle thread enter hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to activate a power saving mode. - */ -#define CH_CFG_IDLE_ENTER_HOOK() { \ - /* Idle-enter code here.*/ \ -} - -/** - * @brief Idle thread leave hook. - * @note This hook is invoked within a critical zone, no OS functions - * should be invoked from here. - * @note This macro can be used to deactivate a power saving mode. - */ -#define CH_CFG_IDLE_LEAVE_HOOK() { \ - /* Idle-leave code here.*/ \ -} - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#define CH_CFG_IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#define CH_CFG_SYSTEM_TICK_HOOK() { \ - /* System tick event code here.*/ \ -} - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ - /* System halt code here.*/ \ -} - -/** - * @brief Trace hook. - * @details This hook is invoked each time a new record is written in the - * trace buffer. - */ -#define CH_CFG_TRACE_HOOK(tep) { \ - /* Trace code here.*/ \ -} - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* CHCONF_H */ - -/** @} */ diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity_chibios/config.h deleted file mode 100644 index 452cc2a9fb..0000000000 --- a/keyboards/infinity_chibios/config.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -Copyright 2015 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#define PREVENT_STUCK_MODIFIERS - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6464 -#define DEVICE_VER 0x0001 -/* in python2: list(u"whatever".encode('utf-16-le')) */ -/* at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER "TMK" -#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' -#define PRODUCT "Infinity keyboard/TMK" -#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00' - -/* key matrix size */ -#define MATRIX_ROWS 9 -#define MATRIX_COLS 7 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -//#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -//#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* Keymap for Infinity prototype */ -//#define INFINITY_PROTOTYPE - -/* Keymap for Infinity 1.1a (first revision with LED support) */ -//#define INFINITY_LED - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/infinity_chibios/halconf.h b/keyboards/infinity_chibios/halconf.h deleted file mode 100644 index 46b37a4f46..0000000000 --- a/keyboards/infinity_chibios/halconf.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the DAC subsystem. - */ -#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -#define HAL_USE_DAC FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C FALSE -#endif - -/** - * @brief Enables the I2S subsystem. - */ -#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) -#define HAL_USE_I2S FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL FALSE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB TRUE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI FALSE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE -#endif - -/** - * @brief Enables the WDG subsystem. - */ -#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) -#define HAL_USE_WDG FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) -#define ADC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define ADC_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* I2C driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the I2C bus. - */ -#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define I2C_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) -#define MAC_USE_ZERO_COPY FALSE -#endif - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) -#define MAC_USE_EVENTS TRUE -#endif - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SDC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Number of initialization attempts before rejecting the card. - * @note Attempts are performed at 10mS intervals. - */ -#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) -#define SDC_INIT_RETRY 100 -#endif - -/** - * @brief Include support for MMC cards. - * @note MMC support is not yet implemented so this option must be kept - * at @p FALSE. - */ -#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) -#define SDC_MMC_SUPPORT FALSE -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - */ -#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) -#define SDC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 16 -#endif - -/*===========================================================================*/ -/* SERIAL_USB driver related setting. */ -/*===========================================================================*/ - -/** - * @brief Serial over USB buffers size. - * @details Configuration parameter, the buffer size must be a multiple of - * the USB data endpoint maximum packet size. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_SIZE 256 -#endif - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) -#define SPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* USB driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) -#define USB_USE_WAIT TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/keyboards/infinity_chibios/infinity_chibios.c b/keyboards/infinity_chibios/infinity_chibios.c deleted file mode 100644 index 845eda01b0..0000000000 --- a/keyboards/infinity_chibios/infinity_chibios.c +++ /dev/null @@ -1,17 +0,0 @@ -/* -Copyright 2012,2013 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include "infinity_chibios.h" diff --git a/keyboards/infinity_chibios/infinity_chibios.h b/keyboards/infinity_chibios/infinity_chibios.h deleted file mode 100644 index f1ba15e489..0000000000 --- a/keyboards/infinity_chibios/infinity_chibios.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2014 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#ifndef KEYMAP_COMMON_H -#define KEYMAP_COMMON_H - -#include "quantum.h" - -#ifdef INFINITY_PROTOTYPE - -/* Infinity prototype */ -#define KEYMAP( \ - K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \ - K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \ - K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \ - K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \ - K06, K16, K26, K36, K46, K56, K66, K76 \ -) { \ - { K00, K01, K02, K03, K04, K05, K06 }, \ - { K10, K11, K12, K13, K14, K15, K16 }, \ - { K20, K21, K22, K23, K24, K25, K26 }, \ - { K30, K31, K32, K33, K34, K35, K36 }, \ - { K40, K41, K42, K43, K44, K45, K46 }, \ - { K50, K51, K52, K53, K54, K55, K56 }, \ - { K60, K61, K62, K63, K64, K65, K66 }, \ - { K70, K71, K72, K73, K74, K75, K76 }, \ - { K80, K81, K82, K83, K84, K85, K86 } \ -} - -#else - -/* Infinity production */ -#define KEYMAP( \ - K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \ - K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \ - K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \ - K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \ - K16, K26, K36, K46, K56, K66, K76, K86 \ -) { \ - { K00, K01, K02, K03, K04, K05, K06 }, \ - { K10, K11, K12, K13, K14, K15, K16 }, \ - { K20, K21, K22, K23, K24, K25, K26 }, \ - { K30, K31, K32, K33, K34, K35, K36 }, \ - { K40, K41, K42, K43, K44, K45, K46 }, \ - { K50, K51, K52, K53, K54, K55, K56 }, \ - { K60, K61, K62, K63, K64, K65, K66 }, \ - { K70, K71, K72, K73, K74, K75, K76 }, \ - { K80, K81, K82, K83, K84, K85, K86 } \ -} - -#endif - -#endif diff --git a/keyboards/infinity_chibios/keymaps/default/keymap.c b/keyboards/infinity_chibios/keymaps/default/keymap.c deleted file mode 100644 index 5f3b46a367..0000000000 --- a/keyboards/infinity_chibios/keymaps/default/keymap.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "infinity_chibios.h" - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layer 0: Default Layer - * ,-----------------------------------------------------------. - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp| - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| - * |-----------------------------------------------------------| - * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| - * |-----------------------------------------------------------' - * | |Gui|Alt | Space |Alt |Gui| | | - * `-----------------------------------------------------------' - */ - [0] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_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_ENT, \ - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \ - KC_NO, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_NO, KC_NO), - - /* Layer 1: HHKB mode (HHKB Fn) - * ,-----------------------------------------------------------. - * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| - * |-----------------------------------------------------------| - * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | - * |-----------------------------------------------------------| - * | | | | | | | +| -|End|PgD|Dow| | | - * `-----------------------------------------------------------' - * | |Gui|Alt | Space |Alt |Gui| | | - * `-----------------------------------------------------------' - */ - [1] = KEYMAP( - KC_PWR, 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_INS, KC_DEL, \ - KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \ - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), -}; - -const uint16_t fn_actions[] = { - -}; - diff --git a/keyboards/infinity_chibios/keymaps/depariel/keymap.c b/keyboards/infinity_chibios/keymaps/depariel/keymap.c deleted file mode 100755 index e68891f79e..0000000000 --- a/keyboards/infinity_chibios/keymaps/depariel/keymap.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "infinity_chibios.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layer 0: Default Layer - * ,-----------------------------------------------------------. - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp| - * |-----------------------------------------------------------| - * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| - * |-----------------------------------------------------------' - * |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next| - * `-----------------------------------------------------------' - */ - [0] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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, LT(5, KC_ENT), \ - KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(4), \ - MO(4), KC_LGUI, KC_LALT, LT(3, KC_SPC), KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), - - /* Layer 1: "Toggle" off SpaceFn for League of Legends - */ - [1] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(4), \ - MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT), - - /* Layer 2: "Toggle" off SpaceFn for MapleRoyals - */ - [2] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_LSFT, \ - MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT), - - /* Layer 3: FN layer 1 - */ - [3] = KEYMAP( - KC_NO, 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_NO, KC_NO, \ - KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \ - MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \ - LGUI(KC_SPC), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_CALC, KC_MENU, KC_TRNS, TG(4), \ - KC_TRNS, KC_TRNS, KC_TRNS, LT(3, KC_SPC), KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU), - - /* Layer 4: FN layer 2 - */ - [4] = KEYMAP( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \ - KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \ - KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \ - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_RSFT, MO(4), \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PDOT, KC_NO, TG(1)), - - /* Layer 5: FN layer 3 - */ - [5] = KEYMAP( - 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_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \ - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \ - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_NO, KC_NO, KC_NO), - - /* Layer 6: FN layer 4 - */ - [6] = KEYMAP( - 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, \ - LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), 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_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO), -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - diff --git a/keyboards/infinity_chibios/keymaps/hasu/keymap.c b/keyboards/infinity_chibios/keymaps/hasu/keymap.c deleted file mode 100644 index a1954d2587..0000000000 --- a/keyboards/infinity_chibios/keymaps/hasu/keymap.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "infinity_chibios.h" - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layer 0: Default Layer - * ,-----------------------------------------------------------. - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp| - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| - * |-----------------------------------------------------------| - * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| - * |-----------------------------------------------------------' - * | |Gui|Alt | Space |Alt |Gui| | | - * `-----------------------------------------------------------' - */ - [0] = KEYMAP( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \ - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \ - OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \ - KC_NO, KC_LGUI,KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI,KC_NO, KC_NO), - - /* Layer 1: HHKB mode (HHKB Fn) - * ,-----------------------------------------------------------. - * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| - * |-----------------------------------------------------------| - * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | - * |-----------------------------------------------------------| - * | | | | | | | +| -|End|PgD|Dow| | | - * `-----------------------------------------------------------' - * | |Gui|Alt | Space |Alt |Gui| | | - * `-----------------------------------------------------------' - */ - [1] = KEYMAP( - KC_PWR, 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_INS, KC_DEL, \ - KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC, \ - KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \ - KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS, \ - KC_TRNS,KC_LGUI,KC_LALT, KC_TRNS, KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS), - - /* Layer 2: Vi mode[Slash] - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs| - * |-----------------------------------------------------------| - * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return | - * |-----------------------------------------------------------| - * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | | - * `-----------------------------------------------------------' - * |Gui|Alt | Space |Alt |Gui| - * `-------------------------------------------' - */ - [2] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ - KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC, \ - KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT, \ - KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS, \ - KC_TRNS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_TRNS, KC_TRNS), - - /* Layer 3: Mouse mode(IJKL)[Semicolon] - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T| - * |-----------------------------------------------------------| - * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return | - * |-----------------------------------------------------------| - * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | | - * `-----------------------------------------------------------' - * |Gui |Alt | Mb1 |Fn |Fn | - * `--------------------------------------------' - * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel - */ - [3] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ - LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \ - KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_TRNS, \ - KC_TRNS, KC_LGUI,KC_LALT, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - /* Layer 4: Mouse mode(IJKL)[Space] - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T| - * |-----------------------------------------------------------| - * |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return | - * |-----------------------------------------------------------| - * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | | - * `-----------------------------------------------------------' - * |Gui |Alt | Mb1 |Fn |Fn | - * `--------------------------------------------' - * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel - */ - [4] = KEYMAP( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ - LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \ - KC_LCTL, KC_VOLD,KC_VOLU,KC_MUTE,KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, KC_BTN1,KC_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT),ALT_T(KC_RGHT),KC_NO, KC_RSFT,KC_TRNS, \ - KC_TRNS, KC_LGUI,KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), - -}; - -/* - * Fn action definition - */ -const uint16_t fn_actions[] = { - -}; diff --git a/keyboards/infinity_chibios/led.c b/keyboards/infinity_chibios/led.c deleted file mode 100644 index aed66c7c03..0000000000 --- a/keyboards/infinity_chibios/led.c +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "hal.h" - -#include "led.h" - - -void led_set(uint8_t usb_led) { -} diff --git a/keyboards/infinity_chibios/matrix.c b/keyboards/infinity_chibios/matrix.c deleted file mode 100644 index 62c165aa53..0000000000 --- a/keyboards/infinity_chibios/matrix.c +++ /dev/null @@ -1,171 +0,0 @@ -#include -#include -#include -#include "hal.h" -#include "timer.h" -#include "wait.h" -#include "print.h" -#include "matrix.h" - - -/* - * Infinity Pinusage: - * Column pins are input with internal pull-down. Row pins are output and strobe with high. - * Key is high or 1 when it turns on. - * INFINITY PRODUCTION (NO LED) - * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } - * row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 } - * INFINITY PRODUCTION (WITH LED) - * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } - * row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 } - */ -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -static bool debouncing = false; -static uint16_t debouncing_time = 0; - - -void matrix_init(void) -{ - /* Column(sense) */ - palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 2, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 3, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); - palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); - -#ifdef INFINITY_LED - /* Row(strobe) */ - palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 7, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); -#else - /* Row(strobe) */ - palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOB, 17, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); -#endif - memset(matrix, 0, MATRIX_ROWS); - memset(matrix_debouncing, 0, MATRIX_ROWS); -} - -uint8_t matrix_scan(void) -{ - for (int row = 0; row < MATRIX_ROWS; row++) { - matrix_row_t data = 0; - #ifdef INFINITY_LED - // strobe row - switch (row) { - case 0: palSetPad(GPIOC, 0); break; - case 1: palSetPad(GPIOC, 1); break; - case 2: palSetPad(GPIOC, 2); break; - case 3: palSetPad(GPIOC, 3); break; - case 4: palSetPad(GPIOC, 4); break; - case 5: palSetPad(GPIOC, 5); break; - case 6: palSetPad(GPIOC, 6); break; - case 7: palSetPad(GPIOC, 7); break; - case 8: palSetPad(GPIOD, 0); break; - } - #else - // strobe row - switch (row) { - case 0: palSetPad(GPIOB, 0); break; - case 1: palSetPad(GPIOB, 1); break; - case 2: palSetPad(GPIOB, 2); break; - case 3: palSetPad(GPIOB, 3); break; - case 4: palSetPad(GPIOB, 16); break; - case 5: palSetPad(GPIOB, 17); break; - case 6: palSetPad(GPIOC, 4); break; - case 7: palSetPad(GPIOC, 5); break; - case 8: palSetPad(GPIOD, 0); break; - } - #endif - - wait_us(1); // need wait to settle pin state - - // read col data - data = (palReadPort(GPIOD)>>1); - #ifdef INFINITY_LED - // un-strobe row - switch (row) { - case 0: palClearPad(GPIOC, 0); break; - case 1: palClearPad(GPIOC, 1); break; - case 2: palClearPad(GPIOC, 2); break; - case 3: palClearPad(GPIOC, 3); break; - case 4: palClearPad(GPIOC, 4); break; - case 5: palClearPad(GPIOC, 5); break; - case 6: palClearPad(GPIOC, 6); break; - case 7: palClearPad(GPIOC, 7); break; - case 8: palClearPad(GPIOD, 0); break; - } - #else - // un-strobe row - switch (row) { - case 0: palClearPad(GPIOB, 0); break; - case 1: palClearPad(GPIOB, 1); break; - case 2: palClearPad(GPIOB, 2); break; - case 3: palClearPad(GPIOB, 3); break; - case 4: palClearPad(GPIOB, 16); break; - case 5: palClearPad(GPIOB, 17); break; - case 6: palClearPad(GPIOC, 4); break; - case 7: palClearPad(GPIOC, 5); break; - case 8: palClearPad(GPIOD, 0); break; - } - #endif - - if (matrix_debouncing[row] != data) { - matrix_debouncing[row] = data; - debouncing = true; - debouncing_time = timer_read(); - } - } - - if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { - for (int row = 0; row < MATRIX_ROWS; row++) { - matrix[row] = matrix_debouncing[row]; - } - debouncing = false; - } - return 1; -} - -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & (1</os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) -# - For Teensies, FAMILY = KINETIS and SERIES is either -# KL2x (LC) or K20x (3.0,3.1,3.2). -# - For Infinity KB, SERIES = K20x -MCU_FAMILY = KINETIS -MCU_SERIES = K20x - -# Linker script to use -# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ -# or /ld/ -# - NOTE: a custom ld script is needed for EEPROM on Teensy LC -# - LDSCRIPT = -# - MKL26Z64 for Teensy LC -# - MK20DX128 for Teensy 3.0 -# - MK20DX256 for Teensy 3.1 and 3.2 -# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader -MCU_LDSCRIPT = MK20DX128BLDR4 - -# Startup code to use -# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ -# - STARTUP = -# - kl2x for Teensy LC -# - k20x5 for Teensy 3.0 and Infinity KB -# - k20x7 for Teensy 3.1 and 3.2 -MCU_STARTUP = k20x5 - -# Board: it should exist either in /os/hal/boards/ -# or /boards -# - BOARD = -# - PJRC_TEENSY_LC for Teensy LC -# - PJRC_TEENSY_3 for Teensy 3.0 -# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 -# - MCHCK_K20 for Infinity KB -BOARD = MCHCK_K20 - -# Cortex version -# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 -MCU = cortex-m4 - -# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 -# I.e. 6 for Teensy LC; 7 for Teensy 3.x -ARMV = 7 - -# Vector table for application -# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ -# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB -OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000 - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration -## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file -- cgit v1.2.3 From 3bdebd2270a40593f4779f0013f588e47b3c53fc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 Aug 2016 00:52:32 +0300 Subject: Update list of community keyboards --- keyboards/readme.md | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/keyboards/readme.md b/keyboards/readme.md index 4f17962191..81a23c7e55 100644 --- a/keyboards/readme.md +++ b/keyboards/readme.md @@ -9,38 +9,47 @@ These keyboards are manufactured by the maintainers of QMK. What makes OLKB keyboards shine is a combo of lean aesthetics, compact size, and killer tactile feel. These are available through [olkb.com](http://olkb.com) as well as through [Massdrop](http://massdrop.com) from time to time, as easy to assemble kits. -* [Planck](/keyboards/planck/) - A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine. -* [Preonic](/keyboards/preonic/) - Like the Planck, but bigger. 50%. -* [Atomic](/keyboards/atomic/) - Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard. +* [Planck](/keyboards/planck/) — A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine. +* [Preonic](/keyboards/preonic/) — Like the Planck, but bigger. 50%. +* [Atomic](/keyboards/atomic/) — Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard. ### ErgoDox EZ - Erez Zukerman Made in Taiwan using advanced robotic manufacturing, the ErgoDox EZ is a fully-assembled, premium ergonomic keyboard. Its split design allows you to place both halves shoulder width, and its custom-made wrist rests and tilt/tent kit make for incredibly comfortable typing. Available on [ergodox-ez.com](https://ergodox-ez.com). -* [ErgoDox EZ](/keyboards/ergodox/) - Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types. +* [ErgoDox EZ](/keyboards/ergodox/) — Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types. ### Clueboard - Zach White Designed and built in Felton, CA, Clueboards keyboard emphasize quality and locally sourced components, available on [clueboard.co](http://clueboard.co) -* [Clueboard](/keyboards/clueboard/) - The 66% custom keyboard. -* [Cluepad](/keyboards/cluepad/) - A mechanical numpad with QMK superpowers. +* [Clueboard](/keyboards/clueboard/) — The 66% custom keyboard. +* [Cluecard](/keyboards/cluecard/) — A small board to help you hack on QMK. +* [Cluepad](/keyboards/cluepad/) — A mechanical numpad with QMK superpowers. ## Community-supported QMK Keyboards These keyboards are part of the QMK repository, but their manufacturers are not official maintainers of the repository. -* [alps64](/keyboards/alps64/) — A 60% keyboard for Alps keyswitches. -* [arrow_pad](/keyboards/arrow_pad) — A custom creation by IBNobody. -* [atreus](/keyboards/atreus) — Made by Technomancy. -* [bantam44](/keyboards/bantam44) — It is a 44-key 40% staggered keyboard. -* [gh60](/keyboards/gh60) — A 60% Geekhack community-driven project. -* [hhkb](/keyboards/hhkb) — The Happy Hacking keyboard can be hacked with a custom controller to run QMK. -* [jd45](/keyboards/jd45) — Another Geekhack community project, designed by jdcarpe. -* [kc60](/keyboards/kc60) — A programmable Chinese-made keyboard, lost in the mists of time. -* [kitten_paw](/keyboards/kitten_paw) — A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies) -* [phantom](/keyboards/phantom) — A tenkeyless kit by Teel, also from Geekhack. -* [retro_refit](/keyboards/retro_refit) — Another creation by IBNobody. -* [satan](/keyboards/satan) — A GH60 variant. -* [sixkeyboard](/keyboards/sixkeyboard) — A 6-key keyboard made by TechKeys. +* [Alps64](/keyboards/alps64) — A 60% keyboard for Alps keyswitches. +* [AMJ60](/keyboards/amj60) — DIY/Assembled compact 60% keyboard. +* [Arrow Pad](/keyboards/arrow_pad) — A custom creation by IBNobody. +* [Atreus](/keyboards/atreus) — Made by Technomancy. +* [Bantam44](/keyboards/bantam44) — It is a 44-key 40% staggered keyboard. +* [Ergodox Infinity](/keyboards/ergodox) - Ergonomic Split Keyboard by Input Club. +* [GH60](/keyboards/gh60) — A 60% Geekhack community-driven project. +* [Happy Hacking Keyboard](/keyboards/hhkb) — The Happy Hacking keyboard can be hacked with a custom controller to run QMK. +* [Infinity 60%](/keyboards/infinity60) - — Compact community keyboard by Input Club. +* [JD45](/keyboards/jd45) — Another Geekhack community project, designed by jdcarpe. +* [KC60](/keyboards/kc60) — A programmable Chinese-made keyboard, lost in the mists of time. +* [Kinesis Advantage](/keyboards/kinesis) — Contoured ergonomic keyboard by Kinesis Computer Ergonomics. +* [The Kitten Paw](/keyboards/kitten_paw) — A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies). +* [Lets Split](/keyboards/lets_split) - Split ortholinear 40% keyboard. +* [Phantom](/keyboards/phantom) — A tenkeyless kit by Teel, also from Geekhack. +* [Retro Refit](/keyboards/retro_refit) — Another creation by IBNobody. +* [S60-x](/keyboards/s60-x) — DIY compact keyboard designed by VinnyCordeiro for Sentraq. +* [Satan](/keyboards/satan) — A GH60 variant. +* [SixKeyBoard](/keyboards/sixkeyboard) — A 6-key keyboard made by TechKeys. +* [TheVan 44](/keyboars/tv44) — A 44-key staggered keybard by Evangs. +* [Vision Division](/keyboards/vision_division) — Full Size / Split Linear Keyboard by IBNobody. -- cgit v1.2.3 From 83eb9e4eed808113a2fc059bcd7546b17707e920 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 Aug 2016 01:10:14 +0300 Subject: Fix the .travis.yml so that GH_TOKEN works properly --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f4c918a5ed..e74744a967 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,11 +9,11 @@ branches: env: global: - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM= + matrix: + - TARGET=all-keyboards AUTOGEN=true + - TARGET=test AUTOGEN=false script: - make $TARGET AUTOGEN=$AUTOGEN -env: -- TARGET=all-keyboards AUTOGEN=true -- TARGET=test AUTOGEN=false addons: apt: packages: -- cgit v1.2.3 From 2f0395ce725581b93b68a88899c207014ee68901 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Mon, 29 Aug 2016 11:30:38 +0200 Subject: build_keyboard.mk: Restore UCIS_ENABLE support During the build system refactor, support for enabling UCIS seems to have been lost. This little patch adds that back, so that keymaps using UCIS can be compiled again. Signed-off-by: Gergely Nagy --- build_keyboard.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build_keyboard.mk b/build_keyboard.mk index 04632c1c94..03a69b1464 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -148,6 +148,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/luts.c endif +ifeq ($(strip $(UCIS_ENABLE)), yes) + OPT_DEFS += -DUCIS_ENABLE + UNICODE_ENABLE = yes +endif + ifeq ($(strip $(UNICODE_ENABLE)), yes) OPT_DEFS += -DUNICODE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c -- cgit v1.2.3 From 42f1ce08dc09ff784add32750e55aa03e2427f5e Mon Sep 17 00:00:00 2001 From: Jack Henahan Date: Mon, 29 Aug 2016 11:35:07 -0400 Subject: jhenahan layout --- keyboards/planck/keymaps/jhenahan/Makefile | 25 +++ keyboards/planck/keymaps/jhenahan/config.h | 9 + keyboards/planck/keymaps/jhenahan/keymap.c | 314 ++++++++++++++++++++++++++++ keyboards/planck/keymaps/jhenahan/readme.md | 35 ++++ 4 files changed, 383 insertions(+) create mode 100644 keyboards/planck/keymaps/jhenahan/Makefile create mode 100644 keyboards/planck/keymaps/jhenahan/config.h create mode 100644 keyboards/planck/keymaps/jhenahan/keymap.c create mode 100644 keyboards/planck/keymaps/jhenahan/readme.md diff --git a/keyboards/planck/keymaps/jhenahan/Makefile b/keyboards/planck/keymaps/jhenahan/Makefile new file mode 100644 index 0000000000..de01ad2404 --- /dev/null +++ b/keyboards/planck/keymaps/jhenahan/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/jhenahan/config.h b/keyboards/planck/keymaps/jhenahan/config.h new file mode 100644 index 0000000000..cd3adc41cc --- /dev/null +++ b/keyboards/planck/keymaps/jhenahan/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define FORCE_NKRO +#define WORKMAN_SOUND COLEMAK_SOUND + +#endif diff --git a/keyboards/planck/keymaps/jhenahan/keymap.c b/keyboards/planck/keymaps/jhenahan/keymap.c new file mode 100644 index 0000000000..2bda4b6956 --- /dev/null +++ b/keyboards/planck/keymaps/jhenahan/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _WORKMAN 0 +#define _DEAD 1 +#define _QWERTY 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + WORKMAN = SAFE_RANGE, + DEAD, + QWERTY, + LOWER, + RAISE, + PLOVER, + EXT_PLV, + TOG_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + +/* Workman + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | H | T | G | Y | N | E | O | I | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | M | C | V | K | L | Dead | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_WORKMAN] = { + {KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC}, + {MT(MOD_LCTL,KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DEAD, KC_DOT, KC_SLSH, KC_ENT}, + {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Workman Dead Layer + * ,-----------------------------------------------------------------------------------. + * | | % | & | ? | + | @ | $ | _ | [ | ] | ! | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | / | ( | = | 0 | { | } | 1 | * | ) | - | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | 6 | 7 | 8 | 9 | | | \ | 2 | 3 | 4 | 5 | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | < | ~ | ` | , | # | ^ | > | | | + * `-----------------------------------------------------------------------------------' + */ +[_DEAD] = { + {XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, XXXXXXX}, + {XXXXXXX, KC_SLSH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, XXXXXXX}, + {XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, KC_3, KC_4, KC_5, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_LT, KC_TILD, KC_GRV, KC_COMM, KC_COMM, KC_HASH, KC_CIRC, KC_GT, XXXXXXX, XXXXXXX} +}, + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | Vol+ |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Prev | Next | Vol- | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, KC_VOLU, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_MPLY} +}, + +/* Raise - KWM Interaction + * ,-----------------------------------------------------------------------------------. + * |Restrt| |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | Mark |Rotate|Prefix| Term | BSP |SwpMrk|SwapW |SwapS |SwapN |SwapE | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE| | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {LCAG(KC_Q), XXXXXXX, LCAG(KC_S), LCAG(KC_W), LCAG(KC_D), LCAG(KC_F), LCTL(S(KC_X)), LCTL(S(KC_H)), LCTL(S(KC_J)), LCTL(S(KC_K)), LCTL(S(KC_L)), XXXXXXX}, + {XXXXXXX, LCAG(KC_M), LGUI(LCTL(KC_R)), LCAG(KC_DOT), LCAG(KC_T), LGUI(LCTL(KC_A)), LCTL(LALT(KC_M)), LCTL(LALT(KC_H)), LCTL(LALT(KC_J)), LCTL(LALT(KC_K)), LCTL(LALT(KC_L)), XXXXXXX}, + {_______, LCAG(KC_H), LCAG(KC_J), LCAG(KC_K), LCAG(KC_L), LGUI(LCTL(KC_S)), LGUI(LCTL(KC_D)), LGUI(LALT(KC_H)), LGUI(LALT(KC_J)), LGUI(LALT(KC_K)), LGUI(LALT(KC_L)), _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC}, + {TOG_PLV, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_M, KC_C, XXXXXXX, XXXXXXX, KC_L, KC_COMM, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, WORKMAN, PLOVER, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_workman[][2] = SONG(WORKMAN_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case WORKMAN: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_workman, false, 0); + #endif + persistant_default_layer_set(1UL<<_WORKMAN); + } + return false; + break; + case DEAD: + if (record->event.pressed) { + layer_on(_DEAD); + set_oneshot_layer(_DEAD, ONESHOT_START); + clear_oneshot_layer_state(ONESHOT_PRESSED); + } + return false; + break; + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + case TOG_PLV: + if (record->event.pressed) { + register_code(KC_R); + register_code(KC_W); + register_code(KC_T); + register_code(KC_C); + register_code(KC_P); + register_code(KC_O); + clear_keyboard(); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/jhenahan/readme.md b/keyboards/planck/keymaps/jhenahan/readme.md new file mode 100644 index 0000000000..1d803fe321 --- /dev/null +++ b/keyboards/planck/keymaps/jhenahan/readme.md @@ -0,0 +1,35 @@ +# jhenahan's layout + +## Layout + +The base layer is based on the +[Workman Dead](https://github.com/ojbucao/Workman/tree/master/mac) layout. The +primary interaction layer is a slightly modified Workman layout with a 'dead' +key on the third row under the middle finger. The dead key activates a layer of +special characters. + +## [Layers](http://www.keyboard-layout-editor.com/#/gists/2b875f7d5d76fe4408c0a5b3bd76ddae) +### Function Layer + +This is very slightly modified from the default, mainly just to rearrange the media keys. + +### [KWM](https://github.com/koekeishiya/kwm) Interaction Layer + +`kwm` is a tiling window manager for OS X. The keys defined in my keymap +correspond to the settings I use in +[my `kwmrc` file](https://github.com/jhenahan/dotfiles/blob/master/kwm/kwmrc). + +### QWERTY + +Just in case. + +### [Plover](http://www.openstenoproject.org/plover/) + +The Plover layer in this keymap is identical to that of the default. This layout +functions exactly as a QWERTY layout unless you're running the Plover +application. + +### Adjust Layer + +This layer is only slightly modified from the default to remove Dvorak and +Colemak and replace them with Workman. -- cgit v1.2.3 From 6d7637ae3eb4b37ab7d294818aa92ea9562df4b9 Mon Sep 17 00:00:00 2001 From: Jack Henahan Date: Mon, 29 Aug 2016 11:43:06 -0400 Subject: Update README --- keyboards/planck/keymaps/jhenahan/readme.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/jhenahan/readme.md b/keyboards/planck/keymaps/jhenahan/readme.md index 1d803fe321..a80506fc9d 100644 --- a/keyboards/planck/keymaps/jhenahan/readme.md +++ b/keyboards/planck/keymaps/jhenahan/readme.md @@ -25,9 +25,15 @@ Just in case. ### [Plover](http://www.openstenoproject.org/plover/) -The Plover layer in this keymap is identical to that of the default. This layout -functions exactly as a QWERTY layout unless you're running the Plover -application. +This layout functions exactly as a Workman layout unless you're running the Plover +application. Includes a key for toggling Plover while it's running. + +Add this in the appropriate section of your `plover.cfg` to allow this altered layout: + +``` ini +[System: English Stenotype] +keymap[keyboard] = [["#", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="]], ["S-", ["q", "a"]], ["T-", ["d"]], ["K-", ["s"]], ["P-", ["r"]], ["W-", ["h"]], ["H-", ["w"]], ["R-", ["t"]], ["A-", ["m"]], ["O-", ["c"]], ["*", ["y", "g", "j", "b"]], ["-E", ["l"]], ["-U", [","]], ["-F", ["f"]], ["-R", ["n"]], ["-P", ["u"]], ["-B", ["e"]], ["-L", ["p"]], ["-G", ["o"]], ["-T", [";"]], ["-S", ["i"]], ["-D", ["BackSpace"]], ["-Z", ["'"]], ["no-op", ["\\", "]", "x", ".", "/"]], ["arpeggiate", ["space"]]] +``` ### Adjust Layer -- cgit v1.2.3 From c9ea236fc35d350c0ff33de0af84d3dee7d0eb95 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 31 Aug 2016 08:21:52 +0200 Subject: process_unicode: Add get_unicode_input_mode() There may be cases where one would like to know the current Unicode input mode, without having to keep track of it themselves. Add a function that does just this. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_unicode.c | 4 ++++ quantum/process_keycode/process_unicode.h | 1 + 2 files changed, 5 insertions(+) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 06c1694f2e..a5d7dca21e 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -18,6 +18,10 @@ void set_unicode_input_mode(uint8_t os_target) input_mode = os_target; } +uint8_t get_unicode_input_mode(void) { + return input_mode; +} + __attribute__((weak)) void unicode_input_start (void) { switch(input_mode) { diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 02ce3dd7e0..27f8072ee6 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -13,6 +13,7 @@ #endif void set_unicode_input_mode(uint8_t os_target); +uint8_t get_unicode_input_mode(void); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); -- cgit v1.2.3 From acda2b793f69c6e0e9b9667e9ebe8a0325eb5ecd Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 1 Sep 2016 08:32:47 +0200 Subject: tap-dance: Do not start a sequence on keyup There was an odd case, which confused the hell out of tap-dance: suppose you had a number of tap-dance keys, on a layer, and as part of the tap-dance, you turned that layer off - or had it on one-shot to begin with. In this case, the keydown event would trigger the tap-dance key, but the keyup would not. This had two funky consequences: - tap-dance did not correctly register that the dance has ended. - pressing any other tap-dance key would interrupt the previous tap-dance, and potentially input unwanted characters. To fix this, we simply do not start a tap-dance sequence on keyup, only when it is pressed. This way the previous sequence has enough time to time-out and finish properly, and we don't get confused. This fixes algernon/ergodox-layout#107. Signed-off-by: Gergely Nagy --- quantum/process_keycode/process_tap_dance.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 07de3ecb8f..79ade4d000 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -65,9 +65,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { highest_td = idx; action = &tap_dance_actions[idx]; - action->state.keycode = keycode; action->state.pressed = record->event.pressed; if (record->event.pressed) { + action->state.keycode = keycode; action->state.count++; action->state.timer = timer_read(); @@ -77,8 +77,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { process_tap_dance_action_on_dance_finished (paction); reset_tap_dance (&paction->state); } + + last_td = keycode; } - last_td = keycode; break; -- cgit v1.2.3 From 8b2a235c8de7123187e0aa1dd950947f20a51f07 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 1 Sep 2016 18:14:39 +0100 Subject: changed order of modifiers after experimentation, updated readme --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- keyboards/planck/keymaps/callum/readme.md | 15 +++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 494ed30b06..572756a383 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -38,14 +38,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | * `-----------------------------------------------------------------------------------' */ [_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} + {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, /* MOVE diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 030def7f77..c7ad5d163c 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -2,24 +2,19 @@ This is a layout for the grid planck, built with a few ideals in mind. These ideals are just my opinion mind! The great thing about *qmk* is that we can all afford to have different opinions about what makes a good layout: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided --- since they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — since they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), since otherwise certain long key combinations become hard to make. - Backspace should be in the “capslock position” as God intended. -- The keyboard should be usable without any firmware changes on any operating system. In my case that means it should work on *Windows* and *Linux* without any software modifications, while I can change the behaviour slightly on *macOS* in software since that’s my home OS. The images reflect the intended use on *macOS* **after** minor software tweaks; which will be noted. We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. ## The `BASE` layer -![](http://i.imgur.com/aEXOlWl.png) +![](http://i.imgur.com/tVNI3SE.png) This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneosly, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. - -The `ctrl`, `alt`, `cmd` cluster is asymmetric around the centre so that at least one of each of the modifiers can be reached with the thumbs. The intended use is to always hit the left `cmd` and the right `ctrl`, unless an awkward key combination dictates otherwise. - -In firmware `ctrl` and `cmd`/`GUI` are swapped with respect to the image above --- I swap them to the illustrated location when using *macOS* and leave them be for *Windows* and *Linux*. (so that `cmd-z,x,c,v,...` becomes `ctrl-z,x,c,v,...` saving me some confusion) +The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer ![](http://i.imgur.com/KXRSuHT.png) @@ -40,9 +35,9 @@ The symbol layer has all the numbers and their usual corresponding symbols in th Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. ## The `FUNC` layer -![](http://i.imgur.com/skxRZiH.png) +![](http://i.imgur.com/1VKFBBU.png) -The only thing of note here is that `bl+` and `bl-` are short for *backlight up* and *backlight down* respectively, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. +The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-cmd-power`.) ## Other changes from the default I have LEDs and sound disabled, simply because I have no need of them. \ No newline at end of file -- cgit v1.2.3 From 4c67ccc81ee8006190438c5f54cda871bcb2afa6 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 1 Sep 2016 18:30:49 +0100 Subject: changed some of the wording in the readme --- keyboards/planck/keymaps/callum/readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index c7ad5d163c..2d38e6355a 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -1,11 +1,11 @@ # callum’s planck layout -This is a layout for the grid planck, built with a few ideals in mind. These ideals are just my opinion mind! The great thing about *qmk* is that we can all afford to have different opinions about what makes a good layout: +This is a layout for the grid planck, built with a few ideals in mind: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — since they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. -- There should be two of every modifier (one on each side), since otherwise certain long key combinations become hard to make. -- Backspace should be in the “capslock position” as God intended. +- There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. +- Backspace should be in the “capslock position” in the colemak tradition. We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. -- cgit v1.2.3 From e4167c8c53b0cf7c68192bbe4db368785f24b970 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Fri, 2 Sep 2016 09:03:39 +0100 Subject: fixed incorrect key combination for locking screen on macOS --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- keyboards/planck/keymaps/callum/readme.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 572756a383..6c34311339 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -137,11 +137,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case LOCK: if (record->event.pressed) { register_code(KC_RSFT); - register_code(KC_RGUI); + register_code(KC_RCTL); register_code(KC_POWER); } else { unregister_code(KC_POWER); - unregister_code(KC_RGUI); + unregister_code(KC_RCTL); unregister_code(KC_RSFT); } return false; diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 2d38e6355a..b70de3f1e2 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -14,7 +14,7 @@ We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. +The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer ![](http://i.imgur.com/KXRSuHT.png) @@ -37,7 +37,7 @@ Again none of the modifiers are overwritten so that shortcuts involving numbers ## The `FUNC` layer ![](http://i.imgur.com/1VKFBBU.png) -The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-cmd-power`.) +The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) ## Other changes from the default -I have LEDs and sound disabled, simply because I have no need of them. \ No newline at end of file +I have LEDs and sound disabled, simply because I have no need of them. -- cgit v1.2.3 From a485e13afeb06ae96616ef381b03ba213efc574c Mon Sep 17 00:00:00 2001 From: profet23 Date: Fri, 2 Sep 2016 16:16:06 -0400 Subject: Adding 80 Key Ergodox Support --- keyboards/ergodox80/Makefile | 5 + keyboards/ergodox80/config.h | 31 + keyboards/ergodox80/ergodox80.c | 0 keyboards/ergodox80/ergodox80.h | 5 + keyboards/ergodox80/ergodox80/190hotfix.sh | 19 + keyboards/ergodox80/ergodox80/Makefile | 3 + keyboards/ergodox80/ergodox80/config.h | 65 ++ keyboards/ergodox80/ergodox80/ergodox80.c | 85 +++ keyboards/ergodox80/ergodox80/ergodox80.h | 122 ++++ keyboards/ergodox80/ergodox80/i2cmaster.h | 178 ++++++ keyboards/ergodox80/ergodox80/matrix.c | 382 +++++++++++ keyboards/ergodox80/ergodox80/rules.mk | 76 +++ keyboards/ergodox80/ergodox80/twimaster.c | 208 ++++++ .../ergodox80/ergodox80/util/compile_keymap.py | 710 +++++++++++++++++++++ keyboards/ergodox80/ergodox80/util/readme.md | 3 + keyboards/ergodox80/keymaps/default/default.png | Bin 0 -> 193672 bytes .../ergodox80/keymaps/default/default_highres.png | Bin 0 -> 1459389 bytes keyboards/ergodox80/keymaps/default/keymap.c | 183 ++++++ keyboards/ergodox80/keymaps/default/readme.md | 10 + keyboards/ergodox80/readme.md | 165 +++++ keyboards/ergodox80/rules.mk | 28 + 21 files changed, 2278 insertions(+) create mode 100644 keyboards/ergodox80/Makefile create mode 100644 keyboards/ergodox80/config.h create mode 100644 keyboards/ergodox80/ergodox80.c create mode 100644 keyboards/ergodox80/ergodox80.h create mode 100755 keyboards/ergodox80/ergodox80/190hotfix.sh create mode 100644 keyboards/ergodox80/ergodox80/Makefile create mode 100644 keyboards/ergodox80/ergodox80/config.h create mode 100644 keyboards/ergodox80/ergodox80/ergodox80.c create mode 100644 keyboards/ergodox80/ergodox80/ergodox80.h create mode 100644 keyboards/ergodox80/ergodox80/i2cmaster.h create mode 100644 keyboards/ergodox80/ergodox80/matrix.c create mode 100644 keyboards/ergodox80/ergodox80/rules.mk create mode 100644 keyboards/ergodox80/ergodox80/twimaster.c create mode 100644 keyboards/ergodox80/ergodox80/util/compile_keymap.py create mode 100644 keyboards/ergodox80/ergodox80/util/readme.md create mode 100644 keyboards/ergodox80/keymaps/default/default.png create mode 100644 keyboards/ergodox80/keymaps/default/default_highres.png create mode 100644 keyboards/ergodox80/keymaps/default/keymap.c create mode 100644 keyboards/ergodox80/keymaps/default/readme.md create mode 100644 keyboards/ergodox80/readme.md create mode 100644 keyboards/ergodox80/rules.mk diff --git a/keyboards/ergodox80/Makefile b/keyboards/ergodox80/Makefile new file mode 100644 index 0000000000..94fa847ff8 --- /dev/null +++ b/keyboards/ergodox80/Makefile @@ -0,0 +1,5 @@ +SUBPROJECT_DEFAULT = ergodox80 + +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/ergodox80/config.h b/keyboards/ergodox80/config.h new file mode 100644 index 0000000000..5dd6daa15f --- /dev/null +++ b/keyboards/ergodox80/config.h @@ -0,0 +1,31 @@ +#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ +#define KEYBOARDS_ERGODOX_CONFIG_H_ + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +#include "ergodox80/config.h" + + +#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80.h new file mode 100644 index 0000000000..ea40f4d455 --- /dev/null +++ b/keyboards/ergodox80/ergodox80.h @@ -0,0 +1,5 @@ +#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ +#define KEYBOARDS_ERGODOX_ERGODOX_H_ +#include "ergodox80.h" + +#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/ergodox80/ergodox80/190hotfix.sh b/keyboards/ergodox80/ergodox80/190hotfix.sh new file mode 100755 index 0000000000..bdc3adce22 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/190hotfix.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#a tool to fix broken keymaps as a result of pull request #190 +#changing the declaration of matrix_scan_user() and matrix_init_user() +# +#This script will save a copy of the specified keymap as keymap.c.bak +#and then create a new keymap.c with the definion corrected. +#this script must be run from the ergodox_ez directory +if [ $# -ne 1 ]; then + echo $0: usage: ./190hotfix keymap_name + exit 1 +fi + +echo Saving backup as ./keymaps/$1/keymap.c.bak ... +mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak + +echo Modifying ./keymaps/$1/keymap.c ... +cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c + +echo Complete! diff --git a/keyboards/ergodox80/ergodox80/Makefile b/keyboards/ergodox80/ergodox80/Makefile new file mode 100644 index 0000000000..191c6bb664 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/ergodox80/ergodox80/config.h b/keyboards/ergodox80/ergodox80/config.h new file mode 100644 index 0000000000..084a044ee1 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/config.h @@ -0,0 +1,65 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef ERGODOX_EZ_CONFIG_H +#define ERGODOX_EZ_CONFIG_H + +#include "../config.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ErgoDox EZ +#define PRODUCT ErgoDox EZ +#define DESCRIPTION QMK keyboard firmware for Ergodox EZ + +/* key matrix size */ +#define MATRIX_ROWS 14 +#define MATRIX_COLS 6 + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION +//#define DEBUG_MATRIX_SCAN_RATE + +#endif diff --git a/keyboards/ergodox80/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80/ergodox80.c new file mode 100644 index 0000000000..b21b1073b4 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/ergodox80.c @@ -0,0 +1,85 @@ +#include "ergodox80.h" +#include "i2cmaster.h" + +bool i2c_initialized = 0; +uint8_t mcp23018_status = 0x20; + +void matrix_init_kb(void) { + // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") + TCCR1A = 0b10101001; // set and configure fast PWM + TCCR1B = 0b00001001; // set and configure fast PWM + + // (tied to Vcc for hardware convenience) + DDRB &= ~(1<<4); // set B(4) as input + PORTB &= ~(1<<4); // set B(4) internal pull-up disabled + + // unused pins - C7, D4, D5, D7, E6 + // set as input with internal pull-ip enabled + DDRC &= ~(1<<7); + DDRD &= ~(1<<7 | 1<<5 | 1<<4); + DDRE &= ~(1<<6); + PORTC |= (1<<7); + PORTD |= (1<<7 | 1<<5 | 1<<4); + PORTE |= (1<<6); + + ergodox_blink_all_leds(); + + matrix_init_user(); +} + +void ergodox_blink_all_leds(void) +{ + ergodox_led_all_off(); + ergodox_led_all_set(LED_BRIGHTNESS_HI); + ergodox_right_led_1_on(); + _delay_ms(50); + ergodox_right_led_2_on(); + _delay_ms(50); + ergodox_right_led_3_on(); + _delay_ms(50); + ergodox_right_led_1_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_3_off(); + //ergodox_led_all_on(); + //_delay_ms(333); + ergodox_led_all_off(); +} + +uint8_t init_mcp23018(void) { + mcp23018_status = 0x20; + + // I2C subsystem + if (i2c_initialized == 0) { + i2c_init(); // on pins D(1,0) + i2c_initialized++; + _delay_ms(1000); + } + + // set pin direction + // - unused : input : 1 + // - input : input : 1 + // - driving : output : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + i2c_stop(); + + // set pull-up + // - unused : on : 1 + // - input : on : 1 + // - driving : off : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + +out: + i2c_stop(); + + return mcp23018_status; +} + + diff --git a/keyboards/ergodox80/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80/ergodox80.h new file mode 100644 index 0000000000..8012b0a749 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/ergodox80.h @@ -0,0 +1,122 @@ +#ifndef ERGODOX_EZ_H +#define ERGODOX_EZ_H + +#include "quantum.h" +#include +#include +#include "i2cmaster.h" +#include + +#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) +#define CPU_16MHz 0x00 + +// I2C aliases and register addresses (see "mcp23018.md") +#define I2C_ADDR 0b0100000 +#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) +#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) +#define IODIRA 0x00 // i/o direction register +#define IODIRB 0x01 +#define GPPUA 0x0C // GPIO pull-up resistor register +#define GPPUB 0x0D +#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) +#define GPIOB 0x13 +#define OLATA 0x14 // output latch register +#define OLATB 0x15 + +extern uint8_t mcp23018_status; + +void init_ergodox(void); +void ergodox_blink_all_leds(void); +uint8_t init_mcp23018(void); +uint8_t ergodox_left_leds_update(void); + +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + + +inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } +inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } +inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } +inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } +inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } + +inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } +inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } +inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } +inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } +inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } + +inline void ergodox_led_all_on(void) +{ + ergodox_board_led_on(); + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); +} + +inline void ergodox_led_all_off(void) +{ + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +} + +inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } +inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } +inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } +inline void ergodox_right_led_set(uint8_t led, uint8_t n) { + (led == 1) ? (OCR1A = n) : + (led == 2) ? (OCR1B = n) : + (OCR1C = n); +} + +inline void ergodox_led_all_set(uint8_t n) +{ + ergodox_right_led_1_set(n); + ergodox_right_led_2_set(n); + ergodox_right_led_3_set(n); +} + +#define KEYMAP( \ + \ + /* left hand, spatial positions */ \ + k00,k01,k02,k03,k04,k05,k06, \ + k10,k11,k12,k13,k14,k15,k16, \ + k20,k21,k22,k23,k24,k25, \ + k30,k31,k32,k33,k34,k35,k36, \ + k40,k41,k42,k43,k44, \ + k55,k56, \ + k45,k46,k54, \ + k53,k52,k51, \ + \ + /* right hand, spatial positions */ \ + k07,k08,k09,k0A,k0B,k0C,k0D, \ + k17,k18,k19,k1A,k1B,k1C,k1D, \ + k28,k29,k2A,k2B,k2C,k2D, \ + k37,k38,k39,k3A,k3B,k3C,k3D, \ + k49,k4A,k4B,k4C,k4D, \ + k57,k58, \ + k59,k47,k48, \ + k5C,k5B,k5A ) \ + \ + /* matrix positions */ \ + { \ + { k00, k10, k20, k30, k40, KC_NO }, \ + { k01, k11, k21, k31, k41, k51 }, \ + { k02, k12, k22, k32, k42, k52 }, \ + { k03, k13, k23, k33, k43, k53 }, \ + { k04, k14, k24, k34, k44, k54 }, \ + { k05, k15, k25, k35, k45, k55 }, \ + { k06, k16, KC_NO, k36, k46, k56 }, \ + \ + { k07, k17, KC_NO, k37, k47, k57 }, \ + { k08, k18, k28, k38, k48, k58 }, \ + { k09, k19, k29, k39, k49, k59 }, \ + { k0A, k1A, k2A, k3A, k4A, k5A }, \ + { k0B, k1B, k2B, k3B, k4B, k5B }, \ + { k0C, k1C, k2C, k3C, k4C, k5C }, \ + { k0D, k1D, k2D, k3D, k4D, KC_NO } \ + } + +#endif diff --git a/keyboards/ergodox80/ergodox80/i2cmaster.h b/keyboards/ergodox80/ergodox80/i2cmaster.h new file mode 100644 index 0000000000..3917b9e6c0 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/i2cmaster.h @@ -0,0 +1,178 @@ +#ifndef _I2CMASTER_H +#define _I2CMASTER_H 1 +/************************************************************************* +* Title: C include file for the I2C master interface +* (i2cmaster.S or twimaster.c) +* Author: Peter Fleury http://jump.to/fleury +* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device +* Usage: see Doxygen manual +**************************************************************************/ + +#ifdef DOXYGEN +/** + @defgroup pfleury_ic2master I2C Master library + @code #include @endcode + + @brief I2C (TWI) Master Software Library + + Basic routines for communicating with I2C slave devices. This single master + implementation is limited to one bus master on the I2C bus. + + This I2c library is implemented as a compact assembler software implementation of the I2C protocol + which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). + Since the API for these two implementations is exactly the same, an application can be linked either against the + software I2C implementation or the hardware I2C implementation. + + Use 4.7k pull-up resistor on the SDA and SCL pin. + + Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module + i2cmaster.S to your target when using the software I2C implementation ! + + Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. + + @note + The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted + to GNU assembler and AVR-GCC C call interface. + Replaced the incorrect quarter period delays found in AVR300 with + half period delays. + + @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury + + @par API Usage Example + The following code shows typical usage of this library, see example test_i2cmaster.c + + @code + + #include + + + #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet + + int main(void) + { + unsigned char ret; + + i2c_init(); // initialize I2C library + + // write 0x75 to EEPROM address 5 (Byte Write) + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + i2c_write(0x05); // write address = 5 + i2c_write(0x75); // write value 0x75 to EEPROM + i2c_stop(); // set stop conditon = release bus + + + // read previously written value back from EEPROM address 5 + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + + i2c_write(0x05); // write address = 5 + i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode + + ret = i2c_readNak(); // read one byte from EEPROM + i2c_stop(); + + for(;;); + } + @endcode + +*/ +#endif /* DOXYGEN */ + +/**@{*/ + +#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 +#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" +#endif + +#include + +/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_READ 1 + +/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_WRITE 0 + + +/** + @brief initialize the I2C master interace. Need to be called only once + @param void + @return none + */ +extern void i2c_init(void); + + +/** + @brief Terminates the data transfer and releases the I2C bus + @param void + @return none + */ +extern void i2c_stop(void); + + +/** + @brief Issues a start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_start(unsigned char addr); + + +/** + @brief Issues a repeated start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_rep_start(unsigned char addr); + + +/** + @brief Issues a start condition and sends address and transfer direction + + If device is busy, use ack polling to wait until device ready + @param addr address and transfer direction of I2C device + @return none + */ +extern void i2c_start_wait(unsigned char addr); + + +/** + @brief Send one byte to I2C device + @param data byte to be transfered + @retval 0 write successful + @retval 1 write failed + */ +extern unsigned char i2c_write(unsigned char data); + + +/** + @brief read one byte from the I2C device, request more data from device + @return byte read from I2C device + */ +extern unsigned char i2c_readAck(void); + +/** + @brief read one byte from the I2C device, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_readNak(void); + +/** + @brief read one byte from the I2C device + + Implemented as a macro, which calls either i2c_readAck or i2c_readNak + + @param ack 1 send ack, request more data from device
+ 0 send nak, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_read(unsigned char ack); +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + + +/**@}*/ +#endif diff --git a/keyboards/ergodox80/ergodox80/matrix.c b/keyboards/ergodox80/ergodox80/matrix.c new file mode 100644 index 0000000000..c352924b52 --- /dev/null +++ b/keyboards/ergodox80/ergodox80/matrix.c @@ -0,0 +1,382 @@ +/* + +Note for ErgoDox EZ customizers: Here be dragons! +This is not a file you want to be messing with. +All of the interesting stuff for you is under keymaps/ :) +Love, Erez + +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "wait.h" +#include "action_layer.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "ergodox80.h" +#include "i2cmaster.h" +#ifdef DEBUG_MATRIX_SCAN_RATE +#include "timer.h" +#endif + +/* + * This constant define not debouncing time in msecs, but amount of matrix + * scan loops which should be made to get stable debounced results. + * + * On Ergodox matrix scan rate is relatively low, because of slow I2C. + * Now it's only 317 scans/second, or about 3.15 msec/scan. + * According to Cherry specs, debouncing time is 5 msec. + * + * And so, there is no sense to have DEBOUNCE higher than 2. + */ + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(uint8_t row); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +static uint8_t mcp23018_reset_loop; + +#ifdef DEBUG_MATRIX_SCAN_RATE +uint32_t matrix_timer; +uint32_t matrix_scan_count; +#endif + + +__attribute__ ((weak)) +void matrix_init_user(void) {} + +__attribute__ ((weak)) +void matrix_scan_user(void) {} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + // initialize row and col + + mcp23018_status = init_mcp23018(); + + + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_timer = timer_read32(); + matrix_scan_count = 0; +#endif + + matrix_init_kb(); + +} + +void matrix_power_up(void) { + mcp23018_status = init_mcp23018(); + + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_timer = timer_read32(); + matrix_scan_count = 0; +#endif + +} + +uint8_t matrix_scan(void) +{ + if (mcp23018_status) { // if there was an error + if (++mcp23018_reset_loop == 0) { + // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans + // this will be approx bit more frequent than once per second + print("trying to reset mcp23018\n"); + mcp23018_status = init_mcp23018(); + if (mcp23018_status) { + print("left side not responding\n"); + } else { + print("left side attached\n"); + ergodox_blink_all_leds(); + } + } + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + matrix_scan_count++; + + uint32_t timer_now = timer_read32(); + if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) { + print("matrix scan frequency: "); + pdec(matrix_scan_count); + print("\n"); + + matrix_timer = timer_now; + matrix_scan_count = 0; + } +#endif + + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + wait_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(i); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + wait_us(1); + // this should be wait_ms(1) but has been left as-is at EZ's request + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + matrix_scan_quantum(); + + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1< http://jump.to/fleury +* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device with hardware TWI +* Usage: API compatible with I2C Software Library i2cmaster.h +**************************************************************************/ +#include +#include + +#include + + +/* define CPU frequency in Mhz here if not defined in Makefile */ +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +/* I2C clock in Hz */ +#define SCL_CLOCK 400000L + + +/************************************************************************* + Initialization of the I2C bus interface. Need to be called only once +*************************************************************************/ +void i2c_init(void) +{ + /* initialize TWI clock + * minimal values in Bit Rate Register (TWBR) and minimal Prescaler + * bits in the TWI Status Register should give us maximal possible + * I2C bus speed - about 444 kHz + * + * for more details, see 20.5.2 in ATmega16/32 secification + */ + + TWSR = 0; /* no prescaler */ + TWBR = 10; /* must be >= 10 for stable operation */ + +}/* i2c_init */ + + +/************************************************************************* + Issues a start condition and sends address and transfer direction. + return 0 = device accessible, 1= failed to access device +*************************************************************************/ +unsigned char i2c_start(unsigned char address) +{ + uint8_t twst; + + // send START condition + TWCR = (1<= 0: + if section['name'] == 'layout_config': + config.update(loads("\n".join( + section['code_lines'] + ))) + elif section['sub_name'].startswith('layer'): + layer_name = section['sub_name'] + config['layer_lines'][layer_name] = section['code_lines'] + + reset_section() + + def amend_section(line_index, line): + section['end_line'] = line_index + section['code_lines'].append(line) + + config = DEFAULT_CONFIG.copy() + config.update({ + 'layer_lines': collections.OrderedDict(), + 'macro_ids': {'UM'}, + 'unicode_macros': {}, + }) + + section = {} + reset_section() + + with io.open(path, encoding="utf-8") as fh: + for i, line in enumerate(fh): + if line.startswith("#"): + start_section(i, line) + elif line.startswith(" "): + amend_section(i, line[4:]) + else: + # TODO: maybe parse description + pass + + end_section() + assert 'layout' in config + return config + +# header file parsing + +IF0_RE = re.compile(r""" + ^ + #if 0 + $.*? + #endif +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +COMMENT_RE = re.compile(r""" + /\* + .*? + \*/" +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def read_header_file(path): + with io.open(path, encoding="utf-8") as fh: + data = fh.read() + data, _ = COMMENT_RE.subn("", data) + data, _ = IF0_RE.subn("", data) + return data + + +def regex_partial(re_str_fmt, flags): + def partial(*args, **kwargs): + re_str = re_str_fmt.format(*args, **kwargs) + return re.compile(re_str, flags) + return partial + + +KEYDEF_REP = regex_partial(r""" + #define + \s + ( + (?:{}) # the prefixes + (?:\w+) # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_RE = re.compile(r""" + ( + enum + \s\w+\s + \{ + .*? # the enum content + \} + ; + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +ENUM_KEY_REP = regex_partial(r""" + ( + {} # the prefixes + \w+ # the key name + ) # capture group end +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + + +def parse_keydefs(config, data): + prefix_options = "|".join(config['key_prefixes']) + keydef_re = KEYDEF_REP(prefix_options) + enum_key_re = ENUM_KEY_REP(prefix_options) + for match in keydef_re.finditer(data): + yield match.groups()[0] + + for enum_match in ENUM_RE.finditer(data): + enum = enum_match.groups()[0] + for key_match in enum_key_re.finditer(enum): + yield key_match.groups()[0] + + +def parse_valid_keys(config, out_path): + basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) + dirpaths = [] + subpaths = [] + while len(subpaths) < 6: + path = os.path.join(basepath, *subpaths) + dirpaths.append(path) + dirpaths.append(os.path.join(path, "tmk_core", "common")) + dirpaths.append(os.path.join(path, "quantum")) + subpaths.append('..') + + includes = set(config['keymaps_includes']) + includes.add("keycode.h") + + valid_keycodes = set() + for dirpath, include in it.product(dirpaths, includes): + include_path = os.path.join(dirpath, include) + if os.path.exists(include_path): + header_data = read_header_file(include_path) + valid_keycodes.update( + parse_keydefs(config, header_data) + ) + return valid_keycodes + + +# Keymap Parsing + +def iter_raw_codes(layer_lines, filler, separator): + filler_re = re.compile("[" + filler + " ]") + for line in layer_lines: + line, _ = filler_re.subn("", line.strip()) + if not line: + continue + codes = line.split(separator) + for code in codes[1:-1]: + yield code + + +def iter_indexed_codes(raw_codes, key_indexes): + key_rows = {} + key_indexes_flat = [] + + for row_index, key_indexes in enumerate(key_indexes): + for key_index in key_indexes: + key_rows[key_index] = row_index + key_indexes_flat.extend(key_indexes) + assert len(raw_codes) == len(key_indexes_flat) + for raw_code, key_index in zip(raw_codes, key_indexes_flat): + # we keep track of the row mostly for layout purposes + yield raw_code, key_index, key_rows[key_index] + + +LAYER_CHANGE_RE = re.compile(r""" + (DF|TG|MO)\(\d+\) +""", re.VERBOSE) + + +MACRO_RE = re.compile(r""" + M\(\w+\) +""", re.VERBOSE) + + +UNICODE_RE = re.compile(r""" + U[0-9A-F]{4} +""", re.VERBOSE) + + +NON_CODE = re.compile(r""" + ^[^A-Z0-9_]$ +""", re.VERBOSE) + + +def parse_uni_code(raw_code): + macro_id = "UC_" + ( + unicodedata.name(raw_code) + .replace(" ", "_") + .replace("-", "_") + ) + code = "M({})".format(macro_id) + uc_hex = "{:04X}".format(ord(raw_code)) + return code, macro_id, uc_hex + + +def parse_key_code(raw_code, key_prefixes, valid_keycodes): + if raw_code in valid_keycodes: + return raw_code + + for prefix in key_prefixes: + code = prefix + raw_code + if code in valid_keycodes: + return code + + +def parse_code(raw_code, key_prefixes, valid_keycodes): + if not raw_code: + return 'KC_TRNS', None, None + + if LAYER_CHANGE_RE.match(raw_code): + return raw_code, None, None + + if MACRO_RE.match(raw_code): + macro_id = raw_code[2:-1] + return raw_code, macro_id, None + + if UNICODE_RE.match(raw_code): + hex_code = raw_code[1:] + return parse_uni_code(chr(int(hex_code, 16))) + + if NON_CODE.match(raw_code): + return parse_uni_code(raw_code) + + code = parse_key_code(raw_code, key_prefixes, valid_keycodes) + return code, None, None + + +def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): + keymap = {} + raw_codes = list(iter_raw_codes( + layer_lines, config['filler'], config['separator'] + )) + indexed_codes = iter_indexed_codes(raw_codes, key_indexes) + key_prefixes = config['key_prefixes'] + for raw_code, key_index, row_index in indexed_codes: + code, macro_id, uc_hex = parse_code( + raw_code, key_prefixes, valid_keycodes + ) + # TODO: line numbers for invalid codes + err_msg = "Could not parse key '{}' on row {}".format( + raw_code, row_index + ) + assert code is not None, err_msg + # print(repr(raw_code), repr(code), macro_id, uc_hex) + if macro_id: + config['macro_ids'].add(macro_id) + if uc_hex: + config['unicode_macros'][macro_id] = uc_hex + keymap[key_index] = (code, row_index) + return keymap + + +def parse_keymaps(config, valid_keycodes): + keymaps = collections.OrderedDict() + key_indexes = config.get( + 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] + ) + # TODO: maybe validate key_indexes + + for layer_name, layer_lines, in config['layer_lines'].items(): + keymaps[layer_name] = parse_keymap( + config, key_indexes, layer_lines, valid_keycodes + ) + return keymaps + +# keymap.c output + +USERCODE = """ +// 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) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; +""" + +MACROCODE = """ +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 + +// TODO: allow default mode to be configured +static uint16_t unicode_mode = UC_MODE_WIN; + +uint16_t hextokeycode(uint8_t hex) {{ + if (hex == 0x0) {{ + return KC_P0; + }} + if (hex < 0xA) {{ + return KC_P1 + (hex - 0x1); + }} + return KC_A + (hex - 0xA); +}} + +void unicode_action_function(uint16_t hi, uint16_t lo) {{ + switch (unicode_mode) {{ + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + }} +}} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ + if (!record->event.pressed) {{ + return MACRO_NONE; + }} + // MACRODOWN only works in this function + switch(id) {{ + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; +{macro_cases} +{unicode_macro_cases} + default: + break; + }} + return MACRO_NONE; +}}; +""" + + +UNICODE_MACRO_TEMPLATE = """ +case {macro_id}: + unicode_action_function(0x{hi:02x}, 0x{lo:02x}); + break; +""".strip() + + +def unicode_macro_cases(config): + for macro_id, uc_hex in config['unicode_macros'].items(): + hi = int(uc_hex, 16) >> 8 + lo = int(uc_hex, 16) & 0xFF + unimacro_keys = ", ".join( + "T({})".format( + "KP_" + digit if digit.isdigit() else digit + ) for digit in uc_hex + ) + yield UNICODE_MACRO_TEMPLATE.format( + macro_id=macro_id, hi=hi, lo=lo + ) + + +def iter_keymap_lines(keymap, row_indents=None): + col_widths = {} + col = 0 + # first pass, figure out the column widths + prev_row_index = None + for code, row_index in keymap.values(): + if row_index != prev_row_index: + col = 0 + if row_indents: + col = row_indents[row_index] + col_widths[col] = max(len(code), col_widths.get(col, 0)) + prev_row_index = row_index + col += 1 + + # second pass, yield the cell values + col = 0 + prev_row_index = None + for key_index in sorted(keymap): + code, row_index = keymap[key_index] + if row_index != prev_row_index: + col = 0 + yield "\n" + if row_indents: + for indent_col in range(row_indents[row_index]): + pad = " " * (col_widths[indent_col] - 4) + yield (" /*-*/" + pad) + col = row_indents[row_index] + else: + yield pad + yield " {}".format(code) + if key_index < len(keymap) - 1: + yield "," + # This will be yielded on the next iteration when + # we know that we're not at the end of a line. + pad = " " * (col_widths[col] - len(code)) + prev_row_index = row_index + col += 1 + + +def iter_keymap_parts(config, keymaps): + # includes + for include_path in config['keymaps_includes']: + yield '#include "{}"\n'.format(include_path) + + yield "\n" + + # definitions + for i, macro_id in enumerate(sorted(config['macro_ids'])): + yield "#define {} {}\n".format(macro_id, i) + + yield "\n" + + for i, layer_name in enumerate(config['layer_lines']): + yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) + + yield "\n" + + # keymaps + yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" + + for i, layer_name in enumerate(config['layer_lines']): + # comment + layer_lines = config['layer_lines'][layer_name] + prefixed_lines = " * " + " * ".join(layer_lines) + yield "/*\n{} */\n".format(prefixed_lines) + + # keymap codes + keymap = keymaps[layer_name] + row_indents = ROW_INDENTS.get(config['layout']) + keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) + yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) + + yield "};\n\n" + + # no idea what this is for + yield "const uint16_t PROGMEM fn_actions[] = {};\n" + + # macros + yield MACROCODE.format( + macro_cases="", + unicode_macro_cases="\n".join(unicode_macro_cases(config)), + ) + + # TODO: dynamically create blinking lights + yield USERCODE + + +def main(argv=sys.argv[1:]): + if not argv or '-h' in argv or '--help' in argv: + print(__doc__) + return 0 + + in_path = os.path.abspath(argv[0]) + if not os.path.exists(in_path): + print("No such file '{}'".format(in_path)) + return 1 + + if len(argv) > 1: + out_path = os.path.abspath(argv[1]) + else: + dirname = os.path.dirname(in_path) + out_path = os.path.join(dirname, "keymap.c") + + config = parse_config(in_path) + valid_keys = parse_valid_keys(config, out_path) + keymaps = parse_keymaps(config, valid_keys) + + with io.open(out_path, mode="w", encoding="utf-8") as fh: + for part in iter_keymap_parts(config, keymaps): + fh.write(part) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/keyboards/ergodox80/ergodox80/util/readme.md b/keyboards/ergodox80/ergodox80/util/readme.md new file mode 100644 index 0000000000..26c5e5d99c --- /dev/null +++ b/keyboards/ergodox80/ergodox80/util/readme.md @@ -0,0 +1,3 @@ +# ErgoDox EZ Utilities + +The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option. diff --git a/keyboards/ergodox80/keymaps/default/default.png b/keyboards/ergodox80/keymaps/default/default.png new file mode 100644 index 0000000000..6575f7b5e3 Binary files /dev/null and b/keyboards/ergodox80/keymaps/default/default.png differ diff --git a/keyboards/ergodox80/keymaps/default/default_highres.png b/keyboards/ergodox80/keymaps/default/default_highres.png new file mode 100644 index 0000000000..7d9f045f43 Binary files /dev/null and b/keyboards/ergodox80/keymaps/default/default_highres.png differ diff --git a/keyboards/ergodox80/keymaps/default/keymap.c b/keyboards/ergodox80/keymaps/default/keymap.c new file mode 100644 index 0000000000..2da2c5b0e4 --- /dev/null +++ b/keyboards/ergodox80/keymaps/default/keymap.c @@ -0,0 +1,183 @@ +#include "ergodox80.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +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|' / Cmd | + * |--------+------+------+------+------+------| 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| + * ,------|------|------| |------+--------+------. + * | 1 | 2 | Home | | PgUp | 3 | 4 | + * |------|------|------| |------|--------|------| + * | Space| BkSp | End | | PgDn | Tab |Enter | + * `--------------------' `----------------------' + */ +// 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_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_1, KC_2, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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_3, KC_4, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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 + M(0), 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,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, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+----------. + * | | | | | | | | + * |------|------|------| |------|------|----------| + * | | | | | | |BrwserBack| + * `--------------------' `------------------------' + */ +// 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, 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_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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox80/keymaps/default/readme.md b/keyboards/ergodox80/keymaps/default/readme.md new file mode 100644 index 0000000000..8f6dba45e9 --- /dev/null +++ b/keyboards/ergodox80/keymaps/default/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) diff --git a/keyboards/ergodox80/readme.md b/keyboards/ergodox80/readme.md new file mode 100644 index 0000000000..3bbe98fd69 --- /dev/null +++ b/keyboards/ergodox80/readme.md @@ -0,0 +1,165 @@ +# The Easy Way + +If you can find firmware someone else has made that does what you want, that +is the easiest way to customize your ErgoDox. It requires no programming +experience or the setup of a build environment. + +Quickstart: + + - Find and download an existing firmware + [from Other Firmware Options](#other-firmware-options) + + - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez) + or [ErgoDox Infinity](#ergodox-infinity) + +# Customizing Keymaps + +There are many existing keymaps in the "keymaps" directory. If you just want +to use one of them, you don't need to modify keymaps and can just build and +flash the firmware as described below. These directories each have a +"readme.md" file which describe them. + +If none of the existing keymaps suit you, you can create your own custom +keymap. This will require some experience with coding. Follow these steps +to customize a keymap: + + - Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom. Then come back here. :) + + - Clone the qmk_firmware repository + + - Set up your build environment (see below). + + - Make a new directory under "keymaps" to hold your customizations. + + - Copy an existing keymap that is close to what you want, such as + "keymaps/default/keymap.c". + + - Use an editor to modify the new "keymap.c". See "Finding the keycodes you + need" below). Try to edit the comments as well, so the "text graphics" + represent your layout correctly. + + - Compile your new firmware (see below) + + - Flash your firmware (see below) + + - Test the changes. + + - Submit your keymap as a pull request to the qmk_firmware repository so + others can use it. You will want to add a "readme.md" that describes the + keymap. + +# Build Dependencies + +Before you can build, you will need the build dependencies. There is a script +to try to do this for Linux: + + - Run the `util/install_dependencies.sh` script as root. + +For the Infinity, you need the chibios submodules to be checked out or you +will receive errors about the build process being unable to find the chibios +files. Check them out with: + + - Go to the top level repo directory and run: `git submodule update --init --recursive` + +# Flashing Firmware + +## ErgoDox Ez + +The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). + +Linux users need to modify udev rules as described on the Teensy Linux page. +Some distributions provide a binary, maybe called `teensy-loader-cli`). + +To flash the firmware: + + - Build the firmware with `make keymapname`, for example `make default` + - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g. + `ergodox_ez_default.hex` + + - Start the teensy loader. + + - Load the .hex file into it. + + - Press the Reset button by inserting a paperclip gently into the reset hole + in the top right corder. + + - Click the button in the Teensy app to download the firmware. + +## ErgoDox Infinity + +The Infinity is two completely independent keyboards, and needs to be flashed +for the left and right halves seperately. To flash them: + + - Build the firmware with `make infinity-keymapname` + + - Plug in the left hand keyboard only. + + - Press the program button (back of keyboard, above thumb pad). + + - Install the firmware with `sudo make infinity-keymapname-dfu-util` + + - Build left hand firmware with `make infinity-keymapname MASTER=right` + + - Plug in the right hand keyboard only. + + - Press the program button (back of keyboard, above thumb pad). + + - Install the firmware with `sudo make infinity-keymapname-dfu-util MASTER=right` + +More information on the Infinity firmware is available in the [TMK/chibios for +Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md) + +### Infinity Master/Two Halves + +The Infinity is two completely independent keyboards, that can connect together. +You have a few options in how you flash the firmware: + +- Flash the left half, rebuild the firmware with "MASTER=right" and then flash + the right half. This allows you to plug in either half directly to the + computer and is what the above instructions do. + +- Flash the left half, then flash the same firmware on the right. This only + works when the left half is plugged directly to the computer and the keymap + is mirrored. It saves the small extra step of rebuilding with + "MASTER=right". + +- The same as the previous one but with "MASTER=right" when you build the + firmware, then flash the same firmware to both halves. You just have to + directly connect the right half to the computer. + +- For minor changes such as changing only the keymap without having updated + any part of the firmware code itself, you can program only the MASTER half. + It is safest to program both halves though. + +# Contributing your keymap + +The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. + +1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). +2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. +3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) +4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. + +# Finding the keycodes you need + +Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. + +That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot). + +If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. + +# Other Firmware Options + +There are external tools for customizing the layout, but those do not use +the featurs of this qmk firmware. These sites include: + + - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez + - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files + +You can also find an existing firmware that you like, for example from: + + - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) + +This qmk firmware also provides the ability to customize keymaps, but requires +a toolchain to build the firmware. See below for instructions on building +firmware and customizing keymaps. diff --git a/keyboards/ergodox80/rules.mk b/keyboards/ergodox80/rules.mk new file mode 100644 index 0000000000..ac63d4eff2 --- /dev/null +++ b/keyboards/ergodox80/rules.mk @@ -0,0 +1,28 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make = Make software. +# +# make clean = Clean out built project files. +# +# That's pretty much all you need. To compile, always go make clean, +# followed by make. +# +# For advanced users only: +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +#---------------------------------------------------------------------------- +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ +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 +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= yes # Unicode -- cgit v1.2.3 From 36e16b46e37b3bcc1753ff0a2006179f0dd005e7 Mon Sep 17 00:00:00 2001 From: profet23 Date: Fri, 2 Sep 2016 17:18:39 -0400 Subject: Removing/editing non applicable readme --- keyboards/ergodox80/keymaps/default/default.png | Bin 193672 -> 0 bytes .../ergodox80/keymaps/default/default_highres.png | Bin 1459389 -> 0 bytes keyboards/ergodox80/keymaps/default/readme.md | 10 -- keyboards/ergodox80/readme.md | 163 +-------------------- 4 files changed, 2 insertions(+), 171 deletions(-) delete mode 100644 keyboards/ergodox80/keymaps/default/default.png delete mode 100644 keyboards/ergodox80/keymaps/default/default_highres.png delete mode 100644 keyboards/ergodox80/keymaps/default/readme.md diff --git a/keyboards/ergodox80/keymaps/default/default.png b/keyboards/ergodox80/keymaps/default/default.png deleted file mode 100644 index 6575f7b5e3..0000000000 Binary files a/keyboards/ergodox80/keymaps/default/default.png and /dev/null differ diff --git a/keyboards/ergodox80/keymaps/default/default_highres.png b/keyboards/ergodox80/keymaps/default/default_highres.png deleted file mode 100644 index 7d9f045f43..0000000000 Binary files a/keyboards/ergodox80/keymaps/default/default_highres.png and /dev/null differ diff --git a/keyboards/ergodox80/keymaps/default/readme.md b/keyboards/ergodox80/keymaps/default/readme.md deleted file mode 100644 index 8f6dba45e9..0000000000 --- a/keyboards/ergodox80/keymaps/default/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Default Configuration - -## Changelog - -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: - -![Default](default_highres.png) diff --git a/keyboards/ergodox80/readme.md b/keyboards/ergodox80/readme.md index 3bbe98fd69..b5c09f9222 100644 --- a/keyboards/ergodox80/readme.md +++ b/keyboards/ergodox80/readme.md @@ -1,165 +1,6 @@ -# The Easy Way +# Ergodox 80 key support -If you can find firmware someone else has made that does what you want, that -is the easiest way to customize your ErgoDox. It requires no programming -experience or the setup of a build environment. +This is based on the ergodox-ez qmk firmware but is for ergodoxes with 80 keys. -Quickstart: - - Find and download an existing firmware - [from Other Firmware Options](#other-firmware-options) - - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez) - or [ErgoDox Infinity](#ergodox-infinity) - -# Customizing Keymaps - -There are many existing keymaps in the "keymaps" directory. If you just want -to use one of them, you don't need to modify keymaps and can just build and -flash the firmware as described below. These directories each have a -"readme.md" file which describe them. - -If none of the existing keymaps suit you, you can create your own custom -keymap. This will require some experience with coding. Follow these steps -to customize a keymap: - - - Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom. Then come back here. :) - - - Clone the qmk_firmware repository - - - Set up your build environment (see below). - - - Make a new directory under "keymaps" to hold your customizations. - - - Copy an existing keymap that is close to what you want, such as - "keymaps/default/keymap.c". - - - Use an editor to modify the new "keymap.c". See "Finding the keycodes you - need" below). Try to edit the comments as well, so the "text graphics" - represent your layout correctly. - - - Compile your new firmware (see below) - - - Flash your firmware (see below) - - - Test the changes. - - - Submit your keymap as a pull request to the qmk_firmware repository so - others can use it. You will want to add a "readme.md" that describes the - keymap. - -# Build Dependencies - -Before you can build, you will need the build dependencies. There is a script -to try to do this for Linux: - - - Run the `util/install_dependencies.sh` script as root. - -For the Infinity, you need the chibios submodules to be checked out or you -will receive errors about the build process being unable to find the chibios -files. Check them out with: - - - Go to the top level repo directory and run: `git submodule update --init --recursive` - -# Flashing Firmware - -## ErgoDox Ez - -The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). - -Linux users need to modify udev rules as described on the Teensy Linux page. -Some distributions provide a binary, maybe called `teensy-loader-cli`). - -To flash the firmware: - - - Build the firmware with `make keymapname`, for example `make default` - - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g. - `ergodox_ez_default.hex` - - - Start the teensy loader. - - - Load the .hex file into it. - - - Press the Reset button by inserting a paperclip gently into the reset hole - in the top right corder. - - - Click the button in the Teensy app to download the firmware. - -## ErgoDox Infinity - -The Infinity is two completely independent keyboards, and needs to be flashed -for the left and right halves seperately. To flash them: - - - Build the firmware with `make infinity-keymapname` - - - Plug in the left hand keyboard only. - - - Press the program button (back of keyboard, above thumb pad). - - - Install the firmware with `sudo make infinity-keymapname-dfu-util` - - - Build left hand firmware with `make infinity-keymapname MASTER=right` - - - Plug in the right hand keyboard only. - - - Press the program button (back of keyboard, above thumb pad). - - - Install the firmware with `sudo make infinity-keymapname-dfu-util MASTER=right` - -More information on the Infinity firmware is available in the [TMK/chibios for -Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md) - -### Infinity Master/Two Halves - -The Infinity is two completely independent keyboards, that can connect together. -You have a few options in how you flash the firmware: - -- Flash the left half, rebuild the firmware with "MASTER=right" and then flash - the right half. This allows you to plug in either half directly to the - computer and is what the above instructions do. - -- Flash the left half, then flash the same firmware on the right. This only - works when the left half is plugged directly to the computer and the keymap - is mirrored. It saves the small extra step of rebuilding with - "MASTER=right". - -- The same as the previous one but with "MASTER=right" when you build the - firmware, then flash the same firmware to both halves. You just have to - directly connect the right half to the computer. - -- For minor changes such as changing only the keymap without having updated - any part of the firmware code itself, you can program only the MASTER half. - It is safest to program both halves though. - -# Contributing your keymap - -The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. - -1. All work goes inside your keymap subdirectory (`keymaps/german` in this example). -2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did. -3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :) -4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. - -# Finding the keycodes you need - -Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. - -That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot). - -If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. - -# Other Firmware Options - -There are external tools for customizing the layout, but those do not use -the featurs of this qmk firmware. These sites include: - - - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez - - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files - -You can also find an existing firmware that you like, for example from: - - - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/) - -This qmk firmware also provides the ability to customize keymaps, but requires -a toolchain to build the firmware. See below for instructions on building -firmware and customizing keymaps. -- cgit v1.2.3 From 295ef0d9649b7482c380f38dd6157879df4af91d Mon Sep 17 00:00:00 2001 From: Major Koos Date: Fri, 2 Sep 2016 16:14:40 -0700 Subject: Add support for JD40 MKII PCB RGB Included. --- keyboards/jd40/Makefile | 74 ++++++++++++++ keyboards/jd40/config.h | 79 +++++++++++++++ keyboards/jd40/jd40.c | 26 +++++ keyboards/jd40/jd40.h | 45 +++++++++ keyboards/jd40/keymaps/default/keymap.c | 164 ++++++++++++++++++++++++++++++++ keyboards/jd40/readme.md | 17 ++++ 6 files changed, 405 insertions(+) create mode 100644 keyboards/jd40/Makefile create mode 100644 keyboards/jd40/config.h create mode 100644 keyboards/jd40/jd40.c create mode 100644 keyboards/jd40/jd40.h create mode 100644 keyboards/jd40/keymaps/default/keymap.c create mode 100644 keyboards/jd40/readme.md diff --git a/keyboards/jd40/Makefile b/keyboards/jd40/Makefile new file mode 100644 index 0000000000..242748111c --- /dev/null +++ b/keyboards/jd40/Makefile @@ -0,0 +1,74 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow + +ifndef QUANTUM_DIR + include ../../Makefile +endif + diff --git a/keyboards/jd40/config.h b/keyboards/jd40/config.h new file mode 100644 index 0000000000..e2594f4b37 --- /dev/null +++ b/keyboards/jd40/config.h @@ -0,0 +1,79 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER geekhack +#define PRODUCT jd40v2 +#define DESCRIPTION t.m.k. keyboard firmware for JD40 MKII + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F0, F1, F5, B4 } +#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 12 // Number of LEDs +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/jd40/jd40.c b/keyboards/jd40/jd40.c new file mode 100644 index 0000000000..fa06356d97 --- /dev/null +++ b/keyboards/jd40/jd40.c @@ -0,0 +1,26 @@ +#include "jd40.h" + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + + // if (usb_led & (1<event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_scan_user(void) { + +// Layer LED indicators +// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster + uint32_t layer = layer_state; + if (layer & (1<<1)) { + //gh60_wasd_leds_on(); + } else { + //gh60_wasd_leds_off(); + } + + if (layer & (1<<2)) { + //gh60_esc_led_on(); + } else { + //gh60_esc_led_off(); + } +}; + +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +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; + static uint8_t shift_esc_shift_mask; + // Shift + ESC = ~ + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +}; diff --git a/keyboards/jd40/readme.md b/keyboards/jd40/readme.md new file mode 100644 index 0000000000..7daa0980eb --- /dev/null +++ b/keyboards/jd40/readme.md @@ -0,0 +1,17 @@ +## jd40 mkii keyboard firmware + + Pins: + MATRIX_ROW_PINS { F0, F1, F5, B4 } + MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 } + RGB_DI_PIN D3 + +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/jd40 folder. +Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Amtel Flip to program your .hex file. -- cgit v1.2.3 From 11224a00fe79bcba8ed596847000b7ad8118b95f Mon Sep 17 00:00:00 2001 From: Major Koos Date: Fri, 2 Sep 2016 16:42:40 -0700 Subject: Add rules.mk file --- keyboards/jd40/rules.mk | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 keyboards/jd40/rules.mk diff --git a/keyboards/jd40/rules.mk b/keyboards/jd40/rules.mk new file mode 100644 index 0000000000..2f18fdf10d --- /dev/null +++ b/keyboards/jd40/rules.mk @@ -0,0 +1,69 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow \ No newline at end of file -- cgit v1.2.3 From 7fd5b6581a660b2d1d6e1605533a6b6f8bda3472 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 3 Sep 2016 20:29:29 -0500 Subject: Updated readme to have better backlight breathing info. --- readme.md | 264 +++++++++++++++++++++++++------------------------------------- 1 file changed, 104 insertions(+), 160 deletions(-) diff --git a/readme.md b/readme.md index 70725bf81a..371470bc36 100644 --- a/readme.md +++ b/readme.md @@ -54,11 +54,11 @@ Here are the steps 1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). 2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following 1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first - 2. From within the Git bash run `git rm --cached -r .` + 2. From within the Git bash run �git rm --cached -r .` 3. Followed by `git reset --hard` 3. Start the "Bash On Ubuntu On Windows" from the start menu -4. With the bash open, navigate to your Git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. -5. Run `sudo util/install_dependencies.sh`. +4. With the bash open, navigate to your git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. +5. Run `sudo util/install_dependencies.sh`. 6. After a while the installation will finish, and you are good to go **Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working. @@ -69,12 +69,11 @@ Here are the steps ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. 2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. -3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). -4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. -5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -6. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -7. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! -8. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. +3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. +4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. +5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. +6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! +7. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. ### Mac If you're using [homebrew,](http://brew.sh/) you can use the following commands: @@ -91,13 +90,9 @@ You can also try these instructions: 2. Install the Command Line Tools from `Xcode->Preferences->Downloads`. 3. Install [DFU-Programmer][dfu-prog]. -If you are going to flash Infinity based keyboards you will also need dfu-util - - brew install dfu-util - ### Linux -To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. +To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. You can also install things manually, but this documentation might not be always up to date with all requirements. @@ -158,107 +153,47 @@ In every keymap folder, the following files are recommended: * `config.h` - the options to configure your keymap * `keymap.c` - all of your keymap code, required * `Makefile` - the features of QMK that are enabled, required to run `make` in your keymap folder -* `readme.md` - a description of your keymap, how others might use it, and explanations of features +* `readme.md` - a description of your keymap, how others might use it, and explanations of features ## The `make` command -The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). - -**NOTE:** To abort a make command press `Ctrl-c` - -The following instruction refers to these folders. - -* The `root` (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. -* The `keyboard` folder is any keyboard project's folder, like `/keyboards/planck`. -* The `keymap` folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. -* The `subproject` folder is the subproject folder of a keyboard, like `/keyboards/ergodox/ez` - -### Simple instructions for building and uploading a keyboard - -**Most keyboards have more specific instructions in the keyboard specific readme.md file, so please check that first** - -If the `keymap` folder contains a file name `Makefile` - -1. Change the directory to the `keymap` folder -2. Run `make -` - -Otherwise, if there's no `Makefile` in the `keymap` folder - -1. Enter the `keyboard` folder -2. Run `make --` - -In the above commands, replace: - -* `` with the name of your keymap -* `` with the name of the subproject (revision or sub-model of your keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. - * If the keyboard doesn't have a subproject, or if you are happy with the default (defined in `rules.mk` file of the `keyboard` folder), you can leave it out. But remember to also remove the dash (`-`) from the command. -* `` The programmer to use. Most keyboards use `dfu`, but some use `teensy`. Infinity keyboards use `dfu-util`. Check the readme file in the keyboard folder to find out which programmer to use. - * If you don't add `----`, where: - -* `` is the name of the keyboard, for example `planck` - * Use `allkb` to compile all keyboards -* `` is the name of the subproject (revision or sub-model of the keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. - * If the keyboard doesn't have any subprojects, it can be left out - * To compile the default subproject, you can leave it out, or specify `defaultsp` - * Use `allsp` to compile all subprojects -* `` is the name of the keymap, for example `algernon` - * Use `allkm` to compile all keymaps -* `` will be explained in more detail below. +The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards//`), or your keymap folder (`/keyboards//keymaps//`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)). -**Note:** When you leave some parts of the command out, you should also remove the dash (`-`). +By default, this will generate a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. -As mentioned above, there are some shortcuts, when you are in a: +Below are some definitions that will be useful: -* `keyboard` folder, the command will automatically fill the `` part. So you only need to type `--` -* `subproject` folder, it will fill in both `` and `` -* `keymap` folder, then `` and `` will be filled in. If you need to specify the `` use the following syntax `-` - * Note in order to support this shortcut, the keymap needs its own Makefile (see the example [here](/doc/keymap_makefile_example.mk)) -* `keymap` folder of a `subproject`, then everything except the `` will be filled in +* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. +* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`. +* The "keymap" folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. -The `` means the following -* If no target is given, then it's the same as `all` below -* `all` compiles the keyboard and generates a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. -* `dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for Infinity keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme. **Note** that some operating systems needs root access for these commands to work, so in that case you need to run for example `sudo make dfu`. -* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems. +Below is a list of the useful `make` commands in QMK: -Some other targets are supported but, but not important enough to be documented here. Check the source code of the make files for more information. - -You can also add extra options at the end of the make command line, after the target +* `make` - builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder + * `make keyboard=` - specifies the keyboard (only to be used in root) + * `make keymap=` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder) +* `make clean` - cleans the `.build` folder, ensuring that everything is re-built +* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ. + * `keyboard=` and `keymap=` are compatible with this +* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root) +* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root) +* `make all-keymaps [keyboard=]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `` +* `make all-keyboards-*`, `make all-keyboards-default-*` and `make all-keymaps-* [keyboard=]` - like the normal "make-all-*" commands, but the last string aftter the `-` (for example clean) is passed to the keyboard make command. +Other, less useful functionality: * `make COLOR=false` - turns off color output * `make SILENT=true` - turns off output besides errors/warnings -* `make VERBOSE=true` - outputs all of the gcc stuff (not interesting, unless you need to debug) - -The make command itself also has some additional options, type `make --help` for more information. The most useful is probably `-jx`, which specifies that you want to compile using more than one CPU, the `x` represents the number of CPUs that you want to use. Setting that can greatly reduce the compile times, especially if you are compiling many keyboards/keymaps. I usually set it to one less than the number of CPUs that I have, so that I have some left for doing other things while it's compiling. Note that not all operating systems and make versions supports that option. - -Here are some examples commands - -* `make allkb-allsp-allkm` builds everything (all keyboards, all subprojects, all keymaps). Running just `make` from the `root` will also run this. -* `make` from within a `keyboard` directory, is the same as `make keyboard-allsp-allkm`, which compiles all subprojects and keymaps of the keyboard. **NOTE** that this behaviour has changed. Previously it compiled just the default keymap. -* `make ergodox-infinity-algernon-clean` will clean the build output of the Ergodox Infinity keyboard. This example uses the full syntax and can be run from any folder with a `Makefile` -* `make dfu COLOR=false` from within a keymap folder, builds and uploads the keymap, but without color output. +* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting) ## The `Makefile` -There are 5 different `make` and `Makefile` locations: +There are 3 different `make` and `Makefile` locations: * root (`/`) * keyboard (`/keyboards//`) * keymap (`/keyboards//keymaps//`) -* subproject (`/keyboards//`) -* subproject keymap (`/keyboards///keymaps/`) -The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **The file is required if you want to run `make` in the keymap folder.** - -For keyboards and subprojects, the make files are split in two parts `Makefile` and `rules.mk`. All settings can be found in the `rules.mk` file, while the `Makefile` is just there for support and including the root `Makefile`. Keymaps contain just one `Makefile` for simplicity. +The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.** ### Makefile options @@ -433,7 +368,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. -To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. +To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this: @@ -530,11 +465,11 @@ For the sake of flexibility, tap-dance actions can be either a pair of keycodes, ### Examples -Here's a simple example for a single definition: +Here's a simple example for a single definition: 1. In your `makefile`, add `TAP_DANCE_ENABLE = yes` 2. In your `config.h` (which you can copy from `qmk_firmware/keyboards/planck/config.h` to your keymap directory), add `#define TAPPING_TERM 200` -3. In your `keymap.c` file, define the variables and definitions, then add to your keymap: +3. In your `keymap.c` file, define the variables and definitions, then add to your keymap: ```c //Tap Dance Declarations @@ -550,10 +485,10 @@ qk_tap_dance_action_t tap_dance_actions[] = { }; //In Layer declaration, add tap dance item in place of a key code -TD(TD_ESC_CAPS) +TD(TD_ESC_CAPS) ``` -Here's a more complex example involving custom actions: +Here's a more complex example involving custom actions: ```c enum { @@ -828,11 +763,11 @@ To enable them, first add a new element to the `planck_keycodes` enum -- `DYNAMI Afterwards create a new layer called `_DYN`: #define _DYN 6 /* almost any other free number should be ok */ - + Below these two modifications include the `dynamic_macro.h` header: #include "dynamic_macro.h"` - + Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_MACRO_PLAY1`,`DYN_REC_START2` and `DYN_MACRO_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. [_DYN]= { @@ -841,7 +776,7 @@ Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_MAC {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, - + Add the following code to the very beginning of your `process_record_user()` function: if (!process_record_dynamic_macro(keycode, record)) { @@ -1030,6 +965,66 @@ In the default script of AutoHotkey you can define custom hotkeys. The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a. AutoHotkey inserts the Text right of `Send, ` when this combination is pressed. +## Backlight Breathing + +In order to enable backlight breathing, the following line must be added to your config.h file. + + #define BACKLIGHT_BREATHING + +The following function calls are used to control the breathing effect. + +* ```breathing_enable()``` - Enable the free-running breathing effect. +* ```breathing_disable()``` - Disable the free-running breathing effect immediately. +* ```breathing_self_disable()``` - Disable the free-running breathing effect after the current effect ends. +* ```breathing_toggle()``` - Toggle the free-running breathing effect. +* ```breathing_defaults()``` - Reset the speed and brightness settings of the breathing effect. + +The following function calls are used to control the maximum brightness of the breathing effect. + +* ```breathing_intensity_set(value)``` - Set the brightness of the breathing effect when it is at its max value. +* ```breathing_intensity_default()``` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity. + +The following function calls are used to control the cycling speed of the breathing effect. + +* ```breathing_speed_set(value)``` - Set the speed of the breathing effect - how fast it cycles. +* ```breathing_speed_inc(value)``` - Increase the speed of the breathing effect by a fixed value. +* ```breathing_speed_dec(value)``` - Decrease the speed of the breathing effect by a fixed value. +* ```breathing_speed_default()``` - Reset the speed of the breathing effect to the default value. + +The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed: + + case MACRO_FUNCTION: + if (record->event.pressed) + { + breathing_speed_set(3); + breathing_enable(); + layer_on(LAYER_FUNCTION); + } + else + { + breathing_speed_set(1); + breathing_self_disable(); + layer_off(LAYER_FUNCTION); + } + break; + +The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed: + + case MACRO_RAISED: + if (record->event.pressed) + { + layer_on(LAYER_RAISED); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); + } + else + { + layer_off(LAYER_RAISED); + update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); + } + break; + ## RGB Under Glow Mod ![Planck with RGB Underglow](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg) @@ -1043,7 +1038,7 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile). Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default: - + #define RGB_DI_PIN F4 // The pin your RGB strip is wired to #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 14 // Number of LEDs @@ -1090,15 +1085,15 @@ If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty The `USB Device descriptor parameter` block contains parameters are used to uniquely identify your keyboard, but they don't really matter to the machine. -Your `MATRIX_ROWS` and `MATRIX_COLS` are the numbers of rows and cols in your keyboard matrix - this may be different than the number of actual rows and columns on your keyboard. There are some tricks you can pull to increase the number of keys in a given matrix, but most keyboards are pretty straight-forward. +Your `MATRIX_ROWS` and `MATRIX_COLS` are the numbers of rows and cols in your keyboard matrix - this may be different than the number of actual rows and columns on your keyboard. There are some tricks you can pull to increase the number of keys in a given matrix, but most keyboards are pretty straight-forward. The `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` are the pins your MCU uses on each row/column. Your schematic (if you have one) will have this information on it, and the values will vary depending on your setup. This is one of the most important things to double-check in getting your keyboard setup correctly. For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the diodes in the `COL2ROW` position, but it's possible that they are in the other - people coming from EasyAVR often use `ROW2COL`. Nothing will function if this is incorrect. -`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported. +`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported. -`BACKLIGHT_BREATHING` is a fancier backlight feature, and uses one of the timers. +`BACKLIGHT_BREATHING` is a fancier backlight feature that adds breathing/pulsing/fading effects to the backlight. It uses the same timer as the normal backlight. These breathing effects must be called by code in your keymap. `BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number. @@ -1141,55 +1136,4 @@ Here is where you can (optionally) define your `KEYMAP` function to remap your m } ``` -Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. - -# Unit Testing - -If you are new to unit testing, then you can find many good resources on internet. However most of it is scattered around in small pieces here and there, and there's also many different opinions, so I won't give any recommendations. - -Instead I recommend these two books, explaining two different styles of Unit Testing in detail. - -* "Test Driven Development: By Example: Kent Beck" -* "Growing Object-Oriented Software, Guided By Tests: Steve Freeman, Nat Pryce" - -If you prefer videos there are Uncle Bob's [Clean Coders Videos](https://cleancoders.com/), which unfortunately cost quite a bit, especially if you want to watch many of them. But James Shore has a free [Let's Play](http://www.jamesshore.com/Blog/Lets-Play) video series. - -## Google Test and Google Mock -It's possible to Unit Test your code using [Google Test](https://github.com/google/googletest). The Google Test framework also includes another component for writing testing mocks and stubs, called "Google Mock". For information how to write the actual tests, please refer to the documentation on that site. - -## Use of C++ - -Note that Google Test and therefore any test has to be written in C++, even if the rest of the QMK codebases is written in C. This should hopefully not be a problem even if you don't know any C++, since there's quite clear documentation and examples of the required C++ features, and you can write the rest of the test code almost as you would write normal C. Note that some compiler errors which you might get can look quite scary, but just read carefully what it says, and you should be ok. - -One thing to remember, is that you have to append `extern "C"` around all of your C file includes. - -## Adding tests for new or existing features - -If you want to unit test some feature, then take a look at the existing serial_link tests, in the `quantum/serial_link/tests folder`, and follow the steps below to create a similar structure. - -1. If it doesn't already exist, add a test subfolder to the folder containing the feature. -2. Create a `testlist.mk` and a `rules.mk` file in that folder. -3. Include those files from the root folder `testlist.mk`and `build_test.mk` respectively. -4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the serial_link tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests. -5. Define the source files and required options in the `rules.mk` file. - * `_SRC` for source files - * `_DEFS` for additional defines - * `_INC` for additional include folders -6. Write the tests in a new cpp file inside the test folder you created. That file has to be one of the files included from the `rules.mk` file. - -Note how there's several different tests, each mocking out a separate part. Also note that each of them only compiles the very minimum that's needed for the tests. It's recommend that you try to do the same. For a relevant video check out [Matt Hargett "Advanced Unit Testing in C & C++](https://www.youtube.com/watch?v=Wmy6g-aVgZI) - -## Running the tests - -To run all the tests in the codebase, type `make test`. You can also run test matching a substring by typing `make test-matchingsubstring` Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer. - -## Debugging the tests - -If there are problems with the tests, you can find the executable in the `./build/test` folder. You should be able to run those with GDB or a similar debugger. - -## Full Integration tests - -It's not yet possible to do a full integration test, where you would compile the whole firmware and define a keymap that you are going to test. However there are plans for doing that, because writing tests that way would probably be easier, at least for people that are not used to unit testing. - -In that model you would emulate the input, and expect a certain output from the emulated keyboard. - +Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. \ No newline at end of file -- cgit v1.2.3 From f065652812e6ac783db50e58a42fbb01ea817fbc Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 3 Sep 2016 20:33:34 -0500 Subject: Updated doc to contain breathing information. --- readme.md | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 144 insertions(+), 29 deletions(-) diff --git a/readme.md b/readme.md index 371470bc36..903c2b1e8c 100644 --- a/readme.md +++ b/readme.md @@ -54,10 +54,10 @@ Here are the steps 1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). 2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following 1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first - 2. From within the Git bash run �git rm --cached -r .` + 2. From within the Git bash run `git rm --cached -r .` 3. Followed by `git reset --hard` 3. Start the "Bash On Ubuntu On Windows" from the start menu -4. With the bash open, navigate to your git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. +4. With the bash open, navigate to your Git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. 5. Run `sudo util/install_dependencies.sh`. 6. After a while the installation will finish, and you are good to go @@ -69,11 +69,12 @@ Here are the steps ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. 2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. -3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. -4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! -7. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. +3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). +4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. +5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. +6. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. +7. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! +8. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. ### Mac If you're using [homebrew,](http://brew.sh/) you can use the following commands: @@ -90,6 +91,10 @@ You can also try these instructions: 2. Install the Command Line Tools from `Xcode->Preferences->Downloads`. 3. Install [DFU-Programmer][dfu-prog]. +If you are going to flash Infinity based keyboards you will also need dfu-util + + brew install dfu-util + ### Linux To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. @@ -157,43 +162,103 @@ In every keymap folder, the following files are recommended: ## The `make` command -The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards//`), or your keymap folder (`/keyboards//keymaps//`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)). +The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). + +**NOTE:** To abort a make command press `Ctrl-c` + +The following instruction refers to these folders. + +* The `root` (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. +* The `keyboard` folder is any keyboard project's folder, like `/keyboards/planck`. +* The `keymap` folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. +* The `subproject` folder is the subproject folder of a keyboard, like `/keyboards/ergodox/ez` + +### Simple instructions for building and uploading a keyboard + +**Most keyboards have more specific instructions in the keyboard specific readme.md file, so please check that first** + +If the `keymap` folder contains a file name `Makefile` + +1. Change the directory to the `keymap` folder +2. Run `make -` + +Otherwise, if there's no `Makefile` in the `keymap` folder + +1. Enter the `keyboard` folder +2. Run `make --` -By default, this will generate a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. +In the above commands, replace: -Below are some definitions that will be useful: +* `` with the name of your keymap +* `` with the name of the subproject (revision or sub-model of your keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. + * If the keyboard doesn't have a subproject, or if you are happy with the default (defined in `rules.mk` file of the `keyboard` folder), you can leave it out. But remember to also remove the dash (`-`) from the command. +* `` The programmer to use. Most keyboards use `dfu`, but some use `teensy`. Infinity keyboards use `dfu-util`. Check the readme file in the keyboard folder to find out which programmer to use. + * If you don't add `-` - specifies the keyboard (only to be used in root) - * `make keymap=` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder) -* `make clean` - cleans the `.build` folder, ensuring that everything is re-built -* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ. - * `keyboard=` and `keymap=` are compatible with this -* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root) -* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root) -* `make all-keymaps [keyboard=]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `` -* `make all-keyboards-*`, `make all-keyboards-default-*` and `make all-keymaps-* [keyboard=]` - like the normal "make-all-*" commands, but the last string aftter the `-` (for example clean) is passed to the keyboard make command. -Other, less useful functionality: +The full syntax of the `make` command is the following, but parts of the command can be left out if you run it from other directories than the `root` (as you might already have noticed by reading the simple instructions). + +`---`, where: + +* `` is the name of the keyboard, for example `planck` + * Use `allkb` to compile all keyboards +* `` is the name of the subproject (revision or sub-model of the keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. + * If the keyboard doesn't have any subprojects, it can be left out + * To compile the default subproject, you can leave it out, or specify `defaultsp` + * Use `allsp` to compile all subprojects +* `` is the name of the keymap, for example `algernon` + * Use `allkm` to compile all keymaps +* `` will be explained in more detail below. + +**Note:** When you leave some parts of the command out, you should also remove the dash (`-`). + +As mentioned above, there are some shortcuts, when you are in a: + +* `keyboard` folder, the command will automatically fill the `` part. So you only need to type `--` +* `subproject` folder, it will fill in both `` and `` +* `keymap` folder, then `` and `` will be filled in. If you need to specify the `` use the following syntax `-` + * Note in order to support this shortcut, the keymap needs its own Makefile (see the example [here](/doc/keymap_makefile_example.mk)) +* `keymap` folder of a `subproject`, then everything except the `` will be filled in + +The `` means the following +* If no target is given, then it's the same as `all` below +* `all` compiles the keyboard and generates a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. +* `dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for Infinity keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme. **Note** that some operating systems needs root access for these commands to work, so in that case you need to run for example `sudo make dfu`. +* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems. + +Some other targets are supported but, but not important enough to be documented here. Check the source code of the make files for more information. + +You can also add extra options at the end of the make command line, after the target * `make COLOR=false` - turns off color output * `make SILENT=true` - turns off output besides errors/warnings -* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting) +* `make VERBOSE=true` - outputs all of the gcc stuff (not interesting, unless you need to debug) + +The make command itself also has some additional options, type `make --help` for more information. The most useful is probably `-jx`, which specifies that you want to compile using more than one CPU, the `x` represents the number of CPUs that you want to use. Setting that can greatly reduce the compile times, especially if you are compiling many keyboards/keymaps. I usually set it to one less than the number of CPUs that I have, so that I have some left for doing other things while it's compiling. Note that not all operating systems and make versions supports that option. + +Here are some examples commands + +* `make allkb-allsp-allkm` builds everything (all keyboards, all subprojects, all keymaps). Running just `make` from the `root` will also run this. +* `make` from within a `keyboard` directory, is the same as `make keyboard-allsp-allkm`, which compiles all subprojects and keymaps of the keyboard. **NOTE** that this behaviour has changed. Previously it compiled just the default keymap. +* `make ergodox-infinity-algernon-clean` will clean the build output of the Ergodox Infinity keyboard. This example uses the full syntax and can be run from any folder with a `Makefile` +* `make dfu COLOR=false` from within a keymap folder, builds and uploads the keymap, but without color output. ## The `Makefile` -There are 3 different `make` and `Makefile` locations: +There are 5 different `make` and `Makefile` locations: * root (`/`) * keyboard (`/keyboards//`) * keymap (`/keyboards//keymaps//`) +* subproject (`/keyboards//`) +* subproject keymap (`/keyboards///keymaps/`) -The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.** +The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **The file is required if you want to run `make` in the keymap folder.** + +For keyboards and subprojects, the make files are split in two parts `Makefile` and `rules.mk`. All settings can be found in the `rules.mk` file, while the `Makefile` is just there for support and including the root `Makefile`. Keymaps contain just one `Makefile` for simplicity. ### Makefile options @@ -1136,4 +1201,54 @@ Here is where you can (optionally) define your `KEYMAP` function to remap your m } ``` -Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. \ No newline at end of file +Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. + +# Unit Testing + +If you are new to unit testing, then you can find many good resources on internet. However most of it is scattered around in small pieces here and there, and there's also many different opinions, so I won't give any recommendations. + +Instead I recommend these two books, explaining two different styles of Unit Testing in detail. + +* "Test Driven Development: By Example: Kent Beck" +* "Growing Object-Oriented Software, Guided By Tests: Steve Freeman, Nat Pryce" + +If you prefer videos there are Uncle Bob's [Clean Coders Videos](https://cleancoders.com/), which unfortunately cost quite a bit, especially if you want to watch many of them. But James Shore has a free [Let's Play](http://www.jamesshore.com/Blog/Lets-Play) video series. + +## Google Test and Google Mock +It's possible to Unit Test your code using [Google Test](https://github.com/google/googletest). The Google Test framework also includes another component for writing testing mocks and stubs, called "Google Mock". For information how to write the actual tests, please refer to the documentation on that site. + +## Use of C++ + +Note that Google Test and therefore any test has to be written in C++, even if the rest of the QMK codebases is written in C. This should hopefully not be a problem even if you don't know any C++, since there's quite clear documentation and examples of the required C++ features, and you can write the rest of the test code almost as you would write normal C. Note that some compiler errors which you might get can look quite scary, but just read carefully what it says, and you should be ok. + +One thing to remember, is that you have to append `extern "C"` around all of your C file includes. + +## Adding tests for new or existing features + +If you want to unit test some feature, then take a look at the existing serial_link tests, in the `quantum/serial_link/tests folder`, and follow the steps below to create a similar structure. + +1. If it doesn't already exist, add a test subfolder to the folder containing the feature. +2. Create a `testlist.mk` and a `rules.mk` file in that folder. +3. Include those files from the root folder `testlist.mk`and `build_test.mk` respectively. +4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the serial_link tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests. +5. Define the source files and required options in the `rules.mk` file. + * `_SRC` for source files + * `_DEFS` for additional defines + * `_INC` for additional include folders +6. Write the tests in a new cpp file inside the test folder you created. That file has to be one of the files included from the `rules.mk` file. + +Note how there's several different tests, each mocking out a separate part. Also note that each of them only compiles the very minimum that's needed for the tests. It's recommend that you try to do the same. For a relevant video check out [Matt Hargett "Advanced Unit Testing in C & C++](https://www.youtube.com/watch?v=Wmy6g-aVgZI) + +## Running the tests + +To run all the tests in the codebase, type `make test`. You can also run test matching a substring by typing `make test-matchingsubstring` Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer. + +## Debugging the tests + +If there are problems with the tests, you can find the executable in the `./build/test` folder. You should be able to run those with GDB or a similar debugger. + +## Full Integration tests + +It's not yet possible to do a full integration test, where you would compile the whole firmware and define a keymap that you are going to test. However there are plans for doing that, because writing tests that way would probably be easier, at least for people that are not used to unit testing. + +In that model you would emulate the input, and expect a certain output from the emulated keyboard. -- cgit v1.2.3 From d55a705bbb362934306a3be632d6bacb99fd9de2 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 3 Sep 2016 23:21:24 -0500 Subject: Moved breathing backlighting section in readme.md --- readme.md | 120 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/readme.md b/readme.md index 903c2b1e8c..7ee3b28d43 100644 --- a/readme.md +++ b/readme.md @@ -877,6 +877,66 @@ In `quantum/keymap_extras/`, you'll see various language files - these work the 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. +## Backlight Breathing + +In order to enable backlight breathing, the following line must be added to your config.h file. + + #define BACKLIGHT_BREATHING + +The following function calls are used to control the breathing effect. + +* ```breathing_enable()``` - Enable the free-running breathing effect. +* ```breathing_disable()``` - Disable the free-running breathing effect immediately. +* ```breathing_self_disable()``` - Disable the free-running breathing effect after the current effect ends. +* ```breathing_toggle()``` - Toggle the free-running breathing effect. +* ```breathing_defaults()``` - Reset the speed and brightness settings of the breathing effect. + +The following function calls are used to control the maximum brightness of the breathing effect. + +* ```breathing_intensity_set(value)``` - Set the brightness of the breathing effect when it is at its max value. +* ```breathing_intensity_default()``` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity. + +The following function calls are used to control the cycling speed of the breathing effect. + +* ```breathing_speed_set(value)``` - Set the speed of the breathing effect - how fast it cycles. +* ```breathing_speed_inc(value)``` - Increase the speed of the breathing effect by a fixed value. +* ```breathing_speed_dec(value)``` - Decrease the speed of the breathing effect by a fixed value. +* ```breathing_speed_default()``` - Reset the speed of the breathing effect to the default value. + +The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed: + + case MACRO_FUNCTION: + if (record->event.pressed) + { + breathing_speed_set(3); + breathing_enable(); + layer_on(LAYER_FUNCTION); + } + else + { + breathing_speed_set(1); + breathing_self_disable(); + layer_off(LAYER_FUNCTION); + } + break; + +The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed: + + case MACRO_RAISED: + if (record->event.pressed) + { + layer_on(LAYER_RAISED); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); + } + else + { + layer_off(LAYER_RAISED); + update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); + } + break; + ## Other firmware shortcut keycodes * `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`) @@ -1030,66 +1090,6 @@ In the default script of AutoHotkey you can define custom hotkeys. The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a. AutoHotkey inserts the Text right of `Send, ` when this combination is pressed. -## Backlight Breathing - -In order to enable backlight breathing, the following line must be added to your config.h file. - - #define BACKLIGHT_BREATHING - -The following function calls are used to control the breathing effect. - -* ```breathing_enable()``` - Enable the free-running breathing effect. -* ```breathing_disable()``` - Disable the free-running breathing effect immediately. -* ```breathing_self_disable()``` - Disable the free-running breathing effect after the current effect ends. -* ```breathing_toggle()``` - Toggle the free-running breathing effect. -* ```breathing_defaults()``` - Reset the speed and brightness settings of the breathing effect. - -The following function calls are used to control the maximum brightness of the breathing effect. - -* ```breathing_intensity_set(value)``` - Set the brightness of the breathing effect when it is at its max value. -* ```breathing_intensity_default()``` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity. - -The following function calls are used to control the cycling speed of the breathing effect. - -* ```breathing_speed_set(value)``` - Set the speed of the breathing effect - how fast it cycles. -* ```breathing_speed_inc(value)``` - Increase the speed of the breathing effect by a fixed value. -* ```breathing_speed_dec(value)``` - Decrease the speed of the breathing effect by a fixed value. -* ```breathing_speed_default()``` - Reset the speed of the breathing effect to the default value. - -The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed: - - case MACRO_FUNCTION: - if (record->event.pressed) - { - breathing_speed_set(3); - breathing_enable(); - layer_on(LAYER_FUNCTION); - } - else - { - breathing_speed_set(1); - breathing_self_disable(); - layer_off(LAYER_FUNCTION); - } - break; - -The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed: - - case MACRO_RAISED: - if (record->event.pressed) - { - layer_on(LAYER_RAISED); - breathing_speed_set(2); - breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); - } - else - { - layer_off(LAYER_RAISED); - update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); - } - break; - ## RGB Under Glow Mod ![Planck with RGB Underglow](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg) -- cgit v1.2.3 From f6cb08a5bd0d3c34c64691c7f51911742b562c05 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sun, 4 Sep 2016 01:07:36 -0500 Subject: Added diagonal mice macros, breathing ala Atomic --- keyboards/planck/keymaps/pvc/config.h | 9 +- keyboards/planck/keymaps/pvc/keymap.c | 428 +++++++++++++++++++--------------- 2 files changed, 238 insertions(+), 199 deletions(-) diff --git a/keyboards/planck/keymaps/pvc/config.h b/keyboards/planck/keymaps/pvc/config.h index c857a3e89d..1113372b0a 100644 --- a/keyboards/planck/keymaps/pvc/config.h +++ b/keyboards/planck/keymaps/pvc/config.h @@ -59,13 +59,8 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* ws2812 RGB LED */ -#define RGB_DI_PIN D1 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 28 // Number of LEDs -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING /* * Feature disable options diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c index 0bb7f0def2..8ff40f377c 100644 --- a/keyboards/planck/keymaps/pvc/keymap.c +++ b/keyboards/planck/keymaps/pvc/keymap.c @@ -2,48 +2,50 @@ #include "action_layer.h" #include "eeconfig.h" #include "led.h" +#include "mousekey.h" #ifdef AUDIO_ENABLE #include "audio.h" #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_UPPER 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_ADJUST 7 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_UPPER 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_TOGGLE 14 -#define MACRO_AUDIO_TOGGLE 16 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 -#define MACRO_BREATH_TOGGLE 21 -#define MACRO_BREATH_SPEED_INC 23 -#define MACRO_BREATH_SPEED_DEC 24 -#define MACRO_BREATH_DEFAULT 25 +enum keyboard_layers { + LAYER_QWERTY = 0, + LAYER_UPPER, + LAYER_LOWER, + LAYER_FUNCTION, + LAYER_MOUSE, + LAYER_ADJUST, +}; +enum keyboard_macros { + MACRO_QWERTY = 0, + MACRO_UPPER, + MACRO_LOWER, + MACRO_FUNCTION, + MACRO_MOUSE, + MACRO_TIMBRE_1, + MACRO_TIMBRE_2, + MACRO_TIMBRE_3, + MACRO_TIMBRE_4, + MACRO_TEMPO_U, + MACRO_TEMPO_D, + MACRO_TONE_DEFAULT, + MACRO_MUSIC_TOGGLE, + MACRO_AUDIO_TOGGLE, + MACRO_INC_VOICE, + MACRO_DEC_VOICE, + MACRO_BACKLIGHT, + MACRO_BREATH_TOGGLE, + MACRO_BREATH_SPEED_INC, + MACRO_BREATH_SPEED_DEC, + MACRO_BREATH_DEFAULT, + MACRO_MOUSE_MOVE_UL, + MACRO_MOUSE_MOVE_UR, + MACRO_MOUSE_MOVE_DL, + MACRO_MOUSE_MOVE_DR, +}; #define M_QWRTY M(MACRO_QWERTY) -#define M_COLMK M(MACRO_COLEMAK) -#define M_DVORK M(MACRO_DVORAK) #define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) @@ -60,6 +62,10 @@ #define M_BSPDU M(MACRO_BREATH_SPEED_INC) #define M_BSPDD M(MACRO_BREATH_SPEED_DEC) #define M_BDFLT M(MACRO_BREATH_DEFAULT) +#define M_MS_UL M(MACRO_MOUSE_MOVE_UL) +#define M_MS_UR M(MACRO_MOUSE_MOVE_UR) +#define M_MS_DL M(MACRO_MOUSE_MOVE_DL) +#define M_MS_DR M(MACRO_MOUSE_MOVE_DR) #define VC_UP M(MACRO_INC_VOICE) @@ -86,147 +92,124 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY - * .-----------------------------------------------------------------------------------------------------------. - * | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | ENTER | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT | - * '-----------------------------------------------------------------------------------------------------------' - */ - - [LAYER_QWERTY] = { // 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_UP, KC_ENT }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - -/* COLEMAK - * .-----------------------------------------------------------------------------------------------------------. - * | TAB | Q | W | F | P | G | J | L | U | Y | ; | ESC | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | Z | X | C | V | B | K | M | , | . | UP | ENTER | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT | - * '-----------------------------------------------------------------------------------------------------------' - */ - - [LAYER_COLEMAK] = { // COLEMAK - { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC }, - { KC_BSPC, 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_UP, KC_ENT }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - -/* DVORAK - * .-----------------------------------------------------------------------------------------------------------. - * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | ESC | A | O | E | U | I | D | H | T | N | S | / | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | - * '-----------------------------------------------------------------------------------------------------------' - */ - - [LAYER_DVORAK] = { // 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 }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, - }, - -/* UPPER - * .-----------------------------------------------------------------------------------------------------------. - * | PRINT | F1 | F2 | F3 | F4 | NUM LK | / | 7 | 8 | 9 | - | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | CAP LK | F5 | F6 | F7 | F8 | SCR LK | * | 4 | 5 | 6 | + | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | F9 | F10 | F11 | F12 | PAUSE | | 1 | 2 | 3 | ENTER | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | | | | | 0 | 0 | | RALT | . | ENTER | END | - * '-----------------------------------------------------------------------------------------------------------' - */ - - [LAYER_UPPER] = { // UPPER - { KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL }, - { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS }, - { _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME }, - { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END }, - }, - -/* LOWER - * .-----------------------------------------------------------------------------------------------------------. - * | | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | ^ | * | + | - | / | \ | _ | ' | " | ` | PG DN | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | & | ! | ~ | ; | : | = | < | > | ? | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | | | | | | | | | | | END | - * '-----------------------------------------------------------------------------------------------------------' - */ - - [LAYER_LOWER] = { // LOWER - { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, KC_PGUP }, - { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, KC_PGDN }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_HOME }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END }, - }, - - -/* FUNCTION - * .-----------------------------------------------------------------------------------------------------------. - * | NUM LK | F13 | F14 | F15 | F16 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PAUSE | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | CAP LK | F17 | F18 | F19 | F20 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PRINT | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | SCR LK | F21 | F22 | F23 | F24 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV | - * '-----------------------------------------------------------------------------------------------------------' - */ - [LAYER_FUNCTION] = { // FUNCTION - { KC_NLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS }, - { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR }, - { KC_SLCK, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE }, - { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT }, - }, +/* LAYER = LAYER_QWERTY + .-----------------------------------------------------------------------------------------------------------. + | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | ENTER | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | OSHIFT | LEFT | DOWN | RIGHT | + '-----------------------------------------------------------------------------------------------------------' +*/ + +[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_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_UP , KC_ENT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT } +}, + +/* LAYER = LAYER_UPPER + .-----------------------------------------------------------------------------------------------------------. + | PRINT | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | DEL | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | PAUSE | F5 | F6 | F7 | F8 | SCR LK | KP * | KP 4 | KP 5 | KP 6 | KP + | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F9 | F10 | F11 | F12 | PAUSE | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | UPPER | KP 0 | KP 0 | ______ | RALT | KP . | KP ENT | END | + '-----------------------------------------------------------------------------------------------------------' +*/ + +[LAYER_UPPER] = { + { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL }, + { KC_PAUS, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS }, + { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PAUS, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME }, + { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END } +}, + +/* LAYER = LAYER_LOWER + .-----------------------------------------------------------------------------------------------------------. + | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | PG DN | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | ______ | ______ | LOWER | ______ | ______ | ______ | END | + '-----------------------------------------------------------------------------------------------------------' +*/ + +[LAYER_LOWER] = { + { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , KC_PGUP }, + { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , KC_PGDN }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, KC_HOME }, + { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, KC_END } +}, + +/* LAYER = LAYER_FUNCTION + .-----------------------------------------------------------------------------------------------------------. + | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | VOL UP | MUTE | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | FN | ______ | ______ | PLAY | PLAY | ______ | ______ | PREV | VOL DN | NEXT | + '-----------------------------------------------------------------------------------------------------------' +*/ + +[LAYER_FUNCTION] = { + { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE }, + { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT } +}, #ifdef MOUSEKEY_ENABLE - [LAYER_MOUSE] = { // MOUSE - { KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D }, - { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R }, - }, +/* LAYER = LAYER_MOUSE + .-----------------------------------------------------------------------------------------------------------. + | ESC | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | MS WHL | MS WHR | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | MS WHU | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | MS U | MS WHD | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | MS BT1 | MS BT1 | ______ | ______ | MS L | MS D | MS R | + '-----------------------------------------------------------------------------------------------------------' +*/ + +[LAYER_MOUSE] = { + { KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, KC_WH_L, KC_WH_R }, + { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, KC_WH_U }, + { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, KC_MS_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R } +}, #endif - [LAYER_ADJUST] = { // ADJUST - { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, MU_TOG, AU_TOG }, - { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, MUV_IN, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, - }, - -/* - [LAYER_EMPTY] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, }, - }, +/* LAYER = LAYER_ADJUST + .-----------------------------------------------------------------------------------------------------------. + | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUSIC | AUDIO | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | VOICE+ | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX | XXXXXX | LOWER | XXXXXX | TEMPO- | VOICE- | TEMPO+ | + '-----------------------------------------------------------------------------------------------------------' */ +[LAYER_ADJUST] = { + { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG , AU_TOG }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP } +}, + }; #ifdef AUDIO_ENABLE @@ -234,10 +217,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { float tone_my_startup[][2] = SONG(ODE_TO_JOY); float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY); -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); - float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); float tone_music_on[][2] = SONG(DOE_A_DEER); float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); @@ -267,46 +246,38 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { - case MACRO_QWERTY: + case MACRO_BREATH_TOGGLE: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - layer_on(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + breathing_defaults(); } - else + break; + + case MACRO_QWERTY: + if (record->event.pressed) { - layer_off(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + persistant_default_layer_set(1UL<event.pressed) { layer_on(LAYER_UPPER); + breathing_speed_set(2); + breathing_pulse(); update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } else @@ -323,13 +296,32 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(LAYER_LOWER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; + case MACRO_FUNCTION: if (record->event.pressed) { + breathing_speed_set(3); + breathing_enable(); layer_on(LAYER_FUNCTION); } else { + breathing_speed_set(1); + breathing_self_disable(); layer_off(LAYER_FUNCTION); } break; @@ -352,6 +344,58 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; + case MACRO_MOUSE_MOVE_UL: + if (record->event.pressed) + { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } + else + { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + break; + + case MACRO_MOUSE_MOVE_UR: + if (record->event.pressed) + { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } + else + { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + break; + + case MACRO_MOUSE_MOVE_DL: + if (record->event.pressed) + { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } + else + { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + break; + + case MACRO_MOUSE_MOVE_DR: + if (record->event.pressed) + { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } + else + { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + break; + #endif /* MOUSEKEY_ENABLE */ #ifdef AUDIO_ENABLE -- cgit v1.2.3 From 13f3c73386da9b15b255b014f5da81cd51613ca1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 4 Sep 2016 23:26:49 +0300 Subject: Fix the ldflags.txt and obj.txt checks There was a minor typo, which caused the files to not be generated and therefore the elf files were always linked. --- tmk_core/rules.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 79fc7119a6..e4c8aecb2c 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -332,11 +332,13 @@ $1/compiler.txt: $1/force $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef +.PRECIOUS: $(MASTER_OUTPUT)/obj.txt $(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force - echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@ + echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@ +.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force - echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@ + echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@ # We have to use static rules for the .d files for some reason -- cgit v1.2.3 From bf5941b335268748ee7877fc24cdd538a9faacd0 Mon Sep 17 00:00:00 2001 From: Samuel Ryan Goodwin Date: Mon, 5 Sep 2016 15:53:52 +0200 Subject: Add my keymap. --- keyboards/planck/keymaps/sgoodwin/Makefile | 25 +++ keyboards/planck/keymaps/sgoodwin/keymap.c | 233 ++++++++++++++++++++++++++++ keyboards/planck/keymaps/sgoodwin/readme.md | 10 ++ 3 files changed, 268 insertions(+) create mode 100644 keyboards/planck/keymaps/sgoodwin/Makefile create mode 100644 keyboards/planck/keymaps/sgoodwin/keymap.c create mode 100644 keyboards/planck/keymaps/sgoodwin/readme.md diff --git a/keyboards/planck/keymaps/sgoodwin/Makefile b/keyboards/planck/keymaps/sgoodwin/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/planck/keymaps/sgoodwin/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/sgoodwin/keymap.c b/keyboards/planck/keymaps/sgoodwin/keymap.c new file mode 100644 index 0000000000..4d5d3d7ef6 --- /dev/null +++ b/keyboards/planck/keymaps/sgoodwin/keymap.c @@ -0,0 +1,233 @@ +// This is sgoodwin's layout file for the Quantum project. +// It doesn't have Plover or Dvorak layers because he doesn't use that. +// It Also doesn't allow for swapping alt with CMD because that only happens in error. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 1 +#define _COLEMAK 0 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum planck_keycodes { + COLEMAK = SAFE_RANGE, + QWERTY, + LOWER, + RAISE, + BACKLIT, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |SHEnt | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT) }, + {ALL_T(KC_NO), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |SHEnt | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT) }, + {ALL_T(KC_NO), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff| | |Qwerty|Colemk| | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, _______, _______, QWERTY, COLEMAK, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/sgoodwin/readme.md b/keyboards/planck/keymaps/sgoodwin/readme.md new file mode 100644 index 0000000000..dfa88f380d --- /dev/null +++ b/keyboards/planck/keymaps/sgoodwin/readme.md @@ -0,0 +1,10 @@ +# sgoodwin's Planck Layout + +Includes: + +1. No Dvorak or Plover +2. No alt-swapping +3. Right enter is shift when held down, enter when tapped. +4. Bottom left corner in normal layers is Hyper and not brightness control. +5. Brightness is instead in the bottom corner on raise/lower. + -- cgit v1.2.3 From e9ce4960c15066c14c775b1d769f1f89ec450787 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Mon, 5 Sep 2016 17:40:03 -0400 Subject: Add new ErgoDox EZ keymap, YORUIAN --- .../keymaps/yoruian/90-ergodox-yoruian.conf | 6 ++ keyboards/ergodox/keymaps/yoruian/Makefile | 13 +++ keyboards/ergodox/keymaps/yoruian/README | 102 +++++++++++++++++++++ keyboards/ergodox/keymaps/yoruian/ergodox_yoruian | 34 +++++++ keyboards/ergodox/keymaps/yoruian/keymap.c | 61 ++++++++++++ keyboards/ergodox/keymaps/yoruian/yoruian.h | 61 ++++++++++++ 6 files changed, 277 insertions(+) create mode 100644 keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf create mode 100644 keyboards/ergodox/keymaps/yoruian/Makefile create mode 100644 keyboards/ergodox/keymaps/yoruian/README create mode 100644 keyboards/ergodox/keymaps/yoruian/ergodox_yoruian create mode 100644 keyboards/ergodox/keymaps/yoruian/keymap.c create mode 100644 keyboards/ergodox/keymaps/yoruian/yoruian.h diff --git a/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf new file mode 100644 index 0000000000..c8a92c5c5b --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf @@ -0,0 +1,6 @@ +Section "InputClass" + Identifier "ErgoDox EZ" + MatchIsKeyboard "on" + MatchProduct "ErgoDox EZ ErgoDox EZ" + Option "XkbLayout" "ergodox_ez_yoruian" +EndSection diff --git a/keyboards/ergodox/keymaps/yoruian/Makefile b/keyboards/ergodox/keymaps/yoruian/Makefile new file mode 100644 index 0000000000..b43a24c611 --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/Makefile @@ -0,0 +1,13 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + +install-xorg-configuration: + install -m 0664 90-$(KEYBOARD)-$(KEYMAP).conf \ + /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf + install -m 0644 $(KEYBOARD)_$(KEYMAP) \ + /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP) + +uninstall-xorg-configuration: + -rm -f /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf + -rm -f /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP) diff --git a/keyboards/ergodox/keymaps/yoruian/README b/keyboards/ergodox/keymaps/yoruian/README new file mode 100644 index 0000000000..99b41434ef --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/README @@ -0,0 +1,102 @@ + Snarfangel's YORUIAN for the ErgoDox EZ + ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +DEFAULT +┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ +┃ ` │ ; │ : │ - │ / │ ( │ < ┃ ┃ > │ ) │ ^ │ * │ ~ │ Γ │ σ ┃ +┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨ +┃ ⎋ │ . │ y │ o │ r │ ? │ ✦ ┃ ┃ ✦ │ j │ v │ d │ f │ w │ q ┃ +┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨ +┃ ⎈ │ u │ i │ a │ n │ ! ├───┨ ┠───┤ m │ h │ t │ s │ c │ ⎈ ┃ +┠───┼───┼───┼───┼───┼───┤ ❖ ┃ ┃ ❖ ├───┼───┼───┼───┼───┼───┨ +┃ λ │ ' │ " │ , │ _ │ = │ ┃ ┃ │ k │ l │ p │ g │ b │ x ┃ +┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨ +┃ ⎀ │ E │ │ │ ◆ ┃ ┃ ◆ │ │ │ z │ ⎙ ┃ +┗━━━┷━━━┷━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┷━━━┷━━━┛ + ┏━━━┯━━━┓ ┏━━━┯━━━┓ + ┃ ⌫ │ ⌥ ┃ ┃ ⎄ │ ↹ ┃ + ┏━━━╃───┼───┨ ┠───┼───╄━━━┓ + ┃ │ │ ┃ ┃ │ │ ┃ + ┃ e │ ⇧ ├───┨ ┠───┤ ⏎ │ ␣ ┃ + ┃ │ │ ┃ ┃ │ │ ┃ + ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛ +SHIFTED +┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ +┃ 9 │ 7 │ 5 │ 3 │ 1 │ [ │ { ┃ ┃ } │ ] │ 0 │ 2 │ 4 │ 6 │ 8 ┃ +┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨ +┃ │ * │ Y │ O │ R │ \ │ ┃ ┃ │ J │ V │ D │ F │ W │ Q ┃ +┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨ +┃ │ U │ I │ A │ N │ | ├───┨ ┠───┤ M │ H │ T │ S │ C │ ┃ +┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨ +┃ │ # │ $ │ @ │ & │ + │ ┃ ┃ │ K │ L │ P │ G │ B │ X ┃ +┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨ +┃ │ │ │ │ ┃ ┃ │ │ │ Z │ ┃ +┗━━━┷━━━┷━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┷━━━┷━━━┛ + ┏━━━┯━━━┓ ┏━━━┯━━━┓ + ┃ │ ┃ ┃ │ ┃ + ┏━━━╃───┼───┨ ┠───┼───╄━━━┓ + ┃ │ │ ┃ ┃ │ │ ┃ + ┃ │ ├───┨ ┠───┤ │ ┃ + ┃ │ │ ┃ ┃ │ │ ┃ + ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛ +λ LAYER +┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ +┃ │ │ │ │ │ │ ┃ ┃ │ │ ⑤ │ ⑥ │ ⑦ │ ⑧ │ ⑨ ┃ +┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨ +┃ │ │ │ │ │ │ ┃ ┃ │ │ ① │ ② │ ③ │ ④ │ ⑩ ┃ +┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨ +┃ │ │ │ │ │ ├───┨ ┠───┤ ⎉ │ ← │ ↓ │ ↑ │ → │ ⑪ ┃ +┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨ +┃ λ │ │ │ │ │ │ ┃ ┃ │ │ ⇱ │ ⎘ │ ⎗ │ ⇲ │ ⑫ ┃ +┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨ +┃ │ │ │ │ ┃ ┃ │ │ │ │ ┃ +┗━━━┷━━━┷━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┷━━━┷━━━┛ + ┏━━━┯━━━┓ ┏━━━┯━━━┓ + ┃ │ ┃ ┃ │ ┃ + ┏━━━╃───┼───┨ ┠───┼───╄━━━┓ + ┃ │ │ ┃ ┃ │ │ ┃ + ┃ │ ├───┨ ┠───┤ │ ┃ + ┃ │ │ ┃ ┃ │ │ ┃ + ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛ + +Installation (X only) +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + 1. Build and flash firmware as usual + + 2. sudo make install-xorg-configuration + + 3. Restart X + +Features +‾‾‾‾‾‾‾‾ + • E on the thumb + + • Emacs-friendly + + • Symmetric control keys for finger wear levelling + + • Greek and subscript dead keys + + • Compose key for arbitrary Unicode input via ~/.XCompose + +Don't Cares +‾‾‾‾‾‾‾‾‾‾‾ + • Easy migration from QWERTY + + • Compatbility with non-XKB systems + + • Mouse emulation + + • Media keys + +Acknowledgements +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +Snarfangel, for designing the layout. + +The GNU FreeFont project and Steve White, for adding new keyboard +symbols. + +Xah Lee, for http://xahlee.info/comp/unicode_computing_symbols.html + +Colophon +‾‾‾‾‾‾‾‾ +This file is best-viewed with an SVN version of GNU FreeFont Mono. diff --git a/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian new file mode 100644 index 0000000000..7343143948 --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian @@ -0,0 +1,34 @@ +partial alphanumeric_keys modifier_keys +xkb_symbols "ergodox_ez_yoruian" { + include "us" + name[Group1]= "English (yoruian-1.0.0)"; + + replace key { [ Multi_key, Multi_key ] }; + replace key { [ Hyper_L, Hyper_L ] }; + replace key { [ grave, 9 ] }; + replace key { [ semicolon, 7 ] }; + replace key { [ colon, 5 ] }; + replace key { [ minus, 3 ] }; + replace key { [ slash, 1 ] }; + replace key { [ asciicircum, 0 ] }; + replace key { [ percent, 2 ] }; + replace key { [ asciitilde, 4 ] }; + replace key { [ dead_greek, 6 ] }; + replace key { [ dead_caron, 8 ] }; + replace key { [ E, E ] }; + replace key { [ period, asterisk ] }; + replace key { [ question, backslash ] }; + replace key { [ exclam, bar ] }; + replace key { [ apostrophe, numbersign ] }; + replace key { [ quotedbl, dollar ] }; + replace key { [ comma, at ] }; + replace key { [ underscore, ampersand ] }; + replace key { [ equal, plus ] }; + replace key { [ parenleft, bracketleft ] }; + replace key { [ less, braceleft ] }; + replace key { [ greater, braceright ] }; + replace key { [ parenright, bracketright ] }; + + modifier_map none { }; + modifier_map Mod3 { }; +}; diff --git a/keyboards/ergodox/keymaps/yoruian/keymap.c b/keyboards/ergodox/keymaps/yoruian/keymap.c new file mode 100644 index 0000000000..d3635ddf3f --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/keymap.c @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Thomas Fitzsimmons + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "yoruian.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP\ +(9, 7, 5, 3, 1, GRV, MINS, EQL, LBRC, 0, 2, 4, 6, 8, + ES, RBRC, Y, O, R, BSLS, P3, P3, J, V, D, F, W, Q, + LC, U, I, A, N, SCLN, M, H, T, S, C, RC, + FF, QUOT, COMM, DOT, SLSH, P0, LGUI, LGUI, K, L, P, G, B, X, + IN, P1, NO, NO, LALT, LALT, NO, NO, Z, PS, + BSPC, RALT, P2, TAB, + NO, NO, + E, LSFT, NO, NO, ENT, SPC), +[1] = KEYMAP\ +(TR, TR, TR, TR, TR, TR, TR, TR, TR, F5, F6, F7, F8, F9, + TR, TR, TR, TR, TR, TR, TR, TR, TR, F1, F2, F3, F4, FT, + TR, TR, TR, TR, TR, TR, PAUS, LEFT, DOWN, UP, RGHT, FE, + TR, TR, TR, TR, TR, TR, TR, TR, TR, HOME, PGDN, PGUP, END, FW, + TR, TR, TR, TR, TR, TR, TR, TR, TR, TR, + TR, TR, TR, TR, + TR, TR, + TR, TR, TR, TR, TR, TR), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + +void matrix_init_user(void) { +}; + +void matrix_scan_user(void) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); +}; + +/* + * Local Variables: + * electric-indent-mode: nil + * End: + */ diff --git a/keyboards/ergodox/keymaps/yoruian/yoruian.h b/keyboards/ergodox/keymaps/yoruian/yoruian.h new file mode 100644 index 0000000000..1adcb7fd3f --- /dev/null +++ b/keyboards/ergodox/keymaps/yoruian/yoruian.h @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Thomas Fitzsimmons + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#undef KEYMAP +#define KEYMAP\ +( \ + /* Spacial positions. */ \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \ + k20, k21, k22, k23, k24, k25, k28, k29, k2A, k2B, k2C, k2D, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, \ + k40, k41, k42, k43, k44, k49, k4A, k4B, k4C, k4D, \ + k55, k56, k57, k58, \ + k54, k59, \ + k53, k52, k51, k5C, k5B, k5A) \ + \ + /* Matrix positions. */ \ + { \ + { KC_##k00, KC_##k10, KC_##k20, KC_##k30, KC_##k40, KC_NO }, \ + { KC_##k01, KC_##k11, KC_##k21, KC_##k31, KC_##k41, KC_##k51 }, \ + { KC_##k02, KC_##k12, KC_##k22, KC_##k32, KC_##k42, KC_##k52 }, \ + { KC_##k03, KC_##k13, KC_##k23, KC_##k33, KC_##k43, KC_##k53 }, \ + { KC_##k04, KC_##k14, KC_##k24, KC_##k34, KC_##k44, KC_##k54 }, \ + { KC_##k05, KC_##k15, KC_##k25, KC_##k35, KC_NO, KC_##k55 }, \ + { KC_##k06, KC_##k16, KC_NO, KC_##k36, KC_NO, KC_##k56 }, \ + { KC_##k07, KC_##k17, KC_NO, KC_##k37, KC_NO, KC_##k57 }, \ + { KC_##k08, KC_##k18, KC_##k28, KC_##k38, KC_NO, KC_##k58 }, \ + { KC_##k09, KC_##k19, KC_##k29, KC_##k39, KC_##k49, KC_##k59 }, \ + { KC_##k0A, KC_##k1A, KC_##k2A, KC_##k3A, KC_##k4A, KC_##k5A }, \ + { KC_##k0B, KC_##k1B, KC_##k2B, KC_##k3B, KC_##k4B, KC_##k5B }, \ + { KC_##k0C, KC_##k1C, KC_##k2C, KC_##k3C, KC_##k4C, KC_##k5C }, \ + { KC_##k0D, KC_##k1D, KC_##k2D, KC_##k3D, KC_##k4D, KC_NO } \ + } + +#define KC_ES KC_ESC +#define KC_LC KC_LCTL +#define KC_RC KC_RCTL +#define KC_FF MO(1) +#define KC_IN KC_INS +#define KC_PS KC_PSCR +#define KC_TR KC_TRNS +#define KC_FT KC_F10 +#define KC_FE KC_F11 +#define KC_FW KC_F12 -- cgit v1.2.3 From ce53c0643d4eaf8f13ac1140d3bd91dfa5f90e22 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Tue, 6 Sep 2016 00:09:14 -0400 Subject: Fix ergodox_yoruian XKB naming --- keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf | 2 +- keyboards/ergodox/keymaps/yoruian/ergodox_yoruian | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf index c8a92c5c5b..ce4fce3b1d 100644 --- a/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf +++ b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf @@ -2,5 +2,5 @@ Section "InputClass" Identifier "ErgoDox EZ" MatchIsKeyboard "on" MatchProduct "ErgoDox EZ ErgoDox EZ" - Option "XkbLayout" "ergodox_ez_yoruian" + Option "XkbLayout" "ergodox_yoruian" EndSection diff --git a/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian index 7343143948..0d13fbfd4c 100644 --- a/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian +++ b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian @@ -1,5 +1,5 @@ partial alphanumeric_keys modifier_keys -xkb_symbols "ergodox_ez_yoruian" { +xkb_symbols "ergodox_yoruian" { include "us" name[Group1]= "English (yoruian-1.0.0)"; -- cgit v1.2.3 From a3e7042084ac2a117cea129e4dd4995904f247e8 Mon Sep 17 00:00:00 2001 From: joar Date: Tue, 6 Sep 2016 16:00:08 +0200 Subject: norwegian programmer-friendly layout --- .../keyboard-layout.png | Bin 0 -> 140077 bytes .../keymaps/norwegian_programmer_osx_pc/keymap.c | 180 +++++++++++++++++++++ .../keymaps/norwegian_programmer_osx_pc/readme.md | 30 ++++ .../keyboard-layout.png | Bin 0 -> 97519 bytes .../norwegian_programmer_osx_pc_colemak/keymap.c | 180 +++++++++++++++++++++ .../norwegian_programmer_osx_pc_colemak/readme.md | 30 ++++ 6 files changed, 420 insertions(+) create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c create mode 100644 keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png new file mode 100644 index 0000000000..544b5658e9 Binary files /dev/null and b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png differ diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c new file mode 100644 index 0000000000..1d505f8e38 --- /dev/null +++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c @@ -0,0 +1,180 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_norwegian.h" + +#define BASE 0 // default layer +#define BASE_MAC 1 // default layer mac +#define NUMB_FUNC 2 // numbers and function keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Basic layer PC + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | * | [ | ] | { | } | ~ |Mac/PC| | ^ | $ | ( | ) | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | + | Q | W | E | R | T | " | | ' | Y | U | I | O | P | Å | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | / | A | S | D | F | G |------| |------| H | J | K | L | Ø | Æ | + * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------| + * | - | Z | X | C | V | B | | | | N | M | RIGHT| DOWN | UP | _ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Alt/esc| ! | ? | : | TAB | | LEFT | _ | & | | |Num/fn| + * `----------------------------------' `----------------------------------' + * ,-------------. ,--------------. + * | # | ` | |Insert| % | + * ,------|------|------| |------+-------+------. + * | | | ´ | | Del | | | + * | Shift|Ctrl/.|------| |------| Enter |Space | + * | | |GUI/, | | Bspc | | | + * `--------------------' `---------------------' + */ +[BASE] = KEYMAP( + // left hand + KC_PAST, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, KC_FN2, TG(1), + KC_PPLS, KC_Q, KC_W, KC_E, KC_R, KC_T, NO_QUO2, + KC_PSLS, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_PMNS, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN, + ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB, + KC_HASH, KC_FN7, + KC_FN6, + KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA), + // right hand + KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT, + NO_APOS, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA , + KC_H, KC_J, KC_K, KC_L, NO_OSLH, NO_AE, + NO_EQL, KC_N, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_BSLS, + KC_LEFT, NO_UNDS, NO_AMPR, NO_PIPE, OSL(2), + KC_INSERT, KC_PERC, + KC_DELT, + KC_BSPC,KC_ENT,KC_SPC + ), +/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | | | { | } | | | | | $ | | | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | |,/Ctrl| | | | ` | |Num/fn| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | ` | | | | + * ,------|------|------| |------+------+------. + * | | | ´ | | | | | + * | |GUI/. |------| |------| | | + * | | |crtl/,| | | | | + * `--------------------' `--------------------' + */ +[BASE_MAC] = KEYMAP( + KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, NO_GRV_MAC, + KC_FN10, + KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA), + // right hand + KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC, + NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC, + KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Number ++´ánd Fn layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 8 | 7 | 6 | 5 | 9 | | | | | F5 | F6 | F7 | F8 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 4 | 3 | 2 | 1 | 0 |------| |------| | F1 | F2 | F3 | F4 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | END | PGDWN| PGUP | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | HOME | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUMB_FUNC] = KEYMAP( + NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS, + NO_SLSH , KC_4 , KC_3 , KC_2 , KC_1 , KC_0, + NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, + KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, + KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +) +}; + +enum macro_id { + TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. + [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed. + [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first. + [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first. + [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed. + [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed. + [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed. + [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly + [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly + [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed +}; + + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + keyevent_t event = record->event; + + switch (id) { + case TILDE_NO: + return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE); + case LESS_NO: + return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE); + case GRTR_NO: + return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE); + case CIRC_NO: + return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE); + case ACUT_NO: + return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE); + case GRV_NO: + return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE); + case LESS_NO_MAC: + return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE); + case GRTR_NO_MAC: + return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE); + case ACUT_NO_MAC: + return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE); + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md new file mode 100644 index 0000000000..f7e8baf56a --- /dev/null +++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md @@ -0,0 +1,30 @@ +# Norwegian setup with osx/pc toggle + +## Motivation +I wanted a Norwegian setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup. + +## Overview +The setup is created to be programmer friendly. +- Most of the symbols used in code can be activated without using layers or shift key. +- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist. +- Navigation is prioritized, arrows below the home row. + +## PC/Mac toggle +The default setup is for Norwegian keyboard setting(on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard. + +## Layers +Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys. + +## Tap-shift +Tap for the next character to be shifted, hold down for regular shift. + +## Comma dot and escape +Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys. + +## Numpad symbols ++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0. +If you really need the norwegian symbols in a program, you can access them using the number toggle button. + +## Layout + +![keyboard-layout](keyboard-layout.png) diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png new file mode 100644 index 0000000000..462de5c56b Binary files /dev/null and b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png differ diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c new file mode 100644 index 0000000000..acf74a47d2 --- /dev/null +++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c @@ -0,0 +1,180 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_norwegian.h" + +#define BASE 0 // default layer +#define BASE_MAC 1 // default layer mac +#define NUMB_FUNC 2 // numbers and function keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap 0: Basic layer PC + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | * | [ | ] | { | } | ~ |Mac/PC| | ^ | $ | ( | ) | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | + | Q | W | F | P | G | " | | ' | J | L | U | Y | Å | Æ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | / | A | R | S | T | D |------| |------| H | N | E | I | O | Ø | + * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------| + * | - | Z | X | C | V | B | | | | K | M | RIGHT| DOWN | UP | _ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Alt/esc| ! | ? | : | TAB | | LEFT | _ | & | | |Num/fn| + * `----------------------------------' `----------------------------------' + * ,-------------. ,--------------. + * | # | ` | |Insert| % | + * ,------|------|------| |------+-------+------. + * | | | ´ | | Del | | | + * | Shift|Ctrl/.|------| |------| Enter |Space | + * | | |GUI/, | | Bspc | | | + * `--------------------' `---------------------' + */ +[BASE] = KEYMAP( + // left hand + KC_PAST, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, KC_FN2, TG(1), + KC_PPLS, KC_Q, KC_W, KC_F, KC_P, KC_G, NO_QUO2, + KC_PSLS, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_PMNS, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN, + ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB, + KC_HASH, KC_FN7, + KC_FN6, + KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA), + // right hand + KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT, + NO_APOS, KC_J, KC_L, KC_U, KC_Y, NO_AA, NO_AE , + KC_H, KC_N, KC_E, KC_I, KC_O, NO_OSLH, + NO_EQL, KC_K, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_BSLS, + KC_LEFT, NO_UNDS, NO_AMPR, NO_PIPE, OSL(2), + KC_INSERT, KC_PERC, + KC_DELT, + KC_BSPC,KC_ENT,KC_SPC + ), +/* Keymap 1: Basic layer MAC (Same as pc, except for cmd/ctrl, which are swapped) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | | | { | } | | | | | $ | | | < | > | @ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | |,/Ctrl| | | | ` | |Num/fn| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | ` | | | | + * ,------|------|------| |------+------+------. + * | | | ´ | | | | | + * | |GUI/. |------| |------| | | + * | | |crtl/,| | | | | + * `--------------------' `--------------------' + */ +[BASE_MAC] = KEYMAP( + KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, NO_GRV_MAC, + KC_FN10, + KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA), + // right hand + KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC, + NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC, + KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Number ++´ánd Fn layer pc + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 8 | 7 | 6 | 5 | 9 | | | | | F5 | F6 | F7 | F8 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 4 | 3 | 2 | 1 | 0 |------| |------| | F1 | F2 | F3 | F4 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | END | PGDWN| PGUP | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | HOME | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUMB_FUNC] = KEYMAP( + NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS, + NO_SLSH , KC_4 , KC_3 , KC_2 , KC_1 , KC_0, + NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, + KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS, + KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +) +}; + +enum macro_id { + TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. + [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed. + [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first. + [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first. + [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed. + [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed. + [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed. + [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly + [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly + [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed +}; + + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + keyevent_t event = record->event; + + switch (id) { + case TILDE_NO: + return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE); + case LESS_NO: + return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE); + case GRTR_NO: + return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE); + case CIRC_NO: + return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE); + case ACUT_NO: + return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE); + case GRV_NO: + return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE); + case LESS_NO_MAC: + return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE); + case GRTR_NO_MAC: + return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE); + case ACUT_NO_MAC: + return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE); + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md new file mode 100644 index 0000000000..aaaec3e534 --- /dev/null +++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md @@ -0,0 +1,30 @@ +# Norwegian Colemak setup with osx/pc toggle + +## Motivation +I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup. + +## Overview +The setup is created to be programmer friendly. +- Most of the symbols used in code can be activated without using layers or shift key. +- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist. +- Navigation is prioritized, arrows below the home row. + +## PC/Mac toggle +The default setup is for Norwegian keyboard setting(not colemak software variants) on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard. + +## Layers +Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys. + +## Tap-shift +Tap for the next character to be shifted, hold down for regular shift. + +## Comma dot and escape +Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys. + +## Numpad symbols ++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0. +If you really need the norwegian symbols in a program, you can access them using the number toggle button. + +## Layout + +![keyboard-layout](keyboard-layout.png) -- cgit v1.2.3 From 16e706214fad14856603fb439dc830c47ef83527 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 6 Sep 2016 14:59:12 -0500 Subject: Change NKRO size fron 16 bytes to 32 bytes. --- tmk_core/protocol/lufa/descriptor.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h index 316650a7b1..c6c94e3618 100644 --- a/tmk_core/protocol/lufa/descriptor.h +++ b/tmk_core/protocol/lufa/descriptor.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2012,2013 Jun Wako * This file is based on: * LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse @@ -129,13 +129,13 @@ typedef struct # define MOUSE_INTERFACE (KEYBOARD_INTERFACE + 1) #else # define MOUSE_INTERFACE KEYBOARD_INTERFACE -#endif +#endif #ifdef EXTRAKEY_ENABLE # define EXTRAKEY_INTERFACE (MOUSE_INTERFACE + 1) #else # define EXTRAKEY_INTERFACE MOUSE_INTERFACE -#endif +#endif #ifdef CONSOLE_ENABLE # define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1) @@ -171,7 +171,7 @@ typedef struct #define KEYBOARD_IN_EPNUM 1 #ifdef MOUSE_ENABLE -# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1) +# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1) #else # define MOUSE_IN_EPNUM KEYBOARD_IN_EPNUM #endif @@ -179,7 +179,7 @@ typedef struct #ifdef EXTRAKEY_ENABLE # define EXTRAKEY_IN_EPNUM (MOUSE_IN_EPNUM + 1) #else -# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM +# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM #endif #ifdef CONSOLE_ENABLE @@ -226,7 +226,7 @@ typedef struct #define MOUSE_EPSIZE 8 #define EXTRAKEY_EPSIZE 8 #define CONSOLE_EPSIZE 32 -#define NKRO_EPSIZE 16 +#define NKRO_EPSIZE 32 #define MIDI_STREAM_EPSIZE 64 #define CDC_NOTIFICATION_EPSIZE 8 #define CDC_EPSIZE 16 -- cgit v1.2.3 From e571d4656cd283ce8d793fe3dd2ac176b84b0bf5 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 6 Sep 2016 18:02:43 -0500 Subject: Set keyboard_nkro (used by TMK) w/ MAGIC_HOST_NKRO If NKRO is enabled, also set keyboard_nkro with MAGIC_HOST_NKRO and MAGIC_UNHOST_NKRO. --- quantum/quantum.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/quantum/quantum.c b/quantum/quantum.c index e3a20f43e0..fa86b6220f 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -27,6 +27,10 @@ static void do_code16 (uint16_t code, void (*f) (uint8_t)) { f(KC_RGUI); } +#ifdef NKRO_ENABLE + extern bool keyboard_nkro; +#endif + void register_code16 (uint16_t code) { do_code16 (code, register_code); register_code (code); @@ -223,6 +227,11 @@ bool process_record_quantum(keyrecord_t *record) { keymap_config.swap_backslash_backspace = 1; } else if (keycode == MAGIC_HOST_NKRO) { keymap_config.nkro = 1; + +#ifdef NKRO_ENABLE + clear_keyboard(); // clear to prevent stuck keys + keyboard_nkro = keymap_config.nkro; +#endif } else if (keycode == MAGIC_SWAP_ALT_GUI) { keymap_config.swap_lalt_lgui = 1; keymap_config.swap_ralt_rgui = 1; @@ -244,6 +253,10 @@ bool process_record_quantum(keyrecord_t *record) { keymap_config.swap_backslash_backspace = 0; } else if (keycode == MAGIC_UNHOST_NKRO) { keymap_config.nkro = 0; +#ifdef NKRO_ENABLE + clear_keyboard(); // clear to prevent stuck keys + keyboard_nkro = keymap_config.nkro; +#endif } else if (keycode == MAGIC_UNSWAP_ALT_GUI) { keymap_config.swap_lalt_lgui = 0; keymap_config.swap_ralt_rgui = 0; -- cgit v1.2.3 From da16733e7ab66ebd27fde21312990f5733966a52 Mon Sep 17 00:00:00 2001 From: Roman Zolotarev Date: Wed, 7 Sep 2016 07:55:22 +0800 Subject: Change CTL_T(KC_ESC) to KC_LCTRL and update readme --- .../keymaps/romanzolotarev-norman-osx/keymap.c | 30 +++++++++--------- .../keymaps/romanzolotarev-norman-osx/readme.md | 37 +++++++++++++++------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c index 24d0c4ecb7..2c64304404 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c @@ -6,23 +6,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, - CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, - KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, - /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS, + KC_LCTRL, KC_A, KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU, + /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT, // - /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, - /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, - /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - KC_MPLY, KC_MNXT, + /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS, + /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT, + /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + KC_MPLY, KC_MNXT, KC_MPRV, - KC_RALT, KC_QUOT, KC_SPC + KC_RALT, KC_QUOT, KC_SPC ) }; diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md index 80475ab21e..a86061285a 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md @@ -1,28 +1,41 @@ # Roman's Layout -There is only one layer based on [Norman layout](https://normanlayout.info/). +There is only one layer, and it is based on [Norman +layout](https://normanlayout.info/). Looking for multiple-layer layouts? -- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/) +- [Symbols, arrows, plover, HJKL + arrows](../romanzolotarev-norman-plover-osx-hjkl/) - [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/) [![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195) -## Functional Keys +## How to use Vim key -- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/). -- Tap `F2` to copy screenshot to the clipboard. -- Hold `SHIFT` and tap `F2` to save screenshot as a file. -- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/). - -## CTRL/ESC - -CTRL and ESC are frequently used in Vim. +It is `CTL_T(KC_ESC)` and it works this way: - Tap `CTRL/ESC` to send `ESC`. - Hold `CTRL/ESC` to use as `CTRL`. -## Activate N-rollover +## How to activate N-rollover - Hold left `SHIFT` and right `SHIRT` and then tap `N`. + +## How to make and flash on OS X + +First you need to install few brew packages. + +```bash +brew tap osx-cross/avr +brew install dfu-programmer avr-libc teensy_loader_cli +``` + +Then you can clone this repository, make and flash your ErgoDox. + +```bash +git clone https://github.com/romanzolotarev/qmk_firmware +cd qmk_firmware/keyboards/ergodox +# Optionally tweak ./keymaps/romanzolotarev-norman-osx/keymap.c +SLEEP_LED_ENABLED=no KEYMAP=romanzolotarev-norman-osx make teensy +``` -- cgit v1.2.3 From 1406118c7123359cd66d589d22d6ecfa268e3a24 Mon Sep 17 00:00:00 2001 From: profet23 Date: Tue, 6 Sep 2016 21:59:23 -0400 Subject: Removing separate ergodox80 project. Created KEYMAP_80 in ez.h to support 80 key ergodoxes. Creating default_80 keymap as ez keymap. --- keyboards/ergodox/ez/ez.h | 41 ++ .../ergodox/ez/keymaps/default_80/ergodox80.png | Bin 0 -> 20663 bytes keyboards/ergodox/ez/keymaps/default_80/keymap.c | 183 ++++++ keyboards/ergodox/ez/keymaps/default_80/readme.md | 10 + keyboards/ergodox80/Makefile | 5 - keyboards/ergodox80/config.h | 31 - keyboards/ergodox80/ergodox80.c | 0 keyboards/ergodox80/ergodox80.h | 5 - keyboards/ergodox80/ergodox80/190hotfix.sh | 19 - keyboards/ergodox80/ergodox80/Makefile | 3 - keyboards/ergodox80/ergodox80/config.h | 65 -- keyboards/ergodox80/ergodox80/ergodox80.c | 85 --- keyboards/ergodox80/ergodox80/ergodox80.h | 122 ---- keyboards/ergodox80/ergodox80/i2cmaster.h | 178 ------ keyboards/ergodox80/ergodox80/matrix.c | 382 ----------- keyboards/ergodox80/ergodox80/rules.mk | 76 --- keyboards/ergodox80/ergodox80/twimaster.c | 208 ------ .../ergodox80/ergodox80/util/compile_keymap.py | 710 --------------------- keyboards/ergodox80/ergodox80/util/readme.md | 3 - keyboards/ergodox80/keymaps/default/keymap.c | 183 ------ keyboards/ergodox80/readme.md | 6 - keyboards/ergodox80/rules.mk | 28 - 22 files changed, 234 insertions(+), 2109 deletions(-) create mode 100644 keyboards/ergodox/ez/keymaps/default_80/ergodox80.png create mode 100644 keyboards/ergodox/ez/keymaps/default_80/keymap.c create mode 100644 keyboards/ergodox/ez/keymaps/default_80/readme.md delete mode 100644 keyboards/ergodox80/Makefile delete mode 100644 keyboards/ergodox80/config.h delete mode 100644 keyboards/ergodox80/ergodox80.c delete mode 100644 keyboards/ergodox80/ergodox80.h delete mode 100755 keyboards/ergodox80/ergodox80/190hotfix.sh delete mode 100644 keyboards/ergodox80/ergodox80/Makefile delete mode 100644 keyboards/ergodox80/ergodox80/config.h delete mode 100644 keyboards/ergodox80/ergodox80/ergodox80.c delete mode 100644 keyboards/ergodox80/ergodox80/ergodox80.h delete mode 100644 keyboards/ergodox80/ergodox80/i2cmaster.h delete mode 100644 keyboards/ergodox80/ergodox80/matrix.c delete mode 100644 keyboards/ergodox80/ergodox80/rules.mk delete mode 100644 keyboards/ergodox80/ergodox80/twimaster.c delete mode 100644 keyboards/ergodox80/ergodox80/util/compile_keymap.py delete mode 100644 keyboards/ergodox80/ergodox80/util/readme.md delete mode 100644 keyboards/ergodox80/keymaps/default/keymap.c delete mode 100644 keyboards/ergodox80/readme.md delete mode 100644 keyboards/ergodox80/rules.mk diff --git a/keyboards/ergodox/ez/ez.h b/keyboards/ergodox/ez/ez.h index db4ec867bc..124bf850e7 100644 --- a/keyboards/ergodox/ez/ez.h +++ b/keyboards/ergodox/ez/ez.h @@ -119,4 +119,45 @@ inline void ergodox_led_all_set(uint8_t n) { k0D, k1D, k2D, k3D, k4D, KC_NO } \ } +#define KEYMAP_80( \ + \ + /* left hand, spatial positions */ \ + k00,k01,k02,k03,k04,k05,k06, \ + k10,k11,k12,k13,k14,k15,k16, \ + k20,k21,k22,k23,k24,k25, \ + k30,k31,k32,k33,k34,k35,k36, \ + k40,k41,k42,k43,k44, \ + k55,k56, \ + k45,k46,k54, \ + k53,k52,k51, \ + \ + /* right hand, spatial positions */ \ + k07,k08,k09,k0A,k0B,k0C,k0D, \ + k17,k18,k19,k1A,k1B,k1C,k1D, \ + k28,k29,k2A,k2B,k2C,k2D, \ + k37,k38,k39,k3A,k3B,k3C,k3D, \ + k49,k4A,k4B,k4C,k4D, \ + k57,k58, \ + k59,k47,k48, \ + k5C,k5B,k5A ) \ + \ + /* matrix positions */ \ + { \ + { k00, k10, k20, k30, k40, KC_NO }, \ + { k01, k11, k21, k31, k41, k51 }, \ + { k02, k12, k22, k32, k42, k52 }, \ + { k03, k13, k23, k33, k43, k53 }, \ + { k04, k14, k24, k34, k44, k54 }, \ + { k05, k15, k25, k35, k45, k55 }, \ + { k06, k16, KC_NO, k36, k46, k56 }, \ + \ + { k07, k17, KC_NO, k37, k47, k57 }, \ + { k08, k18, k28, k38, k48, k58 }, \ + { k09, k19, k29, k39, k49, k59 }, \ + { k0A, k1A, k2A, k3A, k4A, k5A }, \ + { k0B, k1B, k2B, k3B, k4B, k5B }, \ + { k0C, k1C, k2C, k3C, k4C, k5C }, \ + { k0D, k1D, k2D, k3D, k4D, KC_NO } \ + } + #endif diff --git a/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png new file mode 100644 index 0000000000..66b9752ebc Binary files /dev/null and b/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png differ diff --git a/keyboards/ergodox/ez/keymaps/default_80/keymap.c b/keyboards/ergodox/ez/keymaps/default_80/keymap.c new file mode 100644 index 0000000000..505ff29722 --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/default_80/keymap.c @@ -0,0 +1,183 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +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|' / Cmd | + * |--------+------+------+------+------+------| 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| + * ,------|------|------| |------+--------+------. + * | 1 | 2 | Home | | PgUp | 3 | 4 | + * |------|------|------| |------|--------|------| + * | Space| BkSp | End | | PgDn | Tab |Enter | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP_80( // 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_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_1, KC_2, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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_3, KC_4, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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_80( + // left hand + M(0), 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,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, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+----------. + * | | | | | | | | + * |------|------|------| |------|------|----------| + * | | | | | | |BrwserBack| + * `--------------------' `------------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP_80( + 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, 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_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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox/ez/keymaps/default_80/readme.md b/keyboards/ergodox/ez/keymaps/default_80/readme.md new file mode 100644 index 0000000000..b6bbb86d2c --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/default_80/readme.md @@ -0,0 +1,10 @@ +# ErgoDox 80 Default Configuration + +This is based on the default Ergodox EZ keymap. +The difference is that this keymap supports 80 key layouts. +If you own an 80 key Ergodox, use this as an example to get your desired keymap. + +**NOTE:** This layout is not physically supported by the Ergodox EZ. + + +![Default80](ergodox80.png) diff --git a/keyboards/ergodox80/Makefile b/keyboards/ergodox80/Makefile deleted file mode 100644 index 94fa847ff8..0000000000 --- a/keyboards/ergodox80/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -SUBPROJECT_DEFAULT = ergodox80 - -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif diff --git a/keyboards/ergodox80/config.h b/keyboards/ergodox80/config.h deleted file mode 100644 index 5dd6daa15f..0000000000 --- a/keyboards/ergodox80/config.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ -#define KEYBOARDS_ERGODOX_CONFIG_H_ - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 - -#define TAPPING_TOGGLE 1 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -#include "ergodox80/config.h" - - -#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/keyboards/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80.h deleted file mode 100644 index ea40f4d455..0000000000 --- a/keyboards/ergodox80/ergodox80.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ -#define KEYBOARDS_ERGODOX_ERGODOX_H_ -#include "ergodox80.h" - -#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/ergodox80/ergodox80/190hotfix.sh b/keyboards/ergodox80/ergodox80/190hotfix.sh deleted file mode 100755 index bdc3adce22..0000000000 --- a/keyboards/ergodox80/ergodox80/190hotfix.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#a tool to fix broken keymaps as a result of pull request #190 -#changing the declaration of matrix_scan_user() and matrix_init_user() -# -#This script will save a copy of the specified keymap as keymap.c.bak -#and then create a new keymap.c with the definion corrected. -#this script must be run from the ergodox_ez directory -if [ $# -ne 1 ]; then - echo $0: usage: ./190hotfix keymap_name - exit 1 -fi - -echo Saving backup as ./keymaps/$1/keymap.c.bak ... -mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak - -echo Modifying ./keymaps/$1/keymap.c ... -cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c - -echo Complete! diff --git a/keyboards/ergodox80/ergodox80/Makefile b/keyboards/ergodox80/ergodox80/Makefile deleted file mode 100644 index 191c6bb664..0000000000 --- a/keyboards/ergodox80/ergodox80/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/ergodox80/ergodox80/config.h b/keyboards/ergodox80/ergodox80/config.h deleted file mode 100644 index 084a044ee1..0000000000 --- a/keyboards/ergodox80/ergodox80/config.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef ERGODOX_EZ_CONFIG_H -#define ERGODOX_EZ_CONFIG_H - -#include "../config.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION QMK keyboard firmware for Ergodox EZ - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -#define LED_BRIGHTNESS_LO 15 -#define LED_BRIGHTNESS_HI 255 - - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -//#define DEBUG_MATRIX_SCAN_RATE - -#endif diff --git a/keyboards/ergodox80/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80/ergodox80.c deleted file mode 100644 index b21b1073b4..0000000000 --- a/keyboards/ergodox80/ergodox80/ergodox80.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "ergodox80.h" -#include "i2cmaster.h" - -bool i2c_initialized = 0; -uint8_t mcp23018_status = 0x20; - -void matrix_init_kb(void) { - // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") - TCCR1A = 0b10101001; // set and configure fast PWM - TCCR1B = 0b00001001; // set and configure fast PWM - - // (tied to Vcc for hardware convenience) - DDRB &= ~(1<<4); // set B(4) as input - PORTB &= ~(1<<4); // set B(4) internal pull-up disabled - - // unused pins - C7, D4, D5, D7, E6 - // set as input with internal pull-ip enabled - DDRC &= ~(1<<7); - DDRD &= ~(1<<7 | 1<<5 | 1<<4); - DDRE &= ~(1<<6); - PORTC |= (1<<7); - PORTD |= (1<<7 | 1<<5 | 1<<4); - PORTE |= (1<<6); - - ergodox_blink_all_leds(); - - matrix_init_user(); -} - -void ergodox_blink_all_leds(void) -{ - ergodox_led_all_off(); - ergodox_led_all_set(LED_BRIGHTNESS_HI); - ergodox_right_led_1_on(); - _delay_ms(50); - ergodox_right_led_2_on(); - _delay_ms(50); - ergodox_right_led_3_on(); - _delay_ms(50); - ergodox_right_led_1_off(); - _delay_ms(50); - ergodox_right_led_2_off(); - _delay_ms(50); - ergodox_right_led_3_off(); - //ergodox_led_all_on(); - //_delay_ms(333); - ergodox_led_all_off(); -} - -uint8_t init_mcp23018(void) { - mcp23018_status = 0x20; - - // I2C subsystem - if (i2c_initialized == 0) { - i2c_init(); // on pins D(1,0) - i2c_initialized++; - _delay_ms(1000); - } - - // set pin direction - // - unused : input : 1 - // - input : input : 1 - // - driving : output : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - i2c_stop(); - - // set pull-up - // - unused : on : 1 - // - input : on : 1 - // - driving : off : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - -out: - i2c_stop(); - - return mcp23018_status; -} - - diff --git a/keyboards/ergodox80/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80/ergodox80.h deleted file mode 100644 index 8012b0a749..0000000000 --- a/keyboards/ergodox80/ergodox80/ergodox80.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef ERGODOX_EZ_H -#define ERGODOX_EZ_H - -#include "quantum.h" -#include -#include -#include "i2cmaster.h" -#include - -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -#define CPU_16MHz 0x00 - -// I2C aliases and register addresses (see "mcp23018.md") -#define I2C_ADDR 0b0100000 -#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) -#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) -#define IODIRA 0x00 // i/o direction register -#define IODIRB 0x01 -#define GPPUA 0x0C // GPIO pull-up resistor register -#define GPPUB 0x0D -#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) -#define GPIOB 0x13 -#define OLATA 0x14 // output latch register -#define OLATB 0x15 - -extern uint8_t mcp23018_status; - -void init_ergodox(void); -void ergodox_blink_all_leds(void); -uint8_t init_mcp23018(void); -uint8_t ergodox_left_leds_update(void); - -#define LED_BRIGHTNESS_LO 15 -#define LED_BRIGHTNESS_HI 255 - - -inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } -inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } -inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } -inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } -inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } - -inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } -inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } -inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } -inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } -inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } - -inline void ergodox_led_all_on(void) -{ - ergodox_board_led_on(); - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); -} - -inline void ergodox_led_all_off(void) -{ - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); -} - -inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } -inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } -inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } -inline void ergodox_right_led_set(uint8_t led, uint8_t n) { - (led == 1) ? (OCR1A = n) : - (led == 2) ? (OCR1B = n) : - (OCR1C = n); -} - -inline void ergodox_led_all_set(uint8_t n) -{ - ergodox_right_led_1_set(n); - ergodox_right_led_2_set(n); - ergodox_right_led_3_set(n); -} - -#define KEYMAP( \ - \ - /* left hand, spatial positions */ \ - k00,k01,k02,k03,k04,k05,k06, \ - k10,k11,k12,k13,k14,k15,k16, \ - k20,k21,k22,k23,k24,k25, \ - k30,k31,k32,k33,k34,k35,k36, \ - k40,k41,k42,k43,k44, \ - k55,k56, \ - k45,k46,k54, \ - k53,k52,k51, \ - \ - /* right hand, spatial positions */ \ - k07,k08,k09,k0A,k0B,k0C,k0D, \ - k17,k18,k19,k1A,k1B,k1C,k1D, \ - k28,k29,k2A,k2B,k2C,k2D, \ - k37,k38,k39,k3A,k3B,k3C,k3D, \ - k49,k4A,k4B,k4C,k4D, \ - k57,k58, \ - k59,k47,k48, \ - k5C,k5B,k5A ) \ - \ - /* matrix positions */ \ - { \ - { k00, k10, k20, k30, k40, KC_NO }, \ - { k01, k11, k21, k31, k41, k51 }, \ - { k02, k12, k22, k32, k42, k52 }, \ - { k03, k13, k23, k33, k43, k53 }, \ - { k04, k14, k24, k34, k44, k54 }, \ - { k05, k15, k25, k35, k45, k55 }, \ - { k06, k16, KC_NO, k36, k46, k56 }, \ - \ - { k07, k17, KC_NO, k37, k47, k57 }, \ - { k08, k18, k28, k38, k48, k58 }, \ - { k09, k19, k29, k39, k49, k59 }, \ - { k0A, k1A, k2A, k3A, k4A, k5A }, \ - { k0B, k1B, k2B, k3B, k4B, k5B }, \ - { k0C, k1C, k2C, k3C, k4C, k5C }, \ - { k0D, k1D, k2D, k3D, k4D, KC_NO } \ - } - -#endif diff --git a/keyboards/ergodox80/ergodox80/i2cmaster.h b/keyboards/ergodox80/ergodox80/i2cmaster.h deleted file mode 100644 index 3917b9e6c0..0000000000 --- a/keyboards/ergodox80/ergodox80/i2cmaster.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef _I2CMASTER_H -#define _I2CMASTER_H 1 -/************************************************************************* -* Title: C include file for the I2C master interface -* (i2cmaster.S or twimaster.c) -* Author: Peter Fleury http://jump.to/fleury -* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device -* Usage: see Doxygen manual -**************************************************************************/ - -#ifdef DOXYGEN -/** - @defgroup pfleury_ic2master I2C Master library - @code #include @endcode - - @brief I2C (TWI) Master Software Library - - Basic routines for communicating with I2C slave devices. This single master - implementation is limited to one bus master on the I2C bus. - - This I2c library is implemented as a compact assembler software implementation of the I2C protocol - which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). - Since the API for these two implementations is exactly the same, an application can be linked either against the - software I2C implementation or the hardware I2C implementation. - - Use 4.7k pull-up resistor on the SDA and SCL pin. - - Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module - i2cmaster.S to your target when using the software I2C implementation ! - - Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. - - @note - The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted - to GNU assembler and AVR-GCC C call interface. - Replaced the incorrect quarter period delays found in AVR300 with - half period delays. - - @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury - - @par API Usage Example - The following code shows typical usage of this library, see example test_i2cmaster.c - - @code - - #include - - - #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet - - int main(void) - { - unsigned char ret; - - i2c_init(); // initialize I2C library - - // write 0x75 to EEPROM address 5 (Byte Write) - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - i2c_write(0x05); // write address = 5 - i2c_write(0x75); // write value 0x75 to EEPROM - i2c_stop(); // set stop conditon = release bus - - - // read previously written value back from EEPROM address 5 - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - - i2c_write(0x05); // write address = 5 - i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode - - ret = i2c_readNak(); // read one byte from EEPROM - i2c_stop(); - - for(;;); - } - @endcode - -*/ -#endif /* DOXYGEN */ - -/**@{*/ - -#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 -#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" -#endif - -#include - -/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_READ 1 - -/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_WRITE 0 - - -/** - @brief initialize the I2C master interace. Need to be called only once - @param void - @return none - */ -extern void i2c_init(void); - - -/** - @brief Terminates the data transfer and releases the I2C bus - @param void - @return none - */ -extern void i2c_stop(void); - - -/** - @brief Issues a start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_start(unsigned char addr); - - -/** - @brief Issues a repeated start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_rep_start(unsigned char addr); - - -/** - @brief Issues a start condition and sends address and transfer direction - - If device is busy, use ack polling to wait until device ready - @param addr address and transfer direction of I2C device - @return none - */ -extern void i2c_start_wait(unsigned char addr); - - -/** - @brief Send one byte to I2C device - @param data byte to be transfered - @retval 0 write successful - @retval 1 write failed - */ -extern unsigned char i2c_write(unsigned char data); - - -/** - @brief read one byte from the I2C device, request more data from device - @return byte read from I2C device - */ -extern unsigned char i2c_readAck(void); - -/** - @brief read one byte from the I2C device, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_readNak(void); - -/** - @brief read one byte from the I2C device - - Implemented as a macro, which calls either i2c_readAck or i2c_readNak - - @param ack 1 send ack, request more data from device
- 0 send nak, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_read(unsigned char ack); -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - - -/**@}*/ -#endif diff --git a/keyboards/ergodox80/ergodox80/matrix.c b/keyboards/ergodox80/ergodox80/matrix.c deleted file mode 100644 index c352924b52..0000000000 --- a/keyboards/ergodox80/ergodox80/matrix.c +++ /dev/null @@ -1,382 +0,0 @@ -/* - -Note for ErgoDox EZ customizers: Here be dragons! -This is not a file you want to be messing with. -All of the interesting stuff for you is under keymaps/ :) -Love, Erez - -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include "wait.h" -#include "action_layer.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "ergodox80.h" -#include "i2cmaster.h" -#ifdef DEBUG_MATRIX_SCAN_RATE -#include "timer.h" -#endif - -/* - * This constant define not debouncing time in msecs, but amount of matrix - * scan loops which should be made to get stable debounced results. - * - * On Ergodox matrix scan rate is relatively low, because of slow I2C. - * Now it's only 317 scans/second, or about 3.15 msec/scan. - * According to Cherry specs, debouncing time is 5 msec. - * - * And so, there is no sense to have DEBOUNCE higher than 2. - */ - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(uint8_t row); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -static uint8_t mcp23018_reset_loop; - -#ifdef DEBUG_MATRIX_SCAN_RATE -uint32_t matrix_timer; -uint32_t matrix_scan_count; -#endif - - -__attribute__ ((weak)) -void matrix_init_user(void) {} - -__attribute__ ((weak)) -void matrix_scan_user(void) {} - -__attribute__ ((weak)) -void matrix_init_kb(void) { - matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { - matrix_scan_user(); -} - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // initialize row and col - - mcp23018_status = init_mcp23018(); - - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - - matrix_init_kb(); - -} - -void matrix_power_up(void) { - mcp23018_status = init_mcp23018(); - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - -} - -uint8_t matrix_scan(void) -{ - if (mcp23018_status) { // if there was an error - if (++mcp23018_reset_loop == 0) { - // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans - // this will be approx bit more frequent than once per second - print("trying to reset mcp23018\n"); - mcp23018_status = init_mcp23018(); - if (mcp23018_status) { - print("left side not responding\n"); - } else { - print("left side attached\n"); - ergodox_blink_all_leds(); - } - } - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_scan_count++; - - uint32_t timer_now = timer_read32(); - if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) { - print("matrix scan frequency: "); - pdec(matrix_scan_count); - print("\n"); - - matrix_timer = timer_now; - matrix_scan_count = 0; - } -#endif - - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(i); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - wait_us(1); - // this should be wait_ms(1) but has been left as-is at EZ's request - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - matrix_scan_quantum(); - - return 1; -} - -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1< http://jump.to/fleury -* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device with hardware TWI -* Usage: API compatible with I2C Software Library i2cmaster.h -**************************************************************************/ -#include -#include - -#include - - -/* define CPU frequency in Mhz here if not defined in Makefile */ -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -/* I2C clock in Hz */ -#define SCL_CLOCK 400000L - - -/************************************************************************* - Initialization of the I2C bus interface. Need to be called only once -*************************************************************************/ -void i2c_init(void) -{ - /* initialize TWI clock - * minimal values in Bit Rate Register (TWBR) and minimal Prescaler - * bits in the TWI Status Register should give us maximal possible - * I2C bus speed - about 444 kHz - * - * for more details, see 20.5.2 in ATmega16/32 secification - */ - - TWSR = 0; /* no prescaler */ - TWBR = 10; /* must be >= 10 for stable operation */ - -}/* i2c_init */ - - -/************************************************************************* - Issues a start condition and sends address and transfer direction. - return 0 = device accessible, 1= failed to access device -*************************************************************************/ -unsigned char i2c_start(unsigned char address) -{ - uint8_t twst; - - // send START condition - TWCR = (1<= 0: - if section['name'] == 'layout_config': - config.update(loads("\n".join( - section['code_lines'] - ))) - elif section['sub_name'].startswith('layer'): - layer_name = section['sub_name'] - config['layer_lines'][layer_name] = section['code_lines'] - - reset_section() - - def amend_section(line_index, line): - section['end_line'] = line_index - section['code_lines'].append(line) - - config = DEFAULT_CONFIG.copy() - config.update({ - 'layer_lines': collections.OrderedDict(), - 'macro_ids': {'UM'}, - 'unicode_macros': {}, - }) - - section = {} - reset_section() - - with io.open(path, encoding="utf-8") as fh: - for i, line in enumerate(fh): - if line.startswith("#"): - start_section(i, line) - elif line.startswith(" "): - amend_section(i, line[4:]) - else: - # TODO: maybe parse description - pass - - end_section() - assert 'layout' in config - return config - -# header file parsing - -IF0_RE = re.compile(r""" - ^ - #if 0 - $.*? - #endif -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -COMMENT_RE = re.compile(r""" - /\* - .*? - \*/" -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def read_header_file(path): - with io.open(path, encoding="utf-8") as fh: - data = fh.read() - data, _ = COMMENT_RE.subn("", data) - data, _ = IF0_RE.subn("", data) - return data - - -def regex_partial(re_str_fmt, flags): - def partial(*args, **kwargs): - re_str = re_str_fmt.format(*args, **kwargs) - return re.compile(re_str, flags) - return partial - - -KEYDEF_REP = regex_partial(r""" - #define - \s - ( - (?:{}) # the prefixes - (?:\w+) # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_RE = re.compile(r""" - ( - enum - \s\w+\s - \{ - .*? # the enum content - \} - ; - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_KEY_REP = regex_partial(r""" - ( - {} # the prefixes - \w+ # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def parse_keydefs(config, data): - prefix_options = "|".join(config['key_prefixes']) - keydef_re = KEYDEF_REP(prefix_options) - enum_key_re = ENUM_KEY_REP(prefix_options) - for match in keydef_re.finditer(data): - yield match.groups()[0] - - for enum_match in ENUM_RE.finditer(data): - enum = enum_match.groups()[0] - for key_match in enum_key_re.finditer(enum): - yield key_match.groups()[0] - - -def parse_valid_keys(config, out_path): - basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) - dirpaths = [] - subpaths = [] - while len(subpaths) < 6: - path = os.path.join(basepath, *subpaths) - dirpaths.append(path) - dirpaths.append(os.path.join(path, "tmk_core", "common")) - dirpaths.append(os.path.join(path, "quantum")) - subpaths.append('..') - - includes = set(config['keymaps_includes']) - includes.add("keycode.h") - - valid_keycodes = set() - for dirpath, include in it.product(dirpaths, includes): - include_path = os.path.join(dirpath, include) - if os.path.exists(include_path): - header_data = read_header_file(include_path) - valid_keycodes.update( - parse_keydefs(config, header_data) - ) - return valid_keycodes - - -# Keymap Parsing - -def iter_raw_codes(layer_lines, filler, separator): - filler_re = re.compile("[" + filler + " ]") - for line in layer_lines: - line, _ = filler_re.subn("", line.strip()) - if not line: - continue - codes = line.split(separator) - for code in codes[1:-1]: - yield code - - -def iter_indexed_codes(raw_codes, key_indexes): - key_rows = {} - key_indexes_flat = [] - - for row_index, key_indexes in enumerate(key_indexes): - for key_index in key_indexes: - key_rows[key_index] = row_index - key_indexes_flat.extend(key_indexes) - assert len(raw_codes) == len(key_indexes_flat) - for raw_code, key_index in zip(raw_codes, key_indexes_flat): - # we keep track of the row mostly for layout purposes - yield raw_code, key_index, key_rows[key_index] - - -LAYER_CHANGE_RE = re.compile(r""" - (DF|TG|MO)\(\d+\) -""", re.VERBOSE) - - -MACRO_RE = re.compile(r""" - M\(\w+\) -""", re.VERBOSE) - - -UNICODE_RE = re.compile(r""" - U[0-9A-F]{4} -""", re.VERBOSE) - - -NON_CODE = re.compile(r""" - ^[^A-Z0-9_]$ -""", re.VERBOSE) - - -def parse_uni_code(raw_code): - macro_id = "UC_" + ( - unicodedata.name(raw_code) - .replace(" ", "_") - .replace("-", "_") - ) - code = "M({})".format(macro_id) - uc_hex = "{:04X}".format(ord(raw_code)) - return code, macro_id, uc_hex - - -def parse_key_code(raw_code, key_prefixes, valid_keycodes): - if raw_code in valid_keycodes: - return raw_code - - for prefix in key_prefixes: - code = prefix + raw_code - if code in valid_keycodes: - return code - - -def parse_code(raw_code, key_prefixes, valid_keycodes): - if not raw_code: - return 'KC_TRNS', None, None - - if LAYER_CHANGE_RE.match(raw_code): - return raw_code, None, None - - if MACRO_RE.match(raw_code): - macro_id = raw_code[2:-1] - return raw_code, macro_id, None - - if UNICODE_RE.match(raw_code): - hex_code = raw_code[1:] - return parse_uni_code(chr(int(hex_code, 16))) - - if NON_CODE.match(raw_code): - return parse_uni_code(raw_code) - - code = parse_key_code(raw_code, key_prefixes, valid_keycodes) - return code, None, None - - -def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): - keymap = {} - raw_codes = list(iter_raw_codes( - layer_lines, config['filler'], config['separator'] - )) - indexed_codes = iter_indexed_codes(raw_codes, key_indexes) - key_prefixes = config['key_prefixes'] - for raw_code, key_index, row_index in indexed_codes: - code, macro_id, uc_hex = parse_code( - raw_code, key_prefixes, valid_keycodes - ) - # TODO: line numbers for invalid codes - err_msg = "Could not parse key '{}' on row {}".format( - raw_code, row_index - ) - assert code is not None, err_msg - # print(repr(raw_code), repr(code), macro_id, uc_hex) - if macro_id: - config['macro_ids'].add(macro_id) - if uc_hex: - config['unicode_macros'][macro_id] = uc_hex - keymap[key_index] = (code, row_index) - return keymap - - -def parse_keymaps(config, valid_keycodes): - keymaps = collections.OrderedDict() - key_indexes = config.get( - 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] - ) - # TODO: maybe validate key_indexes - - for layer_name, layer_lines, in config['layer_lines'].items(): - keymaps[layer_name] = parse_keymap( - config, key_indexes, layer_lines, valid_keycodes - ) - return keymaps - -# keymap.c output - -USERCODE = """ -// 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) { - case L1: - ergodox_right_led_1_on(); - break; - case L2: - ergodox_right_led_2_on(); - break; - case L3: - ergodox_right_led_3_on(); - break; - case L4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - break; - case L5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - // case L6: - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - // case L7: - // ergodox_right_led_1_on(); - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - default: - ergodox_board_led_off(); - break; - } -}; -""" - -MACROCODE = """ -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 -#define UC_MODE_OSX 2 - -// TODO: allow default mode to be configured -static uint16_t unicode_mode = UC_MODE_WIN; - -uint16_t hextokeycode(uint8_t hex) {{ - if (hex == 0x0) {{ - return KC_P0; - }} - if (hex < 0xA) {{ - return KC_P1 + (hex - 0x1); - }} - return KC_A + (hex - 0xA); -}} - -void unicode_action_function(uint16_t hi, uint16_t lo) {{ - switch (unicode_mode) {{ - case UC_MODE_WIN: - register_code(KC_LALT); - - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LALT); - break; - case UC_MODE_LINUX: - register_code(KC_LCTL); - register_code(KC_LSFT); - - register_code(KC_U); - unregister_code(KC_U); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - case UC_MODE_OSX: - break; - }} -}} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ - if (!record->event.pressed) {{ - return MACRO_NONE; - }} - // MACRODOWN only works in this function - switch(id) {{ - case UM: - unicode_mode = (unicode_mode + 1) % 2; - break; -{macro_cases} -{unicode_macro_cases} - default: - break; - }} - return MACRO_NONE; -}}; -""" - - -UNICODE_MACRO_TEMPLATE = """ -case {macro_id}: - unicode_action_function(0x{hi:02x}, 0x{lo:02x}); - break; -""".strip() - - -def unicode_macro_cases(config): - for macro_id, uc_hex in config['unicode_macros'].items(): - hi = int(uc_hex, 16) >> 8 - lo = int(uc_hex, 16) & 0xFF - unimacro_keys = ", ".join( - "T({})".format( - "KP_" + digit if digit.isdigit() else digit - ) for digit in uc_hex - ) - yield UNICODE_MACRO_TEMPLATE.format( - macro_id=macro_id, hi=hi, lo=lo - ) - - -def iter_keymap_lines(keymap, row_indents=None): - col_widths = {} - col = 0 - # first pass, figure out the column widths - prev_row_index = None - for code, row_index in keymap.values(): - if row_index != prev_row_index: - col = 0 - if row_indents: - col = row_indents[row_index] - col_widths[col] = max(len(code), col_widths.get(col, 0)) - prev_row_index = row_index - col += 1 - - # second pass, yield the cell values - col = 0 - prev_row_index = None - for key_index in sorted(keymap): - code, row_index = keymap[key_index] - if row_index != prev_row_index: - col = 0 - yield "\n" - if row_indents: - for indent_col in range(row_indents[row_index]): - pad = " " * (col_widths[indent_col] - 4) - yield (" /*-*/" + pad) - col = row_indents[row_index] - else: - yield pad - yield " {}".format(code) - if key_index < len(keymap) - 1: - yield "," - # This will be yielded on the next iteration when - # we know that we're not at the end of a line. - pad = " " * (col_widths[col] - len(code)) - prev_row_index = row_index - col += 1 - - -def iter_keymap_parts(config, keymaps): - # includes - for include_path in config['keymaps_includes']: - yield '#include "{}"\n'.format(include_path) - - yield "\n" - - # definitions - for i, macro_id in enumerate(sorted(config['macro_ids'])): - yield "#define {} {}\n".format(macro_id, i) - - yield "\n" - - for i, layer_name in enumerate(config['layer_lines']): - yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) - - yield "\n" - - # keymaps - yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" - - for i, layer_name in enumerate(config['layer_lines']): - # comment - layer_lines = config['layer_lines'][layer_name] - prefixed_lines = " * " + " * ".join(layer_lines) - yield "/*\n{} */\n".format(prefixed_lines) - - # keymap codes - keymap = keymaps[layer_name] - row_indents = ROW_INDENTS.get(config['layout']) - keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) - yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) - - yield "};\n\n" - - # no idea what this is for - yield "const uint16_t PROGMEM fn_actions[] = {};\n" - - # macros - yield MACROCODE.format( - macro_cases="", - unicode_macro_cases="\n".join(unicode_macro_cases(config)), - ) - - # TODO: dynamically create blinking lights - yield USERCODE - - -def main(argv=sys.argv[1:]): - if not argv or '-h' in argv or '--help' in argv: - print(__doc__) - return 0 - - in_path = os.path.abspath(argv[0]) - if not os.path.exists(in_path): - print("No such file '{}'".format(in_path)) - return 1 - - if len(argv) > 1: - out_path = os.path.abspath(argv[1]) - else: - dirname = os.path.dirname(in_path) - out_path = os.path.join(dirname, "keymap.c") - - config = parse_config(in_path) - valid_keys = parse_valid_keys(config, out_path) - keymaps = parse_keymaps(config, valid_keys) - - with io.open(out_path, mode="w", encoding="utf-8") as fh: - for part in iter_keymap_parts(config, keymaps): - fh.write(part) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/keyboards/ergodox80/ergodox80/util/readme.md b/keyboards/ergodox80/ergodox80/util/readme.md deleted file mode 100644 index 26c5e5d99c..0000000000 --- a/keyboards/ergodox80/ergodox80/util/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# ErgoDox EZ Utilities - -The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option. diff --git a/keyboards/ergodox80/keymaps/default/keymap.c b/keyboards/ergodox80/keymaps/default/keymap.c deleted file mode 100644 index 2da2c5b0e4..0000000000 --- a/keyboards/ergodox80/keymaps/default/keymap.c +++ /dev/null @@ -1,183 +0,0 @@ -#include "ergodox80.h" -#include "debug.h" -#include "action_layer.h" -#include "version.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys - -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|' / Cmd | - * |--------+------+------+------+------+------| 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| - * ,------|------|------| |------+--------+------. - * | 1 | 2 | Home | | PgUp | 3 | 4 | - * |------|------|------| |------|--------|------| - * | Space| BkSp | End | | PgDn | Tab |Enter | - * `--------------------' `----------------------' - */ -// 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_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - 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_1, KC_2, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, 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_3, KC_4, - KC_PGDN,KC_TAB, KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | 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 - M(0), 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,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, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+----------. - * | | | | | | | | - * |------|------|------| |------|------|----------| - * | | | | | | |BrwserBack| - * `--------------------' `------------------------' - */ -// 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, 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_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) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - 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/keyboards/ergodox80/readme.md b/keyboards/ergodox80/readme.md deleted file mode 100644 index b5c09f9222..0000000000 --- a/keyboards/ergodox80/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# Ergodox 80 key support - -This is based on the ergodox-ez qmk firmware but is for ergodoxes with 80 keys. - - - diff --git a/keyboards/ergodox80/rules.mk b/keyboards/ergodox80/rules.mk deleted file mode 100644 index ac63d4eff2..0000000000 --- a/keyboards/ergodox80/rules.mk +++ /dev/null @@ -1,28 +0,0 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make = Make software. -# -# make clean = Clean out built project files. -# -# That's pretty much all you need. To compile, always go make clean, -# followed by make. -# -# For advanced users only: -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -#---------------------------------------------------------------------------- -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= yes # Unicode -- cgit v1.2.3 From 558f3ec1eb325caf706efc15e2fab26121aba442 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 6 Sep 2016 23:19:01 -0500 Subject: Use keyboard config for nkro (#7) * removing nkro references - wip * changed NKRO to be defined by keymap_config --- keyboards/planck/keymaps/pvc/Makefile | 4 +- keyboards/planck/keymaps/pvc/keymap.c | 5 +- quantum/keycode_config.h | 5 ++ quantum/keymap.h | 1 + quantum/quantum.c | 124 +++++++++++++++++++--------------- tmk_core/common/action_util.c | 10 ++- tmk_core/common/bootmagic.c | 4 -- tmk_core/common/command.c | 6 +- tmk_core/common/host.c | 5 -- tmk_core/common/host.h | 4 -- tmk_core/common/keyboard.c | 4 +- tmk_core/common/magic.c | 4 -- tmk_core/protocol/chibios/usb_main.c | 19 +++--- tmk_core/protocol/lufa/lufa.c | 9 ++- tmk_core/protocol/pjrc/usb.c | 18 +++-- tmk_core/protocol/pjrc/usb_keyboard.c | 8 ++- tmk_core/readme.md | 2 +- 17 files changed, 131 insertions(+), 101 deletions(-) diff --git a/keyboards/planck/keymaps/pvc/Makefile b/keyboards/planck/keymaps/pvc/Makefile index 0b2f060de4..19c3abc6c6 100644 --- a/keyboards/planck/keymaps/pvc/Makefile +++ b/keyboards/planck/keymaps/pvc/Makefile @@ -1,9 +1,9 @@ # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c index 8ff40f377c..23aedfc998 100644 --- a/keyboards/planck/keymaps/pvc/keymap.c +++ b/keyboards/planck/keymaps/pvc/keymap.c @@ -83,6 +83,7 @@ enum keyboard_macros { #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define TG_NKRO MAGIC_TOGGLE_NKRO #define OS_SHFT KC_FN0 #define _______ KC_TRNS @@ -206,7 +207,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_ADJUST] = { { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG , AU_TOG }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, + { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , TG_NKRO, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP } }, @@ -236,7 +237,7 @@ void persistant_default_layer_set(uint16_t default_layer) } const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MODS_ONESHOT(MOD_LSFT), + [0] = ACTION_MODS_ONESHOT(MOD_RSFT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h index 6216eefc90..c15b0d32f8 100644 --- a/quantum/keycode_config.h +++ b/quantum/keycode_config.h @@ -1,6 +1,9 @@ #include "eeconfig.h" #include "keycode.h" +#ifndef KEYCODE_CONFIG_H +#define KEYCODE_CONFIG_H + uint16_t keycode_config(uint16_t keycode); /* NOTE: Not portable. Bit field order depends on implementation */ @@ -19,3 +22,5 @@ typedef union { } keymap_config_t; extern keymap_config_t keymap_config; + +#endif /* KEYCODE_CONFIG_H */ diff --git a/quantum/keymap.h b/quantum/keymap.h index f2d94d75c3..98ddfd0c53 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -111,6 +111,7 @@ enum quantum_keycodes { MAGIC_UNSWAP_BACKSLASH_BACKSPACE, MAGIC_UNHOST_NKRO, MAGIC_UNSWAP_ALT_GUI, + MAGIC_TOGGLE_NKRO, // Leader key #ifndef DISABLE_LEADER diff --git a/quantum/quantum.c b/quantum/quantum.c index fa86b6220f..a16bd5443c 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -27,10 +27,6 @@ static void do_code16 (uint16_t code, void (*f) (uint8_t)) { f(KC_RGUI); } -#ifdef NKRO_ENABLE - extern bool keyboard_nkro; -#endif - void register_code16 (uint16_t code) { do_code16 (code, register_code); register_code (code); @@ -203,7 +199,7 @@ bool process_record_quantum(keyrecord_t *record) { return false; break; #endif - case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: + case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: if (record->event.pressed) { // MAGIC actions (BOOTMAGIC without the boot) if (!eeconfig_is_enabled()) { @@ -211,57 +207,73 @@ bool process_record_quantum(keyrecord_t *record) { } /* keymap config */ keymap_config.raw = eeconfig_read_keymap(); - if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) { - keymap_config.swap_control_capslock = 1; - } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) { - keymap_config.capslock_to_control = 1; - } else if (keycode == MAGIC_SWAP_LALT_LGUI) { - keymap_config.swap_lalt_lgui = 1; - } else if (keycode == MAGIC_SWAP_RALT_RGUI) { - keymap_config.swap_ralt_rgui = 1; - } else if (keycode == MAGIC_NO_GUI) { - keymap_config.no_gui = 1; - } else if (keycode == MAGIC_SWAP_GRAVE_ESC) { - keymap_config.swap_grave_esc = 1; - } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) { - keymap_config.swap_backslash_backspace = 1; - } else if (keycode == MAGIC_HOST_NKRO) { - keymap_config.nkro = 1; - -#ifdef NKRO_ENABLE - clear_keyboard(); // clear to prevent stuck keys - keyboard_nkro = keymap_config.nkro; -#endif - } else if (keycode == MAGIC_SWAP_ALT_GUI) { - keymap_config.swap_lalt_lgui = 1; - keymap_config.swap_ralt_rgui = 1; - } - /* UNs */ - else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) { - keymap_config.swap_control_capslock = 0; - } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) { - keymap_config.capslock_to_control = 0; - } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) { - keymap_config.swap_lalt_lgui = 0; - } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) { - keymap_config.swap_ralt_rgui = 0; - } else if (keycode == MAGIC_UNNO_GUI) { - keymap_config.no_gui = 0; - } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) { - keymap_config.swap_grave_esc = 0; - } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) { - keymap_config.swap_backslash_backspace = 0; - } else if (keycode == MAGIC_UNHOST_NKRO) { - keymap_config.nkro = 0; -#ifdef NKRO_ENABLE - clear_keyboard(); // clear to prevent stuck keys - keyboard_nkro = keymap_config.nkro; -#endif - } else if (keycode == MAGIC_UNSWAP_ALT_GUI) { - keymap_config.swap_lalt_lgui = 0; - keymap_config.swap_ralt_rgui = 0; + switch (keycode) + { + case MAGIC_SWAP_CONTROL_CAPSLOCK: + keymap_config.swap_control_capslock = true; + break; + case MAGIC_CAPSLOCK_TO_CONTROL: + keymap_config.capslock_to_control = true; + break; + case MAGIC_SWAP_LALT_LGUI: + keymap_config.swap_lalt_lgui = true; + break; + case MAGIC_SWAP_RALT_RGUI: + keymap_config.swap_ralt_rgui = true; + break; + case MAGIC_NO_GUI: + keymap_config.no_gui = true; + break; + case MAGIC_SWAP_GRAVE_ESC: + keymap_config.swap_grave_esc = true; + break; + case MAGIC_SWAP_BACKSLASH_BACKSPACE: + keymap_config.swap_backslash_backspace = true; + break; + case MAGIC_HOST_NKRO: + keymap_config.nkro = true; + break; + case MAGIC_SWAP_ALT_GUI: + keymap_config.swap_lalt_lgui = true; + keymap_config.swap_ralt_rgui = true; + break; + case MAGIC_UNSWAP_CONTROL_CAPSLOCK: + keymap_config.swap_control_capslock = false; + break; + case MAGIC_UNCAPSLOCK_TO_CONTROL: + keymap_config.capslock_to_control = false; + break; + case MAGIC_UNSWAP_LALT_LGUI: + keymap_config.swap_lalt_lgui = false; + break; + case MAGIC_UNSWAP_RALT_RGUI: + keymap_config.swap_ralt_rgui = false; + break; + case MAGIC_UNNO_GUI: + keymap_config.no_gui = false; + break; + case MAGIC_UNSWAP_GRAVE_ESC: + keymap_config.swap_grave_esc = false; + break; + case MAGIC_UNSWAP_BACKSLASH_BACKSPACE: + keymap_config.swap_backslash_backspace = false; + break; + case MAGIC_UNHOST_NKRO: + keymap_config.nkro = false; + break; + case MAGIC_UNSWAP_ALT_GUI: + keymap_config.swap_lalt_lgui = false; + keymap_config.swap_ralt_rgui = false; + break; + case MAGIC_TOGGLE_NKRO: + keymap_config.nkro = !keymap_config.nkro; + break; + default: + break; } eeconfig_update_keymap(keymap_config.raw); + clear_keyboard(); // clear to prevent stuck keys + return false; } break; @@ -284,7 +296,7 @@ bool process_record_quantum(keyrecord_t *record) { unregister_mods(MOD_BIT(KC_LSFT)); } return false; - break; + // break; } case KC_RSPC: { @@ -306,7 +318,7 @@ bool process_record_quantum(keyrecord_t *record) { unregister_mods(MOD_BIT(KC_RSFT)); } return false; - break; + // break; } default: { shift_interrupted[0] = true; diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index 61ff202bef..cb4b252648 100644 --- a/tmk_core/common/action_util.c +++ b/tmk_core/common/action_util.c @@ -20,6 +20,10 @@ along with this program. If not, see . #include "action_util.h" #include "action_layer.h" #include "timer.h" +#include "keycode_config.h" + +extern keymap_config_t keymap_config; + static inline void add_key_byte(uint8_t code); static inline void del_key_byte(uint8_t code); @@ -139,7 +143,7 @@ void send_keyboard_report(void) { void add_key(uint8_t key) { #ifdef NKRO_ENABLE - if (keyboard_protocol && keyboard_nkro) { + if (keyboard_protocol && keymap_config.nkro) { add_key_bit(key); return; } @@ -150,7 +154,7 @@ void add_key(uint8_t key) void del_key(uint8_t key) { #ifdef NKRO_ENABLE - if (keyboard_protocol && keyboard_nkro) { + if (keyboard_protocol && keymap_config.nkro) { del_key_bit(key); return; } @@ -231,7 +235,7 @@ uint8_t has_anymod(void) uint8_t get_first_key(void) { #ifdef NKRO_ENABLE - if (keyboard_protocol && keyboard_nkro) { + if (keyboard_protocol && keymap_config.nkro) { uint8_t i = 0; for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++) ; diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c index 6730a2a4aa..2c6bcbae56 100644 --- a/tmk_core/common/bootmagic.c +++ b/tmk_core/common/bootmagic.c @@ -83,10 +83,6 @@ void bootmagic(void) } eeconfig_update_keymap(keymap_config.raw); -#ifdef NKRO_ENABLE - keyboard_nkro = keymap_config.nkro; -#endif - /* default layer */ uint8_t default_layer = 0; if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_0)) { default_layer |= (1<<0); } diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 476fc6fe3c..54d6117fd1 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -238,7 +238,7 @@ static void print_status(void) print_val_hex8(keyboard_protocol); print_val_hex8(keyboard_idle); #ifdef NKRO_ENABLE - print_val_hex8(keyboard_nkro); + print_val_hex8(keymap_config.nkro); #endif print_val_hex32(timer_read32()); @@ -435,8 +435,8 @@ static bool command_common(uint8_t code) // NKRO toggle case MAGIC_KC(MAGIC_KEY_NKRO): clear_keyboard(); // clear to prevent stuck keys - keyboard_nkro = !keyboard_nkro; - if (keyboard_nkro) { + keymap_config.nkro = !keymap_config.nkro; + if (keymap_config.nkro) { print("NKRO: on\n"); } else { print("NKRO: off\n"); diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c index 11a05c2ddd..e12b622165 100644 --- a/tmk_core/common/host.c +++ b/tmk_core/common/host.c @@ -22,11 +22,6 @@ along with this program. If not, see . #include "util.h" #include "debug.h" - -#ifdef NKRO_ENABLE -bool keyboard_nkro = true; -#endif - static host_driver_t *driver; static uint16_t last_system_report = 0; static uint16_t last_consumer_report = 0; diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h index 9814b10d2d..aeabba7107 100644 --- a/tmk_core/common/host.h +++ b/tmk_core/common/host.h @@ -28,10 +28,6 @@ along with this program. If not, see . extern "C" { #endif -#ifdef NKRO_ENABLE -extern bool keyboard_nkro; -#endif - extern uint8_t keyboard_idle; extern uint8_t keyboard_protocol; diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index c46a701b3b..371d93f3e5 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -57,6 +57,8 @@ along with this program. If not, see . # include "visualizer/visualizer.h" #endif + + #ifdef MATRIX_HAS_GHOST static bool has_ghost_in_row(uint8_t row) { @@ -106,7 +108,7 @@ void keyboard_init(void) { rgblight_init(); #endif #if defined(NKRO_ENABLE) && defined(FORCE_NKRO) - keyboard_nkro = true; + keymap_config.nkro = 1; #endif } diff --git a/tmk_core/common/magic.c b/tmk_core/common/magic.c index 194e4cc026..49617a3d10 100644 --- a/tmk_core/common/magic.c +++ b/tmk_core/common/magic.c @@ -27,10 +27,6 @@ void magic(void) /* keymap config */ keymap_config.raw = eeconfig_read_keymap(); -#ifdef NKRO_ENABLE - keyboard_nkro = keymap_config.nkro; -#endif - uint8_t default_layer = 0; default_layer = eeconfig_read_default_layer(); default_layer_set((uint32_t)default_layer); diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index e2c9d9bf14..d0c72c46c7 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -28,6 +28,12 @@ #include "led.h" #endif +#ifdef NKRO_ENABLE + #include "keycode_config.h" + + extern keymap_config_t keymap_config; +#endif + /* --------------------------------------------------------- * Global interface variables and declarations * --------------------------------------------------------- @@ -39,9 +45,6 @@ uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0; volatile uint16_t keyboard_idle_count = 0; static virtual_timer_t keyboard_idle_timer; static void keyboard_idle_timer_cb(void *arg); -#ifdef NKRO_ENABLE -extern bool keyboard_nkro; -#endif /* NKRO_ENABLE */ report_keyboard_t keyboard_report_sent = {{0}}; #ifdef MOUSE_ENABLE @@ -943,8 +946,8 @@ static bool usb_request_hook_cb(USBDriver *usbp) { if((usbp->setup[4] == KBD_INTERFACE) && (usbp->setup[5] == 0)) { /* wIndex */ keyboard_protocol = ((usbp->setup[2]) != 0x00); /* LSB(wValue) */ #ifdef NKRO_ENABLE - keyboard_nkro = !!keyboard_protocol; - if(!keyboard_nkro && keyboard_idle) { + keymap_config.nkro = !!keyboard_protocol; + if(!keymap_config.nkro && keyboard_idle) { #else /* NKRO_ENABLE */ if(keyboard_idle) { #endif /* NKRO_ENABLE */ @@ -962,7 +965,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { keyboard_idle = usbp->setup[3]; /* MSB(wValue) */ /* arm the timer */ #ifdef NKRO_ENABLE - if(!keyboard_nkro && keyboard_idle) { + if(!keymap_config.nkro && keyboard_idle) { #else /* NKRO_ENABLE */ if(keyboard_idle) { #endif /* NKRO_ENABLE */ @@ -1089,7 +1092,7 @@ static void keyboard_idle_timer_cb(void *arg) { } #ifdef NKRO_ENABLE - if(!keyboard_nkro && keyboard_idle) { + if(!keymap_config.nkro && keyboard_idle) { #else /* NKRO_ENABLE */ if(keyboard_idle) { #endif /* NKRO_ENABLE */ @@ -1122,7 +1125,7 @@ void send_keyboard(report_keyboard_t *report) { osalSysUnlock(); #ifdef NKRO_ENABLE - if(keyboard_nkro) { /* NKRO protocol */ + if(keymap_config.nkro) { /* NKRO protocol */ /* need to wait until the previous packet has made it through */ /* can rewrite this using the synchronous API, then would wait * until *after* the packet has been transmitted. I think diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 9b201374a2..01c0e45b0b 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -52,6 +52,13 @@ #include "descriptor.h" #include "lufa.h" +#ifdef NKRO_ENABLE + #include "keycode_config.h" + + extern keymap_config_t keymap_config; +#endif + + #ifdef AUDIO_ENABLE #include #endif @@ -502,7 +509,7 @@ static void send_keyboard(report_keyboard_t *report) /* Select the Keyboard Report Endpoint */ #ifdef NKRO_ENABLE - if (keyboard_protocol && keyboard_nkro) { + if (keyboard_protocol && keymap_config.nkro) { /* Report protocol - NKRO */ Endpoint_SelectEndpoint(NKRO_IN_EPNUM); diff --git a/tmk_core/protocol/pjrc/usb.c b/tmk_core/protocol/pjrc/usb.c index 1e6ba8719a..09efbe0762 100644 --- a/tmk_core/protocol/pjrc/usb.c +++ b/tmk_core/protocol/pjrc/usb.c @@ -1,17 +1,17 @@ /* USB Keyboard Plus Debug Channel Example for Teensy USB Development Board * http://www.pjrc.com/teensy/usb_keyboard.html * Copyright (c) 2009 PJRC.COM, LLC - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -41,6 +41,12 @@ #include "action.h" #include "action_util.h" +#ifdef NKRO_ENABLE + #include "keycode_config.h" + + extern keymap_config_t keymap_config; +#endif + /************************************************************************** * @@ -694,7 +700,7 @@ ISR(USB_GEN_vect) } /* TODO: should keep IDLE rate on each keyboard interface */ #ifdef NKRO_ENABLE - if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) { + if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) { #else if (keyboard_idle && (++div4 & 3) == 0) { #endif @@ -881,7 +887,7 @@ ISR(USB_COM_vect) #endif if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) { if (bRequest == SET_FEATURE) { - remote_wakeup = true; + remote_wakeup = true; } else { remote_wakeup = false; } @@ -932,7 +938,7 @@ ISR(USB_COM_vect) if (bRequest == HID_SET_PROTOCOL) { keyboard_protocol = wValue; #ifdef NKRO_ENABLE - keyboard_nkro = !!keyboard_protocol; + keymap_config.nkro = !!keyboard_protocol; #endif clear_keyboard(); //usb_wait_in_ready(); diff --git a/tmk_core/protocol/pjrc/usb_keyboard.c b/tmk_core/protocol/pjrc/usb_keyboard.c index 4b87b5d7b5..05f4797340 100644 --- a/tmk_core/protocol/pjrc/usb_keyboard.c +++ b/tmk_core/protocol/pjrc/usb_keyboard.c @@ -30,6 +30,12 @@ #include "util.h" #include "host.h" +#ifdef NKRO_ENABLE + #include "keycode_config.h" + + extern keymap_config_t keymap_config; +#endif + // protocol setting from the host. We use exactly the same report // either way, so this variable only stores the setting since we @@ -56,7 +62,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report) int8_t result = 0; #ifdef NKRO_ENABLE - if (keyboard_nkro) + if (keymap_config.nkro) result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE); else #endif diff --git a/tmk_core/readme.md b/tmk_core/readme.md index f460d0ed44..3242328516 100644 --- a/tmk_core/readme.md +++ b/tmk_core/readme.md @@ -23,7 +23,7 @@ These features can be used in your keyboard. * Mouse key - Mouse control with keyboard * System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up * Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc -* USB NKRO - 120 keys(+ 8 modifiers) simultaneously +* USB NKRO - 240 keys(+ 8 modifiers) simultaneously * PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device * Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols * User Function - Customizable function of key with writing code -- cgit v1.2.3 From 54214b3abcae2189341d124c29336b911d88da41 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Wed, 7 Sep 2016 13:29:29 -0400 Subject: Borrowed joint Shift/Enter idea from sgoodwin mapping --- keyboards/planck/keymaps/cbbrowne/keymap.c | 2 +- keyboards/planck/keymaps/cbbrowne/readme.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 63566f862d..898f6f0e0a 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -84,7 +84,7 @@ enum macro_id { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, 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_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 5af688bb17..51979f6300 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -77,3 +77,4 @@ doing sundry experimentation: * The jeebak keymap seems to have some neat ideas: - Number layer which is aggressive about having numbers in several places - Touch layer seems interesting + * Trying out sgoodwin's "hold Enter down to get Shift" \ No newline at end of file -- cgit v1.2.3 From e5396ca9e5ccb714a757b6559c9f7e95bf372e3f Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Wed, 7 Sep 2016 18:23:01 -0700 Subject: zweihander: rename to Makefile --- keyboards/ergodox/keymaps/zweihander-osx/Makefile | 2 ++ keyboards/ergodox/keymaps/zweihander-osx/makefile.mk | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 keyboards/ergodox/keymaps/zweihander-osx/Makefile delete mode 100644 keyboards/ergodox/keymaps/zweihander-osx/makefile.mk diff --git a/keyboards/ergodox/keymaps/zweihander-osx/Makefile b/keyboards/ergodox/keymaps/zweihander-osx/Makefile new file mode 100644 index 0000000000..6e3d088a43 --- /dev/null +++ b/keyboards/ergodox/keymaps/zweihander-osx/Makefile @@ -0,0 +1,2 @@ +# Don’t do a tricolor wave when the computer is shut down in Windows +SLEEP_LED_ENABLE = no diff --git a/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk b/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk deleted file mode 100644 index 6e3d088a43..0000000000 --- a/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk +++ /dev/null @@ -1,2 +0,0 @@ -# Don’t do a tricolor wave when the computer is shut down in Windows -SLEEP_LED_ENABLE = no -- cgit v1.2.3 From 273a6cc688ef4c8f7964d8c62147c8697db42cde Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Wed, 7 Sep 2016 20:28:31 -0700 Subject: =?UTF-8?q?-=20Make=20thumb-accessible=20=E2=8C=A5=20and=20?= =?UTF-8?q?=E2=8C=83=20into=20right-=E2=8C=A5=20and=20right-=E2=8C=83=20-?= =?UTF-8?q?=20remove=20media-space=20and=20media-shift-space;=20put=20a=20?= =?UTF-8?q?play/pause=20key=20at=20media-m=20instead=20-=20add=20print=20s?= =?UTF-8?q?creen,=20scroll=20lock,=20and=20pause/break=20to=20the=20media?= =?UTF-8?q?=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And in the readme: - don't say we don't have any Windows-specific keys - add mnemonics for thumb-alt and thumb-ctrl positioning --- keyboards/ergodox/keymaps/zweihander-osx/keymap.c | 14 +++++++------- keyboards/ergodox/keymaps/zweihander-osx/readme.markdown | 8 +++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c index d6d66fd55d..725a73e346 100644 --- a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c +++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | PgUp | | PgDn | | | * | | ⇥ |------| |------| ⇥ |Enter | - * | | | L⌥ | | L⌃ | | | + * | | | R⌥ | | R⌃ | | | * `--------------------' `----------------------' */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, KC_GRV, KC_QUOT, KC_PGUP, - KC_SPC,KC_TAB ,KC_LALT, + KC_SPC,KC_TAB ,KC_RALT, // right hand TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC , KC_ESC, KC_BSPC, KC_PGDN, - KC_LCTL, KC_TAB, KC_ENT + KC_RCTL, KC_TAB, KC_ENT ), /* Keymap 1: Symbol Layer * @@ -102,13 +102,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | + * | | F14 | F15 |PrtScr|SclLck| Pause| | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | + * | | | | | |BBEdit| | | | | ⏯ | ⏮ | ⏭ | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | |VolUp |VolDn | Mute | | | * `----------------------------------' `----------------------------------' @@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // MEDIA AND MOUSE [MDIA] = KEYMAP( - KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ + KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */ KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS, KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS, @@ -134,7 +134,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, - KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END , diff --git a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown index 3b7f52941a..5125a12ee1 100644 --- a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown +++ b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown @@ -7,7 +7,7 @@ This layout is tuned for people who… ## use OS X -This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts. +While this layout should work fine in Windows, it’s not tuned for it. No sane person who primarily uses Windows would put this many Windows keys on a keyboard layout. ## mouse left-handed while doing other things with the right hand @@ -21,8 +21,6 @@ I tend to have my mouse in my left hand, but I like to use my other hand to make - Go Up and Close Just-Left Folder (⌥⌘↑) - Cycle through open windows in current application (⌘\` and ⌘⇧\`) - Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥) -- Space (page down in browsers; Quick Look in the Finder) -- Shift-Space (page up in web browsers) Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word. @@ -34,11 +32,15 @@ I wanted to preserve the feel of a number of shortcuts that involve pressing lot - Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫) - Shut Down Without Asking for Confirmation (⇧⌥⌘ power) +⇧⌥⌘⌫, when you press the backspace on the right half of the keyboard, is much more satisfying than if you curl your left hand into a claw to press all the keys on the left. Try both; you’ll agree. + ## use Emacs-style shortcuts I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key. +Having trouble remembering which thumb key is alt and which is ctrl? It’s like on the lower right of a normal keyboard — leftmost is alt, rightmost is ctrl. + ## use spreadsheets -- cgit v1.2.3 From fe2aed0d1c8d1535c160755b76186972071aed02 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 7 Sep 2016 23:50:58 -0500 Subject: Added User Print - A "light" console out option (#8) User print disables the normal print messages in the body of QMK/TMK code and is meant as a lightweight alternative to NOPRINT. Use it when you only want to do a spot of debugging but lack flash resources for allowing all of the codebase to print (and store their wasteful strings). --- keyboards/planck/keymaps/pvc/Makefile | 2 +- keyboards/planck/keymaps/pvc/config.h | 12 ++- tmk_core/common/avr/xprintf.h | 6 +- tmk_core/common/mbed/xprintf.cpp | 2 +- tmk_core/common/mbed/xprintf.h | 2 +- tmk_core/common/print.h | 168 ++++++++++++++++++++++++++++++---- 6 files changed, 166 insertions(+), 26 deletions(-) diff --git a/keyboards/planck/keymaps/pvc/Makefile b/keyboards/planck/keymaps/pvc/Makefile index 19c3abc6c6..b2ff961fa5 100644 --- a/keyboards/planck/keymaps/pvc/Makefile +++ b/keyboards/planck/keymaps/pvc/Makefile @@ -6,7 +6,7 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality diff --git a/keyboards/planck/keymaps/pvc/config.h b/keyboards/planck/keymaps/pvc/config.h index 1113372b0a..1004c8b99f 100644 --- a/keyboards/planck/keymaps/pvc/config.h +++ b/keyboards/planck/keymaps/pvc/config.h @@ -68,10 +68,18 @@ along with this program. If not, see . */ /* disable debug print */ -//#define NO_DEBUG +#ifndef NO_DEBUG +# define NO_DEBUG +#endif /* disable print */ -//#define NO_PRINT +// #ifndef NO_PRINT +// # define NO_PRINT +// #endif + +/* Only print user print statements */ +#define USER_PRINT + /* disable action features */ //#define NO_ACTION_LAYER diff --git a/tmk_core/common/avr/xprintf.h b/tmk_core/common/avr/xprintf.h index e53c0dd8e0..08d9f93a0c 100644 --- a/tmk_core/common/avr/xprintf.h +++ b/tmk_core/common/avr/xprintf.h @@ -56,8 +56,8 @@ void xitoa(long value, char radix, char width); #define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__) void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */ -void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */ -void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */ +// void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */ +// void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */ /* Format string is placed in the ROM. The format flags is similar to printf(). @@ -88,7 +88,7 @@ void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send format /*-----------------------------------------------------------------------------*/ char xatoi(char **str, long *ret); -/* Get value of the numeral string. +/* Get value of the numeral string. str Pointer to pointer to source string diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp index 3647ece751..b1aac2c99d 100644 --- a/tmk_core/common/mbed/xprintf.cpp +++ b/tmk_core/common/mbed/xprintf.cpp @@ -7,7 +7,7 @@ #define STRING_STACK_LIMIT 120 //TODO -int xprintf(const char* format, ...) { return 0; } +int __xprintf(const char* format, ...) { return 0; } #if 0 /* mbed Serial */ diff --git a/tmk_core/common/mbed/xprintf.h b/tmk_core/common/mbed/xprintf.h index 26bc529e5b..1e7a48c06d 100644 --- a/tmk_core/common/mbed/xprintf.h +++ b/tmk_core/common/mbed/xprintf.h @@ -7,7 +7,7 @@ extern "C" { #endif -int xprintf(const char *format, ...); +int __xprintf(const char *format, ...); #ifdef __cplusplus } diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index a1352527fc..8836c0fc7c 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -36,40 +36,140 @@ #ifndef NO_PRINT +#if defined(__AVR__) /* __AVR__ */ -#if defined(__AVR__) +# include "avr/xprintf.h" -#include "avr/xprintf.h" -#define print(s) xputs(PSTR(s)) -#define println(s) xputs(PSTR(s "\r\n")) +# ifdef USER_PRINT /* USER_PRINT */ -#ifdef __cplusplus +// Remove normal print defines +# define print(s) +# define println(s) +# undef xprintf +# define xprintf(fmt, ...) + +// Create user print defines +# define uprint(s) xputs(PSTR(s)) +# define uprintln(s) xputs(PSTR(s "\r\n")) +# define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__) + +# else /* NORMAL PRINT */ + +// Create user & normal print defines +# define print(s) xputs(PSTR(s)) +# define println(s) xputs(PSTR(s "\r\n")) +# define uprint(s) print(s) +# define uprintln(s) println(s) +# define uprintf(fmt, ...) xprintf(fmt, ...) + +# endif /* USER_PRINT / NORMAL PRINT */ + +# ifdef __cplusplus extern "C" -#endif +# endif + /* function pointer of sendchar to be used by print utility */ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); -#elif defined(PROTOCOL_CHIBIOS) /* __AVR__ */ +#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */ + +# include "chibios/printf.h" + +# ifdef USER_PRINT /* USER_PRINT */ + +// Remove normal print defines +# define print(s) +# define println(s) +# define xprintf(fmt, ...) + +// Create user print defines +# define uprint(s) printf(s) +# define uprintln(s) printf(s "\r\n") +# define uprintf printf + +# else /* NORMAL PRINT */ + +// Create user & normal print defines +# define print(s) printf(s) +# define println(s) printf(s "\r\n") +# define xprintf printf +# define uprint(s) printf(s) +# define uprintln(s) printf(s "\r\n") +# define uprintf printf -#include "chibios/printf.h" +# endif /* USER_PRINT / NORMAL PRINT */ -#define print(s) printf(s) -#define println(s) printf(s "\r\n") -#define xprintf printf +#elif defined(__arm__) /* __arm__ */ -#elif defined(__arm__) /* __AVR__ */ +# include "mbed/xprintf.h" -#include "mbed/xprintf.h" +# ifdef USER_PRINT /* USER_PRINT */ -#define print(s) xprintf(s) -#define println(s) xprintf(s "\r\n") +// Remove normal print defines +# define print(s) +# define println(s) +# define xprintf(fmt, ...) + +// Create user print defines +# define uprintf(fmt, ...) __xprintf(fmt, ...) +# define uprint(s) xprintf(s) +# define uprintln(s) xprintf(s "\r\n") + +# else /* NORMAL PRINT */ + +// Create user & normal print defines +# define xprintf(fmt, ...) __xprintf(fmt, ...) +# define print(s) xprintf(s) +# define println(s) xprintf(s "\r\n") +# define uprint(s) print(s) +# define uprintln(s) println(s) +# define uprintf(fmt, ...) xprintf(fmt, ...) + +# endif /* USER_PRINT / NORMAL PRINT */ /* TODO: to select output destinations: UART/USBSerial */ -#define print_set_sendchar(func) +# define print_set_sendchar(func) + +#endif /* __AVR__ / PROTOCOL_CHIBIOS / __arm__ */ + +// User print disables the normal print messages in the body of QMK/TMK code and +// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do +// a spot of debugging but lack flash resources for allowing all of the codebase to +// print (and store their wasteful strings). +// +// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!! +// +#ifdef USER_PRINT -#endif /* __AVR__ */ +// Disable normal print +#define print_dec(data) +#define print_decs(data) +#define print_hex4(data) +#define print_hex8(data) +#define print_hex16(data) +#define print_hex32(data) +#define print_bin4(data) +#define print_bin8(data) +#define print_bin16(data) +#define print_bin32(data) +#define print_bin_reverse8(data) +#define print_bin_reverse16(data) +#define print_bin_reverse32(data) +#define print_val_dec(v) +#define print_val_decs(v) +#define print_val_hex8(v) +#define print_val_hex16(v) +#define print_val_hex32(v) +#define print_val_bin8(v) +#define print_val_bin16(v) +#define print_val_bin32(v) +#define print_val_bin_reverse8(v) +#define print_val_bin_reverse16(v) +#define print_val_bin_reverse32(v) +#else /* NORMAL_PRINT */ +//Enable normal print /* decimal */ #define print_dec(i) xprintf("%u", i) #define print_decs(i) xprintf("%d", i) @@ -99,6 +199,39 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); #define print_val_bin_reverse16(v) xprintf(#v ": %016b\n", bitrev16(v)) #define print_val_bin_reverse32(v) xprintf(#v ": %032lb\n", bitrev32(v)) +#endif /* USER_PRINT / NORMAL_PRINT */ + +// User Print + +/* decimal */ +#define uprint_dec(i) uprintf("%u", i) +#define uprint_decs(i) uprintf("%d", i) +/* hex */ +#define uprint_hex4(i) uprintf("%X", i) +#define uprint_hex8(i) uprintf("%02X", i) +#define uprint_hex16(i) uprintf("%04X", i) +#define uprint_hex32(i) uprintf("%08lX", i) +/* binary */ +#define uprint_bin4(i) uprintf("%04b", i) +#define uprint_bin8(i) uprintf("%08b", i) +#define uprint_bin16(i) uprintf("%016b", i) +#define uprint_bin32(i) uprintf("%032lb", i) +#define uprint_bin_reverse8(i) uprintf("%08b", bitrev(i)) +#define uprint_bin_reverse16(i) uprintf("%016b", bitrev16(i)) +#define uprint_bin_reverse32(i) uprintf("%032lb", bitrev32(i)) +/* print value utility */ +#define uprint_val_dec(v) uprintf(#v ": %u\n", v) +#define uprint_val_decs(v) uprintf(#v ": %d\n", v) +#define uprint_val_hex8(v) uprintf(#v ": %X\n", v) +#define uprint_val_hex16(v) uprintf(#v ": %02X\n", v) +#define uprint_val_hex32(v) uprintf(#v ": %04lX\n", v) +#define uprint_val_bin8(v) uprintf(#v ": %08b\n", v) +#define uprint_val_bin16(v) uprintf(#v ": %016b\n", v) +#define uprint_val_bin32(v) uprintf(#v ": %032lb\n", v) +#define uprint_val_bin_reverse8(v) uprintf(#v ": %08b\n", bitrev(v)) +#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v)) +#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v)) + #else /* NO_PRINT */ #define xprintf(fmt, ...) @@ -143,5 +276,4 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); #define pbin_reverse(data) print_bin_reverse8(data) #define pbin_reverse16(data) print_bin_reverse16(data) - #endif -- cgit v1.2.3 From 740b4bbe463545c3547c41def88fa30abbc734fc Mon Sep 17 00:00:00 2001 From: Roman Zolotarev Date: Thu, 8 Sep 2016 21:12:34 +0800 Subject: Fix typo --- keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md index a86061285a..4fa1814fb1 100644 --- a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md +++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md @@ -20,7 +20,7 @@ It is `CTL_T(KC_ESC)` and it works this way: ## How to activate N-rollover -- Hold left `SHIFT` and right `SHIRT` and then tap `N`. +- Hold left `SHIFT` and right `SHIFT` and then tap `N`. ## How to make and flash on OS X -- cgit v1.2.3 From 98e43f995d845d44976e4c4f86addb996ab79acc Mon Sep 17 00:00:00 2001 From: tong92 Date: Thu, 8 Sep 2016 23:37:13 +0900 Subject: add tong92 keymap --- keyboards/planck/keymaps/tong92/Makefile | 62 +++++++++++++ keyboards/planck/keymaps/tong92/keymap.c | 146 ++++++++++++++++++++++++++++++ keyboards/planck/keymaps/tong92/readme.md | 66 ++++++++++++++ 3 files changed, 274 insertions(+) create mode 100644 keyboards/planck/keymaps/tong92/Makefile create mode 100644 keyboards/planck/keymaps/tong92/keymap.c create mode 100644 keyboards/planck/keymaps/tong92/readme.md diff --git a/keyboards/planck/keymaps/tong92/Makefile b/keyboards/planck/keymaps/tong92/Makefile new file mode 100644 index 0000000000..e6608e74c5 --- /dev/null +++ b/keyboards/planck/keymaps/tong92/Makefile @@ -0,0 +1,62 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# 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, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- +# Build Options +# change to "no" to disable the options, or define them in the makefile.mk in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/tong92/keymap.c b/keyboards/planck/keymaps/tong92/keymap.c new file mode 100644 index 0000000000..2be28fb4f6 --- /dev/null +++ b/keyboards/planck/keymaps/tong92/keymap.c @@ -0,0 +1,146 @@ +//Author: tong92 + +#include "planck.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define LOWER M(1) +#define RAISE M(2) +#define GO_DEFT M(99) +# + +//MIT Layout +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* 0: Qwerty layer (Default) +* ,-----------------------------------------------------------------------. +* |Tab | q | w | e | r | t | y | u | i | o | p | BS | +* |-----------------------------------------------------------------------| +* |Ctrl | a | s | d | f | g | h | j | k | l | ; |enter| +* |-----------------------------------------------------------------------| +* |Shift| z | x | c | v | b | n | m | , | . | / |Shift| +* |-----------------------------------------------------------------------| +* | Fn |Ctrl | Win | Alt |Lower| Space |Upper| ' | [ | ] | Alt | +* `-----------------------------------------------------------------------' +*/ +[0] ={ +{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_ENT }, +{KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT}, +{MO(4), KC_RCTL,KC_LGUI,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT} +}, +/* 1: Lower layer +* ,-----------------------------------------------------------------------. +* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS | +* |-----------------------------------------------------------------------| +* | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ | +* |-----------------------------------------------------------------------| +* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo| +* |-----------------------------------------------------------------------| +* | | | | | | SPACE |mouse| END | LEFT| DOWN|RIGHT| +* `-----------------------------------------------------------------------' +*/ +[1] ={ +{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS }, +{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,KC_F12,_______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN }, +{XXXXXXX,_______,_______,_______,_______,KC_SPC,KC_SPC,_______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT} +}, +/* 2: Upper layer +* ,-----------------------------------------------------------------------. +* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS | +* |-----------------------------------------------------------------------| +* | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | | +* |-----------------------------------------------------------------------| +* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo| +* |-----------------------------------------------------------------------| +* | | | | |mouse| SPACE | | END | LEFT| DOWN|RIGHT| +* `-----------------------------------------------------------------------' +*/ +[2] ={ +{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE }, +{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN }, +{XXXXXXX,_______,_______,_______,_______,KC_SPC, KC_SPC, _______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT} +}, +/* 4: fn layer (Window shortcuts) +* ,-----------------------------------------------------------------------. +* | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DEL | +* |-----------------------------------------------------------------------| +* | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | | +* |-----------------------------------------------------------------------| +* | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | | +* |-----------------------------------------------------------------------| +* | |DeskL|DeskR|DeskX|Task | ChangeLang| | | | | LED | +* `-----------------------------------------------------------------------' +*/ +[4] ={ +{KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX ,S(KC_CAPS) ,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT}, +{_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT) ,XXXXXXX ,LALT(KC_CAPS),KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX}, +{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX ,LCTL(KC_CAPS),KC_SLCK,KC_HOME,XXXXXXX,KC_END,XXXXXXX,XXXXXXX}, +{KC_TRNS,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LGUI(LCTL(KC_F4)),LCTL(LALT(KC_DELT)),LGUI(KC_SPC),LGUI(KC_SPC),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,M(0)} +}, +/* 10: mouse layer +* ,-----------------------------------------------------------------------. +* | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| |RESET| +* |-----------------------------------------------------------------------| +* | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | | +* |-----------------------------------------------------------------------| +* | | | | | | | |M_AC0|M_AC1|M_AC2| | | +* |-----------------------------------------------------------------------| +* | | | | | | GO_DEFT | | | | | | +* `-----------------------------------------------------------------------' +*/ +[10] ={ +{XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET}, +{XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX}, +{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX}, +{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX} +} + +}; +//Layout END + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + if (record->event.pressed) { + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } + break; + case 1: + if (record->event.pressed) { + layer_on(1); + update_tri_layer(1, 2, 10); + } else { + layer_off(1); + update_tri_layer(1, 2, 10); + } + break; + case 2: + if (record->event.pressed) { + layer_on(2); + update_tri_layer(1, 2, 10); + } else { + layer_off(2); + update_tri_layer(1, 2, 10); + } + break; + case 99: + if (record->event.pressed) { + layer_off(10); + layer_off(1); + layer_off(2); + layer_on(0); + update_tri_layer(0 ,1 ,2); + } + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboards/planck/keymaps/tong92/readme.md b/keyboards/planck/keymaps/tong92/readme.md new file mode 100644 index 0000000000..328d005f6f --- /dev/null +++ b/keyboards/planck/keymaps/tong92/readme.md @@ -0,0 +1,66 @@ +# The Tong92 Layout +- MIT Layout +- my keymap for WIndow User +- Lower && Upper Hold -> Mouse Layer +- Mouse Layer : space -> Default Layer +- No Audio + +## 1. Default Layer - Qwerty + + ,-----------------------------------------------------------------------. + |Tab | q | w | e | r | t | y | u | i | o | p | BS | + |-----------------------------------------------------------------------| + |Ctrl | a | s | d | f | g | h | j | k | l | ; |enter| + |-----------------------------------------------------------------------| + |Shift| z | x | c | v | b | n | m | , | . | / |Shift| + |-----------------------------------------------------------------------| + | Fn |Ctrl | Win | Alt |Lower| Space |Upper| ' | [ | ] | Alt | + `-----------------------------------------------------------------------' + +## 2. Lower Layer + + ,-----------------------------------------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS | + |-----------------------------------------------------------------------| + | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ | + |-----------------------------------------------------------------------| + | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo| + |-----------------------------------------------------------------------| + | | | | | | SPACE |mouse| END | LEFT| DOWN|RIGHT| + `-----------------------------------------------------------------------' + +## 3. Upper Layer + + ,-----------------------------------------------------------------------. + | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS | + |-----------------------------------------------------------------------| + | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | | + |-----------------------------------------------------------------------| + | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo| + |-----------------------------------------------------------------------| + | | | | |mouse| SPACE | | END | LEFT| DOWN|RIGHT| + `-----------------------------------------------------------------------' + +## 4. Fn Layer - Window Shortcuts + + ,-----------------------------------------------------------------------. + | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DEL | + |-----------------------------------------------------------------------| + | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | | + |-----------------------------------------------------------------------| + | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | | + |-----------------------------------------------------------------------| + | |DeskL|DeskR|DeskX|Task | ChangeLang| | | | | LED | + `-----------------------------------------------------------------------' + +## 5. Mouse Layer + + ,-----------------------------------------------------------------------. + | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| |RESET| + |-----------------------------------------------------------------------| + | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | | + |-----------------------------------------------------------------------| + | | | | | | | |M_AC0|M_AC1|M_AC2| | | + |-----------------------------------------------------------------------| + | | | | | |GO_DEFAULT | | | | | | + `-----------------------------------------------------------------------' \ No newline at end of file -- cgit v1.2.3 From 08c177f00bbcae251fd9b1a46d203543c48fbaa6 Mon Sep 17 00:00:00 2001 From: Peter Ondrejka Date: Thu, 8 Sep 2016 19:22:26 +0200 Subject: fixed typo in Linux install instructions --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 7ee3b28d43..20be105dd7 100644 --- a/readme.md +++ b/readme.md @@ -97,7 +97,7 @@ If you are going to flash Infinity based keyboards you will also need dfu-util ### Linux -To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed. +To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. You can also install things manually, but this documentation might not be always up to date with all requirements. -- cgit v1.2.3 From 01163b268af3b3cf2d9a1e7300db82da187e2072 Mon Sep 17 00:00:00 2001 From: Peter Ondrejka Date: Thu, 8 Sep 2016 19:39:27 +0200 Subject: util/install_dependencies.sh made executable, fixes #738 --- util/install_dependencies.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 util/install_dependencies.sh diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From b83f76e1b070236344837cc6838852daa08e6436 Mon Sep 17 00:00:00 2001 From: profet23 Date: Thu, 8 Sep 2016 23:34:55 -0400 Subject: Changing keymap name to "profet_80" --- .../ergodox/ez/keymaps/default_80/ergodox80.png | Bin 20663 -> 0 bytes keyboards/ergodox/ez/keymaps/default_80/keymap.c | 183 --------------------- keyboards/ergodox/ez/keymaps/default_80/readme.md | 10 -- .../ergodox/ez/keymaps/profet_80/ergodox80.png | Bin 0 -> 20663 bytes keyboards/ergodox/ez/keymaps/profet_80/keymap.c | 183 +++++++++++++++++++++ keyboards/ergodox/ez/keymaps/profet_80/readme.md | 10 ++ 6 files changed, 193 insertions(+), 193 deletions(-) delete mode 100644 keyboards/ergodox/ez/keymaps/default_80/ergodox80.png delete mode 100644 keyboards/ergodox/ez/keymaps/default_80/keymap.c delete mode 100644 keyboards/ergodox/ez/keymaps/default_80/readme.md create mode 100644 keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png create mode 100644 keyboards/ergodox/ez/keymaps/profet_80/keymap.c create mode 100644 keyboards/ergodox/ez/keymaps/profet_80/readme.md diff --git a/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png deleted file mode 100644 index 66b9752ebc..0000000000 Binary files a/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png and /dev/null differ diff --git a/keyboards/ergodox/ez/keymaps/default_80/keymap.c b/keyboards/ergodox/ez/keymaps/default_80/keymap.c deleted file mode 100644 index 505ff29722..0000000000 --- a/keyboards/ergodox/ez/keymaps/default_80/keymap.c +++ /dev/null @@ -1,183 +0,0 @@ -#include "ergodox.h" -#include "debug.h" -#include "action_layer.h" -#include "version.h" - -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys - -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|' / Cmd | - * |--------+------+------+------+------+------| 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| - * ,------|------|------| |------+--------+------. - * | 1 | 2 | Home | | PgUp | 3 | 4 | - * |------|------|------| |------|--------|------| - * | Space| BkSp | End | | PgDn | Tab |Enter | - * `--------------------' `----------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[BASE] = KEYMAP_80( // 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_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - 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_1, KC_2, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, 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_3, KC_4, - KC_PGDN,KC_TAB, KC_ENT - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | 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_80( - // left hand - M(0), 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,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, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+----------. - * | | | | | | | | - * |------|------|------| |------|------|----------| - * | | | | | | |BrwserBack| - * `--------------------' `------------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP_80( - 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, 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_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) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - 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/keyboards/ergodox/ez/keymaps/default_80/readme.md b/keyboards/ergodox/ez/keymaps/default_80/readme.md deleted file mode 100644 index b6bbb86d2c..0000000000 --- a/keyboards/ergodox/ez/keymaps/default_80/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox 80 Default Configuration - -This is based on the default Ergodox EZ keymap. -The difference is that this keymap supports 80 key layouts. -If you own an 80 key Ergodox, use this as an example to get your desired keymap. - -**NOTE:** This layout is not physically supported by the Ergodox EZ. - - -![Default80](ergodox80.png) diff --git a/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png new file mode 100644 index 0000000000..66b9752ebc Binary files /dev/null and b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png differ diff --git a/keyboards/ergodox/ez/keymaps/profet_80/keymap.c b/keyboards/ergodox/ez/keymaps/profet_80/keymap.c new file mode 100644 index 0000000000..505ff29722 --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/profet_80/keymap.c @@ -0,0 +1,183 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +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|' / Cmd | + * |--------+------+------+------+------+------| 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| + * ,------|------|------| |------+--------+------. + * | 1 | 2 | Home | | PgUp | 3 | 4 | + * |------|------|------| |------|--------|------| + * | Space| BkSp | End | | PgDn | Tab |Enter | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP_80( // 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_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_1, KC_2, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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_3, KC_4, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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_80( + // left hand + M(0), 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,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, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+----------. + * | | | | | | | | + * |------|------|------| |------|------|----------| + * | | | | | | |BrwserBack| + * `--------------------' `------------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP_80( + 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, 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_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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox/ez/keymaps/profet_80/readme.md b/keyboards/ergodox/ez/keymaps/profet_80/readme.md new file mode 100644 index 0000000000..b6bbb86d2c --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/profet_80/readme.md @@ -0,0 +1,10 @@ +# ErgoDox 80 Default Configuration + +This is based on the default Ergodox EZ keymap. +The difference is that this keymap supports 80 key layouts. +If you own an 80 key Ergodox, use this as an example to get your desired keymap. + +**NOTE:** This layout is not physically supported by the Ergodox EZ. + + +![Default80](ergodox80.png) -- cgit v1.2.3 From 9c2015ea7f23a69c1c585b1b366df5cbfd3e93c7 Mon Sep 17 00:00:00 2001 From: Lars Date: Thu, 8 Sep 2016 23:20:17 -0500 Subject: first commit of Absenth's Ergodox Firmware --- .../ergodox/keymaps/absenth/absenth_highres.png | Bin 0 -> 1463041 bytes keyboards/ergodox/keymaps/absenth/keymap.c | 183 +++++++++++++++++++++ keyboards/ergodox/keymaps/absenth/readme.md | 8 + 3 files changed, 191 insertions(+) create mode 100644 keyboards/ergodox/keymaps/absenth/absenth_highres.png create mode 100644 keyboards/ergodox/keymaps/absenth/keymap.c create mode 100644 keyboards/ergodox/keymaps/absenth/readme.md diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png new file mode 100644 index 0000000000..c07aa8803f Binary files /dev/null and b/keyboards/ergodox/keymaps/absenth/absenth_highres.png differ diff --git a/keyboards/ergodox/keymaps/absenth/keymap.c b/keyboards/ergodox/keymaps/absenth/keymap.c new file mode 100644 index 0000000000..30f7474191 --- /dev/null +++ b/keyboards/ergodox/keymaps/absenth/keymap.c @@ -0,0 +1,183 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +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|' / Cmd | + * |--------+------+------+------+------+------| 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G, + 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | 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 + M(0), 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_BTN1, KC_BTN2, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT,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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox/keymaps/absenth/readme.md b/keyboards/ergodox/keymaps/absenth/readme.md new file mode 100644 index 0000000000..35d0aad461 --- /dev/null +++ b/keyboards/ergodox/keymaps/absenth/readme.md @@ -0,0 +1,8 @@ +# ErgoDox EZ Absenth Configuration + +## Changelog + +* Sept. 8, 2016 (V0.1): + * Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer. + +![Absenth](absenth_highres.png) -- cgit v1.2.3 From 52121cee7a9b26a6450db33ec34c8e4c8895aafc Mon Sep 17 00:00:00 2001 From: Lars Date: Thu, 8 Sep 2016 23:32:11 -0500 Subject: Updated Image Header --- .../ergodox/keymaps/absenth/absenth_highres.png | Bin 1463041 -> 1429453 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png index c07aa8803f..a0596b2812 100644 Binary files a/keyboards/ergodox/keymaps/absenth/absenth_highres.png and b/keyboards/ergodox/keymaps/absenth/absenth_highres.png differ -- cgit v1.2.3 From 67dfde765f5bc192aad8a7a7586b10a661ae52d1 Mon Sep 17 00:00:00 2001 From: Didier Chagniot Date: Fri, 9 Sep 2016 21:42:35 +0200 Subject: typing with it --- keyboards/ergodox/keymaps/dvorak_emacs/keymap.c | 165 ++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100755 keyboards/ergodox/keymaps/dvorak_emacs/keymap.c diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c new file mode 100755 index 0000000000..4cb11a56f4 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c @@ -0,0 +1,165 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +/****************************************************************************************** + * DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/) + * Layer 1: auxiliary keys + * Layer 2: full qwerty layout + *****************************************************************************************/ + +// LAYERS +#define BASE 0 // dvorak layout (default) +#define AUX 1 // auxiliary keys + +// MACROS +/* #define OBRACE 0 // key { or shift */ +/* #define CBRACE 1 // key } or shift */ +/* #define OBRACK 2 // key [ or left alt */ +/* #define CBRACK 3 // key ] or left alt */ +/* #define CAPS 4 // caps lock */ + +// LEDS +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + +// TIMERS +#define KEY_TAP_FAST 85 +#define KEY_TAP_SLOW 95 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base layer + * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? | + * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------| + * | Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - / _ | + * |--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------| + * | {/LSft |; / : | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | ~L1 | | ~L1 | | | \ / || | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | HOME | END | | LEFT | RIGHT| + * ,------|------|------| |------+--------+------. + * | BSPC | DEL | PGUP | | UP | SPACE |RETURN| + * | / | / |------| |------| / | / | + * | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL | + * `--------------------' `----------------------' + * + */ +[BASE] = KEYMAP( + // left hand + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TILD, KC_QUOTE, KC_COMM,KC_DOT, KC_P, KC_Y, KC_LBRACKET, + KC_TAB, KC_A, KC_O, KC_E, SFT_T(KC_U), LT(AUX, KC_I), + SFT_T(KC_LBRC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LGUI, + KC_NO, KC_NO, KC_NO, KC_NO, MO(AUX), + KC_HOME, KC_END, + KC_PGUP, + CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH, + LT(AUX, KC_D), SFT_T(KC_H), KC_T, KC_N, KC_S, KC_MINUS, + KC_LGUI, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_RBRC), + MO(AUX), KC_NO, KC_NO, KC_BSLASH, KC_NO, + KC_LEFT, KC_RIGHT, + KC_UP, + KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC) + ), +/* Keymap 1: Aux layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | VolUp | | | | | | SLEEP | PWR | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------| + * | TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | TRANS| TRANS| | TRANS| TRANS| + * ,------|------|------| |------+------+------. + * | | | TRANS| | TRANS| | | + * |TRANS |TRANS |------| |------| TRANS| TRANS| + * | | | TRANS| | TRANS| | | + * `--------------------' `--------------------' + */ +[AUX] = KEYMAP( + // left hand + KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLEP, + KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_NO, + KC_NO , KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, + KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, + LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), KC_TRNS, + KC_TRNS , KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_NO, + KC_TRNS, KC_4, KC_5, KC_6, KC_PPLS, KC_NO, + KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_PEQL, KC_NO, + KC_TRNS , KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux) +}; + + +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) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } +} -- cgit v1.2.3 From 83b6dd0cd6f055d99d3a11690ccc81b908a0aa4c Mon Sep 17 00:00:00 2001 From: Didier Chagniot Date: Sat, 10 Sep 2016 00:20:21 +0200 Subject: readme.md updated --- keyboards/ergodox/keymaps/dvorak_emacs/readme.md | 70 ++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak_emacs/readme.md diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/readme.md b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md new file mode 100644 index 0000000000..0578f1e257 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md @@ -0,0 +1,70 @@ +# Ergodox Dvorak Layout with emacs binding in mind + * Control & Alt key on the thumbs (activated if pressed with another key). + * In the same way, "I" and "R" are the shift modifier if pressed with another key. + * "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key. + * Software layout set to english. + +## Keymap Layers + - L0: dvorak with some customizations (see layout below) + - L1: auxiliary keys (includes function keys, numpad...) + + +### Keymap 0: Base layer +Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+ |        |   1  |   2  |   3  |   4  |   5  |  Esc |           |  Esc |   6  |   7  |   8  |   9  |   0  |   =    |
+ |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ |   ~    |  '   |   ,  |   .  |   P  |   Y  |   [  |           |   ]  |   F  |   G  |   C  |   H  |   L  |   /    |
+ |--------+------+------+------+------+------|   {  |           |   }  |------+------+------+------+------+--------|
+ |  Tab   |   A  |   O  |   E  |U/LSft| I/L1 |------|           |------|  D/L1|R/RSft|   T  |   N  |   S  |   -    |
+ |--------+------+------+------+------+------| LGUI |           | LGUI |------+------+------+------+------+--------|
+ | {/LSft |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+ `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+   |      |      |      |      | ~L1  |                                       | ~L1  |      |      |   \  |        |
+   `----------------------------------'                                       `----------------------------------'
+                                        ,-------------.       ,-------------.
+                                        | HOME |  END |       | LEFT | RIGHT|
+                                 ,------|------|------|       |------+--------+------.
+                                 | BSPC |  DEL | PGUP |       |  UP  | SPACE  |RETURN|
+                                 |  /   |  /   |------|       |------|   /    |  /   |
+                                 | LCTL | LALT |PGDWN |       | DOWN | LALT   | LCTL |
+                                 `--------------------'       `----------------------'
+
+
+ +### Keymap 1: Aux layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|  VolUp |      |      |      |      |      | SLEEP            | PWR  |      |      |      |      |      |        |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  VolDn |  F1  |  F2  |  F3  |  F4  |      |      |           |      |      |   7  |   8  |   9  |   *  |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |  F5  |  F6  |  F7  |  F8  | TRANS|------|           |------|TRANS |   4  |   5  |   6  |   +  |        |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|  TRANS |  F9  |  F10 |  F11 |  F12 |      |      |           |      |      |   1  |   2  |   3  |   /  |  TRANS |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS|                                       | TRANS|    . |   0  |   =  |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       | TRANS| TRANS|       | TRANS| TRANS|
+                                ,------|------|------|       |------+------+------.
+                                |      |      | TRANS|       | TRANS|      |      |
+                                |TRANS |TRANS |------|       |------| TRANS| TRANS|
+                                |      |      | TRANS|       | TRANS|      |      |
+                                `--------------------'       `--------------------'
+
+
+ + + +## Generation of .hex file +> In the "qmk_firmware/keyboards/ergodox" directory. + +> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware". + +> Flash with `teensy_loader` binary -- cgit v1.2.3 From e25ae23287a687468f4b32ffec9613fd4326610f Mon Sep 17 00:00:00 2001 From: shela Date: Sat, 10 Sep 2016 23:47:33 +0900 Subject: fix number of NKRO keys 32byte report = 1byte modifiers + 31byte keys 31byte * 8bit * 1key/bit = 248keys --- tmk_core/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/readme.md b/tmk_core/readme.md index 3242328516..5f135617c4 100644 --- a/tmk_core/readme.md +++ b/tmk_core/readme.md @@ -23,7 +23,7 @@ These features can be used in your keyboard. * Mouse key - Mouse control with keyboard * System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up * Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc -* USB NKRO - 240 keys(+ 8 modifiers) simultaneously +* USB NKRO - 248 keys(+ 8 modifiers) simultaneously * PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device * Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols * User Function - Customizable function of key with writing code -- cgit v1.2.3 From a9e56186e00c000892e2d1a6567627466e611f16 Mon Sep 17 00:00:00 2001 From: Daniel Bordak Date: Sat, 10 Sep 2016 12:16:38 -0400 Subject: Fix typo --- keyboards/atreus/rules.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk index d71f50bb2b..3a00993bd5 100644 --- a/keyboards/atreus/rules.mk +++ b/keyboards/atreus/rules.mk @@ -2,11 +2,11 @@ ifdef TEENSY2 OPT_DEFS += -DATREUS_TEENSY2 - ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex + ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex else OPT_DEFS += -DATREUS_ASTAR OPT_DEFS += -DCATERINA_BOOTLOADER - ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) endif @@ -79,4 +79,4 @@ UNICODE_ENABLE ?= YES # Unicode USB ?= /dev/cu.usbmodem1411 upload: build - $(ATRUES_UPLOAD_COMMAND) \ No newline at end of file + $(ATREUS_UPLOAD_COMMAND) -- cgit v1.2.3 From 70b4fc808db716ab2b6c659a1e43702c435bfbef Mon Sep 17 00:00:00 2001 From: shela Date: Sun, 11 Sep 2016 02:29:32 +0900 Subject: fix variable value of rules.mk --- keyboards/hhkb/rules.mk | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk index b43b5e23f1..e6fc7260ee 100644 --- a/keyboards/hhkb/rules.mk +++ b/keyboards/hhkb/rules.mk @@ -58,19 +58,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # Build Options # comment out to disable the options. # -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB # 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID +# MIDI_ENABLE ?= yes # MIDI controls +# UNICODE_ENABLE ?= yes # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID ifneq (, $(findstring yes, $(HHKB_JP))) OPT_DEFS += -DHHKB_JP -- cgit v1.2.3 From 054108d1d1702a8a51913f67f14733bbf1eebd1a Mon Sep 17 00:00:00 2001 From: Daniel Bordak Date: Sat, 10 Sep 2016 13:25:13 -0400 Subject: Update to new default keymap --- keyboards/atreus/keymaps/classic/keymap.c | 48 +++++++++++++++++++++++++++++++ keyboards/atreus/keymaps/default/keymap.c | 22 ++++++++++---- 2 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 keyboards/atreus/keymaps/classic/keymap.c diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c new file mode 100644 index 0000000000..6ca0b2077d --- /dev/null +++ b/keyboards/atreus/keymaps/classic/keymap.c @@ -0,0 +1,48 @@ +#include "atreus.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 _RS 1 +#define _LW 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN }, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH }, + {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT } +}, +[_RS] = { /* [> RAISE <] */ + {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR}, + {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS}, + {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS}, + {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL} +}, +[_LW] = { /* [> LOWER <] */ + {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10}, + {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12}, + {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET} +}}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c index 1c4280ff56..04ad66fed8 100644 --- a/keyboards/atreus/keymaps/default/keymap.c +++ b/keyboards/atreus/keymaps/default/keymap.c @@ -18,17 +18,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH }, {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT } }, +/* + * ! @ up { } || pgup 7 8 9 * + * # left down right $ || pgdn 4 5 6 + + * [ ] ( ) & || ` 1 2 3 \ + * lower insert super shift bksp ctrl || alt space fn . 0 = + */ [_RS] = { /* [> RAISE <] */ - {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR}, - {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS}, - {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS}, + {KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR}, + {KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS}, + {KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_LALT, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS}, {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL} }, +/* + * insert home up end pgup || up F7 F8 F9 F10 + * del left down right pgdn || down F4 F5 F6 F11 + * volup reset || F1 F2 F3 F12 + * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause + */ [_LW] = { /* [> LOWER <] */ {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10}, {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12}, - {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET} + {KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12}, + {KC_TRNS, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_PSCR, KC_SLCK, KC_PAUS} }}; const uint16_t PROGMEM fn_actions[] = { -- cgit v1.2.3 From 475d0b23f6139b14d6eac12c9a584e6b1fb7c569 Mon Sep 17 00:00:00 2001 From: Daniel Bordak Date: Sat, 10 Sep 2016 12:19:16 -0400 Subject: Add PCBDOWN --- keyboards/atreus/config.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h index 624d90188c..51162cde3a 100644 --- a/keyboards/atreus/config.h +++ b/keyboards/atreus/config.h @@ -37,7 +37,11 @@ along with this program. If not, see . // COLS: Left to right, ROWS: Top to bottom #if defined(ATREUS_ASTAR) # define MATRIX_ROW_PINS { D0, D1, D3, D2 } +#if defined(PCBDOWN) +# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 } +#else # define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +#endif # define UNUSED_PINS #elif defined(ATREUS_TEENSY2) # define MATRIX_ROW_PINS { D0, D1, D2, D3 } -- cgit v1.2.3 From 2a8536f00fb7e3a547fb5b626279e2e391e556d5 Mon Sep 17 00:00:00 2001 From: shela Date: Sun, 11 Sep 2016 02:46:06 +0900 Subject: Variables in Makefile are ignored in rules.mk --- keyboards/hhkb/keymaps/jp/Makefile | 2 +- keyboards/hhkb/keymaps/rdg_jp/Makefile | 2 +- keyboards/hhkb/rules.mk | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/keyboards/hhkb/keymaps/jp/Makefile b/keyboards/hhkb/keymaps/jp/Makefile index 92986292a2..a7f700f019 100644 --- a/keyboards/hhkb/keymaps/jp/Makefile +++ b/keyboards/hhkb/keymaps/jp/Makefile @@ -1 +1 @@ -HHKB_JP=yes +OPT_DEFS += -DHHKB_JP diff --git a/keyboards/hhkb/keymaps/rdg_jp/Makefile b/keyboards/hhkb/keymaps/rdg_jp/Makefile index 92986292a2..a7f700f019 100644 --- a/keyboards/hhkb/keymaps/rdg_jp/Makefile +++ b/keyboards/hhkb/keymaps/rdg_jp/Makefile @@ -1 +1 @@ -HHKB_JP=yes +OPT_DEFS += -DHHKB_JP diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk index e6fc7260ee..a46271f023 100644 --- a/keyboards/hhkb/rules.mk +++ b/keyboards/hhkb/rules.mk @@ -72,10 +72,6 @@ CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB # UNICODE_ENABLE ?= yes # Unicode # BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID -ifneq (, $(findstring yes, $(HHKB_JP))) - OPT_DEFS += -DHHKB_JP -endif - debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION debug-on: all -- cgit v1.2.3 From 11bcdbc1f5749be19bcfee092fa36ddcff2d4442 Mon Sep 17 00:00:00 2001 From: "Daniel K. Levy" Date: Sat, 10 Sep 2016 16:37:08 -0500 Subject: Use rules.mk template in new project generator --- util/new_project.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/util/new_project.sh b/util/new_project.sh index b3535f449e..18d16e560c 100755 --- a/util/new_project.sh +++ b/util/new_project.sh @@ -20,6 +20,7 @@ sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/template.c > keyboards/$KEYBO sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboards/$KEYBOARD/config.h sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/readme.md > keyboards/$KEYBOARD/readme.md sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboards/$KEYBOARD/Makefile +sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/rules.mk > keyboards/$KEYBOARD/rules.mk sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/config.h > keyboards/$KEYBOARD/keymaps/default/config.h sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/keymap.c > keyboards/$KEYBOARD/keymaps/default/keymap.c sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/Makefile > keyboards/$KEYBOARD/keymaps/default/Makefile -- cgit v1.2.3 From 60a826923d5a6b0dbe416b0837608149ab82e470 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Thu, 8 Sep 2016 00:09:35 +0200 Subject: Added KC_APP on fn+BP_AGRV --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c index 8d77619856..7097d641d9 100644 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c @@ -325,7 +325,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | + * | | App | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' @@ -342,7 +342,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TG(LR_CSA), 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, RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, - KC_TRNS, KC_TRNS, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, -- cgit v1.2.3 From 1aeb59335f2fe67613df25308a630ca453975ac0 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 11 Sep 2016 02:19:55 +0200 Subject: Fixed compilation issues after the merge --- keyboard/ergodox_ez/keymaps/bepo/keymap.c | 527 --------------------- keyboards/ergodox/keymaps/bepo_csa/keymap.c | 527 +++++++++++++++++++++ .../keymap_extras/keymap_canadian_multilingual.h | 2 +- 3 files changed, 528 insertions(+), 528 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/bepo/keymap.c create mode 100644 keyboards/ergodox/keymaps/bepo_csa/keymap.c diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c deleted file mode 100644 index 7097d641d9..0000000000 --- a/keyboard/ergodox_ez/keymaps/bepo/keymap.c +++ /dev/null @@ -1,527 +0,0 @@ -/* TypeMatrix-2030-like keymap */ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" -#include "led.h" -#include "keymap_extras/keymap_bepo.h" -#include "keymap_extras/keymap_canadian_multilingual.h" - -enum layers { - LR_BASE, // default layer - LR_CSA, // BÉPO over Canadian Multilingual (CSA) - LR_CSA_SFT, // shifted BÉPO over CSA - LR_CSA_AGR, // altgr-ed BÉPO over CSA - LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA - LR_NUMR, // numeric layer - LR_FN, // fn layer -}; - -#define IS_CA_MULT_ENABLED() (layer_state & (1 << LR_CSA)) - -enum macros { - // Characters that do not exist in CSA and must be implemented based on unicode support - // Note: these are intentionally declared first to be used as indexes in spec_chars below - UC_NDSH, // – - UC_MDSH, // — - UC_ELPS, // … - END_UC, // indicates the last unicode character macro - // other macros - M_CSA_SFT, // toggle shift on CSA - M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT) - M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT) - // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT - M_1, - M_2, - M_3, - M_4, - M_5, - M_6, - M_7, - M_8, - M_9, - M_0, - M_DEGR, - M_SCLN, - M_GRV, - M_NBSP, - // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR - M_CRC, - // other layer macros - M_DBL0, // double 0 - M_FNLR, // fn layer - M_NMAL, // num+alt -}; - -#define CSA(name) M(M_CSA_##name) // calls a CSA macro - -const uint16_t unicode_chars[] = { - [UC_NDSH] = L'–', - [UC_MDSH] = L'—', - [UC_ELPS] = L'…', -}; - -/* shortcut for unicode character macros */ -#define MUC(name) M(UC_##name) // calls a unicode macro - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z | - * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | = | A | U | I | E | , |------| |------| C | T | S | R | N | M | - * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl| - * `----------------------------------' `----------------------------------' - * ,--------------. ,-------------. - * | Esc | num | | Left |Right | - * ,------+-------+------| |------+------+------. - * | | | PgUp | | Up | | | - * |Space | Home |------| |------| End |Space | - * | | | PgDn | | Down | | | - * `---------------------' `--------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[LR_BASE] = KEYMAP( // layer 0 : default - // left hand - BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, - KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, - BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM, - KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, - KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT, - - KC_ESC, TG(LR_NUMR), - KC_PGUP, - KC_SPC, KC_HOME, KC_PGDN, - - // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W, - KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, - BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, - KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT, - BP_ALGR, BP_PERC, KC_APP, BP_CCED, KC_RCTL, - - KC_LEFT, KC_RGHT, - KC_UP, - KC_DOWN, KC_END, KC_SPC - ), -/** - * Same as default but for use with Canadian Multilingual on OS side - */ -[LR_CSA] = KEYMAP( - // left hand - KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_TRNS, - KC_TRNS, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_TRNS, - KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM, - CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, 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_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W, - KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT), - MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS - ), -/* Shifted BÉPO over Canadian Multilingual - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | # | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | ! | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ° | | | | | ; |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | : | | | | | ? | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | ` | | | | - * `----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[LR_CSA_SFT] = KEYMAP( - // left hand - KC_HASH, M(M_1), M(M_2), M(M_3), M(M_4), M(M_5), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - M(M_DEGR),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_SCLN), - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COLN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - M(M_NBSP), KC_TRNS, KC_TRNS, - - // right hand - KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS, - KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - CSA(SFT_AGR), M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, M(M_NBSP) - ), -/* AltGr-ed BÉPO over Canadian Multilingual - * "////" indicates that the key is disabled (unsupported bépo character) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | – | — | < | > | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | //// | |dead ¸| | - * `----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | _ | |------| |------| | _ | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[LR_CSA_AGR] = KEYMAP( - // left hand - MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS, - KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS, - KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT, - CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_UNDS, CSA(AGR_SFT), KC_TRNS, - - // right hand - KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV, - KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO, - CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR, - KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT), - KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, CSA(AGR_SFT), KC_UNDS - ), -/* AltGr-shifted BÉPO over Canadian Multilingual - * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ¶ | //// | “ | ” | //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ¦ | ˝ | § | Œ | ` | | | | //// | //// | Ð | //// | IJ | ////// | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[LR_CSA_AGR_SFT] = KEYMAP( - // left hand - CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS, - KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS, - KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO, - CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, CSA(AGR_SFT), KC_TRNS, - - // right hand - KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO, - KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO, - KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO, - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT), - CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, CSA(AGR_SFT), KC_TRNS - ), -/* Numeric 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 -[LR_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, - 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_TRNS, 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(M_DBL0),KC_PDOT, CTL_T(KC_PENT), - - KC_NLCK, KC_CAPS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* fn layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolUp | | | | | | | | Pause | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | App | cut | copy |paste | Mute |VolDn | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | Next | | | | | - * | Mute | play |------| |------| | | - * | | | Prev | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[LR_FN] = KEYMAP( - TG(LR_CSA), 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, - RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, - KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_MPRV, - KC_MUTE, KC_MPLY, KC_MNXT, - - // 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { -}; - -void hold_shift(void) { - register_code(KC_LSHIFT); -} - -void release_shift(void) { - unregister_code(KC_LSHIFT); -} - -uint16_t hextokeycode(int hex) { - if (hex == 0x0) { - return KC_P0; - } else if (hex < 0xA) { - return KC_P1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -void send_unicode(uint16_t unicode) -{ - // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input - // Implemented for Windows: - // Pressing ALT followed by + followed by the unicode code point in hex. - // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1 - register_code(KC_LALT); - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - for (int i = 12; i >= 0; i -= 4) { - register_code(hextokeycode((unicode >> i) & 0xF)); - unregister_code(hextokeycode((unicode >> i) & 0xF)); - } - - unregister_code(KC_LALT); -} - -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 ... END_UC: - if (record->event.pressed) { - send_unicode(unicode_chars[id]); - } - break; - case M_CSA_SFT: - // BÉPO over CSA: toggle shift layer - layer_invert(LR_CSA_SFT); - if (record->event.pressed) { - hold_shift(); - } else { - release_shift(); - } - break; - case M_CSA_SFT_AGR: - // BÉPO over CSA: from shift layer, momentary altgr+shift layer - layer_invert(LR_CSA_AGR); - layer_invert(LR_CSA_AGR_SFT); - if (record->event.pressed) { - // shift not needed for LR_CSA_AGR_SFT - release_shift(); - } else { - // back to shift layer - hold_shift(); - } - break; - case M_CSA_AGR_SFT: - // BÉPO over CSA: from altgr layer, momentary altgr+shift layer - layer_invert(LR_CSA_SFT); - layer_invert(LR_CSA_AGR_SFT); - break; - case M_1 ... M_0: - case M_DEGR: - case M_SCLN: - case M_GRV: - case M_NBSP: - // macros of the shift layer that require to release shift - if (record->event.pressed) { - release_shift(); - switch (id) { - case M_1 ... M_0: - register_code(KC_1 + (id - M_1)); - break; - case M_DEGR: - return MACRO(DOWN(CSA_ALTGR), D(SCLN), END); - case M_SCLN: - return MACRO(D(SCLN), END); - case M_GRV: - return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); - case M_NBSP: - // use weak mod such that pressing another key will not be affected - add_weak_mods(MOD_BIT(CSA_ALTGR)); - return MACRO(D(SPACE), END); - } - } else { - hold_shift(); - switch (id) { - case M_1 ... M_0: - unregister_code(KC_1 + (id - M_1)); - break; - case M_DEGR: - return MACRO(UP(CSA_ALTGR), U(SCLN), END); - case M_SCLN: - return MACRO(U(SCLN), END); - case M_NBSP: - del_weak_mods(MOD_BIT(CSA_ALTGR)); - return MACRO(U(SPACE), END); - } - } - break; - case M_CRC: - if (record->event.pressed) { - return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END); - } - break; - case M_DBL0: - if (record->event.pressed) { - return MACRO( I(25), T(P0), T(P0), END ); - } - break; - case M_FNLR: - layer_invert(LR_NUMR); - layer_invert(LR_FN); - break; - case M_NMAL: - layer_invert(LR_NUMR); - if (record->event.pressed) { - register_code(KC_LALT); - } else { - unregister_code(KC_LALT); - } - 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: numeric layer - if (layer_state & (1 << LR_NUMR)) { - ergodox_right_led_1_on(); - } - // led 2: BÉPO over Canadian Multilingual - if (IS_CA_MULT_ENABLED()) { - ergodox_right_led_2_on(); - } - // led 3: caps lock - if (host_keyboard_leds() & (1< | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | //// | |dead ¸| | + * `----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | _ | |------| |------| | _ | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[LR_CSA_AGR] = KEYMAP( + // left hand + MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS, + KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS, + KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT, + CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_UNDS, CSA(AGR_SFT), KC_TRNS, + + // right hand + KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV, + KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO, + CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR, + KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT), + KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(AGR_SFT), KC_UNDS + ), +/* AltGr-shifted BÉPO over Canadian Multilingual + * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ¶ | //// | “ | ” | //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ¦ | ˝ | § | Œ | ` | | | | //// | //// | Ð | //// | IJ | ////// | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[LR_CSA_AGR_SFT] = KEYMAP( + // left hand + CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS, + KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO, + CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(AGR_SFT), KC_TRNS, + + // right hand + KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO, + KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO, + KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT), + CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, CSA(AGR_SFT), KC_TRNS + ), +/* Numeric 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 +[LR_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, + 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_TRNS, 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(M_DBL0),KC_PDOT, CTL_T(KC_PENT), + + KC_NLCK, KC_CAPS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* fn layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | |VolUp | | | | | | | | Pause | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | App | cut | copy |paste | Mute |VolDn | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | Next | | | | | + * | Mute | play |------| |------| | | + * | | | Prev | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[LR_FN] = KEYMAP( + TG(LR_CSA), 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, + RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, + KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, + KC_MPRV, + KC_MUTE, KC_MPLY, KC_MNXT, + + // 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +void hold_shift(void) { + register_code(KC_LSHIFT); +} + +void release_shift(void) { + unregister_code(KC_LSHIFT); +} + +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_P0; + } else if (hex < 0xA) { + return KC_P1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +void send_unicode(uint16_t unicode) +{ + // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input + // Implemented for Windows: + // Pressing ALT followed by + followed by the unicode code point in hex. + // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1 + register_code(KC_LALT); + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + for (int i = 12; i >= 0; i -= 4) { + register_code(hextokeycode((unicode >> i) & 0xF)); + unregister_code(hextokeycode((unicode >> i) & 0xF)); + } + + unregister_code(KC_LALT); +} + +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 ... END_UC: + if (record->event.pressed) { + send_unicode(unicode_chars[id]); + } + break; + case M_CSA_SFT: + // BÉPO over CSA: toggle shift layer + layer_invert(LR_CSA_SFT); + if (record->event.pressed) { + hold_shift(); + } else { + release_shift(); + } + break; + case M_CSA_SFT_AGR: + // BÉPO over CSA: from shift layer, momentary altgr+shift layer + layer_invert(LR_CSA_AGR); + layer_invert(LR_CSA_AGR_SFT); + if (record->event.pressed) { + // shift not needed for LR_CSA_AGR_SFT + release_shift(); + } else { + // back to shift layer + hold_shift(); + } + break; + case M_CSA_AGR_SFT: + // BÉPO over CSA: from altgr layer, momentary altgr+shift layer + layer_invert(LR_CSA_SFT); + layer_invert(LR_CSA_AGR_SFT); + break; + case M_1 ... M_0: + case M_DEGR: + case M_SCLN: + case M_GRV: + case M_NBSP: + // macros of the shift layer that require to release shift + if (record->event.pressed) { + release_shift(); + switch (id) { + case M_1 ... M_0: + register_code(KC_1 + (id - M_1)); + break; + case M_DEGR: + return MACRO(DOWN(CSA_ALTGR), D(SCLN), END); + case M_SCLN: + return MACRO(D(SCLN), END); + case M_GRV: + return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END); + case M_NBSP: + // use weak mod such that pressing another key will not be affected + add_weak_mods(MOD_BIT(CSA_ALTGR)); + return MACRO(D(SPACE), END); + } + } else { + hold_shift(); + switch (id) { + case M_1 ... M_0: + unregister_code(KC_1 + (id - M_1)); + break; + case M_DEGR: + return MACRO(UP(CSA_ALTGR), U(SCLN), END); + case M_SCLN: + return MACRO(U(SCLN), END); + case M_NBSP: + del_weak_mods(MOD_BIT(CSA_ALTGR)); + return MACRO(U(SPACE), END); + } + } + break; + case M_CRC: + if (record->event.pressed) { + return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END); + } + break; + case M_DBL0: + if (record->event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } + break; + case M_FNLR: + layer_invert(LR_NUMR); + layer_invert(LR_FN); + break; + case M_NMAL: + layer_invert(LR_NUMR); + if (record->event.pressed) { + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + } + 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: numeric layer + if (layer_state & (1 << LR_NUMR)) { + ergodox_right_led_1_on(); + } + // led 2: BÉPO over Canadian Multilingual + if (IS_CA_MULT_ENABLED()) { + ergodox_right_led_2_on(); + } + // led 3: caps lock + if (host_keyboard_leds() & (1< Date: Sun, 11 Sep 2016 22:03:34 +0200 Subject: Added readme.md for bepo_csa --- keyboards/ergodox/keymaps/bepo_csa/readme.md | 162 +++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 keyboards/ergodox/keymaps/bepo_csa/readme.md diff --git a/keyboards/ergodox/keymaps/bepo_csa/readme.md b/keyboards/ergodox/keymaps/bepo_csa/readme.md new file mode 100644 index 0000000000..d4975b2265 --- /dev/null +++ b/keyboards/ergodox/keymaps/bepo_csa/readme.md @@ -0,0 +1,162 @@ +# BÉPO Keymap with firmware-remapping for software CSA layout + +This is a keymap intended to be used with the [BÉPO layout](http://bepo.fr), a French ergonomic layout designed by following Dvorak's principles. + +The particularity of this keymap is that it supports using the [Canadian Multilingual Standard layout](https://en.wikipedia.org/wiki/QWERTY#Canadian_Multilingual_Standard) (also known as _ACNOR keyboard_ or _CSA keyboard_, see also the [French page](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) which contains more details) on the OS side, by enabling the _CSA_ layer. This is especially useful for operating systems that natively provide CSA, but not BÉPO, like Windows. The CSA layout was chosen because it is probably the standard layout that provides the best character set coverage. + +This keymap is based on the [tm2030](../tm2030/) keymap, whose goal was to have a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ. + +As this keyboard is intended for French people, the rest of this page will be in French. + +# Keymap BÉPO avec support en firmware pour utilisation avec la disposition CSA en software + +Cette keymap a été conçue pour être utilisée avec la [disposition BÉPO](http://bepo.fr), la disposition francophone, ergonomique et libre basée sure les principes de Dvorak. + +La particularité de cette keymap est qu'elle supporte l'utilisation du [clavier canadien multilingue standard](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) (aussi appelé _clavier ACNOR_ ou _clavier CSA_) du côté du système d'exploitation, en activant la couche _CSA_. Ceci s'avère particulièrement utile pour les systèmes d'exploitations qui fournissent nativement le CSA, mais pas le BÉPO, comme Windows. Le clavier CSA a été choisi comme base car c'est probablement la disposition standard qui fournit la meilleure couverture en termes de caractères disponibles. + +Cette keymap est basée sur la keymap [tm2030](../tm2030/), dont le but est de fournir une disposition inspirée du [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) pour l'ErgoDox EZ. + +## Couche de base +C'est la couche par défaut, proche du TypeMatrix, avec les différences suivantes: +- La ligne du haut (les touches `F`) et la colonne de droite sont retirées, les touches correspondantes étant déplacées ailleurs. +- Les touches situés en bas à gauche sont redisposées dans cet ordre: `Ctrl`, `fn`, `Gui`, `num+Alt`, `Alt` +- Les touches `shuffle` (`Alt+Tab`) et `desktop` ne sont pas supportés +- `W` est déplacé à la place de `=` +- `=` est déplacé sous `Tab` (au lieu d'avoir un grand `Shift`) +- `%` et `Ç` sont déplacés à la place de `Home` et `End` respectivement +- Les flèches ainsi que `PgUp`/`PgDown`/`Home`/`End` sont déplacées sur les pouces + +À noter que pour `W` et `Ç`, le but a été de ne pas les déplacer trop par rapport à la disposition BÉPO _standard_, afin de pouvoir repasser facilement sur un TypeMatrix ou un clavier traditionnel. + + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z | +|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| +| = | A | U | I | E | , |------| |------| C | T | S | R | N | M | +|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| +| LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl| + `----------------------------------' `----------------------------------' + ,--------------. ,-------------. + | Esc | num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space | Home |------| |------| End |Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' +``` + +### Changer de couche + +- Utilisez `num` pour activer/désactiver [la couche numérique](#couche-numérique) +- Maintenez `fn` pour activer temporairement [les couches numériques et Fn](#couche-fn) +- Maintenez `numAlt` pour activer temporairement la couche numérique combinée avec `Alt` (facilite l'utilisation des raccourcis tels que `Alt`+`F4`) + +### Diodes +Les diodes de l'ErgoDox EZ (côté droit) sont utilisées de la façon suivante : + +- diode de gauche (rouge) : indique l'activation de [la couche numérique](#couche-numérique) +- diode du milieu (verte) : indique l'activation du [mode CSA](#couche-csa) +- diode de droite (bleue) : indique le verrouillage majuscules + +## Couche CSA +La couche _CSA_ est la même que la couche de base, pour une utilisation avec un clavier Canadien Multilingue configuré dans le système d'exploitation. + +Pour l'activer, appuyez sur `fn`+`$`. La [diode](#diodes) verte indique que la couche CSA est activée. + +### Limitations +Seuls les caractères présents dans le clavier CSA sont parfaitement supportés. De manière générale, il s'agit des caractères suivants : + +- toute la couche de base +- tous les caractères accessibles en `Shift` +- tous les caractères de la main gauche accessibles en `AltGr` à l'exception du `≠` +- environ la moitié des caractères de la main droite accessibles en `AltGr` et la moitié des caractères accessibles en `AltGr`+`Shift` (consultez [le fichier source](keymap.c) pour voir les caractères supportés) + +En particulier, les caractères suivants sont émulés via le support Unicode (Windows seulement): + +- le tiret cadratin (tiret long) : — +- le tiret demi-cadratin (demi tiret) : – +- les points de suspension : … + +L'implémentation actuelle ne fonctionne pas dans toutes les applications, en particulier les applications MS Office. + +Il est probable que l'utilisation de la couche CSA ne fonctionne pas correctement dans certains jeux vidéos. + +Cette fonctionnalité a été conçue et testée essentiellment pour Windows (7). + +### Détails techniques +Techniquement, la couche CSA est en réalité composée de 4 couches servant à émuler la couche de base, les appuis sur `Shift` ou `Alt` et la combinaison des deux. + +Le changement de couches se fait par des macros afin d'activer ou désactiver plusieurs couches et la touche `Shift` en même temps. + +Certains caractères sont également implémentés par des macros, notamment ceux de la couche `Shift` qui n'ont pas besoin de cette touche en CSA, comme les chiffres. + +Les caractères Unicode se basent sur une implémentation spécifique et non celle fournie dans QMK — il faudrait sans doute migrer le code. Notez la façon dont ces caractères sont déclarés tels quels dans [le code source](keymap.c) (tableau `unicode_char`). + +## Couche numérique +Couche numérique proche du TM lorsqu'on active `num`, avec les différences suivantes : + +- Le clavier numérique est déplacés de 1 vers le haut et vers la droite. +- Les flèches sont décalées de 1 vers la gauche. +- Fournit l'accès aux touches `F1` à `F12`, `caps-lock` et `num-lock`. + +La couche numérique est indiquée par la [diode](#diodes) de gauche (rouge). Caps-lock est indiqué par la diode de droite (bleue). + +La touche `numAlt` de [la couche de base](#couche-de-base) permet d'activer la couche numérique et la touche `Alt` simultanément, afin de faciliter les raccourcis claviers comme `Alt`+`F4`. + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| | 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| + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` + +## Couche Fn +Activée simultanément avec la couche numérique lorsque l'on maintient la touche `fn`. Comme sur le TM, elle fournit l'accès aux fonctionnalités suivantes : + +- `couper`, `copier` et `coller` — attention: ne pas utiliser dans l'explorateur de fichiers. +- monter/baisser/couper le volume — seulement accessible en main gauche, contrairement au TM. +- piste précédente/suivante +- calculatrice, e-mail et page d'accueil du navigateur web +- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` et `pause` +- ~CSA: (dés)activation de [la couche CSA](#couche-csa) sur `$` +- RESET: rechargement du firmware avec Teensy-Loader (pour les développeurs) + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ~CSA | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| | | | | | |VolUp | | | | | | | | Pause | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| RESET | | | Calc | Mail |Browsr|------| |------| | | | | | | +|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | App | cut | copy |paste | Mute |VolDn | | | | | | | | | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | Next | | | | | + | Mute | play |------| |------| | | + | | | Prev | | | | | + `--------------------' `--------------------' +``` \ No newline at end of file -- cgit v1.2.3 From 6a7ef59629dcb6cb388649002242abdab344424b Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Mon, 12 Sep 2016 13:24:22 -0400 Subject: Ongoing experiment; have a special layer for RESET --- keyboards/planck/keymaps/cbbrowne/keymap.c | 44 +++++++++++++++++++++++++++-- keyboards/planck/keymaps/cbbrowne/readme.md | 23 +++++++++++++-- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 898f6f0e0a..1bfd142e90 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -69,6 +69,7 @@ enum layers { _LW, /* Lower layer, where top line has symbols !@#$%^&*() */ _RS, /* Raised layer, where top line has digits 1234567890 */ _KP, /* Key pad */ + _ADJUST, /* Special Adjust layer coming via tri-placement */ }; enum macro_id { @@ -76,9 +77,14 @@ enum macro_id { M_USERNAME, M_RANDDIGIT, M_RANDLETTER, - M_VERSION + M_VERSION, + MACRO_UPPER, + MACRO_LOWER, }; +#define M_LOWER M(MACRO_LOWER) +#define M_UPPER M(MACRO_UPPER) + /* Note that Planck has dimensions 4 rows x 12 columns */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -86,7 +92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, 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_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RS] = { /* RAISE */ @@ -106,7 +112,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} -} +}, + +[_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ + { M(M_LED), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } +} }; /* What is fn_actions actually used for??? */ @@ -171,6 +184,31 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code (KC_A + rval); } break; + case MACRO_UPPER: + if (record->event.pressed) + { + layer_on(_RS); + update_tri_layer(_LW, _RS, _ADJUST); + } + else + { + layer_off(_RS); + update_tri_layer(_LW, _RS, _ADJUST); + } + break; + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(_LW); + update_tri_layer(_LW, _RS, _ADJUST); + } + else + { + layer_off(_LW); + update_tri_layer(_LW, _RS, _ADJUST); + } + break; + } return MACRO_NONE; }; diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 51979f6300..e9e423ed91 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -24,7 +24,8 @@ doing sundry experimentation: - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random - Key [1][3] aka "e" spits out the keymap version number - * Minor use of Space Cadet Shift; my SHIFT key has switched to KC_LSP0, so that when I just hit SHIFT, I get a left parens: ( which is great for Lisping. I don't have a Right Shift, so I don't get an autoclose; I think I'll live with that until a Planck successor with more lines of keys :-) + * Trying out sgoodwin's "hold Enter down to get Shift" + 2. Some code structure ideas --------------------------------------------------- @@ -57,12 +58,29 @@ doing sundry experimentation: and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. * I needed to swap ' and ENTER + +4. Unuseful experiments +--------------------------------------------------------- + +I have tried some things out that didn't turn out particularly well. +I'll note some of these for posterity, hopefully helpful in not doing +unwise things again... + * I tried added Workman alongside Dvorak and Colemak - Boy, oh boy, these don't help!!! - I have done 30 years of learning of Emacs key mappings, and these alternative keyboards massively mess me up -4. TODO + * Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I + just hit SHIFT, I get a left parens. In principle, this is great + for Lisping. + - Unfortunately, there are times when mouse interfaces use SHIFT + to allow selecting multiple items, and this really interferes + with that + + + +5. TODO --------------------------------------------------------- * I use tmux quite a lot; the mollat keymap seems to have some @@ -77,4 +95,3 @@ doing sundry experimentation: * The jeebak keymap seems to have some neat ideas: - Number layer which is aggressive about having numbers in several places - Touch layer seems interesting - * Trying out sgoodwin's "hold Enter down to get Shift" \ No newline at end of file -- cgit v1.2.3 From af4c25c4753b2d212dd46090f8fc6e322b1d7537 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 15:20:51 -0500 Subject: My Atreus Layout --- keyboards/atreus/keymaps/erlandsona/keymap.c | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 keyboards/atreus/keymaps/erlandsona/keymap.c diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c new file mode 100644 index 0000000000..f1555fb1df --- /dev/null +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -0,0 +1,61 @@ +// this is the style you want to emulate. +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, + +#include "atreus.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 BASE 0 +#define NUMS 1 +#define MOUS 2 + +// Some quick aliases, just to make it look pretty +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = KEYMAP( /* Qwerty */ + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_RSFT , + KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_BSPC, KC_ESC , KC_ENT, KC_SPC, F(NUMS), KC_QUOT, KC_SLSH, KC_RALT), + +[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ + KC_GRV , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_1 , KC_2 , KC_3 , KC_4 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + KC_DOT , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, XXXXXXX, KC_BSLS, _______), + +[MOUS] = KEYMAP( /* Mouse and Media Keys */ + KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, + KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + _______, _______ , _______, _______, _______, _______ , KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) +}; + + +// I prefer this layer switching strategy to the TG and MO functions. +// so that I can get out of mouse mode just by tapping/holding my base layer FN key. +const uint16_t PROGMEM fn_actions[] = { + [BASE] = ACTION_LAYER_OFF(2, 1), // switch back to layer 0 + [NUMS] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay + [MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2 +}; + +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; +}; -- cgit v1.2.3 From 0c3aede09e131243017dfb89638795e7cd25c969 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 18:23:24 -0500 Subject: Latest making use of overloaded modifiers... --- keyboards/atreus/keymaps/erlandsona/keymap.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index f1555fb1df..6ca8aaed92 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,22 +18,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_RSFT , - KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_BSPC, KC_ESC , KC_ENT, KC_SPC, F(NUMS), KC_QUOT, KC_SLSH, KC_RALT), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_SLSH), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_QUOT, KC_RALT , KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_LBRC, - KC_TAB , KC_1 , KC_2 , KC_3 , KC_4 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - KC_DOT , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, XXXXXXX, KC_BSLS, _______), + KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_4 , KC_5 , KC_6 , KC_DLR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______, KC_1 , KC_2 , KC_3 , KC_DOT, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL, F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ - KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, - KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, - KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, - _______, _______ , _______, _______, _______, _______ , KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) + KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, + KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + _______, _______ , _______, _______, _______, _______, KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; -- cgit v1.2.3 From cf17eb0f4360fca9ad3910c9cdf0d0ef5155b026 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Mon, 12 Sep 2016 18:36:41 -0500 Subject: Get rid of sleep button... --- keyboards/atreus/keymaps/erlandsona/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 6ca8aaed92..83871219eb 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, - _______, _______ , _______, _______, _______, _______, KC_SLEP, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) + _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; -- cgit v1.2.3 From e9a093451ea13b18b5dc60d427244efeba593da5 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Mon, 12 Sep 2016 19:54:52 -0500 Subject: Clean up atomic keymap (#9) * Added keyboard help macros * Fixing Atomic PVC keymap / adding print help --- keyboards/atomic/keymaps/pvc/Makefile | 2 +- keyboards/atomic/keymaps/pvc/config.h | 11 +- keyboards/atomic/keymaps/pvc/keymap.c | 458 ++++++++++++++++++---------------- keyboards/planck/keymaps/pvc/keymap.c | 106 ++++++-- 4 files changed, 336 insertions(+), 241 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/Makefile b/keyboards/atomic/keymaps/pvc/Makefile index 278407e6c9..ebd75e313f 100644 --- a/keyboards/atomic/keymaps/pvc/Makefile +++ b/keyboards/atomic/keymaps/pvc/Makefile @@ -1,7 +1,7 @@ BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality diff --git a/keyboards/atomic/keymaps/pvc/config.h b/keyboards/atomic/keymaps/pvc/config.h index 70353323b6..18a7253f2e 100644 --- a/keyboards/atomic/keymaps/pvc/config.h +++ b/keyboards/atomic/keymaps/pvc/config.h @@ -150,10 +150,17 @@ along with this program. If not, see . */ /* disable debug print */ -//#define NO_DEBUG +#ifndef NO_DEBUG +# define NO_DEBUG +#endif /* disable print */ -//#define NO_PRINT +// #ifndef NO_PRINT +// # define NO_PRINT +// #endif + +/* Only print user print statements */ +#define USER_PRINT /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index b02e89d2c7..d10bfe3bfc 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -2,48 +2,59 @@ #include "action_layer.h" #include "eeconfig.h" #include "led.h" +#include "mousekey.h" #ifdef AUDIO_ENABLE #include "audio.h" #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_UPPER 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_ADJUST 7 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_UPPER 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_TOGGLE 14 -#define MACRO_AUDIO_TOGGLE 16 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 -#define MACRO_BREATH_TOGGLE 21 -#define MACRO_BREATH_SPEED_INC 23 -#define MACRO_BREATH_SPEED_DEC 24 -#define MACRO_BREATH_DEFAULT 25 +enum keyboard_layers { + LAYER_QWERTY = 0, + LAYER_UPPER, + LAYER_LOWER, + LAYER_FUNCTION, + LAYER_MOUSE, + LAYER_ADJUST, +}; +enum keyboard_macros { + MACRO_QWERTY = 0, + MACRO_UPPER, + MACRO_LOWER, + MACRO_FUNCTION, + MACRO_MOUSE, + MACRO_TIMBRE_1, + MACRO_TIMBRE_2, + MACRO_TIMBRE_3, + MACRO_TIMBRE_4, + MACRO_TEMPO_U, + MACRO_TEMPO_D, + MACRO_TONE_DEFAULT, + MACRO_MUSIC_TOGGLE, + MACRO_AUDIO_TOGGLE, + MACRO_INC_VOICE, + MACRO_DEC_VOICE, + MACRO_BACKLIGHT, + MACRO_BREATH_TOGGLE, + MACRO_BREATH_SPEED_INC, + MACRO_BREATH_SPEED_DEC, + MACRO_BREATH_DEFAULT, + MACRO_MOUSE_MOVE_UL, + MACRO_MOUSE_MOVE_UR, + MACRO_MOUSE_MOVE_DL, + MACRO_MOUSE_MOVE_DR, + MACRO_HELP_1, + MACRO_HELP_2, + MACRO_HELP_3, + MACRO_HELP_4, + MACRO_HELP_5, + MACRO_HELP_6, + MACRO_HELP_7, + MACRO_HELP_8, + MACRO_HELP_9, +}; #define M_QWRTY M(MACRO_QWERTY) -#define M_COLMK M(MACRO_COLEMAK) -#define M_DVORK M(MACRO_DVORAK) #define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) @@ -60,6 +71,19 @@ #define M_BSPDU M(MACRO_BREATH_SPEED_INC) #define M_BSPDD M(MACRO_BREATH_SPEED_DEC) #define M_BDFLT M(MACRO_BREATH_DEFAULT) +#define M_MS_UL M(MACRO_MOUSE_MOVE_UL) +#define M_MS_UR M(MACRO_MOUSE_MOVE_UR) +#define M_MS_DL M(MACRO_MOUSE_MOVE_DL) +#define M_MS_DR M(MACRO_MOUSE_MOVE_DR) +#define M_HELP1 M(MACRO_HELP_1) +#define M_HELP2 M(MACRO_HELP_2) +#define M_HELP3 M(MACRO_HELP_3) +#define M_HELP4 M(MACRO_HELP_4) +#define M_HELP5 M(MACRO_HELP_5) +#define M_HELP6 M(MACRO_HELP_6) +#define M_HELP7 M(MACRO_HELP_7) +#define M_HELP8 M(MACRO_HELP_8) +#define M_HELP9 M(MACRO_HELP_9) #define VC_UP M(MACRO_INC_VOICE) @@ -77,6 +101,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define TG_NKRO MAGIC_TOGGLE_NKRO #define OS_SHFT KC_FN0 #define _______ KC_TRNS @@ -86,169 +111,126 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_QWERTY] = { // QWERTY - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { 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_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - - /* COLEMAK - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_COLEMAK] = { // COLEMAK - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +/* LAYER = LAYER_QWERTY + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_QWERTY] = { + { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC }, + { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP }, + { 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_RSFT, KC_UP , KC_PGDN }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT } }, - -/* DVORAK - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_DVORAK] = { // DVORAK - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, - { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - -/* UPPER - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | 0 | | RALT | . | ENTER | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_UPPER] = { // UPPER - { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, - { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, - { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, - { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, - }, - -/* LOWER - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | | | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_LOWER] = { // LOWER - { _______, 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_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, - { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, - -/* FUNCTION - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | NUM LK | | | | | | | | | | | | | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [LAYER_FUNCTION] = { // FUNCTION - { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, - { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, - { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, - { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, - }, - -#ifdef MOUSEKEY_ENABLE - - [LAYER_MOUSE] = { // MOUSE - { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, - { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, - { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, - }, - -#endif - - [LAYER_ADJUST] = { // ADJUST - { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, - { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, - { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, - }, - - -/* - [LAYER_EMPTY] = { // LAYER - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, +/* LAYER = LAYER_UPPER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' */ - +[LAYER_UPPER] = { + { KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ }, + { KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, + { _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME }, + { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END }, + { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ } +}, +/* LAYER = LAYER_LOWER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_LOWER] = { + { KC_PSCR, 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_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS }, + { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END }, + { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ } +}, +/* LAYER = LAYER_FUNCTION + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_FUNCTION] = { + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE }, + { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT } +}, +/* LAYER = LAYER_MOUSE + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_MOUSE] = { + { KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R }, + { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U }, + { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R } +}, +/* LAYER = LAYER_ADJUST + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ | + '--------------------------------------------------------------------------------------------------------------------------------------' +*/ +[LAYER_ADJUST] = { + { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX }, + { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP } +}, }; #ifdef AUDIO_ENABLE @@ -290,61 +272,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { - case MACRO_BREATH_TOGGLE: + case MACRO_HELP_1: if (record->event.pressed) { - breathing_toggle(); + uprintf("1"); } break; - case MACRO_BREATH_SPEED_INC: + case MACRO_HELP_2: if (record->event.pressed) { - breathing_speed_inc(1); + uprintf("2"); } break; - case MACRO_BREATH_SPEED_DEC: + case MACRO_HELP_3: if (record->event.pressed) { - breathing_speed_dec(1); + uprintf("3"); } break; - case MACRO_BREATH_DEFAULT: + case MACRO_HELP_4: if (record->event.pressed) { - breathing_defaults(); + uprintf("4"); } break; - case MACRO_QWERTY: + case MACRO_HELP_5: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) + { + uprintf("8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprintf("9"); + } + break; + + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; + + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; + + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; + + case MACRO_BREATH_DEFAULT: + if (record->event.pressed) + { + breathing_defaults(); + } + break; + + case MACRO_QWERTY: + if (record->event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + uprintf("1"); + } + break; + + case MACRO_HELP_2: + if (record->event.pressed) + { + uprintf("2"); + } + break; + + case MACRO_HELP_3: + if (record->event.pressed) + { + uprintf("3"); + } + break; + + case MACRO_HELP_4: + if (record->event.pressed) + { + uprintf("4"); + } + break; + + case MACRO_HELP_5: + if (record->event.pressed) + { + uprintf("5"); + } + break; + + case MACRO_HELP_6: + if (record->event.pressed) + { + uprintf("6"); + } + break; + + case MACRO_HELP_7: + if (record->event.pressed) + { + uprintf("7"); + } + break; + + case MACRO_HELP_8: + if (record->event.pressed) + { + uprintf("8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprintf("9"); + } + break; + case MACRO_BREATH_TOGGLE: if (record->event.pressed) { -- cgit v1.2.3 From cb1ac2a3edf637a3e2ecb53f0627212d1f5abb08 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Mon, 12 Sep 2016 20:20:31 -0500 Subject: Fixed NO_PRINT / USER_PRINT conflict warning. --- keyboards/atomic/keymaps/pvc/Makefile | 2 +- tmk_core/common/command.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/Makefile b/keyboards/atomic/keymaps/pvc/Makefile index ebd75e313f..c7c04485fc 100644 --- a/keyboards/atomic/keymaps/pvc/Makefile +++ b/keyboards/atomic/keymaps/pvc/Makefile @@ -1,4 +1,4 @@ -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 54d6117fd1..fc5aad5c1d 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -261,7 +261,10 @@ static void print_status(void) #ifdef BOOTMAGIC_ENABLE static void print_eeconfig(void) { -#ifndef NO_PRINT + +// Print these variables if NO_PRINT or USER_PRINT are not defined. +#if !defined(NO_PRINT) && !defined(USER_PRINT) + print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n"); debug_config_t dc; @@ -571,7 +574,8 @@ static uint8_t mousekey_param = 0; static void mousekey_param_print(void) { -#ifndef NO_PRINT +// Print these variables if NO_PRINT or USER_PRINT are not defined. +#if !defined(NO_PRINT) && !defined(USER_PRINT) print("\n\t- Values -\n"); print("1: delay(*10ms): "); pdec(mk_delay); print("\n"); print("2: interval(ms): "); pdec(mk_interval); print("\n"); -- cgit v1.2.3 From 6098704145c95f7854e0696e6137332e8e12faf8 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Tue, 13 Sep 2016 09:54:18 -0500 Subject: Small update --- keyboards/atreus/keymaps/erlandsona/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 83871219eb..9e11ac048e 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,10 +18,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_SLSH), - KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_QUOT, KC_RALT , KC_BSLS ), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, - KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_F2, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2, _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) }; -- cgit v1.2.3 From 3668b295200c53e7131551bc906264ecc54e6b04 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Tue, 13 Sep 2016 11:16:53 -0500 Subject: Shorten TAPPING_TERM for better responsiveness of overloaded keys... --- keyboards/atreus/config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h index 51162cde3a..a59eee18eb 100644 --- a/keyboards/atreus/config.h +++ b/keyboards/atreus/config.h @@ -49,6 +49,9 @@ along with this program. If not, see . # define UNUSED_PINS #endif +/* Make Overloaded Keys switch faster */ +#define TAPPING_TERM 175 + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW -- cgit v1.2.3 From 344929e0675f9857503b0dd2cd307984a57d61aa Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 15:48:50 -0400 Subject: Give layers longer names --- keyboards/planck/keymaps/cbbrowne/keymap.c | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 1bfd142e90..85f8e34722 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -65,10 +65,10 @@ */ enum layers { - _QW = 0, /* Qwerty mapping */ - _LW, /* Lower layer, where top line has symbols !@#$%^&*() */ - _RS, /* Raised layer, where top line has digits 1234567890 */ - _KP, /* Key pad */ + _QWERTY = 0, /* Qwerty mapping */ + _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */ + _RAISE, /* Raised layer, where top line has digits 1234567890 */ + KEYPAD, /* Key pad */ _ADJUST, /* Special Adjust layer coming via tri-placement */ }; @@ -88,30 +88,30 @@ enum macro_id { /* Note that Planck has dimensions 4 rows x 12 columns */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ +[_QWERTY] = { /* 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, 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_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, -[_RS] = { /* RAISE */ +[_RAISE] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[_LW] = { /* LOWER */ +[_LOWER] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, _______}, - {_______, DF(_KP), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, + {_______, DF(KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[_KP] = { /* Key Pad */ +[KEYPAD] = { /* Key Pad */ {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QWERTY), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ @@ -187,25 +187,25 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_UPPER: if (record->event.pressed) { - layer_on(_RS); - update_tri_layer(_LW, _RS, _ADJUST); + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { - layer_off(_RS); - update_tri_layer(_LW, _RS, _ADJUST); + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; case MACRO_LOWER: if (record->event.pressed) { - layer_on(_LW); - update_tri_layer(_LW, _RS, _ADJUST); + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { - layer_off(_LW); - update_tri_layer(_LW, _RS, _ADJUST); + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; -- cgit v1.2.3 From fdeaf1d9f8c87a0266066799fd14b808f6debe29 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 15:49:46 -0400 Subject: Give layers longer names --- keyboards/planck/keymaps/cbbrowne/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 85f8e34722..8051721cd3 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -68,7 +68,7 @@ enum layers { _QWERTY = 0, /* Qwerty mapping */ _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */ _RAISE, /* Raised layer, where top line has digits 1234567890 */ - KEYPAD, /* Key pad */ + _KEYPAD, /* Key pad */ _ADJUST, /* Special Adjust layer coming via tri-placement */ }; @@ -98,16 +98,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_LOWER] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(KEYPAD), DF(KEYPAD), RESET, _______}, - {_______, DF(KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, + {_______, DF(_KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[KEYPAD] = { /* Key Pad */ +[_KEYPAD] = { /* Key Pad */ {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, -- cgit v1.2.3 From 5be2795ca1b8c3e555fb7fb3a2d7fca69d2db9b4 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 16:17:51 -0400 Subject: C macros for my favorite complex keystrokes --- keyboards/planck/keymaps/cbbrowne/keymap.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 8051721cd3..fafc47e1d4 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -84,6 +84,13 @@ enum macro_id { #define M_LOWER M(MACRO_LOWER) #define M_UPPER M(MACRO_UPPER) +#define ROT_LED M(M_LED) /* Rotate LED */ +#define QWERTY DF(_QWERTY) /* Switch to QWERTY layout */ +#define KEYPAD DF(_KEYPAD) /* Switch to keypad */ +#define USERNAME M(M_USERNAME) /* shortcut for username */ +#define RANDDIG M(M_RANDDIGIT) +#define RANDALP M(M_RANDLETTER) + /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -92,32 +99,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, 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_TAB, M(M_LED), KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RAISE] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_LOWER] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QWERTY), DF(_KEYPAD), DF(_KEYPAD), RESET, _______}, - {_______, DF(_KEYPAD), _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, + {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KEYPAD] = { /* Key Pad */ - {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, - {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, - {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QWERTY), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {KC_ESC, USERNAME, M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_LCTL, RANDDIG, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, + {KC_LSFT, RANDALP, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, + {BL_STEP, ROT_LED, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ - { M(M_LED), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, + { ROT_LED, USERNAME, M(M_VERSION), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, RANDALP, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } } }; -- cgit v1.2.3 From 5d643bb7ee8375a354693f19a6e9eae44f825532 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Tue, 13 Sep 2016 16:29:01 -0400 Subject: Got Right SHIFT + Right CTRL --- keyboards/planck/keymaps/cbbrowne/keymap.c | 6 ++++-- keyboards/planck/keymaps/cbbrowne/readme.md | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index fafc47e1d4..d6f8a6ed48 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -90,6 +90,8 @@ enum macro_id { #define USERNAME M(M_USERNAME) /* shortcut for username */ #define RANDDIG M(M_RANDDIGIT) #define RANDALP M(M_RANDLETTER) +#define CTLENTER MT(MOD_RCTL, KC_ENT) +#define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -97,8 +99,8 @@ enum macro_id { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = { /* 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTLENTER}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFTQUOTE }, {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index e9e423ed91..272e042a0d 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -25,7 +25,12 @@ doing sundry experimentation: - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random - Key [1][3] aka "e" spits out the keymap version number * Trying out sgoodwin's "hold Enter down to get Shift" - + - Liking this Quite Well Enough... + - Applied this to both Shift and Quote + * I have added an alternate ADJUST layer that is activated via update_tri_layer() + - e.g. - LOWER+RAISE simultaneously + - This seems entirely more useful for handling my "special keys" + like the random numbers, user name, and such, than the keypad layer 2. Some code structure ideas --------------------------------------------------- -- cgit v1.2.3 From 9c574b493c3d098d2c4f2475dfc1564a182acce0 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 13 Sep 2016 22:05:10 -0500 Subject: Changed Docs, Moved RetroRefit to Handwired --- keyboards/arrow_pad/readme.md | 113 ++++++++++++++++++- keyboards/handwired/retro_refit/Makefile | 3 + keyboards/handwired/retro_refit/config.h | 123 +++++++++++++++++++++ .../handwired/retro_refit/keymaps/default/keymap.c | 33 ++++++ keyboards/handwired/retro_refit/readme.md | 60 ++++++++++ keyboards/handwired/retro_refit/retro_refit.c | 47 ++++++++ keyboards/handwired/retro_refit/retro_refit.h | 38 +++++++ keyboards/handwired/retro_refit/rules.mk | 68 ++++++++++++ keyboards/retro_refit/Makefile | 3 - keyboards/retro_refit/config.h | 123 --------------------- keyboards/retro_refit/keymaps/default/keymap.c | 33 ------ keyboards/retro_refit/readme.md | 26 ----- keyboards/retro_refit/retro_refit.c | 47 -------- keyboards/retro_refit/retro_refit.h | 38 ------- keyboards/retro_refit/rules.mk | 68 ------------ keyboards/vision_division/readme.md | 6 + 16 files changed, 488 insertions(+), 341 deletions(-) create mode 100644 keyboards/handwired/retro_refit/Makefile create mode 100644 keyboards/handwired/retro_refit/config.h create mode 100644 keyboards/handwired/retro_refit/keymaps/default/keymap.c create mode 100644 keyboards/handwired/retro_refit/readme.md create mode 100644 keyboards/handwired/retro_refit/retro_refit.c create mode 100644 keyboards/handwired/retro_refit/retro_refit.h create mode 100644 keyboards/handwired/retro_refit/rules.mk delete mode 100644 keyboards/retro_refit/Makefile delete mode 100644 keyboards/retro_refit/config.h delete mode 100644 keyboards/retro_refit/keymaps/default/keymap.c delete mode 100644 keyboards/retro_refit/readme.md delete mode 100644 keyboards/retro_refit/retro_refit.c delete mode 100644 keyboards/retro_refit/retro_refit.h delete mode 100644 keyboards/retro_refit/rules.mk diff --git a/keyboards/arrow_pad/readme.md b/keyboards/arrow_pad/readme.md index 2e9a64f2ef..d0d172272e 100644 --- a/keyboards/arrow_pad/readme.md +++ b/keyboards/arrow_pad/readme.md @@ -1,13 +1,120 @@ arrow_pad keyboard firmware ====================== +## Keyboard Info + +The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator. + +The first 24-key ArrowPad was handwired, but the PCB was wired as listed below. + +``` + pin + (Silkscreen Name if different) - + + +Note: +U2 pin 2 is the Num Lock LED and is active low. + +U2 pin 1 +Clear (Num Lock) - 1 +Enter - 2 +Esc (ESC) - 2 + + +U2 pin 3 +- - 1 + +U2 pin 4 +7 - 2 +8 - 2 +9 - 2 + +U2 pin 5 +* - 2 +Delete (BACK SPACE) - 2 + +U2 pin 6 +1 - 2 +0 - 2 +. - 2 +, - 2 + +U2 pin 7 +4 - 2 +5 - 2 +6 - 2 + +U2 pin 8 +Tab - 2 += (/) - 2 + +U2 pin 13 +Delete (BACK SPACE) - 1 +9 - 1 +6 - 1 +3 - 1 +. - 1 + +U2 pin 14 +Tab - 1 +8 - 1 +5 - 1 +2 - 1 +0 - 1 + +U2 pin 15 +Esc (ESC) - 1 += (/) - 1 +/ (*) - 1 +7 - 1 +4 - 1 +1 - 1 ++ - 1 + +U2 pin 16 +Enter - 1 +* (<--) - 1 +, - 1 + +U2 pin 17 +Fn (#NAME?) - 1 +- - 2 +Clear (Num Lock) - 2 + +U2 pin 18 +Fn (#NAME?) - 2 +* (<--) - 2 ++ - 2 +3 - 2 +2 - 2 +``` + +More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497) + +The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix. + +``` +#define KEYMAP( \ + KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ + KM_NUM, KM_FSL, KM_AST, KM_MIN, \ + KM___7, KM___8, KM___9, ___PLS, \ + KM___4, KM___5, KM___6, KM_PLS, \ + KM___1, KM___2, KM___3, ___ENT, \ + KM___0, _____0, KM_DOT, KM_ENT \ +) { \ + { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \ + { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \ +} +``` + + ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/readme.md). ## Building -Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. +Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. Depending on which keymap you would like to use, you will have to compile slightly differently. @@ -20,7 +127,7 @@ Several version of keymap are available in advance but you are recommended to de To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` -$ make [default|jack|] +$ make [default|pad_21|pad_24|] ``` -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/handwired/retro_refit/Makefile b/keyboards/handwired/retro_refit/Makefile new file mode 100644 index 0000000000..191c6bb664 --- /dev/null +++ b/keyboards/handwired/retro_refit/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/retro_refit/config.h b/keyboards/handwired/retro_refit/config.h new file mode 100644 index 0000000000..f2194e550c --- /dev/null +++ b/keyboards/handwired/retro_refit/config.h @@ -0,0 +1,123 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Nobody +#define PRODUCT retro_refit +#define DESCRIPTION Retro Refit + +/* key matrix size */ +#define MATRIX_ROWS 11 +#define MATRIX_COLS 8 + +// See note in retro_refit.h for an explanation of how this matrix is wired up +#define MATRIX_ROW_PINS { D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } +#define MATRIX_COL_PINS { B0, B1, B2, B3, D2, D3, C7, D5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 0 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + + +/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */ +#define FORCE_NKRO + +/* + * Magic key options + * These options allow the magic key functionality to be changed. This is useful + * if your keyboard/keypad is missing keys and you want magic key support. + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* remap magic keys */ +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +#define MAGIC_KEY_LOCK BSLS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/handwired/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c new file mode 100644 index 0000000000..405402d5e3 --- /dev/null +++ b/keyboards/handwired/retro_refit/keymaps/default/keymap.c @@ -0,0 +1,33 @@ +// 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 "retro_refit.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = + KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \ + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \ + BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \ + LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \ + LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md new file mode 100644 index 0000000000..9f10edf9fc --- /dev/null +++ b/keyboards/handwired/retro_refit/readme.md @@ -0,0 +1,60 @@ +retro_refit keyboard firmware +====================== + +## Keyboard Info + +The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop". + +http://imgur.com/a/08Fyj + +This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow". + +The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y. + +``` +#define KEYMAP( \ + K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \ + K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \ + K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \ + K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \ + K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \ + K10, K06, K25, K07, K86, K85, K95, K90, K93 \ +) { \ +{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \ +{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \ +{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \ +{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \ +{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \ +{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \ +{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \ +{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \ +{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \ +{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \ +{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \ +} +``` + + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make default`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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 a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/handwired/retro_refit/retro_refit.c b/keyboards/handwired/retro_refit/retro_refit.c new file mode 100644 index 0000000000..3d610eba34 --- /dev/null +++ b/keyboards/handwired/retro_refit/retro_refit.c @@ -0,0 +1,47 @@ +#include "retro_refit.h" +#include "led.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS) + DDRD |= (1<<6); + PORTD |= (1<<6); + + matrix_init_user(); +}; + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + if (usb_led & (1< - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER Nobody -#define PRODUCT retro_refit -#define DESCRIPTION Retro Refit - -/* key matrix size */ -#define MATRIX_ROWS 11 -#define MATRIX_COLS 8 - -// See note in retro_refit.h for an explanation of how this matrix is wired up -#define MATRIX_ROW_PINS { D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } -#define MATRIX_COL_PINS { B0, B1, B2, B3, D2, D3, C7, D5 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 0 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - - -/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */ -#define FORCE_NKRO - -/* - * Magic key options - * These options allow the magic key functionality to be changed. This is useful - * if your keyboard/keypad is missing keys and you want magic key support. - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* remap magic keys */ -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -#define MAGIC_KEY_LOCK BSLS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/retro_refit/keymaps/default/keymap.c b/keyboards/retro_refit/keymaps/default/keymap.c deleted file mode 100644 index 405402d5e3..0000000000 --- a/keyboards/retro_refit/keymaps/default/keymap.c +++ /dev/null @@ -1,33 +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 "retro_refit.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = - KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \ - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \ - BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \ - LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \ - LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT), -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboards/retro_refit/readme.md b/keyboards/retro_refit/readme.md deleted file mode 100644 index 77df861cef..0000000000 --- a/keyboards/retro_refit/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -retro_refit keyboard firmware -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default -To build with the default keymap, simply run `make default`. - -### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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 a keymap like this: - -``` -$ make [default|jack|] -``` - -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/retro_refit/retro_refit.c b/keyboards/retro_refit/retro_refit.c deleted file mode 100644 index 3d610eba34..0000000000 --- a/keyboards/retro_refit/retro_refit.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "retro_refit.h" -#include "led.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS) - DDRD |= (1<<6); - PORTD |= (1<<6); - - matrix_init_user(); -}; - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - if (usb_led & (1< Date: Wed, 14 Sep 2016 09:39:16 -0500 Subject: Copy config overrides to my keymap directory... --- keyboards/atreus/config.h | 3 - keyboards/atreus/keymaps/erlandsona/config.h | 101 +++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 keyboards/atreus/keymaps/erlandsona/config.h diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h index a59eee18eb..51162cde3a 100644 --- a/keyboards/atreus/config.h +++ b/keyboards/atreus/config.h @@ -49,9 +49,6 @@ along with this program. If not, see . # define UNUSED_PINS #endif -/* Make Overloaded Keys switch faster */ -#define TAPPING_TERM 175 - /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h new file mode 100644 index 0000000000..6f0d258f50 --- /dev/null +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -0,0 +1,101 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + + + + +/* Make Overloaded Keys switch faster */ +#define TAPPING_TERM 175 + + + + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Technomancy +#define PRODUCT Atreus +#define DESCRIPTION q.m.k. keyboard firmware for Atreus + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#if defined(ATREUS_ASTAR) +# define MATRIX_ROW_PINS { D0, D1, D3, D2 } +#if defined(PCBDOWN) +# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 } +#else +# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +#endif +# define UNUSED_PINS +#elif defined(ATREUS_TEENSY2) +# define MATRIX_ROW_PINS { D0, D1, D2, D3 } +# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 } +# define UNUSED_PINS +#endif + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +//#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif -- cgit v1.2.3 From 8a01bbc42286a60bcbca2fe9e09298fb9116811a Mon Sep 17 00:00:00 2001 From: "Lars R. Noldan" Date: Wed, 14 Sep 2016 11:54:13 -0500 Subject: Adding Space Cadet, And Correcting Ascii Keymap --- .../ergodox/keymaps/absenth/absenth_highres.png | Bin 1429453 -> 1463041 bytes keyboards/ergodox/keymaps/absenth/keymap.c | 12 ++++++------ keyboards/ergodox/keymaps/absenth/readme.md | 3 +++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png index a0596b2812..c07aa8803f 100644 Binary files a/keyboards/ergodox/keymaps/absenth/absenth_highres.png and b/keyboards/ergodox/keymaps/absenth/absenth_highres.png differ diff --git a/keyboards/ergodox/keymaps/absenth/keymap.c b/keyboards/ergodox/keymaps/absenth/keymap.c index 30f7474191..ded668e13b 100644 --- a/keyboards/ergodox/keymaps/absenth/keymap.c +++ b/keyboards/ergodox/keymaps/absenth/keymap.c @@ -15,9 +15,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * | BkSp | A/L2 | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * | LS/PO |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RS/PC | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' @@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_BSPC, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_LSPO, 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, @@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC, KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, @@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | MsUp | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * | | |MsLeft|MsDown|MsRght| |------| |------| left | down | up | down | | Play | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -110,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | * ,------|------|------| |------+------+------. * | | | | | | |Brwser| - * | | |------| |------| |Back | + * | Lclk | Rclk |------| |------| |Back | * | | | | | | | | * `--------------------' `--------------------' */ diff --git a/keyboards/ergodox/keymaps/absenth/readme.md b/keyboards/ergodox/keymaps/absenth/readme.md index 35d0aad461..0c04bf4177 100644 --- a/keyboards/ergodox/keymaps/absenth/readme.md +++ b/keyboards/ergodox/keymaps/absenth/readme.md @@ -2,6 +2,9 @@ ## Changelog + +* Sept. 14, 2016 (V0.2): + * Added Space Cadet to Left and Right Shift. Pressing Left shift with no other key adds an "(" and pressing Right shift with no other key adds an ")" * Sept. 8, 2016 (V0.1): * Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer. -- cgit v1.2.3 From e72f8dfd7e7a95fb48f672a794c69b94d2998410 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 20:22:04 -0500 Subject: Adding WinCheck Script for windows install help --- util/Win_Check_Output.bat | 205 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 util/Win_Check_Output.bat diff --git a/util/Win_Check_Output.bat b/util/Win_Check_Output.bat new file mode 100644 index 0000000000..3d517d9403 --- /dev/null +++ b/util/Win_Check_Output.bat @@ -0,0 +1,205 @@ +@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION +@echo OFF +set BAT_VERSION=v1.0 + +cls + +echo QMK Windows Check Output %BAT_VERSION% +echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME% + +:: ----------------------------------------------------------------------------- + +set MINGW_BASE_DIR=C:\MinGW +set REPORT_NAME=Win_Check_Output.txt + +set KEYMAP=atomic-pvc +set KEYMAP_CLEAN=atomic-pvc-clean + +:: ----------------------------------------------------------------------------- + +if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) + +:Normal_Make +set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE +goto :Start_Report + +:Verbose_Make +echo Verbose Mode +set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE +goto :Start_Report + +:Start_Report + + +:: ----------------------------------------------------------------------------- + +set header=CURRENT DIRECTORY & call :ReportHeader + +echo %CD%>>%REPORT_NAME% 2>&1 + +echo.>>%REPORT_NAME% 2>&1 +:: ----------------------------------------------------------------------------- + +set header=CURRENT PATHS & call :ReportHeader + +for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) + +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader + +set>>%REPORT_NAME% 2>&1 +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader + +set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion +set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader + +set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion +set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader + +set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion +set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader + +set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion +set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader + +set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion +set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion +set filename=dfu-util.exe & call :Report +set filename=teensy_loader_cli.exe & call :Report +set filename=hid_bootloader_cli.exe & call :Report +set filename=avrdude.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader +set filename=cppcheck.exe & call :Report +set filename=doxygen.exe & call :Report +set filename=gdb-config.exe & call :Report +set filename=wget.exe & call :Report +set filename=unzip.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=MINGW CHECK - OPTIONAL & call :ReportHeader +if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) +echo.>>%REPORT_NAME% 2>&1 +set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) + +:: ----------------------------------------------------------------------------- + +set header=MAKE CHECK & call :ReportHeader +if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) +if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) +if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) + +echo No Makfile Found.>>%REPORT_NAME% 2>&1 +echo.>>%REPORT_NAME% 2>&1 +echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + +goto ContinueAfterMake + +:MakeFound +call :RunMake + +:ContinueAfterMake +goto ExitBatch + +:ExitBatch + echo Done! + echo. + rem type %REPORT_NAME% + echo. + echo See %REPORT_NAME% for the report. + endlocal +exit /b + +:: ----------------------------------------------------------------------------- + +:RunMake + + echo Makfile Found.>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + set header=MAKE CLEAN & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + set header=MAKE & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:ReportHeader + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + echo %header%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:Report + echo Filename = %filename% >>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) + + :EndReport + echo.>>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) + >%REPORT_NAME% 2>&1 + + (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 + + :EndReportVersion + echo.>>%REPORT_NAME% 2>&1 + Date: Wed, 14 Sep 2016 21:34:28 -0500 Subject: Fixed a last minute format bug. --- util/Win_Check_Output.bat | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/util/Win_Check_Output.bat b/util/Win_Check_Output.bat index 3d517d9403..f57083e6d9 100644 --- a/util/Win_Check_Output.bat +++ b/util/Win_Check_Output.bat @@ -1,6 +1,9 @@ @setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION @echo OFF set BAT_VERSION=v1.0 +set REPORT_NAME=Win_Check_Output.txt + +:: ----------------------------------------------------------------------------- cls @@ -10,7 +13,6 @@ echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME% :: ----------------------------------------------------------------------------- set MINGW_BASE_DIR=C:\MinGW -set REPORT_NAME=Win_Check_Output.txt set KEYMAP=atomic-pvc set KEYMAP_CLEAN=atomic-pvc-clean -- cgit v1.2.3 From bcc4213edcc5b09d2a55fa9ed705ef13ef48f7a8 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 21:39:19 -0500 Subject: Marked the Win_Check_Output.txt file as ignored --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 07bbf13db1..153fea093c 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ CMakeLists.txt .idea .browse.VC.db* *.stackdump +util/Win_Check_Output.txt -- cgit v1.2.3 From 0d3ce58b6ba2afa16a1b566b4d06dbe01c39cf06 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 14 Sep 2016 22:53:23 -0500 Subject: Renamed to Win_Check, Removed SET for privacy. --- util/Win_Check.bat | 208 ++++++++++++++++++++++++++++++++++++++++++++++ util/Win_Check_Output.bat | 207 --------------------------------------------- 2 files changed, 208 insertions(+), 207 deletions(-) create mode 100644 util/Win_Check.bat delete mode 100644 util/Win_Check_Output.bat diff --git a/util/Win_Check.bat b/util/Win_Check.bat new file mode 100644 index 0000000000..28f89f10e2 --- /dev/null +++ b/util/Win_Check.bat @@ -0,0 +1,208 @@ +@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION +@echo OFF +set BAT_VERSION=v1.0 +set REPORT_NAME=Win_Check_Output.txt + +:: ----------------------------------------------------------------------------- + +cls + +echo QMK Windows Check Output %BAT_VERSION% +echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME% + +:: ----------------------------------------------------------------------------- + +set MINGW_BASE_DIR=C:\MinGW + +set KEYMAP=atomic-pvc +set KEYMAP_CLEAN=atomic-pvc-clean + +:: ----------------------------------------------------------------------------- + +if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) + +:Normal_Make +set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE +set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE +goto :Start_Report + +:Verbose_Make +echo Verbose Mode +set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE +set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE +goto :Start_Report + +:Start_Report + + +:: ----------------------------------------------------------------------------- + +set header=CURRENT DIRECTORY & call :ReportHeader + +echo %CD%>>%REPORT_NAME% 2>&1 + +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=CURRENT PATHS & call :ReportHeader + +for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) + +echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +rem set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader + +rem set>>%REPORT_NAME% 2>&1 +rem echo.>>%REPORT_NAME% 2>&1 + +:: ----------------------------------------------------------------------------- + +set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader + +set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion +set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader + +set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion +set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader + +set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion +set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader + +set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion +set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion +set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion +set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion +set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion +set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader + +set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion +set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion +set filename=dfu-util.exe & call :Report +set filename=teensy_loader_cli.exe & call :Report +set filename=hid_bootloader_cli.exe & call :Report +set filename=avrdude.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader +set filename=cppcheck.exe & call :Report +set filename=doxygen.exe & call :Report +set filename=gdb-config.exe & call :Report +set filename=wget.exe & call :Report +set filename=unzip.exe & call :Report + +:: ----------------------------------------------------------------------------- + +set header=MINGW CHECK - OPTIONAL & call :ReportHeader +if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) +echo.>>%REPORT_NAME% 2>&1 +set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) + +:: ----------------------------------------------------------------------------- + +set header=MAKE CHECK & call :ReportHeader +if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) +if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) +if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) + +echo No Makfile Found.>>%REPORT_NAME% 2>&1 +echo.>>%REPORT_NAME% 2>&1 +echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + +goto ContinueAfterMake + +:MakeFound +call :RunMake + +:ContinueAfterMake +goto ExitBatch + +:ExitBatch + echo Done! + echo. + rem type %REPORT_NAME% + echo. + echo See %REPORT_NAME% for the report. + endlocal +exit /b + +:: ----------------------------------------------------------------------------- + +:RunMake + + echo Makfile Found.>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + set header=MAKE CLEAN & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 + set header=MAKE & call :ReportHeader + echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:ReportHeader + echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 + echo %header%>>%REPORT_NAME% 2>&1 + echo.>>%REPORT_NAME% 2>&1 +exit /b + +:Report + echo Filename = %filename% >>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) + + :EndReport + echo.>>%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + >%REPORT_NAME% 2>&1 + where %filename% >>%REPORT_NAME% 2> NUL + if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) + >%REPORT_NAME% 2>&1 + + (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 + + :EndReportVersion + echo.>>%REPORT_NAME% 2>&1 + %REPORT_NAME% - -:: ----------------------------------------------------------------------------- - -set MINGW_BASE_DIR=C:\MinGW - -set KEYMAP=atomic-pvc -set KEYMAP_CLEAN=atomic-pvc-clean - -:: ----------------------------------------------------------------------------- - -if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) - -:Normal_Make -set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE -set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE -set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE -goto :Start_Report - -:Verbose_Make -echo Verbose Mode -set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE -set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE -set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE -goto :Start_Report - -:Start_Report - - -:: ----------------------------------------------------------------------------- - -set header=CURRENT DIRECTORY & call :ReportHeader - -echo %CD%>>%REPORT_NAME% 2>&1 - -echo.>>%REPORT_NAME% 2>&1 -:: ----------------------------------------------------------------------------- - -set header=CURRENT PATHS & call :ReportHeader - -for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) - -echo.>>%REPORT_NAME% 2>&1 - -:: ----------------------------------------------------------------------------- - -set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader - -set>>%REPORT_NAME% 2>&1 -echo.>>%REPORT_NAME% 2>&1 - -:: ----------------------------------------------------------------------------- - -set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader - -set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion -set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion - -:: ----------------------------------------------------------------------------- - -set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader - -set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion -set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion - -:: ----------------------------------------------------------------------------- - -set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader - -set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion -set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion - -:: ----------------------------------------------------------------------------- - -set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader - -set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion -set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion - -:: ----------------------------------------------------------------------------- - -set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader - -set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion -set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion -set filename=dfu-util.exe & call :Report -set filename=teensy_loader_cli.exe & call :Report -set filename=hid_bootloader_cli.exe & call :Report -set filename=avrdude.exe & call :Report - -:: ----------------------------------------------------------------------------- - -set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader -set filename=cppcheck.exe & call :Report -set filename=doxygen.exe & call :Report -set filename=gdb-config.exe & call :Report -set filename=wget.exe & call :Report -set filename=unzip.exe & call :Report - -:: ----------------------------------------------------------------------------- - -set header=MINGW CHECK - OPTIONAL & call :ReportHeader -if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) -echo.>>%REPORT_NAME% 2>&1 -set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) - -:: ----------------------------------------------------------------------------- - -set header=MAKE CHECK & call :ReportHeader -if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) -if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) -if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) - -echo No Makfile Found.>>%REPORT_NAME% 2>&1 -echo.>>%REPORT_NAME% 2>&1 -echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 - -goto ContinueAfterMake - -:MakeFound -call :RunMake - -:ContinueAfterMake -goto ExitBatch - -:ExitBatch - echo Done! - echo. - rem type %REPORT_NAME% - echo. - echo See %REPORT_NAME% for the report. - endlocal -exit /b - -:: ----------------------------------------------------------------------------- - -:RunMake - - echo Makfile Found.>>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 - set header=MAKE CLEAN & call :ReportHeader - echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 - %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 - set header=MAKE & call :ReportHeader - echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 - %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 - echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 -exit /b - -:ReportHeader - echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 - echo %header%>>%REPORT_NAME% 2>&1 - echo.>>%REPORT_NAME% 2>&1 -exit /b - -:Report - echo Filename = %filename% >>%REPORT_NAME% 2>&1 - >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL - if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) - - :EndReport - echo.>>%REPORT_NAME% 2>&1 - >%REPORT_NAME% 2>&1 - >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL - if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) - >%REPORT_NAME% 2>&1 - - (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 - - :EndReportVersion - echo.>>%REPORT_NAME% 2>&1 - Date: Thu, 15 Sep 2016 07:59:14 -0500 Subject: Fixed Win_Check Verbose mode. --- util/Win_Check.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/Win_Check.bat b/util/Win_Check.bat index 28f89f10e2..fcf452d42c 100644 --- a/util/Win_Check.bat +++ b/util/Win_Check.bat @@ -19,7 +19,7 @@ set KEYMAP_CLEAN=atomic-pvc-clean :: ----------------------------------------------------------------------------- -if %0 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) +if %1 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) :Normal_Make set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE @@ -127,7 +127,7 @@ set header=MINGW CHECK - OPTIONAL & call :ReportHeader if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) echo.>>%REPORT_NAME% 2>&1 set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -if exist %MINGW_BASE_DIR%\bin\gcc.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) +if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) :: ----------------------------------------------------------------------------- -- cgit v1.2.3 From 24e8d01dc93c7367fbc58b79955b7c4ef6899c61 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 15 Sep 2016 11:28:12 -0400 Subject: Move ALT... --- keyboards/planck/keymaps/cbbrowne/keymap.c | 3 ++- keyboards/planck/keymaps/cbbrowne/readme.md | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index d6f8a6ed48..26a99a4e74 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -92,6 +92,7 @@ enum macro_id { #define RANDALP M(M_RANDLETTER) #define CTLENTER MT(MOD_RCTL, KC_ENT) #define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) +#define ALTRIGHT MT(MOD_LALT, KC_RGHT) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -101,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTLENTER}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFTQUOTE }, - {KC_TAB, ROT_LED, KC_LALT, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, ALTRIGHT} /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */ }, [_RAISE] = { /* RAISE */ diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md index 272e042a0d..184142e0c1 100644 --- a/keyboards/planck/keymaps/cbbrowne/readme.md +++ b/keyboards/planck/keymaps/cbbrowne/readme.md @@ -27,10 +27,23 @@ doing sundry experimentation: * Trying out sgoodwin's "hold Enter down to get Shift" - Liking this Quite Well Enough... - Applied this to both Shift and Quote + - It seems likely that Alt should get a right-hand-side, akin to this... + - Alt needs to move, and get a RHS + - Hence ALTRIGHT, and shifted ROT_LED over + - Emacs likes this!!! :-) + - I'm suspicious that I'll want to shift ROT_LED another location over, + so some modifier can replace the OS/KC_LGUI key * I have added an alternate ADJUST layer that is activated via update_tri_layer() - e.g. - LOWER+RAISE simultaneously - This seems entirely more useful for handling my "special keys" like the random numbers, user name, and such, than the keypad layer + * The _ADJUST layer provides a good place to have RESET + - But this isn't strictly enough; I want RESET somewhat accessible from + main layer lest an error hide that layer + - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows + Key on Windows), so that's a good place to have it as a chord of + some sort + 2. Some code structure ideas --------------------------------------------------- @@ -49,8 +62,8 @@ doing sundry experimentation: only need to fit 4 symbols onto each line, rather than 12. I used enums to manage layer IDs and macro IDs so that I don't need - to care (beyond "start at 0", and arguably that's not needed) about - their values. + to care (beyond "start at 0", and arguably even that's not needed) + about their values. 3. Things I did not like about the default mapping --------------------------------------------------------- @@ -83,8 +96,6 @@ unwise things again... to allow selecting multiple items, and this really interferes with that - - 5. TODO --------------------------------------------------------- -- cgit v1.2.3 From e50f15e36019fa39798bbe4e001fe7d2c94c88e7 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Thu, 15 Sep 2016 10:58:28 -0500 Subject: Add IGNORE_MOD_TAP_INTERRUPT to fix overloaded mod keys sending mod on diads... --- keyboards/atreus/keymaps/erlandsona/config.h | 11 +++++++---- keyboards/atreus/keymaps/erlandsona/keymap.c | 16 ++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h index 6f0d258f50..bf09bf23aa 100644 --- a/keyboards/atreus/keymaps/erlandsona/config.h +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -21,13 +21,16 @@ along with this program. If not, see . #include "config_common.h" - - /* Make Overloaded Keys switch faster */ #define TAPPING_TERM 175 - - +/* this makes it possible to do rolling combos (zx) + * with keys that convert to other keys on hold + * (z becomes ctrl when you hold it, + * and when this option isn't enabled, + * z rapidly followed by x actually sends Ctrl-x. That's bad.) + */ +#define IGNORE_MOD_TAP_INTERRUPT /* USB Device descriptor parameter */ diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 9e11ac048e..7807eb2245 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -18,16 +18,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), - KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, ALT_T(KC_ESC), CTL_T(KC_ENT), KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + ALT_T(KC_A), KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_7 , KC_8 , KC_9 , KC_0 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, - KC_TAB , KC_4 , KC_5 , KC_6 , KC_DLR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - _______, KC_1 , KC_2 , KC_3 , KC_DOT, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______, _______, _______, _______, KC_DEL, F(MOUS), _______, _______, _______, _______, _______, _______), + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + ALT_T(KC_TAB), KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______ , KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______ , _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, -- cgit v1.2.3 From ac6125cbea0ef2cfb9e8c79b89659128f60f0853 Mon Sep 17 00:00:00 2001 From: Austin Erlandson Date: Thu, 15 Sep 2016 11:19:54 -0500 Subject: Revert because the IGNORE_MOD_TAP_INTERRUPT flag didn't feel right. --- keyboards/atreus/keymaps/erlandsona/config.h | 10 +--------- keyboards/atreus/keymaps/erlandsona/keymap.c | 10 +++++----- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h index bf09bf23aa..d9eb1903ed 100644 --- a/keyboards/atreus/keymaps/erlandsona/config.h +++ b/keyboards/atreus/keymaps/erlandsona/config.h @@ -22,15 +22,7 @@ along with this program. If not, see . /* Make Overloaded Keys switch faster */ -#define TAPPING_TERM 175 - -/* this makes it possible to do rolling combos (zx) - * with keys that convert to other keys on hold - * (z becomes ctrl when you hold it, - * and when this option isn't enabled, - * z rapidly followed by x actually sends Ctrl-x. That's bad.) - */ -#define IGNORE_MOD_TAP_INTERRUPT +#define TAPPING_TERM 150 /* USB Device descriptor parameter */ diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 7807eb2245..32c8826e02 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -19,15 +19,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( /* Qwerty */ KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - ALT_T(KC_A), KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), [NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, - ALT_T(KC_TAB), KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - _______ , KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______ , _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), [MOUS] = KEYMAP( /* Mouse and Media Keys */ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, -- cgit v1.2.3 From 39cbf1c221fbd6886bf098cb570785a110e1a781 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 15 Sep 2016 19:49:29 -0500 Subject: Fixed Batch Syntax on different versions of Windows --- util/Win_Check.bat | 110 ++++++++++++++++++++++++++--------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/util/Win_Check.bat b/util/Win_Check.bat index fcf452d42c..3fdb656f9c 100644 --- a/util/Win_Check.bat +++ b/util/Win_Check.bat @@ -19,7 +19,7 @@ set KEYMAP_CLEAN=atomic-pvc-clean :: ----------------------------------------------------------------------------- -if %1 == VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) +if /I "%1" EQU VERBOSE (goto :Verbose_Make) else (goto :Normal_Make) :Normal_Make set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE @@ -39,7 +39,7 @@ goto :Start_Report :: ----------------------------------------------------------------------------- -set header=CURRENT DIRECTORY & call :ReportHeader +set HEADER=CURRENT DIRECTORY & call :ReportHeader echo %CD%>>%REPORT_NAME% 2>&1 @@ -47,7 +47,7 @@ echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -set header=CURRENT PATHS & call :ReportHeader +set HEADER=CURRENT PATHS & call :ReportHeader for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1) @@ -55,83 +55,83 @@ echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -rem set header=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader +rem set HEADER=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader rem set>>%REPORT_NAME% 2>&1 rem echo.>>%REPORT_NAME% 2>&1 :: ----------------------------------------------------------------------------- -set header=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader +set HEADER=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader -set filename=make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion -set filename=git.exe & set version_cmd=--version & set version_find="git" & call :ReportVersion -set filename=cmp.exe & set version_cmd=--version & set version_find="cmp" & call :ReportVersion +set FILENAME=make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion +set FILENAME=git.exe & set VERSION_CMD=--version & set VERSION_FIND="git" & call :ReportVersion +set FILENAME=cmp.exe & set VERSION_CMD=--version & set VERSION_FIND="cmp" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader -set filename=avr-gcc.exe & set version_cmd=--version & set version_find="avr" & call :ReportVersion -set filename=avr-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=avr-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=avr-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=avr-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=avr-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=avr-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="avr" & call :ReportVersion +set FILENAME=avr-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=avr-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=avr-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=avr-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=avr-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader -set filename=arm-none-eabi-gcc.exe & set version_cmd=--version & set version_find="arm-none-eabi-gcc" & call :ReportVersion -set filename=arm-none-eabi-objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=arm-none-eabi-objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=arm-none-eabi-size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=arm-none-eabi-ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=arm-none-eabi-nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=arm-none-eabi-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="arm-none-eabi-gcc" & call :ReportVersion +set FILENAME=arm-none-eabi-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=arm-none-eabi-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=arm-none-eabi-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=arm-none-eabi-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=arm-none-eabi-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader -set filename=gcc.exe & set version_cmd=--version & set version_find="gcc" & call :ReportVersion -set filename=objcopy.exe & set version_cmd=--version & set version_find="GNU objcopy" & call :ReportVersion -set filename=objdump.exe & set version_cmd=--version & set version_find="GNU objdump" & call :ReportVersion -set filename=size.exe & set version_cmd=--version & set version_find="GNU size" & call :ReportVersion -set filename=ar.exe & set version_cmd=--version & set version_find="GNU ar" & call :ReportVersion -set filename=nm.exe & set version_cmd=--version & set version_find="GNU nm" & call :ReportVersion +set FILENAME=gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="gcc" & call :ReportVersion +set FILENAME=objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion +set FILENAME=objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion +set FILENAME=size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion +set FILENAME=ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion +set FILENAME=nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader +set HEADER=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader -set filename=dfu-programmer.exe & set version_cmd=--version & set version_find="dfu" & call :ReportVersion -set filename=batchisp.exe & set version_cmd=-version & set version_find="batchisp" & call :ReportVersion -set filename=dfu-util.exe & call :Report -set filename=teensy_loader_cli.exe & call :Report -set filename=hid_bootloader_cli.exe & call :Report -set filename=avrdude.exe & call :Report +set FILENAME=dfu-programmer.exe & set VERSION_CMD=--version & set VERSION_FIND="dfu" & call :ReportVersion +set FILENAME=batchisp.exe & set VERSION_CMD=-version & set VERSION_FIND="batchisp" & call :ReportVersion +set FILENAME=dfu-util.exe & call :Report +set FILENAME=teensy_loader_cli.exe & call :Report +set FILENAME=hid_bootloader_cli.exe & call :Report +set FILENAME=avrdude.exe & call :Report :: ----------------------------------------------------------------------------- -set header=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader -set filename=cppcheck.exe & call :Report -set filename=doxygen.exe & call :Report -set filename=gdb-config.exe & call :Report -set filename=wget.exe & call :Report -set filename=unzip.exe & call :Report +set HEADER=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader +set FILENAME=cppcheck.exe & call :Report +set FILENAME=doxygen.exe & call :Report +set FILENAME=gdb-config.exe & call :Report +set FILENAME=wget.exe & call :Report +set FILENAME=unzip.exe & call :Report :: ----------------------------------------------------------------------------- -set header=MINGW CHECK - OPTIONAL & call :ReportHeader +set HEADER=MINGW CHECK - OPTIONAL & call :ReportHeader if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1) echo.>>%REPORT_NAME% 2>&1 -set filename=mingw32-make.exe & set version_cmd=--version & set version_find="GNU Make" & call :ReportVersion +set FILENAME=mingw32-make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1) :: ----------------------------------------------------------------------------- -set header=MAKE CHECK & call :ReportHeader +set HEADER=MAKE CHECK & call :ReportHeader if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound) if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound) if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound) @@ -140,13 +140,13 @@ echo No Makfile Found.>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 -goto ContinueAfterMake +goto :ContinueAfterMake :MakeFound call :RunMake :ContinueAfterMake -goto ExitBatch +goto :ExitBatch :ExitBatch echo Done! @@ -163,11 +163,11 @@ exit /b echo Makfile Found.>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 - set header=MAKE CLEAN & call :ReportHeader + set HEADER=MAKE CLEAN & call :ReportHeader echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1 - set header=MAKE & call :ReportHeader + set HEADER=MAKE & call :ReportHeader echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1 @@ -178,14 +178,14 @@ exit /b :ReportHeader echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 - echo %header%>>%REPORT_NAME% 2>&1 + echo %HEADER%>>%REPORT_NAME% 2>&1 echo.>>%REPORT_NAME% 2>&1 exit /b :Report - echo Filename = %filename% >>%REPORT_NAME% 2>&1 + echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1 >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL + where %FILENAME% >>%REPORT_NAME% 2> NUL if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport) :EndReport @@ -194,13 +194,13 @@ exit /b exit /b :ReportVersion - echo Filename = %filename% >>%REPORT_NAME% 2>&1 + echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1 >%REPORT_NAME% 2>&1 - where %filename% >>%REPORT_NAME% 2> NUL + where %FILENAME% >>%REPORT_NAME% 2> NUL if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion) >%REPORT_NAME% 2>&1 - (%filename% %version_cmd% | find %version_find%) >>%REPORT_NAME% 2>&1 + (%FILENAME% %VERSION_CMD% | find %VERSION_FIND%) >>%REPORT_NAME% 2>&1 :EndReportVersion echo.>>%REPORT_NAME% 2>&1 -- cgit v1.2.3 From bbf06d516a2946816e2ad53798dac7ee901ad25b Mon Sep 17 00:00:00 2001 From: IBNobody Date: Thu, 15 Sep 2016 21:44:03 -0500 Subject: Added notes on vagrant file fixes, UPRINT --- doc/VAGRANT_GUIDE.md | 3 ++- readme.md | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/doc/VAGRANT_GUIDE.md b/doc/VAGRANT_GUIDE.md index c9958e16b5..439e78da7d 100644 --- a/doc/VAGRANT_GUIDE.md +++ b/doc/VAGRANT_GUIDE.md @@ -6,7 +6,8 @@ This project includes a Vagrantfile that will allow you to build a new firmware Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion). -*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. +*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest` + Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below. diff --git a/readme.md b/readme.md index 20be105dd7..ea20b5e017 100644 --- a/readme.md +++ b/readme.md @@ -72,9 +72,11 @@ Here are the steps 3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). 4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. 5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -6. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -7. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! -8. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it. +6. Open the `\util` folder. +7. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. +8. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! + +If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder. ### Mac If you're using [homebrew,](http://brew.sh/) you can use the following commands: @@ -278,11 +280,23 @@ This allows you to use the system and audio control key codes. `CONSOLE_ENABLE` -This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages. +This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). + +By default, all debug (*dprint*) print (*print*, *xprintf*), and user print (*uprint*) messages will be enabled. This will eat up a significant portion of the flash and may make the keyboard .hex file too big to program. + +To disable debug messages (*dprint*) and reduce the .hex file size, include `#define NO_DEBUG` in your `config.h` file. + +To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file. + +To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file. + +To see the text, open `hid_listen` and enjoy looking at your printed messages. + +**NOTE:** Do not include *uprint* messages in anything other than your keymap code. It must not be used within the QMK system framework. Otherwise, you will bloat other people's .hex files. `COMMAND_ENABLE` -TODO +This enables magic commands, typically fired with the default magic key combo `LSHIFT+RSHIFT+KEY`. Magic commands include turning on debugging messages (`MAGIC+D`) or temporarily toggling NKRO (`MAGIC+N`). `SLEEP_LED_ENABLE` @@ -290,7 +304,7 @@ Enables your LED to breath while your computer is sleeping. Timer1 is being used `NKRO_ENABLE` -This allows for n-key rollover (default is 6) to be enabled. It is off by default, but can be forced by adding `#define FORCE_NKRO` to your config.h. +This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if `NKRO_ENABLE` is set. NKRO can be forced by adding `#define FORCE_NKRO` to your config.h or by binding `MAGIC_TOGGLE_NKRO` to a key and then hitting the key. `BACKLIGHT_ENABLE` -- cgit v1.2.3 From cc7604d11670cf3155d53f0019557b249b1192c0 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Fri, 16 Sep 2016 17:15:33 -0400 Subject: Add breathing, as initial implementation with the RAISE/LOWER keys. And throw in extra macros to shorten keymaps --- keyboards/planck/keymaps/cbbrowne/config.h | 5 +++-- keyboards/planck/keymaps/cbbrowne/keymap.c | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/config.h b/keyboards/planck/keymaps/cbbrowne/config.h index 58cd2cc5bc..1e04ba61d7 100644 --- a/keyboards/planck/keymaps/cbbrowne/config.h +++ b/keyboards/planck/keymaps/cbbrowne/config.h @@ -3,6 +3,9 @@ #include "../../config.h" +#define LEADER_TIMEOUT 300 +#define BACKLIGHT_BREATHING + /* cbbrowne user configuration */ #define randadd 53 @@ -16,5 +19,3 @@ #endif - - diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 26a99a4e74..7f1601af75 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -93,6 +93,7 @@ enum macro_id { #define CTLENTER MT(MOD_RCTL, KC_ENT) #define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) #define ALTRIGHT MT(MOD_LALT, KC_RGHT) +#define MVERSION M(M_VERSION) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -116,16 +117,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, + }, [_KEYPAD] = { /* Key Pad */ - {KC_ESC, USERNAME, M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_ESC, USERNAME, MVERSION, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, {KC_LCTL, RANDDIG, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, {KC_LSFT, RANDALP, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, - {BL_STEP, ROT_LED, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} + {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} }, [_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */ - { ROT_LED, USERNAME, M(M_VERSION), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {ROT_LED,USERNAME,MVERSION, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, {_______, RANDALP, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } @@ -198,6 +199,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(_RAISE); +#ifdef BACKLIGHT_ENABLE + breathing_speed_set(2); + breathing_pulse(); +#endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else @@ -210,6 +215,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(_LOWER); +#ifdef BACKLIGHT_ENABLE + breathing_speed_set(2); + breathing_pulse(); +#endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else -- cgit v1.2.3 From 602b058b9e1ebbe043754e39007cf01427872770 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 17 Sep 2016 19:40:56 +0200 Subject: - Added capslock led for KC60 keyboard (based on gitbug.com/jpec/kc60 works) --- keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c | 103 +++++++++++++++++++++ keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md | 11 +++ 2 files changed, 114 insertions(+) create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c new file mode 100644 index 0000000000..0c952327b9 --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c @@ -0,0 +1,103 @@ +// 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 "kc60.h" + +#define _QWERTY 0 +#define _FNCAPS 1 +#define _FNRIGHTSHIFT 2 + +// Fillers to make layering more clear +#define ______ KC_TRNS +#define XXXXXXX KC_NO + +// Func macro definitions. +#define S_LED FUNC(0) +#define S_LEDI FUNC(1) +#define S_LEDD FUNC(2) + +// Enable these functions using FUNC(n) macro. +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_BACKLIGHT_TOGGLE(), + [1] = ACTION_BACKLIGHT_INCREASE(), + [2] = ACTION_BACKLIGHT_DECREASE() + }; + +/* + * | | | + * | | | + * | | | + * | | | + * | | + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 | + * |-----------------------------------------------------------------------------------------+ + * | FN1 | Gui | Alt | Space | AltGr | Left | Down | Right | + * `-----------------------------------------------------------------------------------------' + */ + [0] = KEYMAP( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ + LT(_FNCAPS, KC_CAPS), KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ + ), + +/* Layer 1 + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | Psc | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Prev | Stop | Next | + * `-----------------------------------------------------------------------------------------' + */ + [_FNCAPS] = KEYMAP( /* Layer 1 */ + ______, 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_INS, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \ + ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \ + ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \ + ), + +/* Layer 2 + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | PgUp | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | Home | PgDown| End | + * `-----------------------------------------------------------------------------------------' + */ + [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \ + ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \ + ), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + return MACRO_NONE; +}; diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md new file mode 100644 index 0000000000..c7850c37ce --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md @@ -0,0 +1,11 @@ +# Dbroqua HHKB like Layout + +* Online keyboard layout editor: *Coming soon* +* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37 +* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua_hhkb_like make dfu +``` \ No newline at end of file -- cgit v1.2.3 From 3e128552d92714ff86d4378b4e3acccc62d6f132 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 18 Sep 2016 11:48:47 +0200 Subject: Update the ergodox/algernon keymap to v1.7 Overall changes =============== * The number row has been completely rearranged on both the **Base** and the **ADORE** layers. * The number/function key behavior was changed: function keys are now on the **Media**. * The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the **Base** and **ADORE** layers. * The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. * A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. ADORE ===== * `Y` and `X` have been swapped again. Media/Navigation layer ====================== * The function keys are now on this layer. * Mouse keys have been removed. * Media start/stop/prev/next have been removed. * `Print screen` has been removed. * There is only one screen lock key now. Heatmap ======= * Fixed a few issues in the finger-stats calculation. * The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. * The heatmap tool will now colorize the stats by default. * The periodic stats are now printed in a more compact format. Tools ===== * Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. * Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. * A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/Makefile | 4 +- .../keymaps/algernon/images/adore-layer.png | Bin 93893 -> 97225 bytes .../ergodox/keymaps/algernon/images/base-layer.png | Bin 95204 -> 102142 bytes .../ergodox/keymaps/algernon/images/heatmap.png | Bin 137912 -> 139351 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 381 ++++++++++----------- keyboards/ergodox/keymaps/algernon/readme.md | 76 ++-- .../algernon/tools/heatmap-layout.ADORE.json | 132 ++----- .../algernon/tools/heatmap-layout.Dvorak.json | 129 ++----- .../ergodox/keymaps/algernon/tools/hid-commands | 61 ++++ .../ergodox/keymaps/algernon/tools/layer-notify | 12 + .../keymaps/algernon/tools/log-to-heatmap.py | 184 +++++++--- .../ergodox/keymaps/algernon/tools/max-focused | 5 - .../ergodox/keymaps/algernon/tools/text-to-log.py | 107 ++++++ 13 files changed, 616 insertions(+), 475 deletions(-) create mode 100755 keyboards/ergodox/keymaps/algernon/tools/hid-commands create mode 100755 keyboards/ergodox/keymaps/algernon/tools/layer-notify delete mode 100755 keyboards/ergodox/keymaps/algernon/tools/max-focused create mode 100755 keyboards/ergodox/keymaps/algernon/tools/text-to-log.py diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile index 7c2b3ad97c..699add3dda 100644 --- a/keyboards/ergodox/keymaps/algernon/Makefile +++ b/keyboards/ergodox/keymaps/algernon/Makefile @@ -7,7 +7,7 @@ CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes KEYLOGGER_ENABLE ?= yes UCIS_ENABLE = yes -MOUSEKEY_ENABLE ?= yes +MOUSEKEY_ENABLE = no AUTOLOG_ENABLE ?= no @@ -25,6 +25,8 @@ OPT_DEFS += -DKEYLOGGER_ENABLE CONSOLE_ENABLE = yes endif +OPT_DEFS += -DUSER_PRINT + KEYMAP_VERSION = $(shell \ if [ -d "${KEYMAP_PATH}/.git" ]; then \ cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index 3d0a5fb20c..b611fbc42a 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png index 7ea57aae38..2a981a4706 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/heatmap.png b/keyboards/ergodox/keymaps/algernon/images/heatmap.png index 356035e0a6..4f55c5adff 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/heatmap.png and b/keyboards/ergodox/keymaps/algernon/images/heatmap.png differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 9f476d8a6b..248a0ed303 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -8,7 +8,6 @@ #include "debug.h" #include "action_layer.h" #include "action_util.h" -#include "mousekey.h" #include "timer.h" #include "keymap_plover.h" #include "eeconfig.h" @@ -36,18 +35,6 @@ enum { A_PLVR, A_MPN, - // Function / number keys - KF_1, // 1, F1 - KF_2, // 2, F2 - KF_3, // ... - KF_4, - KF_5, - KF_6, - KF_7, - KF_8, - KF_9, - KF_10, - // Application select keys APP_SLK, // Slack APP_EMCS, // Emacs @@ -55,17 +42,6 @@ enum { APP_CHRM, // Chrome APP_MSIC, // Music - // Diagonal mouse movement - A_MUL, - A_MUR, - A_MDL, - A_MDR, - - // Mouse acceleration - A_ACL0, - A_ACL1, - A_ACL2, - // Hungarian layer keys HU_AA, // Á HU_OO, // Ó @@ -76,6 +52,18 @@ enum { HU_UE, // Ü HU_OEE, // Ő HU_UEE, // Ű + + // number/symbol keys + A_1, // 1 + A_2, // 2 + A_3, // ... + A_4, + A_5, + A_6, + A_7, + A_8, + A_9, + A_0, }; /* Fn keys */ @@ -95,7 +83,9 @@ enum { CT_CLN = 0, CT_TA, CT_LBP, - CT_RBP + CT_RBP, + CT_TMUX, + CT_TPS, }; /* States & timers */ @@ -114,6 +104,8 @@ bool log_enable = false; bool time_travel = false; +static uint8_t is_adore = 0; + /* The Keymap */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -121,13 +113,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Next/Prev | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | F12 | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | F12 | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | - * |-----------+------+------+------+------+------| : | | - |------+------+------+------+------+-----------| - * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | + * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------| + * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' @@ -141,22 +133,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [BASE] = KEYMAP( // left hand - M(A_MPN) ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP) -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_CLN) -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) + M(A_MPN) ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11 +,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP) +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_TMUX) +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_F12 ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_MINS ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_F12 ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) + ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL ,KC_LEAD @@ -166,15 +158,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Adore layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Play/Pause| 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | F12 | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | F12 | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | `~ | Y | W | G | L | M | ( | | ) | F | H | C | P | X | \ | + * | `~ | X | W | G | L | M | ( | | ) | F | H | C | P | Y | \ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Z | Q | ' | , | . | : | | - | B | K | V | J | / | | + * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------| + * | | Z | Q | ' | , | . | | | pane | B | K | V | J | / | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | + * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | LAlt | GUI | | MDIA | Del | @@ -186,22 +178,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [ADORE] = KEYMAP( // left hand - KC_MPLY ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,KC_GRV ,KC_Y ,KC_W ,KC_G ,KC_L ,KC_M ,TD(CT_LBP) -,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U -,KC_NO ,KC_Z ,KC_Q ,KC_QUOT,KC_COMM,KC_DOT ,TD(CT_CLN) -,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + KC_MPLY ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11 +,KC_GRV ,KC_X ,KC_W ,KC_G ,KC_L ,KC_M ,TD(CT_LBP) +,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U +,KC_NO ,KC_Z ,KC_Q ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX) +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_F12 ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_X ,KC_BSLS - ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,KC_MINS ,KC_B ,KC_K ,KC_V ,KC_J ,KC_SLSH ,KC_NO - ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_F12 ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) + ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL + ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_J ,KC_SLSH ,KC_NO + ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL ,F(F_HUN) @@ -350,45 +342,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 5: Navigation & Media layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | + * | | F9 | F7 | F5 | F3 | F1 | | |ScrLCK| F10 | F2 | F4 | F6 | F8 | | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| - * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| - * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | - * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| - * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | Mute | VlUp | | BASE | MClk | + * | Mute | VlUp | | BASE | | * ,------|------|------| |------+------+------. - * | | | VlDn | | Prev |Left |Right | - * | SPC | Enter|------| |------| Click| Click| - * | | | ESC | | Next | | | + * | | | VlDn | | | | | + * | | |------| |------| | | + * | | | | | | | | * `--------------------' `--------------------' */ [NMDIA] = KEYMAP( // left hand - M(A_ACL0) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) -,M(A_ACL1) ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO -,M(A_ACL2) ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO -,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO + KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,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 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_MUTE ,KC_VOLU ,KC_VOLD - ,KC_SPC,KC_ENTER,KC_ESC + ,KC_NO ,KC_NO ,KC_TRNS // right hand - ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR - ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO - ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP + ,LGUI(KC_L),KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,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 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_TRNS ,KC_MS_BTN3 - ,KC_MPRV - ,KC_MNXT ,KC_BTN1 ,KC_BTN2 + ,KC_TRNS ,KC_NO + ,KC_NO + ,KC_NO ,KC_NO ,KC_NO ), /* Keymap 6: Steno for Plover @@ -514,40 +506,62 @@ static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_c return MACRO_NONE; } -static bool from_appsel; +static void ang_handle_num_row(uint8_t id, keyrecord_t *record) { + uint8_t idx = id - A_1; + uint8_t kc; + static bool shifted[10]; -static void ang_handle_kf (keyrecord_t *record, uint8_t id) -{ - uint8_t code = id - KF_1; + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + if (record->event.pressed) + shifted[idx] = true; + } - if (record->event.pressed) { - kf_timers[code] = timer_read (); + if (!shifted[idx]) { + kc = idx + KC_1; } else { - uint8_t kc_base; - - if (from_appsel) { - from_appsel = false; + switch (id) { + case A_8: + case A_9: + shifted[idx] = false; return; - } - if (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM) { - // Long press - kc_base = KC_F1; - } else { - kc_base = KC_1; + case A_7: + kc = KC_2; + break; + case A_5: + kc = KC_8; + break; + case A_3: + kc = KC_6; + break; + case A_1: + kc = KC_4; + break; + + case A_0: + kc = KC_5; + break; + case A_2: + kc = KC_1; + break; + case A_4: + kc = KC_3; + break; + case A_6: + kc = KC_7; + break; } - kf_timers[code] = 0; - code += kc_base; + } - register_code (code); - unregister_code (code); + if (record->event.pressed) { + register_code (kc); + } else { + unregister_code (kc); + shifted[idx] = false; } } -static struct { - uint8_t idx; -} m_accel_state; - const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { @@ -592,70 +606,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case HU_UEE: return ang_do_hun (record, KC_EQL, KC_U); -#if MOUSEKEY_ENABLE - /* Mouse movement */ - case A_MUL: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MUR: - if (record->event.pressed) { - mousekey_on(KC_MS_UP); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_UP); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_MDL: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_LEFT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_LEFT); - } - mousekey_send(); - break; - - case A_MDR: - if (record->event.pressed) { - mousekey_on(KC_MS_DOWN); - mousekey_on(KC_MS_RIGHT); - } else { - mousekey_off(KC_MS_DOWN); - mousekey_off(KC_MS_RIGHT); - } - mousekey_send(); - break; - - case A_ACL0 ... A_ACL2: - if (record->event.pressed) { - uint8_t idx = id - A_ACL0; - if (m_accel_state.idx == id) { - mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); - m_accel_state.idx = 0; - } else { - if (m_accel_state.idx) { - mousekey_off(m_accel_state.idx - A_ACL0 + KC_ACL0); - m_accel_state.idx = 0; - } - mousekey_on(KC_ACL0 + idx); - m_accel_state.idx = id; - } - } - break; -#endif - /* Plover base */ case A_PLVR: toggle_steno(record->event.pressed); @@ -667,7 +617,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) register_code (KC_LGUI); if (record->tap.count && !record->tap.interrupted) { if (record->tap.count >= 2) { - register_code (KC_W); layer_on (APPSEL); set_oneshot_layer (APPSEL, ONESHOT_START); } @@ -678,7 +627,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } else { if (record->tap.count >= 2) { - unregister_code (KC_W); clear_oneshot_layer_state (ONESHOT_PRESSED); } gui_timer = timer_read (); @@ -686,43 +634,39 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case APP_SLK: - from_appsel = true; - return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_slack\n"); + break; case APP_EMCS: - from_appsel = true; - return MACRODOWN(T(G), T(N), T(U), T(SPC), T(E), T(M), T(A), T(C), T(S), T(SPC), T(2), T(4), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_emacs\n"); + break; case APP_TERM: - from_appsel = true; - if (!record->event.pressed) { - register_code(KC_ESC); - unregister_code(KC_ESC); - wait_ms(TAPPING_TERM + 25); - register_code(KC_DEL); - unregister_code(KC_DEL); - } + if (record->event.pressed) + uprintf("CMD:appsel_term\n"); break; case APP_CHRM: - from_appsel = true; - return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_chrome\n"); + break; case APP_MSIC: - from_appsel = true; - return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); + if (record->event.pressed) + uprintf("CMD:appsel_music\n"); + break; - /* Function keys */ - case KF_1 ... KF_10: - ang_handle_kf (record, id); + // number row and symbols + case A_1 ... A_0: + ang_handle_num_row(id, record); break; } return MACRO_NONE; }; -static uint8_t is_adore = 0; - // Runs just one time when the keyboard initializes. void matrix_init_user(void) { uint8_t dl; @@ -805,6 +749,36 @@ static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data layer_off (ARRW); } +static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code(KC_LALT); + register_code(KC_SPC); + unregister_code(KC_SPC); + unregister_code(KC_LALT); + } else { + register_code(KC_LCTL); + register_code(KC_A); + unregister_code(KC_A); + unregister_code(KC_LCTL); + } +} + +static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) { + uint8_t kc = KC_P; + + if (state->count >= 2) { + kc = KC_Z; + } + + register_code(KC_LALT); + register_code(KC_SPC); + unregister_code(KC_SPC); + unregister_code(KC_LALT); + + register_code(kc); + unregister_code(kc); +} + qk_tap_dance_action_t tap_dance_actions[] = { [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN) ,[CT_TA] = { @@ -813,12 +787,23 @@ qk_tap_dance_action_t tap_dance_actions[] = { } ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN) ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN) + ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished) + ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select) }; // Runs constantly in the background, in a loop. void matrix_scan_user(void) { + static uint32_t prev_layer_state; uint8_t layer = biton32(layer_state); bool is_arrow = false; + static char *layer_lookup[] = {"Dvorak", "ADORE", "Arrows", "AppSel", "Hungarian", "Nav/Media", "Plover"}; + + if (layer_state != prev_layer_state) { + prev_layer_state = layer_state; + if (layer_lookup[layer]) + uprintf("LAYER: %s\n", layer_lookup[layer]); + } + if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) unregister_code (KC_LGUI); @@ -929,18 +914,7 @@ void matrix_scan_user(void) { } SEQ_TWO_KEYS (KC_W, KC_M) { - register_code (KC_LALT); - register_code (KC_F2); - unregister_code (KC_F2); - unregister_code (KC_LALT); - - wait_ms (1000); - - ang_tap (KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0); - register_code (KC_LGUI); - register_code (KC_UP); - unregister_code (KC_UP); - unregister_code (KC_LGUI); + uprintf("CMD:wm\n"); } SEQ_ONE_KEY (KC_A) { @@ -999,8 +973,11 @@ const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE bool process_record_user (uint16_t keycode, keyrecord_t *record) { #if KEYLOGGER_ENABLE if (log_enable) { - xprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col, - record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak"); + uint8_t layer = biton32(layer_state); + + if ((layer == ADORE) || (layer == BASE)) + uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col, + record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak"); } #endif @@ -1047,8 +1024,8 @@ void qk_ucis_symbol_fallback (void) { for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) { uint8_t code; - if (qk_ucis_state.codes[i] > KF_1) - code = qk_ucis_state.codes[i] - KF_1 + KC_1; + if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0))) + code = qk_ucis_state.codes[i] - M(A_1) + KC_1; else code = qk_ucis_state.codes[i]; register_code(code); diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index 5e7adb3320..f15b676528 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -18,12 +18,11 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs] * [Layouts](#layouts) - [Base layer](#base-layer) - [ADORE layer](#adore-layer) - - [Hungarian layer](#hungarian-layer) - - [Navigation and media layer](#navigation-and-media-layer) - [Steno layer](#steno-layer) - [LED states](#led-states) * [Tools](#tools) - [Heatmap](#heatmap) + - [Layer notification](#layer-notification) * [Special features](#special-features) - [Unicode Symbol Input](#unicode-symbol-input) * [Building](#building) @@ -39,7 +38,7 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs] At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave: -* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers. +* The number row is the same as in the [ADORE](#adore-layer) layer. The function keys are on the **Media** layer. * The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. * The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. @@ -57,28 +56,16 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest - `LEAD d` toggles logging keypress positions to the HID console. - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. - `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode. + +The symbols on the front in the image above have the same color as the key that activates them, with the exception of the **Arrow** layer, which is just black on the front. ## ADORE layer [![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a) -While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen. +My experimental layout, that I keep tweaking. No full description here, because things are very much in flux. - [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm - -Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name. - -## Hungarian layer - -[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) - -On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. - -## Navigation and media layer - -[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) - -This layer is primarily for navigating with the cursor or the mouse, and some media things. +Note that the **HUN** layer does not work well with ADORE: it still has the same layout as on the [Base](#base-layer) layer. This will remain until ADORE becomes the default. ## Steno layer @@ -93,8 +80,8 @@ The primary purpose of the LEDs is to show the modifier status, a secondary, to For the layers, the following rules apply: * When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. -* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. -* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. +* When the **Hungarian** layer is active, the *green* and *blue* LEDs are on. +* When the **Media** layer is active, the *red* and *green* ones are on. * When the **ARROW** layer is active, the *red* and *blue* ones are on. * For the [Steno layer](#steno-layer), all LEDs will be turned on. @@ -129,6 +116,10 @@ The generated heatmap looks somewhat like this: ![Heatmap](images/heatmap.png) +## Layer notification + +There is a very small tool in `tools/layer-notify`, that listens to the HID console, looking for layer change events, and pops up a notification for every detected change. It is a very simple tool, mainly serving as an example. + # Building To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this: @@ -156,6 +147,43 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the # Changelog +## v1.7 + +*2016-09-18* + +### Overall changes + +* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers. +* The number/function key behavior was changed: function keys are now on the **Media**. +* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers. +* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. +* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. + +### ADORE + +* `Y` and `X` have been swapped again. + +### Media/Navigation layer + +* The function keys are now on this layer. +* Mouse keys have been removed. +* Media start/stop/prev/next have been removed. +* `Print screen` has been removed. +* There is only one screen lock key now. + +### Heatmap + +* Fixed a few issues in the finger-stats calculation. +* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. +* The heatmap tool will now colorize the stats by default. +* The periodic stats are now printed in a more compact format. + +### Tools + +* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. +* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. +* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. + ## v1.6 *2016-08-24* @@ -174,7 +202,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the ### Miscellaneous changes * `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. -* The mouse acceleration keys on the [Navigation and Media](#navigation-and-media-layer) layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. +* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. * When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. ### Heatmap @@ -221,7 +249,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the * The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. * The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. * The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. -* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer. +* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer. * `LEAD v` types the firmware version, and the keymap version. * On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. * The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. @@ -240,7 +268,7 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the - `-` on the left half was replaced by `Tab`. - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - `:` now inputs `;` when shifted. -* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. +* `ESC` cancels the **Hungarian** layer too, not just modifiers. ## v1.0 diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json index 4dfa877a78..502d1e6ea4 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json @@ -13,18 +13,15 @@ [ { "x": 3.5, - "c": "#a7d0db", "fa": [ 0, 0, 2 ] }, - "#\n3\nF3", + "*\n5\nF5", { "x": 10.5, - "c": "#a7d0db", - "t": "#000000", "a": 4, "fa": [ 0, @@ -32,54 +29,44 @@ 2 ] }, - "*\n8\nF8" + "#\n4\nF4" ], [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, - "@\n2\nF2", + "@\n7\nF7", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, - "$\n4\nF4", + "^\n3\nF3", { "x": 8.5 }, - "&\n7\nF7", + "!\n2\nF2", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, - "(\n9\nF9" + "&\n6\nF6" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, - "%\n5\nF5", + "$\n1\nF1", { - "c": "#f9cd31", "a": 7, - "f": 2 + "f": 3 }, - "STENO", + "F11", { "x": 4.5, "f": 3 }, "F12", { - "c": "#7adabd", "a": 4, "f": 3, "fa": [ @@ -88,19 +75,17 @@ 2 ] }, - "^\n6\nF6" + "%\n0\nF10" ], [ { "y": -0.875, - "c": "#ffb2d2", "f": 9, "a": 6, "w": 1.5 }, "\n\n", { - "t": "#0d0d0b", "f": 3, "a": 4, "fa": [ @@ -109,23 +94,21 @@ 2 ] }, - "!\n1\nF1", + " \n9\nF9", { "x": 14.5 }, - ")\n0\nF10", + " \n8\nF8", { "a": 7, "w": 1.5 }, - "F11" + "STENO" ], [ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "G", @@ -138,15 +121,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 6 }, "W", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 6 }, "L", @@ -155,22 +134,17 @@ }, "H", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "P" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "M", { - "c": "#93c9b7", "a": 4, "fa": [0, 0, 0], "h": 1.5 @@ -182,7 +156,6 @@ }, "}\n)\n]", { - "c": "#7adabd", "a": 6 }, "F" @@ -190,24 +163,21 @@ [ { "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", "f": 3, "a": 4, "w": 1.5 }, "\n\n~\n`", { - "c": "#ffb2d2", "a": 6, "f": 3 }, - "Y", + "X", { "x": 14.5, "a": 6 }, - "X", + "Y", { "a": 4, "w": 1.5 @@ -218,8 +188,6 @@ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "E", @@ -231,15 +199,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "O", { "x": 1, - "c": "#7adabd", - "t": "#000000", "n": true }, "I", @@ -249,18 +213,14 @@ }, "R", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "N" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "U", { @@ -271,8 +231,6 @@ [ { "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", "fa": [ 6 ], @@ -308,22 +266,21 @@ { "y": -0.625, "x": 6.5, - "c": "#93c9b7", - "t": "#000000", + "a": 7, + "f": 9, "h": 1.5 }, - ";\n:", + "", { "x": 4.5, "h": 1.5 }, - "_\n-" + "" ], [ { "y": -0.75, "x": 3.5, - "c": "#a7d0db", "a": 4, "f": 3 }, @@ -339,15 +296,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 6 }, "Q", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 4 }, "<\n,", @@ -357,9 +310,7 @@ }, "K", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "J" ], @@ -367,8 +318,6 @@ { "y": -0.875, "x": 5.5, - "c": "#7adabd", - "t": "#000000", "a": 4 }, ">\n.", @@ -381,15 +330,12 @@ [ { "y": -0.875, - "c": "#ffb07b", "f": 9, "w": 1.5, "g": true }, "", { - "c": "#ffb2d2", - "t": "#0d0d0b", "a": 6, "f": 3, "g": false @@ -401,8 +347,6 @@ }, "?\n/", { - "c": "#ffb07b", - "t": "#000000", "f": 9, "g": true, "w": 1.5, @@ -414,7 +358,6 @@ { "y": -0.375, "x": 3.5, - "c": "#d9dae0", "g": true, "a": 7, "f": 3 @@ -433,18 +376,16 @@ "", { "x": 1, - "c": "#d4872a", - "g": true, + "g": false, "a": 5 }, - "", + ";\n:", { "x": 8.5 }, - "", + "_\n-", { "x": 1, - "c": "#d9dae0", "g": true, "a": 7 }, @@ -472,7 +413,6 @@ "ry": 4.25, "y": -1, "x": 1, - "c": "#f9cd31", "g": false }, "Alt", @@ -489,7 +429,6 @@ ], [ { - "c": "#d4872a", "a": 7, "f": 9, "h": 2 @@ -500,15 +439,13 @@ }, "", { - "c": "#f9cd31", "f": 3 }, "Ctrl" ], [ { - "x": 2, - "c": "#e26757" + "x": 2 }, "ESC" ], @@ -518,7 +455,6 @@ "rx": 13, "y": -1, "x": -3, - "c": "#f9cd31", "f": 2 }, "MEDIA", @@ -531,7 +467,6 @@ }, "HUN", { - "c": "#d4872a", "f": 9, "h": 2 }, @@ -545,7 +480,6 @@ [ { "x": -3, - "c": "#f9cd31", "f": 2 }, "LEAD" diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json index 1248d36af7..5b4ca06c30 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json @@ -13,18 +13,15 @@ [ { "x": 3.5, - "c": "#a7d0db", "fa": [ 0, 0, 2 ] }, - "#\n3\nF3", + "*\n5\nF5", { "x": 10.5, - "c": "#a7d0db", - "t": "#000000", "a": 4, "fa": [ 0, @@ -32,54 +29,44 @@ 2 ] }, - "*\n8\nF8" + "#\n4\nF4" ], [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, - "@\n2\nF2", + "@\n7\nF7", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, - "$\n4\nF4", + "^\n3\nF3", { "x": 8.5 }, - "&\n7\nF7", + "!\n2\nF2", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, - "(\n9\nF9" + "&\n6\nF6" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, - "%\n5\nF5", + "$\n1\nF1", { - "c": "#f9cd31", "a": 7, - "f": 2 + "f": 3 }, - "STENO", + "F11", { "x": 4.5, "f": 3 }, "F12", { - "c": "#7adabd", "a": 4, "f": 3, "fa": [ @@ -88,12 +75,11 @@ 2 ] }, - "^\n6\nF6" + "%\n0\nF10" ], [ { "y": -0.875, - "c": "#ffb2d2", "f": 6, "a": 6, "w": 1.5 @@ -101,7 +87,6 @@ "\n\n", { "f": 3, - "t": "#0d0d0b", "a": 4, "fa": [ 0, @@ -110,23 +95,21 @@ ] }, - "!\n1\nF1", + " \n9\nF9", { "x": 14.5 }, - ")\n0\nF10", + " \n8\nF8", { "a": 7, "w": 1.5 }, - "F11" + "STENO" ], [ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 4 }, ">\n.", @@ -140,15 +123,11 @@ { "y": -0.875, "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b", "a": 4 }, "<\n,", { "x": 1, - "c": "#7adabd", - "t": "#000000", "a": 6 }, "P", @@ -157,22 +136,17 @@ }, "G", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "R" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "Y", { - "c": "#93c9b7", "a": 4, "h": 1.5 }, @@ -183,7 +157,6 @@ }, "}\n)\n]", { - "c": "#7adabd", "a": 6 }, "F" @@ -191,14 +164,12 @@ [ { "y": -0.875, - "c": "#ffb07b", - "t": "#0d0d0b", "f": 3, + "a": 4, "w": 1.5 }, "\n\n~\n`", { - "c": "#ffb2d2", "a": 4, "f": 3 }, @@ -218,8 +189,6 @@ { "y": -0.375, "x": 3.5, - "c": "#a7d0db", - "t": "#000000", "a": 6 }, "E", @@ -231,15 +200,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "O", { "x": 1, - "c": "#7adabd", - "t": "#000000", "n": true }, "U", @@ -249,18 +214,14 @@ }, "H", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "N" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "I", { @@ -271,8 +232,6 @@ [ { "y": -0.875, - "c": "#ffb2d2", - "t": "#0d0d0b", "fa": [ 6 ], @@ -308,23 +267,22 @@ { "y": -0.625, "x": 6.5, - "c": "#93c9b7", - "t": "#000000", "a": 7, + "f": 9, "h": 1.5 }, - "(", + "", { "x": 4.5, "h": 1.5 }, - ")" + "" ], [ { "y": -0.75, "x": 3.5, - "c": "#a7d0db", + "f": 3, "a": 6 }, "J", @@ -336,15 +294,11 @@ [ { "y": -0.875, - "x": 2.5, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 2.5 }, "Q", { - "x": 1, - "c": "#7adabd", - "t": "#000000" + "x": 1 }, "K", { @@ -352,18 +306,14 @@ }, "M", { - "x": 1, - "c": "#bfbad1", - "t": "#0d0d0b" + "x": 1 }, "V" ], [ { "y": -0.875, - "x": 5.5, - "c": "#7adabd", - "t": "#000000" + "x": 5.5 }, "X", { @@ -374,14 +324,11 @@ [ { "y": -0.875, - "c": "#ffb07b", "f": 9, "w": 1.5 }, "\n\n", { - "c": "#ffb2d2", - "t": "#0d0d0b", "a": 4, "f": 3 }, @@ -392,8 +339,6 @@ }, "Z", { - "c": "#ffb07b", - "t": "#000000", "f": 9, "w": 1.5 }, @@ -403,7 +348,6 @@ { "y": -0.375, "x": 3.5, - "c": "#d9dae0", "g": true, "a": 7, "f": 3 @@ -422,7 +366,6 @@ "", { "x": 1, - "c": "#d4872a", "g": false, "a": 5 }, @@ -433,7 +376,6 @@ "_\n-", { "x": 1, - "c": "#d9dae0", "g": true, "a": 7 }, @@ -461,7 +403,6 @@ "ry": 4.25, "y": -1, "x": 1, - "c": "#f9cd31", "g": false }, "Alt", @@ -478,7 +419,6 @@ ], [ { - "c": "#d4872a", "a": 7, "f": 9, "h": 2 @@ -489,15 +429,13 @@ }, "", { - "c": "#f9cd31", "f": 3 }, "Ctrl" ], [ { - "x": 2, - "c": "#e26757" + "x": 2 }, "ESC" ], @@ -507,7 +445,6 @@ "rx": 13, "y": -1, "x": -3, - "c": "#f9cd31", "f": 2 }, "MEDIA", @@ -520,7 +457,6 @@ }, "LEAD", { - "c": "#d4872a", "f": 9, "h": 2 }, @@ -534,7 +470,6 @@ [ { "x": -3, - "c": "#f9cd31", "f": 2 }, "HUN" diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands new file mode 100755 index 0000000000..f3b83cf6d1 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/hid-commands @@ -0,0 +1,61 @@ +#!/bin/bash +set -e + +cmd_wm () { + WIN="$(xdotool getactivewindow)" + wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz + xdotool windowsize ${WIN} 100% 100% + wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz +} + +_cmd_appsel () { + wmctrl -x -a $1 || true + xdotool key Escape +} + +cmd_appsel_music () { + wmctrl -x -a rhythmbox || wmctrl -x -a spotify || true + xdotool key Escape +} + +cmd_appsel_slack () { + _cmd_appsel slack +} + +cmd_appsel_emacs () { + _cmd_appsel emacs24 +} + +cmd_appsel_term () { + _cmd_appsel gnome-terminal +} + +cmd_appsel_chrome () { + _cmd_appsel chromium +} + +cmd_help () { + cat </dev/null 2>&1; then + cmd_${cmd} + fi +done + + diff --git a/keyboards/ergodox/keymaps/algernon/tools/layer-notify b/keyboards/ergodox/keymaps/algernon/tools/layer-notify new file mode 100755 index 0000000000..627c2861ef --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/layer-notify @@ -0,0 +1,12 @@ +#!/bin/sh +HL="${HID_LISTEN:-$HOME/src/ext/hid_listen/hid_listen}" + +sudo "${HL}" | grep --line-buffered LAYER: | \ +(while read line; do + case $line in + LAYER:*) + layer="$(echo $(echo $line | cut -d: -f2-))" + notify-send -i mark-location-symbolic "Switched to layer: $layer" + ;; + esac + done) diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py index 68585843be..09c737646c 100755 --- a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py +++ b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py @@ -1,12 +1,15 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import json import os import sys import re import argparse +import time from math import floor from os.path import dirname +from subprocess import Popen, PIPE, STDOUT +from blessings import Terminal class Heatmap(object): coords = [ @@ -33,7 +36,7 @@ class Heatmap(object): [ # Row 4 [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], - [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], + [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], [], [], [], [] ], [ # Row 5 @@ -56,11 +59,13 @@ class Heatmap(object): def set_attr(orig, new): return new - def set_bg(self, (block, n), color): + def set_bg(self, coords, color): + (block, n) = coords self.set_attr_at(block, n, "c", self.set_attr, color) #self.set_attr_at(block, n, "g", self.set_attr, False) - def set_tap_info(self, (block, n), count, cap): + def set_tap_info(self, coords, count, cap): + (block, n) = coords def _set_tap_info(o, _count, _cap): ns = 4 - o.count ("\n") return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100) @@ -87,8 +92,8 @@ class Heatmap(object): g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] - r, g, b = [x * 255 for x in r, g, b] - return "#%02x%02x%02x" % (r, g, b) + r, g, b = [x * 255 for x in (r, g, b)] + return "#%02x%02x%02x" % (int(r), int(g), int(b)) def __init__(self, layout): self.log = {} @@ -96,7 +101,8 @@ class Heatmap(object): self.max_cnt = 0 self.layout = layout - def update_log(self, (c, r)): + def update_log(self, coords): + (c, r) = coords if not (c, r) in self.log: self.log[(c, r)] = 0 self.log[(c, r)] = self.log[(c, r)] + 1 @@ -132,18 +138,17 @@ class Heatmap(object): # right hand [0, 0, 0, 0, 0] ] - finger_map = [0, 0, 1, 2, 3, 4, 4] + finger_map = [0, 0, 1, 2, 3, 3, 3, 1, 1, 1, 2, 3, 4, 4] for (c, r) in self.log: if r == 5: # thumb cluster if c <= 6: # left side usage[0][4] = usage[0][4] + self.log[(c, r)] else: - usage[1][4] = usage[1][4] + self.log[(c, r)] + usage[1][0] = usage[1][0] + self.log[(c, r)] else: fc = c hand = 0 if fc >= 7: - fc = fc - 7 hand = 1 fm = finger_map[fc] usage[hand][fm] = usage[hand][fm] + self.log[(c, r)] @@ -157,79 +162,158 @@ class Heatmap(object): if total == 0: total = 1 stats = { + "total-keys": total, "hands": { "left": { - "usage": float(hand_usage[0]) / total * 100, + "usage": round(float(hand_usage[0]) / total * 100, 2), "fingers": { - "0 - pinky": 0, - "1 - ring": 0, - "2 - middle": 0, - "3 - index": 0, - "4 - thumb": 0, + "pinky": 0, + "ring": 0, + "middle": 0, + "index": 0, + "thumb": 0, } }, "right": { - "usage": float(hand_usage[1]) / total * 100, + "usage": round(float(hand_usage[1]) / total * 100, 2), "fingers": { - "0 - thumb": 0, - "1 - index": 0, - "2 - middle": 0, - "3 - ring": 0, - "4 - pinky": 0, + "thumb": 0, + "index": 0, + "middle": 0, + "ring": 0, + "pinky": 0, } }, } } hmap = ['left', 'right'] - fmap = ['0 - pinky', '1 - ring', '2 - middle', '3 - index', '4 - thumb', - '0 - thumb', '1 - index', '2 - middle', '3 - ring', '4 - pinky'] + fmap = ['pinky', 'ring', 'middle', 'index', 'thumb', + 'thumb', 'index', 'middle', 'ring', 'pinky'] for hand_idx in range(len(usage)): hand = usage[hand_idx] for finger_idx in range(len(hand)): - stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = float(hand[finger_idx]) / total * 100 + stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = round(float(hand[finger_idx]) / total * 100, 2) return stats def dump_all(out_dir, heatmaps): - for layer in heatmaps.keys(): + stats = {} + t = Terminal() + t.clear() + sys.stdout.write("\x1b[2J\x1b[H") + + print ('{t.underline}{outdir}{t.normal}\n'.format(t=t, outdir=out_dir)) + + keys = list(heatmaps.keys()) + keys.sort() + + for layer in keys: if len(heatmaps[layer].log) == 0: continue with open ("%s/%s.json" % (out_dir, layer), "w") as f: json.dump(heatmaps[layer].get_heatmap(), f) - print >>sys.stderr, "%s stats:" % (layer) - json.dump (heatmaps[layer].get_stats(), sys.stderr, - indent = 4, sort_keys = True) - print >>sys.stderr, "" - print >>sys.stderr, "" + stats[layer] = heatmaps[layer].get_stats() -def main(opts): + left = stats[layer]['hands']['left'] + right = stats[layer]['hands']['right'] + + print ('{t.bold}{layer}{t.normal} ({total:,} taps):'.format(t=t, layer=layer, + total=int(stats[layer]['total-keys'] / 2))) + print (('{t.underline} | ' + \ + 'left ({l[usage]:6.2f}%) | ' + \ + 'right ({r[usage]:6.2f}%) |{t.normal}').format(t=t, l=left, r=right)) + print ((' {t.bright_magenta}pinky{t.white} | {left[pinky]:6.2f}% | {right[pinky]:6.2f}% |\n' + \ + ' {t.bright_cyan}ring{t.white} | {left[ring]:6.2f}% | {right[ring]:6.2f}% |\n' + \ + ' {t.bright_blue}middle{t.white} | {left[middle]:6.2f}% | {right[middle]:6.2f}% |\n' + \ + ' {t.bright_green}index{t.white} | {left[index]:6.2f}% | {right[index]:6.2f}% |\n' + \ + ' {t.bright_red}thumb{t.white} | {left[thumb]:6.2f}% | {right[thumb]:6.2f}% |\n' + \ + '').format(left=left['fingers'], right=right['fingers'], t=t)) + +def process_line(line, heatmaps, opts, stamped_log = None): + m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line) + if not m: + return False + if stamped_log is not None: + if line.startswith("KL:"): + print ("%10.10f %s" % (time.time(), line), + file = stamped_log, end = '') + else: + print (line, + file = stamped_log, end = '') + stamped_log.flush() + + (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4)) + if (c, r) not in opts.allowed_keys: + return False + + heatmaps[l].update_log ((c, r)) + + return True + +def setup_allowed_keys(opts): + if len(opts.only_key): + incmap={} + for v in opts.only_key: + m = re.search ('(\d+),(\d+)', v) + if not m: + continue + (c, r) = (int(m.group(1)), int(m.group(2))) + incmap[(c, r)] = True + else: + incmap={} + for r in range(0, 6): + for c in range(0, 14): + incmap[(c, r)] = True + for v in opts.ignore_key: + m = re.search ('(\d+),(\d+)', v) + if not m: + continue + (c, r) = (int(m.group(1)), int(m.group(2))) + del(incmap[(c, r)]) + + return incmap + +def main(opts): heatmaps = {"Dvorak": Heatmap("Dvorak"), "ADORE": Heatmap("ADORE") } cnt = 0 - restrict_row = opts.restrict_row out_dir = opts.outdir + if not os.path.exists(out_dir): + os.makedirs(out_dir) + + opts.allowed_keys = setup_allowed_keys(opts) + + if not opts.one_shot: + + try: + with open("%s/stamped-log" % out_dir, "r") as f: + while True: + line = f.readline() + if not line: + break + if not process_line(line, heatmaps, opts): + continue + except: + pass + + stamped_log = open ("%s/stamped-log" % (out_dir), "a+") + else: + stamped_log = None + while True: line = sys.stdin.readline() if not line: break - m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line) - if not m: + if not process_line(line, heatmaps, opts, stamped_log): continue cnt = cnt + 1 - (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4)) - if restrict_row != -1 and r != restrict_row: - continue - if c in opts.ignore_columns: - continue - - heatmaps[l].update_log ((c, r)) - if opts.dump_interval != -1 and cnt >= opts.dump_interval: + if opts.dump_interval != -1 and cnt >= opts.dump_interval and not opts.one_shot: cnt = 0 dump_all(out_dir, heatmaps) @@ -239,11 +323,17 @@ if __name__ == "__main__": parser = argparse.ArgumentParser (description = "keylog to heatmap processor") parser.add_argument ('outdir', action = 'store', help = 'Output directory') - parser.add_argument ('--row', dest = 'restrict_row', action = 'store', type = int, - default = -1, help = 'Restrict processing to this row only') parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int, default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only') - parser.add_argument ('--ignore-column', dest = 'ignore_columns', action = 'append', type = int, - default = [], help = 'Ignore the specified columns') + parser.add_argument ('--ignore-key', dest = 'ignore_key', action = 'append', type = str, + default = [], help = 'Ignore the key at position (x, y)') + parser.add_argument ('--only-key', dest = 'only_key', action = 'append', type = str, + default = [], help = 'Only include key at position (x, y)') + parser.add_argument ('--one-shot', dest = 'one_shot', action = 'store_true', + help = 'Do not load previous data, and do not update it, either.') args = parser.parse_args() + if len(args.ignore_key) and len(args.only_key): + print ("--ignore-key and --only-key are mutually exclusive, please only use one of them!", + file = sys.stderr) + sys.exit(1) main(args) diff --git a/keyboards/ergodox/keymaps/algernon/tools/max-focused b/keyboards/ergodox/keymaps/algernon/tools/max-focused deleted file mode 100755 index 4d5220aa8b..0000000000 --- a/keyboards/ergodox/keymaps/algernon/tools/max-focused +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh -WIN="$(xdotool getactivewindow)" -wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz -xdotool windowsize ${WIN} 100% 100% -wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz diff --git a/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py new file mode 100755 index 0000000000..e068c3cbfb --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +import os +import sys + +charmap = { + '9': [[1, 0]], + '7': [[2, 0]], '@': [[2, 5], [2, 0]], + '5': [[3, 0]], '*': [[2, 5], [3, 0]], + '3': [[4, 0]], '^': [[2, 5], [4, 0]], + '1': [[5, 0]], '$': [[2, 5], [5, 0]], + '0': [[8, 0]], '%': [[2, 5], [8, 0]], + '2': [[9, 0]], '!': [[2, 5], [9, 0]], + '4': [[10, 0]], '#': [[2, 5], [10, 0]], + '6': [[11, 0]], '&': [[2, 5], [11, 0]], + '8': [[12, 0]], + + '`': [[0, 1]], '~': [[2, 5], [0, 1]], + 'y': [[1, 1]], 'Y': [[2, 5], [1, 1]], + 'w': [[2, 1]], 'W': [[2, 5], [2, 1]], + 'g': [[3, 1]], 'G': [[2, 5], [3, 1]], + 'l': [[4, 1]], 'L': [[2, 5], [4, 1]], + 'm': [[5, 1]], 'M': [[2, 5], [5, 1]], + '[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]], + ']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]], + 'f': [[8, 1]], 'F': [[2, 5], [8, 1]], + 'h': [[9, 1]], 'H': [[2, 5], [9, 1]], + 'c': [[10, 1]], 'C': [[2, 5], [10, 1]], + 'p': [[11, 1]], 'P': [[2, 5], [11, 1]], + 'x': [[12, 1]], 'X': [[2, 5], [12, 1]], + '\\': [[13, 1]], '|': [[2, 5], [13, 1]], + + '\t': [[0, 2]], + 'a': [[1, 2]], 'A': [[2, 5], [1, 2]], + 'o': [[2, 2]], 'O': [[2, 5], [2, 2]], + 'e': [[3, 2]], 'E': [[2, 5], [3, 2]], + 'i': [[4, 2]], 'I': [[2, 5], [4, 2]], + 'u': [[5, 2]], 'U': [[2, 5], [5, 2]], + 'd': [[8, 2]], 'D': [[2, 5], [8, 2]], + 'r': [[9, 2]], 'R': [[2, 5], [9, 2]], + 't': [[10, 2]], 'T': [[2, 5], [10, 2]], + 'n': [[11, 2]], 'N': [[2, 5], [11, 2]], + 's': [[12, 2]], 'S': [[2, 5], [12, 2]], + '=': [[13, 2]], '+': [[2, 5], [13, 2]], + + 'z': [[1, 3]], 'Z': [[2, 5], [1, 3]], + 'q': [[2, 3]], 'Q': [[2, 5], [2, 3]], + '\'': [[3, 3]], '"': [[2, 5], [3, 3]], + ',': [[4, 3]], '<': [[2, 5], [4, 3]], + '.': [[5, 3]], '>': [[2, 5], [5, 3]], + 'b': [[8, 3]], 'B': [[2, 5], [8, 3]], + 'k': [[9, 3]], 'K': [[2, 5], [9, 3]], + 'v': [[10, 3]], 'V': [[2, 5], [10, 3]], + 'j': [[11, 3]], 'J': [[2, 5], [11, 3]], + '/': [[12, 3]], '?': [[2, 5], [12, 3]], + + ':': [[4, 4]], ';': [[4, 4], [4, 4]], + '-': [[9, 4]], '_': [[2, 5], [9, 4]], + + ' ': [[10, 5]], + '\n': [[11, 5]], + + ## Layered things + # Hungarian + 'á': [[9, 5], [1, 2]], 'Á': [[2, 5], [9, 5], [1, 2]], + 'ó': [[9, 5], [2, 2]], 'Ó': [[2, 5], [9, 5], [2, 2]], + 'ő': [[9, 5], [2, 1]], 'Ő': [[2, 5], [9, 5], [2, 1]], + 'ö': [[9, 5], [2, 3]], 'Ö': [[2, 5], [9, 5], [2, 3]], + 'é': [[9, 5], [3, 2]], 'É': [[2, 5], [9, 5], [3, 2]], + 'ú': [[9, 5], [4, 2]], 'Ú': [[2, 5], [9, 5], [4, 2]], + 'ű': [[9, 5], [4, 1]], 'Ű': [[2, 5], [9, 5], [4, 1]], + 'ü': [[9, 5], [4, 3]], 'Ü': [[2, 5], [9, 5], [4, 3]], + 'í': [[9, 5], [5, 2]], 'Í': [[2, 5], [9, 5], [5, 2]], +} + +def lookup_char(layer, ch): + if ch in charmap: + return charmap[ch] + return None + +def process_char(layer, ch, out=sys.stdout): + keys = lookup_char(layer, ch) + if not keys: + print ("Unknown char: %s" % ch, file=sys.stderr) + else: + for (c, r) in keys: + print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out) + print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out) + +def process_file(fn, layer, out=sys.stdout): + with open(fn, "r") as f: + ch = f.read(1) + while ch: + process_char(layer, ch, out) + ch = f.read(1) + +if sys.argv[1] == '-': + out='/dev/stdin' +else: + out=sys.argv[1] + +if len(sys.argv) >= 2: + layer = 'ADORE' +else: + layer = sys.argv[2] + +process_file(out, layer = layer) -- cgit v1.2.3 From edc7441800af085cada407c0593e8f83fc67ec56 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Sun, 18 Sep 2016 12:42:58 +0200 Subject: util/install_dependecies.sh: fix yum packages Signed-off-by: Antonio Murdaca --- util/install_dependencies.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh index 49ac86e072..936a865938 100755 --- a/util/install_dependencies.sh +++ b/util/install_dependencies.sh @@ -68,9 +68,8 @@ elif [[ -n "$(type -P yum)" ]]; then avr-libc \ dfu-programmer \ dfu-util \ - gcc-arm-none-eabi \ - binutils-arm-none-eabi \ - libnewlib-arm-none-eabi \ + arm-none-eabi-gcc-cs \ + arm-none-eabi-newlib \ git \ diffutils # The listed eabi pacackes do unfortunately not exist for CentOS, -- cgit v1.2.3 From 94af0194ddfe8f8a3069c926170d8995de5c1781 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 19 Sep 2016 13:22:34 +0200 Subject: - Updated dbroqua layout for kc60 --- keyboards/kc60/keymaps/dbroqua/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c index e17827fad9..1b645ea938 100644 --- a/keyboards/kc60/keymaps/dbroqua/keymap.c +++ b/keyboards/kc60/keymaps/dbroqua/keymap.c @@ -34,9 +34,9 @@ const uint16_t PROGMEM fn_actions[] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | Bksp| + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | * |-----------------------------------------------------------------------------------------+ * | Caps/FN1| A | S | D | F | G | H | J | K | L | ; | ' | Enter | * |-----------------------------------------------------------------------------------------+ @@ -46,11 +46,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ [0] = KEYMAP( /* Basic QWERTY */ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ LT(_FNCAPS, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ ), /* Layer 1 -- cgit v1.2.3 From 9a2e24fa98f90517a0a091b3ccd9de125457d09f Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 19 Sep 2016 13:36:36 +0200 Subject: - Removed HHKB like layout --- keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c | 103 --------------------- keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md | 11 --- 2 files changed, 114 deletions(-) delete mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c delete mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c deleted file mode 100644 index 0c952327b9..0000000000 --- a/keyboards/kc60/keymaps/dbroqua_hhkb_like/keymap.c +++ /dev/null @@ -1,103 +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 "kc60.h" - -#define _QWERTY 0 -#define _FNCAPS 1 -#define _FNRIGHTSHIFT 2 - -// Fillers to make layering more clear -#define ______ KC_TRNS -#define XXXXXXX KC_NO - -// Func macro definitions. -#define S_LED FUNC(0) -#define S_LEDI FUNC(1) -#define S_LEDD FUNC(2) - -// Enable these functions using FUNC(n) macro. -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_BACKLIGHT_TOGGLE(), - [1] = ACTION_BACKLIGHT_INCREASE(), - [2] = ACTION_BACKLIGHT_DECREASE() - }; - -/* - * | | | - * | | | - * | | | - * | | | - * | | - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Qwerty - * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | - * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | - * |-----------------------------------------------------------------------------------------+ - * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | - * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 | - * |-----------------------------------------------------------------------------------------+ - * | FN1 | Gui | Alt | Space | AltGr | Left | Down | Right | - * `-----------------------------------------------------------------------------------------' - */ - [0] = KEYMAP( /* Basic QWERTY */ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \ - LT(_FNCAPS, KC_CAPS), KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \ - ), - -/* Layer 1 - * ,-----------------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | Psc | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | Prev | Stop | Next | - * `-----------------------------------------------------------------------------------------' - */ - [_FNCAPS] = KEYMAP( /* Layer 1 */ - ______, 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_INS, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \ - ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \ - ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \ - ), - -/* Layer 2 - * ,-----------------------------------------------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | PgUp | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | Home | PgDown| End | - * `-----------------------------------------------------------------------------------------' - */ - [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \ - ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \ - ), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - return MACRO_NONE; -}; diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md deleted file mode 100644 index c7850c37ce..0000000000 --- a/keyboards/kc60/keymaps/dbroqua_hhkb_like/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# Dbroqua HHKB like Layout - -* Online keyboard layout editor: *Coming soon* -* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37 -* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f - -# Programming Instructions: -Enter into programming mode and run the following command. -``` -$ sudo KEYMAP=dbroqua_hhkb_like make dfu -``` \ No newline at end of file -- cgit v1.2.3 From f0021c9cb9e30d47d5a3ab5ec75e59e626c3d244 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Mon, 19 Sep 2016 14:25:44 -0500 Subject: Add more shifted Dvorak key code definitions --- quantum/keymap_extras/keymap_dvorak.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index 17f2059774..a0feed850d 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -70,6 +70,10 @@ #define DV_LCBR LSFT(DV_LBRC) #define DV_RCBR LSFT(DV_RBRC) +#define DV_DQUO LSFT(DV_QUOT) +#define DV_LABK LSFT(DV_COMM) +#define DV_RABK LSFT(DV_DOT) + #define DV_QUES LSFT(DV_SLSH) #define DV_PLUS LSFT(DV_EQL) #define DV_PIPE LSFT(DV_BSLS) -- cgit v1.2.3 From 86e85438d36014b6a6a2b20be4454b865374d47a Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Tue, 20 Sep 2016 15:45:50 -0400 Subject: Fixed Qwerty Fn layer to match documented design --- keyboards/planck/keymaps/impossible/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index e816f359a6..503976fa28 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -97,17 +97,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | [ | ] | + * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| * `-----------------------------------------------------------------------------------------------' */ [_QW_FN] = { - {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, - {_______, KC_GRAVE, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, KC_MINUS, KC_EQUAL, KC_F12}, - {_______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRACKET, KC_RBRACKET}, - {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} + {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11}, + {_______, KC_GRAVE, KC_LBRC, KC_PGUP, KC_RBRC, XXXXXXX, XXXXXXX, KC_MINS, KC_UP, KC_EQUAL, XXXXXXX, KC_F12}, + {_______, KC_TAB, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______} }, /* Plover layer (http://opensteno.org) -- cgit v1.2.3 From 6631abc1cb0e570271bcf33464e3af17b6fc0b87 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 20 Sep 2016 21:38:59 -0500 Subject: Made Serial and I2C not include the Other This saves 192 bytes --- keyboards/lets_split/config.h | 7 ++++++- keyboards/lets_split/i2c.c | 3 +++ keyboards/lets_split/matrix.c | 23 +++++++++++++++-------- keyboards/lets_split/rules.mk | 4 ++-- keyboards/lets_split/serial.c | 5 ++++- keyboards/lets_split/split_util.c | 8 ++++++-- 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index ec99514aa3..f4d900accb 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -41,6 +41,11 @@ along with this program. If not, see . // #define USE_I2C +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + // #define EE_HANDS #define I2C_MASTER_LEFT @@ -94,4 +99,4 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#endif \ No newline at end of file +#endif diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index c72789403e..084c890c40 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -6,6 +6,8 @@ #include #include "i2c.h" +#ifdef USE_I2C + // Limits the amount of we wait for any one i2c transaction. // Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is // 9 bits, a single transaction will take around 90μs to complete. @@ -157,3 +159,4 @@ ISR(TWI_vect) { // Reset everything, so we are ready for the next TWI interrupt TWCR |= (1<. #include "debug.h" #include "util.h" #include "matrix.h" -#include "i2c.h" -#include "serial.h" #include "split_util.h" #include "pro_micro.h" #include "config.h" +#ifdef USE_I2C +# include "i2c.h" +#else // USE_SERIAL +# include "serial.h" +#endif + #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 5 #endif #define ERROR_DISCONNECT_COUNT 5 @@ -145,6 +149,8 @@ uint8_t _matrix_scan(void) return 1; } +#ifdef USE_I2C + // Get rows from other half over i2c int i2c_transaction(void) { int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; @@ -176,7 +182,8 @@ i2c_error: // the cable is disconnceted, or something else went wrong return 0; } -#ifndef USE_I2C +#else // USE_SERIAL + int serial_transaction(void) { int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; @@ -199,7 +206,7 @@ uint8_t matrix_scan(void) #ifdef USE_I2C if( i2c_transaction() ) { -#else +#else // USE_SERIAL if( serial_transaction() ) { #endif // turn on the indicator led when halves are disconnected @@ -235,7 +242,7 @@ void matrix_slave_scan(void) { /* i2c_slave_buffer[i] = matrix[offset+i]; */ i2c_slave_buffer[i] = matrix[offset+i]; } -#else +#else // USE_SERIAL for (int i = 0; i < ROWS_PER_HAND; ++i) { serial_slave_buffer[i] = matrix[offset+i]; } @@ -290,7 +297,7 @@ static void init_cols(void) static matrix_row_t read_cols(void) { matrix_row_t result = 0; - for(int x = 0; x < MATRIX_COLS; x++) { + for(int x = 0; x < MATRIX_COLS; x++) { result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); } return result; @@ -298,7 +305,7 @@ static matrix_row_t read_cols(void) static void unselect_rows(void) { - for(int x = 0; x < ROWS_PER_HAND; x++) { + for(int x = 0; x < ROWS_PER_HAND; x++) { _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); } diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk index 6961fbd556..6fde8a444c 100644 --- a/keyboards/lets_split/rules.mk +++ b/keyboards/lets_split/rules.mk @@ -52,7 +52,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) @@ -71,4 +71,4 @@ RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes \ No newline at end of file +CUSTOM_MATRIX = yes diff --git a/keyboards/lets_split/serial.c b/keyboards/lets_split/serial.c index f439c2f20b..6faed09ce0 100644 --- a/keyboards/lets_split/serial.c +++ b/keyboards/lets_split/serial.c @@ -10,9 +10,10 @@ #include #include #include - #include "serial.h" +#ifdef USE_SERIAL + // Serial pulse period in microseconds. Its probably a bad idea to lower this // value. #define SERIAL_DELAY 24 @@ -223,3 +224,5 @@ int serial_update_buffers(void) { sei(); return 0; } + +#endif diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c index 65003a71a4..461921798f 100644 --- a/keyboards/lets_split/split_util.c +++ b/keyboards/lets_split/split_util.c @@ -6,11 +6,15 @@ #include #include "split_util.h" #include "matrix.h" -#include "i2c.h" -#include "serial.h" #include "keyboard.h" #include "config.h" +#ifdef USE_I2C +# include "i2c.h" +#else +# include "serial.h" +#endif + volatile bool isLeftHand = true; static void setup_handedness(void) { -- cgit v1.2.3 From b30e6c1c9e1c876ddf95fcc3bc727a04ca6f2abc Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 20 Sep 2016 21:46:33 -0500 Subject: Created I2C and Serial keymaps for unit testing Having a dedicated I2C keymap and a dedicated serial keymap will allow the testing suite to check both conditions. --- keyboards/lets_split/keymaps/i2c/config.h | 102 +++++++++++++ keyboards/lets_split/keymaps/i2c/keymap.c | 214 +++++++++++++++++++++++++++ keyboards/lets_split/keymaps/serial/config.h | 102 +++++++++++++ keyboards/lets_split/keymaps/serial/keymap.c | 214 +++++++++++++++++++++++++++ 4 files changed, 632 insertions(+) create mode 100644 keyboards/lets_split/keymaps/i2c/config.h create mode 100644 keyboards/lets_split/keymaps/i2c/keymap.c create mode 100644 keyboards/lets_split/keymaps/serial/config.h create mode 100644 keyboards/lets_split/keymaps/serial/keymap.c diff --git a/keyboards/lets_split/keymaps/i2c/config.h b/keyboards/lets_split/keymaps/i2c/config.h new file mode 100644 index 0000000000..2671fabf6d --- /dev/null +++ b/keyboards/lets_split/keymaps/i2c/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +#define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c new file mode 100644 index 0000000000..0d2d94b672 --- /dev/null +++ b/keyboards/lets_split/keymaps/i2c/keymap.c @@ -0,0 +1,214 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/serial/config.h b/keyboards/lets_split/keymaps/serial/config.h new file mode 100644 index 0000000000..f4d900accb --- /dev/null +++ b/keyboards/lets_split/keymaps/serial/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c new file mode 100644 index 0000000000..0d2d94b672 --- /dev/null +++ b/keyboards/lets_split/keymaps/serial/keymap.c @@ -0,0 +1,214 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file -- cgit v1.2.3 From 7a91cce869f7cda8a42bf071ba77ee6096772d20 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 21 Sep 2016 08:02:51 +0200 Subject: - Updated backlight levels for KC60 --- keyboards/kc60/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/kc60/config.h b/keyboards/kc60/config.h index c4a9b9ff82..29695d0b9d 100644 --- a/keyboards/kc60/config.h +++ b/keyboards/kc60/config.h @@ -62,7 +62,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 +#define BACKLIGHT_LEVELS 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE -- cgit v1.2.3 From e1f131db8e59c6ed3471906d3a62457d593f51af Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 10:11:42 +0200 Subject: restore each_tap callback --- quantum/process_keycode/process_tap_dance.c | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 79ade4d000..6ae362c4c2 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -70,6 +70,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { action->state.keycode = keycode; action->state.count++; action->state.timer = timer_read(); + process_tap_dance_action_on_each_tap (action); if (last_td && last_td != keycode) { qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE]; -- cgit v1.2.3 From 0edc82f0300924394324e2f3c4d2f8f0008439db Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 11:29:34 +0200 Subject: formatting --- quantum/process_keycode/process_tap_dance.h | 8 ++++---- readme.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index d7b857bdc6..49b06e4508 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -39,15 +39,15 @@ typedef struct #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \ - .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }) \ + .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \ } #define ACTION_TAP_DANCE_FN(user_fn) { \ - .fn = { NULL, user_fn, NULL } \ + .fn = { NULL, user_fn, NULL }, \ } -#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \ - .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ +#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ + .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ } extern qk_tap_dance_action_t tap_dance_actions[]; diff --git a/readme.md b/readme.md index ea20b5e017..a7320202b2 100644 --- a/readme.md +++ b/readme.md @@ -526,7 +526,7 @@ This array specifies what actions shall be taken when a tap-dance key is in acti * `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held. * `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. -* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. +* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. -- cgit v1.2.3 From cda4b534fa4921c2d8f9884aa6a144333e7b07c4 Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Wed, 21 Sep 2016 11:29:43 +0200 Subject: add user_data field --- quantum/process_keycode/process_tap_dance.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 49b06e4508..f753cbba66 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -44,10 +44,12 @@ typedef struct #define ACTION_TAP_DANCE_FN(user_fn) { \ .fn = { NULL, user_fn, NULL }, \ + .user_data = NULL, \ } #define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ + .user_data = NULL, \ } extern qk_tap_dance_action_t tap_dance_actions[]; -- cgit v1.2.3 From 9d629719cb0da23a115ec811359ccd9b749cf8fa Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Wed, 21 Sep 2016 14:41:37 +0000 Subject: Filled Impossible Layout documentation --- keyboards/planck/keymaps/impossible/readme.md | 91 ++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index de9680b498..af85d7603b 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -1,2 +1,91 @@ -# The Default Planck Layout +# The Impossible Layout +The Impossible Layout is named such because it manages to fit in both a numpad and an inverted-T arrow cluster into the same layer as the alpha keys. + +## Main layout + +The Impossible Layout places the middle column of the alphas onto where the punctuation keys were, moving he most used punctuation to be accessed by the thumbs. Because removing the middle columns fits with the Workman layout's philosopy, Workman is used as the basis for the layout. This means the layout should be very easy to learn for Workman users, and reasonable for Colemak users. Other space gains are made by combining keys that are only ever chorded with other non symbol keys (with function-layer alternatives where needed). + +### Alpha-numeric layer + +,-----------------------------------------------------------------------------------------------. +| Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +|Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +### Function layer + +,-----------------------------------------------------------------------------------------------. +| ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +|Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Qwerty + +The Qwerty layer, mostly intended for gaming use, makes use of the doubled chorded/non-symbolic keys to obtain use of the entire alpha-numeric typing area. + +### Qwerty layer + +,-----------------------------------------------------------------------------------------------. +|Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| Shift | A | S | D | F | G | H | J | K | L | ; | " | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +|Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +### Qwerty Fn Layer + +,-----------------------------------------------------------------------------------------------. +| Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +|Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Stenography + +The Steno/Plover layer moves the number row below the regular keys, providing a much more comfortable placement for the thumb keys. Using this layout will require a slightly different dictionary to account for different keys being adjacent to the number row. + +### Steno Layer + +,-----------------------------------------------------------------------------------------------. +| S | T | P | H | * | F | P | L | T | D | | | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| S | K | W | R | * | R | B | G | S | Z | | | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| # | # | # | # | | # | # | # | # | # | | | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| | | A | O | | E | U | | | | |Adj/Ent| +`-----------------------------------------------------------------------------------------------' + +## Adjustments and Options + +In order to switch between layouts and change other keyboard settings, an adjustment layer is accessible from the same position over any layout. + +### Adjustment Layer + +,-----------------------------------------------------------------------------------------------. +| | | | | | | | | Insert| PrtSc | Pause | RESET | +|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| +| | | | | | | | CapLk |Voice +| Audio |MIDIoff| | +|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| +| | | | | | | | ScrLk |Voice -| Music |MIDI on| | +|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| +| | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| +`-----------------------------------------------------------------------------------------------' -- cgit v1.2.3 From 073a1f21bb4ccf8dc47ec3757e64db97d4011ab8 Mon Sep 17 00:00:00 2001 From: Stephen Christie Date: Wed, 21 Sep 2016 14:45:05 +0000 Subject: Corrected Impossible Layout readme tables --- keyboards/planck/keymaps/impossible/readme.md | 30 --------------------------- 1 file changed, 30 deletions(-) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index af85d7603b..7b3c87b4ec 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -8,27 +8,17 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Alpha-numeric layer -,-----------------------------------------------------------------------------------------------. | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ### Function layer -,-----------------------------------------------------------------------------------------------. | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Qwerty @@ -36,27 +26,17 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty layer -,-----------------------------------------------------------------------------------------------. |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | Shift | A | S | D | F | G | H | J | K | L | ; | " | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ### Qwerty Fn Layer -,-----------------------------------------------------------------------------------------------. | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Stenography @@ -64,15 +44,10 @@ The Steno/Plover layer moves the number row below the regular keys, providing a ### Steno Layer -,-----------------------------------------------------------------------------------------------. | S | T | P | H | * | F | P | L | T | D | | | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | S | K | W | R | * | R | B | G | S | Z | | | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | # | # | # | # | | # | # | # | # | # | | | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | | | A | O | | E | U | | | | |Adj/Ent| -`-----------------------------------------------------------------------------------------------' ## Adjustments and Options @@ -80,12 +55,7 @@ In order to switch between layouts and change other keyboard settings, an adjust ### Adjustment Layer -,-----------------------------------------------------------------------------------------------. | | | | | | | | | Insert| PrtSc | Pause | RESET | -|-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------| | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | -|-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------| | | | | | | | | ScrLk |Voice -| Music |MIDI on| | -|-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------| | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent| -`-----------------------------------------------------------------------------------------------' -- cgit v1.2.3 From 9e6a493172da4f36df6b35307a5796ee8cb2cbec Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Wed, 21 Sep 2016 18:55:14 +0000 Subject: Fixed Impossible Layout readme tables (again) --- keyboards/planck/keymaps/impossible/readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md index 7b3c87b4ec..02c719197e 100644 --- a/keyboards/planck/keymaps/impossible/readme.md +++ b/keyboards/planck/keymaps/impossible/readme.md @@ -8,6 +8,8 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Alpha-numeric layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 | | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 | | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 | @@ -15,6 +17,8 @@ The Impossible Layout places the middle column of the alphas onto where the punc ### Function layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 | | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 | | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 | @@ -26,6 +30,8 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / | | Shift | A | S | D | F | G | H | J | K | L | ; | " | @@ -33,6 +39,8 @@ The Qwerty layer, mostly intended for gaming use, makes use of the doubled chord ### Qwerty Fn Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 | | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | | @@ -44,6 +52,8 @@ The Steno/Plover layer moves the number row below the regular keys, providing a ### Steno Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | S | T | P | H | * | F | P | L | T | D | | | | S | K | W | R | * | R | B | G | S | Z | | | | # | # | # | # | | # | # | # | # | # | | | @@ -55,6 +65,8 @@ In order to switch between layouts and change other keyboard settings, an adjust ### Adjustment Layer +| | | | | | | | | | | | | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | | | | | | | | | Insert| PrtSc | Pause | RESET | | | | | | | | | CapLk |Voice +| Audio |MIDIoff| | | | | | | | | | ScrLk |Voice -| Music |MIDI on| | -- cgit v1.2.3 From d4309990472895bbbe82f7ba22ed33c16f928778 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Fri, 23 Sep 2016 00:55:15 +0200 Subject: Fix issue #772 Meh and Hyper not working --- tmk_core/common/action.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 08ef22eb97..d485b46c77 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -155,9 +155,10 @@ void process_action(keyrecord_t *record, action_t action) action.key.mods<<4; if (event.pressed) { if (mods) { - if (IS_MOD(action.key.code)) { + if (IS_MOD(action.key.code) || action.key.code == KC_NO) { // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless. - // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT) + // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT). + // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO). add_mods(mods); } else { add_weak_mods(mods); @@ -168,7 +169,7 @@ void process_action(keyrecord_t *record, action_t action) } else { unregister_code(action.key.code); if (mods) { - if (IS_MOD(action.key.code)) { + if (IS_MOD(action.key.code) || action.key.code == KC_NO) { del_mods(mods); } else { del_weak_mods(mods); -- cgit v1.2.3 From 6e5142ca3ee7c45a0776d84ba667c5504dc85cd8 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Thu, 22 Sep 2016 22:05:12 -0400 Subject: Adds EPRM reset key --- keyboards/ergodox/keymaps/default/keymap.c | 12 ++++++++++-- keyboards/ergodox/keymaps/default/readme.md | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c index 1b80cb3a23..2f399bd181 100644 --- a/keyboards/ergodox/keymaps/default/keymap.c +++ b/keyboards/ergodox/keymaps/default/keymap.c @@ -7,6 +7,8 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys +#define EPRM M(1) // Macro 1: Reset EEPROM + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -62,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | + * | EPRM | | | | | | | . | 0 | = | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -79,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, + EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, @@ -149,6 +151,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; + case 1: + if (record->event.pressed) { // For resetting EEPROM + eeconfig_init(); + } + break; } return MACRO_NONE; }; @@ -158,6 +165,7 @@ void matrix_init_user(void) { }; + // Runs constantly in the background, in a loop. void matrix_scan_user(void) { diff --git a/keyboards/ergodox/keymaps/default/readme.md b/keyboards/ergodox/keymaps/default/readme.md index 8f6dba45e9..f68138ed62 100644 --- a/keyboards/ergodox/keymaps/default/readme.md +++ b/keyboards/ergodox/keymaps/default/readme.md @@ -2,6 +2,8 @@ ## Changelog +* Sep 22, 2016: + * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM. * Feb 2, 2016 (V1.1): * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). -- cgit v1.2.3 From fad54872667d493ccd95e2171addf6c6b22343b7 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Thu, 22 Sep 2016 23:33:22 -0400 Subject: Initial support for TADA68 --- keyboards/tada68/Makefile | 3 + keyboards/tada68/config.h | 94 ++++++++++++++++++++++++++++ keyboards/tada68/keymaps/default/Makefile | 21 +++++++ keyboards/tada68/keymaps/default/keymap.c | 98 ++++++++++++++++++++++++++++++ keyboards/tada68/keymaps/default/readme.md | 1 + keyboards/tada68/readme.md | 4 ++ keyboards/tada68/rules.mk | 66 ++++++++++++++++++++ keyboards/tada68/tada68.c | 30 +++++++++ keyboards/tada68/tada68.h | 43 +++++++++++++ 9 files changed, 360 insertions(+) create mode 100644 keyboards/tada68/Makefile create mode 100644 keyboards/tada68/config.h create mode 100644 keyboards/tada68/keymaps/default/Makefile create mode 100644 keyboards/tada68/keymaps/default/keymap.c create mode 100644 keyboards/tada68/keymaps/default/readme.md create mode 100644 keyboards/tada68/readme.md create mode 100644 keyboards/tada68/rules.mk create mode 100644 keyboards/tada68/tada68.c create mode 100644 keyboards/tada68/tada68.h diff --git a/keyboards/tada68/Makefile b/keyboards/tada68/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/tada68/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h new file mode 100644 index 0000000000..5c2b290624 --- /dev/null +++ b/keyboards/tada68/config.h @@ -0,0 +1,94 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0003 +#define MANUFACTURER TADA +#define PRODUCT TADA68 +#define DESCRIPTION QMK keyboard firmware for TADA68 with WS2812 support + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS {D0,D1,F6,F7,D5} +#define MATRIX_COL_PINS {F0,F1,E6,C7,C6,B7,D4,B1,B0,B5,B4,D7,D6,B3,F4} +#define UNUSED_PINS + +#define BACKLIGHT_PIN B6 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 4 + +/* Underlight configuration + */ + +#define RGB_DI_PIN F5 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 4 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tada68/keymaps/default/Makefile b/keyboards/tada68/keymaps/default/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/tada68/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c new file mode 100644 index 0000000000..da57c0343b --- /dev/null +++ b/keyboards/tada68/keymaps/default/keymap.c @@ -0,0 +1,98 @@ +#include "tada68.h" + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \ + 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_UP,KC_PGDN, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| | + * |----------------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ +[_FL] = KEYMAP_ANSI( + #ifdef RGBLIGHT_ENABLE + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), + #else + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), + #endif +}; + +/*enum function_id { + //SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + //[0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +}*/ diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md new file mode 100644 index 0000000000..36760d6b91 --- /dev/null +++ b/keyboards/tada68/keymaps/default/readme.md @@ -0,0 +1 @@ +# default TADA68 layout diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md new file mode 100644 index 0000000000..552fdea529 --- /dev/null +++ b/keyboards/tada68/readme.md @@ -0,0 +1,4 @@ +TADA68 keyboard firmware +====================== + +TODO: to be updated. diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk new file mode 100644 index 0000000000..1102584d8a --- /dev/null +++ b/keyboards/tada68/rules.mk @@ -0,0 +1,66 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/tada68/tada68.c b/keyboards/tada68/tada68.c new file mode 100644 index 0000000000..24f89048cb --- /dev/null +++ b/keyboards/tada68/tada68.c @@ -0,0 +1,30 @@ +#include "tada68.h" +#include "led.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + matrix_init_user(); + led_init_ports(); +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + matrix_scan_user(); +}; + +void led_init_ports(void) { + // * Set our LED pins as output + DDRB |= (1<<2); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< Date: Fri, 23 Sep 2016 14:20:05 -0400 Subject: Disable RGB led support until a suitable pin is located --- keyboards/tada68/config.h | 9 ++++++--- keyboards/tada68/rules.mk | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h index 5c2b290624..5d8757936d 100644 --- a/keyboards/tada68/config.h +++ b/keyboards/tada68/config.h @@ -66,12 +66,15 @@ along with this program. If not, see . /* Underlight configuration */ -#define RGB_DI_PIN F5 +/*#define RGB_DI_PIN E2 #define RGBLIGHT_TIMER -#define RGBLED_NUM 4 // Number of LEDs +#define RGBLED_NUM 2 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 +#define RGBLIGHT_VAL_STEP 17*/ +//Disabled while I figure out a suitable pin for RGB support. +//I've tried F5, D2, D3, and E2 but it's possible the end of my +//strand is bad. New LEDs on order. /* * Feature disable options diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk index 1102584d8a..d8ec423655 100644 --- a/keyboards/tada68/rules.mk +++ b/keyboards/tada68/rules.mk @@ -58,7 +58,7 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) 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 -RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870) BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no -- cgit v1.2.3 From 1a96b2cdc8895bd9f219e6c793aeee6ff7ce81f6 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 23 Sep 2016 20:57:36 -0400 Subject: Disables sleep LED by default --- keyboards/ergodox/ez/rules.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk index 37e554b304..a9715beb85 100644 --- a/keyboards/ergodox/ez/rules.mk +++ b/keyboards/ergodox/ez/rules.mk @@ -71,6 +71,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # comment out to disable the options. # +SLEEP_LED_ENABLE = no + ifndef QUANTUM_DIR include ../../../Makefile endif -- cgit v1.2.3 From f0441f08b87986f49479f1503b11a3d3f899d58e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 25 Sep 2016 16:32:06 +0200 Subject: - Added dbroqua layout for HHKB keyboard --- keyboards/hhkb/keymaps/dbroqua/keymap.c | 70 ++++++++++++++++++++++++++++++++ keyboards/hhkb/keymaps/dbroqua/readme.md | 9 ++++ 2 files changed, 79 insertions(+) create mode 100644 keyboards/hhkb/keymaps/dbroqua/keymap.c create mode 100644 keyboards/hhkb/keymaps/dbroqua/readme.md diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c new file mode 100644 index 0000000000..ef43aae281 --- /dev/null +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -0,0 +1,70 @@ +/* + * dbroqua HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define FN 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* BASE Level: Default Layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Left |Right| + * +-----------------------------------------------------------------------------------------+ + * | Gui | Alt | Space | AltGr | fn | + * `----------------------------------------------------------------´ + */ + [BASE] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LEFT, KC_RGHT, \ + KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, MO(FN) + ), + + /* BASE Level: Default Layer + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del| + * |-----------------------------------------------------------------------------------------+ + * | Caps | | | | | | | | | | | Up | | | + * |-----------------------------------------------------------------------------------------+ + * | | Vol-| Vol+| Mute| | | |PrtSc| Home| PgUp| Left |Right| | + * |-----------------------------------------------------------------------------------------+ + * | | Prev| Play| Next| | | | | End |PgDwn| Down| Up | Down| + * +-----------------------------------------------------------------------------------------+ + * | | | | | | + * `----------------------------------------------------------------´ + */ + [FN] = KEYMAP( + KC_TRNS, 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_INS, KC_DEL, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_UP, KC_DOWN, \ + KC_TRNS, KC_TRNS, KC_TRNS, 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 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/keymaps/dbroqua/readme.md new file mode 100644 index 0000000000..0afebc84c8 --- /dev/null +++ b/keyboards/hhkb/keymaps/dbroqua/readme.md @@ -0,0 +1,9 @@ +# Dbroqua Layout + +* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01 + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua make dfu +``` \ No newline at end of file -- cgit v1.2.3 From 77099c777aa34e07548f64928d5d233c4cf35a5e Mon Sep 17 00:00:00 2001 From: Jeremy Cowgar Date: Sun, 25 Sep 2016 12:23:59 -0400 Subject: =?UTF-8?q?Added=20Jeremy=E2=80=99s=20Atreus=20Layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/atreus/keymaps/jeremy/keymap.c | 66 +++++++++++++++++++++++++++++++ keyboards/atreus/keymaps/jeremy/readme.md | 45 +++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 keyboards/atreus/keymaps/jeremy/keymap.c create mode 100644 keyboards/atreus/keymaps/jeremy/readme.md diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c new file mode 100644 index 0000000000..90ec6f9049 --- /dev/null +++ b/keyboards/atreus/keymaps/jeremy/keymap.c @@ -0,0 +1,66 @@ +// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer. + +#include "atreus.h" +#include "action_layer.h" +#include "keymap_colemak.h" + +#define PREVENT_STUCK_MODIFIERS + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define ALPH 0 +#define NUMS 1 +#define CURS 2 +#define SYMB 3 +#define FKEY 4 + +// Some handy macros to keep the keymaps clean and easier to maintain +#define KM_SAVE LGUI(CM_S) +#define KM_CLSE LGUI(CM_W) +#define KM_OPEN LGUI(CM_O) + +#define KM_COPY LGUI(KC_C) +#define KM_CUT LGUI(KC_X) +#define KM_PAST LGUI(KC_V) +#define KM_UNDO LGUI(KC_Z) +#define KM_REDO LGUI(LSFT(KC_Z)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[ALPH] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL} +}, +[NUMS] = { + {KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH}, + {KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR}, + {KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS} +}, +[CURS] = { + {KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS}, + {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS}, + {KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[SYMB] = { + {KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC}, + {KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD}, + {KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC}, + {KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[FKEY] = { + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4}, + {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[] = {}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) {} + + return MACRO_NONE; +}; diff --git a/keyboards/atreus/keymaps/jeremy/readme.md b/keyboards/atreus/keymaps/jeremy/readme.md new file mode 100644 index 0000000000..df0179a8e0 --- /dev/null +++ b/keyboards/atreus/keymaps/jeremy/readme.md @@ -0,0 +1,45 @@ +Jeremy's Atreus Key Mapping +=========================== + +I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling. + +My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015). + +## Main Layers + +1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac) +2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5) +3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4) +4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973) +5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89) + +## Notes + +### General + +Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching. + +I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory. + +### Symbol Layer + +1. I placed characters that deal with an if statement close together, such as !, & and |. +2. All matching brace/bracket characters are together as well. + +### Number Layer + +1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could. +2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key. +3. Parentheses were added for typing on the calculator. + +### Cursor Layer + +1. It includes basic audio controls because they didn't really fit anywhere else +2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard. +3. It contains the backspace and delete keys right on top of the left and right arrows. +4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word. + +### Function Layer + +1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row. +2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved. -- cgit v1.2.3 From c40ad11615b6cb1d08ec2d3b284d59df00c57c1f Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 25 Sep 2016 19:04:20 -0700 Subject: Fix lets_split.c so that audio can be disabled Matching the use of `#ifdef AUDIO_ENABLE` used in `matrix_init_kb()` in order to compile firmware for the Let's Split keyboard without audio enabled. --- keyboards/lets_split/lets_split.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 574c116a75..c505d3a6e3 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -24,7 +24,9 @@ void matrix_init_kb(void) { }; void shutdown_user(void) { - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif } -- cgit v1.2.3 From 04c0a1c3e2d9f81cd44dc7548f6135ca175edbe1 Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 01:04:33 -0500 Subject: Added ONEHAND_ENABLE to allow SWAP HANDS actions --- keyboards/ergodox/rules.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk index ac63d4eff2..add64ec76f 100644 --- a/keyboards/ergodox/rules.mk +++ b/keyboards/ergodox/rules.mk @@ -26,3 +26,4 @@ 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 MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= yes # Unicode +ONEHAND_ENABLE ?= yes # Allow swapping hands of keyboard -- cgit v1.2.3 From 90fd0810dbd551b32e4be46f108b4974890299b9 Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 01:05:06 -0500 Subject: Updated kastyle keymap, including swap hands feature --- keyboards/ergodox/keymaps/kastyle/keymap.c | 98 +++++++++++++++++++----------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c index a920850039..4e3794a96f 100644 --- a/keyboards/ergodox/keymaps/kastyle/keymap.c +++ b/keyboards/ergodox/keymaps/kastyle/keymap.c @@ -1,3 +1,6 @@ +/* Setup to approximate a Kinesis Advantage with an eye to use in a + * Mac/OSX environment + * This version adds a hand swap feature to flip the keyboard */ #include "ergodox.h" #include "debug.h" #include "action_layer.h" @@ -18,10 +21,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * |Grv/L1| \ |AltShf| Left | Right| | Up | Down | [ | ] |Grv/L1| * `----------------------------------' `----------------------------------' * ,---------------. ,---------------. - * |Ctrl/Esc| Alt | | Alt |Ctrl/Esc| + * | LGUI |Al/Esc| |Al/Esc| RGUI | * ,------|--------|------| |------+--------+------. * | | | Home | | PgUp | | | * |Backsp| Del |------| |------| Enter | Space| @@ -31,33 +34,34 @@ 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - 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, - CTL_T(KC_ESC), ALT_T(KC_APP), - KC_HOME, - KC_BSPC,KC_DEL,KC_END, - // right hand - KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, - MEH_T(KC_NO),KC_N, 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_ENT, KC_SPC - ), + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_FN1, KC_BSLS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + KC_LGUI, ALT_T(KC_ESC), + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT, + MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1, + ALT_T(KC_ESC), KC_RGUI, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC +), + /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -74,14 +78,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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, + KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_SLCK, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, + KC_PAUS, 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, @@ -92,6 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + /* Keymap 2: Media and mouse keys * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -135,10 +140,6 @@ KEYMAP( ), }; -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 @@ -154,6 +155,31 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, + {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, + {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, + {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + /* Right hand, matrix positions */ + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands +}; + + // Runs just one time when the keyboard initializes. void matrix_init_user(void) { -- cgit v1.2.3 From e1bfe13090debb25db8e44048cd0055e3680513c Mon Sep 17 00:00:00 2001 From: chwilk Date: Mon, 26 Sep 2016 15:49:10 -0500 Subject: Moved hand_swap_config array so all keyboards get it defined --- keyboards/ergodox/ergodox.c | 24 ++++++++++++++++++++++++ keyboards/ergodox/keymaps/kastyle/keymap.c | 21 --------------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c index e69de29bb2..c88c1ad890 100644 --- a/keyboards/ergodox/ergodox.c +++ b/keyboards/ergodox/ergodox.c @@ -0,0 +1,24 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, + {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, + {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, + {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + /* Right hand, matrix positions */ + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, +}; + diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c index 4e3794a96f..4679966869 100644 --- a/keyboards/ergodox/keymaps/kastyle/keymap.c +++ b/keyboards/ergodox/keymaps/kastyle/keymap.c @@ -155,31 +155,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; -// swap-hands action needs a matrix to define the swap -const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - /* Left hand, matrix positions */ - {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, - {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, - {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, - {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, - {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, - {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, - {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, - /* Right hand, matrix positions */ - {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, - {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, - {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, - {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, - {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, - {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, - {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, -}; - const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands }; - // Runs just one time when the keyboard initializes. void matrix_init_user(void) { -- cgit v1.2.3 From 32cc2f6bd90233401a3590b3f975304dac6e4805 Mon Sep 17 00:00:00 2001 From: chwilk Date: Tue, 27 Sep 2016 11:27:09 -0500 Subject: Added description of kastyle keymap --- keyboards/ergodox/keymaps/kastyle/readme.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 keyboards/ergodox/keymaps/kastyle/readme.md diff --git a/keyboards/ergodox/keymaps/kastyle/readme.md b/keyboards/ergodox/keymaps/kastyle/readme.md new file mode 100644 index 0000000000..944286a818 --- /dev/null +++ b/keyboards/ergodox/keymaps/kastyle/readme.md @@ -0,0 +1,14 @@ +The kastyle keymap was originally intended to remap the ErgoDox EZ to more +closely approximate the layout of a Kinesis Advantage. Notable changes +over the stock ErgoDox layout include: + + * Re-arragnement of tab, enter, space, and delete to match the Kinesis + * Addition of print screen, pause, etc. keys following the kines-ish keymap + on L1 + * GUI keys have replaced Ctrl on the thumb keys (for Mac use), and Alt keys + are mapped to allow Esc on tap (good for Vi users) + * Most notably, the addition of a momentary one-handed mode for quick and + easy access to keys on the other half of the keyboard, e.g. while using a + mouse in one hand, one may add text to a dialogue box with the other without + having to reach across the keyboard or remove one's hand from the mouse. + -- cgit v1.2.3 From 7bca9bc402b41990cd73291758ebcbbadc6a6fd0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:09:40 +0100 Subject: added a toggle between Mac and Windows base layers (with swapped cmd and ctrl) --- keyboards/planck/keymaps/callum/keymap.c | 59 ++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 6c34311339..b47f8eb05e 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,13 +11,15 @@ extern keymap_config_t keymap_config; // 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 _BASE 0 -#define _MOVE 1 -#define _SYMB 2 -#define _FUNC 3 +#define _MAC 0 +#define _WIN 1 +#define _MOVE 2 +#define _SYMB 3 +#define _FUNC 4 enum planck_keycodes { - BASE = SAFE_RANGE, + MAC = SAFE_RANGE, + WIN, MOVE, SYMB, FUNC, @@ -30,7 +32,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE +/* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+-------------+------+------+------+------+------| @@ -41,13 +43,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | * `-----------------------------------------------------------------------------------' */ -[_BASE] = { +[_MAC] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, +/* BASE Windows + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * `-----------------------------------------------------------------------------------' + */ +[_WIN] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, 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_RSFT}, + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} +}, + /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -88,24 +108,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | | | + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, _______, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case MAC: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_MAC); + } + return false; + break; + case WIN: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_WIN); + } + return false; + break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); -- cgit v1.2.3 From f442348e50b50df37711af1e5f19c6a06f38d8dd Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:19:11 +0100 Subject: added close key for alt-f4 macro --- keyboards/planck/keymaps/callum/keymap.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index b47f8eb05e..56808aa8ca 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -23,7 +23,8 @@ enum planck_keycodes { MOVE, SYMB, FUNC, - LOCK + LOCK, + CLOSE }; // Fillers to make layering more clear @@ -110,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' @@ -118,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } @@ -183,6 +184,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CLOSE: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_F4); + } else { + unregister_code(KC_F4); + unregister_code(KC_LALT); + } + return false; + break; } return true; } -- cgit v1.2.3 From 0c243d0d5d9edde9b96bfa05c2a504b2cbebbc7c Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:47:11 +0100 Subject: updated readme --- keyboards/planck/keymaps/callum/keymap.c | 30 ++++++------ keyboards/planck/keymaps/callum/readme.md | 81 ++++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 28 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 56808aa8ca..f5a816f4ee 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ [_MAC] = { @@ -57,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | * `-----------------------------------------------------------------------------------' */ [_WIN] = { @@ -71,11 +71,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | | Left | Down |Right | | | Left | Down |Right | | Del | + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | |Pg Up |Pg Dn | | |Pg Dn |Pg Up | | | | + * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -89,9 +89,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------. - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * |-----------------------------------------------------------------------------------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-----------------------------------------------------------------------------------| + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | |Reset | + * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index b70de3f1e2..8125907655 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -6,38 +6,93 @@ This is a layout for the grid planck, built with a few ideals in mind: - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. - Backspace should be in the “capslock position” in the colemak tradition. +- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. ## The `BASE` layer -![](http://i.imgur.com/tVNI3SE.png) - -This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. +For Mac +``` +,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | +`-----------------------------------------------------------------------------------' +``` + +For Windows +``` + ,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+-------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | +`-----------------------------------------------------------------------------------' +``` + +One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. + +The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer -![](http://i.imgur.com/KXRSuHT.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | | Home | Up | End | | | Home | Up | End | | Esc | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Del | | Left | Down | Right| | | Left | Down | Right| | Del | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `home` and `end` jump you to the beginning and end of the line respectively and so that `pg up` and `pg dn` move the cursor instead of just scrolling. +On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/thh1ne2.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | +|-----------------------------------------------------------------------------------| +| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+-------------+------+------+------+------+------| +| | ~ | ` | + | = | | | \ | [ | ] | { | } | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. -`esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. +`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. ## The `FUNC` layer -![](http://i.imgur.com/1VKFBBU.png) - -The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) +``` +,-----------------------------------------------------------------------------------. +| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-----------------------------------------------------------------------------------| +| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | Reset| +`-----------------------------------------------------------------------------------' +``` + +`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. ## Other changes from the default I have LEDs and sound disabled, simply because I have no need of them. -- cgit v1.2.3 From 65f035933bc386ee2c78dda7c22419c36f441920 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:52:55 +0100 Subject: Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 8125907655..2e59c00d6d 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -26,9 +26,9 @@ For Mac For Windows ``` - ,-----------------------------------------------------------------------------------. +,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+-------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | |------+------+------+------+------+------|------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -- cgit v1.2.3 From 1c1aa729b1c2c996c3e58fcbcec9dfebb79261eb Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:55:27 +0100 Subject: Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 2e59c00d6d..7a771130ab 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -15,9 +15,9 @@ For Mac ``` ,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -30,7 +30,7 @@ For Windows | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | |------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -45,9 +45,9 @@ The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` k ``` ,-----------------------------------------------------------------------------------. | Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -64,9 +64,9 @@ None of the modifiers are overwritten so that `shift-alt-arrows` etc work as exp ``` ,-----------------------------------------------------------------------------------. | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | ~ | ` | + | = | | | \ | [ | ] | { | } | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -83,9 +83,9 @@ Again none of the modifiers are overwritten so that shortcuts involving numbers ``` ,-----------------------------------------------------------------------------------. | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | Reset| -- cgit v1.2.3 From d387534687145c473bf018677dea4916717affe4 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:59:36 +0100 Subject: fixed comments --- keyboards/planck/keymaps/callum/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index f5a816f4ee..751af9eb9f 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -36,9 +36,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -54,9 +54,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Windows * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -90,9 +90,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -108,9 +108,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| -- cgit v1.2.3 From 848bb6df4358b44e24b3791482a0944c78d18cdb Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 7 Sep 2016 20:45:23 +0100 Subject: changed RALT to LALT on Windows --- keyboards/planck/keymaps/callum/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 751af9eb9f..5754b17721 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} }, /* MOVE -- cgit v1.2.3 From ddb8eb842d354f92b1cea12e43f571ea774744ad Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 08:04:38 +0100 Subject: removed windows layer and updated brightness keys for macOS Sierra --- keyboards/planck/keymaps/callum/keymap.c | 90 +++++--------------------------- 1 file changed, 14 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 5754b17721..0ac1906bac 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,20 +11,15 @@ extern keymap_config_t keymap_config; // 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 _MAC 0 -#define _WIN 1 -#define _MOVE 2 -#define _SYMB 3 -#define _FUNC 4 +#define _BASE 0 +#define _MOVE 1 +#define _SYMB 2 +#define _FUNC 3 enum planck_keycodes { - MAC = SAFE_RANGE, - WIN, MOVE, SYMB, - FUNC, - LOCK, - CLOSE + FUNC }; // Fillers to make layering more clear @@ -33,7 +28,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE Mac +/* BASE * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -44,31 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ -[_MAC] = { +[_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, -/* BASE Windows - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | - * `-----------------------------------------------------------------------------------' - */ -[_WIN] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, 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_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} -}, - /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -81,9 +58,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, _______, KC_HOME, KC_UP, KC_END, _______, _______, KC_HOME, KC_UP, KC_END, _______, KC_ESC}, - {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL}, - {_______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______}, + {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, + {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -109,41 +86,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | | Play | Prev | Next | BL+ | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, + {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case MAC: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MAC); - } - return false; - break; - case WIN: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WIN); - } - return false; - break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); @@ -172,28 +132,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case LOCK: - if (record->event.pressed) { - register_code(KC_RSFT); - register_code(KC_RCTL); - register_code(KC_POWER); - } else { - unregister_code(KC_POWER); - unregister_code(KC_RCTL); - unregister_code(KC_RSFT); - } - return false; - break; - case CLOSE: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_F4); - } else { - unregister_code(KC_F4); - unregister_code(KC_LALT); - } - return false; - break; } return true; } -- cgit v1.2.3 From 65b0eff6d863d458464c35a8571071ad4a519af5 Mon Sep 17 00:00:00 2001 From: Chris McLennon Date: Wed, 28 Sep 2016 13:24:29 -0500 Subject: Contributing new keymap to Ergodox --- keyboards/ergodox/keymaps/mclennon_osx/README.md | 5 + keyboards/ergodox/keymaps/mclennon_osx/config.h | 93 +++++++++++++++ keyboards/ergodox/keymaps/mclennon_osx/keymap.c | 144 +++++++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/README.md create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/config.h create mode 100644 keyboards/ergodox/keymaps/mclennon_osx/keymap.c diff --git a/keyboards/ergodox/keymaps/mclennon_osx/README.md b/keyboards/ergodox/keymaps/mclennon_osx/README.md new file mode 100644 index 0000000000..60980d043d --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/README.md @@ -0,0 +1,5 @@ +# Ergodox EZ for OS X + +This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock. + +If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/). diff --git a/keyboards/ergodox/keymaps/mclennon_osx/config.h b/keyboards/ergodox/keymaps/mclennon_osx/config.h new file mode 100644 index 0000000000..99cbaf0003 --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/config.h @@ -0,0 +1,93 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER ErgoDox EZ +#define PRODUCT ErgoDox EZ +#define DESCRIPTION t.m.k. keyboard firmware for Ergodox + +/* key matrix size */ +#define MATRIX_ROWS 14 +#define MATRIX_COLS 6 + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#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 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 2 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION +//#define DEBUG_MATRIX_SCAN_RATE + +// CUSTOM +#define PREVENT_STUCK_MODIFIERS + +#endif diff --git a/keyboards/ergodox/keymaps/mclennon_osx/keymap.c b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c new file mode 100644 index 0000000000..627ff01e4a --- /dev/null +++ b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c @@ -0,0 +1,144 @@ +// Media keys work on OSX, but not on Windows. +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // Default layer +#define AUXI 1 // Auxiliary layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ~` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | -_ | += | Bkspc | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | Del | Y | U | I | O | P | |\ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | L1 | A | S | D | F | G |------| |------| H | J | K | L | ;: | Enter | + * |--------+------+------+------+------+------| {[ | | }] |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | <, | >. | ?/ | "' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | | | | Esc | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | |Power | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | LGui | LAlt |------| |------| Bkspc |Space | + * | | | | | Del | | | + * `--------------------' `----------------------' + */ +// 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_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1), + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, + KC_LCTL, KC_TRNS,KC_TRNS,KC_TRNS,KC_ESC, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_LGUI,KC_LALT,KC_TRNS, + + // right hand + KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, + KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, + KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT, + KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_QUOT, + KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_PWR, KC_TRNS, + KC_TRNS, + KC_DELETE, KC_BSPC, KC_SPC + ), +/* Keymap 1: Auxiliary Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | TRNS | | | Mute | VolDn| VolUp| Play | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | TRNS | |LShift| LCtrl| | |------| |------| LEFT | DOWN | UP |RIGHT | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LShift | | | | | | | | | MPrv | MNxt | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | LGui | LAlt |------| |------| Bkspc| Space| + * | | | | | Del | | | + * `--------------------' `--------------------' + */ +// AUXILIARY +[AUXI] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LSHIFT,KC_LCTL, KC_TRNS, KC_TRNS, + KC_LSHIFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_LGUI, KC_LALT, KC_TRNS, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, + KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_PWR, KC_TRNS, + KC_TRNS, + KC_DELETE, KC_BSPC, KC_SPC +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUXI) // FN1 - Momentary Layer 1 (Auxiliary) +}; + +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 cce294df86be7c430f8764ae3330991e66138f43 Mon Sep 17 00:00:00 2001 From: Chris McLennon Date: Wed, 28 Sep 2016 14:44:41 -0500 Subject: Remove config.h --- keyboards/ergodox/keymaps/mclennon_osx/config.h | 93 ------------------------- 1 file changed, 93 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/mclennon_osx/config.h diff --git a/keyboards/ergodox/keymaps/mclennon_osx/config.h b/keyboards/ergodox/keymaps/mclennon_osx/config.h deleted file mode 100644 index 99cbaf0003..0000000000 --- a/keyboards/ergodox/keymaps/mclennon_osx/config.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION t.m.k. keyboard firmware for Ergodox - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#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 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 2 -#define TAPPING_TERM 200 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -//#define DEBUG_MATRIX_SCAN_RATE - -// CUSTOM -#define PREVENT_STUCK_MODIFIERS - -#endif -- cgit v1.2.3 From 8fa41f1ca1b35e4d0535bc643082ff4197b27f2d Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 23:15:35 +0100 Subject: big restructure now I only have to consider macOS, also added mouse, more function keys, and some neat macros --- keyboards/planck/keymaps/callum/keymap.c | 139 ++++++++++++++++++++++++++----- 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 0ac1906bac..38c362fcbe 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -14,12 +14,19 @@ extern keymap_config_t keymap_config; #define _BASE 0 #define _MOVE 1 #define _SYMB 2 -#define _FUNC 3 +#define _MOUSE 3 +#define _FUNC 4 enum planck_keycodes { - MOVE, + MOVE = SAFE_RANGE, SYMB, - FUNC + FUNC, + CMDLEFT, + CMDRGHT, + BELOW, + ABOVE, + VOLUP, + VOLDN }; // Fillers to make layering more clear @@ -36,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | * `-----------------------------------------------------------------------------------' */ [_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, - {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} + {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC } }, /* MOVE @@ -52,16 +59,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, - {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, - {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC }, + {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______} }, /* SYMB @@ -82,22 +89,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_MOUSE] = { + {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | | | | | | + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | Reset| + * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, VOLUP }, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, VOLDN }, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } }; @@ -107,20 +132,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case MOVE: if (record->event.pressed) { layer_on(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; case SYMB: if (record->event.pressed) { layer_on(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; @@ -132,6 +157,74 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CMDLEFT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + } else { + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + } + return false; + break; + case CMDRGHT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + } else { + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + } + return false; + break; + case BELOW: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + } + return false; + break; + case ABOVE: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + register_code(KC_UP); + unregister_code(KC_UP); + } + return false; + break; + case VOLUP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLU); + } else { + unregister_code(KC_VOLU); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; + case VOLDN: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLD); + } else { + unregister_code(KC_VOLD); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; } return true; } -- cgit v1.2.3 From 3d45860dc280c7595763256ecd4874220abf0ab2 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Wed, 28 Sep 2016 20:19:28 -0500 Subject: Updating Vision to beta layout. --- keyboards/vision_division/config.h | 19 +- keyboards/vision_division/keymaps/default/Makefile | 26 +- keyboards/vision_division/keymaps/default/config.h | 46 +- keyboards/vision_division/keymaps/default/keymap.c | 940 ++++++++++----------- keyboards/vision_division/matrix_types.h | 33 +- keyboards/vision_division/rules.mk | 2 +- keyboards/vision_division/vision_division.c | 40 + 7 files changed, 570 insertions(+), 536 deletions(-) diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index f50378ffa8..1f8466a546 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -26,10 +26,9 @@ along with this program. If not, see . /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION ROW2COL -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 @@ -124,10 +123,18 @@ along with this program. If not, see . */ /* disable debug print */ -//#define NO_DEBUG +// #ifndef NO_DEBUG +// # define NO_DEBUG +// #endif /* disable print */ -//#define NO_PRINT +// #ifndef NO_PRINT +// # define NO_PRINT +// #endif + +/* Only print user print statements */ +// #define USER_PRINT + /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index ecbe7e1ab2..5a930e85ed 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -2,19 +2,19 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = yes # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h index 16740fb15b..efd43f41b4 100644 --- a/keyboards/vision_division/keymaps/default/config.h +++ b/keyboards/vision_division/keymaps/default/config.h @@ -4,25 +4,44 @@ #include "../../config.h" #include "matrix_types.h" - /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID GET_PID(NUMERIC_NORMAL, HOMING_MAX_TEENSY) #define DEVICE_VER 0x0001 #define MANUFACTURER IBNobody #define PRODUCT Vision Division #define DESCRIPTION Full / Split Keyboard - -#define MATRIX_ROWS 6 +#define MATRIX_ROWS 6 #define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 } -#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) -#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_NORMAL, HOMING_MAX_TEENSY) +// !!! MAKE SURE THAT THE LEFT/RIGHT PCB DEFINES MATCH ON ALL OF THESE COLUMNS -#define UNUSED_PINS +// **LEFT** **RIGHT** +#define PRODUCT_ID GET_PID( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) +#define MATRIX_COLS GET_MATRIX_COLS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) +#define MATRIX_COL_PINS GET_MATRIX_COL_PINS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY) -/*#define KEYMAP( \ +#define KEYMAP(MATRIX_LAYER, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, NUMERIC_MAX_TEENSY, \ + k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ + k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ + k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ + k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ + k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ + k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ +) + +// Example Keymap Macros + +/* +#define KEYMAP(MATRIX_LAYER, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ @@ -30,16 +49,18 @@ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ ) \ -KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \ -)*/ +) +*/ -#define KEYMAP( \ +/* +#define KEYMAP(MATRIX_LAYER, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, \ @@ -47,7 +68,7 @@ KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B \ ) \ -KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ +KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \ @@ -55,5 +76,6 @@ KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO \ ) +*/ #endif \ No newline at end of file diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index b8cef9c759..64118abdce 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -8,46 +8,70 @@ #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_UPPER 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_ADJUST 7 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_UPPER 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_TOGGLE 14 -#define MACRO_AUDIO_TOGGLE 16 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 -#define MACRO_BREATH_TOGGLE 21 -#define MACRO_BREATH_SPEED_INC 23 -#define MACRO_BREATH_SPEED_DEC 24 -#define MACRO_BREATH_DEFAULT 25 +enum keyboard_layers { + LAYER_QWERTY = 0, + LAYER_UPPER, + LAYER_LOWER, + LAYER_FUNCTION, + LAYER_MOUSE, + LAYER_ADJUST, +}; +enum keyboard_macros { + MACRO_QWERTY = 0, + MACRO_UPPER, + MACRO_LOWER, + MACRO_FUNCTION, + MACRO_MOUSE, + MACRO_TIMBRE_1, + MACRO_TIMBRE_2, + MACRO_TIMBRE_3, + MACRO_TIMBRE_4, + MACRO_TEMPO_U, + MACRO_TEMPO_D, + MACRO_TONE_DEFAULT, + MACRO_MUSIC_TOGGLE, + MACRO_AUDIO_TOGGLE, + MACRO_INC_VOICE, + MACRO_DEC_VOICE, + MACRO_BACKLIGHT, + MACRO_BREATH_TOGGLE, + MACRO_BREATH_SPEED_INC, + MACRO_BREATH_SPEED_DEC, + MACRO_BREATH_DEFAULT, + MACRO_MOUSE_MOVE_UL, + MACRO_MOUSE_MOVE_UR, + MACRO_MOUSE_MOVE_DL, + MACRO_MOUSE_MOVE_DR, + MACRO_HELP, + MACRO_HELP_1, + MACRO_HELP_2, + MACRO_HELP_3, + MACRO_HELP_4, + MACRO_HELP_5, + MACRO_HELP_6, + MACRO_HELP_7, + MACRO_HELP_8, + MACRO_HELP_9, + MACRO_HELP_0, + MACRO_GENERAL_1, + MACRO_GENERAL_2, + MACRO_GENERAL_3, + MACRO_GENERAL_4, + MACRO_GENERAL_5, + MACRO_CURSOR_UL, + MACRO_CURSOR_UR, + MACRO_CURSOR_DL, + MACRO_CURSOR_DR, + MACRO_MUTE_APP, + MACRO_COPY_CUT, +}; #define M_QWRTY M(MACRO_QWERTY) -#define M_COLMK M(MACRO_COLEMAK) -#define M_DVORK M(MACRO_DVORAK) #define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) #define M_MOUSE M(MACRO_MOUSE) + #define TIMBR_1 M(MACRO_TIMBRE_1) #define TIMBR_2 M(MACRO_TIMBRE_2) #define TIMBR_3 M(MACRO_TIMBRE_3) @@ -55,15 +79,47 @@ #define TMPO_UP M(MACRO_TEMPO_U) #define TMPO_DN M(MACRO_TEMPO_D) #define TMPO_DF M(MACRO_TONE_DEFAULT) + +#define VC_UP M(MACRO_INC_VOICE) +#define VC_DOWN M(MACRO_DEC_VOICE) + #define M_BACKL M(MACRO_BACKLIGHT) #define M_BRTOG M(MACRO_BREATH_TOGGLE) #define M_BSPDU M(MACRO_BREATH_SPEED_INC) #define M_BSPDD M(MACRO_BREATH_SPEED_DEC) #define M_BDFLT M(MACRO_BREATH_DEFAULT) +#define M_MS_UL M(MACRO_MOUSE_MOVE_UL) +#define M_MS_UR M(MACRO_MOUSE_MOVE_UR) +#define M_MS_DL M(MACRO_MOUSE_MOVE_DL) +#define M_MS_DR M(MACRO_MOUSE_MOVE_DR) -#define VC_UP M(MACRO_INC_VOICE) -#define VC_DOWN M(MACRO_DEC_VOICE) +#define M_HELP M(MACRO_HELP) +#define M_HELP1 M(MACRO_HELP_1) +#define M_HELP2 M(MACRO_HELP_2) +#define M_HELP3 M(MACRO_HELP_3) +#define M_HELP4 M(MACRO_HELP_4) +#define M_HELP5 M(MACRO_HELP_5) +#define M_HELP6 M(MACRO_HELP_6) +#define M_HELP7 M(MACRO_HELP_7) +#define M_HELP8 M(MACRO_HELP_8) +#define M_HELP9 M(MACRO_HELP_9) +#define M_HELP0 M(MACRO_HELP_0) + +#define M_M1 M(MACRO_GENERAL_1) +#define M_M2 M(MACRO_GENERAL_2) +#define M_M3 M(MACRO_GENERAL_3) +#define M_M4 M(MACRO_GENERAL_4) +#define M_M5 M(MACRO_GENERAL_5) + +#define M_UL M(MACRO_CURSOR_UL) +#define M_UR M(MACRO_CURSOR_UR) +#define M_DL M(MACRO_CURSOR_DL) +#define M_DR M(MACRO_CURSOR_DR) + +#define M_MUTEA M(MACRO_MUTE_APP) + +#define M_CP_CT M(MACRO_COPY_CUT) #define SC_UNDO LCTL(KC_Z) @@ -77,6 +133,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define TG_NKRO MAGIC_TOGGLE_NKRO #define OS_SHFT KC_FN0 #define _______ KC_TRNS @@ -84,208 +141,128 @@ #define ________________ _______, _______ #define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - -KEYMAP( \ - KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ - KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ - KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ - KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, 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_ENT, XXXXXXX, XXXXXXX, XXXXXXX, \ - KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, 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_RSFT, XXXXXXX, KC_UP, XXXXXXX, \ - KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, KC_LCTL, KC_LCTL, XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ -) - - -// [LAYER_QWERTY] = { // QWERTY -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { 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_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - - -// /* Numeric Max / Homing Normal - Traditional -// * .-----------------------------------. .-----------------------------------. .-----------------_-----------------. .-----------------------------------. .--------------------------. -// * | | | | | | | | | | | | | | | | | | | | | | | | -// * '-----------------------------------' '-----------------------------------' '-----------------------------------' '-----------------------------------' '--------------------------' -// * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------. -// * | | | | | | ESC | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | | | | | | -// * |--------+--------+--------+--------| | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------| -// * | | | | | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | | | | | | -// * |--------+--------+--------+ | o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| '--------+--------+--------' -// * | | | | | o | CAPS | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | | -// * |--------+--------+--------+--------| o | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---+--------| .--------. -// * | | | | | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX | | | | -// * |--------+--------+--------+ | | -------+ -------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+--------+--------| .--------+--------+--------. -// * | | | | | LCTRL | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | | | | | | -// * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------' -// */ - - -// /* QWERTY -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_QWERTY] = { // QWERTY -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { 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_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* COLEMAK -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_COLEMAK] = { // COLEMAK -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* DVORAK -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_DVORAK] = { // DVORAK -// { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, -// { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, -// { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, -// { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, -// { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, -// }, - -// /* UPPER -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | 0 | | RALT | . | ENTER | | | | | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_UPPER] = { // UPPER -// { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, -// { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, -// { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, -// { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, -// { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, -// }, - -// /* LOWER -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | | | | | | | | | | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_LOWER] = { // LOWER -// { _______, 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_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, -// { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, -// { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, -// }, - -// /* FUNCTION -// * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. -// * | NUM LK | | | | | | | | | | | | | XXXXXX . | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| -// * | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| -// * | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | | -// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| -// * | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE | -// * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| -// * | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK | -// * '--------------------------------------------------------------------------------------------------------------------------------------' -// */ - -// [LAYER_FUNCTION] = { // FUNCTION -// { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, -// { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, -// { KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX }, -// { _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE }, -// { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, -// }, - -// #ifdef MOUSEKEY_ENABLE - -// [LAYER_MOUSE] = { // MOUSE -// { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, -// { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, -// { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, -// { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, -// { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, -// }, - -// #endif - -// [LAYER_ADJUST] = { // ADJUST -// { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, -// { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, -// { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, -// }, - - -// /* -// [LAYER_EMPTY] = { // LAYER -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, -// { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, -// { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, -// }, -// */ +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = +{ +/* LAYER = LAYER_QWERTY + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | FN | PRINT | SCR LK | PAUSE | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | VOL DN | MUTE | VOL UP | BACKLT | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | M1 | INS | HOME | PG UP | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | NUM LK | KP / | KP * | KP - | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | M2 | DEL | END | PG DN | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | KP 7 | KP 8 | KP 9 | KP + | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | M3 | UL | UP | UR | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | KP 4 | KP 5 | KP 6 | KP + | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | M4 | LEFT | CP/CT | RIGHT | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | KP 1 | KP 2 | KP 3 | KP Ent | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | M5 | DL | DOWN | DR | | LCTRL | XXXXXX | XXXXXX | LWIN | LALT | LOWER | SPACE . SPACE | UPPER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | KP 0 | KP , | KP . | KP Ent | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_QWERTY, \ + M_HELP , KC_PSCR, KC_SLCK, KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, \ + M_M1 , KC_INS , KC_HOME, KC_PGUP, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ + M_M2 , KC_DEL , KC_END , KC_PGDN, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, \ + M_M3 , M_UL , KC_UP , M_UR , KC_CAPS, 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_ENT , KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, \ + M_M4 , KC_LEFT, M_CP_CT, KC_RGHT, KC_LSFT, 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_RSFT, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, \ + M_M5 , M_DL , KC_DOWN, M_DR , KC_LCTL, XXXXXXX, XXXXXXX, KC_LGUI, KC_LALT, M_LOWER, KC_SPC , KC_SPC , M_UPPER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT \ +), +/* LAYER = LAYER_LOWER + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_LOWER, \ + _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_UPPER + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP Ent | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP Ent | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_UPPER, \ + _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_MOUSE + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | MS BT1 | MS AC0 | MS WHU | MS AC2 | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | MS BT2 | MS WHL | MS WHD | MS WHU | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | MS BT3 | MS UL | MS U | MS UR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | o | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | MS BT4 | MS L | MS BT1 | MS R | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | MS BT5 | MS DL | MS D | MS DR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_MOUSE, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN1, KC_ACL0, KC_WH_U, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN3, M_MS_UL, KC_MS_U, M_MS_UR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN4, KC_MS_L, KC_BTN1, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_BTN5, M_MS_DL, KC_MS_D, M_MS_DR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), +/* LAYER = LAYER_ADJUST + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | VOICE- | AUDIO | VOICE+ | MUSIC | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' + .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | o | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' +*/ +KEYMAP(LAYER_ADJUST, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, MUV_DE , AU_TOG , MUV_IN , MU_TOG , \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ +), }; @@ -313,303 +290,290 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); } const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MODS_ONESHOT(MOD_LSFT), + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function - switch(id) + // MACRODOWN only works in this function + switch(id) + { + + case MACRO_HELP_1: + if (record->event.pressed) + { + uprint("H1"); + } + break; + + case MACRO_HELP_2: + if (record->event.pressed) + { + uprint("H2"); + } + break; + + case MACRO_HELP_3: + if (record->event.pressed) + { + uprint("H3"); + } + break; + + case MACRO_HELP_4: + if (record->event.pressed) + { + uprint("H4"); + } + break; + + case MACRO_HELP_5: + if (record->event.pressed) + { + uprint("H5"); + } + break; + + case MACRO_HELP_6: + if (record->event.pressed) + { + uprint("H6"); + } + break; + + case MACRO_HELP_7: + if (record->event.pressed) + { + uprint("H7"); + } + break; + + case MACRO_HELP_8: + if (record->event.pressed) + { + uprint("H8"); + } + break; + + case MACRO_HELP_9: + if (record->event.pressed) + { + uprint("H9"); + } + break; + + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; + + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; + + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; + + case MACRO_BREATH_DEFAULT: + if (record->event.pressed) + { + breathing_defaults(); + } + break; + + case MACRO_QWERTY: + if (record->event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) { + layer_on(LAYER_UPPER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; + + case MACRO_LOWER: + if (record->event.pressed) + { + layer_on(LAYER_LOWER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); + } + break; - // case MACRO_BREATH_TOGGLE: - // if (record->event.pressed) - // { - // breathing_toggle(); - // } - // break; - - // case MACRO_BREATH_SPEED_INC: - // if (record->event.pressed) - // { - // breathing_speed_inc(1); - // } - // break; - - // case MACRO_BREATH_SPEED_DEC: - // if (record->event.pressed) - // { - // breathing_speed_dec(1); - // } - // break; - - // case MACRO_BREATH_DEFAULT: - // if (record->event.pressed) - // { - // breathing_defaults(); - // } - // break; - - case MACRO_QWERTY: - if (record->event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) - { - persistant_default_layer_set(1UL<event.pressed) - { - layer_on(LAYER_UPPER); - // breathing_speed_set(2); - // breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - else - { - layer_off(LAYER_UPPER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - break; - - case MACRO_LOWER: - if (record->event.pressed) - { - layer_on(LAYER_LOWER); - // breathing_speed_set(2); - // breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - else - { - layer_off(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); - } - break; - - case MACRO_FUNCTION: - if (record->event.pressed) - { - // breathing_speed_set(3); - // breathing_enable(); - layer_on(LAYER_FUNCTION); - } - else - { - // breathing_speed_set(1); - // breathing_self_disable(); - layer_off(LAYER_FUNCTION); - } - break; + case MACRO_FUNCTION: + if (record->event.pressed) + { + breathing_speed_set(3); + breathing_enable(); + layer_on(LAYER_FUNCTION); + } + else + { + breathing_speed_set(1); + breathing_self_disable(); + layer_off(LAYER_FUNCTION); + } + break; #ifdef MOUSEKEY_ENABLE - case MACRO_MOUSE: - if (record->event.pressed) - { - layer_invert(LAYER_MOUSE); - } - break; + case MACRO_MOUSE: + if (record->event.pressed) + { + layer_invert(LAYER_MOUSE); + } + break; #endif /* MOUSEKEY_ENABLE */ #ifdef AUDIO_ENABLE - case MACRO_TIMBRE_1: - if (record->event.pressed) set_timbre(TIMBRE_12); - break; - - case MACRO_TIMBRE_2: - if (record->event.pressed) set_timbre(TIMBRE_25); - break; - - case MACRO_TIMBRE_3: - if (record->event.pressed) set_timbre(TIMBRE_50); - break; - - case MACRO_TIMBRE_4: - if (record->event.pressed) set_timbre(TIMBRE_75); - break; - - case MACRO_TEMPO_U: - if (record->event.pressed) increase_tempo(10); - break; - - case MACRO_TEMPO_D: - if (record->event.pressed) decrease_tempo(10); - break; - - case MACRO_TONE_DEFAULT: - if (record->event.pressed) - { - set_timbre(TIMBRE_DEFAULT); - set_tempo(TEMPO_DEFAULT); - } - break; - -/* - case MACRO_AUDIO_TOGGLE: - if (record->event.pressed) - { - if (is_audio_on()) - { - audio_off(); - } - else - { - audio_on(); - PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); - } - } - break; - - case MACRO_MUSIC_TOGGLE: - if (record->event.pressed) - { - if (IS_LAYER_ON(LAYER_MUSIC)) - { - layer_off(LAYER_MUSIC); - stop_all_notes(); - } - else - { - PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); - layer_on(LAYER_MUSIC); - } - } - break; - case MACRO_INC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; - - case MACRO_DEC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; -*/ + case MACRO_TIMBRE_1: + if (record->event.pressed) set_timbre(TIMBRE_12); + break; + + case MACRO_TIMBRE_2: + if (record->event.pressed) set_timbre(TIMBRE_25); + break; + + case MACRO_TIMBRE_3: + if (record->event.pressed) set_timbre(TIMBRE_50); + break; + + case MACRO_TIMBRE_4: + if (record->event.pressed) set_timbre(TIMBRE_75); + break; + + case MACRO_TEMPO_U: + if (record->event.pressed) increase_tempo(10); + break; + + case MACRO_TEMPO_D: + if (record->event.pressed) decrease_tempo(10); + break; + + case MACRO_TONE_DEFAULT: + if (record->event.pressed) + { + set_timbre(TIMBRE_DEFAULT); + set_tempo(TEMPO_DEFAULT); + } + break; #endif /* AUDIO_ENABLE */ #ifdef BACKLIGHT_ENABLE - case MACRO_BACKLIGHT: - if (record->event.pressed) - { - backlight_step(); - } -#endif + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); + } + break; +#endif /* BACKLIGHT_ENABLE */ - default: - break; + default: + break; - } - return MACRO_NONE; +} +return MACRO_NONE; }; - #ifdef AUDIO_ENABLE void matrix_init_user(void) { - set_voice(default_voice); - startup_user(); - println("Matrix Init"); + set_voice(default_voice); + startup_user(); + println("Matrix Init"); } void led_set_user(uint8_t usb_led) { - static uint8_t old_usb_led = 0; + static uint8_t old_usb_led = 0; - _delay_ms(10); // gets rid of tick + _delay_ms(10); // gets rid of tick - if (!is_playing_notes()) + if (!is_playing_notes()) + { + if ((usb_led & (1< Date: Wed, 28 Sep 2016 20:26:41 -0500 Subject: Fix #770, Fix #779 --- tmk_core/common/avr/bootloader.c | 8 ++++---- tmk_core/common/command.c | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c index fb9bf2d1c3..ad547b9853 100644 --- a/tmk_core/common/avr/bootloader.c +++ b/tmk_core/common/avr/bootloader.c @@ -38,7 +38,7 @@ * | | | | * = = = = * | | 32KB-4KB | | 128KB-8KB - * 0x6000 +---------------+ 0x1FC00 +---------------+ + * 0x7000 +---------------+ 0x1E000 +---------------+ * | Bootloader | 4KB | Bootloader | 8KB * 0x7FFF +---------------+ 0x1FFFF +---------------+ * @@ -64,8 +64,8 @@ #define BOOTLOADER_START (FLASH_SIZE - BOOTLOADER_SIZE) -/* - * Entering the Bootloader via Software +/* + * Entering the Bootloader via Software * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html */ #define BOOTLOADER_RESET_KEY 0xB007B007 @@ -137,7 +137,7 @@ void bootloader_jump_after_watchdog_reset(void) #if 0 /* Jumping To The Bootloader * http://www.pjrc.com/teensy/jump_to_bootloader.html - * + * * This method doen't work when using LUFA. idk why. * - needs to initialize more regisers or interrupt setting? */ diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index fc5aad5c1d..f3e1bf6234 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -384,9 +384,6 @@ static bool command_common(uint8_t code) debug_mouse = true; } else { print("\ndebug: off\n"); - debug_matrix = false; - debug_keyboard = false; - debug_mouse = false; } break; -- cgit v1.2.3 From ce57b94908e4fb5a66190dc2a093c165aa4400f0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 29 Sep 2016 07:47:30 +0100 Subject: added en-dash and gbp keys and updated readme --- keyboards/planck/keymaps/callum/keymap.c | 38 ++++++-- keyboards/planck/keymaps/callum/readme.md | 149 ++++++++++++------------------ 2 files changed, 91 insertions(+), 96 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 38c362fcbe..82ba83f4e4 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -25,6 +25,8 @@ enum planck_keycodes { CMDRGHT, BELOW, ABOVE, + DASH, + GBP, VOLUP, VOLDN }; @@ -55,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -73,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -83,19 +85,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYMB] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, - {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DASH }, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, GBP }, {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* MOUSE * ,-----------------------------------------------------------------------------------. - * | | | | | | | | | | | | | + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | SW-D | SW-U | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -201,6 +203,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case DASH: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_MINS); + } else { + unregister_code(KC_MINS); + unregister_code(KC_LALT); + } + return false; + break; + case GBP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_3); + } else { + unregister_code(KC_3); + unregister_code(KC_LALT); + } + return false; + break; case VOLUP: if (record->event.pressed) { register_code(KC_LALT); diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 7a771130ab..b5997cd5ae 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -2,97 +2,70 @@ This is a layout for the grid planck, built with a few ideals in mind: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. -- Backspace should be in the “capslock position” in the colemak tradition. -- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. -## The `BASE` layer -For Mac ``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | -`-----------------------------------------------------------------------------------' +/* BASE + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | + * `-----------------------------------------------------------------------------------' + */ + +/* MOVE + * ,-----------------------------------------------------------------------------------. + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Below| | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* SYMB + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | SW-D | SW-U | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* FUNC + * ,-----------------------------------------------------------------------------------. + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F21 | F22 | F23 | F24 | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | Prev | Mute | Play | Next | | | | | + * `-----------------------------------------------------------------------------------' + */ ``` - -For Windows -``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | -`-----------------------------------------------------------------------------------' -``` - -One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. - -## The `MOVE` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. - -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. - -None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. - -## The `SYMB` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | ~ | ` | + | = | | | \ | [ | ] | { | } | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. - -`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. - -Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. - -## The `FUNC` layer -``` -,-----------------------------------------------------------------------------------. -| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | Reset| -`-----------------------------------------------------------------------------------' -``` - -`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. - -## Other changes from the default -I have LEDs and sound disabled, simply because I have no need of them. -- cgit v1.2.3 From 41227856f4bfe24151009b20c0c412fe33756a4a Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:09:40 +0100 Subject: added a toggle between Mac and Windows base layers (with swapped cmd and ctrl) --- keyboards/planck/keymaps/callum/keymap.c | 59 ++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 6c34311339..b47f8eb05e 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,13 +11,15 @@ extern keymap_config_t keymap_config; // 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 _BASE 0 -#define _MOVE 1 -#define _SYMB 2 -#define _FUNC 3 +#define _MAC 0 +#define _WIN 1 +#define _MOVE 2 +#define _SYMB 3 +#define _FUNC 4 enum planck_keycodes { - BASE = SAFE_RANGE, + MAC = SAFE_RANGE, + WIN, MOVE, SYMB, FUNC, @@ -30,7 +32,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE +/* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+-------------+------+------+------+------+------| @@ -41,13 +43,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | * `-----------------------------------------------------------------------------------' */ -[_BASE] = { +[_MAC] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, +/* BASE Windows + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * `-----------------------------------------------------------------------------------' + */ +[_WIN] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, 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_RSFT}, + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} +}, + /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -88,24 +108,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | | | + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, _______, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + case MAC: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_MAC); + } + return false; + break; + case WIN: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_WIN); + } + return false; + break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); -- cgit v1.2.3 From b51f51c614e2bcd64202811510719f25345cb1ce Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:19:11 +0100 Subject: added close key for alt-f4 macro --- keyboards/planck/keymaps/callum/keymap.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index b47f8eb05e..56808aa8ca 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -23,7 +23,8 @@ enum planck_keycodes { MOVE, SYMB, FUNC, - LOCK + LOCK, + CLOSE }; // Fillers to make layering more clear @@ -110,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------. * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | |Reset | * `-----------------------------------------------------------------------------------' @@ -118,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, _______, _______, _______, WIN, _______}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } @@ -183,6 +184,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CLOSE: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_F4); + } else { + unregister_code(KC_F4); + unregister_code(KC_LALT); + } + return false; + break; } return true; } -- cgit v1.2.3 From 6ad8a06c734caa378296d0cfe335feda7457ed61 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:47:11 +0100 Subject: updated readme --- keyboards/planck/keymaps/callum/keymap.c | 30 ++++++------ keyboards/planck/keymaps/callum/readme.md | 81 ++++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 28 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 56808aa8ca..f5a816f4ee 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | GUI | Symb |Enter |Space | Move | GUI | Alt | Ctrl |Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ [_MAC] = { @@ -57,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | GUI | Alt | Ctrl | Symb |Enter |Space | Move | Ctrl | Alt | GUI |Caps | + * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | * `-----------------------------------------------------------------------------------' */ [_WIN] = { @@ -71,11 +71,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | | Left | Down |Right | | | Left | Down |Right | | Del | + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | |Pg Up |Pg Dn | | |Pg Dn |Pg Up | | | | + * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -89,9 +89,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------. - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * |-----------------------------------------------------------------------------------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------. - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |-----------------------------------------------------------------------------------| + * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | |Close | | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | |Reset | + * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index b70de3f1e2..8125907655 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -6,38 +6,93 @@ This is a layout for the grid planck, built with a few ideals in mind: - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. - Backspace should be in the “capslock position” in the colemak tradition. +- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. ## The `BASE` layer -![](http://i.imgur.com/tVNI3SE.png) - -This is the default layer; in [colemak](https://colemak.com). `esc` and `del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `move` and `symb` keys respectively. The `FUNC` layer is reached by holding down both the `move` and `symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. +For Mac +``` +,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | +`-----------------------------------------------------------------------------------' +``` + +For Windows +``` + ,-----------------------------------------------------------------------------------. +| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | +|------+------+------+------+-------+-------------+------+------+------+------+------| +| Bksp | A | R | S | T | D | H | N | E | I | O | " | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | +`-----------------------------------------------------------------------------------' +``` + +One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. + +The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. ## The `MOVE` layer -![](http://i.imgur.com/KXRSuHT.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | | Home | Up | End | | | Home | Up | End | | Esc | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Del | | Left | Down | Right| | | Left | Down | Right| | Del | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `home` and `end` jump you to the beginning and end of the line respectively and so that `pg up` and `pg dn` move the cursor instead of just scrolling. +On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. ## The `SYMB` layer -![](http://i.imgur.com/thh1ne2.png) +``` +,-----------------------------------------------------------------------------------. +| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | +|-----------------------------------------------------------------------------------| +| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+-------------+------+------+------+------+------| +| | ~ | ` | + | = | | | \ | [ | ] | { | } | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------' +``` The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. -`esc` and `del` are repeated here since I wanted to be able to reach either, one handed, with either hand. +`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. ## The `FUNC` layer -![](http://i.imgur.com/1VKFBBU.png) - -The only things of note here are that `bl+` and `bl-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. And that `lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) +``` +,-----------------------------------------------------------------------------------. +| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | +|-----------------------------------------------------------------------------------| +| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | | | | Reset| +`-----------------------------------------------------------------------------------' +``` + +`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. ## Other changes from the default I have LEDs and sound disabled, simply because I have no need of them. -- cgit v1.2.3 From ff09695897c4bdd705347e6427077e406413c26d Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:52:55 +0100 Subject: Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 8125907655..2e59c00d6d 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -26,9 +26,9 @@ For Mac For Windows ``` - ,-----------------------------------------------------------------------------------. +,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+-------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | |------+------+------+------+------+------|------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -- cgit v1.2.3 From c593564acab7a0b1cca2c90bd0b1ffd9def59f05 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:55:27 +0100 Subject: Update readme.md --- keyboards/planck/keymaps/callum/readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 2e59c00d6d..7a771130ab 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -15,9 +15,9 @@ For Mac ``` ,-----------------------------------------------------------------------------------. | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -30,7 +30,7 @@ For Windows | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | |------+------+------+------+------+------+------+------+------+------+------+------| | Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| |------+------+------+------+------+------+------+------+------+------+------+------| | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -45,9 +45,9 @@ The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` k ``` ,-----------------------------------------------------------------------------------. | Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -64,9 +64,9 @@ None of the modifiers are overwritten so that `shift-alt-arrows` etc work as exp ``` ,-----------------------------------------------------------------------------------. | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+-------------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | ~ | ` | + | = | | | \ | [ | ] | { | } | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | @@ -83,9 +83,9 @@ Again none of the modifiers are overwritten so that shortcuts involving numbers ``` ,-----------------------------------------------------------------------------------. | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|-----------------------------------------------------------------------------------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------|------+------+------+------+------+------| +|------+------+------+------+------+------+------+------+------+------+------+------| | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | |------+------+------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | Reset| -- cgit v1.2.3 From b2ecd296ae0dc366717fae8a6abb25c0639d6a43 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 6 Sep 2016 22:59:36 +0100 Subject: fixed comments --- keyboards/planck/keymaps/callum/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index f5a816f4ee..751af9eb9f 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -36,9 +36,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Mac * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | @@ -54,9 +54,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Windows * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -90,9 +90,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | @@ -108,9 +108,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNC * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | - * |-----------------------------------------------------------------------------------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | - * |------+------+------+------+------+------|------+------+------+------+------+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| -- cgit v1.2.3 From 02635e5924ea5f3b1e970e115407f62c916c4476 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 7 Sep 2016 20:45:23 +0100 Subject: changed RALT to LALT on Windows --- keyboards/planck/keymaps/callum/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 751af9eb9f..5754b17721 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_RALT, KC_RGUI, KC_CAPS} + {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} }, /* MOVE -- cgit v1.2.3 From fa2724360b831fffd3745bfe7b3ef50910b9132b Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 08:04:38 +0100 Subject: removed windows layer and updated brightness keys for macOS Sierra --- keyboards/planck/keymaps/callum/keymap.c | 90 +++++--------------------------- 1 file changed, 14 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 5754b17721..0ac1906bac 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -11,20 +11,15 @@ extern keymap_config_t keymap_config; // 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 _MAC 0 -#define _WIN 1 -#define _MOVE 2 -#define _SYMB 3 -#define _FUNC 4 +#define _BASE 0 +#define _MOVE 1 +#define _SYMB 2 +#define _FUNC 3 enum planck_keycodes { - MAC = SAFE_RANGE, - WIN, MOVE, SYMB, - FUNC, - LOCK, - CLOSE + FUNC }; // Fillers to make layering more clear @@ -33,7 +28,7 @@ enum planck_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BASE Mac +/* BASE * ,-----------------------------------------------------------------------------------. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -44,31 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | * `-----------------------------------------------------------------------------------' */ -[_MAC] = { +[_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} }, -/* BASE Windows - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Bksp | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | - * `-----------------------------------------------------------------------------------' - */ -[_WIN] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, 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_RSFT}, - {FUNC, KC_LGUI, KC_LALT, KC_LCTL, SYMB, KC_ENT, KC_SPC, MOVE, KC_RCTL, KC_LALT, KC_RGUI, KC_CAPS} -}, - /* MOVE * ,-----------------------------------------------------------------------------------. * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | @@ -81,9 +58,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, _______, KC_HOME, KC_UP, KC_END, _______, _______, KC_HOME, KC_UP, KC_END, _______, KC_ESC}, - {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL}, - {_______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______}, + {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, + {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -109,41 +86,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | Lock | | | Mac | | + * | | Play | Prev | Next | BL+ | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | + * | | Mute | Vol- | Vol+ | BL- | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | Reset| * `-----------------------------------------------------------------------------------' */ [_FUNC] = { {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {_______, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAUS, _______, _______, LOCK, _______, _______, MAC, _______}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_SLCK, _______, _______, CLOSE, _______, _______, WIN, _______}, + {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } } }; -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case MAC: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MAC); - } - return false; - break; - case WIN: - if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WIN); - } - return false; - break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); @@ -172,28 +132,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case LOCK: - if (record->event.pressed) { - register_code(KC_RSFT); - register_code(KC_RCTL); - register_code(KC_POWER); - } else { - unregister_code(KC_POWER); - unregister_code(KC_RCTL); - unregister_code(KC_RSFT); - } - return false; - break; - case CLOSE: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_F4); - } else { - unregister_code(KC_F4); - unregister_code(KC_LALT); - } - return false; - break; } return true; } -- cgit v1.2.3 From c762ea975a4c66da484b4cd4879e41c1457d854a Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 28 Sep 2016 23:15:35 +0100 Subject: big restructure now I only have to consider macOS, also added mouse, more function keys, and some neat macros --- keyboards/planck/keymaps/callum/keymap.c | 139 ++++++++++++++++++++++++++----- 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 0ac1906bac..38c362fcbe 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -14,12 +14,19 @@ extern keymap_config_t keymap_config; #define _BASE 0 #define _MOVE 1 #define _SYMB 2 -#define _FUNC 3 +#define _MOUSE 3 +#define _FUNC 4 enum planck_keycodes { - MOVE, + MOVE = SAFE_RANGE, SYMB, - FUNC + FUNC, + CMDLEFT, + CMDRGHT, + BELOW, + ABOVE, + VOLUP, + VOLDN }; // Fillers to make layering more clear @@ -36,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | * `-----------------------------------------------------------------------------------' */ [_BASE] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, {KC_BSPC, 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_RSFT}, - {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, KC_CAPS} + {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC } }, /* MOVE @@ -52,16 +59,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC}, - {KC_DEL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_DEL}, - {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC }, + {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, + {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______} }, /* SYMB @@ -82,22 +89,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_MOUSE] = { + {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + /* FUNC * ,-----------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Play | Prev | Next | BL+ | | | | | | | | + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Mute | Vol- | Vol+ | BL- | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | Reset| + * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, - {XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, KC_F15, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, VOLUP }, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, VOLDN }, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } }; @@ -107,20 +132,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case MOVE: if (record->event.pressed) { layer_on(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_MOVE); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; case SYMB: if (record->event.pressed) { layer_on(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } else { layer_off(_SYMB); - update_tri_layer(_MOVE, _SYMB, _FUNC); + update_tri_layer(_MOVE, _SYMB, _MOUSE); } return false; break; @@ -132,6 +157,74 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case CMDLEFT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + } else { + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + } + return false; + break; + case CMDRGHT: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + } else { + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + } + return false; + break; + case BELOW: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_RGHT); + unregister_code(KC_RGHT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + } + return false; + break; + case ABOVE: + if (record->event.pressed) { + register_code(KC_LGUI); + register_code(KC_LEFT); + unregister_code(KC_LEFT); + unregister_code(KC_LGUI); + register_code(KC_ENT); + unregister_code(KC_ENT); + register_code(KC_UP); + unregister_code(KC_UP); + } + return false; + break; + case VOLUP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLU); + } else { + unregister_code(KC_VOLU); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; + case VOLDN: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_LSFT); + register_code(KC_VOLD); + } else { + unregister_code(KC_VOLD); + unregister_code(KC_LSFT); + unregister_code(KC_LALT); + } + return false; + break; } return true; } -- cgit v1.2.3 From 2f07ad8e8a3e69eb90488bcac0540fd81448e3d0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 29 Sep 2016 07:47:30 +0100 Subject: added en-dash and gbp keys and updated readme --- keyboards/planck/keymaps/callum/keymap.c | 38 ++++++-- keyboards/planck/keymaps/callum/readme.md | 149 ++++++++++++------------------ 2 files changed, 91 insertions(+), 96 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 38c362fcbe..82ba83f4e4 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -25,6 +25,8 @@ enum planck_keycodes { CMDRGHT, BELOW, ABOVE, + DASH, + GBP, VOLUP, VOLDN }; @@ -55,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MOVE * ,-----------------------------------------------------------------------------------. - * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -73,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* SYMB * ,-----------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -83,19 +85,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYMB] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC }, - {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DASH }, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, GBP }, {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* MOUSE * ,-----------------------------------------------------------------------------------. - * | | | | | | | | | | | | | + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | SW-D | SW-U | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -201,6 +203,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case DASH: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_MINS); + } else { + unregister_code(KC_MINS); + unregister_code(KC_LALT); + } + return false; + break; + case GBP: + if (record->event.pressed) { + register_code(KC_LALT); + register_code(KC_3); + } else { + unregister_code(KC_3); + unregister_code(KC_LALT); + } + return false; + break; case VOLUP: if (record->event.pressed) { register_code(KC_LALT); diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index 7a771130ab..b5997cd5ae 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -2,97 +2,70 @@ This is a layout for the grid planck, built with a few ideals in mind: -- Minimal response times should be maintained. i.e. keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided — they inevitably send their keycode later than a normal key, interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording. +- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key. - The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. - There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. -- Backspace should be in the “capslock position” in the colemak tradition. -- The keyboard should be usable on any operating system without software changes. For me this means being able to swap the `GUI` key and `Ctrl` key in firmware so that `Cmd-z,x,c,v,…` becomes `Ctrl-z,x,c,v,…` when swapping from macOS to Windows. -We have four layers. A `BASE` layer (which is either `BASE Mac` or `BASE Windows`), in colemak; a `MOVE` layer, with an arrow cluster etc, a `SYMB` layer, with numbers and symbols; and a `FUNC` layer, with function keys and media keys. +We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. -## The `BASE` layer -For Mac ``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Caps | -`-----------------------------------------------------------------------------------' +/* BASE + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Bksp | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func | + * `-----------------------------------------------------------------------------------' + */ + +/* MOVE + * ,-----------------------------------------------------------------------------------. + * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Below| | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* SYMB + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | ~ | ` | + | = | | | \ | [ | ] | { | } | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* MOUSE + * ,-----------------------------------------------------------------------------------. + * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | SW-D | SW-U | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + +/* FUNC + * ,-----------------------------------------------------------------------------------. + * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F21 | F22 | F23 | F24 | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | Prev | Mute | Play | Next | | | | | + * `-----------------------------------------------------------------------------------' + */ ``` - -For Windows -``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | F | P | G | J | L | U | Y | ; | - | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Bksp | A | R | S | T | D | H | N | E | I | O | " | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | K | M | , | . | / | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Func | Win | Alt | Ctrl | Symb | Enter| Space| Move | Ctrl | Alt | Win | Caps | -`-----------------------------------------------------------------------------------' -``` - -One of the two above layers is set as the default layer at any one time; see `FUNC`. The basic layout is [colemak](https://colemak.com). `Esc` and `Del` are conspicuously absent but are especially easy to reach from either of the other main layers (see below). The `backspace` location is standard colemak. The `Caps` key is still on the `BASE` layer but only because I don’t really use the bottom corners so there’s nothing else I would rather put there. Having `Enter` on a thumb means I can still have `quote` immediately to the right of `O`, something that would have annoyed me endlessly otherwise. `minus` is in the upper right because I had an extra space and it’s probably my next most used key that didn’t yet have a home. - -The `MOVE` and `SYMB` layers are reached by holding down the `Move` and `Symb` keys respectively. The `FUNC` layer is reached by holding down both the `Move` and `Symb` keys simultaneously, *or* by holding down the `fn` key. The intended use is that whenever both hands are on the keyboard, the former method is used, and the latter is only used when, for example, reaching over to the keyboard with one hand to access the media controls. - -## The `MOVE` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | | Home | Up | End | | | Home | Up | End | | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | | Left | Down | Right| | | Left | Down | Right| | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -This is fairly self explanatory. I almost exclusively use the right hand cluster so that movement is a one handed affair, but the left hand cluster is there if it’s needed. - -On *macOS* I recommend using [Karabiner](https://pqrs.org/osx/karabiner/) and ticking *Use PC Style Home/End #2* and *Use PC Style PageUp/PageDown* so that `Home` and `End` jump you to the beginning and end of the line respectively and so that `Pg Up` and `Pg Dn` move the cursor instead of just scrolling. - -None of the modifiers are overwritten so that `shift-alt-arrows` etc work as expected. - -## The `SYMB` layer -``` -,-----------------------------------------------------------------------------------. -| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Esc | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | ~ | ` | + | = | | | \ | [ | ] | { | } | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | -`-----------------------------------------------------------------------------------' -``` - -The symbol layer has all the numbers and their usual corresponding symbols in the first two rows, with the symbols on the home row since I use them more frequently than the numbers. The third row contains all the remaining symbols, arranged roughly so that the most used symbols are accessible with the strongest fingers. - -`Esc` and `Del` are repeated here since I wanted to be able to reach either, one handed, with either hand. - -Again none of the modifiers are overwritten so that shortcuts involving numbers or symbols work as expected. - -## The `FUNC` layer -``` -,-----------------------------------------------------------------------------------. -| F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Play | Prev | Next | BL+ | | | Lock | | | Mac | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | Mute | Vol- | Vol+ | BL- | | | Close| | | Win | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | | | | Reset| -`-----------------------------------------------------------------------------------' -``` - -`BL+` and `BL-` are short for *backlight up* and *backlight down*, and in firmware are actually `KC_PAUS` and `KC_SLCK` respectively, since *macOS* interprets these as the backlight keys. `Lock` is currently a macro hard coded to turn off the screen on *macOS*. (By activating the shortcut `shift-ctrl-power`.) `Close` sends `alt-f4` to make that shortcut easier to reach. `Mac` and `Win` set the default layer to the Mac and Windows `BASE` layers respecitevly. - -## Other changes from the default -I have LEDs and sound disabled, simply because I have no need of them. -- cgit v1.2.3 From 8d99140d1b80bf497b2198138d3f481e93b0fbab Mon Sep 17 00:00:00 2001 From: Adam Gausmann Date: Thu, 29 Sep 2016 14:46:10 -0500 Subject: Missing ifdef statement --- quantum/process_keycode/process_midi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 8784e64f36..577dad43ac 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -7,7 +7,9 @@ int midi_offset = 7; bool process_midi(uint16_t keycode, keyrecord_t *record) { if (keycode == MI_ON && record->event.pressed) { midi_activated = true; +#ifdef AUDIO_ENABLE music_scale_user(); +#endif return false; } @@ -63,4 +65,4 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { return false; } return true; -} \ No newline at end of file +} -- cgit v1.2.3 From 633da3bdb661a6da43ffd4e936736927e6d1ebda Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Sat, 1 Oct 2016 13:03:46 +0100 Subject: Made some simplifications leveraging the LALT(), LGUI(), and S() functions. --- keyboards/planck/keymaps/callum/keymap.c | 82 +++----------------------------- 1 file changed, 6 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 82ba83f4e4..411523125d 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -21,14 +21,8 @@ enum planck_keycodes { MOVE = SAFE_RANGE, SYMB, FUNC, - CMDLEFT, - CMDRGHT, BELOW, - ABOVE, - DASH, - GBP, - VOLUP, - VOLDN + ABOVE }; // Fillers to make layering more clear @@ -67,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_MOVE] = { - {KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC }, + {KC_ESC, XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, KC_ESC }, {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______} @@ -85,8 +79,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYMB] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DASH }, - {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, GBP }, + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LALT(KC_MINS)}, + {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, LALT(KC_3)}, {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, @@ -121,8 +115,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, VOLUP }, - {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, VOLDN }, + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(LALT(KC_VOLU))}, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, S(LALT(KC_VOLD))}, {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } @@ -159,26 +153,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case CMDLEFT: - if (record->event.pressed) { - register_code(KC_LGUI); - register_code(KC_LEFT); - } else { - unregister_code(KC_LEFT); - unregister_code(KC_LGUI); - } - return false; - break; - case CMDRGHT: - if (record->event.pressed) { - register_code(KC_LGUI); - register_code(KC_RGHT); - } else { - unregister_code(KC_RGHT); - unregister_code(KC_LGUI); - } - return false; - break; case BELOW: if (record->event.pressed) { register_code(KC_LGUI); @@ -203,50 +177,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case DASH: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_MINS); - } else { - unregister_code(KC_MINS); - unregister_code(KC_LALT); - } - return false; - break; - case GBP: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_3); - } else { - unregister_code(KC_3); - unregister_code(KC_LALT); - } - return false; - break; - case VOLUP: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_LSFT); - register_code(KC_VOLU); - } else { - unregister_code(KC_VOLU); - unregister_code(KC_LSFT); - unregister_code(KC_LALT); - } - return false; - break; - case VOLDN: - if (record->event.pressed) { - register_code(KC_LALT); - register_code(KC_LSFT); - register_code(KC_VOLD); - } else { - unregister_code(KC_VOLD); - unregister_code(KC_LSFT); - unregister_code(KC_LALT); - } - return false; - break; } return true; } -- cgit v1.2.3 From 8747c0786e7b583529d4033ea90aa91e49ae3a51 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 1 Oct 2016 18:28:33 +0200 Subject: - Updated dbroqua layout for HHKB keyboard --- keyboards/hhkb/keymaps/dbroqua/keymap.c | 48 ++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c index ef43aae281..869e16d496 100644 --- a/keyboards/hhkb/keymaps/dbroqua/keymap.c +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -5,6 +5,7 @@ #define BASE 0 #define FN 1 +#define MOUSE 2 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE Level: Default Layer @@ -15,37 +16,58 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | Left |Right| + * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | fn | * +-----------------------------------------------------------------------------------------+ - * | Gui | Alt | Space | AltGr | fn | + * | Gui | Alt | Space | AltGr | Menu| * `----------------------------------------------------------------´ */ [BASE] = KEYMAP( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LEFT, KC_RGHT, \ - KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, MO(FN) + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(FN), \ + KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, MO(MOUSE) ), - /* BASE Level: Default Layer + /* FN Layer * ,-----------------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del| + * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del| * |-----------------------------------------------------------------------------------------+ - * | Caps | | | | | | | | | | | Up | | | + * | Caps | | | | | | | |PrtSc| Slck| Paus| Up | | | * |-----------------------------------------------------------------------------------------+ - * | | Vol-| Vol+| Mute| | | |PrtSc| Home| PgUp| Left |Right| | + * | | Vol-| Vol+| Mute| | | | | Home| PgUp| Left |Right| | * |-----------------------------------------------------------------------------------------+ - * | | Prev| Play| Next| | | | | End |PgDwn| Down| Up | Down| + * | | Prev| Play| Next| | | | | End |PgDwn| Down| | | * +-----------------------------------------------------------------------------------------+ * | | | | | | * `----------------------------------------------------------------´ */ [FN] = KEYMAP( - KC_TRNS, 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_INS, KC_DEL, \ - KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ - KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_UP, KC_DOWN, \ + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + /* MOUSE Layer + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | WUp | | | | | | | | Btn1| Up | Btn2| | + * |-----------------------------------------------------------------------------------------+ + * | | WLt | WDn | WRt | | | | | | | Left |Right| | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | Btn3| Down| | | + * +-----------------------------------------------------------------------------------------+ + * | | | | | | + * `----------------------------------------------------------------´ + */ + [MOUSE] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, \ + KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_R, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_MS_D, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; -- cgit v1.2.3 From 6a090c5df7e52df084de975f070841af1138b5a4 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 1 Oct 2016 19:04:11 +0200 Subject: - Fixed key name in default layer definition --- keyboards/hhkb/keymaps/dbroqua/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c index 869e16d496..4e907acd87 100644 --- a/keyboards/hhkb/keymaps/dbroqua/keymap.c +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | fn | * +-----------------------------------------------------------------------------------------+ - * | Gui | Alt | Space | AltGr | Menu| + * | Gui | Alt | Space | AltGr |Mouse| * `----------------------------------------------------------------´ */ [BASE] = KEYMAP( -- cgit v1.2.3 From a10e100bd5e8bad73e1b04f54639a4cec36e4b9e Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 2 Oct 2016 09:55:38 +0200 Subject: Add double arrow Unicode characters to FMU layer --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 0eedecf3dd..238971e81e 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -141,7 +141,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ * │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + * │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ @@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS, KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715), - KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),UC(0x2194),UC(0x21D4),KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_MS_L, KC_MS_U, KC_BTN1, -- cgit v1.2.3 From a3f5a4cf5839fe29dd37400d72c5e353812002f8 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sun, 2 Oct 2016 10:35:09 +0200 Subject: =?UTF-8?q?Declare=20Unicode=20method=20hex=5Fto=5Fkeycode()=20as?= =?UTF-8?q?=20=E2=80=9Cweak=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Declare Unicode method hex_to_keycode() as “weak” to be able to override it in keymaps. --- quantum/process_keycode/process_unicode.c | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index a5d7dca21e..6a30afe293 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -2,6 +2,7 @@ static uint8_t input_mode; +__attribute__((weak)) uint16_t hex_to_keycode(uint8_t hex) { if (hex == 0x0) { -- cgit v1.2.3 From c0c0c579ff00e8f11cbe201402d3e322090e1975 Mon Sep 17 00:00:00 2001 From: SethSenpai Date: Mon, 3 Oct 2016 08:53:09 +0000 Subject: added gamenum handwired keyboard --- keyboards/gamenum/Makefile | 73 +++++++++++++ keyboards/gamenum/README.md | 92 ++++++++++++++++ keyboards/gamenum/config.h | 162 +++++++++++++++++++++++++++++ keyboards/gamenum/gamenum.c | 14 +++ keyboards/gamenum/gamenum.h | 21 ++++ keyboards/gamenum/keymaps/default/keymap.c | 68 ++++++++++++ 6 files changed, 430 insertions(+) create mode 100644 keyboards/gamenum/Makefile create mode 100644 keyboards/gamenum/README.md create mode 100644 keyboards/gamenum/config.h create mode 100644 keyboards/gamenum/gamenum.c create mode 100644 keyboards/gamenum/gamenum.h create mode 100644 keyboards/gamenum/keymaps/default/keymap.c diff --git a/keyboards/gamenum/Makefile b/keyboards/gamenum/Makefile new file mode 100644 index 0000000000..afb9372e18 --- /dev/null +++ b/keyboards/gamenum/Makefile @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/gamenum/README.md b/keyboards/gamenum/README.md new file mode 100644 index 0000000000..b1839b9efa --- /dev/null +++ b/keyboards/gamenum/README.md @@ -0,0 +1,92 @@ +GameNum firmware +====================== +## Board overview + +The GameNum was designed to facilitate the use of mechanical keys for gameing even when your packing space is limited. +It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers. +The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games. +The RTS layer is meant to be used rotating the device 90 degrees counterclockwise. + +The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK. + +## Build conciderations + +Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind. +Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. +The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled. ++ of the LED goes to the respective pins and can be joined together on the - into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro. + +Schematic of the build is coming soon. + +## Adding more layers + +Adding aditional layers is pretty straight foreward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`. +Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers. + +Next thing to do is to add the actual layer for the keymap. + +``` +[DEF] = KEYMAP( + KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ + KC_7, KC_8, KC_9, KC_PLUS, \ + KC_4, KC_5, KC_6, \ + KC_1, KC_2, KC_3, \ + KC_0, KC_DOT, KC_ENT \ +) +``` + +This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D: +In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does! + +Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer. +The number that is at the end of the keycode corresponds with the code in the function. +`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well. + +Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`. +Look for this piece of code: + +``` + DDRD |= (1<<4); + PORTD &= ~(1<<4); +``` + +Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<event.pressed) { + PORTC &= ~(1 << 6); // PC6 goes low + PORTD |= (1<<4); //PD4 goes high + } + break; +``` + +This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit. + + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder. +Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with. +Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you. +Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/gamenum/config.h b/keyboards/gamenum/config.h new file mode 100644 index 0000000000..6af876ab79 --- /dev/null +++ b/keyboards/gamenum/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x1234 +#define PRODUCT_ID 0x5678 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Seth-Senpai +#define PRODUCT GameNum +#define DESCRIPTION Numpad with gamelayers + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } +#define MATRIX_COL_PINS { D7, E6, B4, B5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN C6 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/gamenum/gamenum.c b/keyboards/gamenum/gamenum.c new file mode 100644 index 0000000000..8048194bbc --- /dev/null +++ b/keyboards/gamenum/gamenum.c @@ -0,0 +1,14 @@ +#include "gamenum.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + DDRC |= (1<<6); + PORTC &= ~(1<<6); + + DDRD |= (1<<4); + PORTD &= ~(1<<4); + + matrix_init_user(); + +} diff --git a/keyboards/gamenum/gamenum.h b/keyboards/gamenum/gamenum.h new file mode 100644 index 0000000000..ea633b9bfa --- /dev/null +++ b/keyboards/gamenum/gamenum.h @@ -0,0 +1,21 @@ +#ifndef GAMENUM_H +#define GAMENUM_H + +#include "quantum.h" + +#define KEYMAP( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, \ + k41, k42, k43 \ +) \ +{ \ + { k00, k01, k02, k03}, \ + { k10, k11, k12, k13}, \ + { k20, k21, k22, KC_NO}, \ + { k30, k31, k32, KC_NO}, \ + { KC_NO, k41, k42, k43} \ +} + +#endif diff --git a/keyboards/gamenum/keymaps/default/keymap.c b/keyboards/gamenum/keymaps/default/keymap.c new file mode 100644 index 0000000000..6950b741a3 --- /dev/null +++ b/keyboards/gamenum/keymaps/default/keymap.c @@ -0,0 +1,68 @@ +#include "gamenum.h" +#include "action_layer.h" +#include "eeconfig.h" + + +#define _______ KC_TRNS + +#define DEF 0 +#define HDN 1 +#define OSY 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[DEF] = KEYMAP( + KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ + KC_7, KC_8, KC_9, KC_PLUS, \ + KC_4, KC_5, KC_6, \ + KC_1, KC_2, KC_3, \ + KC_0, KC_DOT, KC_ENT \ +), +[HDN] = KEYMAP( + KC_FN1, KC_1, KC_2, KC_3, \ + KC_Q, KC_W, KC_E, KC_R, \ + KC_A, KC_S, KC_D, \ + KC_Z, KC_X, KC_C, \ + KC_LSFT, KC_LALT, KC_SPC \ +), +[OSY] = KEYMAP( + KC_A, KC_Q, KC_1, KC_FN2, \ + KC_S, KC_W, KC_2, KC_LALT, \ + KC_D, KC_E, KC_3, \ + KC_F, KC_R, KC_4, \ + KC_SPC, KC_T, KC_TAB \ +) +}; + + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_SET(HDN, ON_PRESS), + [1] = ACTION_LAYER_SET(OSY, ON_PRESS), + [2] = ACTION_LAYER_SET(DEF, ON_PRESS), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case KC_FN0: + if (record->event.pressed) { + PORTC |= (1 << 6); // PC6 goes high + } + break; + case KC_FN1: + if (record->event.pressed) { + PORTC &= ~(1 << 6); // PC6 goes high + PORTD |= (1<<4); + } + break; + case KC_FN2: + if (record->event.pressed) { + PORTD &= ~(1 << 4); // PC6 goes high + } + break; + } + return true; +} \ No newline at end of file -- cgit v1.2.3 From 468e8552072971c773ec166844d179089c544dc5 Mon Sep 17 00:00:00 2001 From: SethSenpai Date: Mon, 3 Oct 2016 08:59:50 +0000 Subject: moved folder, update readme --- keyboards/gamenum/Makefile | 73 ---------- keyboards/gamenum/README.md | 92 ------------ keyboards/gamenum/config.h | 162 --------------------- keyboards/gamenum/gamenum.c | 14 -- keyboards/gamenum/gamenum.h | 21 --- keyboards/gamenum/keymaps/default/keymap.c | 68 --------- keyboards/handwired/gamenum/Makefile | 73 ++++++++++ keyboards/handwired/gamenum/README.md | 92 ++++++++++++ keyboards/handwired/gamenum/config.h | 162 +++++++++++++++++++++ keyboards/handwired/gamenum/gamenum.c | 14 ++ keyboards/handwired/gamenum/gamenum.h | 21 +++ .../handwired/gamenum/keymaps/default/keymap.c | 68 +++++++++ 12 files changed, 430 insertions(+), 430 deletions(-) delete mode 100644 keyboards/gamenum/Makefile delete mode 100644 keyboards/gamenum/README.md delete mode 100644 keyboards/gamenum/config.h delete mode 100644 keyboards/gamenum/gamenum.c delete mode 100644 keyboards/gamenum/gamenum.h delete mode 100644 keyboards/gamenum/keymaps/default/keymap.c create mode 100644 keyboards/handwired/gamenum/Makefile create mode 100644 keyboards/handwired/gamenum/README.md create mode 100644 keyboards/handwired/gamenum/config.h create mode 100644 keyboards/handwired/gamenum/gamenum.c create mode 100644 keyboards/handwired/gamenum/gamenum.h create mode 100644 keyboards/handwired/gamenum/keymaps/default/keymap.c diff --git a/keyboards/gamenum/Makefile b/keyboards/gamenum/Makefile deleted file mode 100644 index afb9372e18..0000000000 --- a/keyboards/gamenum/Makefile +++ /dev/null @@ -1,73 +0,0 @@ - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR - include ../../Makefile -endif - - diff --git a/keyboards/gamenum/README.md b/keyboards/gamenum/README.md deleted file mode 100644 index b1839b9efa..0000000000 --- a/keyboards/gamenum/README.md +++ /dev/null @@ -1,92 +0,0 @@ -GameNum firmware -====================== -## Board overview - -The GameNum was designed to facilitate the use of mechanical keys for gameing even when your packing space is limited. -It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers. -The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games. -The RTS layer is meant to be used rotating the device 90 degrees counterclockwise. - -The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK. - -## Build conciderations - -Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind. -Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. -The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled. -+ of the LED goes to the respective pins and can be joined together on the - into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro. - -Schematic of the build is coming soon. - -## Adding more layers - -Adding aditional layers is pretty straight foreward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`. -Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers. - -Next thing to do is to add the actual layer for the keymap. - -``` -[DEF] = KEYMAP( - KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ - KC_7, KC_8, KC_9, KC_PLUS, \ - KC_4, KC_5, KC_6, \ - KC_1, KC_2, KC_3, \ - KC_0, KC_DOT, KC_ENT \ -) -``` - -This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D: -In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does! - -Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer. -The number that is at the end of the keycode corresponds with the code in the function. -`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well. - -Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`. -Look for this piece of code: - -``` - DDRD |= (1<<4); - PORTD &= ~(1<<4); -``` - -Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<event.pressed) { - PORTC &= ~(1 << 6); // PC6 goes low - PORTD |= (1<<4); //PD4 goes high - } - break; -``` - -This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit. - - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder. -Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with. -Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you. -Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file. - -### Default - -To build with the default keymap, simply run `make`. - -### Other Keymaps - -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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/gamenum/config.h b/keyboards/gamenum/config.h deleted file mode 100644 index 6af876ab79..0000000000 --- a/keyboards/gamenum/config.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0x1234 -#define PRODUCT_ID 0x5678 -#define DEVICE_VER 0x0001 -#define MANUFACTURER Seth-Senpai -#define PRODUCT GameNum -#define DESCRIPTION Numpad with gamelayers - -/* key matrix size */ -#define MATRIX_ROWS 5 -#define MATRIX_COLS 4 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } -#define MATRIX_COL_PINS { D7, E6, B4, B5 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION ROW2COL - -// #define BACKLIGHT_PIN C6 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/gamenum/gamenum.c b/keyboards/gamenum/gamenum.c deleted file mode 100644 index 8048194bbc..0000000000 --- a/keyboards/gamenum/gamenum.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "gamenum.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - DDRC |= (1<<6); - PORTC &= ~(1<<6); - - DDRD |= (1<<4); - PORTD &= ~(1<<4); - - matrix_init_user(); - -} diff --git a/keyboards/gamenum/gamenum.h b/keyboards/gamenum/gamenum.h deleted file mode 100644 index ea633b9bfa..0000000000 --- a/keyboards/gamenum/gamenum.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef GAMENUM_H -#define GAMENUM_H - -#include "quantum.h" - -#define KEYMAP( \ - k00, k01, k02, k03, \ - k10, k11, k12, k13, \ - k20, k21, k22, \ - k30, k31, k32, \ - k41, k42, k43 \ -) \ -{ \ - { k00, k01, k02, k03}, \ - { k10, k11, k12, k13}, \ - { k20, k21, k22, KC_NO}, \ - { k30, k31, k32, KC_NO}, \ - { KC_NO, k41, k42, k43} \ -} - -#endif diff --git a/keyboards/gamenum/keymaps/default/keymap.c b/keyboards/gamenum/keymaps/default/keymap.c deleted file mode 100644 index 6950b741a3..0000000000 --- a/keyboards/gamenum/keymaps/default/keymap.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "gamenum.h" -#include "action_layer.h" -#include "eeconfig.h" - - -#define _______ KC_TRNS - -#define DEF 0 -#define HDN 1 -#define OSY 2 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[DEF] = KEYMAP( - KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ - KC_7, KC_8, KC_9, KC_PLUS, \ - KC_4, KC_5, KC_6, \ - KC_1, KC_2, KC_3, \ - KC_0, KC_DOT, KC_ENT \ -), -[HDN] = KEYMAP( - KC_FN1, KC_1, KC_2, KC_3, \ - KC_Q, KC_W, KC_E, KC_R, \ - KC_A, KC_S, KC_D, \ - KC_Z, KC_X, KC_C, \ - KC_LSFT, KC_LALT, KC_SPC \ -), -[OSY] = KEYMAP( - KC_A, KC_Q, KC_1, KC_FN2, \ - KC_S, KC_W, KC_2, KC_LALT, \ - KC_D, KC_E, KC_3, \ - KC_F, KC_R, KC_4, \ - KC_SPC, KC_T, KC_TAB \ -) -}; - - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_SET(HDN, ON_PRESS), - [1] = ACTION_LAYER_SET(OSY, ON_PRESS), - [2] = ACTION_LAYER_SET(DEF, ON_PRESS), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - return MACRO_NONE; -}; - - -bool process_record_user (uint16_t keycode, keyrecord_t *record) { - switch(keycode) { - case KC_FN0: - if (record->event.pressed) { - PORTC |= (1 << 6); // PC6 goes high - } - break; - case KC_FN1: - if (record->event.pressed) { - PORTC &= ~(1 << 6); // PC6 goes high - PORTD |= (1<<4); - } - break; - case KC_FN2: - if (record->event.pressed) { - PORTD &= ~(1 << 4); // PC6 goes high - } - break; - } - return true; -} \ No newline at end of file diff --git a/keyboards/handwired/gamenum/Makefile b/keyboards/handwired/gamenum/Makefile new file mode 100644 index 0000000000..afb9372e18 --- /dev/null +++ b/keyboards/handwired/gamenum/Makefile @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md new file mode 100644 index 0000000000..22f67ee61e --- /dev/null +++ b/keyboards/handwired/gamenum/README.md @@ -0,0 +1,92 @@ +GameNum firmware +====================== +## Board overview + +The GameNum was designed to facilitate the use of mechanical keys for gameing even when your packing space is limited. +It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers. +The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games. +The RTS layer is meant to be used rotating the device 90 degrees counterclockwise. + +The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK. + +## Build conciderations + +Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind. +Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. +The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled. +'+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro. + +Schematic of the build is coming soon. + +## Adding more layers + +Adding aditional layers is pretty straight foreward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`. +Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers. + +Next thing to do is to add the actual layer for the keymap. + +``` +[DEF] = KEYMAP( + KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ + KC_7, KC_8, KC_9, KC_PLUS, \ + KC_4, KC_5, KC_6, \ + KC_1, KC_2, KC_3, \ + KC_0, KC_DOT, KC_ENT \ +) +``` + +This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D: +In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does! + +Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer. +The number that is at the end of the keycode corresponds with the code in the function. +`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well. + +Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`. +Look for this piece of code: + +``` + DDRD |= (1<<4); + PORTD &= ~(1<<4); +``` + +Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<event.pressed) { + PORTC &= ~(1 << 6); // PC6 goes low + PORTD |= (1<<4); //PD4 goes high + } + break; +``` + +This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit. + + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder. +Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with. +Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you. +Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` diff --git a/keyboards/handwired/gamenum/config.h b/keyboards/handwired/gamenum/config.h new file mode 100644 index 0000000000..6af876ab79 --- /dev/null +++ b/keyboards/handwired/gamenum/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x1234 +#define PRODUCT_ID 0x5678 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Seth-Senpai +#define PRODUCT GameNum +#define DESCRIPTION Numpad with gamelayers + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } +#define MATRIX_COL_PINS { D7, E6, B4, B5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN C6 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/handwired/gamenum/gamenum.c b/keyboards/handwired/gamenum/gamenum.c new file mode 100644 index 0000000000..8048194bbc --- /dev/null +++ b/keyboards/handwired/gamenum/gamenum.c @@ -0,0 +1,14 @@ +#include "gamenum.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + DDRC |= (1<<6); + PORTC &= ~(1<<6); + + DDRD |= (1<<4); + PORTD &= ~(1<<4); + + matrix_init_user(); + +} diff --git a/keyboards/handwired/gamenum/gamenum.h b/keyboards/handwired/gamenum/gamenum.h new file mode 100644 index 0000000000..ea633b9bfa --- /dev/null +++ b/keyboards/handwired/gamenum/gamenum.h @@ -0,0 +1,21 @@ +#ifndef GAMENUM_H +#define GAMENUM_H + +#include "quantum.h" + +#define KEYMAP( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, \ + k41, k42, k43 \ +) \ +{ \ + { k00, k01, k02, k03}, \ + { k10, k11, k12, k13}, \ + { k20, k21, k22, KC_NO}, \ + { k30, k31, k32, KC_NO}, \ + { KC_NO, k41, k42, k43} \ +} + +#endif diff --git a/keyboards/handwired/gamenum/keymaps/default/keymap.c b/keyboards/handwired/gamenum/keymaps/default/keymap.c new file mode 100644 index 0000000000..6950b741a3 --- /dev/null +++ b/keyboards/handwired/gamenum/keymaps/default/keymap.c @@ -0,0 +1,68 @@ +#include "gamenum.h" +#include "action_layer.h" +#include "eeconfig.h" + + +#define _______ KC_TRNS + +#define DEF 0 +#define HDN 1 +#define OSY 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[DEF] = KEYMAP( + KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \ + KC_7, KC_8, KC_9, KC_PLUS, \ + KC_4, KC_5, KC_6, \ + KC_1, KC_2, KC_3, \ + KC_0, KC_DOT, KC_ENT \ +), +[HDN] = KEYMAP( + KC_FN1, KC_1, KC_2, KC_3, \ + KC_Q, KC_W, KC_E, KC_R, \ + KC_A, KC_S, KC_D, \ + KC_Z, KC_X, KC_C, \ + KC_LSFT, KC_LALT, KC_SPC \ +), +[OSY] = KEYMAP( + KC_A, KC_Q, KC_1, KC_FN2, \ + KC_S, KC_W, KC_2, KC_LALT, \ + KC_D, KC_E, KC_3, \ + KC_F, KC_R, KC_4, \ + KC_SPC, KC_T, KC_TAB \ +) +}; + + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_SET(HDN, ON_PRESS), + [1] = ACTION_LAYER_SET(OSY, ON_PRESS), + [2] = ACTION_LAYER_SET(DEF, ON_PRESS), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case KC_FN0: + if (record->event.pressed) { + PORTC |= (1 << 6); // PC6 goes high + } + break; + case KC_FN1: + if (record->event.pressed) { + PORTC &= ~(1 << 6); // PC6 goes high + PORTD |= (1<<4); + } + break; + case KC_FN2: + if (record->event.pressed) { + PORTD &= ~(1 << 4); // PC6 goes high + } + break; + } + return true; +} \ No newline at end of file -- cgit v1.2.3 From 0f06e94d5d8a07d0d896bf2cc72058ae11d17450 Mon Sep 17 00:00:00 2001 From: SethSenpai Date: Mon, 3 Oct 2016 09:07:37 +0000 Subject: update readme --- keyboards/handwired/gamenum/README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md index 22f67ee61e..9e22ff2fcb 100644 --- a/keyboards/handwired/gamenum/README.md +++ b/keyboards/handwired/gamenum/README.md @@ -2,14 +2,14 @@ GameNum firmware ====================== ## Board overview -The GameNum was designed to facilitate the use of mechanical keys for gameing even when your packing space is limited. +The GameNum was designed to facilitate the use of mechanical keys for gaming even when your packing space is limited. It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers. The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games. The RTS layer is meant to be used rotating the device 90 degrees counterclockwise. The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK. -## Build conciderations +## Build considerations Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind. Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. @@ -20,7 +20,7 @@ Schematic of the build is coming soon. ## Adding more layers -Adding aditional layers is pretty straight foreward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`. +Adding additional layers is pretty straight forward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`. Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers. Next thing to do is to add the actual layer for the keymap. @@ -50,9 +50,9 @@ Look for this piece of code: PORTD &= ~(1<<4); ``` -Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<] ``` Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` + + -- cgit v1.2.3 From 8dd69a1b05770be3131f6e5917e2552ec6579519 Mon Sep 17 00:00:00 2001 From: coderkun Date: Mon, 3 Oct 2016 16:36:21 +0200 Subject: Overwrite method hex_to_unicode() for make it compatible with Neo --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 238971e81e..b62b14449f 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -290,3 +290,28 @@ void unicode_input_start (void) { unregister_code(KC_LSFT); unregister_code(KC_LCTL); }; + +// Override method to use NEO_A instead of KC_A +uint16_t hex_to_keycode(uint8_t hex) +{ + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + switch(hex) { + case 0xA: + return NEO_A; + case 0xB: + return NEO_B; + case 0xC: + return NEO_C; + case 0xD: + return NEO_D; + case 0xE: + return NEO_E; + case 0xF: + return NEO_F; + } + } +} -- cgit v1.2.3 From aa9c6e9f59c5e45c6ea71cd3aa8fb037e88c11b6 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Mon, 3 Oct 2016 19:20:00 +0200 Subject: ergodox: Update algernon's keymap to v1.8 ADORE ----- * Major rearrangements were made, to reduce pinky use, and to balance out the hand usage. Tools ----- * The `hid-commands` tool will now display a notification when the **AppSel** layer is triggered. * The `log-to-heatmap.py` tool now treats the innermost keys on the bottom row as thumb keys, as far as statistics are concerned. Miscellaneous ------------- * Fixed the **Steno** toggle key. * My wife is now present on the keyboard too. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/NEWS.md | 145 +++++++++++++++++++++ .../keymaps/algernon/images/adore-layer.png | Bin 97225 -> 97089 bytes .../keymaps/algernon/images/steno-layer.png | Bin 69557 -> 64086 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 41 +++--- keyboards/ergodox/keymaps/algernon/readme.md | 133 +------------------ .../algernon/tools/heatmap-layout.ADORE.json | 27 ++-- .../ergodox/keymaps/algernon/tools/hid-commands | 12 ++ .../keymaps/algernon/tools/log-to-heatmap.py | 5 + .../ergodox/keymaps/algernon/tools/text-to-log.py | 24 ++-- 9 files changed, 212 insertions(+), 175 deletions(-) create mode 100644 keyboards/ergodox/keymaps/algernon/NEWS.md diff --git a/keyboards/ergodox/keymaps/algernon/NEWS.md b/keyboards/ergodox/keymaps/algernon/NEWS.md new file mode 100644 index 0000000000..6b95c1ef43 --- /dev/null +++ b/keyboards/ergodox/keymaps/algernon/NEWS.md @@ -0,0 +1,145 @@ +## v1.8 + +*2016-10-03* + +### ADORE + +* Major rearrangements were made, to reduce pinky use, and to balance out the hand usage. + +### Tools + +* The `hid-commands` tool will now display a notification when the **AppSel** layer is triggered. +* The `log-to-heatmap.py` tool now treats the innermost keys on the bottom row as thumb keys, as far as statistics are concerned. + +### Miscellaneous + +* Fixed the [Steno](#steno-layer) toggle key. + +## v1.7 + +*2016-09-18* + +### Overall changes + +* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers. +* The number/function key behavior was changed: function keys are now on the **Media**. +* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers. +* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. +* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. + +### ADORE + +* `Y` and `X` have been swapped again. + +### Media/Navigation layer + +* The function keys are now on this layer. +* Mouse keys have been removed. +* Media start/stop/prev/next have been removed. +* `Print screen` has been removed. +* There is only one screen lock key now. + +### Heatmap + +* Fixed a few issues in the finger-stats calculation. +* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. +* The heatmap tool will now colorize the stats by default. +* The periodic stats are now printed in a more compact format. + +### Tools + +* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. +* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. +* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. + +## v1.6 + +*2016-08-24* + +### Base layer changes + +* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`. +* The `:;` and `-_` keys are now available on the base layer, on their [ADORE](#adore-layer) location, too, just below `[{(`/`]})`. +* The `Apps` key has been replaced by `F12`. +* The `-`/`_` is no longer a tap-dance key. + +### ADORE layer changes + +* Adjustments were made to the [ADORE](#adore-layer) layer, to separate some inconvenient combinations. + +### Miscellaneous changes + +* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. +* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. +* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. + +### Heatmap + +* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off. +* The heatmap generator received a lot of updates. + +## v1.5 + +*2016-08-12* + +* The **1HAND** layer has been removed. +* A `Delete` key is now available on the right thumb cluster. +* The [ADORE](#adore-layer) layer received a major update, see the layout image above. +* It is now possible to enable automatic logging for the [ADORE](#adore-layer) layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. +* The `~` key and the `Media Next/Prev` key have been swapped on the [base layer](#base-layer). +* On the **ARROW** layer, `Backspace` has been replaced by `Enter`. +* There is some experimental support for entering Unicode symbols. + +## v1.4 + +*2016-07-29* + +* When toggling the key logging on or off, the LEDs will do a little dance. +* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. +* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. +* The `-`/`_` key was turned into a tap-dance key too. +* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. + +## v1.3 + +*2016-07-06* + +* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. +* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. +* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. +* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. + +## v1.2 + +*2016-06-22* + +* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). +* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. +* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. +* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. +* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer. +* `LEAD v` types the firmware version, and the keymap version. +* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. +* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. + +## v1.1 + +*2016-06-14* + +* The keyboard starts in NKRO mode, bootmagic and other things are disabled. +* A [Steno](#steno-layer) layer was added, to be used with Plover. +* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. +* `LEAD y` types `\o/`. +* Some keys on the [Base](#base-layer) layer have been moved around: + - `?` moved to the left pinky, left of `Q`. + - `=` shifted one row down, but `F11` stayed where it was. + - `-` on the left half was replaced by `Tab`. + - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. + - `:` now inputs `;` when shifted. +* `ESC` cancels the **Hungarian** layer too, not just modifiers. + +## v1.0 + +*2016-05-26* + +Initial version. diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index b611fbc42a..5f39010bb6 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png index fe3c03c932..9a2ba55eff 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/steno-layer.png and b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 248a0ed303..48d63fb0bd 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -160,11 +160,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------. ,-----------------------------------------------------. * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | F12 | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | `~ | X | W | G | L | M | ( | | ) | F | H | C | P | Y | \ | + * | \ | X | W | C | H | F | ( | | ) | M | G | L | P | / | `~ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = | * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------| - * | | Z | Q | ' | , | . | | | pane | B | K | V | J | / | | + * | | Z | Q | ' | , | . | | | pane | B | K | V | Y | J | | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' @@ -179,7 +179,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [ADORE] = KEYMAP( // left hand KC_MPLY ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11 -,KC_GRV ,KC_X ,KC_W ,KC_G ,KC_L ,KC_M ,TD(CT_LBP) +,KC_BSLS ,KC_X ,KC_W ,KC_C ,KC_H ,KC_F ,TD(CT_LBP) ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U ,KC_NO ,KC_Z ,KC_Q ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) @@ -190,9 +190,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // right hand ,KC_F12 ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) - ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS + ,TD(CT_RBP),KC_M ,KC_G ,KC_L ,KC_P ,KC_SLSH ,KC_GRV ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL - ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_J ,KC_SLSH ,KC_NO + ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_Y ,KC_J ,KC_NO ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL @@ -386,7 +386,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 6: Steno for Plover * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | BASE | | | | | | | | | + * | | | | | | | | | | | | | | | BASE | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -407,7 +407,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [PLVR] = KEYMAP( // left hand -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, @@ -417,7 +417,7 @@ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, PV_A, PV_O, KC_NO, // right hand - 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, M(A_PLVR), PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, @@ -617,6 +617,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) register_code (KC_LGUI); if (record->tap.count && !record->tap.interrupted) { if (record->tap.count >= 2) { + uprintf("CMD:appsel_start\n"); layer_on (APPSEL); set_oneshot_layer (APPSEL, ONESHOT_START); } @@ -695,15 +696,15 @@ void matrix_init_user(void) { LEADER_EXTERNS(); -static void ang_tap (uint8_t code, ...) { - uint8_t kc = code; +static void ang_tap (uint16_t code, ...) { + uint16_t kc = code; va_list ap; va_start(ap, code); do { - register_code(kc); - unregister_code(kc); + register_code16(kc); + unregister_code16(kc); wait_ms(50); kc = va_arg(ap, int); } while (kc != 0); @@ -866,6 +867,17 @@ void matrix_scan_user(void) { leading = false; leader_end (); + SEQ_ONE_KEY (KC_C) { + ang_tap (LSFT(KC_C), KC_S, KC_I, KC_L, KC_L, KC_RALT, KC_QUOT, KC_A, KC_M, KC_A, KC_S, + KC_S, KC_Z, KC_O, KC_N, KC_Y, KC_K, KC_RALT, KC_QUOT, KC_A, KC_M, 0); + } + + SEQ_ONE_KEY (KC_G) { + ang_tap (LSFT(KC_G), KC_E, KC_J, KC_G, KC_RALT, KC_EQL, KC_O, + KC_RALT, KC_EQL, KC_O, + KC_RALT, KC_EQL, KC_O, 0); + } + #if KEYLOGGER_ENABLE SEQ_ONE_KEY (KC_D) { ergodox_led_all_on(); @@ -875,11 +887,6 @@ void matrix_scan_user(void) { } #endif - SEQ_ONE_KEY (KC_Q) { - register_code16 (LCTL(KC_1)); - unregister_code16 (LCTL(KC_1)); - } - SEQ_ONE_KEY (KC_T) { time_travel = !time_travel; } diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index f15b676528..822ca36500 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -27,7 +27,7 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs] - [Unicode Symbol Input](#unicode-symbol-input) * [Building](#building) - [Using on Windows](#using-on-windows) -* [Changelog](#changelog) +* [Changelog](https://github.com/algernon/ergodox-layout/blob/master/NEWS.md#readme) * [License](#license) # Layouts @@ -145,137 +145,6 @@ $ make keyboard=ergodox keymap=algernon The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line. -# Changelog - -## v1.7 - -*2016-09-18* - -### Overall changes - -* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers. -* The number/function key behavior was changed: function keys are now on the **Media**. -* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers. -* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. -* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. - -### ADORE - -* `Y` and `X` have been swapped again. - -### Media/Navigation layer - -* The function keys are now on this layer. -* Mouse keys have been removed. -* Media start/stop/prev/next have been removed. -* `Print screen` has been removed. -* There is only one screen lock key now. - -### Heatmap - -* Fixed a few issues in the finger-stats calculation. -* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool. -* The heatmap tool will now colorize the stats by default. -* The periodic stats are now printed in a more compact format. - -### Tools - -* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes. -* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator. -* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side. - -## v1.6 - -*2016-08-24* - -### Base layer changes - -* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`. -* The `:;` and `-_` keys are now available on the base layer, on their [ADORE](#adore-layer) location, too, just below `[{(`/`]})`. -* The `Apps` key has been replaced by `F12`. -* The `-`/`_` is no longer a tap-dance key. - -### ADORE layer changes - -* Adjustments were made to the [ADORE](#adore-layer) layer, to separate some inconvenient combinations. - -### Miscellaneous changes - -* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one. -* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off. -* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now. - -### Heatmap - -* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off. -* The heatmap generator received a lot of updates. - -## v1.5 - -*2016-08-12* - -* The **1HAND** layer has been removed. -* A `Delete` key is now available on the right thumb cluster. -* The [ADORE](#adore-layer) layer received a major update, see the layout image above. -* It is now possible to enable automatic logging for the [ADORE](#adore-layer) layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. -* The `~` key and the `Media Next/Prev` key have been swapped on the [base layer](#base-layer). -* On the **ARROW** layer, `Backspace` has been replaced by `Enter`. -* There is some experimental support for entering Unicode symbols. - -## v1.4 - -*2016-07-29* - -* When toggling the key logging on or off, the LEDs will do a little dance. -* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. -* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. -* The `-`/`_` key was turned into a tap-dance key too. -* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. - -## v1.3 - -*2016-07-06* - -* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. -* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. -* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. -* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. - -## v1.2 - -*2016-06-22* - -* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). -* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. -* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. -* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. -* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer. -* `LEAD v` types the firmware version, and the keymap version. -* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. -* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. - -## v1.1 - -*2016-06-14* - -* The keyboard starts in NKRO mode, bootmagic and other things are disabled. -* A [Steno](#steno-layer) layer was added, to be used with Plover. -* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. -* `LEAD y` types `\o/`. -* Some keys on the [Base](#base-layer) layer have been moved around: - - `?` moved to the left pinky, left of `Q`. - - `=` shifted one row down, but `F11` stayed where it was. - - `-` on the left half was replaced by `Tab`. - - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - - `:` now inputs `;` when shifted. -* `ESC` cancels the **Hungarian** layer too, not just modifiers. - -## v1.0 - -*2016-05-26* - -Initial version. - # License The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version. diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json index 502d1e6ea4..a34edcf87e 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json @@ -111,11 +111,11 @@ "x": 3.5, "a": 6 }, - "G", + "C", { "x": 10.5 }, - "C" + "L" ], [ { @@ -128,11 +128,11 @@ "x": 1, "a": 6 }, - "L", + "H", { "x": 8.5 }, - "H", + "G", { "x": 1 }, @@ -143,7 +143,7 @@ "y": -0.875, "x": 5.5 }, - "M", + "F", { "a": 4, "fa": [0, 0, 0], @@ -158,7 +158,7 @@ { "a": 6 }, - "F" + "M" ], [ { @@ -167,7 +167,7 @@ "a": 4, "w": 1.5 }, - "\n\n~\n`", + "\n\n|\n\\", { "a": 6, "f": 3 @@ -175,14 +175,14 @@ "X", { "x": 14.5, - "a": 6 + "a": 4 }, - "Y", + "/\n?", { "a": 4, "w": 1.5 }, - "|\n\\" + "~\n`" ], [ { @@ -312,7 +312,7 @@ { "x": 1 }, - "J" + "Y" ], [ { @@ -342,10 +342,9 @@ }, "Z", { - "x": 14.5, - "a": 4 + "x": 14.5 }, - "?\n/", + "J", { "f": 9, "g": true, diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands index f3b83cf6d1..2a6710be4a 100755 --- a/keyboards/ergodox/keymaps/algernon/tools/hid-commands +++ b/keyboards/ergodox/keymaps/algernon/tools/hid-commands @@ -1,6 +1,8 @@ #!/bin/bash set -e +LAST_APPSEL_START=0 + cmd_wm () { WIN="$(xdotool getactivewindow)" wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz @@ -34,6 +36,16 @@ cmd_appsel_chrome () { _cmd_appsel chromium } +cmd_appsel_start () { + APPSEL_START=$(date +%s) + if [ $APPSEL_START -lt $(expr $LAST_APPSEL_START + 10) ]; then + return + fi + LAST_APPSEL_START=$APPSEL_START + notify-send -t 1000 "Please select an application!" -c device -u low \ + -i /usr/share/icons/Adwaita/24x24/devices/video-display.png +} + cmd_help () { cat < Date: Mon, 3 Oct 2016 18:27:52 +0000 Subject: updated readme with images --- keyboards/handwired/gamenum/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md index 9e22ff2fcb..5b53004efd 100644 --- a/keyboards/handwired/gamenum/README.md +++ b/keyboards/handwired/gamenum/README.md @@ -16,7 +16,15 @@ Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled. '+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro. -Schematic of the build is coming soon. +## schematic of the switches and diodes + +![schematic overview](http://i.imgur.com/fleitoA.jpg) + +Keep in mind that the minus of the diodes should point towards the pro micros inputs. + +##LED hookup + +![led overview](http://i.imgur.com/U6m865n.jpg) ## Adding more layers -- cgit v1.2.3 From 0320fbf6f4c3c6d079226bc49c7b4d3a3906f5d7 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 3 Oct 2016 23:30:31 +0200 Subject: - Updated dbroqua layout for HHKB keyboard (added some missing fn keys) --- keyboards/hhkb/keymaps/dbroqua/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c index 4e907acd87..2b6d3901a4 100644 --- a/keyboards/hhkb/keymaps/dbroqua/keymap.c +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -35,19 +35,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Caps | | | | | | | |PrtSc| Slck| Paus| Up | | | * |-----------------------------------------------------------------------------------------+ - * | | Vol-| Vol+| Mute| | | | | Home| PgUp| Left |Right| | + * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left |Right| | * |-----------------------------------------------------------------------------------------+ - * | | Prev| Play| Next| | | | | End |PgDwn| Down| | | + * | | Prev| Play| Next| | | + | - | End |PgDwn| Down| | | * +-----------------------------------------------------------------------------------------+ - * | | | | | | + * | | | | Stop | | * `----------------------------------------------------------------´ */ [FN] = KEYMAP( KC_PWR, 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_INS, KC_DEL, \ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ - KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_TRNS ), /* MOUSE Layer -- cgit v1.2.3 From aac3ba61a5a82d051f5def03884877c5e44db4da Mon Sep 17 00:00:00 2001 From: SethSenpai Date: Tue, 4 Oct 2016 07:52:13 +0000 Subject: added rules.mk --- keyboards/handwired/gamenum/rules.mk | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 keyboards/handwired/gamenum/rules.mk diff --git a/keyboards/handwired/gamenum/rules.mk b/keyboards/handwired/gamenum/rules.mk new file mode 100644 index 0000000000..afb9372e18 --- /dev/null +++ b/keyboards/handwired/gamenum/rules.mk @@ -0,0 +1,73 @@ + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + -- cgit v1.2.3 From b7442999dff637696842f272edca870f8e2f64e4 Mon Sep 17 00:00:00 2001 From: SethSenpai Date: Tue, 4 Oct 2016 07:58:28 +0000 Subject: updated the wrong makefile like a dummy --- keyboards/handwired/gamenum/Makefile | 76 ++---------------------------------- 1 file changed, 3 insertions(+), 73 deletions(-) diff --git a/keyboards/handwired/gamenum/Makefile b/keyboards/handwired/gamenum/Makefile index afb9372e18..191c6bb664 100644 --- a/keyboards/handwired/gamenum/Makefile +++ b/keyboards/handwired/gamenum/Makefile @@ -1,73 +1,3 @@ - -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR - include ../../Makefile -endif - - +ifndef MAKEFILE_INCLUDED + include ../../../Makefile +endif \ No newline at end of file -- cgit v1.2.3 From b8679bbe045a2285d6ab6bbc420121b26f516b9a Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 5 Oct 2016 20:41:33 -0400 Subject: RGBW lights --- keyboards/ergodox/config.h | 2 ++ keyboards/ergodox/keymaps/jack/Makefile | 5 +++++ keyboards/ergodox/keymaps/jack/config.h | 14 ++++++++++++++ keyboards/ergodox/keymaps/jack/keymap.c | 4 ++-- quantum/rgblight.c | 18 +++++++++++++++--- quantum/rgblight.h | 1 + 6 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 keyboards/ergodox/keymaps/jack/Makefile create mode 100644 keyboards/ergodox/keymaps/jack/config.h diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index edc60caae1..049c707a56 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -1,6 +1,8 @@ #ifndef KEYBOARDS_ERGODOX_CONFIG_H_ #define KEYBOARDS_ERGODOX_CONFIG_H_ +#include "config_common.h" + #define MOUSEKEY_DELAY 100 #define MOUSEKEY_INTERVAL 20 #define MOUSEKEY_MAX_SPEED 3 diff --git a/keyboards/ergodox/keymaps/jack/Makefile b/keyboards/ergodox/keymaps/jack/Makefile new file mode 100644 index 0000000000..1e57612788 --- /dev/null +++ b/keyboards/ergodox/keymaps/jack/Makefile @@ -0,0 +1,5 @@ +RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h new file mode 100644 index 0000000000..01ccfb3a2a --- /dev/null +++ b/keyboards/ergodox/keymaps/jack/config.h @@ -0,0 +1,14 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D7 +// #define RGBLIGHT_TIMER +#define RGBLED_NUM 20 // Number of LEDs +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c index dda253fa45..1dd5a76187 100644 --- a/keyboards/ergodox/keymaps/jack/keymap.c +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT, MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, - KC_NO, KC_NO, + RGB_TOG, RGB_HUI, KC_PGUP, KC_PGDN, KC_SPC,KC_SPC ), @@ -90,7 +90,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // Runs just one time when the keyboard initializes. void matrix_init_user(void) { - + }; // Runs constantly in the background, in a loop. diff --git a/quantum/rgblight.c b/quantum/rgblight.c index f82e3ec558..801ca1d0d9 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -50,7 +50,11 @@ 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]; +#ifdef RGBW + struct cRGBW led[RGBLED_NUM]; +#else + struct cRGB led[RGBLED_NUM]; +#endif uint8_t rgblight_inited = 0; @@ -334,14 +338,22 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) { void rgblight_set(void) { if (rgblight_config.enable) { - ws2812_setleds(led, RGBLED_NUM); + #ifdef RGBW + ws2812_setleds_rgbw(led, RGBLED_NUM); + #else + ws2812_setleds(led, RGBLED_NUM); + #endif } else { for (uint8_t i = 0; i < RGBLED_NUM; i++) { led[i].r = 0; led[i].g = 0; led[i].b = 0; } - ws2812_setleds(led, RGBLED_NUM); + #ifdef RGBW + ws2812_setleds_rgbw(led, RGBLED_NUM); + #else + ws2812_setleds(led, RGBLED_NUM); + #endif } } diff --git a/quantum/rgblight.h b/quantum/rgblight.h index def26c428c..2a712d8be4 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -1,6 +1,7 @@ #ifndef RGBLIGHT_H #define RGBLIGHT_H +#define RGBW 1 #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) #define RGBLIGHT_MODES 23 -- cgit v1.2.3 From 059990e05a0eea21da0bbeba5b9ad78ff3b2bdd5 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 6 Oct 2016 07:23:12 +0100 Subject: added lock screen button and fixed error in diagram --- keyboards/planck/keymaps/callum/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 411523125d..c89b485a41 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -53,9 +53,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | F21 | F22 | F23 | F24 | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | Lock | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(LALT(KC_VOLU))}, {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, S(LALT(KC_VOLD))}, - {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, S(LCTL(KC_POWER)), XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } -- cgit v1.2.3 From 387b94a6cf0f32dd0ff72e7ff09495e69cccd1fc Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Thu, 6 Oct 2016 07:24:26 +0100 Subject: updated readme --- keyboards/planck/keymaps/callum/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md index b5997cd5ae..0baeba46d9 100644 --- a/keyboards/planck/keymaps/callum/readme.md +++ b/keyboards/planck/keymaps/callum/readme.md @@ -25,9 +25,9 @@ We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c * ,-----------------------------------------------------------------------------------. * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | | Left | Down | Right| | | Left | Down | Right| | Del | + * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | Caps | | + * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | Below| | | | | | | * `-----------------------------------------------------------------------------------' @@ -63,7 +63,7 @@ We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c * |------+------+------+------+------+------+------+------+------+------+------+------| * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | F21 | F22 | F23 | F24 | | | | | | | | + * | | F21 | F22 | F23 | F24 | | | Lock | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From 1048a588c750e27ff0f900cd6aaf670e034086d0 Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 7 Oct 2016 17:15:11 +0200 Subject: Add Altgr combination for non US layouts --- quantum/keymap.h | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/keymap.h b/quantum/keymap.h index 98ddfd0c53..4b2192cb2e 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -191,6 +191,7 @@ enum quantum_keycodes { #define HYPR(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI) #define MEH(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT) #define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI) +#define ALTG(kc) (kc | QK_RCTL | QK_RALT) #define MOD_HYPR 0xf #define MOD_MEH 0x7 -- cgit v1.2.3 From 628a48c7887e20a69b5a8c84cff956ba2ec7fed2 Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 7 Oct 2016 17:18:19 +0200 Subject: Updated Readme to help windows users use docker for build --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index a7320202b2..db118f9a38 100644 --- a/readme.md +++ b/readme.md @@ -140,6 +140,9 @@ If this is a bit complex for you, Docker might be the turn-key solution you need docker run -e keymap=gwen -e keyboard=ergodox --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware +# On windows docker seems to have issue with VOLUME tag in Dockerfile, and $('pwd') won't print a windows compliant path, use full path instead like this +docker run -e keymap=default -e keyboard=ergobop --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware + ``` This will compile the targetted keyboard/keymap and leave it in your QMK directory for you to flash. -- cgit v1.2.3 From 2d7b549e2172b6ffadcaf852055864e6213cfa72 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 01:38:55 +0300 Subject: Add keymap with audio disabled but RGB effects enabled --- keyboards/cluecard/keymaps/rgb_effects/Makefile | 21 ++++++++++++++++++++ keyboards/cluecard/keymaps/rgb_effects/config.h | 9 +++++++++ keyboards/cluecard/keymaps/rgb_effects/keymap.c | 25 ++++++++++++++++++++++++ keyboards/cluecard/keymaps/rgb_effects/readme.md | 3 +++ 4 files changed, 58 insertions(+) create mode 100644 keyboards/cluecard/keymaps/rgb_effects/Makefile create mode 100644 keyboards/cluecard/keymaps/rgb_effects/config.h create mode 100644 keyboards/cluecard/keymaps/rgb_effects/keymap.c create mode 100644 keyboards/cluecard/keymaps/rgb_effects/readme.md diff --git a/keyboards/cluecard/keymaps/rgb_effects/Makefile b/keyboards/cluecard/keymaps/rgb_effects/Makefile new file mode 100644 index 0000000000..00670c0cf4 --- /dev/null +++ b/keyboards/cluecard/keymaps/rgb_effects/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/cluecard/keymaps/rgb_effects/config.h b/keyboards/cluecard/keymaps/rgb_effects/config.h new file mode 100644 index 0000000000..441db52d96 --- /dev/null +++ b/keyboards/cluecard/keymaps/rgb_effects/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here +#define RGBLIGHT_TIMER + +#endif diff --git a/keyboards/cluecard/keymaps/rgb_effects/keymap.c b/keyboards/cluecard/keymaps/rgb_effects/keymap.c new file mode 100644 index 0000000000..3b68558254 --- /dev/null +++ b/keyboards/cluecard/keymaps/rgb_effects/keymap.c @@ -0,0 +1,25 @@ +#include "cluecard.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = KEYMAP( + RGB_TOG, RGB_SAI, RGB_VAI, \ + RGB_HUD, RGB_HUI, \ + RGB_MOD, RGB_SAD, RGB_VAD, \ + BL_STEP, \ + KC_NO, KC_NO, KC_NO \ + ) +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { +} diff --git a/keyboards/cluecard/keymaps/rgb_effects/readme.md b/keyboards/cluecard/keymaps/rgb_effects/readme.md new file mode 100644 index 0000000000..fa710b4641 --- /dev/null +++ b/keyboards/cluecard/keymaps/rgb_effects/readme.md @@ -0,0 +1,3 @@ +# RGB effect test keymap for cluecard + +This keymap has audio disabled, and the RGB mode button does not go through the different effects -- cgit v1.2.3 From 70f32842e5d94f14d05c1f9adcb1b1144a25a132 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Sun, 9 Oct 2016 12:52:39 +0200 Subject: Reduce the default dynamic macro buffer There have been reports of it leaving not enough free memory preventing the keyboard from working properly. --- quantum/dynamic_macro.h | 9 +++++++-- readme.md | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index a3ad61bc7e..e6dbc5b9c1 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -8,8 +8,13 @@ /* May be overridden with a custom value. Be aware that the effective * macro length is half of this value: each keypress is recorded twice * because of the down-event and up-event. This is not a bug, it's the - * intended behavior. */ -#define DYNAMIC_MACRO_SIZE 256 + * intended behavior. + * + * Usually it should be fine to set the macro size to at least 256 but + * there have been reports of it being too much in some users' cases, + * so 128 is considered a safe default. + */ +#define DYNAMIC_MACRO_SIZE 128 #endif /* DYNAMIC_MACRO_RANGE must be set as the last element of user's diff --git a/readme.md b/readme.md index a7320202b2..d28d7c3ff3 100644 --- a/readme.md +++ b/readme.md @@ -823,7 +823,7 @@ And then, to assign this macro to a key on your keyboard layout, you just use `M ## Dynamic macros: record and replay macros in runtime -In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 128 keypresses. +In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 64 keypresses (by default). To enable them, first add a new element to the `planck_keycodes` enum -- `DYNAMIC_MACRO_RANGE`: @@ -864,7 +864,7 @@ Add the following code to the very beginning of your `process_record_user()` fun To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `_DYN` layer button. The handler awaits specifically for the `MO(_DYN)` keycode as the "stop signal" so please don't use any fancy ways to access this layer, use the regular `MO()` modifier. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`. -If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 256; please read the comments for it in the header). +If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header). For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header. -- cgit v1.2.3 From 26759e126eec922cd642052baa3e43a3c62c4a7c Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Sun, 9 Oct 2016 13:34:17 +0200 Subject: New Planck keymap: vifon --- keyboards/planck/keymaps/vifon/Makefile | 25 +++++ keyboards/planck/keymaps/vifon/config.h | 91 ++++++++++++++++ keyboards/planck/keymaps/vifon/keymap.c | 187 ++++++++++++++++++++++++++++++++ 3 files changed, 303 insertions(+) create mode 100644 keyboards/planck/keymaps/vifon/Makefile create mode 100644 keyboards/planck/keymaps/vifon/config.h create mode 100644 keyboards/planck/keymaps/vifon/keymap.c diff --git a/keyboards/planck/keymaps/vifon/Makefile b/keyboards/planck/keymaps/vifon/Makefile new file mode 100644 index 0000000000..838cb4e885 --- /dev/null +++ b/keyboards/planck/keymaps/vifon/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/vifon/config.h b/keyboards/planck/keymaps/vifon/config.h new file mode 100644 index 0000000000..9cb0634fb3 --- /dev/null +++ b/keyboards/planck/keymaps/vifon/config.h @@ -0,0 +1,91 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Planck Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* prevent the modifiers from being stuck, sacrificing some memory */ +#define PREVENT_STUCK_MODIFIERS + +#ifdef SUBPROJECT_rev3 + #include "rev3/config.h" +#endif +#ifdef SUBPROJECT_rev4 + #include "rev4/config.h" +#endif + +#endif diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c new file mode 100644 index 0000000000..80c4a516c3 --- /dev/null +++ b/keyboards/planck/keymaps/vifon/keymap.c @@ -0,0 +1,187 @@ +// 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 +#include "timer.h" +#include + +// 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. +enum userlayer { + _QW = 0, + _CM, + _PP, + _PPG, + _NM, + _LW, + _RS, + _DL, + _DYN, +}; + +enum planck_keycodes { + KM_LW = SAFE_RANGE, + KM_RS, + KM_SHLK, /* ShiftLock */ + KM_RST, /* Reset */ + KM_NUM, /* Numeric layer */ + KM_SLP, /* Sleep 250 ms */ + KM_PPLR, /* Pure Pro layer */ + DYNAMIC_MACRO_RANGE, +}; + +#include "dynamic_macro.h" + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +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}, + {CTL_T(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_FN0 }, + {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL} +}, +[_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}, + {CTL_T(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_FN0 }, + {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL} +}, +[_PP] = { /* Pure Pro */ + {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_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_UP, KC_RCTL}, + {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT} +}, +[_PPG] = { /* Pure Pro: Gaming */ + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, DF(_RS), _______, _______}, + {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______}, +}, +[_NM] = { /* Numeric */ + {KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, KC_FN0 }, + {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______} +}, +[_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_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT }, + {_______, BL_TOGG, _______, _______, _______, KC_BTN1, KC_BTN1, _______, 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_DEL }, + {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), KM_PPLR, KM_RST, KC_ENT }, + {_______, BL_STEP, _______, _______, _______, KC_BTN2, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______} +}, +[_DL]= { /* DUAL */ + {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______}, + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2}, + {_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______}, + {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______} +}, +[_DYN]= { /* special */ + {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, KC_INS, _______, KC_PSCR, KC_PAUS}, + {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK}, + {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, +}; + +#undef _______ + +const uint16_t PROGMEM fn_actions[] = { + ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + static uint16_t key_timer; + + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + + switch (keycode) { + case KM_LW: + if (record->event.pressed) { + layer_on(_LW); + } else { + layer_off(_LW); + } + update_tri_layer(_LW, _RS, _DL); + return false; + break; + case KM_RS: + if (record->event.pressed) { + layer_on(_RS); + } else { + layer_off(_RS); + } + update_tri_layer(_LW, _RS, _DL); + return false; + break; + case KM_SHLK: + register_code(KC_LSFT); + break; + case KM_RST: + if (record->event.pressed) { + key_timer = timer_read(); + } else { + if (timer_elapsed(key_timer) >= 500) { + clear_keyboard(); + backlight_toggle(); + _delay_ms(250); + backlight_toggle(); + bootloader_jump(); + } + } + break; + case KM_PPLR: + if (record->event.pressed) { + key_timer = timer_read(); + } else { + if (timer_elapsed(key_timer) >= 250) { + default_layer_set((1UL << _PP) | (1UL << _PPG)); + backlight_toggle(); + _delay_ms(100); + backlight_toggle(); + } else { + default_layer_set(1UL << _PP); + } + } + break; + case KM_NUM: + layer_on(_NM); + break; + case KM_SLP: + if (record->event.pressed) { + _delay_ms(250); + } + break; + } + + + if (record->event.pressed + && IS_LAYER_ON(_NM) + && keymap_key_to_keycode(_NM, record->event.key) == KC_TRNS) { + + layer_off(_NM); + } + + return true; +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; +} -- cgit v1.2.3 From f284bc6af9995453fc7be2e94ae134bc42b90204 Mon Sep 17 00:00:00 2001 From: Jonathan Arnett Date: Sun, 9 Oct 2016 11:36:52 -0400 Subject: Switched to momentary Also updated the style of these lines slightly to match the style of the default keymap --- keyboards/ergodox/keymaps/j3rn/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/ergodox/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c index e6f6cf44ec..d913ea4a5e 100644 --- a/keyboards/ergodox/keymaps/j3rn/keymap.c +++ b/keyboards/ergodox/keymaps/j3rn/keymap.c @@ -36,21 +36,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - KC_FN1, KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + MO(SYMB), KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_HOME, KC_END, - KC_SPC, KC_LGUI, KC_FN2, + KC_SPC,KC_LGUI,MO(MDIA), // right hand KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB), - KC_PGUP, CTL_T(KC_ESC), + KC_PGUP, CTL_T(KC_ESC), KC_PGDN, - KC_FN1, KC_TAB, KC_ENT + MO(SYMB),KC_TAB, KC_ENT ), /* Keymap 1: Symbol Layer * -- cgit v1.2.3 From 0ae07ae64d3549d34c021f70b4a9877e5cd9ced9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:11:52 +0300 Subject: Tune the snake and knight effect parameters for Cluecard --- keyboards/cluecard/keymaps/rgb_effects/config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/cluecard/keymaps/rgb_effects/config.h b/keyboards/cluecard/keymaps/rgb_effects/config.h index 441db52d96..e88847df4d 100644 --- a/keyboards/cluecard/keymaps/rgb_effects/config.h +++ b/keyboards/cluecard/keymaps/rgb_effects/config.h @@ -5,5 +5,8 @@ // place overrides here #define RGBLIGHT_TIMER +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2 #endif -- cgit v1.2.3 From 9b0e21f87f446935f29254bb623c2cfe29472b6e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:26:16 +0300 Subject: Tunable RGB light intervals --- quantum/rgblight.c | 6 ++++++ quantum/rgblight.h | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index f82e3ec558..9eac87a207 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -42,10 +42,16 @@ const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = { 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 }; + +__attribute__ ((weak)) const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; +__attribute__ ((weak)) const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30}; +__attribute__ ((weak)) const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; +__attribute__ ((weak)) const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20}; +__attribute__ ((weak)) const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20}; rgblight_config_t rgblight_config; diff --git a/quantum/rgblight.h b/quantum/rgblight.h index def26c428c..17f04ffcf2 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -40,6 +40,12 @@ #include "eeconfig.h" #include "light_ws2812.h" +extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM; +extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM; +extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM; +extern const uint8_t RGBLED_SNAKE_INTERVALS[3] PROGMEM; +extern const uint8_t RGBLED_KNIGHT_INTERVALS[3] PROGMEM; + typedef union { uint32_t raw; struct { -- cgit v1.2.3 From 02c9a992157d15c4988b9dc46cfa2f76bfea655c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:27:11 +0300 Subject: Tune snake and knight intervals for Cluecard --- keyboards/cluecard/keymaps/rgb_effects/keymap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/cluecard/keymaps/rgb_effects/keymap.c b/keyboards/cluecard/keymaps/rgb_effects/keymap.c index 3b68558254..74c95ce8a8 100644 --- a/keyboards/cluecard/keymaps/rgb_effects/keymap.c +++ b/keyboards/cluecard/keymaps/rgb_effects/keymap.c @@ -10,6 +10,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; +const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {255, 170, 85}; +const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {255, 170, 85}; + void matrix_init_user(void) { } -- cgit v1.2.3 From db4dce731216cb6cdac65cb528329fd0caca5aa3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:37:47 +0300 Subject: Update the Cluecard readme files --- keyboards/cluecard/keymaps/default/readme.md | 4 ++++ keyboards/cluecard/keymaps/rgb_effects/readme.md | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/keyboards/cluecard/keymaps/default/readme.md b/keyboards/cluecard/keymaps/default/readme.md index 9e3b97beac..fa4e8ccad4 100644 --- a/keyboards/cluecard/keymaps/default/readme.md +++ b/keyboards/cluecard/keymaps/default/readme.md @@ -1 +1,5 @@ # The default keymap for cluecard + +Note that this keymap has audio enabled, so the RGB mode button does not go through the different effects. +So the LEDs will still show a static light, that is configurable with the hue, staturation and brightness +buttons. You can of course also turn them on and off with the on/off button. diff --git a/keyboards/cluecard/keymaps/rgb_effects/readme.md b/keyboards/cluecard/keymaps/rgb_effects/readme.md index fa710b4641..949cac394e 100644 --- a/keyboards/cluecard/keymaps/rgb_effects/readme.md +++ b/keyboards/cluecard/keymaps/rgb_effects/readme.md @@ -1,3 +1,7 @@ # RGB effect test keymap for cluecard -This keymap has audio disabled, and the RGB mode button does not go through the different effects +This keymap is made for testing the RGB effects. Audio is disabled and the mode buttons goes through each +effect. If you run HID-listen you will be able to see which effect is active. For a list of effects, check +the `rgblight.c` file. + +The hue, saturation and brightness buttons will work depending on which effect is active. -- cgit v1.2.3 From 92a3a96849aee708753a6623b0db228023e3baf8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:47:05 +0300 Subject: Apply the dim curve to the RGB output Just like it's supposed to be used. It now looks much better. --- quantum/rgblight.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index f82e3ec558..b36a1fda0e 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -55,13 +55,8 @@ uint8_t rgblight_inited = 0; void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) { - // Convert hue, saturation, and value (HSV/HSB) to RGB. DIM_CURVE is used only - // on value and saturation (inverted). This looks the most natural. uint8_t r = 0, g = 0, b = 0, base, color; - val = pgm_read_byte(&DIM_CURVE[val]); - sat = 255 - pgm_read_byte(&DIM_CURVE[255 - sat]); - if (sat == 0) { // Acromatic color (gray). Hue doesn't mind. r = val; g = val; @@ -103,6 +98,9 @@ void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) { break; } } + r = pgm_read_byte(&DIM_CURVE[r]); + g = pgm_read_byte(&DIM_CURVE[g]); + b = pgm_read_byte(&DIM_CURVE[b]); setrgb(r, g, b, led1); } -- cgit v1.2.3 From ffae9d84c5279b463da112ee15568d536649b819 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 9 Oct 2016 19:53:41 +0300 Subject: CIE 1931 dim curve --- quantum/rgblight.c | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index b36a1fda0e..9ddc243b2a 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -6,24 +6,37 @@ #include "rgblight.h" #include "debug.h" +// Lightness curve using the CIE 1931 lightness formula +//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm 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 -}; + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, + 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, + 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, + 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, + 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, + 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, + 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, + 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, + 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, + 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, + 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, + 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, + 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, + 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, + 242, 245, 247, 250, 252, 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, -- cgit v1.2.3 From 5b2e455d3b71bfb90754930d1f22d3e8ce98b927 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 10 Oct 2016 00:46:20 +0700 Subject: Unicode map framework. Allow unicode up to 0xFFFFF using separate mapping table --- build_keyboard.mk | 5 +++++ quantum/keymap.h | 7 +++++++ quantum/process_keycode/process_unicode.c | 26 ++++++++++++++++++++++++++ quantum/process_keycode/process_unicode.h | 4 ++++ quantum/quantum.c | 3 +++ readme.md | 6 ++++++ 6 files changed, 51 insertions(+) diff --git a/build_keyboard.mk b/build_keyboard.mk index 03a69b1464..282adcb118 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -153,6 +153,11 @@ ifeq ($(strip $(UCIS_ENABLE)), yes) UNICODE_ENABLE = yes endif +ifeq ($(strip $(UNICODEMAP_ENABLE)), yes) + OPT_DEFS += -DUNICODEMAP_ENABLE + UNICODE_ENABLE = yes +endif + ifeq ($(strip $(UNICODE_ENABLE)), yes) OPT_DEFS += -DUNICODE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c diff --git a/quantum/keymap.h b/quantum/keymap.h index 98ddfd0c53..0daa001204 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -84,6 +84,10 @@ enum quantum_keycodes { QK_MOD_TAP_MAX = 0x6FFF, QK_TAP_DANCE = 0x7100, QK_TAP_DANCE_MAX = 0x71FF, +#ifdef UNICODEMAP_ENABLE + QK_UNICODE_MAP = 0x7800, + QK_UNICODE_MAP_MAX = 0x7FFF, +#endif #ifdef UNICODE_ENABLE QK_UNICODE = 0x8000, QK_UNICODE_MAX = 0xFFFF, @@ -335,5 +339,8 @@ enum quantum_keycodes { #define UC(n) UNICODE(n) #endif +#ifdef UNICODEMAP_ENABLE + #define X(n) (n | QK_UNICODE_MAP) +#endif #endif diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 6a30afe293..37dd471ffd 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -78,6 +78,32 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) { return true; } +#ifdef UNICODEMAP_ENABLE +__attribute__((weak)) +const uint32_t PROGMEM unicode_map[] = { +}; + +// 5 digit max because of linux limitation +void register_hex32(uint32_t hex) { + for(int i = 4; i >= 0; i--) { + uint8_t digit = ((hex >> (i*4)) & 0xF); + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + } +} + +bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { + if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { + const uint32_t* map = unicode_map; + uint16_t index = keycode & 0x7FF; + unicode_input_start(); + register_hex32(pgm_read_dword_far(&map[index])); + unicode_input_finish(); + } + return true; +} +#endif + #ifdef UCIS_ENABLE qk_ucis_state_t qk_ucis_state; diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 27f8072ee6..a6c7e45845 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -20,6 +20,10 @@ void register_hex(uint16_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); +#ifdef UNICODEMAP_ENABLE +bool process_unicode_map(uint16_t keycode, keyrecord_t *record); +#endif + #ifdef UCIS_ENABLE #ifndef UCIS_MAX_SYMBOL_LENGTH #define UCIS_MAX_SYMBOL_LENGTH 32 diff --git a/quantum/quantum.c b/quantum/quantum.c index a16bd5443c..098312e6ef 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -128,6 +128,9 @@ bool process_record_quantum(keyrecord_t *record) { #endif #ifdef UCIS_ENABLE process_ucis(keycode, record) && + #endif + #ifdef UNICODEMAP_ENABLE + process_unicode_map(keycode, record) && #endif true)) { return false; diff --git a/readme.md b/readme.md index a7320202b2..2653ab2ea7 100644 --- a/readme.md +++ b/readme.md @@ -320,6 +320,12 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m This allows you to send unicode symbols via `UC()` in your keymap. Only codes up to 0x7FFF are currently supported. +`UNICODEMAP_ENABLE` + +This allows sending unicode symbols using `X()` in your keymap. Codes +up to 0xFFFFF are supported, including emojis. But you need to maintain a +separate mapping table in your keymap file. + `BLUETOOTH_ENABLE` This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins. -- cgit v1.2.3 From e95c1e3f2c5137b114aa947f875c52e4a5c74b5d Mon Sep 17 00:00:00 2001 From: Nathan Johnson Date: Sat, 8 Oct 2016 13:20:36 -0500 Subject: Adding whiskey_tango_foxtrot_capslock ergodox keymap --- .../osx_whiskey_tango_foxtrot_capslock/keymap.c | 231 +++++++++++++++++++++ .../osx_whiskey_tango_foxtrot_capslock.png | Bin 0 -> 185064 bytes .../osx_whiskey_tango_foxtrot_capslock/readme.md | 38 ++++ 3 files changed, 269 insertions(+) create mode 100644 keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c create mode 100644 keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png create mode 100644 keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c new file mode 100644 index 0000000000..98d2836ab2 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c @@ -0,0 +1,231 @@ +/* + * This is built out of frustration with OSX / Sierra caps lock delay. + * Fake it till you make it! + */ + +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "timer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +#define BLINK_BASE 150U // timer threshold for blinking on MDIA layer + +typedef enum onoff_t {OFF, ON} onoff; + +#define caps_led_on ergodox_right_led_2_on +#define caps_led_off ergodox_right_led_2_off + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | ` | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsL | A | S | D | F | G |------| |------| H | J | K | L | ; | " | + * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Ctrl | Opt | Cmd | Left | Right| | Down | Up | Ctrl | Cmd | Opt | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | L1 | | Alt | Ctrl ] + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp| Del |------| |------| Enter | Spc | + * | | | End | | PgDn | | | + * `--------------------' `----------------------' + */ + + [BASE] = KEYMAP( // layer 0 : default + // left hand + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + KC_TAB, M(KC_Q), M(KC_W), M(KC_E), M(KC_R), M(KC_T), KC_LBRC, + M(KC_CAPS), M(KC_A), M(KC_S), M(KC_D), M(KC_F), M(KC_G), + KC_LSFT, M(KC_Z), M(KC_X), M(KC_C), M(KC_V), M(KC_B), KC_FN0, + KC_LCTL, KC_LALT, KC_LGUI, KC_LEFT, KC_RGHT, + KC_TRNS, KC_FN1, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_GRV, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_RBRC, M(KC_Y), M(KC_U), M(KC_I), M(KC_O), M(KC_P), KC_BSLS, + M(KC_H), M(KC_J), M(KC_K), M(KC_L), KC_SCLN, KC_QUOT, + KC_FN0, M(KC_N), M(KC_M), KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_DOWN, KC_UP, KC_RCTL, KC_RGUI, KC_RALT, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | | | F7 | F8 | F9 | F10 | F11 | F12 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | L0 | L2 | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS + [SYMB] = KEYMAP( + // left hand + KC_GRV ,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_FN3, KC_FN2, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + 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, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), +/* Keymap 2: Media and tenkey + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | BOOTL | | Mute | Vol- | Vol+ | F14 | F15 | | | | NumLk| / | * | - | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | 7 | 8 | 9 | + | | + * |--------+------+------+------+------+------| | | |------+-----+-------+------+------+--------| + * | | | | | | |------| |------| | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | 1 | 2 | 3 | Enter| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | Enter| | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | L1 | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + // MEDIA AND TENKEY + [MDIA] = KEYMAP( + KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, KC_F15, + 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_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, + KC_FN4, KC_NO, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_NO, KC_NO, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, + KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NO, + KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_NO, + KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PENT, KC_NO, + KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_NO, + KC_NO, KC_NO, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + +const uint16_t PROGMEM fn_actions[] = { + ACTION_LAYER_MOMENTARY(SYMB), // FN0 - Momentary Layer 1 (Symbols) + ACTION_LAYER_ON(SYMB,ON_RELEASE), // FN1 - Enable Layer 1 (Symbols) + ACTION_LAYER_ON(MDIA,ON_RELEASE), // FN2 - Enable Layer 2 (Media) + ACTION_LAYER_OFF(SYMB,ON_RELEASE), // FN3 - Disable Layer 1 (Symbols) + ACTION_LAYER_OFF(MDIA,ON_RELEASE), // FN4 - Disable Layer 2 (MMedia) + ACTION_LAYER_MOMENTARY(MDIA) // FN5 - Momentary Layer 2 (Mdia) +}; + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + static onoff caps_state = OFF; + switch(id) { + case KC_CAPS: + if (record->event.pressed) { + // Toggle caps state; + if (caps_state == OFF) { + // Turn it on then! + caps_led_on(); + caps_state = ON; + } else { + caps_led_off(); + caps_state = OFF; + } + } + break; + default: + if (record->event.pressed) { + bool shifted = false; + if (caps_state == ON && get_mods() == 0) { + register_code(KC_LSFT); + shifted = true; + } + register_code(id); + if(shifted) { + unregister_code(KC_LSFT); + } + } else { + unregister_code(id); + } + 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); + + static onoff board_led_state = OFF; + static uint16_t dt = 0; + static uint8_t oldlayer = 0; + + if(oldlayer != layer) { + // Layer was just toggled. + if(layer == BASE) { + ergodox_board_led_off(); + board_led_state = OFF; + } else { + ergodox_board_led_on(); + board_led_state = ON; + } + } else if (layer >= MDIA) { + // We need to do blinking. + if(timer_elapsed(dt) > BLINK_BASE) { + // toggle + dt = timer_read(); + if(board_led_state == OFF) { + ergodox_board_led_on(); + board_led_state = ON; + } else { + ergodox_board_led_off(); + board_led_state = OFF; + } + } + } + oldlayer = layer; +} diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png new file mode 100644 index 0000000000..8d49e5e61d Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png differ diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md new file mode 100644 index 0000000000..618db6ff43 --- /dev/null +++ b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md @@ -0,0 +1,38 @@ +# The extra special ergodox build for MacOS Sierra caps lock users + +###Do you +- Hate the OSX / MacOS caps lock delay? +- Have an ergodox? + +###Then this might just be for you! + +[This](http://apple.stackexchange.com/questions/81234/how-to-remove-caps-lock-delay-on-apple-macbook-pro-aluminum-keyboard) +and [this](http://sleepycow.org/2014/07/removing-the-caps-lock-delay-on-a-macbook/) +are good workarounds for the caps lock delay, however none of these +work on Sierra. This abomination of a keymap simulates capslock to the best +of its abilities. +This means that it keeps track of caps lock state internally rather than +sending a caps lock keypress to the OS. It is smart enough to check for +modifiers, such as Control being held down, and stop it with the hanky panky +and just send on the key event unmolested even if FakeCaps is enabled. And +since the macro isn't even registered on the non-alphas, it will not affect +them regardless. Only in the event that FakeCaps is enabled and an alpha key +is pressed will it sneak in a shift keydown before the alpha keydown and +immediately afterward sneaks in a shift keyup. Generally this works well, +however there is one known issue: + +- Holding down a key will only have the first character in caps. For instance, + with caps lock on, if you hold down the 'a' key, you get: + + ``` + Aaaaaaaaaaaaaaaaaa + ``` + +I have only tested this on an original Ergodox with a Teensy 2.0. + +####Some other small tweaks + - Layer 0 board light is off + - Layer 1 board light is on solid + - Layer 2 board light blinks at speed controlled by BLINK_BASE + +![osx whiskey tango foxtrot](osx_whiskey_tango_foxtrot_capslock.png) -- cgit v1.2.3 From 932705706edc22774d89fb94ebad9ffe690a270c Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 10 Oct 2016 01:34:34 +0700 Subject: Add example keymap --- keyboards/planck/keymaps/priyadi/Makefile | 26 ++ keyboards/planck/keymaps/priyadi/keymap.c | 417 +++++++++++++++++++++++++++++ keyboards/planck/keymaps/priyadi/readme.md | 1 + 3 files changed, 444 insertions(+) create mode 100644 keyboards/planck/keymaps/priyadi/Makefile create mode 100644 keyboards/planck/keymaps/priyadi/keymap.c create mode 100644 keyboards/planck/keymaps/priyadi/readme.md diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile new file mode 100644 index 0000000000..aa211d2f05 --- /dev/null +++ b/keyboards/planck/keymaps/priyadi/Makefile @@ -0,0 +1,26 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +UNICODEMAP_ENABLE = yes # Unicode map +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c new file mode 100644 index 0000000000..dd8652d348 --- /dev/null +++ b/keyboards/planck/keymaps/priyadi/keymap.c @@ -0,0 +1,417 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" +#include "process_unicode.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _WORKMAN 2 +#define _PUNC 9 +#define _NUM 10 +#define _FUNC 11 +#define _EMOJI 12 +#define _ADJUST 16 + +enum planck_keycodes { + // layouts + QWERTY = SAFE_RANGE, + COLEMAK, + WORKMAN, + + // layer switchers + PUNC, + NUM, + FUNC, + EMOJI, + + // os switchers + LINUX, + WIN, + OSX, +}; + +// Fillers to make layering clearer +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// unicode map +enum unicode_name { + GRIN, // grinning face 😊 + TJOY, // tears of joy 😂 + SMILE, // grining face with smiling eyes 😁 + HEART, // heart ❤ + EYERT, // smiling face with heart shaped eyes 😍 + CRY, // crying face 😭 + SMEYE, // smiling face with smiling eyes 😊 + UNAMU, // unamused 😒 + KISS, // kiss 😘 + HART2, // two hearts 💕 + WEARY, // weary 😩 + OKHND, // ok hand sign 👌 + PENSV, // pensive 😔 + SMIRK, // smirk 😏 + RECYC, // recycle ♻ + WINK, // wink 😉 + THMUP, // thumb up 👍 + THMDN, // thumb down 👎 + PRAY, // pray 🙏 + PHEW, // relieved 😌 + MUSIC, // musical notes + FLUSH, // flushed 😳 + CELEB, // celebration 🙌 + CRY2, // crying face 😢 + COOL, // smile with sunglasses 😎 + NOEVS, // see no evil + NOEVH, // hear no evil + NOEVK, // speak no evil + POO, // pile of poo + EYES, // eyes + VIC, // victory hand + BHART, // broken heart + SLEEP, // sleeping face + SMIL2, // smiling face with open mouth & sweat + HUNRD, // 100 + CONFU, // confused + TONGU, // face with tongue & winking eye + DISAP, // disappointed + YUMMY, // face savoring delicious food + CLAP, // hand clapping + FEAR, // face screaming in fear + HORNS, // smiling face with horns + HALO, // smiling face with halo + BYE, // waving hand + SUN, // sun + MOON, // moon + SKULL, // skull +}; + +const uint32_t PROGMEM unicode_map[] = { + [GRIN] = 0x1F600, + [TJOY] = 0x1F602, + [SMILE] = 0x1F601, + [HEART] = 0x2764, + [EYERT] = 0x1f60d, + [CRY] = 0x1f62d, + [SMEYE] = 0x1F60A, + [UNAMU] = 0x1F612, + [KISS] = 0x1F618, + [HART2] = 0x1F495, + [WEARY] = 0x1F629, + [OKHND] = 0x1F44C, + [PENSV] = 0x1F614, + [SMIRK] = 0x1F60F, + [RECYC] = 0x267B, + [WINK] = 0x1F609, + [THMUP] = 0x1F44D, + [THMDN] = 0x1F44E, + [PRAY] = 0x1F64F, + [PHEW] = 0x1F60C, + [MUSIC] = 0x1F3B6, + [FLUSH] = 0x1F633, + [CELEB] = 0x1F64C, + [CRY2] = 0x1F622, + [COOL] = 0x1F60E, + [NOEVS] = 0x1F648, + [NOEVH] = 0x1F649, + [NOEVK] = 0x1F64A, + [POO] = 0x1F4A9, + [EYES] = 0x1F440, + [VIC] = 0x270C, + [BHART] = 0x1F494, + [SLEEP] = 0x1F634, + [SMIL2] = 0x1F605, + [HUNRD] = 0x1F4AF, + [CONFU] = 0x1F615, + [TONGU] = 0x1F61C, + [DISAP] = 0x1F61E, + [YUMMY] = 0x1F60B, + [CLAP] = 0x1F44F, + [FEAR] = 0x1F631, + [HORNS] = 0x1F608, + [HALO] = 0x1F607, + [BYE] = 0x1F44B, + [SUN] = 0x2600, + [MOON] = 0x1F314, + [SKULL] = 0x1F480, +}; + +// keymaps + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_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_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_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_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL} +}, + +/* Workman + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_WORKMAN] = { + {KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL} +}, + +/* Punc + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ` | | | | | | | | _ | + | { | } | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | \ | - | = | [ | ] | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | < | > | | + * `-----------------------------------------------------------------------------------' + */ +[_PUNC] = { + {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_GRV, _______, _______, _______, _______, _______, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_DQUO}, + {_______, _______, _______, _______, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT}, + {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, KC_LABK, KC_RABK, _______} +}, + +/* Num + * ,-----------------------------------------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | @ | A | B | C | [ | ] | 4 | 5 | 6 | : |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | D | E | F | & | # | 1 | 2 | 3 | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | x | | | | 0 | , | . | | | + * `-----------------------------------------------------------------------------------' + */ +[_NUM] = { + {_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_COLN, KC_BSLS}, + {_______, _______, S(KC_D), S(KC_E), S(KC_F), KC_AMPR, KC_HASH, KC_1, KC_2, KC_3, _______, _______}, + {_______, _______, KC_X, _______, _______, KC_SPC, KC_SPC, KC_0, KC_COMM,KC_KP_DOT,_______, _______} +}, + +/* Func + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F5 | F6 | F7 | F8 | | | Left | Down | Right| PgDn | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F9 | F10 | F11 | F12 | | | | Home | End | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | |Print | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC] = { + {_______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_BSPC}, + {_______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______}, + {_______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_HOME, KC_END, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,KC_PSCREEN} +}, + +/* Emoji + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_EMOJI] = { + {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)}, + {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)}, + {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)}, + { X(POO), X(EYES),X(HUNRD),X(TONGU),X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)} +}, + +/* Adjust + * ,-----------------------------------------------------------------------------------. + * | | |Linux | Win | OSX | | |Qwerty|Colemk|Workmm| | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, _______, LINUX, WIN, OSX, _______, _______, QWERTY, COLEMAK, WORKMAN, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_workman[][2] = SONG(DVORAK_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case WORKMAN: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_workman, false, 0); + #endif + persistant_default_layer_set(1UL<<_WORKMAN); + } + return false; + break; + case PUNC: + if (record->event.pressed) { + layer_on(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _ADJUST); + } else { + layer_off(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _ADJUST); + } + return false; + break; + case EMOJI: + if (record->event.pressed) { + layer_on(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _ADJUST); + } else { + layer_off(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _ADJUST); + } + return false; + break; + case NUM: + if (record->event.pressed) { + layer_on(_NUM); + } else { + layer_off(_NUM); + } + return false; + break; + case FUNC: + if (record->event.pressed) { + layer_on(_FUNC); + } else { + layer_off(_FUNC); + } + return false; + break; + case LINUX: + set_unicode_input_mode(UC_LNX); + return false; + break; + case WIN: + set_unicode_input_mode(UC_WIN); + return false; + break; + case OSX: + set_unicode_input_mode(UC_OSX); + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + set_unicode_input_mode(UC_LNX); +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/priyadi/readme.md b/keyboards/planck/keymaps/priyadi/readme.md new file mode 100644 index 0000000000..de2f25e537 --- /dev/null +++ b/keyboards/planck/keymaps/priyadi/readme.md @@ -0,0 +1 @@ +# Priyadi's Planck Layout \ No newline at end of file -- cgit v1.2.3 From 2855de5f0fdc6767b57877687b614687fdafa64c Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 20 Sep 2016 11:38:45 +0200 Subject: init keymap --- keyboards/ergodox/keymaps/pvinis/Makefile | 9 + keyboards/ergodox/keymaps/pvinis/keymap.c | 429 ++++++++++++++++++++++++++++++ 2 files changed, 438 insertions(+) create mode 100644 keyboards/ergodox/keymaps/pvinis/Makefile create mode 100644 keyboards/ergodox/keymaps/pvinis/keymap.c diff --git a/keyboards/ergodox/keymaps/pvinis/Makefile b/keyboards/ergodox/keymaps/pvinis/Makefile new file mode 100644 index 0000000000..7ceb51ce4c --- /dev/null +++ b/keyboards/ergodox/keymaps/pvinis/Makefile @@ -0,0 +1,9 @@ +CONSOLE_ENABLE = no # for debugging + +SLEEP_LED_ENABLE = no # no led blinking while sleeping +NKRO_ENABLE = yes # disable for windows +TAP_DANCE_ENABLE = yes # tap-tap-tap + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/pvinis/keymap.c b/keyboards/ergodox/keymaps/pvinis/keymap.c new file mode 100644 index 0000000000..fce78772a0 --- /dev/null +++ b/keyboards/ergodox/keymaps/pvinis/keymap.c @@ -0,0 +1,429 @@ +// pvinis' ergodox keymap + +#include "ergodox.h" +#include "mousekey.h" + +// easier name for left ctrl-alt-gui +#define ALLM(kc) LCAG(kc) + +// layers +enum { + BASE = 0, + BEGIN, + QWERTY, + CARPALX, + SYSCTL, +}; + +// extra keys +enum { + NONE = 0, + + // mouse + MS_UL, // up left + MS_UR, // up right + MS_DL, // down left + MS_DR, // down right + + // tap dance + TD_FLSH, // flash keyboard +}; + +// application selection +// this is sending ctrl-alt-gui-, and this is picked up by hammerspoon +#define AP_SLCK ALLM(KC_S) +#define AP_XCOD ALLM(KC_X) + +// keymaps +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* BASE + * the base of the keyboard. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |4x FLASH| | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |BEGIN |QWERTY| |SYSCTL| | + * ,------|------|------| |------+--------+------. + * | | |CARPAL| |Slack | | | + * |Backsp|LShift|------| |------| Enter |Space | + * | | |SYSCTL| |Xcode | | | + * `--------------------' `----------------------' + */ +[BASE] = KEYMAP( + TD(TD_FLSH) ,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 ,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 + + ,TG(BEGIN) ,TG(QWERTY) + ,TG(CARPALX) + ,KC_BSPC ,KC_LSFT ,TG(SYSCTL) + + ,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 ,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 + + ,TG(SYSCTL) ,KC_NO + ,AP_SLCK + ,AP_XCOD ,KC_ENT ,KC_SPC +), + +/* BEGIN + * a beginner's keymap i currently use. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | + * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | ` | Cmd | | Cmd | | | | | ' | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `----------------------' + */ +[BEGIN] = KEYMAP( + KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 +,KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC +,CTL_T(KC_ESC) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_LPRN +,KC_TRNS ,KC_GRV ,KC_LGUI ,KC_LEFT ,KC_RIGHT + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_EQL + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT + ,KC_RPRN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT + ,KC_UP ,KC_DOWN ,KC_TRNS ,KC_QUOT ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS +), + +/* QWERTY + * the default qwerty keymap. not really used, but i'll keep it here for now. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Q | W | E | R | T | | | | Y | U | I | O | P | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | A | S | D | F | G |------| |------| H | J | K | L | ; | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Z | X | C | V | B | | | | N | M | , | . | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `----------------------' + */ +[QWERTY] = KEYMAP( + KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS +,KC_TRNS ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_TRNS +,KC_TRNS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS + ,KC_TRNS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_TRNS + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_TRNS + ,KC_TRNS ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS +), + +/* CARPALX + * the keymap i would like to transition to. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | | | RIGHT| 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Q | G | M | L | W | | | L1 | Y | F | U | B | ; | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | D | S | T | N | R |------| |------| I | A | E | O | H | | + * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------| + * | | Z | X | C | V | J | | | | K | P | , | . | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Up | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[CARPALX] = KEYMAP( + KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS +,KC_TRNS ,KC_Q ,KC_G ,KC_M ,KC_L ,KC_W ,KC_TRNS +,KC_TRNS ,KC_D ,KC_S ,KC_T ,KC_N ,KC_R +,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_J ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS + ,KC_TRNS ,KC_Y ,KC_F ,KC_U ,KC_B ,KC_SCLN ,KC_TRNS + ,KC_I ,KC_A ,KC_E ,KC_O ,KC_H ,KC_TRNS + ,KC_TRNS ,KC_K ,KC_P ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS +), + + +/* SYSCTL + * a keymap to control my system. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | Mute |VolDn |VolUp | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | |MsUpL | MsUp |MsUpR | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| |MsLeft| MsDn |MsRght| | Lock | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | |MsDnL | MsDn | | | Sleep | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | Power| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | |MidClk| + * ,------|------|------| |------+------+------. + * | | | | | |Left |Right | + * | | |------| |------| Click| Click| + * | | | | | | | | + * `--------------------' `--------------------' + */ +[SYSCTL] = KEYMAP( + 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_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 ,KC_NO ,KC_NO + + ,KC_NO ,KC_NO + ,KC_NO + ,KC_NO ,KC_NO ,KC_NO + + /*,KC_POP*/,KC_NO ,KC_NO ,KC_NO ,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_NO + /*,KC_PTRN*/,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LCTL(LSFT(KC_PWR)) + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_SLEP + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_PWR + + ,KC_NO ,KC_NO + ,KC_NO + ,KC_NO ,KC_NO ,KC_NO +), + +/* TEMPLATE + * keymap template with transparent and non-transparent keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `----------------------' + */ +/* +[TEMPLATE] = KEYMAP( + KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS +), +[TEMPLATE] = KEYMAP( + 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 ,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 ,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 ,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 + ,KC_NO + ,KC_NO ,KC_NO ,KC_NO +), +*/ +}; + +// keyboard initialization +void matrix_init_user() { + ergodox_led_all_on(); + for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { + ergodox_led_all_set(i); + _delay_ms(5); + } + _delay_ms(1000); + for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { + ergodox_led_all_set(i); + _delay_ms(10); + } + ergodox_led_all_off(); +} + +// extra keys +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + + // mouse + case MS_UL: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_LEFT); + } + break; + case MS_UR: + if (record->event.pressed) { + mousekey_on(KC_MS_UP); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_UP); + mousekey_off(KC_MS_RIGHT); + } + break; + case MS_DL: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_LEFT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_LEFT); + } + break; + case MS_DR: + if (record->event.pressed) { + mousekey_on(KC_MS_DOWN); + mousekey_on(KC_MS_RIGHT); + } else { + mousekey_off(KC_MS_DOWN); + mousekey_off(KC_MS_RIGHT); + } + break; + } + return MACRO_NONE; +} + +// tap dances + +// flash keyboard on 4x tap, with leds +void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) { + switch (state->count) { + case 1: + ergodox_right_led_3_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_1_on(); + break; + case 4: + ergodox_right_led_3_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_1_off(); + break; + } +} + +void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 4) { + reset_keyboard(); + reset_tap_dance(state); + } +} + +void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) { + ergodox_right_led_1_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_3_off(); +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED( flash_each_tap, flash_dance_finished, flash_dance_reset ), +}; -- cgit v1.2.3 From bcc0fa5c81e2a1725379c86b095bd627fb89d29d Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Thu, 22 Sep 2016 11:12:27 +0200 Subject: add messenger --- keyboards/ergodox/keymaps/pvinis/keymap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/pvinis/keymap.c b/keyboards/ergodox/keymaps/pvinis/keymap.c index fce78772a0..8e16114543 100644 --- a/keyboards/ergodox/keymaps/pvinis/keymap.c +++ b/keyboards/ergodox/keymaps/pvinis/keymap.c @@ -33,6 +33,7 @@ enum { // this is sending ctrl-alt-gui-, and this is picked up by hammerspoon #define AP_SLCK ALLM(KC_S) #define AP_XCOD ALLM(KC_X) +#define AP_MSGR ALLM(KC_M) // keymaps const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -55,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | |CARPAL| |Slack | | | * |Backsp|LShift|------| |------| Enter |Space | - * | | |SYSCTL| |Xcode | | | + * | | |SYSCTL| |Msngr | | | * `--------------------' `----------------------' */ [BASE] = KEYMAP( @@ -77,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,TG(SYSCTL) ,KC_NO ,AP_SLCK - ,AP_XCOD ,KC_ENT ,KC_SPC + ,AP_MSGR ,KC_ENT ,KC_SPC ), /* BEGIN -- cgit v1.2.3 From 538cdda78ec2e79a965205d0df974dfa5855c68e Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Thu, 22 Sep 2016 11:38:17 +0200 Subject: use wait_ms instead of _delay_ms --- keyboards/ergodox/keymaps/pvinis/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/ergodox/keymaps/pvinis/keymap.c b/keyboards/ergodox/keymaps/pvinis/keymap.c index 8e16114543..df906201a8 100644 --- a/keyboards/ergodox/keymaps/pvinis/keymap.c +++ b/keyboards/ergodox/keymaps/pvinis/keymap.c @@ -331,12 +331,12 @@ void matrix_init_user() { ergodox_led_all_on(); for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { ergodox_led_all_set(i); - _delay_ms(5); + wait_ms(5); } - _delay_ms(1000); + wait_ms(1000); for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { ergodox_led_all_set(i); - _delay_ms(10); + wait_ms(10); } ergodox_led_all_off(); } @@ -402,9 +402,9 @@ void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) { break; case 4: ergodox_right_led_3_off(); - _delay_ms(50); + wait_ms(50); ergodox_right_led_2_off(); - _delay_ms(50); + wait_ms(50); ergodox_right_led_1_off(); break; } @@ -419,9 +419,9 @@ void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) { void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) { ergodox_right_led_1_off(); - _delay_ms(50); + wait_ms(50); ergodox_right_led_2_off(); - _delay_ms(50); + wait_ms(50); ergodox_right_led_3_off(); } -- cgit v1.2.3 From 0853227edecf256a398347fb292a9fda74f242cb Mon Sep 17 00:00:00 2001 From: Pavlos Vinieratos Date: Tue, 11 Oct 2016 10:32:34 +0200 Subject: add readme --- keyboards/ergodox/keymaps/pvinis/Changelog.md | 7 +++ keyboards/ergodox/keymaps/pvinis/Readme.md | 65 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 keyboards/ergodox/keymaps/pvinis/Changelog.md create mode 100644 keyboards/ergodox/keymaps/pvinis/Readme.md diff --git a/keyboards/ergodox/keymaps/pvinis/Changelog.md b/keyboards/ergodox/keymaps/pvinis/Changelog.md new file mode 100644 index 0000000000..e5816200b8 --- /dev/null +++ b/keyboards/ergodox/keymaps/pvinis/Changelog.md @@ -0,0 +1,7 @@ +## v0.3 + +*2016-10-11* + +### Starting point + +* The starting point of this keymap. A beginner layout, and a couple placeholders. diff --git a/keyboards/ergodox/keymaps/pvinis/Readme.md b/keyboards/ergodox/keymaps/pvinis/Readme.md new file mode 100644 index 0000000000..2a4a0c8f3d --- /dev/null +++ b/keyboards/ergodox/keymaps/pvinis/Readme.md @@ -0,0 +1,65 @@ +pvinis' keymap +============== + +This is a getting-used-to keymap for the [ErgoDox EZ][ez]. It's very much a work in progress. + +[ez]: https://ergodox-ez.com/ + +## Table of Contents + +* [Todo](#todo) +* [Layouts](#layouts) + - [Base layer](#base-layer) + - [Beginner layer](#beginner-layer) + - [QWERTY layer](#qwerty-layer) + - [CARPALX layer](#carpalx-layer) + - [System Control layer](#system-control-layer) + - [Template layers](#template-layers) +* [Building](#building) + +# Todo + +- [ ] Generate images from keymap +- [ ] Implement algernon's heatmap +- [ ] Implement `KC_POP` + +# Layouts + +## Base layer + +This is the base layer that contains the common buttons of all keymaps. Right now, it has the top left button as a `flash` button when it's tapped 4 times, and the two thumb islands. The islands contain the `space` and `enter` keys on the right, the `backspace` and `shift` on the left, and all the 1x1 keys are just layer switches. +Every time I connect the keyboard, I press the `BEGIN` layer switch, and then start typing. +Recently, I added a few application "shortcuts", that basically call `ctrl`+`alt`+`cmd`+``, and `` is `S` for Slack, `X` for Xcode, `M` for Messenger. Using [Hammerspoon][hammerspoon], I show/hide the application. + +[hammerspoon]: http://www.hammerspoon.org/ + +## Beginner layer + +This is a basic keymap I use right now until I'm comfortable typing on the Ergodox. Currently uses a QWERTY layout, and the `([{}])` on the middle keys. Not a perfect layout, and its going to go away at some point, but for now thats my daily driver. + +## QWERTY layer + +This is basically the same as the `BEGIN` layer, but it might go away. I'm not using it, but I should have a QWERTY layout on the keyboard, in case someone else wants to try it out, or if I completely forget how keyboards work! At some point, this and the `BEGIN` layer will become one. + +## CARPALX layer + +This is here as a placeholder. I want to transition to [Carpalx QGMLWY][carpalx] or [White][white] at some point. They both look very interesting and more comfortable to type on, but after I'm confident with typing on the Ergodox. + +[carpalx]: http://mkweb.bcgsc.ca/carpalx/?full_optimization +[white]: https://github.com/mw8/white_keyboard_layout + +## System Control layer + +This one is a layer that, in time, will have controls like mouse movement, volume up/down, mute, sleep, restart, shutdown, etc. + +## Template layers + +I have two commented out layers that are just templates, so I can easily create a new layer. + +# Building + +``` +$ git clone https://github.com/jackhumbert/qmk_firmware.git +$ cd qmk_firmware/keyboards/ergodox/keymaps/pvinis +$ make +``` -- cgit v1.2.3 From 99ca59baf8d508f3221df5dd89158241925aca14 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Wed, 12 Oct 2016 12:03:54 -0400 Subject: I keep mis-using UPPER|LOWER/SLASH, and getting RESET. With RESET shifted to the UPPER+LOWER layer, it is now time to change that key to Alt-Slash, which, in Emacs, does automatic word completion --- keyboards/planck/keymaps/cbbrowne/keymap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 7f1601af75..4742ca5c06 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -94,6 +94,7 @@ enum macro_id { #define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT) #define ALTRIGHT MT(MOD_LALT, KC_RGHT) #define MVERSION M(M_VERSION) +#define ALTSLASH LALT(KC_SLSH) /* Note that Planck has dimensions 4 rows x 12 columns */ @@ -109,13 +110,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH,_______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_LOWER] = { /* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, RESET, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH, _______}, {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KEYPAD] = { /* Key Pad */ -- cgit v1.2.3 From e27a754b70434de88a37c4a572e4ca5f7730ff58 Mon Sep 17 00:00:00 2001 From: Jack & Erez Date: Wed, 12 Oct 2016 22:18:27 -0400 Subject: [Jack & Erez] Simplifies and documents TO --- keyboards/ergodox/keymaps/dave/keymap.c | 12 ++++++------ quantum/keymap.h | 5 ++++- readme.md | 2 ++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/keyboards/ergodox/keymaps/dave/keymap.c b/keyboards/ergodox/keymaps/dave/keymap.c index 32c70097b0..23c4e04906 100644 --- a/keyboards/ergodox/keymaps/dave/keymap.c +++ b/keyboards/ergodox/keymaps/dave/keymap.c @@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H, CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT, KC_PSCREEN, KC_PSCREEN, - TO(PROG, ON_PRESS), + TO(PROG), KC_SPC, MO(NAVI), KC_LGUI, // right hand KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_RALT,KC_LBRC,KC_RBRC,KC_NO, CTL_T(KC_QUOT), MT(0x5, KC_NO), MT(0x5, KC_NO), - TO(PROG, ON_PRESS), + TO(PROG), KC_RGUI, MO(PROG), KC_SPC ), @@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, - TO(NAVI, ON_PRESS), + TO(NAVI), KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL, @@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS, KC_TRNS, KC_TRNS, - TO(NAVI, ON_PRESS), + TO(NAVI), KC_TRNS, KC_TRNS, KC_TRNS ), @@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, - TO(BASE, ON_PRESS), + TO(BASE), KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, @@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - TO(BASE, ON_PRESS), + TO(BASE), KC_TRNS, KC_TRNS, KC_TRNS ), }; diff --git a/quantum/keymap.h b/quantum/keymap.h index 4b2192cb2e..85c090972d 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -296,7 +296,10 @@ enum quantum_keycodes { // ON_PRESS = 1 // ON_RELEASE = 2 // Unless you have a good reason not to do so, prefer ON_PRESS (1) as your default. -#define TO(layer, when) (layer | QK_TO | (when << 0x4)) +// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own +// keycode modeled after the old version, kept below for this. +/* #define TO(layer, when) (layer | QK_TO | (when << 0x4)) */ +#define TO(layer) (layer | QK_TO | (ON_PRESS << 0x4)) // Momentary switch layer - 256 layer max #define MO(layer) (layer | QK_MOMENTARY) diff --git a/readme.md b/readme.md index f20ab41b16..80f0a3ab27 100644 --- a/readme.md +++ b/readme.md @@ -379,6 +379,8 @@ Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - `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. +`TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed). + ### Fun with modifier keys -- cgit v1.2.3 From b73adf0dea567407bd5e6bd7921b607529a2aa4a Mon Sep 17 00:00:00 2001 From: Daniel Svensson Date: Sun, 29 May 2016 02:48:56 +0200 Subject: Support the Pegasus Hoof controller. Replacement controller for Filco Majestouch TKL keyboards. matrix.c ported from: https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard More details: http://bathroomepiphanies.com/controllers/ --- keyboards/pegasushoof/Makefile | 3 + keyboards/pegasushoof/README.md | 24 +++ keyboards/pegasushoof/config.h | 46 ++++++ keyboards/pegasushoof/keymaps/blowrak/Makefile | 22 +++ keyboards/pegasushoof/keymaps/blowrak/keymap.c | 112 ++++++++++++++ keyboards/pegasushoof/keymaps/default/Makefile | 22 +++ keyboards/pegasushoof/keymaps/default/keymap.c | 60 ++++++++ keyboards/pegasushoof/matrix.c | 204 +++++++++++++++++++++++++ keyboards/pegasushoof/pegasushoof.c | 51 +++++++ keyboards/pegasushoof/pegasushoof.h | 51 +++++++ keyboards/pegasushoof/rules.mk | 67 ++++++++ 11 files changed, 662 insertions(+) create mode 100644 keyboards/pegasushoof/Makefile create mode 100644 keyboards/pegasushoof/README.md create mode 100644 keyboards/pegasushoof/config.h create mode 100644 keyboards/pegasushoof/keymaps/blowrak/Makefile create mode 100644 keyboards/pegasushoof/keymaps/blowrak/keymap.c create mode 100644 keyboards/pegasushoof/keymaps/default/Makefile create mode 100644 keyboards/pegasushoof/keymaps/default/keymap.c create mode 100644 keyboards/pegasushoof/matrix.c create mode 100644 keyboards/pegasushoof/pegasushoof.c create mode 100644 keyboards/pegasushoof/pegasushoof.h create mode 100644 keyboards/pegasushoof/rules.mk diff --git a/keyboards/pegasushoof/Makefile b/keyboards/pegasushoof/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/pegasushoof/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/pegasushoof/README.md b/keyboards/pegasushoof/README.md new file mode 100644 index 0000000000..074222c714 --- /dev/null +++ b/keyboards/pegasushoof/README.md @@ -0,0 +1,24 @@ +pegasushoof keyboard firmware +============================= + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent README.md](/README.md). + +## Building + +Download or clone the whole firmware and navigate to the `keyboard/pegasushoof` folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your `.hex` file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build all keymaps, simply run `make`, the `.hex` files will end up in the top directory. + +### Specific Keymap +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` in the `keymaps` folder, 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 enter the keymap directory and type `make`: +``` +$ cd keymaps/default +$ make +``` diff --git a/keyboards/pegasushoof/config.h b/keyboards/pegasushoof/config.h new file mode 100644 index 0000000000..0dbec26e46 --- /dev/null +++ b/keyboards/pegasushoof/config.h @@ -0,0 +1,46 @@ +/* +Copyright 2016 Daniel Svensson + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6050 +#define DEVICE_VER 0x0104 +#define MANUFACTURER Filco +#define PRODUCT Majestouch TKL \\w The Pegasus Hoof +#define DESCRIPTION QMK firmware for Majestouch TKL + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 18 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#endif diff --git a/keyboards/pegasushoof/keymaps/blowrak/Makefile b/keyboards/pegasushoof/keymaps/blowrak/Makefile new file mode 100644 index 0000000000..fec0d2d977 --- /dev/null +++ b/keyboards/pegasushoof/keymaps/blowrak/Makefile @@ -0,0 +1,22 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42 +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/pegasushoof/keymaps/blowrak/keymap.c new file mode 100644 index 0000000000..6faf4db6fa --- /dev/null +++ b/keyboards/pegasushoof/keymaps/blowrak/keymap.c @@ -0,0 +1,112 @@ +/* +Copyright 2016 Daniel Svensson + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "pegasushoof.h" + +#define _______ KC_TRNS + +/* Swedish keys */ +#define SE_HALF KC_GRV +#define SE_PLUS KC_MINS +#define SE_ACUT KC_EQL +#define SE_AO KC_LBRC +#define SE_CIRC KC_RBRC +#define SE_QUOT KC_BSLS +#define SE_OE KC_SCLN +#define SE_AE KC_QUOT +#define SE_MINS KC_SLSH +#define SE_LTGT KC_NUBS +#define SE_LCBR RALT(KC_7) +#define SE_LBRC RALT(KC_8) +#define SE_RBRC RALT(KC_9) +#define SE_RCBR RALT(KC_0) +#define SE_PIPE RALT(SE_LTGT) +#define SE_BSLS RALT(SE_PLUS) + +#define KM_BLOWRAK 0 +#define KM_QWERTY 1 +#define KM_MEDIA 2 +#define KM_HAXHAX 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */ + [KM_BLOWRAK] = KEYMAP( \ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \ + KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \ + KC_LCTRL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_H, KC_D, KC_T, KC_N, KC_S, SE_MINS, KC_ENT, \ + KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \ + KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT), + /* Layer 1: Standard ISO layer */ + [KM_QWERTY] = KEYMAP( \ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \ + KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_OE, SE_AE, KC_ENT, \ + KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \ + KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT), + /* Layer 2: Media layer */ + [KM_MEDIA] = KEYMAP( \ + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \ + _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT), + /* Layer 3: Programming layer */ + [KM_HAXHAX] = KEYMAP( \ + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + _______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \ + _______,SE_LBRC,SE_BSLS,SE_RBRC,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \ + _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA), + [1] = ACTION_LAYER_TOGGLE(KM_QWERTY) +}; + +void matrix_scan_user(void) +{ + uint8_t layer = biton32(layer_state); + switch (layer) { + case KM_BLOWRAK: + ph_caps_led_on(); + ph_sclk_led_off(); + break; + case KM_QWERTY: + ph_sclk_led_on(); + ph_caps_led_off(); + break; + } +} + +/* Mixes in KM_HAXHAX via RALT modifier without shadowing the RALT key combinations. */ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint8_t modifiers = get_mods(); + if (modifiers & MOD_BIT(KC_RALT) && record->event.pressed) { + uint16_t kc = keymap_key_to_keycode(KM_HAXHAX, record->event.key); + if (kc != KC_TRNS) { + register_code(kc); + unregister_code(kc); + return false; + } + } + return true; +} diff --git a/keyboards/pegasushoof/keymaps/default/Makefile b/keyboards/pegasushoof/keymaps/default/Makefile new file mode 100644 index 0000000000..fec0d2d977 --- /dev/null +++ b/keyboards/pegasushoof/keymaps/default/Makefile @@ -0,0 +1,22 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42 +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/pegasushoof/keymaps/default/keymap.c b/keyboards/pegasushoof/keymaps/default/keymap.c new file mode 100644 index 0000000000..aa006b23a4 --- /dev/null +++ b/keyboards/pegasushoof/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +/* +Copyright 2016 Daniel Svensson + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "pegasushoof.h" + +#define _______ KC_TRNS + +#define KM_QWERTY 0 +#define KM_MEDIA 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Standard ISO layer */ + [KM_QWERTY] = KEYMAP( \ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ + KC_CLCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN0, KC_LEFT,KC_DOWN,KC_RGHT), + /* Layer 1: Function layer */ + [KM_MEDIA] = KEYMAP( \ + _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \ + _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT) +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA) +}; + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + ph_caps_led_on(); + } else { + ph_caps_led_off(); + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + ph_sclk_led_on(); + } else { + ph_sclk_led_off(); + } +} diff --git a/keyboards/pegasushoof/matrix.c b/keyboards/pegasushoof/matrix.c new file mode 100644 index 0000000000..d2a74b8d72 --- /dev/null +++ b/keyboards/pegasushoof/matrix.c @@ -0,0 +1,204 @@ +/* +Copyright 2014 Ralf Schmitt +Copyright 2016 Daniel Svensson + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + +static uint8_t debouncing = DEBOUNCING_DELAY; +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void select_row(uint8_t col); + +inline uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + /* Column output pins */ + DDRD |= 0b01111011; + /* Row input pins */ + DDRC &= ~0b10000000; + DDRB &= ~0b01111111; + PORTC |= 0b10000000; + PORTB |= 0b01111111; + + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) +{ + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_row(col); + wait_us(30); + matrix_row_t rows = read_cols(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1< + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "pegasushoof.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +__attribute__ ((weak)) +bool process_action_user(keyrecord_t *record) { + return true; +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { +} + +void matrix_init_kb(void) { + matrix_init_user(); +} + +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); +} + +void led_set_kb(uint8_t usb_led) { + led_set_user(usb_led); +} diff --git a/keyboards/pegasushoof/pegasushoof.h b/keyboards/pegasushoof/pegasushoof.h new file mode 100644 index 0000000000..d031e3ed25 --- /dev/null +++ b/keyboards/pegasushoof/pegasushoof.h @@ -0,0 +1,51 @@ +/* +Copyright 2016 Daniel Svensson + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef PEGASUSHOOF_H +#define PEGASUSHOOF_H + +#include "matrix.h" +#include "quantum.h" + +#define ___ KC_NO + +#define KEYMAP( \ + KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \ + KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \ + KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \ + KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \ + KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \ + KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \ + ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \ + /* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , ___ , ___ , ___ , KJ0 , KK0 , ___ , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \ + /* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \ + /* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \ + /* 3 */ { KA3 , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \ + /* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \ + /* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \ + /* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \ + /* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \ + } + +inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); } +inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); } + +inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); } +inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); } + + +#endif diff --git a/keyboards/pegasushoof/rules.mk b/keyboards/pegasushoof/rules.mk new file mode 100644 index 0000000000..b3eeebfdbf --- /dev/null +++ b/keyboards/pegasushoof/rules.mk @@ -0,0 +1,67 @@ +# MCU name +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + + +CUSTOM_MATRIX ?= yes +SRC = matrix.c -- cgit v1.2.3 From 2a918718f183ff006c5eff42ed10f75264761ffd Mon Sep 17 00:00:00 2001 From: Joshua T Date: Sat, 15 Oct 2016 18:40:26 -0500 Subject: Added VS Code dir to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 153fea093c..1abaeb2177 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ CMakeLists.txt .browse.VC.db* *.stackdump util/Win_Check_Output.txt +.vscode \ No newline at end of file -- cgit v1.2.3 From f9d8cf35f614eb82351b3e5125472ad8c77b1ffa Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 16 Oct 2016 08:01:50 +0200 Subject: ergodox: Update algernon's keymap to v1.9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Overall changes =============== * `F12` was replaced by an `Fx` key, that activate the **Media** layer as a one-shot layer, and also `Alt` as a one-shot modifier. Base layer changes ================== * The `Media Stop` key is now a tap-dance key, and resets the device for programming on the fourth tap. Miscellaneous ============= * `π` can now be entered with UCIS. * `🐁` can now be entered with UCIS. Tools ===== * The `tools/layer-notify` tool was removed, it was an example, which I don't use. `tools/hid-commands` -------------------- * Now looks at the `DISABLE_APPSEL_START` environment value, and does not display an AppSel notification if it is non-empty. * Will attempt to re-program the keyboard when receiving a `reflash` command. * No longer tries to select Emacs 24 on `APPSEL_EMACS`, rather, it goes for any Emacs. * The `APPSEL_MUSIC` command now includes Kodi in the list too, as the last choice. Signed-off-by: Gergely Nagy --- keyboards/ergodox/keymaps/algernon/NEWS.md | 62 +++++-- .../keymaps/algernon/images/adore-layer.png | Bin 97089 -> 97357 bytes .../ergodox/keymaps/algernon/images/base-layer.png | Bin 102142 -> 102318 bytes keyboards/ergodox/keymaps/algernon/keymap.c | 192 ++++++++++++++------- keyboards/ergodox/keymaps/algernon/readme.md | 8 +- .../algernon/tools/heatmap-layout.ADORE.json | 2 +- .../algernon/tools/heatmap-layout.Dvorak.json | 2 +- .../ergodox/keymaps/algernon/tools/hid-commands | 14 +- .../ergodox/keymaps/algernon/tools/layer-notify | 12 -- 9 files changed, 189 insertions(+), 103 deletions(-) delete mode 100755 keyboards/ergodox/keymaps/algernon/tools/layer-notify diff --git a/keyboards/ergodox/keymaps/algernon/NEWS.md b/keyboards/ergodox/keymaps/algernon/NEWS.md index 6b95c1ef43..e11998998c 100644 --- a/keyboards/ergodox/keymaps/algernon/NEWS.md +++ b/keyboards/ergodox/keymaps/algernon/NEWS.md @@ -1,3 +1,33 @@ + + +## v1.9 + +*2016-10-16* + +### Overall changes + +* `F12` was replaced by an `Fx` key, that activate the **Media** layer as a one-shot layer, and also `Alt` as a one-shot modifier. + +### Base layer changes + +* The `Media Stop` key is now a tap-dance key, and resets the device for programming on the fourth tap. + +### Miscellaneous + +* `π` can now be entered with UCIS. +* `🐁` can now be entered with UCIS. + +### Tools + +* The `tools/layer-notify` tool was removed, it was an example, which I don't use. + +#### `tools/hid-commands` + +* Now looks at the `DISABLE_APPSEL_START` environment value, and does not display an AppSel notification if it is non-empty. +* Will attempt to re-program the keyboard when receiving a `reflash` command. +* No longer tries to select Emacs 24 on `APPSEL_EMACS`, rather, it goes for any Emacs. +* The `APPSEL_MUSIC` command now includes Kodi in the list too, as the last choice. + ## v1.8 *2016-10-03* @@ -13,7 +43,7 @@ ### Miscellaneous -* Fixed the [Steno](#steno-layer) toggle key. +* Fixed the **Steno** toggle key. ## v1.7 @@ -21,9 +51,9 @@ ### Overall changes -* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers. +* The number row has been completely rearranged on both the **Base** and the **ADORE** layers. * The number/function key behavior was changed: function keys are now on the **Media**. -* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers. +* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the **Base** and **ADORE** layers. * The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped. * A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it. @@ -59,13 +89,13 @@ ### Base layer changes * The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`. -* The `:;` and `-_` keys are now available on the base layer, on their [ADORE](#adore-layer) location, too, just below `[{(`/`]})`. +* The `:;` and `-_` keys are now available on the base layer, on their **ADORE** location, too, just below `[{(`/`]})`. * The `Apps` key has been replaced by `F12`. * The `-`/`_` is no longer a tap-dance key. ### ADORE layer changes -* Adjustments were made to the [ADORE](#adore-layer) layer, to separate some inconvenient combinations. +* Adjustments were made to the **ADORE** layer, to separate some inconvenient combinations. ### Miscellaneous changes @@ -84,9 +114,9 @@ * The **1HAND** layer has been removed. * A `Delete` key is now available on the right thumb cluster. -* The [ADORE](#adore-layer) layer received a major update, see the layout image above. -* It is now possible to enable automatic logging for the [ADORE](#adore-layer) layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. -* The `~` key and the `Media Next/Prev` key have been swapped on the [base layer](#base-layer). +* The **ADORE** layer received a major update, see the layout image above. +* It is now possible to enable automatic logging for the **ADORE** layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default. +* The `~` key and the `Media Next/Prev` key have been swapped on the **Base** layer. * On the **ARROW** layer, `Backspace` has been replaced by `Enter`. * There is some experimental support for entering Unicode symbols. @@ -104,33 +134,33 @@ *2016-07-06* -* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs. -* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are. -* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now. +* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a *heatmap* out of the logs. +* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the **Base** layer for an image that shows where arrows are. +* The **experimental** layer has been redone, and is now called **ADORE**, and as such, can be enabled by `LEAD a` now. * Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot. ## v1.2 *2016-06-22* -* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows). +* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with certain operating systems. * The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted. -* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers. +* The `=` and `\` keys were swapped, `=` moved to the home row, on both the **Base** and the **experimental** layers. * The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access. * The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer. * `LEAD v` types the firmware version, and the keymap version. * On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped. -* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers. +* The **Steno** layer gained a few more `#` and `*` keys, to make it easier on my fingers. ## v1.1 *2016-06-14* * The keyboard starts in NKRO mode, bootmagic and other things are disabled. -* A [Steno](#steno-layer) layer was added, to be used with Plover. +* A **Steno** layer was added, to be used with Plover. * An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. * `LEAD y` types `\o/`. -* Some keys on the [Base](#base-layer) layer have been moved around: +* Some keys on the **Base** layer have been moved around: - `?` moved to the left pinky, left of `Q`. - `=` shifted one row down, but `F11` stayed where it was. - `-` on the left half was replaced by `Tab`. diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png index 5f39010bb6..f6c64ca645 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png index 2a981a4706..5bd0611f65 100644 Binary files a/keyboards/ergodox/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c index 48d63fb0bd..bad2403378 100644 --- a/keyboards/ergodox/keymaps/algernon/keymap.c +++ b/keyboards/ergodox/keymaps/algernon/keymap.c @@ -64,6 +64,9 @@ enum { A_8, A_9, A_0, + + // Fx + Fx, }; /* Fn keys */ @@ -86,6 +89,7 @@ enum { CT_RBP, CT_TMUX, CT_TPS, + CT_SR, }; /* States & timers */ @@ -103,6 +107,7 @@ bool log_enable = false; #endif bool time_travel = false; +bool skip_leds = false; static uint8_t is_adore = 0; @@ -113,13 +118,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | F12 | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | + * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------| - * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop | + * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop/Reset| * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | | | | | : | | - | | | | | * `-----------------------------------' `-----------------------------------' @@ -144,10 +149,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_F12 ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) + ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL - ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,TD(CT_SR) ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,OSL(NMDIA),KC_DEL @@ -158,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Adore layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | F12 | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | + * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | \ | X | W | C | H | F | ( | | ) | M | G | L | P | / | `~ | * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| @@ -189,7 +194,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_BSPC,F(F_SFT),KC_ESC // right hand - ,KC_F12 ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) + ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR) ,TD(CT_RBP),KC_M ,KC_G ,KC_L ,KC_P ,KC_SLSH ,KC_GRV ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_Y ,KC_J ,KC_NO @@ -342,7 +347,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 5: Navigation & Media layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F9 | F7 | F5 | F3 | F1 | | |ScrLCK| F10 | F2 | F4 | F6 | F8 | | + * | | F9 | F7 | F5 | F3 | F1 |ScrLCK| | | F10 | F2 | F4 | F6 | F8 | | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | | | | | | | | | | | | | | | | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| @@ -362,7 +367,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [NMDIA] = KEYMAP( // left hand - KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,KC_NO + KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,LGUI(KC_L) ,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 ,KC_NO ,KC_NO @@ -372,7 +377,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_NO ,KC_NO ,KC_TRNS // right hand - ,LGUI(KC_L),KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,KC_NO + ,KC_TRNS ,KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,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 ,KC_NO ,KC_NO ,KC_NO @@ -611,6 +616,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) toggle_steno(record->event.pressed); break; + /* Fx */ + case Fx: + if (record->event.pressed) { + set_oneshot_mods (MOD_LALT); + layer_on (NMDIA); + set_oneshot_layer (NMDIA, ONESHOT_START); + } else { + clear_oneshot_layer_state (ONESHOT_PRESSED); + } + break; + /* GUI & AppSel */ case A_GUI: if (record->event.pressed) { @@ -780,6 +796,56 @@ static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *u unregister_code(kc); } +static void +_td_sr_each (qk_tap_dance_state_t *state, void *user_data) { + skip_leds = true; + + switch (state->count) { + case 1: + ergodox_right_led_3_on (); + break; + case 2: + ergodox_right_led_2_on (); + break; + case 3: + ergodox_right_led_1_on (); + break; + case 4: + ergodox_right_led_3_off (); + wait_ms (50); + ergodox_right_led_2_off (); + wait_ms (50); + ergodox_right_led_1_off (); + break; + } +} + +static void +_td_sr_finished (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_MSTP); + } + if (state->count >= 4) { + uprintf("CMD:reflash\n"); + wait_ms (1000); + reset_keyboard (); + reset_tap_dance (state); + } +} + +static void +_td_sr_reset (qk_tap_dance_state_t *state, void *user_data) { + ergodox_right_led_1_off (); + wait_ms (50); + ergodox_right_led_2_off (); + wait_ms (50); + ergodox_right_led_3_off (); + + if (state->count == 1) { + unregister_code (KC_MSTP); + } +} + qk_tap_dance_action_t tap_dance_actions[] = { [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN) ,[CT_TA] = { @@ -790,77 +856,75 @@ qk_tap_dance_action_t tap_dance_actions[] = { ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN) ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished) ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select) + ,[CT_SR] = ACTION_TAP_DANCE_FN_ADVANCED (_td_sr_each, _td_sr_finished, _td_sr_reset) }; // Runs constantly in the background, in a loop. void matrix_scan_user(void) { - static uint32_t prev_layer_state; uint8_t layer = biton32(layer_state); bool is_arrow = false; - static char *layer_lookup[] = {"Dvorak", "ADORE", "Arrows", "AppSel", "Hungarian", "Nav/Media", "Plover"}; - - if (layer_state != prev_layer_state) { - prev_layer_state = layer_state; - if (layer_lookup[layer]) - uprintf("LAYER: %s\n", layer_lookup[layer]); - } - if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) unregister_code (KC_LGUI); - if (layer == HUN) { - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - } else if (layer == NMDIA) { - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - } else if (layer == PLVR) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - } else if (layer == ADORE) { - ergodox_right_led_1_on (); - ergodox_right_led_2_on (); - ergodox_right_led_3_on (); - - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + if (!skip_leds) { + if (layer == HUN) { + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + } else if (layer == NMDIA) { + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + } else if (layer == PLVR) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + } else if (layer == ADORE) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + } } if (layer_state & (1UL << ARRW)) { - ergodox_right_led_1_on (); - ergodox_right_led_3_on (); + if (!skip_leds) { + ergodox_right_led_1_on (); + ergodox_right_led_3_on (); + } is_arrow = true; } - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_1_set (LED_BRIGHTNESS_HI); - ergodox_right_led_1_on (); - } else { - ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow) - ergodox_right_led_1_off (); - } + if (!skip_leds) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_1_set (LED_BRIGHTNESS_HI); + ergodox_right_led_1_on (); + } else { + ergodox_right_led_1_set (LED_BRIGHTNESS_LO); + if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow) + ergodox_right_led_1_off (); + } - if (keyboard_report->mods & MOD_BIT(KC_LALT) || - ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_2_set (LED_BRIGHTNESS_HI); - ergodox_right_led_2_on (); - } else { - ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE) - ergodox_right_led_2_off (); - } + if (keyboard_report->mods & MOD_BIT(KC_LALT) || + ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); + ergodox_right_led_2_on (); + } else { + ergodox_right_led_2_set (LED_BRIGHTNESS_LO); + if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE) + ergodox_right_led_2_off (); + } - if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || - ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { - ergodox_right_led_3_set (LED_BRIGHTNESS_HI); - ergodox_right_led_3_on (); - } else { - ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow) - ergodox_right_led_3_off (); + if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || + ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { + ergodox_right_led_3_set (LED_BRIGHTNESS_HI); + ergodox_right_led_3_on (); + } else { + ergodox_right_led_3_set (LED_BRIGHTNESS_LO); + if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow) + ergodox_right_led_3_off (); + } } LEADER_DICTIONARY() { @@ -974,7 +1038,9 @@ const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE UCIS_SYM("snowman", 0x2603), UCIS_SYM("coffee", 0x2615), UCIS_SYM("heart", 0x2764), - UCIS_SYM("bolt", 0x26a1) + UCIS_SYM("bolt", 0x26a1), + UCIS_SYM("pi", 0x03c0), + UCIS_SYM("mouse", 0x1f401) ); bool process_record_user (uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md index 822ca36500..015bd7cd32 100644 --- a/keyboards/ergodox/keymaps/algernon/readme.md +++ b/keyboards/ergodox/keymaps/algernon/readme.md @@ -43,6 +43,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest * The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. * The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle. +* The **Fx** key is one-shot, and activates the **Media** layer, along with a one-shot `Alt`. * When holding the `Tab`/**Arrow** key, the arrow layer activates while the key is held. Tapping the key produces the normal, `Tab` key. Double-tapping it toggles the **Arrow** layer on until a third tap. * Tapping the `:` key once yields `:`, tapping it twice yields `;`. * Tapping the `[{(`/`)}]` keys once yields `[` (or `{` when shifted), tapping them twice yields `(`. @@ -93,12 +94,7 @@ Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers Once in the Unicode Symbol Input mode, one is able to type in symbol names, press `Enter` or `Space`, and get the Unicode symbol itself back. When in the mode, a capital `U` is printed first. Once the sequence is finished, all of it is erased by sending enough `Backspace` taps, and the firmware starts the OS-specific unicode input sequence. Then, it looks up the symbol name, and enters the associated code. If it is not found, it will just replay the pressed keycodes. -The currently supported symbols are: - -- `snowman`: ☃ -- `kiss`: 😙 -- `rofl`: 🤣 -- `poop`: 💩 +For the list of supported symbols, please see the source. This is an experimental feature, and may or may not work reliably. diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json index a34edcf87e..e09efecc46 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json @@ -65,7 +65,7 @@ "x": 4.5, "f": 3 }, - "F12", + "Fx", { "a": 4, "f": 3, diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json index 5b4ca06c30..1e53281c56 100644 --- a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json +++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json @@ -65,7 +65,7 @@ "x": 4.5, "f": 3 }, - "F12", + "Fx", { "a": 4, "f": 3, diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands index 2a6710be4a..a29d38f414 100755 --- a/keyboards/ergodox/keymaps/algernon/tools/hid-commands +++ b/keyboards/ergodox/keymaps/algernon/tools/hid-commands @@ -16,7 +16,7 @@ _cmd_appsel () { } cmd_appsel_music () { - wmctrl -x -a rhythmbox || wmctrl -x -a spotify || true + wmctrl -x -a rhythmbox || wmctrl -x -a spotify || wmctrl -x -a kodi || true xdotool key Escape } @@ -25,7 +25,7 @@ cmd_appsel_slack () { } cmd_appsel_emacs () { - _cmd_appsel emacs24 + _cmd_appsel emacs } cmd_appsel_term () { @@ -37,6 +37,10 @@ cmd_appsel_chrome () { } cmd_appsel_start () { + if [ ! -z "${DISABLE_APPSEL_START}" ]; then + return + fi + APPSEL_START=$(date +%s) if [ $APPSEL_START -lt $(expr $LAST_APPSEL_START + 10) ]; then return @@ -46,6 +50,10 @@ cmd_appsel_start () { -i /usr/share/icons/Adwaita/24x24/devices/video-display.png } +cmd_reflash () { + teensy_loader_cli -v -w ~/src/ext/qmk_firmware/algernon.hex --mcu atmega32u4 || true +} + cmd_help () { cat < Date: Sun, 16 Oct 2016 15:37:47 +0200 Subject: - Added HHKB like layout for KC60 pcb --- keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c | 73 +++++++++++++++++++++++++++ keyboards/kc60/keymaps/dbroqua_hhkb/readme.md | 9 ++++ 2 files changed, 82 insertions(+) create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c create mode 100644 keyboards/kc60/keymaps/dbroqua_hhkb/readme.md diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c new file mode 100644 index 0000000000..5d7c7f38a3 --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c @@ -0,0 +1,73 @@ +// 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 "kc60.h" + +#define _QWERTY 0 +#define _FN 1 + +// Fillers to make layering more clear +#define ______ KC_TRNS +#define XXXXXXX KC_NO + +// Func macro definitions. +#define S_LED FUNC(0) +#define S_LEDI FUNC(1) +#define S_LEDD FUNC(2) + +// Enable these functions using FUNC(n) macro. +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_BACKLIGHT_TOGGLE(), + [1] = ACTION_BACKLIGHT_INCREASE(), + [2] = ACTION_BACKLIGHT_DECREASE() + }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN | + * |-----------------------------------------------------------------------------------------+ + * | LGUI | LAlt | Space | RAlt | RGUI | + * `-----------------------------------------------------------------' + */ + [0] = KEYMAP( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FN), KC_RSFT, \ + ______, KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_RGUI, ______, ______ \ + ), + +/* Layer 1 + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | | Led | Led-| Led+| | | | | Psc | Slck| Paus| Up | | | + * |-----------------------------------------------------------------------------------------+ + * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| | + * |-----------------------------------------------------------------------------------------+ + * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | | + * |-----------------------------------------------------------------------------------------+ + * | | | | Stop | | + * `-----------------------------------------------------------------' + */ + [_FN] = KEYMAP( /* Layer 1 */ + ______, 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_INS, \ + ______, S_LED, S_LEDI, S_LEDD, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \ + ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, ______, \ + ______, ______, KC_MPRV, KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______, \ + ______, ______, ______, ______, KC_DEL, KC_MSTP, ______, ______, ______ \ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + return MACRO_NONE; +}; diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md new file mode 100644 index 0000000000..be99a3bc7e --- /dev/null +++ b/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md @@ -0,0 +1,9 @@ +# Dbroqua HHKB like Layout + +Like the HHKB but with a KC60 PCB :D. + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua_hhkb make dfu +``` \ No newline at end of file -- cgit v1.2.3 From 80ac73a21cd08663d015b1fd16f34c6713f875d6 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 16 Oct 2016 15:59:50 -0400 Subject: Update Makefile --- keyboards/jd40/Makefile | 73 +------------------------------------------------ 1 file changed, 1 insertion(+), 72 deletions(-) diff --git a/keyboards/jd40/Makefile b/keyboards/jd40/Makefile index 242748111c..57b2ef62e5 100644 --- a/keyboards/jd40/Makefile +++ b/keyboards/jd40/Makefile @@ -1,74 +1,3 @@ - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -# CONSOLE_ENABLE ?= yes # Console for debug(+400) -# COMMAND_ENABLE ?= yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key -# 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 -# UNICODE_ENABLE ?= YES # Unicode -# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow - -ifndef QUANTUM_DIR +ifndef MAKEFILE_INCLUDED include ../../Makefile endif - -- cgit v1.2.3 From 5f91fb413624781ac79db641549b9e08753c04b5 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 16 Oct 2016 16:03:33 -0400 Subject: working with power limit --- build_keyboard.mk | 6 ++ keyboards/ergodox/keymaps/jack/config.h | 2 +- keyboards/ergodox/keymaps/jack/keymap.c | 4 +- quantum/keymap.h | 4 + quantum/light_ws2812.c | 137 +++++++++++++++++++++++++++++++- quantum/light_ws2812.h | 7 ++ quantum/quantum.c | 3 + quantum/quantum.h | 4 + 8 files changed, 163 insertions(+), 4 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 03a69b1464..cd9f44c7bd 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -169,6 +169,12 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c endif +ifeq ($(strip $(PRINTING_ENABLE)), yes) + OPT_DEFS += -DPRINTING_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c + SRC += $(TMK_DIR)/protocol/serial_uart.c +endif + ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) OPT_DEFS += $(SERIAL_DEFS) diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h index 01ccfb3a2a..f0932084a0 100644 --- a/keyboards/ergodox/keymaps/jack/config.h +++ b/keyboards/ergodox/keymaps/jack/config.h @@ -6,7 +6,7 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D7 // #define RGBLIGHT_TIMER -#define RGBLED_NUM 20 // Number of LEDs +#define RGBLED_NUM 15 // Number of LEDs #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c index 1dd5a76187..fabd27a618 100644 --- a/keyboards/ergodox/keymaps/jack/keymap.c +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT, MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, RGB_TOG, RGB_HUI, - KC_PGUP, + RGB_MOD, KC_PGDN, KC_SPC,KC_SPC ), [SYMB] = KEYMAP( @@ -90,7 +90,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // Runs just one time when the keyboard initializes. void matrix_init_user(void) { - + }; // Runs constantly in the background, in a loop. diff --git a/quantum/keymap.h b/quantum/keymap.h index 98ddfd0c53..41aa116228 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -174,6 +174,10 @@ enum quantum_keycodes { // Right shift, close paren KC_RSPC, + // Printing + PRINT_ON, + PRINT_OFF, + // always leave at the end SAFE_RANGE }; diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index 401845e855..d38dac4c69 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -16,6 +16,122 @@ #include #include "debug.h" +#define RGBW_BB_TWI 1 + +#ifdef RGBW_BB_TWI + +// Port for the I2C +#define I2C_DDR DDRD +#define I2C_PIN PIND +#define I2C_PORT PORTD + +// Pins to be used in the bit banging +#define I2C_CLK 0 +#define I2C_DAT 1 + +#define I2C_DATA_HI()\ +I2C_DDR &= ~ (1 << I2C_DAT);\ +I2C_PORT |= (1 << I2C_DAT); +#define I2C_DATA_LO()\ +I2C_DDR |= (1 << I2C_DAT);\ +I2C_PORT &= ~ (1 << I2C_DAT); + +#define I2C_CLOCK_HI()\ +I2C_DDR &= ~ (1 << I2C_CLK);\ +I2C_PORT |= (1 << I2C_CLK); +#define I2C_CLOCK_LO()\ +I2C_DDR |= (1 << I2C_CLK);\ +I2C_PORT &= ~ (1 << I2C_CLK); + +#define I2C_DELAY 1 + +void I2C_WriteBit(unsigned char c) +{ + if (c > 0) + { + I2C_DATA_HI(); + } + else + { + I2C_DATA_LO(); + } + + I2C_CLOCK_HI(); + _delay_us(I2C_DELAY); + + I2C_CLOCK_LO(); + _delay_us(I2C_DELAY); + + if (c > 0) + { + I2C_DATA_LO(); + } + + _delay_us(I2C_DELAY); +} + +// Inits bitbanging port, must be called before using the functions below +// +void I2C_Init() +{ + I2C_PORT &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK)); + + I2C_CLOCK_HI(); + I2C_DATA_HI(); + + _delay_us(I2C_DELAY); +} + +// Send a START Condition +// +void I2C_Start() +{ + // set both to high at the same time + I2C_DDR &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK)); + _delay_us(I2C_DELAY); + + I2C_DATA_LO(); + _delay_us(I2C_DELAY); + + I2C_CLOCK_LO(); + _delay_us(I2C_DELAY); +} + +// Send a STOP Condition +// +void I2C_Stop() +{ + I2C_CLOCK_HI(); + _delay_us(I2C_DELAY); + + I2C_DATA_HI(); + _delay_us(I2C_DELAY); +} + +// write a byte to the I2C slave device +// +unsigned char I2C_Write(unsigned char c) +{ + for (char i = 0; i < 8; i++) + { + I2C_WriteBit(c & 128); + + c <<= 1; + } + + + I2C_WriteBit(0); + _delay_us(I2C_DELAY); + _delay_us(I2C_DELAY); + + // _delay_us(I2C_DELAY); + //return I2C_ReadBit(); + return 0; +} + + +#endif + // Setleds for standard RGB void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds) { @@ -41,6 +157,25 @@ void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF); ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF)); + + #ifdef RGBW_BB_TWI + cli(); + TWCR = 0; + I2C_Init(); + I2C_Start(); + I2C_Write(0x84); + uint16_t datlen = leds<<2; + uint8_t curbyte; + uint8_t * data = (uint8_t*)ledarray; + while (datlen--) { + curbyte=*data++; + I2C_Write(curbyte % 0x10); + } + I2C_Stop(); + sei(); + #endif + + _delay_us(80); } @@ -123,7 +258,7 @@ void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi) cli(); while (datlen--) { - curbyte=*data++; + curbyte=(*data++) % 0x10; asm volatile( " ldi %0,8 \n\t" diff --git a/quantum/light_ws2812.h b/quantum/light_ws2812.h index 54eef22d9e..576c3bc483 100755 --- a/quantum/light_ws2812.h +++ b/quantum/light_ws2812.h @@ -16,6 +16,13 @@ #include #include //#include "ws2812_config.h" +#include "i2cmaster.h" + +#define LIGHT_I2C 1 +#define LIGHT_I2C_ADDR 0x84 +#define LIGHT_I2C_ADDR_WRITE ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE ) +#define LIGHT_I2C_ADDR_READ ( (LIGHT_I2C_ADDR<<1) | I2C_READ ) + /* * Structure of the LED array diff --git a/quantum/quantum.c b/quantum/quantum.c index a16bd5443c..5fa5e66b32 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -128,6 +128,9 @@ bool process_record_quantum(keyrecord_t *record) { #endif #ifdef UCIS_ENABLE process_ucis(keycode, record) && + #endif + #ifdef PRINTING_ENABLE + process_printer(keycode, record) && #endif true)) { return false; diff --git a/quantum/quantum.h b/quantum/quantum.h index 0c60466495..06a2e049dc 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -59,6 +59,10 @@ extern uint32_t default_layer_state; #include "process_tap_dance.h" +#ifdef PRINTING_ENABLE + #include "process_printer.h" +#endif + #define SEND_STRING(str) send_string(PSTR(str)) void send_string(const char *str); -- cgit v1.2.3 From a889b899e2cf52b3b7807d8a7ad39f12e0761a10 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 16 Oct 2016 16:03:56 -0400 Subject: working with power limit --- keyboards/planck/keymaps/thermal_printer/Makefile | 26 ++ keyboards/planck/keymaps/thermal_printer/config.h | 23 ++ keyboards/planck/keymaps/thermal_printer/keymap.c | 314 +++++++++++++++++++++ keyboards/planck/keymaps/thermal_printer/readme.md | 2 + quantum/process_keycode/process_printer.c | 254 +++++++++++++++++ quantum/process_keycode/process_printer.h | 8 + quantum/process_keycode/process_printer_bb.c | 260 +++++++++++++++++ 7 files changed, 887 insertions(+) create mode 100644 keyboards/planck/keymaps/thermal_printer/Makefile create mode 100644 keyboards/planck/keymaps/thermal_printer/config.h create mode 100644 keyboards/planck/keymaps/thermal_printer/keymap.c create mode 100644 keyboards/planck/keymaps/thermal_printer/readme.md create mode 100644 quantum/process_keycode/process_printer.c create mode 100644 quantum/process_keycode/process_printer.h create mode 100644 quantum/process_keycode/process_printer_bb.c diff --git a/keyboards/planck/keymaps/thermal_printer/Makefile b/keyboards/planck/keymaps/thermal_printer/Makefile new file mode 100644 index 0000000000..3d1d11877f --- /dev/null +++ b/keyboards/planck/keymaps/thermal_printer/Makefile @@ -0,0 +1,26 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +PRINTING_ENABLE = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h new file mode 100644 index 0000000000..430b6493cf --- /dev/null +++ b/keyboards/planck/keymaps/thermal_printer/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +# define SERIAL_UART_BAUD 19200 +# define SERIAL_UART_DATA UDR1 +# define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1) +# define SERIAL_UART_RXD_VECT USART1_RX_vect +# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1)) +# define SERIAL_UART_INIT() do { \ + /* baud rate */ \ + UBRR1L = SERIAL_UART_UBRR; \ + /* baud rate */ \ + UBRR1H = SERIAL_UART_UBRR >> 8; \ + /* enable TX */ \ + UCSR1B = _BV(TXEN1); \ + /* 8-bit data */ \ + UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ + sei(); \ + } while(0) + + #endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/thermal_printer/keymap.c b/keyboards/planck/keymaps/thermal_printer/keymap.c new file mode 100644 index 0000000000..e880597319 --- /dev/null +++ b/keyboards/planck/keymaps/thermal_printer/keymap.c @@ -0,0 +1,314 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | Print|no prnt | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, PRINT_ON, PRINT_OFF, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/planck/keymaps/thermal_printer/readme.md b/keyboards/planck/keymaps/thermal_printer/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/thermal_printer/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c new file mode 100644 index 0000000000..2e11dd366c --- /dev/null +++ b/quantum/process_keycode/process_printer.c @@ -0,0 +1,254 @@ +#include "process_printer.h" +#include "action_util.h" + +bool printing_enabled = false; +uint8_t character_shift = 0; + +void enabled_printing() { + printing_enabled = true; + serial_init(); +} + +void disable_printing() { + printing_enabled = false; +} + +uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29}; + +// uint8_t keycode_to_ascii[0xFF][2]; + +// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F}; + +void print_char(char c) { + USB_Disable(); + serial_send(c); + USB_Init(); +} + +void print_box_string(uint8_t text[]) { + uint8_t len = strlen(text); + uint8_t out[len * 3 + 8]; + out[0] = 0xDA; + for (uint8_t i = 0; i < len; i++) { + out[i+1] = 0xC4; + } + out[len + 1] = 0xBF; + out[len + 2] = '\n'; + + out[len + 3] = 0xB3; + for (uint8_t i = 0; i < len; i++) { + out[len + 4 + i] = text[i]; + } + out[len * 2 + 4] = 0xB3; + out[len * 2 + 5] = '\n'; + + + out[len * 2 + 6] = 0xC0; + for (uint8_t i = 0; i < len; i++) { + out[len * 2 + 7 + i] = 0xC4; + } + out[len * 3 + 7] = 0xD9; + out[len * 3 + 8] = '\n'; + + print_string(out); +} + +void print_string(char c[]) { + for(uint8_t i = 0; i < strlen(c); i++) + print_char(c[i]); +} + +bool process_printer(uint16_t keycode, keyrecord_t *record) { + if (keycode == PRINT_ON) { + enabled_printing(); + return false; + } + if (keycode == PRINT_OFF) { + disable_printing(); + return false; + } + + if (printing_enabled) { + switch(keycode) { + case KC_EXLM ... KC_RPRN: + case KC_UNDS: + case KC_PLUS: + case KC_LCBR: + case KC_RCBR: + case KC_PIPE: + case KC_TILD: + keycode &= 0xFF; + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + character_shift++; + } else { + character_shift--; + } + return false; + break; + } + + switch(keycode) { + case KC_F1: + if (record->event.pressed) { + print_box_string("This is a line of text!"); + } + return false; + case KC_ESC: + if (record->event.pressed) { + print_char(0x1B); + } + return false; + break; + case KC_SPC: + if (record->event.pressed) { + print_char(0x20); + } + return false; + break; + case KC_A ... KC_Z: + if (record->event.pressed) { + if (character_shift) { + print_char(0x41 + (keycode - KC_A)); + } else { + print_char(0x61 + (keycode - KC_A)); + } + } + return false; + break; + case KC_1 ... KC_0: + if (record->event.pressed) { + if (character_shift) { + print_char(shifted_numbers[keycode - KC_1]); + } else { + print_char(0x30 + ((keycode - KC_1 + 1) % 10)); + } + } + return false; + break; + case KC_ENT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x0C); + } else { + print_char(0x0A); + } + } + return false; + break; + case KC_BSPC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x18); + } else { + print_char(0x1A); + } + } + return false; + break; + case KC_DOT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3E); + } else { + print_char(0x2E); + } + } + return false; + break; + case KC_COMM: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3C); + } else { + print_char(0x2C); + } + } + return false; + break; + case KC_SLSH: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3F); + } else { + print_char(0x2F); + } + } + return false; + break; + case KC_QUOT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x22); + } else { + print_char(0x27); + } + } + return false; + break; + case KC_GRV: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7E); + } else { + print_char(0x60); + } + } + return false; + break; + case KC_MINS: + if (record->event.pressed) { + if (character_shift) { + print_char(0x5F); + } else { + print_char(0x2D); + } + } + return false; + break; + case KC_EQL: + if (record->event.pressed) { + if (character_shift) { + print_char(0x2B); + } else { + print_char(0x3D); + } + } + return false; + break; + case KC_LBRC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7B); + } else { + print_char(0x5B); + } + } + return false; + break; + case KC_RBRC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7D); + } else { + print_char(0x5D); + } + } + return false; + break; + case KC_BSLS: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7C); + } else { + print_char(0x5C); + } + } + return false; + break; + } + } + return true; + +} \ No newline at end of file diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h new file mode 100644 index 0000000000..fdd36d75a8 --- /dev/null +++ b/quantum/process_keycode/process_printer.h @@ -0,0 +1,8 @@ +#ifndef PROCESS_PRINTER_H +#define PROCESS_PRINTER_H + +#include "quantum.h" + +#include "protocol/serial.h" + +#endif \ No newline at end of file diff --git a/quantum/process_keycode/process_printer_bb.c b/quantum/process_keycode/process_printer_bb.c new file mode 100644 index 0000000000..1924d03774 --- /dev/null +++ b/quantum/process_keycode/process_printer_bb.c @@ -0,0 +1,260 @@ +#include "process_printer.h" +#include "action_util.h" + +bool printing_enabled = false; +uint8_t character_shift = 0; + +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_MASK _BV(PD3) +#define SERIAL_DELAY 52 + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + + +void enabled_printing() { + printing_enabled = true; + serial_output(); + serial_high(); +} + +void disable_printing() { + printing_enabled = false; +} + +uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29}; + +// uint8_t keycode_to_ascii[0xFF][2]; + +// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F}; + +void print_char(char c) { + uint8_t b = 8; + serial_output(); + while( b-- ) { + if(c & (1 << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +void print_string(char c[]) { + for(uint8_t i = 0; i < strlen(c); i++) + print_char(c[i]); +} + +bool process_printer(uint16_t keycode, keyrecord_t *record) { + if (keycode == PRINT_ON) { + enabled_printing(); + return false; + } + if (keycode == PRINT_OFF) { + disable_printing(); + return false; + } + + if (printing_enabled) { + switch(keycode) { + case KC_EXLM ... KC_RPRN: + case KC_UNDS: + case KC_PLUS: + case KC_LCBR: + case KC_RCBR: + case KC_PIPE: + case KC_TILD: + keycode &= 0xFF; + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + character_shift++; + } else { + character_shift--; + } + return false; + break; + } + + switch(keycode) { + case KC_F1: + if (record->event.pressed) { + print_string("This is a line of text!\n\n\n"); + } + return false; + case KC_ESC: + if (record->event.pressed) { + print_char(0x1B); + } + return false; + break; + case KC_SPC: + if (record->event.pressed) { + print_char(0x20); + } + return false; + break; + case KC_A ... KC_Z: + if (record->event.pressed) { + if (character_shift) { + print_char(0x41 + (keycode - KC_A)); + } else { + print_char(0x61 + (keycode - KC_A)); + } + } + return false; + break; + case KC_1 ... KC_0: + if (record->event.pressed) { + if (character_shift) { + print_char(shifted_numbers[keycode - KC_1]); + } else { + print_char(0x30 + ((keycode - KC_1 + 1) % 10)); + } + } + return false; + break; + case KC_ENT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x0C); + } else { + print_char(0x0A); + } + } + return false; + break; + case KC_BSPC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x18); + } else { + print_char(0x1A); + } + } + return false; + break; + case KC_DOT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3E); + } else { + print_char(0x2E); + } + } + return false; + break; + case KC_COMM: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3C); + } else { + print_char(0x2C); + } + } + return false; + break; + case KC_SLSH: + if (record->event.pressed) { + if (character_shift) { + print_char(0x3F); + } else { + print_char(0x2F); + } + } + return false; + break; + case KC_QUOT: + if (record->event.pressed) { + if (character_shift) { + print_char(0x22); + } else { + print_char(0x27); + } + } + return false; + break; + case KC_GRV: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7E); + } else { + print_char(0x60); + } + } + return false; + break; + case KC_MINS: + if (record->event.pressed) { + if (character_shift) { + print_char(0x5F); + } else { + print_char(0x2D); + } + } + return false; + break; + case KC_EQL: + if (record->event.pressed) { + if (character_shift) { + print_char(0x2B); + } else { + print_char(0x3D); + } + } + return false; + break; + case KC_LBRC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7B); + } else { + print_char(0x5B); + } + } + return false; + break; + case KC_RBRC: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7D); + } else { + print_char(0x5D); + } + } + return false; + break; + case KC_BSLS: + if (record->event.pressed) { + if (character_shift) { + print_char(0x7C); + } else { + print_char(0x5C); + } + } + return false; + break; + } + } + return true; + +} \ No newline at end of file -- cgit v1.2.3 From 1dcee07eaba6de71211322fb8be327cc4d1069e2 Mon Sep 17 00:00:00 2001 From: Rob Rogers Date: Mon, 17 Oct 2016 08:04:29 -0500 Subject: Move hand_swap_config to ez.c, removes error for infinity --- keyboards/ergodox/ergodox.c | 20 -------------------- keyboards/ergodox/ez/ez.c | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c index c88c1ad890..648ec8ad2e 100644 --- a/keyboards/ergodox/ergodox.c +++ b/keyboards/ergodox/ergodox.c @@ -2,23 +2,3 @@ #include "debug.h" #include "action_layer.h" -// swap-hands action needs a matrix to define the swap -const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - /* Left hand, matrix positions */ - {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, - {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, - {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, - {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, - {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, - {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, - {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, - /* Right hand, matrix positions */ - {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, - {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, - {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, - {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, - {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, - {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, - {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, -}; - diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c index e7afc98590..1052e2fbb9 100644 --- a/keyboards/ergodox/ez/ez.c +++ b/keyboards/ergodox/ez/ez.c @@ -83,3 +83,25 @@ out: } +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, + {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, + {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, + {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + /* Right hand, matrix positions */ + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, +}; +#endif -- cgit v1.2.3 From 18b5c3dccfbf0b717869376f12d38d7e4bf05298 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 18 Oct 2016 13:57:56 -0400 Subject: removes planck/rev3 temporarily --- keyboards/planck/rev3/Makefile | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 keyboards/planck/rev3/Makefile diff --git a/keyboards/planck/rev3/Makefile b/keyboards/planck/rev3/Makefile deleted file mode 100644 index 191c6bb664..0000000000 --- a/keyboards/planck/rev3/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../../Makefile -endif \ No newline at end of file -- cgit v1.2.3 From 75ea142d01a92345c43c5ac776cc61ec805c8869 Mon Sep 17 00:00:00 2001 From: Rob Rogers Date: Tue, 18 Oct 2016 13:59:19 -0500 Subject: Update ez.c --- keyboards/ergodox/ez/ez.c | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c index 1052e2fbb9..ddb8ff0cf7 100644 --- a/keyboards/ergodox/ez/ez.c +++ b/keyboards/ergodox/ez/ez.c @@ -82,7 +82,6 @@ out: return mcp23018_status; } - #ifdef ONEHAND_ENABLE __attribute__ ((weak)) // swap-hands action needs a matrix to define the swap -- cgit v1.2.3 From 28dfaa20f51eae0f0f3f433401f054b9fbb3eb6d Mon Sep 17 00:00:00 2001 From: twentylives Date: Tue, 18 Oct 2016 22:27:36 +0300 Subject: adding dvorak hebrew layout --- keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c | 225 +++++++++++++++++++++ keyboards/ergodox/keymaps/dvorak-hebrew/readme.md | 5 + .../ergodox/keymaps/dvorak-hebrew/twentylives.png | Bin 0 -> 124212 bytes 3 files changed, 230 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/readme.md create mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c b/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c new file mode 100644 index 0000000000..f3dc8c387d --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c @@ -0,0 +1,225 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define HEB 1 // Hebrew-Dvorak +#define NUM 2 // symbols +#define NAV 3 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A | + * `----------------------------------' `------------------------------------' + * ,-------------. ,-------------. +* | DEL | WIN+D| | END | HOME | + * ,------|------|------| |------+--------+------. + * | | | SUPER| | PgUp | | | + * | BACK | CTRL |------| |------| Enter |SPACE | + * | SPACE| | ALT | | PgDn | | | + * `--------------------' `----------------------' + */ +[BASE] = KEYMAP( // layer 0 : default + // left hand + TG(HEB), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSFT), + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(NUM), + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, TG(NAV), + MO(NUM), LCTL(KC_C), LCTL(KC_X), LCTL(KC_V), MO(NAV), + KC_DEL, KC_TRNS, + KC_LGUI, + KC_BSPC, KC_LCTL, KC_LALT, + // right hand + KC_GRV, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + KC_TRNS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_LBRC, KC_RBRC, KC_BSLS, LCTL(KC_Z), LCTL(KC_A), + KC_END, KC_HOME, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +/* Keymap 1: Hebrew Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A | + * `----------------------------------' `------------------------------------' + * ,-------------. ,-------------. +* | DEL | WIN+D| | END | HOME | + * ,------|------|------| |------+--------+------. + * | | | SUPER| | PgUp | | | + * | BACK | CTRL |------| |------| Enter |SPACE | + * | SPACE| | ALT | | PgDn | | | + * `--------------------' `----------------------' + */ +[HEB] = KEYMAP( // layer 0 : default + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_W, KC_QUOT, KC_SLSH, KC_R, KC_T, KC_TRNS, + KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, 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_TRNS, + KC_TRNS, KC_Y, KC_U, KC_E, KC_O, KC_P, KC_TRNS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_MPLY, + KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_I, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + /* Keymap 2: Numpad Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | NMLK | P/ | P* | P- | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | 7 | 8 | 9 | P+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | 4 | 5 | 6 | P+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | 1 | 2 | 3 | ENTER| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | ENTER| | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NUM] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TRNS, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, + KC_P0, KC_P0, KC_DOT, KC_PENT, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 3: Arrows and Mouse Navigation Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | MUTE | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | F11 | | VOL | | | UP | | | | + * |--------+------+------+------+------+------| | | + |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | LEFT | DOWN | RIGHT| | | + * |--------+------+------+------+------+------| F12 | | VOL |------+------+------+------+------+--------| + * | | | | | | | | | - | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Lclk | Rclk | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | PL/PS| | + * ,------|------|------| |------+------+------. + * | | | | | NEXT | | | + * | | |------| |------| | | + * | | | | | PREV | | | + * `--------------------' `--------------------' + */ +[NAV] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_F11, + 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_F12, + 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_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_VOLU, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_MPLY, + KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MPLY, KC_TRNS, + KC_MNXT, + KC_MPRV, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(NAV) // 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; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md new file mode 100644 index 0000000000..18c99dcfd5 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md @@ -0,0 +1,5 @@ +#Dvorak-Hebrew + +*This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. +*The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. +*these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use 'hebrew-hw-dvorak' as os layout. diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png b/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png new file mode 100644 index 0000000000..904391f222 Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png differ -- cgit v1.2.3 From 31193b9cffb25464c4fe4dbaf0dd8ee1dfa0a191 Mon Sep 17 00:00:00 2001 From: 20lives Date: Tue, 18 Oct 2016 22:33:42 +0300 Subject: Update readme.md --- keyboards/ergodox/keymaps/dvorak-hebrew/readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md index 18c99dcfd5..edb52d6adf 100644 --- a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md +++ b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md @@ -1,5 +1,7 @@ #Dvorak-Hebrew *This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. + *The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. -*these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use 'hebrew-hw-dvorak' as os layout. + +these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. -- cgit v1.2.3 From 48eb5112b5972472ce8da735a50b9631029af001 Mon Sep 17 00:00:00 2001 From: 20lives Date: Tue, 18 Oct 2016 22:35:05 +0300 Subject: Update readme.md --- keyboards/ergodox/keymaps/dvorak-hebrew/readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md index edb52d6adf..9f0b45371e 100644 --- a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md +++ b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md @@ -1,7 +1,9 @@ #Dvorak-Hebrew -*This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. +* This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. -*The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. +* The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. -these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. +* these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. + +![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png?raw=true) -- cgit v1.2.3 From 60326eded27332a561ccdc561679b89921a58461 Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Tue, 18 Oct 2016 12:44:30 -0700 Subject: moving keymap to new location --- keyboard/ergodox_ez/keymaps/phoenix/keymap.c | 184 ------------------------- keyboard/ergodox_ez/keymaps/phoenix/readme.md | 10 -- keyboards/ergodox/ez/keymaps/phoenix/keymap.c | 184 +++++++++++++++++++++++++ keyboards/ergodox/ez/keymaps/phoenix/readme.md | 10 ++ 4 files changed, 194 insertions(+), 194 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/phoenix/keymap.c delete mode 100644 keyboard/ergodox_ez/keymaps/phoenix/readme.md create mode 100644 keyboards/ergodox/ez/keymaps/phoenix/keymap.c create mode 100644 keyboards/ergodox/ez/keymaps/phoenix/readme.md diff --git a/keyboard/ergodox_ez/keymaps/phoenix/keymap.c b/keyboard/ergodox_ez/keymaps/phoenix/keymap.c deleted file mode 100644 index 86ee5a65c3..0000000000 --- a/keyboard/ergodox_ez/keymaps/phoenix/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | Home | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | End | | PgUp | | | - * | Space|Backsp|------| |------| Enter |Space | - * | |ace | LGui | | 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, LSFT(KC_MINS), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, - 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_HOME, - KC_END, - KC_SPC,KC_BSPC,KC_LGUI, - // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1, - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | 0 | . | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,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_TRNS, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, - 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_0, KC_0, KC_DOT, 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 | |VolDn |VolUp | 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_VOLD, KC_VOLU, 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/phoenix/readme.md b/keyboard/ergodox_ez/keymaps/phoenix/readme.md deleted file mode 100644 index b1053bfb78..0000000000 --- a/keyboard/ergodox_ez/keymaps/phoenix/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Phoenix Configuration - -I started working using the default layout. The changes that I made are largely things that I consistely do wrong. - -As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other. - -## Changelog - -* April 25, 2016 (V1.0): - * Initial submission. diff --git a/keyboards/ergodox/ez/keymaps/phoenix/keymap.c b/keyboards/ergodox/ez/keymaps/phoenix/keymap.c new file mode 100644 index 0000000000..86ee5a65c3 --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/phoenix/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 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | Home | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgUp | | | + * | Space|Backsp|------| |------| Enter |Space | + * | |ace | LGui | | 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, LSFT(KC_MINS), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_HOME, + KC_END, + KC_SPC,KC_BSPC,KC_LGUI, + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,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_TRNS, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, + 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_0, KC_0, KC_DOT, 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 | |VolDn |VolUp | 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_VOLD, KC_VOLU, 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/keyboards/ergodox/ez/keymaps/phoenix/readme.md b/keyboards/ergodox/ez/keymaps/phoenix/readme.md new file mode 100644 index 0000000000..b1053bfb78 --- /dev/null +++ b/keyboards/ergodox/ez/keymaps/phoenix/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Phoenix Configuration + +I started working using the default layout. The changes that I made are largely things that I consistely do wrong. + +As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other. + +## Changelog + +* April 25, 2016 (V1.0): + * Initial submission. -- cgit v1.2.3 From cabfd7830914d19fb445058da41fa26e01dd3c02 Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Tue, 18 Oct 2016 12:48:07 -0700 Subject: didn't read PR comment close enough, correcting folder --- keyboards/ergodox/ez/keymaps/phoenix/keymap.c | 184 ------------------------- keyboards/ergodox/ez/keymaps/phoenix/readme.md | 10 -- keyboards/ergodox/keymaps/phoenix/keymap.c | 184 +++++++++++++++++++++++++ keyboards/ergodox/keymaps/phoenix/readme.md | 10 ++ 4 files changed, 194 insertions(+), 194 deletions(-) delete mode 100644 keyboards/ergodox/ez/keymaps/phoenix/keymap.c delete mode 100644 keyboards/ergodox/ez/keymaps/phoenix/readme.md create mode 100644 keyboards/ergodox/keymaps/phoenix/keymap.c create mode 100644 keyboards/ergodox/keymaps/phoenix/readme.md diff --git a/keyboards/ergodox/ez/keymaps/phoenix/keymap.c b/keyboards/ergodox/ez/keymaps/phoenix/keymap.c deleted file mode 100644 index 86ee5a65c3..0000000000 --- a/keyboards/ergodox/ez/keymaps/phoenix/keymap.c +++ /dev/null @@ -1,184 +0,0 @@ -#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 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | Home | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | End | | PgUp | | | - * | Space|Backsp|------| |------| Enter |Space | - * | |ace | LGui | | 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, LSFT(KC_MINS), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, - 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_HOME, - KC_END, - KC_SPC,KC_BSPC,KC_LGUI, - // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1, - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC - ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | 0 | . | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,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_TRNS, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, - 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_0, KC_0, KC_DOT, 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 | |VolDn |VolUp | 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_VOLD, KC_VOLU, 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/keyboards/ergodox/ez/keymaps/phoenix/readme.md b/keyboards/ergodox/ez/keymaps/phoenix/readme.md deleted file mode 100644 index b1053bfb78..0000000000 --- a/keyboards/ergodox/ez/keymaps/phoenix/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# ErgoDox EZ Phoenix Configuration - -I started working using the default layout. The changes that I made are largely things that I consistely do wrong. - -As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other. - -## Changelog - -* April 25, 2016 (V1.0): - * Initial submission. diff --git a/keyboards/ergodox/keymaps/phoenix/keymap.c b/keyboards/ergodox/keymaps/phoenix/keymap.c new file mode 100644 index 0000000000..86ee5a65c3 --- /dev/null +++ b/keyboards/ergodox/keymaps/phoenix/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 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | Home | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | End | | PgUp | | | + * | Space|Backsp|------| |------| Enter |Space | + * | |ace | LGui | | 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, LSFT(KC_MINS), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, + 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_HOME, + KC_END, + KC_SPC,KC_BSPC,KC_LGUI, + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,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_TRNS, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, + 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_0, KC_0, KC_DOT, 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 | |VolDn |VolUp | 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_VOLD, KC_VOLU, 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/keyboards/ergodox/keymaps/phoenix/readme.md b/keyboards/ergodox/keymaps/phoenix/readme.md new file mode 100644 index 0000000000..b1053bfb78 --- /dev/null +++ b/keyboards/ergodox/keymaps/phoenix/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Phoenix Configuration + +I started working using the default layout. The changes that I made are largely things that I consistely do wrong. + +As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other. + +## Changelog + +* April 25, 2016 (V1.0): + * Initial submission. -- cgit v1.2.3 From fad20756e30d532ff46ec8fb5e90a8c446f5c8f2 Mon Sep 17 00:00:00 2001 From: Ryan Ascheman Date: Tue, 18 Oct 2016 13:58:59 -0700 Subject: update header file --- keyboards/ergodox/keymaps/phoenix/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/phoenix/keymap.c b/keyboards/ergodox/keymaps/phoenix/keymap.c index 86ee5a65c3..624817d474 100644 --- a/keyboards/ergodox/keymaps/phoenix/keymap.c +++ b/keyboards/ergodox/keymaps/phoenix/keymap.c @@ -1,4 +1,4 @@ -#include "ergodox_ez.h" +#include "ergodox.h" #include "debug.h" #include "action_layer.h" -- cgit v1.2.3 From 826417bfc001377719c9034fe273d1596ba62c9c Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 18 Oct 2016 16:45:45 -0500 Subject: Updating Vision keyboard files --- keyboards/vision_division/keymaps/default/Makefile | 4 +- keyboards/vision_division/keymaps/default/keymap.c | 211 +++++++++++---------- 2 files changed, 116 insertions(+), 99 deletions(-) diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile index 5a930e85ed..28060947af 100644 --- a/keyboards/vision_division/keymaps/default/Makefile +++ b/keyboards/vision_division/keymaps/default/Makefile @@ -2,7 +2,7 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) @@ -18,4 +18,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 64118abdce..8622ee5211 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -121,6 +121,7 @@ enum keyboard_macros { #define M_CP_CT M(MACRO_COPY_CUT) +#define M_COPY KC_FN1 #define SC_UNDO LCTL(KC_Z) #define SC_REDO LCTL(KC_Y) @@ -145,31 +146,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* LAYER = LAYER_QWERTY .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | FN | PRINT | SCR LK | PAUSE | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | VOL DN | MUTE | VOL UP | BACKLT | + | VOL DN | MUTE | VOL UP | BACKLT | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | PRINT | SCR LK | PAUSE | FN | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | M1 | INS | HOME | PG UP | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | NUM LK | KP / | KP * | KP - | + | NUM LK | KP / | KP * | KP - | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | INS | HOME | PG UP | M1 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | M2 | DEL | END | PG DN | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | KP 7 | KP 8 | KP 9 | KP + | + | KP 7 | KP 8 | KP 9 | KP + | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | DEL | END | PG DN | M2 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| - | M3 | UL | UP | UR | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | KP 4 | KP 5 | KP 6 | KP + | + | KP 4 | KP 5 | KP 6 | KP + | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | CP/CT | UNDO | PASTE | M3 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| - | M4 | LEFT | CP/CT | RIGHT | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | KP 1 | KP 2 | KP 3 | KP Ent | + | KP 1 | KP 2 | KP 3 | KP Ent | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | XXXXXX | UP | XXXXXX | M4 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | M5 | DL | DOWN | DR | | LCTRL | XXXXXX | XXXXXX | LWIN | LALT | LOWER | SPACE . SPACE | UPPER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | KP 0 | KP , | KP . | KP Ent | + | KP 0 | KP , | KP . | KP Ent | | LCTRL | XXXXXX | LWIN | XXXXXX | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | LEFT | DOWN | RIGHT | M5 | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' */ KEYMAP(LAYER_QWERTY, \ - M_HELP , KC_PSCR, KC_SLCK, KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, \ - M_M1 , KC_INS , KC_HOME, KC_PGUP, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ - M_M2 , KC_DEL , KC_END , KC_PGDN, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, \ - M_M3 , M_UL , KC_UP , M_UR , KC_CAPS, 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_ENT , KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, \ - M_M4 , KC_LEFT, M_CP_CT, KC_RGHT, KC_LSFT, 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_RSFT, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, \ - M_M5 , M_DL , KC_DOWN, M_DR , KC_LCTL, XXXXXXX, XXXXXXX, KC_LGUI, KC_LALT, M_LOWER, KC_SPC , KC_SPC , M_UPPER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT \ + KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, KC_PAUS, M_HELP , \ + KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP, M_M1 , \ + KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_DEL , KC_END , KC_PGDN, M_M2 , \ + KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, 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_ENT , M_CP_CT, SC_UNDO, SC_PSTE, M_M3 , \ + KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, 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_RSFT, XXXXXXX, KC_UP , XXXXXXX, M_M4 , \ + KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT, KC_LCTL, XXXXXXX, KC_LGUI, XXXXXXX, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, M_M5 \ ), /* LAYER = LAYER_LOWER .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | @@ -180,20 +181,20 @@ KEYMAP(LAYER_QWERTY, \ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| | ______ | ______ | ______ | ______ | | ______ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ | ______ | | ______ | ______ | ______ | ______ | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | XXXXXX | ______ | | ______ | ______ | ______ | ______ | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' */ KEYMAP(LAYER_LOWER, \ - _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______ \ ), /* LAYER = LAYER_UPPER .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | MUTE A | ______ | ______ | + | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | @@ -204,44 +205,44 @@ KEYMAP(LAYER_LOWER, \ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| | ______ | ______ | ______ | ______ | | ______ | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP Ent | ______ | ______ | | ______ | ______ | ______ | ______ | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | ______ | ______ | ______ | ______ | | ______ | XXXXXX | XXXXXX | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP Ent | XXXXXX | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP Ent | XXXXXX | ______ | | ______ | ______ | ______ | ______ | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' */ KEYMAP(LAYER_UPPER, \ - _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, M_MUTEA, _______, _______, \ + _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______, _______, _______, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______, _______, _______, _______, _______ \ ), /* LAYER = LAYER_MOUSE .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | MS BT1 | MS AC0 | MS WHU | MS AC2 | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS AC0 | MS WHU | MS AC2 | MS BT1 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | MS BT2 | MS WHL | MS WHD | MS WHU | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS WHL | MS WHD | MS WHU | MS BT2 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| - | MS BT3 | MS UL | MS U | MS UR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | o | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | o | MS BT1 | MS BT2 | MS BT3 | MS BT3 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------| - | MS BT4 | MS L | MS BT1 | MS R | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | XXXXXX | MS U | XXXXXX | MS BT4 | |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------| - | MS BT5 | MS DL | MS D | MS DR | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | + | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS L | MS D | MS R | MS BT5 | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' */ KEYMAP(LAYER_MOUSE, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_BTN1, KC_ACL0, KC_WH_U, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_BTN3, M_MS_UL, KC_MS_U, M_MS_UR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_BTN4, KC_MS_L, KC_BTN1, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_BTN5, M_MS_DL, KC_MS_D, M_MS_DR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ACL0, KC_WH_U, KC_ACL2, KC_BTN1, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_BTN2, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN3, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_MS_U, XXXXXXX, KC_BTN4, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5 \ ), /* LAYER = LAYER_ADJUST .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. - | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | VOICE- | AUDIO | VOICE+ | MUSIC | + | VOICE- | AUDIO | VOICE+ | MUSIC | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------. | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | @@ -256,14 +257,13 @@ KEYMAP(LAYER_MOUSE, \ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------' */ KEYMAP(LAYER_ADJUST, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, MUV_DE , AU_TOG , MUV_IN , MU_TOG , \ + MUV_DE , AU_TOG , MUV_IN , MU_TOG , M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ ), - }; #ifdef AUDIO_ENABLE @@ -296,6 +296,7 @@ void persistant_default_layer_set(uint16_t default_layer) const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_MODS_ONESHOT(MOD_LSFT), + [1] = ACTION_MACRO_TAP(MACRO_COPY_CUT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -305,68 +306,84 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { - case MACRO_HELP_1: - if (record->event.pressed) - { - uprint("H1"); - } - break; - - case MACRO_HELP_2: - if (record->event.pressed) - { - uprint("H2"); - } - break; - - case MACRO_HELP_3: - if (record->event.pressed) - { - uprint("H3"); - } - break; - - case MACRO_HELP_4: - if (record->event.pressed) - { - uprint("H4"); - } - break; - - case MACRO_HELP_5: - if (record->event.pressed) - { - uprint("H5"); - } - break; - - case MACRO_HELP_6: - if (record->event.pressed) - { - uprint("H6"); - } - break; - - case MACRO_HELP_7: - if (record->event.pressed) - { - uprint("H7"); - } - break; - - case MACRO_HELP_8: - if (record->event.pressed) - { - uprint("H8"); - } - break; - - case MACRO_HELP_9: - if (record->event.pressed) - { - uprint("H9"); - } - break; + case MACRO_COPY_CUT: + if (record->event.pressed) { + register_code(KC_LCTL); + if (record->tap.count == 1) { + register_code(KC_C); + unregister_code(KC_C); + } + else if (record->tap.count == 2) { + register_code(KC_X); + unregister_code(KC_X); + } + unregister_code(KC_LCTL); + } + break; + + + // case MACRO_HELP_1: + // if (record->event.pressed) + // { + // uprint("H1"); + // } + // break; + + // case MACRO_HELP_2: + // if (record->event.pressed) + // { + // uprint("H2"); + // } + // break; + + // case MACRO_HELP_3: + // if (record->event.pressed) + // { + // uprint("H3"); + // } + // break; + + // case MACRO_HELP_4: + // if (record->event.pressed) + // { + // uprint("H4"); + // } + // break; + + // case MACRO_HELP_5: + // if (record->event.pressed) + // { + // uprint("H5"); + // } + // break; + + // case MACRO_HELP_6: + // if (record->event.pressed) + // { + // uprint("H6"); + // } + // break; + + // case MACRO_HELP_7: + // if (record->event.pressed) + // { + // uprint("H7"); + // } + // break; + + // case MACRO_HELP_8: + // if (record->event.pressed) + // { + // uprint("H8"); + // } + // break; + + // case MACRO_HELP_9: + // if (record->event.pressed) + // { + // uprint("H9"); + // } + // break; case MACRO_BREATH_TOGGLE: if (record->event.pressed) @@ -566,12 +583,12 @@ void led_set_user(uint8_t usb_led) void startup_user() { _delay_ms(10); // gets rid of tick - PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO); + // PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO); } void shutdown_user() { - PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO); + // PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO); _delay_ms(2000); stop_all_notes(); } -- cgit v1.2.3 From 1688c014ccc89fc46538c7b9f80cb09126904a4f Mon Sep 17 00:00:00 2001 From: h-parks Date: Tue, 18 Oct 2016 21:58:33 -0500 Subject: Win10 Writer's Block - An ErgoDox Keymap This is a QWERTY layout for ErgoDox on QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10. --- .../ergodox/keymaps/win10_writers-block/Makefile | 9 + .../ergodox/keymaps/win10_writers-block/config.h | 36 +++ .../win10_writers-block/images/base-layer.png | Bin 0 -> 125979 bytes .../win10_writers-block/images/media-layer.png | Bin 0 -> 102643 bytes .../win10_writers-block/images/rimworld-layer.png | Bin 0 -> 90359 bytes .../win10_writers-block/images/symbol-layer.png | Bin 0 -> 101477 bytes .../ergodox/keymaps/win10_writers-block/keymap.c | 323 +++++++++++++++++++++ .../ergodox/keymaps/win10_writers-block/readme.md | 111 +++++++ 8 files changed, 479 insertions(+) create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/Makefile create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/config.h create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/keymap.c create mode 100644 keyboards/ergodox/keymaps/win10_writers-block/readme.md diff --git a/keyboards/ergodox/keymaps/win10_writers-block/Makefile b/keyboards/ergodox/keymaps/win10_writers-block/Makefile new file mode 100644 index 0000000000..fbab4b71c4 --- /dev/null +++ b/keyboards/ergodox/keymaps/win10_writers-block/Makefile @@ -0,0 +1,9 @@ +# Having a file like this allows you to override Makefile definitions +# for your own particular keymap + +TAP_DANCE_ENABLE=yes + + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/win10_writers-block/config.h b/keyboards/ergodox/keymaps/win10_writers-block/config.h new file mode 100644 index 0000000000..568a711a86 --- /dev/null +++ b/keyboards/ergodox/keymaps/win10_writers-block/config.h @@ -0,0 +1,36 @@ +#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ +#define KEYBOARDS_ERGODOX_CONFIG_H_ + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +#define TAPPING_TERM 300 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +#ifdef SUBPROJECT_ez + #include "ez/config.h" +#endif +#ifdef SUBPROJECT_infinity + #include "infinity/config.h" +#endif + + +#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png new file mode 100644 index 0000000000..d1cb1987c8 Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png differ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png new file mode 100644 index 0000000000..c2019da4e9 Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png differ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png new file mode 100644 index 0000000000..f866d3d55d Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png differ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png new file mode 100644 index 0000000000..6f49aae798 Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png differ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c new file mode 100644 index 0000000000..1821147ebb --- /dev/null +++ b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c @@ -0,0 +1,323 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer - helpful for writing in Office-style word processors. +#define SYMB 1 // symbol layer - NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key +#define RIMW 2 // rimworld layer - made for the game RimWorld, by Tynan Sylvester | feel free to remap for your favorite game! +#define MDIA 3 // media layer - mouse and music - close to Ergodox EZ default media layer + +#define CO_PA M(0) // hold copy, tap paste + +#define W_CUT LCTL(KC_X) // C-x Cut +#define W_COPY LCTL(KC_C) // C-c Copy +#define W_PASTE LCTL(KC_V) // C-v Paste +#define W_UNDO LCTL(KC_Z) // C-z Undo +#define W_FIND LCTL(KC_F) // C-v Find +#define W_CAD LCTL(LALT(KC_DEL)) // one-tap ctrl-alt-del + + + +//Tap Dance Declarations +enum { + CAKEWARP, + CTRLALTMDIA, +}; + +void cake_count (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 2) { + layer_on (SYMB); //define double tap here + layer_off (MDIA); + } + else { + layer_off (SYMB); //define single tap or hold here + layer_off (MDIA); + } + if (state->count == 3) { + layer_on (RIMW); //define triple tap here + layer_off (MDIA); + } + else { + layer_off (RIMW); //define single tap or hold here + layer_off (MDIA); + reset_tap_dance (state); + } +} + +void dance_cad_mdia_fin (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_LCTL); + register_code (KC_LALT); + register_code (KC_DEL); + } else { + layer_on (MDIA); + } +} + +void dance_cad_mdia_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_DEL); + unregister_code (KC_LALT); + unregister_code (KC_LCTL); + } else { + ; + } +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // tap for Layer 0, tap twice to switch to symbol layer, and tap three times to switch to rimworld layer. + [CAKEWARP] = ACTION_TAP_DANCE_FN(cake_count) + // tap for ctrl-alt-del, tap twice for media layer + ,[CTRLALTMDIA] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cad_mdia_fin, dance_cad_mdia_reset) + // Other declarations would go here, separated by commas, if you have them +}; + +//In Layer declaration, add tap dance item in place of a key code + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer - TD(one_tap, two_taps, three_taps...) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F12/L1 | Q | W | E | R | T | {/[ | |TD(L0 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| + * |Caps/Win| A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| }/] | TD(ctrl|------+------+------+------+------+--------| + * |LShift/(|Z/Ctrl| X | C | V | B | | |altdel| N | M | , | . | / |RShift/)| + * `--------+------+------+------+------+-------------' |L3) |------+------+------+------+------+--------' + * | Undo | Cut |CopyPa| Meh | LGui | '------| | Enter| Left | Up | Down | Right | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Esc | VolUp| | F4 | Mute | + * ,------|------|------| |------+--------+------. + * | | | VolDn| | F5 | | | + * |Backsp|Delete|------| |------| Tab / |Space | + * |ace | | Find | | Alt | CTRL | | + * `--------------------' `----------------------' + */ +// 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_6, +LT(SYMB, KC_F12), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + GUI_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_RBRC, + W_UNDO, W_CUT, CO_PA, MEH_T(KC_NO), KC_LGUI, + KC_ESC, KC_VOLU, + KC_VOLD, + KC_BSPC, KC_DELETE, W_FIND, + // right hand + KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + TD(CAKEWARP), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TD(CTRLALTMDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_ENT, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, + KC_F4, KC_MUTE, + KC_F5, + KC_RALT, CTL_T(KC_TAB), KC_SPC + ), + +/* Keymap 1: Symbol Layer | No EEPROM Or Version keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | xx | | xx | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | |TD(L0 | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| 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_NO, + 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_NO, 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_MINS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: RimWorld Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | C | ,< | W | >. | R | | |TD(L0 | U | B | N | J | M | PGUP | + * |--------+------+------+------+------+------| F10 | |L1 L2)|------+------+------+------+------+--------| + * | I | F | A | S | D | 8 |------| |------| X | L | P | Y | H | ENTER | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | K | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PGDN | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | F | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * |SPACE | C |------| |------| E |SPACE | + * | | | Q | | | | | + * `--------------------' `--------------------' + */ +// RIMWORLD +[RIMW] = KEYMAP( + // left hand + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + KC_TAB, KC_C, KC_COMM, KC_W, KC_DOT, KC_R, KC_F10, + KC_I, KC_F, KC_A, KC_S, KC_D, KC_8, + KC_K, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_C,KC_Q,KC_TRNS, + // right hand + KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TRNS, KC_U, KC_B, KC_N, KC_J, KC_M, KC_PGUP, + KC_X, KC_L, SFT_T(KC_P), KC_Y, KC_H, KC_ENT, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGDN, + KC_F, KC_LEFT, KC_UP, KC_DOWN,KC_RIGHT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_E, KC_TRNS +), +/* Keymap 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | Lclk | Rclk |------| |------| |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_BTN1, KC_BTN2, 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 +), +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + } + else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + return MACRO( D(LCTL), T(C), U(LCTL), END ); + } + else { + return MACRO( D(LCTL), T(V), U(LCTL), END ); + } + } + break; + } + } + return MACRO_NONE; +}; + +// Anything you want to do once when the keyboard initializes. +// Tests LED function when the keyboard initializes. +void matrix_init_user(void) { + + _delay_ms(500); + ergodox_board_led_on(); + _delay_ms(200); + ergodox_right_led_1_on(); + _delay_ms(200); + ergodox_right_led_2_on(); + _delay_ms(200); + ergodox_right_led_3_on(); + _delay_ms(200); + ergodox_board_led_off(); + _delay_ms(200); + ergodox_right_led_1_off(); + _delay_ms(200); + ergodox_right_led_2_off(); + _delay_ms(200); + ergodox_right_led_3_off(); + +}; + + +// 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) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/win10_writers-block/readme.md b/keyboards/ergodox/keymaps/win10_writers-block/readme.md new file mode 100644 index 0000000000..b9c3eb879a --- /dev/null +++ b/keyboards/ergodox/keymaps/win10_writers-block/readme.md @@ -0,0 +1,111 @@ + + +Win10 Writer's Block ErgoDox - v1.0 + +======================= + +This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10. + +I earn a living as a copywriter. I use my ErgoDox as a daily driver at my office. + +A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld. + +Feel free to modify the gaming layer to your personal taste. + +## Table of Contents + +* [Layouts](#layouts) + - [Base layer](#base-layer) + - [Symbol layer](#symbol-layer) + - [Gaming layer](#rimworld-layer) + - [Media layer](#media-layer) +* [Tools](#tools) + - [Layer notification](#layer-notification) +* [Building](#building) + - [Using on Windows](#using-on-windows) +* [License](#license) +* [Special Thanks](#special-thanks) + +# Layouts + +* TapDance will teleport you to the layer you want: +* One Tap for the Base layer +* Two Taps for the Symbol layer +* Three Taps for the Rimworld/Gaming layer + +* Where the "Meh" key is located on the Ergodox EZ default layout, I've changed it to another tap dance key: +* One Tap for CTRL-ALT-DEL +* Two Taps for the Media/Mouse layer + +## Base layer + +[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/8fd9bbdd3a23bbb5a8779de3624a3be1) + +This is a QWERTY layout with some quirks. + +* Enter is located on a key that won't cause as much thumb fatigue. +* Copy and Paste work from the same key. Just hold the key to copy and tap the key to paste! +* Undo, Find and Cut are also one-touch keys. +* F12 is where you would normally find TAB on standard layouts. Quickly save in Word, safely. +* You'll find bracket keys below the "6" key. + +* The Meh Key is a single-button CTRL+ALT+SHIFT modifier. + +* Space Cadet Shift: Tap L Shift for "(" and R Shift for ")" -- holding either shift works like a normal shift. +* Tap "Z" or Tab to use either normally. Hold them for CTRL. +* Tap Caps Lock to use it normally. Hold it for Win key combinations (Win+D to minimize all programs, etc). + +## Symbol layer + +[![Symbol layer](images/symbol-layer.png)](http://www.keyboard-layout-editor.com/#/gists/04eb6458b8b17882e472f64d482f12b4) + +Your standard Ergodox EZ symbol + numpad layout, minus the Version and EEPROM keys. + +* From the base layer, hold the F12 Key to temporarily access this layer (use for quick access to numpad) +* Release F12 to return to the base layer. + +## Rimworld layer + +[![Rimworld / Gaming Layer](images/rimworld-layer.png)](http://www.keyboard-layout-editor.com/#/gists/d53af8391e6e443ed0a98ccfbdb4eace) + +This layer was made to play RimWorld, a Sci-Fi Colony Survival Game by Tynan Sylvester and Ludeon Studios, available on Steam. + +* Have fun! + +## Media layer + +[![Media layer](images/media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/3209d09ed4bd997e4f49f28c6ada2ab3) + +This is the standard Ergodox EZ media layout with more options for mouseclick buttons. + +* In this layer, your "space" key changes into a back button for your browser. + +## LED states + +Your LEDs will change to indicate your layer. You'll know you are in the base layer if all LEDs are off. + +# Building + +To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/` + +[qmk]: https://github.com/jackhumbert/qmk_firmware + +``` +$ make keyboard=ergodox keymap=win10_writers-block +``` + +## Using on Windows + +This layout is tested in Windows 7 Pro and Windows 10 Home environments. + +# License + +GPL 3+ + +# Special Thanks + +* To algernon for his coding help. I'm a novice but I still made this work (and figured out tap dance) with his help. + +* To /r/MechanicalKeyboards for being an all-around great community. + +* To /u/profet23 for his amazing custom Ergodox boards. \ No newline at end of file -- cgit v1.2.3 From f2197611c7d57f01b95d268e919221f87407a4df Mon Sep 17 00:00:00 2001 From: h-parks Date: Wed, 19 Oct 2016 09:33:37 -0500 Subject: Win10 Writer's Block - An ErgoDox Keymap fix for compiling on infinity: replaced `_delay_ms()' with `wait_ms()' included "wait.h" --- keyboards/ergodox/keymaps/win10_writers-block/keymap.c | 17 +++++++++-------- keyboards/ergodox/keymaps/win10_writers-block/readme.md | 4 +++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c index 1821147ebb..ea640ee96f 100644 --- a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c +++ b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c @@ -2,6 +2,7 @@ #include "debug.h" #include "action_layer.h" #include "version.h" +#include "wait.h" #define BASE 0 // default layer - helpful for writing in Office-style word processors. #define SYMB 1 // symbol layer - NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key @@ -276,21 +277,21 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // Tests LED function when the keyboard initializes. void matrix_init_user(void) { - _delay_ms(500); + wait_ms(500); ergodox_board_led_on(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_1_on(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_2_on(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_3_on(); - _delay_ms(200); + wait_ms(200); ergodox_board_led_off(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_1_off(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_2_off(); - _delay_ms(200); + wait_ms(200); ergodox_right_led_3_off(); }; diff --git a/keyboards/ergodox/keymaps/win10_writers-block/readme.md b/keyboards/ergodox/keymaps/win10_writers-block/readme.md index b9c3eb879a..66b1aaf40d 100644 --- a/keyboards/ergodox/keymaps/win10_writers-block/readme.md +++ b/keyboards/ergodox/keymaps/win10_writers-block/readme.md @@ -6,7 +6,9 @@ Win10 Writer's Block ErgoDox - v1.0 This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10. -I earn a living as a copywriter. I use my ErgoDox as a daily driver at my office. +Professional writers may find this layout useful -- copywriters, technical writers, novelists, etc. + +I use my ErgoDox with this keymap as a daily driver at my office. A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld. -- cgit v1.2.3 From 65c1127b4906d7ea691529ebf779b57039622b65 Mon Sep 17 00:00:00 2001 From: twentylives Date: Wed, 19 Oct 2016 20:23:10 +0300 Subject: update pics and readme --- keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c | 225 --------------------- keyboards/ergodox/keymaps/dvorak-hebrew/readme.md | 9 - .../ergodox/keymaps/dvorak-hebrew/twentylives.png | Bin 124212 -> 0 bytes .../twentylives_dvorak_with_hebrew/keymap.c | 213 +++++++++++++++++++ .../twentylives_dvorak_with_hebrew/keymap.png | Bin 0 -> 119825 bytes .../twentylives_dvorak_with_hebrew/keymap2.png | Bin 0 -> 292705 bytes .../twentylives_dvorak_with_hebrew/readme.md | 10 + 7 files changed, 223 insertions(+), 234 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c delete mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/readme.md delete mode 100644 keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png create mode 100644 keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c create mode 100644 keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png create mode 100644 keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png create mode 100644 keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c b/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c deleted file mode 100644 index f3dc8c387d..0000000000 --- a/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.c +++ /dev/null @@ -1,225 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -#define BASE 0 // default layer -#define HEB 1 // Hebrew-Dvorak -#define NUM 2 // symbols -#define NAV 3 // media keys - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic Dvorak layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - | - * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------| - * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A | - * `----------------------------------' `------------------------------------' - * ,-------------. ,-------------. -* | DEL | WIN+D| | END | HOME | - * ,------|------|------| |------+--------+------. - * | | | SUPER| | PgUp | | | - * | BACK | CTRL |------| |------| Enter |SPACE | - * | SPACE| | ALT | | PgDn | | | - * `--------------------' `----------------------' - */ -[BASE] = KEYMAP( // layer 0 : default - // left hand - TG(HEB), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSFT), - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(NUM), - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, TG(NAV), - MO(NUM), LCTL(KC_C), LCTL(KC_X), LCTL(KC_V), MO(NAV), - KC_DEL, KC_TRNS, - KC_LGUI, - KC_BSPC, KC_LCTL, KC_LALT, - // right hand - KC_GRV, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - KC_TRNS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, - KC_LBRC, KC_RBRC, KC_BSLS, LCTL(KC_Z), LCTL(KC_A), - KC_END, KC_HOME, - KC_PGUP, - KC_PGDN, KC_ENT, KC_SPC - ), -/* Keymap 1: Hebrew Dvorak layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - | - * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------| - * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A | - * `----------------------------------' `------------------------------------' - * ,-------------. ,-------------. -* | DEL | WIN+D| | END | HOME | - * ,------|------|------| |------+--------+------. - * | | | SUPER| | PgUp | | | - * | BACK | CTRL |------| |------| Enter |SPACE | - * | SPACE| | ALT | | PgDn | | | - * `--------------------' `----------------------' - */ -[HEB] = KEYMAP( // layer 0 : default - // left hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_W, KC_QUOT, KC_SLSH, KC_R, KC_T, KC_TRNS, - KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, 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_TRNS, - KC_TRNS, KC_Y, KC_U, KC_E, KC_O, KC_P, KC_TRNS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_MPLY, - KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_I, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS - ), - /* Keymap 2: Numpad Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | NMLK | P/ | P* | P- | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | 7 | 8 | 9 | P+ | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | 4 | 5 | 6 | P+ | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | 1 | 2 | 3 | ENTER| | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | 0 | . | ENTER| | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -[NUM] = KEYMAP( - // left 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_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TRNS, - KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, - KC_P0, KC_P0, KC_DOT, KC_PENT, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 3: Arrows and Mouse Navigation Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | MUTE | F6 | F7 | F8 | F9 | F10 | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | F11 | | VOL | | | UP | | | | - * |--------+------+------+------+------+------| | | + |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | LEFT | DOWN | RIGHT| | | - * |--------+------+------+------+------+------| F12 | | VOL |------+------+------+------+------+--------| - * | | | | | | | | | - | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | Lclk | Rclk | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | PL/PS| | - * ,------|------|------| |------+------+------. - * | | | | | NEXT | | | - * | | |------| |------| | | - * | | | | | PREV | | | - * `--------------------' `--------------------' - */ -[NAV] = KEYMAP( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_F11, - 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_F12, - 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_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, - KC_VOLU, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_MPLY, - KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, - KC_MPLY, KC_TRNS, - KC_MNXT, - KC_MPRV, KC_TRNS, KC_TRNS -), -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(NAV) // 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; - case 3: - ergodox_right_led_3_on(); - break; - default: - // none - break; - } - -}; diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md b/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md deleted file mode 100644 index 9f0b45371e..0000000000 --- a/keyboards/ergodox/keymaps/dvorak-hebrew/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -#Dvorak-Hebrew - -* This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. - -* The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. - -* these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. - -![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png?raw=true) diff --git a/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png b/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png deleted file mode 100644 index 904391f222..0000000000 Binary files a/keyboards/ergodox/keymaps/dvorak-hebrew/twentylives.png and /dev/null differ diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c new file mode 100644 index 0000000000..ae0e9c87e7 --- /dev/null +++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c @@ -0,0 +1,213 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + +/* Keymap 0: Basic Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A | + * `----------------------------------' `------------------------------------' + * ,-------------. ,-------------. +* | DEL | | | END | HOME | + * ,------|------|------| |------+--------+------. + * | | | SUPER| | PgUp | | | + * | BACK | CTRL |------| |------| Enter |SPACE | + * | SPACE| | ALT | | PgDn | | | + * `--------------------' `----------------------' + */ +[0] = KEYMAP( + TG(1), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSHIFT), + KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(3), + KC_ESCAPE, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSHIFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, TG(2), + MO(3), KC_COPY, KC_CUT, KC_PASTE, MO(2), + KC_DELETE, KC_TRNS, + KC_LGUI, + KC_BSPACE,CTL_T(KC_NO),KC_LALT, + + KC_TILD, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, + KC_TRNS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSHIFT, + KC_LBRACKET, KC_RBRACKET, KC_BSLASH, KC_UNDO, LCTL(KC_A), + KC_END, KC_HOME, + KC_PGUP, + KC_PGDOWN, KC_ENTER, KC_SPACE +), + + /* Keymap 1: Hebrew layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[1] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_W, KC_QUOTE, KC_SLASH, KC_R, KC_T, KC_TRNS, + KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_Y, KC_U, KC_E, KC_O, KC_P, KC_TRNS, + KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_TRNS, + KC_TRNS, KC_N, KC_M, KC_COMMA, KC_DOT, KC_I, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Arrows ,Mouse Navigation and F Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | F11 | | | UP | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | LEFT | DOWN | RIGHT| | | + * |--------+------+------+------+------+------| | | F12 |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Lclk | Rclk | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[2] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_F11, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, + KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MS_BTN1, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + + /* Keymap 3: Numpad Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | NMLK | P/ | P* | P- | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | 7 | 8 | 9 | P+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| | 4 | 5 | 6 | P+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | 1 | 2 | 3 | ENTER| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | 0 | . | ENTER| | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[3] = KEYMAP( + // Left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_LOCKING_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS, + KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_ENTER, KC_TRNS, + KC_KP_0, KC_KP_0, KC_KP_DOT, KC_ENTER, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(1) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + } + return MACRO_NONE; +}; + +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) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + default: + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png new file mode 100644 index 0000000000..82c81dcaed Binary files /dev/null and b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png differ diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png new file mode 100644 index 0000000000..ec8e7494d4 Binary files /dev/null and b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png differ diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md new file mode 100644 index 0000000000..071472fd4f --- /dev/null +++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md @@ -0,0 +1,10 @@ +#Dvorak-Hebrew + +* This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play. + +* The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems. + +* these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. + +![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.png) +![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/keymap2.png) -- cgit v1.2.3 From 464af700eb8c5cc8dd72f36767cc2c0b975a9284 Mon Sep 17 00:00:00 2001 From: 20lives Date: Wed, 19 Oct 2016 20:26:58 +0300 Subject: fix readme --- keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md index 071472fd4f..99b8182f59 100644 --- a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md +++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md @@ -6,5 +6,5 @@ * these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout. -![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/keymap.png) -![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/dvorak-hebrew/keymap2.png) +![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png) +![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png) -- cgit v1.2.3 From 6e003b1e3fa844cfde0069004e755aae7a9539f3 Mon Sep 17 00:00:00 2001 From: Artyom Mironov Date: Wed, 19 Oct 2016 23:45:55 +0300 Subject: add programmer dvorak keymap --- quantum/keymap_extras/keymap_dvp.h | 82 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 quantum/keymap_extras/keymap_dvp.h diff --git a/quantum/keymap_extras/keymap_dvp.h b/quantum/keymap_extras/keymap_dvp.h new file mode 100644 index 0000000000..83f49a52b5 --- /dev/null +++ b/quantum/keymap_extras/keymap_dvp.h @@ -0,0 +1,82 @@ +#ifndef KEYMAP_DVP_H +#define KEYMAP_DVP_H + +#include "keymap.h" + +// Normal characters +#define DP_DLR KC_GRV +#define DP_AMPR KC_1 +#define DP_LBRC KC_2 +#define DP_LCBR KC_3 +#define DP_RCBR KC_4 +#define DP_LPRN KC_5 +#define DP_EQL KC_6 +#define DP_ASTR KC_7 +#define DP_RPRN KC_8 +#define DP_PLUS KC_9 +#define DP_RBRC KC_0 +#define DP_EXLM KC_MINS +#define DP_HASH KC_EQL + +#define DP_SCLN KC_Q +#define DP_COMM KC_W +#define DP_DOT KC_E +#define DP_P KC_R +#define DP_Y KC_T +#define DP_F KC_Y +#define DP_G KC_U +#define DP_C KC_I +#define DP_R KC_O +#define DP_L KC_P +#define DP_SLSH KC_LBRC +#define DP_AT KC_RBRC +#define DP_BSLS KC_BSLS + +#define DP_A KC_A +#define DP_O KC_S +#define DP_E KC_D +#define DP_U KC_F +#define DP_I KC_G +#define DP_D KC_H +#define DP_H KC_J +#define DP_T KC_K +#define DP_N KC_L +#define DP_S KC_SCLN +#define DP_MINS KC_QUOT + +#define DP_QUOT KC_Z +#define DP_Q KC_X +#define DP_J KC_C +#define DP_K KC_V +#define DP_X KC_B +#define DP_B KC_N +#define DP_M KC_M +#define DP_W KC_COMM +#define DP_V KC_DOT +#define DP_Z KC_SLSH + +// Shifted characters +#define DP_TILD LSFT(DP_DLR) +#define DP_PERC LSFT(DP_AMPR) +#define DP_7 LSFT(DP_LBRC) +#define DP_5 LSFT(DP_LCBR) +#define DP_3 LSFT(DP_RCBR) +#define DP_1 LSFT(DP_LPRN) +#define DP_9 LSFT(DP_EQL) +#define DP_0 LSFT(DP_ASTR) +#define DP_2 LSFT(DP_RPRN) +#define DP_4 LSFT(DP_PLUS) +#define DP_6 LSFT(DP_RBRC) +#define DP_8 LSFT(DP_EXLM) +#define DP_GRV LSFT(DP_HASH) + +#define DP_COLN LSFT(DP_SCLN) +#define DP_LABK LSFT(DP_COMM) +#define DP_RABK LSFT(DP_DOT) +#define DP_QUES LSFT(DP_SLSH) +#define DP_CIRC LSFT(DP_AT) +#define DP_PIPE LSFT(DP_BSLS) +#define DP_UNDS LSFT(DP_MINS) +#define DP_DQUO LSFT(DP_QUOT) + +#endif -- cgit v1.2.3 From 7090c99adfef29863b0c114c55003c4b7fa77a6a Mon Sep 17 00:00:00 2001 From: twentylives Date: Thu, 20 Oct 2016 11:07:14 +0300 Subject: fixed base layer = key --- keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c index ae0e9c87e7..720714c984 100644 --- a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c +++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c @@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LGUI, KC_BSPACE,CTL_T(KC_NO),KC_LALT, - KC_TILD, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TILD, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQUAL, KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_TRNS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSHIFT, -- cgit v1.2.3 From 8727976a1a6d0a1e6749f093828b23265c59a39a Mon Sep 17 00:00:00 2001 From: twentylives Date: Fri, 21 Oct 2016 12:13:44 +0300 Subject: fixed copy-cut-paste buttons --- .../ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c index 720714c984..c9dc43c561 100644 --- a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c +++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c @@ -28,11 +28,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `----------------------' */ [0] = KEYMAP( - TG(1), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSHIFT), - KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(3), - KC_ESCAPE, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSHIFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, TG(2), - MO(3), KC_COPY, KC_CUT, KC_PASTE, MO(2), + TG(1), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSHIFT), + KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(3), + KC_ESCAPE, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSHIFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, TG(2), + MO(3), LCTL(KC_C), LCTL(KC_X), LCTL(KC_V), MO(2), KC_DELETE, KC_TRNS, KC_LGUI, KC_BSPACE,CTL_T(KC_NO),KC_LALT, -- cgit v1.2.3 From 5fa44c594f8d1ad9dbfe93060a3370fc971d93dd Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 22 Oct 2016 18:47:51 +0700 Subject: Update priyadi's keymap for Planck; added readme --- keyboards/planck/keymaps/priyadi/keymap.c | 142 +++++++++++++++++------------ keyboards/planck/keymaps/priyadi/readme.md | 12 ++- 2 files changed, 97 insertions(+), 57 deletions(-) diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c index dd8652d348..4b20f71f2b 100644 --- a/keyboards/planck/keymaps/priyadi/keymap.c +++ b/keyboards/planck/keymaps/priyadi/keymap.c @@ -5,24 +5,24 @@ #include "action_layer.h" #ifdef AUDIO_ENABLE #include "audio.h" + #include "musical_notes.h" #endif #include "eeconfig.h" #include "process_unicode.h" +#include "quantum.h" extern keymap_config_t keymap_config; -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QWERTY 0 -#define _COLEMAK 1 -#define _WORKMAN 2 -#define _PUNC 9 -#define _NUM 10 -#define _FUNC 11 -#define _EMOJI 12 -#define _ADJUST 16 +enum layers { + _QWERTY, + _COLEMAK, + _WORKMAN, + _PUNC, + _NUM, + _FUNC, + _EMOJI, + _GUI, +}; enum planck_keycodes { // layouts @@ -35,6 +35,7 @@ enum planck_keycodes { NUM, FUNC, EMOJI, + GUI, // os switchers LINUX, @@ -43,10 +44,12 @@ enum planck_keycodes { }; // Fillers to make layering clearer + #define _______ KC_TRNS #define XXXXXXX KC_NO // unicode map + enum unicode_name { GRIN, // grinning face 😊 TJOY, // tears of joy 😂 @@ -147,6 +150,18 @@ const uint32_t PROGMEM unicode_map[] = { [SKULL] = 0x1F480, }; + +// hybrid shift - = +// #undef KC_LSFT +// #define KC_LSFT MT(MOD_LSFT, KC_MINS) +// #undef KC_RSFT +// #define KC_RSFT MT(MOD_LSFT, KC_EQL) + + +// hybrid right-gui & scroll lock (mapped to Compose in OS) +#undef KC_RCTL +#define KC_RCTL MT(MOD_LCTL, KC_SLCK) + // keymaps const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -189,11 +204,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Workman * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O |Enter | + * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | + * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | * `-----------------------------------------------------------------------------------' @@ -207,56 +222,56 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Punc * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ` | | | | | | | | _ | + | { | } | " | + * | | | \ | - | = | < | > | ( | ) | ' | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | \ | - | = | [ | ] | ' | + * | | | | | _ | + | { | } | [ | ] | " | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | < | > | | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_PUNC] = { - {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_GRV, _______, _______, _______, _______, _______, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_DQUO}, - {_______, _______, _______, _______, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT}, - {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, KC_LABK, KC_RABK, _______} + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV }, + {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* Num * ,-----------------------------------------------------------------------------------. - * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | @ | A | B | C | [ | ] | 4 | 5 | 6 | : |Enter | + * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | D | E | F | & | # | 1 | 2 | 3 | | | + * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | x | | | | 0 | , | . | | | + * | | | | x | | | 0 | , | . | + | - | * `-----------------------------------------------------------------------------------' */ [_NUM] = { - {_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_COLN, KC_BSLS}, - {_______, _______, S(KC_D), S(KC_E), S(KC_F), KC_AMPR, KC_HASH, KC_1, KC_2, KC_3, _______, _______}, - {_______, _______, KC_X, _______, _______, KC_SPC, KC_SPC, KC_0, KC_COMM,KC_KP_DOT,_______, _______} + {KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT}, + {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR}, + {_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS} }, /* Func * ,-----------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Bksp | + * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | F5 | F6 | F7 | F8 | | | Left | Down | Right| PgDn | | + * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F9 | F10 | F11 | F12 | | | | Home | End | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | |Print | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {_______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_BSPC}, - {_______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______}, - {_______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_HOME, KC_END, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,KC_PSCREEN} + {XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL}, + {XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS}, + {_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, /* Emoji @@ -274,27 +289,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)}, {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)}, {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)}, - { X(POO), X(EYES),X(HUNRD),X(TONGU),X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)} + { X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)} }, -/* Adjust +/* GUI * ,-----------------------------------------------------------------------------------. - * | | |Linux | Win | OSX | | |Qwerty|Colemk|Workmm| | | + * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | + * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | Win | | Prev | Play | Next | | | | | | |Colmak| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | OSX | | | | | BL- | BL+ | | | | |Workmn| * `-----------------------------------------------------------------------------------' */ -[_ADJUST] = { - {_______, _______, LINUX, WIN, OSX, _______, _______, QWERTY, COLEMAK, WORKMAN, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} -} - +[_GUI] = { + {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______}, + { LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY}, + { WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK}, + { OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, _______, _______, WORKMAN} +}, }; @@ -304,6 +318,10 @@ float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_workman[][2] = SONG(DVORAK_SOUND); float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2)); #endif void persistant_default_layer_set(uint16_t default_layer) { @@ -312,6 +330,9 @@ void persistant_default_layer_set(uint16_t default_layer) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // faux clicky + if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); + switch (keycode) { case QWERTY: if (record->event.pressed) { @@ -343,20 +364,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case PUNC: if (record->event.pressed) { layer_on(_PUNC); - update_tri_layer(_PUNC, _EMOJI, _ADJUST); + update_tri_layer(_PUNC, _EMOJI, _GUI); } else { layer_off(_PUNC); - update_tri_layer(_PUNC, _EMOJI, _ADJUST); + update_tri_layer(_PUNC, _EMOJI, _GUI); } return false; break; case EMOJI: if (record->event.pressed) { layer_on(_EMOJI); - update_tri_layer(_PUNC, _EMOJI, _ADJUST); + update_tri_layer(_PUNC, _EMOJI, _GUI); } else { layer_off(_EMOJI); - update_tri_layer(_PUNC, _EMOJI, _ADJUST); + update_tri_layer(_PUNC, _EMOJI, _GUI); } return false; break; @@ -378,14 +399,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case LINUX: set_unicode_input_mode(UC_LNX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_linux, false, 0); + #endif return false; break; case WIN: set_unicode_input_mode(UC_WIN); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_windows, false, 0); + #endif return false; break; case OSX: set_unicode_input_mode(UC_OSX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_osx, false, 0); + #endif return false; break; } diff --git a/keyboards/planck/keymaps/priyadi/readme.md b/keyboards/planck/keymaps/priyadi/readme.md index de2f25e537..99bdd9d9b6 100644 --- a/keyboards/planck/keymaps/priyadi/readme.md +++ b/keyboards/planck/keymaps/priyadi/readme.md @@ -1 +1,11 @@ -# Priyadi's Planck Layout \ No newline at end of file +# Priyadi's Planck Layout + +Features: + +- Supports QWERTY, Colemak and Workman layouts. +- Cursor and nav cluster on home row. +- Hybrid number row and numpad, located on home row. +- Number layer supports hexadecimal input. +- Left and right side modifiers. +- Emoji layer. An entire layer filled with common emojis. +- Faux-clickey (poor man's replacement for Cherry blue switches) \ No newline at end of file -- cgit v1.2.3 From 53a2bf92159e76ed44b675b1c97f20b782679e7f Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 22 Oct 2016 22:22:34 +0800 Subject: added dvorak programmer layout --- .gitignore | 3 +- .../ergodox/keymaps/dvorak_programmer/keymap.c | 380 +++++++++++++++++++++ 2 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer/keymap.c diff --git a/.gitignore b/.gitignore index 1abaeb2177..f66a961fd1 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ CMakeLists.txt .browse.VC.db* *.stackdump util/Win_Check_Output.txt -.vscode \ No newline at end of file +.vscode +.stfolder diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c new file mode 100644 index 0000000000..82182df0d3 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -0,0 +1,380 @@ + +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "action_code.h" + +#define BASE 0 // default layer +#define SHELL_NAV 1 +#define KEY_NAV 3 // key navigation layer +#define KEY_SEL 4 // key selection layer +#define NUMBER 5 // number layer +#define SYMBOL 6 +#define BRACKETS 7 +#define SHORTCUTS 8 + +// macros +#define MC_COPY_LINE 0 +#define MC_CUT_LINE 1 +#define MC_PASTE_LINE 2 +#define MC_NEW_SEARCH_TAB 3 +#define SCREEN_TAB_LEFT 4 +#define SCREEN_TAB_RIGHT 5 +#define SCREEN_NEW_TAB 6 +#define SWITCH_NDS 7 +#define SCREEN_COPY_MODE 8 +#define SCREEN_PASTE 9 +#define OPEN_CLOSE_PAREN 10 +#define OPEN_CLOSE_BRACKET 11 +#define OPEN_CLOSE_CURLY 12 +#define OPEN_CLOSE_SINGLE_QUOTE 13 +#define OPEN_CLOSE_DOUBLE_QUOTE 14 +#define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 15 +#define SEMICOLON_NEWLINE 16 + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(KEY_NAV), // FN1 - keynav layer + [2] = ACTION_LAYER_TAP_TOGGLE(NUMBER), // FN2 - number layer + [3] = ACTION_MODS_ONESHOT(MOD_LSFT), // FN3 - shift modifier / oneshot + [4] = ACTION_MODS_ONESHOT(MOD_LCTL), // FN4 - ctrl modifier / oneshot + [5] = ACTION_MODS_ONESHOT(MOD_LALT), // FN5 - alt modifier / oneshot +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// base layer +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), + MO(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I, + KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV), + OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER), + // thumb cluster + MO(BRACKETS), RCTL(KC_S), + RCTL(KC_DEL), + KC_BSPC,RCTL(KC_BSPC),KC_DEL, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, + KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_FN3, + // lower keys - browser tab control + RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), + // thumb cluster + LALT(KC_LEFT), LALT(KC_RIGHT), + KC_END, + KC_CAPSLOCK,KC_ENT, KC_SPC + ), + + +// shell navigation layer +[SHELL_NAV] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // bottom row + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // thumb cluster + KC_TRNS,KC_TRNS, + LALT(KC_D), + KC_TRNS,RCTL(KC_W),KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, LALT(KC_D), RCTL(KC_R), + LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), LALT(KC_DOT), + RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), HYPR(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND), + // bottom row + M(SCREEN_TAB_LEFT), M(SCREEN_TAB_RIGHT), M(SCREEN_NEW_TAB), KC_TRNS, KC_TRNS, + // thumb cluster + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + + +// key navigation layer +[KEY_NAV] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // bottom row + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // thumb cluster + 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_PGDN, KC_HOME, KC_UP, KC_END, KC_PGUP, M(MC_COPY_LINE), + RCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, RCTL(KC_RIGHT), M(MC_CUT_LINE), + KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS, M(MC_PASTE_LINE), + // bottom row + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + // thumb cluster + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +// key selection layer +[KEY_SEL] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // bottom row + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // thumb cluster + 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, + RSFT(KC_PGUP), RSFT(KC_PGDN), RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP), M(MC_COPY_LINE), + RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), M(MC_CUT_LINE), + RSFT(KC_PGDN), KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS, M(MC_PASTE_LINE), + // bottom row + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + // thumb cluster + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +// number layer +[NUMBER] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // bottom row + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + // thumb cluster + 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_PLUS, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS, + KC_MINS, KC_4, KC_5, KC_6, KC_SLSH, KC_TRNS, + KC_TRNS, KC_EQUAL, KC_1, KC_2, KC_3, KC_COLN, KC_TRNS, + // bottom row + KC_0, KC_DOT, KC_COMMA, KC_TRNS, KC_TRNS, + // thumb cluster + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + + +[SYMBOL] = KEYMAP( + // left hand + KC_NO,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS,KC_TRNS, M(OPEN_CLOSE_PAREN), KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, M(OPEN_CLOSE_BRACKET), KC_LBRC, KC_RBRC, M(OPEN_CLOSE_DOUBLE_QUOTE), + KC_TRNS,M(SEMICOLON_NEWLINE),M(OPEN_CLOSE_CURLY), KC_LCBR, KC_RCBR, M(OPEN_CLOSE_SINGLE_QUOTE),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_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS, + KC_MINS, KC_DLR, KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS, + KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT, KC_HASH, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +[BRACKETS] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, + KC_TRNS, M(OPEN_CLOSE_PAREN), KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS, + M(OPEN_CLOSE_BRACKET), KC_LBRC, KC_RBRC, M(OPEN_CLOSE_DOUBLE_QUOTE), KC_TRNS, KC_TRNS, + KC_TRNS, M(OPEN_CLOSE_CURLY), KC_LCBR, KC_RCBR, M(OPEN_CLOSE_SINGLE_QUOTE), KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + + +[SHORTCUTS] = KEYMAP( + // left hand + KC_NO, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), HYPR(KC_F6), + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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 + HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), HYPR(KC_F11), HYPR(KC_F12), M(SWITCH_NDS), + KC_TRNS, HYPR(KC_A), HYPR(KC_B), HYPR(KC_C), HYPR(KC_D), HYPR(KC_E), HYPR(KC_F), + HYPR(KC_G), HYPR(KC_H), HYPR(KC_I), HYPR(KC_J), HYPR(KC_K), HYPR(KC_L), + KC_TRNS, HYPR(KC_M), HYPR(KC_N), HYPR(KC_O), HYPR(KC_P), HYPR(KC_Q), HYPR(KC_R), + RCTL(KC_LBRC), RCTL(KC_RBRC),KC_TRNS, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + + +}; + + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case MC_COPY_LINE: + if (record->event.pressed) { + return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(C), U(LCTL), END); + } + break; + case MC_CUT_LINE: + if (record->event.pressed) { + return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(X), U(LCTL), END); + } + break; + case MC_PASTE_LINE: + if (record->event.pressed) { + return MACRO( T(END), T(ENTER), D(LCTL), T(V), U(LCTL), END); + } + break; + case MC_NEW_SEARCH_TAB: + if (record->event.pressed) { + return MACRO( D(LCTL), T(T), T(K), U(LCTL), END); + } + break; + case SCREEN_TAB_LEFT: + if (record->event.pressed) { + return MACRO( D(LCTL), T(A), U(LCTL), T(P), END); + } + break; + case SCREEN_TAB_RIGHT: + if (record->event.pressed) { + return MACRO( D(LCTL), T(A), U(LCTL), T(N), END); + } + break; + case SCREEN_NEW_TAB: + if (record->event.pressed) { + return MACRO( D(LCTL), T(A), U(LCTL), T(C), END); + } + break; + case SCREEN_COPY_MODE: + if (record->event.pressed) { + return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END); + } + break; + case SCREEN_PASTE: + if (record->event.pressed) { + return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END); + } + break; + case SWITCH_NDS: + if (record->event.pressed) { + return MACRO( D(LSFT), T(F11), U(LSFT), W(500), D(LALT), T(TAB), U(LALT), END); + } + break; + case OPEN_CLOSE_PAREN: + if (record->event.pressed) { + return MACRO( D(LSFT), T(LPRN), T(RPRN), U(LSFT), T(LEFT), END); + } + break; + case OPEN_CLOSE_BRACKET: + if (record->event.pressed) { + return MACRO( T(LBRC), T(RBRC), T(LEFT), END); + } + break; + case OPEN_CLOSE_CURLY: + if (record->event.pressed) { + return MACRO( D(LSFT), T(LCBR), T(RCBR), U(LSFT), T(LEFT), END); + } + break; + case OPEN_CLOSE_SINGLE_QUOTE: + if (record->event.pressed) { + return MACRO( T(QUOT), T(QUOT), T(LEFT), END); + } + break; + case OPEN_CLOSE_DOUBLE_QUOTE: + if (record->event.pressed) { + return MACRO( D(LSFT), T(QUOT), T(QUOT), U(LSFT), T(LEFT), END); + } + break; + case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND: + if (record->event.pressed) { + return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END); + } + break; + case SEMICOLON_NEWLINE: + if (record->event.pressed) { + return MACRO( T(END), T(SCLN), T(ENTER), END); + } + break; + + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + + return; +}; + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1< Date: Sat, 22 Oct 2016 22:29:05 +0800 Subject: change include files --- keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index 82182df0d3..1b2175512e 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -1,5 +1,6 @@ -#include "ergodox_ez.h" +#include "ergodox.h" +#include "led.h" #include "debug.h" #include "action_layer.h" #include "action_code.h" -- cgit v1.2.3 From e0c9ec54ddb5e7c26378e8742790140a90bd7bcd Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 22 Oct 2016 22:39:24 +0800 Subject: add tap-dance support, make right shift double-tap=caplock --- keyboards/ergodox/keymaps/dvorak_programmer/Makefile | 2 ++ keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer/Makefile diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile new file mode 100644 index 0000000000..20364897b6 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile @@ -0,0 +1,2 @@ +SLEEP_LED_ENABLE=no +TAP_DANCE_ENABLE = yes diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index 1b2175512e..ebc88c3d39 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -42,6 +42,19 @@ const uint16_t PROGMEM fn_actions[] = { [5] = ACTION_MODS_ONESHOT(MOD_LALT), // FN5 - alt modifier / oneshot }; +//Tap Dance Declarations +enum { + TD_SHIFT_CAPSLOCK = 0 +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_SHIFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK) +// Other declarations would go here, separated by commas, if you have them +}; + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // base layer [BASE] = KEYMAP( // layer 0 : default @@ -59,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_FN3, + KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, TD(TD_SHIFT_CAPSLOCK), // lower keys - browser tab control RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), // thumb cluster -- cgit v1.2.3 From 97e31068482c925eb2a193cf3babac41796e244b Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sun, 23 Oct 2016 00:11:16 +0800 Subject: type brackets in symbol layer, using bottom row --- keyboards/ergodox/keymaps/dvorak_programmer/Makefile | 6 ++++++ keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile index 20364897b6..1fd6cb9ffd 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile +++ b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile @@ -1,2 +1,8 @@ +BOOTMAGIC_ENABLE=no +COMMAND_ENABLE=no SLEEP_LED_ENABLE=no +FORCE_NKRO ?= yes +DEBUG_ENABLE = no +CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes +MOUSEKEY_ENABLE = no diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index ebc88c3d39..ac876c7c43 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -44,15 +44,11 @@ const uint16_t PROGMEM fn_actions[] = { //Tap Dance Declarations enum { - TD_SHIFT_CAPSLOCK = 0 + TD_SHIFT_CAPSLOCK = 0, + TD_BRK_LEFT = 1, + TD_BRK_RIGHT = 2 }; -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_SHIFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK) -// Other declarations would go here, separated by commas, if you have them -}; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -203,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS, KC_MINS, KC_DLR, KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS, KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT, KC_HASH, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_LBRC, KC_RBRC, TD(TD_BRK_LEFT), TD(TD_BRK_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS @@ -365,6 +361,14 @@ void led_set_user(uint8_t usb_led) { } } +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_SHIFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK), + [TD_BRK_LEFT] = ACTION_TAP_DANCE_DOUBLE (KC_LPRN, KC_LCBR), + [TD_BRK_RIGHT] = ACTION_TAP_DANCE_DOUBLE (KC_RPRN, KC_RCBR) + +}; + + // Runs constantly in the background, in a loop. void matrix_scan_user(void) { -- cgit v1.2.3 From 64ac74cab65c364a6eab33bd602eb4c3f594930c Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sun, 23 Oct 2016 00:44:34 +0800 Subject: remove brackets layer, replace a few shortcuts on thumb cluster --- .../ergodox/keymaps/dvorak_programmer/keymap.c | 43 +++++++--------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index ac876c7c43..ef22b7096d 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -11,8 +11,7 @@ #define KEY_SEL 4 // key selection layer #define NUMBER 5 // number layer #define SYMBOL 6 -#define BRACKETS 7 -#define SHORTCUTS 8 +#define SHORTCUTS 7 // macros #define MC_COPY_LINE 0 @@ -32,6 +31,7 @@ #define OPEN_CLOSE_DOUBLE_QUOTE 14 #define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 15 #define SEMICOLON_NEWLINE 16 +#define END_NEWLINE 17 const uint16_t PROGMEM fn_actions[] = { @@ -61,8 +61,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV), OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER), // thumb cluster - MO(BRACKETS), RCTL(KC_S), - RCTL(KC_DEL), + RCTL(KC_F), RCTL(KC_S), + RCTL(KC_DEL), KC_BSPC,RCTL(KC_BSPC),KC_DEL, // right hand KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // lower keys - browser tab control RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), // thumb cluster - LALT(KC_LEFT), LALT(KC_RIGHT), - KC_END, - KC_CAPSLOCK,KC_ENT, KC_SPC + M(SEMICOLON_NEWLINE), M(END_NEWLINE), + KC_TRNS, + KC_TRNS,KC_ENT, KC_SPC ), @@ -205,28 +205,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS ), -[BRACKETS] = KEYMAP( - // left 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_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, - KC_TRNS, M(OPEN_CLOSE_PAREN), KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS, - M(OPEN_CLOSE_BRACKET), KC_LBRC, KC_RBRC, M(OPEN_CLOSE_DOUBLE_QUOTE), KC_TRNS, KC_TRNS, - KC_TRNS, M(OPEN_CLOSE_CURLY), KC_LCBR, KC_RCBR, M(OPEN_CLOSE_SINGLE_QUOTE), KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - - [SHORTCUTS] = KEYMAP( // left hand KC_NO, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), HYPR(KC_F6), @@ -242,7 +220,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, HYPR(KC_A), HYPR(KC_B), HYPR(KC_C), HYPR(KC_D), HYPR(KC_E), HYPR(KC_F), HYPR(KC_G), HYPR(KC_H), HYPR(KC_I), HYPR(KC_J), HYPR(KC_K), HYPR(KC_L), KC_TRNS, HYPR(KC_M), HYPR(KC_N), HYPR(KC_O), HYPR(KC_P), HYPR(KC_Q), HYPR(KC_R), - RCTL(KC_LBRC), RCTL(KC_RBRC),KC_TRNS, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), + LALT(KC_LEFT),LALT(KC_RIGHT),KC_F5, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS @@ -342,6 +320,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO( T(END), T(SCLN), T(ENTER), END); } break; + case END_NEWLINE: + if (record->event.pressed) { + return MACRO( T(END), T(ENTER), END); + } + break; } return MACRO_NONE; -- cgit v1.2.3 From 14ac397d5db1758b5dda87571415754f9c267987 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sun, 23 Oct 2016 00:47:58 +0800 Subject: add up/down keys on thumb clusters --- keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index ef22b7096d..0539374f87 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -73,8 +73,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), // thumb cluster M(SEMICOLON_NEWLINE), M(END_NEWLINE), - KC_TRNS, - KC_TRNS,KC_ENT, KC_SPC + KC_UP, + KC_DOWN,KC_ENT, KC_SPC ), -- cgit v1.2.3 From a625c2201ab24d0417583c55694555353021d204 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sat, 22 Oct 2016 21:29:11 +0200 Subject: Update readme to reflect changes --- keyboards/preonic/keymaps/jacwib/readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index 0660312353..3d14233485 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -1,3 +1,9 @@ # Jacwib's preonic keymap. Designed for use with a swedish language. + +Version 1.1: + +Added PgUp and PgDn keys. + +Also added "Mac mode". Unsure if it even works. Might however be able to test soon. -- cgit v1.2.3 From 83b214988525bc30011d2ef0158a5a10534c2158 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sat, 22 Oct 2016 21:29:47 +0200 Subject: Update keymap to reflect 1.1 changes. --- keyboards/preonic/keymaps/jacwib/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index cf441bf309..9f64b90654 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | | |VolDwn| | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | |Bspc | | | | | | + * | | | | | | |Bspc | | |PgDn |PgUp | | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { @@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)}, {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______} }, /* Raise @@ -76,11 +76,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | |Mouse^| | | | |ScrlUp| | | ^ | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | " | + * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | ¨ | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | > | | | | | | |ScrlDown| : | ; | _ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | |Bspc | | | | | | | + * | | | | | |Bspc | | | | PgDn | PgUp | | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { @@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC}, {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT}, {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS}, - {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______} }, /* Adjust (Lower + Raise) @@ -97,18 +97,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | Reset| | | | | | | | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | | | | | | | | |Rsft | + * | | | | | | | | | | | |Rshift| * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |MusOn |MusOff| | | | | | | | | Reset| + * | |MusOn |MusOff| | | | |NrmMode|MacMode| | | Reset| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_ADJUST] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT}, - {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET }, + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, AG_SWAP, AG_NORM, _______, _______, RESET }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } -- cgit v1.2.3 From dbcbd8ee3c699b37e0326a58c28503ee156c63cf Mon Sep 17 00:00:00 2001 From: jacwib Date: Sat, 22 Oct 2016 21:32:39 +0200 Subject: Update readme to reflect 1.1 changes. --- keyboards/preonic/keymaps/jacwib/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index 3d14233485..229fa061da 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -6,4 +6,4 @@ Version 1.1: Added PgUp and PgDn keys. -Also added "Mac mode". Unsure if it even works. Might however be able to test soon. +Also added "Mac mode". Unsure if it works. Will test asap. -- cgit v1.2.3 From e7d5dc89f2890007d776f6b613dc9deb473cff22 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 23 Oct 2016 05:36:26 +0700 Subject: UNICODE_MAP: remove 5 char limit; ignore leading zeroes; handle OS limitations --- quantum/process_keycode/process_unicode.c | 34 ++++++++++++++++++++++++------- readme.md | 10 +++++++-- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 37dd471ffd..a71af5437b 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -83,22 +83,42 @@ __attribute__((weak)) const uint32_t PROGMEM unicode_map[] = { }; -// 5 digit max because of linux limitation void register_hex32(uint32_t hex) { - for(int i = 4; i >= 0; i--) { + uint8_t onzerostart = 1; + for(int i = 7; i >= 0; i--) { + if (i <= 3) { + onzerostart = 0; + } uint8_t digit = ((hex >> (i*4)) & 0xF); - register_code(hex_to_keycode(digit)); - unregister_code(hex_to_keycode(digit)); + if (digit == 0) { + if (onzerostart == 0) { + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + } + } else { + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + onzerostart = 0; + } } } +__attribute__((weak)) +void unicode_map_input_error() {} + bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { const uint32_t* map = unicode_map; uint16_t index = keycode & 0x7FF; - unicode_input_start(); - register_hex32(pgm_read_dword_far(&map[index])); - unicode_input_finish(); + uint32_t code = pgm_read_dword_far(&map[index]); + if ((code > 0xFFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) { + // when character is out of range supported by the OS + unicode_map_input_error(); + } else { + unicode_input_start(); + register_hex32(code); + unicode_input_finish(); + } } return true; } diff --git a/readme.md b/readme.md index 62d479ff1d..9264f9376f 100644 --- a/readme.md +++ b/readme.md @@ -326,8 +326,14 @@ This allows you to send unicode symbols via `UC()` in your keymap. Only `UNICODEMAP_ENABLE` This allows sending unicode symbols using `X()` in your keymap. Codes -up to 0xFFFFF are supported, including emojis. But you need to maintain a -separate mapping table in your keymap file. +up to 0xFFFFFFFF are supported, including emojis. You will need to maintain +a separate mapping table in your keymap file. + +Known limitations: +- Under Mac OS, only codes up to 0xFFFF are supported. +- Under Linux ibus, only codes up to 0xFFFFF are supported (but anything important is still under this limit for now). + +Characters out of range supported by the OS will be ignored. `BLUETOOTH_ENABLE` -- cgit v1.2.3 From 919caaccb75981ebdbba9630b4d850804ffd8fa0 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sun, 23 Oct 2016 11:44:16 +0800 Subject: adding readme --- keyboards/ergodox/keymaps/dvorak_programmer/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer/README.md diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md new file mode 100644 index 0000000000..a4580fe064 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -0,0 +1,15 @@ +Dvorak Programmer Layout +======================== + +This is a dvorak-only layout. The overall philosophy is that the left hand contains a number of layer-switching shortcuts, and the right hand key codes vary based on the layer selected. + +Layers +------ + +* BASE: this is where you type. +* SHELL_NAV: hold down the Tab key to access shell/terminal navigation shorcuts such as forward/backward word, history, Ctrl+C, screen tab movement. +* KEY_NAV: arrow key movement with backward/forward word support, and copy/paste. +* KEY_SEL: same as above, but every movement shift-selects. +* NUMBER: keypad layer. +* SYMBOL: all the symbols as well as brackets at the bottom. +* SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps. -- cgit v1.2.3 From 4a666c201007eacf13a9031e3c9b156e2e04afe6 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 23 Oct 2016 19:15:33 +0700 Subject: Unicode WinCompose input method --- quantum/process_keycode/process_unicode.c | 5 +++++ quantum/process_keycode/process_unicode.h | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 37dd471ffd..2a991cb393 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -42,6 +42,11 @@ void unicode_input_start (void) { register_code(KC_PPLS); unregister_code(KC_PPLS); break; + case UC_WINC: + register_code(KC_RALT); + unregister_code(KC_RALT); + register_code(KC_U); + unregister_code(KC_U); } wait_ms(UNICODE_TYPE_DELAY); } diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index a6c7e45845..065eeb5f6a 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -3,10 +3,11 @@ #include "quantum.h" -#define UC_OSX 0 -#define UC_LNX 1 -#define UC_WIN 2 -#define UC_BSD 3 +#define UC_OSX 0 // Mac OS X +#define UC_LNX 1 // Linux +#define UC_WIN 2 // Windows 'HexNumpad' +#define UC_BSD 3 // BSD (not implemented) +#define UC_WINC 4 // WinCompose https://github.com/samhocevar/wincompose #ifndef UNICODE_TYPE_DELAY #define UNICODE_TYPE_DELAY 10 -- cgit v1.2.3 From c6f6172fd5dd70b7d82a1c4e0fd2fe1b55571e0c Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 23 Oct 2016 19:35:06 +0700 Subject: Use WinCompose unicode input method instead of HexNumpad --- keyboards/planck/keymaps/priyadi/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c index 4b20f71f2b..6e7f4e7355 100644 --- a/keyboards/planck/keymaps/priyadi/keymap.c +++ b/keyboards/planck/keymaps/priyadi/keymap.c @@ -405,7 +405,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; break; case WIN: - set_unicode_input_mode(UC_WIN); + set_unicode_input_mode(UC_WINC); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_windows, false, 0); #endif -- cgit v1.2.3 From b7611d5037629334183dbab34b39bc35d157316f Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 23 Oct 2016 15:57:36 +0200 Subject: 1.2 update --- keyboards/preonic/keymaps/jacwib/config.h | 1 + keyboards/preonic/keymaps/jacwib/keymap.c | 116 ++++++++++++++++++++++++----- keyboards/preonic/keymaps/jacwib/readme.md | 8 +- 3 files changed, 105 insertions(+), 20 deletions(-) diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h index 23e9e0ed28..b988831207 100644 --- a/keyboards/preonic/keymaps/jacwib/config.h +++ b/keyboards/preonic/keymaps/jacwib/config.h @@ -4,5 +4,6 @@ #include "../../config.h" #define FORCE_NKRO 1 +#define PREVENT_STUCK_MODIFIERS #endif diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 9f64b90654..72ccc86cd2 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -13,13 +13,18 @@ #define _QWERTY 0 #define _LOWER 3 #define _RAISE 4 +#define _MQWERTY 5 +#define _MLOWER 8 +#define _MRAISE 9 #define _ADJUST 16 enum preonic_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, - BACKLIT + MQWERTY, + MLOWER, + MRAISE }; // Fillers to make layering more clear @@ -38,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| < | Z | X | C | V | B | N | M | . | , | - | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | + * | Ctrl | Alt | GUI |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { @@ -46,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM }, {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH}, {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS}, - {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -91,6 +96,69 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______} }, +/* Mac Qwerty + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Å | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| < | Z | X | C | V | B | N | M | . | , | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_MQWERTY] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC}, + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM }, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH}, + {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS}, + {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Mac Lower + * ,-----------------------------------------------------------------------------------. + * | | @ | £ | $ | | | { | [ | ] | } | \ | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | |VolUp | | | ~ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | |LastS |PauseP|NextS | | * | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | |VolDwn| | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | |Bspc | | |PgDn |PgUp | | + * `-----------------------------------------------------------------------------------' + */ +[_MLOWER] = { + {_______, NO_AT, NO_PND, NO_DLR, _______, _______, LSFT(LALT(KC_8)), NO_LBRC, NO_RBRC, LSFT(LALT(KC_9)), LSFT(LALT(KC_7)), KC_DEL}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)}, + {_______, NO_LBRC, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______} +}, + +/* Mac Raise + * ,-----------------------------------------------------------------------------------. + * | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Mouse^| | | | |ScrlUp| | | ^ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | ¨ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | > | | | | | | |ScrlDown| : | ; | _ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | |Bspc | | | | PgDn | PgUp | | + * `-----------------------------------------------------------------------------------' + */ +[_MRAISE] = { + {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS}, + {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC}, + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT}, + {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS}, + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______} +}, + /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | @@ -108,7 +176,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT}, - {_______, MU_ON, MU_OFF, _______, _______, _______, _______, AG_SWAP, AG_NORM, _______, _______, RESET }, + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, TO(0), TO(5), _______, _______, RESET }, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -117,14 +185,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef AUDIO_ENABLE float tone_startup[][2] = { - {NOTE_B5, 20}, - {NOTE_B6, 8}, - {NOTE_DS6, 20}, - {NOTE_B6, 8} + {NOTE_D5, 8}, + {NOTE_E6, 8}, + {NOTE_D6, 8}, + {NOTE_E5, 8} }; -float tone_qwerty[][2] = SONG(QWERTY_SOUND); - float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); @@ -139,9 +205,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif persistant_default_layer_set(1UL<<_QWERTY); } return false; @@ -166,14 +229,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case BACKLIT: + case MQWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_MQWERTY); + } + return false; + break; + case MLOWER: + if (record->event.pressed) { + layer_on(_MLOWER); + update_tri_layer(_MLOWER, _MRAISE, _ADJUST); + } else { + layer_off(_MLOWER); + update_tri_layer(_MLOWER, _MRAISE, _ADJUST); + } + return false; + break; + case MRAISE: if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif + layer_on(_MRAISE); + update_tri_layer(_MLOWER, _MRAISE, _ADJUST); } else { - unregister_code(KC_RSFT); + layer_off(_MRAISE); + update_tri_layer(_MLOWER, _MRAISE, _ADJUST); } return false; break; diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index 229fa061da..8658d6cdd7 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -6,4 +6,10 @@ Version 1.1: Added PgUp and PgDn keys. -Also added "Mac mode". Unsure if it works. Will test asap. +Also added "Mac mode". Unsure if it even works. Might however be able to test soon. + +Version 1.2: + +Changed around alt and super keys. + +Made "Mac mode" function, and tested it! (It works) -- cgit v1.2.3 From 17170ba76d3c94edcf1ab263520238fdb0384774 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sun, 23 Oct 2016 23:00:43 -0500 Subject: Fixed some large keyboard bugs Fixed some bugs relating to keyboards with more than 16 columns. Also added the ability to mask off keyboard matrix bits. --- keyboards/vision_division/config.h | 2 ++ keyboards/vision_division/keymaps/default/keymap.c | 11 +++++++ quantum/matrix.c | 37 +++++++++++++++++++--- readme.md | 1 + tmk_core/common/command.c | 6 ++-- 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index 1f8466a546..93c9606712 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -33,6 +33,8 @@ along with this program. If not, see . /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 +#define MATRIX_MASKED + /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 8622ee5211..3282761c0f 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -142,6 +142,17 @@ enum keyboard_macros { #define ________________ _______, _______ #define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX +const matrix_row_t matrix_mask[MATRIX_ROWS] = +{ +// 1098765432109876543210987654321 + 0b0000000001111111101111011111111, + 0b0000000001111111111111111111111, + 0b0000000001111111111111111111111, + 0b0000000001111111111111111111111, + 0b0000000001010111111111111111111, + 0b0000000001111101111111101011111, +}; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* LAYER = LAYER_QWERTY diff --git a/quantum/matrix.c b/quantum/matrix.c index 3174e07390..ac81794e59 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -26,6 +26,10 @@ along with this program. If not, see . #include "util.h" #include "matrix.h" +#ifdef MATRIX_MASKED +extern const matrix_row_t matrix_mask[]; +#endif + /* Set 0 if debouncing isn't needed */ #ifndef DEBOUNCING_DELAY @@ -218,15 +222,34 @@ bool matrix_is_on(uint8_t row, uint8_t col) inline matrix_row_t matrix_get_row(uint8_t row) { + // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a + // switch blocker installed and the switch is always pressed. +#ifdef MATRIX_MASKED + return matrix[row] & matrix_mask[row]; +#else return matrix[row]; +#endif } void matrix_print(void) { +#if (MATRIX_COLS <= 8) + print("\nr/c 01234567\n"); +#elif (MATRIX_COLS <= 16) print("\nr/c 0123456789ABCDEF\n"); +#elif (MATRIX_COLS <= 32) + print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n"); +#endif + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { phex(row); print(": "); - pbin_reverse16(matrix_get_row(row)); +#if (MATRIX_COLS <= 8) + print_bin_reverse8(matrix_get_row(row)); +#elif (MATRIX_COLS <= 16) + print_bin_reverse16(matrix_get_row(row)); +#elif (MATRIX_COLS <= 32) + print_bin_reverse32(matrix_get_row(row)); +#endif print("\n"); } } @@ -235,7 +258,13 @@ uint8_t matrix_key_count(void) { uint8_t count = 0; for (uint8_t i = 0; i < MATRIX_ROWS; i++) { +#if (MATRIX_COLS <= 8) + count += bitpop(matrix[i]); +#elif (MATRIX_COLS <= 16) count += bitpop16(matrix[i]); +#elif (MATRIX_COLS <= 32) + count += bitpop32(matrix[i]); +#endif } return count; } @@ -259,7 +288,7 @@ static matrix_row_t read_cols(void) matrix_row_t result = 0; #if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_COLS; x++) { + for(int x = 0; x < MATRIX_COLS; x++) { int pin = col_pins[x]; #else for(int x = 0; x < MATRIX_ROWS; x++) { @@ -273,10 +302,10 @@ static matrix_row_t read_cols(void) static void unselect_rows(void) { #if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_ROWS; x++) { + for(int x = 0; x < MATRIX_ROWS; x++) { int pin = row_pins[x]; #else - for(int x = 0; x < MATRIX_COLS; x++) { + for(int x = 0; x < MATRIX_COLS; x++) { int pin = col_pins[x]; #endif _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); diff --git a/readme.md b/readme.md index 62d479ff1d..c460933a70 100644 --- a/readme.md +++ b/readme.md @@ -241,6 +241,7 @@ You can also add extra options at the end of the make command line, after the ta * `make COLOR=false` - turns off color output * `make SILENT=true` - turns off output besides errors/warnings * `make VERBOSE=true` - outputs all of the gcc stuff (not interesting, unless you need to debug) +* `make EXTRAFLAGS=-E` - Preprocess the code without doing any compiling (useful if you are trying to debug #define commands) The make command itself also has some additional options, type `make --help` for more information. The most useful is probably `-jx`, which specifies that you want to compile using more than one CPU, the `x` represents the number of CPUs that you want to use. Setting that can greatly reduce the compile times, especially if you are compiling many keyboards/keymaps. I usually set it to one less than the number of CPUs that I have, so that I have some left for doing other things while it's compiling. Note that not all operating systems and make versions supports that option. diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index f3e1bf6234..5f29bc0b4e 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -379,11 +379,11 @@ static bool command_common(uint8_t code) debug_enable = !debug_enable; if (debug_enable) { print("\ndebug: on\n"); - debug_matrix = true; - debug_keyboard = true; - debug_mouse = true; } else { print("\ndebug: off\n"); + debug_matrix = false; + debug_keyboard = false; + debug_mouse = false; } break; -- cgit v1.2.3 From ef8f6180272c3e112f97a6beb9dd90bece3c2131 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sun, 23 Oct 2016 23:03:26 -0500 Subject: Fixing Line Terminations --- .../ergodox/keymaps/win10_writers-block/config.h | 72 +-- .../ergodox/keymaps/win10_writers-block/keymap.c | 648 ++++++++++----------- .../ergodox/keymaps/win10_writers-block/readme.md | 224 +++---- 3 files changed, 472 insertions(+), 472 deletions(-) diff --git a/keyboards/ergodox/keymaps/win10_writers-block/config.h b/keyboards/ergodox/keymaps/win10_writers-block/config.h index 568a711a86..43259db088 100644 --- a/keyboards/ergodox/keymaps/win10_writers-block/config.h +++ b/keyboards/ergodox/keymaps/win10_writers-block/config.h @@ -1,36 +1,36 @@ -#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ -#define KEYBOARDS_ERGODOX_CONFIG_H_ - -#define MOUSEKEY_DELAY 100 -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 - -#define TAPPING_TOGGLE 1 - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -#define TAPPING_TERM 300 -#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -#ifdef SUBPROJECT_ez - #include "ez/config.h" -#endif -#ifdef SUBPROJECT_infinity - #include "infinity/config.h" -#endif - - -#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ +#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ +#define KEYBOARDS_ERGODOX_CONFIG_H_ + +#define MOUSEKEY_DELAY 100 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 3 +#define MOUSEKEY_TIME_TO_MAX 10 + +#define TAPPING_TOGGLE 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +#define TAPPING_TERM 300 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +#ifdef SUBPROJECT_ez + #include "ez/config.h" +#endif +#ifdef SUBPROJECT_infinity + #include "infinity/config.h" +#endif + + +#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c index ea640ee96f..3106b33747 100644 --- a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c +++ b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c @@ -1,324 +1,324 @@ -#include "ergodox.h" -#include "debug.h" -#include "action_layer.h" -#include "version.h" -#include "wait.h" - -#define BASE 0 // default layer - helpful for writing in Office-style word processors. -#define SYMB 1 // symbol layer - NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key -#define RIMW 2 // rimworld layer - made for the game RimWorld, by Tynan Sylvester | feel free to remap for your favorite game! -#define MDIA 3 // media layer - mouse and music - close to Ergodox EZ default media layer - -#define CO_PA M(0) // hold copy, tap paste - -#define W_CUT LCTL(KC_X) // C-x Cut -#define W_COPY LCTL(KC_C) // C-c Copy -#define W_PASTE LCTL(KC_V) // C-v Paste -#define W_UNDO LCTL(KC_Z) // C-z Undo -#define W_FIND LCTL(KC_F) // C-v Find -#define W_CAD LCTL(LALT(KC_DEL)) // one-tap ctrl-alt-del - - - -//Tap Dance Declarations -enum { - CAKEWARP, - CTRLALTMDIA, -}; - -void cake_count (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 2) { - layer_on (SYMB); //define double tap here - layer_off (MDIA); - } - else { - layer_off (SYMB); //define single tap or hold here - layer_off (MDIA); - } - if (state->count == 3) { - layer_on (RIMW); //define triple tap here - layer_off (MDIA); - } - else { - layer_off (RIMW); //define single tap or hold here - layer_off (MDIA); - reset_tap_dance (state); - } -} - -void dance_cad_mdia_fin (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_LCTL); - register_code (KC_LALT); - register_code (KC_DEL); - } else { - layer_on (MDIA); - } -} - -void dance_cad_mdia_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_DEL); - unregister_code (KC_LALT); - unregister_code (KC_LCTL); - } else { - ; - } -} - -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // tap for Layer 0, tap twice to switch to symbol layer, and tap three times to switch to rimworld layer. - [CAKEWARP] = ACTION_TAP_DANCE_FN(cake_count) - // tap for ctrl-alt-del, tap twice for media layer - ,[CTRLALTMDIA] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cad_mdia_fin, dance_cad_mdia_reset) - // Other declarations would go here, separated by commas, if you have them -}; - -//In Layer declaration, add tap dance item in place of a key code - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - TD(one_tap, two_taps, three_taps...) - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | F12/L1 | Q | W | E | R | T | {/[ | |TD(L0 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| - * |Caps/Win| A | S | D | F | G |------| |------| H | J | K | L | ; | ' | - * |--------+------+------+------+------+------| }/] | TD(ctrl|------+------+------+------+------+--------| - * |LShift/(|Z/Ctrl| X | C | V | B | | |altdel| N | M | , | . | / |RShift/)| - * `--------+------+------+------+------+-------------' |L3) |------+------+------+------+------+--------' - * | Undo | Cut |CopyPa| Meh | LGui | '------| | Enter| Left | Up | Down | Right | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | Esc | VolUp| | F4 | Mute | - * ,------|------|------| |------+--------+------. - * | | | VolDn| | F5 | | | - * |Backsp|Delete|------| |------| Tab / |Space | - * |ace | | Find | | Alt | CTRL | | - * `--------------------' `----------------------' - */ -// 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_6, -LT(SYMB, KC_F12), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, - GUI_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_RBRC, - W_UNDO, W_CUT, CO_PA, MEH_T(KC_NO), KC_LGUI, - KC_ESC, KC_VOLU, - KC_VOLD, - KC_BSPC, KC_DELETE, W_FIND, - // right hand - KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - TD(CAKEWARP), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - TD(CTRLALTMDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, - KC_ENT, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, - KC_F4, KC_MUTE, - KC_F5, - KC_RALT, CTL_T(KC_TAB), KC_SPC - ), - -/* Keymap 1: Symbol Layer | No EEPROM Or Version keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | xx | | xx | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | |TD(L0 | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| 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_NO, - 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_NO, 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_MINS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, - KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_NO, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 2: RimWorld Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | C | ,< | W | >. | R | | |TD(L0 | U | B | N | J | M | PGUP | - * |--------+------+------+------+------+------| F10 | |L1 L2)|------+------+------+------+------+--------| - * | I | F | A | S | D | 8 |------| |------| X | L | P | Y | H | ENTER | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | K | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PGDN | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | F | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * |SPACE | C |------| |------| E |SPACE | - * | | | Q | | | | | - * `--------------------' `--------------------' - */ -// RIMWORLD -[RIMW] = KEYMAP( - // left hand - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, - KC_TAB, KC_C, KC_COMM, KC_W, KC_DOT, KC_R, KC_F10, - KC_I, KC_F, KC_A, KC_S, KC_D, KC_8, - KC_K, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_C,KC_Q,KC_TRNS, - // right hand - KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TRNS, KC_U, KC_B, KC_N, KC_J, KC_M, KC_PGUP, - KC_X, KC_L, SFT_T(KC_P), KC_Y, KC_H, KC_ENT, - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGDN, - KC_F, KC_LEFT, KC_UP, KC_DOWN,KC_RIGHT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_E, KC_TRNS -), -/* Keymap 3: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | Lclk | Rclk |------| |------| |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_BTN1, KC_BTN2, 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 -), -}; - -static uint16_t key_timer; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: { - if (record->event.pressed) { - key_timer = timer_read(); // if the key is being pressed, we start the timer. - } - else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). - if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. - return MACRO( D(LCTL), T(C), U(LCTL), END ); - } - else { - return MACRO( D(LCTL), T(V), U(LCTL), END ); - } - } - break; - } - } - return MACRO_NONE; -}; - -// Anything you want to do once when the keyboard initializes. -// Tests LED function when the keyboard initializes. -void matrix_init_user(void) { - - wait_ms(500); - ergodox_board_led_on(); - wait_ms(200); - ergodox_right_led_1_on(); - wait_ms(200); - ergodox_right_led_2_on(); - wait_ms(200); - ergodox_right_led_3_on(); - wait_ms(200); - ergodox_board_led_off(); - wait_ms(200); - ergodox_right_led_1_off(); - wait_ms(200); - ergodox_right_led_2_off(); - wait_ms(200); - ergodox_right_led_3_off(); - -}; - - -// 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) { - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - case 3: - ergodox_right_led_3_on(); - break; - default: - // none - break; - } - -}; +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" +#include "wait.h" + +#define BASE 0 // default layer - helpful for writing in Office-style word processors. +#define SYMB 1 // symbol layer - NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key +#define RIMW 2 // rimworld layer - made for the game RimWorld, by Tynan Sylvester | feel free to remap for your favorite game! +#define MDIA 3 // media layer - mouse and music - close to Ergodox EZ default media layer + +#define CO_PA M(0) // hold copy, tap paste + +#define W_CUT LCTL(KC_X) // C-x Cut +#define W_COPY LCTL(KC_C) // C-c Copy +#define W_PASTE LCTL(KC_V) // C-v Paste +#define W_UNDO LCTL(KC_Z) // C-z Undo +#define W_FIND LCTL(KC_F) // C-v Find +#define W_CAD LCTL(LALT(KC_DEL)) // one-tap ctrl-alt-del + + + +//Tap Dance Declarations +enum { + CAKEWARP, + CTRLALTMDIA, +}; + +void cake_count (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 2) { + layer_on (SYMB); //define double tap here + layer_off (MDIA); + } + else { + layer_off (SYMB); //define single tap or hold here + layer_off (MDIA); + } + if (state->count == 3) { + layer_on (RIMW); //define triple tap here + layer_off (MDIA); + } + else { + layer_off (RIMW); //define single tap or hold here + layer_off (MDIA); + reset_tap_dance (state); + } +} + +void dance_cad_mdia_fin (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code (KC_LCTL); + register_code (KC_LALT); + register_code (KC_DEL); + } else { + layer_on (MDIA); + } +} + +void dance_cad_mdia_reset (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + unregister_code (KC_DEL); + unregister_code (KC_LALT); + unregister_code (KC_LCTL); + } else { + ; + } +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // tap for Layer 0, tap twice to switch to symbol layer, and tap three times to switch to rimworld layer. + [CAKEWARP] = ACTION_TAP_DANCE_FN(cake_count) + // tap for ctrl-alt-del, tap twice for media layer + ,[CTRLALTMDIA] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cad_mdia_fin, dance_cad_mdia_reset) + // Other declarations would go here, separated by commas, if you have them +}; + +//In Layer declaration, add tap dance item in place of a key code + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer - TD(one_tap, two_taps, three_taps...) + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F12/L1 | Q | W | E | R | T | {/[ | |TD(L0 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| + * |Caps/Win| A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| }/] | TD(ctrl|------+------+------+------+------+--------| + * |LShift/(|Z/Ctrl| X | C | V | B | | |altdel| N | M | , | . | / |RShift/)| + * `--------+------+------+------+------+-------------' |L3) |------+------+------+------+------+--------' + * | Undo | Cut |CopyPa| Meh | LGui | '------| | Enter| Left | Up | Down | Right | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Esc | VolUp| | F4 | Mute | + * ,------|------|------| |------+--------+------. + * | | | VolDn| | F5 | | | + * |Backsp|Delete|------| |------| Tab / |Space | + * |ace | | Find | | Alt | CTRL | | + * `--------------------' `----------------------' + */ +// 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_6, +LT(SYMB, KC_F12), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + GUI_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_RBRC, + W_UNDO, W_CUT, CO_PA, MEH_T(KC_NO), KC_LGUI, + KC_ESC, KC_VOLU, + KC_VOLD, + KC_BSPC, KC_DELETE, W_FIND, + // right hand + KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + TD(CAKEWARP), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TD(CTRLALTMDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_ENT, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, + KC_F4, KC_MUTE, + KC_F5, + KC_RALT, CTL_T(KC_TAB), KC_SPC + ), + +/* Keymap 1: Symbol Layer | No EEPROM Or Version keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | xx | | xx | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | |TD(L0 | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| 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_NO, + 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_NO, 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_MINS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: RimWorld Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | C | ,< | W | >. | R | | |TD(L0 | U | B | N | J | M | PGUP | + * |--------+------+------+------+------+------| F10 | |L1 L2)|------+------+------+------+------+--------| + * | I | F | A | S | D | 8 |------| |------| X | L | P | Y | H | ENTER | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | K | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PGDN | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | F | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * |SPACE | C |------| |------| E |SPACE | + * | | | Q | | | | | + * `--------------------' `--------------------' + */ +// RIMWORLD +[RIMW] = KEYMAP( + // left hand + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + KC_TAB, KC_C, KC_COMM, KC_W, KC_DOT, KC_R, KC_F10, + KC_I, KC_F, KC_A, KC_S, KC_D, KC_8, + KC_K, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_C,KC_Q,KC_TRNS, + // right hand + KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TRNS, KC_U, KC_B, KC_N, KC_J, KC_M, KC_PGUP, + KC_X, KC_L, SFT_T(KC_P), KC_Y, KC_H, KC_ENT, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGDN, + KC_F, KC_LEFT, KC_UP, KC_DOWN,KC_RIGHT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_E, KC_TRNS +), +/* Keymap 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | Lclk | Rclk |------| |------| |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_BTN1, KC_BTN2, 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 +), +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + } + else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + return MACRO( D(LCTL), T(C), U(LCTL), END ); + } + else { + return MACRO( D(LCTL), T(V), U(LCTL), END ); + } + } + break; + } + } + return MACRO_NONE; +}; + +// Anything you want to do once when the keyboard initializes. +// Tests LED function when the keyboard initializes. +void matrix_init_user(void) { + + wait_ms(500); + ergodox_board_led_on(); + wait_ms(200); + ergodox_right_led_1_on(); + wait_ms(200); + ergodox_right_led_2_on(); + wait_ms(200); + ergodox_right_led_3_on(); + wait_ms(200); + ergodox_board_led_off(); + wait_ms(200); + ergodox_right_led_1_off(); + wait_ms(200); + ergodox_right_led_2_off(); + wait_ms(200); + ergodox_right_led_3_off(); + +}; + + +// 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) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/win10_writers-block/readme.md b/keyboards/ergodox/keymaps/win10_writers-block/readme.md index 66b1aaf40d..e51e3c48fc 100644 --- a/keyboards/ergodox/keymaps/win10_writers-block/readme.md +++ b/keyboards/ergodox/keymaps/win10_writers-block/readme.md @@ -1,113 +1,113 @@ - - -Win10 Writer's Block ErgoDox - v1.0 - -======================= - -This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10. - -Professional writers may find this layout useful -- copywriters, technical writers, novelists, etc. - -I use my ErgoDox with this keymap as a daily driver at my office. - -A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld. - -Feel free to modify the gaming layer to your personal taste. - -## Table of Contents - -* [Layouts](#layouts) - - [Base layer](#base-layer) - - [Symbol layer](#symbol-layer) - - [Gaming layer](#rimworld-layer) - - [Media layer](#media-layer) -* [Tools](#tools) - - [Layer notification](#layer-notification) -* [Building](#building) - - [Using on Windows](#using-on-windows) -* [License](#license) -* [Special Thanks](#special-thanks) - -# Layouts - -* TapDance will teleport you to the layer you want: -* One Tap for the Base layer -* Two Taps for the Symbol layer -* Three Taps for the Rimworld/Gaming layer - -* Where the "Meh" key is located on the Ergodox EZ default layout, I've changed it to another tap dance key: -* One Tap for CTRL-ALT-DEL -* Two Taps for the Media/Mouse layer - -## Base layer - -[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/8fd9bbdd3a23bbb5a8779de3624a3be1) - -This is a QWERTY layout with some quirks. - -* Enter is located on a key that won't cause as much thumb fatigue. -* Copy and Paste work from the same key. Just hold the key to copy and tap the key to paste! -* Undo, Find and Cut are also one-touch keys. -* F12 is where you would normally find TAB on standard layouts. Quickly save in Word, safely. -* You'll find bracket keys below the "6" key. - -* The Meh Key is a single-button CTRL+ALT+SHIFT modifier. - -* Space Cadet Shift: Tap L Shift for "(" and R Shift for ")" -- holding either shift works like a normal shift. -* Tap "Z" or Tab to use either normally. Hold them for CTRL. -* Tap Caps Lock to use it normally. Hold it for Win key combinations (Win+D to minimize all programs, etc). - -## Symbol layer - -[![Symbol layer](images/symbol-layer.png)](http://www.keyboard-layout-editor.com/#/gists/04eb6458b8b17882e472f64d482f12b4) - -Your standard Ergodox EZ symbol + numpad layout, minus the Version and EEPROM keys. - -* From the base layer, hold the F12 Key to temporarily access this layer (use for quick access to numpad) -* Release F12 to return to the base layer. - -## Rimworld layer - -[![Rimworld / Gaming Layer](images/rimworld-layer.png)](http://www.keyboard-layout-editor.com/#/gists/d53af8391e6e443ed0a98ccfbdb4eace) - -This layer was made to play RimWorld, a Sci-Fi Colony Survival Game by Tynan Sylvester and Ludeon Studios, available on Steam. - -* Have fun! - -## Media layer - -[![Media layer](images/media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/3209d09ed4bd997e4f49f28c6ada2ab3) - -This is the standard Ergodox EZ media layout with more options for mouseclick buttons. - -* In this layer, your "space" key changes into a back button for your browser. - -## LED states - -Your LEDs will change to indicate your layer. You'll know you are in the base layer if all LEDs are off. - -# Building - -To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/` - -[qmk]: https://github.com/jackhumbert/qmk_firmware - -``` -$ make keyboard=ergodox keymap=win10_writers-block -``` - -## Using on Windows - -This layout is tested in Windows 7 Pro and Windows 10 Home environments. - -# License - -GPL 3+ - -# Special Thanks - -* To algernon for his coding help. I'm a novice but I still made this work (and figured out tap dance) with his help. - -* To /r/MechanicalKeyboards for being an all-around great community. - + + +Win10 Writer's Block ErgoDox - v1.0 + +======================= + +This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10. + +Professional writers may find this layout useful -- copywriters, technical writers, novelists, etc. + +I use my ErgoDox with this keymap as a daily driver at my office. + +A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld. + +Feel free to modify the gaming layer to your personal taste. + +## Table of Contents + +* [Layouts](#layouts) + - [Base layer](#base-layer) + - [Symbol layer](#symbol-layer) + - [Gaming layer](#rimworld-layer) + - [Media layer](#media-layer) +* [Tools](#tools) + - [Layer notification](#layer-notification) +* [Building](#building) + - [Using on Windows](#using-on-windows) +* [License](#license) +* [Special Thanks](#special-thanks) + +# Layouts + +* TapDance will teleport you to the layer you want: +* One Tap for the Base layer +* Two Taps for the Symbol layer +* Three Taps for the Rimworld/Gaming layer + +* Where the "Meh" key is located on the Ergodox EZ default layout, I've changed it to another tap dance key: +* One Tap for CTRL-ALT-DEL +* Two Taps for the Media/Mouse layer + +## Base layer + +[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/8fd9bbdd3a23bbb5a8779de3624a3be1) + +This is a QWERTY layout with some quirks. + +* Enter is located on a key that won't cause as much thumb fatigue. +* Copy and Paste work from the same key. Just hold the key to copy and tap the key to paste! +* Undo, Find and Cut are also one-touch keys. +* F12 is where you would normally find TAB on standard layouts. Quickly save in Word, safely. +* You'll find bracket keys below the "6" key. + +* The Meh Key is a single-button CTRL+ALT+SHIFT modifier. + +* Space Cadet Shift: Tap L Shift for "(" and R Shift for ")" -- holding either shift works like a normal shift. +* Tap "Z" or Tab to use either normally. Hold them for CTRL. +* Tap Caps Lock to use it normally. Hold it for Win key combinations (Win+D to minimize all programs, etc). + +## Symbol layer + +[![Symbol layer](images/symbol-layer.png)](http://www.keyboard-layout-editor.com/#/gists/04eb6458b8b17882e472f64d482f12b4) + +Your standard Ergodox EZ symbol + numpad layout, minus the Version and EEPROM keys. + +* From the base layer, hold the F12 Key to temporarily access this layer (use for quick access to numpad) +* Release F12 to return to the base layer. + +## Rimworld layer + +[![Rimworld / Gaming Layer](images/rimworld-layer.png)](http://www.keyboard-layout-editor.com/#/gists/d53af8391e6e443ed0a98ccfbdb4eace) + +This layer was made to play RimWorld, a Sci-Fi Colony Survival Game by Tynan Sylvester and Ludeon Studios, available on Steam. + +* Have fun! + +## Media layer + +[![Media layer](images/media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/3209d09ed4bd997e4f49f28c6ada2ab3) + +This is the standard Ergodox EZ media layout with more options for mouseclick buttons. + +* In this layer, your "space" key changes into a back button for your browser. + +## LED states + +Your LEDs will change to indicate your layer. You'll know you are in the base layer if all LEDs are off. + +# Building + +To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/` + +[qmk]: https://github.com/jackhumbert/qmk_firmware + +``` +$ make keyboard=ergodox keymap=win10_writers-block +``` + +## Using on Windows + +This layout is tested in Windows 7 Pro and Windows 10 Home environments. + +# License + +GPL 3+ + +# Special Thanks + +* To algernon for his coding help. I'm a novice but I still made this work (and figured out tap dance) with his help. + +* To /r/MechanicalKeyboards for being an all-around great community. + * To /u/profet23 for his amazing custom Ergodox boards. \ No newline at end of file -- cgit v1.2.3 From 7550abbb7ff542dccd983c02254c9cbde2e2a3e2 Mon Sep 17 00:00:00 2001 From: Yin Shanyang Date: Mon, 24 Oct 2016 15:36:24 +0800 Subject: =?UTF-8?q?added=20notes=20on=20using=20Arduino=20Pro=20Micro=203.?= =?UTF-8?q?3V=20with=20Let=E2=80=99s=20Split?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/lets_split/readme.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/keyboards/lets_split/readme.md b/keyboards/lets_split/readme.md index 73fdb0f789..6e296737a2 100644 --- a/keyboards/lets_split/readme.md +++ b/keyboards/lets_split/readme.md @@ -100,3 +100,16 @@ half to a computer by USB the keyboard will use QWERTY and Colemak when the right half is connected. +Notes on Using Pro Micro 3.3V +----------------------------- + +Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects +the frequency on the 3.3V board. + +Also, if the slave board is producing weird characters in certain columns, +update the following line in `matrix.c` to the following: + +``` +// _delay_us(30); // without this wait read unstable value. +_delay_us(300); // without this wait read unstable value. +``` -- cgit v1.2.3 From 1557d16562d6bc69fecbe5d26055f82d0f2bdfc2 Mon Sep 17 00:00:00 2001 From: Andre Silva Date: Mon, 24 Oct 2016 20:29:34 +0100 Subject: add subproject env var to dockerfile --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 578d009dc1..744ded8579 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,8 +21,9 @@ RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* ENV keyboard=ergodox +ENV subproject=ez ENV keymap=default VOLUME /qmk WORKDIR /qmk -CMD make clean ; make keyboard=${keyboard} keymap=${keymap} \ No newline at end of file +CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap} -- cgit v1.2.3 From c0a9fa8eead5fd8eb622bb5cb22f9c71a577921d Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 25 Oct 2016 11:37:09 +0100 Subject: switched to standard volume keys --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index c89b485a41..dbefa4a5fd 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -115,8 +115,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_FUNC] = { - {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(LALT(KC_VOLU))}, - {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, S(LALT(KC_VOLD))}, + {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU}, + {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD}, {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, S(LCTL(KC_POWER)), XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } -- cgit v1.2.3 From 6bbb0b030eb6be3157503929213e302cc9bc10af Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Tue, 25 Oct 2016 11:51:32 +0100 Subject: replace lock key with general power key --- keyboards/planck/keymaps/callum/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index dbefa4a5fd..4d0151710e 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | F21 | F22 | F23 | F24 | | | Lock | | | | | + * | | F21 | F22 | F23 | F24 | | | Power| | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | Prev | Mute | Play | Next | | | | | * `-----------------------------------------------------------------------------------' @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNC] = { {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU}, {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD}, - {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, S(LCTL(KC_POWER)), XXXXXXX, XXXXXXX, XXXXXXX, _______}, + {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_POWER, XXXXXXX, XXXXXXX, XXXXXXX, _______}, {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} } -- cgit v1.2.3 From 22cb73fad312e42f595582f9629105348e7b4bd3 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Tue, 4 Oct 2016 08:19:44 -0700 Subject: add alphadox layouts to atreus and ergodox --- keyboards/atreus/keymaps/alphadox/config.h | 80 ++++++++++++++++++++ keyboards/atreus/keymaps/alphadox/keymap.c | 50 +++++++++++++ keyboards/ergodox/keymaps/alphadox/Makefile | 17 +++++ keyboards/ergodox/keymaps/alphadox/config.h | 9 +++ keyboards/ergodox/keymaps/alphadox/keymap.c | 112 ++++++++++++++++++++++++++++ 5 files changed, 268 insertions(+) create mode 100644 keyboards/atreus/keymaps/alphadox/config.h create mode 100644 keyboards/atreus/keymaps/alphadox/keymap.c create mode 100644 keyboards/ergodox/keymaps/alphadox/Makefile create mode 100644 keyboards/ergodox/keymaps/alphadox/config.h create mode 100644 keyboards/ergodox/keymaps/alphadox/keymap.c diff --git a/keyboards/atreus/keymaps/alphadox/config.h b/keyboards/atreus/keymaps/alphadox/config.h new file mode 100644 index 0000000000..df56849b08 --- /dev/null +++ b/keyboards/atreus/keymaps/alphadox/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Arbitrary Definitions +#define PRODUCT Planckeus +#define DESCRIPTION q.m.k. keyboard firmware for Planckeus + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +#define MATRIX_ROW_PINS { D0, D1, D2, D3 } +#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, F7, B0, B1, B2, B3, B7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +//#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c new file mode 100644 index 0000000000..b776ab4000 --- /dev/null +++ b/keyboards/atreus/keymaps/alphadox/keymap.c @@ -0,0 +1,50 @@ +#include "atreus.h" + +#define BASE 0 +#define SYMB 1 +#define ETC 2 + +enum macro_id { + TEENSY, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[BASE] = KEYMAP( + KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, + LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, + SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), + KC_GRV, KC_DEL, KC_LALT, GUI_T(KC_TAB), LT(SYMB,KC_BSPC), CTL_T(KC_ESC), SFT_T(KC_ENT), LT(SYMB,KC_SPC), GUI_T(KC_LEFT), KC_DOWN, KC_UP, LCAG_T(KC_RGHT) +), + +[SYMB] = KEYMAP( + KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, + KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BSLS, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, + KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO, + KC_TILD, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_NO, KC_DOT, KC_TRNS +), + +[ETC] = KEYMAP( + RESET, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME, + LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END, + KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS, + KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO +), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch(id) { + case TEENSY: + clear_keyboard(); + print("\n\nJump to bootloader... "); + _delay_ms(250); + bootloader_jump(); // should not return + print("not supported.\n"); + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/alphadox/Makefile b/keyboards/ergodox/keymaps/alphadox/Makefile new file mode 100644 index 0000000000..633499d00b --- /dev/null +++ b/keyboards/ergodox/keymaps/alphadox/Makefile @@ -0,0 +1,17 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ # nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/alphadox/config.h b/keyboards/ergodox/keymaps/alphadox/config.h new file mode 100644 index 0000000000..89807d84ad --- /dev/null +++ b/keyboards/ergodox/keymaps/alphadox/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define FORCE_NKRO +#define PREVENT_STUCK_MODIFIERS + +#endif diff --git a/keyboards/ergodox/keymaps/alphadox/keymap.c b/keyboards/ergodox/keymaps/alphadox/keymap.c new file mode 100644 index 0000000000..b2f7ccb47d --- /dev/null +++ b/keyboards/ergodox/keymaps/alphadox/keymap.c @@ -0,0 +1,112 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define ETC 2 // etc + +enum macro_id { + TEENSY, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[BASE] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_PGUP, + CTL_T(KC_ESC), LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN, + KC_GRV, KC_DEL, KC_DEL, KC_LALT, GUI_T(KC_TAB), + KC_NO, KC_NO, + KC_NO, + LT(SYMB,KC_BSPC), CTL_T(KC_ESC), KC_NO, + + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_VOLU, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_BSLS, + KC_Y, KC_N, KC_I, KC_O, KC_H, KC_QUOT, + KC_VOLD, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + GUI_T(KC_TAB), KC_LEFT, KC_DOWN, KC_UP, LCAG_T(KC_RGHT), + KC_NO, KC_NO, + KC_NO, + KC_NO, SFT_T(KC_ENT), LT(SYMB,KC_SPC) +), + +[SYMB] = KEYMAP( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + 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_BSLS, + KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_TRNS, + KC_TILD, KC_AMPR, KC_AMPR, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, KC_NO, + KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, KC_NO, + KC_TRNS, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO, KC_TRNS, + KC_0, KC_NO, KC_DOT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +[ETC] = KEYMAP( + RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS, + KC_TRNS, LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME, KC_NO, + KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END, KC_NO, + KC_TRNS, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, 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) { + switch(id) { + case TEENSY: + clear_keyboard(); + print("\n\nJump to bootloader... "); + _delay_ms(250); + bootloader_jump(); // should not return + print("not supported.\n"); + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { +}; + +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) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + break; + } +}; -- cgit v1.2.3 From e2916f8ab1460b8a22c75aea632d7533d56670bb Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 19 Oct 2016 07:45:30 -0700 Subject: [ergodox][alphadox] undefine tapping_term, ignore_mod_tap_interrupt --- keyboards/ergodox/keymaps/alphadox/config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/ergodox/keymaps/alphadox/config.h b/keyboards/ergodox/keymaps/alphadox/config.h index 89807d84ad..deb218dc0d 100644 --- a/keyboards/ergodox/keymaps/alphadox/config.h +++ b/keyboards/ergodox/keymaps/alphadox/config.h @@ -6,4 +6,7 @@ #define FORCE_NKRO #define PREVENT_STUCK_MODIFIERS +#undef TAPPING_TERM +#undef IGNORE_MOD_TAP_INTERRUPT + #endif -- cgit v1.2.3 From 427ea7a8892b60b11e8f6aae2e21b82608ab0071 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Thu, 20 Oct 2016 08:00:36 -0700 Subject: [alphadox] remove tmk reset code --- keyboards/atreus/keymaps/alphadox/keymap.c | 5 ----- keyboards/ergodox/keymaps/alphadox/keymap.c | 5 ----- 2 files changed, 10 deletions(-) diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c index b776ab4000..b8ec0e032f 100644 --- a/keyboards/atreus/keymaps/alphadox/keymap.c +++ b/keyboards/atreus/keymaps/alphadox/keymap.c @@ -39,11 +39,6 @@ const uint16_t PROGMEM fn_actions[] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case TEENSY: - clear_keyboard(); - print("\n\nJump to bootloader... "); - _delay_ms(250); - bootloader_jump(); // should not return - print("not supported.\n"); break; } return MACRO_NONE; diff --git a/keyboards/ergodox/keymaps/alphadox/keymap.c b/keyboards/ergodox/keymaps/alphadox/keymap.c index b2f7ccb47d..731e62c0cd 100644 --- a/keyboards/ergodox/keymaps/alphadox/keymap.c +++ b/keyboards/ergodox/keymaps/alphadox/keymap.c @@ -79,11 +79,6 @@ const uint16_t PROGMEM fn_actions[] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case TEENSY: - clear_keyboard(); - print("\n\nJump to bootloader... "); - _delay_ms(250); - bootloader_jump(); // should not return - print("not supported.\n"); break; } return MACRO_NONE; -- cgit v1.2.3 From 055247f35da4fb6c2e8c944292210240cd2d6ec5 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Wed, 26 Oct 2016 21:00:58 +0800 Subject: re-introduce brackets layer --- .../ergodox/keymaps/dvorak_programmer/keymap.c | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index 0539374f87..5100115a64 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -11,7 +11,8 @@ #define KEY_SEL 4 // key selection layer #define NUMBER 5 // number layer #define SYMBOL 6 -#define SHORTCUTS 7 +#define BRACKETS 7 +#define SHORTCUTS 8 // macros #define MC_COPY_LINE 0 @@ -56,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( // layer 0 : default // left hand KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), + LT(BRACKETS,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), MO(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I, KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV), OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER), @@ -205,6 +206,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS ), +[BRACKETS] = KEYMAP( + // left 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_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, + KC_TRNS, KC_TRNS, M(OPEN_CLOSE_BRACKET),M(OPEN_CLOSE_PAREN),M(OPEN_CLOSE_CURLY),KC_TRNS,KC_TRNS, + KC_TRNS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + [SHORTCUTS] = KEYMAP( // left hand KC_NO, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), HYPR(KC_F6), -- cgit v1.2.3 From 2082c6f11076dd8232aea65ed178dea27d3a4109 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 26 Oct 2016 22:24:26 +0200 Subject: - Fixed typo in gh60/dbroqua layout --- keyboards/kc60/keymaps/dbroqua/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c index 1b645ea938..8b5efd0cee 100644 --- a/keyboards/kc60/keymaps/dbroqua/keymap.c +++ b/keyboards/kc60/keymaps/dbroqua/keymap.c @@ -61,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | | | | | | | | Psc | | | | | | * |-----------------------------------------------------------------------------------------+ - * | | Led | Led-| Led+| | Mute| Vol+| Vol-| | | | Play | | + * | | Led | Led+| Led-| | Mute| Vol+| Vol-| | | | Play | | * |-----------------------------------------------------------------------------------------+ * | | | | | | Prev | Stop | Next | * `-----------------------------------------------------------------------------------------' -- cgit v1.2.3 From 508eddf8ba8548d3f71e1c09a404839beb49f45c Mon Sep 17 00:00:00 2001 From: IBNobody Date: Fri, 28 Oct 2016 14:21:38 -0500 Subject: Fixing Debounce - WIP --- keyboards/vision_division/config.h | 2 +- quantum/matrix.c | 246 ++++++++++++++++++++++++------------- tmk_core/common/matrix.h | 10 ++ 3 files changed, 174 insertions(+), 84 deletions(-) diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h index 93c9606712..5798d91adf 100644 --- a/keyboards/vision_division/config.h +++ b/keyboards/vision_division/config.h @@ -31,7 +31,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 +#define DEBOUNCING_DELAY 0 #define MATRIX_MASKED diff --git a/quantum/matrix.c b/quantum/matrix.c index ac81794e59..a7dab09877 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -26,6 +26,33 @@ along with this program. If not, see . #include "util.h" #include "matrix.h" +#if (MATRIX_COLS <= 8) +# define print_matrix_header() print("\nr/c 01234567\n") +# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop(matrix[i]) +# define ROW_SHIFTER ((uint8_t)1) +#elif (MATRIX_COLS <= 16) +# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n") +# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop16(matrix[i]) +# define ROW_SHIFTER ((uint16_t)1) +#elif (MATRIX_COLS <= 32) +# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n") +# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop32(matrix[i]) +# define ROW_SHIFTER ((uint32_t)1) +#endif + +#if (MATRIX_ROWS <= 8) +# define COL_SHIFTER ((uint8_t)1) +#elif (MATRIX_ROWS <= 16) +# define COL_SHIFTER ((uint16_t)1) +#elif (MATRIX_ROWS <= 32) +# define COL_SHIFTER ((uint32_t)1) +#endif + + + #ifdef MATRIX_MASKED extern const matrix_row_t matrix_mask[]; #endif @@ -42,24 +69,28 @@ static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -#if DIODE_DIRECTION == ROW2COL - static matrix_row_t matrix_reversed[MATRIX_COLS]; - static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS]; +#if DIODE_DIRECTION == COL2ROW + static matrix_row_t matrix_debouncing[MATRIX_ROWS]; +#else // ROW2COL + static matrix_col_t matrix_transposed[MATRIX_COLS]; + static matrix_col_t matrix_transposed_debouncing[MATRIX_COLS]; #endif -#if MATRIX_COLS > 16 - #define SHIFTER 1UL -#else - #define SHIFTER 1 +#if (DIODE_DIRECTION == COL2ROW) + static void init_cols(void); + static matrix_row_t read_cols(void); + static void unselect_rows(void); + static void select_row(uint8_t row); + static void unselect_row(uint8_t row); +#else // ROW2COL + static void init_rows(void); + static matrix_col_t read_rows(void); + static void unselect_cols(void); + static void unselect_col(uint8_t col); + static void select_col(uint8_t col); #endif -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - __attribute__ ((weak)) void matrix_init_quantum(void) { matrix_init_kb(); @@ -99,7 +130,7 @@ uint8_t matrix_cols(void) { } // void matrix_power_up(void) { -// #if DIODE_DIRECTION == COL2ROW +// #if (DIODE_DIRECTION == COL2ROW) // for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { // /* DDRxn */ // _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF); @@ -123,13 +154,15 @@ uint8_t matrix_cols(void) { // } void matrix_init(void) { + // To use PORTF disable JTAG with writing JTD bit twice within four cycles. - #ifdef __AVR_ATmega32U4__ + #if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega32U4__)) MCUCR |= _BV(JTD); MCUCR |= _BV(JTD); #endif // initialize row and col +#if (DIODE_DIRECTION == COL2ROW) unselect_rows(); init_cols(); @@ -139,25 +172,43 @@ void matrix_init(void) { matrix_debouncing[i] = 0; } +#else // ROW2COL + unselect_cols(); + init_rows(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + } + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_COLS; i++) { + matrix_transposed_debouncing[i] = 0; + } +#endif + matrix_init_quantum(); } uint8_t matrix_scan(void) { -#if DIODE_DIRECTION == COL2ROW +#if (DIODE_DIRECTION == COL2ROW) + + // Set row, read cols + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { select_row(i); wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; + matrix_row_t current_row = read_cols(); + if (matrix_debouncing[i] != current_row) { + matrix_debouncing[i] = current_row; if (debouncing) { debug("bounce!: "); debug_hex(debouncing); debug("\n"); } debouncing = DEBOUNCING_DELAY; } - unselect_rows(); + unselect_row(i); } if (debouncing) { @@ -169,19 +220,23 @@ uint8_t matrix_scan(void) } } } -#else + +#else // ROW2COL + + // Set col, read rows + for (uint8_t i = 0; i < MATRIX_COLS; i++) { - select_row(i); + select_col(i); wait_us(30); // without this wait read unstable value. - matrix_row_t rows = read_cols(); - if (matrix_reversed_debouncing[i] != rows) { - matrix_reversed_debouncing[i] = rows; + matrix_col_t current_col = read_rows(); + if (matrix_transposed_debouncing[i] != current_col) { + matrix_transposed_debouncing[i] = current_col; if (debouncing) { debug("bounce!: "); debug_hex(debouncing); debug("\n"); } debouncing = DEBOUNCING_DELAY; } - unselect_rows(); + unselect_col(i); } if (debouncing) { @@ -189,17 +244,20 @@ uint8_t matrix_scan(void) wait_ms(1); } else { for (uint8_t i = 0; i < MATRIX_COLS; i++) { - matrix_reversed[i] = matrix_reversed_debouncing[i]; + matrix_transposed[i] = matrix_transposed_debouncing[i]; } } } + + // Untranspose matrix for (uint8_t y = 0; y < MATRIX_ROWS; y++) { matrix_row_t row = 0; for (uint8_t x = 0; x < MATRIX_COLS; x++) { - row |= ((matrix_reversed[x] & (1<> y) << x; + row |= ((matrix_transposed[x] & (1<> y) << x; } matrix[y] = row; } + #endif matrix_scan_quantum(); @@ -233,23 +291,11 @@ matrix_row_t matrix_get_row(uint8_t row) void matrix_print(void) { -#if (MATRIX_COLS <= 8) - print("\nr/c 01234567\n"); -#elif (MATRIX_COLS <= 16) - print("\nr/c 0123456789ABCDEF\n"); -#elif (MATRIX_COLS <= 32) - print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n"); -#endif + print_matrix_header(); for (uint8_t row = 0; row < MATRIX_ROWS; row++) { phex(row); print(": "); -#if (MATRIX_COLS <= 8) - print_bin_reverse8(matrix_get_row(row)); -#elif (MATRIX_COLS <= 16) - print_bin_reverse16(matrix_get_row(row)); -#elif (MATRIX_COLS <= 32) - print_bin_reverse32(matrix_get_row(row)); -#endif + print_matrix_row(row); print("\n"); } } @@ -258,28 +304,21 @@ uint8_t matrix_key_count(void) { uint8_t count = 0; for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -#if (MATRIX_COLS <= 8) - count += bitpop(matrix[i]); -#elif (MATRIX_COLS <= 16) - count += bitpop16(matrix[i]); -#elif (MATRIX_COLS <= 32) - count += bitpop32(matrix[i]); -#endif + count += matrix_bitpop(i); } return count; } + + +#if (DIODE_DIRECTION == COL2ROW) + static void init_cols(void) { -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_COLS; x++) { - int pin = col_pins[x]; -#else - for(int x = 0; x < MATRIX_ROWS; x++) { - int pin = row_pins[x]; -#endif - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + uint8_t pin = col_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } } @@ -287,40 +326,81 @@ static matrix_row_t read_cols(void) { matrix_row_t result = 0; -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_COLS; x++) { - int pin = col_pins[x]; -#else - for(int x = 0; x < MATRIX_ROWS; x++) { - int pin = row_pins[x]; -#endif - result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (SHIFTER << x); + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + uint8_t pin = col_pins[x]; + result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (ROW_SHIFTER << x); } + return result; } +static void select_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI +} + static void unselect_rows(void) { -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_ROWS; x++) { - int pin = row_pins[x]; -#else - for(int x = 0; x < MATRIX_COLS; x++) { - int pin = col_pins[x]; -#endif - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); + for(uint8_t x = 0; x < MATRIX_ROWS; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } } -static void select_row(uint8_t row) +#else // ROW2COL + +static void init_rows(void) { + for(uint8_t x = 0; x < MATRIX_ROWS; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} -#if DIODE_DIRECTION == COL2ROW - int pin = row_pins[row]; -#else - int pin = col_pins[row]; -#endif - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); +static matrix_col_t read_rows(void) +{ + matrix_col_t result = 0; + + for(uint8_t x = 0; x < MATRIX_ROWS; x++) { + uint8_t pin = row_pins[x]; + result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (COL_SHIFTER << x); + } + + return result; +} + +static void select_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } + +static void unselect_cols(void) +{ + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + uint8_t pin = col_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +#endif diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index cee3593eee..84e066c673 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -31,6 +31,16 @@ typedef uint32_t matrix_row_t; #error "MATRIX_COLS: invalid value" #endif +#if (MATRIX_ROWS <= 8) +typedef uint8_t matrix_col_t; +#elif (MATRIX_ROWS <= 16) +typedef uint16_t matrix_col_t; +#elif (MATRIX_ROWS <= 32) +typedef uint32_t matrix_col_t; +#else +#error "MATRIX_COLS: invalid value" +#endif + #define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1< Date: Fri, 28 Oct 2016 16:24:20 -0500 Subject: Refactoring Matrix scanning --- quantum/matrix.c | 173 ++++++++++++++++++++++++++--------------------- tmk_core/common/matrix.h | 10 --- 2 files changed, 95 insertions(+), 88 deletions(-) diff --git a/quantum/matrix.c b/quantum/matrix.c index a7dab09877..1bacea1bed 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -43,16 +43,6 @@ along with this program. If not, see . # define ROW_SHIFTER ((uint32_t)1) #endif -#if (MATRIX_ROWS <= 8) -# define COL_SHIFTER ((uint8_t)1) -#elif (MATRIX_ROWS <= 16) -# define COL_SHIFTER ((uint16_t)1) -#elif (MATRIX_ROWS <= 32) -# define COL_SHIFTER ((uint32_t)1) -#endif - - - #ifdef MATRIX_MASKED extern const matrix_row_t matrix_mask[]; #endif @@ -70,6 +60,9 @@ static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_raw[MATRIX_ROWS]; + + #if DIODE_DIRECTION == COL2ROW static matrix_row_t matrix_debouncing[MATRIX_ROWS]; #else // ROW2COL @@ -79,13 +72,13 @@ static matrix_row_t matrix[MATRIX_ROWS]; #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); - static matrix_row_t read_cols(void); + static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) static void unselect_rows(void); static void select_row(uint8_t row); static void unselect_row(uint8_t row); #else // ROW2COL static void init_rows(void); - static matrix_col_t read_rows(void); + static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) static void unselect_cols(void); static void unselect_col(uint8_t col); static void select_col(uint8_t col); @@ -169,6 +162,7 @@ void matrix_init(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; + matrix_raw[i] = 0; matrix_debouncing[i] = 0; } @@ -178,6 +172,7 @@ void matrix_init(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix_raw[i] = 0; matrix[i] = 0; } @@ -196,67 +191,73 @@ uint8_t matrix_scan(void) #if (DIODE_DIRECTION == COL2ROW) // Set row, read cols - - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - wait_us(30); // without this wait read unstable value. - matrix_row_t current_row = read_cols(); - if (matrix_debouncing[i] != current_row) { - matrix_debouncing[i] = current_row; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCING_DELAY; - } - unselect_row(i); + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + read_cols_on_row(matrix, current_row); } - if (debouncing) { - if (--debouncing) { - wait_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } + // select_row(i); + // wait_us(30); // without this wait read unstable value. + // matrix_row_t current_row = read_cols(); + // if (matrix_debouncing[i] != current_row) { + // matrix_debouncing[i] = current_row; + // if (debouncing) { + // debug("bounce!: "); debug_hex(debouncing); debug("\n"); + // } + // debouncing = DEBOUNCING_DELAY; + // } + // unselect_row(i); + // } + + // if (debouncing) { + // if (--debouncing) { + // wait_ms(1); + // } else { + // for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + // matrix[i] = matrix_debouncing[i]; + // } + // } + // } #else // ROW2COL // Set col, read rows - - for (uint8_t i = 0; i < MATRIX_COLS; i++) { - select_col(i); - wait_us(30); // without this wait read unstable value. - matrix_col_t current_col = read_rows(); - if (matrix_transposed_debouncing[i] != current_col) { - matrix_transposed_debouncing[i] = current_col; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCING_DELAY; - } - unselect_col(i); + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { + read_rows_on_col(matrix, current_col); } - if (debouncing) { - if (--debouncing) { - wait_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_COLS; i++) { - matrix_transposed[i] = matrix_transposed_debouncing[i]; - } - } - } - // Untranspose matrix - for (uint8_t y = 0; y < MATRIX_ROWS; y++) { - matrix_row_t row = 0; - for (uint8_t x = 0; x < MATRIX_COLS; x++) { - row |= ((matrix_transposed[x] & (1<> y) << x; - } - matrix[y] = row; - } + // for (uint8_t i = 0; i < MATRIX_COLS; i++) { + // select_col(i); + // wait_us(30); // without this wait read unstable value. + // matrix_col_t current_col = read_rows(); + // if (matrix_transposed_debouncing[i] != current_col) { + // matrix_transposed_debouncing[i] = current_col; + // if (debouncing) { + // debug("bounce!: "); debug_hex(debouncing); debug("\n"); + // } + // debouncing = DEBOUNCING_DELAY; + // } + // unselect_col(i); + // } + + // if (debouncing) { + // if (--debouncing) { + // wait_ms(1); + // } else { + // for (uint8_t i = 0; i < MATRIX_COLS; i++) { + // matrix_transposed[i] = matrix_transposed_debouncing[i]; + // } + // } + // } + + // // Untranspose matrix + // for (uint8_t y = 0; y < MATRIX_ROWS; y++) { + // matrix_row_t row = 0; + // for (uint8_t x = 0; x < MATRIX_COLS; x++) { + // row |= ((matrix_transposed[x] & (1<> y) << x; + // } + // matrix[y] = row; + // } #endif @@ -322,16 +323,25 @@ static void init_cols(void) } } -static matrix_row_t read_cols(void) +static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { - matrix_row_t result = 0; + // Clear data in matrix row + current_matrix[current_row] = 0; - for(uint8_t x = 0; x < MATRIX_COLS; x++) { - uint8_t pin = col_pins[x]; - result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (ROW_SHIFTER << x); - } + // Select row and wait for row selecton to stabilize + select_row(current_row); + wait_us(30); - return result; + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { + + // Select the col pin to read (active low) + uint8_t pin = col_pins[col_index]; + uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + + // Populate the matrix row with the state of the col pin + current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); + } } static void select_row(uint8_t row) @@ -368,16 +378,23 @@ static void init_rows(void) } } -static matrix_col_t read_rows(void) +static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { - matrix_col_t result = 0; - for(uint8_t x = 0; x < MATRIX_ROWS; x++) { - uint8_t pin = row_pins[x]; - result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (COL_SHIFTER << x); - } + // Select col and wait for col selecton to stabilize + select_col(current_col); + wait_us(30); - return result; + // For each row... + for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { + + // Select the row pin to read (active low) + uint8_t pin = row_pins[row_index]; + uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + + // Populate the matrix row with the state of the col pin + current_matrix[row_index] &= pin_state ? ~(ROW_SHIFTER << current_col) : 0; + } } static void select_col(uint8_t col) diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index 84e066c673..cee3593eee 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -31,16 +31,6 @@ typedef uint32_t matrix_row_t; #error "MATRIX_COLS: invalid value" #endif -#if (MATRIX_ROWS <= 8) -typedef uint8_t matrix_col_t; -#elif (MATRIX_ROWS <= 16) -typedef uint16_t matrix_col_t; -#elif (MATRIX_ROWS <= 32) -typedef uint32_t matrix_col_t; -#else -#error "MATRIX_COLS: invalid value" -#endif - #define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1< Date: Sat, 29 Oct 2016 10:39:03 -0500 Subject: Made scanning more efficient --- quantum/matrix.c | 55 ++++++++++++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/quantum/matrix.c b/quantum/matrix.c index 1bacea1bed..f45b251e4d 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -61,24 +61,18 @@ static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_raw[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -#if DIODE_DIRECTION == COL2ROW - static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -#else // ROW2COL - static matrix_col_t matrix_transposed[MATRIX_COLS]; - static matrix_col_t matrix_transposed_debouncing[MATRIX_COLS]; -#endif - #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); - static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) + static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); static void unselect_rows(void); static void select_row(uint8_t row); static void unselect_row(uint8_t row); #else // ROW2COL static void init_rows(void); - static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) + static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); static void unselect_cols(void); static void unselect_col(uint8_t col); static void select_col(uint8_t col); @@ -158,30 +152,18 @@ void matrix_init(void) { #if (DIODE_DIRECTION == COL2ROW) unselect_rows(); init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_raw[i] = 0; - matrix_debouncing[i] = 0; - } - #else // ROW2COL unselect_cols(); init_rows(); +#endif // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix_raw[i] = 0; matrix[i] = 0; + matrix_raw[i] = 0; + matrix_debouncing[i] = 0; } - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_COLS; i++) { - matrix_transposed_debouncing[i] = 0; - } -#endif - matrix_init_quantum(); } @@ -262,7 +244,7 @@ uint8_t matrix_scan(void) #endif matrix_scan_quantum(); - +// matrix_print(); return 1; } @@ -342,6 +324,9 @@ static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) // Populate the matrix row with the state of the col pin current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); } + + // Unselect row + unselect_row(current_row); } static void select_row(uint8_t row) @@ -388,13 +373,21 @@ static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) // For each row... for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { - // Select the row pin to read (active low) - uint8_t pin = row_pins[row_index]; - uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); - - // Populate the matrix row with the state of the col pin - current_matrix[row_index] &= pin_state ? ~(ROW_SHIFTER << current_col) : 0; + // Check row pin state + if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) + { + // Pin LO, set col bit + current_matrix[row_index] |= (ROW_SHIFTER << current_col); + } + else + { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); + } } + + // Unselect col + unselect_col(current_col); } static void select_col(uint8_t col) -- cgit v1.2.3 From 552f469dfc0368682151e3e97aba856e4ff75526 Mon Sep 17 00:00:00 2001 From: Sergey Lebedev Date: Sat, 29 Oct 2016 22:08:11 +0300 Subject: Add link to article about Unicode Hex Input in readme For me it wasn't clear what is `Unicode Hex Input`, that article clarifies it (at least for me). --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 9264f9376f..60a94d7d6d 100644 --- a/readme.md +++ b/readme.md @@ -906,7 +906,7 @@ In `quantum/keymap_extras/`, you'll see various language files - these work the ## 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. +You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout, see [this article](http://www.poynton.com/notes/misc/mac-unicode-hex-input.html) to learn more) - 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. ## Backlight Breathing -- cgit v1.2.3 From f4030289744fc6dc82dd85c955070c0845813cc5 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Sat, 29 Oct 2016 16:12:58 -0500 Subject: added fixed debounce code --- quantum/matrix.c | 143 +++++++++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 73 deletions(-) diff --git a/quantum/matrix.c b/quantum/matrix.c index f45b251e4d..3c488b417d 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -25,6 +25,19 @@ along with this program. If not, see . #include "debug.h" #include "util.h" #include "matrix.h" +#include "timer.h" + + +/* Set 0 if debouncing isn't needed */ + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#if (DEBOUNCING_DELAY > 0) + static uint16_t debouncing_time; + static bool debouncing = false; +#endif #if (MATRIX_COLS <= 8) # define print_matrix_header() print("\nr/c 01234567\n") @@ -44,15 +57,8 @@ along with this program. If not, see . #endif #ifdef MATRIX_MASKED -extern const matrix_row_t matrix_mask[]; -#endif - -/* Set 0 if debouncing isn't needed */ - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 + extern const matrix_row_t matrix_mask[]; #endif -static uint8_t debouncing = DEBOUNCING_DELAY; static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; @@ -66,13 +72,13 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS]; #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); - static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); + static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); static void unselect_rows(void); static void select_row(uint8_t row); static void unselect_row(uint8_t row); #else // ROW2COL static void init_rows(void); - static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); + static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); static void unselect_cols(void); static void unselect_col(uint8_t col); static void select_col(uint8_t col); @@ -174,83 +180,56 @@ uint8_t matrix_scan(void) // Set row, read cols for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { - read_cols_on_row(matrix, current_row); - } +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row); - // select_row(i); - // wait_us(30); // without this wait read unstable value. - // matrix_row_t current_row = read_cols(); - // if (matrix_debouncing[i] != current_row) { - // matrix_debouncing[i] = current_row; - // if (debouncing) { - // debug("bounce!: "); debug_hex(debouncing); debug("\n"); - // } - // debouncing = DEBOUNCING_DELAY; - // } - // unselect_row(i); - // } - - // if (debouncing) { - // if (--debouncing) { - // wait_ms(1); - // } else { - // for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - // matrix[i] = matrix_debouncing[i]; - // } - // } - // } + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } + +# else + read_cols_on_row(matrix, current_row); +# endif + + } #else // ROW2COL // Set col, read rows for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { - read_rows_on_col(matrix, current_col); - } +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col); + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } +# else + read_rows_on_col(matrix, current_col); +# endif - - // for (uint8_t i = 0; i < MATRIX_COLS; i++) { - // select_col(i); - // wait_us(30); // without this wait read unstable value. - // matrix_col_t current_col = read_rows(); - // if (matrix_transposed_debouncing[i] != current_col) { - // matrix_transposed_debouncing[i] = current_col; - // if (debouncing) { - // debug("bounce!: "); debug_hex(debouncing); debug("\n"); - // } - // debouncing = DEBOUNCING_DELAY; - // } - // unselect_col(i); - // } - - // if (debouncing) { - // if (--debouncing) { - // wait_ms(1); - // } else { - // for (uint8_t i = 0; i < MATRIX_COLS; i++) { - // matrix_transposed[i] = matrix_transposed_debouncing[i]; - // } - // } - // } - - // // Untranspose matrix - // for (uint8_t y = 0; y < MATRIX_ROWS; y++) { - // matrix_row_t row = 0; - // for (uint8_t x = 0; x < MATRIX_COLS; x++) { - // row |= ((matrix_transposed[x] & (1<> y) << x; - // } - // matrix[y] = row; - // } + } #endif +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + debouncing = false; + } +# endif + matrix_scan_quantum(); -// matrix_print(); return 1; } bool matrix_is_modified(void) { +#if (DEBOUNCING_DELAY > 0) if (debouncing) return false; +#endif return true; } @@ -305,8 +284,11 @@ static void init_cols(void) } } -static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + // Clear data in matrix row current_matrix[current_row] = 0; @@ -327,6 +309,8 @@ static void read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) // Unselect row unselect_row(current_row); + + return (last_row_value == current_matrix[current_row]); } static void select_row(uint8_t row) @@ -363,15 +347,20 @@ static void init_rows(void) } } -static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { + bool matrix_changed = false; // Select col and wait for col selecton to stabilize select_col(current_col); wait_us(30); // For each row... - for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { + for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) + { + + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[row_index]; // Check row pin state if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) @@ -384,10 +373,18 @@ static void read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) // Pin HI, clear col bit current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); } + + // Determine if the matrix changed state + if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) + { + matrix_changed = true; + } } // Unselect col unselect_col(current_col); + + return matrix_changed; } static void select_col(uint8_t col) -- cgit v1.2.3 From d956dd12481dfda5b26cd12da618838038d0229c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 30 Oct 2016 17:03:01 +0200 Subject: Run each sumbmake in a separate shell This will fix the situation where the commandline gets too long when there are many keyboards and keymaps. --- Makefile | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 0aaf585786..66c0ff30f4 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,9 @@ ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE)) STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) -TEST_DIR := $(ROOT_DIR)/.build/test +BUILD_DIR := $(ROOT_DIR)/.build +TEST_DIR := $(BUILD_DIR)/test +ERROR_FILE := $(BUILD_DIR)/error_occured MAKEFILE_INCLUDED=yes @@ -460,8 +462,21 @@ endef include $(ROOT_DIR)/message.mk -RUN_COMMAND = \ -$(COMMAND_$(SILENT_MODE)_$(COMMAND)) +# The empty line is important here, as it will force a new shell to be created for each command +# Otherwise the command line will become too long with a lot of keyboards and keymaps +define RUN_COMMAND ++error_occured=0;\ +$(COMMAND_$(SILENT_MODE)_$(COMMAND))\ +if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi; + + +endef +define RUN_TEST ++error_occured=0;\ +$($(TEST)_COMMAND))\ +if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi; + +endef # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) @@ -481,17 +496,17 @@ $(SUBPROJECTS): %: %-allkm *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ esac \ done + rm -f $(ERROR_FILE) > /dev/null 2>&1 $(eval $(call PARSE_RULE,$@)) $(eval $(call SET_SILENT_MODE)) # Run all the commands in the same shell, notice the + at the first line # it has to be there to allow parallel execution of the submake # This always tries to compile everything, even if error occurs in the middle # But we return the error code at the end, to trigger travis failures - +error_occured=0; \ - $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \ - if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ - $(foreach TEST,$(TESTS),$($(TEST)_COMMAND)) \ - if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\ + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; + $(foreach TEST,$(TESTS),$(RUN_TEST)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; # All should compile everything .PHONY: all -- cgit v1.2.3 From d5270af1118a86cc8aaf795005941ad980a0d128 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Tue, 1 Nov 2016 10:03:58 -0400 Subject: Implements dedicated text zoom keys --- keyboards/ergodox/keymaps/erez_experimental/keymap.c | 6 +++--- keyboards/ergodox/keymaps/erez_experimental/readme.md | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 47e40aa557..4804959d63 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -11,7 +11,7 @@ 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 | - | + * | = | 1 | 2 | 3 | 4 | 5 |Ctrl- | | Ctrl+| 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, LCTL(KC_MINS), KC_DELT, 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_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC), @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_SPC,KC_LEAD,KC_END, // right hand - KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, + LCTL(KC_EQL), KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT), MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC, diff --git a/keyboards/ergodox/keymaps/erez_experimental/readme.md b/keyboards/ergodox/keymaps/erez_experimental/readme.md index 66acfa187b..f0738d9a70 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/readme.md +++ b/keyboards/ergodox/keymaps/erez_experimental/readme.md @@ -4,6 +4,10 @@ This is my personal layout which I use to test out ideas which may or may not ma Changelog: +## Nov 1, 2016: + +* Adds dedicated text zooming keys in inner corners + ## May 24, 2016: * Implements Leader key example -- cgit v1.2.3 From 78976d8f7a7702eb4e94819af40fb3b32ac6825f Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 1 Nov 2016 11:52:58 -0500 Subject: Adding SKIP_GIT to speed up compiles. --- Makefile | 57 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 66c0ff30f4..aa33c40f1f 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ ERROR_FILE := $(BUILD_DIR)/error_occured MAKEFILE_INCLUDED=yes -# Helper function to process the newt element of a space separated path +# Helper function to process the newt element of a space separated path # It works a bit like the traditional functional head tail # so the CURRENT_PATH_ELEMENT will beome the new head # and the PATH_ELEMENTS are the rest that are still unprocessed @@ -47,16 +47,16 @@ define NEXT_PATH_ELEMENT $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) endef -# We change the / to spaces so that we more easily can work with the elements +# We change the / to spaces so that we more easily can work with the elements # separately PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) # Initialize the path elements list for further processing $(eval $(call NEXT_PATH_ELEMENT)) -# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct +# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct # variables depending on which directory you stand in. -# It's really a very simple if else chain, if you squint enough, -# but the makefile syntax makes it very verbose. +# It's really a very simple if else chain, if you squint enough, +# but the makefile syntax makes it very verbose. # If we are in a subfolder of keyboards ifeq ($(CURRENT_PATH_ELEMENT),keyboards) $(eval $(call NEXT_PATH_ELEMENT)) @@ -111,7 +111,7 @@ endif .DEFAULT_GOAL := all ifneq ($(KEYMAP),) ifeq ($(SUBPROJECT),) - # Inside a keymap folder, just build the keymap, with the + # Inside a keymap folder, just build the keymap, with the # default subproject .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) else @@ -163,7 +163,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3 ifneq ($1,) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) MATCHED_ITEM := $$(firstword $1) - else + else $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1))) endif endif @@ -171,10 +171,10 @@ endef # A recursive helper function for finding the longest match # $1 The list to be checed -# It works by always removing the currently matched item from the list +# It works by always removing the currently matched item from the list # and call itself recursively, until a match is found define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2 - # Stop the recursion when the list is empty + # Stop the recursion when the list is empty ifneq ($1,) RULE_BEFORE := $$(RULE) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1)) @@ -270,7 +270,7 @@ define PARSE_KEYBOARD $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) # If there's no matching subproject, we assume it's the default # This will allow you to leave the subproject part of the target out - else + else $$(eval $$(call PARSE_SUBPROJECT,)) endif endef @@ -285,7 +285,7 @@ endef # When entering this, the keyboard and subproject are known, so now we need # to determine which keymaps are going to get compiled define PARSE_SUBPROJECT - # If we want to compile the default subproject, then we need to + # If we want to compile the default subproject, then we need to # include the correct makefile to determine the actual name of it CURRENT_SP := $1 ifeq ($$(CURRENT_SP),) @@ -304,7 +304,7 @@ define PARSE_SUBPROJECT endif endif # The special allsp is handled later - ifneq ($$(CURRENT_SP),allsp) + ifneq ($$(CURRENT_SP),allsp) # get a list of all keymaps KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) ifneq ($$(CURRENT_SP),) @@ -343,7 +343,7 @@ define PARSE_SUBPROJECT endif endef -# If we want to parse all subprojects, but the keyboard doesn't have any, +# If we want to parse all subprojects, but the keyboard doesn't have any, # then use defaultsp instead define PARSE_ALL_SUBPROJECTS ifeq ($$(SUBPROJECTS),) @@ -448,7 +448,7 @@ endef # Set the silent mode depending on if we are trying to compile multiple keyboards or not -# By default it's on in that case, but it can be overriden by specifying silent=false +# By default it's on in that case, but it can be overriden by specifying silent=false # from the command line define SET_SILENT_MODE ifdef SUB_IS_SILENT @@ -481,11 +481,12 @@ endef # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) .PHONY: $(SUBPROJECTS) -$(SUBPROJECTS): %: %-allkm +$(SUBPROJECTS): %: %-allkm # Let's match everything, we handle all the rule parsing ourselves .PHONY: % -%: +ifndef SKIP_GIT +%: # Check if we have the CMP tool installed cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; # Check if the submodules are dirty, and display a warning if they are @@ -505,8 +506,24 @@ $(SUBPROJECTS): %: %-allkm # But we return the error code at the end, to trigger travis failures $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; - $(foreach TEST,$(TESTS),$(RUN_TEST)) + $(foreach TEST,$(TESTS),$(RUN_TEST)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; +else +%: + # Check if we have the CMP tool installed + cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; + rm -f $(ERROR_FILE) > /dev/null 2>&1 + $(eval $(call PARSE_RULE,$@)) + $(eval $(call SET_SILENT_MODE)) + # Run all the commands in the same shell, notice the + at the first line + # it has to be there to allow parallel execution of the submake + # This always tries to compile everything, even if error occurs in the middle + # But we return the error code at the end, to trigger travis failures + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; + $(foreach TEST,$(TESTS),$(RUN_TEST)) if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; +endif # All should compile everything .PHONY: all @@ -526,7 +543,11 @@ test: test-all test-clean: test-all-clean # Generate the version.h file -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +ifndef SKIP_GIT + GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +else + GIT_VERSION := NA +endif BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) -- cgit v1.2.3 From ff8b4a1d8971cea74ecdaa9cae24ffa1e0e4c120 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 5 Nov 2016 11:56:59 +0800 Subject: removed brackets anywhere but in brackets layer, added mouse layer back in, replaced all HYPR with MEH, put semicolon-newline and end-newline on symbol layer --- .../ergodox/keymaps/dvorak_programmer/Makefile | 2 +- .../ergodox/keymaps/dvorak_programmer/README.md | 9 ++++ .../ergodox/keymaps/dvorak_programmer/keymap.c | 59 +++++++++++++++------- 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile index 1fd6cb9ffd..3c65e25e19 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile +++ b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile @@ -5,4 +5,4 @@ FORCE_NKRO ?= yes DEBUG_ENABLE = no CONSOLE_ENABLE = no TAP_DANCE_ENABLE = yes -MOUSEKEY_ENABLE = no +MOUSEKEY_ENABLE = yes diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md index a4580fe064..76eb50ec29 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/README.md +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -13,3 +13,12 @@ Layers * NUMBER: keypad layer. * SYMBOL: all the symbols as well as brackets at the bottom. * SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps. +* MOUSE: use mouse keys + +Updates +------- + +2016/11/05: +* removed brackets anywhere but in brackets layer +* added mouse layer back in +* replaced all HYPR with MEH \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index 5100115a64..ab9f2389b9 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -13,6 +13,7 @@ #define SYMBOL 6 #define BRACKETS 7 #define SHORTCUTS 8 +#define MOUSE 9 // macros #define MC_COPY_LINE 0 @@ -57,13 +58,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( // layer 0 : default // left hand KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - LT(BRACKETS,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), + LT(BRACKETS,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), MO(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I, KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV), OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER), // thumb cluster - RCTL(KC_F), RCTL(KC_S), - RCTL(KC_DEL), + MO(MOUSE), RCTL(KC_S), + RCTL(KC_DEL), KC_BSPC,RCTL(KC_BSPC),KC_DEL, // right hand KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, @@ -73,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // lower keys - browser tab control RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), // thumb cluster - M(SEMICOLON_NEWLINE), M(END_NEWLINE), + LALT(KC_LEFT),LALT(KC_RIGHT), KC_UP, KC_DOWN,KC_ENT, KC_SPC ), @@ -96,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, LALT(KC_D), RCTL(KC_R), LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), LALT(KC_DOT), - RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), HYPR(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND), + RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND), // bottom row M(SCREEN_TAB_LEFT), M(SCREEN_TAB_RIGHT), M(SCREEN_NEW_TAB), KC_TRNS, KC_TRNS, // thumb cluster @@ -187,21 +188,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [SYMBOL] = KEYMAP( // left hand - KC_NO,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_TRNS,KC_TRNS, M(OPEN_CLOSE_PAREN), KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS, M(OPEN_CLOSE_BRACKET), KC_LBRC, KC_RBRC, M(OPEN_CLOSE_DOUBLE_QUOTE), - KC_TRNS,M(SEMICOLON_NEWLINE),M(OPEN_CLOSE_CURLY), KC_LCBR, KC_RCBR, M(OPEN_CLOSE_SINGLE_QUOTE),KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS, KC_MINS, KC_DLR, KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS, KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT, KC_HASH, KC_TRNS, KC_TRNS, - KC_LBRC, KC_RBRC, TD(TD_BRK_LEFT), TD(TD_BRK_RIGHT), KC_TRNS, - KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + M(SEMICOLON_NEWLINE), M(END_NEWLINE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), @@ -229,7 +230,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [SHORTCUTS] = KEYMAP( // left hand - KC_NO, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), HYPR(KC_F6), + KC_NO, MEH(KC_F1), MEH(KC_F2), MEH(KC_F3), MEH(KC_F4), MEH(KC_F5), MEH(KC_F6), KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, @@ -238,17 +239,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, // right hand - HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), HYPR(KC_F11), HYPR(KC_F12), M(SWITCH_NDS), - KC_TRNS, HYPR(KC_A), HYPR(KC_B), HYPR(KC_C), HYPR(KC_D), HYPR(KC_E), HYPR(KC_F), - HYPR(KC_G), HYPR(KC_H), HYPR(KC_I), HYPR(KC_J), HYPR(KC_K), HYPR(KC_L), - KC_TRNS, HYPR(KC_M), HYPR(KC_N), HYPR(KC_O), HYPR(KC_P), HYPR(KC_Q), HYPR(KC_R), - LALT(KC_LEFT),LALT(KC_RIGHT),KC_F5, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), + MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10), MEH(KC_F11), MEH(KC_F12), M(SWITCH_NDS), + KC_TRNS, MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), + MEH(KC_G), MEH(KC_H), MEH(KC_I), MEH(KC_J), MEH(KC_K), MEH(KC_L), + KC_TRNS, MEH(KC_M), MEH(KC_N), MEH(KC_O), MEH(KC_P), MEH(KC_Q), MEH(KC_R), + KC_TRNS, KC_TRNS,KC_F5, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), +[MOUSE] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, 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_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_BTN1, KC_BTN2 +), + }; -- cgit v1.2.3 From 78a1dc84dd8ac98eac6bc36d3014dea7ab300c1a Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 5 Nov 2016 11:58:23 +0800 Subject: updated readme --- keyboards/ergodox/keymaps/dvorak_programmer/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md index 76eb50ec29..931bc48960 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/README.md +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -21,4 +21,5 @@ Updates 2016/11/05: * removed brackets anywhere but in brackets layer * added mouse layer back in -* replaced all HYPR with MEH \ No newline at end of file +* replaced all HYPR with MEH +* put semicolon-newline and end-newline on symbol layer \ No newline at end of file -- cgit v1.2.3 From b8e204322ad8b067dc11b03668f0d32c67440b84 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 5 Nov 2016 12:07:33 +0800 Subject: added more shortcut keys --- keyboards/ergodox/keymaps/dvorak_programmer/README.md | 4 ++-- keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md index 931bc48960..63896909cc 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/README.md +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -21,5 +21,5 @@ Updates 2016/11/05: * removed brackets anywhere but in brackets layer * added mouse layer back in -* replaced all HYPR with MEH -* put semicolon-newline and end-newline on symbol layer \ No newline at end of file +* put semicolon-newline and end-newline on symbol layer +* replaced all HYPR with MEH, added more shortcut keys \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index ab9f2389b9..38359128f9 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -235,18 +235,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + MEH(KC_0),MEH(KC_1), + MEH(KC_2), + MEH(KC_3),MEH(KC_4),MEH(KC_5), // right hand MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10), MEH(KC_F11), MEH(KC_F12), M(SWITCH_NDS), KC_TRNS, MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), MEH(KC_G), MEH(KC_H), MEH(KC_I), MEH(KC_J), MEH(KC_K), MEH(KC_L), KC_TRNS, MEH(KC_M), MEH(KC_N), MEH(KC_O), MEH(KC_P), MEH(KC_Q), MEH(KC_R), - KC_TRNS, KC_TRNS,KC_F5, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RIGHT)), - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS + MEH(KC_S), MEH(KC_T), MEH(KC_U), MEH(KC_V), MEH(KC_X), + MEH(KC_6), MEH(KC_7), + MEH(KC_8), + MEH(KC_9), MEH(KC_Y), MEH(KC_Z) ), -- cgit v1.2.3 From c06e2486abda43205a490fc6b233f72f34667857 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 5 Nov 2016 22:45:21 +0200 Subject: Increase the infinity60 system tick frequency --- keyboards/infinity60/chconf.h | 2 +- keyboards/infinity60/matrix.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/keyboards/infinity60/chconf.h b/keyboards/infinity60/chconf.h index 43c845739a..d9114ec858 100644 --- a/keyboards/infinity60/chconf.h +++ b/keyboards/infinity60/chconf.h @@ -48,7 +48,7 @@ * @details Frequency of the system timer that drives the system ticks. This * setting also defines the system tick time unit. */ -#define CH_CFG_ST_FREQUENCY 1000 +#define CH_CFG_ST_FREQUENCY 100000 /** * @brief Time delta constant for the tick-less mode. diff --git a/keyboards/infinity60/matrix.c b/keyboards/infinity60/matrix.c index 62c165aa53..d2f1852885 100644 --- a/keyboards/infinity60/matrix.c +++ b/keyboards/infinity60/matrix.c @@ -96,7 +96,12 @@ uint8_t matrix_scan(void) } #endif - wait_us(1); // need wait to settle pin state + // need wait to settle pin state + // if you wait too short, or have a too high update rate + // the keyboard might freeze, or there might not be enough + // processing power to update the LCD screen properly. + // 20us, or two ticks at 100000Hz seems to be OK + wait_us(20); // read col data data = (palReadPort(GPIOD)>>1); -- cgit v1.2.3 From 1d766c596e8e457db3f5d7cdba1d3323d98439f9 Mon Sep 17 00:00:00 2001 From: Jonathan Arnett Date: Sun, 6 Nov 2016 13:48:20 -0500 Subject: Removed the control action when holding z or / --- keyboards/ergodox/keymaps/j3rn/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c index d913ea4a5e..2069f26ae5 100644 --- a/keyboards/ergodox/keymaps/j3rn/keymap.c +++ b/keyboards/ergodox/keymaps/j3rn/keymap.c @@ -16,7 +16,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L | ; | ' | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | ~L1 | Alt |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' @@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), MO(SYMB), KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_HOME, @@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB), KC_PGUP, CTL_T(KC_ESC), -- cgit v1.2.3 From f519b94be7086852f2afe4ec248786b47968f7ff Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 6 Nov 2016 21:57:26 +0200 Subject: Add variable trace For debugging changes to variables, either normally or as a result of a memory corruption. --- build_keyboard.mk | 2 + quantum/variable_trace.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 quantum/variable_trace.c diff --git a/build_keyboard.mk b/build_keyboard.mk index 282adcb118..461b17cd77 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -180,6 +180,8 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) VAPTH += $(SERIAL_PATH) endif +SRC += $(QUANTUM_DIR)/variable_trace.c + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/quantum/variable_trace.c b/quantum/variable_trace.c new file mode 100644 index 0000000000..dfa37bdef5 --- /dev/null +++ b/quantum/variable_trace.c @@ -0,0 +1,108 @@ +#include "variable_trace.h" +#include +#include + +#ifdef NO_PRINT +#error "You need undef NO_PRINT to use the variable trace feature" +#endif + +#ifndef CONSOLE_ENABLE +#error "The console needs to be enabled in the makefile to use the variable trace feature" +#endif + + +#define NUM_TRACED_VARIABLES 1 +#define MAX_TRACE_SIZE 4 + +typedef struct { + const char* name; + void* addr; + unsigned size; + const char* func; + int line; + uint8_t last_value[MAX_TRACE_SIZE]; + +} traced_variable_t; + +static traced_variable_t traced_variables[NUM_TRACED_VARIABLES]; + +void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line) { + verify_traced_variables(func, line); + if (size > MAX_TRACE_SIZE) { +#if defined(__AVR__) + xprintf("Traced variable \"%S\" exceeds the maximum size %d\n", name, size); +#else + xprintf("Traced variable \"%s\" exceeds the maximum size %d\n", name, size); +#endif + size = MAX_TRACE_SIZE; + } + int index = -1; + for (int i = 0; i < NUM_TRACED_VARIABLES; i++) { + if (index == -1 && traced_variables[i].addr == NULL){ + index = i; + } + else if (strcmp_P(name, traced_variables[i].name)==0) { + index = i; + break; + } + } + + if (index == -1) { + xprintf("You can only trace %d variables at the same time\n", NUM_TRACED_VARIABLES); + return; + } + + traced_variable_t* t = &traced_variables[index]; + t->name = name; + t->addr = addr; + t->size = size; + t->func = func; + t->line = line; + memcpy(&t->last_value[0], addr, size); + +} + +void remove_traced_variable(const char* name, const char* func, int line) { + verify_traced_variables(func, line); + for (int i = 0; i < NUM_TRACED_VARIABLES; i++) { + if (strcmp_P(name, traced_variables[i].name)==0) { + traced_variables[i].name = 0; + traced_variables[i].addr = NULL; + break; + } + } +} + +void verify_traced_variables(const char* func, int line) { + for (int i = 0; i < NUM_TRACED_VARIABLES; i++) { + traced_variable_t* t = &traced_variables[i]; + if (t->addr != NULL && t->name != NULL) { + if (memcmp(t->last_value, t->addr, t->size)!=0){ +#if defined(__AVR__) + xprintf("Traced variable \"%S\" has been modified\n", t->name); + xprintf("Between %S:%d\n", t->func, t->line); + xprintf("And %S:%d\n", func, line); + +#else + xprintf("Traced variable \"%s\" has been modified\n", t->name); + xprintf("Between %s:%d\n", t->func, t->line); + xprintf("And %s:%d\n", func, line); +#endif + xprintf("Previous value "); + for (int j=0; jsize;j++) { + print_hex8(t->last_value[j]); + } + xprintf("\nNew value "); + uint8_t* addr = (uint8_t*)(t->addr); + for (int j=0; jsize;j++) { + print_hex8(addr[j]); + } + xprintf("\n"); + memcpy(t->last_value, addr, t->size); + } + } + + t->func = func; + t->line = line; + } +} -- cgit v1.2.3 From a377017c95b826d83ac7a46ef176d39a58294b44 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 6 Nov 2016 22:11:24 +0200 Subject: Add possibility to control variable trace from make --- build_keyboard.mk | 8 +++++++- quantum/variable_trace.c | 10 ++++++---- quantum/variable_trace.h | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 quantum/variable_trace.h diff --git a/build_keyboard.mk b/build_keyboard.mk index 461b17cd77..61aebf3935 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -180,7 +180,13 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) VAPTH += $(SERIAL_PATH) endif -SRC += $(QUANTUM_DIR)/variable_trace.c +ifneq ($(strip $(VARIABLE_TRACE)),) + SRC += $(QUANTUM_DIR)/variable_trace.c + OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE)) +ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),) + OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE)) +endif +endif # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/quantum/variable_trace.c b/quantum/variable_trace.c index dfa37bdef5..de580244c3 100644 --- a/quantum/variable_trace.c +++ b/quantum/variable_trace.c @@ -12,7 +12,9 @@ #define NUM_TRACED_VARIABLES 1 -#define MAX_TRACE_SIZE 4 +#ifndef MAX_VARIABLE_TRACE_SIZE + #define MAX_VARIABLE_TRACE_SIZE 4 +#endif typedef struct { const char* name; @@ -20,7 +22,7 @@ typedef struct { unsigned size; const char* func; int line; - uint8_t last_value[MAX_TRACE_SIZE]; + uint8_t last_value[MAX_VARIABLE_TRACE_SIZE]; } traced_variable_t; @@ -28,13 +30,13 @@ static traced_variable_t traced_variables[NUM_TRACED_VARIABLES]; void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line) { verify_traced_variables(func, line); - if (size > MAX_TRACE_SIZE) { + if (size > MAX_VARIABLE_TRACE_SIZE) { #if defined(__AVR__) xprintf("Traced variable \"%S\" exceeds the maximum size %d\n", name, size); #else xprintf("Traced variable \"%s\" exceeds the maximum size %d\n", name, size); #endif - size = MAX_TRACE_SIZE; + size = MAX_VARIABLE_TRACE_SIZE; } int index = -1; for (int i = 0; i < NUM_TRACED_VARIABLES; i++) { diff --git a/quantum/variable_trace.h b/quantum/variable_trace.h new file mode 100644 index 0000000000..9899816f6c --- /dev/null +++ b/quantum/variable_trace.h @@ -0,0 +1,25 @@ +#ifndef VARIABLE_TRACE_H +#define VARIABLE_TRACE_H + +#include "print.h" + +#ifdef NUM_TRACED_VARIABLES + +#define ADD_TRACED_VARIABLE(name, addr, size) \ + add_traced_variable(PSTR(name), (void*)addr, size, PSTR(__FILE__), __LINE__) +#define REMOVE_TRACED_VARIABLE(name) remove_traced_variable(PSTR(name), PSTR(__FILE__), __LINE__) +#define VERIFY_TRACED_VARIABLES() verify_traced_variables(PSTR(__FILE__), __LINE__) + +#else + +#define ADD_TRACED_VARIABLE(name, addr, size) +#define REMOVE_TRACED_VARIABLE(name) +#define VERIFY_TRACED_VARIABLES() + +#endif + +// Don't call directly, use the macros instead +void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line); +void remove_traced_variable(const char* name, const char* func, int line); +void verify_traced_variables(const char* func, int line); +#endif -- cgit v1.2.3 From 0ba3e523a7c124e4ce54dfd043dc32e72ad3233b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 6 Nov 2016 22:44:43 +0200 Subject: Add documentation for the variable tracing --- quantum/variable_trace.h | 9 +++++++++ readme.md | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/quantum/variable_trace.h b/quantum/variable_trace.h index 9899816f6c..46bd827861 100644 --- a/quantum/variable_trace.h +++ b/quantum/variable_trace.h @@ -1,13 +1,22 @@ #ifndef VARIABLE_TRACE_H #define VARIABLE_TRACE_H +// For more information about the variable tracing see the readme. + #include "print.h" #ifdef NUM_TRACED_VARIABLES +// Start tracing a variable at the memory address addr +// The name can be anything and is used only for reporting +// The size should usually be the same size as the variable you are interested in #define ADD_TRACED_VARIABLE(name, addr, size) \ add_traced_variable(PSTR(name), (void*)addr, size, PSTR(__FILE__), __LINE__) + +// Stop tracing the variable with the given name #define REMOVE_TRACED_VARIABLE(name) remove_traced_variable(PSTR(name), PSTR(__FILE__), __LINE__) + +// Call to get messages when the variable has been changed #define VERIFY_TRACED_VARIABLES() verify_traced_variables(PSTR(__FILE__), __LINE__) #else diff --git a/readme.md b/readme.md index 60a94d7d6d..d5a259ccb8 100644 --- a/readme.md +++ b/readme.md @@ -343,6 +343,10 @@ This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly This allows you output audio on the C6 pin (needs abstracting). See the [audio section](#driving-a-speaker---audio-support) for more information. +`VARIABLE_TRACE` + +Use this to debug changes to variable values, see the [tracing variables](#tracing-variables) section for more information. + ### Customizing Makefile options on a per-keymap basis If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard. @@ -1283,3 +1287,22 @@ If there are problems with the tests, you can find the executable in the `./buil It's not yet possible to do a full integration test, where you would compile the whole firmware and define a keymap that you are going to test. However there are plans for doing that, because writing tests that way would probably be easier, at least for people that are not used to unit testing. In that model you would emulate the input, and expect a certain output from the emulated keyboard. + +# Tracing variables + +Sometimes you might wonder why a variable gets changed and where, and this can be quite tricky to track down without having a debugger. It's of course possible to manually add print statements to track it, but you can also enable the variable trace feature. This works for both for variables that are changed by the code, and when the variable is changed by some memory corruption. + +To take the feature into use add `VARIABLE_TRACE=x` to the end of you make command. `x` represents the number of variables you want to trace, which is usually 1. + +Then at a suitable place in the code, call `ADD_TRACED_VARIABLE`, to begin the tracing. For example to trace all the layer changes, you can do this +```c +void matrix_init_user(void) { + ADD_TRACED_VARIABLE("layer", &layer_state, sizeof(layer_state)); +} +``` + +This will add a traced variable named "layer" (the name is just for your information), which tracks the memory location of `layer_state`. It tracks 4 bytes (the size of `layer_state`), so any modification to the variable will be reported. By default you can not specify a size bigger than 4, but you can change it by adding `MAX_VARIABLE_TRACE_SIZE=x` to the end of the make command line. + +In order to actually detect changes to the variables you should call `VERIFY_TRACED_VARIABLES` around the code that you think that modifies the variable. If a variable is modified it will tell you between which two `VERIFY_TRACED_VARIABLES` calls the modification happened. You can then add more calls to track it down further. I don't recommend spamming the codebase with calls. It's better to start with a few, and then keep adding them in a binary search fashion. You can also delete the ones you don't need, as each call need to store the file name and line number in the ROM, so you can run out of memory if you add too many calls. + +Also remember to delete all the tracing code ones you have found the bug, as you wouldn't want to create a pull request with tracing code. \ No newline at end of file -- cgit v1.2.3 From 7aa31ad338325477199f752ac3e344a6ab9b27d0 Mon Sep 17 00:00:00 2001 From: Potiguar Faga Date: Tue, 8 Nov 2016 13:32:04 -0200 Subject: Add brazilian ABNT2 keymap --- quantum/keymap_extras/keymap_br_abnt2.h | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 quantum/keymap_extras/keymap_br_abnt2.h diff --git a/quantum/keymap_extras/keymap_br_abnt2.h b/quantum/keymap_extras/keymap_br_abnt2.h new file mode 100644 index 0000000000..0df177721d --- /dev/null +++ b/quantum/keymap_extras/keymap_br_abnt2.h @@ -0,0 +1,58 @@ +#ifndef KEYMAP_BR_ABNT2_H +#define KEYMAP_BR_ABNT2_H + +#include "keymap_common.h" + +/* Scan codes for the Brazilian ABNT2 keyboard layout */ + +#define BR_CCDL KC_SCLN // Ç same scancode as ;: on US layout +#define BR_SCLN KC_SLSH // ;: same scancode as /? on US layout +#define BR_QUOT KC_GRV // '" same scancode as `~ on US layout +#define BR_TILD KC_QUOT // ~^ dead keys, same scancode as '" on US layout +#define BR_ACUT KC_LBRC // ´` dead keys, same scancode as [{ on US layout +#define BR_LBRC KC_RBRC // [{ same scancode as ]} on US layout +#define BR_RBRC KC_BSLS // ]} same scancode as \| on US layout +#define BR_BSLS KC_NUBS // \| uses the non-US hash scancode (#~, sometimes §±) +#define BR_SLSH KC_INT1 // /? uses the INTL1 scancode + +#define BR_COLN LSFT(BR_SCLN) // shifted : +#define BR_DQT LSFT(BR_QUOT) // shifted " +#define BR_CIRC LSFT(BR_TILD) // shifted ^ (dead key) +#define BR_GRAV LSFT(BR_ACUT) // shifted ` (dead key) +#define BR_LCBR LSFT(BR_LBRC) // shifted { +#define BR_RCBR LSFT(BR_RBRC) // shifted } +#define BR_PIPE LSFT(BR_BSLS) // shifted | +#define BR_QUES LSFT(BR_SLSH) // shifted ? +#define BR_TRMA LSFT(KC_6) // shifted ¨ (dead key - trema accent) + +// On the ABNT2 the keypad comma and the keypad dot scancodes are switched +// (presumably because in Brazil comma is used as the decimal separator) +#define BR_KPDT KC_KP_COMMA // keypad . +#define BR_KPCM KC_KP_DOT // keypad , + +#define BR_1UP LALT(KC_1) // 1 superscript ¹ alt+1 +#define BR_2UP LALT(KC_2) // 2 superscript ² alt+2 +#define BR_3UP LALT(KC_3) // 3 superscript ³ alt+3 +#define BR_PND LALT(KC_4) // Pound sign £ alt+4 +#define BR_CENT LALT(KC_5) // Cent sign ¢ alt+5 +#define BR_NOT LALT(KC_6) // Not sign ¬ alt+6 +#define BR_SECT LALT(KC_EQL) // Section sign § alt+= +#define BR_FORD LALT(BR_LBRC) // Feminine Ordinal Sign ª alt+[ +#define BR_MORD LALT(BR_RBRC) // Masculine Ordinal Sign º alt+] +#define BR_DGRE LALT(BR_SLSH) // Degree sign ° alt+/ + +#define BR_EURO LALT(KC_E) // Euro sign € alt+e +#define BR_NDTD LALT(BR_TILD) // Non-dead key tilde ~ alt+~ +#define BR_NDAC LALT(BR_ACUT) // Non-dead key acute accent ´ alt+´ +#define BR_NDGV LALT(BR_QUOT) // Non-dead key grave accent ` alt+' +#define BR_NDCR LALT(BR_CIRC) // Non-dead key circumflex accent ^ alt+^ (alt+shift+~) +#define BR_NDTR LALT(BR_TRMA) // Non-dead key trema accent ¨ alt+¨ (alt+shift+6) + +// For 101-key keyboard layouts, the ABNT2 layout allows +// the slash and question mark to be typed using alt+q and alt+w. +// The shortcuts are provided here for completeness' sake, +// but it's recommended to use BR_SLSH and BR_QUES instead +#define BR_ASLS LALT(KC_Q) +#define BR_AQST LALT(KC_W) + +#endif -- cgit v1.2.3 From 64218f0f7018cf0ebedb14197b07d05904b5bc09 Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Tue, 8 Nov 2016 22:05:24 -0500 Subject: Add proper shortcode for KC_DELETE to keycode.txt --- doc/keycode.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/keycode.txt b/doc/keycode.txt index 5a42c50bfb..687406fdab 100644 --- a/doc/keycode.txt +++ b/doc/keycode.txt @@ -84,7 +84,7 @@ KC_PAUSE KC_PAUS 48 Keyboard Pause1 KC_INSERT KC_INS 49 Keyboard Insert1 KC_HOME 4A Keyboard Home1 KC_PGUP 4B Keyboard PageUp1 -KC_DELETE KC_DELETE 4C Keyboard Delete Forward +KC_DELETE KC_DEL 4C Keyboard Delete Forward KC_END 4D Keyboard End1 KC_PGDOWN KC_PGDN 4E Keyboard PageDown1 KC_RIGHT KC_RGHT 4F Keyboard RightArrow1 -- cgit v1.2.3 From 6e27f6fbde47804035d508eb84690ed7ee9acee7 Mon Sep 17 00:00:00 2001 From: climbalima Date: Thu, 10 Nov 2016 18:19:13 -0500 Subject: Changes to be committed: new file: keyboards/lets_splitv2/Makefile new file: keyboards/lets_splitv2/config.h new file: keyboards/lets_splitv2/i2c.c new file: keyboards/lets_splitv2/i2c.h new file: keyboards/lets_splitv2/imgs/split-keyboard-i2c-schematic.png new file: keyboards/lets_splitv2/imgs/split-keyboard-serial-schematic.png new file: keyboards/lets_splitv2/keymaps/default/keymap.c new file: keyboards/lets_splitv2/lets_split.c new file: keyboards/lets_splitv2/lets_split.h new file: keyboards/lets_splitv2/matrix.c new file: keyboards/lets_splitv2/pro_micro.h new file: keyboards/lets_splitv2/readme.md new file: keyboards/lets_splitv2/serial.c new file: keyboards/lets_splitv2/serial.h new file: keyboards/lets_splitv2/split_util.c new file: keyboards/lets_splitv2/split_util.h new file: keyboards/maxipad/Makefile new file: keyboards/maxipad/config.h new file: keyboards/maxipad/keymaps/default/Makefile new file: keyboards/maxipad/keymaps/default/config.h new file: keyboards/maxipad/keymaps/default/keymap.c new file: keyboards/maxipad/keymaps/default/readme.md new file: keyboards/maxipad/maxipad.c new file: keyboards/maxipad/maxipad.h new file: keyboards/maxipad/readme.md --- keyboards/lets_split/Makefile | 2 +- keyboards/lets_split/config.h | 6 +- keyboards/lets_split/keymaps/default/keymap.c | 65 +--- keyboards/lets_split/lets_split.h | 8 +- keyboards/lets_splitv2/Makefile | 78 +++++ keyboards/lets_splitv2/config.h | 98 ++++++ keyboards/lets_splitv2/i2c.c | 159 +++++++++ keyboards/lets_splitv2/i2c.h | 31 ++ .../imgs/split-keyboard-i2c-schematic.png | Bin 0 -> 26565 bytes .../imgs/split-keyboard-serial-schematic.png | Bin 0 -> 19487 bytes keyboards/lets_splitv2/keymaps/default/keymap.c | 159 +++++++++ keyboards/lets_splitv2/lets_split.c | 30 ++ keyboards/lets_splitv2/lets_split.h | 25 ++ keyboards/lets_splitv2/matrix.c | 311 ++++++++++++++++++ keyboards/lets_splitv2/pro_micro.h | 362 +++++++++++++++++++++ keyboards/lets_splitv2/readme.md | 102 ++++++ keyboards/lets_splitv2/serial.c | 225 +++++++++++++ keyboards/lets_splitv2/serial.h | 26 ++ keyboards/lets_splitv2/split_util.c | 76 +++++ keyboards/lets_splitv2/split_util.h | 22 ++ keyboards/maxipad/Makefile | 75 +++++ keyboards/maxipad/config.h | 162 +++++++++ keyboards/maxipad/keymaps/default/Makefile | 21 ++ keyboards/maxipad/keymaps/default/config.h | 8 + keyboards/maxipad/keymaps/default/keymap.c | 54 +++ keyboards/maxipad/keymaps/default/readme.md | 1 + keyboards/maxipad/maxipad.c | 28 ++ keyboards/maxipad/maxipad.h | 25 ++ keyboards/maxipad/readme.md | 28 ++ 29 files changed, 2119 insertions(+), 68 deletions(-) create mode 100644 keyboards/lets_splitv2/Makefile create mode 100644 keyboards/lets_splitv2/config.h create mode 100644 keyboards/lets_splitv2/i2c.c create mode 100644 keyboards/lets_splitv2/i2c.h create mode 100644 keyboards/lets_splitv2/imgs/split-keyboard-i2c-schematic.png create mode 100644 keyboards/lets_splitv2/imgs/split-keyboard-serial-schematic.png create mode 100644 keyboards/lets_splitv2/keymaps/default/keymap.c create mode 100644 keyboards/lets_splitv2/lets_split.c create mode 100644 keyboards/lets_splitv2/lets_split.h create mode 100644 keyboards/lets_splitv2/matrix.c create mode 100644 keyboards/lets_splitv2/pro_micro.h create mode 100644 keyboards/lets_splitv2/readme.md create mode 100644 keyboards/lets_splitv2/serial.c create mode 100644 keyboards/lets_splitv2/serial.h create mode 100644 keyboards/lets_splitv2/split_util.c create mode 100644 keyboards/lets_splitv2/split_util.h create mode 100644 keyboards/maxipad/Makefile create mode 100644 keyboards/maxipad/config.h create mode 100644 keyboards/maxipad/keymaps/default/Makefile create mode 100644 keyboards/maxipad/keymaps/default/config.h create mode 100644 keyboards/maxipad/keymaps/default/keymap.c create mode 100644 keyboards/maxipad/keymaps/default/readme.md create mode 100644 keyboards/maxipad/maxipad.c create mode 100644 keyboards/maxipad/maxipad.h create mode 100644 keyboards/maxipad/readme.md diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index b9f07636be..982cfc591b 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -67,7 +67,7 @@ AUDIO_ENABLE ?= yes # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - +USE_I2C ?= yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 6f90997ab4..bf618704cd 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . #define PRODUCT_ID 0x3060 #define DEVICE_VER 0x0001 #define MANUFACTURER Wootpatoot -#define PRODUCT Lets Split +#define PRODUCT Lets Split v2 #define DESCRIPTION A split keyboard for the cheap makers /* key matrix size */ @@ -34,8 +34,8 @@ along with this program. If not, see . #define MATRIX_COLS 6 // wiring of each half -#define MATRIX_ROW_PINS { B5, B4, E6, D7 } -#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } +#define MATRIX_ROW_PINS { D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } #define CATERINA_BOOTLOADER diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 0d2d94b672..8c8466ebd5 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -42,64 +42,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_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 , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + KC_LCTL, _LOWER, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_LSFT, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = KEYMAP( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ [_LOWER] = KEYMAP( \ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), /* Raise @@ -117,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), /* Adjust (Lower + Raise) @@ -131,14 +84,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -[_ADJUST] = KEYMAP( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - }; #ifdef AUDIO_ENABLE diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h index fe7ae07679..04844ed639 100644 --- a/keyboards/lets_split/lets_split.h +++ b/keyboards/lets_split/lets_split.h @@ -6,10 +6,10 @@ void promicro_bootloader_jmp(bool program); #define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ - k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ - k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ - k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ + k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ + k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ + k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ + k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ ) \ { \ { k00, k01, k02, k03, k04, k05 }, \ diff --git a/keyboards/lets_splitv2/Makefile b/keyboards/lets_splitv2/Makefile new file mode 100644 index 0000000000..982cfc591b --- /dev/null +++ b/keyboards/lets_splitv2/Makefile @@ -0,0 +1,78 @@ +SRC += matrix.c \ + i2c.c \ + split_util.c \ + serial.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= yes # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +USE_I2C ?= yes +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +CUSTOM_MATRIX = yes + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets_splitv2/config.h b/keyboards/lets_splitv2/config.h new file mode 100644 index 0000000000..bf618704cd --- /dev/null +++ b/keyboards/lets_splitv2/config.h @@ -0,0 +1,98 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split v2 +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif \ No newline at end of file diff --git a/keyboards/lets_splitv2/i2c.c b/keyboards/lets_splitv2/i2c.c new file mode 100644 index 0000000000..c72789403e --- /dev/null +++ b/keyboards/lets_splitv2/i2c.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include "i2c.h" + +// Limits the amount of we wait for any one i2c transaction. +// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is +// 9 bits, a single transaction will take around 90μs to complete. +// +// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit +// poll loop takes at least 8 clock cycles to execute +#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 + +#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) + +volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +static volatile uint8_t slave_buffer_pos; +static volatile bool slave_has_register_set = false; + +// Wait for an i2c operation to finish +inline static +void i2c_delay(void) { + uint16_t lim = 0; + while(!(TWCR & (1<10. + // Check datasheets for more info. + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// Start a transaction with the given i2c slave address. The direction of the +// transfer is set with I2C_READ and I2C_WRITE. +// returns: 0 => success +// 1 => error +uint8_t i2c_master_start(uint8_t address) { + TWCR = (1< slave ACK +// 1 => slave NACK +uint8_t i2c_master_write(uint8_t data) { + TWDR = data; + TWCR = (1<= SLAVE_BUFFER_SIZE ) { + ack = 0; + slave_buffer_pos = 0; + } + slave_has_register_set = true; + } else { + i2c_slave_buffer[slave_buffer_pos] = TWDR; + BUFFER_POS_INC(); + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // master has addressed this device as a slave transmitter and is + // requesting data. + TWDR = i2c_slave_buffer[slave_buffer_pos]; + BUFFER_POS_INC(); + break; + + case TW_BUS_ERROR: // something went wrong, reset twi state + TWCR = 0; + default: + break; + } + // Reset everything, so we are ready for the next TWI interrupt + TWCR |= (1< + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#define I2C_READ 1 +#define I2C_WRITE 0 + +#define I2C_ACK 1 +#define I2C_NACK 0 + +#define SLAVE_BUFFER_SIZE 0x10 + +// i2c SCL clock frequency +#define SCL_CLOCK 100000L + +extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +void i2c_master_init(void); +uint8_t i2c_master_start(uint8_t address); +void i2c_master_stop(void); +uint8_t i2c_master_write(uint8_t data); +uint8_t i2c_master_read(int); +void i2c_reset_state(void); +void i2c_slave_init(uint8_t address); + +#endif diff --git a/keyboards/lets_splitv2/imgs/split-keyboard-i2c-schematic.png b/keyboards/lets_splitv2/imgs/split-keyboard-i2c-schematic.png new file mode 100644 index 0000000000..8882947187 Binary files /dev/null and b/keyboards/lets_splitv2/imgs/split-keyboard-i2c-schematic.png differ diff --git a/keyboards/lets_splitv2/imgs/split-keyboard-serial-schematic.png b/keyboards/lets_splitv2/imgs/split-keyboard-serial-schematic.png new file mode 100644 index 0000000000..7621d38ed9 Binary files /dev/null and b/keyboards/lets_splitv2/imgs/split-keyboard-serial-schematic.png differ diff --git a/keyboards/lets_splitv2/keymaps/default/keymap.c b/keyboards/lets_splitv2/keymaps/default/keymap.c new file mode 100644 index 0000000000..8c8466ebd5 --- /dev/null +++ b/keyboards/lets_splitv2/keymaps/default/keymap.c @@ -0,0 +1,159 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_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_LCTL, _LOWER, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_LSFT, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/lets_splitv2/lets_split.c b/keyboards/lets_splitv2/lets_split.c new file mode 100644 index 0000000000..574c116a75 --- /dev/null +++ b/keyboards/lets_splitv2/lets_split.c @@ -0,0 +1,30 @@ +#include "lets_split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} diff --git a/keyboards/lets_splitv2/lets_split.h b/keyboards/lets_splitv2/lets_split.h new file mode 100644 index 0000000000..04844ed639 --- /dev/null +++ b/keyboards/lets_splitv2/lets_split.h @@ -0,0 +1,25 @@ +#ifndef LETS_SPLIT_H +#define LETS_SPLIT_H + +#include "quantum.h" + +void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ + k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ + k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ + k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } + +#endif \ No newline at end of file diff --git a/keyboards/lets_splitv2/matrix.c b/keyboards/lets_splitv2/matrix.c new file mode 100644 index 0000000000..1d768c59b3 --- /dev/null +++ b/keyboards/lets_splitv2/matrix.c @@ -0,0 +1,311 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "i2c.h" +#include "serial.h" +#include "split_util.h" +#include "pro_micro.h" +#include "config.h" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +#define ERROR_DISCONNECT_COUNT 5 + +static uint8_t debouncing = DEBOUNCE; +static const int ROWS_PER_HAND = MATRIX_ROWS/2; +static uint8_t error_count = 0; + +static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + debug_enable = true; + debug_matrix = true; + debug_mouse = true; + // initialize row and col + unselect_rows(); + init_cols(); + + TX_RX_LED_INIT; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); +} + +uint8_t _matrix_scan(void) +{ + // Right hand is stored after the left in the matirx so, we need to offset it + int offset = isLeftHand ? 0 : (ROWS_PER_HAND); + + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + select_row(i); + _delay_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i+offset] != cols) { + matrix_debouncing[i+offset] = cols; + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + matrix[i+offset] = matrix_debouncing[i+offset]; + } + } + } + + return 1; +} + +// Get rows from other half over i2c +int i2c_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); + if (err) goto i2c_error; + + // start of matrix stored at 0x00 + err = i2c_master_write(0x00); + if (err) goto i2c_error; + + // Start read + err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); + if (err) goto i2c_error; + + if (!err) { + int i; + for (i = 0; i < ROWS_PER_HAND-1; ++i) { + matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); + } + matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); + i2c_master_stop(); + } else { +i2c_error: // the cable is disconnceted, or something else went wrong + i2c_reset_state(); + return err; + } + + return 0; +} + +#ifndef USE_I2C +int serial_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + if (serial_update_buffers()) { + return 1; + } + + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = serial_slave_buffer[i]; + } + return 0; +} +#endif + +uint8_t matrix_scan(void) +{ + int ret = _matrix_scan(); + + + +#ifdef USE_I2C + if( i2c_transaction() ) { +#else + if( serial_transaction() ) { +#endif + // turn on the indicator led when halves are disconnected + TXLED1; + + error_count++; + + if (error_count > ERROR_DISCONNECT_COUNT) { + // reset other half if disconnected + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = 0; + } + } + } else { + // turn off the indicator led on no error + TXLED0; + error_count = 0; + } + + matrix_scan_quantum(); + + return ret; +} + +void matrix_slave_scan(void) { + _matrix_scan(); + + int offset = (isLeftHand) ? 0 : (MATRIX_ROWS / 2); + +#ifdef USE_I2C + for (int i = 0; i < ROWS_PER_HAND; ++i) { + /* i2c_slave_buffer[i] = matrix[offset+i]; */ + i2c_slave_buffer[i] = matrix[offset+i]; + } +#else + for (int i = 0; i < ROWS_PER_HAND; ++i) { + serial_slave_buffer[i] = matrix[offset+i]; + } +#endif +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(col_pins[x] & 0xF); + _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF); + } +} + +static matrix_row_t read_cols(void) +{ + matrix_row_t result = 0; + for(int x = 0; x < MATRIX_COLS; x++) { + result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); + } + return result; +} + +static void unselect_rows(void) +{ + for(int x = 0; x < ROWS_PER_HAND; x++) { + _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); + _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); + } +} + +static void select_row(uint8_t row) +{ + _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF); + _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF); +} diff --git a/keyboards/lets_splitv2/pro_micro.h b/keyboards/lets_splitv2/pro_micro.h new file mode 100644 index 0000000000..09e219b7b1 --- /dev/null +++ b/keyboards/lets_splitv2/pro_micro.h @@ -0,0 +1,362 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 30 +#define NUM_ANALOG_INPUTS 12 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +static const uint8_t SDA = 2; +static const uint8_t SCL = 3; +#define LED_BUILTIN 13 + +// Map SPI port to 'new' pins D14..D17 +static const uint8_t SS = 17; +static const uint8_t MOSI = 16; +static const uint8_t MISO = 14; +static const uint8_t SCK = 15; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +static const uint8_t A0 = 18; +static const uint8_t A1 = 19; +static const uint8_t A2 = 20; +static const uint8_t A3 = 21; +static const uint8_t A4 = 22; +static const uint8_t A5 = 23; +static const uint8_t A6 = 24; // D4 +static const uint8_t A7 = 25; // D6 +static const uint8_t A8 = 26; // D8 +static const uint8_t A9 = 27; // D9 +static const uint8_t A10 = 28; // D10 +static const uint8_t A11 = 29; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// Connected LEDs on board for TX and RX +// TXLED D24 PD5 XCK1 +// RXLED D17 PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 - PD5 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(5), // D24 - PD5 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +#endif /* Pins_Arduino_h */ diff --git a/keyboards/lets_splitv2/readme.md b/keyboards/lets_splitv2/readme.md new file mode 100644 index 0000000000..73fdb0f789 --- /dev/null +++ b/keyboards/lets_splitv2/readme.md @@ -0,0 +1,102 @@ +Let's Split +====== + +This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/ + +Split keyboard firmware for Arduino Pro Micro or other ATmega32u4 +based boards. + +Features +-------- + +Some features supported by the firmware: + +* Either half can connect to the computer via USB, or both halves can be used + independently. +* You only need 3 wires to connect the two halves. Two for VCC and GND and one + for serial communication. +* Optional support for I2C connection between the two halves if for some + reason you require a faster connection between the two halves. Note this + requires an extra wire between halves and pull-up resistors on the data lines. + +Required Hardware +----------------- + +Apart from diodes and key switches for the keyboard matrix in each half, you +will need: + +* 2 Arduino Pro Micro's. You can find theses on aliexpress for ≈3.50USD each. +* 2 TRS sockets +* 1 TRS cable. + +Alternatively, you can use any sort of cable and socket that has at least 3 +wires. If you want to use I2C to communicate between halves, you will need a +cable with at least 4 wires and 2x 4.7kΩ pull-up resistors + +Optional Hardware +----------------- + +A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`. + +Wiring +------ + +The 3 wires of the TRS cable need to connect GND, VCC, and digital pin 3 (i.e. +PD0 on the ATmega32u4) between the two Pro Micros. + +Then wire your key matrix to any of the remaining 17 IO pins of the pro micro +and modify the `matrix.c` accordingly. + +The wiring for serial: + +![serial wiring](imgs/split-keyboard-serial-schematic.png) + +The wiring for i2c: + +![i2c wiring](imgs/split-keyboard-i2c-schematic.png) + +The pull-up resistors may be placed on either half. It is also possible +to use 4 resistors and have the pull-ups in both halves, but this is +unnecessary in simple use cases. + +Notes on Software Configuration +------------------------------- + +Configuring the firmware is similar to any other TMK project. One thing +to note is that `MATIX_ROWS` in `config.h` is the total number of rows between +the two halves, i.e. if your split keyboard has 4 rows in each half, then +`MATRIX_ROWS=8`. + +Also the current implementation assumes a maximum of 8 columns, but it would +not be very difficult to adapt it to support more if required. + + +Flashing +-------- + +If you define `EE_HANDS` in your `config.h`, you will need to set the +EEPROM for the left and right halves. The EEPROM is used to store whether the +half is left handed or right handed. This makes it so that the same firmware +file will run on both hands instead of having to flash left and right handed +versions of the firmware to each half. To flash the EEPROM file for the left +half run: +``` +make eeprom-left +``` +and similarly for right half +``` +make eeprom-right +``` + +After you have flashed the EEPROM for the first time, you then need to program +the flash memory: +``` +make program +``` +Note that you need to program both halves, but you have the option of using +different keymaps for each half. You could program the left half with a QWERTY +layout and the right half with a Colemak layout. Then if you connect the left +half to a computer by USB the keyboard will use QWERTY and Colemak when the +right half is connected. + + diff --git a/keyboards/lets_splitv2/serial.c b/keyboards/lets_splitv2/serial.c new file mode 100644 index 0000000000..f439c2f20b --- /dev/null +++ b/keyboards/lets_splitv2/serial.c @@ -0,0 +1,225 @@ +/* + * WARNING: be careful changing this code, it is very timing dependent + */ + +#ifndef F_CPU +#define F_CPU 16000000 +#endif + +#include +#include +#include +#include + +#include "serial.h" + +// Serial pulse period in microseconds. Its probably a bad idea to lower this +// value. +#define SERIAL_DELAY 24 + +uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + +#define SLAVE_DATA_CORRUPT (1<<0) +volatile uint8_t status = 0; + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + +// make the serial pin an input with pull-up resistor +inline static +void serial_input(void) { + SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +uint8_t serial_read_pin(void) { + return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +void serial_master_init(void) { + serial_output(); + serial_high(); +} + +void serial_slave_init(void) { + serial_input(); + + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +} + +// Used by the master to synchronize timing with the slave. +static +void sync_recv(void) { + serial_input(); + // This shouldn't hang if the slave disconnects because the + // serial line will float to high if the slave does disconnect. + while (!serial_read_pin()); + serial_delay(); +} + +// Used by the slave to send a synchronization signal to the master. +static +void sync_send(void) { + serial_output(); + + serial_low(); + serial_delay(); + + serial_high(); +} + +// Reads a byte from the serial line +static +uint8_t serial_read_byte(void) { + uint8_t byte = 0; + serial_input(); + for ( uint8_t i = 0; i < 8; ++i) { + byte = (byte << 1) | serial_read_pin(); + serial_delay(); + _delay_us(1); + } + + return byte; +} + +// Sends a byte with MSB ordering +static +void serial_write_byte(uint8_t data) { + uint8_t b = 8; + serial_output(); + while( b-- ) { + if(data & (1 << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +// interrupt handle to be used by the slave device +ISR(SERIAL_PIN_INTERRUPT) { + sync_send(); + + uint8_t checksum = 0; + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_slave_buffer[i]); + sync_send(); + checksum += serial_slave_buffer[i]; + } + serial_write_byte(checksum); + sync_send(); + + // wait for the sync to finish sending + serial_delay(); + + // read the middle of pulses + _delay_us(SERIAL_DELAY/2); + + uint8_t checksum_computed = 0; + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_master_buffer[i] = serial_read_byte(); + sync_send(); + checksum_computed += serial_master_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_send(); + + serial_input(); // end transaction + + if ( checksum_computed != checksum_received ) { + status |= SLAVE_DATA_CORRUPT; + } else { + status &= ~SLAVE_DATA_CORRUPT; + } +} + +inline +bool serial_slave_DATA_CORRUPT(void) { + return status & SLAVE_DATA_CORRUPT; +} + +// Copies the serial_slave_buffer to the master and sends the +// serial_master_buffer to the slave. +// +// Returns: +// 0 => no error +// 1 => slave did not respond +int serial_update_buffers(void) { + // this code is very time dependent, so we need to disable interrupts + cli(); + + // signal to the slave that we want to start a transaction + serial_output(); + serial_low(); + _delay_us(1); + + // wait for the slaves response + serial_input(); + serial_high(); + _delay_us(SERIAL_DELAY); + + // check if the slave is present + if (serial_read_pin()) { + // slave failed to pull the line low, assume not present + sei(); + return 1; + } + + // if the slave is present syncronize with it + sync_recv(); + + uint8_t checksum_computed = 0; + // receive data from the slave + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_slave_buffer[i] = serial_read_byte(); + sync_recv(); + checksum_computed += serial_slave_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_recv(); + + if (checksum_computed != checksum_received) { + sei(); + return 1; + } + + uint8_t checksum = 0; + // send data to the slave + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_master_buffer[i]); + sync_recv(); + checksum += serial_master_buffer[i]; + } + serial_write_byte(checksum); + sync_recv(); + + // always, release the line when not in use + serial_output(); + serial_high(); + + sei(); + return 0; +} diff --git a/keyboards/lets_splitv2/serial.h b/keyboards/lets_splitv2/serial.h new file mode 100644 index 0000000000..15fe4db7b4 --- /dev/null +++ b/keyboards/lets_splitv2/serial.h @@ -0,0 +1,26 @@ +#ifndef MY_SERIAL_H +#define MY_SERIAL_H + +#include "config.h" +#include + +/* TODO: some defines for interrupt setup */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD0) +#define SERIAL_PIN_INTERRUPT INT0_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +// Buffers for master - slave communication +extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + +void serial_master_init(void); +void serial_slave_init(void); +int serial_update_buffers(void); +bool serial_slave_data_corrupt(void); + +#endif diff --git a/keyboards/lets_splitv2/split_util.c b/keyboards/lets_splitv2/split_util.c new file mode 100644 index 0000000000..65003a71a4 --- /dev/null +++ b/keyboards/lets_splitv2/split_util.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include "split_util.h" +#include "matrix.h" +#include "i2c.h" +#include "serial.h" +#include "keyboard.h" +#include "config.h" + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { + #ifdef EE_HANDS + isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + #ifdef I2C_MASTER_RIGHT + isLeftHand = !has_usb(); + #else + isLeftHand = has_usb(); + #endif + #endif +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C + i2c_master_init(); +#else + serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { +#ifdef USE_I2C + i2c_slave_init(SLAVE_I2C_ADDRESS); +#else + serial_slave_init(); +#endif +} + +bool has_usb(void) { + USBCON |= (1 << OTGPADE); //enables VBUS pad + _delay_us(5); + return (USBSTA & (1< + +#ifdef EE_HANDS + #define EECONFIG_BOOTMAGIC_END (uint8_t *)10 + #define EECONFIG_HANDEDNESS EECONFIG_BOOTMAGIC_END +#endif + +#define SLAVE_I2C_ADDRESS 0x32 + +extern volatile bool isLeftHand; + +// slave version of matix scan, defined in matrix.c +void matrix_slave_scan(void); + +void split_keyboard_setup(void); +bool has_usb(void); +void keyboard_slave_loop(void); + +#endif diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile new file mode 100644 index 0000000000..3f6d133c9b --- /dev/null +++ b/keyboards/maxipad/Makefile @@ -0,0 +1,75 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 + +ifndef QUANTUM_DIR + include ../../Makefile +endif + + diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h new file mode 100644 index 0000000000..59b8cebecd --- /dev/null +++ b/keyboards/maxipad/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT maxipad +#define DESCRIPTION g8ming keeb + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 6 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } +#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/maxipad/keymaps/default/Makefile b/keyboards/maxipad/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/config.h b/keyboards/maxipad/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c new file mode 100644 index 0000000000..7ca127fe4d --- /dev/null +++ b/keyboards/maxipad/keymaps/default/keymap.c @@ -0,0 +1,54 @@ +#include "maxipad.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( /* Base */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \ + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \ + KC_LCTL, KC_LALT, MO(1), KC_ENT,KC_GRV,KC_SPC \ +), +[1] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + 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[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/readme.md b/keyboards/maxipad/keymaps/default/readme.md new file mode 100644 index 0000000000..a6c0d4a3f0 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for maxipad \ No newline at end of file diff --git a/keyboards/maxipad/maxipad.c b/keyboards/maxipad/maxipad.c new file mode 100644 index 0000000000..879ae86a76 --- /dev/null +++ b/keyboards/maxipad/maxipad.c @@ -0,0 +1,28 @@ +#include "maxipad.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/maxipad/maxipad.h b/keyboards/maxipad/maxipad.h new file mode 100644 index 0000000000..eee1309ddc --- /dev/null +++ b/keyboards/maxipad/maxipad.h @@ -0,0 +1,25 @@ +#ifndef MAXIPAD_H +#define MAXIPAD_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, \ + k10, k11, k12, k13, k14, k15, \ + k20, k21, k22, k23, k24, k25, \ + k30, k31, k32, k33, k34, k35, \ + k40, k41, k42, k43, k44, k45 \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45} \ +} + +#endif diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md new file mode 100644 index 0000000000..964212b8a6 --- /dev/null +++ b/keyboards/maxipad/readme.md @@ -0,0 +1,28 @@ +maxipad keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/maxipad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: + +``` +$ make keymap=[default|jack|] +``` + +Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file -- cgit v1.2.3 From 79f82d3d80a24483d14b078d325bb0f45af58e3d Mon Sep 17 00:00:00 2001 From: climbalima Date: Thu, 10 Nov 2016 18:43:31 -0500 Subject: returned to o --- keyboards/lets_split/config.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index bf618704cd..05439facb9 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . #define PRODUCT_ID 0x3060 #define DEVICE_VER 0x0001 #define MANUFACTURER Wootpatoot -#define PRODUCT Lets Split v2 +#define PRODUCT Lets Split #define DESCRIPTION A split keyboard for the cheap makers /* key matrix size */ @@ -34,8 +34,8 @@ along with this program. If not, see . #define MATRIX_COLS 6 // wiring of each half -#define MATRIX_ROW_PINS { D7, E6, B4, B5 } -#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } #define CATERINA_BOOTLOADER @@ -95,4 +95,4 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From b5cecb4cc9df2d541050a9a95f48c1d5fb796ae4 Mon Sep 17 00:00:00 2001 From: climbalima Date: Thu, 10 Nov 2016 20:03:24 -0500 Subject: Added both revisions into one folder --- keyboards/lets_split/Makefile | 2 +- keyboards/lets_split/config.h | 16 ++--- keyboards/lets_split/keymaps/default/keymap.c | 51 ++------------ keyboards/lets_split/lets_split.c | 27 -------- keyboards/lets_split/lets_split.h | 26 ++----- keyboards/lets_split/rev1/config.h | 98 +++++++++++++++++++++++++++ keyboards/lets_split/rev1/rev1.c | 30 ++++++++ keyboards/lets_split/rev1/rev1.h | 25 +++++++ keyboards/lets_split/rev2/config.h | 98 +++++++++++++++++++++++++++ keyboards/lets_split/rev2/rev2.c | 30 ++++++++ keyboards/lets_split/rev2/rev2.h | 25 +++++++ 11 files changed, 327 insertions(+), 101 deletions(-) create mode 100644 keyboards/lets_split/rev1/config.h create mode 100644 keyboards/lets_split/rev1/rev1.c create mode 100644 keyboards/lets_split/rev1/rev1.h create mode 100644 keyboards/lets_split/rev2/config.h create mode 100644 keyboards/lets_split/rev2/rev2.c create mode 100644 keyboards/lets_split/rev2/rev2.h diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index 982cfc591b..396d515553 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -72,7 +72,7 @@ USE_I2C ?= yes SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend CUSTOM_MATRIX = yes - +SUBPROJECT_DEFAULT = rev2 ifndef QUANTUM_DIR include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index bf618704cd..245529ae08 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -28,15 +28,6 @@ along with this program. If not, see . #define PRODUCT Lets Split v2 #define DESCRIPTION A split keyboard for the cheap makers -/* key matrix size */ -// Rows are doubled-up -#define MATRIX_ROWS 8 -#define MATRIX_COLS 6 - -// wiring of each half -#define MATRIX_ROW_PINS { D7, E6, B4, B5 } -#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } - #define CATERINA_BOOTLOADER // #define USE_I2C @@ -94,5 +85,10 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - +#ifdef SUBPROJECT_rev1 + #include "rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "rev2/config.h" +#endif #endif \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 8c8466ebd5..d940638164 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -29,61 +29,24 @@ enum custom_keycodes { #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = KEYMAP( \ - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ +[0] = KEYMAP( \ + 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_ENT , \ - KC_LCTL, _LOWER, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_LSFT, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + KC_LCTL, _LOWER, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), - -[_LOWER] = KEYMAP( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ +[3] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = KEYMAP( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ +[4] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ }; #ifdef AUDIO_ENABLE diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 574c116a75..fe2d4bc193 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -1,30 +1,3 @@ #include "lets_split.h" -#ifdef AUDIO_ENABLE - float tone_startup[][2] = SONG(STARTUP_SOUND); - float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -#endif -void matrix_init_kb(void) { - - #ifdef AUDIO_ENABLE - _delay_ms(20); // gets rid of tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - - // // green led on - // DDRD |= (1<<5); - // PORTD &= ~(1<<5); - - // // orange led on - // DDRB |= (1<<0); - // PORTB &= ~(1<<0); - - matrix_init_user(); -}; - -void shutdown_user(void) { - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); -} diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h index 04844ed639..2cdfb061f2 100644 --- a/keyboards/lets_split/lets_split.h +++ b/keyboards/lets_split/lets_split.h @@ -1,25 +1,13 @@ #ifndef LETS_SPLIT_H #define LETS_SPLIT_H -#include "quantum.h" - -void promicro_bootloader_jmp(bool program); +#ifdef SUBPROJECT_rev1 + #include "rev1.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "rev2.h" +#endif -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ - k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ - k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ - k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ - ) \ - { \ - { k00, k01, k02, k03, k04, k05 }, \ - { k10, k11, k12, k13, k14, k15 }, \ - { k20, k21, k22, k23, k24, k25 }, \ - { k30, k31, k32, k33, k34, k35 }, \ - { k40, k41, k42, k43, k44, k45 }, \ - { k50, k51, k52, k53, k54, k55 }, \ - { k60, k61, k62, k63, k64, k65 }, \ - { k70, k71, k72, k73, k74, k75 } \ - } +#include "quantum.h" #endif \ No newline at end of file diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h new file mode 100644 index 0000000000..b609ada077 --- /dev/null +++ b/keyboards/lets_split/rev1/config.h @@ -0,0 +1,98 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split v1 +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev1/rev1.c b/keyboards/lets_split/rev1/rev1.c new file mode 100644 index 0000000000..574c116a75 --- /dev/null +++ b/keyboards/lets_split/rev1/rev1.c @@ -0,0 +1,30 @@ +#include "lets_split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h new file mode 100644 index 0000000000..04fe0ddeb8 --- /dev/null +++ b/keyboards/lets_split/rev1/rev1.h @@ -0,0 +1,25 @@ +#ifndef REV1_H +#define REV1_H + +#include "quantum.h" + +void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ + k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ + k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ + k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h new file mode 100644 index 0000000000..bf618704cd --- /dev/null +++ b/keyboards/lets_split/rev2/config.h @@ -0,0 +1,98 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split v2 +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c new file mode 100644 index 0000000000..574c116a75 --- /dev/null +++ b/keyboards/lets_split/rev2/rev2.c @@ -0,0 +1,30 @@ +#include "lets_split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h new file mode 100644 index 0000000000..2a2246f056 --- /dev/null +++ b/keyboards/lets_split/rev2/rev2.h @@ -0,0 +1,25 @@ +#ifndef REV2_H +#define REV2_H + +#include "quantum.h" + +void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ + k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ + k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ + k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } + +#endif \ No newline at end of file -- cgit v1.2.3 From 19ebf6161f174902a33816bdab4ea3a209e4113e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 12 Nov 2016 19:23:38 +0100 Subject: - Added dbroqua_hhkb layout for Satan PCB --- keyboards/satan/keymaps/dbroqua_hhkb/keymap.c | 110 +++++++++++++++++++++++++ keyboards/satan/keymaps/dbroqua_hhkb/readme.md | 9 ++ 2 files changed, 119 insertions(+) create mode 100644 keyboards/satan/keymaps/dbroqua_hhkb/keymap.c create mode 100644 keyboards/satan/keymaps/dbroqua_hhkb/readme.md diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c b/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c new file mode 100644 index 0000000000..98a298e762 --- /dev/null +++ b/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c @@ -0,0 +1,110 @@ +// 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 "satan.h" + +#define _DEFAULT 0 +#define _ALTDISP 1 +#define _FN 2 + +enum planck_keycodes { + DEFAULT = SAFE_RANGE, + ALTDISP +}; + +// Fillers to make layering more clear +#define ______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty alt/gui/space/gui/alt + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN | + * |-----------------------------------------------------------------------------------------+ + * | LAlt| LGUI | Space | RGUI | RAlt | + * `-----------------------------------------------------------------' + */ + [_DEFAULT] = KEYMAP_HHKB( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \ + ______, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, ______, ______ \ + ), + +/* Qwerty gui/alt/space/alt/gui + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN | + * |-----------------------------------------------------------------------------------------+ + * |LGUI | LAlt | Space | RAlt |RGUI | + * `-----------------------------------------------------------------' + */ + [_ALTDISP] = KEYMAP_HHKB( /* Basic QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \ + ______, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, ______, ______ \ + ), + +/* FN Layer + * ,-----------------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | CAPS | BL- | BL+ | BL | | | | | Psc | Slck| Paus| Up | | | + * |-----------------------------------------------------------------------------------------+ + * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| | + * |-----------------------------------------------------------------------------------------+ + * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | | + * |-----------------------------------------------------------------------------------------+ + * | | | | Stop | | + * `-----------------------------------------------------------------' + */ + [_FN] = KEYMAP_HHKB( /* Layer 1 */ + ______, 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_INS, KC_DEL, \ + KC_CAPS, BL_DEC, BL_INC, BL_TOGG, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \ + ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, \ + ______, KC_MPRV, KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______, \ + ______, DEFAULT, ALTDISP, ______, KC_MSTP, ______, ______, ______ \ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + return MACRO_NONE; +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case DEFAULT: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DEFAULT); + } + return false; + break; + case ALTDISP: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_ALTDISP); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/readme.md b/keyboards/satan/keymaps/dbroqua_hhkb/readme.md new file mode 100644 index 0000000000..39e71beedd --- /dev/null +++ b/keyboards/satan/keymaps/dbroqua_hhkb/readme.md @@ -0,0 +1,9 @@ +# Dbroqua HHKB like Layout + +Like the HHKB but with a Satan GH60 PCB :D. + +# Programming Instructions: +Enter into programming mode and run the following command. +``` +$ sudo KEYMAP=dbroqua_hhkb make dfu +``` \ No newline at end of file -- cgit v1.2.3 From 28249498bc621cd8e766a501de0e0c18e525d3f1 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 12 Nov 2016 23:56:57 -0500 Subject: update sethbc keymap --- keyboards/satan/keymaps/sethbc/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/satan/keymaps/sethbc/keymap.c b/keyboards/satan/keymaps/sethbc/keymap.c index 82c779081a..b59efd1d94 100644 --- a/keyboards/satan/keymaps/sethbc/keymap.c +++ b/keyboards/satan/keymaps/sethbc/keymap.c @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_MENU, KC_RCTL), [_FL] = KEYMAP_HHKB( #ifdef RGBLIGHT_ENABLE -- cgit v1.2.3 From b2bc215934ddd31315db4304223750aee3eaf38d Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 13 Nov 2016 00:42:07 -0500 Subject: add sethbc keymap for gh60 and update macro expansion in connection with same --- keyboards/gh60/gh60.h | 32 +++++++------- keyboards/gh60/keymaps/sethbc/Makefile | 3 ++ keyboards/gh60/keymaps/sethbc/keymap.c | 76 ++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 keyboards/gh60/keymaps/sethbc/Makefile create mode 100644 keyboards/gh60/keymaps/sethbc/keymap.c diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h index 82624b6148..899f7dc6a3 100644 --- a/keyboards/gh60/gh60.h +++ b/keyboards/gh60/gh60.h @@ -4,7 +4,7 @@ #include "quantum.h" #include "led.h" -/* GH60 LEDs +/* GH60 LEDs * GPIO pads * 0 F7 WASD LEDs * 1 F6 ESC LED @@ -49,13 +49,13 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ K40, K41, K42, K45, K4A, K4B, K4C, K4D \ -) KEYMAP( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ - K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \ - K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \ -) +) { \ + { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ + { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D }, \ + { KC_##K30, KC_NO, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO, KC_##K3D }, \ + { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ +} #define KEYMAP_HHKB( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ @@ -63,12 +63,14 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ K40, K41, K42, K45, K4A, K4B, K4C, K4D \ -) KEYMAP( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ - K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ - K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ -) +) { \ + { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ + { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D }, \ + { KC_##K30, KC_NO, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \ + { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ +} + + #endif diff --git a/keyboards/gh60/keymaps/sethbc/Makefile b/keyboards/gh60/keymaps/sethbc/Makefile new file mode 100644 index 0000000000..457a3d01d4 --- /dev/null +++ b/keyboards/gh60/keymaps/sethbc/Makefile @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/gh60/keymaps/sethbc/keymap.c b/keyboards/gh60/keymaps/sethbc/keymap.c new file mode 100644 index 0000000000..85a46a29bd --- /dev/null +++ b/keyboards/gh60/keymaps/sethbc/keymap.c @@ -0,0 +1,76 @@ +#include "gh60.h" +#include "action_layer.h" + +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty */ + KEYMAP_HHKB( + FN0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ + LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \ + LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, FN1, \ + LCTL,LALT,LGUI, SPC, RGUI,RALT,APP, RCTL), + /* 1: fn */ + KEYMAP_HHKB( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP,TRNS,TRNS, \ + TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RIGHT,PENT, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END,PGDN,DOWN,TRNS,TRNS, \ + TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS), +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_scan_user(void) { + +} + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} -- cgit v1.2.3 From 34bf8558cdfa3baa46db704299ef66b79b2d0a15 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 13 Nov 2016 00:56:46 -0500 Subject: update sethbc ergodox keymap --- keyboards/ergodox/keymaps/sethbc/Makefile | 11 ----------- keyboards/ergodox/keymaps/sethbc/keymap.c | 2 +- keyboards/ergodox/keymaps/sethbc/readme.md | 3 ++- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/keyboards/ergodox/keymaps/sethbc/Makefile b/keyboards/ergodox/keymaps/sethbc/Makefile index 8c4ff87845..457a3d01d4 100644 --- a/keyboards/ergodox/keymaps/sethbc/Makefile +++ b/keyboards/ergodox/keymaps/sethbc/Makefile @@ -1,14 +1,3 @@ -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE = no # MIDI controls -UNICODE_ENABLE = yes # Unicode - ifndef QUANTUM_DIR include ../../../../Makefile endif diff --git a/keyboards/ergodox/keymaps/sethbc/keymap.c b/keyboards/ergodox/keymaps/sethbc/keymap.c index 6846c4d529..8816ad63bb 100644 --- a/keyboards/ergodox/keymaps/sethbc/keymap.c +++ b/keyboards/ergodox/keymaps/sethbc/keymap.c @@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, KC_LCTL, KC_LALT, KC_HOME, - KC_SPC, KC_BSPC, KC_END, + KC_BSPC, KC_DEL, KC_END, // right hand MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, diff --git a/keyboards/ergodox/keymaps/sethbc/readme.md b/keyboards/ergodox/keymaps/sethbc/readme.md index 510b2f99c8..57b5d0ec7c 100644 --- a/keyboards/ergodox/keymaps/sethbc/readme.md +++ b/keyboards/ergodox/keymaps/sethbc/readme.md @@ -1,3 +1,4 @@ # sethbc's Ergodox EZ keymap -Largely based on the Ergodox Infinity default keymap +Largely based on the Ergodox Infinity default keymap, but layer locking has been +removed in favor of momentary layer activation -- cgit v1.2.3 From aa76425395028d304e223d43e76145343850f0db Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sun, 13 Nov 2016 01:04:10 -0500 Subject: oops, fixed inverted if statement --- keyboards/satan/keymaps/sethbc/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/satan/keymaps/sethbc/keymap.c b/keyboards/satan/keymaps/sethbc/keymap.c index b59efd1d94..93610258b3 100644 --- a/keyboards/satan/keymaps/sethbc/keymap.c +++ b/keyboards/satan/keymaps/sethbc/keymap.c @@ -37,16 +37,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FL] = KEYMAP_HHKB( #ifdef RGBLIGHT_ENABLE KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \ - KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \ - _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______), - #else - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \ KC_CAPS, _______, RGB_TOG,RGB_MOD,RGB_HUI, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \ _______, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ _______, RGB_VAI,RGB_VAD,_______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______), + #else + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \ + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \ + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______), #endif }; -- cgit v1.2.3 From 162f603b1c36c63aa170170998b361a86413767f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hans=20Elleg=C3=A5rd?= Date: Sat, 29 Oct 2016 20:31:12 +0200 Subject: Added keymap "videck", an ErgoDox keymap for Vi(m) users. --- keyboards/ergodox/keymaps/videck/Makefile | 19 ++ keyboards/ergodox/keymaps/videck/config.h | 13 + keyboards/ergodox/keymaps/videck/keymap.c | 179 +++++++++++ keyboards/ergodox/keymaps/videck/readme.md | 24 ++ keyboards/ergodox/keymaps/videck/videck.json | 443 +++++++++++++++++++++++++++ keyboards/ergodox/keymaps/videck/videck.png | Bin 0 -> 106851 bytes 6 files changed, 678 insertions(+) create mode 100644 keyboards/ergodox/keymaps/videck/Makefile create mode 100644 keyboards/ergodox/keymaps/videck/config.h create mode 100644 keyboards/ergodox/keymaps/videck/keymap.c create mode 100644 keyboards/ergodox/keymaps/videck/readme.md create mode 100644 keyboards/ergodox/keymaps/videck/videck.json create mode 100644 keyboards/ergodox/keymaps/videck/videck.png diff --git a/keyboards/ergodox/keymaps/videck/Makefile b/keyboards/ergodox/keymaps/videck/Makefile new file mode 100644 index 0000000000..5c7d21f2cc --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/Makefile @@ -0,0 +1,19 @@ +AUDIO_ENABLE:=no +BACKLIGHT_ENABLE:=no +BLUETOOTH_ENABLE:=no +BOOTMAGIC_ENABLE:=no +COMMAND_ENABLE:=no +CONSOLE_ENABLE:=no +EXTRAKEY_ENABLE:=yes +MIDI_ENABLE:=no +MOUSEKEY_ENABLE:=yes +NKRO_ENABLE:=no +RGBLIGHT_ENABLE:=no +SLEEP_LED_ENABLE:=no +TAP_DANCE_ENABLE:=yes +UNICODEMAP_ENABLE:=no +UNICODE_ENABLE:=no + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/videck/config.h b/keyboards/ergodox/keymaps/videck/config.h new file mode 100644 index 0000000000..d89aabe779 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/config.h @@ -0,0 +1,13 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#ifndef NO_DEBUG + #define NO_DEBUG +#endif +#ifndef NO_PRINT + #define NO_PRINT +#endif + +#endif diff --git a/keyboards/ergodox/keymaps/videck/keymap.c b/keyboards/ergodox/keymaps/videck/keymap.c new file mode 100644 index 0000000000..7bd6274e94 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/keymap.c @@ -0,0 +1,179 @@ +#include + +#include "ergodox.h" +#include "action_layer.h" + +enum { + BASE = 0, // Default layer + ARROWS = 1, // Arrows and Fx keys layer + MOUSE = 2, // Mouse movement and buttons layer + PARENS = 3, // Parenthesis easy access layer + + TD_L = 0, // Tap dance index for left shift + TD_R = 1 // Tap dance index for right shift +}; + +// See the videck.png image for a visualization of the layout. +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_HOME, + KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_END, + MO(PARENS), KC_A, KC_S, KC_D, KC_F, KC_G, + TD(TD_L), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, + KC_LCTL, KC_LALT, KC_VOLD, KC_VOLU, KC_MUTE, + KC_ESC, KC_LGUI, + TG(MOUSE), + KC_SPC, KC_TAB, TG(ARROWS), + // right hand + KC_PGUP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_PGDN, 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_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD(TD_R), + KC_LBRC, KC_RBRC, KC_EQL, KC_RALT, KC_RCTL, + KC_APP, KC_ESC, + KC_INS, + KC_SLCK, KC_ENT, KC_SPC + ), + [ARROWS] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_NO, + 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [MOUSE] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_BTN3, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, KC_NO, + // 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_MS_L, KC_MS_D, KC_MS_U, 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_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ), + [PARENS] = KEYMAP( + // left 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_NO, + KC_TRNS, KC_TRNS, KC_NO, + // 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_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +typedef void (*videck_tap_dance_trigger_t) (const uint16_t kc); + +typedef struct +{ + uint16_t kc1; + uint16_t kc2; + videck_tap_dance_trigger_t trigger; +} videck_tap_dance_tuple_t; + +static void videck_tap_dance_finished (qk_tap_dance_state_t *state, void *user_data) { + videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data; + + if (state->count == 1) { + register_code16 (tuple->kc1); + } else if (state->count == 2) { + register_code16 (tuple->kc2); + } +} + +static void videck_tap_dance_reset (qk_tap_dance_state_t *state, void *user_data) { + videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data; + + if (state->count == 1) { + unregister_code16 (tuple->kc1); + } else if (state->count == 2) { + unregister_code16 (tuple->kc2); + tuple->trigger(tuple->kc2); + } +} + +static bool caps_lock_is_on; + +// Toggles caps lock status. +static void videck_caps_trigger (const uint16_t kc) { + caps_lock_is_on ^= true; +} + +#define ACTION_TAP_DANCE_DOUBLE_TRIGGER(kc1, kc2, double_trigger) { \ + .fn = { NULL, videck_tap_dance_finished, videck_tap_dance_reset }, \ + .user_data = (void *)&((videck_tap_dance_tuple_t) { kc1, kc2, double_trigger }), \ + } + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_L] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_LSFT, KC_CAPS, videck_caps_trigger), + [TD_R] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_RSFT, KC_CAPS, videck_caps_trigger) +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + ergodox_led_all_set(LED_BRIGHTNESS_LO); + caps_lock_is_on = false; +}; + +static void indicate_using_led(const uint8_t led, const bool enabled) { + if (enabled) { + ergodox_right_led_on(led); + } else { + ergodox_right_led_off(led); + } +} + +static inline void indicate_caps_lock_state(const bool enabled) { + indicate_using_led(1, enabled); +} + +static inline void indicate_arrows_layer_state(const bool enabled) { + indicate_using_led(2, enabled); +} + +static inline void indicate_mouse_layer_state(const bool enabled) { + indicate_using_led(3, enabled); +} + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + // Check if we have shift locked. + indicate_caps_lock_state(caps_lock_is_on); + indicate_arrows_layer_state(IS_LAYER_ON(ARROWS)); + indicate_mouse_layer_state(IS_LAYER_ON(MOUSE)); +}; diff --git a/keyboards/ergodox/keymaps/videck/readme.md b/keyboards/ergodox/keymaps/videck/readme.md new file mode 100644 index 0000000000..759e81bac5 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/readme.md @@ -0,0 +1,24 @@ +ViDeck keymap for ErgoDox +========================= + +This is a QWERTY layout based on the US layout, where Vi functionality has been +especially considered. + +# Features +* Mouse movements using the Vi movement keys. +* Vi movement keys doubling as arrow keys. +* Shift lock using double tap. +* A coder's modifier key for easy input of parenthesis. +* Acess to the escape key using either thumb. +* Reasonably accessible Scroll Lock key (useful if you, like me, want to switch + to a non-US layout once in a while in X). + +# Missing keys +* Caps Lock (shift lock is used instead). +* Pause/Break. +* Print Screen. + +# LEDs +* Shift lock is indicated using first LED. +* Arrow keys layer is indicated using second LED. +* Mouse keys layer is indicated using third LED. diff --git a/keyboards/ergodox/keymaps/videck/videck.json b/keyboards/ergodox/keymaps/videck/videck.json new file mode 100644 index 0000000000..7068cf5485 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/videck.json @@ -0,0 +1,443 @@ +[ + { + "backcolor": "#333333", + "background": { + "name": "PBT Black", + "style": "background-image: url('/bg/plastic/pbt-black.png');" + }, + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Red" + }, + [ + { + "x": 3.5, + "c": "#323232", + "t": "#ffffff\n\n\n#ac97d8" + }, + "#\n3\n\nF3", + { + "x": 10.5 + }, + "*\n8\n\nF8" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "@\n2\n\nF2", + { + "x": 1 + }, + "$\n4\n\nF4", + { + "x": 8.5 + }, + "&\n7\n\nF7", + { + "x": 1, + "t": "#ffffff\n\n\n#ac97d8\n\n\n\n#555454" + }, + "(\n9\n\nF9" + ], + [ + { + "y": -0.875, + "x": 5.5, + "t": "#ffffff\n\n\n#ac97d8" + }, + "%\n5\n\nF5", + { + "t": "#ffffff" + }, + "home", + { + "x": 4.5 + }, + "pgup", + { + "t": "#ffffff\n\n\n#ac97d8" + }, + "^\n6\n\nF6" + ], + [ + { + "y": -0.875, + "t": "#ffffff", + "w": 1.5 + }, + "~\n`", + { + "t": "#ffffff\n\n\n#ac97d8" + }, + "!\n1\n\nF1", + { + "x": 14.5 + }, + ")\n0\n\nF10", + { + "w": 1.5 + }, + "_\n-\n\nF11" + ], + [ + { + "y": -0.375, + "x": 3.5, + "t": "#ffffff" + }, + "E", + { + "x": 10.5 + }, + "I" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "W", + { + "x": 1 + }, + "R", + { + "x": 8.5 + }, + "U", + { + "x": 1, + "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615" + }, + "O\n\n\n\n\n\n\n\n\n{" + ], + [ + { + "y": -0.875, + "x": 5.5, + "t": "#ffffff" + }, + "T", + { + "h": 1.5 + }, + "end", + { + "x": 4.5, + "h": 1.5 + }, + "pgdn", + "Y" + ], + [ + { + "y": -0.875, + "w": 1.5 + }, + "+\n=", + "Q", + { + "x": 14.5, + "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615" + }, + "P\n\n\n\n\n\n\n\n\n}", + { + "t": "#ffffff\n\n\n#ac97d8", + "w": 1.5 + }, + "|\n\\\n\nF12" + ], + [ + { + "y": -0.375, + "x": 3.5, + "t": "#ffffff" + }, + "D", + { + "x": 10.5, + "t": "#ffffff\n\n#5eb1e7\n#ac97d8" + }, + "K\n\n\n" + ], + [ + { + "y": -0.875, + "x": 2.5, + "t": "#ffffff" + }, + "S", + { + "x": 1, + "n": true + }, + "F", + { + "x": 8.5, + "t": "#ffffff\n\n#5eb1e7\n#ac97d8", + "n": true + }, + "J\n\n\n", + { + "x": 1, + "t": "#ffffff\n\n#5eb1e7\n#ac97d8\n\n\n\n\n\n#f8d615" + }, + "L\n\n\n\n\n\n\n\n\n(" + ], + [ + { + "y": -0.875, + "x": 5.5, + "t": "#ffffff" + }, + "G", + { + "x": 6.5, + "t": "#ffffff\n\n#5eb1e7\n#ac97d8" + }, + "H\n\n\n" + ], + [ + { + "y": -0.875, + "t": "#f8d615", + "a": 6, + "w": 1.5 + }, + "( ) [ ] { }", + { + "t": "#ffffff", + "a": 4 + }, + "A", + { + "x": 14.5, + "t": "#ffffff\n\n\n\n\n\n\n#60605b\n\n#f8d615" + }, + ":\n;\n\n\n\n\n\nÖ\n\n)", + { + "t": "#ffffff\n\n\n\n\n\n\n#60605b", + "w": 1.5 + }, + "\"\n'\n\n\n\n\n\nÄ" + ], + [ + { + "y": -0.625, + "x": 6.5, + "t": "#ffffff", + "h": 1.5 + }, + "", + { + "x": 4.5, + "h": 1.5 + }, + "" + ], + [ + { + "y": -0.75, + "x": 3.5 + }, + "C", + { + "x": 10.5 + }, + "<\n," + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "X", + { + "x": 1 + }, + "V", + { + "x": 8.5 + }, + "M", + { + "x": 1, + "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615" + }, + ">\n.\n\n\n\n\n\n\n\n[" + ], + [ + { + "y": -0.875, + "x": 5.5, + "t": "#ffffff" + }, + "B", + { + "x": 6.5 + }, + "N" + ], + [ + { + "y": -0.875, + "t": "#ffffff\n\n#f67f00", + "a": 6, + "fa": [ + 5 + ], + "w": 1.5 + }, + "⇑\n\n2-tap
locks", + { + "t": "#ffffff", + "a": 4, + "f": 3 + }, + "Z", + { + "x": 14.5, + "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615", + "f": 3 + }, + "?\n/\n\n\n\n\n\n\n\n]", + { + "t": "#ffffff\n\n#f67f00", + "a": 6, + "f": 3, + "w": 1.5 + }, + "⇑\n\n2-tap
locks" + ], + [ + { + "y": -0.375, + "x": 3.5, + "t": "#ffffff", + "a": 4 + }, + "\n", + { + "x": 10.5, + "f": 3 + }, + "}\n]" + ], + [ + { + "y": -0.875, + "x": 2.5 + }, + "\n", + { + "x": 1 + }, + "\n", + { + "x": 8.5, + "t": "#ffffff\n\n\n\n\n\n\n#60605b", + "f": 3 + }, + "{\n[\n\n\n\n\n\nÅ", + { + "x": 1, + "t": "#ffffff", + "f": 3 + }, + "+\n=" + ], + [ + { + "y": -0.75, + "x": 0.5, + "f": 3 + }, + "ctrl", + { + "f": 3 + }, + "alt", + { + "x": 14.5, + "f": 3 + }, + "altgr", + { + "f": 3 + }, + "ctrl" + ], + [ + { + "r": 30, + "rx": 6.5, + "ry": 4.25, + "y": -1, + "x": 1, + "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7", + "f": 3 + }, + "esc\n\n\n\n\n\n\n\n\n\nM", + { + "t": "#ffffff", + "f": 7 + }, + "" + ], + [ + { + "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7", + "f": 3, + "h": 2 + }, + "space\n\n\n\n\n\n\n\n\n\nL", + { + "h": 2 + }, + "\n\n\n\n\n\n\n\n\n\nR", + { + "t": "#5eb1e7" + }, + "" + ], + [ + { + "x": 2, + "t": "#ac97d8" + }, + "" + ], + [ + { + "r": -30, + "rx": 13, + "y": -1, + "x": -3, + "t": "#ffffff" + }, + "", + "esc" + ], + [ + { + "x": -3 + }, + "ins", + { + "h": 2 + }, + "", + { + "h": 2 + }, + "space" + ], + [ + { + "x": -3 + }, + "scroll
lock" + ] +] \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/videck/videck.png b/keyboards/ergodox/keymaps/videck/videck.png new file mode 100644 index 0000000000..c99323f53b Binary files /dev/null and b/keyboards/ergodox/keymaps/videck/videck.png differ -- cgit v1.2.3 From e9f748751808de2f1e85cf7fb670d78773bd5e76 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 13 Nov 2016 23:02:38 -0500 Subject: mostly working --- keyboards/ergodox/ez/ez.c | 10 +++- keyboards/ergodox/ez/matrix.c | 2 +- keyboards/ergodox/keymaps/jack/Makefile | 1 + keyboards/ergodox/keymaps/jack/config.h | 4 +- quantum/light_ws2812.c | 21 ++++--- quantum/light_ws2812.h | 14 ++++- quantum/quantum.c | 1 + quantum/rgblight.c | 101 ++++++++++++++++---------------- quantum/rgblight.h | 10 ++-- tmk_core/protocol/lufa/lufa.c | 33 ++++++++++- 10 files changed, 125 insertions(+), 72 deletions(-) diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c index ddb8ff0cf7..039e4c6bb1 100644 --- a/keyboards/ergodox/ez/ez.c +++ b/keyboards/ergodox/ez/ez.c @@ -16,10 +16,10 @@ void matrix_init_kb(void) { // unused pins - C7, D4, D5, D7, E6 // set as input with internal pull-ip enabled DDRC &= ~(1<<7); - DDRD &= ~(1<<7 | 1<<5 | 1<<4); + DDRD &= ~(1<<5 | 1<<4); DDRE &= ~(1<<6); PORTC |= (1<<7); - PORTD |= (1<<7 | 1<<5 | 1<<4); + PORTD |= (1<<5 | 1<<4); PORTE |= (1<<6); ergodox_blink_all_leds(); @@ -51,6 +51,10 @@ uint8_t init_mcp23018(void) { mcp23018_status = 0x20; // I2C subsystem + + uint8_t sreg_prev; + sreg_prev=SREG; + cli(); if (i2c_initialized == 0) { i2c_init(); // on pins D(1,0) i2c_initialized++; @@ -79,6 +83,8 @@ uint8_t init_mcp23018(void) { out: i2c_stop(); + SREG=sreg_prev; + return mcp23018_status; } diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c index a19bab90b2..43f5152591 100644 --- a/keyboards/ergodox/ez/matrix.c +++ b/keyboards/ergodox/ez/matrix.c @@ -121,7 +121,7 @@ void matrix_init(void) matrix_scan_count = 0; #endif - matrix_init_kb(); + matrix_init_quantum(); } diff --git a/keyboards/ergodox/keymaps/jack/Makefile b/keyboards/ergodox/keymaps/jack/Makefile index 1e57612788..7c257af501 100644 --- a/keyboards/ergodox/keymaps/jack/Makefile +++ b/keyboards/ergodox/keymaps/jack/Makefile @@ -1,4 +1,5 @@ RGBLIGHT_ENABLE = yes +MIDI_ENABLE = yes ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h index 1781563b84..5bf109c184 100644 --- a/keyboards/ergodox/keymaps/jack/config.h +++ b/keyboards/ergodox/keymaps/jack/config.h @@ -5,10 +5,12 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D7 -// #define RGBLIGHT_TIMER +#define RGBLIGHT_TIMER #define RGBLED_NUM 15 // Number of LEDs #define RGBLIGHT_HUE_STEP 12 #define RGBLIGHT_SAT_STEP 255 #define RGBLIGHT_VAL_STEP 12 +#define RGB_MIDI + #endif \ No newline at end of file diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index 497543339b..6edbc0f2bd 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -133,13 +133,13 @@ unsigned char I2C_Write(unsigned char c) #endif // Setleds for standard RGB -void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds) +void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) { // ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF)); } -void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask) +void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask) { // ws2812_DDRREG |= pinmask; // Enable DDR // new universal format (DDR) @@ -150,12 +150,15 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin } // Setleds for SK6812RGBW -void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) +void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) { #ifdef RGBW_BB_TWI + uint8_t sreg_prev, twcr_prev; + sreg_prev=SREG; + twcr_prev=TWCR; cli(); - TWCR = 0; + TWCR &= ~(1<> 8) & 0xff; - OCR3AL = RGBLED_TIMER_TOP & 0xff; - SREG = sreg; + // static uint8_t rgblight_timer_is_init = 0; + // if (rgblight_timer_is_init) { + // return; + // } + // rgblight_timer_is_init = 1; + // /* Timer 3 setup */ + // TCCR3B = _BV(WGM32) // CTC mode OCR3A as TOP + // | _BV(CS30); // Clock selelct: clk/1 + // /* Set TOP value */ + // uint8_t sreg = SREG; + // cli(); + // OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff; + // OCR3AL = RGBLED_TIMER_TOP & 0xff; + // SREG = sreg; + + rgblight_timer_enabled = true; } void rgblight_timer_enable(void) { - TIMSK3 |= _BV(OCIE3A); + rgblight_timer_enabled = true; dprintf("TIMER3 enabled.\n"); } void rgblight_timer_disable(void) { - TIMSK3 &= ~_BV(OCIE3A); + rgblight_timer_enabled = false; dprintf("TIMER3 disabled.\n"); } void rgblight_timer_toggle(void) { - TIMSK3 ^= _BV(OCIE3A); + rgblight_timer_enabled ^= rgblight_timer_enabled; 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) { - // mode = 6 to 8, rainbow mood mod - rgblight_effect_rainbow_mood(rgblight_config.mode - 6); - } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) { - // mode = 9 to 14, rainbow swirl mode - rgblight_effect_rainbow_swirl(rgblight_config.mode - 9); - } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) { - // mode = 15 to 20, snake mode - rgblight_effect_snake(rgblight_config.mode - 15); - } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) { - // mode = 21 to 23, knight mode - rgblight_effect_knight(rgblight_config.mode - 21); +void rgblight_task(void) { + if (rgblight_timer_enabled) { + // 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) { + // mode = 6 to 8, rainbow mood mod + rgblight_effect_rainbow_mood(rgblight_config.mode - 6); + } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) { + // mode = 9 to 14, rainbow swirl mode + rgblight_effect_rainbow_swirl(rgblight_config.mode - 9); + } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) { + // mode = 15 to 20, snake mode + rgblight_effect_snake(rgblight_config.mode - 15); + } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) { + // mode = 21 to 23, knight mode + rgblight_effect_knight(rgblight_config.mode - 21); + } } } @@ -461,7 +462,7 @@ void rgblight_effect_rainbow_swirl(uint8_t interval) { last_timer = timer_read(); for (i = 0; i < RGBLED_NUM; i++) { hue = (360 / RGBLED_NUM * i + current_hue) % 360; - sethsv(hue, rgblight_config.sat, rgblight_config.val, &led[i]); + sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]); } rgblight_set(); @@ -498,7 +499,7 @@ void rgblight_effect_snake(uint8_t interval) { k = k + RGBLED_NUM; } if (i == k) { - sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), &led[i]); + sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), (LED_TYPE *)&led[i]); } } } @@ -518,7 +519,7 @@ void rgblight_effect_knight(uint8_t interval) { static uint16_t last_timer = 0; uint8_t i, j, cur; int8_t k; - struct cRGB preled[RGBLED_NUM]; + LED_TYPE preled[RGBLED_NUM]; static int8_t increment = -1; if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { return; @@ -537,7 +538,7 @@ void rgblight_effect_knight(uint8_t interval) { k = RGBLED_NUM - 1; } if (i == k) { - sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]); + sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&preled[i]); } } } diff --git a/quantum/rgblight.h b/quantum/rgblight.h index efc685f312..d16ba24e53 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -1,8 +1,6 @@ #ifndef RGBLIGHT_H #define RGBLIGHT_H -#define RGBW 1 - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) #define RGBLIGHT_MODES 23 #else @@ -35,6 +33,7 @@ #endif #define RGBLED_TIMER_TOP F_CPU/(256*64) +// #define RGBLED_TIMER_TOP 0xFF10 #include #include @@ -79,10 +78,13 @@ void eeconfig_update_rgblight(uint32_t val); void eeconfig_update_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 sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); +void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1); void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); + +void rgblight_task(void); + void rgblight_timer_init(void); void rgblight_timer_enable(void); void rgblight_timer_disable(void); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 01c0e45b0b..fe466f6047 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -71,6 +71,10 @@ #include "virtser.h" #endif +#ifdef RGB_MIDI + #include "rgblight.h" +#endif + uint8_t keyboard_idle = 0; /* 0: Boot Protocol, 1: Report Protocol(default) */ uint8_t keyboard_protocol = 1; @@ -1045,6 +1049,10 @@ int main(void) #endif keyboard_task(); +#ifdef RGBLIGHT_ENABLE + rgblight_task(); +#endif + #ifdef VIRTSER_ENABLE virtser_task(); CDC_Device_USBTask(&cdc_device); @@ -1077,15 +1085,34 @@ void fallthrough_callback(MidiDevice * device, #endif } +#ifdef RGB_MIDI + rgblight_config_t rgblight_config; +#endif + void cc_callback(MidiDevice * device, uint8_t chan, uint8_t num, uint8_t val) { //sending it back on the next channel - midi_send_cc(device, (chan + 1) % 16, num, val); + // midi_send_cc(device, (chan + 1) % 16, num, val); + #ifdef RGB_MIDI + rgblight_config.raw = eeconfig_read_rgblight(); + switch (num) { + case 14: + rgblight_config.hue = val * 360 / 127; + break; + case 15: + rgblight_config.sat = val << 1; + break; + case 16: + rgblight_config.val = val << 1; + break; + } + rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); + #endif } void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { - for (int i = 0; i < length; i++) - midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); + // for (int i = 0; i < length; i++) + // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); } #endif -- cgit v1.2.3 From 702405f0391463cc5d0c8c8109304ac8d0ec844a Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Mon, 14 Nov 2016 10:03:18 -0500 Subject: Recommend WSL on Windows 10 At this point, I consider the batch scripts @IBNobody and I worked on to mostly be a failure. They've proven to be unreliable, too dependent on the environment they're being run in, and I've seen far too many examples of people having frustrating issues with them that I haven't been able to help them with. They can also produce misleading and confusing error messages. I've been pointing people to use the WSL for a while now. Eventually, I think we should make a proper replacement for the batch scripts, possibly with an environment in msys2. For now, the WSL method in Windows 10 is far more reliable, and is easy to set up. I also cleaned up some things in the WSL instructions themselves. --- readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index d5a259ccb8..4eed2c776b 100644 --- a/readme.md +++ b/readme.md @@ -45,19 +45,19 @@ Before you are able to compile, you'll need to install an environment for AVR de ### Windows 10 -It's still recommended to use the method for Vista and later below. The reason for this is that the Windows 10 Subsystem for Linux lacks [USB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it's not possible to flash the firmware to the keyboard. Please add your vote to the link! +Due to some issues with the "Windows (Vista and later)" instructions below, we now recommend following these instructions if you use Windows, which will allow you to use the Windows Subsystem for Linux to compile the firmware. If you are not using Windows 10 with the Anniversary Update installed (which came out in July 2016), you will need to use one of the other methods, such as Docker, Vagrant, or the instructions for Vista and later. -That said, it's still possible to use it for compilation. And recommended, if you need to compile much, since it's much faster than at least Cygwin (which is also supported, but currently lacking documentation). I haven't tried the method below, so I'm unable to tell. +If you use this method, you will need to use a standalone tool to flash the firmware to the keyboard after you compile it. We recommend the official [QMK Firmware Flasher](https://github.com/jackhumbert/qmk_firmware_flasher/releases). This is because the Windows 10 Subsystem for Linux lacks [libUSB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it can't access the keyboard's microcontroller. Please add your vote for Microsoft to fix this issue using the link! Here are the steps 1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). -2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following - 1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first - 2. From within the Git bash run `git rm --cached -r .` - 3. Followed by `git reset --hard` -3. Start the "Bash On Ubuntu On Windows" from the start menu -4. With the bash open, navigate to your Git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive. +2. If you have cloned the repository using git before August 20, 2016, clean up the line endings from wherever you currently access git: + 1. Make sure that you have no changes you haven't committed by running `git status`. ANY UNCOMMITTED CHANGES WILL BE PERMANENTLY LOST. + 2. Run `git rm --cached -r .` + 3. Run `git reset --hard` +3. Open "Bash On Ubuntu On Windows" from the start menu +4. With the bash window open, navigate to your copy of the [qmk_firmware repository](https://github.com/jackhumbert/qmk_firmware) using the `cd` command. The harddisks can be accessed from `/mnt/`. For example, your main hard drive (C:) can be accessed by executiing the command `cd /mnt/c`. If your username is John and the qmk_firmware folder is in your Downloads folder, you can move to it with the command `cd /mnt/c/Users/John/Downloads/qmk_firmware`. You can use the Tab key as you go to help you autocomplete the folder names. 5. Run `sudo util/install_dependencies.sh`. 6. After a while the installation will finish, and you are good to go @@ -1305,4 +1305,4 @@ This will add a traced variable named "layer" (the name is just for your informa In order to actually detect changes to the variables you should call `VERIFY_TRACED_VARIABLES` around the code that you think that modifies the variable. If a variable is modified it will tell you between which two `VERIFY_TRACED_VARIABLES` calls the modification happened. You can then add more calls to track it down further. I don't recommend spamming the codebase with calls. It's better to start with a few, and then keep adding them in a binary search fashion. You can also delete the ones you don't need, as each call need to store the file name and line number in the ROM, so you can run out of memory if you add too many calls. -Also remember to delete all the tracing code ones you have found the bug, as you wouldn't want to create a pull request with tracing code. \ No newline at end of file +Also remember to delete all the tracing code ones you have found the bug, as you wouldn't want to create a pull request with tracing code. -- cgit v1.2.3 From dd22c787b8b417df109d2136c76ce496dd7b93e3 Mon Sep 17 00:00:00 2001 From: climbalima Date: Mon, 14 Nov 2016 23:05:37 -0500 Subject: fixed extra paste --- keyboards/lets_split/config.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index a5394c5e4d..bf04731162 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -105,7 +105,6 @@ along with this program. If not, see . #include "rev2/config.h" #endif #endif -======= -#endif ->>>>>>> 79f82d3d80a24483d14b078d325bb0f45af58e3d + + -- cgit v1.2.3 From bce6e52391da7c5f620c96a91857940f0dee19df Mon Sep 17 00:00:00 2001 From: climbalima Date: Mon, 14 Nov 2016 23:08:10 -0500 Subject: fixed conflict --- keyboards/lets_split/config.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index bf04731162..059d45b0c0 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -28,8 +28,6 @@ along with this program. If not, see . #define PRODUCT Lets Split #define DESCRIPTION A split keyboard for the cheap makers -<<<<<<< HEAD -======= /* key matrix size */ // Rows are doubled-up #define MATRIX_ROWS 8 @@ -39,7 +37,6 @@ along with this program. If not, see . #define MATRIX_ROW_PINS { B5, B4, E6, D7 } #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } ->>>>>>> 79f82d3d80a24483d14b078d325bb0f45af58e3d #define CATERINA_BOOTLOADER // #define USE_I2C -- cgit v1.2.3 From 530dd3377e4d409a7ca2fee7e47b60b735ebc0fa Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 15 Nov 2016 13:18:10 -0500 Subject: animations, midi, etc --- quantum/light_ws2812.c | 1 - tmk_core/protocol/lufa/lufa.c | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index 6edbc0f2bd..aac058f534 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -171,7 +171,6 @@ void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) } I2C_Stop(); SREG=sreg_prev; - // TWCR = (1< Date: Wed, 16 Nov 2016 15:44:26 -0600 Subject: dvorak/plover keyboard layout Plover's steno support likes quasi-qwerty, and gaming likes qwerty, and I like dvorak, so... what if I could have it all? Signed-off-by: seebs --- keyboards/ergodox/keymaps/dvorak_plover/README.md | 14 ++ keyboards/ergodox/keymaps/dvorak_plover/keymap.c | 230 ++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak_plover/README.md create mode 100644 keyboards/ergodox/keymaps/dvorak_plover/keymap.c diff --git a/keyboards/ergodox/keymaps/dvorak_plover/README.md b/keyboards/ergodox/keymaps/dvorak_plover/README.md new file mode 100644 index 0000000000..c8287b0195 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_plover/README.md @@ -0,0 +1,14 @@ +Dvorak support, plover support, gaming support + +I'm used to the Kinesis, so originally I was just going to patch up +the thumb keys to be more familiar. But the ergodox is really well +suited to NKRO support in Plover, so I added a layer for that, and +then I remembered that dvorak can be really annoying for video +games (try to reach WASD), so I added a layer for that. + +The result is probably a bit idiosyncratic, but it works for me. + +(I also don't have any press/hold distinction keys, because that +confuses my fuzzy little brain.) + +Contributed by seebs (seebs@seebs.net) diff --git a/keyboards/ergodox/keymaps/dvorak_plover/keymap.c b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c new file mode 100644 index 0000000000..d0505609d7 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c @@ -0,0 +1,230 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define PLVR 2 // media keys +#define QWRT 3 // qwerty layer for gaming + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y | L1 | | L2 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| Esc | | L3 |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Lalt | Grv | | Left | Right| | Up | Down | [ | ] | RAlt | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | LCtrl| Alt | | LGui | RCtrl | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | 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_ESC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(SYMB), + KC_LGUI, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ESC, + KC_LALT, KC_GRV, KC_ESC, KC_LEFT,KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + TG(PLVR), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + TG(QWRT),KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT, + KC_LGUI, KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | KP7 | KP8 | KP9 | KP* | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | KP4 | KP5 | KP6 | KP+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | KP1 | KP2 | KP3 | KP/ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | KP. | KP0 | KP= | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// 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_P7, KC_P8, KC_P9, KC_PAST, KC_F12, + KC_DOWN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_TRNS, + KC_TRNS,KC_PDOT, KC_P0, KC_PEQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 1 | 2 | 3 | 4 | 5 | | | L2 | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | c | v |------| |------| n | m | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( // layout: layer 2: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_FN4, KC_NO, + KC_NO, + KC_C, KC_V, KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + TG(2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M +), +/* Keymap 3: qwerty-ish + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | LGui | + * |--------+------+------+------+------+------| Spc | | L3 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Lalt | Grv | '" | Left | Right| | Up | Down | [ | ] | RAlt | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | LCtrl| LAlt | | LGui | RCtrl | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | ace| | End | | PgDn | | | + * `--------------------' `----------------------' + */ +[QWRT] = KEYMAP( // layer 3: qwerty for gaming + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPACE, + KC_LALT, KC_GRV, KC_QUOT, KC_LEFT,KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TG(QWRT), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT, + KC_LGUI, KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +}; + +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; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; -- cgit v1.2.3 From 1dd6ceb45dfcf5f0991b84fea5a761a35df7fcda Mon Sep 17 00:00:00 2001 From: climbalima Date: Wed, 16 Nov 2016 19:18:54 -0500 Subject: Updated my repo to current qmk --- keyboards/lets_split/config.h | 48 ++------ keyboards/lets_split/keymaps/default/keymap.c | 12 +- keyboards/lets_split/lets_split.c | 30 ----- keyboards/lets_split/lets_split.h | 26 ++--- keyboards/lets_split/rev1/Makefile | 3 + keyboards/lets_split/rev1/config.h | 102 ++++++++++++++++ keyboards/lets_split/rev1/rev1.c | 32 +++++ keyboards/lets_split/rev1/rev1.h | 25 ++++ keyboards/lets_split/rev1/rules.mk | 5 + keyboards/lets_split/rev2/Makefile | 3 + keyboards/lets_split/rev2/config.h | 102 ++++++++++++++++ keyboards/lets_split/rev2/rev2.c | 32 +++++ keyboards/lets_split/rev2/rev2.h | 25 ++++ keyboards/lets_split/rev2/rules.mk | 5 + keyboards/lets_split/rules.mk | 7 +- keyboards/maxipad/Makefile | 3 + keyboards/maxipad/config.h | 162 ++++++++++++++++++++++++++ keyboards/maxipad/keymaps/default/Makefile | 21 ++++ keyboards/maxipad/keymaps/default/config.h | 8 ++ keyboards/maxipad/keymaps/default/keymap.c | 54 +++++++++ keyboards/maxipad/keymaps/default/readme.md | 1 + keyboards/maxipad/maxipad.c | 28 +++++ keyboards/maxipad/maxipad.h | 25 ++++ keyboards/maxipad/readme.md | 28 +++++ keyboards/maxipad/rules.mk | 67 +++++++++++ 25 files changed, 756 insertions(+), 98 deletions(-) create mode 100644 keyboards/lets_split/rev1/Makefile create mode 100644 keyboards/lets_split/rev1/config.h create mode 100644 keyboards/lets_split/rev1/rev1.c create mode 100644 keyboards/lets_split/rev1/rev1.h create mode 100644 keyboards/lets_split/rev1/rules.mk create mode 100644 keyboards/lets_split/rev2/Makefile create mode 100644 keyboards/lets_split/rev2/config.h create mode 100644 keyboards/lets_split/rev2/rev2.c create mode 100644 keyboards/lets_split/rev2/rev2.h create mode 100644 keyboards/lets_split/rev2/rules.mk create mode 100644 keyboards/maxipad/Makefile create mode 100644 keyboards/maxipad/config.h create mode 100644 keyboards/maxipad/keymaps/default/Makefile create mode 100644 keyboards/maxipad/keymaps/default/config.h create mode 100644 keyboards/maxipad/keymaps/default/keymap.c create mode 100644 keyboards/maxipad/keymaps/default/readme.md create mode 100644 keyboards/maxipad/maxipad.c create mode 100644 keyboards/maxipad/maxipad.h create mode 100644 keyboards/maxipad/readme.md create mode 100644 keyboards/maxipad/rules.mk diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index f4d900accb..5bee553199 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -28,29 +28,6 @@ along with this program. If not, see . #define PRODUCT Lets Split #define DESCRIPTION A split keyboard for the cheap makers -/* key matrix size */ -// Rows are doubled-up -#define MATRIX_ROWS 8 -#define MATRIX_COLS 6 - -// wiring of each half -#define MATRIX_ROW_PINS { B5, B4, E6, D7 } -#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } - -#define CATERINA_BOOTLOADER - -// #define USE_I2C - -// Use serial if not using I2C -#ifndef USE_I2C -# define USE_SERIAL -#endif - -// #define EE_HANDS - -#define I2C_MASTER_LEFT -// #define I2C_MASTER_RIGHT - /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -72,25 +49,11 @@ along with this program. If not, see . #define IS_COMMAND() ( \ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) - -/* ws2812 RGB LED */ -#define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 8 // Number of LEDs -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - /* disable debug print */ -// #define NO_DEBUG +//#define NO_DEBUG /* disable print */ -// #define NO_PRINT +//#define NO_PRINT /* disable action features */ //#define NO_ACTION_LAYER @@ -98,5 +61,10 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - +#ifdef SUBPROJECT_rev1 + #include "rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "rev2/config.h" +#endif #endif diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 0d2d94b672..fc41c01fdb 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -42,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_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 , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + KC_LCTL, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, MT(MOD_LSFT, KC_SPC), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), /* Colemak @@ -99,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + _______, _______, _______, _______, _______, KC_BSPC, MT(MOD_LSFT, KC_BSPC), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), /* Raise @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + _______, _______, _______, _______, _______, KC_ENT, MT(MOD_LSFT, KC_ENT), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), /* Adjust (Lower + Raise) @@ -134,7 +134,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = KEYMAP( \ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index c505d3a6e3..851299aa2b 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -1,32 +1,2 @@ #include "lets_split.h" -#ifdef AUDIO_ENABLE - float tone_startup[][2] = SONG(STARTUP_SOUND); - float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -#endif - -void matrix_init_kb(void) { - - #ifdef AUDIO_ENABLE - _delay_ms(20); // gets rid of tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - - // // green led on - // DDRD |= (1<<5); - // PORTD &= ~(1<<5); - - // // orange led on - // DDRB |= (1<<0); - // PORTB &= ~(1<<0); - - matrix_init_user(); -}; - -void shutdown_user(void) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); - #endif -} diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h index fe7ae07679..2cdfb061f2 100644 --- a/keyboards/lets_split/lets_split.h +++ b/keyboards/lets_split/lets_split.h @@ -1,25 +1,13 @@ #ifndef LETS_SPLIT_H #define LETS_SPLIT_H -#include "quantum.h" - -void promicro_bootloader_jmp(bool program); +#ifdef SUBPROJECT_rev1 + #include "rev1.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "rev2.h" +#endif -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ - k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ - k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ - k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ - ) \ - { \ - { k00, k01, k02, k03, k04, k05 }, \ - { k10, k11, k12, k13, k14, k15 }, \ - { k20, k21, k22, k23, k24, k25 }, \ - { k30, k31, k32, k33, k34, k35 }, \ - { k40, k41, k42, k43, k44, k45 }, \ - { k50, k51, k52, k53, k54, k55 }, \ - { k60, k61, k62, k63, k64, k65 }, \ - { k70, k71, k72, k73, k74, k75 } \ - } +#include "quantum.h" #endif \ No newline at end of file diff --git a/keyboards/lets_split/rev1/Makefile b/keyboards/lets_split/rev1/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/lets_split/rev1/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h new file mode 100644 index 0000000000..f4d900accb --- /dev/null +++ b/keyboards/lets_split/rev1/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/rev1/rev1.c b/keyboards/lets_split/rev1/rev1.c new file mode 100644 index 0000000000..c505d3a6e3 --- /dev/null +++ b/keyboards/lets_split/rev1/rev1.c @@ -0,0 +1,32 @@ +#include "lets_split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif +} diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h new file mode 100644 index 0000000000..50bda03154 --- /dev/null +++ b/keyboards/lets_split/rev1/rev1.h @@ -0,0 +1,25 @@ +#ifndef REV1_H +#define REV1_H + +#include "../lets_split.h" + +//void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ + k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ + k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ + k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev1/rules.mk b/keyboards/lets_split/rev1/rules.mk new file mode 100644 index 0000000000..a0825b4ef6 --- /dev/null +++ b/keyboards/lets_split/rev1/rules.mk @@ -0,0 +1,5 @@ +BACKLIGHT_ENABLE = no + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/Makefile b/keyboards/lets_split/rev2/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/lets_split/rev2/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h new file mode 100644 index 0000000000..cd152e331f --- /dev/null +++ b/keyboards/lets_split/rev2/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split v2 +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } + +#define CATERINA_BOOTLOADER + +// #define USE_I2C + +// Use serial if not using I2C +#ifndef USE_I2C +# define USE_SERIAL +#endif + +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 12 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c new file mode 100644 index 0000000000..c505d3a6e3 --- /dev/null +++ b/keyboards/lets_split/rev2/rev2.c @@ -0,0 +1,32 @@ +#include "lets_split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif +} diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h new file mode 100644 index 0000000000..a8b0f0f4c7 --- /dev/null +++ b/keyboards/lets_split/rev2/rev2.h @@ -0,0 +1,25 @@ +#ifndef REV2_H +#define REV2_H + +#include "../lets_split.h" + +//void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ + k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ + k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ + k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/rules.mk b/keyboards/lets_split/rev2/rules.mk new file mode 100644 index 0000000000..80a942d06f --- /dev/null +++ b/keyboards/lets_split/rev2/rules.mk @@ -0,0 +1,5 @@ +BACKLIGHT_ENABLE = no + +ifndef QUANTUM_DIR + include ../../../Makefile +endif diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk index 6fde8a444c..1aee5313c1 100644 --- a/keyboards/lets_split/rules.mk +++ b/keyboards/lets_split/rules.mk @@ -63,11 +63,12 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= yes # Audio output on port C6 +AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SUBPROJECT_rev1 ?= yes +USE_I2C ?= yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/maxipad/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h new file mode 100644 index 0000000000..2462a5cfda --- /dev/null +++ b/keyboards/maxipad/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT maxipad +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 6 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } +#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/maxipad/keymaps/default/Makefile b/keyboards/maxipad/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/config.h b/keyboards/maxipad/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c new file mode 100644 index 0000000000..8a9bc4f0d4 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/keymap.c @@ -0,0 +1,54 @@ +#include "maxipad.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( /* Base */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \ + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \ + KC_LCTL, KC_LALT, MO(1), KC_ENT,KC_GRV,KC_SPC \ +), +[1] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \ + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \ + 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[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/readme.md b/keyboards/maxipad/keymaps/default/readme.md new file mode 100644 index 0000000000..a6c0d4a3f0 --- /dev/null +++ b/keyboards/maxipad/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for maxipad \ No newline at end of file diff --git a/keyboards/maxipad/maxipad.c b/keyboards/maxipad/maxipad.c new file mode 100644 index 0000000000..879ae86a76 --- /dev/null +++ b/keyboards/maxipad/maxipad.c @@ -0,0 +1,28 @@ +#include "maxipad.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/maxipad/maxipad.h b/keyboards/maxipad/maxipad.h new file mode 100644 index 0000000000..eee1309ddc --- /dev/null +++ b/keyboards/maxipad/maxipad.h @@ -0,0 +1,25 @@ +#ifndef MAXIPAD_H +#define MAXIPAD_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, \ + k10, k11, k12, k13, k14, k15, \ + k20, k21, k22, k23, k24, k25, \ + k30, k31, k32, k33, k34, k35, \ + k40, k41, k42, k43, k44, k45 \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45} \ +} + +#endif diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md new file mode 100644 index 0000000000..e722b66022 --- /dev/null +++ b/keyboards/maxipad/readme.md @@ -0,0 +1,28 @@ +maxipad keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme](/). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/maxipad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make default`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk new file mode 100644 index 0000000000..55898147dd --- /dev/null +++ b/keyboards/maxipad/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 -- cgit v1.2.3 From 21b6b4e6c4d6872164a13e8d31e3e0a9f146ea60 Mon Sep 17 00:00:00 2001 From: climbalima Date: Wed, 16 Nov 2016 19:49:38 -0500 Subject: should have fixed conflixed --- keyboards/lets_split/Makefile | 79 --------------------------- keyboards/lets_split/config.h | 13 +---- keyboards/lets_split/keymaps/default/keymap.c | 19 ------- keyboards/lets_split/lets_split.c | 7 +-- keyboards/lets_split/rev1/config.h | 26 --------- keyboards/lets_split/rev1/rev1.c | 6 -- keyboards/lets_split/rev1/rev1.h | 5 +- keyboards/lets_split/rev2/config.h | 18 +----- keyboards/lets_split/rev2/rev2.c | 6 -- keyboards/lets_split/rev2/rev2.h | 5 +- keyboards/maxipad/Makefile | 78 -------------------------- keyboards/maxipad/config.h | 9 +-- keyboards/maxipad/keymaps/default/keymap.c | 7 +-- 13 files changed, 10 insertions(+), 268 deletions(-) diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index 6ce6e43731..4e2a6f00fd 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -1,82 +1,3 @@ -<<<<<<< HEAD ifndef MAKEFILE_INCLUDED -======= -SRC += matrix.c \ - i2c.c \ - split_util.c \ - serial.c - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= yes # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -USE_I2C ?= yes -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend - -CUSTOM_MATRIX = yes -SUBPROJECT_DEFAULT = rev2 -ifndef QUANTUM_DIR ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 91b11f03fd..1b7bbcbbb9 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -61,20 +61,11 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -<<<<<<< HEAD -======= -<<<<<<< HEAD ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df + #ifdef SUBPROJECT_rev1 #include "rev1/config.h" #endif #ifdef SUBPROJECT_rev2 #include "rev2/config.h" #endif -#endif -<<<<<<< HEAD -======= - - - ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +#endif \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 41b9b8d8ff..6f1f71f5f8 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -29,7 +29,6 @@ enum custom_keycodes { #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -<<<<<<< HEAD /* Qwerty * ,-----------------------------------------------------------------------------------. @@ -83,29 +82,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -======= -[0] = KEYMAP( \ - 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_ENT , \ - KC_LCTL, _LOWER, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df ), [3] = KEYMAP( \ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ -<<<<<<< HEAD _______, _______, _______, _______, _______, KC_BSPC, MT(MOD_LSFT, KC_BSPC), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -======= - _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df ), [4] = KEYMAP( \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ -<<<<<<< HEAD _______, _______, _______, _______, _______, KC_ENT, MT(MOD_LSFT, KC_ENT), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ ), @@ -126,12 +113,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) - - -======= - _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df }; #ifdef AUDIO_ENABLE diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 8bb33f9514..117b727a85 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -1,6 +1 @@ -#include "lets_split.h" - -<<<<<<< HEAD -======= - ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +#include "lets_split.h" \ No newline at end of file diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h index da5b476733..825e5ec245 100644 --- a/keyboards/lets_split/rev1/config.h +++ b/keyboards/lets_split/rev1/config.h @@ -25,11 +25,8 @@ along with this program. If not, see . #define PRODUCT_ID 0x3060 #define DEVICE_VER 0x0001 #define MANUFACTURER Wootpatoot -<<<<<<< HEAD #define PRODUCT Lets Split -======= #define PRODUCT Lets Split v1 ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df #define DESCRIPTION A split keyboard for the cheap makers /* key matrix size */ @@ -44,15 +41,11 @@ along with this program. If not, see . #define CATERINA_BOOTLOADER // #define USE_I2C - -<<<<<<< HEAD // Use serial if not using I2C #ifndef USE_I2C # define USE_SERIAL #endif -======= ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df // #define EE_HANDS #define I2C_MASTER_LEFT @@ -80,21 +73,6 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* ws2812 RGB LED */ -<<<<<<< HEAD -#define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 8 // Number of LEDs -======= -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 -#define RGBLED_NUM 28 // Number of LEDs ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 - /* * Feature disable options * These options are also useful to firmware size reduction. @@ -113,8 +91,4 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -<<<<<<< HEAD -#endif -======= #endif ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df diff --git a/keyboards/lets_split/rev1/rev1.c b/keyboards/lets_split/rev1/rev1.c index 41dd1e3535..c505d3a6e3 100644 --- a/keyboards/lets_split/rev1/rev1.c +++ b/keyboards/lets_split/rev1/rev1.c @@ -24,15 +24,9 @@ void matrix_init_kb(void) { }; void shutdown_user(void) { -<<<<<<< HEAD #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_goodbye, false, 0); _delay_ms(150); stop_all_notes(); #endif -======= - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df } diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h index 998b2be7c7..4667c9fb09 100644 --- a/keyboards/lets_split/rev1/rev1.h +++ b/keyboards/lets_split/rev1/rev1.h @@ -1,15 +1,12 @@ #ifndef REV1_H #define REV1_H -<<<<<<< HEAD #include "../lets_split.h" //void promicro_bootloader_jmp(bool program); -======= #include "quantum.h" -void promicro_bootloader_jmp(bool program); ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +//void promicro_bootloader_jmp(bool program); #define KEYMAP( \ k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h index 19c137e56c..e9689d773d 100644 --- a/keyboards/lets_split/rev2/config.h +++ b/keyboards/lets_split/rev2/config.h @@ -41,14 +41,11 @@ along with this program. If not, see . // #define USE_I2C -<<<<<<< HEAD // Use serial if not using I2C #ifndef USE_I2C # define USE_SERIAL #endif -======= ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df // #define EE_HANDS #define I2C_MASTER_LEFT @@ -77,19 +74,11 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -<<<<<<< HEAD #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER #define RGBLED_NUM 12 // Number of LEDs -======= #define ws2812_PORTREG PORTD #define ws2812_DDRREG DDRD -#define ws2812_pin PD1 -#define RGBLED_NUM 28 // Number of LEDs ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 /* * Feature disable options @@ -109,8 +98,5 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -<<<<<<< HEAD -#endif -======= -#endif ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df + +#endif \ No newline at end of file diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c index 41dd1e3535..c505d3a6e3 100644 --- a/keyboards/lets_split/rev2/rev2.c +++ b/keyboards/lets_split/rev2/rev2.c @@ -24,15 +24,9 @@ void matrix_init_kb(void) { }; void shutdown_user(void) { -<<<<<<< HEAD #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_goodbye, false, 0); _delay_ms(150); stop_all_notes(); #endif -======= - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df } diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h index 9e251ca57d..990976de2b 100644 --- a/keyboards/lets_split/rev2/rev2.h +++ b/keyboards/lets_split/rev2/rev2.h @@ -1,15 +1,12 @@ #ifndef REV2_H #define REV2_H -<<<<<<< HEAD #include "../lets_split.h" //void promicro_bootloader_jmp(bool program); -======= #include "quantum.h" -void promicro_bootloader_jmp(bool program); ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +//void promicro_bootloader_jmp(bool program); #define KEYMAP( \ k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile index c65665142a..57b2ef62e5 100644 --- a/keyboards/maxipad/Makefile +++ b/keyboards/maxipad/Makefile @@ -1,81 +1,3 @@ -<<<<<<< HEAD ifndef MAKEFILE_INCLUDED include ../../Makefile endif -======= - - -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 - -ifndef QUANTUM_DIR - include ../../Makefile -endif - - ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h index 4a942aae94..fbe64a5b0b 100644 --- a/keyboards/maxipad/config.h +++ b/keyboards/maxipad/config.h @@ -24,15 +24,10 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0001 -<<<<<<< HEAD -#define MANUFACTURER You -#define PRODUCT maxipad -#define DESCRIPTION A custom keyboard -======= #define MANUFACTURER Wootpatoot #define PRODUCT maxipad -#define DESCRIPTION g8ming keeb ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +#define DESCRIPTION A custom keyboard + /* key matrix size */ #define MATRIX_ROWS 5 diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c index 5e3a594ccd..43ace32419 100644 --- a/keyboards/maxipad/keymaps/default/keymap.c +++ b/keyboards/maxipad/keymaps/default/keymap.c @@ -10,15 +10,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [1] = KEYMAP( KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \ -<<<<<<< HEAD KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \ -======= KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - 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 b085a34506bc981a7c7cdb270b7786d6a4cbf985 Mon Sep 17 00:00:00 2001 From: climbalima Date: Wed, 16 Nov 2016 20:44:49 -0500 Subject: fixed readme conflicts --- keyboards/maxipad/readme.md | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md index 1971ce1f36..ab7b122fe8 100644 --- a/keyboards/maxipad/readme.md +++ b/keyboards/maxipad/readme.md @@ -1,13 +1,7 @@ -maxipad keyboard firmware -====================== - ## Quantum MK Firmware -<<<<<<< HEAD For the full Quantum feature list, see [the parent readme](/). -======= -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df + ## Building @@ -17,17 +11,13 @@ Depending on which keymap you would like to use, you will have to compile slight ### Default -<<<<<<< HEAD -To build with the default keymap, simply run `make default`. -======= To build with the default keymap, simply run `make`. ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df + ### Other Keymaps Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. -<<<<<<< HEAD To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` @@ -35,12 +25,4 @@ $ make [default|jack|] ``` Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. -======= -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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df -- cgit v1.2.3 From 00d88b74ada77b7cbf452aaf622846f80d85d732 Mon Sep 17 00:00:00 2001 From: Benjamin Grabkowitz Date: Wed, 16 Nov 2016 23:52:36 -0500 Subject: Adding Support for atreus62 keyboard. https://github.com/profet23/atreus62 --- keyboards/atreus62/Makefile | 3 + keyboards/atreus62/atreus62.c | 1 + keyboards/atreus62/atreus62.h | 26 ++ keyboards/atreus62/config.h | 83 +++++++ keyboards/atreus62/keymaps/default/keymap.c | 71 ++++++ keyboards/atreus62/pro_micro.h | 362 ++++++++++++++++++++++++++++ keyboards/atreus62/rules.mk | 66 +++++ 7 files changed, 612 insertions(+) create mode 100644 keyboards/atreus62/Makefile create mode 100644 keyboards/atreus62/atreus62.c create mode 100644 keyboards/atreus62/atreus62.h create mode 100644 keyboards/atreus62/config.h create mode 100644 keyboards/atreus62/keymaps/default/keymap.c create mode 100644 keyboards/atreus62/pro_micro.h create mode 100644 keyboards/atreus62/rules.mk diff --git a/keyboards/atreus62/Makefile b/keyboards/atreus62/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/atreus62/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/atreus62/atreus62.c b/keyboards/atreus62/atreus62.c new file mode 100644 index 0000000000..ba5bce9899 --- /dev/null +++ b/keyboards/atreus62/atreus62.c @@ -0,0 +1 @@ +#include "atreus62.h" \ No newline at end of file diff --git a/keyboards/atreus62/atreus62.h b/keyboards/atreus62/atreus62.h new file mode 100644 index 0000000000..eacf5b4513 --- /dev/null +++ b/keyboards/atreus62/atreus62.h @@ -0,0 +1,26 @@ +#ifndef ATREUS62_H +#define ATREUS62_H + +#include "quantum.h" + +void promicro_bootloader_jmp(bool program); + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \ +} + +#endif \ No newline at end of file diff --git a/keyboards/atreus62/config.h b/keyboards/atreus62/config.h new file mode 100644 index 0000000000..90a4aa05a6 --- /dev/null +++ b/keyboards/atreus62/config.h @@ -0,0 +1,83 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6062 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Profet +#define PRODUCT Atreus62 +#define DESCRIPTION q.m.k. keyboard firmware for Atreus62 + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 5 +#define MATRIX_COLS 13 + +// wiring of each half +#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, C6 } + +#define CATERINA_BOOTLOADER + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/atreus62/keymaps/default/keymap.c b/keyboards/atreus62/keymaps/default/keymap.c new file mode 100644 index 0000000000..52802c77b7 --- /dev/null +++ b/keyboards/atreus62/keymaps/default/keymap.c @@ -0,0 +1,71 @@ +// this is the style you want to emulate. +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, + +#include "atreus62.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 _DEFAULT 0 +#define _NAV 1 +#define _RESET 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_DEFAULT] = { /* qwerty */ + { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS }, + { KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC }, + { KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, 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_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LBRC }, + { KC_LCTL, KC_LGUI, KC_LALT, KC_GRV, MO(_NAV),KC_BSPC, KC_ENT, KC_SPC, KC_EQL, KC_MINS, KC_QUOT, KC_ENT, KC_RGUI } +}, + +[_NAV] = { + { TO(_DEFAULT), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS }, + { TO(_RESET), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } +}, + +[_RESET] = { + { TO(_DEFAULT), 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 , 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 , 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 , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , RESET } +} + + +/* +[_TRNS] = { + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, + { KC_TRNS, 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[] = { + +}; + +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; +}; diff --git a/keyboards/atreus62/pro_micro.h b/keyboards/atreus62/pro_micro.h new file mode 100644 index 0000000000..f9e7ed75d9 --- /dev/null +++ b/keyboards/atreus62/pro_micro.h @@ -0,0 +1,362 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 30 +#define NUM_ANALOG_INPUTS 12 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +static const uint8_t SDA = 2; +static const uint8_t SCL = 3; +#define LED_BUILTIN 13 + +// Map SPI port to 'new' pins D14..D17 +static const uint8_t SS = 17; +static const uint8_t MOSI = 16; +static const uint8_t MISO = 14; +static const uint8_t SCK = 15; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +static const uint8_t ADC0 = 18; +static const uint8_t ADC1 = 19; +static const uint8_t ADC2 = 20; +static const uint8_t ADC3 = 21; +static const uint8_t ADC4 = 22; +static const uint8_t ADC5 = 23; +static const uint8_t ADC6 = 24; // D4 +static const uint8_t ADC7 = 25; // D6 +static const uint8_t ADC8 = 26; // D8 +static const uint8_t ADC9 = 27; // D9 +static const uint8_t ADC10 = 28; // D10 +static const uint8_t ADC11 = 29; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// Connected LEDs on board for TX and RX +// TXLED D24 PD5 XCK1 +// RXLED D17 PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 - PD5 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(5), // D24 - PD5 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +#endif /* Pins_Arduino_h */ diff --git a/keyboards/atreus62/rules.mk b/keyboards/atreus62/rules.mk new file mode 100644 index 0000000000..f5d0be23ac --- /dev/null +++ b/keyboards/atreus62/rules.mk @@ -0,0 +1,66 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +#BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +#MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= yes # Unicode +#BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -- cgit v1.2.3 From 6c5fce5c1a9d6383843416e0a236c2d7ea9cc2da Mon Sep 17 00:00:00 2001 From: Benjamin Grabkowitz Date: Wed, 16 Nov 2016 23:59:42 -0500 Subject: Adding readme placeholder --- keyboards/atreus62/readme.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 keyboards/atreus62/readme.md diff --git a/keyboards/atreus62/readme.md b/keyboards/atreus62/readme.md new file mode 100644 index 0000000000..0245b4f9f0 --- /dev/null +++ b/keyboards/atreus62/readme.md @@ -0,0 +1,10 @@ +atreus62 keyboard firmware +====================== + +This firmware is for the atreus62 keyboard. + +This version utilizes a Pro Micro for its controller and has a 62 key layout. + +https://github.com/profet23/atreus62 + +TODO: More information \ No newline at end of file -- cgit v1.2.3 From 3774a7fcdab5544fc787f4c200be05fcd417e31f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 17 Nov 2016 17:42:14 -0500 Subject: rgb light through midi --- keyboards/amj60/config.h | 2 +- keyboards/clueboard/rev1/config.h | 2 +- keyboards/clueboard/rev2/config.h | 2 +- keyboards/cluecard/config.h | 2 +- keyboards/cluecard/keymaps/rgb_effects/config.h | 2 +- keyboards/cluepad/config.h | 2 +- keyboards/ergodox/keymaps/jack/config.h | 3 +- keyboards/gh60/keymaps/robotmaxtron/config.h | 2 +- keyboards/handwired/minorca/keymaps/rgb/config.h | 2 +- keyboards/jd40/config.h | 2 +- keyboards/kc60/keymaps/ws2812/config.h | 2 +- keyboards/lets_split/config.h | 2 +- keyboards/lets_split/keymaps/i2c/config.h | 2 +- keyboards/lets_split/keymaps/serial/config.h | 2 +- keyboards/phantom/config.h | 2 +- keyboards/planck/keymaps/experimental/config.h | 2 +- keyboards/planck/keymaps/yang/config.h | 2 +- keyboards/preonic/config.h | 2 +- keyboards/preonic/keymaps/kinesis/config.h | 2 +- keyboards/satan/config.h | 2 +- keyboards/tada68/config.h | 2 +- quantum/light_ws2812.c | 2 - quantum/rgblight.c | 10 +-- quantum/rgblight.h | 2 +- readme.md | 4 +- tmk_core/protocol/lufa/lufa.c | 96 ++++++++++++++++++++++++ 26 files changed, 126 insertions(+), 31 deletions(-) diff --git a/keyboards/amj60/config.h b/keyboards/amj60/config.h index d98e0e9f2f..7c06f9a6c7 100644 --- a/keyboards/amj60/config.h +++ b/keyboards/amj60/config.h @@ -67,7 +67,7 @@ along with this program. If not, see . */ #define RGB_DI_PIN E2 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/clueboard/rev1/config.h b/keyboards/clueboard/rev1/config.h index 8c94972324..f40876ffbf 100644 --- a/keyboards/clueboard/rev1/config.h +++ b/keyboards/clueboard/rev1/config.h @@ -26,7 +26,7 @@ /* Underlight configuration */ #define RGB_DI_PIN B2 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard/rev2/config.h index 15ca4ece86..8435fd02be 100644 --- a/keyboards/clueboard/rev2/config.h +++ b/keyboards/clueboard/rev2/config.h @@ -30,7 +30,7 @@ /* Underlight configuration */ #define RGB_DI_PIN D7 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/cluecard/config.h b/keyboards/cluecard/config.h index 765347b131..6520eb5574 100644 --- a/keyboards/cluecard/config.h +++ b/keyboards/cluecard/config.h @@ -140,7 +140,7 @@ along with this program. If not, see . /* Underlight configuration */ #define RGB_DI_PIN E6 -//#define RGBLIGHT_TIMER +//#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 4 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/cluecard/keymaps/rgb_effects/config.h b/keyboards/cluecard/keymaps/rgb_effects/config.h index e88847df4d..c6c9342c81 100644 --- a/keyboards/cluecard/keymaps/rgb_effects/config.h +++ b/keyboards/cluecard/keymaps/rgb_effects/config.h @@ -4,7 +4,7 @@ #include "../../config.h" // place overrides here -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLIGHT_EFFECT_SNAKE_LENGTH 3 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2 diff --git a/keyboards/cluepad/config.h b/keyboards/cluepad/config.h index bae05fade3..bd64dfd27d 100644 --- a/keyboards/cluepad/config.h +++ b/keyboards/cluepad/config.h @@ -70,7 +70,7 @@ along with this program. If not, see . /* Underlight configuration */ #define RGB_DI_PIN F6 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 4 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h index 5bf109c184..5c11652264 100644 --- a/keyboards/ergodox/keymaps/jack/config.h +++ b/keyboards/ergodox/keymaps/jack/config.h @@ -5,12 +5,13 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D7 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 15 // Number of LEDs #define RGBLIGHT_HUE_STEP 12 #define RGBLIGHT_SAT_STEP 255 #define RGBLIGHT_VAL_STEP 12 #define RGB_MIDI +#define RGBW_BB_TWI #endif \ No newline at end of file diff --git a/keyboards/gh60/keymaps/robotmaxtron/config.h b/keyboards/gh60/keymaps/robotmaxtron/config.h index 6a29e6b8c2..bcd7534617 100644 --- a/keyboards/gh60/keymaps/robotmaxtron/config.h +++ b/keyboards/gh60/keymaps/robotmaxtron/config.h @@ -182,7 +182,7 @@ along with this program. If not, see . #define ws2812_pin PF4 */ #define RGB_DI_PIN F4 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/handwired/minorca/keymaps/rgb/config.h b/keyboards/handwired/minorca/keymaps/rgb/config.h index deaac2e26f..43b3c59110 100644 --- a/keyboards/handwired/minorca/keymaps/rgb/config.h +++ b/keyboards/handwired/minorca/keymaps/rgb/config.h @@ -11,7 +11,7 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D5 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 13 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/jd40/config.h b/keyboards/jd40/config.h index e2594f4b37..047be5707b 100644 --- a/keyboards/jd40/config.h +++ b/keyboards/jd40/config.h @@ -70,7 +70,7 @@ along with this program. If not, see . ) #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 12 // Number of LEDs #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/kc60/keymaps/ws2812/config.h b/keyboards/kc60/keymaps/ws2812/config.h index 2f39ea8e55..43abf6228e 100644 --- a/keyboards/kc60/keymaps/ws2812/config.h +++ b/keyboards/kc60/keymaps/ws2812/config.h @@ -2,7 +2,7 @@ /* WS2812B RGB Underglow LED */ #define RGB_DI_PIN F5 // Based on wiring depicted in ws2812_wiring.jpg -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 16 // Number of LEDs. Change this to match your use case. #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index f4d900accb..b0ad522fcb 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -75,7 +75,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/lets_split/keymaps/i2c/config.h b/keyboards/lets_split/keymaps/i2c/config.h index 2671fabf6d..72e5ae66ba 100644 --- a/keyboards/lets_split/keymaps/i2c/config.h +++ b/keyboards/lets_split/keymaps/i2c/config.h @@ -75,7 +75,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/lets_split/keymaps/serial/config.h b/keyboards/lets_split/keymaps/serial/config.h index f4d900accb..b0ad522fcb 100644 --- a/keyboards/lets_split/keymaps/serial/config.h +++ b/keyboards/lets_split/keymaps/serial/config.h @@ -75,7 +75,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/phantom/config.h b/keyboards/phantom/config.h index 983a1d73f2..71a33498b4 100644 --- a/keyboards/phantom/config.h +++ b/keyboards/phantom/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* Underlight configuration */ #define RGB_DI_PIN E2 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 20 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/planck/keymaps/experimental/config.h b/keyboards/planck/keymaps/experimental/config.h index 52acd1905e..cc093bee49 100644 --- a/keyboards/planck/keymaps/experimental/config.h +++ b/keyboards/planck/keymaps/experimental/config.h @@ -9,7 +9,7 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN B1 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/planck/keymaps/yang/config.h b/keyboards/planck/keymaps/yang/config.h index feb5a11901..4ed19d76f9 100644 --- a/keyboards/planck/keymaps/yang/config.h +++ b/keyboards/planck/keymaps/yang/config.h @@ -5,7 +5,7 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D1 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h index 3fb978c2f6..f88acf2111 100644 --- a/keyboards/preonic/config.h +++ b/keyboards/preonic/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D1 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/preonic/keymaps/kinesis/config.h b/keyboards/preonic/keymaps/kinesis/config.h index 086baa84ff..e6099ceb82 100644 --- a/keyboards/preonic/keymaps/kinesis/config.h +++ b/keyboards/preonic/keymaps/kinesis/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D1 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/satan/config.h b/keyboards/satan/config.h index 7e9f91cc82..eb357b39e0 100644 --- a/keyboards/satan/config.h +++ b/keyboards/satan/config.h @@ -67,7 +67,7 @@ along with this program. If not, see . */ #define RGB_DI_PIN E2 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h index 5d8757936d..19cf9c9b39 100644 --- a/keyboards/tada68/config.h +++ b/keyboards/tada68/config.h @@ -67,7 +67,7 @@ along with this program. If not, see . */ /*#define RGB_DI_PIN E2 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 2 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index aac058f534..a883b13884 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -16,8 +16,6 @@ #include #include "debug.h" -#define RGBW_BB_TWI 1 - #ifdef RGBW_BB_TWI // Port for the I2C diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 1901010bf9..6b58f66547 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -174,7 +174,7 @@ void rgblight_init(void) { } eeconfig_debug_rgblight(); // display current eeprom values - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_init(); // setup the timer #endif @@ -221,7 +221,7 @@ void rgblight_mode(uint8_t mode) { eeconfig_update_rgblight(rgblight_config.raw); xprintf("rgblight mode: %u\n", rgblight_config.mode); if (rgblight_config.mode == 1) { - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_disable(); #endif } else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 23) { @@ -231,7 +231,7 @@ void rgblight_mode(uint8_t mode) { // MODE 15-20, snake // MODE 21-23, knight - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_enable(); #endif } @@ -245,7 +245,7 @@ void rgblight_toggle(void) { if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); } else { - #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_disable(); #endif _delay_ms(50); @@ -371,7 +371,7 @@ void rgblight_set(void) { } } -#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) +#ifdef RGBLIGHT_ANIMATIONS // Animation timer -- AVR Timer3 void rgblight_timer_init(void) { diff --git a/quantum/rgblight.h b/quantum/rgblight.h index d16ba24e53..330c2fe1ba 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -1,7 +1,7 @@ #ifndef RGBLIGHT_H #define RGBLIGHT_H -#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) +#ifdef RGBLIGHT_ANIMATIONS #define RGBLIGHT_MODES 23 #else #define RGBLIGHT_MODES 1 diff --git a/readme.md b/readme.md index d5a259ccb8..2364b53010 100644 --- a/readme.md +++ b/readme.md @@ -1135,12 +1135,12 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring RGBLIGHT_ENABLE = yes -In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile). +In order to use the underglow animation functions, you need to have `#define RGBLIGHT_ANIMATIONS` in your `config.h`. Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default: #define RGB_DI_PIN F4 // The pin your RGB strip is wired to - #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) + #define RGBLIGHT_ANIMATIONS // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index b628cde370..7eb9be601e 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -51,6 +51,7 @@ #include "descriptor.h" #include "lufa.h" +#include "quantum.h" #ifdef NKRO_ENABLE #include "keycode_config.h" @@ -1111,9 +1112,104 @@ void cc_callback(MidiDevice * device, #endif } +void send_dword(uint32_t number) { + uint16_t word = (number >> 16); + send_word(word); + send_word(number & 0xFFFFUL); +} + +void send_word(uint16_t number) { + uint8_t byte = number >> 8; + send_byte(byte); + send_byte(number & 0xFF); +} + +void send_byte(uint8_t number) { + uint8_t nibble = number >> 4; + send_nibble(nibble); + send_nibble(number & 0xF); +} + +void send_nibble(uint8_t number) { + switch (number) { + case 0: + register_code(KC_0); + unregister_code(KC_0); + break; + case 1 ... 9: + register_code(KC_1 + (number - 1)); + unregister_code(KC_1 + (number - 1)); + break; + case 0xA ... 0xF: + register_code(KC_A + (number - 0xA)); + unregister_code(KC_A + (number - 0xA)); + break; + } +} + +uint8_t midi_buffer[16] = {0}; + void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { // for (int i = 0; i < length; i++) // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); + // if (start == 0x27) { + // SEND_STRING("\n"); + // send_word(start); + // SEND_STRING(": "); + for (uint8_t place = 0; place < length; place++) { + // send_byte(*data); + midi_buffer[start + place] = *data; + if (*data == 0xF7) + sysex_buffer_callback(start + place, &midi_buffer); + // SEND_STRING(" "); + data++; + } + // } + +} + +void sysex_buffer_callback(uint8_t length, uint8_t * data) { + uint8_t * pointer_copy = data; + + if (*data++ != 0xF0) + return + data++; + data++; + data++; + data++; + + switch (*data++) { + case 0x27: ; // RGB LED functions + switch (*data++) + case 0x00: ; // Update HSV + uint32_t part1 = *data++; + uint32_t part2 = *data++; + uint32_t part3 = *data++; + uint32_t part4 = *data++; + uint32_t part5 = *data++; + uint32_t chunk = ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5; + // SEND_STRING("\nCHUNK: "); + // send_dword(chunk); + rgblight_sethsv(((chunk >> 16) & 0xFFFF) % 360, (chunk >> 8) & 0xFF, chunk & 0xFF); + // SEND_STRING("\nHUE: "); + // send_word(((chunk >> 16) & 0xFFFF) % 360); + // SEND_STRING("\nSAT: "); + // send_word((chunk >> 8) & 0xFF); + // SEND_STRING("\nVAL: "); + // send_word(chunk & 0xFF); + break; + case 0x01: ; // Update RGB + break; + break; + } + + // SEND_STRING("\nDATA:\n"); + // while (*pointer_copy != 0xF7) { + // send_byte(*pointer_copy++); + // SEND_STRING(" "); + // } + } + #endif -- cgit v1.2.3 From 9bbc9a7ce024edb4d80ce65d43c82456e3714928 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Thu, 17 Nov 2016 19:47:08 -0500 Subject: Initial Erez Experimental keymap tweaks --- keyboards/ergodox/keymaps/erez_experimental/Makefile | 2 ++ keyboards/ergodox/keymaps/erez_experimental/config.h | 11 +++++++++++ keyboards/ergodox/keymaps/erez_experimental/keymap.c | 12 ++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/erez_experimental/Makefile index b673c5ce52..dbe89d1410 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/Makefile +++ b/keyboards/ergodox/keymaps/erez_experimental/Makefile @@ -3,6 +3,8 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend COMMAND_ENABLE = no # Commands for debug and configuration +RGBLIGHT_ENABLE = yes +MIDI_ENABLE = yes ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/ergodox/keymaps/erez_experimental/config.h b/keyboards/ergodox/keymaps/erez_experimental/config.h index e5d7fe1885..fbd12ab797 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/config.h +++ b/keyboards/ergodox/keymaps/erez_experimental/config.h @@ -8,5 +8,16 @@ #undef LEADER_TIMEOUT #define LEADER_TIMEOUT 300 + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D7 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 15 // Number of LEDs +#define RGBLIGHT_HUE_STEP 12 +#define RGBLIGHT_SAT_STEP 255 +#define RGBLIGHT_VAL_STEP 12 + +#define RGB_MIDI +#define RGBW_BB_TWI #endif diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 4804959d63..b867d36013 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -67,9 +67,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | | | | + * |VAI |VAD |HUI | |SAI |TOG |MOD | * | | |------| |------| | | - * | | | | | | | | + * | | |HUD | |SAD | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -81,8 +81,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN), KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + RGB_HUI, + RGB_VAI,RGB_VAD,RGB_HUD, // right hand KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, @@ -90,8 +90,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS + RGB_SAI, + RGB_SAD, RGB_TOG, RGB_MOD ), /* Keymap 2: Media and mouse keys * -- cgit v1.2.3 From 285c5a91f23e972d9c579184283443111186329d Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Thu, 17 Nov 2016 20:56:36 -0500 Subject: Groundwork for dedicated color keycodes --- .../ergodox/keymaps/erez_experimental/keymap.c | 24 +++++++++++++++++++++- quantum/rgblight.c | 7 +++++++ quantum/rgblight.h | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index b867d36013..4a23c7ac58 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -7,6 +7,12 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + RGB_FF00BB // always start with RGB_ +}; + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -75,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // SYMBOLS [SYMB] = KEYMAP( // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + RGB_FF00BB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, @@ -152,6 +158,22 @@ void matrix_init_user(void) { }; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case RGB_FF00BB: + if (record->event.pressed) { + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff,0x00,0xbb); + } + return false; + break; + } + return true; +} + LEADER_EXTERNS(); // Runs constantly in the background, in a loop. diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 6b58f66547..00620da58e 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -253,6 +253,13 @@ void rgblight_toggle(void) { } } +void rgblight_enable(void) { + rgblight_config.enable = 1; + eeconfig_update_rgblight(rgblight_config.raw); + xprintf("rgblight enable: rgblight_config.enable = %u\n", rgblight_config.enable); + rgblight_mode(rgblight_config.mode); +} + void rgblight_increase_hue(void) { uint16_t hue; diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 330c2fe1ba..a3673348e7 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -61,6 +61,7 @@ void rgblight_init(void); void rgblight_increase(void); void rgblight_decrease(void); void rgblight_toggle(void); +void rgblight_enable(void); void rgblight_step(void); void rgblight_mode(uint8_t mode); void rgblight_set(void); -- cgit v1.2.3 From 161bd5596b5d8199f2e56246a27ccbdb8c80bb36 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 18 Nov 2016 22:22:24 -0500 Subject: midi back and forth --- keyboards/ergodox/keymaps/jack/keymap.c | 7 +++- tmk_core/protocol/lufa/lufa.c | 62 ++++++++++++++++++++++++--------- tmk_core/protocol/lufa/lufa.h | 1 + 3 files changed, 52 insertions(+), 18 deletions(-) diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c index 8721b9644a..eb41f12127 100644 --- a/keyboards/ergodox/keymaps/jack/keymap.c +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, RGB_TOG, RGB_HUI, RGB_MOD, - KC_PGDN, KC_SPC,KC_SPC + M(2), KC_SPC,KC_SPC ), [SYMB] = KEYMAP( // left hand @@ -89,6 +89,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) eeconfig_init(); } break; + case 2: + if (record->event.pressed) { // For resetting EEPROM + send_unicode_midi(0x0CA0); + } + break; } return MACRO_NONE; }; diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 7eb9be601e..ae9cc2f962 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1161,7 +1161,7 @@ void sysex_callback(MidiDevice * device, // send_byte(*data); midi_buffer[start + place] = *data; if (*data == 0xF7) - sysex_buffer_callback(start + place, &midi_buffer); + sysex_buffer_callback(device, start + place, &midi_buffer); // SEND_STRING(" "); data++; } @@ -1169,7 +1169,24 @@ void sysex_callback(MidiDevice * device, } -void sysex_buffer_callback(uint8_t length, uint8_t * data) { +uint32_t decode_4byte_chunk(uint8_t * data) { + uint32_t part1 = *data++; + uint32_t part2 = *data++; + uint32_t part3 = *data++; + uint32_t part4 = *data++; + uint32_t part5 = *data++; + return ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5; +} + +void encode_4byte_chunk(uint32_t data, uint8_t * pointer) { + *pointer++ = (data >> 28) & 0x7F; + *pointer++ = (data >> 21) & 0x7F; + *pointer++ = (data >> 14) & 0x7F; + *pointer++ = (data >> 7) & 0x7F; + *pointer++ = (data) & 0x7F; +} + +void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { uint8_t * pointer_copy = data; if (*data++ != 0xF0) @@ -1180,28 +1197,31 @@ void sysex_buffer_callback(uint8_t length, uint8_t * data) { data++; switch (*data++) { + case 0x13: ; // Get info from keyboard + switch (*data++) { + case 0x00: ; // Get layer state + // send_dword(layer_state); + uint8_t chunk[5]; + encode_4byte_chunk(layer_state | default_layer_state, &chunk); + + uint8_t array[] = {0xF0, 0x00, 0x00, 0x00, 0x00, chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], 0xF7}; + midi_send_array(&midi_device, 11, &array); + // midi_send_data(device, 3, 0x00, layer_state >> 24 & 0x7f, layer_state >> 16 & 0x7f); + // midi_send_data(device, 6, layer_state >> 8 & 0x7f, layer_state & 0x7f, 0xF7); + break; + } + #ifdef RGBLIGHT_ENABLE case 0x27: ; // RGB LED functions - switch (*data++) + switch (*data++) { case 0x00: ; // Update HSV - uint32_t part1 = *data++; - uint32_t part2 = *data++; - uint32_t part3 = *data++; - uint32_t part4 = *data++; - uint32_t part5 = *data++; - uint32_t chunk = ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5; - // SEND_STRING("\nCHUNK: "); - // send_dword(chunk); + uint32_t chunk = decode_4byte_chunk(data); rgblight_sethsv(((chunk >> 16) & 0xFFFF) % 360, (chunk >> 8) & 0xFF, chunk & 0xFF); - // SEND_STRING("\nHUE: "); - // send_word(((chunk >> 16) & 0xFFFF) % 360); - // SEND_STRING("\nSAT: "); - // send_word((chunk >> 8) & 0xFF); - // SEND_STRING("\nVAL: "); - // send_word(chunk & 0xFF); break; case 0x01: ; // Update RGB break; + } break; + #endif } // SEND_STRING("\nDATA:\n"); @@ -1212,4 +1232,12 @@ void sysex_buffer_callback(uint8_t length, uint8_t * data) { } +void send_unicode_midi(uint32_t unicode) { + uint8_t chunk[5]; + encode_4byte_chunk(unicode, &chunk); + + uint8_t array[] = {0xF0, 0x00, 0x00, 0x00, 0x05, chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], 0xF7}; + midi_send_array(&midi_device, 11, &array); +} + #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index aad08d6407..3fec797b6c 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -70,6 +70,7 @@ typedef struct { #ifdef MIDI_ENABLE void MIDI_Task(void); MidiDevice midi_device; +void send_unicode_midi(uint32_t unicode); #endif // #if LUFA_VERSION_INTEGER < 0x120730 -- cgit v1.2.3 From a06115df19a74d39b08758472b221e630c3680d3 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 18 Nov 2016 23:20:07 -0500 Subject: don't always detect a matrix change (fixes debounce) --- quantum/matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/matrix.c b/quantum/matrix.c index 3c488b417d..07eb87bc36 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -310,7 +310,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) // Unselect row unselect_row(current_row); - return (last_row_value == current_matrix[current_row]); + return (last_row_value != current_matrix[current_row]); } static void select_row(uint8_t row) -- cgit v1.2.3 From 01736a502e8f2900bde229a086a4ab03513f6781 Mon Sep 17 00:00:00 2001 From: climbalima Date: Fri, 18 Nov 2016 23:40:34 -0500 Subject: just saving --- keyboards/maxipad/Makefile | 2 +- keyboards/maxipad/config.h | 113 +++++----------------------- keyboards/maxipad/keymaps/default/Makefile | 21 ------ keyboards/maxipad/keymaps/default/config.h | 8 -- keyboards/maxipad/keymaps/default/keymap.c | 40 ++-------- keyboards/maxipad/keymaps/default/readme.md | 1 - keyboards/maxipad/maxipad.c | 29 +------ keyboards/maxipad/maxipad.h | 12 +-- keyboards/maxipad/readme.md | 31 ++------ keyboards/maxipad/rules.mk | 29 +++---- 10 files changed, 54 insertions(+), 232 deletions(-) delete mode 100644 keyboards/maxipad/keymaps/default/Makefile delete mode 100644 keyboards/maxipad/keymaps/default/config.h delete mode 100644 keyboards/maxipad/keymaps/default/readme.md diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile index 57b2ef62e5..4e2a6f00fd 100644 --- a/keyboards/maxipad/Makefile +++ b/keyboards/maxipad/Makefile @@ -1,3 +1,3 @@ ifndef MAKEFILE_INCLUDED include ../../Makefile -endif +endif \ No newline at end of file diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h index fbe64a5b0b..a056e4963b 100644 --- a/keyboards/maxipad/config.h +++ b/keyboards/maxipad/config.h @@ -24,124 +24,49 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0001 -#define MANUFACTURER Wootpatoot +#define MANUFACTURER wootpatoot #define PRODUCT maxipad #define DESCRIPTION A custom keyboard - /* key matrix size */ #define MATRIX_ROWS 5 #define MATRIX_COLS 6 -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } -#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } -#define UNUSED_PINS +// Planck PCB default pin-out +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#ifdef USE_PRO_MICRO + #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } + #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 } + #define UNUSED_PINS + #else + #define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } + #define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } + #define UNUSED_PINS + #endif /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW - -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ +/* define if matrix has ghost */ //#define MATRIX_HAS_GHOST /* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ +/* key combination for command */ #define IS_COMMAND() ( \ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/maxipad/keymaps/default/Makefile b/keyboards/maxipad/keymaps/default/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/maxipad/keymaps/default/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/config.h b/keyboards/maxipad/keymaps/default/config.h deleted file mode 100644 index df06a26206..0000000000 --- a/keyboards/maxipad/keymaps/default/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c index 43ace32419..227cef7d86 100644 --- a/keyboards/maxipad/keymaps/default/keymap.c +++ b/keyboards/maxipad/keymaps/default/keymap.c @@ -1,5 +1,5 @@ #include "maxipad.h" - + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP( /* Base */ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \ @@ -13,42 +13,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC \ ), }; - + const uint16_t PROGMEM fn_actions[] = { - }; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function { - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } return MACRO_NONE; -}; - - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file +}; \ No newline at end of file diff --git a/keyboards/maxipad/keymaps/default/readme.md b/keyboards/maxipad/keymaps/default/readme.md deleted file mode 100644 index a6c0d4a3f0..0000000000 --- a/keyboards/maxipad/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for maxipad \ No newline at end of file diff --git a/keyboards/maxipad/maxipad.c b/keyboards/maxipad/maxipad.c index 879ae86a76..a193b112b9 100644 --- a/keyboards/maxipad/maxipad.c +++ b/keyboards/maxipad/maxipad.c @@ -1,28 +1 @@ -#include "maxipad.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} +#include "maxipad.h" \ No newline at end of file diff --git a/keyboards/maxipad/maxipad.h b/keyboards/maxipad/maxipad.h index eee1309ddc..4d8c6428d2 100644 --- a/keyboards/maxipad/maxipad.h +++ b/keyboards/maxipad/maxipad.h @@ -8,18 +8,18 @@ // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array #define KEYMAP( \ - k00, k01, k02, k03, k04, k05, \ - k10, k11, k12, k13, k14, k15, \ - k20, k21, k22, k23, k24, k25, \ - k30, k31, k32, k33, k34, k35, \ - k40, k41, k42, k43, k44, k45 \ + k00, k01, k02, k03, k04, k05, \ + k10, k11, k12, k13, k14, k15, \ + k20, k21, k22, k23, k24, k25, \ + k30, k31, k32, k33, k34, k35, \ + k40, k41, k42, k43, k44, k45 \ ) \ { \ { k00, k01, k02, k03, k04, k05 }, \ { k10, k11, k12, k13, k14, k15 }, \ { k20, k21, k22, k23, k24, k25 }, \ { k30, k31, k32, k33, k34, k35 }, \ - { k40, k41, k42, k43, k44, k45} \ + { k40, k41, k42, k43, k44, k45 } \ } #endif diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md index 1971ce1f36..4e1702c5ad 100644 --- a/keyboards/maxipad/readme.md +++ b/keyboards/maxipad/readme.md @@ -1,46 +1,27 @@ -maxipad keyboard firmware +Maxipad keyboard firmware ====================== ## Quantum MK Firmware -<<<<<<< HEAD -For the full Quantum feature list, see [the parent readme](/). -======= -For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +For the full Quantum feature list, see [the parent readme.md](/readme.md). ## Building +If you are using a pro micro then make sure to enable USE_PRO_MICRO in the makefile + Download or clone the whole firmware and navigate to the keyboards/maxipad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. Depending on which keymap you would like to use, you will have to compile slightly differently. ### Default - -<<<<<<< HEAD To build with the default keymap, simply run `make default`. -======= -To build with the default keymap, simply run `make`. ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df ### 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 `.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 a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. - -<<<<<<< HEAD To build the firmware binary hex file with a keymap just do `make` with a keymap like this: ``` $ make [default|jack|] ``` - -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. -======= -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 folders in the `keymaps` folder, eg `keymaps/my_keymap/` ->>>>>>> bce6e52391da7c5f620c96a91857940f0dee19df +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. \ No newline at end of file diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk index 55898147dd..e6e5923f16 100644 --- a/keyboards/maxipad/rules.mk +++ b/keyboards/maxipad/rules.mk @@ -1,3 +1,5 @@ + + # MCU name #MCU = at90usb1287 MCU = atmega32u4 @@ -49,19 +51,18 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # Build Options -# change yes to no to disable +# comment out to disable the options. # -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 +# 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 +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID +USE_PRO_MICRO ?= yes \ No newline at end of file -- cgit v1.2.3 From e356de222023d2a8f7d5ee79030a37eaa9b1b25f Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 19 Nov 2016 00:44:52 -0500 Subject: added the pinout for pro micro into maxipad --- keyboards/maxipad/config.h | 12 +++++++++--- keyboards/maxipad/rules.mk | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h index fbe64a5b0b..fc5ab77617 100644 --- a/keyboards/maxipad/config.h +++ b/keyboards/maxipad/config.h @@ -43,9 +43,15 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } -#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } -#define UNUSED_PINS +//Pro micro pinout + #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } + #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 } + #define UNUSED_PINS +//Teensy 2 pinout + //#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } + //#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } + //#define UNUSED_PINS + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk index 55898147dd..f9bf74179b 100644 --- a/keyboards/maxipad/rules.mk +++ b/keyboards/maxipad/rules.mk @@ -65,3 +65,4 @@ MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 +USE_PRO_MICRO ?= yes \ No newline at end of file -- cgit v1.2.3 From 102a830bbdb302eb0951ec7910ab7c9feae272d1 Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 19 Nov 2016 00:49:20 -0500 Subject: changed readme --- keyboards/maxipad/readme.md | 2 ++ keyboards/maxipad/rules.mk | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md index ab7b122fe8..de2265d111 100644 --- a/keyboards/maxipad/readme.md +++ b/keyboards/maxipad/readme.md @@ -5,6 +5,8 @@ For the full Quantum feature list, see [the parent readme](/). ## Building +Change the config.h pinout to match your mcu!! + Download or clone the whole firmware and navigate to the keyboards/maxipad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. Depending on which keymap you would like to use, you will have to compile slightly differently. diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk index f9bf74179b..56b2042efa 100644 --- a/keyboards/maxipad/rules.mk +++ b/keyboards/maxipad/rules.mk @@ -64,5 +64,4 @@ BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 -USE_PRO_MICRO ?= yes \ No newline at end of file +AUDIO_ENABLE ?= no # Audio output on port C6 \ No newline at end of file -- cgit v1.2.3 From ffa5b1e7ea6697acf9ebfcade1149031642f7870 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 19 Nov 2016 11:32:09 +0100 Subject: Add a timeout to space-cadet shift. When one holds a Space Cadet shift, to have it act as a shift, so that mouse behaviour changes, when released without any other key pressed, it still registers a paren. To remedy this, add a hold timeout: if the key is held longer than TAPPING_TERM, it will not register the parens. Fixes #884, with the side-effect of not being able to have parens trigger the OS-side repeat anymore. Signed-off-by: Gergely Nagy --- quantum/quantum.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 098312e6ef..2addcb670c 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -75,6 +75,7 @@ void reset_keyboard(void) { #endif static bool shift_interrupted[2] = {0, 0}; +static uint16_t scs_timer = 0; bool process_record_quantum(keyrecord_t *record) { @@ -283,6 +284,7 @@ bool process_record_quantum(keyrecord_t *record) { case KC_LSPO: { if (record->event.pressed) { shift_interrupted[0] = false; + scs_timer = timer_read (); register_mods(MOD_BIT(KC_LSFT)); } else { @@ -292,7 +294,7 @@ bool process_record_quantum(keyrecord_t *record) { shift_interrupted[1] = true; } #endif - if (!shift_interrupted[0]) { + if (!shift_interrupted[0] && timer_elapsed(scs_timer) < TAPPING_TERM) { register_code(LSPO_KEY); unregister_code(LSPO_KEY); } @@ -305,6 +307,7 @@ bool process_record_quantum(keyrecord_t *record) { case KC_RSPC: { if (record->event.pressed) { shift_interrupted[1] = false; + scs_timer = timer_read (); register_mods(MOD_BIT(KC_RSFT)); } else { @@ -314,7 +317,7 @@ bool process_record_quantum(keyrecord_t *record) { shift_interrupted[1] = true; } #endif - if (!shift_interrupted[1]) { + if (!shift_interrupted[1] && timer_elapsed(scs_timer) < TAPPING_TERM) { register_code(RSPC_KEY); unregister_code(RSPC_KEY); } -- cgit v1.2.3 From 7f5e71d79fb5ca70139c42b83c158738217c1c8a Mon Sep 17 00:00:00 2001 From: "samgalson@gmail.com" Date: Sat, 19 Nov 2016 14:21:12 +0000 Subject: adds galson keymap --- keyboards/ergodox/keymaps/galson/Makefile | 2 + keyboards/ergodox/keymaps/galson/keymap.c | 183 +++++++++++++++++++++++++++++ keyboards/ergodox/keymaps/galson/readme.md | 11 ++ 3 files changed, 196 insertions(+) create mode 100644 keyboards/ergodox/keymaps/galson/Makefile create mode 100644 keyboards/ergodox/keymaps/galson/keymap.c create mode 100644 keyboards/ergodox/keymaps/galson/readme.md diff --git a/keyboards/ergodox/keymaps/galson/Makefile b/keyboards/ergodox/keymaps/galson/Makefile new file mode 100644 index 0000000000..f008f50793 --- /dev/null +++ b/keyboards/ergodox/keymaps/galson/Makefile @@ -0,0 +1,2 @@ +COMMAND_ENABLE = no # Commands for debug and configuration + diff --git a/keyboards/ergodox/keymaps/galson/keymap.c b/keyboards/ergodox/keymaps/galson/keymap.c new file mode 100644 index 0000000000..0d3e7560dd --- /dev/null +++ b/keyboards/ergodox/keymaps/galson/keymap.c @@ -0,0 +1,183 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | + | 1 | 2 | 3 | 4 | 5 | rclk | | lclk | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | = | Q | W | E | R |cmd/T |shift | |shift |cmd/Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------| + * | " | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' | + * |--------+------+------+------+------+------| ctrl | | ctrl |------+------+------+------+------+--------| + * | { | Z | X | C | V | B | [ | | ] | N | M | , | . | / | } | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | _ | ` | $ | Left | Right| | Up | Down | : | * | ! | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | < | | | | & | > | + * ,------|------|------| |------+--------+------. + * | | | # | | @ | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | % | | ESC | | | + * `--------------------' `----------------------' + */ +// 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_PLUS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_BTN2, + KC_EQL, KC_Q, KC_W, KC_E, KC_R, GUI_T(KC_T), KC_LSPO, + KC_DQUO, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LCBR, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_LBRC), + KC_UNDS, KC_GRV, KC_DLR, KC_LEFT,KC_RGHT, + KC_LABK, KC_PIPE, + KC_HASH, + KC_SPC, KC_BSPC,KC_PERC, + // right hand + KC_BTN1, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_RSPC, GUI_T(KC_Y), KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT, + CTL_T(KC_RBRC), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RCBR, + KC_UP, KC_DOWN,KC_COLN,KC_ASTR, KC_EXLM, + KC_AMPR, KC_RABK, + KC_AT, + KC_ESC, KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. + * |Version | 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 + M(0), 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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + 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/keyboards/ergodox/keymaps/galson/readme.md b/keyboards/ergodox/keymaps/galson/readme.md new file mode 100644 index 0000000000..ebc916725b --- /dev/null +++ b/keyboards/ergodox/keymaps/galson/readme.md @@ -0,0 +1,11 @@ +# Galson keymap + + +Sep 26, 2016. + +This is an ergonomic layout for programming for those with typing-related injuries. Key features: + +- As many symbol keys as possible are accessible without shifting. These should be accessed by moving the entire hand and pressing with a strong finger. +- Arrow keys and left and right mouse clicks for mouse-free navigation when combined with head mouse or eyetracker. +- Modifier keys are dual role and relocated to positions convenient for the index finger. +- Positions are more convenient when the keyboard is vertically mounted (as it should be!) \ No newline at end of file -- cgit v1.2.3 From 620e4f74d39bbcd9a41b6deed0fb990dfadbd106 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 19 Nov 2016 11:37:12 -0500 Subject: move KC expansion to separate macros --- keyboards/gh60/gh60.h | 49 ++++++++++++++++++++++++++-- keyboards/gh60/keymaps/default/keymap.c | 12 +++---- keyboards/gh60/keymaps/robotmaxtron/keymap.c | 24 +++++++------- keyboards/gh60/keymaps/sethbc/keymap.c | 4 +-- 4 files changed, 66 insertions(+), 23 deletions(-) diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h index 899f7dc6a3..4f206cc161 100644 --- a/keyboards/gh60/gh60.h +++ b/keyboards/gh60/gh60.h @@ -34,6 +34,20 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ + { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ +} + +#define KC_KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ ) { \ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ @@ -42,13 +56,28 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ } -/* ANSI valiant. No extra keys for ISO */ +/* ANSI variant. No extra keys for ISO */ #define KEYMAP_ANSI( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \ + { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \ +} + +/* ANSI variant with KC expansion */ +#define KC_KEYMAP_ANSI( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ ) { \ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ @@ -57,12 +86,28 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ } +/* HHKB Variant */ #define KEYMAP_HHKB( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ + { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ +} + +/* HHKB Variant with KC expansion */ +#define KC_KEYMAP_HHKB( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ ) { \ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ @@ -71,6 +116,4 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ } - - #endif diff --git a/keyboards/gh60/keymaps/default/keymap.c b/keyboards/gh60/keymaps/default/keymap.c index 3622be41b8..5c88b2ecf1 100644 --- a/keyboards/gh60/keymaps/default/keymap.c +++ b/keyboards/gh60/keymaps/default/keymap.c @@ -3,21 +3,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KEYMAP( + KC_KEYMAP( ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \ LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \ LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL), /* 1: fn */ - KEYMAP( + KC_KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \ TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), /* 2: arrows */ - KEYMAP( + KC_KEYMAP( TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ @@ -49,7 +49,7 @@ void matrix_scan_user(void) { //Layer LED indicators uint32_t layer = layer_state; - + if (layer & (1<<1)) { gh60_wasd_leds_on(); gh60_fn_led_on(); @@ -57,7 +57,7 @@ void matrix_scan_user(void) { gh60_wasd_leds_off(); gh60_fn_led_off(); } - + if (layer & (1<<2)) { gh60_poker_leds_on(); gh60_esc_led_on(); @@ -65,5 +65,5 @@ void matrix_scan_user(void) { gh60_poker_leds_off(); gh60_esc_led_off(); } - + }; diff --git a/keyboards/gh60/keymaps/robotmaxtron/keymap.c b/keyboards/gh60/keymaps/robotmaxtron/keymap.c index 263eec4e53..d53589e811 100644 --- a/keyboards/gh60/keymaps/robotmaxtron/keymap.c +++ b/keyboards/gh60/keymaps/robotmaxtron/keymap.c @@ -8,7 +8,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* - * Base layer, pretty standard ANSI layout. + * Base layer, pretty standard ANSI layout. * ,-----------------------------------------------------------. * |FN12| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | * |-----------------------------------------------------------| @@ -21,14 +21,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Alt |Fn |Menu|Ctrl| * `-----------------------------------------------------------' */ - [_BL] = KEYMAP( + [_BL] = KC_KEYMAP( FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \ TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \ FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT, \ LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \ LCTL,LGUI,LALT, SPC, NO,RALT,FN0,APP, RCTL), - - /* + + /* * Locking arrow keys to WASD for when you need dedicated arrow keys * ,-----------------------------------------------------------. * | | | | | | | | | | | | | | | @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [_AL] = KEYMAP( + [_AL] = KC_KEYMAP( TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), - /* + /* * Primary function layer, mostly the same as the traditional Pok3r layout. * ,-------------------------------------------------------------. * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL | @@ -64,16 +64,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-------------------------------------------------------------' */ - [_FL] = KEYMAP( + [_FL] = KC_KEYMAP( GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \ TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \ TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \ TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), - - /* + + /* * Locking layer for controlling the underglow. - * + * * ,-----------------------------------------------------------. * | | | | | | | | | | | | | | | * |-----------------------------------------------------------| @@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [_UL] = KEYMAP( + [_UL] = KC_KEYMAP( TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ TRNS,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ @@ -124,7 +124,7 @@ 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 + // MACRODOWN only works in this function switch(id) { case 0: if (record->event.pressed) { diff --git a/keyboards/gh60/keymaps/sethbc/keymap.c b/keyboards/gh60/keymaps/sethbc/keymap.c index 85a46a29bd..141c7f0b00 100644 --- a/keyboards/gh60/keymaps/sethbc/keymap.c +++ b/keyboards/gh60/keymaps/sethbc/keymap.c @@ -6,14 +6,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KEYMAP_HHKB( + KC_KEYMAP_HHKB( FN0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \ LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, FN1, \ LCTL,LALT,LGUI, SPC, RGUI,RALT,APP, RCTL), /* 1: fn */ - KEYMAP_HHKB( + KC_KEYMAP_HHKB( GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP,TRNS,TRNS, \ TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RIGHT,PENT, \ -- cgit v1.2.3 From 74a1f00713d1407fb1d2e20d58da93919ab0c221 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 19 Nov 2016 18:19:18 +0100 Subject: Fix the Space Cadet timeout code Define a default TAPPING_TERM in quantum.c, for keyboards that do not have it set. Fixes the CI failure. Signed-off-by: Gergely Nagy --- quantum/quantum.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quantum/quantum.c b/quantum/quantum.c index 2addcb670c..b5e2d60b9d 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -1,5 +1,9 @@ #include "quantum.h" +#ifndef TAPPING_TERM +#define TAPPING_TERM 200 +#endif + static void do_code16 (uint16_t code, void (*f) (uint8_t)) { switch (code) { case QK_MODS ... QK_MODS_MAX: -- cgit v1.2.3 From df8724ce08e09b6b077b601da7976639140655d7 Mon Sep 17 00:00:00 2001 From: Seth Chandler Date: Sat, 19 Nov 2016 12:19:21 -0500 Subject: remove KC expansion from GH60 --- keyboards/gh60/gh60.h | 44 ------------------------ keyboards/gh60/keymaps/default/keymap.c | 36 ++++++++++---------- keyboards/gh60/keymaps/robotmaxtron/keymap.c | 50 ++++++++++++++-------------- keyboards/gh60/keymaps/sethbc/keymap.c | 24 ++++++------- 4 files changed, 55 insertions(+), 99 deletions(-) diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h index 4f206cc161..66bc2790d2 100644 --- a/keyboards/gh60/gh60.h +++ b/keyboards/gh60/gh60.h @@ -42,20 +42,6 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ } -#define KC_KEYMAP( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ - K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ -) { \ - { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ - { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \ - { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \ - { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ -} - /* ANSI variant. No extra keys for ISO */ #define KEYMAP_ANSI( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ @@ -71,21 +57,6 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \ } -/* ANSI variant with KC expansion */ -#define KC_KEYMAP_ANSI( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ - K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K41, K42, K45, K4A, K4B, K4C, K4D \ -) { \ - { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ - { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D }, \ - { KC_##K30, KC_NO, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO, KC_##K3D }, \ - { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ -} - /* HHKB Variant */ #define KEYMAP_HHKB( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ @@ -101,19 +72,4 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ } -/* HHKB Variant with KC expansion */ -#define KC_KEYMAP_HHKB( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ - K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ - K40, K41, K42, K45, K4A, K4B, K4C, K4D \ -) { \ - { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ - { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D }, \ - { KC_##K30, KC_NO, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \ - { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ -} - #endif diff --git a/keyboards/gh60/keymaps/default/keymap.c b/keyboards/gh60/keymaps/default/keymap.c index 5c88b2ecf1..92f5459840 100644 --- a/keyboards/gh60/keymaps/default/keymap.c +++ b/keyboards/gh60/keymaps/default/keymap.c @@ -3,26 +3,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KC_KEYMAP( - ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ - CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \ - LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \ - LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL), + KEYMAP( + KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_GRV,\ + KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSPC,\ + KC_CAPS,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT,\ + KC_LSFT,F(1),KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,F(0),KC_RSFT,\ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_BSLS,KC_RALT,KC_RGUI,KC_APP,KC_RCTL), /* 1: fn */ - KC_KEYMAP( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \ - TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), + KEYMAP( + KC_ESC,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), /* 2: arrows */ - KC_KEYMAP( - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT), + KEYMAP( + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,\ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT), }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/gh60/keymaps/robotmaxtron/keymap.c b/keyboards/gh60/keymaps/robotmaxtron/keymap.c index d53589e811..9acac7cecf 100644 --- a/keyboards/gh60/keymaps/robotmaxtron/keymap.c +++ b/keyboards/gh60/keymaps/robotmaxtron/keymap.c @@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* * Base layer, pretty standard ANSI layout. * ,-----------------------------------------------------------. - * |FN12| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |F(12)| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | * |-----------------------------------------------------------| * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| * |-----------------------------------------------------------| @@ -21,12 +21,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Alt |Fn |Menu|Ctrl| * `-----------------------------------------------------------' */ - [_BL] = KC_KEYMAP( - FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \ - TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \ - FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT, \ - LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \ - LCTL,LGUI,LALT, SPC, NO,RALT,FN0,APP, RCTL), + [_BL] = KEYMAP( + F(12),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, \ + KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, \ + F(2),KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \ + KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_NO,KC_RALT,F(0),KC_APP,KC_RCTL), /* * Locking arrow keys to WASD for when you need dedicated arrow keys @@ -42,12 +42,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [_AL] = KC_KEYMAP( - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), + [_AL] = KEYMAP( + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), /* @@ -64,12 +64,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-------------------------------------------------------------' */ - [_FL] = KC_KEYMAP( - GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \ - TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \ - TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), + [_FL] = KEYMAP( + KC_GRAVE,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_DELETE, \ + KC_TRNS,F(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \ + KC_TRNS,KC_MUTE,KC__VOLDOWN,KC__VOLUP,KC_TRNS,KC_TRNS,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,F(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), /* * Locking layer for controlling the underglow. @@ -86,12 +86,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [_UL] = KC_KEYMAP( - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS,FN6,FN7,FN8,FN9,FN10,FN11,TRNS,TRNS,TRNS,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), + [_UL] = KEYMAP( + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,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 { diff --git a/keyboards/gh60/keymaps/sethbc/keymap.c b/keyboards/gh60/keymaps/sethbc/keymap.c index 141c7f0b00..599e664e23 100644 --- a/keyboards/gh60/keymaps/sethbc/keymap.c +++ b/keyboards/gh60/keymaps/sethbc/keymap.c @@ -6,19 +6,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KC_KEYMAP_HHKB( - FN0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \ - LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, FN1, \ - LCTL,LALT,LGUI, SPC, RGUI,RALT,APP, RCTL), + KEYMAP_HHKB( + F(0),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV,\ + KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_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_ENT,\ + KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,F(1),\ + KC_LCTL,KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_APP,KC_RCTL), /* 1: fn */ - KC_KEYMAP_HHKB( - GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ - CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP,TRNS,TRNS, \ - TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RIGHT,PENT, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END,PGDN,DOWN,TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS), + KEYMAP_HHKB( + KC_GRV,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,KC_TRNS,\ + KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RIGHT,KC_PENT,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END,KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), }; enum function_id { -- cgit v1.2.3 From c86bbf474e7709749dfd5e09fa5defd5e6baaaa3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 20 Nov 2016 19:28:10 +0200 Subject: Always initialze the Infinity Ergodox backlight Otherwise it will stay lit. The set_led functionality is also disabled since it doesn't work properly for slaves. --- keyboards/ergodox/infinity/infinity.c | 6 ++++-- keyboards/ergodox/infinity/led.c | 25 +------------------------ 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c index c5793385fe..02db67eaf2 100644 --- a/keyboards/ergodox/infinity/infinity.c +++ b/keyboards/ergodox/infinity/infinity.c @@ -38,7 +38,6 @@ void init_serial_link_hal(void) { // Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced // Which will reduce the brightness range #define PRESCALAR_DEFINE 0 -#ifdef VISUALIZER_ENABLE void lcd_backlight_hal_init(void) { // Setup Backlight SIM->SCGC6 |= SIM_SCGC6_FTM0; @@ -76,7 +75,6 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { CHANNEL_GREEN.CnV = g; CHANNEL_BLUE.CnV = b; } -#endif __attribute__ ((weak)) void matrix_init_user(void) { @@ -92,6 +90,10 @@ void matrix_init_kb(void) { // runs once when the firmware starts up matrix_init_user(); + // The backlight always has to be initialized, otherwise it will stay lit +#ifndef VISUALIZER_ENABLE + lcd_backlight_hal_init(); +#endif } void matrix_scan_kb(void) { diff --git a/keyboards/ergodox/infinity/led.c b/keyboards/ergodox/infinity/led.c index 77195bb358..8175c1c5c5 100644 --- a/keyboards/ergodox/infinity/led.c +++ b/keyboards/ergodox/infinity/led.c @@ -21,29 +21,6 @@ along with this program. If not, see . void led_set(uint8_t usb_led) { -// The LCD backlight functionality conflicts with this simple -// red backlight -#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE) - // PTC1: LCD Backlight Red(0:on/1:off) - GPIOC->PDDR |= (1<<1); - PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - if (usb_led & (1<PCOR |= (1<<1); - } else { - GPIOC->PSOR |= (1<<1); - } -#elif !defined(LCD_BACKLIGHT_ENABLE) + //TODO: Add led emulation if there's no customized visualization (void)usb_led; - GPIOC->PDDR |= (1<<1); - PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<1); - GPIOC->PDDR |= (1<<2); - PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<2); - GPIOC->PDDR |= (1<<3); - PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); - GPIOC->PSOR |= (1<<3); -#else - (void)usb_led; -#endif } -- cgit v1.2.3 From a8b1c47f0f6e63dc1260159b7b8b2172a3b57ff4 Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 11:10:26 -0800 Subject: add sh-hhkb-jp layers --- keyboards/hhkb/keymaps/sh_jp/Makefile | 1 + keyboards/hhkb/keymaps/sh_jp/README.md | 84 ++++++++++++++++++++++++++++++++++ keyboards/hhkb/keymaps/sh_jp/keymap.c | 60 ++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 keyboards/hhkb/keymaps/sh_jp/Makefile create mode 100644 keyboards/hhkb/keymaps/sh_jp/README.md create mode 100644 keyboards/hhkb/keymaps/sh_jp/keymap.c diff --git a/keyboards/hhkb/keymaps/sh_jp/Makefile b/keyboards/hhkb/keymaps/sh_jp/Makefile new file mode 100644 index 0000000000..a7f700f019 --- /dev/null +++ b/keyboards/hhkb/keymaps/sh_jp/Makefile @@ -0,0 +1 @@ +OPT_DEFS += -DHHKB_JP diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md new file mode 100644 index 0000000000..7be38a415f --- /dev/null +++ b/keyboards/hhkb/keymaps/sh_jp/README.md @@ -0,0 +1,84 @@ +Keymaps for both Dvorak layout and QWER layout for HHKB JP. +1. The default layout is Dvorak. +2. Use `Tog` to toggle between Dvorak and QWER +3. Holding `NewCmd`, the original `LftCmd`, will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.[1](#cmdTab) + - For example, no matter you are in Dvorak layout or QWER layout, you can use `Cmd+s` to save a currently editing file. +4. `Symb` makes type symbols easier: for example: `Symb+a` is `!`. +5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual. +6. There's an extra `Tab` in the last line. + +``` +Layer QWER: +,-----------------------------------------------------------. +|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| |Bsp| +|-----------------------------------------------------------| +|Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| | +|------------------------------------------------------` Ent| +|Ctrl | A| O| E| U| I| D| H| T| N| S| -| \| | +|-----------------------------------------------------------| +|Shft | ;| Q| J| K| X| B| M| W| V| Z| | Up| | +|-----------------------------------------------------------| +|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|RCmd|Tog|Lft|Dwn|Rgh| +`-----------------------------------------------------------' +``` + +``` +Layer QWER: +,-----------------------------------------------------------. +|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =| |Bsp| +|-----------------------------------------------------------| +|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | +|------------------------------------------------------` Ent| +|Ctrl | A| S| D| F| G| H| J| K| L| ;| '| \| | +|-----------------------------------------------------------| +|Shft | Z| X| C| V| B| N| M| ,| .| /| | Up| | +|-----------------------------------------------------------| +|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|Cmd|Tog|Lft|Dwn|Rgh| +`-----------------------------------------------------------' +``` + +``` +Layer Symb: +,-----------------------------------------------------------. +| | | | | | | | | | | | | | | | +|-----------------------------------------------------------| +| | | | [| ]| | | {| }| | | | | | +|------------------------------------------------------` | +| | !| @| #| $| %| ^| &| *| (| )| '| \| | +|-----------------------------------------------------------| +| | | | | | | | | | | | | | | +|-----------------------------------------------------------| +| | | | | | | | | | | | | | +`-----------------------------------------------------------' +``` + +``` +Layer FUNC: HHKB mode (HHKB Fn) +,-----------------------------------------------------------. +|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| +|-----------------------------------------------------------| +|Caps | | | | | | | |Psc|Slk|Pus|Up | | | +|------------------------------------------------------` | +| |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig| | | +|-----------------------------------------------------------| +| | | | | | | +| -|End|PgD|Dow| | | | +|-----------------------------------------------------------| +| || | | | | | | | | || | | | +`-----------------------------------------------------------' +``` + +``` +Empty Layer: +,-----------------------------------------------------------. +| | | | | | | | | | | | | | | | +|-----------------------------------------------------------| +| | | | | | | | | | | | | | | +|------------------------------------------------------` | +| | | | | | | | | | | | | | | +|-----------------------------------------------------------| +| | | | | | | | | | | | | | | +|-----------------------------------------------------------| +| | | | | | | | | | | | | | +`-----------------------------------------------------------' +``` +1: `NewCmd + Tab` does not work, you can use `RCmd+Tab` to switch among applications. diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c new file mode 100644 index 0000000000..16181acd3e --- /dev/null +++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c @@ -0,0 +1,60 @@ +#include "hhkb.h" + +#define _______ KC_TRNS + +enum { + DVOR, + QWER, + NEW_CMD, + SYMB, + FUNC +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [DVOR] = KEYMAP_JP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_JYEN, KC_BSPC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, + KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_BSLS, KC_ENT, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RO, KC_UP, KC_RSFT, + MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT + ), + [QWER] = KEYMAP_JP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, 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_RO, KC_UP, KC_RSFT, + MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [NEW_CMD] = KEYMAP_JP( + _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, _______, + _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), + _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______, + LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT) + ), + + [SYMB] = KEYMAP_JP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, LSFT(KC_LBRC), LSFT(KC_RBRC), _______, _______,_______, _______, + _______, LSFT(KC_1),LSFT(KC_2),LSFT(KC_3),LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [FUNC] = KEYMAP_JP( + KC_PWR, 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_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { + return MACRO_NONE; +} + +const uint16_t PROGMEM fn_actions[] = { + +}; -- cgit v1.2.3 From 11f17e3b233dbbf7c39e5e0042cc5fdff3acba55 Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 11:12:48 -0800 Subject: Update README.md --- keyboards/hhkb/keymaps/sh_jp/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md index 7be38a415f..6c6ab1bc65 100644 --- a/keyboards/hhkb/keymaps/sh_jp/README.md +++ b/keyboards/hhkb/keymaps/sh_jp/README.md @@ -1,4 +1,5 @@ -Keymaps for both Dvorak layout and QWER layout for HHKB JP. +###Keymaps with both Dvorak layout and QWER layout for HHKB JP. + 1. The default layout is Dvorak. 2. Use `Tog` to toggle between Dvorak and QWER 3. Holding `NewCmd`, the original `LftCmd`, will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.[1](#cmdTab) -- cgit v1.2.3 From 34aa59c6d514cb30ca3582200cadd1da4786c50c Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 11:13:57 -0800 Subject: Update README.md --- keyboards/hhkb/keymaps/sh_jp/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md index 6c6ab1bc65..65e781cf30 100644 --- a/keyboards/hhkb/keymaps/sh_jp/README.md +++ b/keyboards/hhkb/keymaps/sh_jp/README.md @@ -4,7 +4,8 @@ 2. Use `Tog` to toggle between Dvorak and QWER 3. Holding `NewCmd`, the original `LftCmd`, will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.[1](#cmdTab) - For example, no matter you are in Dvorak layout or QWER layout, you can use `Cmd+s` to save a currently editing file. -4. `Symb` makes type symbols easier: for example: `Symb+a` is `!`. +4. `Symb` makes type symbols easier + - for example: `Symb+a` is `!`. 5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual. 6. There's an extra `Tab` in the last line. -- cgit v1.2.3 From 23f63ed1b9487271f8156ecf191ab7d82d595e81 Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 11:18:08 -0800 Subject: Update README.md --- keyboards/hhkb/keymaps/sh_jp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md index 65e781cf30..37fa43e66f 100644 --- a/keyboards/hhkb/keymaps/sh_jp/README.md +++ b/keyboards/hhkb/keymaps/sh_jp/README.md @@ -10,7 +10,7 @@ 6. There's an extra `Tab` in the last line. ``` -Layer QWER: +Layer DVOR: ,-----------------------------------------------------------. |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| |Bsp| |-----------------------------------------------------------| -- cgit v1.2.3 From 6f24344be78985be5eb2f6e75f1dee546f539646 Mon Sep 17 00:00:00 2001 From: Didier Chagniot Date: Sun, 20 Nov 2016 20:51:05 +0100 Subject: typo fix --- keyboards/ergodox/keymaps/dvorak_emacs/keymap.c | 2 +- keyboards/ergodox/keymaps/dvorak_emacs/readme.md | 36 ++++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c index 4cb11a56f4..d33c6e5271 100755 --- a/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base layer * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively * - * ,--------------------------------------------------. ,--------------------------------------------------. + * ,--------------------------------------------------. ,--------------------------------------------------. * | | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? | diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/readme.md b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md index 0578f1e257..a3fc34afeb 100644 --- a/keyboards/ergodox/keymaps/dvorak_emacs/readme.md +++ b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md @@ -1,6 +1,6 @@ # Ergodox Dvorak Layout with emacs binding in mind * Control & Alt key on the thumbs (activated if pressed with another key). - * In the same way, "I" and "R" are the shift modifier if pressed with another key. + * In the same way, "U" and "R" are the shift modifier if pressed with another key. * "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key. * Software layout set to english. @@ -15,23 +15,23 @@ Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'he

 
 ,--------------------------------------------------.           ,--------------------------------------------------.
- |        |   1  |   2  |   3  |   4  |   5  |  Esc |           |  Esc |   6  |   7  |   8  |   9  |   0  |   =    |
- |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- |   ~    |  '   |   ,  |   .  |   P  |   Y  |   [  |           |   ]  |   F  |   G  |   C  |   H  |   L  |   /    |
- |--------+------+------+------+------+------|   {  |           |   }  |------+------+------+------+------+--------|
- |  Tab   |   A  |   O  |   E  |U/LSft| I/L1 |------|           |------|  D/L1|R/RSft|   T  |   N  |   S  |   -    |
- |--------+------+------+------+------+------| LGUI |           | LGUI |------+------+------+------+------+--------|
- | {/LSft |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
- `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-   |      |      |      |      | ~L1  |                                       | ~L1  |      |      |   \  |        |
-   `----------------------------------'                                       `----------------------------------'
-                                        ,-------------.       ,-------------.
-                                        | HOME |  END |       | LEFT | RIGHT|
-                                 ,------|------|------|       |------+--------+------.
-                                 | BSPC |  DEL | PGUP |       |  UP  | SPACE  |RETURN|
-                                 |  /   |  /   |------|       |------|   /    |  /   |
-                                 | LCTL | LALT |PGDWN |       | DOWN | LALT   | LCTL |
-                                 `--------------------'       `----------------------'
+|        |   1  |   2  |   3  |   4  |   5  |  Esc |           |  Esc |   6  |   7  |   8  |   9  |   0  |   =    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|   ~    |  '   |   ,  |   .  |   P  |   Y  |   [  |           |   ]  |   F  |   G  |   C  |   H  |   L  |   /    |
+|--------+------+------+------+------+------|   {  |           |   }  |------+------+------+------+------+--------|
+|  Tab   |   A  |   O  |   E  |U/LSft| I/L1 |------|           |------|  D/L1|R/RSft|   T  |   N  |   S  |   -    |
+|--------+------+------+------+------+------| LGUI |           | LGUI |------+------+------+------+------+--------|
+| {/LSft |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |      |      |      | ~L1  |                                       | ~L1  |      |      |   \  |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       | HOME |  END |       | LEFT | RIGHT|
+                                ,------|------|------|       |------+--------+------.
+                                | BSPC |  DEL | PGUP |       |  UP  | SPACE  |RETURN|
+                                |  /   |  /   |------|       |------|   /    |  /   |
+                                | LCTL | LALT |PGDWN |       | DOWN | LALT   | LCTL |
+                                `--------------------'       `----------------------'
 
 
-- cgit v1.2.3 From ccc34851f2e12d990a6d51742fc7e85e8011a94d Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 13:31:41 -0800 Subject: add space to NewCmd layer --- keyboards/hhkb/keymaps/sh_jp/README.md | 2 +- keyboards/hhkb/keymaps/sh_jp/keymap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md index 65e781cf30..84557a5c07 100644 --- a/keyboards/hhkb/keymaps/sh_jp/README.md +++ b/keyboards/hhkb/keymaps/sh_jp/README.md @@ -8,7 +8,7 @@ - for example: `Symb+a` is `!`. 5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual. 6. There's an extra `Tab` in the last line. - + ``` Layer QWER: ,-----------------------------------------------------------. diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c index 16181acd3e..c2bdd37bc2 100644 --- a/keyboards/hhkb/keymaps/sh_jp/keymap.c +++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c @@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______, LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT) + _______, _______, _______, _______, _______, LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT) ), [SYMB] = KEYMAP_JP( -- cgit v1.2.3 From b75538c0bfca03f7b493b7b7dbaf9dc5e7631e53 Mon Sep 17 00:00:00 2001 From: Sihui Huang Date: Sun, 20 Nov 2016 14:45:51 -0800 Subject: add del to new cmd --- keyboards/hhkb/keymaps/sh_jp/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c index c2bdd37bc2..d4cb3b0418 100644 --- a/keyboards/hhkb/keymaps/sh_jp/keymap.c +++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [NEW_CMD] = KEYMAP_JP( - _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, _______, + _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC), _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______, LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______, -- cgit v1.2.3 From b57cf3c0c851f2fb0e32c955b16fc6f0ad236e54 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 21 Nov 2016 12:54:06 -0500 Subject: more structure to the package --- tmk_core/protocol/lufa/lufa.c | 107 ++++++++++++++++++++++++++++++++++-------- tmk_core/protocol/lufa/lufa.h | 15 ++++-- 2 files changed, 100 insertions(+), 22 deletions(-) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index ae9cc2f962..cc00b3b89b 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1147,10 +1147,9 @@ void send_nibble(uint8_t number) { } } -uint8_t midi_buffer[16] = {0}; +uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; -void sysex_callback(MidiDevice * device, - uint16_t start, uint8_t length, uint8_t * data) { +void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { // for (int i = 0; i < length; i++) // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); // if (start == 0x27) { @@ -1169,7 +1168,7 @@ void sysex_callback(MidiDevice * device, } -uint32_t decode_4byte_chunk(uint8_t * data) { +uint32_t decode_uint32_chunk(uint8_t * data) { uint32_t part1 = *data++; uint32_t part2 = *data++; uint32_t part3 = *data++; @@ -1178,7 +1177,13 @@ uint32_t decode_4byte_chunk(uint8_t * data) { return ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5; } -void encode_4byte_chunk(uint32_t data, uint8_t * pointer) { +uint32_t decode_uint8_chunk(uint8_t * data) { + uint32_t part4 = *data++; + uint32_t part5 = *data++; + return (part4 << 7) | part5; +} + +void encode_uint32_chunk(uint32_t data, uint8_t * pointer) { *pointer++ = (data >> 28) & 0x7F; *pointer++ = (data >> 21) & 0x7F; *pointer++ = (data >> 14) & 0x7F; @@ -1186,6 +1191,11 @@ void encode_4byte_chunk(uint32_t data, uint8_t * pointer) { *pointer++ = (data) & 0x7F; } +void encode_uint8_chunk(uint8_t data, uint8_t * pointer) { + *pointer++ = (data >> 7) & 0x7F; + *pointer++ = (data) & 0x7F; +} + void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { uint8_t * pointer_copy = data; @@ -1197,28 +1207,77 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) data++; switch (*data++) { + case 0x12: ; // Set info on keyboard + switch (*data++) { + case 0x02: ; // set default layer + uint8_t default_layer = decode_uint8_chunk(data); + eeconfig_update_default_layer(default_layer); + default_layer_set((uint32_t)default_layer); + break; + case 0x08: ; // set keymap options + uint8_t keymap_options = decode_uint8_chunk(data); + eeconfig_update_keymap(keymap_options); + break; + } + break; case 0x13: ; // Get info from keyboard switch (*data++) { - case 0x00: ; // Get layer state - // send_dword(layer_state); - uint8_t chunk[5]; - encode_4byte_chunk(layer_state | default_layer_state, &chunk); - - uint8_t array[] = {0xF0, 0x00, 0x00, 0x00, 0x00, chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], 0xF7}; - midi_send_array(&midi_device, 11, &array); - // midi_send_data(device, 3, 0x00, layer_state >> 24 & 0x7f, layer_state >> 16 & 0x7f); - // midi_send_data(device, 6, layer_state >> 8 & 0x7f, layer_state & 0x7f, 0xF7); + case 0x00: ; // Handshake + send_bytes_sysex(0x00, NULL, 0); + break; + case 0x01: ; // Get debug state + uint8_t debug[2]; + encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEBUG), &debug); + send_bytes_sysex(0x01, &debug, 2); + break; + case 0x02: ; // Get default layer + uint8_t default_layer[2]; + encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEFAULT_LAYER), &default_layer); + send_bytes_sysex(0x02, &default_layer, 2); + break; + #ifdef AUDIO_ENABLE + case 0x03: ; // Get backlight state + uint8_t audio[2]; + encode_uint8_chunk(eeprom_read_byte(EECONFIG_AUDIO), &audio); + send_bytes_sysex(0x03, &audio, 2); + #endif + case 0x04: ; // Get layer state + uint8_t layers[5]; + encode_uint32_chunk(layer_state, &layers); + send_bytes_sysex(0x04, &layers, 5); + break; + #ifdef BACKLIGHT_ENABLE + case 0x06: ; // Get backlight state + uint8_t backlight[2]; + encode_uint8_chunk(eeprom_read_byte(EECONFIG_BACKLIGHT), &backlight); + send_bytes_sysex(0x06, &backlight, 2); + #endif + #ifdef RGBLIGHT_ENABLE + case 0x07: ; // Get rgblight state + uint8_t rgblight[2]; + encode_uint32_chunk(eeprom_read_dword(EECONFIG_RGBLIGHT), &rgblight); + send_bytes_sysex(0x07, &rgblight, 5); + #endif + case 0x08: ; // Keymap options + uint8_t keymap_options[2]; + encode_uint8_chunk(eeconfig_read_keymap(), &keymap_options); + send_bytes_sysex(0x08, &keymap_options, 2); break; } + break; #ifdef RGBLIGHT_ENABLE case 0x27: ; // RGB LED functions switch (*data++) { case 0x00: ; // Update HSV - uint32_t chunk = decode_4byte_chunk(data); - rgblight_sethsv(((chunk >> 16) & 0xFFFF) % 360, (chunk >> 8) & 0xFF, chunk & 0xFF); + uint32_t hsv = decode_uint32_chunk(data); + rgblight_sethsv(((hsv >> 16) & 0xFFFF) % 360, (hsv >> 8) & 0xFF, hsv & 0xFF); break; case 0x01: ; // Update RGB break; + case 0x02: ; // Update mode + uint8_t rgb_mode = decode_uint8_chunk(data); + rgblight_mode(rgb_mode); + break; } break; #endif @@ -1234,10 +1293,20 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) void send_unicode_midi(uint32_t unicode) { uint8_t chunk[5]; - encode_4byte_chunk(unicode, &chunk); + encode_uint32_chunk(unicode, &chunk); + send_bytes_sysex(0x05, &chunk, 5); +} - uint8_t array[] = {0xF0, 0x00, 0x00, 0x00, 0x05, chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], 0xF7}; - midi_send_array(&midi_device, 11, &array); +void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length) { + uint8_t * array = malloc(sizeof(uint8_t) * (length + 6)); + array[0] = 0xF0; + array[1] = 0x00; + array[2] = 0x00; + array[3] = 0x00; + array[4] = type; + array[length + 5] = 0xF7; + memcpy(array + 5, bytes, length); + midi_send_array(&midi_device, length + 6, array); } #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index 3fec797b6c..198964f901 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -68,9 +68,18 @@ typedef struct { } __attribute__ ((packed)) report_extra_t; #ifdef MIDI_ENABLE -void MIDI_Task(void); -MidiDevice midi_device; -void send_unicode_midi(uint32_t unicode); + #define MIDI_SYSEX_BUFFER 16 + void MIDI_Task(void); + MidiDevice midi_device; + + void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data); + uint32_t decode_uint32_chunk(uint8_t * data); + uint32_t decode_uint8_chunk(uint8_t * data); + void encode_uint32_chunk(uint32_t data, uint8_t * pointer); + void encode_uint8_chunk(uint8_t data, uint8_t * pointer); + void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data); + void send_unicode_midi(uint32_t unicode); + void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length); #endif // #if LUFA_VERSION_INTEGER < 0x120730 -- cgit v1.2.3 From c1037b1dc060d14a09a59f697fefe2b5b91bf373 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 21 Nov 2016 18:05:06 -0500 Subject: working with helper, qmk_helper_windows@05b0105 --- keyboards/planck/keymaps/default/Makefile | 8 ++++---- keyboards/planck/keymaps/default/keymap.c | 4 ++-- tmk_core/protocol/lufa/lufa.c | 6 ++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/default/Makefile b/keyboards/planck/keymaps/default/Makefile index 0f4953888d..267a087ea9 100644 --- a/keyboards/planck/keymaps/default/Makefile +++ b/keyboards/planck/keymaps/default/Makefile @@ -5,17 +5,17 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls +MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index 5f71ae7d19..ddbe4d7b27 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index cc00b3b89b..35739e3211 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1207,6 +1207,12 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) data++; switch (*data++) { + case 0x07: ; // Quantum action + break; + case 0x08: ; // Keyboard acion + break; + case 0x09: ; // User action + break; case 0x12: ; // Set info on keyboard switch (*data++) { case 0x02: ; // set default layer -- cgit v1.2.3 From 664c0a036b3d7c3ed39f4a7a78d97f4a9cc7d20c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 21 Nov 2016 19:50:55 -0500 Subject: cleaning up new code --- quantum/light_ws2812.h | 2 +- quantum/quantum.c | 40 +++++++++++++++++++ quantum/quantum.h | 5 +++ tmk_core/protocol/lufa/lufa.c | 90 +++++++++++++------------------------------ 4 files changed, 73 insertions(+), 64 deletions(-) diff --git a/quantum/light_ws2812.h b/quantum/light_ws2812.h index 0bef93d5ec..9498e550e9 100755 --- a/quantum/light_ws2812.h +++ b/quantum/light_ws2812.h @@ -16,7 +16,7 @@ #include #include //#include "ws2812_config.h" -#include "i2cmaster.h" +//#include "i2cmaster.h" #define LIGHT_I2C 1 #define LIGHT_I2C_ADDR 0x84 diff --git a/quantum/quantum.c b/quantum/quantum.c index 9fd9a6ef72..8b2fefef65 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -802,6 +802,46 @@ void backlight_set(uint8_t level) #endif // backlight +// Functions for spitting out values +// + +void send_dword(uint32_t number) { // this might not actually work + uint16_t word = (number >> 16); + send_word(word); + send_word(number & 0xFFFFUL); +} + +void send_word(uint16_t number) { + uint8_t byte = number >> 8; + send_byte(byte); + send_byte(number & 0xFF); +} + +void send_byte(uint8_t number) { + uint8_t nibble = number >> 4; + send_nibble(nibble); + send_nibble(number & 0xF); +} + +void send_nibble(uint8_t number) { + switch (number) { + case 0: + register_code(KC_0); + unregister_code(KC_0); + break; + case 1 ... 9: + register_code(KC_1 + (number - 1)); + unregister_code(KC_1 + (number - 1)); + break; + case 0xA ... 0xF: + register_code(KC_A + (number - 0xA)); + unregister_code(KC_A + (number - 0xA)); + break; + } +} + + + __attribute__ ((weak)) void led_set_user(uint8_t usb_led) { diff --git a/quantum/quantum.h b/quantum/quantum.h index 06a2e049dc..3d35f11fad 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -110,6 +110,11 @@ void breathing_speed_dec(uint8_t value); #endif #endif +void send_dword(uint32_t number); +void send_word(uint16_t number); +void send_byte(uint8_t number); +void send_nibble(uint8_t number); + void led_set_user(uint8_t usb_led); void led_set_kb(uint8_t usb_led); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 35739e3211..14da3b8039 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -84,9 +84,9 @@ static uint8_t keyboard_led_stats = 0; static report_keyboard_t keyboard_report_sent; #ifdef MIDI_ENABLE -void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2); -void usb_get_midi(MidiDevice * device); -void midi_usb_init(MidiDevice * device); +static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2); +static void usb_get_midi(MidiDevice * device); +static void midi_usb_init(MidiDevice * device); #endif /* Host driver */ @@ -714,7 +714,7 @@ int8_t sendchar(uint8_t c) ******************************************************************************/ #ifdef MIDI_ENABLE -void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) { +static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) { MIDI_EventPacket_t event; event.Data1 = byte0; event.Data2 = byte1; @@ -774,7 +774,7 @@ void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byt USB_USBTask(); } -void usb_get_midi(MidiDevice * device) { +static void usb_get_midi(MidiDevice * device) { MIDI_EventPacket_t event; while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, &event)) { @@ -804,12 +804,12 @@ void usb_get_midi(MidiDevice * device) { USB_USBTask(); } -void midi_usb_init(MidiDevice * device){ +static void midi_usb_init(MidiDevice * device){ midi_device_init(device); midi_device_set_send_func(device, usb_send_func); midi_device_set_pre_input_process_func(device, usb_get_midi); - SetupHardware(); + // SetupHardware(); sei(); } @@ -1112,41 +1112,6 @@ void cc_callback(MidiDevice * device, #endif } -void send_dword(uint32_t number) { - uint16_t word = (number >> 16); - send_word(word); - send_word(number & 0xFFFFUL); -} - -void send_word(uint16_t number) { - uint8_t byte = number >> 8; - send_byte(byte); - send_byte(number & 0xFF); -} - -void send_byte(uint8_t number) { - uint8_t nibble = number >> 4; - send_nibble(nibble); - send_nibble(number & 0xF); -} - -void send_nibble(uint8_t number) { - switch (number) { - case 0: - register_code(KC_0); - unregister_code(KC_0); - break; - case 1 ... 9: - register_code(KC_1 + (number - 1)); - unregister_code(KC_1 + (number - 1)); - break; - case 0xA ... 0xF: - register_code(KC_A + (number - 0xA)); - unregister_code(KC_A + (number - 0xA)); - break; - } -} - uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { @@ -1159,8 +1124,8 @@ void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t for (uint8_t place = 0; place < length; place++) { // send_byte(*data); midi_buffer[start + place] = *data; - if (*data == 0xF7) - sysex_buffer_callback(device, start + place, &midi_buffer); + if (*data == 0xF7 && midi_buffer[0] == 0xF0) + sysex_buffer_callback(device, start + place, midi_buffer); // SEND_STRING(" "); data++; } @@ -1197,10 +1162,9 @@ void encode_uint8_chunk(uint8_t data, uint8_t * pointer) { } void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { - uint8_t * pointer_copy = data; + // uint8_t * pointer_copy = data; // use for debugging - if (*data++ != 0xF0) - return + //data++; // i'm 98% sure there's a better way to do this data++; data++; data++; @@ -1233,41 +1197,41 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) break; case 0x01: ; // Get debug state uint8_t debug[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEBUG), &debug); - send_bytes_sysex(0x01, &debug, 2); + encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEBUG), debug); + send_bytes_sysex(0x01, debug, 2); break; case 0x02: ; // Get default layer uint8_t default_layer[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEFAULT_LAYER), &default_layer); - send_bytes_sysex(0x02, &default_layer, 2); + encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEFAULT_LAYER), default_layer); + send_bytes_sysex(0x02, default_layer, 2); break; #ifdef AUDIO_ENABLE case 0x03: ; // Get backlight state uint8_t audio[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_AUDIO), &audio); - send_bytes_sysex(0x03, &audio, 2); + encode_uint8_chunk(eeprom_read_byte(EECONFIG_AUDIO), audio); + send_bytes_sysex(0x03, audio, 2); #endif case 0x04: ; // Get layer state uint8_t layers[5]; - encode_uint32_chunk(layer_state, &layers); - send_bytes_sysex(0x04, &layers, 5); + encode_uint32_chunk(layer_state, layers); + send_bytes_sysex(0x04, layers, 5); break; #ifdef BACKLIGHT_ENABLE case 0x06: ; // Get backlight state uint8_t backlight[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_BACKLIGHT), &backlight); - send_bytes_sysex(0x06, &backlight, 2); + encode_uint8_chunk(eeprom_read_byte(EECONFIG_BACKLIGHT), backlight); + send_bytes_sysex(0x06, backlight, 2); #endif #ifdef RGBLIGHT_ENABLE case 0x07: ; // Get rgblight state uint8_t rgblight[2]; - encode_uint32_chunk(eeprom_read_dword(EECONFIG_RGBLIGHT), &rgblight); - send_bytes_sysex(0x07, &rgblight, 5); + encode_uint32_chunk(eeprom_read_dword(EECONFIG_RGBLIGHT), rgblight); + send_bytes_sysex(0x07, rgblight, 5); #endif case 0x08: ; // Keymap options uint8_t keymap_options[2]; - encode_uint8_chunk(eeconfig_read_keymap(), &keymap_options); - send_bytes_sysex(0x08, &keymap_options, 2); + encode_uint8_chunk(eeconfig_read_keymap(), keymap_options); + send_bytes_sysex(0x08, keymap_options, 2); break; } break; @@ -1299,8 +1263,8 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) void send_unicode_midi(uint32_t unicode) { uint8_t chunk[5]; - encode_uint32_chunk(unicode, &chunk); - send_bytes_sysex(0x05, &chunk, 5); + encode_uint32_chunk(unicode, chunk); + send_bytes_sysex(0x05, chunk, 5); } void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length) { -- cgit v1.2.3 From 6390033e8688550826a4bd3004a2e76568600657 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 21 Nov 2016 20:14:16 -0500 Subject: cleaning up midid --- quantum/config_common.h | 99 ++++++++++++++++++++++--------------------- tmk_core/common/host_driver.h | 9 +++- tmk_core/protocol/lufa/lufa.c | 2 +- 3 files changed, 59 insertions(+), 51 deletions(-) diff --git a/quantum/config_common.h b/quantum/config_common.h index 8ed5f4a106..f3897dc2ce 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -5,55 +5,56 @@ #define COL2ROW 0 #define ROW2COL 1 /* I/O pins */ -#define B0 0x30 -#define B1 0x31 -#define B2 0x32 -#define B3 0x33 -#define B4 0x34 -#define B5 0x35 -#define B6 0x36 -#define B7 0x37 -#define C0 0x60 -#define C1 0x61 -#define C2 0x62 -#define C3 0x63 -#define C4 0x64 -#define C5 0x65 -#define C6 0x66 -#define C7 0x67 -#define D0 0x90 -#define D1 0x91 -#define D2 0x92 -#define D3 0x93 -#define D4 0x94 -#define D5 0x95 -#define D6 0x96 -#define D7 0x97 -#define E0 0xC0 -#define E1 0xC1 -#define E2 0xC2 -#define E3 0xC3 -#define E4 0xC4 -#define E5 0xC5 -#define E6 0xC6 -#define E7 0xC7 -#define F0 0xF0 -#define F1 0xF1 -#define F2 0xF2 -#define F3 0xF3 -#define F4 0xF4 -#define F5 0xF5 -#define F6 0xF6 -#define F7 0xF7 -#define A0 0x00 -#define A1 0x01 -#define A2 0x02 -#define A3 0x03 -#define A4 0x04 -#define A5 0x05 -#define A6 0x06 -#define A7 0x07 - +#ifndef F0 + #define B0 0x30 + #define B1 0x31 + #define B2 0x32 + #define B3 0x33 + #define B4 0x34 + #define B5 0x35 + #define B6 0x36 + #define B7 0x37 + #define C0 0x60 + #define C1 0x61 + #define C2 0x62 + #define C3 0x63 + #define C4 0x64 + #define C5 0x65 + #define C6 0x66 + #define C7 0x67 + #define D0 0x90 + #define D1 0x91 + #define D2 0x92 + #define D3 0x93 + #define D4 0x94 + #define D5 0x95 + #define D6 0x96 + #define D7 0x97 + #define E0 0xC0 + #define E1 0xC1 + #define E2 0xC2 + #define E3 0xC3 + #define E4 0xC4 + #define E5 0xC5 + #define E6 0xC6 + #define E7 0xC7 + #define F0 0xF0 + #define F1 0xF1 + #define F2 0xF2 + #define F3 0xF3 + #define F4 0xF4 + #define F5 0xF5 + #define F6 0xF6 + #define F7 0xF7 + #define A0 0x00 + #define A1 0x01 + #define A2 0x02 + #define A3 0x03 + #define A4 0x04 + #define A5 0x05 + #define A6 0x06 + #define A7 0x07 +#endif /* USART configuration */ #ifdef BLUETOOTH_ENABLE diff --git a/tmk_core/common/host_driver.h b/tmk_core/common/host_driver.h index edb9e5dd9c..588d1c0be8 100644 --- a/tmk_core/common/host_driver.h +++ b/tmk_core/common/host_driver.h @@ -20,7 +20,9 @@ along with this program. If not, see . #include #include "report.h" - +#ifdef MIDI_ENABLE + #include "midi.h" +#endif typedef struct { uint8_t (*keyboard_leds)(void); @@ -28,6 +30,11 @@ typedef struct { void (*send_mouse)(report_mouse_t *); void (*send_system)(uint16_t); void (*send_consumer)(uint16_t); +#ifdef MIDI_ENABLE + void (*usb_send_func)(MidiDevice *, uint16_t, uint8_t, uint8_t, uint8_t); + void (*usb_get_midi)(MidiDevice *); + void (*midi_usb_init)(MidiDevice *); +#endif } host_driver_t; #endif diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 14da3b8039..a33a16599e 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1051,7 +1051,7 @@ int main(void) // MIDI_Task(); #endif -#ifdef RGBLIGHT_ENABLE +#ifdef RGBLIGHT_ANIMATIONS rgblight_task(); #endif -- cgit v1.2.3 From 06a2677b7eedbf58532fa1a673ba1277e756174d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 21 Nov 2016 20:17:32 -0500 Subject: fix infinity --- keyboards/ergodox/config.h | 2 -- keyboards/ergodox/ez/config.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index 049c707a56..edc60caae1 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -1,8 +1,6 @@ #ifndef KEYBOARDS_ERGODOX_CONFIG_H_ #define KEYBOARDS_ERGODOX_CONFIG_H_ -#include "config_common.h" - #define MOUSEKEY_DELAY 100 #define MOUSEKEY_INTERVAL 20 #define MOUSEKEY_MAX_SPEED 3 diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index 084a044ee1..67a856e511 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -21,6 +21,8 @@ along with this program. If not, see . #include "../config.h" +#include "config_common.h" + /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x1307 -- cgit v1.2.3 From 2febf9b9f7d610fc2eca666a842272cb90a87919 Mon Sep 17 00:00:00 2001 From: h-youhei Date: Tue, 22 Nov 2016 20:40:12 +0900 Subject: Add japanese keymap --- quantum/keymap_extras/keymap_jp.h | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 quantum/keymap_extras/keymap_jp.h diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h new file mode 100644 index 0000000000..e81b5952e0 --- /dev/null +++ b/quantum/keymap_extras/keymap_jp.h @@ -0,0 +1,62 @@ +/* JP106-layout (Japanese Standard) + * + * For more information, see + * http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html + * note: This website is written in Japanese. + */ + + +#ifndef KEYMAP_JP_H +#define KEYMAP_JP_H + + +#include "keymap.h" + + +#define JP_ZHTG KC_GRV // hankaku/zenkaku|kanzi +#define JP_YEN KC_INT3 // yen, | +#define JP_CIRC KC_EQL // ^, ~ +#define JP_AT KC_LBRC // @, ` +#define JP_LBRC KC_RBRC // [, { +#define JP_COLN KC_QUOT // :, * +#define JP_RBRC KC_NUHS // ], } +#define JP_BSLS KC_INT1 // \, _ +#define JP_MHEN KC_INT5 // muhenkan +#define JP_HENK KC_INT4 // henkan +#define JP_KANA KC_INT2 // katakana/hiragana|ro-mazi + + +//Aliases for shifted symbols +#define JP_DQT LSFT(KC_2) // " +#define JP_AMPR LSFT(KC_6) // & +#define JP_QUOT LSFT(KC_7) // ' +#define JP_LPRN LSFT(KC_8) // ( +#define JP_RPRN LSFT(KC_9) // ) +#define JP_EQL LSFT(KC_MINS) // = +#define JP_TILD LSFT(JP_CIRC) // ~ +#define JP_PIPE LSFT(JP_YEN) // | +#define JP_GRV LSFT(JP_AT) // ` +#define JP_LCBR LSFT(JP_LBRC) // { +#define JP_PLUS LSFT(KC_SCLN) // + +#define JP_ASTR LSFT(JP_COLN) // * +#define JP_RCBR LSFT(JP_RBRC) // } +#define JP_UNDS LSFT(JP_BSLS) // _ + + +// These symbols are correspond to US101-layout. +#define JP_MINS KC_MINS // - +#define JP_SCLN KC_SCLN // ; +#define JP_COMM KC_COMM // , +#define JP_DOT KC_DOT // . +#define JP_SLSH KC_SLSH // / +// shifted +#define JP_EXLM KC_EXLM // ! +#define JP_HASH KC_HASH // # +#define JP_DLR KC_DLR // $ +#define JP_PERC KC_PERC // % +#define JP_LT KC_LT // < +#define JP_GT KC_GT // > +#define JP_QUES KC_QUES // ? + + +#endif -- cgit v1.2.3 From d37becc0a9203c4c7d52aca6190b4b3d9fb69a59 Mon Sep 17 00:00:00 2001 From: PureSpider Date: Tue, 22 Nov 2016 22:12:57 +0100 Subject: Set backlight status to on if it's at maximum brightness already and the brightness increase keybind is used Before it was turned on but the status wasn't set to on, so you had to push the backlight toggle bind twice to turn it off again --- tmk_core/common/backlight.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c index c9e8fd3fd2..0e0ad2d154 100644 --- a/tmk_core/common/backlight.c +++ b/tmk_core/common/backlight.c @@ -36,9 +36,9 @@ void backlight_increase(void) if(backlight_config.level < BACKLIGHT_LEVELS) { backlight_config.level++; - backlight_config.enable = 1; - eeconfig_update_backlight(backlight_config.raw); } + backlight_config.enable = 1; + eeconfig_update_backlight(backlight_config.raw); dprintf("backlight increase: %u\n", backlight_config.level); backlight_set(backlight_config.level); } -- cgit v1.2.3 From 5893f0fa1fcecfface25ce570f37e51031a14489 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Wed, 23 Nov 2016 16:22:57 +1100 Subject: Fixed NO_SUSPEND_POWER_DOWN handling --- tmk_core/common/avr/suspend.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 8a7272bbc5..939bda15eb 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -47,6 +47,7 @@ void suspend_idle(uint8_t time) sleep_disable(); } +#ifndef NO_SUSPEND_POWER_DOWN /* Power down MCU with watchdog timer * wdto: watchdog timer timeout defined in * WDTO_15MS @@ -61,6 +62,7 @@ void suspend_idle(uint8_t time) * WDTO_8S */ static uint8_t wdt_timeout = 0; + static void power_down(uint8_t wdto) { #ifdef PROTOCOL_LUFA @@ -98,10 +100,13 @@ static void power_down(uint8_t wdto) // Disable watchdog after sleep wdt_disable(); } +#endif void suspend_power_down(void) { +#ifndef NO_SUSPEND_POWER_DOWN power_down(WDTO_15MS); +#endif } __attribute__ ((weak)) void matrix_power_up(void) {} @@ -109,7 +114,9 @@ __attribute__ ((weak)) void matrix_power_down(void) {} bool suspend_wakeup_condition(void) { #ifdef BACKLIGHT_ENABLE +#ifndef NO_SUSPEND_POWER_DOWN backlight_set(0); +#endif #endif matrix_power_up(); matrix_scan(); @@ -126,7 +133,6 @@ void suspend_wakeup_init(void) // clear keyboard state clear_keyboard(); #ifdef BACKLIGHT_ENABLE - backlight_set(0); backlight_init(); #endif led_set(host_keyboard_leds()); -- cgit v1.2.3 From 3d7aaa31e41a9c96e785b0c089d74dfda525dfbe Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 23 Nov 2016 00:30:06 -0500 Subject: converted to 8bit messages --- Dockerfile | 3 +- tmk_core/protocol/lufa/lufa.c | 119 ++++++++++++++++++++++++------------------ tmk_core/protocol/midi.mk | 1 + 3 files changed, 70 insertions(+), 53 deletions(-) diff --git a/Dockerfile b/Dockerfile index 744ded8579..c42bbeb32a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,5 +25,4 @@ ENV subproject=ez ENV keymap=default VOLUME /qmk -WORKDIR /qmk -CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap} +WORKDIR /qmk \ No newline at end of file diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index a33a16599e..c4531c8d73 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -76,6 +76,10 @@ #include "rgblight.h" #endif +#ifdef MIDI_ENABLE + #include "sysex_tools.h" +#endif + uint8_t keyboard_idle = 0; /* 0: Boot Protocol, 1: Report Protocol(default) */ uint8_t keyboard_protocol = 1; @@ -1124,8 +1128,16 @@ void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t for (uint8_t place = 0; place < length; place++) { // send_byte(*data); midi_buffer[start + place] = *data; - if (*data == 0xF7 && midi_buffer[0] == 0xF0) - sysex_buffer_callback(device, start + place, midi_buffer); + if (*data == 0xF7) { + // SEND_STRING("\nRD: "); + // for (uint8_t i = 0; i < start + place + 1; i++){ + // send_byte(midi_buffer[i]); + // SEND_STRING(" "); + // } + uint8_t * decoded = malloc(sizeof(uint8_t) * (sysex_decoded_length(start + place - 4))); + uint16_t decode_length = sysex_decode(decoded, midi_buffer + 4, start + place - 4); + sysex_buffer_callback(device, decode_length, decoded); + } // SEND_STRING(" "); data++; } @@ -1161,32 +1173,35 @@ void encode_uint8_chunk(uint8_t data, uint8_t * pointer) { *pointer++ = (data) & 0x7F; } -void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { - // uint8_t * pointer_copy = data; // use for debugging +void dword_to_bytes(uint8_t * bytes, uint32_t dword) { + bytes[0] = (dword >> 24) & 0xFF; + bytes[1] = (dword >> 16) & 0xFF; + bytes[2] = (dword >> 8) & 0xFF; + bytes[3] = (dword >> 0) & 0xFF; +} - //data++; // i'm 98% sure there's a better way to do this - data++; - data++; - data++; - data++; +void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { + // SEND_STRING("\nRX: "); + // for (uint8_t i = 0; i < length; i++) { + // send_byte(data[i]); + // SEND_STRING(" "); + // } switch (*data++) { case 0x07: ; // Quantum action break; - case 0x08: ; // Keyboard acion + case 0x08: ; // Keyboard action break; case 0x09: ; // User action break; case 0x12: ; // Set info on keyboard switch (*data++) { case 0x02: ; // set default layer - uint8_t default_layer = decode_uint8_chunk(data); - eeconfig_update_default_layer(default_layer); - default_layer_set((uint32_t)default_layer); + eeconfig_update_default_layer(data[0] << 8 | data[1]); + default_layer_set((uint32_t)(data[0] << 8 | data[1])); break; case 0x08: ; // set keymap options - uint8_t keymap_options = decode_uint8_chunk(data); - eeconfig_update_keymap(keymap_options); + eeconfig_update_keymap(data[0]); break; } break; @@ -1196,42 +1211,37 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) send_bytes_sysex(0x00, NULL, 0); break; case 0x01: ; // Get debug state - uint8_t debug[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEBUG), debug); - send_bytes_sysex(0x01, debug, 2); + uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) }; + send_bytes_sysex(0x01, debug_bytes, 1); break; case 0x02: ; // Get default layer - uint8_t default_layer[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_DEFAULT_LAYER), default_layer); - send_bytes_sysex(0x02, default_layer, 2); + uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) }; + send_bytes_sysex(0x02, default_bytes, 1); break; #ifdef AUDIO_ENABLE case 0x03: ; // Get backlight state - uint8_t audio[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_AUDIO), audio); - send_bytes_sysex(0x03, audio, 2); + uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) }; + send_bytes_sysex(0x03, audio_bytes, 1); #endif case 0x04: ; // Get layer state - uint8_t layers[5]; - encode_uint32_chunk(layer_state, layers); - send_bytes_sysex(0x04, layers, 5); + uint8_t layer_state_bytes[4]; + dword_to_bytes(layer_state_bytes, layer_state); + send_bytes_sysex(0x04, layer_state_bytes, 4); break; #ifdef BACKLIGHT_ENABLE case 0x06: ; // Get backlight state - uint8_t backlight[2]; - encode_uint8_chunk(eeprom_read_byte(EECONFIG_BACKLIGHT), backlight); - send_bytes_sysex(0x06, backlight, 2); + uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) }; + send_bytes_sysex(0x06, backlight_bytes, 1); #endif #ifdef RGBLIGHT_ENABLE case 0x07: ; // Get rgblight state - uint8_t rgblight[2]; - encode_uint32_chunk(eeprom_read_dword(EECONFIG_RGBLIGHT), rgblight); - send_bytes_sysex(0x07, rgblight, 5); + uint8_t rgblight_bytes[4]; + dword_to_bytes(rgblight_bytes, eeprom_read_dword(EECONFIG_RGBLIGHT)); + send_bytes_sysex(0x07, rgblight_bytes, 4); #endif case 0x08: ; // Keymap options - uint8_t keymap_options[2]; - encode_uint8_chunk(eeconfig_read_keymap(), keymap_options); - send_bytes_sysex(0x08, keymap_options, 2); + uint8_t keymap_bytes[1] = { eeconfig_read_keymap() }; + send_bytes_sysex(0x08, keymap_bytes, 1); break; } break; @@ -1239,26 +1249,18 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) case 0x27: ; // RGB LED functions switch (*data++) { case 0x00: ; // Update HSV - uint32_t hsv = decode_uint32_chunk(data); - rgblight_sethsv(((hsv >> 16) & 0xFFFF) % 360, (hsv >> 8) & 0xFF, hsv & 0xFF); + rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]); break; case 0x01: ; // Update RGB break; case 0x02: ; // Update mode - uint8_t rgb_mode = decode_uint8_chunk(data); - rgblight_mode(rgb_mode); + rgblight_mode(data[0]); break; } break; #endif } - // SEND_STRING("\nDATA:\n"); - // while (*pointer_copy != 0xF7) { - // send_byte(*pointer_copy++); - // SEND_STRING(" "); - // } - } void send_unicode_midi(uint32_t unicode) { @@ -1268,15 +1270,30 @@ void send_unicode_midi(uint32_t unicode) { } void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length) { - uint8_t * array = malloc(sizeof(uint8_t) * (length + 6)); + // SEND_STRING("\nTX: "); + // for (uint8_t i = 0; i < length; i++) { + // send_byte(bytes[i]); + // SEND_STRING(" "); + // } + uint8_t * precode = malloc(sizeof(uint8_t) * (length + 1)); + precode[0] = type; + memcpy(precode + 1, bytes, length); + uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 1))); + uint16_t encoded_length = sysex_encode(encoded, precode, length + 1); + uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5)); array[0] = 0xF0; array[1] = 0x00; array[2] = 0x00; array[3] = 0x00; - array[4] = type; - array[length + 5] = 0xF7; - memcpy(array + 5, bytes, length); - midi_send_array(&midi_device, length + 6, array); + array[encoded_length + 4] = 0xF7; + memcpy(array + 4, encoded, encoded_length); + midi_send_array(&midi_device, encoded_length + 5, array); + + // SEND_STRING("\nTD: "); + // for (uint8_t i = 0; i < encoded_length + 5; i++) { + // send_byte(array[i]); + // SEND_STRING(" "); + // } } #endif diff --git a/tmk_core/protocol/midi.mk b/tmk_core/protocol/midi.mk index c85ae42ff2..4855b23d30 100644 --- a/tmk_core/protocol/midi.mk +++ b/tmk_core/protocol/midi.mk @@ -4,6 +4,7 @@ SRC += midi.c \ midi_device.c \ bytequeue/bytequeue.c \ bytequeue/interrupt_setting.c \ + sysex_tools.c \ $(LUFA_SRC_USBCLASS) VPATH += $(TMK_PATH)/$(MIDI_DIR) \ No newline at end of file -- cgit v1.2.3 From cf3926a8e13edb76193b8af25b497f9ef61161fd Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Wed, 23 Nov 2016 19:45:50 +1100 Subject: Fixed NO_SUSPEND_POWER_DOWN handling --- tmk_core/common/avr/suspend.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 939bda15eb..0c81e83612 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -113,11 +113,6 @@ __attribute__ ((weak)) void matrix_power_up(void) {} __attribute__ ((weak)) void matrix_power_down(void) {} bool suspend_wakeup_condition(void) { -#ifdef BACKLIGHT_ENABLE -#ifndef NO_SUSPEND_POWER_DOWN - backlight_set(0); -#endif -#endif matrix_power_up(); matrix_scan(); matrix_power_down(); @@ -135,7 +130,7 @@ void suspend_wakeup_init(void) #ifdef BACKLIGHT_ENABLE backlight_init(); #endif -led_set(host_keyboard_leds()); + led_set(host_keyboard_leds()); } #ifndef NO_SUSPEND_POWER_DOWN -- cgit v1.2.3 From 2e23689b8e3222982082c1f5a4f8ce7686f9658b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 23 Nov 2016 18:52:02 -0500 Subject: converted to new format --- quantum/rgblight.c | 13 ++ quantum/rgblight.h | 1 + tmk_core/protocol/lufa/lufa.c | 291 ++++++++++++++++++++++++++---------------- tmk_core/protocol/lufa/lufa.h | 16 ++- 4 files changed, 206 insertions(+), 115 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 00620da58e..bb03d6e913 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -183,6 +183,19 @@ void rgblight_init(void) { } } +void rgblight_update_dword(uint32_t dword) { + rgblight_config.raw = dword; + eeconfig_update_rgblight(rgblight_config.raw); + if (rgblight_config.enable) + rgblight_mode(rgblight_config.mode); + else { + #ifdef RGBLIGHT_ANIMATIONS + rgblight_timer_disable(); + #endif + rgblight_set(); + } +} + void rgblight_increase(void) { uint8_t mode = 0; if (rgblight_config.mode < RGBLIGHT_MODES) { diff --git a/quantum/rgblight.h b/quantum/rgblight.h index a3673348e7..28a410e480 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -65,6 +65,7 @@ void rgblight_enable(void); void rgblight_step(void); void rgblight_mode(uint8_t mode); void rgblight_set(void); +void rgblight_update_dword(uint32_t dword); void rgblight_increase_hue(void); void rgblight_decrease_hue(void); void rgblight_increase_sat(void); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index c4531c8d73..c3234b8ce5 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1145,39 +1145,96 @@ void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t } -uint32_t decode_uint32_chunk(uint8_t * data) { - uint32_t part1 = *data++; - uint32_t part2 = *data++; - uint32_t part3 = *data++; - uint32_t part4 = *data++; - uint32_t part5 = *data++; - return ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5; +void dword_to_bytes(uint32_t dword, uint8_t * bytes) { + bytes[0] = (dword >> 24) & 0xFF; + bytes[1] = (dword >> 16) & 0xFF; + bytes[2] = (dword >> 8) & 0xFF; + bytes[3] = (dword >> 0) & 0xFF; } -uint32_t decode_uint8_chunk(uint8_t * data) { - uint32_t part4 = *data++; - uint32_t part5 = *data++; - return (part4 << 7) | part5; +uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) { + return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3]; } -void encode_uint32_chunk(uint32_t data, uint8_t * pointer) { - *pointer++ = (data >> 28) & 0x7F; - *pointer++ = (data >> 21) & 0x7F; - *pointer++ = (data >> 14) & 0x7F; - *pointer++ = (data >> 7) & 0x7F; - *pointer++ = (data) & 0x7F; +enum MESSAGE_TYPE { + MT_GET_DATA = 0x10, // Get data from keyboard + MT_GET_DATA_ACK = 0x11, // returned data to process (ACK) + MT_SET_DATA = 0x20, // Set data on keyboard + MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK) + MT_SEND_DATA = 0x30, // Sending data/action from keyboard + MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) + MT_EXE_ACTION = 0x40, // executing actions on keyboard + MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) + MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) +}; + +enum DATA_TYPE { + DT_NONE = 0x00, + DT_HANDSHAKE, + DT_DEFAULT_LAYER, + DT_CURRENT_LAYER, + DT_KEYMAP_OPTIONS, + DT_BACKLIGHT, + DT_RGBLIGHT, + DT_UNICODE, + DT_DEBUG, + DT_AUDIO, + DT_QUANTUM_ACTION, + DT_KEYBOARD_ACTION, + DT_USER_ACTION, + +}; + +void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length) { + // SEND_STRING("\nTX: "); + // for (uint8_t i = 0; i < length; i++) { + // send_byte(bytes[i]); + // SEND_STRING(" "); + // } + uint8_t * precode = malloc(sizeof(uint8_t) * (length + 2)); + precode[0] = message_type; + precode[1] = data_type; + memcpy(precode + 2, bytes, length); + uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 2))); + uint16_t encoded_length = sysex_encode(encoded, precode, length + 2); + uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5)); + array[0] = 0xF0; + array[1] = 0x00; + array[2] = 0x00; + array[3] = 0x00; + array[encoded_length + 4] = 0xF7; + memcpy(array + 4, encoded, encoded_length); + midi_send_array(&midi_device, encoded_length + 5, array); + + // SEND_STRING("\nTD: "); + // for (uint8_t i = 0; i < encoded_length + 5; i++) { + // send_byte(array[i]); + // SEND_STRING(" "); + // } } -void encode_uint8_chunk(uint8_t data, uint8_t * pointer) { - *pointer++ = (data >> 7) & 0x7F; - *pointer++ = (data) & 0x7F; +#define MT_GET_DATA(data_type, data, length) send_bytes_sysex(MT_GET_DATA, data_type, data, length) +#define MT_GET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_GET_DATA_ACK, data_type, data, length) +#define MT_SET_DATA(data_type, data, length) send_bytes_sysex(MT_SET_DATA, data_type, data, length) +#define MT_SET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SET_DATA_ACK, data_type, data, length) +#define MT_SEND_DATA(data_type, data, length) send_bytes_sysex(MT_SEND_DATA, data_type, data, length) +#define MT_SEND_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SEND_DATA_ACK, data_type, data, length) +#define MT_EXE_ACTION(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION, data_type, data, length) +#define MT_EXE_ACTION_ACK(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION_ACK, data_type, data, length) + +__attribute__ ((weak)) +bool sysex_process_quantum(uint8_t length, uint8_t * data) { + return sysex_process_keyboard(length, data); } -void dword_to_bytes(uint8_t * bytes, uint32_t dword) { - bytes[0] = (dword >> 24) & 0xFF; - bytes[1] = (dword >> 16) & 0xFF; - bytes[2] = (dword >> 8) & 0xFF; - bytes[3] = (dword >> 0) & 0xFF; +__attribute__ ((weak)) +bool sysex_process_keyboard(uint8_t length, uint8_t * data) { + return sysex_process_user(length, data); +} + +__attribute__ ((weak)) +bool sysex_process_user(uint8_t length, uint8_t * data) { + return true; } void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { @@ -1186,114 +1243,128 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) // send_byte(data[i]); // SEND_STRING(" "); // } + if (!sysex_process_quantum(length, data)) + return; - switch (*data++) { - case 0x07: ; // Quantum action - break; - case 0x08: ; // Keyboard action - break; - case 0x09: ; // User action - break; - case 0x12: ; // Set info on keyboard - switch (*data++) { - case 0x02: ; // set default layer - eeconfig_update_default_layer(data[0] << 8 | data[1]); - default_layer_set((uint32_t)(data[0] << 8 | data[1])); + switch (data[0]) { + case MT_SET_DATA: + switch (data[1]) { + case DT_DEFAULT_LAYER: { + eeconfig_update_default_layer(data[2]); + default_layer_set((uint32_t)(data[2])); break; - case 0x08: ; // set keymap options - eeconfig_update_keymap(data[0]); + } + case DT_KEYMAP_OPTIONS: { + eeconfig_update_keymap(data[2]); + break; + } + case DT_RGBLIGHT: { + #ifdef RGBLIGHT_ENABLE + uint32_t rgblight = bytes_to_dword(data, 2); + rgblight_update_dword(rgblight); + #endif break; + } } - break; - case 0x13: ; // Get info from keyboard - switch (*data++) { - case 0x00: ; // Handshake - send_bytes_sysex(0x00, NULL, 0); + case MT_GET_DATA: + switch (data[1]) { + case DT_HANDSHAKE: { + MT_GET_DATA_ACK(DT_HANDSHAKE, NULL, 0); break; - case 0x01: ; // Get debug state + } + case DT_DEBUG: { uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) }; - send_bytes_sysex(0x01, debug_bytes, 1); + MT_GET_DATA_ACK(DT_DEBUG, debug_bytes, 1); break; - case 0x02: ; // Get default layer + } + case DT_DEFAULT_LAYER: { uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) }; - send_bytes_sysex(0x02, default_bytes, 1); + MT_GET_DATA_ACK(DT_DEFAULT_LAYER, default_bytes, 1); break; - #ifdef AUDIO_ENABLE - case 0x03: ; // Get backlight state - uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) }; - send_bytes_sysex(0x03, audio_bytes, 1); - #endif - case 0x04: ; // Get layer state + } + case DT_CURRENT_LAYER: { uint8_t layer_state_bytes[4]; - dword_to_bytes(layer_state_bytes, layer_state); - send_bytes_sysex(0x04, layer_state_bytes, 4); + dword_to_bytes(layer_state, layer_state_bytes); + MT_GET_DATA_ACK(DT_CURRENT_LAYER, layer_state_bytes, 4); break; - #ifdef BACKLIGHT_ENABLE - case 0x06: ; // Get backlight state - uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) }; - send_bytes_sysex(0x06, backlight_bytes, 1); - #endif - #ifdef RGBLIGHT_ENABLE - case 0x07: ; // Get rgblight state - uint8_t rgblight_bytes[4]; - dword_to_bytes(rgblight_bytes, eeprom_read_dword(EECONFIG_RGBLIGHT)); - send_bytes_sysex(0x07, rgblight_bytes, 4); - #endif - case 0x08: ; // Keymap options - uint8_t keymap_bytes[1] = { eeconfig_read_keymap() }; - send_bytes_sysex(0x08, keymap_bytes, 1); + } + case DT_AUDIO: { + #ifdef AUDIO_ENABLE + uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) }; + MT_GET_DATA_ACK(DT_AUDIO, audio_bytes, 1); + #else + MT_GET_DATA_ACK(DT_AUDIO, NULL, 0); + #endif break; - } - break; - #ifdef RGBLIGHT_ENABLE - case 0x27: ; // RGB LED functions - switch (*data++) { - case 0x00: ; // Update HSV - rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]); + } + case DT_BACKLIGHT: { + #ifdef BACKLIGHT_ENABLE + uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) }; + MT_GET_DATA_ACK(DT_BACKLIGHT, backlight_bytes, 1); + #else + MT_GET_DATA_ACK(DT_BACKLIGHT, NULL, 0); + #endif break; - case 0x01: ; // Update RGB + } + case DT_RGBLIGHT: { + #ifdef RGBLIGHT_ENABLE + uint8_t rgblight_bytes[4]; + dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes); + MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4); + #else + MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0) + #endif break; - case 0x02: ; // Update mode - rgblight_mode(data[0]); + } + case DT_KEYMAP_OPTIONS: { + uint8_t keymap_bytes[1] = { eeconfig_read_keymap() }; + MT_GET_DATA_ACK(DT_KEYMAP_OPTIONS, keymap_bytes, 1); + break; + } + default: break; } break; - #endif + case MT_SET_DATA_ACK: + case MT_GET_DATA_ACK: + break; + case MT_SEND_DATA: + break; + case MT_SEND_DATA_ACK: + break; + case MT_EXE_ACTION: + break; + case MT_EXE_ACTION_ACK: + break; + case MT_TYPE_ERROR: + break; + default: ; // command not recognised + send_bytes_sysex(MT_TYPE_ERROR, DT_NONE, data, length); + break; + + // #ifdef RGBLIGHT_ENABLE + // case 0x27: ; // RGB LED functions + // switch (*data++) { + // case 0x00: ; // Update HSV + // rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]); + // break; + // case 0x01: ; // Update RGB + // break; + // case 0x02: ; // Update mode + // rgblight_mode(data[0]); + // break; + // } + // break; + // #endif } } void send_unicode_midi(uint32_t unicode) { - uint8_t chunk[5]; - encode_uint32_chunk(unicode, chunk); - send_bytes_sysex(0x05, chunk, 5); + uint8_t chunk[4]; + dword_to_bytes(unicode, chunk); + MT_SEND_DATA(DT_UNICODE, chunk, 5); } -void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length) { - // SEND_STRING("\nTX: "); - // for (uint8_t i = 0; i < length; i++) { - // send_byte(bytes[i]); - // SEND_STRING(" "); - // } - uint8_t * precode = malloc(sizeof(uint8_t) * (length + 1)); - precode[0] = type; - memcpy(precode + 1, bytes, length); - uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 1))); - uint16_t encoded_length = sysex_encode(encoded, precode, length + 1); - uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5)); - array[0] = 0xF0; - array[1] = 0x00; - array[2] = 0x00; - array[3] = 0x00; - array[encoded_length + 4] = 0xF7; - memcpy(array + 4, encoded, encoded_length); - midi_send_array(&midi_device, encoded_length + 5, array); - - // SEND_STRING("\nTD: "); - // for (uint8_t i = 0; i < encoded_length + 5; i++) { - // send_byte(array[i]); - // SEND_STRING(" "); - // } -} #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index 198964f901..99b089f42b 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -73,13 +73,19 @@ typedef struct { MidiDevice midi_device; void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data); - uint32_t decode_uint32_chunk(uint8_t * data); - uint32_t decode_uint8_chunk(uint8_t * data); - void encode_uint32_chunk(uint32_t data, uint8_t * pointer); - void encode_uint8_chunk(uint8_t data, uint8_t * pointer); void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data); void send_unicode_midi(uint32_t unicode); - void send_bytes_sysex(uint8_t type, uint8_t * bytes, uint8_t length); + void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length); + + __attribute__ ((weak)) + bool sysex_process_quantum(uint8_t length, uint8_t * data); + + __attribute__ ((weak)) + bool sysex_process_keyboard(uint8_t length, uint8_t * data); + + __attribute__ ((weak)) + bool sysex_process_user(uint8_t length, uint8_t * data); + #endif // #if LUFA_VERSION_INTEGER < 0x120730 -- cgit v1.2.3 From cefa8468fb5f28bd67a0c02d371a4aef0964e20c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 23 Nov 2016 20:16:38 -0500 Subject: travis pls --- keyboards/ergodox/infinity/rules.mk | 2 ++ keyboards/ergodox/keymaps/jack/Makefile | 4 +-- quantum/quantum.c | 9 ++++-- quantum/quantum.h | 2 ++ tmk_core/protocol/lufa/lufa.c | 49 ++------------------------------- tmk_core/protocol/lufa/lufa.h | 42 +++++++++++++++++++++++++++- 6 files changed, 56 insertions(+), 52 deletions(-) diff --git a/keyboards/ergodox/infinity/rules.mk b/keyboards/ergodox/infinity/rules.mk index ccb735a485..473a6dfec6 100644 --- a/keyboards/ergodox/infinity/rules.mk +++ b/keyboards/ergodox/infinity/rules.mk @@ -63,6 +63,8 @@ VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile LCD_ENABLE ?= yes LED_ENABLE ?= yes LCD_BACKLIGHT_ENABLE ?= yes +MIDI_ENABLE = no +RGBLIGHT_ENABLE = no ifndef QUANTUM_DIR include ../../../Makefile diff --git a/keyboards/ergodox/keymaps/jack/Makefile b/keyboards/ergodox/keymaps/jack/Makefile index 7c257af501..3ca69bb923 100644 --- a/keyboards/ergodox/keymaps/jack/Makefile +++ b/keyboards/ergodox/keymaps/jack/Makefile @@ -1,5 +1,5 @@ -RGBLIGHT_ENABLE = yes -MIDI_ENABLE = yes +RGBLIGHT_ENABLE ?= yes +MIDI_ENABLE ?= yes ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/quantum/quantum.c b/quantum/quantum.c index f9f1ef22d0..8372a7adc5 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -847,8 +847,13 @@ void send_nibble(uint8_t number) { } } - - +void send_unicode_midi(uint32_t unicode) { + #ifdef MIDI_ENABLE + uint8_t chunk[4]; + dword_to_bytes(unicode, chunk); + MT_SEND_DATA(DT_UNICODE, chunk, 5); + #endif +} __attribute__ ((weak)) void led_set_user(uint8_t usb_led) { diff --git a/quantum/quantum.h b/quantum/quantum.h index 3d35f11fad..316da15b9a 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -119,4 +119,6 @@ void send_nibble(uint8_t number); void led_set_user(uint8_t usb_led); void led_set_kb(uint8_t usb_led); +void send_unicode_midi(uint32_t unicode); + #endif diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index c3234b8ce5..eae3e8f298 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -72,7 +72,7 @@ #include "virtser.h" #endif -#ifdef RGB_MIDI +#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE) #include "rgblight.h" #endif @@ -1156,35 +1156,6 @@ uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) { return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3]; } -enum MESSAGE_TYPE { - MT_GET_DATA = 0x10, // Get data from keyboard - MT_GET_DATA_ACK = 0x11, // returned data to process (ACK) - MT_SET_DATA = 0x20, // Set data on keyboard - MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK) - MT_SEND_DATA = 0x30, // Sending data/action from keyboard - MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) - MT_EXE_ACTION = 0x40, // executing actions on keyboard - MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) - MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) -}; - -enum DATA_TYPE { - DT_NONE = 0x00, - DT_HANDSHAKE, - DT_DEFAULT_LAYER, - DT_CURRENT_LAYER, - DT_KEYMAP_OPTIONS, - DT_BACKLIGHT, - DT_RGBLIGHT, - DT_UNICODE, - DT_DEBUG, - DT_AUDIO, - DT_QUANTUM_ACTION, - DT_KEYBOARD_ACTION, - DT_USER_ACTION, - -}; - void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length) { // SEND_STRING("\nTX: "); // for (uint8_t i = 0; i < length; i++) { @@ -1213,15 +1184,6 @@ void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, // } } -#define MT_GET_DATA(data_type, data, length) send_bytes_sysex(MT_GET_DATA, data_type, data, length) -#define MT_GET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_GET_DATA_ACK, data_type, data, length) -#define MT_SET_DATA(data_type, data, length) send_bytes_sysex(MT_SET_DATA, data_type, data, length) -#define MT_SET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SET_DATA_ACK, data_type, data, length) -#define MT_SEND_DATA(data_type, data, length) send_bytes_sysex(MT_SEND_DATA, data_type, data, length) -#define MT_SEND_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SEND_DATA_ACK, data_type, data, length) -#define MT_EXE_ACTION(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION, data_type, data, length) -#define MT_EXE_ACTION_ACK(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION_ACK, data_type, data, length) - __attribute__ ((weak)) bool sysex_process_quantum(uint8_t length, uint8_t * data) { return sysex_process_keyboard(length, data); @@ -1312,7 +1274,7 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes); MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4); #else - MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0) + MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0); #endif break; } @@ -1360,11 +1322,4 @@ void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) } -void send_unicode_midi(uint32_t unicode) { - uint8_t chunk[4]; - dword_to_bytes(unicode, chunk); - MT_SEND_DATA(DT_UNICODE, chunk, 5); -} - - #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index 99b089f42b..0962dda8d8 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -74,8 +74,9 @@ typedef struct { void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data); void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data); - void send_unicode_midi(uint32_t unicode); void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length); + void dword_to_bytes(uint32_t dword, uint8_t * bytes); + uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index); __attribute__ ((weak)) bool sysex_process_quantum(uint8_t length, uint8_t * data); @@ -86,6 +87,45 @@ typedef struct { __attribute__ ((weak)) bool sysex_process_user(uint8_t length, uint8_t * data); + enum MESSAGE_TYPE { + MT_GET_DATA = 0x10, // Get data from keyboard + MT_GET_DATA_ACK = 0x11, // returned data to process (ACK) + MT_SET_DATA = 0x20, // Set data on keyboard + MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK) + MT_SEND_DATA = 0x30, // Sending data/action from keyboard + MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) + MT_EXE_ACTION = 0x40, // executing actions on keyboard + MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) + MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) + }; + + enum DATA_TYPE { + DT_NONE = 0x00, + DT_HANDSHAKE, + DT_DEFAULT_LAYER, + DT_CURRENT_LAYER, + DT_KEYMAP_OPTIONS, + DT_BACKLIGHT, + DT_RGBLIGHT, + DT_UNICODE, + DT_DEBUG, + DT_AUDIO, + DT_QUANTUM_ACTION, + DT_KEYBOARD_ACTION, + DT_USER_ACTION, + + }; + + + #define MT_GET_DATA(data_type, data, length) send_bytes_sysex(MT_GET_DATA, data_type, data, length) + #define MT_GET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_GET_DATA_ACK, data_type, data, length) + #define MT_SET_DATA(data_type, data, length) send_bytes_sysex(MT_SET_DATA, data_type, data, length) + #define MT_SET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SET_DATA_ACK, data_type, data, length) + #define MT_SEND_DATA(data_type, data, length) send_bytes_sysex(MT_SEND_DATA, data_type, data, length) + #define MT_SEND_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SEND_DATA_ACK, data_type, data, length) + #define MT_EXE_ACTION(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION, data_type, data, length) + #define MT_EXE_ACTION_ACK(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION_ACK, data_type, data, length) + #endif // #if LUFA_VERSION_INTEGER < 0x120730 -- cgit v1.2.3 From f25596b8dc2f15f620c07164d871023d9284618c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 23 Nov 2016 21:28:12 -0500 Subject: rgblight fixes --- keyboards/ergodox/keymaps/erez_experimental/Makefile | 4 ++-- keyboards/ergodox/keymaps/erez_experimental/keymap.c | 8 +++++--- tmk_core/protocol/lufa/lufa.c | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/erez_experimental/Makefile index dbe89d1410..51a0c74c54 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/Makefile +++ b/keyboards/ergodox/keymaps/erez_experimental/Makefile @@ -3,8 +3,8 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend COMMAND_ENABLE = no # Commands for debug and configuration -RGBLIGHT_ENABLE = yes -MIDI_ENABLE = yes +RGBLIGHT_ENABLE ?= yes +MIDI_ENABLE ?= yes ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 4a23c7ac58..0c0e3c4e39 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -164,9 +164,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // dynamically generate these. case RGB_FF00BB: if (record->event.pressed) { - rgblight_enable(); - rgblight_mode(1); - rgblight_setrgb(0xff,0x00,0xbb); + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff,0x00,0xbb); + #endif } return false; break; diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index eae3e8f298..aa2e781c80 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1055,7 +1055,7 @@ int main(void) // MIDI_Task(); #endif -#ifdef RGBLIGHT_ANIMATIONS +#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) rgblight_task(); #endif -- cgit v1.2.3 From 3be13d1ffb43216aff1300cdce79512559bdde7c Mon Sep 17 00:00:00 2001 From: ofples Date: Fri, 25 Nov 2016 09:15:12 +0200 Subject: Added protocol.mk to build --- build_keyboard.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/build_keyboard.mk b/build_keyboard.mk index 61aebf3935..055ce632ae 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -199,6 +199,7 @@ endif VPATH += $(KEYBOARD_PATH) VPATH += $(COMMON_VPATH) +include $(TMK_PATH)/protocol.mk include $(TMK_PATH)/common.mk SRC += $(TMK_COMMON_SRC) -- cgit v1.2.3 From 03d6e165bb0baf9d0093250d3c3c0771290df4d6 Mon Sep 17 00:00:00 2001 From: ofples Date: Fri, 25 Nov 2016 09:17:40 +0200 Subject: Added missing endif for ifdef __AVR_ATmega32U4__ and removed the unnecessary one at the end of the file --- quantum/config_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/config_common.h b/quantum/config_common.h index 8ed5f4a106..443473292d 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -76,6 +76,7 @@ } while(0) # else # error "USART configuration is needed." +# endif #endif // I'm fairly sure these aren't needed, but oh well - Jack @@ -125,4 +126,3 @@ #endif -#endif -- cgit v1.2.3 From 0c9d66eb59add717397ba83d508577073412ce86 Mon Sep 17 00:00:00 2001 From: ofples Date: Fri, 25 Nov 2016 09:20:41 +0200 Subject: Removed comment --- quantum/config_common.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/quantum/config_common.h b/quantum/config_common.h index 443473292d..6b525fe1c6 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -79,8 +79,6 @@ # endif #endif -// I'm fairly sure these aren't needed, but oh well - Jack - /* * PS/2 Interrupt configuration */ -- cgit v1.2.3 From 97e7486d4c8818f4a6b3e619729d6f4f6524a7d1 Mon Sep 17 00:00:00 2001 From: ofples Date: Fri, 25 Nov 2016 12:10:44 +0200 Subject: Added documentation for PS/2 mouse in readme --- readme.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/readme.md b/readme.md index 8615b48d55..0157b90724 100644 --- a/readme.md +++ b/readme.md @@ -1157,6 +1157,45 @@ The firmware supports 5 different light effects, and the color (hue, saturation, Please note the USB port can only supply a limited amount of power to the keyboard (500mA by standard, however, modern computer and most usb hubs can provide 700+mA.). According to the data of NeoPixel from Adafruit, 30 WS2812 LEDs require a 5V 1A power supply, LEDs used in this mod should not more than 20. +## PS/2 Mouse Support + +Its possible to hook up a PS/2 mouse (for example touchpads or trackpoints) to your keyboard as a composite device. +In order to do this you must first enable the option in your Makefile. + + PS2_MOUSE_ENABLE = yes + +Then, decide whether to use interrupts (better if your microcontroller supports them) or busywait, and enable the relevant option. + + PS2_USE_INT = yes + // PS2_USE_BUSYWAIT = yes + +If you're using a teensy and have hooked up the clock on your PS/2 device to D1 and the data to D0, you're all set. +Otherwise, you will need to update the following defines in your `config.h`: + + #define PS2_CLOCK_PORT PORTD + #define PS2_CLOCK_PIN PIND + #define PS2_CLOCK_DDR DDRD + #define PS2_CLOCK_BIT 1 + + #define PS2_DATA_PORT PORTD + #define PS2_DATA_PIN PIND + #define PS2_DATA_DDR DDRD + #define PS2_DATA_BIT 0 + +And with `PS2_USE_INT` also define these macros: + + #define PS2_INT_INIT() do { \ + EICRA |= ((1< Date: Sat, 26 Nov 2016 13:11:40 +0700 Subject: My Promethium keyboard firmware --- keyboards/handwired/promethium/Makefile | 3 + keyboards/handwired/promethium/config.h | 164 +++++ .../handwired/promethium/keymaps/priyadi/Makefile | 28 + .../handwired/promethium/keymaps/priyadi/config.h | 17 + .../handwired/promethium/keymaps/priyadi/flash.sh | 3 + .../handwired/promethium/keymaps/priyadi/keymap.c | 725 +++++++++++++++++++++ .../handwired/promethium/keymaps/priyadi/readme.md | 0 keyboards/handwired/promethium/keymaps/readme.md | 22 + keyboards/handwired/promethium/promethium.c | 6 + keyboards/handwired/promethium/promethium.h | 99 +++ keyboards/handwired/promethium/readme.md | 12 + keyboards/handwired/promethium/rgbsps.c | 24 + keyboards/handwired/promethium/rgbsps.h | 4 + keyboards/handwired/promethium/rules.mk | 75 +++ 14 files changed, 1182 insertions(+) create mode 100644 keyboards/handwired/promethium/Makefile create mode 100644 keyboards/handwired/promethium/config.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/Makefile create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/config.h create mode 100755 keyboards/handwired/promethium/keymaps/priyadi/flash.sh create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/keymap.c create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/readme.md create mode 100644 keyboards/handwired/promethium/keymaps/readme.md create mode 100644 keyboards/handwired/promethium/promethium.c create mode 100644 keyboards/handwired/promethium/promethium.h create mode 100644 keyboards/handwired/promethium/readme.md create mode 100644 keyboards/handwired/promethium/rgbsps.c create mode 100644 keyboards/handwired/promethium/rgbsps.h create mode 100644 keyboards/handwired/promethium/rules.mk diff --git a/keyboards/handwired/promethium/Makefile b/keyboards/handwired/promethium/Makefile new file mode 100644 index 0000000000..191c6bb664 --- /dev/null +++ b/keyboards/handwired/promethium/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h new file mode 100644 index 0000000000..5a2afe6abd --- /dev/null +++ b/keyboards/handwired/promethium/config.h @@ -0,0 +1,164 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6660 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Priyadi +#define PRODUCT Promethium Keyboard +#define DESCRIPTION Promethium Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +/* default pin-out */ +#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 } +#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* PS/2 mouse */ +#ifdef PS2_USE_BUSYWAIT +# define PS2_CLOCK_PORT PORTD +# define PS2_CLOCK_PIN PIND +# define PS2_CLOCK_DDR DDRD +# define PS2_CLOCK_BIT 1 +# define PS2_DATA_PORT PORTD +# define PS2_DATA_PIN PIND +# define PS2_DATA_DDR DDRD +# define PS2_DATA_BIT 2 +#endif + +/* PS/2 mouse interrupt version */ +#ifdef PS2_USE_INT +/* uses INT1 for clock line(ATMega32U4) */ +#define PS2_CLOCK_PORT PORTD +#define PS2_CLOCK_PIN PIND +#define PS2_CLOCK_DDR DDRD +#define PS2_CLOCK_BIT 3 +#define PS2_DATA_PORT PORTD +#define PS2_DATA_PIN PIND +#define PS2_DATA_DDR DDRD +#define PS2_DATA_BIT 2 + +#define PS2_INT_INIT() do { \ + EICRA |= ((1< | ( | ) | ' | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | _ | + | { | } | [ | ] | " | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_PUNC] = KEYMAP( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV , + XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Num + * ,-----------------------------------------------------------------------------------. + * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | x | | | 0 | , | . | + | - | + * `-----------------------------------------------------------------------------------' + */ +[_NUM] = KEYMAP( + KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT, + KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR, + _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS +), + +/* Func + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F9 | F10 | F11 | F12 | | | | Home | End | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC] = KEYMAP( + XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, + XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, + _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Emoji + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_EMOJI] = KEYMAP( + X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), + X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), + X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), + X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK) +), + +/* GUI + * ,-----------------------------------------------------------------------------------. + * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Win | | Prev | Play | Next | | | | | | |Colmak| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | OSX | | | | | BL- | BL+ | | | | |Workmn| + * `-----------------------------------------------------------------------------------' + */ +[_GUI] = KEYMAP( + _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______, + LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY, + WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK, + OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN +), + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_workman[][2] = SONG(DVORAK_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2)); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #ifdef AUDIO_ENABLE + // faux clicky + if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); + #endif + + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case WORKMAN: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_workman, false, 0); + #endif + persistant_default_layer_set(1UL<<_WORKMAN); + } + return false; + break; + + + + case PUNC: + if (record->event.pressed) { + layer_on(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_GUI)) { + led_layer_gui(); + } else { + led_layer_punc();; + } + } else { + layer_off(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_EMOJI)) { + led_layer_emoji(); + } else { + led_layer_normal();; + } + } + return false; + break; + case EMOJI: + if (record->event.pressed) { + layer_on(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_GUI)) { + led_layer_gui(); + } else { + led_layer_emoji();; + } + } else { + layer_off(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_PUNC)) { + led_layer_punc(); + } else { + led_layer_normal();; + } + } + return false; + break; + case NUM: + if (record->event.pressed) { + layer_on(_NUM); + led_layer_num(); + } else { + layer_off(_NUM); + led_layer_normal(); + } + return false; + break; + case FUNC: + if (record->event.pressed) { + layer_on(_FUNC); + led_layer_func(); + } else { + layer_off(_FUNC); + led_layer_normal(); + } + return false; + break; + + + case LINUX: + set_unicode_input_mode(UC_LNX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_linux, false, 0); + #endif + return false; + break; + case WIN: + set_unicode_input_mode(UC_WINC); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_windows, false, 0); + #endif + return false; + break; + case OSX: + set_unicode_input_mode(UC_OSX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_osx, false, 0); + #endif + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + set_unicode_input_mode(UC_LNX); + led_init(); +} + +// void init_rgblight(void) { +// for (uint8_t i = 0; i < RGBLED_NUM; i++) { +// led[i].r = 255; +// led[i].g = 85; +// led[i].b = 0; +// } +// ws2812_setleds(led, RGBLED_NUM); +// } + + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +#endif \ No newline at end of file diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/handwired/promethium/keymaps/readme.md b/keyboards/handwired/promethium/keymaps/readme.md new file mode 100644 index 0000000000..527691389e --- /dev/null +++ b/keyboards/handwired/promethium/keymaps/readme.md @@ -0,0 +1,22 @@ +# How to add your own keymap + +Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`: + + _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author] + +\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements + +and contain the following files: + +* `keymap.c` +* `readme.md` *recommended* +* `config.h` *optional*, found automatically when compiling +* `Makefile` *optional*, found automatically when compling + +When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format: + + * **folder_name** description + +# List of Promethium keymaps + + diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c new file mode 100644 index 0000000000..a0035cce1a --- /dev/null +++ b/keyboards/handwired/promethium/promethium.c @@ -0,0 +1,6 @@ +#include "promethium.h" + +void matrix_init_kb(void) { + + matrix_init_user(); +} \ No newline at end of file diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h new file mode 100644 index 0000000000..fb0dc16830 --- /dev/null +++ b/keyboards/handwired/promethium/promethium.h @@ -0,0 +1,99 @@ +#ifndef PROMETHIUM_H +#define PROMETHIUM_H + +#include "quantum.h" + +#define KEYMAP( \ + k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \ + k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \ +) \ +{ \ + {k11, k12, k13, k14, k15, k16}, \ + {k21, k22, k23, k24, k25, k26}, \ + {k31, k32, k33, k34, k35, k36}, \ + {k41, k42, k43, k44, k45, k46}, \ + {k17, k18, k19, k1a, k1b, k1c}, \ + {k27, k28, k29, k2a, k2b, k2c}, \ + {k37, k38, k39, k3a, k3b, k3c}, \ + {k47, k48, k49, k4a, k4b, k4c} \ +} + +enum led_sequence { + LED_IND_EMOJI, + LED_IND_NUM, + LED_IND_FUNC, + + LED_IND_BATTERY, + LED_IND_USB, + LED_IND_BLUETOOTH, + + LED_TAB, + LED_ESC, + LED_LSFT, + LED_LCTL, + + LED_LGUI, + LED_Z, + LED_A, + LED_Q, + + LED_W, + LED_S, + LED_X, + LED_LALT, + + LED_PUNC, + LED_C, + LED_D, + LED_E, + + LED_R, + LED_F, + LED_V, + LED_NUM, + + LED_LSPC, + LED_B, + LED_G, + LED_T, + + LED_TRACKPOINT1, + LED_TRACKPOINT2, + LED_TRACKPOINT3, + + LED_RSPC, + LED_N, + LED_HH, + LED_Y, + + LED_U, + LED_J, + LED_M, + LED_FUNC, + + LED_EMOJI, + LED_COMM, + LED_K, + LED_I, + + LED_O, + LED_L, + LED_DOT, + LED_RALT, + + LED_RGUI, + LED_SLSH, + LED_SCLN, + LED_P, + + LED_BKSP, + LED_ENT, + LED_RSFT, + LED_RCTL +}; + +#endif + + diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md new file mode 100644 index 0000000000..64e2c3a16a --- /dev/null +++ b/keyboards/handwired/promethium/readme.md @@ -0,0 +1,12 @@ +Promethium Keyboard Firmware +============================ +A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller. + +Features: + +* Single piece split form factor +* Vertical staggered +* Trackpoint +* Bluetooth LE *TBD* +* Battery +* Per switch RGB LED \ No newline at end of file diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c new file mode 100644 index 0000000000..ea922ec3fd --- /dev/null +++ b/keyboards/handwired/promethium/rgbsps.c @@ -0,0 +1,24 @@ +#include "light_ws2812.h" +#include "rgbsps.h" + +struct cRGB led[RGBSPS_NUM]; + +void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) { + led[index].r = r; + led[index].g = g; + led[index].b = b; +} + +void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) { + for (uint16_t i = 0; i < RGBSPS_NUM; i++) { + rgbsps_set(i, r, g, b); + } +} + +void rgbsps_turnoff(void) { + rgbsps_setall(0, 0, 0); +} + +void rgbsps_send(void) { + ws2812_setleds(led, RGBSPS_NUM); +} \ No newline at end of file diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h new file mode 100644 index 0000000000..6da197f75d --- /dev/null +++ b/keyboards/handwired/promethium/rgbsps.h @@ -0,0 +1,4 @@ +void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b); +void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b); +void rgbsps_turnoff(void); +void rgbsps_send(void); \ No newline at end of file diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk new file mode 100644 index 0000000000..835b13c4f3 --- /dev/null +++ b/keyboards/handwired/promethium/rules.mk @@ -0,0 +1,75 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 8000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +UNICODEMAP_ENABLE = yes +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +PS2_MOUSE_ENABLE ?= yes +PS2_USE_INT ?= yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +include $(TMK_DIR)/protocol.mk +SRC += $(QUANTUM_DIR)/light_ws2812.c +SRC += rgbsps.c \ No newline at end of file -- cgit v1.2.3 From 9a071f051ca9dffdf64b68ea59b2424e37bc51e7 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:24:53 +0700 Subject: Make PS2 init delay configurable. Some devices are not fully powered up after 1s. --- tmk_core/protocol/ps2_mouse.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index c3e8b3c1c3..82f6966e8e 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -26,6 +26,9 @@ along with this program. If not, see . #include "print.h" #include "debug.h" +#ifndef PS2_INIT_DELAY +#define PS2_INIT_DELAY 1000 +#endif static report_mouse_t mouse_report = {}; @@ -39,7 +42,7 @@ uint8_t ps2_mouse_init(void) { ps2_host_init(); - _delay_ms(1000); // wait for powering up + _delay_ms(PS2_INIT_DELAY); // wait for powering up // send Reset rcv = ps2_host_send(0xFF); -- cgit v1.2.3 From b94e5b2aa6636326b2eaa75a2c562ea074e1535a Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:44:50 +0700 Subject: change init delay to 2000ms --- keyboards/handwired/promethium/promethium.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h index fb0dc16830..8f2a8c3be2 100644 --- a/keyboards/handwired/promethium/promethium.h +++ b/keyboards/handwired/promethium/promethium.h @@ -3,6 +3,8 @@ #include "quantum.h" +#define PS2_INIT_DELAY 2000 + #define KEYMAP( \ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ -- cgit v1.2.3 From 6313ec7ef960ad76182020f031cd09803d7a7d51 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:46:05 +0700 Subject: protocols.mk is already included in latest QMK --- keyboards/handwired/promethium/rules.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk index 835b13c4f3..0842780cce 100644 --- a/keyboards/handwired/promethium/rules.mk +++ b/keyboards/handwired/promethium/rules.mk @@ -70,6 +70,5 @@ PS2_USE_INT ?= yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -include $(TMK_DIR)/protocol.mk SRC += $(QUANTUM_DIR)/light_ws2812.c SRC += rgbsps.c \ No newline at end of file -- cgit v1.2.3 From 2cf9b9375878d3810fbdfe0c215ee4dcb379a163 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:47:03 +0700 Subject: remove ifdef on chip type --- keyboards/handwired/promethium/config.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index 5a2afe6abd..473af67d34 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -116,7 +116,6 @@ along with this program. If not, see . /* PS/2 mouse USART version */ #ifdef PS2_USE_USART -#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) /* XCK for clock line and RXD for data line */ #define PS2_CLOCK_PORT PORTD #define PS2_CLOCK_PIN PIND @@ -158,7 +157,6 @@ along with this program. If not, see . #define PS2_USART_ERROR (UCSR1A & ((1< Date: Sat, 26 Nov 2016 13:55:41 +0700 Subject: PS2 pins configuration belongs to each keyboards config.h Each keyboard might have different pin configuration. And keeping this here will trigger redefinition warning on keyboards that have PS2 defines. --- quantum/config_common.h | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) diff --git a/quantum/config_common.h b/quantum/config_common.h index 6b525fe1c6..21960f1a05 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -78,49 +78,3 @@ # error "USART configuration is needed." # endif #endif - -/* - * PS/2 Interrupt configuration - */ -#ifdef PS2_USE_INT -/* uses INT1 for clock line(ATMega32U4) */ -#define PS2_CLOCK_PORT PORTD -#define PS2_CLOCK_PIN PIND -#define PS2_CLOCK_DDR DDRD -#define PS2_CLOCK_BIT 1 - -#define PS2_DATA_PORT PORTD -#define PS2_DATA_PIN PIND -#define PS2_DATA_DDR DDRD -#define PS2_DATA_BIT 0 - -#define PS2_INT_INIT() do { \ - EICRA |= ((1< Date: Sat, 26 Nov 2016 14:02:38 +0700 Subject: Fix unterminated ifndef --- quantum/config_common.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/config_common.h b/quantum/config_common.h index 21960f1a05..4d3939dae1 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -78,3 +78,5 @@ # error "USART configuration is needed." # endif #endif + +#endif \ No newline at end of file -- cgit v1.2.3 From f837406ace5a3072e98f0bd0e3f4c84704762195 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 14:23:55 +0700 Subject: A few addition to PS2 documentation. --- readme.md | 160 ++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 125 insertions(+), 35 deletions(-) diff --git a/readme.md b/readme.md index 0157b90724..3eb67882ab 100644 --- a/readme.md +++ b/readme.md @@ -1160,41 +1160,131 @@ Please note the USB port can only supply a limited amount of power to the keyboa ## PS/2 Mouse Support Its possible to hook up a PS/2 mouse (for example touchpads or trackpoints) to your keyboard as a composite device. -In order to do this you must first enable the option in your Makefile. - - PS2_MOUSE_ENABLE = yes - -Then, decide whether to use interrupts (better if your microcontroller supports them) or busywait, and enable the relevant option. - - PS2_USE_INT = yes - // PS2_USE_BUSYWAIT = yes - -If you're using a teensy and have hooked up the clock on your PS/2 device to D1 and the data to D0, you're all set. -Otherwise, you will need to update the following defines in your `config.h`: - - #define PS2_CLOCK_PORT PORTD - #define PS2_CLOCK_PIN PIND - #define PS2_CLOCK_DDR DDRD - #define PS2_CLOCK_BIT 1 - - #define PS2_DATA_PORT PORTD - #define PS2_DATA_PIN PIND - #define PS2_DATA_DDR DDRD - #define PS2_DATA_BIT 0 - -And with `PS2_USE_INT` also define these macros: - - #define PS2_INT_INIT() do { \ - EICRA |= ((1< Date: Sat, 26 Nov 2016 15:26:02 +0700 Subject: add macro error when a required define is missing --- quantum/config_common.h | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/quantum/config_common.h b/quantum/config_common.h index 4d3939dae1..0a2dba78ff 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -79,4 +79,122 @@ # endif #endif +#ifdef PS2_USE_BUSYWAIT +# ifndef PS2_CLOCK_PORT +# error "PS2_CLOCK_PORT has to be defined" +# endif +# ifndef PS2_CLOCK_PIN +# error "PS2_CLOCK_PIN has to be defined" +# endif +# ifndef PS2_CLOCK_DDR +# error "PS2_CLOCK_DDR has to be defined" +# endif +# ifndef PS2_CLOCK_BIT +# error "PS2_CLOCK_BIT has to be defined" +# endif +# ifndef PS2_DATA_PORT +# error "PS2_DATA_PORT has to be defined" +# endif +# ifndef PS2_DATA_PIN +# error "PS2_DATA_PIN has to be defined" +# endif +# ifndef PS2_DATA_DDR +# error "PS2_DATA_DDR has to be defined" +# endif +# ifndef PS2_DATA_BIT +# error "PS2_DATA_BIT has to be defined" +# endif +#endif + +#ifdef PS2_USE_INT +# ifndef PS2_CLOCK_PORT +# error "PS2_CLOCK_PORT has to be defined" +# endif +# ifndef PS2_CLOCK_PIN +# error "PS2_CLOCK_PIN has to be defined" +# endif +# ifndef PS2_CLOCK_DDR +# error "PS2_CLOCK_DDR has to be defined" +# endif +# ifndef PS2_CLOCK_BIT +# error "PS2_CLOCK_BIT has to be defined" +# endif +# ifndef PS2_DATA_PORT +# error "PS2_DATA_PORT has to be defined" +# endif +# ifndef PS2_DATA_PIN +# error "PS2_DATA_PIN has to be defined" +# endif +# ifndef PS2_DATA_DDR +# error "PS2_DATA_DDR has to be defined" +# endif +# ifndef PS2_DATA_BIT +# error "PS2_DATA_BIT has to be defined" +# endif +# ifndef PS2_INT_INIT +# error "PS2_INT_INIT has to be defined" +# endif +# ifndef PS2_INT_ON +# error "PS2_INT_ON has to be defined" +# endif +# ifndef PS2_INT_OFF +# error "PS2_INT_OFF has to be defined" +# endif +# ifndef PS2_INT_VECT +# error "PS2_INT_VECT has to be defined" +# endif +#endif + +#ifdef PS2_USE_USART +# ifndef PS2_CLOCK_PORT +# error "PS2_CLOCK_PORT has to be defined" +# endif +# ifndef PS2_CLOCK_PIN +# error "PS2_CLOCK_PIN has to be defined" +# endif +# ifndef PS2_CLOCK_DDR +# error "PS2_CLOCK_DDR has to be defined" +# endif +# ifndef PS2_CLOCK_BIT +# error "PS2_CLOCK_BIT has to be defined" +# endif +# ifndef PS2_DATA_PORT +# error "PS2_DATA_PORT has to be defined" +# endif +# ifndef PS2_DATA_PIN +# error "PS2_DATA_PIN has to be defined" +# endif +# ifndef PS2_DATA_DDR +# error "PS2_DATA_DDR has to be defined" +# endif +# ifndef PS2_DATA_BIT +# error "PS2_DATA_BIT has to be defined" +# endif +# ifndef PS2_USART_INIT +# error "PS2_USART_INIT has to be defined" +# endif +# ifndef PS2_USART_RX_INT_ON +# error "PS2_USART_RX_INT_ON has to be defined" +# endif +# ifndef PS2_USART_RX_POLL_ON +# error "PS2_USART_RX_POLL_ON has to be defined" +# endif +# ifndef PS2_USART_OFF +# error "PS2_USART_OFF has to be defined" +# endif +# ifndef PS2_USART_RX_READY +# error "PS2_USART_RX_READY has to be defined" +# endif +# ifndef PS2_USART_RX_DATA +# error "PS2_USART_RX_DATA has to be defined" +# endif +# ifndef PS2_USART_ERROR +# error "PS2_USART_ERROR has to be defined" +# endif +# ifndef PS2_USART_RX_VECT +# error "PS2_USART_RX_VECT has to be defined" +# endif +#endif + + #endif \ No newline at end of file -- cgit v1.2.3 From f2214ce1cb6cfe7a0efabe870a2c00fb8451ee80 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 15:57:48 +0700 Subject: remove define checks. didn't work because of include ordering. --- quantum/config_common.h | 118 ------------------------------------------------ 1 file changed, 118 deletions(-) diff --git a/quantum/config_common.h b/quantum/config_common.h index 0a2dba78ff..4d3939dae1 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -79,122 +79,4 @@ # endif #endif -#ifdef PS2_USE_BUSYWAIT -# ifndef PS2_CLOCK_PORT -# error "PS2_CLOCK_PORT has to be defined" -# endif -# ifndef PS2_CLOCK_PIN -# error "PS2_CLOCK_PIN has to be defined" -# endif -# ifndef PS2_CLOCK_DDR -# error "PS2_CLOCK_DDR has to be defined" -# endif -# ifndef PS2_CLOCK_BIT -# error "PS2_CLOCK_BIT has to be defined" -# endif -# ifndef PS2_DATA_PORT -# error "PS2_DATA_PORT has to be defined" -# endif -# ifndef PS2_DATA_PIN -# error "PS2_DATA_PIN has to be defined" -# endif -# ifndef PS2_DATA_DDR -# error "PS2_DATA_DDR has to be defined" -# endif -# ifndef PS2_DATA_BIT -# error "PS2_DATA_BIT has to be defined" -# endif -#endif - -#ifdef PS2_USE_INT -# ifndef PS2_CLOCK_PORT -# error "PS2_CLOCK_PORT has to be defined" -# endif -# ifndef PS2_CLOCK_PIN -# error "PS2_CLOCK_PIN has to be defined" -# endif -# ifndef PS2_CLOCK_DDR -# error "PS2_CLOCK_DDR has to be defined" -# endif -# ifndef PS2_CLOCK_BIT -# error "PS2_CLOCK_BIT has to be defined" -# endif -# ifndef PS2_DATA_PORT -# error "PS2_DATA_PORT has to be defined" -# endif -# ifndef PS2_DATA_PIN -# error "PS2_DATA_PIN has to be defined" -# endif -# ifndef PS2_DATA_DDR -# error "PS2_DATA_DDR has to be defined" -# endif -# ifndef PS2_DATA_BIT -# error "PS2_DATA_BIT has to be defined" -# endif -# ifndef PS2_INT_INIT -# error "PS2_INT_INIT has to be defined" -# endif -# ifndef PS2_INT_ON -# error "PS2_INT_ON has to be defined" -# endif -# ifndef PS2_INT_OFF -# error "PS2_INT_OFF has to be defined" -# endif -# ifndef PS2_INT_VECT -# error "PS2_INT_VECT has to be defined" -# endif -#endif - -#ifdef PS2_USE_USART -# ifndef PS2_CLOCK_PORT -# error "PS2_CLOCK_PORT has to be defined" -# endif -# ifndef PS2_CLOCK_PIN -# error "PS2_CLOCK_PIN has to be defined" -# endif -# ifndef PS2_CLOCK_DDR -# error "PS2_CLOCK_DDR has to be defined" -# endif -# ifndef PS2_CLOCK_BIT -# error "PS2_CLOCK_BIT has to be defined" -# endif -# ifndef PS2_DATA_PORT -# error "PS2_DATA_PORT has to be defined" -# endif -# ifndef PS2_DATA_PIN -# error "PS2_DATA_PIN has to be defined" -# endif -# ifndef PS2_DATA_DDR -# error "PS2_DATA_DDR has to be defined" -# endif -# ifndef PS2_DATA_BIT -# error "PS2_DATA_BIT has to be defined" -# endif -# ifndef PS2_USART_INIT -# error "PS2_USART_INIT has to be defined" -# endif -# ifndef PS2_USART_RX_INT_ON -# error "PS2_USART_RX_INT_ON has to be defined" -# endif -# ifndef PS2_USART_RX_POLL_ON -# error "PS2_USART_RX_POLL_ON has to be defined" -# endif -# ifndef PS2_USART_OFF -# error "PS2_USART_OFF has to be defined" -# endif -# ifndef PS2_USART_RX_READY -# error "PS2_USART_RX_READY has to be defined" -# endif -# ifndef PS2_USART_RX_DATA -# error "PS2_USART_RX_DATA has to be defined" -# endif -# ifndef PS2_USART_ERROR -# error "PS2_USART_ERROR has to be defined" -# endif -# ifndef PS2_USART_RX_VECT -# error "PS2_USART_RX_VECT has to be defined" -# endif -#endif - - #endif \ No newline at end of file -- cgit v1.2.3 From 8ee389c9b6e6757c228534b095e609d5a9501102 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:11:40 +0700 Subject: My Promethium keyboard firmware --- keyboards/handwired/promethium/Makefile | 3 + keyboards/handwired/promethium/config.h | 164 +++++ .../handwired/promethium/keymaps/priyadi/Makefile | 28 + .../handwired/promethium/keymaps/priyadi/config.h | 17 + .../handwired/promethium/keymaps/priyadi/flash.sh | 3 + .../handwired/promethium/keymaps/priyadi/keymap.c | 725 +++++++++++++++++++++ .../handwired/promethium/keymaps/priyadi/readme.md | 0 keyboards/handwired/promethium/keymaps/readme.md | 22 + keyboards/handwired/promethium/promethium.c | 6 + keyboards/handwired/promethium/promethium.h | 99 +++ keyboards/handwired/promethium/readme.md | 12 + keyboards/handwired/promethium/rgbsps.c | 24 + keyboards/handwired/promethium/rgbsps.h | 4 + keyboards/handwired/promethium/rules.mk | 75 +++ 14 files changed, 1182 insertions(+) create mode 100644 keyboards/handwired/promethium/Makefile create mode 100644 keyboards/handwired/promethium/config.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/Makefile create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/config.h create mode 100755 keyboards/handwired/promethium/keymaps/priyadi/flash.sh create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/keymap.c create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/readme.md create mode 100644 keyboards/handwired/promethium/keymaps/readme.md create mode 100644 keyboards/handwired/promethium/promethium.c create mode 100644 keyboards/handwired/promethium/promethium.h create mode 100644 keyboards/handwired/promethium/readme.md create mode 100644 keyboards/handwired/promethium/rgbsps.c create mode 100644 keyboards/handwired/promethium/rgbsps.h create mode 100644 keyboards/handwired/promethium/rules.mk diff --git a/keyboards/handwired/promethium/Makefile b/keyboards/handwired/promethium/Makefile new file mode 100644 index 0000000000..191c6bb664 --- /dev/null +++ b/keyboards/handwired/promethium/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h new file mode 100644 index 0000000000..5a2afe6abd --- /dev/null +++ b/keyboards/handwired/promethium/config.h @@ -0,0 +1,164 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6660 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Priyadi +#define PRODUCT Promethium Keyboard +#define DESCRIPTION Promethium Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +/* default pin-out */ +#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 } +#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* PS/2 mouse */ +#ifdef PS2_USE_BUSYWAIT +# define PS2_CLOCK_PORT PORTD +# define PS2_CLOCK_PIN PIND +# define PS2_CLOCK_DDR DDRD +# define PS2_CLOCK_BIT 1 +# define PS2_DATA_PORT PORTD +# define PS2_DATA_PIN PIND +# define PS2_DATA_DDR DDRD +# define PS2_DATA_BIT 2 +#endif + +/* PS/2 mouse interrupt version */ +#ifdef PS2_USE_INT +/* uses INT1 for clock line(ATMega32U4) */ +#define PS2_CLOCK_PORT PORTD +#define PS2_CLOCK_PIN PIND +#define PS2_CLOCK_DDR DDRD +#define PS2_CLOCK_BIT 3 +#define PS2_DATA_PORT PORTD +#define PS2_DATA_PIN PIND +#define PS2_DATA_DDR DDRD +#define PS2_DATA_BIT 2 + +#define PS2_INT_INIT() do { \ + EICRA |= ((1< | ( | ) | ' | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | _ | + | { | } | [ | ] | " | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_PUNC] = KEYMAP( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV , + XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Num + * ,-----------------------------------------------------------------------------------. + * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | x | | | 0 | , | . | + | - | + * `-----------------------------------------------------------------------------------' + */ +[_NUM] = KEYMAP( + KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT, + KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR, + _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS +), + +/* Func + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F9 | F10 | F11 | F12 | | | | Home | End | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC] = KEYMAP( + XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, + XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, + _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Emoji + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_EMOJI] = KEYMAP( + X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), + X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), + X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), + X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK) +), + +/* GUI + * ,-----------------------------------------------------------------------------------. + * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Win | | Prev | Play | Next | | | | | | |Colmak| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | OSX | | | | | BL- | BL+ | | | | |Workmn| + * `-----------------------------------------------------------------------------------' + */ +[_GUI] = KEYMAP( + _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______, + LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY, + WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK, + OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN +), + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_workman[][2] = SONG(DVORAK_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2)); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #ifdef AUDIO_ENABLE + // faux clicky + if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); + #endif + + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case WORKMAN: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_workman, false, 0); + #endif + persistant_default_layer_set(1UL<<_WORKMAN); + } + return false; + break; + + + + case PUNC: + if (record->event.pressed) { + layer_on(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_GUI)) { + led_layer_gui(); + } else { + led_layer_punc();; + } + } else { + layer_off(_PUNC); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_EMOJI)) { + led_layer_emoji(); + } else { + led_layer_normal();; + } + } + return false; + break; + case EMOJI: + if (record->event.pressed) { + layer_on(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_GUI)) { + led_layer_gui(); + } else { + led_layer_emoji();; + } + } else { + layer_off(_EMOJI); + update_tri_layer(_PUNC, _EMOJI, _GUI); + if (IS_LAYER_ON(_PUNC)) { + led_layer_punc(); + } else { + led_layer_normal();; + } + } + return false; + break; + case NUM: + if (record->event.pressed) { + layer_on(_NUM); + led_layer_num(); + } else { + layer_off(_NUM); + led_layer_normal(); + } + return false; + break; + case FUNC: + if (record->event.pressed) { + layer_on(_FUNC); + led_layer_func(); + } else { + layer_off(_FUNC); + led_layer_normal(); + } + return false; + break; + + + case LINUX: + set_unicode_input_mode(UC_LNX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_linux, false, 0); + #endif + return false; + break; + case WIN: + set_unicode_input_mode(UC_WINC); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_windows, false, 0); + #endif + return false; + break; + case OSX: + set_unicode_input_mode(UC_OSX); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_osx, false, 0); + #endif + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + set_unicode_input_mode(UC_LNX); + led_init(); +} + +// void init_rgblight(void) { +// for (uint8_t i = 0; i < RGBLED_NUM; i++) { +// led[i].r = 255; +// led[i].g = 85; +// led[i].b = 0; +// } +// ws2812_setleds(led, RGBLED_NUM); +// } + + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +#endif \ No newline at end of file diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/handwired/promethium/keymaps/readme.md b/keyboards/handwired/promethium/keymaps/readme.md new file mode 100644 index 0000000000..527691389e --- /dev/null +++ b/keyboards/handwired/promethium/keymaps/readme.md @@ -0,0 +1,22 @@ +# How to add your own keymap + +Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`: + + _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author] + +\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements + +and contain the following files: + +* `keymap.c` +* `readme.md` *recommended* +* `config.h` *optional*, found automatically when compiling +* `Makefile` *optional*, found automatically when compling + +When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format: + + * **folder_name** description + +# List of Promethium keymaps + + diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c new file mode 100644 index 0000000000..a0035cce1a --- /dev/null +++ b/keyboards/handwired/promethium/promethium.c @@ -0,0 +1,6 @@ +#include "promethium.h" + +void matrix_init_kb(void) { + + matrix_init_user(); +} \ No newline at end of file diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h new file mode 100644 index 0000000000..fb0dc16830 --- /dev/null +++ b/keyboards/handwired/promethium/promethium.h @@ -0,0 +1,99 @@ +#ifndef PROMETHIUM_H +#define PROMETHIUM_H + +#include "quantum.h" + +#define KEYMAP( \ + k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \ + k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \ +) \ +{ \ + {k11, k12, k13, k14, k15, k16}, \ + {k21, k22, k23, k24, k25, k26}, \ + {k31, k32, k33, k34, k35, k36}, \ + {k41, k42, k43, k44, k45, k46}, \ + {k17, k18, k19, k1a, k1b, k1c}, \ + {k27, k28, k29, k2a, k2b, k2c}, \ + {k37, k38, k39, k3a, k3b, k3c}, \ + {k47, k48, k49, k4a, k4b, k4c} \ +} + +enum led_sequence { + LED_IND_EMOJI, + LED_IND_NUM, + LED_IND_FUNC, + + LED_IND_BATTERY, + LED_IND_USB, + LED_IND_BLUETOOTH, + + LED_TAB, + LED_ESC, + LED_LSFT, + LED_LCTL, + + LED_LGUI, + LED_Z, + LED_A, + LED_Q, + + LED_W, + LED_S, + LED_X, + LED_LALT, + + LED_PUNC, + LED_C, + LED_D, + LED_E, + + LED_R, + LED_F, + LED_V, + LED_NUM, + + LED_LSPC, + LED_B, + LED_G, + LED_T, + + LED_TRACKPOINT1, + LED_TRACKPOINT2, + LED_TRACKPOINT3, + + LED_RSPC, + LED_N, + LED_HH, + LED_Y, + + LED_U, + LED_J, + LED_M, + LED_FUNC, + + LED_EMOJI, + LED_COMM, + LED_K, + LED_I, + + LED_O, + LED_L, + LED_DOT, + LED_RALT, + + LED_RGUI, + LED_SLSH, + LED_SCLN, + LED_P, + + LED_BKSP, + LED_ENT, + LED_RSFT, + LED_RCTL +}; + +#endif + + diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md new file mode 100644 index 0000000000..64e2c3a16a --- /dev/null +++ b/keyboards/handwired/promethium/readme.md @@ -0,0 +1,12 @@ +Promethium Keyboard Firmware +============================ +A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller. + +Features: + +* Single piece split form factor +* Vertical staggered +* Trackpoint +* Bluetooth LE *TBD* +* Battery +* Per switch RGB LED \ No newline at end of file diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c new file mode 100644 index 0000000000..ea922ec3fd --- /dev/null +++ b/keyboards/handwired/promethium/rgbsps.c @@ -0,0 +1,24 @@ +#include "light_ws2812.h" +#include "rgbsps.h" + +struct cRGB led[RGBSPS_NUM]; + +void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) { + led[index].r = r; + led[index].g = g; + led[index].b = b; +} + +void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) { + for (uint16_t i = 0; i < RGBSPS_NUM; i++) { + rgbsps_set(i, r, g, b); + } +} + +void rgbsps_turnoff(void) { + rgbsps_setall(0, 0, 0); +} + +void rgbsps_send(void) { + ws2812_setleds(led, RGBSPS_NUM); +} \ No newline at end of file diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h new file mode 100644 index 0000000000..6da197f75d --- /dev/null +++ b/keyboards/handwired/promethium/rgbsps.h @@ -0,0 +1,4 @@ +void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b); +void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b); +void rgbsps_turnoff(void); +void rgbsps_send(void); \ No newline at end of file diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk new file mode 100644 index 0000000000..835b13c4f3 --- /dev/null +++ b/keyboards/handwired/promethium/rules.mk @@ -0,0 +1,75 @@ + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 8000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +UNICODEMAP_ENABLE = yes +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +PS2_MOUSE_ENABLE ?= yes +PS2_USE_INT ?= yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +include $(TMK_DIR)/protocol.mk +SRC += $(QUANTUM_DIR)/light_ws2812.c +SRC += rgbsps.c \ No newline at end of file -- cgit v1.2.3 From b5019bef055d3b3a90b8b42268b9ad874600782b Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:44:50 +0700 Subject: change init delay to 2000ms --- keyboards/handwired/promethium/promethium.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h index fb0dc16830..8f2a8c3be2 100644 --- a/keyboards/handwired/promethium/promethium.h +++ b/keyboards/handwired/promethium/promethium.h @@ -3,6 +3,8 @@ #include "quantum.h" +#define PS2_INIT_DELAY 2000 + #define KEYMAP( \ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ -- cgit v1.2.3 From 7f3c9c6a395a921d2914fc5cac1ac8f9441c33eb Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:46:05 +0700 Subject: protocols.mk is already included in latest QMK --- keyboards/handwired/promethium/rules.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk index 835b13c4f3..0842780cce 100644 --- a/keyboards/handwired/promethium/rules.mk +++ b/keyboards/handwired/promethium/rules.mk @@ -70,6 +70,5 @@ PS2_USE_INT ?= yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -include $(TMK_DIR)/protocol.mk SRC += $(QUANTUM_DIR)/light_ws2812.c SRC += rgbsps.c \ No newline at end of file -- cgit v1.2.3 From 0f39ab52192c0e34f0aea5ff6bb1fa2ded427b6e Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 26 Nov 2016 13:47:03 +0700 Subject: remove ifdef on chip type --- keyboards/handwired/promethium/config.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index 5a2afe6abd..473af67d34 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -116,7 +116,6 @@ along with this program. If not, see . /* PS/2 mouse USART version */ #ifdef PS2_USE_USART -#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) /* XCK for clock line and RXD for data line */ #define PS2_CLOCK_PORT PORTD #define PS2_CLOCK_PIN PIND @@ -158,7 +157,6 @@ along with this program. If not, see . #define PS2_USART_ERROR (UCSR1A & ((1< Date: Sat, 26 Nov 2016 23:53:15 +0700 Subject: fix strict-prototypes warning --- quantum/process_keycode/process_unicode.h | 1 + 1 file changed, 1 insertion(+) diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 065eeb5f6a..f17cfa6cf2 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -22,6 +22,7 @@ void register_hex(uint16_t hex); bool process_unicode(uint16_t keycode, keyrecord_t *record); #ifdef UNICODEMAP_ENABLE +void unicode_map_input_error(void); bool process_unicode_map(uint16_t keycode, keyrecord_t *record); #endif -- cgit v1.2.3 From a182cbc0319d54122e12dfa48e782e8e122c7df6 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 27 Nov 2016 00:34:29 +0700 Subject: Update Unicode documentation --- readme.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 3eb67882ab..cd65e0e69e 100644 --- a/readme.md +++ b/readme.md @@ -911,7 +911,33 @@ In `quantum/keymap_extras/`, you'll see various language files - these work the ## Unicode support -You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout, see [this article](http://www.poynton.com/notes/misc/mac-unicode-hex-input.html) to learn more) - 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. +There are three Unicode keymap definition method available in QMK: + +### UNICODE_ENABLE + +Supports Unicode input up to 0xFFFF. The keycode function is `UC(n)` in +keymap file, where *n* is a 4 digit hexadecimal. + +### UNICODEMAP_ENABLE + +Supports Unicode up to 0xFFFFFFFF. You need to maintain a separate mapping +table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. +The keycode function is `X(n)` where *n* is the array index of the mapping +table. + +### UCIS_ENABLE + +TBD + +Unicode input in QMK works by inputing a sequence of characters to the OS, +sort of like macro. Unfortunately, each OS has different ideas on how Unicode is inputted. + +This is the current list of Unicode input method in QMK: + +* UC_OSX: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. +* UC_LNX: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. +* UC_WIN: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. +* UC_WINC: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. ## Backlight Breathing -- cgit v1.2.3 From 12c1314b024b0e24dc561d8f8816561a4ca8ff42 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 27 Nov 2016 00:40:31 +0700 Subject: update docs --- keyboards/handwired/promethium/readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md index 64e2c3a16a..e63d2f1add 100644 --- a/keyboards/handwired/promethium/readme.md +++ b/keyboards/handwired/promethium/readme.md @@ -5,8 +5,9 @@ A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE c Features: * Single piece split form factor -* Vertical staggered +* Columnar stagger * Trackpoint * Bluetooth LE *TBD* * Battery -* Per switch RGB LED \ No newline at end of file +* Per switch RGB LED +* Proximity sensor for energy conservation *TBD* \ No newline at end of file -- cgit v1.2.3 From 7edac212c8ed8442bf4207e70dc8194631b2bf27 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 26 Nov 2016 15:37:46 -0500 Subject: separated into api files/folder --- build_keyboard.mk | 8 ++ common.mk | 1 + keyboards/ergodox/keymaps/jack/keymap.c | 2 +- keyboards/ergodox/rules.mk | 1 - keyboards/planck/rules.mk | 1 + keyboards/preonic/keymaps/default/Makefile | 22 ---- keyboards/preonic/rules.mk | 3 +- quantum/api.c | 178 +++++++++++++++++++++++++ quantum/api.h | 59 +++++++++ quantum/api/api_sysex.c | 29 +++++ quantum/api/api_sysex.h | 10 ++ quantum/quantum.c | 6 +- quantum/quantum.h | 2 +- tmk_core/protocol/lufa/lufa.c | 203 +---------------------------- tmk_core/protocol/lufa/lufa.h | 61 +-------- 15 files changed, 303 insertions(+), 283 deletions(-) create mode 100644 quantum/api.c create mode 100644 quantum/api.h create mode 100644 quantum/api/api_sysex.c create mode 100644 quantum/api/api_sysex.h diff --git a/build_keyboard.mk b/build_keyboard.mk index 42f8f8ac7b..c1e5540039 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -131,6 +131,14 @@ ifndef CUSTOM_MATRIX SRC += $(QUANTUM_DIR)/matrix.c endif +ifeq ($(strip $(API_SYSEX_ENABLE)), yes) + OPT_DEFS += -DAPI_SYSEX_ENABLE + SRC += $(QUANTUM_DIR)/api/api_sysex.c + OPT_DEFS += -DAPI_ENABLE + SRC += $(QUANTUM_DIR)/api.c + MIDI_ENABLE=yes +endif + ifeq ($(strip $(MIDI_ENABLE)), yes) OPT_DEFS += -DMIDI_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c diff --git a/common.mk b/common.mk index 18751cd5ac..c4b9394a24 100644 --- a/common.mk +++ b/common.mk @@ -23,4 +23,5 @@ COMMON_VPATH += $(QUANTUM_PATH) COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras COMMON_VPATH += $(QUANTUM_PATH)/audio COMMON_VPATH += $(QUANTUM_PATH)/process_keycode +COMMON_VPATH += $(QUANTUM_PATH)/api COMMON_VPATH += $(SERIAL_PATH) \ No newline at end of file diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c index eb41f12127..9cb80c59d1 100644 --- a/keyboards/ergodox/keymaps/jack/keymap.c +++ b/keyboards/ergodox/keymaps/jack/keymap.c @@ -91,7 +91,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case 2: if (record->event.pressed) { // For resetting EEPROM - send_unicode_midi(0x0CA0); + api_send_unicode(0x0CA0); } break; } diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk index add64ec76f..2e501e81b2 100644 --- a/keyboards/ergodox/rules.mk +++ b/keyboards/ergodox/rules.mk @@ -24,6 +24,5 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ 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 -MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= yes # Unicode ONEHAND_ENABLE ?= yes # Allow swapping hands of keyboard diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk index 25db53a315..ccee972715 100644 --- a/keyboards/planck/rules.mk +++ b/keyboards/planck/rules.mk @@ -62,6 +62,7 @@ AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +API_SYSEX_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/Makefile b/keyboards/preonic/keymaps/default/Makefile index 581e08cd02..3d4659ceb9 100644 --- a/keyboards/preonic/keymaps/default/Makefile +++ b/keyboards/preonic/keymaps/default/Makefile @@ -1,25 +1,3 @@ - - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = yes # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - ifndef QUANTUM_DIR include ../../../../Makefile endif \ No newline at end of file diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk index d0f3a3a1c0..c4ce2aacca 100644 --- a/keyboards/preonic/rules.mk +++ b/keyboards/preonic/rules.mk @@ -53,7 +53,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= no # Console for debug(+400) COMMAND_ENABLE ?= yes # Commands for debug and configuration @@ -64,6 +64,7 @@ AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +API_SYSEX_ENABLE ?= yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/quantum/api.c b/quantum/api.c new file mode 100644 index 0000000000..4ca3b96762 --- /dev/null +++ b/quantum/api.c @@ -0,0 +1,178 @@ +#include "api.h" +#include "quantum.h" + +void dword_to_bytes(uint32_t dword, uint8_t * bytes) { + bytes[0] = (dword >> 24) & 0xFF; + bytes[1] = (dword >> 16) & 0xFF; + bytes[2] = (dword >> 8) & 0xFF; + bytes[3] = (dword >> 0) & 0xFF; +} + +uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) { + return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3]; +} + +__attribute__ ((weak)) +bool process_api_quantum(uint8_t length, uint8_t * data) { + return process_api_keyboard(length, data); +} + +__attribute__ ((weak)) +bool process_api_keyboard(uint8_t length, uint8_t * data) { + return process_api_user(length, data); +} + +__attribute__ ((weak)) +bool process_api_user(uint8_t length, uint8_t * data) { + return true; +} + +void process_api(uint16_t length, uint8_t * data) { + // SEND_STRING("\nRX: "); + // for (uint8_t i = 0; i < length; i++) { + // send_byte(data[i]); + // SEND_STRING(" "); + // } + if (!process_api_quantum(length, data)) + return; + + switch (data[0]) { + case MT_SET_DATA: + switch (data[1]) { + case DT_DEFAULT_LAYER: { + eeconfig_update_default_layer(data[2]); + default_layer_set((uint32_t)(data[2])); + break; + } + case DT_KEYMAP_OPTIONS: { + eeconfig_update_keymap(data[2]); + break; + } + case DT_RGBLIGHT: { + #ifdef RGBLIGHT_ENABLE + uint32_t rgblight = bytes_to_dword(data, 2); + rgblight_update_dword(rgblight); + #endif + break; + } + } + case MT_GET_DATA: + switch (data[1]) { + case DT_HANDSHAKE: { + MT_GET_DATA_ACK(DT_HANDSHAKE, NULL, 0); + break; + } + case DT_DEBUG: { + uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) }; + MT_GET_DATA_ACK(DT_DEBUG, debug_bytes, 1); + break; + } + case DT_DEFAULT_LAYER: { + uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) }; + MT_GET_DATA_ACK(DT_DEFAULT_LAYER, default_bytes, 1); + break; + } + case DT_CURRENT_LAYER: { + uint8_t layer_state_bytes[4]; + dword_to_bytes(layer_state, layer_state_bytes); + MT_GET_DATA_ACK(DT_CURRENT_LAYER, layer_state_bytes, 4); + break; + } + case DT_AUDIO: { + #ifdef AUDIO_ENABLE + uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) }; + MT_GET_DATA_ACK(DT_AUDIO, audio_bytes, 1); + #else + MT_GET_DATA_ACK(DT_AUDIO, NULL, 0); + #endif + break; + } + case DT_BACKLIGHT: { + #ifdef BACKLIGHT_ENABLE + uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) }; + MT_GET_DATA_ACK(DT_BACKLIGHT, backlight_bytes, 1); + #else + MT_GET_DATA_ACK(DT_BACKLIGHT, NULL, 0); + #endif + break; + } + case DT_RGBLIGHT: { + #ifdef RGBLIGHT_ENABLE + uint8_t rgblight_bytes[4]; + dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes); + MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4); + #else + MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0); + #endif + break; + } + case DT_KEYMAP_OPTIONS: { + uint8_t keymap_bytes[1] = { eeconfig_read_keymap() }; + MT_GET_DATA_ACK(DT_KEYMAP_OPTIONS, keymap_bytes, 1); + break; + } + case DT_KEYMAP_SIZE: { + uint8_t keymap_size[2] = {MATRIX_ROWS, MATRIX_COLS}; + MT_GET_DATA_ACK(DT_KEYMAP_SIZE, keymap_size, 2); + break; + } + case DT_KEYMAP: { + uint8_t keymap_data[MATRIX_ROWS * MATRIX_COLS * 4 + 3]; + keymap_data[0] = data[2]; + keymap_data[1] = MATRIX_ROWS; + keymap_data[2] = MATRIX_COLS; + for (int i = 0; i < MATRIX_ROWS; i++) { + for (int j = 0; j < MATRIX_COLS; j++) { + keymap_data[3 + (i*MATRIX_COLS*2) + (j*2)] = pgm_read_word(&keymaps[data[2]][i][j]) >> 8; + keymap_data[3 + (i*MATRIX_COLS*2) + (j*2) + 1] = pgm_read_word(&keymaps[data[2]][i][j]) & 0xFF; + } + } + MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, MATRIX_ROWS * MATRIX_COLS * 4 + 3); + // uint8_t keymap_data[5]; + // keymap_data[0] = data[2]; + // keymap_data[1] = data[3]; + // keymap_data[2] = data[4]; + // keymap_data[3] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) >> 8; + // keymap_data[4] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) & 0xFF; + + // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, 5); + break; + } + default: + break; + } + break; + case MT_SET_DATA_ACK: + case MT_GET_DATA_ACK: + break; + case MT_SEND_DATA: + break; + case MT_SEND_DATA_ACK: + break; + case MT_EXE_ACTION: + break; + case MT_EXE_ACTION_ACK: + break; + case MT_TYPE_ERROR: + break; + default: ; // command not recognised + SEND_BYTES(MT_TYPE_ERROR, DT_NONE, data, length); + break; + + // #ifdef RGBLIGHT_ENABLE + // case 0x27: ; // RGB LED functions + // switch (*data++) { + // case 0x00: ; // Update HSV + // rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]); + // break; + // case 0x01: ; // Update RGB + // break; + // case 0x02: ; // Update mode + // rgblight_mode(data[0]); + // break; + // } + // break; + // #endif + } + +} \ No newline at end of file diff --git a/quantum/api.h b/quantum/api.h new file mode 100644 index 0000000000..00dcdb8954 --- /dev/null +++ b/quantum/api.h @@ -0,0 +1,59 @@ +#ifndef _API_H_ +#define _API_H_ + +#include "lufa.h" + +enum MESSAGE_TYPE { + MT_GET_DATA = 0x10, // Get data from keyboard + MT_GET_DATA_ACK = 0x11, // returned data to process (ACK) + MT_SET_DATA = 0x20, // Set data on keyboard + MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK) + MT_SEND_DATA = 0x30, // Sending data/action from keyboard + MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) + MT_EXE_ACTION = 0x40, // executing actions on keyboard + MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) + MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) +}; + +enum DATA_TYPE { + DT_NONE = 0x00, + DT_HANDSHAKE, + DT_DEFAULT_LAYER, + DT_CURRENT_LAYER, + DT_KEYMAP_OPTIONS, + DT_BACKLIGHT, + DT_RGBLIGHT, + DT_UNICODE, + DT_DEBUG, + DT_AUDIO, + DT_QUANTUM_ACTION, + DT_KEYBOARD_ACTION, + DT_USER_ACTION, + DT_KEYMAP_SIZE, + DT_KEYMAP +}; + +void dword_to_bytes(uint32_t dword, uint8_t * bytes); +uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index); + +#define MT_GET_DATA(data_type, data, length) SEND_BYTES(MT_GET_DATA, data_type, data, length) +#define MT_GET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_GET_DATA_ACK, data_type, data, length) +#define MT_SET_DATA(data_type, data, length) SEND_BYTES(MT_SET_DATA, data_type, data, length) +#define MT_SET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SET_DATA_ACK, data_type, data, length) +#define MT_SEND_DATA(data_type, data, length) SEND_BYTES(MT_SEND_DATA, data_type, data, length) +#define MT_SEND_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SEND_DATA_ACK, data_type, data, length) +#define MT_EXE_ACTION(data_type, data, length) SEND_BYTES(MT_EXE_ACTION, data_type, data, length) +#define MT_EXE_ACTION_ACK(data_type, data, length) SEND_BYTES(MT_EXE_ACTION_ACK, data_type, data, length) + +void process_api(uint16_t length, uint8_t * data); + +__attribute__ ((weak)) +bool process_api_quantum(uint8_t length, uint8_t * data); + +__attribute__ ((weak)) +bool process_api_keyboard(uint8_t length, uint8_t * data); + +__attribute__ ((weak)) +bool process_api_user(uint8_t length, uint8_t * data); + +#endif \ No newline at end of file diff --git a/quantum/api/api_sysex.c b/quantum/api/api_sysex.c new file mode 100644 index 0000000000..a4a554e764 --- /dev/null +++ b/quantum/api/api_sysex.c @@ -0,0 +1,29 @@ +#include "api_sysex.h" + +void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length) { + // SEND_STRING("\nTX: "); + // for (uint8_t i = 0; i < length; i++) { + // send_byte(bytes[i]); + // SEND_STRING(" "); + // } + uint8_t * precode = malloc(sizeof(uint8_t) * (length + 2)); + precode[0] = message_type; + precode[1] = data_type; + memcpy(precode + 2, bytes, length); + uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 2))); + uint16_t encoded_length = sysex_encode(encoded, precode, length + 2); + uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5)); + array[0] = 0xF0; + array[1] = 0x00; + array[2] = 0x00; + array[3] = 0x00; + array[encoded_length + 4] = 0xF7; + memcpy(array + 4, encoded, encoded_length); + midi_send_array(&midi_device, encoded_length + 5, array); + + // SEND_STRING("\nTD: "); + // for (uint8_t i = 0; i < encoded_length + 5; i++) { + // send_byte(array[i]); + // SEND_STRING(" "); + // } +} \ No newline at end of file diff --git a/quantum/api/api_sysex.h b/quantum/api/api_sysex.h new file mode 100644 index 0000000000..b947b60e54 --- /dev/null +++ b/quantum/api/api_sysex.h @@ -0,0 +1,10 @@ +#ifndef _API_SYSEX_H_ +#define _API_SYSEX_H_ + +#include "api.h" + +void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length); + +#define SEND_BYTES(mt, dt, b, l) send_bytes_sysex(mt, dt, b, l) + +#endif \ No newline at end of file diff --git a/quantum/quantum.c b/quantum/quantum.c index 8372a7adc5..f653564a67 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -847,12 +847,12 @@ void send_nibble(uint8_t number) { } } -void send_unicode_midi(uint32_t unicode) { - #ifdef MIDI_ENABLE +void api_send_unicode(uint32_t unicode) { +#ifdef API_ENABLE uint8_t chunk[4]; dword_to_bytes(unicode, chunk); MT_SEND_DATA(DT_UNICODE, chunk, 5); - #endif +#endif } __attribute__ ((weak)) diff --git a/quantum/quantum.h b/quantum/quantum.h index 316da15b9a..e6adf974ab 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -119,6 +119,6 @@ void send_nibble(uint8_t number); void led_set_user(uint8_t usb_led); void led_set_kb(uint8_t usb_led); -void send_unicode_midi(uint32_t unicode); +void api_send_unicode(uint32_t unicode); #endif diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index aa2e781c80..39d4824b6b 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1091,37 +1091,17 @@ void fallthrough_callback(MidiDevice * device, #endif } -#ifdef RGB_MIDI - rgblight_config_t rgblight_config; -#endif void cc_callback(MidiDevice * device, uint8_t chan, uint8_t num, uint8_t val) { //sending it back on the next channel // midi_send_cc(device, (chan + 1) % 16, num, val); - #ifdef RGB_MIDI - rgblight_config.raw = eeconfig_read_rgblight(); - switch (num) { - case 14: - rgblight_config.hue = val * 360 / 127; - break; - case 15: - rgblight_config.sat = val << 1; - break; - case 16: - rgblight_config.val = val << 1; - break; - } - rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); - #endif } uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { - // for (int i = 0; i < length; i++) - // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); - // if (start == 0x27) { + #ifdef API_SYSEX_ENABLE // SEND_STRING("\n"); // send_word(start); // SEND_STRING(": "); @@ -1136,190 +1116,13 @@ void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t // } uint8_t * decoded = malloc(sizeof(uint8_t) * (sysex_decoded_length(start + place - 4))); uint16_t decode_length = sysex_decode(decoded, midi_buffer + 4, start + place - 4); - sysex_buffer_callback(device, decode_length, decoded); + process_api(decode_length, decoded); } // SEND_STRING(" "); data++; } - // } - -} - -void dword_to_bytes(uint32_t dword, uint8_t * bytes) { - bytes[0] = (dword >> 24) & 0xFF; - bytes[1] = (dword >> 16) & 0xFF; - bytes[2] = (dword >> 8) & 0xFF; - bytes[3] = (dword >> 0) & 0xFF; -} - -uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) { - return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3]; -} - -void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length) { - // SEND_STRING("\nTX: "); - // for (uint8_t i = 0; i < length; i++) { - // send_byte(bytes[i]); - // SEND_STRING(" "); - // } - uint8_t * precode = malloc(sizeof(uint8_t) * (length + 2)); - precode[0] = message_type; - precode[1] = data_type; - memcpy(precode + 2, bytes, length); - uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 2))); - uint16_t encoded_length = sysex_encode(encoded, precode, length + 2); - uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5)); - array[0] = 0xF0; - array[1] = 0x00; - array[2] = 0x00; - array[3] = 0x00; - array[encoded_length + 4] = 0xF7; - memcpy(array + 4, encoded, encoded_length); - midi_send_array(&midi_device, encoded_length + 5, array); - - // SEND_STRING("\nTD: "); - // for (uint8_t i = 0; i < encoded_length + 5; i++) { - // send_byte(array[i]); - // SEND_STRING(" "); - // } -} - -__attribute__ ((weak)) -bool sysex_process_quantum(uint8_t length, uint8_t * data) { - return sysex_process_keyboard(length, data); -} - -__attribute__ ((weak)) -bool sysex_process_keyboard(uint8_t length, uint8_t * data) { - return sysex_process_user(length, data); -} - -__attribute__ ((weak)) -bool sysex_process_user(uint8_t length, uint8_t * data) { - return true; + #endif } -void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data) { - // SEND_STRING("\nRX: "); - // for (uint8_t i = 0; i < length; i++) { - // send_byte(data[i]); - // SEND_STRING(" "); - // } - if (!sysex_process_quantum(length, data)) - return; - - switch (data[0]) { - case MT_SET_DATA: - switch (data[1]) { - case DT_DEFAULT_LAYER: { - eeconfig_update_default_layer(data[2]); - default_layer_set((uint32_t)(data[2])); - break; - } - case DT_KEYMAP_OPTIONS: { - eeconfig_update_keymap(data[2]); - break; - } - case DT_RGBLIGHT: { - #ifdef RGBLIGHT_ENABLE - uint32_t rgblight = bytes_to_dword(data, 2); - rgblight_update_dword(rgblight); - #endif - break; - } - } - case MT_GET_DATA: - switch (data[1]) { - case DT_HANDSHAKE: { - MT_GET_DATA_ACK(DT_HANDSHAKE, NULL, 0); - break; - } - case DT_DEBUG: { - uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) }; - MT_GET_DATA_ACK(DT_DEBUG, debug_bytes, 1); - break; - } - case DT_DEFAULT_LAYER: { - uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) }; - MT_GET_DATA_ACK(DT_DEFAULT_LAYER, default_bytes, 1); - break; - } - case DT_CURRENT_LAYER: { - uint8_t layer_state_bytes[4]; - dword_to_bytes(layer_state, layer_state_bytes); - MT_GET_DATA_ACK(DT_CURRENT_LAYER, layer_state_bytes, 4); - break; - } - case DT_AUDIO: { - #ifdef AUDIO_ENABLE - uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) }; - MT_GET_DATA_ACK(DT_AUDIO, audio_bytes, 1); - #else - MT_GET_DATA_ACK(DT_AUDIO, NULL, 0); - #endif - break; - } - case DT_BACKLIGHT: { - #ifdef BACKLIGHT_ENABLE - uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) }; - MT_GET_DATA_ACK(DT_BACKLIGHT, backlight_bytes, 1); - #else - MT_GET_DATA_ACK(DT_BACKLIGHT, NULL, 0); - #endif - break; - } - case DT_RGBLIGHT: { - #ifdef RGBLIGHT_ENABLE - uint8_t rgblight_bytes[4]; - dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes); - MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4); - #else - MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0); - #endif - break; - } - case DT_KEYMAP_OPTIONS: { - uint8_t keymap_bytes[1] = { eeconfig_read_keymap() }; - MT_GET_DATA_ACK(DT_KEYMAP_OPTIONS, keymap_bytes, 1); - break; - } - default: - break; - } - break; - case MT_SET_DATA_ACK: - case MT_GET_DATA_ACK: - break; - case MT_SEND_DATA: - break; - case MT_SEND_DATA_ACK: - break; - case MT_EXE_ACTION: - break; - case MT_EXE_ACTION_ACK: - break; - case MT_TYPE_ERROR: - break; - default: ; // command not recognised - send_bytes_sysex(MT_TYPE_ERROR, DT_NONE, data, length); - break; - - // #ifdef RGBLIGHT_ENABLE - // case 0x27: ; // RGB LED functions - // switch (*data++) { - // case 0x00: ; // Update HSV - // rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]); - // break; - // case 0x01: ; // Update RGB - // break; - // case 0x02: ; // Update mode - // rgblight_mode(data[0]); - // break; - // } - // break; - // #endif - } - -} #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index 0962dda8d8..b11854101d 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -68,64 +68,17 @@ typedef struct { } __attribute__ ((packed)) report_extra_t; #ifdef MIDI_ENABLE - #define MIDI_SYSEX_BUFFER 16 void MIDI_Task(void); MidiDevice midi_device; + #define MIDI_SYSEX_BUFFER 32 +#endif - void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data); - void sysex_buffer_callback(MidiDevice * device, uint8_t length, uint8_t * data); - void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint8_t length); - void dword_to_bytes(uint32_t dword, uint8_t * bytes); - uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index); - - __attribute__ ((weak)) - bool sysex_process_quantum(uint8_t length, uint8_t * data); - - __attribute__ ((weak)) - bool sysex_process_keyboard(uint8_t length, uint8_t * data); - - __attribute__ ((weak)) - bool sysex_process_user(uint8_t length, uint8_t * data); - - enum MESSAGE_TYPE { - MT_GET_DATA = 0x10, // Get data from keyboard - MT_GET_DATA_ACK = 0x11, // returned data to process (ACK) - MT_SET_DATA = 0x20, // Set data on keyboard - MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK) - MT_SEND_DATA = 0x30, // Sending data/action from keyboard - MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) - MT_EXE_ACTION = 0x40, // executing actions on keyboard - MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) - MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) - }; - - enum DATA_TYPE { - DT_NONE = 0x00, - DT_HANDSHAKE, - DT_DEFAULT_LAYER, - DT_CURRENT_LAYER, - DT_KEYMAP_OPTIONS, - DT_BACKLIGHT, - DT_RGBLIGHT, - DT_UNICODE, - DT_DEBUG, - DT_AUDIO, - DT_QUANTUM_ACTION, - DT_KEYBOARD_ACTION, - DT_USER_ACTION, - - }; - - - #define MT_GET_DATA(data_type, data, length) send_bytes_sysex(MT_GET_DATA, data_type, data, length) - #define MT_GET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_GET_DATA_ACK, data_type, data, length) - #define MT_SET_DATA(data_type, data, length) send_bytes_sysex(MT_SET_DATA, data_type, data, length) - #define MT_SET_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SET_DATA_ACK, data_type, data, length) - #define MT_SEND_DATA(data_type, data, length) send_bytes_sysex(MT_SEND_DATA, data_type, data, length) - #define MT_SEND_DATA_ACK(data_type, data, length) send_bytes_sysex(MT_SEND_DATA_ACK, data_type, data, length) - #define MT_EXE_ACTION(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION, data_type, data, length) - #define MT_EXE_ACTION_ACK(data_type, data, length) send_bytes_sysex(MT_EXE_ACTION_ACK, data_type, data, length) +#ifdef API_ENABLE + #include "api.h" +#endif +#ifdef API_SYSEX_ENABLE + #include "api_sysex.h" #endif // #if LUFA_VERSION_INTEGER < 0x120730 -- cgit v1.2.3 From be4e75423a232d9d328bb23835e0fa5152292c95 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sun, 27 Nov 2016 22:41:22 -0800 Subject: Tidy up atomicity in timer.c and ring_buffer.h Adopt the macros for saving/restoring the interrupt state that are provided by the avr gcc environment. Removing intialization of the timer value; this shaves off a few bytes because globals are default initialized to zero. --- tmk_core/common/avr/timer.c | 36 ++++++++++++++++-------------------- tmk_core/ring_buffer.h | 26 ++++++++++++-------------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/tmk_core/common/avr/timer.c b/tmk_core/common/avr/timer.c index 292b41c3a6..84af444885 100644 --- a/tmk_core/common/avr/timer.c +++ b/tmk_core/common/avr/timer.c @@ -17,6 +17,7 @@ along with this program. If not, see . #include #include +#include #include #include "timer_avr.h" #include "timer.h" @@ -24,7 +25,7 @@ along with this program. If not, see . // counter resolution 1ms // NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }} -volatile uint32_t timer_count = 0; +volatile uint32_t timer_count; void timer_init(void) { @@ -52,10 +53,9 @@ void timer_init(void) inline void timer_clear(void) { - uint8_t sreg = SREG; - cli(); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { timer_count = 0; - SREG = sreg; + } } inline @@ -63,10 +63,9 @@ uint16_t timer_read(void) { uint32_t t; - uint8_t sreg = SREG; - cli(); - t = timer_count; - SREG = sreg; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + t = timer_count; + } return (t & 0xFFFF); } @@ -76,10 +75,9 @@ uint32_t timer_read32(void) { uint32_t t; - uint8_t sreg = SREG; - cli(); - t = timer_count; - SREG = sreg; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + t = timer_count; + } return t; } @@ -89,10 +87,9 @@ uint16_t timer_elapsed(uint16_t last) { uint32_t t; - uint8_t sreg = SREG; - cli(); - t = timer_count; - SREG = sreg; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + t = timer_count; + } return TIMER_DIFF_16((t & 0xFFFF), last); } @@ -102,10 +99,9 @@ uint32_t timer_elapsed32(uint32_t last) { uint32_t t; - uint8_t sreg = SREG; - cli(); - t = timer_count; - SREG = sreg; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + t = timer_count; + } return TIMER_DIFF_32(t, last); } diff --git a/tmk_core/ring_buffer.h b/tmk_core/ring_buffer.h index 7bdebbcf34..005d1be613 100644 --- a/tmk_core/ring_buffer.h +++ b/tmk_core/ring_buffer.h @@ -4,13 +4,13 @@ * Ring buffer to store scan codes from keyboard *------------------------------------------------------------------*/ #define RBUF_SIZE 32 +#include static uint8_t rbuf[RBUF_SIZE]; static uint8_t rbuf_head = 0; static uint8_t rbuf_tail = 0; static inline void rbuf_enqueue(uint8_t data) { - uint8_t sreg = SREG; - cli(); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { uint8_t next = (rbuf_head + 1) % RBUF_SIZE; if (next != rbuf_tail) { rbuf[rbuf_head] = data; @@ -18,36 +18,34 @@ static inline void rbuf_enqueue(uint8_t data) } else { print("rbuf: full\n"); } - SREG = sreg; + } } static inline uint8_t rbuf_dequeue(void) { uint8_t val = 0; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { - uint8_t sreg = SREG; - cli(); if (rbuf_head != rbuf_tail) { val = rbuf[rbuf_tail]; rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE; } - SREG = sreg; + } return val; } static inline bool rbuf_has_data(void) { - uint8_t sreg = SREG; - cli(); - bool has_data = (rbuf_head != rbuf_tail); - SREG = sreg; - return has_data; + bool has_data; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + has_data = (rbuf_head != rbuf_tail); + } + return has_data; } static inline void rbuf_clear(void) { - uint8_t sreg = SREG; - cli(); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { rbuf_head = rbuf_tail = 0; - SREG = sreg; + } } #endif /* RING_BUFFER_H */ -- cgit v1.2.3 From 8485bb34d2e291db5b6c81f892850da1cdca37ba Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sun, 27 Nov 2016 22:43:11 -0800 Subject: Add arduino-alike GPIO pin control helpers Unlike the arduino functions, these don't take abstract pin numbers, they take pin labels like `B0`. Also, rather than taking very generic parameter names, these take slightly more descriptive enum values. These improve the clarity of code that would otherwise be inscrutable bit manipulation in tersely named port register names. --- quantum/pincontrol.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 quantum/pincontrol.h diff --git a/quantum/pincontrol.h b/quantum/pincontrol.h new file mode 100644 index 0000000000..36ce29ef22 --- /dev/null +++ b/quantum/pincontrol.h @@ -0,0 +1,37 @@ +#pragma once +// Some helpers for controlling gpio pins +#include + +enum { + PinDirectionInput = 0, + PinDirectionOutput = 1, + PinLevelHigh = 1, + PinLevelLow = 0, +}; + +// ex: pinMode(B0, PinDirectionOutput); +static inline void pinMode(uint8_t pin, int mode) { + uint8_t bv = _BV(pin & 0xf); + if (mode == PinDirectionOutput) { + _SFR_IO8((pin >> 4) + 1) |= bv; + } else { + _SFR_IO8((pin >> 4) + 1) &= ~bv; + _SFR_IO8((pin >> 4) + 2) &= ~bv; + } +} + +// ex: digitalWrite(B0, PinLevelHigh); +static inline void digitalWrite(uint8_t pin, int mode) { + uint8_t bv = _BV(pin & 0xf); + if (mode == PinLevelHigh) { + _SFR_IO8((pin >> 4) + 2) |= bv; + } else { + _SFR_IO8((pin >> 4) + 2) &= ~bv; + } +} + +// Return true if the pin is HIGH +// digitalRead(B0) +static inline bool digitalRead(uint8_t pin) { + return _SFR_IO8(pin >> 4) & _BV(pin & 0xf); +} -- cgit v1.2.3 From 712476cd288505cabb2ad6163d1c1ba13a7a1cca Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sun, 27 Nov 2016 22:48:04 -0800 Subject: Add support for Adafruit BLE modules This implements some helper functions that allow sending key reports to an SPI based Bluetooth Low Energy module, such as the Adafruit Feather 32u4 Bluefruit LE. There is some plumbing required in lufa.c to enable this; that is in a follow-on commit. --- tmk_core/common.mk | 6 +- tmk_core/protocol/lufa.mk | 4 + tmk_core/protocol/lufa/adafruit_ble.cpp | 805 ++++++++++++++++++++++++++++++++ tmk_core/protocol/lufa/adafruit_ble.h | 60 +++ tmk_core/protocol/lufa/ringbuffer.hpp | 66 +++ 5 files changed, 940 insertions(+), 1 deletion(-) create mode 100644 tmk_core/protocol/lufa/adafruit_ble.cpp create mode 100644 tmk_core/protocol/lufa/adafruit_ble.h create mode 100644 tmk_core/protocol/lufa/ringbuffer.hpp diff --git a/tmk_core/common.mk b/tmk_core/common.mk index f826a7b540..c32a12bb6f 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -81,6 +81,10 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE endif +ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) + TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE +endif + ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE endif @@ -110,4 +114,4 @@ endif VPATH += $(TMK_PATH)/$(COMMON_DIR) ifeq ($(PLATFORM),CHIBIOS) VPATH += $(TMK_PATH)/$(COMMON_DIR)/chibios -endif \ No newline at end of file +endif diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk index 5b1e3d19d0..151d26cbc8 100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@ -21,6 +21,10 @@ ifeq ($(strip $(MIDI_ENABLE)), yes) include $(TMK_PATH)/protocol/midi.mk endif +ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) + LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp +endif + ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) LUFA_SRC += $(LUFA_DIR)/bluetooth.c \ $(TMK_DIR)/protocol/serial_uart.c diff --git a/tmk_core/protocol/lufa/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp new file mode 100644 index 0000000000..37194e77a9 --- /dev/null +++ b/tmk_core/protocol/lufa/adafruit_ble.cpp @@ -0,0 +1,805 @@ +#include "adafruit_ble.h" +#include +#include +#include +#include +#include +#include "debug.h" +#include "pincontrol.h" +#include "timer.h" +#include "action_util.h" +#include "ringbuffer.hpp" +#include + +// These are the pin assignments for the 32u4 boards. +// You may define them to something else in your config.h +// if yours is wired up differently. +#ifndef AdafruitBleResetPin +#define AdafruitBleResetPin D4 +#endif + +#ifndef AdafruitBleCSPin +#define AdafruitBleCSPin B4 +#endif + +#ifndef AdafruitBleIRQPin +#define AdafruitBleIRQPin E6 +#endif + + +#define SAMPLE_BATTERY +#define ConnectionUpdateInterval 1000 /* milliseconds */ + +static struct { + bool is_connected; + bool initialized; + bool configured; + +#define ProbedEvents 1 +#define UsingEvents 2 + bool event_flags; + +#ifdef SAMPLE_BATTERY + uint16_t last_battery_update; + uint32_t vbat; +#endif + uint16_t last_connection_update; +} state; + +// Commands are encoded using SDEP and sent via SPI +// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md + +#define SdepMaxPayload 16 +struct sdep_msg { + uint8_t type; + uint8_t cmd_low; + uint8_t cmd_high; + struct __attribute__((packed)) { + uint8_t len:7; + uint8_t more:1; + }; + uint8_t payload[SdepMaxPayload]; +} __attribute__((packed)); + +// The recv latency is relatively high, so when we're hammering keys quickly, +// we want to avoid waiting for the responses in the matrix loop. We maintain +// a short queue for that. Since there is quite a lot of space overhead for +// the AT command representation wrapped up in SDEP, we queue the minimal +// information here. + +enum queue_type { + QTKeyReport, // 1-byte modifier + 6-byte key report + QTConsumer, // 16-bit key code +#ifdef MOUSE_ENABLE + QTMouseMove, // 4-byte mouse report +#endif +}; + +struct queue_item { + enum queue_type queue_type; + uint16_t added; + union __attribute__((packed)) { + struct __attribute__((packed)) { + uint8_t modifier; + uint8_t keys[6]; + } key; + + uint16_t consumer; + struct __attribute__((packed)) { + uint8_t x, y, scroll, pan; + } mousemove; + }; +}; + +// Items that we wish to send +static RingBuffer send_buf; +// Pending response; while pending, we can't send any more requests. +// This records the time at which we sent the command for which we +// are expecting a response. +static RingBuffer resp_buf; + +static bool process_queue_item(struct queue_item *item, uint16_t timeout); + +enum sdep_type { + SdepCommand = 0x10, + SdepResponse = 0x20, + SdepAlert = 0x40, + SdepError = 0x80, + SdepSlaveNotReady = 0xfe, // Try again later + SdepSlaveOverflow = 0xff, // You read more data than is available +}; + +enum ble_cmd { + BleInitialize = 0xbeef, + BleAtWrapper = 0x0a00, + BleUartTx = 0x0a01, + BleUartRx = 0x0a02, +}; + +enum ble_system_event_bits { + BleSystemConnected = 0, + BleSystemDisconnected = 1, + BleSystemUartRx = 8, + BleSystemMidiRx = 10, +}; + +// The SDEP.md file says 2MHz but the web page and the sample driver +// both use 4MHz +#define SpiBusSpeed 4000000 + +#define SdepTimeout 150 /* milliseconds */ +#define SdepShortTimeout 10 /* milliseconds */ +#define SdepBackOff 25 /* microseconds */ +#define BatteryUpdateInterval 10000 /* milliseconds */ + +static bool at_command(const char *cmd, char *resp, uint16_t resplen, + bool verbose, uint16_t timeout = SdepTimeout); +static bool at_command_P(const char *cmd, char *resp, uint16_t resplen, + bool verbose = false); + +struct SPI_Settings { + uint8_t spcr, spsr; +}; + +static struct SPI_Settings spi; + +// Initialize 4Mhz MSBFIRST MODE0 +void SPI_init(struct SPI_Settings *spi) { + spi->spcr = _BV(SPE) | _BV(MSTR); + spi->spsr = _BV(SPI2X); + + static_assert(SpiBusSpeed == F_CPU / 2, "hard coded at 4Mhz"); + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + // Ensure that SS is OUTPUT High + digitalWrite(B0, PinLevelHigh); + pinMode(B0, PinDirectionOutput); + + SPCR |= _BV(MSTR); + SPCR |= _BV(SPE); + pinMode(B1 /* SCK */, PinDirectionOutput); + pinMode(B2 /* MOSI */, PinDirectionOutput); + } +} + +static inline void SPI_begin(struct SPI_Settings*spi) { + SPCR = spi->spcr; + SPSR = spi->spsr; +} + +static inline uint8_t SPI_TransferByte(uint8_t data) { + SPDR = data; + asm volatile("nop"); + while (!(SPSR & _BV(SPIF))) { + ; // wait + } + return SPDR; +} + +static inline void spi_send_bytes(const uint8_t *buf, uint8_t len) { + if (len == 0) return; + const uint8_t *end = buf + len; + while (buf < end) { + SPDR = *buf; + while (!(SPSR & _BV(SPIF))) { + ; // wait + } + ++buf; + } +} + +static inline uint16_t spi_read_byte(void) { + return SPI_TransferByte(0x00 /* dummy */); +} + +static inline void spi_recv_bytes(uint8_t *buf, uint8_t len) { + const uint8_t *end = buf + len; + if (len == 0) return; + while (buf < end) { + SPDR = 0; // write a dummy to initiate read + while (!(SPSR & _BV(SPIF))) { + ; // wait + } + *buf = SPDR; + ++buf; + } +} + +#if 0 +static void dump_pkt(const struct sdep_msg *msg) { + print("pkt: type="); + print_hex8(msg->type); + print(" cmd="); + print_hex8(msg->cmd_high); + print_hex8(msg->cmd_low); + print(" len="); + print_hex8(msg->len); + print(" more="); + print_hex8(msg->more); + print("\n"); +} +#endif + +// Send a single SDEP packet +static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) { + SPI_begin(&spi); + + digitalWrite(AdafruitBleCSPin, PinLevelLow); + uint16_t timerStart = timer_read(); + bool success = false; + bool ready = false; + + do { + ready = SPI_TransferByte(msg->type) != SdepSlaveNotReady; + if (ready) { + break; + } + + // Release it and let it initialize + digitalWrite(AdafruitBleCSPin, PinLevelHigh); + _delay_us(SdepBackOff); + digitalWrite(AdafruitBleCSPin, PinLevelLow); + } while (timer_elapsed(timerStart) < timeout); + + if (ready) { + // Slave is ready; send the rest of the packet + spi_send_bytes(&msg->cmd_low, + sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len); + success = true; + } + + digitalWrite(AdafruitBleCSPin, PinLevelHigh); + + return success; +} + +static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command, + const uint8_t *payload, uint8_t len, + bool moredata) { + msg->type = SdepCommand; + msg->cmd_low = command & 0xff; + msg->cmd_high = command >> 8; + msg->len = len; + msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0; + + static_assert(sizeof(*msg) == 20, "msg is correctly packed"); + + memcpy(msg->payload, payload, len); +} + +// Read a single SDEP packet +static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) { + bool success = false; + uint16_t timerStart = timer_read(); + bool ready = false; + + do { + ready = digitalRead(AdafruitBleIRQPin); + if (ready) { + break; + } + _delay_us(1); + } while (timer_elapsed(timerStart) < timeout); + + if (ready) { + SPI_begin(&spi); + + digitalWrite(AdafruitBleCSPin, PinLevelLow); + + do { + // Read the command type, waiting for the data to be ready + msg->type = spi_read_byte(); + if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) { + // Release it and let it initialize + digitalWrite(AdafruitBleCSPin, PinLevelHigh); + _delay_us(SdepBackOff); + digitalWrite(AdafruitBleCSPin, PinLevelLow); + continue; + } + + // Read the rest of the header + spi_recv_bytes(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload))); + + // and get the payload if there is any + if (msg->len <= SdepMaxPayload) { + spi_recv_bytes(msg->payload, msg->len); + } + success = true; + break; + } while (timer_elapsed(timerStart) < timeout); + + digitalWrite(AdafruitBleCSPin, PinLevelHigh); + } + return success; +} + +static void resp_buf_read_one(bool greedy) { + uint16_t last_send; + if (!resp_buf.peek(last_send)) { + return; + } + + if (digitalRead(AdafruitBleIRQPin)) { + struct sdep_msg msg; + +again: + if (sdep_recv_pkt(&msg, SdepTimeout)) { + if (!msg.more) { + // We got it; consume this entry + resp_buf.get(last_send); + dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send)); + } + + if (greedy && resp_buf.peek(last_send) && digitalRead(AdafruitBleIRQPin)) { + goto again; + } + } + + } else if (timer_elapsed(last_send) > SdepTimeout * 2) { + dprintf("waiting_for_result: timeout, resp_buf size %d\n", + (int)resp_buf.size()); + + // Timed out: consume this entry + resp_buf.get(last_send); + } +} + +static void send_buf_send_one(uint16_t timeout = SdepTimeout) { + struct queue_item item; + + // Don't send anything more until we get an ACK + if (!resp_buf.empty()) { + return; + } + + if (!send_buf.peek(item)) { + return; + } + if (process_queue_item(&item, timeout)) { + // commit that peek + send_buf.get(item); + dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size()); + } else { + dprint("failed to send, will retry\n"); + _delay_ms(SdepTimeout); + resp_buf_read_one(true); + } +} + +static void resp_buf_wait(const char *cmd) { + bool didPrint = false; + while (!resp_buf.empty()) { + if (!didPrint) { + dprintf("wait on buf for %s\n", cmd); + didPrint = true; + } + resp_buf_read_one(true); + } +} + +static bool ble_init(void) { + state.initialized = false; + state.configured = false; + state.is_connected = false; + + pinMode(AdafruitBleIRQPin, PinDirectionInput); + pinMode(AdafruitBleCSPin, PinDirectionOutput); + digitalWrite(AdafruitBleCSPin, PinLevelHigh); + + SPI_init(&spi); + + // Perform a hardware reset + pinMode(AdafruitBleResetPin, PinDirectionOutput); + digitalWrite(AdafruitBleResetPin, PinLevelHigh); + digitalWrite(AdafruitBleResetPin, PinLevelLow); + _delay_ms(10); + digitalWrite(AdafruitBleResetPin, PinLevelHigh); + + _delay_ms(1000); // Give it a second to initialize + + state.initialized = true; + return state.initialized; +} + +static inline uint8_t min(uint8_t a, uint8_t b) { + return a < b ? a : b; +} + +static bool read_response(char *resp, uint16_t resplen, bool verbose) { + char *dest = resp; + char *end = dest + resplen; + + while (true) { + struct sdep_msg msg; + + if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) { + dprint("sdep_recv_pkt failed\n"); + return false; + } + + if (msg.type != SdepResponse) { + *resp = 0; + return false; + } + + uint8_t len = min(msg.len, end - dest); + if (len > 0) { + memcpy(dest, msg.payload, len); + dest += len; + } + + if (!msg.more) { + // No more data is expected! + break; + } + } + + // Ensure the response is NUL terminated + *dest = 0; + + // "Parse" the result text; we want to snip off the trailing OK or ERROR line + // Rewind past the possible trailing CRLF so that we can strip it + --dest; + while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) { + *dest = 0; + --dest; + } + + // Look back for start of preceeding line + char *last_line = strrchr(resp, '\n'); + if (last_line) { + ++last_line; + } else { + last_line = resp; + } + + bool success = false; + static const char kOK[] PROGMEM = "OK"; + + success = !strcmp_P(last_line, kOK ); + + if (verbose || !success) { + dprintf("result: %s\n", resp); + } + return success; +} + +static bool at_command(const char *cmd, char *resp, uint16_t resplen, + bool verbose, uint16_t timeout) { + const char *end = cmd + strlen(cmd); + struct sdep_msg msg; + + if (verbose) { + dprintf("ble send: %s\n", cmd); + } + + if (resp) { + // They want to decode the response, so we need to flush and wait + // for all pending I/O to finish before we start this one, so + // that we don't confuse the results + resp_buf_wait(cmd); + *resp = 0; + } + + // Fragment the command into a series of SDEP packets + while (end - cmd > SdepMaxPayload) { + sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true); + if (!sdep_send_pkt(&msg, timeout)) { + return false; + } + cmd += SdepMaxPayload; + } + + sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false); + if (!sdep_send_pkt(&msg, timeout)) { + return false; + } + + if (resp == NULL) { + auto now = timer_read(); + while (!resp_buf.enqueue(now)) { + resp_buf_read_one(false); + } + auto later = timer_read(); + if (TIMER_DIFF_16(later, now) > 0) { + dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now)); + } + return true; + } + + return read_response(resp, resplen, verbose); +} + +bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) { + auto cmdbuf = (char *)alloca(strlen_P(cmd) + 1); + strcpy_P(cmdbuf, cmd); + return at_command(cmdbuf, resp, resplen, verbose); +} + +bool adafruit_ble_is_connected(void) { + return state.is_connected; +} + +bool adafruit_ble_enable_keyboard(void) { + char resbuf[128]; + + if (!state.initialized && !ble_init()) { + return false; + } + + state.configured = false; + + // Disable command echo + static const char kEcho[] PROGMEM = "ATE=0"; + // Make the advertised name match the keyboard + static const char kGapDevName[] PROGMEM = + "AT+GAPDEVNAME=" STR(PRODUCT) " " STR(DESCRIPTION); + // Turn on keyboard support + static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1"; + + // Adjust intervals to improve latency. This causes the "central" + // system (computer/tablet) to poll us every 10-30 ms. We can't + // set a smaller value than 10ms, and 30ms seems to be the natural + // processing time on my macbook. Keeping it constrained to that + // feels reasonable to type to. + static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,"; + + // Reset the device so that it picks up the above changes + static const char kATZ[] PROGMEM = "ATZ"; + + // Turn down the power level a bit + static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12"; + static PGM_P const configure_commands[] PROGMEM = { + kEcho, + kGapIntervals, + kGapDevName, + kHidEnOn, + kPower, + kATZ, + }; + + uint8_t i; + for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]); + ++i) { + PGM_P cmd; + memcpy_P(&cmd, configure_commands + i, sizeof(cmd)); + + if (!at_command_P(cmd, resbuf, sizeof(resbuf))) { + dprintf("failed BLE command: %S: %s\n", cmd, resbuf); + goto fail; + } + } + + state.configured = true; + + // Check connection status in a little while; allow the ATZ time + // to kick in. + state.last_connection_update = timer_read(); +fail: + return state.configured; +} + +static void set_connected(bool connected) { + if (connected != state.is_connected) { + if (connected) { + print("****** BLE CONNECT!!!!\n"); + } else { + print("****** BLE DISCONNECT!!!!\n"); + } + state.is_connected = connected; + + // TODO: if modifiers are down on the USB interface and + // we cut over to BLE or vice versa, they will remain stuck. + // This feels like a good point to do something like clearing + // the keyboard and/or generating a fake all keys up message. + // However, I've noticed that it takes a couple of seconds + // for macOS to to start recognizing key presses after BLE + // is in the connected state, so I worry that doing that + // here may not be good enough. + } +} + +void adafruit_ble_task(void) { + char resbuf[48]; + + if (!state.configured && !adafruit_ble_enable_keyboard()) { + return; + } + resp_buf_read_one(true); + send_buf_send_one(SdepShortTimeout); + + if (resp_buf.empty() && (state.event_flags & UsingEvents) && + digitalRead(AdafruitBleIRQPin)) { + // Must be an event update + if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) { + uint32_t mask = strtoul(resbuf, NULL, 16); + + if (mask & BleSystemConnected) { + set_connected(true); + } else if (mask & BleSystemDisconnected) { + set_connected(false); + } + } + } + + if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) { + bool shouldPoll = true; + if (!(state.event_flags & ProbedEvents)) { + // Request notifications about connection status changes. + // This only works in SPIFRIEND firmware > 0.6.7, which is why + // we check for this conditionally here. + // Note that at the time of writing, HID reports only work correctly + // with Apple products on firmware version 0.6.7! + // https://forums.adafruit.com/viewtopic.php?f=8&t=104052 + if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) { + at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf)); + state.event_flags |= UsingEvents; + } + state.event_flags |= ProbedEvents; + + // leave shouldPoll == true so that we check at least once + // before relying solely on events + } else { + shouldPoll = false; + } + + static const char kGetConn[] PROGMEM = "AT+GAPGETCONN"; + state.last_connection_update = timer_read(); + + if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) { + set_connected(atoi(resbuf)); + } + } + +#ifdef SAMPLE_BATTERY + // I don't know if this really does anything useful yet; the reported + // voltage level always seems to be around 3200mV. We may want to just rip + // this code out. + if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval && + resp_buf.empty()) { + state.last_battery_update = timer_read(); + + if (at_command_P(PSTR("AT+HWVBAT"), resbuf, sizeof(resbuf))) { + state.vbat = atoi(resbuf); + } + } +#endif +} + +static bool process_queue_item(struct queue_item *item, uint16_t timeout) { + char cmdbuf[48]; + char fmtbuf[64]; + + // Arrange to re-check connection after keys have settled + state.last_connection_update = timer_read(); + +#if 1 + if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) { + dprintf("send latency %dms\n", + TIMER_DIFF_16(state.last_connection_update, item->added)); + } +#endif + + switch (item->queue_type) { + case QTKeyReport: + strcpy_P(fmtbuf, + PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x")); + snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier, + item->key.keys[0], item->key.keys[1], item->key.keys[2], + item->key.keys[3], item->key.keys[4], item->key.keys[5]); + return at_command(cmdbuf, NULL, 0, true, timeout); + + case QTConsumer: + strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x")); + snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer); + return at_command(cmdbuf, NULL, 0, true, timeout); + +#ifdef MOUSE_ENABLE + case QTMouseMove: + strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d")); + snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x, + item->mousemove.y, item->mousemove.scroll, item->mousemove.pan); + return at_command(cmdbuf, NULL, 0, true, timeout); +#endif + default: + return true; + } +} + +bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, + uint8_t nkeys) { + struct queue_item item; + bool didWait = false; + + item.queue_type = QTKeyReport; + item.key.modifier = hid_modifier_mask; + item.added = timer_read(); + + while (nkeys >= 0) { + item.key.keys[0] = keys[0]; + item.key.keys[1] = nkeys >= 1 ? keys[1] : 0; + item.key.keys[2] = nkeys >= 2 ? keys[2] : 0; + item.key.keys[3] = nkeys >= 3 ? keys[3] : 0; + item.key.keys[4] = nkeys >= 4 ? keys[4] : 0; + item.key.keys[5] = nkeys >= 5 ? keys[5] : 0; + + if (!send_buf.enqueue(item)) { + if (!didWait) { + dprint("wait for buf space\n"); + didWait = true; + } + send_buf_send_one(); + continue; + } + + if (nkeys <= 6) { + return true; + } + + nkeys -= 6; + keys += 6; + } + + return true; +} + +bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) { + struct queue_item item; + + item.queue_type = QTConsumer; + item.consumer = keycode; + + while (!send_buf.enqueue(item)) { + send_buf_send_one(); + } + return true; +} + +#ifdef MOUSE_ENABLE +bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, + int8_t pan) { + struct queue_item item; + + item.queue_type = QTMouseMove; + item.mousemove.x = x; + item.mousemove.y = y; + item.mousemove.scroll = scroll; + item.mousemove.pan = pan; + + while (!send_buf.enqueue(item)) { + send_buf_send_one(); + } + return true; +} +#endif + +uint32_t adafruit_ble_read_battery_voltage(void) { + return state.vbat; +} + +bool adafruit_ble_set_mode_leds(bool on) { + if (!state.configured) { + return false; + } + + // The "mode" led is the red blinky one + at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0); + + // Pin 19 is the blue "connected" LED; turn that off too. + // When turning LEDs back on, don't turn that LED on if we're + // not connected, as that would be confusing. + at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1") + : PSTR("AT+HWGPIO=19,0"), + NULL, 0); + return true; +} + +// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel +bool adafruit_ble_set_power_level(int8_t level) { + char cmd[46]; + if (!state.configured) { + return false; + } + snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level); + return at_command(cmd, NULL, 0, false); +} diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h new file mode 100644 index 0000000000..351fd55ae9 --- /dev/null +++ b/tmk_core/protocol/lufa/adafruit_ble.h @@ -0,0 +1,60 @@ +/* Bluetooth Low Energy Protocol for QMK. + * Author: Wez Furlong, 2016 + * Supports the Adafruit BLE board built around the nRF51822 chip. + */ +#pragma once +#ifdef ADAFRUIT_BLE_ENABLE +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Instruct the module to enable HID keyboard support and reset */ +extern bool adafruit_ble_enable_keyboard(void); + +/* Query to see if the BLE module is connected */ +extern bool adafruit_ble_query_is_connected(void); + +/* Returns true if we believe that the BLE module is connected. + * This uses our cached understanding that is maintained by + * calling ble_task() periodically. */ +extern bool adafruit_ble_is_connected(void); + +/* Call this periodically to process BLE-originated things */ +extern void adafruit_ble_task(void); + +/* Generates keypress events for a set of keys. + * The hid modifier mask specifies the state of the modifier keys for + * this set of keys. + * Also sends a key release indicator, so that the keys do not remain + * held down. */ +extern bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, + uint8_t nkeys); + +/* Send a consumer keycode, holding it down for the specified duration + * (milliseconds) */ +extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration); + +#ifdef MOUSE_ENABLE +/* Send a mouse/wheel movement report. + * The parameters are signed and indicate positive of negative direction + * change. */ +extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, + int8_t pan); +#endif + +/* Compute battery voltage by reading an analog pin. + * Returns the integer number of millivolts */ +extern uint32_t adafruit_ble_read_battery_voltage(void); + +extern bool adafruit_ble_set_mode_leds(bool on); +extern bool adafruit_ble_set_power_level(int8_t level); + +#ifdef __cplusplus +} +#endif + +#endif // ADAFRUIT_BLE_ENABLE diff --git a/tmk_core/protocol/lufa/ringbuffer.hpp b/tmk_core/protocol/lufa/ringbuffer.hpp new file mode 100644 index 0000000000..70a3c4881d --- /dev/null +++ b/tmk_core/protocol/lufa/ringbuffer.hpp @@ -0,0 +1,66 @@ +#pragma once +// A simple ringbuffer holding Size elements of type T +template +class RingBuffer { + protected: + T buf_[Size]; + uint8_t head_{0}, tail_{0}; + public: + inline uint8_t nextPosition(uint8_t position) { + return (position + 1) % Size; + } + + inline uint8_t prevPosition(uint8_t position) { + if (position == 0) { + return Size - 1; + } + return position - 1; + } + + inline bool enqueue(const T &item) { + static_assert(Size > 1, "RingBuffer size must be > 1"); + uint8_t next = nextPosition(head_); + if (next == tail_) { + // Full + return false; + } + + buf_[head_] = item; + head_ = next; + return true; + } + + inline bool get(T &dest, bool commit = true) { + auto tail = tail_; + if (tail == head_) { + // No more data + return false; + } + + dest = buf_[tail]; + tail = nextPosition(tail); + + if (commit) { + tail_ = tail; + } + return true; + } + + inline bool empty() const { return head_ == tail_; } + + inline uint8_t size() const { + int diff = head_ - tail_; + if (diff >= 0) { + return diff; + } + return Size + diff; + } + + inline T& front() { + return buf_[tail_]; + } + + inline bool peek(T &item) { + return get(item, false); + } +}; -- cgit v1.2.3 From e26a80508f2247d27e431a7415df1ff3405f598a Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 28 Nov 2016 11:20:00 +0100 Subject: Reorganize the numeric keypad layer more like a traditional numeric keypad. --- keyboards/ergodox/keymaps/bepo/bepo.png | Bin 80838 -> 80249 bytes keyboards/ergodox/keymaps/bepo/keymap.c | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/ergodox/keymaps/bepo/bepo.png b/keyboards/ergodox/keymaps/bepo/bepo.png index bde2e2cfac..54992f5ae5 100644 Binary files a/keyboards/ergodox/keymaps/bepo/bepo.png and b/keyboards/ergodox/keymaps/bepo/bepo.png differ diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c index ae8047ab59..c1a8ae21d9 100644 --- a/keyboards/ergodox/keymaps/bepo/keymap.c +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -201,18 +201,18 @@ KC_TRNS, KC_TRNS, KC_NO), /* Keymap 5: numeric layer, sends keypad codes * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | + | - | / | * | | + * | | | | | | | | | | | NumLo| / | * | - | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | 7 | 8 | 9 | | | + * | | | | | | | | | | | 7 | 8 | 9 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | 4 | 5 | 6 | | | + * | | | | | | |------| |------| | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | 1 | 2 | 3 | | | + * | | | | | | | | | | | 1 | 2 | 3 | Enter| | * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * | | | | | | | | | | | | | 0 | 00 | . | | | + * | | | | | | | | | | | | | 0 | 00 | . | Enter| | * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' * | | | | | | | | - * | | |------| |------| | Enter| + * | | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ @@ -227,14 +227,14 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, // Right hand - KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO, - KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO, - KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO, - KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO, - KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_NO, + KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_NO, + KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NO, + KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_NO, + KC_KP_0, M(KP_00), KC_KP_COMMA, KC_KP_ENTER, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, -KC_TRNS, KC_TRNS, KC_KP_ENTER) +KC_TRNS, KC_TRNS, KC_TRNS) }; const uint16_t PROGMEM fn_actions[] = { -- cgit v1.2.3 From 3f1fca2eb8078cdfbf576d6d4168de8e6ae1c2f6 Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 28 Nov 2016 11:21:23 +0100 Subject: Adjust comment. --- keyboards/ergodox/keymaps/bepo/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/bepo/readme.md b/keyboards/ergodox/keymaps/bepo/readme.md index 207b675715..51a5069851 100644 --- a/keyboards/ergodox/keymaps/bepo/readme.md +++ b/keyboards/ergodox/keymaps/bepo/readme.md @@ -23,7 +23,7 @@ La touche "Tab" est placée comme sur la TypeMatrix 2020. Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO". -Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long). +Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite et d'effectuer des actions souris avec uniquement la main gauche. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long). Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0". -- cgit v1.2.3 From 2d0ada01902a0103dc4f4f54a416f0666c641b5b Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 28 Nov 2016 07:55:02 -0500 Subject: Pulls LED config into common config for EZ --- keyboards/ergodox/ez/config.h | 11 +++++++++++ keyboards/ergodox/keymaps/erez_experimental/config.h | 10 ---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index 67a856e511..0b7e8b2ee1 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -45,6 +45,17 @@ along with this program. If not, see . /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 +/* ws2812 RGB LED */ +#define RGB_DI_PIN D7 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 15 // Number of LEDs +#define RGBLIGHT_HUE_STEP 12 +#define RGBLIGHT_SAT_STEP 255 +#define RGBLIGHT_VAL_STEP 12 + +#define RGB_MIDI +#define RGBW_BB_TWI + /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/ergodox/keymaps/erez_experimental/config.h b/keyboards/ergodox/keymaps/erez_experimental/config.h index fbd12ab797..4da18c65aa 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/config.h +++ b/keyboards/ergodox/keymaps/erez_experimental/config.h @@ -9,15 +9,5 @@ #undef LEADER_TIMEOUT #define LEADER_TIMEOUT 300 -/* ws2812 RGB LED */ -#define RGB_DI_PIN D7 -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 15 // Number of LEDs -#define RGBLIGHT_HUE_STEP 12 -#define RGBLIGHT_SAT_STEP 255 -#define RGBLIGHT_VAL_STEP 12 - -#define RGB_MIDI -#define RGBW_BB_TWI #endif -- cgit v1.2.3 From 9caf866618840ca38f4ceb1166ad679174c752c3 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 28 Nov 2016 07:59:01 -0500 Subject: Tweaks EZ Makefile --- keyboards/ergodox/ez/Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/ez/Makefile b/keyboards/ergodox/ez/Makefile index 191c6bb664..9b6121e2c2 100644 --- a/keyboards/ergodox/ez/Makefile +++ b/keyboards/ergodox/ez/Makefile @@ -1,3 +1,8 @@ +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +COMMAND_ENABLE = no # Commands for debug and configuration +RGBLIGHT_ENABLE ?= yes +MIDI_ENABLE ?= yes + ifndef MAKEFILE_INCLUDED include ../../../Makefile -endif \ No newline at end of file +endif -- cgit v1.2.3 From d2b6438e391743544d437ca8c2998de6ab631894 Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 28 Nov 2016 14:10:31 +0100 Subject: A little cleanup, add some comments, change others. --- keyboards/ergodox/keymaps/bepo/keymap.c | 42 +++++++++++++-------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c index c1a8ae21d9..8f068e238d 100644 --- a/keyboards/ergodox/keymaps/bepo/keymap.c +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -1,19 +1,19 @@ #include "ergodox.h" -#include "debug.h" -#include "action_layer.h" #include "keymap_bepo.h" -#define BASE 0 // default layer -#define QWER 1 // qwerty compat layer -#define SQWER 2 // shifted qwerty compat layer -#define AQWER 3 // alted qwerty compat layer -#define FNAV 4 // function / navigation keys -#define NUM 5 // numeric keypad keys +// keymaps +#define BASE 0 // default layer, for bepo compatible systems +#define QWER 1 // bepo to qwerty base compat layer, for qwerty systems +#define SQWER 2 // bepo with shift key to qwerty compat layer +#define AQWER 3 // bepo with altgr key to qwerty compat layer +#define FNAV 4 // function / navigation / mouse layer +#define NUM 5 // numeric keypad layer -#define KP_00 0 +// macros +#define KP_00 0 // keypad "double 0" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Base layer +/* Keymap 0: default layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | @@ -50,7 +50,7 @@ KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, DF(QWER), DF(BASE), MO(NUM), MO(FNAV), KC_RSHIFT, KC_ENTER), -/* Keymap 1: QWERTY system compatibility layer +/* Keymap 1: bepo to qwerty base compat layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | @@ -87,7 +87,7 @@ KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, DF(QWER), DF(BASE), MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), -/* Keymap 2: QWERTY shifted system compatibility layer +/* Keymap 2: bepo with shift key to qwerty compat layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = | @@ -124,7 +124,7 @@ S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), -/* Keymap 3: QWERTY alted system compatibility layer +/* Keymap 3: bepo with altgr key to qwerty compat layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | @@ -161,7 +161,7 @@ KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, KC_TRNS, KC_TRNS, MO(NUM), MO(FNAV), MO(SQWER), KC_ENTER), -/* Keymap 4: function / navigation layer +/* Keymap 4: function / navigation / mouse layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | | @@ -198,7 +198,7 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO), -/* Keymap 5: numeric layer, sends keypad codes +/* Keymap 5: numeric keypad layer, sends keypad codes * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | NumLo| / | * | - | | @@ -237,12 +237,10 @@ KC_TRNS, KC_TRNS, 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) { switch(id) { + // keypad "double 0" case KP_00: if (record->event.pressed) { return MACRO( T(KP_0), D(KP_0), END ); @@ -253,11 +251,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } 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) { -}; -- cgit v1.2.3 From 84735836e309fe9e2c45ed991a58820ae2bb9123 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 28 Nov 2016 08:13:32 -0500 Subject: Tweaks position of TOG not to conflict with MO --- keyboards/ergodox/keymaps/erez_experimental/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 0c0e3c4e39..2963c40e31 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | |NxtTab|PrvTab| | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | | | | | | + * | | | |TOG | * ,------|------|------| |------+------+------. * |VAI |VAD |HUI | |SAI |TOG |MOD | * | | |------| |------| | | @@ -95,9 +95,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS, KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, + RGB_TOG, KC_TRNS, RGB_SAI, - RGB_SAD, RGB_TOG, RGB_MOD + RGB_SAD, KC_TRNS, RGB_MOD ), /* Keymap 2: Media and mouse keys * -- cgit v1.2.3 From f02eccbb29ee6a8cf421895dcef2e55a76c1bdcb Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 28 Nov 2016 14:16:42 +0100 Subject: Change layer names (cosmetic change) and reorder them so that the "shift" layer can be accessed from the "alt" layer when in QWERTY compat mode. --- keyboards/ergodox/keymaps/bepo/keymap.c | 124 ++++++++++++++++---------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c index 8f068e238d..c19ab0d48d 100644 --- a/keyboards/ergodox/keymaps/bepo/keymap.c +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -2,12 +2,12 @@ #include "keymap_bepo.h" // keymaps -#define BASE 0 // default layer, for bepo compatible systems -#define QWER 1 // bepo to qwerty base compat layer, for qwerty systems -#define SQWER 2 // bepo with shift key to qwerty compat layer -#define AQWER 3 // bepo with altgr key to qwerty compat layer +#define BEPO 0 // default layer, for bepo compatible systems +#define QW_B 1 // bepo to qwerty base compat layer, for qwerty systems +#define QW_A 2 // bepo with altgr key to qwerty compat layer +#define QW_S 3 // bepo with shift key to qwerty compat layer #define FNAV 4 // function / navigation / mouse layer -#define NUM 5 // numeric keypad layer +#define NUMK 5 // numeric keypad layer // macros #define KP_00 0 // keypad "double 0" @@ -26,20 +26,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | L_Num| | | + * | | |L_NumK| |L_NumK| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' */ -[BASE] = KEYMAP( +[BEPO] = KEYMAP( // Left hand BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC, BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA, BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB, KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, - DF(BASE), DF(QWER), - MO(NUM), + DF(BEPO), DF(QW_B), + MO(NUMK), KC_SPC, KC_LSHIFT, MO(FNAV), // Right hand KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL, @@ -47,8 +47,8 @@ KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -DF(QWER), DF(BASE), -MO(NUM), +DF(QW_B), DF(BEPO), +MO(NUMK), MO(FNAV), KC_RSHIFT, KC_ENTER), /* Keymap 1: bepo to qwerty base compat layer * @@ -63,31 +63,68 @@ MO(FNAV), KC_RSHIFT, KC_ENTER), * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | L_Num| | | + * | | |L_NumK| |L_NumK| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' */ -[QWER] = KEYMAP( +[QW_B] = KEYMAP( // Left hand KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL, KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC, KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA, KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB, KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, - DF(BASE), DF(QWER), - MO(NUM), - KC_SPC, MO(SQWER), MO(FNAV), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_SPC, MO(QW_S), KC_TRNS, +// Right hand + KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, + KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, + KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, + MO(QW_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, MO(QW_S), KC_ENTER), +/* Keymap 2: bepo with altgr key to qwerty compat layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | |L_NumK| |L_NumK| | | + * | _ |LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[QW_A] = KEYMAP( +// Left hand +KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL, +KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, +KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, +KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_UNDS, MO(QW_S), KC_TRNS, // Right hand KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, - MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -DF(QWER), DF(BASE), -MO(NUM), -MO(FNAV), MO(SQWER), KC_ENTER), -/* Keymap 2: bepo with shift key to qwerty compat layer + KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, MO(QW_S), KC_ENTER), +/* Keymap 3: bepo with shift key to qwerty compat layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = | @@ -100,12 +137,12 @@ MO(FNAV), MO(SQWER), KC_ENTER), * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | L_Num| | | + * | | |L_NumK| |L_NumK| | | * | Space|LShift|------| |------|RShift|Enter | * | | |L_FNav| |L_FNav| | | * `--------------------' `--------------------' */ -[SQWER] = KEYMAP( +[QW_S] = KEYMAP( // Left hand KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, @@ -124,43 +161,6 @@ S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), -/* Keymap 3: bepo with altgr key to qwerty compat layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | - * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| - * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m | - * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| - * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | - * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' - * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| - * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' - * | | | L_Num| | L_Num| | | - * | _ |LShift|------| |------|RShift|Enter | - * | | |L_FNav| |L_FNav| | | - * `--------------------' `--------------------' - */ -[AQWER] = KEYMAP( -// Left hand -KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL, -KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC, -KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA, -KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB, -KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, - KC_TRNS, KC_TRNS, - MO(NUM), - KC_UNDS, MO(SQWER), MO(FNAV), -// Right hand - KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL, - KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z, - KC_C, KC_T, KC_S, KC_R, KC_N, KC_M, - KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C, - KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -KC_TRNS, KC_TRNS, -MO(NUM), -MO(FNAV), MO(SQWER), KC_ENTER), /* Keymap 4: function / navigation / mouse layer * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -216,7 +216,7 @@ KC_TRNS, KC_TRNS, KC_NO), * | | | | | | | | * `--------------------' `--------------------' */ -[NUM] = KEYMAP( +[NUMK] = KEYMAP( // Left hand 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, @@ -234,7 +234,7 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, M(KP_00), KC_KP_COMMA, KC_KP_ENTER, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, -KC_TRNS, KC_TRNS, KC_TRNS) +KC_TRNS, KC_TRNS, KC_NO) }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -- cgit v1.2.3 From 5a2501d90fb9d2ea1a60d42dfd664d899865e6b5 Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 28 Nov 2016 16:38:03 +0100 Subject: Add the AZERTY compatibility layer. --- keyboards/ergodox/keymaps/bepo/keymap.c | 125 +++++++++++++++++++++++++++++-- keyboards/ergodox/keymaps/bepo/readme.md | 4 +- 2 files changed, 122 insertions(+), 7 deletions(-) diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c index c19ab0d48d..05250ee6a7 100644 --- a/keyboards/ergodox/keymaps/bepo/keymap.c +++ b/keyboards/ergodox/keymaps/bepo/keymap.c @@ -1,13 +1,17 @@ #include "ergodox.h" #include "keymap_bepo.h" +#include "keymap_french.h" // keymaps #define BEPO 0 // default layer, for bepo compatible systems #define QW_B 1 // bepo to qwerty base compat layer, for qwerty systems #define QW_A 2 // bepo with altgr key to qwerty compat layer #define QW_S 3 // bepo with shift key to qwerty compat layer -#define FNAV 4 // function / navigation / mouse layer -#define NUMK 5 // numeric keypad layer +#define AZ_B 4 // bepo to azerty base compat layer, for azerty systems +#define AZ_A 5 // bepo with altgr key to azerty compat layer +#define AZ_S 6 // bepo with shift key to azerty compat layer +#define FNAV 7 // function / navigation / mouse layer +#define NUMK 8 // numeric keypad layer // macros #define KP_00 0 // keypad "double 0" @@ -47,7 +51,7 @@ KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M, KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED, BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, -DF(QW_B), DF(BEPO), +DF(AZ_B), DF(BEPO), MO(NUMK), MO(FNAV), KC_RSHIFT, KC_ENTER), /* Keymap 1: bepo to qwerty base compat layer @@ -161,7 +165,118 @@ S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), -/* Keymap 4: function / navigation / mouse layer +/* Keymap 4: bepo to azerty base compat layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | b |e_acut| p | o |e_grav|Backsp| |CapsLo| ^ | v | d | l | j | z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | w | a | u | i | e | , |------| |------| c | t | s | r | n | m | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | e |a_grav| y | x | . | k | | | | ' | q | g | h | f | c_cedil| + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | |L_NumK| |L_NumK| | | + * | Space|LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[AZ_B] = KEYMAP( +// Left hand +FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LPRN, FR_RPRN, KC_DEL, +FR_PERC, KC_B, FR_EACU, KC_P, KC_O, FR_EGRV, KC_BSPC, +FR_W, FR_A, KC_U, KC_I, KC_E, FR_COMM, +KC_E, FR_AGRV, KC_Y, KC_X, FR_DOT, KC_K, KC_TAB, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_SPC, MO(AZ_S), KC_TRNS, +// Right hand + KC_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL, + KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, FR_M, + KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED, + MO(AZ_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, MO(AZ_S), KC_ENTER), +/* Keymap 5: bepo with altgr key to azerty compat layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | w | a |u_grav| trem | € | , |------| |------| c | t | s | r | n | m | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | / | \ | { | } | . | ~ | | | | ' | q | g | h | f | c | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | |L_NumK| |L_NumK| | | + * | _ |LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[AZ_A] = KEYMAP( +// Left hand +FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LBRC, FR_RBRC, KC_DEL, +FR_PERC, FR_PIPE, FR_EACU, FR_AMP, KC_O, FR_EGRV, KC_BSPC, +FR_W, FR_A, FR_UGRV, S(KC_LBRC), FR_EURO, FR_COMM, +FR_SLSH, FR_BSLS, FR_LCBR, FR_RCBR, FR_DOT, FR_TILD, KC_TAB, +KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT, + KC_TRNS, KC_TRNS, + KC_TRNS, + FR_UNDS, MO(AZ_S), KC_TRNS, +// Right hand + KC_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL, + KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z, + KC_C, KC_T, KC_S, KC_R, KC_N, FR_M, + KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED, + KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, MO(AZ_S), KC_ENTER), +/* Keymap 6: bepo with shift key to azerty compat layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | ° | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ` | B | E | P | O | E |Backsp| |CapsLo| ! | V | D | L | J | Z | + * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------| + * | W | A | U | I | E | ; |------| |------| C | T | S | R | N | M | + * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------| + * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C | + * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------' + * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause| + * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------' + * | | |L_NumK| |L_NumK| | | + * | Space|LShift|------| |------|RShift|Enter | + * | | |L_FNav| |L_FNav| | | + * `--------------------' `--------------------' + */ +[AZ_S] = KEYMAP( +// Left hand +FR_HASH, FR_1, FR_2, FR_3, FR_4, FR_5, KC_TRNS, +FR_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS, +S(FR_W), S(FR_A), S(KC_U), S(KC_I), S(KC_E), FR_SCLN, +S(KC_E), S(FR_A), S(KC_Y), S(KC_X), FR_COLN, S(KC_K), S(KC_TAB), +S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, +// Right hand + KC_TRNS, FR_6, FR_7, FR_8, FR_9, FR_0, FR_OVRR, + KC_TRNS, FR_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(FR_Z), + S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(FR_M), + KC_TRNS, FR_QUES, S(FR_Q), S(KC_G), S(KC_H), S(KC_F), S(KC_C), + S(KC_RALT), S(KC_RCTL), S(KC_RGUI), KC_TRNS, KC_TRNS, +KC_TRNS, KC_TRNS, +KC_TRNS, +KC_TRNS, KC_TRNS, KC_TRNS), +/* Keymap 7: function / navigation / mouse layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | | @@ -198,7 +313,7 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO), -/* Keymap 5: numeric keypad layer, sends keypad codes +/* Keymap 8: numeric keypad layer, sends keypad codes * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | NumLo| / | * | - | | diff --git a/keyboards/ergodox/keymaps/bepo/readme.md b/keyboards/ergodox/keymaps/bepo/readme.md index 51a5069851..2959ac8298 100644 --- a/keyboards/ergodox/keymaps/bepo/readme.md +++ b/keyboards/ergodox/keymaps/bepo/readme.md @@ -27,8 +27,8 @@ Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0". -Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle. +Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour des accès BIOS ou console en QWERTY. -TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY. +Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier AZERTY. Cette compatibilité n'est pas parfaite (pas de gestion des caractères non présents sur le clavier AZERTY, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour faire du bureau à distance vers un système Windows sans BEPO. > Olivier Smedts -- cgit v1.2.3 From 06f18e95d4670a055ca349da7d653e0bcb37d83a Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 29 Nov 2016 00:06:12 -0500 Subject: enable api sysex for ez --- keyboards/ergodox/ez/rules.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk index a9715beb85..f570061fe4 100644 --- a/keyboards/ergodox/ez/rules.mk +++ b/keyboards/ergodox/ez/rules.mk @@ -72,6 +72,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # SLEEP_LED_ENABLE = no +API_SYSEX_ENABLE ?= yes ifndef QUANTUM_DIR include ../../../Makefile -- cgit v1.2.3 From d0cefef946660865dae80877886fcce610920a27 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 29 Nov 2016 00:09:56 -0500 Subject: enable rgblight by default for ez --- keyboards/ergodox/ez/config.h | 11 +++++++++++ keyboards/ergodox/ez/rules.mk | 1 + 2 files changed, 12 insertions(+) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index 67a856e511..c2750a321f 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -41,6 +41,17 @@ along with this program. If not, see . #define LED_BRIGHTNESS_LO 15 #define LED_BRIGHTNESS_HI 255 +/* ws2812 RGB LED */ +#define RGB_DI_PIN D7 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 15 // Number of LEDs +#define RGBLIGHT_HUE_STEP 12 +#define RGBLIGHT_SAT_STEP 255 +#define RGBLIGHT_VAL_STEP 12 + +#define RGB_MIDI +#define RGBW_BB_TWI + /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk index f570061fe4..893cfa7a84 100644 --- a/keyboards/ergodox/ez/rules.mk +++ b/keyboards/ergodox/ez/rules.mk @@ -73,6 +73,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 SLEEP_LED_ENABLE = no API_SYSEX_ENABLE ?= yes +RGBLIGHT_ENABLE ?= yes ifndef QUANTUM_DIR include ../../../Makefile -- cgit v1.2.3 From f946d830f98da0161753d37da9659caa7469cf4f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 29 Nov 2016 00:11:11 -0500 Subject: guess i didnt pull --- keyboards/ergodox/ez/config.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index f3e1020bdb..c2750a321f 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -56,17 +56,6 @@ along with this program. If not, see . /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5 -/* ws2812 RGB LED */ -#define RGB_DI_PIN D7 -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 15 // Number of LEDs -#define RGBLIGHT_HUE_STEP 12 -#define RGBLIGHT_SAT_STEP 255 -#define RGBLIGHT_VAL_STEP 12 - -#define RGB_MIDI -#define RGBW_BB_TWI - /* * Feature disable options * These options are also useful to firmware size reduction. -- cgit v1.2.3 From 4094544d41450617bc21ab58646603b8964eae0e Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Tue, 29 Nov 2016 09:23:16 -0500 Subject: Test layout for ErgoDox EZ manufacturing robot --- .../ergodox/keymaps/robot_test_layout/keymap.c | 130 +++++++++++++++++++++ .../ergodox/keymaps/robot_test_layout/readme.md | 5 + quantum/rgblight.c | 6 + quantum/rgblight.h | 2 + 4 files changed, 143 insertions(+) create mode 100644 keyboards/ergodox/keymaps/robot_test_layout/keymap.c create mode 100644 keyboards/ergodox/keymaps/robot_test_layout/readme.md diff --git a/keyboards/ergodox/keymaps/robot_test_layout/keymap.c b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c new file mode 100644 index 0000000000..0363eedc2b --- /dev/null +++ b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c @@ -0,0 +1,130 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + RGB_FF0000, + RGB_00FF00, + RGB_0000FF, + RGB_FFFFFF, + RGB_TOGGLE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = KEYMAP( + RGB_TOGGLE,RGB_FF0000,RGB_00FF00,RGB_0000FF,RGB_FFFFFF,RGB_TOGGLE,KC_6, + KC_A,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_E,KC_A,KC_A,KC_S,KC_D,KC_F,KC_G,KC_A,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_L,KC_Z,KC_QUOTE,KC_N,KC_U,KC_C,KC_E,KC_8,KC_9,KC_Y,KC_COMMA,KC_6,KC_7,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,KC_J,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLASH,KC_H,KC_J,KC_K,KC_L,KC_J,KC_K,KC_Z,KC_N,KC_M,KC_COMMA,KC_DOT,KC_E,KC_QUOTE,KC_8,KC_7,KC_LBRACKET,KC_RBRACKET,KC_H,KC_9,KC_7,KC_8,KC_7,KC_6,KC_9), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(1) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + } + return MACRO_NONE; +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case RGB_FF0000: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + EZ_RGB(0xff0000); + register_code(KC_A); unregister_code(KC_A); + #endif + } + return false; + break; + case RGB_00FF00: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + EZ_RGB(0x00ff00); + register_code(KC_B); unregister_code(KC_B); + #endif + } + return false; + break; + case RGB_0000FF: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + EZ_RGB(0x0000ff); + register_code(KC_C); unregister_code(KC_C); + #endif + } + return false; + break; + case RGB_FFFFFF: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + EZ_RGB(0xffffff); + register_code(KC_D); unregister_code(KC_D); + #endif + } + return false; + break; + case RGB_TOGGLE: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_toggle(); + register_code(KC_F); unregister_code(KC_F); + #endif + } + return false; + break; + } + return true; +} + +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) { + 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_2_on(); + break; + case 5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + case 6: + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + case 7: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + default: + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/robot_test_layout/readme.md b/keyboards/ergodox/keymaps/robot_test_layout/readme.md new file mode 100644 index 0000000000..45dc2aa76c --- /dev/null +++ b/keyboards/ergodox/keymaps/robot_test_layout/readme.md @@ -0,0 +1,5 @@ +# Robot test layout + +Use this layout if you like to pretend you're [Norman](https://www.youtube.com/watch?v=-sbxFBay-tg), the ErgoDox EZ manufacturing robot. + +It's really meant just for internal use, but we're posting it on GitHub anyway, because hurray to open source. :) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index bb03d6e913..625971e0fe 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -425,6 +425,12 @@ void rgblight_timer_toggle(void) { dprintf("TIMER3 toggled.\n"); } +void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) { + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(r, g, b); +} + void rgblight_task(void) { if (rgblight_timer_enabled) { // mode = 1, static light, do nothing here diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 28a410e480..aa1d026e0e 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -84,6 +84,8 @@ void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1); void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); +#define EZ_RGB(val) rgblight_show_solid_color((val >> 16) & 0xFF, (val >> 8) & 0xFF, val & 0xFF) +void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b); void rgblight_task(void); -- cgit v1.2.3 From fe001d46fd06924bb81fe8d506f5be8894db3df0 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Mon, 28 Nov 2016 18:31:16 +1100 Subject: Initial version of Raw HID interface --- keyboards/planck/planck.c | 16 ++++++- keyboards/planck/rules.mk | 3 +- tmk_core/common.mk | 4 ++ tmk_core/common/raw_hid.h | 8 ++++ tmk_core/protocol/lufa/descriptor.c | 87 +++++++++++++++++++++++++++++++++- tmk_core/protocol/lufa/descriptor.h | 35 +++++++++++--- tmk_core/protocol/lufa/lufa.c | 94 +++++++++++++++++++++++++++++++++++++ 7 files changed, 237 insertions(+), 10 deletions(-) create mode 100644 tmk_core/common/raw_hid.h diff --git a/keyboards/planck/planck.c b/keyboards/planck/planck.c index 645b450d1d..0d37b66223 100644 --- a/keyboards/planck/planck.c +++ b/keyboards/planck/planck.c @@ -1,5 +1,8 @@ #include "planck.h" +#include "raw_hid.h" +#include "keymap.h" + #ifdef ONEHAND_ENABLE __attribute__ ((weak)) const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { @@ -16,4 +19,15 @@ void matrix_init_kb(void) { PORTE |= (1<<6); matrix_init_user(); -} \ No newline at end of file +} + +#ifdef RAW_ENABLE + +void raw_hid_receive( uint8_t *data, uint8_t length ) +{ + // Basic test of Raw HID + // Echo back data received + raw_hid_send( data, length ); +} + +#endif diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk index ccee972715..4874d92b9f 100644 --- a/keyboards/planck/rules.mk +++ b/keyboards/planck/rules.mk @@ -62,7 +62,8 @@ AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -API_SYSEX_ENABLE = yes +API_SYSEX_ENABLE = no +RAW_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/tmk_core/common.mk b/tmk_core/common.mk index f826a7b540..d65f02f12b 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -50,6 +50,10 @@ ifeq ($(strip $(EXTRAKEY_ENABLE)), yes) TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE endif +ifeq ($(strip $(RAW_ENABLE)), yes) + TMK_COMMON_DEFS += -DRAW_ENABLE +endif + ifeq ($(strip $(CONSOLE_ENABLE)), yes) TMK_COMMON_DEFS += -DCONSOLE_ENABLE else diff --git a/tmk_core/common/raw_hid.h b/tmk_core/common/raw_hid.h new file mode 100644 index 0000000000..86da02fd15 --- /dev/null +++ b/tmk_core/common/raw_hid.h @@ -0,0 +1,8 @@ +#ifndef _RAW_HID_H_ +#define _RAW_HID_H_ + +void raw_hid_receive( uint8_t *data, uint8_t length ); + +void raw_hid_send( uint8_t *data, uint8_t length ); + +#endif diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 6f2407f580..bf47787d29 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -164,6 +164,28 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] = }; #endif +#ifdef RAW_ENABLE +const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = +{ + HID_RI_USAGE_PAGE(16, 0xFF60), /* Vendor Page 0xFF60 */ + HID_RI_USAGE(8, 0x61), /* Vendor Usage 0x61 */ + HID_RI_COLLECTION(8, 0x01), /* Application */ + HID_RI_USAGE(8, 0x62), /* Vendor Usage 0x62 */ + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), + HID_RI_REPORT_COUNT(8, RAW_EPSIZE), + HID_RI_REPORT_SIZE(8, 0x08), + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + HID_RI_USAGE(8, 0x63), /* Vendor Usage 0x63 */ + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), + HID_RI_REPORT_COUNT(8, RAW_EPSIZE), + HID_RI_REPORT_SIZE(8, 0x08), + HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), + HID_RI_END_COLLECTION(0), +}; +#endif + #ifdef CONSOLE_ENABLE const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { @@ -399,6 +421,58 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = }, #endif + /* + * Raw + */ + #ifdef RAW_ENABLE + .Raw_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = RAW_INTERFACE, + .AlternateSetting = 0x00, + + .TotalEndpoints = 2, + + .Class = HID_CSCP_HIDClass, + .SubClass = HID_CSCP_NonBootSubclass, + .Protocol = HID_CSCP_NonBootProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .Raw_HID = + { + .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, + + .HIDSpec = VERSION_BCD(1,1,1), + .CountryCode = 0x00, + .TotalReportDescriptors = 1, + .HIDReportType = HID_DTYPE_Report, + .HIDReportLength = sizeof(RawReport) + }, + + .Raw_INEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = RAW_EPSIZE, + .PollingIntervalMS = 0x01 + }, + + .Raw_OUTEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = RAW_EPSIZE, + .PollingIntervalMS = 0x01 + }, + #endif + /* * Console */ @@ -754,7 +828,6 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .PollingIntervalMS = 0x05 }, #endif - }; @@ -846,6 +919,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, Size = sizeof(USB_HID_Descriptor_HID_t); break; #endif +#ifdef RAW_ENABLE + case RAW_INTERFACE: + Address = &ConfigurationDescriptor.Raw_HID; + Size = sizeof(USB_HID_Descriptor_HID_t); + break; +#endif #ifdef CONSOLE_ENABLE case CONSOLE_INTERFACE: Address = &ConfigurationDescriptor.Console_HID; @@ -878,6 +957,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, Size = sizeof(ExtrakeyReport); break; #endif +#ifdef RAW_ENABLE + case RAW_INTERFACE: + Address = &RawReport; + Size = sizeof(RawReport); + break; +#endif #ifdef CONSOLE_ENABLE case CONSOLE_INTERFACE: Address = &ConsoleReport; diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h index c6c94e3618..24ce420e6a 100644 --- a/tmk_core/protocol/lufa/descriptor.h +++ b/tmk_core/protocol/lufa/descriptor.h @@ -71,6 +71,14 @@ typedef struct USB_Descriptor_Endpoint_t Extrakey_INEndpoint; #endif +#ifdef RAW_ENABLE + // Raw HID Interface + USB_Descriptor_Interface_t Raw_Interface; + USB_HID_Descriptor_HID_t Raw_HID; + USB_Descriptor_Endpoint_t Raw_INEndpoint; + USB_Descriptor_Endpoint_t Raw_OUTEndpoint; +#endif + #ifdef CONSOLE_ENABLE // Console HID Interface USB_Descriptor_Interface_t Console_Interface; @@ -137,10 +145,16 @@ typedef struct # define EXTRAKEY_INTERFACE MOUSE_INTERFACE #endif +#ifdef RAW_ENABLE +# define RAW_INTERFACE (EXTRAKEY_INTERFACE + 1) +#else +# define RAW_INTERFACE EXTRAKEY_INTERFACE +#endif + #ifdef CONSOLE_ENABLE -# define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1) +# define CONSOLE_INTERFACE (RAW_INTERFACE + 1) #else -# define CONSOLE_INTERFACE EXTRAKEY_INTERFACE +# define CONSOLE_INTERFACE RAW_INTERFACE #endif #ifdef NKRO_ENABLE @@ -182,12 +196,19 @@ typedef struct # define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM #endif +#ifdef RAW_ENABLE +# define RAW_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1) +# define RAW_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2) +#else +# define RAW_OUT_EPNUM EXTRAKEY_IN_EPNUM +#endif + #ifdef CONSOLE_ENABLE -# define CONSOLE_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1) -# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 1) -//# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2) +# define CONSOLE_IN_EPNUM (RAW_OUT_EPNUM + 1) +//# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 2) +# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 1) #else -# define CONSOLE_OUT_EPNUM EXTRAKEY_IN_EPNUM +# define CONSOLE_OUT_EPNUM RAW_OUT_EPNUM #endif #ifdef NKRO_ENABLE @@ -217,7 +238,6 @@ typedef struct # define CDC_OUT_EPNUM MIDI_STREAM_OUT_EPNUM #endif - #if defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4 # error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)" #endif @@ -225,6 +245,7 @@ typedef struct #define KEYBOARD_EPSIZE 8 #define MOUSE_EPSIZE 8 #define EXTRAKEY_EPSIZE 8 +#define RAW_EPSIZE 32 #define CONSOLE_EPSIZE 32 #define NKRO_EPSIZE 32 #define MIDI_STREAM_EPSIZE 64 diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 39d4824b6b..aeb5f07815 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -80,6 +80,10 @@ #include "sysex_tools.h" #endif +#ifdef RAW_ENABLE + #include "raw_hid.h" +#endif + uint8_t keyboard_idle = 0; /* 0: Boot Protocol, 1: Report Protocol(default) */ uint8_t keyboard_protocol = 1; @@ -175,6 +179,80 @@ USB_ClassInfo_CDC_Device_t cdc_device = }; #endif +#ifdef RAW_ENABLE + +void raw_hid_send( uint8_t *data, uint8_t length ) +{ + // TODO: implement variable size packet + if ( length != RAW_EPSIZE ) + { + return; + } + + if (USB_DeviceState != DEVICE_STATE_Configured) + { + return; + } + + // TODO: decide if we allow calls to raw_hid_send() in the middle + // of other endpoint usage. + uint8_t ep = Endpoint_GetCurrentEndpoint(); + + Endpoint_SelectEndpoint(RAW_IN_EPNUM); + + // Check to see if the host is ready to accept another packet + if (Endpoint_IsINReady()) + { + // Write data + Endpoint_Write_Stream_LE(data, RAW_EPSIZE, NULL); + // Finalize the stream transfer to send the last packet + Endpoint_ClearIN(); + } + + Endpoint_SelectEndpoint(ep); +} + +__attribute__ ((weak)) +void raw_hid_receive( uint8_t *data, uint8_t length ) +{ + // Users should #include "raw_hid.h" in their own code + // and implement this function there. Leave this as weak linkage + // so users can opt to not handle data coming in. +} + +static void raw_hid_task(void) +{ + // Create a temporary buffer to hold the read in data from the host + uint8_t data[RAW_EPSIZE]; + bool data_read = false; + + // Device must be connected and configured for the task to run + if (USB_DeviceState != DEVICE_STATE_Configured) + return; + + Endpoint_SelectEndpoint(RAW_OUT_EPNUM); + + // Check to see if a packet has been sent from the host + if (Endpoint_IsOUTReceived()) + { + // Check to see if the packet contains data + if (Endpoint_IsReadWriteAllowed()) + { + /* Read data */ + Endpoint_Read_Stream_LE(data, sizeof(data), NULL); + data_read = true; + } + + // Finalize the stream transfer to receive the last packet + Endpoint_ClearOUT(); + + if ( data_read ) + { + raw_hid_receive( data, sizeof(data) ); + } + } +} +#endif /******************************************************************************* * Console @@ -294,6 +372,8 @@ void EVENT_USB_Device_WakeUp() #endif } + + #ifdef CONSOLE_ENABLE static bool console_flush = false; #define CONSOLE_FLUSH_SET(b) do { \ @@ -311,6 +391,7 @@ void EVENT_USB_Device_StartOfFrame(void) Console_Task(); console_flush = false; } + #endif /** Event handler for the USB_ConfigurationChanged event. @@ -339,6 +420,14 @@ void EVENT_USB_Device_ConfigurationChanged(void) EXTRAKEY_EPSIZE, ENDPOINT_BANK_SINGLE); #endif +#ifdef RAW_ENABLE + /* Setup Raw HID Report Endpoints */ + ConfigSuccess &= ENDPOINT_CONFIG(RAW_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, + RAW_EPSIZE, ENDPOINT_BANK_SINGLE); + ConfigSuccess &= ENDPOINT_CONFIG(RAW_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, + RAW_EPSIZE, ENDPOINT_BANK_SINGLE); +#endif + #ifdef CONSOLE_ENABLE /* Setup Console HID Report Endpoints */ ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, @@ -1064,9 +1153,14 @@ int main(void) CDC_Device_USBTask(&cdc_device); #endif +#ifdef RAW_ENABLE + raw_hid_task(); +#endif + #if !defined(INTERRUPT_CONTROL_ENDPOINT) USB_USBTask(); #endif + } } -- cgit v1.2.3 From 66b13a66e93c50ba6258fcde548ab946fd8db683 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Wed, 30 Nov 2016 22:22:57 -0500 Subject: Better layout --- .../ergodox/keymaps/robot_test_layout/keymap.c | 121 ++++++++++++--------- 1 file changed, 71 insertions(+), 50 deletions(-) diff --git a/keyboards/ergodox/keymaps/robot_test_layout/keymap.c b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c index 0363eedc2b..480be177f0 100644 --- a/keyboards/ergodox/keymaps/robot_test_layout/keymap.c +++ b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c @@ -9,16 +9,42 @@ enum custom_keycodes { RGB_00FF00, RGB_0000FF, RGB_FFFFFF, - RGB_TOGGLE + RGB_TOGGLE, + LED1, + LED2, + LED3 }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP( - RGB_TOGGLE,RGB_FF0000,RGB_00FF00,RGB_0000FF,RGB_FFFFFF,RGB_TOGGLE,KC_6, - KC_A,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_E,KC_A,KC_A,KC_S,KC_D,KC_F,KC_G,KC_A,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_L,KC_Z,KC_QUOTE,KC_N,KC_U,KC_C,KC_E,KC_8,KC_9,KC_Y,KC_COMMA,KC_6,KC_7,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,KC_J,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLASH,KC_H,KC_J,KC_K,KC_L,KC_J,KC_K,KC_Z,KC_N,KC_M,KC_COMMA,KC_DOT,KC_E,KC_QUOTE,KC_8,KC_7,KC_LBRACKET,KC_RBRACKET,KC_H,KC_9,KC_7,KC_8,KC_7,KC_6,KC_9), + RGB_TOGGLE, RGB_FF0000, RGB_00FF00, RGB_0000FF, RGB_FFFFFF, KC_5, KC_LPRN, + KC_GRAVE, KC_A, KC_B, KC_C, KC_D, KC_E, KC_EXLM, + KC_HASH, KC_J, KC_K, KC_L, KC_M, KC_N, + KC_AMPR, KC_T, KC_U, KC_V, KC_W, KC_X, KC_DLR, + KC_PIPE, KC_R, KC_PLUS, KC_LCBR, KC_RCBR, + + KC_F, KC_G, + KC_H, + KC_P, KC_O, KC_I, + + + + // RIGHT HAND + KC_RPRN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_AT, KC_F, KC_G, KC_H, KC_I, KC_COLN, KC_BSLS, + KC_O, KC_P, KC_Q, KC_R, KC_S, KC_QUOT, + LSFT(KC_COMM), KC_Y, KC_Z, KC_COMM, KC_DOT, KC_SLSH, KC_ASTR, + KC_A, KC_B, KC_C, KC_D, KC_PIPE, + + LED1, KC_E, + LED2, + LED3, KC_J, KC_K + ) }; + + const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_LAYER_TAP_TOGGLE(1) }; @@ -35,7 +61,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; - +bool status_led1_on = false, status_led2_on = false, status_led3_on = false; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { // dynamically generate these. @@ -43,7 +69,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { #ifdef RGBLIGHT_ENABLE EZ_RGB(0xff0000); - register_code(KC_A); unregister_code(KC_A); + register_code(KC_1); unregister_code(KC_1); #endif } return false; @@ -52,7 +78,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { #ifdef RGBLIGHT_ENABLE EZ_RGB(0x00ff00); - register_code(KC_B); unregister_code(KC_B); + register_code(KC_2); unregister_code(KC_2); #endif } return false; @@ -61,7 +87,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { #ifdef RGBLIGHT_ENABLE EZ_RGB(0x0000ff); - register_code(KC_C); unregister_code(KC_C); + register_code(KC_3); unregister_code(KC_3); #endif } return false; @@ -70,7 +96,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { #ifdef RGBLIGHT_ENABLE EZ_RGB(0xffffff); - register_code(KC_D); unregister_code(KC_D); + register_code(KC_4); unregister_code(KC_4); #endif } return false; @@ -79,52 +105,47 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { #ifdef RGBLIGHT_ENABLE rgblight_toggle(); - register_code(KC_F); unregister_code(KC_F); + register_code(KC_EQL); unregister_code(KC_EQL); #endif } return false; break; + case LED1: + if (record->event.pressed) { + if(status_led1_on) { + ergodox_right_led_1_off(); + status_led1_on = false; + } else { + ergodox_right_led_1_on(); + status_led1_on = true; + } + } + return false; + break; + case LED2: + if (record->event.pressed) { + if(status_led2_on) { + ergodox_right_led_2_off(); + status_led2_on = false; + } else { + ergodox_right_led_2_on(); + status_led2_on = true; + } + } + return false; + break; + case LED3: + if (record->event.pressed) { + if(status_led3_on) { + ergodox_right_led_3_off(); + status_led3_on = false; + } else { + ergodox_right_led_3_on(); + status_led3_on = true; + } + } + return false; + break; } return true; } - -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) { - 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_2_on(); - break; - case 5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - case 6: - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; - case 7: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; - default: - break; - } - -}; -- cgit v1.2.3 From 1f290f6213c7c3bf001a85242cfae4f9b5a14942 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 1 Dec 2016 16:21:15 -0500 Subject: Make my builds smaller --- keyboards/planck/keymaps/cbbrowne/Makefile | 7 ++++--- keyboards/planck/keymaps/cbbrowne/config.h | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/keymaps/cbbrowne/Makefile b/keyboards/planck/keymaps/cbbrowne/Makefile index 581e08cd02..3c20da84be 100644 --- a/keyboards/planck/keymaps/cbbrowne/Makefile +++ b/keyboards/planck/keymaps/cbbrowne/Makefile @@ -5,8 +5,8 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work @@ -16,10 +16,11 @@ AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +API_SYSEX_ENABLE = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/cbbrowne/config.h b/keyboards/planck/keymaps/cbbrowne/config.h index 1e04ba61d7..bd15fd5a22 100644 --- a/keyboards/planck/keymaps/cbbrowne/config.h +++ b/keyboards/planck/keymaps/cbbrowne/config.h @@ -1,6 +1,9 @@ #ifndef CONFIG_USER_H #define CONFIG_USER_H +#define NO_DEBUG +#define NO_PRINT + #include "../../config.h" #define LEADER_TIMEOUT 300 -- cgit v1.2.3 From b787ed9dc6c81f47215c48d47240717afa3cd440 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 1 Dec 2016 16:24:03 -0500 Subject: More notes on .hex size protection --- readme.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index a92ae4c1dc..5c82efcddd 100644 --- a/readme.md +++ b/readme.md @@ -1318,14 +1318,27 @@ You probably don't want to "brick" your keyboard, making it impossible to rewrite firmware onto it. Here are some of the parameters to show what things are (and likely aren't) too risky. -- If a keyboard map does not include RESET, then, to get into DFU +- If your keyboard map does not include RESET, then, to get into DFU mode, you will need to press the reset button on the PCB, which - requires unscrewing some bits. + requires unscrewing the bottom. - Messing with tmk_core / common files might make the keyboard inoperable - Too large a .hex file is trouble; `make dfu` will erase the block, test the size (oops, wrong order!), which errors out, failing to - flash the keyboard + flash the keyboard, leaving it in DFU mode. + - To this end, note that the maximum .hex file size on Planck is + 7000h (28672 decimal) +```Linking: .build/planck_rev4_cbbrowne.elf [OK] +Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK] + +Size after: + text data bss dec hex filename + 0 22396 0 22396 577c planck_rev4_cbbrowne.hex +``` + - The above file is of size 22396/577ch, which is less than + 28672/7000h + - As long as you have a suitable alternative .hex file around, you + can retry, loading that one - DFU tools do /not/ allow you to write into the bootloader (unless you throw in extra fruitsalad of options), so there is little risk there. -- cgit v1.2.3 From af4c44deef55a300113b4a65f8d3ab37bf2ef97d Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 1 Dec 2016 16:31:30 -0500 Subject: Improve docs on SYSEX bit --- keyboards/planck/keymaps/cbbrowne/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/Makefile b/keyboards/planck/keymaps/cbbrowne/Makefile index 3c20da84be..b1c70ace70 100644 --- a/keyboards/planck/keymaps/cbbrowne/Makefile +++ b/keyboards/planck/keymaps/cbbrowne/Makefile @@ -16,7 +16,7 @@ AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -API_SYSEX_ENABLE = no +API_SYSEX_ENABLE = yes # Enable SYSEX API (+5390) # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -- cgit v1.2.3 From 95a160bf92ebc5b92ef360f1649e2bd5e3ac2000 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Thu, 1 Dec 2016 16:31:51 -0500 Subject: Improve docs on memory usage --- readme.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/readme.md b/readme.md index 5c82efcddd..afdb03ba54 100644 --- a/readme.md +++ b/readme.md @@ -348,6 +348,10 @@ This allows you output audio on the C6 pin (needs abstracting). See the [audio s Use this to debug changes to variable values, see the [tracing variables](#tracing-variables) section for more information. +`API_SYSEX_ENABLE` + +This enables using the Quantum SYSEX API to send strings (somewhere?) + ### Customizing Makefile options on a per-keymap basis If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard. @@ -1339,6 +1343,9 @@ Size after: 28672/7000h - As long as you have a suitable alternative .hex file around, you can retry, loading that one + - Some of the options you might specify in your keyboard's Makefile + consume extra memory; watch out for BOOTMAGIC_ENABLE, + MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE - DFU tools do /not/ allow you to write into the bootloader (unless you throw in extra fruitsalad of options), so there is little risk there. -- cgit v1.2.3 From 570e784140becd8621c4d05e8e36c8b0f8402b3b Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Fri, 2 Dec 2016 12:31:43 -0500 Subject: I want page-down/page-up - put those on LOWER-Left/Right near bottom corner --- keyboards/planck/keymaps/cbbrowne/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 4742ca5c06..717f4b2351 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -62,6 +62,7 @@ - How about Alt-F1 thru Alt-F8? - What's the keystroke to get from X to console these days? - A layer for doing console switching would not be a bad idea + - I haven't got page-up/page-down, let's have that... */ enum layers { @@ -117,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH, _______}, - {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP} }, [_KEYPAD] = { /* Key Pad */ {KC_ESC, USERNAME, MVERSION, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, -- cgit v1.2.3 From f6e86cd2c904cc3951b2341b9c73a535dbf28f03 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Fri, 2 Dec 2016 12:35:03 -0500 Subject: I also want page-down/page-up on UPPER layer --- keyboards/planck/keymaps/cbbrowne/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c index 717f4b2351..2be4dab4b1 100644 --- a/keyboards/planck/keymaps/cbbrowne/keymap.c +++ b/keyboards/planck/keymaps/cbbrowne/keymap.c @@ -112,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH,_______}, - {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + {_______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP} }, [_LOWER] = { /* 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}, -- cgit v1.2.3 From 5d43a2aecf2fcb9ed9a25ddc0924c66e544bcdf8 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 2 Dec 2016 12:53:18 -0500 Subject: Kristian's keymap --- keyboards/ergodox/keymaps/kristian/keymap.c | 79 +++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 keyboards/ergodox/keymaps/kristian/keymap.c diff --git a/keyboards/ergodox/keymaps/kristian/keymap.c b/keyboards/ergodox/keymaps/kristian/keymap.c new file mode 100644 index 0000000000..2238590917 --- /dev/null +++ b/keyboards/ergodox/keymaps/kristian/keymap.c @@ -0,0 +1,79 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" +#include "keymap_fr_ch.h" +#include "keymap_french.h" +#include "keymap_german.h" +#include "keymap_german_ch.h" +#include "keymap_nordic.h" +#include "keymap_norwegian.h" +#include "keymap_spanish.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + +[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_QUOT),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_QUOT),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER), + +[1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_TRANSPARENT,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_7,KC_8,KC_9,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_4,KC_5,KC_6,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_0,KC_1,KC_2,KC_3,NO_LBRC,NO_RBRC,KC_LSHIFT,KC_COMMA,KC_DOT,LSFT(NO_LBRC),LSFT(NO_RBRC),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LALT,KC_LGUI,KC_ENTER), + +[2] = KEYMAP(KC_ESCAPE,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_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LALT,KC_LGUI,KC_MS_BTN1,KC_MS_BTN2,KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_SPACE,KC_LGUI,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_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,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_ESCAPE,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_ACCEL0,KC_MS_ACCEL1), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(1) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + } + return MACRO_NONE; +}; + +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) { + 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_2_on(); + break; + case 5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + case 6: + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + case 7: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + default: + break; + } + +}; -- cgit v1.2.3 From aa70aa3962f0c148916412eb40924e108b6b5c07 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 2 Dec 2016 13:03:39 -0500 Subject: Tweaks Kristian's layout again --- keyboards/ergodox/keymaps/kristian/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/kristian/keymap.c b/keyboards/ergodox/keymaps/kristian/keymap.c index 2238590917..e7e4243255 100644 --- a/keyboards/ergodox/keymaps/kristian/keymap.c +++ b/keyboards/ergodox/keymaps/kristian/keymap.c @@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_QUOT),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_QUOT),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER), +[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_APOS),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_APOS),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER), [1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_TRANSPARENT,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_7,KC_8,KC_9,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_4,KC_5,KC_6,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_0,KC_1,KC_2,KC_3,NO_LBRC,NO_RBRC,KC_LSHIFT,KC_COMMA,KC_DOT,LSFT(NO_LBRC),LSFT(NO_RBRC),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LALT,KC_LGUI,KC_ENTER), -- cgit v1.2.3 From 555e41d9e5f8d393637898e2c77c64066b648245 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 2 Dec 2016 13:03:51 -0500 Subject: Annotates nordic --- quantum/keymap_extras/keymap_nordic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index da5c829757..9b0ef35ca9 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -13,7 +13,7 @@ #define NO_ACUT KC_EQL #define NO_AM KC_LBRC -#define NO_QUOT KC_RBRC +#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout #define NO_AE KC_SCLN #define NO_OSLH KC_QUOT #define NO_APOS KC_NUHS -- cgit v1.2.3 From 245c9508bd6169d2feb398e99234103cc669efa7 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 2 Dec 2016 13:32:50 -0500 Subject: adds warnings to 4 keymaps --- keyboards/planck/keymaps/bone2planck/Makefile | 4 +++- keyboards/planck/keymaps/brandon/Makefile | 4 +++- keyboards/planck/keymaps/impossible/Makefile | 4 +++- keyboards/planck/keymaps/jeebak/Makefile | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/bone2planck/Makefile b/keyboards/planck/keymaps/bone2planck/Makefile index 581e08cd02..cf2c31f0fb 100644 --- a/keyboards/planck/keymaps/bone2planck/Makefile +++ b/keyboards/planck/keymaps/bone2planck/Makefile @@ -1,4 +1,6 @@ - +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in diff --git a/keyboards/planck/keymaps/brandon/Makefile b/keyboards/planck/keymaps/brandon/Makefile index 581e08cd02..cf2c31f0fb 100644 --- a/keyboards/planck/keymaps/brandon/Makefile +++ b/keyboards/planck/keymaps/brandon/Makefile @@ -1,4 +1,6 @@ - +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in diff --git a/keyboards/planck/keymaps/impossible/Makefile b/keyboards/planck/keymaps/impossible/Makefile index 581e08cd02..cf2c31f0fb 100644 --- a/keyboards/planck/keymaps/impossible/Makefile +++ b/keyboards/planck/keymaps/impossible/Makefile @@ -1,4 +1,6 @@ - +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in diff --git a/keyboards/planck/keymaps/jeebak/Makefile b/keyboards/planck/keymaps/jeebak/Makefile index 581e08cd02..cf2c31f0fb 100644 --- a/keyboards/planck/keymaps/jeebak/Makefile +++ b/keyboards/planck/keymaps/jeebak/Makefile @@ -1,4 +1,6 @@ - +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in -- cgit v1.2.3 From cee0cf8a6eca8d2316dd75f39351f13132ff0257 Mon Sep 17 00:00:00 2001 From: cbbrowne Date: Fri, 2 Dec 2016 14:12:55 -0500 Subject: Adds warnings to Planck keymaps that exceed 0x7000 bytes in size #929 --- keyboards/planck/keymaps/jhenahan/Makefile | 4 +++- keyboards/planck/keymaps/joe/Makefile | 5 ++++- keyboards/planck/keymaps/leo/Makefile | 5 ++++- keyboards/planck/keymaps/lucas/Makefile | 5 ++++- keyboards/planck/keymaps/mollat/Makefile | 5 ++++- keyboards/planck/keymaps/nico/Makefile | 5 ++++- keyboards/planck/keymaps/premek/Makefile | 3 +++ keyboards/planck/keymaps/priyadi/Makefile | 3 +++ keyboards/planck/keymaps/pvc/Makefile | 5 ++++- keyboards/planck/keymaps/sgoodwin/Makefile | 5 ++++- keyboards/planck/keymaps/tak3over/Makefile | 5 ++++- keyboards/planck/keymaps/thermal_printer/Makefile | 3 +++ keyboards/planck/keymaps/vifon/Makefile | 3 +++ 13 files changed, 47 insertions(+), 9 deletions(-) diff --git a/keyboards/planck/keymaps/jhenahan/Makefile b/keyboards/planck/keymaps/jhenahan/Makefile index de01ad2404..83da2a7f89 100644 --- a/keyboards/planck/keymaps/jhenahan/Makefile +++ b/keyboards/planck/keymaps/jhenahan/Makefile @@ -1,4 +1,6 @@ - +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in diff --git a/keyboards/planck/keymaps/joe/Makefile b/keyboards/planck/keymaps/joe/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/joe/Makefile +++ b/keyboards/planck/keymaps/joe/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/leo/Makefile b/keyboards/planck/keymaps/leo/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/leo/Makefile +++ b/keyboards/planck/keymaps/leo/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/lucas/Makefile b/keyboards/planck/keymaps/lucas/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/lucas/Makefile +++ b/keyboards/planck/keymaps/lucas/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/mollat/Makefile b/keyboards/planck/keymaps/mollat/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/mollat/Makefile +++ b/keyboards/planck/keymaps/mollat/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/nico/Makefile b/keyboards/planck/keymaps/nico/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/nico/Makefile +++ b/keyboards/planck/keymaps/nico/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/premek/Makefile b/keyboards/planck/keymaps/premek/Makefile index 0f4953888d..b2ca419445 100644 --- a/keyboards/planck/keymaps/premek/Makefile +++ b/keyboards/planck/keymaps/premek/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile index aa211d2f05..f113f496c2 100644 --- a/keyboards/planck/keymaps/priyadi/Makefile +++ b/keyboards/planck/keymaps/priyadi/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options diff --git a/keyboards/planck/keymaps/pvc/Makefile b/keyboards/planck/keymaps/pvc/Makefile index b2ff961fa5..c92ca1bffa 100644 --- a/keyboards/planck/keymaps/pvc/Makefile +++ b/keyboards/planck/keymaps/pvc/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options # change to "no" to disable the options, or define them in the Makefile in @@ -21,4 +24,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/sgoodwin/Makefile b/keyboards/planck/keymaps/sgoodwin/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/sgoodwin/Makefile +++ b/keyboards/planck/keymaps/sgoodwin/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/tak3over/Makefile b/keyboards/planck/keymaps/tak3over/Makefile index 581e08cd02..b2ca419445 100644 --- a/keyboards/planck/keymaps/tak3over/Makefile +++ b/keyboards/planck/keymaps/tak3over/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options @@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile -endif \ No newline at end of file +endif diff --git a/keyboards/planck/keymaps/thermal_printer/Makefile b/keyboards/planck/keymaps/thermal_printer/Makefile index 3d1d11877f..9477d1179a 100644 --- a/keyboards/planck/keymaps/thermal_printer/Makefile +++ b/keyboards/planck/keymaps/thermal_printer/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options diff --git a/keyboards/planck/keymaps/vifon/Makefile b/keyboards/planck/keymaps/vifon/Makefile index 838cb4e885..53660a2e76 100644 --- a/keyboards/planck/keymaps/vifon/Makefile +++ b/keyboards/planck/keymaps/vifon/Makefile @@ -1,3 +1,6 @@ +# Please remove if no longer applicable +$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) +$(warning Please disable some options in the Makefile to resolve) # Build Options -- cgit v1.2.3 From 044fa3ff856393d75a80fe6625b4a5682b81b76d Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sun, 27 Nov 2016 22:51:30 -0800 Subject: Connect the adafruit ble code to the lufa main loop There are now 3 potential locations to send HID reports: 1. USB 2. The bluefruit easy key 3. Adafruit BLE Generally speaking, if USB is connected then we should prefer to send the reports there; it is generally the best channel for this. The bluefruit module has no feedback about bluetooth connectivity so the code must speculatively send reports over both USB and bluetooth. The BLE module has connectivity feedback. In general we want to prefer to send HID reports over USB while connected there, even if BLE is connected. Except that it is convenient to force them over BLE while testing the implementation. This policy has been extracted out into a where_to_send function which returns a bitmask of which of the channels should be used. --- tmk_core/protocol/lufa/lufa.c | 82 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 39d4824b6b..ee2552c190 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -52,6 +52,7 @@ #include "descriptor.h" #include "lufa.h" #include "quantum.h" +#include #ifdef NKRO_ENABLE #include "keycode_config.h" @@ -67,13 +68,16 @@ #ifdef BLUETOOTH_ENABLE #include "bluetooth.h" #endif +#ifdef ADAFRUIT_BLE_ENABLE + #include "adafruit_ble.h" +#endif #ifdef VIRTSER_ENABLE #include "virtser.h" #endif #if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE) - #include "rgblight.h" + #include "rgblight.h" #endif #ifdef MIDI_ENABLE @@ -297,7 +301,9 @@ void EVENT_USB_Device_WakeUp() #ifdef CONSOLE_ENABLE static bool console_flush = false; #define CONSOLE_FLUSH_SET(b) do { \ - uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \ + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {\ + console_flush = b; \ + } \ } while (0) // called every 1ms @@ -501,9 +507,35 @@ static uint8_t keyboard_leds(void) return keyboard_led_stats; } +#define SendToUSB 1 +#define SendToBT 2 +#define SendToBLE 4 + +static inline uint8_t where_to_send(void) { +#ifdef ADAFRUIT_BLE_ENABLE +#if 0 + if (adafruit_ble_is_connected()) { + // For testing, send to BLE as a priority + return SendToBLE; + } +#endif + + // This is the real policy + if (USB_DeviceState != DEVICE_STATE_Configured) { + if (adafruit_ble_is_connected()) { + return SendToBLE; + } + } +#endif + return ((USB_DeviceState == DEVICE_STATE_Configured) ? SendToUSB : 0) +#ifdef BLUETOOTH_ENABLE + || SendToBT +#endif + ; +} + static void send_keyboard(report_keyboard_t *report) { - #ifdef BLUETOOTH_ENABLE bluefruit_serial_send(0xFD); for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { @@ -512,9 +544,17 @@ static void send_keyboard(report_keyboard_t *report) #endif uint8_t timeout = 255; + uint8_t where = where_to_send(); - if (USB_DeviceState != DEVICE_STATE_Configured) - return; +#ifdef ADAFRUIT_BLE_ENABLE + if (where & SendToBLE) { + adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); + } +#endif + + if (!(where & SendToUSB)) { + return; + } /* Select the Keyboard Report Endpoint */ #ifdef NKRO_ENABLE @@ -567,8 +607,17 @@ static void send_mouse(report_mouse_t *report) uint8_t timeout = 255; - if (USB_DeviceState != DEVICE_STATE_Configured) - return; + uint8_t where = where_to_send(); + +#ifdef ADAFRUIT_BLE_ENABLE + if (where & SendToBLE) { + // FIXME: mouse buttons + adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h); + } +#endif + if (!(where & SendToUSB)) { + return; + } /* Select the Mouse Report Endpoint */ Endpoint_SelectEndpoint(MOUSE_IN_EPNUM); @@ -626,9 +675,16 @@ static void send_consumer(uint16_t data) #endif uint8_t timeout = 255; + uint8_t where = where_to_send(); - if (USB_DeviceState != DEVICE_STATE_Configured) - return; +#ifdef ADAFRUIT_BLE_ENABLE + if (where & SendToBLE) { + adafruit_ble_send_consumer_key(data, 0); + } +#endif + if (!(where & SendToUSB)) { + return; + } report_extra_t r = { .report_id = REPORT_ID_CONSUMER, @@ -1038,7 +1094,7 @@ int main(void) print("Keyboard start.\n"); while (1) { - #ifndef BLUETOOTH_ENABLE + #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE) while (USB_DeviceState == DEVICE_STATE_Suspended) { print("[s]"); suspend_power_down(); @@ -1054,11 +1110,15 @@ int main(void) midi_device_process(&midi_device); // MIDI_Task(); #endif - + #if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) rgblight_task(); #endif +#ifdef ADAFRUIT_BLE_ENABLE + adafruit_ble_task(); +#endif + #ifdef VIRTSER_ENABLE virtser_task(); CDC_Device_USBTask(&cdc_device); -- cgit v1.2.3 From d639e08a3131892c608760df4e3806d843a91176 Mon Sep 17 00:00:00 2001 From: ofples Date: Sat, 3 Dec 2016 13:05:02 +0200 Subject: Refactored and improved ps2 mouse feature --- tmk_core/protocol/ps2_mouse.c | 369 ++++++++++++++++++++++++------------------ tmk_core/protocol/ps2_mouse.h | 81 ++++++++-- 2 files changed, 286 insertions(+), 164 deletions(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index 82f6966e8e..f247ba8dca 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -18,63 +18,99 @@ along with this program. If not, see . #include #include #include -#include "ps2.h" #include "ps2_mouse.h" -#include "report.h" #include "host.h" #include "timer.h" #include "print.h" +#include "report.h" #include "debug.h" +#include "ps2.h" -#ifndef PS2_INIT_DELAY -#define PS2_INIT_DELAY 1000 -#endif +/* ============================= MACROS ============================ */ + +#define PS2_MOUSE_SEND(command, message) \ +do { \ + uint8_t rcv = ps2_host_send(command); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ + } \ +} while(0) + +#define PS2_MOUSE_SEND_SAFE(command, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_SET_SAFE(command, value, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + PS2_MOUSE_SEND(value, "Sending value"); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_RECEIVE(message) \ +do { \ + uint8_t rcv = ps2_host_recv_response(); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ + } \ +} while(0) + +static enum ps2_mouse_mode_e { + PS2_MOUSE_STREAM_MODE, + PS2_MOUSE_REMOTE_MODE, +} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; static report_mouse_t mouse_report = {}; +static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); +static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); +static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report); +static inline void ps2_mouse_enable_scrolling(void); +static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report); -static void print_usb_data(void); - +/* ============================= IMPLEMENTATION ============================ */ /* supports only 3 button mouse at this time */ -uint8_t ps2_mouse_init(void) { - uint8_t rcv; - +void ps2_mouse_init(void) { ps2_host_init(); - _delay_ms(PS2_INIT_DELAY); // wait for powering up + _delay_ms(1000); // wait for powering up - // send Reset - rcv = ps2_host_send(0xFF); - print("ps2_mouse_init: send Reset: "); - phex(rcv); phex(ps2_error); print("\n"); + PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset"); - // read completion code of BAT - rcv = ps2_host_recv_response(); - print("ps2_mouse_init: read BAT: "); - phex(rcv); phex(ps2_error); print("\n"); + PS2_MOUSE_RECEIVE("ps2_mouse_init: read BAT"); + PS2_MOUSE_RECEIVE("ps2_mouse_init: read DevID"); - // read Device ID - rcv = ps2_host_recv_response(); - print("ps2_mouse_init: read DevID: "); - phex(rcv); phex(ps2_error); print("\n"); +#ifdef PS2_MOUSE_USE_REMOTE_MODE + ps2_mouse_set_remote_mode(); +#else + ps2_mouse_enable_data_reporting(); +#endif - // send Set Remote mode - rcv = ps2_host_send(0xF0); - print("ps2_mouse_init: send 0xF0: "); - phex(rcv); phex(ps2_error); print("\n"); +#ifdef PS2_MOUSE_ENABLE_SCROLLING + ps2_mouse_enable_scrolling(); +#endif - return 0; +#ifdef PS2_MOUSE_USE_2_1_SCALING + ps2_mouse_set_scaling_2_1(); +#endif } -#define X_IS_NEG (mouse_report.buttons & (1<buttons & (1<buttons & (1<buttons & (1<buttons & (1<x = X_IS_NEG ? + ((!X_IS_OVF && -127 <= mouse_report->x && mouse_report->x <= -1) ? mouse_report->x : -127) : + ((!X_IS_OVF && 0 <= mouse_report->x && mouse_report->x <= 127) ? mouse_report->x : 127); + mouse_report->y = Y_IS_NEG ? + ((!Y_IS_OVF && -127 <= mouse_report->y && mouse_report->y <= -1) ? mouse_report->y : -127) : + ((!Y_IS_OVF && 0 <= mouse_report->y && mouse_report->y <= 127) ? mouse_report->y : 127); + + // remove sign and overflow flags + mouse_report->buttons &= PS2_MOUSE_BTN_MASK; + + // invert coordinate of y to conform to USB HID mouse + mouse_report->y = -mouse_report->y; } -static void print_usb_data(void) -{ +static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report) { + mouse_report->x = 0; + mouse_report->y = 0; + mouse_report->v = 0; + mouse_report->h = 0; + mouse_report->buttons = 0; +} + +static inline void ps2_mouse_print_report(report_mouse_t *mouse_report) { if (!debug_mouse) return; - print("ps2_mouse usb: ["); - phex(mouse_report.buttons); print("|"); - print_hex8((uint8_t)mouse_report.x); print(" "); - print_hex8((uint8_t)mouse_report.y); print(" "); - print_hex8((uint8_t)mouse_report.v); print(" "); - print_hex8((uint8_t)mouse_report.h); print("]\n"); + print("ps2_mouse: ["); + phex(mouse_report->buttons); print("|"); + print_hex8((uint8_t)mouse_report->x); print(" "); + print_hex8((uint8_t)mouse_report->y); print(" "); + print_hex8((uint8_t)mouse_report->v); print(" "); + print_hex8((uint8_t)mouse_report->h); print("]\n"); +} + +static inline void ps2_mouse_enable_scrolling(void) { + PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Initiaing scroll wheel enable: Set sample rate"); + PS2_MOUSE_SEND(200, "200"); + PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate"); + PS2_MOUSE_SEND(100, "100"); + PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate"); + PS2_MOUSE_SEND(80, "80"); + PS2_MOUSE_SEND(PS2_MOUSE_GET_DEVICE_ID, "Finished enabling scroll wheel"); + _delay_ms(20); } +#define PRESS_SCROLL_BUTTONS mouse_report->buttons |= (PS2_MOUSE_SCROLL_BTN_MASK) +#define RELEASE_SCROLL_BUTTONS mouse_report->buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK) +static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { + static enum { + SCROLL_NONE, + SCROLL_BTN, + SCROLL_SENT, + } scroll_state = SCROLL_NONE; + static uint16_t scroll_button_time = 0; + + if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) { + // All scroll buttons are pressed + + if (scroll_state == SCROLL_NONE) { + scroll_button_time = timer_read(); + scroll_state = SCROLL_BTN; + } + + // If the mouse has moved, update the report to scroll instead of move the mouse + if (mouse_report->x || mouse_report->y) { + scroll_state = SCROLL_SENT; + mouse_report->v = -mouse_report->y/(PS2_MOUSE_SCROLL_DIVISOR_V); + mouse_report->h = mouse_report->x/(PS2_MOUSE_SCROLL_DIVISOR_H); + mouse_report->x = 0; + mouse_report->y = 0; + } + } else if (0 == (PS2_MOUSE_SCROLL_BTN_MASK & mouse_report->buttons)) { + // None of the scroll buttons are pressed + +#if PS2_MOUSE_SCROLL_BTN_SEND + if (scroll_state == SCROLL_BTN + && timer_elapsed(scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) { + PRESS_SCROLL_BUTTONS; + host_mouse_send(mouse_report); + _delay_ms(100); + RELEASE_SCROLL_BUTTONS; + } +#endif + scroll_state = SCROLL_NONE; + } -/* PS/2 Mouse Synopsis - * http://www.computer-engineering.org/ps2mouse/ - * - * Command: - * 0xFF: Reset - * 0xF6: Set Defaults Sampling; rate=100, resolution=4cnt/mm, scaling=1:1, reporting=disabled - * 0xF5: Disable Data Reporting - * 0xF4: Enable Data Reporting - * 0xF3: Set Sample Rate - * 0xF2: Get Device ID - * 0xF0: Set Remote Mode - * 0xEB: Read Data - * 0xEA: Set Stream Mode - * 0xE9: Status Request - * 0xE8: Set Resolution - * 0xE7: Set Scaling 2:1 - * 0xE6: Set Scaling 1:1 - * - * Mode: - * Stream Mode: devices sends the data when it changs its state - * Remote Mode: host polls the data periodically - * - * This code uses Remote Mode and polls the data with Read Data(0xEB). - * - * Data format: - * byte|7 6 5 4 3 2 1 0 - * ----+-------------------------------------------------------------- - * 0|Yovflw Xovflw Ysign Xsign 1 Middle Right Left - * 1| X movement - * 2| Y movement - */ + RELEASE_SCROLL_BUTTONS; +} \ No newline at end of file diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h index 27d9790d43..3b498059dc 100644 --- a/tmk_core/protocol/ps2_mouse.h +++ b/tmk_core/protocol/ps2_mouse.h @@ -20,15 +20,13 @@ along with this program. If not, see . #include -#define PS2_MOUSE_READ_DATA 0xEB - /* * Data format: * byte|7 6 5 4 3 2 1 0 - * ----+-------------------------------------------------------------- - * 0|Yovflw Xovflw Ysign Xsign 1 Middle Right Left - * 1| X movement(0-255) - * 2| Y movement(0-255) + * ----+---------------------------------------------------------------- + * 0|[Yovflw][Xovflw][Ysign ][Xsign ][ 1 ][Middle][Right ][Left ] + * 1|[ X movement(0-255) ] + * 2|[ Y movement(0-255) ] */ #define PS2_MOUSE_BTN_MASK 0x07 #define PS2_MOUSE_BTN_LEFT 0 @@ -39,10 +37,6 @@ along with this program. If not, see . #define PS2_MOUSE_X_OVFLW 6 #define PS2_MOUSE_Y_OVFLW 7 - -/* - * Scroll by mouse move with pressing button - */ /* mouse button to start scrolling; set 0 to disable scroll */ #ifndef PS2_MOUSE_SCROLL_BTN_MASK #define PS2_MOUSE_SCROLL_BTN_MASK (1<. #ifndef PS2_MOUSE_SCROLL_DIVISOR_H #define PS2_MOUSE_SCROLL_DIVISOR_H 2 #endif +/* multiply reported mouse values by these */ +#ifndef PS2_MOUSE_X_MULTIPLIER +#define PS2_MOUSE_X_MULTIPLIER 1 +#endif +#ifndef PS2_MOUSE_Y_MULTIPLIER +#define PS2_MOUSE_Y_MULTIPLIER 1 +#endif +#ifndef PS2_MOUSE_V_MULTIPLIER +#define PS2_MOUSE_V_MULTIPLIER 1 +#endif +/* For some mice this will need to be 0x0F */ +#ifndef PS2_MOUSE_SCROLL_MASK +#define PS2_MOUSE_SCROLL_MASK 0xFF +#endif + +enum ps2_mouse_command_e { + PS2_MOUSE_RESET = 0xFF, + PS2_MOUSE_RESEND = 0xFE, + PS2_MOSUE_SET_DEFAULTS = 0xF6, + PS2_MOUSE_DISABLE_DATA_REPORTING = 0xF5, + PS2_MOUSE_ENABLE_DATA_REPORTING = 0xF4, + PS2_MOUSE_SET_SAMPLE_RATE = 0xF3, + PS2_MOUSE_GET_DEVICE_ID = 0xF2, + PS2_MOUSE_SET_REMOTE_MODE = 0xF0, + PS2_MOUSE_SET_WRAP_MODE = 0xEC, + PS2_MOUSE_READ_DATA = 0xEB, + PS2_MOUSE_SET_STREAM_MODE = 0xEA, + PS2_MOUSE_STATUS_REQUEST = 0xE9, + PS2_MOUSE_SET_RESOLUTION = 0xE8, + PS2_MOUSE_SET_SCALING_2_1 = 0xE7, + PS2_MOUSE_SET_SCALING_1_1 = 0xE6, +}; + +typedef enum ps2_mouse_resolution_e { + PS2_MOUSE_1_COUNT_MM, + PS2_MOUSE_2_COUNT_MM, + PS2_MOUSE_4_COUNT_MM, + PS2_MOUSE_8_COUNT_MM, +} ps2_mouse_resolution_t; +typedef enum ps2_mouse_sample_rate_e { + PS2_MOUSE_10_SAMPLES_SEC = 10, + PS2_MOUSE_20_SAMPLES_SEC = 20, + PS2_MOUSE_40_SAMPLES_SEC = 40, + PS2_MOUSE_60_SAMPLES_SEC = 60, + PS2_MOUSE_80_SAMPLES_SEC = 80, + PS2_MOUSE_100_SAMPLES_SEC = 100, + PS2_MOUSE_200_SAMPLES_SEC = 200, +} ps2_mouse_sample_rate_t; + +void ps2_mouse_init(void); -uint8_t ps2_mouse_init(void); void ps2_mouse_task(void); +void ps2_mouse_disable_data_reporting(void); + +void ps2_mouse_enable_data_reporting(void); + +void ps2_mouse_set_remote_mode(void); + +void ps2_mouse_set_stream_mode(void); + +void ps2_mouse_set_scaling_2_1(void); + +void ps2_mouse_set_scaling_1_1(void); + +void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution); + +void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate); + #endif -- cgit v1.2.3 From 9f41544e1de12b92bdc15538ec7a9e66a4af0c43 Mon Sep 17 00:00:00 2001 From: Ofer Plesser Date: Sat, 3 Dec 2016 13:09:42 +0200 Subject: Added back PS2_MOUSE_INIT_DELAY define --- tmk_core/protocol/ps2_mouse.c | 2 +- tmk_core/protocol/ps2_mouse.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index f247ba8dca..04c15dd4fd 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -283,4 +283,4 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { } RELEASE_SCROLL_BUTTONS; -} \ No newline at end of file +} diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h index 3b498059dc..e11c705fc6 100644 --- a/tmk_core/protocol/ps2_mouse.h +++ b/tmk_core/protocol/ps2_mouse.h @@ -66,6 +66,9 @@ along with this program. If not, see . #ifndef PS2_MOUSE_SCROLL_MASK #define PS2_MOUSE_SCROLL_MASK 0xFF #endif +#ifndef PS2_MOUSE_INIT_DELAY +#define PS2_MOUSE_INIT_DELAY 1000 +#endif enum ps2_mouse_command_e { PS2_MOUSE_RESET = 0xFF, -- cgit v1.2.3 From 8e2732edf3c457d98dd4526d88dad26786cb3db9 Mon Sep 17 00:00:00 2001 From: Ofer Plesser Date: Sat, 3 Dec 2016 13:11:37 +0200 Subject: Updated ps2 mouse documentation in readme --- readme.md | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index be15108329..1f06fe79fa 100644 --- a/readme.md +++ b/readme.md @@ -1191,7 +1191,7 @@ Please note the USB port can only supply a limited amount of power to the keyboa Its possible to hook up a PS/2 mouse (for example touchpads or trackpoints) to your keyboard as a composite device. -Then, decide whether to use USART (best), interrupts (better) or busywait (not recommended), and enable the relevant option. +There are three available modes for hooking up PS/2 devices: USART (best), interrupts (better) or busywait (not recommended). ### Busywait version @@ -1316,6 +1316,116 @@ In your keyboard config.h: #endif ``` +### Additional Settings + +#### PS/2 mouse features + +These enable settings supported by the PS/2 mouse protocol: http://www.computer-engineering.org/ps2mouse/ + +``` +/* Use remote mode instead of the default stream mode (see link) */ +#define PS2_MOUSE_USE_REMOTE_MODE + +/* Enable the scrollwheel or scroll gesture on your mouse or touchpad */ +#define PS2_MOUSE_ENABLE_SCROLLING + +/* Some mice will need a scroll mask to be configured. The default is 0xFF. */ +#define PS2_MOUSE_SCROLL_MASK 0x0F + +/* Applies a transformation to the movement before sending to the host (see link) */ +#define PS2_MOUSE_USE_2_1_SCALING + +/* The time to wait after initializing the ps2 host */ +#define PS2_MOUSE_INIT_DELAY 1000 /* Default */ +``` + +You can also call the following functions from ps2_mouse.h + +``` +void ps2_mouse_disable_data_reporting(void); + +void ps2_mouse_enable_data_reporting(void); + +void ps2_mouse_set_remote_mode(void); + +void ps2_mouse_set_stream_mode(void); + +void ps2_mouse_set_scaling_2_1(void); + +void ps2_mouse_set_scaling_1_1(void); + +void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution); + +void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate); +``` + +#### Fine control + +Use the following defines to change the sensitivity and speed of the mouse. +Note: you can also use `ps2_mouse_set_resolution` for the same effect (not supported on most touchpads). + +``` +#define PS2_MOUSE_X_MULTIPLIER 3 +#define PS2_MOUSE_Y_MULTIPLIER 3 +#define PS2_MOUSE_V_MULTIPLIER 1 +``` + +#### Scroll button + +If you're using a trackpoint, you will likely want to be able to use it for scrolling. +Its possible to enable a "scroll button/s" that when pressed will cause the mouse to scroll instead of moving. +To enable the feature, you must set a scroll button mask as follows: + +``` +#define PS2_MOUSE_SCROLL_BTN_MASK (1< Date: Sat, 3 Dec 2016 13:41:56 +0200 Subject: Forgot to use define in delay instead of hardcoded number --- tmk_core/protocol/ps2_mouse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index 04c15dd4fd..af971dd497 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -88,7 +88,7 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report); void ps2_mouse_init(void) { ps2_host_init(); - _delay_ms(1000); // wait for powering up + _delay_ms(PS2_MOUSE_INIT_DELAY); // wait for powering up PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset"); -- cgit v1.2.3 From f39e1b5dfe7552f01dbc6eab95c268f41a9d98e2 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 3 Dec 2016 14:36:39 -0500 Subject: cleans-up formatting of readme --- readme.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 1f06fe79fa..b618334dc3 100644 --- a/readme.md +++ b/readme.md @@ -1442,13 +1442,16 @@ what things are (and likely aren't) too risky. flash the keyboard, leaving it in DFU mode. - To this end, note that the maximum .hex file size on Planck is 7000h (28672 decimal) -```Linking: .build/planck_rev4_cbbrowne.elf [OK] + +``` +Linking: .build/planck_rev4_cbbrowne.elf [OK] Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK] Size after: text data bss dec hex filename 0 22396 0 22396 577c planck_rev4_cbbrowne.hex ``` + - The above file is of size 22396/577ch, which is less than 28672/7000h - As long as you have a suitable alternative .hex file around, you -- cgit v1.2.3 From ae66f0d70214b8a5e81ecf5977619bcd4bf6f413 Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 3 Dec 2016 17:09:11 -0500 Subject: added plate files for lets split --- keyboards/pilcrow/Makefile | 3 + keyboards/pilcrow/config.h | 162 + keyboards/pilcrow/keymaps/default/Makefile | 21 + keyboards/pilcrow/keymaps/default/config.h | 8 + keyboards/pilcrow/keymaps/default/keymap.c | 88 + keyboards/pilcrow/keymaps/default/readme.md | 1 + keyboards/pilcrow/pilcrow.c | 28 + keyboards/pilcrow/pilcrow.h | 23 + keyboards/pilcrow/readme.md | 28 + keyboards/pilcrow/rules.mk | 67 + keyboards/weebkeeb/Makefile | 3 + keyboards/weebkeeb/aek.dxf | 6486 ++++++++++++++++++++++++++ keyboards/weebkeeb/config.h | 162 + keyboards/weebkeeb/keymaps/default/Makefile | 21 + keyboards/weebkeeb/keymaps/default/config.h | 8 + keyboards/weebkeeb/keymaps/default/keymap.c | 119 + keyboards/weebkeeb/keymaps/default/readme.md | 1 + keyboards/weebkeeb/readme.md | 28 + keyboards/weebkeeb/rules.mk | 67 + keyboards/weebkeeb/weebkeeb.c | 28 + keyboards/weebkeeb/weebkeeb.h | 23 + 21 files changed, 7375 insertions(+) create mode 100644 keyboards/pilcrow/Makefile create mode 100644 keyboards/pilcrow/config.h create mode 100644 keyboards/pilcrow/keymaps/default/Makefile create mode 100644 keyboards/pilcrow/keymaps/default/config.h create mode 100644 keyboards/pilcrow/keymaps/default/keymap.c create mode 100644 keyboards/pilcrow/keymaps/default/readme.md create mode 100644 keyboards/pilcrow/pilcrow.c create mode 100644 keyboards/pilcrow/pilcrow.h create mode 100644 keyboards/pilcrow/readme.md create mode 100644 keyboards/pilcrow/rules.mk create mode 100644 keyboards/weebkeeb/Makefile create mode 100644 keyboards/weebkeeb/aek.dxf create mode 100644 keyboards/weebkeeb/config.h create mode 100644 keyboards/weebkeeb/keymaps/default/Makefile create mode 100644 keyboards/weebkeeb/keymaps/default/config.h create mode 100644 keyboards/weebkeeb/keymaps/default/keymap.c create mode 100644 keyboards/weebkeeb/keymaps/default/readme.md create mode 100644 keyboards/weebkeeb/readme.md create mode 100644 keyboards/weebkeeb/rules.mk create mode 100644 keyboards/weebkeeb/weebkeeb.c create mode 100644 keyboards/weebkeeb/weebkeeb.h diff --git a/keyboards/pilcrow/Makefile b/keyboards/pilcrow/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/pilcrow/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/pilcrow/config.h b/keyboards/pilcrow/config.h new file mode 100644 index 0000000000..d79c1ba40c --- /dev/null +++ b/keyboards/pilcrow/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT pilcrow +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 10 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B2, C6, D7, E6 } +#define MATRIX_COL_PINS { B6, D1, B4, B5, D4, D0, B3, B1, F7, F6 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/pilcrow/keymaps/default/Makefile b/keyboards/pilcrow/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/pilcrow/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/config.h b/keyboards/pilcrow/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/pilcrow/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/keymap.c b/keyboards/pilcrow/keymaps/default/keymap.c new file mode 100644 index 0000000000..e382e4c6ad --- /dev/null +++ b/keyboards/pilcrow/keymaps/default/keymap.c @@ -0,0 +1,88 @@ +#include "pilcrow.h" +#define _______ KC_TRNS +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ + KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MT(MOD_LSFT, KC_SPC), MO(2), MO(3), KC_DEL, KC_ESC \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[1] = KEYMAP( \ + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, \ + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_PIPE, S(KC_QUOT), \ + _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_GRV \ +), +[2] = KEYMAP( \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, \ + OSM(MOD_LSFT), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_BSLS, KC_QUOT, \ + _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[3] = KEYMAP( \ + RESET, KC_UP, _______, _______, _______, _______, _______, KC_MS_WH_DOWN, KC_MS_U, KC_MS_WH_UP, \ + KC_LEFT, KC_DOWN, KC_RIGHT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_MS_L,KC_MS_D, KC_MS_R, \ + RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, \ + _______, _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______, _______, _______, _______ \ +) +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/readme.md b/keyboards/pilcrow/keymaps/default/readme.md new file mode 100644 index 0000000000..95472dfca8 --- /dev/null +++ b/keyboards/pilcrow/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for pilcrow \ No newline at end of file diff --git a/keyboards/pilcrow/pilcrow.c b/keyboards/pilcrow/pilcrow.c new file mode 100644 index 0000000000..c8243df7bf --- /dev/null +++ b/keyboards/pilcrow/pilcrow.c @@ -0,0 +1,28 @@ +#include "pilcrow.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/pilcrow/pilcrow.h b/keyboards/pilcrow/pilcrow.h new file mode 100644 index 0000000000..7138ccb3f6 --- /dev/null +++ b/keyboards/pilcrow/pilcrow.h @@ -0,0 +1,23 @@ +#ifndef PILCROW_H +#define PILCROW_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 } \ +} + +#endif diff --git a/keyboards/pilcrow/readme.md b/keyboards/pilcrow/readme.md new file mode 100644 index 0000000000..7a7f6d2af5 --- /dev/null +++ b/keyboards/pilcrow/readme.md @@ -0,0 +1,28 @@ +pilcrow keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme](/). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/pilcrow folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make default`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/pilcrow/rules.mk b/keyboards/pilcrow/rules.mk new file mode 100644 index 0000000000..55898147dd --- /dev/null +++ b/keyboards/pilcrow/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 diff --git a/keyboards/weebkeeb/Makefile b/keyboards/weebkeeb/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/weebkeeb/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/weebkeeb/aek.dxf b/keyboards/weebkeeb/aek.dxf new file mode 100644 index 0000000000..cfe80946bd --- /dev/null +++ b/keyboards/weebkeeb/aek.dxf @@ -0,0 +1,6486 @@ +0 +SECTION +2 +ENTITIES +0 +LINE +8 +0 +10 +104.7875 +20 +-89.2875 +11 +104.7875 +21 +-91.6875 +0 +LINE +8 +0 +10 +104.7875 +20 +-91.6875 +11 +102.3875 +21 +-91.6875 +0 +LINE +8 +0 +10 +102.3875 +20 +-91.6875 +11 +102.3875 +21 +-89.2875 +0 +LINE +8 +0 +10 +102.3875 +20 +-89.2875 +11 +104.7875 +21 +-89.2875 +0 +LINE +8 +0 +10 +116.8875 +20 +-89.2875 +11 +116.8875 +21 +-91.6875 +0 +LINE +8 +0 +10 +116.8875 +20 +-91.6875 +11 +114.4875 +21 +-91.6875 +0 +LINE +8 +0 +10 +114.4875 +20 +-91.6875 +11 +114.4875 +21 +-89.2875 +0 +LINE +8 +0 +10 +114.4875 +20 +-89.2875 +11 +116.8875 +21 +-89.2875 +0 +CIRCLE +8 +0 +10 +109.6375 +20 +-90.4875 +40 +3.15 +0 +LINE +8 +0 +10 +103.4875 +20 +-94.3875 +11 +103.4875 +21 +-99.4875 +0 +LINE +8 +0 +10 +103.4875 +20 +-99.4875 +11 +100.8875 +21 +-99.4875 +0 +LINE +8 +0 +10 +100.8875 +20 +-99.4875 +11 +100.8875 +21 +-94.3875 +0 +LINE +8 +0 +10 +100.8875 +20 +-94.3875 +11 +103.4875 +21 +-94.3875 +0 +LINE +8 +0 +10 +191.7875 +20 +-94.3875 +11 +191.7875 +21 +-99.4875 +0 +LINE +8 +0 +10 +191.7875 +20 +-99.4875 +11 +194.3875 +21 +-99.4875 +0 +LINE +8 +0 +10 +194.3875 +20 +-99.4875 +11 +194.3875 +21 +-94.3875 +0 +LINE +8 +0 +10 +194.3875 +20 +-94.3875 +11 +191.7875 +21 +-94.3875 +0 +LINE +8 +0 +10 +155.3875 +20 +-84.0875 +11 +139.8875 +21 +-84.0875 +0 +LINE +8 +0 +10 +139.8875 +20 +-84.0875 +11 +139.8875 +21 +-96.8875 +0 +LINE +8 +0 +10 +139.8875 +20 +-96.8875 +11 +155.3875 +21 +-96.8875 +0 +LINE +8 +0 +10 +155.3875 +20 +-96.8875 +11 +155.3875 +21 +-84.0875 +0 +LINE +8 +0 +10 +256.28125 +20 +-56.2875 +11 +256.28125 +21 +-61.3875 +0 +LINE +8 +0 +10 +256.28125 +20 +-61.3875 +11 +253.68125 +21 +-61.3875 +0 +LINE +8 +0 +10 +253.68125 +20 +-61.3875 +11 +253.68125 +21 +-56.2875 +0 +LINE +8 +0 +10 +253.68125 +20 +-56.2875 +11 +256.28125 +21 +-56.2875 +0 +LINE +8 +0 +10 +281.88125 +20 +-56.2875 +11 +281.88125 +21 +-61.3875 +0 +LINE +8 +0 +10 +281.88125 +20 +-61.3875 +11 +284.48125 +21 +-61.3875 +0 +LINE +8 +0 +10 +284.48125 +20 +-61.3875 +11 +284.48125 +21 +-56.2875 +0 +LINE +8 +0 +10 +284.48125 +20 +-56.2875 +11 +281.88125 +21 +-56.2875 +0 +LINE +8 +0 +10 +276.83125 +20 +-45.9875 +11 +261.33125 +21 +-45.9875 +0 +LINE +8 +0 +10 +261.33125 +20 +-45.9875 +11 +261.33125 +21 +-58.7875 +0 +LINE +8 +0 +10 +261.33125 +20 +-58.7875 +11 +276.83125 +21 +-58.7875 +0 +LINE +8 +0 +10 +276.83125 +20 +-58.7875 +11 +276.83125 +21 +-45.9875 +0 +LINE +8 +0 +10 +258.6625 +20 +-18.1875 +11 +258.6625 +21 +-23.2875 +0 +LINE +8 +0 +10 +258.6625 +20 +-23.2875 +11 +256.0625 +21 +-23.2875 +0 +LINE +8 +0 +10 +256.0625 +20 +-23.2875 +11 +256.0625 +21 +-18.1875 +0 +LINE +8 +0 +10 +256.0625 +20 +-18.1875 +11 +258.6625 +21 +-18.1875 +0 +LINE +8 +0 +10 +284.2625 +20 +-18.1875 +11 +284.2625 +21 +-23.2875 +0 +LINE +8 +0 +10 +284.2625 +20 +-23.2875 +11 +286.8625 +21 +-23.2875 +0 +LINE +8 +0 +10 +286.8625 +20 +-23.2875 +11 +286.8625 +21 +-18.1875 +0 +LINE +8 +0 +10 +286.8625 +20 +-18.1875 +11 +284.2625 +21 +-18.1875 +0 +LINE +8 +0 +10 +279.2125 +20 +-7.8875 +11 +263.7125 +21 +-7.8875 +0 +LINE +8 +0 +10 +263.7125 +20 +-7.8875 +11 +263.7125 +21 +-20.6875 +0 +LINE +8 +0 +10 +263.7125 +20 +-20.6875 +11 +279.2125 +21 +-20.6875 +0 +LINE +8 +0 +10 +279.2125 +20 +-20.6875 +11 +279.2125 +21 +-7.8875 +0 +LINE +8 +0 +10 +13.39375 +20 +-75.3375 +11 +13.39375 +21 +-80.4375 +0 +LINE +8 +0 +10 +13.39375 +20 +-80.4375 +11 +10.79375 +21 +-80.4375 +0 +LINE +8 +0 +10 +10.79375 +20 +-80.4375 +11 +10.79375 +21 +-75.3375 +0 +LINE +8 +0 +10 +10.79375 +20 +-75.3375 +11 +13.39375 +21 +-75.3375 +0 +LINE +8 +0 +10 +38.99375 +20 +-75.3375 +11 +38.99375 +21 +-80.4375 +0 +LINE +8 +0 +10 +38.99375 +20 +-80.4375 +11 +41.59375 +21 +-80.4375 +0 +LINE +8 +0 +10 +41.59375 +20 +-80.4375 +11 +41.59375 +21 +-75.3375 +0 +LINE +8 +0 +10 +41.59375 +20 +-75.3375 +11 +38.99375 +21 +-75.3375 +0 +LINE +8 +0 +10 +33.94375 +20 +-65.0375 +11 +18.44375 +21 +-65.0375 +0 +LINE +8 +0 +10 +18.44375 +20 +-65.0375 +11 +18.44375 +21 +-77.8375 +0 +LINE +8 +0 +10 +18.44375 +20 +-77.8375 +11 +33.94375 +21 +-77.8375 +0 +LINE +8 +0 +10 +33.94375 +20 +-77.8375 +11 +33.94375 +21 +-65.0375 +0 +LINE +8 +0 +10 +193.4875 +20 +-7.8875 +11 +177.9875 +21 +-7.8875 +0 +LINE +8 +0 +10 +177.9875 +20 +-7.8875 +11 +177.9875 +21 +-20.6875 +0 +LINE +8 +0 +10 +177.9875 +20 +-20.6875 +11 +193.4875 +21 +-20.6875 +0 +LINE +8 +0 +10 +193.4875 +20 +-20.6875 +11 +193.4875 +21 +-7.8875 +0 +LINE +8 +0 +10 +174.4375 +20 +-7.8875 +11 +158.9375 +21 +-7.8875 +0 +LINE +8 +0 +10 +158.9375 +20 +-7.8875 +11 +158.9375 +21 +-20.6875 +0 +LINE +8 +0 +10 +158.9375 +20 +-20.6875 +11 +174.4375 +21 +-20.6875 +0 +LINE +8 +0 +10 +174.4375 +20 +-20.6875 +11 +174.4375 +21 +-7.8875 +0 +LINE +8 +0 +10 +183.9625 +20 +-26.9375 +11 +168.4625 +21 +-26.9375 +0 +LINE +8 +0 +10 +168.4625 +20 +-26.9375 +11 +168.4625 +21 +-39.7375 +0 +LINE +8 +0 +10 +168.4625 +20 +-39.7375 +11 +183.9625 +21 +-39.7375 +0 +LINE +8 +0 +10 +183.9625 +20 +-39.7375 +11 +183.9625 +21 +-26.9375 +0 +LINE +8 +0 +10 +169.675 +20 +-45.9875 +11 +154.175 +21 +-45.9875 +0 +LINE +8 +0 +10 +154.175 +20 +-45.9875 +11 +154.175 +21 +-58.7875 +0 +LINE +8 +0 +10 +154.175 +20 +-58.7875 +11 +169.675 +21 +-58.7875 +0 +LINE +8 +0 +10 +169.675 +20 +-58.7875 +11 +169.675 +21 +-45.9875 +0 +LINE +8 +0 +10 +150.625 +20 +-45.9875 +11 +135.125 +21 +-45.9875 +0 +LINE +8 +0 +10 +135.125 +20 +-45.9875 +11 +135.125 +21 +-58.7875 +0 +LINE +8 +0 +10 +135.125 +20 +-58.7875 +11 +150.625 +21 +-58.7875 +0 +LINE +8 +0 +10 +150.625 +20 +-58.7875 +11 +150.625 +21 +-45.9875 +0 +LINE +8 +0 +10 +160.15 +20 +-65.0375 +11 +144.65 +21 +-65.0375 +0 +LINE +8 +0 +10 +144.65 +20 +-65.0375 +11 +144.65 +21 +-77.8375 +0 +LINE +8 +0 +10 +144.65 +20 +-77.8375 +11 +160.15 +21 +-77.8375 +0 +LINE +8 +0 +10 +160.15 +20 +-77.8375 +11 +160.15 +21 +-65.0375 +0 +LINE +8 +0 +10 +141.1 +20 +-65.0375 +11 +125.6 +21 +-65.0375 +0 +LINE +8 +0 +10 +125.6 +20 +-65.0375 +11 +125.6 +21 +-77.8375 +0 +LINE +8 +0 +10 +125.6 +20 +-77.8375 +11 +141.1 +21 +-77.8375 +0 +LINE +8 +0 +10 +141.1 +20 +-77.8375 +11 +141.1 +21 +-65.0375 +0 +LINE +8 +0 +10 +155.3875 +20 +-7.8875 +11 +139.8875 +21 +-7.8875 +0 +LINE +8 +0 +10 +139.8875 +20 +-7.8875 +11 +139.8875 +21 +-20.6875 +0 +LINE +8 +0 +10 +139.8875 +20 +-20.6875 +11 +155.3875 +21 +-20.6875 +0 +LINE +8 +0 +10 +155.3875 +20 +-20.6875 +11 +155.3875 +21 +-7.8875 +0 +LINE +8 +0 +10 +136.3375 +20 +-7.8875 +11 +120.8375 +21 +-7.8875 +0 +LINE +8 +0 +10 +120.8375 +20 +-7.8875 +11 +120.8375 +21 +-20.6875 +0 +LINE +8 +0 +10 +120.8375 +20 +-20.6875 +11 +136.3375 +21 +-20.6875 +0 +LINE +8 +0 +10 +136.3375 +20 +-20.6875 +11 +136.3375 +21 +-7.8875 +0 +LINE +8 +0 +10 +164.9125 +20 +-26.9375 +11 +149.4125 +21 +-26.9375 +0 +LINE +8 +0 +10 +149.4125 +20 +-26.9375 +11 +149.4125 +21 +-39.7375 +0 +LINE +8 +0 +10 +149.4125 +20 +-39.7375 +11 +164.9125 +21 +-39.7375 +0 +LINE +8 +0 +10 +164.9125 +20 +-39.7375 +11 +164.9125 +21 +-26.9375 +0 +LINE +8 +0 +10 +145.8625 +20 +-26.9375 +11 +130.3625 +21 +-26.9375 +0 +LINE +8 +0 +10 +130.3625 +20 +-26.9375 +11 +130.3625 +21 +-39.7375 +0 +LINE +8 +0 +10 +130.3625 +20 +-39.7375 +11 +145.8625 +21 +-39.7375 +0 +LINE +8 +0 +10 +145.8625 +20 +-39.7375 +11 +145.8625 +21 +-26.9375 +0 +LINE +8 +0 +10 +131.575 +20 +-45.9875 +11 +116.075 +21 +-45.9875 +0 +LINE +8 +0 +10 +116.075 +20 +-45.9875 +11 +116.075 +21 +-58.7875 +0 +LINE +8 +0 +10 +116.075 +20 +-58.7875 +11 +131.575 +21 +-58.7875 +0 +LINE +8 +0 +10 +131.575 +20 +-58.7875 +11 +131.575 +21 +-45.9875 +0 +LINE +8 +0 +10 +122.05 +20 +-65.0375 +11 +106.55 +21 +-65.0375 +0 +LINE +8 +0 +10 +106.55 +20 +-65.0375 +11 +106.55 +21 +-77.8375 +0 +LINE +8 +0 +10 +106.55 +20 +-77.8375 +11 +122.05 +21 +-77.8375 +0 +LINE +8 +0 +10 +122.05 +20 +-77.8375 +11 +122.05 +21 +-65.0375 +0 +LINE +8 +0 +10 +103.0 +20 +-65.0375 +11 +87.5 +21 +-65.0375 +0 +LINE +8 +0 +10 +87.5 +20 +-65.0375 +11 +87.5 +21 +-77.8375 +0 +LINE +8 +0 +10 +87.5 +20 +-77.8375 +11 +103.0 +21 +-77.8375 +0 +LINE +8 +0 +10 +103.0 +20 +-77.8375 +11 +103.0 +21 +-65.0375 +0 +LINE +8 +0 +10 +117.2875 +20 +-7.8875 +11 +101.7875 +21 +-7.8875 +0 +LINE +8 +0 +10 +101.7875 +20 +-7.8875 +11 +101.7875 +21 +-20.6875 +0 +LINE +8 +0 +10 +101.7875 +20 +-20.6875 +11 +117.2875 +21 +-20.6875 +0 +LINE +8 +0 +10 +117.2875 +20 +-20.6875 +11 +117.2875 +21 +-7.8875 +0 +LINE +8 +0 +10 +98.2375 +20 +-7.8875 +11 +82.7375 +21 +-7.8875 +0 +LINE +8 +0 +10 +82.7375 +20 +-7.8875 +11 +82.7375 +21 +-20.6875 +0 +LINE +8 +0 +10 +82.7375 +20 +-20.6875 +11 +98.2375 +21 +-20.6875 +0 +LINE +8 +0 +10 +98.2375 +20 +-20.6875 +11 +98.2375 +21 +-7.8875 +0 +LINE +8 +0 +10 +126.8125 +20 +-26.9375 +11 +111.3125 +21 +-26.9375 +0 +LINE +8 +0 +10 +111.3125 +20 +-26.9375 +11 +111.3125 +21 +-39.7375 +0 +LINE +8 +0 +10 +111.3125 +20 +-39.7375 +11 +126.8125 +21 +-39.7375 +0 +LINE +8 +0 +10 +126.8125 +20 +-39.7375 +11 +126.8125 +21 +-26.9375 +0 +LINE +8 +0 +10 +107.7625 +20 +-26.9375 +11 +92.2625 +21 +-26.9375 +0 +LINE +8 +0 +10 +92.2625 +20 +-26.9375 +11 +92.2625 +21 +-39.7375 +0 +LINE +8 +0 +10 +92.2625 +20 +-39.7375 +11 +107.7625 +21 +-39.7375 +0 +LINE +8 +0 +10 +107.7625 +20 +-39.7375 +11 +107.7625 +21 +-26.9375 +0 +LINE +8 +0 +10 +112.525 +20 +-45.9875 +11 +97.025 +21 +-45.9875 +0 +LINE +8 +0 +10 +97.025 +20 +-45.9875 +11 +97.025 +21 +-58.7875 +0 +LINE +8 +0 +10 +97.025 +20 +-58.7875 +11 +112.525 +21 +-58.7875 +0 +LINE +8 +0 +10 +112.525 +20 +-58.7875 +11 +112.525 +21 +-45.9875 +0 +LINE +8 +0 +10 +93.475 +20 +-45.9875 +11 +77.975 +21 +-45.9875 +0 +LINE +8 +0 +10 +77.975 +20 +-45.9875 +11 +77.975 +21 +-58.7875 +0 +LINE +8 +0 +10 +77.975 +20 +-58.7875 +11 +93.475 +21 +-58.7875 +0 +LINE +8 +0 +10 +93.475 +20 +-58.7875 +11 +93.475 +21 +-45.9875 +0 +LINE +8 +0 +10 +83.95 +20 +-65.0375 +11 +68.45 +21 +-65.0375 +0 +LINE +8 +0 +10 +68.45 +20 +-65.0375 +11 +68.45 +21 +-77.8375 +0 +LINE +8 +0 +10 +68.45 +20 +-77.8375 +11 +83.95 +21 +-77.8375 +0 +LINE +8 +0 +10 +83.95 +20 +-77.8375 +11 +83.95 +21 +-65.0375 +0 +LINE +8 +0 +10 +79.1875 +20 +-84.0875 +11 +63.6875 +21 +-84.0875 +0 +LINE +8 +0 +10 +63.6875 +20 +-84.0875 +11 +63.6875 +21 +-96.8875 +0 +LINE +8 +0 +10 +63.6875 +20 +-96.8875 +11 +79.1875 +21 +-96.8875 +0 +LINE +8 +0 +10 +79.1875 +20 +-96.8875 +11 +79.1875 +21 +-84.0875 +0 +LINE +8 +0 +10 +79.1875 +20 +-7.8875 +11 +63.6875 +21 +-7.8875 +0 +LINE +8 +0 +10 +63.6875 +20 +-7.8875 +11 +63.6875 +21 +-20.6875 +0 +LINE +8 +0 +10 +63.6875 +20 +-20.6875 +11 +79.1875 +21 +-20.6875 +0 +LINE +8 +0 +10 +79.1875 +20 +-20.6875 +11 +79.1875 +21 +-7.8875 +0 +LINE +8 +0 +10 +60.1375 +20 +-7.8875 +11 +44.6375 +21 +-7.8875 +0 +LINE +8 +0 +10 +44.6375 +20 +-7.8875 +11 +44.6375 +21 +-20.6875 +0 +LINE +8 +0 +10 +44.6375 +20 +-20.6875 +11 +60.1375 +21 +-20.6875 +0 +LINE +8 +0 +10 +60.1375 +20 +-20.6875 +11 +60.1375 +21 +-7.8875 +0 +LINE +8 +0 +10 +88.7125 +20 +-26.9375 +11 +73.2125 +21 +-26.9375 +0 +LINE +8 +0 +10 +73.2125 +20 +-26.9375 +11 +73.2125 +21 +-39.7375 +0 +LINE +8 +0 +10 +73.2125 +20 +-39.7375 +11 +88.7125 +21 +-39.7375 +0 +LINE +8 +0 +10 +88.7125 +20 +-39.7375 +11 +88.7125 +21 +-26.9375 +0 +LINE +8 +0 +10 +69.6625 +20 +-26.9375 +11 +54.1625 +21 +-26.9375 +0 +LINE +8 +0 +10 +54.1625 +20 +-26.9375 +11 +54.1625 +21 +-39.7375 +0 +LINE +8 +0 +10 +54.1625 +20 +-39.7375 +11 +69.6625 +21 +-39.7375 +0 +LINE +8 +0 +10 +69.6625 +20 +-39.7375 +11 +69.6625 +21 +-26.9375 +0 +LINE +8 +0 +10 +74.425 +20 +-45.9875 +11 +58.925 +21 +-45.9875 +0 +LINE +8 +0 +10 +58.925 +20 +-45.9875 +11 +58.925 +21 +-58.7875 +0 +LINE +8 +0 +10 +58.925 +20 +-58.7875 +11 +74.425 +21 +-58.7875 +0 +LINE +8 +0 +10 +74.425 +20 +-58.7875 +11 +74.425 +21 +-45.9875 +0 +LINE +8 +0 +10 +64.9 +20 +-65.0375 +11 +49.4 +21 +-65.0375 +0 +LINE +8 +0 +10 +49.4 +20 +-65.0375 +11 +49.4 +21 +-77.8375 +0 +LINE +8 +0 +10 +49.4 +20 +-77.8375 +11 +64.9 +21 +-77.8375 +0 +LINE +8 +0 +10 +64.9 +20 +-77.8375 +11 +64.9 +21 +-65.0375 +0 +LINE +8 +0 +10 +52.9937 +20 +-84.0875 +11 +37.4937 +21 +-84.0875 +0 +LINE +8 +0 +10 +37.4937 +20 +-84.0875 +11 +37.4937 +21 +-96.8875 +0 +LINE +8 +0 +10 +37.4937 +20 +-96.8875 +11 +52.9937 +21 +-96.8875 +0 +LINE +8 +0 +10 +52.9937 +20 +-96.8875 +11 +52.9937 +21 +-84.0875 +0 +LINE +8 +0 +10 +41.0875 +20 +-7.8875 +11 +25.5875 +21 +-7.8875 +0 +LINE +8 +0 +10 +25.5875 +20 +-7.8875 +11 +25.5875 +21 +-20.6875 +0 +LINE +8 +0 +10 +25.5875 +20 +-20.6875 +11 +41.0875 +21 +-20.6875 +0 +LINE +8 +0 +10 +41.0875 +20 +-20.6875 +11 +41.0875 +21 +-7.8875 +0 +LINE +8 +0 +10 +22.0375 +20 +-7.8875 +11 +6.5375 +21 +-7.8875 +0 +LINE +8 +0 +10 +6.5375 +20 +-7.8875 +11 +6.5375 +21 +-20.6875 +0 +LINE +8 +0 +10 +6.5375 +20 +-20.6875 +11 +22.0375 +21 +-20.6875 +0 +LINE +8 +0 +10 +22.0375 +20 +-20.6875 +11 +22.0375 +21 +-7.8875 +0 +LINE +8 +0 +10 +50.6125 +20 +-26.9375 +11 +35.1125 +21 +-26.9375 +0 +LINE +8 +0 +10 +35.1125 +20 +-26.9375 +11 +35.1125 +21 +-39.7375 +0 +LINE +8 +0 +10 +35.1125 +20 +-39.7375 +11 +50.6125 +21 +-39.7375 +0 +LINE +8 +0 +10 +50.6125 +20 +-39.7375 +11 +50.6125 +21 +-26.9375 +0 +LINE +8 +0 +10 +26.8 +20 +-26.9375 +11 +11.3 +21 +-26.9375 +0 +LINE +8 +0 +10 +11.3 +20 +-26.9375 +11 +11.3 +21 +-39.7375 +0 +LINE +8 +0 +10 +11.3 +20 +-39.7375 +11 +26.8 +21 +-39.7375 +0 +LINE +8 +0 +10 +26.8 +20 +-39.7375 +11 +26.8 +21 +-26.9375 +0 +LINE +8 +0 +10 +55.375 +20 +-45.9875 +11 +39.875 +21 +-45.9875 +0 +LINE +8 +0 +10 +39.875 +20 +-45.9875 +11 +39.875 +21 +-58.7875 +0 +LINE +8 +0 +10 +39.875 +20 +-58.7875 +11 +55.375 +21 +-58.7875 +0 +LINE +8 +0 +10 +55.375 +20 +-58.7875 +11 +55.375 +21 +-45.9875 +0 +LINE +8 +0 +10 +29.18125 +20 +-45.9875 +11 +13.68125 +21 +-45.9875 +0 +LINE +8 +0 +10 +13.68125 +20 +-45.9875 +11 +13.68125 +21 +-58.7875 +0 +LINE +8 +0 +10 +13.68125 +20 +-58.7875 +11 +29.18125 +21 +-58.7875 +0 +LINE +8 +0 +10 +29.18125 +20 +-58.7875 +11 +29.18125 +21 +-45.9875 +0 +LINE +8 +0 +10 +26.8 +20 +-84.0875 +11 +11.3 +21 +-84.0875 +0 +LINE +8 +0 +10 +11.3 +20 +-84.0875 +11 +11.3 +21 +-96.8875 +0 +LINE +8 +0 +10 +11.3 +20 +-96.8875 +11 +26.8 +21 +-96.8875 +0 +LINE +8 +0 +10 +26.8 +20 +-96.8875 +11 +26.8 +21 +-84.0875 +0 +LINE +8 +0 +10 +260.1625 +20 +-26.9375 +11 +244.6625 +21 +-26.9375 +0 +LINE +8 +0 +10 +244.6625 +20 +-26.9375 +11 +244.6625 +21 +-39.7375 +0 +LINE +8 +0 +10 +244.6625 +20 +-39.7375 +11 +260.1625 +21 +-39.7375 +0 +LINE +8 +0 +10 +260.1625 +20 +-39.7375 +11 +260.1625 +21 +-26.9375 +0 +LINE +8 +0 +10 +283.975 +20 +-26.9375 +11 +268.475 +21 +-26.9375 +0 +LINE +8 +0 +10 +268.475 +20 +-26.9375 +11 +268.475 +21 +-39.7375 +0 +LINE +8 +0 +10 +268.475 +20 +-39.7375 +11 +283.975 +21 +-39.7375 +0 +LINE +8 +0 +10 +283.975 +20 +-39.7375 +11 +283.975 +21 +-26.9375 +0 +LINE +8 +0 +10 +283.975 +20 +-84.0875 +11 +268.475 +21 +-84.0875 +0 +LINE +8 +0 +10 +268.475 +20 +-84.0875 +11 +268.475 +21 +-96.8875 +0 +LINE +8 +0 +10 +268.475 +20 +-96.8875 +11 +283.975 +21 +-96.8875 +0 +LINE +8 +0 +10 +283.975 +20 +-96.8875 +11 +283.975 +21 +-84.0875 +0 +LINE +8 +0 +10 +250.6375 +20 +-7.8875 +11 +235.1375 +21 +-7.8875 +0 +LINE +8 +0 +10 +235.1375 +20 +-7.8875 +11 +235.1375 +21 +-20.6875 +0 +LINE +8 +0 +10 +235.1375 +20 +-20.6875 +11 +250.6375 +21 +-20.6875 +0 +LINE +8 +0 +10 +250.6375 +20 +-20.6875 +11 +250.6375 +21 +-7.8875 +0 +LINE +8 +0 +10 +241.1125 +20 +-26.9375 +11 +225.6125 +21 +-26.9375 +0 +LINE +8 +0 +10 +225.6125 +20 +-26.9375 +11 +225.6125 +21 +-39.7375 +0 +LINE +8 +0 +10 +225.6125 +20 +-39.7375 +11 +241.1125 +21 +-39.7375 +0 +LINE +8 +0 +10 +241.1125 +20 +-39.7375 +11 +241.1125 +21 +-26.9375 +0 +LINE +8 +0 +10 +222.0625 +20 +-26.9375 +11 +206.5625 +21 +-26.9375 +0 +LINE +8 +0 +10 +206.5625 +20 +-26.9375 +11 +206.5625 +21 +-39.7375 +0 +LINE +8 +0 +10 +206.5625 +20 +-39.7375 +11 +222.0625 +21 +-39.7375 +0 +LINE +8 +0 +10 +222.0625 +20 +-39.7375 +11 +222.0625 +21 +-26.9375 +0 +LINE +8 +0 +10 +245.875 +20 +-45.9875 +11 +230.375 +21 +-45.9875 +0 +LINE +8 +0 +10 +230.375 +20 +-45.9875 +11 +230.375 +21 +-58.7875 +0 +LINE +8 +0 +10 +230.375 +20 +-58.7875 +11 +245.875 +21 +-58.7875 +0 +LINE +8 +0 +10 +245.875 +20 +-58.7875 +11 +245.875 +21 +-45.9875 +0 +LINE +8 +0 +10 +226.825 +20 +-45.9875 +11 +211.325 +21 +-45.9875 +0 +LINE +8 +0 +10 +211.325 +20 +-45.9875 +11 +211.325 +21 +-58.7875 +0 +LINE +8 +0 +10 +211.325 +20 +-58.7875 +11 +226.825 +21 +-58.7875 +0 +LINE +8 +0 +10 +226.825 +20 +-58.7875 +11 +226.825 +21 +-45.9875 +0 +LINE +8 +0 +10 +236.35 +20 +-65.0375 +11 +220.85 +21 +-65.0375 +0 +LINE +8 +0 +10 +220.85 +20 +-65.0375 +11 +220.85 +21 +-77.8375 +0 +LINE +8 +0 +10 +220.85 +20 +-77.8375 +11 +236.35 +21 +-77.8375 +0 +LINE +8 +0 +10 +236.35 +20 +-77.8375 +11 +236.35 +21 +-65.0375 +0 +LINE +8 +0 +10 +217.3 +20 +-65.0375 +11 +201.8 +21 +-65.0375 +0 +LINE +8 +0 +10 +201.8 +20 +-65.0375 +11 +201.8 +21 +-77.8375 +0 +LINE +8 +0 +10 +201.8 +20 +-77.8375 +11 +217.3 +21 +-77.8375 +0 +LINE +8 +0 +10 +217.3 +20 +-77.8375 +11 +217.3 +21 +-65.0375 +0 +LINE +8 +0 +10 +257.78125 +20 +-84.0875 +11 +242.28125 +21 +-84.0875 +0 +LINE +8 +0 +10 +242.28125 +20 +-84.0875 +11 +242.28125 +21 +-96.8875 +0 +LINE +8 +0 +10 +242.28125 +20 +-96.8875 +11 +257.78125 +21 +-96.8875 +0 +LINE +8 +0 +10 +257.78125 +20 +-96.8875 +11 +257.78125 +21 +-84.0875 +0 +LINE +8 +0 +10 +231.5875 +20 +-7.8875 +11 +216.0875 +21 +-7.8875 +0 +LINE +8 +0 +10 +216.0875 +20 +-7.8875 +11 +216.0875 +21 +-20.6875 +0 +LINE +8 +0 +10 +216.0875 +20 +-20.6875 +11 +231.5875 +21 +-20.6875 +0 +LINE +8 +0 +10 +231.5875 +20 +-20.6875 +11 +231.5875 +21 +-7.8875 +0 +LINE +8 +0 +10 +212.5375 +20 +-7.8875 +11 +197.0375 +21 +-7.8875 +0 +LINE +8 +0 +10 +197.0375 +20 +-7.8875 +11 +197.0375 +21 +-20.6875 +0 +LINE +8 +0 +10 +197.0375 +20 +-20.6875 +11 +212.5375 +21 +-20.6875 +0 +LINE +8 +0 +10 +212.5375 +20 +-20.6875 +11 +212.5375 +21 +-7.8875 +0 +LINE +8 +0 +10 +203.0125 +20 +-26.9375 +11 +187.5125 +21 +-26.9375 +0 +LINE +8 +0 +10 +187.5125 +20 +-26.9375 +11 +187.5125 +21 +-39.7375 +0 +LINE +8 +0 +10 +187.5125 +20 +-39.7375 +11 +203.0125 +21 +-39.7375 +0 +LINE +8 +0 +10 +203.0125 +20 +-39.7375 +11 +203.0125 +21 +-26.9375 +0 +LINE +8 +0 +10 +207.775 +20 +-45.9875 +11 +192.275 +21 +-45.9875 +0 +LINE +8 +0 +10 +192.275 +20 +-45.9875 +11 +192.275 +21 +-58.7875 +0 +LINE +8 +0 +10 +192.275 +20 +-58.7875 +11 +207.775 +21 +-58.7875 +0 +LINE +8 +0 +10 +207.775 +20 +-58.7875 +11 +207.775 +21 +-45.9875 +0 +LINE +8 +0 +10 +188.725 +20 +-45.9875 +11 +173.225 +21 +-45.9875 +0 +LINE +8 +0 +10 +173.225 +20 +-45.9875 +11 +173.225 +21 +-58.7875 +0 +LINE +8 +0 +10 +173.225 +20 +-58.7875 +11 +188.725 +21 +-58.7875 +0 +LINE +8 +0 +10 +188.725 +20 +-58.7875 +11 +188.725 +21 +-45.9875 +0 +LINE +8 +0 +10 +198.25 +20 +-65.0375 +11 +182.75 +21 +-65.0375 +0 +LINE +8 +0 +10 +182.75 +20 +-65.0375 +11 +182.75 +21 +-77.8375 +0 +LINE +8 +0 +10 +182.75 +20 +-77.8375 +11 +198.25 +21 +-77.8375 +0 +LINE +8 +0 +10 +198.25 +20 +-77.8375 +11 +198.25 +21 +-65.0375 +0 +LINE +8 +0 +10 +179.2 +20 +-65.0375 +11 +163.7 +21 +-65.0375 +0 +LINE +8 +0 +10 +163.7 +20 +-65.0375 +11 +163.7 +21 +-77.8375 +0 +LINE +8 +0 +10 +163.7 +20 +-77.8375 +11 +179.2 +21 +-77.8375 +0 +LINE +8 +0 +10 +179.2 +20 +-77.8375 +11 +179.2 +21 +-65.0375 +0 +LINE +8 +0 +10 +231.5875 +20 +-84.0875 +11 +216.0875 +21 +-84.0875 +0 +LINE +8 +0 +10 +216.0875 +20 +-84.0875 +11 +216.0875 +21 +-96.8875 +0 +LINE +8 +0 +10 +216.0875 +20 +-96.8875 +11 +231.5875 +21 +-96.8875 +0 +LINE +8 +0 +10 +231.5875 +20 +-96.8875 +11 +231.5875 +21 +-84.0875 +0 +LINE +8 +0 +10 +244.01875 +20 +-75.3375 +11 +244.01875 +21 +-80.4375 +0 +LINE +8 +0 +10 +244.01875 +20 +-80.4375 +11 +241.41875 +21 +-80.4375 +0 +LINE +8 +0 +10 +241.41875 +20 +-80.4375 +11 +241.41875 +21 +-75.3375 +0 +LINE +8 +0 +10 +241.41875 +20 +-75.3375 +11 +244.01875 +21 +-75.3375 +0 +LINE +8 +0 +10 +284.61875 +20 +-75.3375 +11 +284.61875 +21 +-80.4375 +0 +LINE +8 +0 +10 +284.61875 +20 +-80.4375 +11 +287.21875 +21 +-80.4375 +0 +LINE +8 +0 +10 +287.21875 +20 +-80.4375 +11 +287.21875 +21 +-75.3375 +0 +LINE +8 +0 +10 +287.21875 +20 +-75.3375 +11 +284.61875 +21 +-75.3375 +0 +LINE +8 +0 +10 +272.06875 +20 +-65.0375 +11 +256.56875 +21 +-65.0375 +0 +LINE +8 +0 +10 +256.56875 +20 +-65.0375 +11 +256.56875 +21 +-77.8375 +0 +LINE +8 +0 +10 +256.56875 +20 +-77.8375 +11 +272.06875 +21 +-77.8375 +0 +LINE +8 +0 +10 +272.06875 +20 +-77.8375 +11 +272.06875 +21 +-65.0375 +0 +TEXT +8 +Cmts +62 +1 +10 +303.847897 +20 +-52.73062 +1 +95.000 mm +40 +1.5 +41 +1.5 +50 +270.186984 +7 +SIMPLEX +72 +1 +73 +2 +11 +303.847897 +21 +-52.73062 +0 +LINE +8 +Cmts +62 +1 +10 +287.34 +20 +-100.28 +11 +305.35289 +21 +-100.221215 +0 +LINE +8 +Cmts +62 +1 +10 +287.03 +20 +-5.29 +11 +305.04289 +21 +-5.231215 +0 +LINE +8 +Cmts +62 +1 +10 +302.342904 +20 +-5.240026 +11 +302.652904 +21 +-100.230026 +0 +LINE +8 +Cmts +62 +1 +10 +302.652904 +20 +-100.230026 +11 +302.06281 +21 +-99.105442 +0 +LINE +8 +Cmts +62 +1 +10 +302.652904 +20 +-100.230026 +11 +303.235645 +21 +-99.101614 +0 +LINE +8 +Cmts +62 +1 +10 +302.342904 +20 +-5.240026 +11 +301.760163 +21 +-6.368438 +0 +LINE +8 +Cmts +62 +1 +10 +302.342904 +20 +-5.240026 +11 +302.932998 +21 +-6.36461 +0 +TEXT +8 +Cmts +62 +1 +10 +17.92 +20 +-43.7 +1 +25.6125 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +17.92 +21 +-43.7 +0 +LINE +8 +Cmts +62 +1 +10 +30.71 +20 +-33.34 +11 +30.71 +21 +-45.05 +0 +LINE +8 +Cmts +62 +1 +10 +5.13 +20 +-33.34 +11 +5.13 +21 +-45.05 +0 +LINE +8 +Cmts +62 +1 +10 +5.13 +20 +-42.35 +11 +30.71 +21 +-42.35 +0 +LINE +8 +Cmts +62 +1 +10 +30.71 +20 +-42.35 +11 +29.583496 +21 +-42.936421 +0 +LINE +8 +Cmts +62 +1 +10 +30.71 +20 +-42.35 +11 +29.583496 +21 +-41.763579 +0 +LINE +8 +Cmts +62 +1 +10 +5.13 +20 +-42.35 +11 +6.256504 +21 +-42.936421 +0 +LINE +8 +Cmts +62 +1 +10 +5.13 +20 +-42.35 +11 +6.256504 +21 +-41.763579 +0 +TEXT +8 +Cmts +62 +1 +10 +277.347461 +20 +-39.634741 +1 +25.6125 mm +40 +1.5 +41 +1.5 +50 +0.022425 +7 +SIMPLEX +72 +1 +73 +2 +11 +277.347461 +21 +-39.634741 +0 +LINE +8 +Cmts +62 +1 +10 +290.12 +20 +-33.34 +11 +290.12299 +21 +-40.979741 +0 +LINE +8 +Cmts +62 +1 +10 +264.57 +20 +-33.35 +11 +264.57299 +21 +-40.989741 +0 +LINE +8 +Cmts +62 +1 +10 +264.571933 +20 +-38.289741 +11 +290.121933 +21 +-38.279741 +0 +LINE +8 +Cmts +62 +1 +10 +290.121933 +20 +-38.279741 +11 +288.995659 +21 +-38.866603 +0 +LINE +8 +Cmts +62 +1 +10 +290.121933 +20 +-38.279741 +11 +288.9952 +21 +-37.693761 +0 +LINE +8 +Cmts +62 +1 +10 +264.571933 +20 +-38.289741 +11 +265.698666 +21 +-38.875721 +0 +LINE +8 +Cmts +62 +1 +10 +264.571933 +20 +-38.289741 +11 +265.698207 +21 +-37.702879 +0 +TEXT +8 +Cmts +62 +1 +10 +202.7 +20 +-90.49 +1 +6.300 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +202.7 +21 +-90.49 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-93.64 +11 +204.05 +21 +-93.64 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-87.34 +11 +204.05 +21 +-87.34 +0 +LINE +8 +Cmts +62 +1 +10 +201.35 +20 +-87.34 +11 +201.35 +21 +-93.64 +0 +LINE +8 +Cmts +62 +1 +10 +201.35 +20 +-93.64 +11 +200.763579 +21 +-92.513496 +0 +LINE +8 +Cmts +62 +1 +10 +201.35 +20 +-93.64 +11 +201.936421 +21 +-92.513496 +0 +LINE +8 +Cmts +62 +1 +10 +201.35 +20 +-87.34 +11 +200.763579 +21 +-88.466504 +0 +LINE +8 +Cmts +62 +1 +10 +201.35 +20 +-87.34 +11 +201.936421 +21 +-88.466504 +0 +TEXT +8 +Cmts +62 +1 +10 +258.43468 +20 +-33.349763 +1 +6.300 mm +40 +1.5 +41 +1.5 +50 +270.090946 +7 +SIMPLEX +72 +1 +73 +2 +11 +258.43468 +21 +-33.349763 +0 +LINE +8 +Cmts +62 +1 +10 +264.59 +20 +-36.49 +11 +257.089682 +21 +-36.501906 +0 +LINE +8 +Cmts +62 +1 +10 +264.58 +20 +-30.19 +11 +257.079682 +21 +-30.201906 +0 +LINE +8 +Cmts +62 +1 +10 +259.779679 +20 +-30.19762 +11 +259.789679 +21 +-36.49762 +0 +LINE +8 +Cmts +62 +1 +10 +259.789679 +20 +-36.49762 +11 +259.201471 +21 +-35.372048 +0 +LINE +8 +Cmts +62 +1 +10 +259.789679 +20 +-36.49762 +11 +260.374311 +21 +-35.370187 +0 +LINE +8 +Cmts +62 +1 +10 +259.779679 +20 +-30.19762 +11 +259.195047 +21 +-31.325053 +0 +LINE +8 +Cmts +62 +1 +10 +259.779679 +20 +-30.19762 +11 +260.367887 +21 +-31.323192 +0 +TEXT +8 +Cmts +62 +1 +10 +24.47 +20 +-33.33 +1 +6.300 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +24.47 +21 +-33.33 +0 +LINE +8 +Cmts +62 +1 +10 +30.72 +20 +-36.48 +11 +23.12 +21 +-36.48 +0 +LINE +8 +Cmts +62 +1 +10 +30.72 +20 +-30.18 +11 +23.12 +21 +-30.18 +0 +LINE +8 +Cmts +62 +1 +10 +25.82 +20 +-30.18 +11 +25.82 +21 +-36.48 +0 +LINE +8 +Cmts +62 +1 +10 +25.82 +20 +-36.48 +11 +25.233579 +21 +-35.353496 +0 +LINE +8 +Cmts +62 +1 +10 +25.82 +20 +-36.48 +11 +26.406421 +21 +-35.353496 +0 +LINE +8 +Cmts +62 +1 +10 +25.82 +20 +-30.18 +11 +25.233579 +21 +-31.306504 +0 +LINE +8 +Cmts +62 +1 +10 +25.82 +20 +-30.18 +11 +26.406421 +21 +-31.306504 +0 +TEXT +8 +Cmts +62 +1 +10 +103.46 +20 +-90.49 +1 +6.300 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +103.46 +21 +-90.49 +0 +LINE +8 +Cmts +62 +1 +10 +109.64 +20 +-93.64 +11 +102.11 +21 +-93.64 +0 +LINE +8 +Cmts +62 +1 +10 +109.64 +20 +-87.34 +11 +102.11 +21 +-87.34 +0 +LINE +8 +Cmts +62 +1 +10 +104.81 +20 +-87.34 +11 +104.81 +21 +-93.64 +0 +LINE +8 +Cmts +62 +1 +10 +104.81 +20 +-93.64 +11 +104.223579 +21 +-92.513496 +0 +LINE +8 +Cmts +62 +1 +10 +104.81 +20 +-93.64 +11 +105.396421 +21 +-92.513496 +0 +LINE +8 +Cmts +62 +1 +10 +104.81 +20 +-87.34 +11 +104.223579 +21 +-88.466504 +0 +LINE +8 +Cmts +62 +1 +10 +104.81 +20 +-87.34 +11 +105.396421 +21 +-88.466504 +0 +TEXT +8 +Cmts +62 +1 +10 +171.54 +20 +-78.67 +1 +47.800 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +171.54 +21 +-78.67 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-90.49 +11 +147.64 +21 +-77.32 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-90.49 +11 +195.44 +21 +-77.32 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-80.02 +11 +147.64 +21 +-80.02 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-80.02 +11 +148.766504 +21 +-79.433579 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-80.02 +11 +148.766504 +21 +-80.606421 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-80.02 +11 +194.313496 +21 +-79.433579 +0 +LINE +8 +Cmts +62 +1 +10 +195.44 +20 +-80.02 +11 +194.313496 +21 +-80.606421 +0 +TEXT +8 +Cmts +62 +1 +10 +128.64 +20 +-109.43 +1 +38.000 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +128.64 +21 +-109.43 +0 +LINE +8 +Cmts +62 +1 +10 +109.64 +20 +-90.48 +11 +109.64 +21 +-110.78 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-90.48 +11 +147.64 +21 +-110.78 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-108.08 +11 +109.64 +21 +-108.08 +0 +LINE +8 +Cmts +62 +1 +10 +109.64 +20 +-108.08 +11 +110.766504 +21 +-107.493579 +0 +LINE +8 +Cmts +62 +1 +10 +109.64 +20 +-108.08 +11 +110.766504 +21 +-108.666421 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-108.08 +11 +146.513496 +21 +-107.493579 +0 +LINE +8 +Cmts +62 +1 +10 +147.64 +20 +-108.08 +11 +146.513496 +21 +-108.666421 +0 +TEXT +8 +Cmts +62 +1 +10 +197.96 +20 +-99.88 +1 +0.800 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +197.96 +21 +-99.88 +0 +LINE +8 +Cmts +62 +1 +10 +194.38 +20 +-100.28 +11 +199.31 +21 +-100.28 +0 +LINE +8 +Cmts +62 +1 +10 +194.38 +20 +-99.48 +11 +199.31 +21 +-99.48 +0 +LINE +8 +Cmts +62 +1 +10 +196.61 +20 +-99.48 +11 +196.61 +21 +-100.28 +0 +LINE +8 +Cmts +62 +1 +10 +196.61 +20 +-100.28 +11 +196.023579 +21 +-99.153496 +0 +LINE +8 +Cmts +62 +1 +10 +196.61 +20 +-100.28 +11 +197.196421 +21 +-99.153496 +0 +LINE +8 +Cmts +62 +1 +10 +196.61 +20 +-99.48 +11 +196.023579 +21 +-100.606504 +0 +LINE +8 +Cmts +62 +1 +10 +196.61 +20 +-99.48 +11 +197.196421 +21 +-100.606504 +0 +TEXT +8 +Cmts +62 +1 +10 +188.875133 +20 +-92.417616 +1 +3.900 mm +40 +1.5 +41 +1.5 +50 +89.559272 +7 +SIMPLEX +72 +1 +73 +2 +11 +188.875133 +21 +-92.417616 +0 +LINE +8 +Cmts +62 +1 +10 +191.77 +20 +-94.39 +11 +187.510173 +21 +-94.357232 +0 +LINE +8 +Cmts +62 +1 +10 +191.8 +20 +-90.49 +11 +187.540173 +21 +-90.457232 +0 +LINE +8 +Cmts +62 +1 +10 +190.240093 +20 +-90.478001 +11 +190.210093 +21 +-94.378001 +0 +LINE +8 +Cmts +62 +1 +10 +190.210093 +20 +-94.378001 +11 +189.632355 +21 +-93.24702 +0 +LINE +8 +Cmts +62 +1 +10 +190.210093 +20 +-94.378001 +11 +190.805162 +21 +-93.256041 +0 +LINE +8 +Cmts +62 +1 +10 +190.240093 +20 +-90.478001 +11 +189.645024 +21 +-91.599961 +0 +LINE +8 +Cmts +62 +1 +10 +190.240093 +20 +-90.478001 +11 +190.817831 +21 +-91.608982 +0 +TEXT +8 +Cmts +62 +1 +10 +159.664849 +20 +-87.283312 +1 +6.400 mm +40 +1.5 +41 +1.5 +50 +270.089525 +7 +SIMPLEX +72 +1 +73 +2 +11 +159.664849 +21 +-87.283312 +0 +LINE +8 +Cmts +62 +1 +10 +155.38 +20 +-84.09 +11 +161.009848 +21 +-84.081203 +0 +LINE +8 +Cmts +62 +1 +10 +155.39 +20 +-90.49 +11 +161.019848 +21 +-90.481203 +0 +LINE +8 +Cmts +62 +1 +10 +158.319851 +20 +-90.485422 +11 +158.309851 +21 +-84.085422 +0 +LINE +8 +Cmts +62 +1 +10 +158.309851 +20 +-84.085422 +11 +158.898031 +21 +-85.211008 +0 +LINE +8 +Cmts +62 +1 +10 +158.309851 +20 +-84.085422 +11 +157.725191 +21 +-85.212841 +0 +LINE +8 +Cmts +62 +1 +10 +158.319851 +20 +-90.485422 +11 +158.904511 +21 +-89.358003 +0 +LINE +8 +Cmts +62 +1 +10 +158.319851 +20 +-90.485422 +11 +157.731671 +21 +-89.359836 +0 +LINE +8 +Cmts +62 +1 +10 +109.67 +20 +-90.4875 +11 +195.48 +21 +-90.4875 +0 +TEXT +8 +Cmts +62 +1 +10 +147.64 +20 +-117.98 +1 +88.300 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +147.64 +21 +-117.98 +0 +LINE +8 +Cmts +62 +1 +10 +191.79 +20 +-99.49 +11 +191.79 +21 +-119.33 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-99.49 +11 +103.49 +21 +-119.33 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-116.63 +11 +191.79 +21 +-116.63 +0 +LINE +8 +Cmts +62 +1 +10 +191.79 +20 +-116.63 +11 +190.663496 +21 +-117.216421 +0 +LINE +8 +Cmts +62 +1 +10 +191.79 +20 +-116.63 +11 +190.663496 +21 +-116.043579 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-116.63 +11 +104.616504 +21 +-117.216421 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-116.63 +11 +104.616504 +21 +-116.043579 +0 +TEXT +8 +Cmts +62 +1 +10 +102.19 +20 +-104.41 +1 +2.600 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +102.19 +21 +-104.41 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-99.49 +11 +103.49 +21 +-105.76 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-99.49 +11 +100.89 +21 +-105.76 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-103.06 +11 +103.49 +21 +-103.06 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-103.06 +11 +102.363496 +21 +-103.646421 +0 +LINE +8 +Cmts +62 +1 +10 +103.49 +20 +-103.06 +11 +102.363496 +21 +-102.473579 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-103.06 +11 +102.016504 +21 +-103.646421 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-103.06 +11 +102.016504 +21 +-102.473579 +0 +TEXT +8 +Cmts +62 +1 +10 +97.67 +20 +-96.94 +1 +5.100 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +97.67 +21 +-96.94 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-99.49 +11 +96.32 +21 +-99.49 +0 +LINE +8 +Cmts +62 +1 +10 +100.89 +20 +-94.39 +11 +96.32 +21 +-94.39 +0 +LINE +8 +Cmts +62 +1 +10 +99.02 +20 +-94.39 +11 +99.02 +21 +-99.49 +0 +LINE +8 +Cmts +62 +1 +10 +99.02 +20 +-99.49 +11 +98.433579 +21 +-98.363496 +0 +LINE +8 +Cmts +62 +1 +10 +99.02 +20 +-99.49 +11 +99.606421 +21 +-98.363496 +0 +LINE +8 +Cmts +62 +1 +10 +99.02 +20 +-94.39 +11 +98.433579 +21 +-95.516504 +0 +LINE +8 +Cmts +62 +1 +10 +99.02 +20 +-94.39 +11 +99.606421 +21 +-95.516504 +0 +TEXT +8 +Cmts +62 +1 +10 +109.63 +20 +-81.13 +1 +14.500 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +109.63 +21 +-81.13 +0 +LINE +8 +Cmts +62 +1 +10 +102.38 +20 +-89.28 +11 +102.38 +21 +-79.78 +0 +LINE +8 +Cmts +62 +1 +10 +116.88 +20 +-89.28 +11 +116.88 +21 +-79.78 +0 +LINE +8 +Cmts +62 +1 +10 +116.88 +20 +-82.48 +11 +102.38 +21 +-82.48 +0 +LINE +8 +Cmts +62 +1 +10 +102.38 +20 +-82.48 +11 +103.506504 +21 +-81.893579 +0 +LINE +8 +Cmts +62 +1 +10 +102.38 +20 +-82.48 +11 +103.506504 +21 +-83.066421 +0 +LINE +8 +Cmts +62 +1 +10 +116.88 +20 +-82.48 +11 +115.753496 +21 +-81.893579 +0 +LINE +8 +Cmts +62 +1 +10 +116.88 +20 +-82.48 +11 +115.753496 +21 +-83.066421 +0 +TEXT +8 +Cmts +62 +1 +10 +121.803009 +20 +-90.50045 +1 +2.400 mm +40 +1.5 +41 +1.5 +50 +89.761269 +7 +SIMPLEX +72 +1 +73 +2 +11 +121.803009 +21 +-90.50045 +0 +LINE +8 +Cmts +62 +1 +10 +116.89 +20 +-91.68 +11 +123.147997 +21 +-91.706075 +0 +LINE +8 +Cmts +62 +1 +10 +116.9 +20 +-89.28 +11 +123.157997 +21 +-89.306075 +0 +LINE +8 +Cmts +62 +1 +10 +120.458021 +20 +-89.294825 +11 +120.448021 +21 +-91.694825 +0 +LINE +8 +Cmts +62 +1 +10 +120.448021 +20 +-91.694825 +11 +119.866299 +21 +-90.565888 +0 +LINE +8 +Cmts +62 +1 +10 +120.448021 +20 +-91.694825 +11 +121.03913 +21 +-90.570774 +0 +LINE +8 +Cmts +62 +1 +10 +120.458021 +20 +-89.294825 +11 +119.866912 +21 +-90.418876 +0 +LINE +8 +Cmts +62 +1 +10 +120.458021 +20 +-89.294825 +11 +121.039743 +21 +-90.423762 +0 +TEXT +8 +Cmts +62 +1 +10 +115.69 +20 +-85.3 +1 +2.400 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +115.69 +21 +-85.3 +0 +LINE +8 +Cmts +62 +1 +10 +116.89 +20 +-89.28 +11 +116.89 +21 +-83.95 +0 +LINE +8 +Cmts +62 +1 +10 +114.49 +20 +-89.28 +11 +114.49 +21 +-83.95 +0 +LINE +8 +Cmts +62 +1 +10 +114.49 +20 +-86.65 +11 +116.89 +21 +-86.65 +0 +LINE +8 +Cmts +62 +1 +10 +116.89 +20 +-86.65 +11 +115.763496 +21 +-87.236421 +0 +LINE +8 +Cmts +62 +1 +10 +116.89 +20 +-86.65 +11 +115.763496 +21 +-86.063579 +0 +LINE +8 +Cmts +62 +1 +10 +114.49 +20 +-86.65 +11 +115.616504 +21 +-87.236421 +0 +LINE +8 +Cmts +62 +1 +10 +114.49 +20 +-86.65 +11 +115.616504 +21 +-86.063579 +0 +TEXT +8 +Cmts +62 +1 +10 +135.19 +20 +-90.49 +1 +12.800 mm +40 +1.5 +41 +1.5 +50 +270.0 +7 +SIMPLEX +72 +1 +73 +2 +11 +135.19 +21 +-90.49 +0 +LINE +8 +Cmts +62 +1 +10 +139.89 +20 +-96.89 +11 +133.84 +21 +-96.89 +0 +LINE +8 +Cmts +62 +1 +10 +139.89 +20 +-84.09 +11 +133.84 +21 +-84.09 +0 +LINE +8 +Cmts +62 +1 +10 +136.54 +20 +-84.09 +11 +136.54 +21 +-96.89 +0 +LINE +8 +Cmts +62 +1 +10 +136.54 +20 +-96.89 +11 +135.953579 +21 +-95.763496 +0 +LINE +8 +Cmts +62 +1 +10 +136.54 +20 +-96.89 +11 +137.126421 +21 +-95.763496 +0 +LINE +8 +Cmts +62 +1 +10 +136.54 +20 +-84.09 +11 +135.953579 +21 +-85.216504 +0 +LINE +8 +Cmts +62 +1 +10 +136.54 +20 +-84.09 +11 +137.126421 +21 +-85.216504 +0 +TEXT +8 +Cmts +62 +1 +10 +147.63 +20 +-105.02 +1 +15.500 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +147.63 +21 +-105.02 +0 +LINE +8 +Cmts +62 +1 +10 +139.88 +20 +-96.87 +11 +139.88 +21 +-106.37 +0 +LINE +8 +Cmts +62 +1 +10 +155.38 +20 +-96.87 +11 +155.38 +21 +-106.37 +0 +LINE +8 +Cmts +62 +1 +10 +155.38 +20 +-103.67 +11 +139.88 +21 +-103.67 +0 +LINE +8 +Cmts +62 +1 +10 +139.88 +20 +-103.67 +11 +141.006504 +21 +-103.083579 +0 +LINE +8 +Cmts +62 +1 +10 +139.88 +20 +-103.67 +11 +141.006504 +21 +-104.256421 +0 +LINE +8 +Cmts +62 +1 +10 +155.38 +20 +-103.67 +11 +154.253496 +21 +-103.083579 +0 +LINE +8 +Cmts +62 +1 +10 +155.38 +20 +-103.67 +11 +154.253496 +21 +-104.256421 +0 +CIRCLE +8 +0 +10 +30.75 +20 +-33.3375 +40 +3.15 +0 +CIRCLE +8 +0 +10 +195.4375 +20 +-90.4875 +40 +3.15 +0 +CIRCLE +8 +0 +10 +264.525 +20 +-33.3375 +40 +3.15 +0 +LINE +8 +0 +10 +290.1375 +20 +-7.7875 +11 +290.1375 +21 +-58.7125 +0 +LINE +8 +0 +10 +288.3375 +20 +-58.7125 +11 +290.1375 +21 +-58.7125 +0 +LINE +8 +0 +10 +5.1375 +20 +-65.0125 +11 +5.1375 +21 +-97.7875 +0 +LINE +8 +0 +10 +288.3375 +20 +-65.1125 +11 +290.1375 +21 +-65.1125 +0 +LINE +8 +0 +10 +8.7375 +20 +-65.0125 +11 +5.1375 +21 +-65.0125 +0 +LINE +8 +0 +10 +8.7375 +20 +-58.8125 +11 +5.1375 +21 +-58.8125 +0 +ARC +8 +0 +10 +8.7375 +20 +-61.9125 +30 +0.0 +40 +3.1 +50 +-90.0 +51 +90.0 +0 +ARC +8 +0 +10 +288.3375 +20 +-61.9125 +30 +0.0 +40 +3.2 +50 +90.0 +51 +270.0 +0 +TEXT +8 +Cmts +62 +1 +10 +277.6375 +20 +6.3625 +1 +25.000 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +277.6375 +21 +6.3625 +0 +LINE +8 +Cmts +62 +1 +10 +265.1375 +20 +-33.3375 +11 +265.1375 +21 +7.7125 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +-33.3375 +11 +290.1375 +21 +7.7125 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +5.0125 +11 +265.1375 +21 +5.0125 +0 +LINE +8 +Cmts +62 +1 +10 +265.1375 +20 +5.0125 +11 +266.264004 +21 +5.598921 +0 +LINE +8 +Cmts +62 +1 +10 +265.1375 +20 +5.0125 +11 +266.264004 +21 +4.426079 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +5.0125 +11 +289.010996 +21 +5.598921 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +5.0125 +11 +289.010996 +21 +4.426079 +0 +TEXT +8 +Cmts +62 +1 +10 +147.6375 +20 +10.875 +1 +285.000 mm +40 +1.5 +41 +1.5 +7 +SIMPLEX +72 +1 +73 +2 +11 +147.6375 +21 +10.875 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +-7.14375 +11 +290.1375 +21 +12.225 +0 +LINE +8 +Cmts +62 +1 +10 +5.1375 +20 +-7.14375 +11 +5.1375 +21 +12.225 +0 +LINE +8 +Cmts +62 +1 +10 +5.1375 +20 +9.525 +11 +290.1375 +21 +9.525 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +9.525 +11 +289.010996 +21 +8.938579 +0 +LINE +8 +Cmts +62 +1 +10 +290.1375 +20 +9.525 +11 +289.010996 +21 +10.111421 +0 +LINE +8 +Cmts +62 +1 +10 +5.1375 +20 +9.525 +11 +6.264004 +21 +8.938579 +0 +LINE +8 +Cmts +62 +1 +10 +5.1375 +20 +9.525 +11 +6.264004 +21 +10.111421 +0 +ARC +8 +0 +10 +7.6375 +20 +-97.7875 +30 +0.0 +40 +2.5 +50 +-180.0 +51 +-90.0 +0 +ARC +8 +0 +10 +287.6375 +20 +-97.7875 +30 +0.0 +40 +2.5 +50 +-90.0 +51 +0.0 +0 +ARC +8 +0 +10 +287.6375 +20 +-7.7875 +30 +0.0 +40 +2.5 +50 +0.0 +51 +90.0 +0 +ARC +8 +0 +10 +7.6375 +20 +-7.7875 +30 +0.0 +40 +2.5 +50 +90.0 +51 +180.0 +0 +LINE +8 +0 +10 +290.1375 +20 +-97.7875 +11 +290.1375 +21 +-65.1125 +0 +LINE +8 +0 +10 +7.6375 +20 +-100.2875 +11 +287.6375 +21 +-100.2875 +0 +LINE +8 +0 +10 +5.1375 +20 +-7.7875 +11 +5.1375 +21 +-58.8125 +0 +LINE +8 +0 +10 +7.6375 +20 +-5.2875 +11 +287.6375 +21 +-5.2875 +0 +ENDSEC +0 +EOF \ No newline at end of file diff --git a/keyboards/weebkeeb/config.h b/keyboards/weebkeeb/config.h new file mode 100644 index 0000000000..859adc9cc2 --- /dev/null +++ b/keyboards/weebkeeb/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT weebkeeb +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B0, B1, B2, B3, B4, B5, B6, B7, C6, C7, F0, F1 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/weebkeeb/keymaps/default/Makefile b/keyboards/weebkeeb/keymaps/default/Makefile new file mode 100644 index 0000000000..f4671a9d11 --- /dev/null +++ b/keyboards/weebkeeb/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/config.h b/keyboards/weebkeeb/keymaps/default/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/weebkeeb/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/keymap.c b/keyboards/weebkeeb/keymaps/default/keymap.c new file mode 100644 index 0000000000..cdf1f1e4c7 --- /dev/null +++ b/keyboards/weebkeeb/keymaps/default/keymap.c @@ -0,0 +1,119 @@ +#include "weebkeeb.h" + +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_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_ENT , \ + KC_LCTL, ADJUST, KC_LALT, KC_LGUI, MO(3), KC_SPC, KC_SPC, MO(4), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[3] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), +[4] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) +}; +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/readme.md b/keyboards/weebkeeb/keymaps/default/readme.md new file mode 100644 index 0000000000..8771322763 --- /dev/null +++ b/keyboards/weebkeeb/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for weebkeeb \ No newline at end of file diff --git a/keyboards/weebkeeb/readme.md b/keyboards/weebkeeb/readme.md new file mode 100644 index 0000000000..bf31016c82 --- /dev/null +++ b/keyboards/weebkeeb/readme.md @@ -0,0 +1,28 @@ +weebkeeb keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme](/). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/weebkeeb folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make default`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/weebkeeb/rules.mk b/keyboards/weebkeeb/rules.mk new file mode 100644 index 0000000000..55898147dd --- /dev/null +++ b/keyboards/weebkeeb/rules.mk @@ -0,0 +1,67 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 diff --git a/keyboards/weebkeeb/weebkeeb.c b/keyboards/weebkeeb/weebkeeb.c new file mode 100644 index 0000000000..483fc9440e --- /dev/null +++ b/keyboards/weebkeeb/weebkeeb.c @@ -0,0 +1,28 @@ +#include "weebkeeb.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/weebkeeb/weebkeeb.h b/keyboards/weebkeeb/weebkeeb.h new file mode 100644 index 0000000000..7bca2c2014 --- /dev/null +++ b/keyboards/weebkeeb/weebkeeb.h @@ -0,0 +1,23 @@ +#ifndef WEEBKEEB_H +#define WEEBKEEB_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \ +} + +#endif -- cgit v1.2.3 From 45b7718fb154c6400b169a9d3005cedebd37ff9a Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 3 Dec 2016 17:30:40 -0500 Subject: cleaned up personal projects --- keyboards/pilcrow/Makefile | 3 - keyboards/pilcrow/config.h | 162 - keyboards/pilcrow/keymaps/default/Makefile | 21 - keyboards/pilcrow/keymaps/default/config.h | 8 - keyboards/pilcrow/keymaps/default/keymap.c | 88 - keyboards/pilcrow/keymaps/default/readme.md | 1 - keyboards/pilcrow/pilcrow.c | 28 - keyboards/pilcrow/pilcrow.h | 23 - keyboards/pilcrow/readme.md | 28 - keyboards/pilcrow/rules.mk | 67 - keyboards/weebkeeb/Makefile | 3 - keyboards/weebkeeb/aek.dxf | 6486 -------------------------- keyboards/weebkeeb/config.h | 162 - keyboards/weebkeeb/keymaps/default/Makefile | 21 - keyboards/weebkeeb/keymaps/default/config.h | 8 - keyboards/weebkeeb/keymaps/default/keymap.c | 119 - keyboards/weebkeeb/keymaps/default/readme.md | 1 - keyboards/weebkeeb/readme.md | 28 - keyboards/weebkeeb/rules.mk | 67 - keyboards/weebkeeb/weebkeeb.c | 28 - keyboards/weebkeeb/weebkeeb.h | 23 - 21 files changed, 7375 deletions(-) delete mode 100644 keyboards/pilcrow/Makefile delete mode 100644 keyboards/pilcrow/config.h delete mode 100644 keyboards/pilcrow/keymaps/default/Makefile delete mode 100644 keyboards/pilcrow/keymaps/default/config.h delete mode 100644 keyboards/pilcrow/keymaps/default/keymap.c delete mode 100644 keyboards/pilcrow/keymaps/default/readme.md delete mode 100644 keyboards/pilcrow/pilcrow.c delete mode 100644 keyboards/pilcrow/pilcrow.h delete mode 100644 keyboards/pilcrow/readme.md delete mode 100644 keyboards/pilcrow/rules.mk delete mode 100644 keyboards/weebkeeb/Makefile delete mode 100644 keyboards/weebkeeb/aek.dxf delete mode 100644 keyboards/weebkeeb/config.h delete mode 100644 keyboards/weebkeeb/keymaps/default/Makefile delete mode 100644 keyboards/weebkeeb/keymaps/default/config.h delete mode 100644 keyboards/weebkeeb/keymaps/default/keymap.c delete mode 100644 keyboards/weebkeeb/keymaps/default/readme.md delete mode 100644 keyboards/weebkeeb/readme.md delete mode 100644 keyboards/weebkeeb/rules.mk delete mode 100644 keyboards/weebkeeb/weebkeeb.c delete mode 100644 keyboards/weebkeeb/weebkeeb.h diff --git a/keyboards/pilcrow/Makefile b/keyboards/pilcrow/Makefile deleted file mode 100644 index 4e2a6f00fd..0000000000 --- a/keyboards/pilcrow/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif \ No newline at end of file diff --git a/keyboards/pilcrow/config.h b/keyboards/pilcrow/config.h deleted file mode 100644 index d79c1ba40c..0000000000 --- a/keyboards/pilcrow/config.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER You -#define PRODUCT pilcrow -#define DESCRIPTION A custom keyboard - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 10 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { B2, C6, D7, E6 } -#define MATRIX_COL_PINS { B6, D1, B4, B5, D4, D0, B3, B1, F7, F6 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/pilcrow/keymaps/default/Makefile b/keyboards/pilcrow/keymaps/default/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/pilcrow/keymaps/default/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/config.h b/keyboards/pilcrow/keymaps/default/config.h deleted file mode 100644 index df06a26206..0000000000 --- a/keyboards/pilcrow/keymaps/default/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/keymap.c b/keyboards/pilcrow/keymaps/default/keymap.c deleted file mode 100644 index e382e4c6ad..0000000000 --- a/keyboards/pilcrow/keymaps/default/keymap.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "pilcrow.h" -#define _______ KC_TRNS -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ - KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MT(MOD_LSFT, KC_SPC), MO(2), MO(3), KC_DEL, KC_ESC \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[1] = KEYMAP( \ - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, \ - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_PIPE, S(KC_QUOT), \ - _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_GRV \ -), -[2] = KEYMAP( \ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ - KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, \ - OSM(MOD_LSFT), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_BSLS, KC_QUOT, \ - _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[3] = KEYMAP( \ - RESET, KC_UP, _______, _______, _______, _______, _______, KC_MS_WH_DOWN, KC_MS_U, KC_MS_WH_UP, \ - KC_LEFT, KC_DOWN, KC_RIGHT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_MS_L,KC_MS_D, KC_MS_R, \ - RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, \ - _______, _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______, _______, _______, _______ \ -) -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file diff --git a/keyboards/pilcrow/keymaps/default/readme.md b/keyboards/pilcrow/keymaps/default/readme.md deleted file mode 100644 index 95472dfca8..0000000000 --- a/keyboards/pilcrow/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for pilcrow \ No newline at end of file diff --git a/keyboards/pilcrow/pilcrow.c b/keyboards/pilcrow/pilcrow.c deleted file mode 100644 index c8243df7bf..0000000000 --- a/keyboards/pilcrow/pilcrow.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "pilcrow.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} diff --git a/keyboards/pilcrow/pilcrow.h b/keyboards/pilcrow/pilcrow.h deleted file mode 100644 index 7138ccb3f6..0000000000 --- a/keyboards/pilcrow/pilcrow.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef PILCROW_H -#define PILCROW_H - -#include "quantum.h" - -// This a shortcut to help you visually see your layout. -// The following is an example using the Planck MIT layout -// The first section contains all of the arguements -// The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 \ -) \ -{ \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \ - { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 } \ -} - -#endif diff --git a/keyboards/pilcrow/readme.md b/keyboards/pilcrow/readme.md deleted file mode 100644 index 7a7f6d2af5..0000000000 --- a/keyboards/pilcrow/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -pilcrow keyboard firmware -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme](/). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/pilcrow folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default - -To build with the default keymap, simply run `make default`. - -### Other Keymaps - -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. - -To build the firmware binary hex file with a keymap just do `make` with a keymap like this: - -``` -$ make [default|jack|] -``` - -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/pilcrow/rules.mk b/keyboards/pilcrow/rules.mk deleted file mode 100644 index 55898147dd..0000000000 --- a/keyboards/pilcrow/rules.mk +++ /dev/null @@ -1,67 +0,0 @@ -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 diff --git a/keyboards/weebkeeb/Makefile b/keyboards/weebkeeb/Makefile deleted file mode 100644 index 4e2a6f00fd..0000000000 --- a/keyboards/weebkeeb/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif \ No newline at end of file diff --git a/keyboards/weebkeeb/aek.dxf b/keyboards/weebkeeb/aek.dxf deleted file mode 100644 index cfe80946bd..0000000000 --- a/keyboards/weebkeeb/aek.dxf +++ /dev/null @@ -1,6486 +0,0 @@ -0 -SECTION -2 -ENTITIES -0 -LINE -8 -0 -10 -104.7875 -20 --89.2875 -11 -104.7875 -21 --91.6875 -0 -LINE -8 -0 -10 -104.7875 -20 --91.6875 -11 -102.3875 -21 --91.6875 -0 -LINE -8 -0 -10 -102.3875 -20 --91.6875 -11 -102.3875 -21 --89.2875 -0 -LINE -8 -0 -10 -102.3875 -20 --89.2875 -11 -104.7875 -21 --89.2875 -0 -LINE -8 -0 -10 -116.8875 -20 --89.2875 -11 -116.8875 -21 --91.6875 -0 -LINE -8 -0 -10 -116.8875 -20 --91.6875 -11 -114.4875 -21 --91.6875 -0 -LINE -8 -0 -10 -114.4875 -20 --91.6875 -11 -114.4875 -21 --89.2875 -0 -LINE -8 -0 -10 -114.4875 -20 --89.2875 -11 -116.8875 -21 --89.2875 -0 -CIRCLE -8 -0 -10 -109.6375 -20 --90.4875 -40 -3.15 -0 -LINE -8 -0 -10 -103.4875 -20 --94.3875 -11 -103.4875 -21 --99.4875 -0 -LINE -8 -0 -10 -103.4875 -20 --99.4875 -11 -100.8875 -21 --99.4875 -0 -LINE -8 -0 -10 -100.8875 -20 --99.4875 -11 -100.8875 -21 --94.3875 -0 -LINE -8 -0 -10 -100.8875 -20 --94.3875 -11 -103.4875 -21 --94.3875 -0 -LINE -8 -0 -10 -191.7875 -20 --94.3875 -11 -191.7875 -21 --99.4875 -0 -LINE -8 -0 -10 -191.7875 -20 --99.4875 -11 -194.3875 -21 --99.4875 -0 -LINE -8 -0 -10 -194.3875 -20 --99.4875 -11 -194.3875 -21 --94.3875 -0 -LINE -8 -0 -10 -194.3875 -20 --94.3875 -11 -191.7875 -21 --94.3875 -0 -LINE -8 -0 -10 -155.3875 -20 --84.0875 -11 -139.8875 -21 --84.0875 -0 -LINE -8 -0 -10 -139.8875 -20 --84.0875 -11 -139.8875 -21 --96.8875 -0 -LINE -8 -0 -10 -139.8875 -20 --96.8875 -11 -155.3875 -21 --96.8875 -0 -LINE -8 -0 -10 -155.3875 -20 --96.8875 -11 -155.3875 -21 --84.0875 -0 -LINE -8 -0 -10 -256.28125 -20 --56.2875 -11 -256.28125 -21 --61.3875 -0 -LINE -8 -0 -10 -256.28125 -20 --61.3875 -11 -253.68125 -21 --61.3875 -0 -LINE -8 -0 -10 -253.68125 -20 --61.3875 -11 -253.68125 -21 --56.2875 -0 -LINE -8 -0 -10 -253.68125 -20 --56.2875 -11 -256.28125 -21 --56.2875 -0 -LINE -8 -0 -10 -281.88125 -20 --56.2875 -11 -281.88125 -21 --61.3875 -0 -LINE -8 -0 -10 -281.88125 -20 --61.3875 -11 -284.48125 -21 --61.3875 -0 -LINE -8 -0 -10 -284.48125 -20 --61.3875 -11 -284.48125 -21 --56.2875 -0 -LINE -8 -0 -10 -284.48125 -20 --56.2875 -11 -281.88125 -21 --56.2875 -0 -LINE -8 -0 -10 -276.83125 -20 --45.9875 -11 -261.33125 -21 --45.9875 -0 -LINE -8 -0 -10 -261.33125 -20 --45.9875 -11 -261.33125 -21 --58.7875 -0 -LINE -8 -0 -10 -261.33125 -20 --58.7875 -11 -276.83125 -21 --58.7875 -0 -LINE -8 -0 -10 -276.83125 -20 --58.7875 -11 -276.83125 -21 --45.9875 -0 -LINE -8 -0 -10 -258.6625 -20 --18.1875 -11 -258.6625 -21 --23.2875 -0 -LINE -8 -0 -10 -258.6625 -20 --23.2875 -11 -256.0625 -21 --23.2875 -0 -LINE -8 -0 -10 -256.0625 -20 --23.2875 -11 -256.0625 -21 --18.1875 -0 -LINE -8 -0 -10 -256.0625 -20 --18.1875 -11 -258.6625 -21 --18.1875 -0 -LINE -8 -0 -10 -284.2625 -20 --18.1875 -11 -284.2625 -21 --23.2875 -0 -LINE -8 -0 -10 -284.2625 -20 --23.2875 -11 -286.8625 -21 --23.2875 -0 -LINE -8 -0 -10 -286.8625 -20 --23.2875 -11 -286.8625 -21 --18.1875 -0 -LINE -8 -0 -10 -286.8625 -20 --18.1875 -11 -284.2625 -21 --18.1875 -0 -LINE -8 -0 -10 -279.2125 -20 --7.8875 -11 -263.7125 -21 --7.8875 -0 -LINE -8 -0 -10 -263.7125 -20 --7.8875 -11 -263.7125 -21 --20.6875 -0 -LINE -8 -0 -10 -263.7125 -20 --20.6875 -11 -279.2125 -21 --20.6875 -0 -LINE -8 -0 -10 -279.2125 -20 --20.6875 -11 -279.2125 -21 --7.8875 -0 -LINE -8 -0 -10 -13.39375 -20 --75.3375 -11 -13.39375 -21 --80.4375 -0 -LINE -8 -0 -10 -13.39375 -20 --80.4375 -11 -10.79375 -21 --80.4375 -0 -LINE -8 -0 -10 -10.79375 -20 --80.4375 -11 -10.79375 -21 --75.3375 -0 -LINE -8 -0 -10 -10.79375 -20 --75.3375 -11 -13.39375 -21 --75.3375 -0 -LINE -8 -0 -10 -38.99375 -20 --75.3375 -11 -38.99375 -21 --80.4375 -0 -LINE -8 -0 -10 -38.99375 -20 --80.4375 -11 -41.59375 -21 --80.4375 -0 -LINE -8 -0 -10 -41.59375 -20 --80.4375 -11 -41.59375 -21 --75.3375 -0 -LINE -8 -0 -10 -41.59375 -20 --75.3375 -11 -38.99375 -21 --75.3375 -0 -LINE -8 -0 -10 -33.94375 -20 --65.0375 -11 -18.44375 -21 --65.0375 -0 -LINE -8 -0 -10 -18.44375 -20 --65.0375 -11 -18.44375 -21 --77.8375 -0 -LINE -8 -0 -10 -18.44375 -20 --77.8375 -11 -33.94375 -21 --77.8375 -0 -LINE -8 -0 -10 -33.94375 -20 --77.8375 -11 -33.94375 -21 --65.0375 -0 -LINE -8 -0 -10 -193.4875 -20 --7.8875 -11 -177.9875 -21 --7.8875 -0 -LINE -8 -0 -10 -177.9875 -20 --7.8875 -11 -177.9875 -21 --20.6875 -0 -LINE -8 -0 -10 -177.9875 -20 --20.6875 -11 -193.4875 -21 --20.6875 -0 -LINE -8 -0 -10 -193.4875 -20 --20.6875 -11 -193.4875 -21 --7.8875 -0 -LINE -8 -0 -10 -174.4375 -20 --7.8875 -11 -158.9375 -21 --7.8875 -0 -LINE -8 -0 -10 -158.9375 -20 --7.8875 -11 -158.9375 -21 --20.6875 -0 -LINE -8 -0 -10 -158.9375 -20 --20.6875 -11 -174.4375 -21 --20.6875 -0 -LINE -8 -0 -10 -174.4375 -20 --20.6875 -11 -174.4375 -21 --7.8875 -0 -LINE -8 -0 -10 -183.9625 -20 --26.9375 -11 -168.4625 -21 --26.9375 -0 -LINE -8 -0 -10 -168.4625 -20 --26.9375 -11 -168.4625 -21 --39.7375 -0 -LINE -8 -0 -10 -168.4625 -20 --39.7375 -11 -183.9625 -21 --39.7375 -0 -LINE -8 -0 -10 -183.9625 -20 --39.7375 -11 -183.9625 -21 --26.9375 -0 -LINE -8 -0 -10 -169.675 -20 --45.9875 -11 -154.175 -21 --45.9875 -0 -LINE -8 -0 -10 -154.175 -20 --45.9875 -11 -154.175 -21 --58.7875 -0 -LINE -8 -0 -10 -154.175 -20 --58.7875 -11 -169.675 -21 --58.7875 -0 -LINE -8 -0 -10 -169.675 -20 --58.7875 -11 -169.675 -21 --45.9875 -0 -LINE -8 -0 -10 -150.625 -20 --45.9875 -11 -135.125 -21 --45.9875 -0 -LINE -8 -0 -10 -135.125 -20 --45.9875 -11 -135.125 -21 --58.7875 -0 -LINE -8 -0 -10 -135.125 -20 --58.7875 -11 -150.625 -21 --58.7875 -0 -LINE -8 -0 -10 -150.625 -20 --58.7875 -11 -150.625 -21 --45.9875 -0 -LINE -8 -0 -10 -160.15 -20 --65.0375 -11 -144.65 -21 --65.0375 -0 -LINE -8 -0 -10 -144.65 -20 --65.0375 -11 -144.65 -21 --77.8375 -0 -LINE -8 -0 -10 -144.65 -20 --77.8375 -11 -160.15 -21 --77.8375 -0 -LINE -8 -0 -10 -160.15 -20 --77.8375 -11 -160.15 -21 --65.0375 -0 -LINE -8 -0 -10 -141.1 -20 --65.0375 -11 -125.6 -21 --65.0375 -0 -LINE -8 -0 -10 -125.6 -20 --65.0375 -11 -125.6 -21 --77.8375 -0 -LINE -8 -0 -10 -125.6 -20 --77.8375 -11 -141.1 -21 --77.8375 -0 -LINE -8 -0 -10 -141.1 -20 --77.8375 -11 -141.1 -21 --65.0375 -0 -LINE -8 -0 -10 -155.3875 -20 --7.8875 -11 -139.8875 -21 --7.8875 -0 -LINE -8 -0 -10 -139.8875 -20 --7.8875 -11 -139.8875 -21 --20.6875 -0 -LINE -8 -0 -10 -139.8875 -20 --20.6875 -11 -155.3875 -21 --20.6875 -0 -LINE -8 -0 -10 -155.3875 -20 --20.6875 -11 -155.3875 -21 --7.8875 -0 -LINE -8 -0 -10 -136.3375 -20 --7.8875 -11 -120.8375 -21 --7.8875 -0 -LINE -8 -0 -10 -120.8375 -20 --7.8875 -11 -120.8375 -21 --20.6875 -0 -LINE -8 -0 -10 -120.8375 -20 --20.6875 -11 -136.3375 -21 --20.6875 -0 -LINE -8 -0 -10 -136.3375 -20 --20.6875 -11 -136.3375 -21 --7.8875 -0 -LINE -8 -0 -10 -164.9125 -20 --26.9375 -11 -149.4125 -21 --26.9375 -0 -LINE -8 -0 -10 -149.4125 -20 --26.9375 -11 -149.4125 -21 --39.7375 -0 -LINE -8 -0 -10 -149.4125 -20 --39.7375 -11 -164.9125 -21 --39.7375 -0 -LINE -8 -0 -10 -164.9125 -20 --39.7375 -11 -164.9125 -21 --26.9375 -0 -LINE -8 -0 -10 -145.8625 -20 --26.9375 -11 -130.3625 -21 --26.9375 -0 -LINE -8 -0 -10 -130.3625 -20 --26.9375 -11 -130.3625 -21 --39.7375 -0 -LINE -8 -0 -10 -130.3625 -20 --39.7375 -11 -145.8625 -21 --39.7375 -0 -LINE -8 -0 -10 -145.8625 -20 --39.7375 -11 -145.8625 -21 --26.9375 -0 -LINE -8 -0 -10 -131.575 -20 --45.9875 -11 -116.075 -21 --45.9875 -0 -LINE -8 -0 -10 -116.075 -20 --45.9875 -11 -116.075 -21 --58.7875 -0 -LINE -8 -0 -10 -116.075 -20 --58.7875 -11 -131.575 -21 --58.7875 -0 -LINE -8 -0 -10 -131.575 -20 --58.7875 -11 -131.575 -21 --45.9875 -0 -LINE -8 -0 -10 -122.05 -20 --65.0375 -11 -106.55 -21 --65.0375 -0 -LINE -8 -0 -10 -106.55 -20 --65.0375 -11 -106.55 -21 --77.8375 -0 -LINE -8 -0 -10 -106.55 -20 --77.8375 -11 -122.05 -21 --77.8375 -0 -LINE -8 -0 -10 -122.05 -20 --77.8375 -11 -122.05 -21 --65.0375 -0 -LINE -8 -0 -10 -103.0 -20 --65.0375 -11 -87.5 -21 --65.0375 -0 -LINE -8 -0 -10 -87.5 -20 --65.0375 -11 -87.5 -21 --77.8375 -0 -LINE -8 -0 -10 -87.5 -20 --77.8375 -11 -103.0 -21 --77.8375 -0 -LINE -8 -0 -10 -103.0 -20 --77.8375 -11 -103.0 -21 --65.0375 -0 -LINE -8 -0 -10 -117.2875 -20 --7.8875 -11 -101.7875 -21 --7.8875 -0 -LINE -8 -0 -10 -101.7875 -20 --7.8875 -11 -101.7875 -21 --20.6875 -0 -LINE -8 -0 -10 -101.7875 -20 --20.6875 -11 -117.2875 -21 --20.6875 -0 -LINE -8 -0 -10 -117.2875 -20 --20.6875 -11 -117.2875 -21 --7.8875 -0 -LINE -8 -0 -10 -98.2375 -20 --7.8875 -11 -82.7375 -21 --7.8875 -0 -LINE -8 -0 -10 -82.7375 -20 --7.8875 -11 -82.7375 -21 --20.6875 -0 -LINE -8 -0 -10 -82.7375 -20 --20.6875 -11 -98.2375 -21 --20.6875 -0 -LINE -8 -0 -10 -98.2375 -20 --20.6875 -11 -98.2375 -21 --7.8875 -0 -LINE -8 -0 -10 -126.8125 -20 --26.9375 -11 -111.3125 -21 --26.9375 -0 -LINE -8 -0 -10 -111.3125 -20 --26.9375 -11 -111.3125 -21 --39.7375 -0 -LINE -8 -0 -10 -111.3125 -20 --39.7375 -11 -126.8125 -21 --39.7375 -0 -LINE -8 -0 -10 -126.8125 -20 --39.7375 -11 -126.8125 -21 --26.9375 -0 -LINE -8 -0 -10 -107.7625 -20 --26.9375 -11 -92.2625 -21 --26.9375 -0 -LINE -8 -0 -10 -92.2625 -20 --26.9375 -11 -92.2625 -21 --39.7375 -0 -LINE -8 -0 -10 -92.2625 -20 --39.7375 -11 -107.7625 -21 --39.7375 -0 -LINE -8 -0 -10 -107.7625 -20 --39.7375 -11 -107.7625 -21 --26.9375 -0 -LINE -8 -0 -10 -112.525 -20 --45.9875 -11 -97.025 -21 --45.9875 -0 -LINE -8 -0 -10 -97.025 -20 --45.9875 -11 -97.025 -21 --58.7875 -0 -LINE -8 -0 -10 -97.025 -20 --58.7875 -11 -112.525 -21 --58.7875 -0 -LINE -8 -0 -10 -112.525 -20 --58.7875 -11 -112.525 -21 --45.9875 -0 -LINE -8 -0 -10 -93.475 -20 --45.9875 -11 -77.975 -21 --45.9875 -0 -LINE -8 -0 -10 -77.975 -20 --45.9875 -11 -77.975 -21 --58.7875 -0 -LINE -8 -0 -10 -77.975 -20 --58.7875 -11 -93.475 -21 --58.7875 -0 -LINE -8 -0 -10 -93.475 -20 --58.7875 -11 -93.475 -21 --45.9875 -0 -LINE -8 -0 -10 -83.95 -20 --65.0375 -11 -68.45 -21 --65.0375 -0 -LINE -8 -0 -10 -68.45 -20 --65.0375 -11 -68.45 -21 --77.8375 -0 -LINE -8 -0 -10 -68.45 -20 --77.8375 -11 -83.95 -21 --77.8375 -0 -LINE -8 -0 -10 -83.95 -20 --77.8375 -11 -83.95 -21 --65.0375 -0 -LINE -8 -0 -10 -79.1875 -20 --84.0875 -11 -63.6875 -21 --84.0875 -0 -LINE -8 -0 -10 -63.6875 -20 --84.0875 -11 -63.6875 -21 --96.8875 -0 -LINE -8 -0 -10 -63.6875 -20 --96.8875 -11 -79.1875 -21 --96.8875 -0 -LINE -8 -0 -10 -79.1875 -20 --96.8875 -11 -79.1875 -21 --84.0875 -0 -LINE -8 -0 -10 -79.1875 -20 --7.8875 -11 -63.6875 -21 --7.8875 -0 -LINE -8 -0 -10 -63.6875 -20 --7.8875 -11 -63.6875 -21 --20.6875 -0 -LINE -8 -0 -10 -63.6875 -20 --20.6875 -11 -79.1875 -21 --20.6875 -0 -LINE -8 -0 -10 -79.1875 -20 --20.6875 -11 -79.1875 -21 --7.8875 -0 -LINE -8 -0 -10 -60.1375 -20 --7.8875 -11 -44.6375 -21 --7.8875 -0 -LINE -8 -0 -10 -44.6375 -20 --7.8875 -11 -44.6375 -21 --20.6875 -0 -LINE -8 -0 -10 -44.6375 -20 --20.6875 -11 -60.1375 -21 --20.6875 -0 -LINE -8 -0 -10 -60.1375 -20 --20.6875 -11 -60.1375 -21 --7.8875 -0 -LINE -8 -0 -10 -88.7125 -20 --26.9375 -11 -73.2125 -21 --26.9375 -0 -LINE -8 -0 -10 -73.2125 -20 --26.9375 -11 -73.2125 -21 --39.7375 -0 -LINE -8 -0 -10 -73.2125 -20 --39.7375 -11 -88.7125 -21 --39.7375 -0 -LINE -8 -0 -10 -88.7125 -20 --39.7375 -11 -88.7125 -21 --26.9375 -0 -LINE -8 -0 -10 -69.6625 -20 --26.9375 -11 -54.1625 -21 --26.9375 -0 -LINE -8 -0 -10 -54.1625 -20 --26.9375 -11 -54.1625 -21 --39.7375 -0 -LINE -8 -0 -10 -54.1625 -20 --39.7375 -11 -69.6625 -21 --39.7375 -0 -LINE -8 -0 -10 -69.6625 -20 --39.7375 -11 -69.6625 -21 --26.9375 -0 -LINE -8 -0 -10 -74.425 -20 --45.9875 -11 -58.925 -21 --45.9875 -0 -LINE -8 -0 -10 -58.925 -20 --45.9875 -11 -58.925 -21 --58.7875 -0 -LINE -8 -0 -10 -58.925 -20 --58.7875 -11 -74.425 -21 --58.7875 -0 -LINE -8 -0 -10 -74.425 -20 --58.7875 -11 -74.425 -21 --45.9875 -0 -LINE -8 -0 -10 -64.9 -20 --65.0375 -11 -49.4 -21 --65.0375 -0 -LINE -8 -0 -10 -49.4 -20 --65.0375 -11 -49.4 -21 --77.8375 -0 -LINE -8 -0 -10 -49.4 -20 --77.8375 -11 -64.9 -21 --77.8375 -0 -LINE -8 -0 -10 -64.9 -20 --77.8375 -11 -64.9 -21 --65.0375 -0 -LINE -8 -0 -10 -52.9937 -20 --84.0875 -11 -37.4937 -21 --84.0875 -0 -LINE -8 -0 -10 -37.4937 -20 --84.0875 -11 -37.4937 -21 --96.8875 -0 -LINE -8 -0 -10 -37.4937 -20 --96.8875 -11 -52.9937 -21 --96.8875 -0 -LINE -8 -0 -10 -52.9937 -20 --96.8875 -11 -52.9937 -21 --84.0875 -0 -LINE -8 -0 -10 -41.0875 -20 --7.8875 -11 -25.5875 -21 --7.8875 -0 -LINE -8 -0 -10 -25.5875 -20 --7.8875 -11 -25.5875 -21 --20.6875 -0 -LINE -8 -0 -10 -25.5875 -20 --20.6875 -11 -41.0875 -21 --20.6875 -0 -LINE -8 -0 -10 -41.0875 -20 --20.6875 -11 -41.0875 -21 --7.8875 -0 -LINE -8 -0 -10 -22.0375 -20 --7.8875 -11 -6.5375 -21 --7.8875 -0 -LINE -8 -0 -10 -6.5375 -20 --7.8875 -11 -6.5375 -21 --20.6875 -0 -LINE -8 -0 -10 -6.5375 -20 --20.6875 -11 -22.0375 -21 --20.6875 -0 -LINE -8 -0 -10 -22.0375 -20 --20.6875 -11 -22.0375 -21 --7.8875 -0 -LINE -8 -0 -10 -50.6125 -20 --26.9375 -11 -35.1125 -21 --26.9375 -0 -LINE -8 -0 -10 -35.1125 -20 --26.9375 -11 -35.1125 -21 --39.7375 -0 -LINE -8 -0 -10 -35.1125 -20 --39.7375 -11 -50.6125 -21 --39.7375 -0 -LINE -8 -0 -10 -50.6125 -20 --39.7375 -11 -50.6125 -21 --26.9375 -0 -LINE -8 -0 -10 -26.8 -20 --26.9375 -11 -11.3 -21 --26.9375 -0 -LINE -8 -0 -10 -11.3 -20 --26.9375 -11 -11.3 -21 --39.7375 -0 -LINE -8 -0 -10 -11.3 -20 --39.7375 -11 -26.8 -21 --39.7375 -0 -LINE -8 -0 -10 -26.8 -20 --39.7375 -11 -26.8 -21 --26.9375 -0 -LINE -8 -0 -10 -55.375 -20 --45.9875 -11 -39.875 -21 --45.9875 -0 -LINE -8 -0 -10 -39.875 -20 --45.9875 -11 -39.875 -21 --58.7875 -0 -LINE -8 -0 -10 -39.875 -20 --58.7875 -11 -55.375 -21 --58.7875 -0 -LINE -8 -0 -10 -55.375 -20 --58.7875 -11 -55.375 -21 --45.9875 -0 -LINE -8 -0 -10 -29.18125 -20 --45.9875 -11 -13.68125 -21 --45.9875 -0 -LINE -8 -0 -10 -13.68125 -20 --45.9875 -11 -13.68125 -21 --58.7875 -0 -LINE -8 -0 -10 -13.68125 -20 --58.7875 -11 -29.18125 -21 --58.7875 -0 -LINE -8 -0 -10 -29.18125 -20 --58.7875 -11 -29.18125 -21 --45.9875 -0 -LINE -8 -0 -10 -26.8 -20 --84.0875 -11 -11.3 -21 --84.0875 -0 -LINE -8 -0 -10 -11.3 -20 --84.0875 -11 -11.3 -21 --96.8875 -0 -LINE -8 -0 -10 -11.3 -20 --96.8875 -11 -26.8 -21 --96.8875 -0 -LINE -8 -0 -10 -26.8 -20 --96.8875 -11 -26.8 -21 --84.0875 -0 -LINE -8 -0 -10 -260.1625 -20 --26.9375 -11 -244.6625 -21 --26.9375 -0 -LINE -8 -0 -10 -244.6625 -20 --26.9375 -11 -244.6625 -21 --39.7375 -0 -LINE -8 -0 -10 -244.6625 -20 --39.7375 -11 -260.1625 -21 --39.7375 -0 -LINE -8 -0 -10 -260.1625 -20 --39.7375 -11 -260.1625 -21 --26.9375 -0 -LINE -8 -0 -10 -283.975 -20 --26.9375 -11 -268.475 -21 --26.9375 -0 -LINE -8 -0 -10 -268.475 -20 --26.9375 -11 -268.475 -21 --39.7375 -0 -LINE -8 -0 -10 -268.475 -20 --39.7375 -11 -283.975 -21 --39.7375 -0 -LINE -8 -0 -10 -283.975 -20 --39.7375 -11 -283.975 -21 --26.9375 -0 -LINE -8 -0 -10 -283.975 -20 --84.0875 -11 -268.475 -21 --84.0875 -0 -LINE -8 -0 -10 -268.475 -20 --84.0875 -11 -268.475 -21 --96.8875 -0 -LINE -8 -0 -10 -268.475 -20 --96.8875 -11 -283.975 -21 --96.8875 -0 -LINE -8 -0 -10 -283.975 -20 --96.8875 -11 -283.975 -21 --84.0875 -0 -LINE -8 -0 -10 -250.6375 -20 --7.8875 -11 -235.1375 -21 --7.8875 -0 -LINE -8 -0 -10 -235.1375 -20 --7.8875 -11 -235.1375 -21 --20.6875 -0 -LINE -8 -0 -10 -235.1375 -20 --20.6875 -11 -250.6375 -21 --20.6875 -0 -LINE -8 -0 -10 -250.6375 -20 --20.6875 -11 -250.6375 -21 --7.8875 -0 -LINE -8 -0 -10 -241.1125 -20 --26.9375 -11 -225.6125 -21 --26.9375 -0 -LINE -8 -0 -10 -225.6125 -20 --26.9375 -11 -225.6125 -21 --39.7375 -0 -LINE -8 -0 -10 -225.6125 -20 --39.7375 -11 -241.1125 -21 --39.7375 -0 -LINE -8 -0 -10 -241.1125 -20 --39.7375 -11 -241.1125 -21 --26.9375 -0 -LINE -8 -0 -10 -222.0625 -20 --26.9375 -11 -206.5625 -21 --26.9375 -0 -LINE -8 -0 -10 -206.5625 -20 --26.9375 -11 -206.5625 -21 --39.7375 -0 -LINE -8 -0 -10 -206.5625 -20 --39.7375 -11 -222.0625 -21 --39.7375 -0 -LINE -8 -0 -10 -222.0625 -20 --39.7375 -11 -222.0625 -21 --26.9375 -0 -LINE -8 -0 -10 -245.875 -20 --45.9875 -11 -230.375 -21 --45.9875 -0 -LINE -8 -0 -10 -230.375 -20 --45.9875 -11 -230.375 -21 --58.7875 -0 -LINE -8 -0 -10 -230.375 -20 --58.7875 -11 -245.875 -21 --58.7875 -0 -LINE -8 -0 -10 -245.875 -20 --58.7875 -11 -245.875 -21 --45.9875 -0 -LINE -8 -0 -10 -226.825 -20 --45.9875 -11 -211.325 -21 --45.9875 -0 -LINE -8 -0 -10 -211.325 -20 --45.9875 -11 -211.325 -21 --58.7875 -0 -LINE -8 -0 -10 -211.325 -20 --58.7875 -11 -226.825 -21 --58.7875 -0 -LINE -8 -0 -10 -226.825 -20 --58.7875 -11 -226.825 -21 --45.9875 -0 -LINE -8 -0 -10 -236.35 -20 --65.0375 -11 -220.85 -21 --65.0375 -0 -LINE -8 -0 -10 -220.85 -20 --65.0375 -11 -220.85 -21 --77.8375 -0 -LINE -8 -0 -10 -220.85 -20 --77.8375 -11 -236.35 -21 --77.8375 -0 -LINE -8 -0 -10 -236.35 -20 --77.8375 -11 -236.35 -21 --65.0375 -0 -LINE -8 -0 -10 -217.3 -20 --65.0375 -11 -201.8 -21 --65.0375 -0 -LINE -8 -0 -10 -201.8 -20 --65.0375 -11 -201.8 -21 --77.8375 -0 -LINE -8 -0 -10 -201.8 -20 --77.8375 -11 -217.3 -21 --77.8375 -0 -LINE -8 -0 -10 -217.3 -20 --77.8375 -11 -217.3 -21 --65.0375 -0 -LINE -8 -0 -10 -257.78125 -20 --84.0875 -11 -242.28125 -21 --84.0875 -0 -LINE -8 -0 -10 -242.28125 -20 --84.0875 -11 -242.28125 -21 --96.8875 -0 -LINE -8 -0 -10 -242.28125 -20 --96.8875 -11 -257.78125 -21 --96.8875 -0 -LINE -8 -0 -10 -257.78125 -20 --96.8875 -11 -257.78125 -21 --84.0875 -0 -LINE -8 -0 -10 -231.5875 -20 --7.8875 -11 -216.0875 -21 --7.8875 -0 -LINE -8 -0 -10 -216.0875 -20 --7.8875 -11 -216.0875 -21 --20.6875 -0 -LINE -8 -0 -10 -216.0875 -20 --20.6875 -11 -231.5875 -21 --20.6875 -0 -LINE -8 -0 -10 -231.5875 -20 --20.6875 -11 -231.5875 -21 --7.8875 -0 -LINE -8 -0 -10 -212.5375 -20 --7.8875 -11 -197.0375 -21 --7.8875 -0 -LINE -8 -0 -10 -197.0375 -20 --7.8875 -11 -197.0375 -21 --20.6875 -0 -LINE -8 -0 -10 -197.0375 -20 --20.6875 -11 -212.5375 -21 --20.6875 -0 -LINE -8 -0 -10 -212.5375 -20 --20.6875 -11 -212.5375 -21 --7.8875 -0 -LINE -8 -0 -10 -203.0125 -20 --26.9375 -11 -187.5125 -21 --26.9375 -0 -LINE -8 -0 -10 -187.5125 -20 --26.9375 -11 -187.5125 -21 --39.7375 -0 -LINE -8 -0 -10 -187.5125 -20 --39.7375 -11 -203.0125 -21 --39.7375 -0 -LINE -8 -0 -10 -203.0125 -20 --39.7375 -11 -203.0125 -21 --26.9375 -0 -LINE -8 -0 -10 -207.775 -20 --45.9875 -11 -192.275 -21 --45.9875 -0 -LINE -8 -0 -10 -192.275 -20 --45.9875 -11 -192.275 -21 --58.7875 -0 -LINE -8 -0 -10 -192.275 -20 --58.7875 -11 -207.775 -21 --58.7875 -0 -LINE -8 -0 -10 -207.775 -20 --58.7875 -11 -207.775 -21 --45.9875 -0 -LINE -8 -0 -10 -188.725 -20 --45.9875 -11 -173.225 -21 --45.9875 -0 -LINE -8 -0 -10 -173.225 -20 --45.9875 -11 -173.225 -21 --58.7875 -0 -LINE -8 -0 -10 -173.225 -20 --58.7875 -11 -188.725 -21 --58.7875 -0 -LINE -8 -0 -10 -188.725 -20 --58.7875 -11 -188.725 -21 --45.9875 -0 -LINE -8 -0 -10 -198.25 -20 --65.0375 -11 -182.75 -21 --65.0375 -0 -LINE -8 -0 -10 -182.75 -20 --65.0375 -11 -182.75 -21 --77.8375 -0 -LINE -8 -0 -10 -182.75 -20 --77.8375 -11 -198.25 -21 --77.8375 -0 -LINE -8 -0 -10 -198.25 -20 --77.8375 -11 -198.25 -21 --65.0375 -0 -LINE -8 -0 -10 -179.2 -20 --65.0375 -11 -163.7 -21 --65.0375 -0 -LINE -8 -0 -10 -163.7 -20 --65.0375 -11 -163.7 -21 --77.8375 -0 -LINE -8 -0 -10 -163.7 -20 --77.8375 -11 -179.2 -21 --77.8375 -0 -LINE -8 -0 -10 -179.2 -20 --77.8375 -11 -179.2 -21 --65.0375 -0 -LINE -8 -0 -10 -231.5875 -20 --84.0875 -11 -216.0875 -21 --84.0875 -0 -LINE -8 -0 -10 -216.0875 -20 --84.0875 -11 -216.0875 -21 --96.8875 -0 -LINE -8 -0 -10 -216.0875 -20 --96.8875 -11 -231.5875 -21 --96.8875 -0 -LINE -8 -0 -10 -231.5875 -20 --96.8875 -11 -231.5875 -21 --84.0875 -0 -LINE -8 -0 -10 -244.01875 -20 --75.3375 -11 -244.01875 -21 --80.4375 -0 -LINE -8 -0 -10 -244.01875 -20 --80.4375 -11 -241.41875 -21 --80.4375 -0 -LINE -8 -0 -10 -241.41875 -20 --80.4375 -11 -241.41875 -21 --75.3375 -0 -LINE -8 -0 -10 -241.41875 -20 --75.3375 -11 -244.01875 -21 --75.3375 -0 -LINE -8 -0 -10 -284.61875 -20 --75.3375 -11 -284.61875 -21 --80.4375 -0 -LINE -8 -0 -10 -284.61875 -20 --80.4375 -11 -287.21875 -21 --80.4375 -0 -LINE -8 -0 -10 -287.21875 -20 --80.4375 -11 -287.21875 -21 --75.3375 -0 -LINE -8 -0 -10 -287.21875 -20 --75.3375 -11 -284.61875 -21 --75.3375 -0 -LINE -8 -0 -10 -272.06875 -20 --65.0375 -11 -256.56875 -21 --65.0375 -0 -LINE -8 -0 -10 -256.56875 -20 --65.0375 -11 -256.56875 -21 --77.8375 -0 -LINE -8 -0 -10 -256.56875 -20 --77.8375 -11 -272.06875 -21 --77.8375 -0 -LINE -8 -0 -10 -272.06875 -20 --77.8375 -11 -272.06875 -21 --65.0375 -0 -TEXT -8 -Cmts -62 -1 -10 -303.847897 -20 --52.73062 -1 -95.000 mm -40 -1.5 -41 -1.5 -50 -270.186984 -7 -SIMPLEX -72 -1 -73 -2 -11 -303.847897 -21 --52.73062 -0 -LINE -8 -Cmts -62 -1 -10 -287.34 -20 --100.28 -11 -305.35289 -21 --100.221215 -0 -LINE -8 -Cmts -62 -1 -10 -287.03 -20 --5.29 -11 -305.04289 -21 --5.231215 -0 -LINE -8 -Cmts -62 -1 -10 -302.342904 -20 --5.240026 -11 -302.652904 -21 --100.230026 -0 -LINE -8 -Cmts -62 -1 -10 -302.652904 -20 --100.230026 -11 -302.06281 -21 --99.105442 -0 -LINE -8 -Cmts -62 -1 -10 -302.652904 -20 --100.230026 -11 -303.235645 -21 --99.101614 -0 -LINE -8 -Cmts -62 -1 -10 -302.342904 -20 --5.240026 -11 -301.760163 -21 --6.368438 -0 -LINE -8 -Cmts -62 -1 -10 -302.342904 -20 --5.240026 -11 -302.932998 -21 --6.36461 -0 -TEXT -8 -Cmts -62 -1 -10 -17.92 -20 --43.7 -1 -25.6125 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -17.92 -21 --43.7 -0 -LINE -8 -Cmts -62 -1 -10 -30.71 -20 --33.34 -11 -30.71 -21 --45.05 -0 -LINE -8 -Cmts -62 -1 -10 -5.13 -20 --33.34 -11 -5.13 -21 --45.05 -0 -LINE -8 -Cmts -62 -1 -10 -5.13 -20 --42.35 -11 -30.71 -21 --42.35 -0 -LINE -8 -Cmts -62 -1 -10 -30.71 -20 --42.35 -11 -29.583496 -21 --42.936421 -0 -LINE -8 -Cmts -62 -1 -10 -30.71 -20 --42.35 -11 -29.583496 -21 --41.763579 -0 -LINE -8 -Cmts -62 -1 -10 -5.13 -20 --42.35 -11 -6.256504 -21 --42.936421 -0 -LINE -8 -Cmts -62 -1 -10 -5.13 -20 --42.35 -11 -6.256504 -21 --41.763579 -0 -TEXT -8 -Cmts -62 -1 -10 -277.347461 -20 --39.634741 -1 -25.6125 mm -40 -1.5 -41 -1.5 -50 -0.022425 -7 -SIMPLEX -72 -1 -73 -2 -11 -277.347461 -21 --39.634741 -0 -LINE -8 -Cmts -62 -1 -10 -290.12 -20 --33.34 -11 -290.12299 -21 --40.979741 -0 -LINE -8 -Cmts -62 -1 -10 -264.57 -20 --33.35 -11 -264.57299 -21 --40.989741 -0 -LINE -8 -Cmts -62 -1 -10 -264.571933 -20 --38.289741 -11 -290.121933 -21 --38.279741 -0 -LINE -8 -Cmts -62 -1 -10 -290.121933 -20 --38.279741 -11 -288.995659 -21 --38.866603 -0 -LINE -8 -Cmts -62 -1 -10 -290.121933 -20 --38.279741 -11 -288.9952 -21 --37.693761 -0 -LINE -8 -Cmts -62 -1 -10 -264.571933 -20 --38.289741 -11 -265.698666 -21 --38.875721 -0 -LINE -8 -Cmts -62 -1 -10 -264.571933 -20 --38.289741 -11 -265.698207 -21 --37.702879 -0 -TEXT -8 -Cmts -62 -1 -10 -202.7 -20 --90.49 -1 -6.300 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -202.7 -21 --90.49 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --93.64 -11 -204.05 -21 --93.64 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --87.34 -11 -204.05 -21 --87.34 -0 -LINE -8 -Cmts -62 -1 -10 -201.35 -20 --87.34 -11 -201.35 -21 --93.64 -0 -LINE -8 -Cmts -62 -1 -10 -201.35 -20 --93.64 -11 -200.763579 -21 --92.513496 -0 -LINE -8 -Cmts -62 -1 -10 -201.35 -20 --93.64 -11 -201.936421 -21 --92.513496 -0 -LINE -8 -Cmts -62 -1 -10 -201.35 -20 --87.34 -11 -200.763579 -21 --88.466504 -0 -LINE -8 -Cmts -62 -1 -10 -201.35 -20 --87.34 -11 -201.936421 -21 --88.466504 -0 -TEXT -8 -Cmts -62 -1 -10 -258.43468 -20 --33.349763 -1 -6.300 mm -40 -1.5 -41 -1.5 -50 -270.090946 -7 -SIMPLEX -72 -1 -73 -2 -11 -258.43468 -21 --33.349763 -0 -LINE -8 -Cmts -62 -1 -10 -264.59 -20 --36.49 -11 -257.089682 -21 --36.501906 -0 -LINE -8 -Cmts -62 -1 -10 -264.58 -20 --30.19 -11 -257.079682 -21 --30.201906 -0 -LINE -8 -Cmts -62 -1 -10 -259.779679 -20 --30.19762 -11 -259.789679 -21 --36.49762 -0 -LINE -8 -Cmts -62 -1 -10 -259.789679 -20 --36.49762 -11 -259.201471 -21 --35.372048 -0 -LINE -8 -Cmts -62 -1 -10 -259.789679 -20 --36.49762 -11 -260.374311 -21 --35.370187 -0 -LINE -8 -Cmts -62 -1 -10 -259.779679 -20 --30.19762 -11 -259.195047 -21 --31.325053 -0 -LINE -8 -Cmts -62 -1 -10 -259.779679 -20 --30.19762 -11 -260.367887 -21 --31.323192 -0 -TEXT -8 -Cmts -62 -1 -10 -24.47 -20 --33.33 -1 -6.300 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -24.47 -21 --33.33 -0 -LINE -8 -Cmts -62 -1 -10 -30.72 -20 --36.48 -11 -23.12 -21 --36.48 -0 -LINE -8 -Cmts -62 -1 -10 -30.72 -20 --30.18 -11 -23.12 -21 --30.18 -0 -LINE -8 -Cmts -62 -1 -10 -25.82 -20 --30.18 -11 -25.82 -21 --36.48 -0 -LINE -8 -Cmts -62 -1 -10 -25.82 -20 --36.48 -11 -25.233579 -21 --35.353496 -0 -LINE -8 -Cmts -62 -1 -10 -25.82 -20 --36.48 -11 -26.406421 -21 --35.353496 -0 -LINE -8 -Cmts -62 -1 -10 -25.82 -20 --30.18 -11 -25.233579 -21 --31.306504 -0 -LINE -8 -Cmts -62 -1 -10 -25.82 -20 --30.18 -11 -26.406421 -21 --31.306504 -0 -TEXT -8 -Cmts -62 -1 -10 -103.46 -20 --90.49 -1 -6.300 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -103.46 -21 --90.49 -0 -LINE -8 -Cmts -62 -1 -10 -109.64 -20 --93.64 -11 -102.11 -21 --93.64 -0 -LINE -8 -Cmts -62 -1 -10 -109.64 -20 --87.34 -11 -102.11 -21 --87.34 -0 -LINE -8 -Cmts -62 -1 -10 -104.81 -20 --87.34 -11 -104.81 -21 --93.64 -0 -LINE -8 -Cmts -62 -1 -10 -104.81 -20 --93.64 -11 -104.223579 -21 --92.513496 -0 -LINE -8 -Cmts -62 -1 -10 -104.81 -20 --93.64 -11 -105.396421 -21 --92.513496 -0 -LINE -8 -Cmts -62 -1 -10 -104.81 -20 --87.34 -11 -104.223579 -21 --88.466504 -0 -LINE -8 -Cmts -62 -1 -10 -104.81 -20 --87.34 -11 -105.396421 -21 --88.466504 -0 -TEXT -8 -Cmts -62 -1 -10 -171.54 -20 --78.67 -1 -47.800 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -171.54 -21 --78.67 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --90.49 -11 -147.64 -21 --77.32 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --90.49 -11 -195.44 -21 --77.32 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --80.02 -11 -147.64 -21 --80.02 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --80.02 -11 -148.766504 -21 --79.433579 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --80.02 -11 -148.766504 -21 --80.606421 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --80.02 -11 -194.313496 -21 --79.433579 -0 -LINE -8 -Cmts -62 -1 -10 -195.44 -20 --80.02 -11 -194.313496 -21 --80.606421 -0 -TEXT -8 -Cmts -62 -1 -10 -128.64 -20 --109.43 -1 -38.000 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -128.64 -21 --109.43 -0 -LINE -8 -Cmts -62 -1 -10 -109.64 -20 --90.48 -11 -109.64 -21 --110.78 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --90.48 -11 -147.64 -21 --110.78 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --108.08 -11 -109.64 -21 --108.08 -0 -LINE -8 -Cmts -62 -1 -10 -109.64 -20 --108.08 -11 -110.766504 -21 --107.493579 -0 -LINE -8 -Cmts -62 -1 -10 -109.64 -20 --108.08 -11 -110.766504 -21 --108.666421 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --108.08 -11 -146.513496 -21 --107.493579 -0 -LINE -8 -Cmts -62 -1 -10 -147.64 -20 --108.08 -11 -146.513496 -21 --108.666421 -0 -TEXT -8 -Cmts -62 -1 -10 -197.96 -20 --99.88 -1 -0.800 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -197.96 -21 --99.88 -0 -LINE -8 -Cmts -62 -1 -10 -194.38 -20 --100.28 -11 -199.31 -21 --100.28 -0 -LINE -8 -Cmts -62 -1 -10 -194.38 -20 --99.48 -11 -199.31 -21 --99.48 -0 -LINE -8 -Cmts -62 -1 -10 -196.61 -20 --99.48 -11 -196.61 -21 --100.28 -0 -LINE -8 -Cmts -62 -1 -10 -196.61 -20 --100.28 -11 -196.023579 -21 --99.153496 -0 -LINE -8 -Cmts -62 -1 -10 -196.61 -20 --100.28 -11 -197.196421 -21 --99.153496 -0 -LINE -8 -Cmts -62 -1 -10 -196.61 -20 --99.48 -11 -196.023579 -21 --100.606504 -0 -LINE -8 -Cmts -62 -1 -10 -196.61 -20 --99.48 -11 -197.196421 -21 --100.606504 -0 -TEXT -8 -Cmts -62 -1 -10 -188.875133 -20 --92.417616 -1 -3.900 mm -40 -1.5 -41 -1.5 -50 -89.559272 -7 -SIMPLEX -72 -1 -73 -2 -11 -188.875133 -21 --92.417616 -0 -LINE -8 -Cmts -62 -1 -10 -191.77 -20 --94.39 -11 -187.510173 -21 --94.357232 -0 -LINE -8 -Cmts -62 -1 -10 -191.8 -20 --90.49 -11 -187.540173 -21 --90.457232 -0 -LINE -8 -Cmts -62 -1 -10 -190.240093 -20 --90.478001 -11 -190.210093 -21 --94.378001 -0 -LINE -8 -Cmts -62 -1 -10 -190.210093 -20 --94.378001 -11 -189.632355 -21 --93.24702 -0 -LINE -8 -Cmts -62 -1 -10 -190.210093 -20 --94.378001 -11 -190.805162 -21 --93.256041 -0 -LINE -8 -Cmts -62 -1 -10 -190.240093 -20 --90.478001 -11 -189.645024 -21 --91.599961 -0 -LINE -8 -Cmts -62 -1 -10 -190.240093 -20 --90.478001 -11 -190.817831 -21 --91.608982 -0 -TEXT -8 -Cmts -62 -1 -10 -159.664849 -20 --87.283312 -1 -6.400 mm -40 -1.5 -41 -1.5 -50 -270.089525 -7 -SIMPLEX -72 -1 -73 -2 -11 -159.664849 -21 --87.283312 -0 -LINE -8 -Cmts -62 -1 -10 -155.38 -20 --84.09 -11 -161.009848 -21 --84.081203 -0 -LINE -8 -Cmts -62 -1 -10 -155.39 -20 --90.49 -11 -161.019848 -21 --90.481203 -0 -LINE -8 -Cmts -62 -1 -10 -158.319851 -20 --90.485422 -11 -158.309851 -21 --84.085422 -0 -LINE -8 -Cmts -62 -1 -10 -158.309851 -20 --84.085422 -11 -158.898031 -21 --85.211008 -0 -LINE -8 -Cmts -62 -1 -10 -158.309851 -20 --84.085422 -11 -157.725191 -21 --85.212841 -0 -LINE -8 -Cmts -62 -1 -10 -158.319851 -20 --90.485422 -11 -158.904511 -21 --89.358003 -0 -LINE -8 -Cmts -62 -1 -10 -158.319851 -20 --90.485422 -11 -157.731671 -21 --89.359836 -0 -LINE -8 -Cmts -62 -1 -10 -109.67 -20 --90.4875 -11 -195.48 -21 --90.4875 -0 -TEXT -8 -Cmts -62 -1 -10 -147.64 -20 --117.98 -1 -88.300 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -147.64 -21 --117.98 -0 -LINE -8 -Cmts -62 -1 -10 -191.79 -20 --99.49 -11 -191.79 -21 --119.33 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --99.49 -11 -103.49 -21 --119.33 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --116.63 -11 -191.79 -21 --116.63 -0 -LINE -8 -Cmts -62 -1 -10 -191.79 -20 --116.63 -11 -190.663496 -21 --117.216421 -0 -LINE -8 -Cmts -62 -1 -10 -191.79 -20 --116.63 -11 -190.663496 -21 --116.043579 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --116.63 -11 -104.616504 -21 --117.216421 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --116.63 -11 -104.616504 -21 --116.043579 -0 -TEXT -8 -Cmts -62 -1 -10 -102.19 -20 --104.41 -1 -2.600 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -102.19 -21 --104.41 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --99.49 -11 -103.49 -21 --105.76 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --99.49 -11 -100.89 -21 --105.76 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --103.06 -11 -103.49 -21 --103.06 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --103.06 -11 -102.363496 -21 --103.646421 -0 -LINE -8 -Cmts -62 -1 -10 -103.49 -20 --103.06 -11 -102.363496 -21 --102.473579 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --103.06 -11 -102.016504 -21 --103.646421 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --103.06 -11 -102.016504 -21 --102.473579 -0 -TEXT -8 -Cmts -62 -1 -10 -97.67 -20 --96.94 -1 -5.100 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -97.67 -21 --96.94 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --99.49 -11 -96.32 -21 --99.49 -0 -LINE -8 -Cmts -62 -1 -10 -100.89 -20 --94.39 -11 -96.32 -21 --94.39 -0 -LINE -8 -Cmts -62 -1 -10 -99.02 -20 --94.39 -11 -99.02 -21 --99.49 -0 -LINE -8 -Cmts -62 -1 -10 -99.02 -20 --99.49 -11 -98.433579 -21 --98.363496 -0 -LINE -8 -Cmts -62 -1 -10 -99.02 -20 --99.49 -11 -99.606421 -21 --98.363496 -0 -LINE -8 -Cmts -62 -1 -10 -99.02 -20 --94.39 -11 -98.433579 -21 --95.516504 -0 -LINE -8 -Cmts -62 -1 -10 -99.02 -20 --94.39 -11 -99.606421 -21 --95.516504 -0 -TEXT -8 -Cmts -62 -1 -10 -109.63 -20 --81.13 -1 -14.500 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -109.63 -21 --81.13 -0 -LINE -8 -Cmts -62 -1 -10 -102.38 -20 --89.28 -11 -102.38 -21 --79.78 -0 -LINE -8 -Cmts -62 -1 -10 -116.88 -20 --89.28 -11 -116.88 -21 --79.78 -0 -LINE -8 -Cmts -62 -1 -10 -116.88 -20 --82.48 -11 -102.38 -21 --82.48 -0 -LINE -8 -Cmts -62 -1 -10 -102.38 -20 --82.48 -11 -103.506504 -21 --81.893579 -0 -LINE -8 -Cmts -62 -1 -10 -102.38 -20 --82.48 -11 -103.506504 -21 --83.066421 -0 -LINE -8 -Cmts -62 -1 -10 -116.88 -20 --82.48 -11 -115.753496 -21 --81.893579 -0 -LINE -8 -Cmts -62 -1 -10 -116.88 -20 --82.48 -11 -115.753496 -21 --83.066421 -0 -TEXT -8 -Cmts -62 -1 -10 -121.803009 -20 --90.50045 -1 -2.400 mm -40 -1.5 -41 -1.5 -50 -89.761269 -7 -SIMPLEX -72 -1 -73 -2 -11 -121.803009 -21 --90.50045 -0 -LINE -8 -Cmts -62 -1 -10 -116.89 -20 --91.68 -11 -123.147997 -21 --91.706075 -0 -LINE -8 -Cmts -62 -1 -10 -116.9 -20 --89.28 -11 -123.157997 -21 --89.306075 -0 -LINE -8 -Cmts -62 -1 -10 -120.458021 -20 --89.294825 -11 -120.448021 -21 --91.694825 -0 -LINE -8 -Cmts -62 -1 -10 -120.448021 -20 --91.694825 -11 -119.866299 -21 --90.565888 -0 -LINE -8 -Cmts -62 -1 -10 -120.448021 -20 --91.694825 -11 -121.03913 -21 --90.570774 -0 -LINE -8 -Cmts -62 -1 -10 -120.458021 -20 --89.294825 -11 -119.866912 -21 --90.418876 -0 -LINE -8 -Cmts -62 -1 -10 -120.458021 -20 --89.294825 -11 -121.039743 -21 --90.423762 -0 -TEXT -8 -Cmts -62 -1 -10 -115.69 -20 --85.3 -1 -2.400 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -115.69 -21 --85.3 -0 -LINE -8 -Cmts -62 -1 -10 -116.89 -20 --89.28 -11 -116.89 -21 --83.95 -0 -LINE -8 -Cmts -62 -1 -10 -114.49 -20 --89.28 -11 -114.49 -21 --83.95 -0 -LINE -8 -Cmts -62 -1 -10 -114.49 -20 --86.65 -11 -116.89 -21 --86.65 -0 -LINE -8 -Cmts -62 -1 -10 -116.89 -20 --86.65 -11 -115.763496 -21 --87.236421 -0 -LINE -8 -Cmts -62 -1 -10 -116.89 -20 --86.65 -11 -115.763496 -21 --86.063579 -0 -LINE -8 -Cmts -62 -1 -10 -114.49 -20 --86.65 -11 -115.616504 -21 --87.236421 -0 -LINE -8 -Cmts -62 -1 -10 -114.49 -20 --86.65 -11 -115.616504 -21 --86.063579 -0 -TEXT -8 -Cmts -62 -1 -10 -135.19 -20 --90.49 -1 -12.800 mm -40 -1.5 -41 -1.5 -50 -270.0 -7 -SIMPLEX -72 -1 -73 -2 -11 -135.19 -21 --90.49 -0 -LINE -8 -Cmts -62 -1 -10 -139.89 -20 --96.89 -11 -133.84 -21 --96.89 -0 -LINE -8 -Cmts -62 -1 -10 -139.89 -20 --84.09 -11 -133.84 -21 --84.09 -0 -LINE -8 -Cmts -62 -1 -10 -136.54 -20 --84.09 -11 -136.54 -21 --96.89 -0 -LINE -8 -Cmts -62 -1 -10 -136.54 -20 --96.89 -11 -135.953579 -21 --95.763496 -0 -LINE -8 -Cmts -62 -1 -10 -136.54 -20 --96.89 -11 -137.126421 -21 --95.763496 -0 -LINE -8 -Cmts -62 -1 -10 -136.54 -20 --84.09 -11 -135.953579 -21 --85.216504 -0 -LINE -8 -Cmts -62 -1 -10 -136.54 -20 --84.09 -11 -137.126421 -21 --85.216504 -0 -TEXT -8 -Cmts -62 -1 -10 -147.63 -20 --105.02 -1 -15.500 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -147.63 -21 --105.02 -0 -LINE -8 -Cmts -62 -1 -10 -139.88 -20 --96.87 -11 -139.88 -21 --106.37 -0 -LINE -8 -Cmts -62 -1 -10 -155.38 -20 --96.87 -11 -155.38 -21 --106.37 -0 -LINE -8 -Cmts -62 -1 -10 -155.38 -20 --103.67 -11 -139.88 -21 --103.67 -0 -LINE -8 -Cmts -62 -1 -10 -139.88 -20 --103.67 -11 -141.006504 -21 --103.083579 -0 -LINE -8 -Cmts -62 -1 -10 -139.88 -20 --103.67 -11 -141.006504 -21 --104.256421 -0 -LINE -8 -Cmts -62 -1 -10 -155.38 -20 --103.67 -11 -154.253496 -21 --103.083579 -0 -LINE -8 -Cmts -62 -1 -10 -155.38 -20 --103.67 -11 -154.253496 -21 --104.256421 -0 -CIRCLE -8 -0 -10 -30.75 -20 --33.3375 -40 -3.15 -0 -CIRCLE -8 -0 -10 -195.4375 -20 --90.4875 -40 -3.15 -0 -CIRCLE -8 -0 -10 -264.525 -20 --33.3375 -40 -3.15 -0 -LINE -8 -0 -10 -290.1375 -20 --7.7875 -11 -290.1375 -21 --58.7125 -0 -LINE -8 -0 -10 -288.3375 -20 --58.7125 -11 -290.1375 -21 --58.7125 -0 -LINE -8 -0 -10 -5.1375 -20 --65.0125 -11 -5.1375 -21 --97.7875 -0 -LINE -8 -0 -10 -288.3375 -20 --65.1125 -11 -290.1375 -21 --65.1125 -0 -LINE -8 -0 -10 -8.7375 -20 --65.0125 -11 -5.1375 -21 --65.0125 -0 -LINE -8 -0 -10 -8.7375 -20 --58.8125 -11 -5.1375 -21 --58.8125 -0 -ARC -8 -0 -10 -8.7375 -20 --61.9125 -30 -0.0 -40 -3.1 -50 --90.0 -51 -90.0 -0 -ARC -8 -0 -10 -288.3375 -20 --61.9125 -30 -0.0 -40 -3.2 -50 -90.0 -51 -270.0 -0 -TEXT -8 -Cmts -62 -1 -10 -277.6375 -20 -6.3625 -1 -25.000 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -277.6375 -21 -6.3625 -0 -LINE -8 -Cmts -62 -1 -10 -265.1375 -20 --33.3375 -11 -265.1375 -21 -7.7125 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 --33.3375 -11 -290.1375 -21 -7.7125 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 -5.0125 -11 -265.1375 -21 -5.0125 -0 -LINE -8 -Cmts -62 -1 -10 -265.1375 -20 -5.0125 -11 -266.264004 -21 -5.598921 -0 -LINE -8 -Cmts -62 -1 -10 -265.1375 -20 -5.0125 -11 -266.264004 -21 -4.426079 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 -5.0125 -11 -289.010996 -21 -5.598921 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 -5.0125 -11 -289.010996 -21 -4.426079 -0 -TEXT -8 -Cmts -62 -1 -10 -147.6375 -20 -10.875 -1 -285.000 mm -40 -1.5 -41 -1.5 -7 -SIMPLEX -72 -1 -73 -2 -11 -147.6375 -21 -10.875 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 --7.14375 -11 -290.1375 -21 -12.225 -0 -LINE -8 -Cmts -62 -1 -10 -5.1375 -20 --7.14375 -11 -5.1375 -21 -12.225 -0 -LINE -8 -Cmts -62 -1 -10 -5.1375 -20 -9.525 -11 -290.1375 -21 -9.525 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 -9.525 -11 -289.010996 -21 -8.938579 -0 -LINE -8 -Cmts -62 -1 -10 -290.1375 -20 -9.525 -11 -289.010996 -21 -10.111421 -0 -LINE -8 -Cmts -62 -1 -10 -5.1375 -20 -9.525 -11 -6.264004 -21 -8.938579 -0 -LINE -8 -Cmts -62 -1 -10 -5.1375 -20 -9.525 -11 -6.264004 -21 -10.111421 -0 -ARC -8 -0 -10 -7.6375 -20 --97.7875 -30 -0.0 -40 -2.5 -50 --180.0 -51 --90.0 -0 -ARC -8 -0 -10 -287.6375 -20 --97.7875 -30 -0.0 -40 -2.5 -50 --90.0 -51 -0.0 -0 -ARC -8 -0 -10 -287.6375 -20 --7.7875 -30 -0.0 -40 -2.5 -50 -0.0 -51 -90.0 -0 -ARC -8 -0 -10 -7.6375 -20 --7.7875 -30 -0.0 -40 -2.5 -50 -90.0 -51 -180.0 -0 -LINE -8 -0 -10 -290.1375 -20 --97.7875 -11 -290.1375 -21 --65.1125 -0 -LINE -8 -0 -10 -7.6375 -20 --100.2875 -11 -287.6375 -21 --100.2875 -0 -LINE -8 -0 -10 -5.1375 -20 --7.7875 -11 -5.1375 -21 --58.8125 -0 -LINE -8 -0 -10 -7.6375 -20 --5.2875 -11 -287.6375 -21 --5.2875 -0 -ENDSEC -0 -EOF \ No newline at end of file diff --git a/keyboards/weebkeeb/config.h b/keyboards/weebkeeb/config.h deleted file mode 100644 index 859adc9cc2..0000000000 --- a/keyboards/weebkeeb/config.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER You -#define PRODUCT weebkeeb -#define DESCRIPTION A custom keyboard - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_ROW_PINS { F4, F5, F6, F7 } -#define MATRIX_COL_PINS { B0, B1, B2, B3, B4, B5, B6, B7, C6, C7, F0, F1 } -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/weebkeeb/keymaps/default/Makefile b/keyboards/weebkeeb/keymaps/default/Makefile deleted file mode 100644 index f4671a9d11..0000000000 --- a/keyboards/weebkeeb/keymaps/default/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/config.h b/keyboards/weebkeeb/keymaps/default/config.h deleted file mode 100644 index df06a26206..0000000000 --- a/keyboards/weebkeeb/keymaps/default/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/keymap.c b/keyboards/weebkeeb/keymaps/default/keymap.c deleted file mode 100644 index cdf1f1e4c7..0000000000 --- a/keyboards/weebkeeb/keymaps/default/keymap.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "weebkeeb.h" - -#define _QWERTY 0 -#define _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = KEYMAP( \ - KC_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_ENT , \ - KC_LCTL, ADJUST, KC_LALT, KC_LGUI, MO(3), KC_SPC, KC_SPC, MO(4), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[3] = KEYMAP( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), -[4] = KEYMAP( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = KEYMAP( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) -}; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file diff --git a/keyboards/weebkeeb/keymaps/default/readme.md b/keyboards/weebkeeb/keymaps/default/readme.md deleted file mode 100644 index 8771322763..0000000000 --- a/keyboards/weebkeeb/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for weebkeeb \ No newline at end of file diff --git a/keyboards/weebkeeb/readme.md b/keyboards/weebkeeb/readme.md deleted file mode 100644 index bf31016c82..0000000000 --- a/keyboards/weebkeeb/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -weebkeeb keyboard firmware -====================== - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme](/). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/weebkeeb folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default - -To build with the default keymap, simply run `make default`. - -### Other Keymaps - -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. - -To build the firmware binary hex file with a keymap just do `make` with a keymap like this: - -``` -$ make [default|jack|] -``` - -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/weebkeeb/rules.mk b/keyboards/weebkeeb/rules.mk deleted file mode 100644 index 55898147dd..0000000000 --- a/keyboards/weebkeeb/rules.mk +++ /dev/null @@ -1,67 +0,0 @@ -# MCU name -#MCU = at90usb1287 -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 diff --git a/keyboards/weebkeeb/weebkeeb.c b/keyboards/weebkeeb/weebkeeb.c deleted file mode 100644 index 483fc9440e..0000000000 --- a/keyboards/weebkeeb/weebkeeb.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "weebkeeb.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} diff --git a/keyboards/weebkeeb/weebkeeb.h b/keyboards/weebkeeb/weebkeeb.h deleted file mode 100644 index 7bca2c2014..0000000000 --- a/keyboards/weebkeeb/weebkeeb.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef WEEBKEEB_H -#define WEEBKEEB_H - -#include "quantum.h" - -// This a shortcut to help you visually see your layout. -// The following is an example using the Planck MIT layout -// The first section contains all of the arguements -// The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ -) \ -{ \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ - { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ - { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \ -} - -#endif -- cgit v1.2.3 From 0f71c81df833a282250ecc4e66034320e40b208e Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 3 Dec 2016 17:37:41 -0500 Subject: having trouble with conflicts --- keyboards/maxipad/config.h | 15 --------------- keyboards/maxipad/readme.md | 2 -- keyboards/maxipad/rules.mk | 3 --- 3 files changed, 20 deletions(-) diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h index 4377a892e9..d7a5ef5646 100644 --- a/keyboards/maxipad/config.h +++ b/keyboards/maxipad/config.h @@ -32,20 +32,6 @@ along with this program. If not, see . #define MATRIX_ROWS 5 #define MATRIX_COLS 6 -<<<<<<< HEAD -// Planck PCB default pin-out -// Change this to how you wired your keyboard -// COLS: Left to right, ROWS: Top to bottom -#ifdef USE_PRO_MICRO - #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } - #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 } - #define UNUSED_PINS - #else - #define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 } - #define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } - #define UNUSED_PINS - #endif -======= /* * Keyboard Matrix Assignments * @@ -65,7 +51,6 @@ along with this program. If not, see . //#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 } //#define UNUSED_PINS ->>>>>>> 102a830bbdb302eb0951ec7910ab7c9feae272d1 /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md index 58ed5d718f..861ea2b078 100644 --- a/keyboards/maxipad/readme.md +++ b/keyboards/maxipad/readme.md @@ -1,6 +1,4 @@ -<<<<<<< HEAD Maxipad keyboard firmware -====================== ## Quantum MK Firmware diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk index 49bb5f0022..a5c7391523 100644 --- a/keyboards/maxipad/rules.mk +++ b/keyboards/maxipad/rules.mk @@ -59,7 +59,6 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= yes # Console for debug(+400) COMMAND_ENABLE ?= yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -<<<<<<< HEAD # 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 @@ -67,7 +66,6 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration # UNICODE_ENABLE ?= YES # Unicode # BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID USE_PRO_MICRO ?= yes -======= SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE ?= no # USB Nkey Rollover @@ -76,4 +74,3 @@ MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 ->>>>>>> 102a830bbdb302eb0951ec7910ab7c9feae272d1 -- cgit v1.2.3 From 75b18773bd9368ad53d7072d73a6280e053123a3 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 4 Dec 2016 14:51:27 +0700 Subject: fix RGB LED order --- keyboards/handwired/promethium/promethium.h | 108 ++++++++++++++-------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h index 8f2a8c3be2..662eeab990 100644 --- a/keyboards/handwired/promethium/promethium.h +++ b/keyboards/handwired/promethium/promethium.h @@ -23,77 +23,77 @@ } enum led_sequence { - LED_IND_EMOJI, - LED_IND_NUM, - LED_IND_FUNC, - - LED_IND_BATTERY, - LED_IND_USB, LED_IND_BLUETOOTH, + LED_IND_USB, + LED_IND_BATTERY, - LED_TAB, - LED_ESC, - LED_LSFT, - LED_LCTL, - - LED_LGUI, - LED_Z, - LED_A, - LED_Q, + LED_IND_FUNC, + LED_IND_NUM, + LED_IND_EMOJI, - LED_W, - LED_S, - LED_X, - LED_LALT, + LED_BKSP, + LED_ENT, + LED_RSFT, + LED_RCTL, - LED_PUNC, - LED_C, - LED_D, - LED_E, + LED_RGUI, + LED_SLSH, + LED_SCLN, + LED_P, - LED_R, - LED_F, - LED_V, - LED_NUM, + LED_O, + LED_L, + LED_DOT, + LED_RALT, - LED_LSPC, - LED_B, - LED_G, - LED_T, + LED_EMOJI, + LED_COMM, + LED_K, + LED_I, - LED_TRACKPOINT1, - LED_TRACKPOINT2, - LED_TRACKPOINT3, + LED_U, + LED_J, + LED_M, + LED_FUNC, LED_RSPC, LED_N, LED_HH, LED_Y, - LED_U, - LED_J, - LED_M, - LED_FUNC, + LED_TRACKPOINT3, + LED_TRACKPOINT2, + LED_TRACKPOINT1, - LED_EMOJI, - LED_COMM, - LED_K, - LED_I, + LED_LSPC, + LED_B, + LED_G, + LED_T, - LED_O, - LED_L, - LED_DOT, - LED_RALT, + LED_R, + LED_F, + LED_V, + LED_NUM, - LED_RGUI, - LED_SLSH, - LED_SCLN, - LED_P, + LED_PUNC, + LED_C, + LED_D, + LED_E, - LED_BKSP, - LED_ENT, - LED_RSFT, - LED_RCTL + LED_W, + LED_S, + LED_X, + LED_LALT, + + LED_LGUI, + LED_Z, + LED_A, + LED_Q, + + LED_TAB, + LED_ESC, + LED_LSFT, + LED_LCTL, }; #endif -- cgit v1.2.3 From a8e5f6180585f46684d713976ad05d4d81b11ab1 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 4 Dec 2016 23:55:06 +0700 Subject: fix emoji LED indicators. --- .../handwired/promethium/keymaps/priyadi/keymap.c | 48 +++++++++++++--------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index b2da2f97b7..3d34e98229 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -282,25 +282,25 @@ void led_layer_func(void) { rgbsps_set(LED_K, 15, 0, 15); rgbsps_set(LED_L, 15, 0, 15); - rgbsps_set(LED_U, 15, 0, 10); - rgbsps_set(LED_O, 15, 0, 10); - rgbsps_set(LED_COMM, 15, 0, 10); - rgbsps_set(LED_DOT, 15, 0, 10); - rgbsps_set(LED_SCLN, 15, 0, 10); - rgbsps_set(LED_P, 15, 0, 10); - - rgbsps_set(LED_Q, 10, 0, 15); - rgbsps_set(LED_W, 10, 0, 15); - rgbsps_set(LED_E, 10, 0, 15); - rgbsps_set(LED_R, 10, 0, 15); - rgbsps_set(LED_A, 10, 0, 15); - rgbsps_set(LED_S, 10, 0, 15); - rgbsps_set(LED_D, 10, 0, 15); - rgbsps_set(LED_F, 10, 0, 15); - rgbsps_set(LED_Z, 10, 0, 15); - rgbsps_set(LED_X, 10, 0, 15); - rgbsps_set(LED_C, 10, 0, 15); - rgbsps_set(LED_V, 10, 0, 15); + rgbsps_set(LED_U, 15, 0, 0); + rgbsps_set(LED_O, 15, 0, 0); + rgbsps_set(LED_COMM, 15, 0, 0); + rgbsps_set(LED_DOT, 15, 0, 0); + rgbsps_set(LED_SCLN, 15, 0, 0); + rgbsps_set(LED_P, 15, 0, 0); + + rgbsps_set(LED_Q, 0, 15, 0); + rgbsps_set(LED_W, 0, 15, 0); + rgbsps_set(LED_E, 0, 15, 0); + rgbsps_set(LED_R, 0, 15, 0); + rgbsps_set(LED_A, 0, 15, 0); + rgbsps_set(LED_S, 0, 15, 0); + rgbsps_set(LED_D, 0, 15, 0); + rgbsps_set(LED_F, 0, 15, 0); + rgbsps_set(LED_Z, 0, 15, 0); + rgbsps_set(LED_X, 0, 15, 0); + rgbsps_set(LED_C, 0, 15, 0); + rgbsps_set(LED_V, 0, 15, 0); rgbsps_send(); } @@ -361,7 +361,15 @@ void led_layer_num(void) { } void led_layer_emoji(void) { - rgbsps_setall(15, 15, 0); + for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { + rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0); + } + for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { + rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0); + } + for(uint8_t i = 0; i < COUNT(LED_FN); i++) { + rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0); + } rgbsps_set(LED_IND_FUNC, 0, 0, 0); rgbsps_set(LED_IND_NUM, 0, 0, 0); -- cgit v1.2.3 From 6ef3060b4292392be1455c26d260e819f7d12ef0 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 01:07:12 +0700 Subject: Implemented weak ps2_mouse_init_user() There are a lot of PS/2 commands, some are vendor/device specific, so we provide a weak ps2_mouse_init_user() to be implemented in each keyboard that need it. --- tmk_core/protocol/ps2_mouse.c | 54 ++++++------------------------------------- tmk_core/protocol/ps2_mouse.h | 49 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index af971dd497..e3c6974440 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -28,53 +28,7 @@ along with this program. If not, see . /* ============================= MACROS ============================ */ -#define PS2_MOUSE_SEND(command, message) \ -do { \ - uint8_t rcv = ps2_host_send(command); \ - if (debug_mouse) { \ - print((message)); \ - xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ - } \ -} while(0) - -#define PS2_MOUSE_SEND_SAFE(command, message) \ -do { \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_disable_data_reporting(); \ - } \ - PS2_MOUSE_SEND(command, message); \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_enable_data_reporting(); \ - } \ -} while(0) - -#define PS2_MOUSE_SET_SAFE(command, value, message) \ -do { \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_disable_data_reporting(); \ - } \ - PS2_MOUSE_SEND(command, message); \ - PS2_MOUSE_SEND(value, "Sending value"); \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_enable_data_reporting(); \ - } \ -} while(0) - -#define PS2_MOUSE_RECEIVE(message) \ -do { \ - uint8_t rcv = ps2_host_recv_response(); \ - if (debug_mouse) { \ - print((message)); \ - xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ - } \ -} while(0) - -static enum ps2_mouse_mode_e { - PS2_MOUSE_STREAM_MODE, - PS2_MOUSE_REMOTE_MODE, -} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; - -static report_mouse_t mouse_report = {}; +static report_mouse_t mouse_report = {};./ static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); @@ -108,6 +62,12 @@ void ps2_mouse_init(void) { #ifdef PS2_MOUSE_USE_2_1_SCALING ps2_mouse_set_scaling_2_1(); #endif + + ps2_mouse_init_user(); +} + +__attribute__((weak)) +void ps2_mouse_init_user(void) { } void ps2_mouse_task(void) { diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h index e11c705fc6..3c93a46342 100644 --- a/tmk_core/protocol/ps2_mouse.h +++ b/tmk_core/protocol/ps2_mouse.h @@ -19,6 +19,53 @@ along with this program. If not, see . #define PS2_MOUSE_H #include +#include "debug.h" + +#define PS2_MOUSE_SEND(command, message) \ +do { \ + uint8_t rcv = ps2_host_send(command); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ + } \ +} while(0) + +#define PS2_MOUSE_SEND_SAFE(command, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_SET_SAFE(command, value, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + PS2_MOUSE_SEND(value, "Sending value"); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_RECEIVE(message) \ +do { \ + uint8_t rcv = ps2_host_recv_response(); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ + } \ +} while(0) + +static enum ps2_mouse_mode_e { + PS2_MOUSE_STREAM_MODE, + PS2_MOUSE_REMOTE_MODE, +} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; /* * Data format: @@ -107,6 +154,8 @@ typedef enum ps2_mouse_sample_rate_e { void ps2_mouse_init(void); +void ps2_mouse_init_user(void); + void ps2_mouse_task(void); void ps2_mouse_disable_data_reporting(void); -- cgit v1.2.3 From 73073f270b55d939559e8cfd4a7d36e3510ba2f6 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 01:15:04 +0700 Subject: Trackpoint initialization --- .../handwired/promethium/keymaps/priyadi/flash.sh | 1 + .../handwired/promethium/keymaps/priyadi/keymap.c | 110 ++++++++++++++++++++- 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/keyboards/handwired/promethium/keymaps/priyadi/flash.sh b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh index fb81a54ee0..14a3b43789 100755 --- a/keyboards/handwired/promethium/keymaps/priyadi/flash.sh +++ b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh @@ -1,3 +1,4 @@ #!/bin/sh +sleep 10 avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 3d34e98229..bf797a7491 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -11,6 +11,8 @@ #include "process_unicode.h" #include "quantum.h" #include "rgbsps.h" +#include "ps2_mouse.h" +#include "ps2.h" #define COUNT(x) (sizeof (x) / sizeof (*(x))) // #define RGBLED_NUM 5 @@ -730,4 +732,110 @@ void shutdown_user() stop_all_notes(); } -#endif \ No newline at end of file +#endif + + +void ps2_mouse_init_user() { + // set TrackPoint sensitivity + PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2"); + PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81"); + PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A"); + PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60"); + + // set TrackPoint speed + // (transfer function upper plateau speed) + PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2"); + PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81"); + PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60"); + PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90"); + + // set TrackPoint Negative Inertia factor + PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2"); + PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81"); + PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D"); + PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03"); + + // disable up threshold (click) + PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2"); + PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47"); + PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C"); + PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01"); + + // enable TrackPoint Press to Select (PtS) + // print("ps2_mouse_init: send 0xE2: "); + // rcv = ps2_host_send(0xE2); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x47: "); + // rcv = ps2_host_send(0x47); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x2C: "); + // rcv = ps2_host_send(0x2C); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x00: "); + // rcv = ps2_host_send(0x00); + // phex(rcv); phex(ps2_error); print("\n"); + + // set TrackPoint Press to Select threshold + // print("ps2_mouse_init: send 0xE2: "); + // rcv = ps2_host_send(0xE2); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x81: "); + // rcv = ps2_host_send(0x81); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x5C: "); + // rcv = ps2_host_send(0x5C); + // phex(rcv); phex(ps2_error); print("\n"); + // // default PtS threshold is 0x08 + // print("ps2_mouse_init: send 0x04: "); + // rcv = ps2_host_send(0x04); + // phex(rcv); phex(ps2_error); print("\n"); + + // set TrackPoint Press to Select time constant (zTc) + // print("ps2_mouse_init: send 0xE2: "); + // rcv = ps2_host_send(0xE2); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x81: "); + // rcv = ps2_host_send(0x81); + // phex(rcv); phex(ps2_error); print("\n"); + // print("ps2_mouse_init: send 0x5E: "); + // rcv = ps2_host_send(0x5E); + // phex(rcv); phex(ps2_error); print("\n"); + // // default zTc is 0x26 + // print("ps2_mouse_init: send 0x45: "); + // rcv = ps2_host_send(0x45); + // phex(rcv); phex(ps2_error); print("\n"); + + /* + // set TrackPoint Press to Select Jenks Curvature (jkcur) + print("ps2_mouse_init: send 0xE2: "); + rcv = ps2_host_send(0xE2); + phex(rcv); phex(ps2_error); print("\n"); + print("ps2_mouse_init: send 0x81: "); + rcv = ps2_host_send(0x81); + phex(rcv); phex(ps2_error); print("\n"); + print("ps2_mouse_init: send 0x5D: "); + rcv = ps2_host_send(0x5D); + phex(rcv); phex(ps2_error); print("\n"); + // default jkcur is 0x87 + print("ps2_mouse_init: send 0x87: "); + rcv = ps2_host_send(0x87); + phex(rcv); phex(ps2_error); print("\n"); + */ + + /* + // set TrackPoint Minimum Drag (mindrag) + print("ps2_mouse_init: send 0xE2: "); + rcv = ps2_host_send(0xE2); + phex(rcv); phex(ps2_error); print("\n"); + print("ps2_mouse_init: send 0x81: "); + rcv = ps2_host_send(0x81); + phex(rcv); phex(ps2_error); print("\n"); + print("ps2_mouse_init: send 0x59: "); + rcv = ps2_host_send(0x59); + phex(rcv); phex(ps2_error); print("\n"); + // default PtS mindrag is 0x14 + print("ps2_mouse_init: send 0x14: "); + rcv = ps2_host_send(0x14); + phex(rcv); phex(ps2_error); print("\n"); + */ +} \ No newline at end of file -- cgit v1.2.3 From d059624bfb32e268ff0972609d7eadbb212fa2d2 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 01:07:12 +0700 Subject: Implemented weak ps2_mouse_init_user() There are a lot of PS/2 commands, some are vendor/device specific, so we provide a weak ps2_mouse_init_user() to be implemented in each keyboard that need it. --- tmk_core/protocol/ps2_mouse.c | 54 ++++++------------------------------------- tmk_core/protocol/ps2_mouse.h | 49 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index af971dd497..e3c6974440 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -28,53 +28,7 @@ along with this program. If not, see . /* ============================= MACROS ============================ */ -#define PS2_MOUSE_SEND(command, message) \ -do { \ - uint8_t rcv = ps2_host_send(command); \ - if (debug_mouse) { \ - print((message)); \ - xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ - } \ -} while(0) - -#define PS2_MOUSE_SEND_SAFE(command, message) \ -do { \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_disable_data_reporting(); \ - } \ - PS2_MOUSE_SEND(command, message); \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_enable_data_reporting(); \ - } \ -} while(0) - -#define PS2_MOUSE_SET_SAFE(command, value, message) \ -do { \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_disable_data_reporting(); \ - } \ - PS2_MOUSE_SEND(command, message); \ - PS2_MOUSE_SEND(value, "Sending value"); \ - if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ - ps2_mouse_enable_data_reporting(); \ - } \ -} while(0) - -#define PS2_MOUSE_RECEIVE(message) \ -do { \ - uint8_t rcv = ps2_host_recv_response(); \ - if (debug_mouse) { \ - print((message)); \ - xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ - } \ -} while(0) - -static enum ps2_mouse_mode_e { - PS2_MOUSE_STREAM_MODE, - PS2_MOUSE_REMOTE_MODE, -} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; - -static report_mouse_t mouse_report = {}; +static report_mouse_t mouse_report = {};./ static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); @@ -108,6 +62,12 @@ void ps2_mouse_init(void) { #ifdef PS2_MOUSE_USE_2_1_SCALING ps2_mouse_set_scaling_2_1(); #endif + + ps2_mouse_init_user(); +} + +__attribute__((weak)) +void ps2_mouse_init_user(void) { } void ps2_mouse_task(void) { diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h index e11c705fc6..3c93a46342 100644 --- a/tmk_core/protocol/ps2_mouse.h +++ b/tmk_core/protocol/ps2_mouse.h @@ -19,6 +19,53 @@ along with this program. If not, see . #define PS2_MOUSE_H #include +#include "debug.h" + +#define PS2_MOUSE_SEND(command, message) \ +do { \ + uint8_t rcv = ps2_host_send(command); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ + } \ +} while(0) + +#define PS2_MOUSE_SEND_SAFE(command, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_SET_SAFE(command, value, message) \ +do { \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_disable_data_reporting(); \ + } \ + PS2_MOUSE_SEND(command, message); \ + PS2_MOUSE_SEND(value, "Sending value"); \ + if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ + ps2_mouse_enable_data_reporting(); \ + } \ +} while(0) + +#define PS2_MOUSE_RECEIVE(message) \ +do { \ + uint8_t rcv = ps2_host_recv_response(); \ + if (debug_mouse) { \ + print((message)); \ + xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ + } \ +} while(0) + +static enum ps2_mouse_mode_e { + PS2_MOUSE_STREAM_MODE, + PS2_MOUSE_REMOTE_MODE, +} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; /* * Data format: @@ -107,6 +154,8 @@ typedef enum ps2_mouse_sample_rate_e { void ps2_mouse_init(void); +void ps2_mouse_init_user(void); + void ps2_mouse_task(void); void ps2_mouse_disable_data_reporting(void); -- cgit v1.2.3 From 07d29b7d29ce13a22f50270ab54d39f80103cc44 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 01:22:40 +0700 Subject: syntax error fix --- tmk_core/protocol/ps2_mouse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index e3c6974440..d9ccbecb43 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -28,7 +28,7 @@ along with this program. If not, see . /* ============================= MACROS ============================ */ -static report_mouse_t mouse_report = {};./ +static report_mouse_t mouse_report = {}; static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); -- cgit v1.2.3 From 236c0408596e525c949abc5a3b3ef8b853c28504 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 01:22:40 +0700 Subject: syntax error fix --- tmk_core/protocol/ps2_mouse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index e3c6974440..d9ccbecb43 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -28,7 +28,7 @@ along with this program. If not, see . /* ============================= MACROS ============================ */ -static report_mouse_t mouse_report = {};./ +static report_mouse_t mouse_report = {}; static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); -- cgit v1.2.3 From c7d11fd001cac4f0baeecdda79b7743e3695c77f Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 5 Dec 2016 02:15:38 +0700 Subject: Remove unnecessary build options --- keyboards/handwired/promethium/keymaps/priyadi/Makefile | 7 ++++--- keyboards/handwired/promethium/rules.mk | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/handwired/promethium/keymaps/priyadi/Makefile b/keyboards/handwired/promethium/keymaps/priyadi/Makefile index 2f6f27a732..46fdfa0118 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/Makefile +++ b/keyboards/handwired/promethium/keymaps/priyadi/Makefile @@ -4,16 +4,17 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode +UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. PS2_MOUSE_ENABLE = yes diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk index 0842780cce..891f523c22 100644 --- a/keyboards/handwired/promethium/rules.mk +++ b/keyboards/handwired/promethium/rules.mk @@ -61,7 +61,7 @@ BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode -UNICODEMAP_ENABLE = yes +UNICODEMAP_ENABLE ?= yes BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. PS2_MOUSE_ENABLE ?= yes -- cgit v1.2.3 From 7e4341e437c2f0d8d4257b616b1d8d30a8cab4ed Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 4 Dec 2016 23:01:07 -0500 Subject: Update rules.mk --- keyboards/planck/rules.mk | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk index 4874d92b9f..fb24e82354 100644 --- a/keyboards/planck/rules.mk +++ b/keyboards/planck/rules.mk @@ -62,8 +62,7 @@ AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -API_SYSEX_ENABLE = no -RAW_ENABLE = yes +API_SYSEX_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -- cgit v1.2.3 -- cgit v1.2.3 From 1eec2b7277ed24a63c42ea6b53a4db530c35dbbd Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 4 Dec 2016 23:11:22 -0500 Subject: Update planck.c --- keyboards/planck/planck.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/keyboards/planck/planck.c b/keyboards/planck/planck.c index 0d37b66223..3980b02f50 100644 --- a/keyboards/planck/planck.c +++ b/keyboards/planck/planck.c @@ -1,8 +1,5 @@ #include "planck.h" -#include "raw_hid.h" -#include "keymap.h" - #ifdef ONEHAND_ENABLE __attribute__ ((weak)) const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { @@ -20,14 +17,3 @@ void matrix_init_kb(void) { matrix_init_user(); } - -#ifdef RAW_ENABLE - -void raw_hid_receive( uint8_t *data, uint8_t length ) -{ - // Basic test of Raw HID - // Echo back data received - raw_hid_send( data, length ); -} - -#endif -- cgit v1.2.3 From a05b6a72d9da9fa6056046c9f600957f43b3c8df Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 5 Dec 2016 20:34:24 -0500 Subject: Adjusts config for better mousekey support --- keyboards/ergodox/config.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index edc60caae1..994a8c6433 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -1,10 +1,11 @@ #ifndef KEYBOARDS_ERGODOX_CONFIG_H_ #define KEYBOARDS_ERGODOX_CONFIG_H_ -#define MOUSEKEY_DELAY 100 #define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_MAX_SPEED 3 -#define MOUSEKEY_TIME_TO_MAX 10 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 5 +#define MOUSEKEY_MAX_SPEED 2 +#define MOUSEKEY_WHEEL_DELAY 0 #define TAPPING_TOGGLE 1 -- cgit v1.2.3 From 82922a4937dc9683a2364f750a67b80b63767ab5 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Mon, 5 Dec 2016 20:35:03 -0500 Subject: A new default layout that supports Shine --- keyboards/ergodox/keymaps/default/keymap.c | 84 +++++++++++++++------- .../ergodox/keymaps/erez_experimental/keymap.c | 2 +- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c index 2f399bd181..4eff280850 100644 --- a/keyboards/ergodox/keymaps/default/keymap.c +++ b/keyboards/ergodox/keymaps/default/keymap.c @@ -7,7 +7,12 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys -#define EPRM M(1) // Macro 1: Reset EEPROM +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EPRM, + VRSN, + RGB_SLD +}; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -17,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * | BkSp | A | S | D | F | G |------| |------| H |J/Alt | K | L |; / L2|' / Cmd | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -44,56 +49,56 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, ALT_T(KC_J), KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, 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 * - * ,--------------------------------------------------. ,--------------------------------------------------. - * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | EPRM | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' + * ,---------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | EPRM | | | | | | | . | 0 | = | | + * `-----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | | | | | | + * |Animat| | |Toggle|Solid | * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | + * |Bright|Bright| | | |Hue- |Hue+ | + * |ness- |ness+ |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS [SYMB] = KEYMAP( // left hand - M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + VRSN, 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, EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, + RGB_MOD,KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + RGB_VAD,RGB_VAI,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, + RGB_TOG, RGB_SLD, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, RGB_HUD, RGB_HUI ), /* Keymap 2: Media and mouse keys * @@ -160,6 +165,33 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case EPRM: + if (record->event.pressed) { + eeconfig_init(); + } + return false; + break; + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + case RGB_SLD: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_mode(1); + #endif + } + return false; + break; + } + return true; +} + // Runs just one time when the keyboard initializes. void matrix_init_user(void) { diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c index 2963c40e31..13b8240ce8 100644 --- a/keyboards/ergodox/keymaps/erez_experimental/keymap.c +++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c @@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | | | |TOG | * ,------|------|------| |------+------+------. - * |VAI |VAD |HUI | |SAI |TOG |MOD | + * |VAI |VAD |HUI | |SAI | |MOD | * | | |------| |------| | | * | | |HUD | |SAD | | | * `--------------------' `--------------------' -- cgit v1.2.3 From 985a091a739c99736d5b17de5161831488dbc219 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 6 Dec 2016 09:49:05 -0500 Subject: Update readme.md --- readme.md | 1562 +------------------------------------------------------------ 1 file changed, 2 insertions(+), 1560 deletions(-) diff --git a/readme.md b/readme.md index b618334dc3..90584cabcb 100644 --- a/readme.md +++ b/readme.md @@ -4,7 +4,7 @@ This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website +## Official website (currently under construction with the move to the wiki) For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them. @@ -31,1567 +31,9 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: +* [**The Wiki**](https://github.com/jackhumbert/qmk_firmware/wiki) - the entirity of the readme has been moved here * The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on. * The list of possible keycodes you can use in your keymap is actually spread out in a few different places: * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined. * The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. - -# Getting started - -Before you are able to compile, you'll need to install an environment for AVR development. You'll find the instructions for any OS below. If you find another/better way to set things up from scratch, please consider [making a pull request](https://github.com/jackhumbert/qmk_firmware/pulls) with your changes! - -## Build Environment Setup - -### Windows 10 - -Due to some issues with the "Windows (Vista and later)" instructions below, we now recommend following these instructions if you use Windows, which will allow you to use the Windows Subsystem for Linux to compile the firmware. If you are not using Windows 10 with the Anniversary Update installed (which came out in July 2016), you will need to use one of the other methods, such as Docker, Vagrant, or the instructions for Vista and later. - -If you use this method, you will need to use a standalone tool to flash the firmware to the keyboard after you compile it. We recommend the official [QMK Firmware Flasher](https://github.com/jackhumbert/qmk_firmware_flasher/releases). This is because the Windows 10 Subsystem for Linux lacks [libUSB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it can't access the keyboard's microcontroller. Please add your vote for Microsoft to fix this issue using the link! - -Here are the steps - -1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). -2. If you have cloned the repository using git before August 20, 2016, clean up the line endings from wherever you currently access git: - 1. Make sure that you have no changes you haven't committed by running `git status`. ANY UNCOMMITTED CHANGES WILL BE PERMANENTLY LOST. - 2. Run `git rm --cached -r .` - 3. Run `git reset --hard` -3. Open "Bash On Ubuntu On Windows" from the start menu -4. With the bash window open, navigate to your copy of the [qmk_firmware repository](https://github.com/jackhumbert/qmk_firmware) using the `cd` command. The harddisks can be accessed from `/mnt/`. For example, your main hard drive (C:) can be accessed by executiing the command `cd /mnt/c`. If your username is John and the qmk_firmware folder is in your Downloads folder, you can move to it with the command `cd /mnt/c/Users/John/Downloads/qmk_firmware`. You can use the Tab key as you go to help you autocomplete the folder names. -5. Run `sudo util/install_dependencies.sh`. -6. After a while the installation will finish, and you are good to go - -**Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working. - -**Warning:** If you edit Makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work. - - -### Windows (Vista and later) -1. If you have ever installed WinAVR, uninstall it. -2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. -3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware). -4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location. -5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer. -6. Open the `\util` folder. -7. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up. -8. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete! - -If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder. - -### Mac -If you're using [homebrew,](http://brew.sh/) you can use the following commands: - - brew tap osx-cross/avr - brew install avr-libc - brew install dfu-programmer - -This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. - -You can also try these instructions: - -1. Install Xcode from the App Store. -2. Install the Command Line Tools from `Xcode->Preferences->Downloads`. -3. Install [DFU-Programmer][dfu-prog]. - -If you are going to flash Infinity based keyboards you will also need dfu-util - - brew install dfu-util - -### Linux - -To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. - -You can also install things manually, but this documentation might not be always up to date with all requirements. - -The current requirements are the following, but not all might be needed depending on what you do. Also note that some systems might not have all the dependencies available as packages, or they might be named differently. - -``` -build-essential -gcc -unzip -wget -zip -gcc-avr -binutils-avr -avr-libc -dfu-programmer -dfu-util -gcc-arm-none-eabi -binutils-arm-none-eabi -libnewlib-arm-none-eabi -git -``` - -Install the dependencies with your favorite package manager. - -Debian/Ubuntu example: - - sudo apt-get update - sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi - -### Docker - -If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap: - -```bash -# You'll run this every time you want to build a keymap -# modify the keymap and keyboard assigment to compile what you want -# defaults are ergodox/default - -docker run -e keymap=gwen -e keyboard=ergodox --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware - -# On windows docker seems to have issue with VOLUME tag in Dockerfile, and $('pwd') won't print a windows compliant path, use full path instead like this -docker run -e keymap=default -e keyboard=ergobop --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware - -``` - -This will compile the targetted keyboard/keymap and leave it in your QMK directory for you to flash. - -### Vagrant -If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](doc/VAGRANT_GUIDE.md). - -## Verify Your Installation -1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application. -2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead. -3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`. -4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below. - -# Customizing your keymap - -In every keymap folder, the following files are recommended: - -* `config.h` - the options to configure your keymap -* `keymap.c` - all of your keymap code, required -* `Makefile` - the features of QMK that are enabled, required to run `make` in your keymap folder -* `readme.md` - a description of your keymap, how others might use it, and explanations of features - -## The `make` command - -The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). - -**NOTE:** To abort a make command press `Ctrl-c` - -The following instruction refers to these folders. - -* The `root` (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc. -* The `keyboard` folder is any keyboard project's folder, like `/keyboards/planck`. -* The `keymap` folder is any keymap's folder, like `/keyboards/planck/keymaps/default`. -* The `subproject` folder is the subproject folder of a keyboard, like `/keyboards/ergodox/ez` - -### Simple instructions for building and uploading a keyboard - -**Most keyboards have more specific instructions in the keyboard specific readme.md file, so please check that first** - -If the `keymap` folder contains a file name `Makefile` - -1. Change the directory to the `keymap` folder -2. Run `make -` - -Otherwise, if there's no `Makefile` in the `keymap` folder - -1. Enter the `keyboard` folder -2. Run `make --` - -In the above commands, replace: - -* `` with the name of your keymap -* `` with the name of the subproject (revision or sub-model of your keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. - * If the keyboard doesn't have a subproject, or if you are happy with the default (defined in `rules.mk` file of the `keyboard` folder), you can leave it out. But remember to also remove the dash (`-`) from the command. -* `` The programmer to use. Most keyboards use `dfu`, but some use `teensy`. Infinity keyboards use `dfu-util`. Check the readme file in the keyboard folder to find out which programmer to use. - * If you don't add `----`, where: - -* `` is the name of the keyboard, for example `planck` - * Use `allkb` to compile all keyboards -* `` is the name of the subproject (revision or sub-model of the keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. - * If the keyboard doesn't have any subprojects, it can be left out - * To compile the default subproject, you can leave it out, or specify `defaultsp` - * Use `allsp` to compile all subprojects -* `` is the name of the keymap, for example `algernon` - * Use `allkm` to compile all keymaps -* `` will be explained in more detail below. - -**Note:** When you leave some parts of the command out, you should also remove the dash (`-`). - -As mentioned above, there are some shortcuts, when you are in a: - -* `keyboard` folder, the command will automatically fill the `` part. So you only need to type `--` -* `subproject` folder, it will fill in both `` and `` -* `keymap` folder, then `` and `` will be filled in. If you need to specify the `` use the following syntax `-` - * Note in order to support this shortcut, the keymap needs its own Makefile (see the example [here](/doc/keymap_makefile_example.mk)) -* `keymap` folder of a `subproject`, then everything except the `` will be filled in - -The `` means the following -* If no target is given, then it's the same as `all` below -* `all` compiles the keyboard and generates a `_.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. -* `dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for Infinity keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme. **Note** that some operating systems needs root access for these commands to work, so in that case you need to run for example `sudo make dfu`. -* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems. - -Some other targets are supported but, but not important enough to be documented here. Check the source code of the make files for more information. - -You can also add extra options at the end of the make command line, after the target - -* `make COLOR=false` - turns off color output -* `make SILENT=true` - turns off output besides errors/warnings -* `make VERBOSE=true` - outputs all of the gcc stuff (not interesting, unless you need to debug) -* `make EXTRAFLAGS=-E` - Preprocess the code without doing any compiling (useful if you are trying to debug #define commands) - -The make command itself also has some additional options, type `make --help` for more information. The most useful is probably `-jx`, which specifies that you want to compile using more than one CPU, the `x` represents the number of CPUs that you want to use. Setting that can greatly reduce the compile times, especially if you are compiling many keyboards/keymaps. I usually set it to one less than the number of CPUs that I have, so that I have some left for doing other things while it's compiling. Note that not all operating systems and make versions supports that option. - -Here are some examples commands - -* `make allkb-allsp-allkm` builds everything (all keyboards, all subprojects, all keymaps). Running just `make` from the `root` will also run this. -* `make` from within a `keyboard` directory, is the same as `make keyboard-allsp-allkm`, which compiles all subprojects and keymaps of the keyboard. **NOTE** that this behaviour has changed. Previously it compiled just the default keymap. -* `make ergodox-infinity-algernon-clean` will clean the build output of the Ergodox Infinity keyboard. This example uses the full syntax and can be run from any folder with a `Makefile` -* `make dfu COLOR=false` from within a keymap folder, builds and uploads the keymap, but without color output. - -## The `Makefile` - -There are 5 different `make` and `Makefile` locations: - -* root (`/`) -* keyboard (`/keyboards//`) -* keymap (`/keyboards//keymaps//`) -* subproject (`/keyboards//`) -* subproject keymap (`/keyboards///keymaps/`) - -The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **The file is required if you want to run `make` in the keymap folder.** - -For keyboards and subprojects, the make files are split in two parts `Makefile` and `rules.mk`. All settings can be found in the `rules.mk` file, while the `Makefile` is just there for support and including the root `Makefile`. Keymaps contain just one `Makefile` for simplicity. - -### Makefile options - -Set the variables to `no` to disable them, and `yes` to enable them. - -`BOOTMAGIC_ENABLE` - -This allows you to hold a key and the salt key (space by default) and have access to a various EEPROM settings that persist over power loss. It's advised you keep this disabled, as the settings are often changed by accident, and produce confusing results that makes it difficult to debug. It's one of the more common problems encountered in help sessions. - -`MOUSEKEY_ENABLE` - -This gives you control over cursor movements and clicks via keycodes/custom functions. - -`EXTRAKEY_ENABLE` - -This allows you to use the system and audio control key codes. - -`CONSOLE_ENABLE` - -This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). - -By default, all debug (*dprint*) print (*print*, *xprintf*), and user print (*uprint*) messages will be enabled. This will eat up a significant portion of the flash and may make the keyboard .hex file too big to program. - -To disable debug messages (*dprint*) and reduce the .hex file size, include `#define NO_DEBUG` in your `config.h` file. - -To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file. - -To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file. - -To see the text, open `hid_listen` and enjoy looking at your printed messages. - -**NOTE:** Do not include *uprint* messages in anything other than your keymap code. It must not be used within the QMK system framework. Otherwise, you will bloat other people's .hex files. - -`COMMAND_ENABLE` - -This enables magic commands, typically fired with the default magic key combo `LSHIFT+RSHIFT+KEY`. Magic commands include turning on debugging messages (`MAGIC+D`) or temporarily toggling NKRO (`MAGIC+N`). - -`SLEEP_LED_ENABLE` - -Enables your LED to breath while your computer is sleeping. Timer1 is being used here. This feature is largely unused and untested, and needs updating/abstracting. - -`NKRO_ENABLE` - -This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if `NKRO_ENABLE` is set. NKRO can be forced by adding `#define FORCE_NKRO` to your config.h or by binding `MAGIC_TOGGLE_NKRO` to a key and then hitting the key. - -`BACKLIGHT_ENABLE` - -This enables your backlight on Timer1 and ports B5, B6, or B7 (for now). You can specify your port by putting this in your `config.h`: - - #define BACKLIGHT_PIN B7 - -`MIDI_ENABLE` - -This enables MIDI sending and receiving with your keyboard. To enter MIDI send mode, you can use the keycode `MI_ON`, and `MI_OFF` to turn it off. This is a largely untested feature, but more information can be found in the `quantum/quantum.c` file. - -`UNICODE_ENABLE` - -This allows you to send unicode symbols via `UC()` in your keymap. Only codes up to 0x7FFF are currently supported. - -`UNICODEMAP_ENABLE` - -This allows sending unicode symbols using `X()` in your keymap. Codes -up to 0xFFFFFFFF are supported, including emojis. You will need to maintain -a separate mapping table in your keymap file. - -Known limitations: -- Under Mac OS, only codes up to 0xFFFF are supported. -- Under Linux ibus, only codes up to 0xFFFFF are supported (but anything important is still under this limit for now). - -Characters out of range supported by the OS will be ignored. - -`BLUETOOTH_ENABLE` - -This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins. - -`AUDIO_ENABLE` - -This allows you output audio on the C6 pin (needs abstracting). See the [audio section](#driving-a-speaker---audio-support) for more information. - -`VARIABLE_TRACE` - -Use this to debug changes to variable values, see the [tracing variables](#tracing-variables) section for more information. - -`API_SYSEX_ENABLE` - -This enables using the Quantum SYSEX API to send strings (somewhere?) - -### Customizing Makefile options on a per-keymap basis - -If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard. - -So let's say your keyboard's makefile has `BACKLIGHT_ENABLE = yes` (or maybe doesn't even list the `BACKLIGHT_ENABLE` option, which would cause it to be off). You want your particular keymap to not have the debug console, so you make a file called `Makefile` and specify `BACKLIGHT_ENABLE = no`. - -You can use the `doc/keymap_makefile_example.md` as a template/starting point. - -## The `config.h` file - -There are 2 `config.h` locations: - -* keyboard (`/keyboards//`) -* keymap (`/keyboards//keymaps//`) - -The keyboard `config.h` is included only if the keymap one doesn't exist. The format to use for your custom one [is here](/doc/keymap_config_h_example.h). If you want to override a setting from the parent `config.h` file, you need to do this: - -```c -#undef MY_SETTING -#define MY_SETTING 4 -``` - -For a value of `4` for this imaginary setting. So we `undef` it first, then `define` it. - -You can then override any settings, rather than having to copy and paste the whole thing. - -# Going beyond the keycodes - -Aside from the [basic keycodes](doc/keycode.txt), your keymap can include shortcuts to common operations. - -## Quick aliases to common actions - -Your keymap can include shortcuts to common operations (called "function actions" in tmk). - -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/doc/keymap.md#2-action). - -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. - -### 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. - -`OSL(layer)` - momentary switch to *layer*, as a one-shot operation. So if you have a key that's defined as `OSL(1)`, and you tap that key, then only the very next keystroke would come from layer 1. You would drop back to layer zero immediately after that one keystroke. That's handy if you have a layer full of custom shortcuts -- for example, a dedicated key for closing a window. So you tap your one-shot layer mod, then tap that magic 'close window' key, and keep typing like a boss. Layer 1 would remain active as long as you hold that key down, too (so you can use it like a momentary toggle-layer key with extra powers). - -`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. - -`TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed). - - -### Fun with modifier keys - -* `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* -* `HYPR(kc)` - applies Hyper (all modifiers) to *kc* -* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc* -* `LCAG(kc)` - applies CtrlAltGui to *kc* - -You can also chain these, like this: - - 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 ! - KC_AT @ - KC_HASH # - KC_DLR $ - KC_PERC % - KC_CIRC ^ - KC_AMPR & - KC_ASTR * - KC_LPRN ( - KC_RPRN ) - KC_UNDS _ - KC_PLUS + - KC_DQUO " - KC_LCBR { - KC_RCBR } - KC_LABK < - KC_RABK > - KC_PIPE | - KC_COLN : - -`OSM(mod)` - this is a "one shot" modifier. So let's say you have your left Shift key defined as `OSM(MOD_LSFT)`. Tap it, let go, and Shift is "on" -- but only for the next character you'll type. So to write "The", you don't need to hold down Shift -- you tap it, tap t, and move on with life. And if you hold down the left Shift key, it just works as a left Shift key, as you would expect (so you could type THE). There's also a magical, secret way to "lock" a modifier by tapping it multiple times. If you want to learn more about that, open an issue. :) - -`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()` and `OSM()` (right-hand modifiers are not available for `MT()`): - - * MOD_LCTL - * MOD_LSFT - * MOD_LALT - * MOD_LGUI - * MOD_HYPR - * MOD_MEH - -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. - -We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact: - - * `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. 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/) - * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped - * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift. - -## Space Cadet Shift: The future, built in - -Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. - -To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. - -It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this: - - #define LSPO_KEY KC_9 - #define RSPC_KEY KC_0 - -You can also choose between different rollover behaviors of the shift keys by defining: - - #define DISABLE_SPACE_CADET_ROLLOVER - -in your `config.h`. Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event of an erroneous press instead of emitting a pair of parentheses when the keys are released. - -The only other thing you're going to want to do is create a `Makefile` in your keymap directory and set the following: - -``` -COMMAND_ENABLE = no # Commands for debug and configuration -``` - -This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time. - -## The Leader key: A new kind of modifier - -If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen. - -That's what `KC_LEAD` does. Here's an example: - -1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else. -2. Include the line `#define LEADER_TIMEOUT 300` somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course. -3. Within your `matrix_scan_user` function, do something like this: - -``` -LEADER_EXTERNS(); - -void matrix_scan_user(void) { - LEADER_DICTIONARY() { - leading = false; - leader_end(); - - SEQ_ONE_KEY(KC_F) { - register_code(KC_S); - unregister_code(KC_S); - } - SEQ_TWO_KEYS(KC_A, KC_S) { - register_code(KC_H); - unregister_code(KC_H); - } - SEQ_THREE_KEYS(KC_A, KC_S, KC_D) { - register_code(KC_LGUI); - register_code(KC_S); - unregister_code(KC_S); - unregister_code(KC_LGUI); - } - } -} -``` - -As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously. - -## Tap Dance: A single key can do 3, 5, or 100 different things - -Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how algernon describes the feature: - -With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter. - -To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap. - -With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be send first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly. - -The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time. - -But lets start with how to use it, first! - -First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array. - -This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options: - -* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held. -* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. -* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. - -The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. - -And that's the bulk of it! - -And now, on to the explanation of how it works! - -The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer. - -This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness. - -Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys. - -For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. - -### Examples - -Here's a simple example for a single definition: - -1. In your `makefile`, add `TAP_DANCE_ENABLE = yes` -2. In your `config.h` (which you can copy from `qmk_firmware/keyboards/planck/config.h` to your keymap directory), add `#define TAPPING_TERM 200` -3. In your `keymap.c` file, define the variables and definitions, then add to your keymap: - -```c -//Tap Dance Declarations -enum { - TD_ESC_CAPS = 0 -}; - -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) -// Other declarations would go here, separated by commas, if you have them -}; - -//In Layer declaration, add tap dance item in place of a key code -TD(TD_ESC_CAPS) -``` - -Here's a more complex example involving custom actions: - -```c -enum { - CT_SE = 0, - CT_CLN, - CT_EGG, - CT_FLSH, -}; - -/* Have the above three on the keymap, TD(CT_SE), etc... */ - -void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_RSFT); - register_code (KC_SCLN); - } else { - register_code (KC_SCLN); - } -} - -void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_RSFT); - unregister_code (KC_SCLN); - } else { - unregister_code (KC_SCLN); - } -} - -void dance_egg (qk_tap_dance_state_t *state, void *user_data) { - if (state->count >= 100) { - SEND_STRING ("Safety dance!"); - reset_tap_dance (state); - } -} - -// on each tap, light up one led, from right to left -// on the forth tap, turn them off from right to left -void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) { - switch (state->count) { - case 1: - ergodox_right_led_3_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - case 3: - ergodox_right_led_1_on(); - break; - case 4: - ergodox_right_led_3_off(); - _delay_ms(50); - ergodox_right_led_2_off(); - _delay_ms(50); - ergodox_right_led_1_off(); - } -} - -// on the fourth tap, set the keyboard on flash state -void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) { - if (state->count >= 4) { - reset_keyboard(); - reset_tap_dance(state); - } -} - -// if the flash state didnt happen, then turn off leds, left to right -void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) { - ergodox_right_led_1_off(); - _delay_ms(50); - ergodox_right_led_2_off(); - _delay_ms(50); - ergodox_right_led_3_off(); -} - -qk_tap_dance_action_t tap_dance_actions[] = { - [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) - ,[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset) - ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) - ,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset) -}; -``` - -## 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. - -## Prevent stuck modifiers - -Consider the following scenario: - -1. Layer 0 has a key defined as Shift. -2. The same key is defined on layer 1 as the letter A. -3. User presses Shift. -4. User switches to layer 1 for whatever reason. -5. User releases Shift, or rather the letter A. -6. User switches back to layer 0. - -Shift was actually never released and is still considered pressed. - -If such situation bothers you add this to your `config.h`: - - #define PREVENT_STUCK_MODIFIERS - -This option uses 5 bytes of memory per every 8 keys on the keyboard -rounded up (5 bits per key). For example on Planck (48 keys) it uses -(48/8)\*5 = 30 bytes. - -## 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 keymap_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 possible, but a bad idea. - -### Advanced macro functions - -To get more control over the keys/actions your keyboard takes, the following functions are available to you in the `action_get_macro` function block: - -* `record->event.pressed` - -This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is - -```c -if (record->event.pressed) { - // on keydown -} else { - // on keyup -} -``` - -* `register_code();` - -This sends the `` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`. - -* `unregister_code();` - -Parallel to `register_code` function, this sends the `` keyup event to the computer. If you don't use this, the key will be held down until it's sent. - -* `layer_on();` - -This will turn on the layer `` - the higher layer number will always take priority. Make sure you have `KC_TRNS` for the key you're pressing on the layer you're switching to, or you'll get stick there unless you have another plan. - -* `layer_off();` - -This will turn off the layer ``. - -* `clear_keyboard();` - -This will clear all mods and keys currently pressed. - -* `clear_mods();` - -This will clear all mods currently pressed. - -* `clear_keyboard_but_mods();` - -This will clear all keys besides the mods currently pressed. - -* `update_tri_layer(layer_1, layer_2, layer_3);` - -If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0). - -#### Naming your macros - -If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so: - -``` -#define AUD_OFF M(6) -#define AUD_ON M(7) -#define MUS_OFF M(8) -#define MUS_ON M(9) -#define VC_IN M(10) -#define VC_DE M(11) -#define PLOVER M(12) -#define EXT_PLV M(13) -``` - -As was done on the [Planck default keymap](/keyboards/planck/keymaps/default/keymap.c#L33-L40) - -#### Timer functionality - -It's possible to start timers and read values for time-specific events - here's an example: - -```c -static uint16_t key_timer; -key_timer = timer_read(); -if (timer_elapsed(key_timer) < 100) { - // do something if less than 100ms have passed -} else { - // do something if 100ms or more have passed -} -``` - -It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc). - -#### Example: Single-key copy/paste (hold to copy, tap to paste) - -With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held? - -Here's what you do: - - -``` -static uint16_t key_timer; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: { - if (record->event.pressed) { - key_timer = timer_read(); // if the key is being pressed, we start the timer. - } - else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). - if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. - return MACRO( D(LCTL), T(C), U(LCTL), END ); - } - else { - return MACRO( D(LCTL), T(V), U(LCTL), END ); - } - } - break; - } - } - return MACRO_NONE; -}; -``` - -And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste. - -## Dynamic macros: record and replay macros in runtime - -In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 64 keypresses (by default). - -To enable them, first add a new element to the `planck_keycodes` enum -- `DYNAMIC_MACRO_RANGE`: - - enum planck_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - PLOVER, - LOWER, - RAISE, - BACKLIT, - EXT_PLV, - DYNAMIC_MACRO_RANGE, - }; - -Afterwards create a new layer called `_DYN`: - - #define _DYN 6 /* almost any other free number should be ok */ - -Below these two modifications include the `dynamic_macro.h` header: - - #include "dynamic_macro.h"` - -Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_MACRO_PLAY1`,`DYN_REC_START2` and `DYN_MACRO_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. - - [_DYN]= { - {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} - }, - -Add the following code to the very beginning of your `process_record_user()` function: - - if (!process_record_dynamic_macro(keycode, record)) { - return false; - } - -To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `_DYN` layer button. The handler awaits specifically for the `MO(_DYN)` keycode as the "stop signal" so please don't use any fancy ways to access this layer, use the regular `MO()` modifier. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`. - -If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header). - -For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header. - -## 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 - -If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to: - - * `CM_*` for all of the Colemak-equivalent characters - * `DV_*` for all of the Dvorak-equivalent characters - -These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features. - -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 - -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 - -There are three Unicode keymap definition method available in QMK: - -### UNICODE_ENABLE - -Supports Unicode input up to 0xFFFF. The keycode function is `UC(n)` in -keymap file, where *n* is a 4 digit hexadecimal. - -### UNICODEMAP_ENABLE - -Supports Unicode up to 0xFFFFFFFF. You need to maintain a separate mapping -table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. -The keycode function is `X(n)` where *n* is the array index of the mapping -table. - -### UCIS_ENABLE - -TBD - -Unicode input in QMK works by inputing a sequence of characters to the OS, -sort of like macro. Unfortunately, each OS has different ideas on how Unicode is inputted. - -This is the current list of Unicode input method in QMK: - -* UC_OSX: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. -* UC_LNX: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. -* UC_WIN: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. -* UC_WINC: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. - -## Backlight Breathing - -In order to enable backlight breathing, the following line must be added to your config.h file. - - #define BACKLIGHT_BREATHING - -The following function calls are used to control the breathing effect. - -* ```breathing_enable()``` - Enable the free-running breathing effect. -* ```breathing_disable()``` - Disable the free-running breathing effect immediately. -* ```breathing_self_disable()``` - Disable the free-running breathing effect after the current effect ends. -* ```breathing_toggle()``` - Toggle the free-running breathing effect. -* ```breathing_defaults()``` - Reset the speed and brightness settings of the breathing effect. - -The following function calls are used to control the maximum brightness of the breathing effect. - -* ```breathing_intensity_set(value)``` - Set the brightness of the breathing effect when it is at its max value. -* ```breathing_intensity_default()``` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity. - -The following function calls are used to control the cycling speed of the breathing effect. - -* ```breathing_speed_set(value)``` - Set the speed of the breathing effect - how fast it cycles. -* ```breathing_speed_inc(value)``` - Increase the speed of the breathing effect by a fixed value. -* ```breathing_speed_dec(value)``` - Decrease the speed of the breathing effect by a fixed value. -* ```breathing_speed_default()``` - Reset the speed of the breathing effect to the default value. - -The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed: - - case MACRO_FUNCTION: - if (record->event.pressed) - { - breathing_speed_set(3); - breathing_enable(); - layer_on(LAYER_FUNCTION); - } - else - { - breathing_speed_set(1); - breathing_self_disable(); - layer_off(LAYER_FUNCTION); - } - break; - -The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed: - - case MACRO_RAISED: - if (record->event.pressed) - { - layer_on(LAYER_RAISED); - breathing_speed_set(2); - breathing_pulse(); - update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); - } - else - { - layer_off(LAYER_RAISED); - update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST); - } - break; - -## 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 -* `BL_ON` - turns the backlight on -* `BL_OFF` - turns the backlight off -* `BL_` - sets the backlight to level *n* -* `BL_INC` - increments the backlight level by one -* `BL_DEC` - decrements the backlight level by one -* `BL_TOGG` - toggles the backlight -* `BL_STEP` - steps through the backlight levels - -Enable the backlight from the Makefile. - -# Custom Quantum functions - -All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `/.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly. - -## `void matrix_init_*(void)` - -This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap. - -## `void matrix_scan_*(void)` - -This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot. - -## `bool process_record_*(uint16_t keycode, keyrecord_t *record)` - -This function gets called on every keypress/release, and is where you can define custom functionality. The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution. - -The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed. - -The `record` variable contains infomation about the actual press: - -``` -keyrecord_t record { - keyevent_t event { - keypos_t key { - uint8_t col - uint8_t row - } - bool pressed - uint16_t time - } -} -``` - -The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that. - -## `void led_set_*(uint8_t usb_led)` - -This gets called whenever there is a state change on your host LEDs (eg caps lock, scroll lock, etc). The LEDs are defined as: - -``` -#define USB_LED_NUM_LOCK 0 -#define USB_LED_CAPS_LOCK 1 -#define USB_LED_SCROLL_LOCK 2 -#define USB_LED_COMPOSE 3 -#define USB_LED_KANA 4 -``` - -and can be tested against the `usb_led` with a conditional like `if (usb_led & (1<` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below. - -## `/keyboards//config.h` - -The `USB Device descriptor parameter` block contains parameters are used to uniquely identify your keyboard, but they don't really matter to the machine. - -Your `MATRIX_ROWS` and `MATRIX_COLS` are the numbers of rows and cols in your keyboard matrix - this may be different than the number of actual rows and columns on your keyboard. There are some tricks you can pull to increase the number of keys in a given matrix, but most keyboards are pretty straight-forward. - -The `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` are the pins your MCU uses on each row/column. Your schematic (if you have one) will have this information on it, and the values will vary depending on your setup. This is one of the most important things to double-check in getting your keyboard setup correctly. - -For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the diodes in the `COL2ROW` position, but it's possible that they are in the other - people coming from EasyAVR often use `ROW2COL`. Nothing will function if this is incorrect. - -`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported. - -`BACKLIGHT_BREATHING` is a fancier backlight feature that adds breathing/pulsing/fading effects to the backlight. It uses the same timer as the normal backlight. These breathing effects must be called by code in your keymap. - -`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number. - -## `/keyboards//Makefile` - -The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`. - -``` -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 -``` - -At the bottom of the file, you'll find lots of features to turn on and off - all of these options should be set with `?=` to allow for the keymap overrides. `?=` only assigns if the variable was previously undefined. For the full documenation of these features, see the [Makefile options](#makefile-options). - -## `/keyboards//readme.md` - -This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well. This file will be rendered into a webpage at qmk.fm/keyboards//. - -## `/keyboards//.c` - -This is where all of the custom logic for your keyboard goes - you may not need to put anything in this file, since a lot of things are configured automatically. All of the `*_kb()` functions are defined here. If you modify them, remember to keep the calls to `*_user()`, or things in the keymaps might not work. You can read more about the functions [here](#custom-quantum-functions-for-keyboards-and-keymaps) - -## `/keyboards//.h` - -Here is where you can (optionally) define your `KEYMAP` function to remap your matrix into a more readable format. With ortholinear boards, this isn't always necessary, but it can help to accomodate the dead spots on your matrix, where there are keys that take up more than one space (2u, staggering, 6.25u, etc). The example shows the difference between the physical keys, and the matrix design: - -``` -#define KEYMAP( \ - k00, k01, k02, \ - k10, k11 \ -) \ -{ \ - { k00, k01, k02 }, \ - { k10, KC_NO, k11 }, \ -} -``` - -Each of the `kxx` variables needs to be unique, and usually follows the format `k`. You can place `KC_NO` where your dead keys are in your matrix. - -# Unit Testing - -If you are new to unit testing, then you can find many good resources on internet. However most of it is scattered around in small pieces here and there, and there's also many different opinions, so I won't give any recommendations. - -Instead I recommend these two books, explaining two different styles of Unit Testing in detail. - -* "Test Driven Development: By Example: Kent Beck" -* "Growing Object-Oriented Software, Guided By Tests: Steve Freeman, Nat Pryce" - -If you prefer videos there are Uncle Bob's [Clean Coders Videos](https://cleancoders.com/), which unfortunately cost quite a bit, especially if you want to watch many of them. But James Shore has a free [Let's Play](http://www.jamesshore.com/Blog/Lets-Play) video series. - -## Google Test and Google Mock -It's possible to Unit Test your code using [Google Test](https://github.com/google/googletest). The Google Test framework also includes another component for writing testing mocks and stubs, called "Google Mock". For information how to write the actual tests, please refer to the documentation on that site. - -## Use of C++ - -Note that Google Test and therefore any test has to be written in C++, even if the rest of the QMK codebases is written in C. This should hopefully not be a problem even if you don't know any C++, since there's quite clear documentation and examples of the required C++ features, and you can write the rest of the test code almost as you would write normal C. Note that some compiler errors which you might get can look quite scary, but just read carefully what it says, and you should be ok. - -One thing to remember, is that you have to append `extern "C"` around all of your C file includes. - -## Adding tests for new or existing features - -If you want to unit test some feature, then take a look at the existing serial_link tests, in the `quantum/serial_link/tests folder`, and follow the steps below to create a similar structure. - -1. If it doesn't already exist, add a test subfolder to the folder containing the feature. -2. Create a `testlist.mk` and a `rules.mk` file in that folder. -3. Include those files from the root folder `testlist.mk`and `build_test.mk` respectively. -4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the serial_link tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests. -5. Define the source files and required options in the `rules.mk` file. - * `_SRC` for source files - * `_DEFS` for additional defines - * `_INC` for additional include folders -6. Write the tests in a new cpp file inside the test folder you created. That file has to be one of the files included from the `rules.mk` file. - -Note how there's several different tests, each mocking out a separate part. Also note that each of them only compiles the very minimum that's needed for the tests. It's recommend that you try to do the same. For a relevant video check out [Matt Hargett "Advanced Unit Testing in C & C++](https://www.youtube.com/watch?v=Wmy6g-aVgZI) - -## Running the tests - -To run all the tests in the codebase, type `make test`. You can also run test matching a substring by typing `make test-matchingsubstring` Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer. - -## Debugging the tests - -If there are problems with the tests, you can find the executable in the `./build/test` folder. You should be able to run those with GDB or a similar debugger. - -## Full Integration tests - -It's not yet possible to do a full integration test, where you would compile the whole firmware and define a keymap that you are going to test. However there are plans for doing that, because writing tests that way would probably be easier, at least for people that are not used to unit testing. - -In that model you would emulate the input, and expect a certain output from the emulated keyboard. - -# Tracing variables - -Sometimes you might wonder why a variable gets changed and where, and this can be quite tricky to track down without having a debugger. It's of course possible to manually add print statements to track it, but you can also enable the variable trace feature. This works for both for variables that are changed by the code, and when the variable is changed by some memory corruption. - -To take the feature into use add `VARIABLE_TRACE=x` to the end of you make command. `x` represents the number of variables you want to trace, which is usually 1. - -Then at a suitable place in the code, call `ADD_TRACED_VARIABLE`, to begin the tracing. For example to trace all the layer changes, you can do this -```c -void matrix_init_user(void) { - ADD_TRACED_VARIABLE("layer", &layer_state, sizeof(layer_state)); -} -``` - -This will add a traced variable named "layer" (the name is just for your information), which tracks the memory location of `layer_state`. It tracks 4 bytes (the size of `layer_state`), so any modification to the variable will be reported. By default you can not specify a size bigger than 4, but you can change it by adding `MAX_VARIABLE_TRACE_SIZE=x` to the end of the make command line. - -In order to actually detect changes to the variables you should call `VERIFY_TRACED_VARIABLES` around the code that you think that modifies the variable. If a variable is modified it will tell you between which two `VERIFY_TRACED_VARIABLES` calls the modification happened. You can then add more calls to track it down further. I don't recommend spamming the codebase with calls. It's better to start with a few, and then keep adding them in a binary search fashion. You can also delete the ones you don't need, as each call need to store the file name and line number in the ROM, so you can run out of memory if you add too many calls. - -Also remember to delete all the tracing code ones you have found the bug, as you wouldn't want to create a pull request with tracing code. -- cgit v1.2.3 From 901f29e3aaa62879372c5957de131dd232cc1744 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 10 Dec 2016 04:08:08 +0700 Subject: The adafruit BLE C++ code requires -std=c++11 --- tmk_core/avr.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index b48173341a..5df539def5 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -26,7 +26,7 @@ CFLAGS += -fno-inline-small-functions CFLAGS += -fno-strict-aliasing CPPFLAGS += $(COMPILEFLAGS) -CPPFLAGS += -fno-exceptions +CPPFLAGS += -fno-exceptions -std=c++11 LDFLAGS +=-Wl,--gc-sections -- cgit v1.2.3 From dc4c8875ba2b961deb5d9712f422b00ce7c90979 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 10 Dec 2016 12:37:32 +0800 Subject: use thumb cluster key to toggle brackets layer --- keyboards/ergodox/keymaps/dvorak_programmer/README.md | 1 + keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md index 63896909cc..b667485410 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/README.md +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -12,6 +12,7 @@ Layers * KEY_SEL: same as above, but every movement shift-selects. * NUMBER: keypad layer. * SYMBOL: all the symbols as well as brackets at the bottom. +* BRACKET: special brackets-only layer for programming * SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps. * MOUSE: use mouse keys diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index 38359128f9..df8a2c33f3 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -58,12 +58,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( // layer 0 : default // left hand KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - LT(BRACKETS,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), + LT(MOUSE,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL), MO(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I, KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV), OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER), // thumb cluster - MO(MOUSE), RCTL(KC_S), + MO(BRACKETS), RCTL(KC_S), RCTL(KC_DEL), KC_BSPC,RCTL(KC_BSPC),KC_DEL, // right hand -- cgit v1.2.3 From a3c8949627c7b56a24e14c07141b7155dce46103 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 10 Dec 2016 12:52:59 +0800 Subject: readme updates --- keyboards/ergodox/keymaps/dvorak_programmer/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md index b667485410..3e4a2545b8 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/README.md +++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md @@ -11,7 +11,7 @@ Layers * KEY_NAV: arrow key movement with backward/forward word support, and copy/paste. * KEY_SEL: same as above, but every movement shift-selects. * NUMBER: keypad layer. -* SYMBOL: all the symbols as well as brackets at the bottom. +* SYMBOL: all the symbols. * BRACKET: special brackets-only layer for programming * SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps. * MOUSE: use mouse keys @@ -19,6 +19,9 @@ Layers Updates ------- +2016/12/10: +* toggle for brackets layer is now on left thumb cluster. + 2016/11/05: * removed brackets anywhere but in brackets layer * added mouse layer back in -- cgit v1.2.3 From 75d7eb9cb533e37d99852623e2a547d52ada9797 Mon Sep 17 00:00:00 2001 From: lucwastiaux Date: Sat, 10 Dec 2016 13:20:05 +0800 Subject: put home/end on thumb cluster --- keyboards/ergodox/keymaps/dvorak_programmer/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c index df8a2c33f3..f3d02f688d 100644 --- a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c +++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, TD(TD_SHIFT_CAPSLOCK), // lower keys - browser tab control - RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), RCTL(KC_K), RCTL(KC_W), + RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W), // thumb cluster - LALT(KC_LEFT),LALT(KC_RIGHT), + KC_HOME,KC_END, KC_UP, KC_DOWN,KC_ENT, KC_SPC ), -- cgit v1.2.3 From 434b28603253066a2aa2fd74177121f0981577fb Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 10 Dec 2016 19:40:44 +0700 Subject: Allow negative values for mouse movements --- tmk_core/protocol/lufa/adafruit_ble.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/lufa/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp index 37194e77a9..fd6edd42cf 100644 --- a/tmk_core/protocol/lufa/adafruit_ble.cpp +++ b/tmk_core/protocol/lufa/adafruit_ble.cpp @@ -86,7 +86,7 @@ struct queue_item { uint16_t consumer; struct __attribute__((packed)) { - uint8_t x, y, scroll, pan; + int8_t x, y, scroll, pan; } mousemove; }; }; -- cgit v1.2.3 From a6db20e518104c7f98d947e8570cfa80c69509d6 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 10 Dec 2016 21:08:22 +0700 Subject: Remove unneeded options to reduce firmware size --- keyboards/planck/keymaps/priyadi/Makefile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile index f113f496c2..d9d4f3d1d7 100644 --- a/keyboards/planck/keymaps/priyadi/Makefile +++ b/keyboards/planck/keymaps/priyadi/Makefile @@ -1,8 +1,3 @@ -# Please remove if no longer applicable -$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD) -$(warning Please disable some options in the Makefile to resolve) - - # Build Options # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically @@ -11,7 +6,7 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls @@ -20,6 +15,7 @@ UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes # Unicode map BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +API_SYSEX_ENABLE = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -- cgit v1.2.3 From 56515ba5034e83c598891686cfdc43c186e5d487 Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 10 Dec 2016 23:13:36 -0500 Subject: changed svg to support proto pcb --- keyboards/lets_split/imgs/letssplitv2.svg | 956 +++++++++++++++--------------- 1 file changed, 482 insertions(+), 474 deletions(-) diff --git a/keyboards/lets_split/imgs/letssplitv2.svg b/keyboards/lets_split/imgs/letssplitv2.svg index c7bb1db86c..bf1e2756d4 100644 --- a/keyboards/lets_split/imgs/letssplitv2.svg +++ b/keyboards/lets_split/imgs/letssplitv2.svg @@ -22,7 +22,7 @@ style="display:inline">image/svg+xml \ No newline at end of file + style="fill:none;stroke:#0000ff;stroke-width:0.35433071;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> \ No newline at end of file -- cgit v1.2.3 From 7bc1caa21cc9f67176b3dedbcbe68faeccd88003 Mon Sep 17 00:00:00 2001 From: climbalima Date: Sat, 10 Dec 2016 23:18:46 -0500 Subject: changed svg after merge --- keyboards/lets_split/imgs/letssplitv2.svg | 940 +++++++++++++++--------------- 1 file changed, 470 insertions(+), 470 deletions(-) diff --git a/keyboards/lets_split/imgs/letssplitv2.svg b/keyboards/lets_split/imgs/letssplitv2.svg index bf1e2756d4..ce80db7269 100644 --- a/keyboards/lets_split/imgs/letssplitv2.svg +++ b/keyboards/lets_split/imgs/letssplitv2.svg @@ -549,9 +549,9 @@ bordercolor="#666666" pagecolor="#ffffff" id="base" - inkscape:zoom="11.23952" - inkscape:cx="326.81737" - inkscape:cy="112.75887" + inkscape:zoom="1.1519406" + inkscape:cx="274.80199" + inkscape:cy="339.22443" inkscape:window-x="0" inkscape:window-y="0" inkscape:current-layer="g21-5" @@ -3946,1515 +3946,1515 @@ id="g21" inkscape:label="0" transform="matrix(0.8,0,0,0.8,-113.89464,-481.88053)" - style="stroke:#0000ff;stroke-opacity:1;stroke-width:0.35433071;stroke-miterlimit:4;stroke-dasharray:none"> \ No newline at end of file + style="display:inline;fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> \ No newline at end of file -- cgit v1.2.3 From 0edfe55bfe4afd037918ff73e49552a28f39a5ca Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 12 Dec 2016 15:39:07 -0500 Subject: re-enable audio and extrakeys --- keyboards/planck/keymaps/default/Makefile | 2 +- keyboards/preonic/rules.mk | 6 +++--- quantum/audio/voices.c | 23 ++++++++++++++++++++++- quantum/audio/voices.h | 1 + 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/keyboards/planck/keymaps/default/Makefile b/keyboards/planck/keymaps/default/Makefile index 267a087ea9..17487ebbfc 100644 --- a/keyboards/planck/keymaps/default/Makefile +++ b/keyboards/planck/keymaps/default/Makefile @@ -10,7 +10,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk index c4ce2aacca..071bfdc7fe 100644 --- a/keyboards/preonic/rules.mk +++ b/keyboards/preonic/rules.mk @@ -56,11 +56,11 @@ BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +COMMAND_ENABLE ?= no # Commands for debug and configuration NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 +MIDI_ENABLE ?= yes # MIDI controls +AUDIO_ENABLE ?= yes # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c index 6d4172a06c..19f7b646ef 100644 --- a/quantum/audio/voices.c +++ b/quantum/audio/voices.c @@ -18,7 +18,7 @@ void voice_iterate() { } void voice_deiterate() { - voice = (voice - 1) % number_of_voices; + voice = (voice - 1 + number_of_voices) % number_of_voices; } float voice_envelope(float frequency) { @@ -31,6 +31,27 @@ float voice_envelope(float frequency) { polyphony_rate = 0; break; + case something: + polyphony_rate = 0; + switch (compensated_index) { + case 0 ... 9: + note_timbre = TIMBRE_12; + break; + + case 10 ... 19: + note_timbre = TIMBRE_25; + break; + + case 20 ... 200: + note_timbre = .25 + .125 + pow(((float)compensated_index - 20) / (200 - 20), 2)*.125; + break; + + default: + note_timbre = .25; + break; + } + break; + case butts_fader: polyphony_rate = 0; switch (compensated_index) { diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h index b2495b23b5..b43def3d7d 100644 --- a/quantum/audio/voices.h +++ b/quantum/audio/voices.h @@ -11,6 +11,7 @@ float voice_envelope(float frequency); typedef enum { default_voice, + something, butts_fader, octave_crunch, duty_osc, -- cgit v1.2.3 From ae95834f5af7404c04e6fe3446019046278d814b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 12 Dec 2016 16:06:41 -0500 Subject: specialise music variables --- quantum/process_keycode/process_music.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 2d52e47a72..bae43943e0 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -1,8 +1,8 @@ #include "process_music.h" bool music_activated = false; -uint8_t starting_note = 0x0C; -int offset = 7; +uint8_t music_starting_note = 0x0C; +int music_offset = 7; // music sequencer static bool music_sequence_recording = false; @@ -115,7 +115,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { return false; } - float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)); + float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); if (record->event.pressed) { play_note(freq, 0xF); if (music_sequence_recording) { -- cgit v1.2.3